From 11ec9d5d14058cfac706da7c9de3e432894e718b Mon Sep 17 00:00:00 2001 From: ManDude <7569514+ManDude@users.noreply.github.com> Date: Thu, 29 Sep 2022 19:10:58 +0100 Subject: [PATCH 01/10] write a function that outputs a `dot` graph of the jak 2 tasks (#1932) --- goal_src/jak2/examples/debug-jak2.gc | 82 +++++++++++++++++++++++++++- 1 file changed, 81 insertions(+), 1 deletion(-) diff --git a/goal_src/jak2/examples/debug-jak2.gc b/goal_src/jak2/examples/debug-jak2.gc index 46481b56ba..1361979a98 100644 --- a/goal_src/jak2/examples/debug-jak2.gc +++ b/goal_src/jak2/examples/debug-jak2.gc @@ -244,4 +244,84 @@ ) ) proc) - ) \ No newline at end of file + ) + +(defun levelname->x11-color ((name symbol)) + (case name + (('city) "khaki") + (('fortress) "salmon") + (('stadium) "yellow") + (('palace) "hotpink") + (('castle) "gray") + (('ruins) "darkkhaki") + (('atoll) "gold") + (('sewer) "turquoise") + (('strip) "white") + (('mountain) "tan") + (('forest) "limegreen") + (('drill) "seagreen") + (('tomb) "chartreuse") + (('dig) "orange") + (('canyon) "#008B8B") + (('consite) "#90EE90") + (('under) "dodgerblue") + (('nest) "violet") + (('default) "white") + (('test) "purple") + (else "magenta") + ) + ) + +(defun print-task-node-tree-graphviz () + + (format #t "digraph G {~%") + (format #t " node [style=filled shape=ellipse]~%~%") + (let ((game-tasks (-> *game-info* play-list))) + (dotimes (t (-> game-tasks length)) + (let ((task (-> game-tasks t))) + (format #t " subgraph cluster_task_~D {~%" t) + (format #t " label = ~A;~%" (-> task name)) + (format #t " style = filled;~%") + (format #t " fontsize = \"25pt\";~%") + (cond + ((and (>= t (game-task fortress-escape)) + (<= t (game-task nest-boss)) + (!= t (game-task city-blue-gun-training)) + (!= t (game-task city-dark-gun-training))) + (format #t " fillcolor = lightgray;~%") + ) + ((and (>= t (game-task city-burning-bush-ring-1)) + (<= t (game-task stadium-burning-bush-race-class1-r))) + (format #t " fillcolor = pink;~%") + ) + (else + (format #t " fillcolor = lightyellow;~%") + ) + ) + (let ((game-nodes (-> *game-info* sub-task-list))) + (dotimes (i (-> game-nodes length)) + (let ((node (-> game-nodes i))) + (when (= t (-> node task)) + ;; iterate through parents + (dotimes (ii 4) + (when (!= (game-task-node none) (-> node parent-node ii)) + (format #t " ~A -> ~A;~%" (game-task-node->string (-> node parent-node ii)) (-> node name)) + ) + ) + (format #t " ~A [fillcolor=~A shape=~S];~%" (-> node name) (levelname->x11-color (-> node level)) + (cond + ((logtest? (-> node flags) (game-task-node-flag close-task)) + "oval") + (else + "box"))) + ) + ) + ) + (format #t " }~%") + ) + ) + ) + ) + (format #t "}~%") + 0) + From 4e48ba21c1a0ee97492708120cc2e824764dbc94 Mon Sep 17 00:00:00 2001 From: ManDude <7569514+ManDude@users.noreply.github.com> Date: Fri, 30 Sep 2022 23:26:52 +0100 Subject: [PATCH 02/10] [decompiler] make `(not (logtest?` work (#1934) --- decompiler/IR2/FormExpressionAnalysis.cpp | 124 +++++++++--------- .../jak1/engine/ambient/ambient_REF.gc | 2 +- .../reference/jak1/engine/anim/aligner_REF.gc | 4 +- .../reference/jak1/engine/anim/joint_REF.gc | 4 +- .../jak1/engine/camera/cam-combiner_REF.gc | 2 +- .../jak1/engine/camera/cam-layout_REF.gc | 8 +- .../jak1/engine/camera/cam-master_REF.gc | 6 +- .../jak1/engine/camera/cam-states-dbg_REF.gc | 4 +- .../jak1/engine/camera/cam-states_REF.gc | 26 ++-- .../jak1/engine/camera/camera_REF.gc | 2 +- .../collide/collide-reaction-target_REF.gc | 6 +- .../jak1/engine/debug/anim-tester_REF.gc | 22 ++-- .../reference/jak1/engine/debug/menu_REF.gc | 2 +- .../jak1/engine/draw/drawable-tree_REF.gc | 2 +- .../jak1/engine/draw/drawable_REF.gc | 10 +- .../jak1/engine/draw/process-drawable_REF.gc | 6 +- .../jak1/engine/entity/entity_REF.gc | 8 +- .../jak1/engine/game/collectables-part_REF.gc | 6 +- .../jak1/engine/game/collectables_REF.gc | 8 +- .../jak1/engine/game/game-info_REF.gc | 2 +- .../jak1/engine/game/generic-obs_REF.gc | 8 +- .../jak1/engine/game/powerups_REF.gc | 4 +- .../jak1/engine/game/projectiles_REF.gc | 6 +- .../jak1/engine/game/settings_REF.gc | 2 +- .../engine/game/task/process-taskable_REF.gc | 2 +- .../jak1/engine/game/voicebox_REF.gc | 2 +- .../engine/gfx/generic/generic-merc_REF.gc | 2 +- .../jak1/engine/gfx/hw/display_REF.gc | 2 +- .../jak1/engine/gfx/merc/merc_REF.gc | 2 +- .../reference/jak1/engine/gfx/ripple_REF.gc | 2 +- .../jak1/engine/gfx/water/water_REF.gc | 24 ++-- .../jak1/engine/level/load-boundary_REF.gc | 4 +- .../reference/jak1/engine/load/decomp_REF.gc | 2 +- .../reference/jak1/engine/load/loader_REF.gc | 2 +- .../reference/jak1/engine/nav/navigate_REF.gc | 14 +- .../reference/jak1/engine/nav/path_REF.gc | 4 +- .../reference/jak1/engine/ps2/pad_REF.gc | 2 +- .../sparticle/sparticle-launcher_REF.gc | 10 +- .../jak1/engine/target/logic-target_REF.gc | 32 ++--- .../jak1/engine/target/target-death_REF.gc | 16 +-- .../jak1/engine/target/target-handler_REF.gc | 14 +- .../jak1/engine/target/target-util_REF.gc | 37 +++--- .../jak1/engine/target/target2_REF.gc | 43 +++--- .../jak1/engine/target/target_REF.gc | 35 +++-- .../jak1/engine/ui/hud-classes_REF.gc | 2 +- .../reference/jak1/kernel/gcommon_REF.gc | 4 +- .../reference/jak1/kernel/gkernel_REF.gc | 4 +- .../jak1/levels/beach/beach-obs_REF.gc | 12 +- .../jak1/levels/beach/lurkercrab_REF.gc | 2 +- .../jak1/levels/beach/seagull_REF.gc | 8 +- .../levels/common/battlecontroller_REF.gc | 2 +- .../jak1/levels/common/nav-enemy_REF.gc | 14 +- .../jak1/levels/common/ropebridge_REF.gc | 2 +- .../jak1/levels/common/sharkey_REF.gc | 4 +- .../jak1/levels/finalboss/final-door_REF.gc | 2 +- .../jak1/levels/finalboss/light-eco_REF.gc | 2 +- .../levels/finalboss/robotboss-misc_REF.gc | 2 +- .../jak1/levels/finalboss/robotboss_REF.gc | 4 +- .../levels/flut_common/target-flut_REF.gc | 30 ++--- .../jak1/levels/jungle/darkvine_REF.gc | 2 +- .../jak1/levels/jungle/hopper_REF.gc | 4 +- .../jak1/levels/jungle/jungle-mirrors_REF.gc | 4 +- .../jak1/levels/lavatube/lavatube-obs_REF.gc | 4 +- .../levels/maincave/driller-lurker_REF.gc | 4 +- .../jak1/levels/maincave/gnawer_REF.gc | 2 +- .../jak1/levels/maincave/mother-spider_REF.gc | 6 +- .../jak1/levels/misty/bonelurker_REF.gc | 2 +- .../jak1/levels/misty/mistycannon_REF.gc | 10 +- .../collide-reaction-racer_REF.gc | 4 +- .../levels/racer_common/racer-part_REF.gc | 2 +- .../levels/racer_common/racer-states_REF.gc | 5 +- .../levels/racer_common/target-racer_REF.gc | 9 +- .../rolling/rolling-lightning-mole_REF.gc | 2 +- .../jak1/levels/snow/snow-bunny_REF.gc | 2 +- .../jak1/levels/snow/snow-flutflut-obs_REF.gc | 2 +- .../jak1/levels/snow/snow-ram-boss_REF.gc | 8 +- .../reference/jak1/levels/sunken/bully_REF.gc | 4 +- .../jak1/levels/sunken/helix-water_REF.gc | 2 +- .../jak1/levels/sunken/orbit-plat_REF.gc | 2 +- .../jak1/levels/sunken/puffer_REF.gc | 8 +- .../jak1/levels/sunken/qbert-plat_REF.gc | 2 +- .../jak1/levels/sunken/sunken-pipegame_REF.gc | 2 +- .../jak1/levels/sunken/target-tube_REF.gc | 4 +- .../jak1/levels/village1/village-obs_REF.gc | 2 +- .../levels/village_common/villagep-obs_REF.gc | 4 +- .../reference/jak2/engine/anim/aligner_REF.gc | 8 +- .../jak2/engine/anim/joint-mod_REF.gc | 18 +-- .../reference/jak2/engine/anim/joint_REF.gc | 4 +- .../jak2/engine/camera/cam-combiner_REF.gc | 2 +- .../jak2/engine/camera/cam-layout_REF.gc | 8 +- .../jak2/engine/camera/cam-states-dbg_REF.gc | 4 +- .../jak2/engine/camera/cam-states_REF.gc | 30 ++--- .../jak2/engine/camera/camera_REF.gc | 2 +- .../jak2/engine/debug/editable-player_REF.gc | 2 +- .../jak2/engine/debug/editable_REF.gc | 4 +- .../reference/jak2/engine/debug/menu_REF.gc | 2 +- .../engine/debug/nav/mysql-nav-graph_REF.gc | 8 +- .../jak2/engine/draw/drawable-tree_REF.gc | 2 +- .../jak2/engine/entity/entity_REF.gc | 26 ++-- .../jak2/engine/game/game-info_REF.gc | 2 +- .../jak2/engine/game/settings_REF.gc | 4 +- .../jak2/engine/game/task/task-control_REF.gc | 24 ++-- .../jak2/engine/geometry/path_REF.gc | 6 +- .../particles/sparticle-launcher_REF.gc | 6 +- .../gfx/sprite/particles/sparticle_REF.gc | 2 +- .../reference/jak2/engine/load/loader_REF.gc | 2 +- .../reference/jak2/engine/math/math_REF.gc | 2 +- .../reference/jak2/engine/ps2/pad_REF.gc | 2 +- .../reference/jak2/engine/ps2/timer_REF.gc | 2 +- .../jak2/engine/target/board/board-h_REF.gc | 10 +- .../engine/target/board/board-states_REF.gc | 22 ++-- .../engine/target/board/board-util_REF.gc | 8 +- .../engine/target/board/target-board_REF.gc | 17 +-- .../jak2/engine/target/gun/gun-h_REF.gc | 12 +- .../jak2/engine/target/logic-target_REF.gc | 26 ++-- .../jak2/engine/target/target_REF.gc | 49 ++++--- .../reference/jak2/kernel/gcommon_REF.gc | 6 +- .../reference/jak2/kernel/gkernel_REF.gc | 4 +- test/decompiler/test_FormExpressionBuild.cpp | 2 +- .../test_FormExpressionBuildLong.cpp | 2 +- 120 files changed, 510 insertions(+), 541 deletions(-) diff --git a/decompiler/IR2/FormExpressionAnalysis.cpp b/decompiler/IR2/FormExpressionAnalysis.cpp index f437ca6240..d57b651fb9 100644 --- a/decompiler/IR2/FormExpressionAnalysis.cpp +++ b/decompiler/IR2/FormExpressionAnalysis.cpp @@ -4431,66 +4431,6 @@ FormElement* try_make_nonzero_logtest(Form* in, FormPool& pool) { } return nullptr; } -} // namespace - -FormElement* ConditionElement::make_zero_check_generic(const Env& env, - FormPool& pool, - const std::vector& source_forms, - const std::vector& source_types) { - // (zero? (+ thing small-integer)) -> (= thing (- small-integer)) - ASSERT(source_forms.size() == 1); - - auto enum_type_info = env.dts->ts.try_enum_lookup(source_types.at(0)); - if (enum_type_info && !enum_type_info->is_bitfield()) { - // (zero? (+ (the-as uint arg0) (the-as uint -2))) check enum value - auto mr = match( - Matcher::op(GenericOpMatcher::fixed(FixedOperatorKind::ADDITION), - {make_int_uint_cast_matcher(Matcher::any(0)), - Matcher::match_or({Matcher::any_integer(1), - make_int_uint_cast_matcher(Matcher::any_integer(1))})}), - source_forms.at(0)); - if (mr.matched) { - s64 value = mr.maps.ints.at(1); - value = -value; - auto enum_constant = cast_to_int_enum(enum_type_info, pool, env, value); - return pool.alloc_element( - GenericOperator::make_fixed(FixedOperatorKind::EQ), - std::vector{mr.maps.forms.at(0), enum_constant}); - } - } - - { - auto mr = match(Matcher::op(GenericOpMatcher::fixed(FixedOperatorKind::ADDITION), - {Matcher::any(0), Matcher::any_integer(1)}), - source_forms.at(0)); - if (mr.matched) { - s64 value = -mr.maps.ints.at(1); - auto value_form = pool.form(SimpleAtom::make_int_constant(value)); - return pool.alloc_element( - GenericOperator::make_fixed(FixedOperatorKind::EQ), - std::vector{mr.maps.forms.at(0), value_form}); - } - } - - auto nice_constant = try_make_constant_from_int_for_compare(0, source_types.at(0), pool, env); - if (nice_constant) { - return pool.alloc_element( - GenericOperator::make_fixed(FixedOperatorKind::EQ), - std::vector{source_forms.at(0), nice_constant}); - } - - /* - auto as_logtest = try_make_nonzero_logtest(source_forms.at(0), pool); - if (as_logtest) { - auto logtest_form = pool.alloc_single_form(nullptr, as_logtest); - auto not_form = pool.alloc_element( - GenericOperator::make_compare(IR2_Condition::Kind::FALSE), logtest_form); - return not_form; - } - */ - - return pool.alloc_element(GenericOperator::make_compare(m_kind), source_forms); -} FormElement* try_make_logtest_cpad_macro(Form* in, FormPool& pool) { /* @@ -4546,6 +4486,68 @@ FormElement* try_make_logtest_cpad_macro(Form* in, FormPool& pool) { } return nullptr; } +} // namespace + +FormElement* ConditionElement::make_zero_check_generic(const Env& env, + FormPool& pool, + const std::vector& source_forms, + const std::vector& source_types) { + // (zero? (+ thing small-integer)) -> (= thing (- small-integer)) + ASSERT(source_forms.size() == 1); + + auto enum_type_info = env.dts->ts.try_enum_lookup(source_types.at(0)); + if (enum_type_info && !enum_type_info->is_bitfield()) { + // (zero? (+ (the-as uint arg0) (the-as uint -2))) check enum value + auto mr = match( + Matcher::op(GenericOpMatcher::fixed(FixedOperatorKind::ADDITION), + {make_int_uint_cast_matcher(Matcher::any(0)), + Matcher::match_or({Matcher::any_integer(1), + make_int_uint_cast_matcher(Matcher::any_integer(1))})}), + source_forms.at(0)); + if (mr.matched) { + s64 value = mr.maps.ints.at(1); + value = -value; + auto enum_constant = cast_to_int_enum(enum_type_info, pool, env, value); + return pool.alloc_element( + GenericOperator::make_fixed(FixedOperatorKind::EQ), + std::vector{mr.maps.forms.at(0), enum_constant}); + } + } + + { + auto mr = match(Matcher::op(GenericOpMatcher::fixed(FixedOperatorKind::ADDITION), + {Matcher::any(0), Matcher::any_integer(1)}), + source_forms.at(0)); + if (mr.matched) { + s64 value = -mr.maps.ints.at(1); + auto value_form = pool.form(SimpleAtom::make_int_constant(value)); + return pool.alloc_element( + GenericOperator::make_fixed(FixedOperatorKind::EQ), + std::vector{mr.maps.forms.at(0), value_form}); + } + } + + auto nice_constant = try_make_constant_from_int_for_compare(0, source_types.at(0), pool, env); + if (nice_constant) { + return pool.alloc_element( + GenericOperator::make_fixed(FixedOperatorKind::EQ), + std::vector{source_forms.at(0), nice_constant}); + } + + auto as_logtest = try_make_nonzero_logtest(source_forms.at(0), pool); + if (as_logtest) { + auto logtest_form = pool.alloc_single_form(nullptr, as_logtest); + auto as_cpad_macro = try_make_logtest_cpad_macro(logtest_form, pool); + if (as_cpad_macro) { + logtest_form = pool.alloc_single_form(nullptr, as_cpad_macro); + } + auto not_form = pool.alloc_element( + GenericOperator::make_compare(IR2_Condition::Kind::FALSE), logtest_form); + return not_form; + } + + return pool.alloc_element(GenericOperator::make_compare(m_kind), source_forms); +} FormElement* ConditionElement::make_nonzero_check_generic(const Env& env, FormPool& pool, @@ -5744,7 +5746,7 @@ void ConditionalMoveFalseElement::push_to_stack(const Env& env, FormPool& pool, Form* val = nullptr; - if (!val && on_zero) { + if (on_zero) { auto as_logtest = try_make_nonzero_logtest(popped.at(1), pool); if (as_logtest) { auto logtest_form = pool.alloc_single_form(nullptr, as_logtest); diff --git a/test/decompiler/reference/jak1/engine/ambient/ambient_REF.gc b/test/decompiler/reference/jak1/engine/ambient/ambient_REF.gc index 5decd98708..2198370975 100644 --- a/test/decompiler/reference/jak1/engine/ambient/ambient_REF.gc +++ b/test/decompiler/reference/jak1/engine/ambient/ambient_REF.gc @@ -231,7 +231,7 @@ ) (and *target* (!= (-> *target* next-state name) 'target-look-around) - (zero? (logand (-> *target* state-flags) (state-flags being-attacked dying))) + (not (logtest? (-> *target* state-flags) (state-flags being-attacked dying))) (= *master-mode* 'game) ) ) diff --git a/test/decompiler/reference/jak1/engine/anim/aligner_REF.gc b/test/decompiler/reference/jak1/engine/anim/aligner_REF.gc index 529c8b5465..6e776246d6 100644 --- a/test/decompiler/reference/jak1/engine/anim/aligner_REF.gc +++ b/test/decompiler/reference/jak1/engine/anim/aligner_REF.gc @@ -129,7 +129,7 @@ ;; definition for method 10 of type align-control (defmethod align! align-control ((obj align-control) (arg0 align-opts) (arg1 float) (arg2 float) (arg3 float)) - (when (zero? (logand (-> obj flags) (align-flags disabled))) + (when (not (logtest? (-> obj flags) (align-flags disabled))) (let* ((a0-1 (-> obj process)) (t9-0 (method-of-object a0-1 apply-alignment)) (v1-4 (-> obj delta)) @@ -161,7 +161,7 @@ ;; definition for method 11 of type align-control (defmethod align-vel-and-quat-only! align-control ((obj align-control) (arg0 align-opts) (arg1 vector) (arg2 int) (arg3 float) (arg4 float)) - (when (zero? (logand (-> obj flags) (align-flags disabled))) + (when (not (logtest? (-> obj flags) (align-flags disabled))) (let ((s5-0 (-> obj delta))) (let ((s3-0 (-> obj process root transv))) (if (logtest? arg0 (align-opts adjust-y-vel)) diff --git a/test/decompiler/reference/jak1/engine/anim/joint_REF.gc b/test/decompiler/reference/jak1/engine/anim/joint_REF.gc index 1999e4451b..814afae408 100644 --- a/test/decompiler/reference/jak1/engine/anim/joint_REF.gc +++ b/test/decompiler/reference/jak1/engine/anim/joint_REF.gc @@ -976,7 +976,7 @@ (v0-0 (the-as object (-> arg0 data arg2 data))) ) (cond - ((zero? (logand (-> arg0 fixed hdr matrix-bits) 1)) + ((not (logtest? (-> arg0 fixed hdr matrix-bits) 1)) (set! v1-1 (cond ((zero? arg1) (return (the-as matrix v1-1)) @@ -995,7 +995,7 @@ (set! v0-0 (-> (the-as (inline-array vector) v0-0) 4)) ) ) - (if (zero? (logand (-> arg0 fixed hdr matrix-bits) 2)) + (if (not (logtest? (-> arg0 fixed hdr matrix-bits) 2)) (return (the-as matrix v1-1)) ) (the-as matrix v0-0) diff --git a/test/decompiler/reference/jak1/engine/camera/cam-combiner_REF.gc b/test/decompiler/reference/jak1/engine/camera/cam-combiner_REF.gc index 4322eb95a6..4e5940d44d 100644 --- a/test/decompiler/reference/jak1/engine/camera/cam-combiner_REF.gc +++ b/test/decompiler/reference/jak1/engine/camera/cam-combiner_REF.gc @@ -163,7 +163,7 @@ :code (behavior () (local-vars (sv-160 cam-rotation-tracker)) (loop - (when (and (zero? (logand (-> *camera* master-options) 2)) (!= (-> self tracking-status) 0)) + (when (and (not (logtest? (-> *camera* master-options) 2)) (!= (-> self tracking-status) 0)) (set! (-> self tracking-status) (the-as uint 0)) 0 ) diff --git a/test/decompiler/reference/jak1/engine/camera/cam-layout_REF.gc b/test/decompiler/reference/jak1/engine/camera/cam-layout_REF.gc index f29a75da33..08a6442c14 100644 --- a/test/decompiler/reference/jak1/engine/camera/cam-layout_REF.gc +++ b/test/decompiler/reference/jak1/engine/camera/cam-layout_REF.gc @@ -2609,7 +2609,7 @@ ) (format arg0 ": on") ) - ((zero? (logand ((method-of-type res-lump get-property-value) + ((not (logtest? ((method-of-type res-lump get-property-value) (-> self cam-entity) (the-as symbol arg2) 'exact @@ -2620,7 +2620,7 @@ ) s5-0 ) - ) + ) (format arg0 ": off(maya)") ) (else @@ -3558,13 +3558,13 @@ ((and (logtest? (-> arg0 options) 8) (logtest? (-> *cpad-list* cpads 0 button0-abs 0) (-> arg0 button))) #f ) - ((and (zero? (logand (-> arg0 options) 12)) + ((and (not (logtest? (-> arg0 options) 12)) (logtest? (-> arg0 options) 1) (zero? (logand (-> *cpad-list* cpads 0 button0-rel 0) (-> arg0 button))) ) #f ) - ((and (zero? (logand (-> arg0 options) 13)) + ((and (not (logtest? (-> arg0 options) 13)) (zero? (logand (-> *cpad-list* cpads 0 button0-abs 0) (-> arg0 button))) ) #f diff --git a/test/decompiler/reference/jak1/engine/camera/cam-master_REF.gc b/test/decompiler/reference/jak1/engine/camera/cam-master_REF.gc index ef03a8c91d..837fdca534 100644 --- a/test/decompiler/reference/jak1/engine/camera/cam-master_REF.gc +++ b/test/decompiler/reference/jak1/engine/camera/cam-master_REF.gc @@ -96,7 +96,7 @@ (else (set! (-> self attack-start) (-> *display* base-frame-counter)) (set! (-> self being-attacked) #t) - (when (and (zero? (logand (-> self master-options) 64)) + (when (and (not (logtest? (-> self master-options) 64)) (or (!= (-> last-try-to-look-at-data horz) 0.0) (!= (-> last-try-to-look-at-data vert) 0.0)) ) (set! (-> self string-max target y) (fmax (-> self string-max target y) (-> last-try-to-look-at-data vert))) @@ -326,7 +326,7 @@ (set! (-> self attack-start) (-> *display* base-frame-counter)) ) (set! (-> self being-attacked) #t) - (when (and (zero? (logand (-> self master-options) 64)) + (when (and (not (logtest? (-> self master-options) 64)) (or (!= (-> last-try-to-look-at-data horz) 0.0) (!= (-> last-try-to-look-at-data vert) 0.0)) ) (set! (-> self string-max target y) (fmax (-> self string-max target y) (-> last-try-to-look-at-data vert))) @@ -488,7 +488,7 @@ ) ) ) - (if (zero? (logand (-> self slave-options) 16)) + (if (not (logtest? (-> self slave-options) 16)) (reset-follow) ) (let ((v1-196 (-> *target* water flags))) diff --git a/test/decompiler/reference/jak1/engine/camera/cam-states-dbg_REF.gc b/test/decompiler/reference/jak1/engine/camera/cam-states-dbg_REF.gc index a90c4e5b41..df3b2cd1b2 100644 --- a/test/decompiler/reference/jak1/engine/camera/cam-states-dbg_REF.gc +++ b/test/decompiler/reference/jak1/engine/camera/cam-states-dbg_REF.gc @@ -311,8 +311,8 @@ ) (when *display-load-boundaries* (when (and (!= arg3 1) - (zero? (logand (-> *cpad-list* cpads 1 button0-abs 0) (pad-buttons x))) - (zero? (logand (-> *cpad-list* cpads 1 button0-abs 0) (pad-buttons r1))) + (not (cpad-hold? 1 x)) + (not (cpad-hold? 1 r1)) (zero? (logand (-> *cpad-list* cpads 1 button0-abs 0) (pad-buttons r2))) ) (+! f28-14 (analog-input (the-as int (-> *cpad-list* cpads 1 leftx)) 128.0 48.0 110.0 -1.0)) diff --git a/test/decompiler/reference/jak1/engine/camera/cam-states_REF.gc b/test/decompiler/reference/jak1/engine/camera/cam-states_REF.gc index cd8aed9473..b25e2358e5 100644 --- a/test/decompiler/reference/jak1/engine/camera/cam-states_REF.gc +++ b/test/decompiler/reference/jak1/engine/camera/cam-states_REF.gc @@ -329,7 +329,7 @@ (none) ) :trans (behavior () - (if (zero? (logand (-> *camera* master-options) 2)) + (if (not (logtest? (-> *camera* master-options) 2)) (cam-slave-go cam-free-floating) ) (none) @@ -454,7 +454,7 @@ (none) ) :trans (behavior () - (if (zero? (logand (-> *camera* master-options) 2)) + (if (not (logtest? (-> *camera* master-options) 2)) (go cam-free-floating) ) (none) @@ -516,7 +516,7 @@ ) (matrix-axis-angle! s5-0 (-> *camera* local-down) (-> s4-0 y)) (matrix*! (the-as matrix (-> self tracking)) (the-as matrix (-> self tracking)) s5-0) - (when (zero? (logand (-> self options) 8)) + (when (not (logtest? (-> self options) 8)) (if (< (vector-dot (-> self tracking inv-mat vector 1) (-> *camera* local-down)) 0.0) (forward-down->inv-matrix (the-as matrix (-> self tracking)) @@ -533,7 +533,7 @@ (matrix-axis-angle! s5-0 (the-as vector (-> self tracking)) (- (-> s4-0 x))) (matrix*! (the-as matrix (-> self tracking)) (the-as matrix (-> self tracking)) s5-0) ) - (when (zero? (logand (-> self options) 8)) + (when (not (logtest? (-> self options) 8)) (let ((f30-1 (vector-dot (-> *camera* local-down) (-> self tracking inv-mat vector 2)))) (set! (-> (new 'stack-no-clear 'vector) quad) (the-as uint128 0)) (when (< (sin (-> *CAM_EYE-bank* max-degrees)) (fabs f30-1)) @@ -629,7 +629,7 @@ (none) ) :trans (behavior () - (if (zero? (logand (-> *camera* master-options) 2)) + (if (not (logtest? (-> *camera* master-options) 2)) (go cam-free-floating) ) (none) @@ -799,7 +799,7 @@ (none) ) :trans (behavior () - (if (zero? (logand (-> *camera* master-options) 2)) + (if (not (logtest? (-> *camera* master-options) 2)) (cam-slave-go cam-free-floating) ) (none) @@ -1043,7 +1043,7 @@ (vector-! gp-0 (-> self pivot-pt) (-> self circular-follow)) ) (vector-! s5-0 (-> self trans) (-> self pivot-pt)) - (when (zero? (logand (-> self options) 4)) + (when (not (logtest? (-> self options) 4)) (vector-flatten! gp-0 gp-0 (-> *camera* local-down)) (vector-flatten! s5-0 s5-0 (-> *camera* local-down)) ) @@ -1194,7 +1194,7 @@ (none) ) :trans (behavior () - (if (zero? (logand (-> *camera* master-options) 2)) + (if (not (logtest? (-> *camera* master-options) 2)) (cam-slave-go cam-free-floating) ) (none) @@ -1221,7 +1221,7 @@ (none) ) :trans (behavior () - (if (zero? (logand (-> *camera* master-options) 2)) + (if (not (logtest? (-> *camera* master-options) 2)) (cam-slave-go cam-free-floating) ) (none) @@ -2190,7 +2190,7 @@ (cam-los-setup-lateral arg2 s4-1 arg1) ) (cond - ((zero? (logand (-> self options) 1024)) + ((not (logtest? (-> self options) 1024)) ) ((= (-> self string-vel-dir) 5) ) @@ -3014,7 +3014,7 @@ (none) ) :trans (behavior () - (if (zero? (logand (-> *camera* master-options) 2)) + (if (not (logtest? (-> *camera* master-options) 2)) (cam-slave-go cam-free-floating) ) (none) @@ -3188,7 +3188,7 @@ (none) ) :trans (behavior () - (if (zero? (logand (-> *camera* master-options) 2)) + (if (not (logtest? (-> *camera* master-options) 2)) (cam-slave-go cam-free-floating) ) (when (not (paused?)) @@ -3437,7 +3437,7 @@ (none) ) :trans (behavior () - (if (zero? (logand (-> *camera* master-options) 2)) + (if (not (logtest? (-> *camera* master-options) 2)) (cam-slave-go cam-free-floating) ) (none) diff --git a/test/decompiler/reference/jak1/engine/camera/camera_REF.gc b/test/decompiler/reference/jak1/engine/camera/camera_REF.gc index 203836803b..9065cc5b66 100644 --- a/test/decompiler/reference/jak1/engine/camera/camera_REF.gc +++ b/test/decompiler/reference/jak1/engine/camera/camera_REF.gc @@ -924,7 +924,7 @@ ) (set! (-> obj free-point) -134250495) (dotimes (v1-21 32) - (when (zero? (logand s5-0 1)) + (when (not (logtest? s5-0 1)) (set! (-> obj point v1-21 next) (-> obj free-point)) (set! (-> obj free-point) v1-21) ) diff --git a/test/decompiler/reference/jak1/engine/collide/collide-reaction-target_REF.gc b/test/decompiler/reference/jak1/engine/collide/collide-reaction-target_REF.gc index e8f444e362..fe69ebec43 100644 --- a/test/decompiler/reference/jak1/engine/collide/collide-reaction-target_REF.gc +++ b/test/decompiler/reference/jak1/engine/collide/collide-reaction-target_REF.gc @@ -162,7 +162,7 @@ (set! (-> arg0 unknown-vector-coverage-1 quad) (-> sv-164 normal quad)) 0 ) - (when (and (zero? (logand sv-32 512)) + (when (and (not (logtest? sv-32 512)) (and (or (< (* 1.25 (-> arg1 best-from-prim local-sphere w)) (-> arg0 unknown-float-coverage-0)) (= (shr (shl (the-as int (-> arg0 unknown-float-coverage-1)) 58) 61) 1) ) @@ -187,7 +187,7 @@ ) ) ) - (if (or (zero? (logand sv-32 32)) (< 0.5 f0-21)) + (if (or (not (logtest? sv-32 32)) (< 0.5 f0-21)) (set! sv-48 (the-as symbol #f)) ) (when (and (or (and (< f0-21 0.95) (>= f30-0 0.0)) @@ -311,7 +311,7 @@ (& sv-160) ) ) - (when (zero? (logand (-> arg0 prev-status) (cshape-moving-flags onsurf))) + (when (not (logtest? (-> arg0 prev-status) (cshape-moving-flags onsurf))) (set! (-> arg0 ground-impact-vel) (- (vector-dot (-> arg0 transv) (-> arg0 dynam gravity-normal)))) (set! sv-96 (logior sv-96 2048)) (when (not sv-160) diff --git a/test/decompiler/reference/jak1/engine/debug/anim-tester_REF.gc b/test/decompiler/reference/jak1/engine/debug/anim-tester_REF.gc index 0b6a24d1a0..b15c6da81e 100644 --- a/test/decompiler/reference/jak1/engine/debug/anim-tester_REF.gc +++ b/test/decompiler/reference/jak1/engine/debug/anim-tester_REF.gc @@ -867,7 +867,7 @@ (let ((v1-1 (the-as anim-test-sequence s5-0))) "return the next node in the list" (let ((s4-0 (-> v1-1 next))) - (when (zero? (logand (-> (the-as anim-test-sequence s5-0) flags) 2)) + (when (not (logtest? (-> (the-as anim-test-sequence s5-0) flags) 2)) (let ((v1-5 (-> (the-as anim-test-sequence s5-0) item-list))) "return the start of the list" (let ((s3-0 (the-as anim-test-seq-item (-> v1-5 head)))) @@ -878,7 +878,7 @@ (let ((v1-6 s3-0)) "return the next node in the list" (let ((s2-0 (the-as anim-test-seq-item (-> v1-6 next)))) - (if (and (zero? (logand (-> s3-0 flags) 1)) (not (anim-test-obj-item-valid? arg0 s3-0))) + (if (and (not (logtest? (-> s3-0 flags) 1)) (not (anim-test-obj-item-valid? arg0 s3-0))) (glst-remove (-> (the-as anim-test-sequence s5-0) item-list) s3-0) ) (set! s3-0 s2-0) @@ -1328,7 +1328,7 @@ (goto cfg-25) ) ) - (when (zero? (logand (-> (the-as anim-test-obj v1-17) flags) 1)) + (when (not (logtest? (-> (the-as anim-test-obj v1-17) flags) 1)) (set! (-> arg1 highlight-index) (glst-get-node-index (-> arg1 list) (the-as anim-test-obj v1-17))) (goto cfg-25) ) @@ -1352,7 +1352,7 @@ (goto cfg-39) ) ) - (when (zero? (logand (-> (the-as anim-test-obj v1-23) flags) 1)) + (when (not (logtest? (-> (the-as anim-test-obj v1-23) flags) 1)) (set! (-> arg1 highlight-index) (glst-get-node-index (-> arg1 list) (the-as anim-test-obj v1-23))) (goto cfg-39) ) @@ -1838,7 +1838,7 @@ (let* ((s2-2 (-> *display* frames (-> *display* on-screen) frame debug-buf)) (s4-1 (the-as anim-test-sequence (-> s2-2 base))) ) - (when (zero? (logand (-> (the-as anim-test-seq-item gp-0) flags) 1)) + (when (not (logtest? (-> (the-as anim-test-seq-item gp-0) flags) 1)) (let ((v1-57 s3-0) (a1-13 (+ (-> arg1 xpos) (* (-> *ANIM_TESTER-bank* EDIT_STATS_X) (-> *DISP_LIST-bank* CHAR_WIDTH)))) (a0-29 (-> arg1 ypos)) @@ -1972,7 +1972,7 @@ ) ((= v1-88 9) (cond - ((zero? (logand (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons x))) + ((not (cpad-hold? 0 x)) (logclear! (-> *anim-tester* 0 flags) (anim-tester-flags fanimt3)) ) ((cpad-pressed? 0 up) @@ -2015,7 +2015,7 @@ ) ((or (= v1-88 1) (= v1-88 2) (= v1-88 3) (= v1-88 4)) (cond - ((zero? (logand (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons x))) + ((not (cpad-hold? 0 x)) (logclear! (-> *anim-tester* 0 flags) (anim-tester-flags fanimt3)) ) ((begin (set! (-> arg1 current-index) (-> arg1 the-index)) (<= (-> *anim-tester* 0 inc-timer) 0)) @@ -2156,14 +2156,14 @@ (anim-test-edit-seq-insert-item (the-as anim-test-seq-item gp-0) (the-as anim-test-sequence s4-0)) ) ((= v1-322 11) - (when (zero? (logand (-> (the-as anim-test-seq-item gp-0) flags) 1)) + (when (not (logtest? (-> (the-as anim-test-seq-item gp-0) flags) 1)) (anim-test-seq-mark-as-edited (the-as anim-test-sequence s4-0)) (glst-remove (-> (the-as anim-test-sequence s4-0) item-list) (the-as anim-test-seq-item gp-0)) ) (send-event (ppointer->process *anim-tester*) 'change-anim) ) (else - (when (zero? (logand (-> (the-as anim-test-seq-item gp-0) flags) 4)) + (when (not (logtest? (-> (the-as anim-test-seq-item gp-0) flags) 4)) (case (-> *anim-tester* 0 item-field) ((5) (anim-test-seq-mark-as-edited (the-as anim-test-sequence s4-0)) @@ -2481,7 +2481,7 @@ (none) ) :trans (behavior () - (if (and (zero? (logand (-> self flags) (anim-tester-flags fanimt1))) (= *master-mode* 'menu)) + (if (and (not (logtest? (-> self flags) (anim-tester-flags fanimt1))) (= *master-mode* 'menu)) (anim-tester-interface) ) (logclear! (-> self flags) (anim-tester-flags fanimt1)) @@ -2756,7 +2756,7 @@ "is this node the end of the list. #t = end" (not (not (-> v1-21 next))) ) - (when (zero? (logand (-> s4-2 flags) 5)) + (when (not (logtest? (-> s4-2 flags) 5)) (format gp-2 " Item \"~S\" ~d ~d " (-> s4-2 privname) (-> s4-2 speed) (-> s4-2 blend)) (anim-tester-num-print gp-2 (-> s4-2 first-frame)) (format gp-2 " ") diff --git a/test/decompiler/reference/jak1/engine/debug/menu_REF.gc b/test/decompiler/reference/jak1/engine/debug/menu_REF.gc index edc9ed4064..912e0346ed 100644 --- a/test/decompiler/reference/jak1/engine/debug/menu_REF.gc +++ b/test/decompiler/reference/jak1/engine/debug/menu_REF.gc @@ -1372,7 +1372,7 @@ ;; definition for function debug-menu-item-var-joypad-handler (defun debug-menu-item-var-joypad-handler ((arg0 debug-menu-item-var)) (cond - ((zero? (logand (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons x))) + ((not (cpad-hold? 0 x)) (let ((a0-1 (-> arg0 parent context))) (debug-menu-context-release-joypad a0-1) ) diff --git a/test/decompiler/reference/jak1/engine/draw/drawable-tree_REF.gc b/test/decompiler/reference/jak1/engine/draw/drawable-tree_REF.gc index 048e742a11..e41efe0608 100644 --- a/test/decompiler/reference/jak1/engine/draw/drawable-tree_REF.gc +++ b/test/decompiler/reference/jak1/engine/draw/drawable-tree_REF.gc @@ -72,7 +72,7 @@ (set! t1-6 (&-> t1-6 1)) (let ((t4-0 128)) (label cfg-7) - (b! (zero? (logand t3-0 t4-0)) cfg-9 :delay (set! t5-1 (-> arg1 0))) + (b! (not (logtest? t3-0 t4-0)) cfg-9 :delay (set! t5-1 (-> arg1 0))) (set! arg1 (&-> arg1 1)) (set! (-> t2-3 0) t5-1) (label cfg-9) diff --git a/test/decompiler/reference/jak1/engine/draw/drawable_REF.gc b/test/decompiler/reference/jak1/engine/draw/drawable_REF.gc index 9997437733..f36c4f6cc1 100644 --- a/test/decompiler/reference/jak1/engine/draw/drawable_REF.gc +++ b/test/decompiler/reference/jak1/engine/draw/drawable_REF.gc @@ -128,7 +128,7 @@ (.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))) + (not (logtest? (the-as int v1-3) (the-as int a0-3))) ) ) @@ -577,7 +577,7 @@ (init-vf0-vector) (set! sv-16 arg0) (logclear! (-> arg1 status) (draw-status was-drawn)) - (when (zero? (logand (-> arg1 status) (draw-status hidden no-anim no-skeleton-update))) + (when (not (logtest? (-> arg1 status) (draw-status hidden no-anim no-skeleton-update))) (let ((s4-0 (-> (the-as terrain-context #x70000000) work foreground joint-work temp-mtx vector 2)) (vu-lgt (the-as vu-lights (-> (the-as terrain-context #x70000000) work foreground joint-work temp-mtx vector 3)) @@ -772,7 +772,7 @@ (let ((v1-64 (-> arg1 sink-group level)) (a0-26 (+ (-> arg1 sink-group merc-sink foreground-texture-page) 6)) ) - (when (zero? (logand (-> arg1 status) (draw-status do-not-check-distance))) + (when (not (logtest? (-> arg1 status) (draw-status do-not-check-distance))) (if (< cam-dist (-> v1-64 closest-object a0-26)) (set! (-> v1-64 closest-object a0-26) cam-dist) ) @@ -852,7 +852,7 @@ ;; INFO: Return type mismatch int vs none. (defun dma-add-process-drawable-hud ((arg0 process-drawable) (arg1 draw-control) (arg2 symbol) (arg3 dma-buffer)) (logclear! (-> arg1 status) (draw-status was-drawn)) - (when (zero? (logand (-> arg1 status) (draw-status hidden no-anim no-skeleton-update))) + (when (not (logtest? (-> arg1 status) (draw-status hidden no-anim no-skeleton-update))) (let ((v1-6 (the-as vu-lights (+ 64 #x70000000))) (a0-3 *hud-lights*) ) @@ -1077,7 +1077,7 @@ ) ) ) - (when (zero? (logand *vu1-enable-user* (vu1-renderer-mask sky))) + (when (not (logtest? *vu1-enable-user* (vu1-renderer-mask sky))) (let* ((s5-2 (-> *display* frames (-> *display* on-screen) frame global-buf)) (gp-6 (-> s5-2 base)) ) diff --git a/test/decompiler/reference/jak1/engine/draw/process-drawable_REF.gc b/test/decompiler/reference/jak1/engine/draw/process-drawable_REF.gc index 31a3a275b3..82dcaa9d70 100644 --- a/test/decompiler/reference/jak1/engine/draw/process-drawable_REF.gc +++ b/test/decompiler/reference/jak1/engine/draw/process-drawable_REF.gc @@ -498,7 +498,7 @@ (let ((s0-0 (-> s4-0 data v1-28)) (v1-32 (res-lump-value (-> obj entity) 'options uint128)) ) - (if (and (zero? (logand #x20000 v1-32)) (= (-> s0-0 type) shadow-geo)) + (if (and (not (logtest? #x20000 v1-32)) (= (-> s0-0 type) shadow-geo)) (set! (-> s3-0 shadow) (the-as shadow-geo s0-0)) ) ) @@ -620,7 +620,7 @@ (* (-> grav-rt-body x) (-> *display* seconds-per-frame)) ) ) - (if (zero? (logand arg0 (align-opts adjust-xz-vel keep-other-velocities))) + (if (not (logtest? arg0 (align-opts adjust-xz-vel keep-other-velocities))) (set! (-> vel-rt-body z) 0.0) ) ) @@ -637,7 +637,7 @@ (* (-> grav-rt-body z) (-> *display* seconds-per-frame)) ) ) - (if (zero? (logand arg0 (align-opts adjust-x-vel keep-other-velocities))) + (if (not (logtest? arg0 (align-opts adjust-x-vel keep-other-velocities))) (set! (-> vel-rt-body x) 0.0) ) ) diff --git a/test/decompiler/reference/jak1/engine/entity/entity_REF.gc b/test/decompiler/reference/jak1/engine/entity/entity_REF.gc index 84101b40dc..efc56ee33d 100644 --- a/test/decompiler/reference/jak1/engine/entity/entity_REF.gc +++ b/test/decompiler/reference/jak1/engine/entity/entity_REF.gc @@ -327,7 +327,7 @@ ) (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)) + (a2-0 (if (and arg0 (not (logtest? (-> *kernel-context* prevent-from-run) (-> arg0 mask))) (run-logic? arg0)) 114 32 ) @@ -1498,7 +1498,7 @@ ) ) ) - (when (zero? (logand (-> obj status) (entity-perm-status user-set-from-cstage))) + (when (not (logtest? (-> obj status) (entity-perm-status user-set-from-cstage))) (set! (-> obj user-uint64) (the-as uint 0)) 0 ) @@ -1589,7 +1589,7 @@ ;; 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 (not (logtest? (-> 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)) ) @@ -1601,7 +1601,7 @@ ;; 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))) + (and (not (logtest? (-> obj perm status) (entity-perm-status bit-0 dead))) (< (vector-vector-distance (-> obj trans) arg0) (-> *ACTOR-bank* birth-dist)) ) ) diff --git a/test/decompiler/reference/jak1/engine/game/collectables-part_REF.gc b/test/decompiler/reference/jak1/engine/game/collectables-part_REF.gc index c898fe25ad..ad86fdc381 100644 --- a/test/decompiler/reference/jak1/engine/game/collectables-part_REF.gc +++ b/test/decompiler/reference/jak1/engine/game/collectables-part_REF.gc @@ -4,8 +4,8 @@ ;; definition for function eco-fadeout ;; INFO: Return type mismatch int vs none. (defun eco-fadeout ((arg0 sparticle-system) (arg1 sparticle-cpuinfo)) - (if (zero? (logand (-> (the-as process-drawable (-> arg1 key proc)) state-flags) (state-flags fade-out-particles)) - ) + (if (not (logtest? (-> (the-as process-drawable (-> arg1 key proc)) state-flags) (state-flags fade-out-particles)) + ) (set! (-> arg1 next-time) (the-as uint (* (-> *sp-frame-time* x) 2))) ) 0 @@ -21,7 +21,7 @@ (set! (-> arg2 y) (-> a0-3 world-sphere y)) (set! (-> arg2 z) (-> a0-3 world-sphere z)) ) - (if (zero? (logand (-> v1-1 state-flags) (state-flags fade-out-particles))) + (if (not (logtest? (-> v1-1 state-flags) (state-flags fade-out-particles))) (set! (-> arg1 next-time) (the-as uint (* (-> *sp-frame-time* x) 2))) ) ) diff --git a/test/decompiler/reference/jak1/engine/game/collectables_REF.gc b/test/decompiler/reference/jak1/engine/game/collectables_REF.gc index e9487c12cd..0761f30b58 100644 --- a/test/decompiler/reference/jak1/engine/game/collectables_REF.gc +++ b/test/decompiler/reference/jak1/engine/game/collectables_REF.gc @@ -503,7 +503,7 @@ object (cond ((= arg2 'eco-blue) - (when (and (zero? (logand (-> self flags) (collectable-flags fading ignore-blue))) + (when (and (not (logtest? (-> self flags) (collectable-flags fading ignore-blue))) (!= (-> self next-state name) 'pickup) (begin (check-blue-suck (the-as process-drawable arg0)) #t) (logtest? (-> self flags) (collectable-flags can-collect)) @@ -1213,7 +1213,7 @@ ;; definition for method 12 of type money (defmethod run-logic? money ((obj money)) - (or (zero? (logand (-> obj mask) (process-mask actor-pause))) + (or (not (logtest? (-> obj mask) (process-mask actor-pause))) (or (and (nonzero? (-> obj draw)) (logtest? (-> obj draw status) (draw-status was-drawn)) (>= (+ (-> *ACTOR-bank* pause-dist) (-> obj root-override pause-adjust-distance)) @@ -2183,10 +2183,10 @@ (go-virtual jump) ) ((and gp-1 - (zero? (logand (res-lump-value (-> self entity) 'options fact-options :time (the-as float -1000000000.0)) + (not (logtest? (res-lump-value (-> self entity) 'options fact-options :time (the-as float -1000000000.0)) (fact-options skip-jump-anim) ) - ) + ) (zero? (logand (-> self fact options) (fact-options skip-jump-anim))) ) (set! (-> self jump-pos quad) (-> (the-as vector gp-1) quad)) diff --git a/test/decompiler/reference/jak1/engine/game/game-info_REF.gc b/test/decompiler/reference/jak1/engine/game/game-info_REF.gc index d348793b99..b2dc7906a7 100644 --- a/test/decompiler/reference/jak1/engine/game/game-info_REF.gc +++ b/test/decompiler/reference/jak1/engine/game/game-info_REF.gc @@ -350,7 +350,7 @@ (buzz-bits (get-reminder ctrl 0)) ) (when (and (>= buzz-index 0) (< buzz-index (the int (-> *FACT-bank* buzzer-max-default)))) - (if (zero? (logand buzz-bits (ash 1 buzz-index))) + (if (not (logtest? buzz-bits (ash 1 buzz-index))) (set! (-> obj buzzer-total) (+ 1.0 (-> obj buzzer-total))) ) (let ((t9-10 (method-of-object ctrl save-reminder))) diff --git a/test/decompiler/reference/jak1/engine/game/generic-obs_REF.gc b/test/decompiler/reference/jak1/engine/game/generic-obs_REF.gc index 2100b0defb..64717b1de5 100644 --- a/test/decompiler/reference/jak1/engine/game/generic-obs_REF.gc +++ b/test/decompiler/reference/jak1/engine/game/generic-obs_REF.gc @@ -903,7 +903,7 @@ (send-event gp-0 'query 'done) ) ((type-type? (-> gp-0 type) process-drawable) - (when (zero? (logand (-> (the-as process-drawable gp-0) skel status) (janim-status done))) + (when (not (logtest? (-> (the-as process-drawable gp-0) skel status) (janim-status done))) (let ((s5-0 pp)) (set! pp gp-0) (let ((v0-1 (the-as object (ja-done? 0)))) @@ -1323,7 +1323,7 @@ ) ) ) - (when (zero? (logand (-> self draw status) (draw-status hidden))) + (when (not (logtest? (-> self draw status) (draw-status hidden))) (let ((v1-36 (-> self draw)) (a0-18 (new 'stack-no-clear 'vector)) ) @@ -1859,7 +1859,7 @@ (none) ) :trans (behavior () - (if (zero? (logand (-> *camera* master-options) 2)) + (if (not (logtest? (-> *camera* master-options) 2)) (cam-slave-go cam-free-floating) ) (none) @@ -1925,7 +1925,7 @@ (none) ) :trans (behavior () - (if (zero? (logand (-> *camera* master-options) 2)) + (if (not (logtest? (-> *camera* master-options) 2)) (cam-slave-go cam-free-floating) ) (cam-launcher-long-joystick) diff --git a/test/decompiler/reference/jak1/engine/game/powerups_REF.gc b/test/decompiler/reference/jak1/engine/game/powerups_REF.gc index 1ac340569c..3c2a0fb7a3 100644 --- a/test/decompiler/reference/jak1/engine/game/powerups_REF.gc +++ b/test/decompiler/reference/jak1/engine/game/powerups_REF.gc @@ -664,8 +664,8 @@ (stop! (-> self sound)) ) (when (and (< 0.0 (-> self fact-info-target eco-level)) - (zero? (logand (-> self state-flags) (state-flags first-person-mode))) - (zero? (logand (-> self draw status) (draw-status hidden no-anim))) + (not (logtest? (-> self state-flags) (state-flags first-person-mode))) + (not (logtest? (-> self draw status) (draw-status hidden no-anim))) (not (movie?)) (rand-vu-percent? (lerp-scale diff --git a/test/decompiler/reference/jak1/engine/game/projectiles_REF.gc b/test/decompiler/reference/jak1/engine/game/projectiles_REF.gc index 4d8b355b79..deb9370b18 100644 --- a/test/decompiler/reference/jak1/engine/game/projectiles_REF.gc +++ b/test/decompiler/reference/jak1/engine/game/projectiles_REF.gc @@ -159,7 +159,7 @@ (set! sv-80 (logior sv-80 16)) ) (set! sv-224 (< (fabs (-> arg0 surface-angle)) (-> *pat-mode-info* (-> arg0 cur-pat mode) wall-angle))) - (if (zero? (logand (-> arg0 prev-status) (cshape-moving-flags onsurf))) + (if (not (logtest? (-> arg0 prev-status) (cshape-moving-flags onsurf))) (set! (-> arg0 ground-impact-vel) (- (vector-dot (-> arg0 transv) (-> arg0 dynam gravity-normal)))) ) (set! sv-80 (logior sv-80 4)) @@ -982,7 +982,7 @@ ) (sound-play "yellow-fire") (set! (-> obj sound-id) (sound-play "yellow-buzz")) - (if (zero? (logand (-> obj options) 416)) + (if (not (logtest? (-> obj options) 416)) (process-spawn part-tracker :init part-tracker-init (-> *part-group-id-table* 103) -1 #f #f #f s5-0 :to obj) ) (set! (-> *part-id-table* 350 init-specs 2 initial-valuef) f30-0) @@ -1002,7 +1002,7 @@ (logior! (-> obj root-override root-prim collide-with) (collide-kind water)) ) (('ogre) - (when (zero? (logand (-> obj options) 128)) + (when (not (logtest? (-> obj options) 128)) (set! (-> obj water) (new 'process 'water-control obj 0 0.0 8192.0 2048.0)) (set! (-> obj water flags) (water-flags wt01 wt04 wt07)) (set! (-> obj water height) 129024.0) diff --git a/test/decompiler/reference/jak1/engine/game/settings_REF.gc b/test/decompiler/reference/jak1/engine/game/settings_REF.gc index ef48fb637a..e38d57ddd3 100644 --- a/test/decompiler/reference/jak1/engine/game/settings_REF.gc +++ b/test/decompiler/reference/jak1/engine/game/settings_REF.gc @@ -34,7 +34,7 @@ ) ) (('sfx-volume) - (when (or (zero? (logand (-> *kernel-context* prevent-from-run) (process-mask progress))) + (when (or (not (logtest? (-> *kernel-context* prevent-from-run) (process-mask progress))) (= (get-process conn) (ppointer->process *progress-process*)) ) (case (the-as symbol (-> conn param1)) diff --git a/test/decompiler/reference/jak1/engine/game/task/process-taskable_REF.gc b/test/decompiler/reference/jak1/engine/game/task/process-taskable_REF.gc index d21a0dff12..5838ba29e6 100644 --- a/test/decompiler/reference/jak1/engine/game/task/process-taskable_REF.gc +++ b/test/decompiler/reference/jak1/engine/game/task/process-taskable_REF.gc @@ -1205,7 +1205,7 @@ ) ) ) - ((zero? (logand (-> arg3 param 0) 7)) + ((not (logtest? (-> arg3 param 0) 7)) (set! v0-0 (-> arg3 param 0)) (set! (-> self cam-joint-index) (the-as int v0-0)) v0-0 diff --git a/test/decompiler/reference/jak1/engine/game/voicebox_REF.gc b/test/decompiler/reference/jak1/engine/game/voicebox_REF.gc index 16c0298056..3d7c50b61d 100644 --- a/test/decompiler/reference/jak1/engine/game/voicebox_REF.gc +++ b/test/decompiler/reference/jak1/engine/game/voicebox_REF.gc @@ -240,7 +240,7 @@ :event (-> cam-string event) :enter (-> cam-string enter) :trans (behavior () - (if (zero? (logand (-> *camera* master-options) 2)) + (if (not (logtest? (-> *camera* master-options) 2)) (deactivate self) ) (none) diff --git a/test/decompiler/reference/jak1/engine/gfx/generic/generic-merc_REF.gc b/test/decompiler/reference/jak1/engine/gfx/generic/generic-merc_REF.gc index 04ded3ef5b..8da1aefdff 100644 --- a/test/decompiler/reference/jak1/engine/gfx/generic/generic-merc_REF.gc +++ b/test/decompiler/reference/jak1/engine/gfx/generic/generic-merc_REF.gc @@ -152,7 +152,7 @@ (let ((v1-36 (the-as object #x1000d000)) (a0-19 (the-as object #x7000006c)) ) - (b! (zero? (logand (-> (the-as terrain-context v1-36) bsp lev-index) 256)) cfg-9 :delay (nop!)) + (b! (not (logtest? (-> (the-as terrain-context v1-36) bsp lev-index) 256)) cfg-9 :delay (nop!)) (let ((a1-6 (-> (the-as generic-envmap-saves a0-19) index-mask x))) (nop!) (let ((a2-1 (-> (the-as (pointer int32) v1-36) 0))) diff --git a/test/decompiler/reference/jak1/engine/gfx/hw/display_REF.gc b/test/decompiler/reference/jak1/engine/gfx/hw/display_REF.gc index 443f503617..59f337a9c3 100644 --- a/test/decompiler/reference/jak1/engine/gfx/hw/display_REF.gc +++ b/test/decompiler/reference/jak1/engine/gfx/hw/display_REF.gc @@ -56,7 +56,7 @@ (set! (-> env frame1) (new 'static 'gs-frame :fbw (/ width 64) :psm (logand psm 15) :fbp fbp)) (set! (-> env dtheaddr) (gs-reg64 dthe)) (cond - ((zero? (logand psm 2)) + ((not (logtest? psm 2)) (set! (-> env dthe) (new 'static 'gs-dthe)) 0 ) diff --git a/test/decompiler/reference/jak1/engine/gfx/merc/merc_REF.gc b/test/decompiler/reference/jak1/engine/gfx/merc/merc_REF.gc index 131634956e..b5bf86bfbb 100644 --- a/test/decompiler/reference/jak1/engine/gfx/merc/merc_REF.gc +++ b/test/decompiler/reference/jak1/engine/gfx/merc/merc_REF.gc @@ -236,7 +236,7 @@ ) ) (cond - ((zero? (logand -65536 (the-as int (-> obj header eye-ctrl)))) + ((not (logtest? -65536 (the-as int (-> obj header eye-ctrl)))) (set! (-> obj header eye-ctrl) (the-as merc-eye-ctrl 0)) 0 ) diff --git a/test/decompiler/reference/jak1/engine/gfx/ripple_REF.gc b/test/decompiler/reference/jak1/engine/gfx/ripple_REF.gc index 6a6d50fa22..cc1bfa4575 100644 --- a/test/decompiler/reference/jak1/engine/gfx/ripple_REF.gc +++ b/test/decompiler/reference/jak1/engine/gfx/ripple_REF.gc @@ -170,7 +170,7 @@ (v1-1 (-> arg0 draw)) (a1-5 (-> v1-1 lod-set lod (-> v1-1 cur-lod) geo effect)) ) - (if (or (zero? (logand (-> a1-5 0 effect-bits) 4)) (not (-> v1-1 ripple))) + (if (or (not (logtest? (-> a1-5 0 effect-bits) 4)) (not (-> v1-1 ripple))) (return f30-0) ) (let* ((a1-6 (-> a1-5 0 extra-info)) diff --git a/test/decompiler/reference/jak1/engine/gfx/water/water_REF.gc b/test/decompiler/reference/jak1/engine/gfx/water/water_REF.gc index 82997dadaa..c8fdb93e82 100644 --- a/test/decompiler/reference/jak1/engine/gfx/water/water_REF.gc +++ b/test/decompiler/reference/jak1/engine/gfx/water/water_REF.gc @@ -686,7 +686,7 @@ (with-pp (let ((s5-0 (-> obj flags))) (cond - ((zero? (logand (-> obj flags) (water-flags wt01))) + ((not (logtest? (-> obj flags) (water-flags wt01))) (logclear! (-> obj flags) (water-flags wt09 wt10 wt11 wt12 wt13 wt14 wt16)) ) ((and (logtest? (water-flags wt21) (-> obj flags)) @@ -710,7 +710,7 @@ ) ) (set! (-> obj real-ocean-offset) (- (ocean-get-height (the-as vector (-> obj bottom))) (-> obj base-height))) - (if (zero? (logand (-> obj flags) (water-flags wt09))) + (if (not (logtest? (-> obj flags) (water-flags wt09))) (set! (-> obj ocean-offset) (-> obj real-ocean-offset)) (set! (-> obj ocean-offset) (lerp (-> obj ocean-offset) (-> obj real-ocean-offset) 0.2)) ) @@ -720,7 +720,7 @@ (f30-0 (ripple-find-height (the-as process-drawable a0-26) 0 (the-as vector (-> obj bottom)))) ) (set! (-> obj real-ocean-offset) (- f30-0 (-> obj base-height))) - (if (zero? (logand (-> obj flags) (water-flags wt09))) + (if (not (logtest? (-> obj flags) (water-flags wt09))) (set! (-> obj ocean-offset) (-> obj real-ocean-offset)) (set! (-> obj ocean-offset) (lerp (-> obj ocean-offset) (-> obj real-ocean-offset) 0.2)) ) @@ -753,7 +753,7 @@ (set! (-> obj drip-wetness) 1.0) (set! (-> obj drip-height) (fmax (- (-> obj surface-height) (-> obj bottom 0 y)) (-> obj drip-height))) (set! (-> obj drip-speed) 15.0) - (if (zero? (logand (-> obj flags) (water-flags wt09))) + (if (not (logtest? (-> obj flags) (water-flags wt09))) (TODO-RENAME-15 obj) ) (cond @@ -882,7 +882,7 @@ (>= f30-3 (-> obj bottom 0 y)) (and (logtest? s5-0 (water-flags wt11)) (logtest? (-> (the-as collide-shape-moving (-> obj process root)) status) (cshape-moving-flags tsurf)) - (zero? (logand (-> (the-as collide-shape-moving (-> obj process root)) status) (cshape-moving-flags onsurf))) + (not (logtest? (-> (the-as collide-shape-moving (-> obj process root)) status) (cshape-moving-flags onsurf))) (>= (+ 204.8 f30-3) (-> obj bottom 0 y)) ) ) @@ -897,7 +897,7 @@ (set! (-> obj swim-time) (-> *display* base-frame-counter)) (send-event (-> obj process) 'swim) (logior! (-> obj flags) (water-flags wt11)) - (if (zero? (logand s5-0 (water-flags wt11))) + (if (not (logtest? s5-0 (water-flags wt11))) (set! (-> obj enter-swim-time) (-> *display* base-frame-counter)) ) (cond @@ -909,7 +909,7 @@ (set! (-> v1-200 quad) (-> obj bottom 0 quad)) (set! (-> v1-200 y) (- (-> obj height) (-> obj swim-height))) (let ((s4-4 (-> obj process root))) - (when (and (zero? (logand (-> (the-as collide-shape-moving s4-4) status) (cshape-moving-flags csmf12))) + (when (and (not (logtest? (-> (the-as collide-shape-moving s4-4) status) (cshape-moving-flags csmf12))) (logtest? (-> obj flags) (water-flags wt11)) (zero? (logand (-> (the-as collide-shape-moving s4-4) root-prim prim-core action) (collide-action ca-9))) ) @@ -952,7 +952,7 @@ (set! (-> a1-30 quad) (-> obj bottom 0 quad)) (let ((s5-1 (-> obj process root))) (set! (-> a1-30 y) f30-3) - (when (zero? (logand (-> (the-as collide-shape-moving s5-1) root-prim prim-core action) (collide-action ca-9))) + (when (not (logtest? (-> (the-as collide-shape-moving s5-1) root-prim prim-core action) (collide-action ca-9))) (let ((f30-4 (-> (the-as collide-shape-moving s5-1) ground-impact-vel))) (move-to-ground-point! (the-as collide-shape-moving s5-1) a1-30 (-> s5-1 transv) *up-vector*) (logior! (-> (the-as collide-shape-moving s5-1) status) (cshape-moving-flags on-water)) @@ -974,10 +974,10 @@ ) (when (< (-> obj process root trans y) -409.6) (send-event (-> obj process) 'no-look-around (seconds 1.5)) - (when (zero? (logand (-> (the-as collide-shape-moving (-> obj process root)) root-prim prim-core action) + (when (not (logtest? (-> (the-as collide-shape-moving (-> obj process root)) root-prim prim-core action) (collide-action ca-14) ) - ) + ) (cond ((= (-> obj process type) target) (send-event @@ -1020,8 +1020,8 @@ ) ) ) - (when (not (or (zero? (logand (-> obj flags) (water-flags wt06))) - (zero? (logand (water-flags wt23) (-> obj flags))) + (when (not (or (not (logtest? (-> obj flags) (water-flags wt06))) + (not (logtest? (water-flags wt23) (-> obj flags))) (= (-> obj drip-wetness) 0.0) ) ) diff --git a/test/decompiler/reference/jak1/engine/level/load-boundary_REF.gc b/test/decompiler/reference/jak1/engine/level/load-boundary_REF.gc index f04cff9fbf..1986f5f6bb 100644 --- a/test/decompiler/reference/jak1/engine/level/load-boundary_REF.gc +++ b/test/decompiler/reference/jak1/engine/level/load-boundary_REF.gc @@ -477,7 +477,7 @@ (set! (-> s2-0 quad) (-> s5-0 data (-> gp-0 vertex) quad)) (set! (-> s2-0 y) (-> s5-0 top-plane)) (add-debug-sphere #t (bucket-id debug-no-zbuf) s2-0 8192.0 (new 'static 'rgba :a #x80)) - (when (zero? (logand (-> s5-0 flags) (load-boundary-flags closed))) + (when (not (logtest? (-> s5-0 flags) (load-boundary-flags closed))) (set! (-> s2-0 y) (-> s5-0 bot-plane)) (add-debug-sphere #t (bucket-id debug-no-zbuf) s2-0 8192.0 (new 'static 'rgba :a #x80)) ) @@ -1099,7 +1099,7 @@ ;; INFO: Used lq/sq ;; INFO: Return type mismatch int vs object. (defun triangulate-boundary ((arg0 load-boundary)) - (when (zero? (logand (-> arg0 flags) (load-boundary-flags closed))) + (when (not (logtest? (-> arg0 flags) (load-boundary-flags closed))) (set! (-> arg0 tri-cnt) 1) (return (the-as object 0)) ) diff --git a/test/decompiler/reference/jak1/engine/load/decomp_REF.gc b/test/decompiler/reference/jak1/engine/load/decomp_REF.gc index 6bb668109f..5ad632b717 100644 --- a/test/decompiler/reference/jak1/engine/load/decomp_REF.gc +++ b/test/decompiler/reference/jak1/engine/load/decomp_REF.gc @@ -118,7 +118,7 @@ (+ 16 #x70000000) (+ 2064 #x70000000) (when (= curr-vis-str desired-vis-str) - (b! (zero? (logand #x40000000 (-> vis-info flags))) cfg-6 :delay (empty-form)) + (b! (not (logtest? #x40000000 (-> vis-info flags))) cfg-6 :delay (empty-form)) (if (check-busy *ramdisk-rpc*) (return #f) ) diff --git a/test/decompiler/reference/jak1/engine/load/loader_REF.gc b/test/decompiler/reference/jak1/engine/load/loader_REF.gc index bf7af0250b..1b4d76a0a8 100644 --- a/test/decompiler/reference/jak1/engine/load/loader_REF.gc +++ b/test/decompiler/reference/jak1/engine/load/loader_REF.gc @@ -960,7 +960,7 @@ (str-play-stop (-> arg0 name)) (set! (-> *art-control* active-stream) #f) (logclear! (-> self skel status) (janim-status drawn done)) - (if (zero? (logand (-> self skel status) (janim-status inited))) + (if (not (logtest? (-> self skel status) (janim-status inited))) (logclear! (-> self skel status) (janim-status inited)) ) (remove-setting! 'spooling) diff --git a/test/decompiler/reference/jak1/engine/nav/navigate_REF.gc b/test/decompiler/reference/jak1/engine/nav/navigate_REF.gc index db0e487e75..939f604749 100644 --- a/test/decompiler/reference/jak1/engine/nav/navigate_REF.gc +++ b/test/decompiler/reference/jak1/engine/nav/navigate_REF.gc @@ -438,7 +438,7 @@ (vf9 :class vf) ) (let ((t0-0 (-> arg0 poly arg1))) - (when (zero? (logand (-> t0-0 pat) 1)) + (when (not (logtest? (-> t0-0 pat) 1)) (let ((v1-5 (-> arg0 vertex (-> t0-0 vertex 0))) (a1-5 (-> arg0 vertex (-> t0-0 vertex 1))) (a0-2 (-> arg0 vertex (-> t0-0 vertex 2))) @@ -821,7 +821,7 @@ (countdown (s1-0 (-> obj poly-count)) (set! *debug-traverse* (+ *debug-traverse* 1)) (let ((a0-3 (-> obj poly s1-0))) - (when (zero? (logand (-> a0-3 pat) 1)) + (when (not (logtest? (-> a0-3 pat) 1)) (nop!) (let ((v1-8 (the-as object (-> obj vertex)))) (nop!) @@ -1080,7 +1080,7 @@ (set! sv-48 (-> (the-as nav-poly (+ sv-32 (the-as int s1-1))) adj-poly 0)) (when (and (!= sv-48 255) (!= 1 (-> (the-as (pointer uint8) (&+ arg3 sv-48))))) (set! (-> arg3 sv-48) 1) - (when (zero? (logand (-> obj poly sv-48 pat) 1)) + (when (not (logtest? (-> obj poly sv-48 pat) 1)) (let ((v0-3 (= (nav-mesh-lookup-route obj arg0 (the-as int sv-48)) 3))) (when (not v0-3) (tri-centroid-local obj s1-1 s0-0) @@ -1122,14 +1122,14 @@ (set! *nav-update-route-table-route-count* 0) (countdown (s3-0 (-> obj poly-count)) (let ((s2-0 (-> obj poly s3-0))) - (when (zero? (logand (-> s2-0 pat) 1)) + (when (not (logtest? (-> s2-0 pat) 1)) (tri-centroid-local obj s2-0 s5-0) (mem-set32! s4-0 64 0) (set! (-> s4-0 s3-0) 1) (dotimes (s1-0 3) (let ((a3-0 (-> s2-0 adj-poly s1-0))) (when (!= a3-0 255) - (if (zero? (logand (-> obj poly a3-0 pat) 1)) + (if (not (logtest? (-> obj poly a3-0 pat) 1)) (dummy-18 obj s3-0 s5-0 (the-as int a3-0) s4-0 0) ) ) @@ -1267,7 +1267,7 @@ (let ((f30-0 10000000000000000000000000000000000000.0)) (countdown (s1-0 (-> obj poly-count)) (let ((s0-0 (-> obj poly s1-0))) - (when (zero? (logand (-> s0-0 pat) 1)) + (when (not (logtest? (-> s0-0 pat) 1)) (set! (-> s2-0 0 quad) (-> obj vertex (-> s0-0 vertex 0) quad)) (set! (-> s2-0 1 quad) (-> obj vertex (-> s0-0 vertex 1) quad)) (set! (-> s2-0 2 quad) (-> obj vertex (-> s0-0 vertex 2) quad)) @@ -2402,7 +2402,7 @@ (let ((s1-0 (new 'stack-no-clear 'vector))) (vector-float*! s1-0 arg1 arg2) (dotimes (s0-0 arg3) - (when (zero? (logand arg5 (ash 1 s0-0))) + (when (not (logtest? arg5 (ash 1 s0-0))) (let* ((v1-7 (-> arg4 s0-0)) (f0-2 (ray-circle-intersect arg0 s1-0 v1-7 (-> v1-7 w))) ) diff --git a/test/decompiler/reference/jak1/engine/nav/path_REF.gc b/test/decompiler/reference/jak1/engine/nav/path_REF.gc index 8a144995ec..7403c97ffe 100644 --- a/test/decompiler/reference/jak1/engine/nav/path_REF.gc +++ b/test/decompiler/reference/jak1/engine/nav/path_REF.gc @@ -171,7 +171,7 @@ ;; definition for method 12 of type path-control (defmethod TODO-RENAME-12 path-control ((obj path-control) (arg0 vector) (arg1 float)) - (when (zero? (logand (-> obj flags) (path-control-flag not-found))) + (when (not (logtest? (-> obj flags) (path-control-flag not-found))) (let ((v1-3 (-> obj curve num-cverts)) (f0-3 (the float (the int arg1))) ) @@ -199,7 +199,7 @@ ;; definition for method 14 of type curve-control (defmethod TODO-RENAME-14 curve-control ((obj curve-control) (arg0 vector) (arg1 float)) - (when (zero? (logand (-> obj flags) (path-control-flag not-found))) + (when (not (logtest? (-> obj flags) (path-control-flag not-found))) (let ((s4-0 (new 'stack-no-clear 'vector))) (curve-evaluate! arg0 diff --git a/test/decompiler/reference/jak1/engine/ps2/pad_REF.gc b/test/decompiler/reference/jak1/engine/ps2/pad_REF.gc index cd1638ab7f..e03f6c970d 100644 --- a/test/decompiler/reference/jak1/engine/ps2/pad_REF.gc +++ b/test/decompiler/reference/jak1/engine/ps2/pad_REF.gc @@ -224,7 +224,7 @@ (let ((pad (-> *cpad-list* cpads pad-idx))) (cpad-get-data pad) (cond - ((zero? (logand (-> pad valid) 128)) + ((not (logtest? (-> pad valid) 128)) (dotimes (buzz-idx 2) (cond ((and (-> pad buzz) (< (get-current-time) (-> pad buzz-time buzz-idx)) (= *master-mode* 'game)) diff --git a/test/decompiler/reference/jak1/engine/sparticle/sparticle-launcher_REF.gc b/test/decompiler/reference/jak1/engine/sparticle/sparticle-launcher_REF.gc index db88499a28..79532bc3b3 100644 --- a/test/decompiler/reference/jak1/engine/sparticle/sparticle-launcher_REF.gc +++ b/test/decompiler/reference/jak1/engine/sparticle/sparticle-launcher_REF.gc @@ -494,7 +494,7 @@ (matrix-rotate-y! s3-1 (-> s5-0 rotate-y)) (vector3s-rotate*! (the-as vector3s (-> arg0 launchrot)) (the-as vector3s (-> arg0 launchrot)) s3-1) (vector3s-rotate*! (the-as vector3s (-> arg1 vel-sxvel)) (the-as vector3s (-> arg1 vel-sxvel)) s3-1) - (if (zero? (logand (sp-cpuinfo-flag use-global-acc) (-> arg1 flags))) + (if (not (logtest? (sp-cpuinfo-flag use-global-acc) (-> arg1 flags))) (vector3s-rotate*! (the-as vector3s (-> arg1 acc)) (the-as vector3s (-> arg1 acc)) s3-1) ) ) @@ -576,7 +576,7 @@ ) (vector3s-rotate*! (the-as vector3s (-> arg0 launchrot)) (the-as vector3s (-> arg0 launchrot)) s5-0) (vector3s-rotate*! (the-as vector3s (-> arg1 vel-sxvel)) (the-as vector3s (-> arg1 vel-sxvel)) s5-0) - (if (zero? (logand (sp-cpuinfo-flag use-global-acc) (-> arg1 flags))) + (if (not (logtest? (sp-cpuinfo-flag use-global-acc) (-> arg1 flags))) (vector3s-rotate*! (the-as vector3s (-> arg1 acc)) (the-as vector3s (-> arg1 acc)) s5-0) ) ) @@ -1077,8 +1077,8 @@ (let ((a0-26 sparticle-launcher)) (b! (!= (-> a1-4 type) a0-26) cfg-78 :delay (nop!)) ) - (b! (zero? (logand (-> v1-29 flags) (sp-group-item-flag launch-asap))) cfg-36 :delay (nop!)) - (when (zero? (logand (-> a3-0 flags) (sp-launch-state-flags particles-active))) + (b! (not (logtest? (-> v1-29 flags) (sp-group-item-flag launch-asap))) cfg-36 :delay (nop!)) + (when (not (logtest? (-> a3-0 flags) (sp-launch-state-flags particles-active))) (set! (-> a3-0 spawn-time) (the-as uint s4-0)) (logior! (-> a3-0 flags) (sp-launch-state-flags particles-active)) (if (< 0.0 f0-2) @@ -1125,7 +1125,7 @@ (* 0.2 (the float a0-56) f0-2) ) (else - (when (zero? (logand (-> v1-29 flags) (sp-group-item-flag bit1))) + (when (not (logtest? (-> v1-29 flags) (sp-group-item-flag bit1))) 0 (goto cfg-77) ) diff --git a/test/decompiler/reference/jak1/engine/target/logic-target_REF.gc b/test/decompiler/reference/jak1/engine/target/logic-target_REF.gc index a704bf25c8..5108e2d203 100644 --- a/test/decompiler/reference/jak1/engine/target/logic-target_REF.gc +++ b/test/decompiler/reference/jak1/engine/target/logic-target_REF.gc @@ -107,7 +107,7 @@ (meters 0.000024414063) (the-as rgba (+ #x408040 (shl s4-0 24))) ) - (when (zero? (logand (-> s2-0 status) (cshape-moving-flags csmf08))) + (when (not (logtest? (-> s2-0 status) (cshape-moving-flags csmf08))) (add-debug-line (logtest? s5-0 1) (bucket-id debug-no-zbuf) @@ -176,11 +176,11 @@ (format #t "~C~C~C~C~C~C" - (if (zero? (logand s3-0 (cshape-reaction-flags csrf00))) + (if (not (logtest? s3-0 (cshape-reaction-flags csrf00))) 103 87 ) - (if (zero? (logand s3-0 (cshape-reaction-flags csrf01))) + (if (not (logtest? s3-0 (cshape-reaction-flags csrf01))) 103 87 ) @@ -188,7 +188,7 @@ ((logtest? s3-0 (cshape-reaction-flags csrf11)) 71 ) - ((zero? (logand s3-0 (cshape-reaction-flags csrf02))) + ((not (logtest? s3-0 (cshape-reaction-flags csrf02))) 103 ) (else @@ -206,11 +206,11 @@ 99 ) ) - (if (zero? (logand s3-0 (cshape-reaction-flags csrf04))) + (if (not (logtest? s3-0 (cshape-reaction-flags csrf04))) 110 66 ) - (if (zero? (logand s3-0 (cshape-reaction-flags csrf05))) + (if (not (logtest? s3-0 (cshape-reaction-flags csrf05))) 103 65 ) @@ -769,7 +769,7 @@ ) (vector-matrix*! s2-3 s3-3 (-> self control unknown-matrix01)) (let ((f28-2 (vector-vector-xz-distance s3-3 s4-0))) - (when (and (zero? (logand (-> self control status) (cshape-moving-flags tsurf))) + (when (and (not (logtest? (-> self control status) (cshape-moving-flags tsurf))) (< (vector-xz-length gp-0) (vector-xz-length s3-3)) ) (let ((f0-50 (lerp-scale 163840.0 0.0 f28-2 0.0 20480.0))) @@ -781,7 +781,7 @@ ) ) ) - (if (and (zero? (logand (-> self control status) (cshape-moving-flags twall))) + (if (and (not (logtest? (-> self control status) (cshape-moving-flags twall))) (logtest? (-> self control old-status) (cshape-moving-flags twall)) (logtest? (-> self control unknown-surface00 flags) (surface-flags jump)) (< 0.0 (-> gp-0 y)) @@ -800,7 +800,7 @@ (if (< (- (-> *display* base-frame-counter) (-> self control unknown-dword70)) (seconds 0.2)) (set! f30-4 (+ 204800.0 f30-4)) ) - (if (and (zero? (logand (-> self control status) (cshape-moving-flags twall))) + (if (and (not (logtest? (-> self control status) (cshape-moving-flags twall))) (and (logtest? (-> self control old-status) (cshape-moving-flags twall)) (logtest? (-> self control unknown-surface00 flags) (surface-flags jump)) (< 0.0 (-> gp-0 y)) @@ -926,8 +926,8 @@ (defbehavior do-rotations2 target () (let ((gp-0 (vector-z-quaternion! (new-stack-vector0) (-> self control dir-targ))) (s5-0 - (if (and (or (zero? (logand (logior (-> self control status) (-> self control old-status)) (cshape-moving-flags onsurf tsurf)) - ) + (if (and (or (not (logtest? (logior (-> self control status) (-> self control old-status)) (cshape-moving-flags onsurf tsurf)) + ) (< (- (-> *display* base-frame-counter) (-> self control unknown-dword20)) (seconds 0.5)) (!= (-> self next-state name) 'target-walk) (< (- (-> *display* base-frame-counter) (-> self state-time)) (seconds 0.5)) @@ -1031,7 +1031,7 @@ (set! (-> self control unknown-dword11) (-> *display* base-frame-counter)) (set! (-> self control unknown-vector52 quad) (-> self control trans quad)) (if (and (>= (-> self control coverage) 1.0) - (zero? (logand (-> self control status) (cshape-moving-flags t-act on-water))) + (not (logtest? (-> self control status) (cshape-moving-flags t-act on-water))) (logtest? (-> self control status) (cshape-moving-flags onground)) ) (set! (-> self control last-known-safe-ground quad) (-> self control trans quad)) @@ -1063,8 +1063,8 @@ ) (if (and (= (-> self cam-user-mode) 'normal) (logtest? (-> self control unknown-surface00 flags) (surface-flags allow-look-around)) - (zero? (logand (-> self control root-prim prim-core action) (collide-action ca-7 ca-8 ca-9 ca-12 ca-13 ca-14)) - ) + (not (logtest? (-> self control root-prim prim-core action) (collide-action ca-7 ca-8 ca-9 ca-12 ca-13 ca-14)) + ) (-> *setting-control* current allow-look-around) (>= (- (-> *display* base-frame-counter) (-> self no-look-around-wait)) (seconds 0.05)) (not (and (= (-> self control ground-pat material) (pat-material ice)) @@ -1138,7 +1138,7 @@ ) 9420.8 ) - (zero? (logand (-> self control root-prim prim-core action) (collide-action ca-9 ca-14))) + (not (logtest? (-> self control root-prim prim-core action) (collide-action ca-9 ca-14))) #t ) ) @@ -1446,7 +1446,7 @@ (let ((gp-0 (new 'stack-no-clear 'vector))) (cond ((and (= (-> self next-state name) 'target-clone-anim) - (zero? (logand (-> self draw status) (draw-status hidden))) + (not (logtest? (-> self draw status) (draw-status hidden))) (begin (vector<-cspace! gp-0 (-> self node-list data 3)) (set! (-> gp-0 y) (+ -5896.192 (-> gp-0 y))) 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 38f4281de2..909b01d0c5 100644 --- a/test/decompiler/reference/jak1/engine/target/target-death_REF.gc +++ b/test/decompiler/reference/jak1/engine/target/target-death_REF.gc @@ -45,7 +45,7 @@ (set! (-> *load-boundary-target* 1 quad) (-> (target-pos 0) quad)) (set! (-> *load-boundary-target* 2 quad) (-> *load-boundary-target* 0 quad)) (set! (-> *load-boundary-target* 3 quad) (-> *load-boundary-target* 1 quad)) - (when (zero? (logand (-> *game-info* current-continue flags) (continue-flags intro sage-intro title))) + (when (not (logtest? (-> *game-info* current-continue flags) (continue-flags intro sage-intro title))) (set! (-> *level* border?) (-> *level* play?)) (set! (-> *setting-control* default border-mode) (-> *level* play?)) ) @@ -615,7 +615,7 @@ (defbehavior target-hit-push target ((arg0 vector) (arg1 matrix) (arg2 float) (arg3 float) (arg4 attack-info)) (case (-> arg4 angle) (('jump 'up 'up-forward) - (when (and (zero? (logand (-> self control root-prim prim-core action) (collide-action ca-9 ca-14))) + (when (and (not (logtest? (-> self control root-prim prim-core action) (collide-action ca-9 ca-14))) (not (and (= (-> self game mode) 'play) (>= 0.0 (-> self fact-info-target health)))) ) (if (and (cpad-pressed? (-> self control unknown-cpad-info00 number) circle) (can-feet?)) @@ -627,7 +627,7 @@ (>= (- (-> *display* base-frame-counter) (-> self control unknown-dword36)) (the-as time-frame (-> *TARGET-bank* stuck-timeout)) ) - (zero? (logand (-> self state-flags) (state-flags prevent-attack))) + (not (logtest? (-> self state-flags) (state-flags prevent-attack))) (zero? (logand (-> self control unknown-surface01 flags) (surface-flags prevent-attacks-during-launch-jump surf08)) ) ) @@ -789,7 +789,7 @@ (ja :num! (seek!)) (set! v1-40 (or (ja-done? 0) (and arg1 (logtest? (-> self control status) (cshape-moving-flags onsurf))))) ) - (while (and (or (zero? (logand (-> self control status) (cshape-moving-flags onsurf))) s2-1) (!= s2-1 'stuck)) + (while (and (or (not (logtest? (-> self control status) (cshape-moving-flags onsurf))) s2-1) (!= s2-1 'stuck)) (arg2) (+! f30-1 (* (-> arg0 shove-back) f28-1 (-> *display* seconds-per-frame))) (set! s2-1 (target-hit-push s3-1 s1-1 f30-1 (* (-> arg0 shove-back) f28-1) arg0)) @@ -867,7 +867,7 @@ ) ) (combine! gp-0 arg1) - (when (zero? (logand (-> gp-0 mask) (attack-mask vector))) + (when (not (logtest? (-> gp-0 mask) (attack-mask vector))) (vector-z-quaternion! (-> gp-0 vector) (-> self control unknown-quaternion00)) (vector-xz-normalize! (-> gp-0 vector) (- (fabs (-> gp-0 shove-back)))) (set! (-> gp-0 vector y) (-> gp-0 shove-up)) @@ -1000,7 +1000,7 @@ (defun death-movie-remap ((arg0 int) (arg1 int)) (let ((v1-0 (/ arg0 arg1))) (mod - (if (zero? (logand v1-0 1)) + (if (not (logtest? v1-0 1)) (logxor v1-0 arg0) (logand #xfffffff (- (logxor v1-0 arg0))) ) @@ -1022,7 +1022,7 @@ (send-event *camera* 'joystick 0.0 -1.0) (compute-alignment! (-> self align)) (let ((s5-0 (new 'stack-no-clear 'vector))) - (when (zero? (logand (-> self align flags) (align-flags disabled))) + (when (not (logtest? (-> self align flags) (align-flags disabled))) (vector-matrix*! s5-0 (the-as vector (-> self align delta)) (-> self control unknown-matrix01)) (vector-float*! (-> self control transv) s5-0 (-> *display* frames-per-second)) ) @@ -1305,7 +1305,7 @@ (set-setting! 'allow-progress #f 0.0 0) (target-death-anim gp-18) (when (and (< (rand-vu-int-count (-> *game-info* death-movie-tick)) (* (-> *death-spool-array* length) 2)) - (zero? (logand (-> self water flags) (water-flags wt09))) + (not (logtest? (-> self water flags) (water-flags wt09))) (!= (-> self control ground-pat material) 9) (!= (-> self control ground-pat material) 10) ) diff --git a/test/decompiler/reference/jak1/engine/target/target-handler_REF.gc b/test/decompiler/reference/jak1/engine/target/target-handler_REF.gc index 5c4725727a..e72e387462 100644 --- a/test/decompiler/reference/jak1/engine/target/target-handler_REF.gc +++ b/test/decompiler/reference/jak1/engine/target/target-handler_REF.gc @@ -35,7 +35,7 @@ object (cond ((= v1-0 'get-pickup) - (when (zero? (logand (-> self state-flags) (state-flags dying))) + (when (not (logtest? (-> self state-flags) (state-flags dying))) (let ((s4-0 (-> arg3 param 0)) (f28-0 (the-as float (-> arg3 param 1))) ) @@ -310,7 +310,7 @@ (set! (-> s5-0 shove-back) arg0) (set! (-> s5-0 shove-up) arg1) (set! (-> s5-0 angle) - (if (zero? (logand (logior (-> self control status) (-> self control old-status)) (cshape-moving-flags onsurf))) + (if (not (logtest? (logior (-> self control status) (-> self control old-status)) (cshape-moving-flags onsurf))) 'air 'shove ) @@ -340,7 +340,7 @@ (arg3 touching-shapes-entry) (arg4 (state symbol attack-info target)) ) - (when (zero? (logand (-> self state-flags) (state-flags being-attacked))) + (when (not (logtest? (-> self state-flags) (state-flags being-attacked))) (cond ((or (logtest? (-> self state-flags) (state-flags invulnerable timed-invulnerable invuln-powerup)) (and (logtest? (-> arg1 mask) (attack-mask mode)) @@ -382,7 +382,7 @@ ) (set! (-> self attack-info-rec prev-state) (-> self state)) (logior! (-> self attack-info-rec mask) (attack-mask atki13)) - (when (zero? (logand (-> self attack-info-rec mask) (attack-mask attacker))) + (when (not (logtest? (-> self attack-info-rec mask) (attack-mask attacker))) (set! (-> self attack-info-rec attacker) (process->handle arg2)) (logior! (-> self attack-info-rec mask) (attack-mask attacker)) ) @@ -732,7 +732,7 @@ ;; definition for function target-apply-tongue (defbehavior target-apply-tongue target ((arg0 vector)) - (when (zero? (logand (-> self state-flags) (state-flags being-attacked))) + (when (not (logtest? (-> self state-flags) (state-flags being-attacked))) (logior! (-> self state-flags) (state-flags prevent-attack prevent-duck remove-prevents)) (let ((gp-1 (vector-! (new 'stack-no-clear 'vector) arg0 (-> self control trans)))) (set! (-> self control unknown-float41) (lerp-scale @@ -771,7 +771,7 @@ (('shove) (when (!= (-> self next-state name) 'target-hit) (mem-copy! (the-as pointer (-> self attack-info-rec)) (the-as pointer (-> arg3 param 1)) 104) - (when (zero? (logand (-> self attack-info-rec mask) (attack-mask attacker))) + (when (not (logtest? (-> self attack-info-rec mask) (attack-mask attacker))) (set! (-> self attack-info-rec attacker) (process->handle arg0)) (logior! (-> self attack-info-rec mask) (attack-mask attacker)) ) @@ -861,7 +861,7 @@ (go target-edge-grab) ) (('pole-grab) - (if (zero? (logand (-> self control root-prim prim-core action) (collide-action ca-8))) + (if (not (logtest? (-> self control root-prim prim-core action) (collide-action ca-8))) (go target-pole-cycle (process->handle (the-as process (-> arg3 param 0)))) ) ) diff --git a/test/decompiler/reference/jak1/engine/target/target-util_REF.gc b/test/decompiler/reference/jak1/engine/target/target-util_REF.gc index db1e9aeec8..fcbb251456 100644 --- a/test/decompiler/reference/jak1/engine/target/target-util_REF.gc +++ b/test/decompiler/reference/jak1/engine/target/target-util_REF.gc @@ -763,7 +763,7 @@ (* (-> s1-0 x) (-> *display* seconds-per-frame)) ) ) - (if (zero? (logand arg0 (align-opts adjust-xz-vel keep-other-velocities))) + (if (not (logtest? arg0 (align-opts adjust-xz-vel keep-other-velocities))) (set! (-> a1-3 z) 0.0) ) ) @@ -780,7 +780,7 @@ (* (-> s1-0 z) (-> *display* seconds-per-frame)) ) ) - (if (zero? (logand arg0 (align-opts adjust-x-vel keep-other-velocities))) + (if (not (logtest? arg0 (align-opts adjust-x-vel keep-other-velocities))) (set! (-> a1-3 x) 0.0) ) ) @@ -820,7 +820,7 @@ (not (-> *setting-control* current spooling)) (not (-> *setting-control* current movie)) (not (-> *setting-control* current hint)) - (zero? (logand (-> self control status) (cshape-moving-flags t-act))) + (not (logtest? (-> self control status) (cshape-moving-flags t-act))) (zero? (logand (-> self water flags) (water-flags wt09))) ) ) @@ -833,8 +833,8 @@ (< 0.866 (-> self control surface-angle)) ) ) - (and (zero? (logand (-> self control unknown-surface01 flags) (surface-flags prevent-jump))) - (zero? (logand (-> self state-flags) (state-flags prevent-jump))) + (and (not (logtest? (-> self control unknown-surface01 flags) (surface-flags prevent-jump))) + (not (logtest? (-> self state-flags) (state-flags prevent-jump))) (case arg0 (('target-wheel-flip) (>= 0.5 (-> self control unknown-float61)) @@ -860,7 +860,7 @@ ;; definition for function fall-test ;; INFO: Return type mismatch object vs none. (defbehavior fall-test target () - (when (and (zero? (logand (-> self control status) (cshape-moving-flags onsurf))) + (when (and (not (logtest? (-> self control status) (cshape-moving-flags onsurf))) (>= (- (-> *display* base-frame-counter) (-> self control unknown-dword11)) (-> *TARGET-bank* ground-timeout)) (>= 0.0 (vector-dot (-> self control dynam gravity-normal) (-> self control transv))) (let ((v1-15 (ja-group))) @@ -887,7 +887,7 @@ ;; definition for function slide-down-test ;; INFO: Return type mismatch object vs none. (defbehavior slide-down-test target () - (if (and (zero? (logand (-> self control status) (cshape-moving-flags onsurf csmf07))) + (if (and (not (logtest? (-> self control status) (cshape-moving-flags onsurf csmf07))) (>= (- (-> *display* base-frame-counter) (-> self control unknown-dword11)) (-> *TARGET-bank* ground-timeout)) (logtest? (-> self control status) (cshape-moving-flags tsurf)) (< 0.5 (-> self control surface-angle)) @@ -910,7 +910,7 @@ ;; definition for function can-wheel? (defbehavior can-wheel? target () (and (logtest? (-> self control status) (cshape-moving-flags onsurf)) - (or (zero? (logand (-> self control status) (cshape-moving-flags twall))) + (or (not (logtest? (-> self control status) (cshape-moving-flags twall))) (>= 0.7 (-> self control touch-angle)) ) (and (< (-> self control unknown-float61) 0.7) @@ -923,9 +923,9 @@ (defbehavior can-duck? target () (and (logtest? (-> self control status) (cshape-moving-flags onsurf)) (>= (-> self control unknown-float60) 0.7) - (zero? (logand (-> self water flags) (water-flags wt11 wt12))) - (zero? (logand (-> self state-flags) (state-flags prevent-duck))) - (or (zero? (logand (-> self water flags) (water-flags wt10))) + (not (logtest? (-> self water flags) (water-flags wt11 wt12))) + (not (logtest? (-> self state-flags) (state-flags prevent-duck))) + (or (not (logtest? (-> self water flags) (water-flags wt10))) (< (- (- (-> self control trans y) (- (-> self water base-height) (-> self water wade-height)))) 2457.6) ) ) @@ -962,12 +962,9 @@ ;; definition for function can-hands? (defbehavior can-hands? target ((arg0 symbol)) (cond - ((or (zero? (logand (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-rel 0) - (pad-buttons square) - ) - ) + ((or (not (cpad-pressed? (-> self control unknown-cpad-info00 number) square)) (or (and (logtest? (-> self state-flags) (state-flags prevent-attack)) - (or (zero? (logand (-> self state-flags) (state-flags remove-prevents))) + (or (not (logtest? (-> self state-flags) (state-flags remove-prevents))) (not (and (= (-> self fact-info-target eco-type) (pickup-type eco-yellow)) (>= (-> self fact-info-target eco-level) 1.0) ) @@ -1156,7 +1153,7 @@ (set! (-> obj intersection quad) (-> arg0 intersection quad)) ) (cond - ((zero? (logand s4-0 (attack-mask vector))) + ((not (logtest? s4-0 (attack-mask vector))) (let* ((s3-0 pp) (s2-0 (handle->process (-> obj attacker))) (v1-39 (if (and (nonzero? s2-0) (type-type? (-> s2-0 type) process-drawable)) @@ -1187,15 +1184,15 @@ ) ) (set! (-> obj vector quad) (-> arg0 vector quad)) - (if (zero? (logand s4-0 (attack-mask shove-back))) + (if (not (logtest? s4-0 (attack-mask shove-back))) (set! (-> obj shove-back) (vector-xz-length (-> obj vector))) ) - (if (zero? (logand s4-0 (attack-mask shove-up))) + (if (not (logtest? s4-0 (attack-mask shove-up))) (set! (-> obj shove-up) (-> obj vector y)) ) ) ) - (if (zero? (logand (-> obj mask) (attack-mask dist))) + (if (not (logtest? (-> obj mask) (attack-mask dist))) (set! (-> obj dist) (fabs (-> obj shove-back))) ) (if (logtest? s4-0 (attack-mask trans)) diff --git a/test/decompiler/reference/jak1/engine/target/target2_REF.gc b/test/decompiler/reference/jak1/engine/target/target2_REF.gc index 4a1f031f64..cd18969c1d 100644 --- a/test/decompiler/reference/jak1/engine/target/target2_REF.gc +++ b/test/decompiler/reference/jak1/engine/target/target2_REF.gc @@ -825,7 +825,7 @@ :code (behavior () (set-forward-vel (the-as float 0.0)) (let ((gp-0 0)) - (while (zero? (logand (-> self control status) (cshape-moving-flags onsurf))) + (while (not (logtest? (-> self control status) (cshape-moving-flags onsurf))) (target-falling-anim-trans) (+! gp-0 (- (-> *display* base-frame-counter) (-> *display* old-base-frame-counter))) (suspend) @@ -975,7 +975,7 @@ ) (pad-buttons x) ) - (zero? (logand (-> self state-flags) (state-flags prevent-jump))) + (not (logtest? (-> self state-flags) (state-flags prevent-jump))) (>= (- (-> *display* base-frame-counter) (-> self state-time)) (seconds 0.1)) ) (set! (-> self control transv quad) (the-as uint128 0)) @@ -1305,7 +1305,7 @@ (until (ja-done? 0) (target-compute-edge-rider) (compute-alignment! (-> self align)) - (when (zero? (logand (-> self align flags) (align-flags disabled))) + (when (not (logtest? (-> self align flags) (align-flags disabled))) (vector-matrix*! s4-0 (the-as vector (-> self align delta)) (-> self control unknown-matrix01)) (move-by-vector! (-> self control) s4-0) ) @@ -1335,7 +1335,7 @@ (ja-no-eval :group! eichar-edge-grab-off-ja :num! (seek! (ja-aframe (the-as float 191.0) 0)) :frame-num 0.0) (until (ja-done? 0) (compute-alignment! (-> self align)) - (when (zero? (logand (-> self align flags) (align-flags disabled))) + (when (not (logtest? (-> self align flags) (align-flags disabled))) (vector-matrix*! gp-0 (the-as vector (-> self align delta)) (-> self control unknown-matrix01)) (move-by-vector! (-> self control) gp-0) ) @@ -1645,7 +1645,7 @@ ) (pad-buttons x) ) - (zero? (logand (-> self water flags) (water-flags wt09))) + (not (logtest? (-> self water flags) (water-flags wt09))) (zero? (logand (-> self state-flags) (state-flags prevent-jump))) ) (go target-jump (-> *TARGET-bank* jump-height-min) (-> *TARGET-bank* jump-height-max) (the-as surface #f)) @@ -1708,7 +1708,7 @@ ) :trans (behavior () ((-> self state-hook)) - (when (and (zero? (logand (-> self water flags) (water-flags wt10))) + (when (and (not (logtest? (-> self water flags) (water-flags wt10))) (>= (- (-> *display* base-frame-counter) (-> self water wade-time)) (seconds 0.05)) ) (if (logtest? (-> self water flags) (water-flags wt11)) @@ -1754,7 +1754,7 @@ :exit (-> target-wade-stance exit) :trans (behavior () ((-> self state-hook)) - (when (and (zero? (logand (-> self water flags) (water-flags wt10))) + (when (and (not (logtest? (-> self water flags) (water-flags wt10))) (>= (- (-> *display* base-frame-counter) (-> self water wade-time)) (seconds 0.1)) ) (if (logtest? (-> self water flags) (water-flags wt11)) @@ -2032,7 +2032,7 @@ ) (set-zero! (-> self water bob)) ) - (when (and (zero? (logand (-> self water flags) (water-flags wt11))) + (when (and (not (logtest? (-> self water flags) (water-flags wt11))) (>= (- (-> *display* base-frame-counter) (-> self state-time)) (seconds 0.1)) ) (if (logtest? (-> self water flags) (water-flags wt10)) @@ -2148,7 +2148,7 @@ ) (set-zero! (-> self water bob)) ) - (when (and (zero? (logand (-> self water flags) (water-flags wt11))) + (when (and (not (logtest? (-> self water flags) (water-flags wt11))) (>= (- (-> *display* base-frame-counter) (-> self water swim-time)) (seconds 0.1)) ) (if (logtest? (-> self water flags) (water-flags wt10)) @@ -2205,7 +2205,7 @@ (ja-no-eval :group! eichar-swim-walk-ja :num! (seek!) :frame-num (ja-aframe (the-as float 19.0) 0)) (until (ja-done? 0) (compute-alignment! (-> self align)) - (if (zero? (logand (-> self align flags) (align-flags disabled))) + (if (not (logtest? (-> self align flags) (align-flags disabled))) (set! (-> self control unknown-surface00 target-speed) (* (-> self align delta trans z) (-> self control unknown-surface01 alignv) (-> *display* frames-per-second)) ) @@ -2223,7 +2223,7 @@ (ja-no-eval :group! eichar-swim-walk-ja :num! (seek!) :frame-num 0.0) (until (ja-done? 0) (compute-alignment! (-> self align)) - (if (zero? (logand (-> self align flags) (align-flags disabled))) + (if (not (logtest? (-> self align flags) (align-flags disabled))) (set! (-> self control unknown-surface00 target-speed) (* (-> self align delta trans z) (-> self control unknown-surface01 alignv) (-> *display* frames-per-second)) ) @@ -2243,7 +2243,7 @@ (case arg2 (('attack 'attack-invinc) (let ((v1-2 (the-as attack-info (-> arg3 param 1)))) - (when (or (zero? (logand (-> v1-2 mask) (attack-mask mode))) (= (-> v1-2 mode) 'generic) (= (-> v1-2 mode) 'drown)) + (when (or (not (logtest? (-> v1-2 mask) (attack-mask mode))) (= (-> v1-2 mode) 'generic) (= (-> v1-2 mode) 'drown)) (set! (-> v1-2 mode) 'damage) (if (and (= (-> self game mode) 'play) (>= 1.0 (-> self fact-info-target health))) (set! (-> v1-2 mode) 'drown-death) @@ -2357,10 +2357,7 @@ ) ) (loop - (if (and (or (zero? (logand (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-abs 0) - (pad-buttons square) - ) - ) + (if (and (or (not (cpad-hold? (-> self control unknown-cpad-info00 number) square)) (-> self control unknown-spoolanim00) ) (>= (- (-> *display* base-frame-counter) (-> self state-time)) gp-0) @@ -2417,7 +2414,7 @@ :exit (-> target-swim-down exit) :trans (behavior () (if (and (cpad-pressed? (-> self control unknown-cpad-info00 number) x) - (zero? (logand (-> self state-flags) (state-flags prevent-jump))) + (not (logtest? (-> self state-flags) (state-flags prevent-jump))) (zero? (logand (-> self water flags) (water-flags wt13 wt14))) ) (go @@ -2451,7 +2448,7 @@ (the-as float 0.0) (the-as float 0.1) ) - (if (and (zero? (logand (-> self water flags) (water-flags wt12))) + (if (and (not (logtest? (-> self water flags) (water-flags wt12))) (or (>= (ja-aframe-num 0) 222.0) (and (!= (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) stick0-speed) 0.0) (>= (ja-aframe-num 0) 200.0) @@ -2461,7 +2458,7 @@ (goto cfg-37) ) (compute-alignment! (-> self align)) - (when (zero? (logand (-> self water flags) (water-flags wt12))) + (when (not (logtest? (-> self water flags) (water-flags wt12))) (logior! (-> self water flags) (water-flags wt04)) (set! gp-0 #f) ) @@ -2484,7 +2481,7 @@ (the-as float 0.0) (the-as float 0.1) ) - (if (zero? (logand (-> self water flags) (water-flags wt12))) + (if (not (logtest? (-> self water flags) (water-flags wt12))) (goto cfg-37) ) (if (cpad-pressed? (-> self control unknown-cpad-info00 number) x) @@ -2550,7 +2547,7 @@ (ja :group! eichar-swim-jump-ja :num! min) (until (and (ja-done? 0) (= (-> self skel root-channel 0) (-> self skel channel))) (compute-alignment! (-> self align)) - (if (zero? (logand (-> self align flags) (align-flags disabled))) + (if (not (logtest? (-> self align flags) (align-flags disabled))) (+! (-> self water align-offset) (* 0.6 (-> self align delta trans y))) ) (suspend) @@ -2603,7 +2600,7 @@ (the-as handle #f) ) ) - (if (zero? (logand (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons l3))) + (if (not (cpad-hold? 0 l3)) (target-timed-invulnerable (-> *TARGET-bank* hit-invulnerable-timeout) self) ) ) @@ -2863,7 +2860,7 @@ (cond ((not (-> self control unknown-spoolanim00)) ) - ((zero? (logand (-> self draw status) (draw-status hidden))) + ((not (logtest? (-> self draw status) (draw-status hidden))) (move-to-point! (-> self control) (the-as vector a1-2)) (matrix->quaternion (-> self control unknown-quaternion00) (-> gp-0 bone transform)) (quaternion-copy! (-> self control quat) (-> self control unknown-quaternion00)) diff --git a/test/decompiler/reference/jak1/engine/target/target_REF.gc b/test/decompiler/reference/jak1/engine/target/target_REF.gc index 208adf9889..2bd8fc9cac 100644 --- a/test/decompiler/reference/jak1/engine/target/target_REF.gc +++ b/test/decompiler/reference/jak1/engine/target/target_REF.gc @@ -92,7 +92,7 @@ ) (pad-buttons x) ) - (zero? (logand (-> self water flags) (water-flags wt09))) + (not (logtest? (-> self water flags) (water-flags wt09))) (< (- (-> *display* base-frame-counter) (-> self state-time)) (seconds 3)) (zero? (logand (-> self state-flags) (state-flags prevent-jump))) ) @@ -989,7 +989,7 @@ (if (can-hands? #t) (go target-running-attack) ) - (if (and (zero? (logand (-> self control status) (cshape-moving-flags onsurf))) + (if (and (not (logtest? (-> self control status) (cshape-moving-flags onsurf))) (>= (- (-> *display* base-frame-counter) (-> self control unknown-dword11)) (seconds 0.08)) ) (go target-falling #f) @@ -1217,8 +1217,7 @@ ) :trans (behavior () ((-> self state-hook)) - (if (and (or (zero? (logand (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-abs 0) (pad-buttons l1 r1)) - ) + (if (and (or (not (cpad-hold? (-> self control unknown-cpad-info00 number) l1 r1)) (logtest? (-> self state-flags) (state-flags prevent-duck)) ) (let ((v1-13 (ja-group))) @@ -1304,8 +1303,7 @@ :exit (-> target-duck-stance exit) :trans (behavior () ((-> self state-hook)) - (if (and (or (zero? (logand (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-abs 0) (pad-buttons l1 r1)) - ) + (if (and (or (not (cpad-hold? (-> self control unknown-cpad-info00 number) l1 r1)) (logtest? (-> self state-flags) (state-flags prevent-duck)) (and (logtest? (-> self water flags) (water-flags wt10)) (>= (- (- (-> self control trans y) (- (-> self water base-height) (-> self water wade-height)))) 2457.6) @@ -1459,7 +1457,7 @@ (if (and (cpad-pressed? (-> self control unknown-cpad-info00 number) x) (< (vector-dot (-> self control dynam gravity-normal) (-> self control transv)) 12288.0) (and (< -61440.0 (vector-dot (-> self control dynam gravity-normal) (-> self control transv))) - (zero? (logand (-> self water flags) (water-flags wt09))) + (not (logtest? (-> self water flags) (water-flags wt09))) (zero? (logand (-> self state-flags) (state-flags prevent-jump))) ) ) @@ -1471,7 +1469,7 @@ (>= (- (-> *display* base-frame-counter) (-> self control unknown-dword36)) (the-as time-frame (-> *TARGET-bank* stuck-timeout)) ) - (zero? (logand (-> self state-flags) (state-flags prevent-attack))) + (not (logtest? (-> self state-flags) (state-flags prevent-attack))) (zero? (logand (-> self control unknown-surface01 flags) (surface-flags prevent-attacks-during-launch-jump surf08)) ) ) @@ -1594,7 +1592,7 @@ (>= (- (-> *display* base-frame-counter) (-> self control unknown-dword36)) (the-as time-frame (-> *TARGET-bank* stuck-timeout)) ) - (zero? (logand (-> self state-flags) (state-flags prevent-attack))) + (not (logtest? (-> self state-flags) (state-flags prevent-attack))) (zero? (logand (-> self control unknown-surface01 flags) (surface-flags prevent-attacks-during-launch-jump surf08)) ) ) @@ -1695,7 +1693,7 @@ (>= (- (-> *display* base-frame-counter) (-> self control unknown-dword36)) (the-as time-frame (-> *TARGET-bank* stuck-timeout)) ) - (zero? (logand (-> self state-flags) (state-flags prevent-attack))) + (not (logtest? (-> self state-flags) (state-flags prevent-attack))) (zero? (logand (-> self control unknown-surface01 flags) (surface-flags prevent-attacks-during-launch-jump surf08)) ) ) @@ -2165,7 +2163,7 @@ ) ) ) - (zero? (logand (-> self state-flags) (state-flags prevent-jump prevent-attack))) + (not (logtest? (-> self state-flags) (state-flags prevent-jump prevent-attack))) (zero? (logand (-> self control unknown-surface01 flags) (surface-flags prevent-attacks-during-launch-jump))) ) ) @@ -2219,7 +2217,7 @@ (when (not (ja-min? 0)) (cond ((and (>= (ja-aframe-num 0) 20.0) - (and (and (zero? (logand (-> self control status) (cshape-moving-flags onsurf))) + (and (and (not (logtest? (-> self control status) (cshape-moving-flags onsurf))) (>= (- (-> *display* base-frame-counter) (-> self control unknown-dword11)) (-> *TARGET-bank* ground-timeout)) (>= 0.0 (vector-dot (-> self control dynam gravity-normal) (-> self control transv))) (let ((v1-39 (ja-group))) @@ -2246,10 +2244,7 @@ ) (set-forward-vel (the-as float 0.0)) ) - ((and (zero? (logand (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-abs 0) - (pad-buttons square) - ) - ) + ((and (not (cpad-hold? (-> self control unknown-cpad-info00 number) square)) (>= (- (-> *display* base-frame-counter) (-> self state-time)) (seconds 0.05)) ) (if (= (-> self control ground-pat material) (pat-material ice)) @@ -2284,7 +2279,7 @@ (+! gp-2 1) ) ) - (if (and (zero? (logand (-> self control status) (cshape-moving-flags onsurf))) + (if (and (not (logtest? (-> self control status) (cshape-moving-flags onsurf))) (>= (- (-> *display* base-frame-counter) (-> self control unknown-dword11)) (-> *TARGET-bank* ground-timeout)) (>= 0.0 (vector-dot (-> self control dynam gravity-normal) (-> self control transv))) (let ((v1-121 (ja-group))) @@ -2553,7 +2548,7 @@ (>= (- (-> *display* base-frame-counter) (-> self control unknown-dword36)) (the-as time-frame (-> *TARGET-bank* stuck-timeout)) ) - (zero? (logand (-> self state-flags) (state-flags prevent-attack))) + (not (logtest? (-> self state-flags) (state-flags prevent-attack))) (zero? (logand (-> self control unknown-surface01 flags) (surface-flags prevent-attacks-during-launch-jump surf08)) ) ) @@ -2711,7 +2706,7 @@ (when (and (or (< (target-move-dist (seconds 0.1)) 1638.4) (and (logtest? (-> self control status) (cshape-moving-flags twall)) (< 0.7 (-> self control poly-angle))) ) - (zero? (logand (-> self control status) (cshape-moving-flags t-act))) + (not (logtest? (-> self control status) (cshape-moving-flags t-act))) (>= (-> self control unknown-uint20) (the-as uint 2)) ) (set! (-> self control unknown-dword36) (-> *display* base-frame-counter)) @@ -3133,7 +3128,7 @@ ) ) (set! (-> self state-time) (-> *display* base-frame-counter)) - (while (zero? (logand (-> self control status) (cshape-moving-flags onsurf))) + (while (not (logtest? (-> self control status) (cshape-moving-flags onsurf))) (when (>= (- (-> *display* base-frame-counter) (-> self state-time)) (seconds 0.01)) (when (not (ja-group? eichar-jump-loop-ja)) (ja-channel-push! 1 (seconds 0.1)) diff --git a/test/decompiler/reference/jak1/engine/ui/hud-classes_REF.gc b/test/decompiler/reference/jak1/engine/ui/hud-classes_REF.gc index 6defa147d9..431e86c3fb 100644 --- a/test/decompiler/reference/jak1/engine/ui/hud-classes_REF.gc +++ b/test/decompiler/reference/jak1/engine/ui/hud-classes_REF.gc @@ -330,7 +330,7 @@ (let ((f0-3 128.0)) (when (and *target* (= (-> *target* fact-info-target health) 1.0)) (let ((v1-16 (logand (-> *display* integral-frame-counter) 7))) - (set! f0-3 (if (zero? (logand (-> *display* integral-frame-counter) 8)) + (set! f0-3 (if (not (logtest? (-> *display* integral-frame-counter) 8)) (+ 128.0 (* 18.142857 (the float v1-16))) (- 255.0 (* 18.142857 (the float v1-16))) ) diff --git a/test/decompiler/reference/jak1/kernel/gcommon_REF.gc b/test/decompiler/reference/jak1/kernel/gcommon_REF.gc index 2f89c791bc..8d805ab99e 100644 --- a/test/decompiler/reference/jak1/kernel/gcommon_REF.gc +++ b/test/decompiler/reference/jak1/kernel/gcommon_REF.gc @@ -870,7 +870,7 @@ ;; definition for function print-tree-bitmask (defun print-tree-bitmask ((bits int) (count int)) (dotimes (i count) - (if (zero? (logand bits 1)) + (if (not (logtest? bits 1)) (format #t " ") (format #t "| ") ) @@ -993,7 +993,7 @@ ) ((= expected-type binteger) (cond - ((zero? (logand (the-as int obj) 7)) + ((not (logtest? (the-as int obj) 7)) #t ) (else diff --git a/test/decompiler/reference/jak1/kernel/gkernel_REF.gc b/test/decompiler/reference/jak1/kernel/gkernel_REF.gc index 7e8aae732c..369c446da8 100644 --- a/test/decompiler/reference/jak1/kernel/gkernel_REF.gc +++ b/test/decompiler/reference/jak1/kernel/gkernel_REF.gc @@ -959,7 +959,7 @@ ;; definition for function execute-process-tree (defun execute-process-tree ((arg0 process-tree) (arg1 (function object object)) (arg2 kernel-context)) (let ((s3-0 (or (logtest? (-> arg0 mask) (process-mask process-tree)) - (not (and (zero? (logand (-> arg2 prevent-from-run) (-> arg0 mask))) (run-logic? arg0))) + (not (and (not (logtest? (-> arg2 prevent-from-run) (-> arg0 mask))) (run-logic? arg0))) (arg1 arg0) ) ) @@ -984,7 +984,7 @@ ;; definition for function search-process-tree (defun search-process-tree ((arg0 process-tree) (arg1 (function process-tree object))) - (when (zero? (logand (-> arg0 mask) (process-mask process-tree))) + (when (not (logtest? (-> arg0 mask) (process-mask process-tree))) (if (arg1 arg0) (return arg0) ) diff --git a/test/decompiler/reference/jak1/levels/beach/beach-obs_REF.gc b/test/decompiler/reference/jak1/levels/beach/beach-obs_REF.gc index bc1ca9a167..16c09e5575 100644 --- a/test/decompiler/reference/jak1/levels/beach/beach-obs_REF.gc +++ b/test/decompiler/reference/jak1/levels/beach/beach-obs_REF.gc @@ -1129,12 +1129,12 @@ (cond ((not (task-closed? (game-task beach-flutflut) (task-status need-introduction))) ) - ((zero? (logand (-> self ambients-played) 8)) + ((not (logtest? (-> self ambients-played) 8)) (if (play-ambient (-> self ambient) "BIR-AM04" #f (the-as vector #f)) (logior! (-> self ambients-played) 8) ) ) - ((zero? (logand (-> self ambients-played) 512)) + ((not (logtest? (-> self ambients-played) 512)) (if (play-ambient (-> self ambient) "BIR-AM10" #f (the-as vector #f)) (logior! (-> self ambients-played) 512) ) @@ -1185,22 +1185,22 @@ (set! (-> self ambients-played) 0) 0 ) - ((and (zero? (logand (-> self ambients-played) 1)) (< (vector-length gp-0) 327680.0) (< -61440.0 (-> gp-0 y))) + ((and (not (logtest? (-> self ambients-played) 1)) (< (vector-length gp-0) 327680.0) (< -61440.0 (-> gp-0 y))) (if (play-ambient (-> self ambient) "BIR-AM01" #f (the-as vector #f)) (logior! (-> self ambients-played) 1) ) ) - ((and (zero? (logand (-> self ambients-played) 2)) (< (vector-length gp-0) 163840.0) (< -40960.0 (-> gp-0 y))) + ((and (not (logtest? (-> self ambients-played) 2)) (< (vector-length gp-0) 163840.0) (< -40960.0 (-> gp-0 y))) (if (play-ambient (-> self ambient) "BIR-AM02" #f (the-as vector #f)) (logior! (-> self ambients-played) 2) ) ) - ((and (zero? (logand (-> self ambients-played) 16)) (< (vector-length gp-0) 81920.0) (< -24576.0 (-> gp-0 y))) + ((and (not (logtest? (-> self ambients-played) 16)) (< (vector-length gp-0) 81920.0) (< -24576.0 (-> gp-0 y))) (if (play-ambient (-> self ambient) "BIR-AM05" #f (the-as vector #f)) (logior! (-> self ambients-played) 16) ) ) - ((and (zero? (logand (-> self ambients-played) 4)) (< (vector-length gp-0) 40960.0) (< -24576.0 (-> gp-0 y))) + ((and (not (logtest? (-> self ambients-played) 4)) (< (vector-length gp-0) 40960.0) (< -24576.0 (-> gp-0 y))) (if (play-ambient (-> self ambient) "BIR-AM03" #f (the-as vector #f)) (logior! (-> self ambients-played) 4) ) diff --git a/test/decompiler/reference/jak1/levels/beach/lurkercrab_REF.gc b/test/decompiler/reference/jak1/levels/beach/lurkercrab_REF.gc index ab1dbf3795..bdfb1eecab 100644 --- a/test/decompiler/reference/jak1/levels/beach/lurkercrab_REF.gc +++ b/test/decompiler/reference/jak1/levels/beach/lurkercrab_REF.gc @@ -102,7 +102,7 @@ 6144.0 16384.0 ) - (the-as object (if (zero? (logand (-> obj nav-enemy-flags) (nav-enemy-flags navenmf8))) + (the-as object (if (not (logtest? (-> obj nav-enemy-flags) (nav-enemy-flags navenmf8))) (do-push-aways! (-> obj collide-info)) ) ) diff --git a/test/decompiler/reference/jak1/levels/beach/seagull_REF.gc b/test/decompiler/reference/jak1/levels/beach/seagull_REF.gc index 0a4e318250..cd7354677b 100644 --- a/test/decompiler/reference/jak1/levels/beach/seagull_REF.gc +++ b/test/decompiler/reference/jak1/levels/beach/seagull_REF.gc @@ -276,7 +276,7 @@ (vector-! s5-0 (-> obj flock 0 target) (-> obj root-override trans)) (when (< (vector-dot s5-0 s5-0) 6710886400.0) (let ((v1-5 (ash 1 (-> obj index)))) - (when (zero? (logand v1-5 (-> obj flock 0 bird-at-waterfall))) + (when (not (logtest? v1-5 (-> obj flock 0 bird-at-waterfall))) (logior! (-> obj flock 0 bird-at-waterfall) v1-5) (+! (-> obj flock 0 birds-at-waterfall) 1) ) @@ -703,7 +703,7 @@ (vector-! s4-0 (-> s5-0 flock 0 target) (-> s5-0 root-override trans)) (when (< (vector-dot s4-0 s4-0) 6710886400.0) (let ((v1-24 (ash 1 (-> s5-0 index)))) - (when (zero? (logand v1-24 (-> s5-0 flock 0 bird-at-waterfall))) + (when (not (logtest? v1-24 (-> s5-0 flock 0 bird-at-waterfall))) (logior! (-> s5-0 flock 0 bird-at-waterfall) v1-24) (+! (-> s5-0 flock 0 birds-at-waterfall) 1) ) @@ -896,7 +896,7 @@ (vector-! s5-0 (-> gp-0 flock 0 target) (-> gp-0 root-override trans)) (when (< (vector-dot s5-0 s5-0) 6710886400.0) (let ((v1-26 (ash 1 (-> gp-0 index)))) - (when (zero? (logand v1-26 (-> gp-0 flock 0 bird-at-waterfall))) + (when (not (logtest? v1-26 (-> gp-0 flock 0 bird-at-waterfall))) (logior! (-> gp-0 flock 0 bird-at-waterfall) v1-26) (+! (-> gp-0 flock 0 birds-at-waterfall) 1) ) @@ -1394,7 +1394,7 @@ ) ) ) - (while (zero? (logand (-> gp-0 extra perm status) (entity-perm-status complete))) + (while (not (logtest? (-> gp-0 extra perm status) (entity-perm-status complete))) (suspend) ) ) diff --git a/test/decompiler/reference/jak1/levels/common/battlecontroller_REF.gc b/test/decompiler/reference/jak1/levels/common/battlecontroller_REF.gc index 5efdf12dd3..25d9fd2064 100644 --- a/test/decompiler/reference/jak1/levels/common/battlecontroller_REF.gc +++ b/test/decompiler/reference/jak1/levels/common/battlecontroller_REF.gc @@ -213,7 +213,7 @@ battlecontroller-default-event-handler (eval-path-curve-div! (-> s5-0 path) s3-0 (the float (-> s5-0 state)) 'interp) (send-event s4-0 'cue-jump-to-point s3-0) ) - (if (zero? (logand (-> (the-as nav-enemy s4-0) nav-enemy-flags) (nav-enemy-flags navenmf11))) + (if (not (logtest? (-> (the-as nav-enemy s4-0) nav-enemy-flags) (nav-enemy-flags navenmf11))) (+! (-> s5-0 state) 1) ) ) diff --git a/test/decompiler/reference/jak1/levels/common/nav-enemy_REF.gc b/test/decompiler/reference/jak1/levels/common/nav-enemy_REF.gc index 95afa99b01..6ec8c8d278 100644 --- a/test/decompiler/reference/jak1/levels/common/nav-enemy_REF.gc +++ b/test/decompiler/reference/jak1/levels/common/nav-enemy_REF.gc @@ -81,10 +81,10 @@ (defmethod common-post nav-enemy ((obj nav-enemy)) (when (and (logtest? (-> obj nav-enemy-flags) (nav-enemy-flags navenmf8)) (or (not *target*) - (and (zero? (logand (-> *target* state-flags) + (and (not (logtest? (-> *target* state-flags) (state-flags being-attacked invulnerable timed-invulnerable invuln-powerup do-not-notice dying) ) - ) + ) (>= (- (-> *display* base-frame-counter) (-> obj touch-time)) (seconds 0.05)) ) ) @@ -551,11 +551,11 @@ nav-enemy-default-event-handler ;; definition for method 46 of type nav-enemy (defmethod TODO-RENAME-46 nav-enemy ((obj nav-enemy) (arg0 float)) (and *target* - (zero? (logand (-> *target* state-flags) + (not (logtest? (-> *target* state-flags) (state-flags being-attacked invulnerable timed-invulnerable invuln-powerup do-not-notice dying) ) - ) - (and (or (zero? (logand (-> obj nav-enemy-flags) (nav-enemy-flags navenmf12))) + ) + (and (or (not (logtest? (-> obj nav-enemy-flags) (nav-enemy-flags navenmf12))) (< (vector-vector-distance (target-pos 0) (-> obj collide-info trans)) arg0) ) (nav-enemy-test-point-near-nav-mesh? (-> *target* control shadow-pos)) @@ -741,7 +741,7 @@ nav-enemy-default-event-handler (when (not s4-1) (compute-alignment! (-> self align)) (align! (-> self align) (align-opts adjust-y-vel ignore-y-if-zero) 1.0 arg1 1.0) - (when (zero? (logand (-> self align flags) (align-flags disabled))) + (when (not (logtest? (-> self align flags) (align-flags disabled))) (let ((f0-6 (* (- (-> self align delta trans z)) (-> *display* frames-per-second)))) (set! (-> self collide-info transv x) (* (-> self hit-from-dir x) f0-6)) (set! (-> self collide-info transv z) (* (-> self hit-from-dir z) f0-6)) @@ -802,7 +802,7 @@ nav-enemy-default-event-handler ;; definition for method 12 of type nav-enemy (defmethod run-logic? nav-enemy ((obj nav-enemy)) - (or (zero? (logand (-> obj mask) (process-mask actor-pause))) + (or (not (logtest? (-> obj mask) (process-mask actor-pause))) (or (and (nonzero? (-> obj draw)) (and (>= (+ (-> *ACTOR-bank* pause-dist) (-> obj collide-info pause-adjust-distance)) (vector-vector-distance (-> obj collide-info trans) (camera-pos)) diff --git a/test/decompiler/reference/jak1/levels/common/ropebridge_REF.gc b/test/decompiler/reference/jak1/levels/common/ropebridge_REF.gc index ba18c99a5a..393185cd7c 100644 --- a/test/decompiler/reference/jak1/levels/common/ropebridge_REF.gc +++ b/test/decompiler/reference/jak1/levels/common/ropebridge_REF.gc @@ -1051,7 +1051,7 @@ ;; definition for method 12 of type ropebridge (defmethod run-logic? ropebridge ((obj ropebridge)) - (or (zero? (logand (-> obj mask) (process-mask actor-pause))) + (or (not (logtest? (-> obj mask) (process-mask actor-pause))) (< (- (-> *display* base-frame-counter) (-> obj agitated-time-stamp)) (seconds 5)) (or (>= (-> obj sleep-dist) (vector-vector-distance (-> obj root-override trans) (math-camera-pos))) (and (nonzero? (-> obj skel)) (!= (-> obj skel root-channel 0) (-> obj skel channel))) diff --git a/test/decompiler/reference/jak1/levels/common/sharkey_REF.gc b/test/decompiler/reference/jak1/levels/common/sharkey_REF.gc index 9f1134f4ea..ba6a2ed6ef 100644 --- a/test/decompiler/reference/jak1/levels/common/sharkey_REF.gc +++ b/test/decompiler/reference/jak1/levels/common/sharkey_REF.gc @@ -99,7 +99,7 @@ nav-enemy-default-event-handler ;; definition for method 12 of type sharkey (defmethod run-logic? sharkey ((obj sharkey)) - (or (zero? (logand (-> obj mask) (process-mask actor-pause))) + (or (not (logtest? (-> obj mask) (process-mask actor-pause))) (or (>= (+ (-> *ACTOR-bank* pause-dist) (-> obj collide-info pause-adjust-distance)) (vector-vector-distance (-> obj collide-info trans) (math-camera-pos)) ) @@ -280,7 +280,7 @@ nav-enemy-default-event-handler ) ) ((sharkey-notice-player?) - (when (zero? (logand (-> self nav-enemy-flags) (nav-enemy-flags navenmf0))) + (when (not (logtest? (-> self nav-enemy-flags) (nav-enemy-flags navenmf0))) (logior! (-> self nav-enemy-flags) (nav-enemy-flags navenmf0)) (set! (-> self notice-time) (-> *display* base-frame-counter)) ) diff --git a/test/decompiler/reference/jak1/levels/finalboss/final-door_REF.gc b/test/decompiler/reference/jak1/levels/finalboss/final-door_REF.gc index 562abd3213..b309b1f601 100644 --- a/test/decompiler/reference/jak1/levels/finalboss/final-door_REF.gc +++ b/test/decompiler/reference/jak1/levels/finalboss/final-door_REF.gc @@ -222,7 +222,7 @@ (ja-post) (loop (if (and (and *target* (>= 61440.0 (vector-vector-distance (-> self root trans) (-> *target* control trans)))) - (and (zero? (logand (-> *target* state-flags) (state-flags grabbed))) + (and (not (logtest? (-> *target* state-flags) (state-flags grabbed))) (and (>= (-> *game-info* fuel) 100.0) (not (and (-> self entity) (logtest? (-> self entity extra perm status) (entity-perm-status complete)))) (= (get-task-status (game-task finalboss-movies)) (task-status need-reward-speech)) diff --git a/test/decompiler/reference/jak1/levels/finalboss/light-eco_REF.gc b/test/decompiler/reference/jak1/levels/finalboss/light-eco_REF.gc index 8df4f96807..6fa9346023 100644 --- a/test/decompiler/reference/jak1/levels/finalboss/light-eco_REF.gc +++ b/test/decompiler/reference/jak1/levels/finalboss/light-eco_REF.gc @@ -684,7 +684,7 @@ (defmethod spawn-child-eco light-eco-mother ((obj light-eco-mother)) (countdown (s3-0 4) (let ((gp-0 (rand-vu-int-count 32))) - (when (zero? (logand (-> obj angle-mask) (ash 1 gp-0))) + (when (not (logtest? (-> obj angle-mask) (ash 1 gp-0))) (let ((f28-0 (* 2048.0 (the float gp-0))) (f30-0 (rand-vu-float-range 61440.0 88514.56)) (s4-0 (new 'stack-no-clear 'vector)) diff --git a/test/decompiler/reference/jak1/levels/finalboss/robotboss-misc_REF.gc b/test/decompiler/reference/jak1/levels/finalboss/robotboss-misc_REF.gc index 1ebf1fda17..a6466ca346 100644 --- a/test/decompiler/reference/jak1/levels/finalboss/robotboss-misc_REF.gc +++ b/test/decompiler/reference/jak1/levels/finalboss/robotboss-misc_REF.gc @@ -45,7 +45,7 @@ (none) ) :trans (behavior () - (when (zero? (logand (-> *camera* master-options) 2)) + (when (not (logtest? (-> *camera* master-options) 2)) (set! *camera-base-mode* cam-string) (cam-slave-go cam-free-floating) ) diff --git a/test/decompiler/reference/jak1/levels/finalboss/robotboss_REF.gc b/test/decompiler/reference/jak1/levels/finalboss/robotboss_REF.gc index 9f15b7f230..5995100516 100644 --- a/test/decompiler/reference/jak1/levels/finalboss/robotboss_REF.gc +++ b/test/decompiler/reference/jak1/levels/finalboss/robotboss_REF.gc @@ -2439,10 +2439,10 @@ (when (and arg1 (nonzero? (-> self looping-sound 1))) (update! (-> self looping-sound 1)) (if (and *target* - (zero? (logand (-> *target* state-flags) + (not (logtest? (-> *target* state-flags) (state-flags being-attacked invulnerable timed-invulnerable invuln-powerup do-not-notice dying) ) - ) + ) (>= 8192.0 (vector-vector-distance gp-0 (target-pos 0))) ) (send-event *target* 'attack #f (static-attack-info ((shove-up (meters 2.5)) (shove-back (meters 7.5))))) diff --git a/test/decompiler/reference/jak1/levels/flut_common/target-flut_REF.gc b/test/decompiler/reference/jak1/levels/flut_common/target-flut_REF.gc index 5514b74e3d..edb91b49e9 100644 --- a/test/decompiler/reference/jak1/levels/flut_common/target-flut_REF.gc +++ b/test/decompiler/reference/jak1/levels/flut_common/target-flut_REF.gc @@ -331,7 +331,7 @@ (('shove) (when (!= (-> self next-state name) 'target-hit) (mem-copy! (the-as pointer (-> self attack-info-rec)) (the-as pointer (-> arg3 param 1)) 104) - (when (zero? (logand (-> self attack-info-rec mask) (attack-mask attacker))) + (when (not (logtest? (-> self attack-info-rec mask) (attack-mask attacker))) (set! (-> self attack-info-rec attacker) (process->handle arg0)) (logior! (-> self attack-info-rec mask) (attack-mask attacker)) ) @@ -567,7 +567,7 @@ (if (can-hands? #t) (go target-flut-running-attack) ) - (if (and (zero? (logand (-> self control status) (cshape-moving-flags onsurf))) + (if (and (not (logtest? (-> self control status) (cshape-moving-flags onsurf))) (and (>= (- (-> *display* base-frame-counter) (-> self control unknown-dword11)) (-> *FLUT-bank* ground-timeout)) (>= 0.0 (vector-dot (-> self control dynam gravity-normal) (-> self control transv))) (let ((v1-37 (ja-group))) @@ -663,7 +663,7 @@ (if (can-hands? #t) (go target-flut-running-attack) ) - (if (and (zero? (logand (-> self control status) (cshape-moving-flags onsurf))) + (if (and (not (logtest? (-> self control status) (cshape-moving-flags onsurf))) (and (>= (- (-> *display* base-frame-counter) (-> self control unknown-dword11)) (-> *FLUT-bank* ground-timeout)) (>= 0.0 (vector-dot (-> self control dynam gravity-normal) (-> self control transv))) (let ((v1-37 (ja-group))) @@ -856,8 +856,8 @@ ) (if (and (cpad-pressed? (-> self control unknown-cpad-info00 number) x) (< (vector-dot (-> self control dynam gravity-normal) (-> self control transv)) 40960.0) - (and (zero? (logand (-> self water flags) (water-flags wt09))) - (zero? (logand (-> self state-flags) (state-flags prevent-jump))) + (and (not (logtest? (-> self water flags) (water-flags wt09))) + (not (logtest? (-> self state-flags) (state-flags prevent-jump))) (< 4096.0 (target-height-above-ground)) ) ) @@ -869,7 +869,7 @@ (>= (- (-> *display* base-frame-counter) (-> self control unknown-dword36)) (the-as time-frame (-> *TARGET-bank* stuck-timeout)) ) - (zero? (logand (-> self state-flags) (state-flags prevent-attack))) + (not (logtest? (-> self state-flags) (state-flags prevent-attack))) (zero? (logand (-> self control unknown-surface01 flags) (surface-flags prevent-attacks-during-launch-jump surf08)) ) ) @@ -984,9 +984,9 @@ ) (pad-buttons square) ) - (and (zero? (logand (-> self state-flags) (state-flags prevent-attack))) - (zero? (logand (-> self control unknown-surface01 flags) (surface-flags prevent-attacks-during-launch-jump surf08)) - ) + (and (not (logtest? (-> self state-flags) (state-flags prevent-attack))) + (not (logtest? (-> self control unknown-surface01 flags) (surface-flags prevent-attacks-during-launch-jump surf08)) + ) (>= (- (-> *display* base-frame-counter) (-> self control unknown-dword36)) (the-as time-frame (-> *TARGET-bank* stuck-timeout)) ) @@ -1103,7 +1103,7 @@ (if (move-legs?) (go target-flut-walk) ) - (if (and (zero? (logand (-> self control status) (cshape-moving-flags onsurf))) + (if (and (not (logtest? (-> self control status) (cshape-moving-flags onsurf))) (and (>= (- (-> *display* base-frame-counter) (-> self control unknown-dword11)) (-> *FLUT-bank* ground-timeout)) (>= 0.0 (vector-dot (-> self control dynam gravity-normal) (-> self control transv))) (let ((v1-34 (ja-group))) @@ -1370,7 +1370,7 @@ (when (not (ja-min? 0)) (cond ((and (>= (ja-aframe-num 0) 20.0) - (and (and (zero? (logand (-> self control status) (cshape-moving-flags onsurf))) + (and (and (not (logtest? (-> self control status) (cshape-moving-flags onsurf))) (>= (- (-> *display* base-frame-counter) (-> self control unknown-dword11)) (-> *FLUT-bank* ground-timeout)) (>= 0.0 (vector-dot (-> self control dynam gravity-normal) (-> self control transv))) (let ((v1-39 (ja-group))) @@ -1423,7 +1423,7 @@ (set! f30-0 (* f30-0 (the-as float (fmin 1.0 (the-as float (-> self control unknown-float140)))))) ) ) - (if (and (zero? (logand (-> self control status) (cshape-moving-flags onsurf))) + (if (and (not (logtest? (-> self control status) (cshape-moving-flags onsurf))) (>= (- (-> *display* base-frame-counter) (-> self control unknown-dword11)) (-> *FLUT-bank* ground-timeout)) (>= 0.0 (vector-dot (-> self control dynam gravity-normal) (-> self control transv))) (let ((v1-105 (ja-group))) @@ -1702,7 +1702,7 @@ ) ) (combine! gp-0 arg1) - (when (zero? (logand (-> gp-0 mask) (attack-mask vector))) + (when (not (logtest? (-> gp-0 mask) (attack-mask vector))) (vector-z-quaternion! (-> gp-0 vector) (-> self control unknown-quaternion00)) (vector-xz-normalize! (-> gp-0 vector) (- (fabs (-> gp-0 shove-back)))) (set! (-> gp-0 vector y) (-> gp-0 shove-up)) @@ -1901,7 +1901,7 @@ (until (ja-done? 0) (compute-alignment! (-> self align)) (let ((gp-5 (new 'stack-no-clear 'vector))) - (when (zero? (logand (-> self align flags) (align-flags disabled))) + (when (not (logtest? (-> self align flags) (align-flags disabled))) (vector-matrix*! gp-5 (the-as vector (-> self align delta)) (-> self control unknown-matrix01)) (vector-float*! (-> self control transv) gp-5 (-> *display* frames-per-second)) ) @@ -2022,7 +2022,7 @@ :code (behavior ((arg0 handle)) (set-forward-vel (the-as float 0.0)) (let ((s5-0 0)) - (while (zero? (logand (-> self control status) (cshape-moving-flags onsurf))) + (while (not (logtest? (-> self control status) (cshape-moving-flags onsurf))) (target-flut-falling-anim-trans) (+! s5-0 (- (-> *display* base-frame-counter) (-> *display* old-base-frame-counter))) (suspend) diff --git a/test/decompiler/reference/jak1/levels/jungle/darkvine_REF.gc b/test/decompiler/reference/jak1/levels/jungle/darkvine_REF.gc index 1cbd96aad5..a27326e29a 100644 --- a/test/decompiler/reference/jak1/levels/jungle/darkvine_REF.gc +++ b/test/decompiler/reference/jak1/levels/jungle/darkvine_REF.gc @@ -42,7 +42,7 @@ ;; definition for method 12 of type darkvine (defmethod run-logic? darkvine ((obj darkvine)) - (or (zero? (logand (-> obj mask) (process-mask actor-pause))) + (or (not (logtest? (-> obj mask) (process-mask actor-pause))) (or (and (nonzero? (-> obj draw)) (logtest? (-> obj draw status) (draw-status was-drawn)) (>= (+ (-> *ACTOR-bank* pause-dist) (-> obj root-override pause-adjust-distance)) diff --git a/test/decompiler/reference/jak1/levels/jungle/hopper_REF.gc b/test/decompiler/reference/jak1/levels/jungle/hopper_REF.gc index e2d6ce90b1..46cc027915 100644 --- a/test/decompiler/reference/jak1/levels/jungle/hopper_REF.gc +++ b/test/decompiler/reference/jak1/levels/jungle/hopper_REF.gc @@ -160,7 +160,7 @@ nav-enemy-default-event-handler nav-enemy-jump-event-handler ) :trans (behavior () - (if (zero? (logand (-> self nav-enemy-flags) (nav-enemy-flags enable-rotate))) + (if (not (logtest? (-> self nav-enemy-flags) (nav-enemy-flags enable-rotate))) ((-> (method-of-type nav-enemy nav-enemy-patrol) trans)) ) (none) @@ -233,7 +233,7 @@ nav-enemy-default-event-handler nav-enemy-jump-event-handler ) :trans (behavior () - (if (zero? (logand (-> self nav-enemy-flags) (nav-enemy-flags enable-rotate))) + (if (not (logtest? (-> self nav-enemy-flags) (nav-enemy-flags enable-rotate))) ((-> (method-of-type nav-enemy nav-enemy-chase) trans)) ) (none) diff --git a/test/decompiler/reference/jak1/levels/jungle/jungle-mirrors_REF.gc b/test/decompiler/reference/jak1/levels/jungle/jungle-mirrors_REF.gc index 800aa84ffa..8d7403aa58 100644 --- a/test/decompiler/reference/jak1/levels/jungle/jungle-mirrors_REF.gc +++ b/test/decompiler/reference/jak1/levels/jungle/jungle-mirrors_REF.gc @@ -727,7 +727,7 @@ (none) ) :trans (behavior () - (if (zero? (logand (-> *camera* master-options) 2)) + (if (not (logtest? (-> *camera* master-options) 2)) (cam-slave-go cam-free-floating) ) (none) @@ -1882,7 +1882,7 @@ (defstate reflector-origin-idle (reflector-origin) :code (behavior () (reflector-origin-update (-> self blocker)) - (while (zero? (logand (-> self blocker extra perm status) (entity-perm-status complete))) + (while (not (logtest? (-> self blocker extra perm status) (entity-perm-status complete))) (suspend) ) (let ((a1-0 (new 'stack-no-clear 'event-message-block))) diff --git a/test/decompiler/reference/jak1/levels/lavatube/lavatube-obs_REF.gc b/test/decompiler/reference/jak1/levels/lavatube/lavatube-obs_REF.gc index f1d8b3e1ca..f1ee8d7401 100644 --- a/test/decompiler/reference/jak1/levels/lavatube/lavatube-obs_REF.gc +++ b/test/decompiler/reference/jak1/levels/lavatube/lavatube-obs_REF.gc @@ -1389,7 +1389,7 @@ ) ) :trans (behavior () - (when (zero? (logand (-> self path flags) (path-control-flag not-found))) + (when (not (logtest? (-> self path flags) (path-control-flag not-found))) (let ((f0-4 (* 0.5 (+ 1.0 (sin (* (-> self move-per-tick) (the float (-> *display* base-frame-counter)))))))) (eval-path-curve! (-> self path) (-> self root-override trans) f0-4 'interp) ) @@ -1430,7 +1430,7 @@ (set! (-> obj root-override pause-adjust-distance) 122880.0) (set! (-> obj path) (new 'process 'path-control obj 'path 0.0)) (logior! (-> obj path flags) (path-control-flag display draw-line draw-point draw-text)) - (when (zero? (logand (-> obj path flags) (path-control-flag not-found))) + (when (not (logtest? (-> obj path flags) (path-control-flag not-found))) (let ((f30-0 (res-lump-float (-> obj entity) 'speed :default 12288.0))) (set! (-> obj move-per-tick) (* 32768.0 (/ 1.0 (* 300.0 (path-distance (-> obj path)))) f30-0)) ) diff --git a/test/decompiler/reference/jak1/levels/maincave/driller-lurker_REF.gc b/test/decompiler/reference/jak1/levels/maincave/driller-lurker_REF.gc index 61910078ea..b8688f9eb2 100644 --- a/test/decompiler/reference/jak1/levels/maincave/driller-lurker_REF.gc +++ b/test/decompiler/reference/jak1/levels/maincave/driller-lurker_REF.gc @@ -538,10 +538,10 @@ ) (when (and (-> obj hit-player?) (or (not *target*) - (and (zero? (logand (-> *target* state-flags) + (and (not (logtest? (-> *target* state-flags) (state-flags being-attacked invulnerable timed-invulnerable invuln-powerup do-not-notice dying) ) - ) + ) (>= (- (-> *display* base-frame-counter) (-> obj hit-player-time)) (seconds 0.05)) ) ) diff --git a/test/decompiler/reference/jak1/levels/maincave/gnawer_REF.gc b/test/decompiler/reference/jak1/levels/maincave/gnawer_REF.gc index a01b533541..9f8582be94 100644 --- a/test/decompiler/reference/jak1/levels/maincave/gnawer_REF.gc +++ b/test/decompiler/reference/jak1/levels/maincave/gnawer_REF.gc @@ -816,7 +816,7 @@ ) (until (= a0-2 v1-1) (let ((a1-2 (ash 1 a0-2))) - (if (zero? (logand a1-2 arg1)) + (if (not (logtest? a1-2 arg1)) (return (the-as symbol a1-2)) ) ) diff --git a/test/decompiler/reference/jak1/levels/maincave/mother-spider_REF.gc b/test/decompiler/reference/jak1/levels/maincave/mother-spider_REF.gc index ef171eabf6..23d6174ad7 100644 --- a/test/decompiler/reference/jak1/levels/maincave/mother-spider_REF.gc +++ b/test/decompiler/reference/jak1/levels/maincave/mother-spider_REF.gc @@ -1273,10 +1273,10 @@ (if (and (>= (- (-> *display* base-frame-counter) (-> self state-time)) (seconds 0.25)) (> (-> self birthing-counter) 0) (and (>= 49152.0 (- (-> self max-dist-from-anchor) (-> self dist-from-anchor))) - (zero? (logand (-> *target* state-flags) + (not (logtest? (-> *target* state-flags) (state-flags being-attacked invulnerable timed-invulnerable invuln-powerup do-not-notice dying) ) - ) + ) (TODO-RENAME-21 (-> self nav) (-> self root-override trans)) ) ) @@ -1658,7 +1658,7 @@ ;; definition for method 12 of type mother-spider (defmethod run-logic? mother-spider ((obj mother-spider)) - (or (zero? (logand (-> obj mask) (process-mask actor-pause))) + (or (not (logtest? (-> obj mask) (process-mask actor-pause))) (or (< (vector-vector-xz-distance (-> obj root-override trans) (math-camera-pos)) (-> obj deactivate-xz-dist)) (and (nonzero? (-> obj skel)) (!= (-> obj skel root-channel 0) (-> obj skel channel))) (and (nonzero? (-> obj draw)) (logtest? (-> obj draw status) (draw-status no-skeleton-update))) diff --git a/test/decompiler/reference/jak1/levels/misty/bonelurker_REF.gc b/test/decompiler/reference/jak1/levels/misty/bonelurker_REF.gc index 78e512b2cc..c7ec434d23 100644 --- a/test/decompiler/reference/jak1/levels/misty/bonelurker_REF.gc +++ b/test/decompiler/reference/jak1/levels/misty/bonelurker_REF.gc @@ -225,7 +225,7 @@ nav-enemy-default-event-handler ) :trans (behavior () ((-> (method-of-type nav-enemy nav-enemy-chase) trans)) - (if (and (zero? (logand (-> self nav-enemy-flags) (nav-enemy-flags navenmf6))) + (if (and (not (logtest? (-> self nav-enemy-flags) (nav-enemy-flags navenmf6))) (>= (- (-> *display* base-frame-counter) (-> self bump-player-time)) (seconds 0.5)) ) (logior! (-> self nav-enemy-flags) (nav-enemy-flags navenmf6)) diff --git a/test/decompiler/reference/jak1/levels/misty/mistycannon_REF.gc b/test/decompiler/reference/jak1/levels/misty/mistycannon_REF.gc index 62f6056c73..f299d517ab 100644 --- a/test/decompiler/reference/jak1/levels/misty/mistycannon_REF.gc +++ b/test/decompiler/reference/jak1/levels/misty/mistycannon_REF.gc @@ -756,7 +756,7 @@ ) (restore-collide-with-as (-> self root-override)) (set-vector! (-> self root-override scale) 0.6 0.6 0.6 1.0) - (while (zero? (logand (-> self root-override status) (cshape-moving-flags onsurf))) + (while (not (logtest? (-> self root-override status) (cshape-moving-flags onsurf))) (if (and (zero? (-> self sfx)) (< (if *target* (vector-vector-distance (-> self root-override trans) (-> *target* control trans)) @@ -1688,7 +1688,7 @@ (none) ) :trans (behavior () - (if (zero? (logand (-> *camera* master-options) 2)) + (if (not (logtest? (-> *camera* master-options) 2)) (cam-slave-go cam-free-floating) ) (none) @@ -1771,9 +1771,7 @@ ) (sound-play "cannon-charge" :id (-> self sound-id) :pitch (* 0.008 (the float gp-0))) ) - (when (or (= gp-0 300) - (and (zero? (logand (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons x))) (nonzero? gp-0)) - ) + (when (or (= gp-0 300) (and (not (cpad-hold? 0 x)) (nonzero? gp-0))) (let ((gp-1 (+ 50 (the int (* 0.16666667 (the float gp-0)))))) (level-hint-spawn (game-text-id sidekick-mistycannon) @@ -1801,7 +1799,7 @@ ) ) ) - (if (zero? (logand (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons x))) + (if (not (cpad-hold? 0 x)) (set! s5-0 0) ) (suspend) diff --git a/test/decompiler/reference/jak1/levels/racer_common/collide-reaction-racer_REF.gc b/test/decompiler/reference/jak1/levels/racer_common/collide-reaction-racer_REF.gc index 7e6a9bea72..5ee32fb224 100644 --- a/test/decompiler/reference/jak1/levels/racer_common/collide-reaction-racer_REF.gc +++ b/test/decompiler/reference/jak1/levels/racer_common/collide-reaction-racer_REF.gc @@ -58,7 +58,7 @@ (if s3-1 (set! sv-104 (logior sv-104 2)) ) - (when (zero? (logand (-> arg0 prev-status) (cshape-moving-flags onsurf))) + (when (not (logtest? (-> arg0 prev-status) (cshape-moving-flags onsurf))) (set! (-> arg0 ground-impact-vel) (- (vector-dot (-> arg0 transv) (-> arg0 dynam gravity-normal)))) (set! sv-96 (logior sv-96 2048)) (when (not s3-1) @@ -162,7 +162,7 @@ ) (set! sv-96 (logior sv-96 2)) (set! (-> arg0 ground-touch-point w) 0.0) - (when (zero? (logand sv-104 15)) + (when (not (logtest? sv-104 15)) (set! sv-96 (logior sv-96 2)) (set! (-> arg0 ground-poly-normal quad) (-> arg0 poly-normal quad)) (set! (-> arg0 unknown-vector53 quad) (-> sv-84 quad)) diff --git a/test/decompiler/reference/jak1/levels/racer_common/racer-part_REF.gc b/test/decompiler/reference/jak1/levels/racer_common/racer-part_REF.gc index d397e38775..1eab334a4f 100644 --- a/test/decompiler/reference/jak1/levels/racer_common/racer-part_REF.gc +++ b/test/decompiler/reference/jak1/levels/racer_common/racer-part_REF.gc @@ -154,7 +154,7 @@ (set! (-> arg0 vector 2 y) (- 128.0 (* 640.0 (+ -0.6 arg1)))) (set! (-> arg0 vector 2 z) 0.0) ) - ((zero? (logand (-> *display* integral-frame-counter) 8)) + ((not (logtest? (-> *display* integral-frame-counter) 8)) (set! (-> arg0 vector 2 x) 128.0) (set! (-> arg0 vector 2 y) 0.0) (set! (-> arg0 vector 2 z) 0.0) diff --git a/test/decompiler/reference/jak1/levels/racer_common/racer-states_REF.gc b/test/decompiler/reference/jak1/levels/racer_common/racer-states_REF.gc index 6dcccf3852..d61c6b763d 100644 --- a/test/decompiler/reference/jak1/levels/racer_common/racer-states_REF.gc +++ b/test/decompiler/reference/jak1/levels/racer_common/racer-states_REF.gc @@ -355,7 +355,7 @@ ) ) ) - (if (and (zero? (logand (-> self control status) (cshape-moving-flags onsurf))) + (if (and (not (logtest? (-> self control status) (cshape-moving-flags onsurf))) (or (>= (- (-> *display* base-frame-counter) (-> self control unknown-dword11)) (* (-> *TARGET-bank* ground-timeout) 2) ) @@ -554,8 +554,7 @@ ((cpad-pressed? (-> self control unknown-cpad-info00 number) l1 r1) (set! (-> self racer slide-down-time 0) (-> *display* base-frame-counter)) ) - ((zero? (logand (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-abs 0) (pad-buttons l1 r1)) - ) + ((not (cpad-hold? (-> self control unknown-cpad-info00 number) l1 r1)) (set! (-> self racer slide-down-time 0) 0) 0 ) diff --git a/test/decompiler/reference/jak1/levels/racer_common/target-racer_REF.gc b/test/decompiler/reference/jak1/levels/racer_common/target-racer_REF.gc index 6c8d0438fb..afc3378214 100644 --- a/test/decompiler/reference/jak1/levels/racer_common/target-racer_REF.gc +++ b/test/decompiler/reference/jak1/levels/racer_common/target-racer_REF.gc @@ -129,14 +129,12 @@ (let ((v1-1 (-> self racer slide-mode))) (cond ((zero? v1-1) - (if (zero? (logand (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-abs 0) (pad-buttons l1 r1)) - ) + (if (not (cpad-hold? (-> self control unknown-cpad-info00 number) l1 r1)) (set! (-> self racer slide-mode) -1) ) ) ((= v1-1 1) - (if (zero? (logand (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-abs 0) (pad-buttons l1 r1)) - ) + (if (not (cpad-hold? (-> self control unknown-cpad-info00 number) l1 r1)) (set! (-> self racer slide-mode) -1) ) ) @@ -914,8 +912,7 @@ (set! (-> self racer boost-curve) 0.0) ) ) - (when (or (zero? (logand (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-abs 0) (pad-buttons x)) - ) + (when (or (not (cpad-hold? (-> self control unknown-cpad-info00 number) x)) (< (-> self control unknown-float01) 4096.0) (= (-> self racer boost-level) 0.0) ) diff --git a/test/decompiler/reference/jak1/levels/rolling/rolling-lightning-mole_REF.gc b/test/decompiler/reference/jak1/levels/rolling/rolling-lightning-mole_REF.gc index fac8b8c1b5..d0fa139359 100644 --- a/test/decompiler/reference/jak1/levels/rolling/rolling-lightning-mole_REF.gc +++ b/test/decompiler/reference/jak1/levels/rolling/rolling-lightning-mole_REF.gc @@ -17,7 +17,7 @@ (cond ((= v1-4 255) ) - ((zero? (logand (-> arg0 poly v1-4 pat) 1)) + ((not (logtest? (-> arg0 poly v1-4 pat) 1)) (format 0 "ERROR: find-adjacent-bounds-one given a non-boundary edge to start~%") (return #f) ) diff --git a/test/decompiler/reference/jak1/levels/snow/snow-bunny_REF.gc b/test/decompiler/reference/jak1/levels/snow/snow-bunny_REF.gc index cd0edc0660..c8f66f673c 100644 --- a/test/decompiler/reference/jak1/levels/snow/snow-bunny_REF.gc +++ b/test/decompiler/reference/jak1/levels/snow/snow-bunny_REF.gc @@ -274,7 +274,7 @@ ;; definition for method 58 of type snow-bunny ;; INFO: Return type mismatch time-frame vs none. (defmethod dummy-58 snow-bunny ((obj snow-bunny)) - (if (zero? (logand (-> *target* state-flags) (state-flags dangerous))) + (if (not (logtest? (-> *target* state-flags) (state-flags dangerous))) (set! (-> obj last-nondangerous-time) (-> *display* base-frame-counter)) ) (none) diff --git a/test/decompiler/reference/jak1/levels/snow/snow-flutflut-obs_REF.gc b/test/decompiler/reference/jak1/levels/snow/snow-flutflut-obs_REF.gc index d0efedc703..62e35214fd 100644 --- a/test/decompiler/reference/jak1/levels/snow/snow-flutflut-obs_REF.gc +++ b/test/decompiler/reference/jak1/levels/snow/snow-flutflut-obs_REF.gc @@ -484,7 +484,7 @@ ) ) (set! (-> obj has-path?) - (and (zero? (logand (-> obj path flags) (path-control-flag not-found))) (> (-> obj sync period) 0)) + (and (not (logtest? (-> obj path flags) (path-control-flag not-found))) (> (-> obj sync period) 0)) ) (when (nonzero? (-> obj plat-type)) (cond diff --git a/test/decompiler/reference/jak1/levels/snow/snow-ram-boss_REF.gc b/test/decompiler/reference/jak1/levels/snow/snow-ram-boss_REF.gc index be917bc34d..3e5c82ae32 100644 --- a/test/decompiler/reference/jak1/levels/snow/snow-ram-boss_REF.gc +++ b/test/decompiler/reference/jak1/levels/snow/snow-ram-boss_REF.gc @@ -946,7 +946,7 @@ v0-4 ) ((begin - (if (zero? (logand (-> self nav-enemy-flags) (nav-enemy-flags navenmf8))) + (if (not (logtest? (-> self nav-enemy-flags) (nav-enemy-flags navenmf8))) (do-push-aways! (-> self collide-info)) ) (level-hint-spawn @@ -981,7 +981,7 @@ ) ) (('touch) - (if (zero? (logand (-> self nav-enemy-flags) (nav-enemy-flags navenmf8))) + (if (not (logtest? (-> self nav-enemy-flags) (nav-enemy-flags navenmf8))) (do-push-aways! (-> self collide-info)) ) (cond @@ -1720,10 +1720,10 @@ ) ) (when (and (= (-> self proj-status) 2) - (zero? (logand (-> *target* state-flags) + (not (logtest? (-> *target* state-flags) (state-flags being-attacked invulnerable timed-invulnerable invuln-powerup do-not-notice dying) ) - ) + ) (>= (- (-> *display* base-frame-counter) (-> self state-time)) (seconds 0.2)) ) (let ((gp-2 (new 'stack-no-clear 'vector)) diff --git a/test/decompiler/reference/jak1/levels/sunken/bully_REF.gc b/test/decompiler/reference/jak1/levels/sunken/bully_REF.gc index d10ba997a5..5482637b64 100644 --- a/test/decompiler/reference/jak1/levels/sunken/bully_REF.gc +++ b/test/decompiler/reference/jak1/levels/sunken/bully_REF.gc @@ -413,10 +413,10 @@ (defbehavior bully-post bully () (when (and (-> self hit-player?) (or (not *target*) - (and (zero? (logand (-> *target* state-flags) + (and (not (logtest? (-> *target* state-flags) (state-flags being-attacked invulnerable timed-invulnerable invuln-powerup do-not-notice dying) ) - ) + ) (>= (- (-> *display* base-frame-counter) (-> self hit-player-time)) (seconds 0.05)) ) ) diff --git a/test/decompiler/reference/jak1/levels/sunken/helix-water_REF.gc b/test/decompiler/reference/jak1/levels/sunken/helix-water_REF.gc index 792d9e6b23..a3ecf8176c 100644 --- a/test/decompiler/reference/jak1/levels/sunken/helix-water_REF.gc +++ b/test/decompiler/reference/jak1/levels/sunken/helix-water_REF.gc @@ -703,7 +703,7 @@ (seek! (-> self root scale y) 0.8 (* 0.667 (-> *display* seconds-per-frame))) (when *target* (let ((f0-4 (-> (target-pos 0) y))) - (when (zero? (logand (-> *target* state-flags) (state-flags grabbed))) + (when (not (logtest? (-> *target* state-flags) (state-flags grabbed))) (let* ((f0-5 (- f0-4 (-> self root trans y))) (f0-6 (+ -40960.0 f0-5)) (f0-7 (* 0.000024414063 f0-6)) diff --git a/test/decompiler/reference/jak1/levels/sunken/orbit-plat_REF.gc b/test/decompiler/reference/jak1/levels/sunken/orbit-plat_REF.gc index c5d0b42f9f..72b43cddca 100644 --- a/test/decompiler/reference/jak1/levels/sunken/orbit-plat_REF.gc +++ b/test/decompiler/reference/jak1/levels/sunken/orbit-plat_REF.gc @@ -776,7 +776,7 @@ (set! (-> self plat-status) (the-as uint 3)) (logclear! (-> self nav flags) (nav-control-flags navcf19)) (ja-no-eval :num! (seek! 0.0)) - (while (zero? (logand (nav-control-flags navcf19) (-> self nav flags))) + (while (not (logtest? (nav-control-flags navcf19) (-> self nav flags))) (dummy-27 self) (when (nonzero? (-> self root-override riders num-riders)) (let ((a1-1 (new 'stack-no-clear 'event-message-block))) diff --git a/test/decompiler/reference/jak1/levels/sunken/puffer_REF.gc b/test/decompiler/reference/jak1/levels/sunken/puffer_REF.gc index e3286fdd8c..15fe858845 100644 --- a/test/decompiler/reference/jak1/levels/sunken/puffer_REF.gc +++ b/test/decompiler/reference/jak1/levels/sunken/puffer_REF.gc @@ -163,10 +163,10 @@ (defbehavior puffer-post puffer () (when (and (-> self hit-player?) (or (not *target*) - (and (zero? (logand (-> *target* state-flags) + (and (not (logtest? (-> *target* state-flags) (state-flags being-attacked invulnerable timed-invulnerable invuln-powerup do-not-notice dying) ) - ) + ) (>= (- (-> *display* base-frame-counter) (-> self hit-player-time)) (seconds 0.05)) ) ) @@ -268,10 +268,10 @@ (defmethod dummy-25 puffer ((obj puffer) (arg0 float)) (when *target* (let ((gp-0 (target-pos 0))) - (when (and (zero? (logand (-> *target* state-flags) + (when (and (not (logtest? (-> *target* state-flags) (state-flags being-attacked invulnerable timed-invulnerable invuln-powerup do-not-notice dying) ) - ) + ) (dummy-24 obj gp-0) (>= (-> gp-0 y) (+ -14336.0 (-> obj attack-bottom-y))) (>= (+ 2048.0 (-> obj top-y)) (-> gp-0 y)) diff --git a/test/decompiler/reference/jak1/levels/sunken/qbert-plat_REF.gc b/test/decompiler/reference/jak1/levels/sunken/qbert-plat_REF.gc index e506b32e41..e08e605f14 100644 --- a/test/decompiler/reference/jak1/levels/sunken/qbert-plat_REF.gc +++ b/test/decompiler/reference/jak1/levels/sunken/qbert-plat_REF.gc @@ -444,7 +444,7 @@ (let ((s5-1 (= (-> self plat-states-needed-to-open-door) (-> self plat-states)))) (let ((v1-3 (ash 1 v1-2))) (logxor! (-> self plat-states) (the-as uint v1-3)) - (if (zero? (logand v1-3 (-> self plat-states))) + (if (not (logtest? v1-3 (-> self plat-states))) (level-hint-spawn (game-text-id sunken-qbert-plat-hint) "sksp0130" diff --git a/test/decompiler/reference/jak1/levels/sunken/sunken-pipegame_REF.gc b/test/decompiler/reference/jak1/levels/sunken/sunken-pipegame_REF.gc index 4179b07830..1e57939859 100644 --- a/test/decompiler/reference/jak1/levels/sunken/sunken-pipegame_REF.gc +++ b/test/decompiler/reference/jak1/levels/sunken/sunken-pipegame_REF.gc @@ -908,7 +908,7 @@ (set! (-> self challenge) -1) (dotimes (gp-0 3) (let ((v1-18 (-> self button gp-0))) - (if (zero? (logand (ash 1 gp-0) (-> self challenges-mask))) + (if (not (logtest? (ash 1 gp-0) (-> self challenges-mask))) (send-event (ppointer->process v1-18) 'untrigger) ) ) diff --git a/test/decompiler/reference/jak1/levels/sunken/target-tube_REF.gc b/test/decompiler/reference/jak1/levels/sunken/target-tube_REF.gc index 90dc968438..0190853497 100644 --- a/test/decompiler/reference/jak1/levels/sunken/target-tube_REF.gc +++ b/test/decompiler/reference/jak1/levels/sunken/target-tube_REF.gc @@ -761,7 +761,7 @@ (set! (-> self state-time) (-> *display* base-frame-counter)) (logior! (-> self state-flags) (state-flags being-attacked)) (set! (-> self game hit-time) (-> *display* base-frame-counter)) - (when (zero? (logand (-> arg1 mask) (attack-mask vector))) + (when (not (logtest? (-> arg1 mask) (attack-mask vector))) (vector-! (-> arg1 vector) (vector+float*! (new 'stack-no-clear 'vector) (-> self tube foretube) (-> self tube downtube) 20480.0) @@ -875,7 +875,7 @@ (until (ja-done? 0) (compute-alignment! (-> self align)) (let ((gp-2 (new 'stack-no-clear 'vector))) - (when (zero? (logand (-> self align flags) (align-flags disabled))) + (when (not (logtest? (-> self align flags) (align-flags disabled))) (vector-matrix*! gp-2 (the-as vector (-> self align delta)) (-> self control unknown-matrix01)) (vector-float*! (-> self control transv) gp-2 (-> *display* frames-per-second)) ) diff --git a/test/decompiler/reference/jak1/levels/village1/village-obs_REF.gc b/test/decompiler/reference/jak1/levels/village1/village-obs_REF.gc index 060860a9fe..bf09ae2ef4 100644 --- a/test/decompiler/reference/jak1/levels/village1/village-obs_REF.gc +++ b/test/decompiler/reference/jak1/levels/village1/village-obs_REF.gc @@ -463,7 +463,7 @@ ;; definition for method 12 of type windspinner (defmethod run-logic? windspinner ((obj windspinner)) - (or (zero? (logand (-> obj mask) (process-mask actor-pause))) + (or (not (logtest? (-> obj mask) (process-mask actor-pause))) (or (and (nonzero? (-> obj draw)) (logtest? (-> obj draw status) (draw-status was-drawn)) (>= (+ (-> *ACTOR-bank* pause-dist) (-> obj root pause-adjust-distance)) diff --git a/test/decompiler/reference/jak1/levels/village_common/villagep-obs_REF.gc b/test/decompiler/reference/jak1/levels/village_common/villagep-obs_REF.gc index e0a26af3a5..04cba7533a 100644 --- a/test/decompiler/reference/jak1/levels/village_common/villagep-obs_REF.gc +++ b/test/decompiler/reference/jak1/levels/village_common/villagep-obs_REF.gc @@ -137,8 +137,8 @@ (and (>= (-> self level-slot) 0) (not (movie?)) (not (level-hint-displayed?)) - (zero? (logand (-> *target* control root-prim prim-core action) (collide-action ca-7 ca-8 ca-9 ca-12 ca-13 ca-14)) - ) + (not (logtest? (-> *target* control root-prim prim-core action) (collide-action ca-7 ca-8 ca-9 ca-12 ca-13 ca-14)) + ) (let* ((v1-16 (-> self root)) (a1-2 (-> *target* control trans)) (f0-1 (vector-y-angle (vector-! (new 'stack-no-clear 'vector) a1-2 (-> v1-16 trans)))) diff --git a/test/decompiler/reference/jak2/engine/anim/aligner_REF.gc b/test/decompiler/reference/jak2/engine/anim/aligner_REF.gc index 3b9a358d06..8e193a9831 100644 --- a/test/decompiler/reference/jak2/engine/anim/aligner_REF.gc +++ b/test/decompiler/reference/jak2/engine/anim/aligner_REF.gc @@ -144,7 +144,7 @@ @returns the `root` of the [[process-drawable]] after the method returns @see [[process-drawable::16]]" - (when (zero? (logand (-> obj flags) (align-flags disabled))) + (when (not (logtest? (-> obj flags) (align-flags disabled))) (let* ((process (-> obj process)) (method-call (method-of-object process apply-alignment)) (transform (-> obj delta)) @@ -184,7 +184,7 @@ ;; definition for method 11 of type align-control (defmethod align-vel-and-quat-only! align-control ((obj align-control) (arg0 align-opts) (arg1 vector) (arg2 int) (arg3 float) (arg4 float)) - (when (zero? (logand (-> obj flags) (align-flags disabled))) + (when (not (logtest? (-> obj flags) (align-flags disabled))) (let ((s5-0 (-> obj delta))) (let ((a0-1 (-> obj process root transv))) (if (logtest? arg0 (align-opts adjust-y-vel)) @@ -214,7 +214,3 @@ ) (-> obj process root) ) - - - - 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 93a82bdcd6..b7072b2ccd 100644 --- a/test/decompiler/reference/jak2/engine/anim/joint-mod_REF.gc +++ b/test/decompiler/reference/jak2/engine/anim/joint-mod_REF.gc @@ -1260,10 +1260,10 @@ ) ) ) - (if (zero? (logand (-> s5-0 track-mode) (track-mode no-trans))) + (if (not (logtest? (-> s5-0 track-mode) (track-mode no-trans))) (vector+! (-> arg1 trans) (-> arg1 trans) (-> s5-0 trans)) ) - (when (zero? (logand (-> s5-0 track-mode) (track-mode no-rotate))) + (when (not (logtest? (-> s5-0 track-mode) (track-mode no-rotate))) (let* ((v1-9 (-> s3-0 (-> s5-0 ear))) (a1-4 (quaternion-axis-angle! (new 'stack-no-clear 'quaternion) @@ -1302,7 +1302,7 @@ ) ) ) - (when (zero? (logand (-> s5-0 track-mode) (track-mode no-scale))) + (when (not (logtest? (-> s5-0 track-mode) (track-mode no-scale))) (let ((a1-9 (-> arg1 scale))) (let ((v1-22 (-> arg1 scale)) (a0-11 (-> s5-0 scale)) @@ -1361,13 +1361,13 @@ ;; WARN: Return type mismatch int vs none. (defbehavior joint-mod-joint-set-handler process ((arg0 cspace) (arg1 transformq)) (let ((s4-0 (the-as joint-mod (-> arg0 param1)))) - (if (zero? (logand (-> s4-0 track-mode) (track-mode no-trans))) + (if (not (logtest? (-> s4-0 track-mode) (track-mode no-trans))) (set! (-> arg1 trans quad) (-> s4-0 trans quad)) ) - (if (zero? (logand (-> s4-0 track-mode) (track-mode no-rotate))) + (if (not (logtest? (-> s4-0 track-mode) (track-mode no-rotate))) (quaternion-copy! (-> arg1 quat) (-> s4-0 quat)) ) - (if (zero? (logand (-> s4-0 track-mode) (track-mode no-scale))) + (if (not (logtest? (-> s4-0 track-mode) (track-mode no-scale))) (set! (-> arg1 scale quad) (-> s4-0 scale quad)) ) ) @@ -1472,13 +1472,13 @@ ) (init-vf0-vector) (let ((s5-0 (the-as joint-mod (-> arg0 param1)))) - (if (zero? (logand (-> s5-0 track-mode) (track-mode no-trans))) + (if (not (logtest? (-> s5-0 track-mode) (track-mode no-trans))) (vector+! (-> arg1 trans) (-> arg1 trans) (-> s5-0 trans)) ) - (if (zero? (logand (-> s5-0 track-mode) (track-mode no-rotate))) + (if (not (logtest? (-> s5-0 track-mode) (track-mode no-rotate))) (quaternion-normalize! (quaternion*! (-> arg1 quat) (-> arg1 quat) (-> s5-0 quat))) ) - (when (zero? (logand (-> s5-0 track-mode) (track-mode no-scale))) + (when (not (logtest? (-> s5-0 track-mode) (track-mode no-scale))) (let ((a1-4 (-> arg1 scale))) (let ((v1-11 (-> arg1 scale)) (a0-4 (-> s5-0 scale)) diff --git a/test/decompiler/reference/jak2/engine/anim/joint_REF.gc b/test/decompiler/reference/jak2/engine/anim/joint_REF.gc index 29dd4d2ae8..d4e22d4c5c 100644 --- a/test/decompiler/reference/jak2/engine/anim/joint_REF.gc +++ b/test/decompiler/reference/jak2/engine/anim/joint_REF.gc @@ -992,7 +992,7 @@ (v0-0 (the-as object (-> arg0 data arg2 data))) ) (cond - ((zero? (logand (-> arg0 fixed hdr matrix-bits) 1)) + ((not (logtest? (-> arg0 fixed hdr matrix-bits) 1)) (set! v1-1 (cond ((zero? arg1) (return (the-as matrix v1-1)) @@ -1011,7 +1011,7 @@ (set! v0-0 (-> (the-as (inline-array vector) v0-0) 4)) ) ) - (if (zero? (logand (-> arg0 fixed hdr matrix-bits) 2)) + (if (not (logtest? (-> arg0 fixed hdr matrix-bits) 2)) (return (the-as matrix v1-1)) ) (the-as matrix v0-0) diff --git a/test/decompiler/reference/jak2/engine/camera/cam-combiner_REF.gc b/test/decompiler/reference/jak2/engine/camera/cam-combiner_REF.gc index ff254f12aa..d0b736cede 100644 --- a/test/decompiler/reference/jak2/engine/camera/cam-combiner_REF.gc +++ b/test/decompiler/reference/jak2/engine/camera/cam-combiner_REF.gc @@ -285,7 +285,7 @@ ) 0 ) - (when (and (zero? (logand (-> *camera* master-options) 1)) (!= (-> self tracking-status) 0)) + (when (and (not (logtest? (-> *camera* master-options) 1)) (!= (-> self tracking-status) 0)) (set! (-> self tracking-status) (the-as uint 0)) 0 ) 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 c1c25ef899..5afac5b654 100644 --- a/test/decompiler/reference/jak2/engine/camera/cam-layout_REF.gc +++ b/test/decompiler/reference/jak2/engine/camera/cam-layout_REF.gc @@ -2468,7 +2468,7 @@ ) (format arg0 ": on") ) - ((zero? (logand ((method-of-type res-lump get-property-value) + ((not (logtest? ((method-of-type res-lump get-property-value) (-> self cam-entity) (the-as symbol arg2) 'exact @@ -2479,7 +2479,7 @@ ) s5-0 ) - ) + ) (format arg0 ": off(maya)") ) (else @@ -3380,13 +3380,13 @@ ((and (logtest? (-> arg0 options) 8) (logtest? (-> *cpad-list* cpads 0 button0-abs 0) (-> arg0 button))) #f ) - ((and (zero? (logand (-> arg0 options) 28)) + ((and (not (logtest? (-> arg0 options) 28)) (logtest? (-> arg0 options) 1) (zero? (logand (-> *cpad-list* cpads 0 button0-rel 0) (-> arg0 button))) ) #f ) - ((and (zero? (logand (-> arg0 options) 29)) + ((and (not (logtest? (-> arg0 options) 29)) (zero? (logand (-> *cpad-list* cpads 0 button0-abs 0) (-> arg0 button))) ) #f diff --git a/test/decompiler/reference/jak2/engine/camera/cam-states-dbg_REF.gc b/test/decompiler/reference/jak2/engine/camera/cam-states-dbg_REF.gc index ddda1bb7fe..a362b505b9 100644 --- a/test/decompiler/reference/jak2/engine/camera/cam-states-dbg_REF.gc +++ b/test/decompiler/reference/jak2/engine/camera/cam-states-dbg_REF.gc @@ -51,7 +51,7 @@ (let ((s5-0 (new-stack-vector0)) (gp-0 (new-stack-vector0)) ) - (when (zero? (logand (-> *camera* settings master-options) (cam-master-options IGNORE_ANALOG))) + (when (not (logtest? (-> *camera* settings master-options) (cam-master-options IGNORE_ANALOG))) (let ((f28-0 (analog-input (the-as int (-> *cpad-list* cpads 0 leftx)) 128.0 48.0 110.0 -1.0)) (f30-0 (analog-input (the-as int (-> *cpad-list* cpads 0 lefty)) 128.0 48.0 110.0 -1.0)) (f26-0 (analog-input (the-as int (-> *cpad-list* cpads 0 rightx)) 128.0 48.0 110.0 -1.0)) @@ -369,7 +369,7 @@ ) ) ) - (when (zero? (logand (-> *camera* settings master-options) (cam-master-options IGNORE_ANALOG))) + (when (not (logtest? (-> *camera* settings master-options) (cam-master-options IGNORE_ANALOG))) (let ((f28-14 (analog-input (the-as int (-> *cpad-list* cpads arg3 leftx)) 128.0 48.0 110.0 -1.0)) (f30-14 (analog-input (the-as int (-> *cpad-list* cpads arg3 lefty)) 128.0 48.0 110.0 -1.0)) (f26-0 (analog-input (the-as int (-> *cpad-list* cpads arg3 rightx)) 128.0 48.0 110.0 -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 6b7a53b9d6..315c013deb 100644 --- a/test/decompiler/reference/jak2/engine/camera/cam-states_REF.gc +++ b/test/decompiler/reference/jak2/engine/camera/cam-states_REF.gc @@ -400,7 +400,7 @@ (none) ) :trans (behavior () - (if (zero? (logand (-> *camera* master-options) 1)) + (if (not (logtest? (-> *camera* master-options) 1)) (cam-slave-go cam-free-floating) ) (none) @@ -532,7 +532,7 @@ (none) ) :trans (behavior () - (if (zero? (logand (-> *camera* master-options) 1)) + (if (not (logtest? (-> *camera* master-options) 1)) (go cam-free-floating) ) (none) @@ -544,7 +544,7 @@ (let ((s4-0 (vector-reset! (new-stack-vector0))) (s5-0 (new-stack-matrix0)) ) - (when (zero? (logand (-> *camera* settings master-options) (cam-master-options IGNORE_ANALOG))) + (when (not (logtest? (-> *camera* settings master-options) (cam-master-options IGNORE_ANALOG))) (let ((f30-0 (analog-input (the-as int (+ (-> *cpad-list* cpads 0 rightx) -256 (-> *cpad-list* cpads 0 leftx))) 0.0 @@ -594,7 +594,7 @@ ) (matrix-axis-angle! s5-0 (-> *camera* local-down) (-> s4-0 y)) (matrix*! (the-as matrix (-> self tracking)) (the-as matrix (-> self tracking)) s5-0) - (when (zero? (logand (-> self options) 8)) + (when (not (logtest? (-> self options) 8)) (if (< (vector-dot (the-as vector (&-> self stack 96)) (-> *camera* local-down)) 0.0) (forward-down->inv-matrix (the-as matrix (-> self tracking)) @@ -611,7 +611,7 @@ (matrix-axis-angle! s5-0 (the-as vector (-> self tracking)) (- (-> s4-0 x))) (matrix*! (the-as matrix (-> self tracking)) (the-as matrix (-> self tracking)) s5-0) ) - (when (zero? (logand (-> self options) 8)) + (when (not (logtest? (-> self options) 8)) (let ((f30-1 (vector-dot (-> *camera* local-down) (the-as vector (&-> self stack 112))))) (set! (-> (new 'stack-no-clear 'vector) quad) (the-as uint128 0)) (when (< (sin (-> *CAM_EYE-bank* max-degrees)) (fabs f30-1)) @@ -739,7 +739,7 @@ (none) ) :trans (behavior () - (if (zero? (logand (-> *camera* master-options) 1)) + (if (not (logtest? (-> *camera* master-options) 1)) (cam-slave-go cam-free-floating) ) (none) @@ -879,7 +879,7 @@ (f28-0 (acos f0-1)) (s4-0 (new 'stack-no-clear 'matrix)) ) - (when (zero? (logand (-> *camera* settings master-options) (cam-master-options IGNORE_ANALOG))) + (when (not (logtest? (-> *camera* settings master-options) (cam-master-options IGNORE_ANALOG))) (let ((f24-0 (analog-input (the-as int (-> *cpad-list* cpads 0 rightx)) 128.0 @@ -1157,7 +1157,7 @@ ;; failed to figure out what this is: (defstate cam-circular (camera-slave) :trans (behavior () - (if (zero? (logand (-> *camera* master-options) 1)) + (if (not (logtest? (-> *camera* master-options) 1)) (cam-slave-go cam-free-floating) ) (none) @@ -1188,7 +1188,7 @@ (none) ) :trans (behavior () - (if (zero? (logand (-> *camera* master-options) 1)) + (if (not (logtest? (-> *camera* master-options) 1)) (cam-slave-go cam-free-floating) ) (none) @@ -2199,7 +2199,7 @@ (cam-los-setup-lateral arg2 s4-1 arg1) ) (cond - ((zero? (logand (-> self options) 1024)) + ((not (logtest? (-> self options) 1024)) ) ((= (-> self string-vel-dir) 5) ) @@ -5160,7 +5160,7 @@ (none) ) :trans (behavior () - (if (zero? (logand (-> *camera* master-options) 1)) + (if (not (logtest? (-> *camera* master-options) 1)) (cam-slave-go cam-free-floating) ) (none) @@ -5246,11 +5246,11 @@ (none) ) :trans (behavior () - (if (zero? (logand (-> *camera* master-options) 1)) + (if (not (logtest? (-> *camera* master-options) 1)) (cam-slave-go cam-free-floating) ) (when (not (paused?)) - (when (zero? (logand (-> *camera* settings master-options) (cam-master-options IGNORE_ANALOG))) + (when (not (logtest? (-> *camera* settings master-options) (cam-master-options IGNORE_ANALOG))) (let ((f0-0 (analog-input (the-as int (-> *cpad-list* cpads 0 righty)) 128.0 32.0 110.0 0.05))) (cond ((< (* 0.05 (- 1.0 (-> self view-off-param))) f0-0) @@ -5271,7 +5271,7 @@ (set! (-> self view-off z) (lerp (-> *CAM_STICK-bank* min-z) (-> *CAM_STICK-bank* max-z) (-> self view-off-param)) ) - (when (zero? (logand (-> *camera* settings master-options) (cam-master-options IGNORE_ANALOG))) + (when (not (logtest? (-> *camera* settings master-options) (cam-master-options IGNORE_ANALOG))) (let ((f0-16 (analog-input (the-as int (-> *cpad-list* cpads 0 rightx)) 128.0 @@ -5396,7 +5396,7 @@ (none) ) :trans (behavior () - (if (zero? (logand (-> *camera* master-options) 1)) + (if (not (logtest? (-> *camera* master-options) 1)) (cam-slave-go cam-free-floating) ) (none) diff --git a/test/decompiler/reference/jak2/engine/camera/camera_REF.gc b/test/decompiler/reference/jak2/engine/camera/camera_REF.gc index 8f339d38d0..048c0f188a 100644 --- a/test/decompiler/reference/jak2/engine/camera/camera_REF.gc +++ b/test/decompiler/reference/jak2/engine/camera/camera_REF.gc @@ -939,7 +939,7 @@ ) (set! (-> obj free-point) -134250495) (dotimes (v1-21 32) - (when (zero? (logand s5-0 1)) + (when (not (logtest? s5-0 1)) (set! (-> obj point v1-21 next) (-> obj free-point)) (set! (-> obj free-point) v1-21) ) diff --git a/test/decompiler/reference/jak2/engine/debug/editable-player_REF.gc b/test/decompiler/reference/jak2/engine/debug/editable-player_REF.gc index 22c47677ef..9c22228633 100644 --- a/test/decompiler/reference/jak2/engine/debug/editable-player_REF.gc +++ b/test/decompiler/reference/jak2/engine/debug/editable-player_REF.gc @@ -2663,7 +2663,7 @@ (dotimes (gp-1 (-> *level* length)) (let ((v1-14 (-> *level* level gp-1))) (when (= (-> v1-14 status) 'active) - (if (zero? (logand *fix-visible-level-mask* (ash 1 (-> v1-14 index)))) + (if (not (logtest? *fix-visible-level-mask* (ash 1 (-> v1-14 index)))) (insert-sample-camera (-> v1-14 name)) ) ) diff --git a/test/decompiler/reference/jak2/engine/debug/editable_REF.gc b/test/decompiler/reference/jak2/engine/debug/editable_REF.gc index 39a6859d12..11ddc7b59e 100644 --- a/test/decompiler/reference/jak2/engine/debug/editable_REF.gc +++ b/test/decompiler/reference/jak2/engine/debug/editable_REF.gc @@ -1423,7 +1423,7 @@ (the-as rgba (-> (new 'static 'array uint64 1 #x800000ff) 0)) (the-as rgba (-> (new 'static 'array uint64 1 #x8000ffff) 0)) ) - (if (zero? (logand (-> obj flags) (editable-flag orient))) + (if (not (logtest? (-> obj flags) (editable-flag orient))) (the-as rgba (-> (new 'static 'array uint64 1 #x800000ff) 0)) (the-as rgba (-> (new 'static 'array uint64 1 #x8000ffff) 0)) ) @@ -1785,7 +1785,7 @@ (the-as rgba (-> (new 'static 'array uint64 1 #x800000ff) 0)) (the-as rgba (-> (new 'static 'array uint64 1 #x8000ffff) 0)) ) - (if (zero? (logand (-> obj flags) (editable-flag orient))) + (if (not (logtest? (-> obj flags) (editable-flag orient))) (the-as rgba (-> (new 'static 'array uint64 1 #x800000ff) 0)) (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 68b5c94dcf..674af1d75f 100644 --- a/test/decompiler/reference/jak2/engine/debug/menu_REF.gc +++ b/test/decompiler/reference/jak2/engine/debug/menu_REF.gc @@ -1450,7 +1450,7 @@ ;; definition for function debug-menu-item-var-joypad-handler (defun debug-menu-item-var-joypad-handler ((arg0 debug-menu-item-var) (arg1 debug-menu-msg)) (cond - ((zero? (logand (-> *cpad-list* cpads arg1 button0-abs 0) (pad-buttons x))) + ((not (cpad-hold? arg1 x)) (let ((a0-2 (-> arg0 parent context))) (debug-menu-context-release-joypad a0-2) ) diff --git a/test/decompiler/reference/jak2/engine/debug/nav/mysql-nav-graph_REF.gc b/test/decompiler/reference/jak2/engine/debug/nav/mysql-nav-graph_REF.gc index ef0b0cbbed..88fd7e70b2 100644 --- a/test/decompiler/reference/jak2/engine/debug/nav/mysql-nav-graph_REF.gc +++ b/test/decompiler/reference/jak2/engine/debug/nav/mysql-nav-graph_REF.gc @@ -1194,9 +1194,9 @@ ) (countdown (v1-7 (-> obj edge-array length)) (let ((a1-17 (the-as mysql-nav-edge (+ (+ (* 80 v1-7) 12) (the-as int (-> obj edge-array)))))) - (when (zero? (logand (-> a1-17 mysql-save-flag) (mysql-save-flag delete))) + (when (not (logtest? (-> a1-17 mysql-save-flag) (mysql-save-flag delete))) (let ((a2-8 (-> obj node-array data (-> a1-17 runtime-node-id-1)))) - (when (zero? (logand (-> a2-8 mysql-save-flag) (mysql-save-flag delete))) + (when (not (logtest? (-> a2-8 mysql-save-flag) (mysql-save-flag delete))) (cond ((-> a2-8 temp-edge-list) (set! (-> a1-17 temp-next-edge) (the-as mysql-nav-edge (-> a2-8 temp-edge-list))) @@ -1235,13 +1235,13 @@ ) (dotimes (s5-0 (-> obj node-array length)) (let ((s4-0 (-> obj node-array data s5-0))) - (when (zero? (logand (-> s4-0 mysql-save-flag) (mysql-save-flag delete))) + (when (not (logtest? (-> s4-0 mysql-save-flag) (mysql-save-flag delete))) (let ((v1-10 (lookup-level-info2 obj s4-0 #t))) (set! (-> s4-0 level-node-index) (-> v1-10 node-count)) (+! (-> v1-10 node-count) 1) (let ((a0-10 (the-as mysql-nav-edge (-> s4-0 temp-edge-list)))) (while a0-10 - (when (zero? (logand (-> a0-10 mysql-save-flag) (mysql-save-flag delete))) + (when (not (logtest? (-> a0-10 mysql-save-flag) (mysql-save-flag delete))) (if (!= (-> v1-10 level) (-> obj node-array data (-> a0-10 runtime-node-id-2) level_name)) (+! (-> v1-10 to-link-count) 1) ) diff --git a/test/decompiler/reference/jak2/engine/draw/drawable-tree_REF.gc b/test/decompiler/reference/jak2/engine/draw/drawable-tree_REF.gc index 2ae38a813c..741d1f8a73 100644 --- a/test/decompiler/reference/jak2/engine/draw/drawable-tree_REF.gc +++ b/test/decompiler/reference/jak2/engine/draw/drawable-tree_REF.gc @@ -70,7 +70,7 @@ (set! t1-6 (&-> t1-6 1)) (let ((t4-0 128)) (label cfg-7) - (b! (zero? (logand t3-0 t4-0)) cfg-9 :delay (set! t5-1 (the-as uint (-> arg1 0)))) + (b! (not (logtest? t3-0 t4-0)) cfg-9 :delay (set! t5-1 (the-as uint (-> arg1 0)))) (set! arg1 (&-> arg1 1)) (set! (-> (the-as (pointer int8) t2-3) 0) (the-as int t5-1)) (label cfg-9) diff --git a/test/decompiler/reference/jak2/engine/entity/entity_REF.gc b/test/decompiler/reference/jak2/engine/entity/entity_REF.gc index dc688dbcba..30caf091c7 100644 --- a/test/decompiler/reference/jak2/engine/entity/entity_REF.gc +++ b/test/decompiler/reference/jak2/engine/entity/entity_REF.gc @@ -465,7 +465,7 @@ ) (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)) + (a2-0 (if (and arg0 (not (logtest? (-> *kernel-context* prevent-from-run) (-> arg0 mask))) (run-logic? arg0)) 114 32 ) @@ -2170,7 +2170,7 @@ ) ) ) - (when (zero? (logand (-> obj status) (entity-perm-status bit-5))) + (when (not (logtest? (-> obj status) (entity-perm-status bit-5))) (set! (-> obj user-uint64) (the-as uint 0)) 0 ) @@ -2231,7 +2231,7 @@ ) ) (let ((s5-1 (lambda ((arg0 process)) - (if (zero? (logand (-> arg0 mask) (process-mask no-kill))) + (if (not (logtest? (-> arg0 mask) (process-mask no-kill))) (deactivate arg0) ) (none) @@ -2286,7 +2286,7 @@ ;; 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 (not (logtest? (-> 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)) ) @@ -2298,7 +2298,7 @@ ;; 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))) + (and (not (logtest? (-> obj perm status) (entity-perm-status bit-0 dead))) (< (vector-vector-distance (-> obj trans) arg0) (-> *ACTOR-bank* birth-dist)) ) ) @@ -2386,7 +2386,7 @@ ) (else (if (and (-> v1-54 process) - (zero? (logand (-> v1-54 perm status) (entity-perm-status no-kill))) + (not (logtest? (-> v1-54 perm status) (entity-perm-status no-kill))) (zero? (logand (-> v1-54 process mask) (process-mask no-kill))) ) (kill! (-> v1-54 entity)) @@ -2404,7 +2404,7 @@ (dotimes (s2-1 s3-2) (let ((v1-67 (-> s4-3 data s2-1))) (cond - ((zero? (logand (-> v1-67 kill-mask) sv-32)) + ((not (logtest? (-> 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)) @@ -2415,7 +2415,7 @@ ) (else (if (and (-> v1-67 process) - (zero? (logand (-> v1-67 perm status) (entity-perm-status no-kill))) + (not (logtest? (-> v1-67 perm status) (entity-perm-status no-kill))) (zero? (logand (-> v1-67 process mask) (process-mask no-kill))) ) (kill! (-> v1-67 entity)) @@ -2434,7 +2434,7 @@ (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))) + (not (logtest? (-> 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)))) @@ -2447,7 +2447,7 @@ ) (else (if (and (-> s1-0 process) - (zero? (logand (-> s1-0 perm status) (entity-perm-status no-kill))) + (not (logtest? (-> s1-0 perm status) (entity-perm-status no-kill))) (zero? (logand (-> s1-0 process mask) (process-mask no-kill))) ) (kill! (-> s1-0 entity)) @@ -2468,8 +2468,8 @@ (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)) + (not (logtest? (-> sv-48 perm status) (entity-perm-status bit-9 bit-10))) + (not (logtest? (-> 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)) @@ -2492,7 +2492,7 @@ ) (else (when (and (-> sv-48 process) - (zero? (logand (-> sv-48 perm status) (entity-perm-status no-kill))) + (not (logtest? (-> sv-48 perm status) (entity-perm-status no-kill))) (zero? (logand (-> sv-48 process mask) (process-mask no-kill))) ) (kill! (-> sv-48 entity)) diff --git a/test/decompiler/reference/jak2/engine/game/game-info_REF.gc b/test/decompiler/reference/jak2/engine/game/game-info_REF.gc index 40000f2689..de255ddb53 100644 --- a/test/decompiler/reference/jak2/engine/game/game-info_REF.gc +++ b/test/decompiler/reference/jak2/engine/game/game-info_REF.gc @@ -1276,7 +1276,7 @@ (let ((conts (-> (the-as level-load-info (-> (the-as symbol (car levels)) value)) continues))) (while (not (null? conts)) (let ((cont (the-as continue-point (car conts)))) - (if (zero? (logand (-> cont flags) (continue-flags cf2))) + (if (not (logtest? (-> cont flags) (continue-flags cf2))) (format #t "~S~%" (-> cont name)) ) ) diff --git a/test/decompiler/reference/jak2/engine/game/settings_REF.gc b/test/decompiler/reference/jak2/engine/game/settings_REF.gc index 19a034924f..97d49e373a 100644 --- a/test/decompiler/reference/jak2/engine/game/settings_REF.gc +++ b/test/decompiler/reference/jak2/engine/game/settings_REF.gc @@ -28,7 +28,7 @@ (let ((s1-0 (-> (the-as connection s3-1) param0))) (case s1-0 (('sfx-volume) - (if (or (zero? (logand (-> *kernel-context* prevent-from-run) (process-mask progress))) + (if (or (not (logtest? (-> *kernel-context* prevent-from-run) (process-mask progress))) (= ((method-of-type connection get-process) (the-as connection s3-1)) (ppointer->process *progress-process*)) ) (user-setting-data-method-10 @@ -497,7 +497,7 @@ (let ((s1-0 (-> (the-as connection s3-1) param0))) (case s1-0 (('sfx-volume) - (if (or (zero? (logand (-> *kernel-context* prevent-from-run) (process-mask progress))) + (if (or (not (logtest? (-> *kernel-context* prevent-from-run) (process-mask progress))) (= ((method-of-type connection get-process) (the-as connection s3-1)) (ppointer->process *progress-process*)) ) (cam-setting-data-method-10 diff --git a/test/decompiler/reference/jak2/engine/game/task/task-control_REF.gc b/test/decompiler/reference/jak2/engine/game/task/task-control_REF.gc index abbbaa169d..b61e6b4f10 100644 --- a/test/decompiler/reference/jak2/engine/game/task/task-control_REF.gc +++ b/test/decompiler/reference/jak2/engine/game/task/task-control_REF.gc @@ -561,7 +561,7 @@ (let ((node (-> game-nodes i))) (if (and (= (-> node level) (-> cur-lev info taskname)) (!= (-> node level) 'city) - (zero? (logand (game-task-node-flag no-restart) (-> node flags))) + (not (logtest? (game-task-node-flag no-restart) (-> node flags))) (open? node) ) (set! gp-1 (the-as int (-> node task))) @@ -674,7 +674,7 @@ (dotimes (i (-> game-nodes length)) (when (nonzero? i) (let ((node (-> game-nodes i))) - (when (and (zero? (logand (-> node flags) (game-task-node-flag closed))) + (when (and (not (logtest? (-> node flags) (game-task-node-flag closed))) (begin (dotimes (a3-3 4) (when (and (nonzero? (-> node parent-node a3-3)) @@ -723,7 +723,7 @@ ;; definition for method 9 of type game-task-node-info (defmethod close! game-task-node-info ((obj game-task-node-info) (arg0 symbol)) - (when (zero? (logand (-> obj flags) (game-task-node-flag closed))) + (when (not (logtest? (-> obj flags) (game-task-node-flag closed))) (let ((task-node-close-func (lambda ((arg0 game-task-node-info)) (with-pp @@ -882,7 +882,7 @@ (let ((game-nodes (-> *game-info* sub-task-list)) (node-info obj) ) - (and (zero? (logand (-> node-info flags) (game-task-node-flag closed))) + (and (not (logtest? (-> node-info flags) (game-task-node-flag closed))) (begin (dotimes (pi 4) (let ((t0-0 (-> node-info parent-node pi))) @@ -1015,7 +1015,7 @@ ) (('try) (if (and (not (task-complete? *game-info* (-> node task))) - (or (zero? (logand (-> node flags) (game-task-node-flag save-on-life save-on-try))) + (or (not (logtest? (-> node flags) (game-task-node-flag save-on-life save-on-try))) (logtest? (-> node flags) (game-task-node-flag reset-on-try)) ) ) @@ -1467,7 +1467,7 @@ ;; definition for method 16 of type fail-mission (defmethod print-text fail-mission ((obj fail-mission)) - (when (and (zero? (logand (-> obj flags) (fail-mission-flags famflags-6))) + (when (and (not (logtest? (-> obj flags) (fail-mission-flags famflags-6))) (= (gui-control-method-17 *gui-control* (the-as sound-id (-> obj message-id))) (gui-action playing)) ) (let ((gp-0 (new @@ -1612,8 +1612,8 @@ ) (logior! (-> self flags) (fail-mission-flags famflags-1)) (set! (-> self grabbed-time) (-> self clock frame-counter)) - (when (zero? (logand (-> self flags) (fail-mission-flags famflags-3))) - (when (zero? (logand (-> self flags) (fail-mission-flags famflags-5))) + (when (not (logtest? (-> self flags) (fail-mission-flags famflags-3))) + (when (not (logtest? (-> self flags) (fail-mission-flags famflags-5))) (while (< (- (-> self clock frame-counter) (-> self grabbed-time)) (seconds 1.5)) (let ((f30-0 (lerp-scale 0.0 1.0 (the float (- (-> self clock frame-counter) (-> self grabbed-time))) 0.0 450.0))) (set-filter-color! @@ -1832,7 +1832,7 @@ (the-as (function gui-connection symbol) #f) (the-as process #f) ) - (when (zero? (logand (-> arg0 flags) (fail-mission-flags famflags-4))) + (when (not (logtest? (-> arg0 flags) (fail-mission-flags famflags-4))) (if (not (and *target* (logtest? (-> *target* focus-status) (focus-status dead)) (zero? (-> self message)))) (set! (-> self stinger) (the-as @@ -1847,7 +1847,7 @@ (set-setting! 'speech-control #f 0 0) (set! (-> self clock) (-> *display* base-clock)) (apply-settings *setting-control*) - (if (or (zero? (logand (-> self flags) (fail-mission-flags famflags-2))) + (if (or (not (logtest? (-> self flags) (fail-mission-flags famflags-2))) (nonzero? (-> self fail-message)) (= (-> self message) (fail-mission-message fammsg-1)) ) @@ -2133,7 +2133,7 @@ (with-pp (the-as symbol - (and (or (zero? (logand (-> obj node-info flags) (game-task-node-flag city-wait))) + (and (or (not (logtest? (-> obj node-info flags) (game-task-node-flag city-wait))) (let ((a0-2 (level-get-target-inside *level*))) (cond ((not (and a0-2 (logtest? (-> a0-2 info level-flags) 1))) @@ -2161,7 +2161,7 @@ :event task-manager-event-handler :trans (behavior () (if (or (and (nonzero? (-> self info final-node)) (task-node-closed? (-> self info final-node))) - (and (zero? (logand (-> self node-info flags) (game-task-node-flag closed))) + (and (not (logtest? (-> self node-info flags) (game-task-node-flag closed))) (not (open? (-> self node-info))) ) ) diff --git a/test/decompiler/reference/jak2/engine/geometry/path_REF.gc b/test/decompiler/reference/jak2/engine/geometry/path_REF.gc index 14f1f7ba66..55787d96ee 100644 --- a/test/decompiler/reference/jak2/engine/geometry/path_REF.gc +++ b/test/decompiler/reference/jak2/engine/geometry/path_REF.gc @@ -160,7 +160,7 @@ @param search-type The only recognized value is `exact` @returns the point closest to some arbitrary percentage along the path @see [[path-control::10]]" - (if (zero? (logand (-> obj flags) (path-control-flag not-found))) + (if (not (logtest? (-> obj flags) (path-control-flag not-found))) (curve-evaluate! arg0 arg1 @@ -186,7 +186,7 @@ @param idx Either the vertex index or also partially the interpolant in a LERP @param search-type The only recognized value is `exact` @returns Either a distinct vertex along the path, or some fractional point between two vertices" - (if (zero? (logand (-> obj flags) (path-control-flag not-found))) + (if (not (logtest? (-> obj flags) (path-control-flag not-found))) (curve-evaluate! arg0 (/ arg1 (the float (+ (-> obj curve num-cverts) -1))) @@ -285,7 +285,7 @@ @param idx The vertex index @param mag The magnitude to scale the resulting displacement vector by @returns The displacement [[vector]] between two points in the path, the last 2, or the [[*null-vector*]]" - (when (zero? (logand (-> obj flags) (path-control-flag not-found))) + (when (not (logtest? (-> obj flags) (path-control-flag not-found))) (let ((s4-0 (new 'stack-no-clear 'vector))) (curve-evaluate! arg0 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 88d8921646..d905c4d299 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 @@ -508,7 +508,7 @@ (matrix*! s5-0 s5-0 arg3) (vector3s-rotate*! (the-as vector3s (-> arg0 launchrot)) (the-as vector3s (-> arg0 launchrot)) s5-0) (vector3s-rotate*! (the-as vector3s (-> arg1 vel-sxvel)) (the-as vector3s (-> arg1 vel-sxvel)) s5-0) - (if (zero? (logand (sp-cpuinfo-flag use-global-acc) (-> arg1 flags))) + (if (not (logtest? (sp-cpuinfo-flag use-global-acc) (-> arg1 flags))) (vector3s-rotate*! (the-as vector3s (-> arg1 acc)) (the-as vector3s (-> arg1 acc)) s5-0) ) (if (logtest? (sp-cpuinfo-flag set-conerot) (-> arg1 flags)) @@ -596,7 +596,7 @@ ) (vector3s-rotate*! (the-as vector3s (-> arg0 launchrot)) (the-as vector3s (-> arg0 launchrot)) s5-0) (vector3s-rotate*! (the-as vector3s (-> arg1 vel-sxvel)) (the-as vector3s (-> arg1 vel-sxvel)) s5-0) - (if (zero? (logand (sp-cpuinfo-flag use-global-acc) (-> arg1 flags))) + (if (not (logtest? (sp-cpuinfo-flag use-global-acc) (-> arg1 flags))) (vector3s-rotate*! (the-as vector3s (-> arg1 acc)) (the-as vector3s (-> arg1 acc)) s5-0) ) ) @@ -803,7 +803,7 @@ (set! (-> arg2 next-launcher) (the-as basic 0)) (cond ((and (logtest? (-> arg2 flags) (sp-cpuinfo-flag sp-cpuinfo-flag-12)) - (zero? (logand (-> arg2 flags) (sp-cpuinfo-flag distort))) + (not (logtest? (-> arg2 flags) (sp-cpuinfo-flag distort))) (zero? (logand (-> arg2 flags) (sp-cpuinfo-flag glow))) ) (let ((f20-0 (-> arg3 r-g-b-a x)) diff --git a/test/decompiler/reference/jak2/engine/gfx/sprite/particles/sparticle_REF.gc b/test/decompiler/reference/jak2/engine/gfx/sprite/particles/sparticle_REF.gc index 4649b0413c..b7bba1e875 100644 --- a/test/decompiler/reference/jak2/engine/gfx/sprite/particles/sparticle_REF.gc +++ b/test/decompiler/reference/jak2/engine/gfx/sprite/particles/sparticle_REF.gc @@ -503,7 +503,7 @@ ;; definition for function sparticle-kill-it-level0 ;; WARN: Return type mismatch int vs none. (defun sparticle-kill-it-level0 ((arg0 sparticle-system) (arg1 sparticle-cpuinfo)) - (if (zero? (logand (-> arg1 flags) (sp-cpuinfo-flag sp-cpuinfo-flag-9 level0 level1))) + (if (not (logtest? (-> arg1 flags) (sp-cpuinfo-flag sp-cpuinfo-flag-9 level0 level1))) (sparticle-kill-it arg0 arg1) ) 0 diff --git a/test/decompiler/reference/jak2/engine/load/loader_REF.gc b/test/decompiler/reference/jak2/engine/load/loader_REF.gc index e2da50d148..f35ee993ec 100644 --- a/test/decompiler/reference/jak2/engine/load/loader_REF.gc +++ b/test/decompiler/reference/jak2/engine/load/loader_REF.gc @@ -1177,7 +1177,7 @@ (restore-load-state-and-cleanup *load-state*) (set! (-> *art-control* active-stream) #f) (logclear! (-> self skel status) (joint-control-status spooling spooling-not-last-block)) - (if (zero? (logand (-> self skel status) (joint-control-status sync-math))) + (if (not (logtest? (-> self skel status) (joint-control-status sync-math))) (logclear! (-> self skel status) (joint-control-status sync-math)) ) (cond diff --git a/test/decompiler/reference/jak2/engine/math/math_REF.gc b/test/decompiler/reference/jak2/engine/math/math_REF.gc index 733ff11455..774930df70 100644 --- a/test/decompiler/reference/jak2/engine/math/math_REF.gc +++ b/test/decompiler/reference/jak2/engine/math/math_REF.gc @@ -531,7 +531,7 @@ (let ((v1-0 1)) (while (nonzero? arg0) (+! arg0 -1) - (if (zero? (logand arg1 v1-0)) + (if (not (logtest? arg1 v1-0)) (+! s4-0 1) ) (set! v1-0 (* v1-0 2)) diff --git a/test/decompiler/reference/jak2/engine/ps2/pad_REF.gc b/test/decompiler/reference/jak2/engine/ps2/pad_REF.gc index a135141414..86a531f447 100644 --- a/test/decompiler/reference/jak2/engine/ps2/pad_REF.gc +++ b/test/decompiler/reference/jak2/engine/ps2/pad_REF.gc @@ -300,7 +300,7 @@ (cpad-get-data pad) (adjust-to-screen-flip pad) (cond - ((zero? (logand (-> pad valid) 128)) + ((not (logtest? (-> pad valid) 128)) (dotimes (buzz-i 2) (cond ((and (-> pad buzz) (< (get-current-time) (-> pad buzz-time buzz-i)) (= *master-mode* 'game)) diff --git a/test/decompiler/reference/jak2/engine/ps2/timer_REF.gc b/test/decompiler/reference/jak2/engine/ps2/timer_REF.gc index 8246088f7c..ef2666cfe4 100644 --- a/test/decompiler/reference/jak2/engine/ps2/timer_REF.gc +++ b/test/decompiler/reference/jak2/engine/ps2/timer_REF.gc @@ -189,7 +189,7 @@ ;; definition for method 11 of type clock (defmethod tick! clock ((obj clock)) - (if (zero? (logand (-> obj mask) (-> *kernel-context* prevent-from-run))) + (if (not (logtest? (-> obj mask) (-> *kernel-context* prevent-from-run))) (advance-by! obj (* (-> *display* time-factor) (-> *display* dog-ratio) (-> obj clock-ratio))) (set! (-> obj sparticle-data x) 0.0) ) diff --git a/test/decompiler/reference/jak2/engine/target/board/board-h_REF.gc b/test/decompiler/reference/jak2/engine/target/board/board-h_REF.gc index df213e44dc..d0a6cbb632 100644 --- a/test/decompiler/reference/jak2/engine/target/board/board-h_REF.gc +++ b/test/decompiler/reference/jak2/engine/target/board/board-h_REF.gc @@ -417,13 +417,13 @@ ) (-> self board latch?) ) - (zero? (logand (focus-status dead hit grabbed in-head edge-grab pole board pilot mech dark) (-> self focus-status)) - ) + (not (logtest? (focus-status dead hit grabbed in-head edge-grab pole board pilot mech dark) (-> self focus-status)) + ) (or (zero? (-> self board)) (>= (- (-> self clock frame-counter) (-> self board board-time)) (seconds 0.5))) - (zero? (logand (state-flags sf17) (-> self state-flags))) + (not (logtest? (state-flags sf17) (-> self state-flags))) (< (-> self board board-time) (-> self control unknown-time-frame05)) - (zero? (logand (surface-flag no-board) (-> self control unknown-surface01 flags))) - (or (zero? (logand (-> self control unknown-surface01 flags) (surface-flag duck))) + (not (logtest? (surface-flag no-board) (-> self control unknown-surface01 flags))) + (or (not (logtest? (-> self control unknown-surface01 flags) (surface-flag duck))) (begin self (can-exit-duck?)) ) (not (and (logtest? (-> self water flags) (water-flags under-water)) diff --git a/test/decompiler/reference/jak2/engine/target/board/board-states_REF.gc b/test/decompiler/reference/jak2/engine/target/board/board-states_REF.gc index f8160360f4..78b4ee44b3 100644 --- a/test/decompiler/reference/jak2/engine/target/board/board-states_REF.gc +++ b/test/decompiler/reference/jak2/engine/target/board/board-states_REF.gc @@ -375,7 +375,7 @@ (t9-8 (the-as vector a0-4) (the-as float a1-0)) ) ) - (when (zero? (logand (-> self control old-status) (cshape-moving-flags on-surface))) + (when (not (logtest? (-> self control old-status) (cshape-moving-flags on-surface))) (let ((gp-0 (new 'stack-no-clear 'vector))) (set! (-> gp-0 quad) (-> self control trans quad)) (set! (-> gp-0 y) (+ 2048.0 (-> gp-0 y))) @@ -521,8 +521,8 @@ (if (and (cpad-pressed? (-> self control unknown-cpad-info00 number) x) (< (vector-dot (-> self control dynam gravity-normal) (-> self control transv)) 12288.0) (< -61440.0 (vector-dot (-> self control dynam gravity-normal) (-> self control transv))) - (and (zero? (logand (water-flags touch-water) (-> self water flags))) - (zero? (logand (-> self state-flags) (state-flags sf7))) + (and (not (logtest? (water-flags touch-water) (-> self water flags))) + (not (logtest? (-> self state-flags) (state-flags sf7))) (not (and (-> self next-state) (= (-> self next-state name) 'target-board-wall-kick))) ) ) @@ -618,7 +618,7 @@ ) :trans (behavior () (if (and (cpad-hold? (-> self control unknown-cpad-info00 number) l1) - (zero? (logand (-> self state-flags) (state-flags sf9))) + (not (logtest? (-> self state-flags) (state-flags sf9))) (< (- (-> self clock frame-counter) (-> self control unknown-time-frame06)) (the-as time-frame (-> *TARGET-bank* ground-timeout)) ) @@ -817,8 +817,7 @@ (none) ) :trans (behavior () - (if (and (or (zero? (logand (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-abs 0) (pad-buttons l1)) - ) + (if (and (or (not (cpad-hold? (-> self control unknown-cpad-info00 number) l1)) (logtest? (-> self state-flags) (state-flags sf9)) (>= (- (-> self clock frame-counter) (-> self control unknown-time-frame06)) (the-as time-frame (-> *TARGET-bank* ground-timeout)) @@ -1675,8 +1674,7 @@ (let ((f0-9 (analog-input (the int (* 128.0 (-> s5-0 z))) 0.0 96.0 110.0 1.0)) (s4-0 0) ) - (while (not (and (or (zero? (logand (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-abs 0) (pad-buttons r1)) - ) + (while (not (and (or (not (cpad-hold? (-> self control unknown-cpad-info00 number) r1)) (or (= f0-9 0.0) (jump-hit-ground-stuck?) (< (target-time-to-ground) (seconds 0.5))) ) (nonzero? s4-0) @@ -1842,8 +1840,7 @@ (set! (-> v1-0 z) (* -0.0078125 (+ -128.0 (the float (-> self control unknown-cpad-info00 lefty))))) (set! (-> v1-0 w) 1.0) (let ((f30-0 (analog-input (the int (* 128.0 (-> v1-0 z))) 0.0 96.0 110.0 1.0))) - (while (not (or (zero? (logand (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-abs 0) (pad-buttons l1)) - ) + (while (not (or (not (cpad-hold? (-> self control unknown-cpad-info00 number) l1)) (jump-hit-ground-stuck?) (< (target-time-to-ground) (seconds 0.3)) ) @@ -2009,8 +2006,7 @@ (let ((f0-9 (analog-input (the int (* 128.0 (-> s5-0 z))) 0.0 96.0 110.0 1.0)) (s4-0 0) ) - (while (not (and (or (zero? (logand (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-abs 0) (pad-buttons r1)) - ) + (while (not (and (or (not (cpad-hold? (-> self control unknown-cpad-info00 number) r1)) (or (= f0-9 0.0) (jump-hit-ground-stuck?) (< (target-time-to-ground) (seconds 0.5))) ) (nonzero? s4-0) @@ -3236,7 +3232,7 @@ ) self ((method-of-type attack-info attack-info-method-11)) - (when (zero? (logand (-> gp-0 mask) (attack-info-mask vector))) + (when (not (logtest? (-> gp-0 mask) (attack-info-mask vector))) (vector-z-quaternion! (-> gp-0 vector) (-> self control unknown-quaternion00)) (vector-xz-normalize! (-> gp-0 vector) (- (fabs (-> gp-0 shove-back)))) (set! (-> gp-0 vector y) (-> gp-0 shove-up)) diff --git a/test/decompiler/reference/jak2/engine/target/board/board-util_REF.gc b/test/decompiler/reference/jak2/engine/target/board/board-util_REF.gc index 9df181ff7d..8b1b026f32 100644 --- a/test/decompiler/reference/jak2/engine/target/board/board-util_REF.gc +++ b/test/decompiler/reference/jak2/engine/target/board/board-util_REF.gc @@ -62,7 +62,7 @@ :virtual #t :trans (behavior () (let ((v1-0 (-> self parent))) - (if (zero? (logand (-> (the-as target (if v1-0 + (if (not (logtest? (-> (the-as target (if v1-0 (the-as target (-> v1-0 0 self)) ) ) @@ -70,7 +70,7 @@ ) (focus-status in-head) ) - ) + ) (go-virtual idle #f) ) ) @@ -168,14 +168,14 @@ ((let ((v1-9 #x40000) (a0-3 (-> self parent)) ) - (zero? (logand (the-as focus-status v1-9) (-> (the-as target (if a0-3 + (not (logtest? (the-as focus-status v1-9) (-> (the-as target (if a0-3 (the-as target (-> a0-3 0 self)) ) ) focus-status ) ) - ) + ) ) (go-virtual idle #f) ) diff --git a/test/decompiler/reference/jak2/engine/target/board/target-board_REF.gc b/test/decompiler/reference/jak2/engine/target/board/target-board_REF.gc index efa988bcce..e010d318d5 100644 --- a/test/decompiler/reference/jak2/engine/target/board/target-board_REF.gc +++ b/test/decompiler/reference/jak2/engine/target/board/target-board_REF.gc @@ -923,7 +923,7 @@ ) (set! gp-0 1) ) - ((zero? (logand (-> self control status) (cshape-moving-flags on-surface))) + ((not (logtest? (-> self control status) (cshape-moving-flags on-surface))) (set! gp-0 2) ) ) @@ -1271,7 +1271,7 @@ (when (and (logtest? (-> self control status) (cshape-moving-flags t-wall)) (and (< 16384.0 f30-0) (not (and (-> self next-state) (= (-> self next-state name) 'target-board-smack))) - (zero? (logand (focus-status halfpipe) (-> self focus-status))) + (not (logtest? (focus-status halfpipe) (-> self focus-status))) (!= (-> self control ground-pat mode) 3) (>= (- (-> self clock frame-counter) (-> self board halfpipe-time)) (seconds 0.1)) ) @@ -1473,10 +1473,7 @@ (logior! (-> self control root-prim prim-core action) (collide-action check-edge)) (logclear! (-> self control root-prim prim-core action) (collide-action check-edge)) ) - (if (zero? (logand (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-abs 0) - (pad-buttons circle square) - ) - ) + (if (not (cpad-hold? (-> self control unknown-cpad-info00 number) circle square)) (set! (-> self board ride-lock) #f) ) (cond @@ -1584,7 +1581,7 @@ (set! (-> self board unknown-time-frame00) (-> self clock frame-counter)) ) ) - (when (and (zero? (logand (-> self control status) (cshape-moving-flags on-surface))) + (when (and (not (logtest? (-> self control status) (cshape-moving-flags on-surface))) (< 0.0 f28-0) (or (and (or (< (target-height-above-ground) 4096.0) (< (- (-> self clock frame-counter) (-> self board unknown-time-frame00)) (seconds 0.1)) @@ -1668,14 +1665,14 @@ ) (if (and (= (-> self control unknown-float12) 0.0) (>= (-> self clock frame-counter) (-> self control unknown-time-frame00)) - (zero? (logand (-> self control unknown-surface01 flags) (surface-flag turn-to-vel))) + (not (logtest? (-> self control unknown-surface01 flags) (surface-flag turn-to-vel))) (>= (- (-> self clock frame-counter) (-> self board unknown-time-frame00)) (seconds 0.1)) ) (rot->dir-targ! (-> self control)) ) (when (and (< (- (-> self clock frame-counter) (-> self control unknown-time-frame06)) (seconds 0.1)) (>= (-> self clock frame-counter) (-> self control unknown-time-frame00)) - (zero? (logand (-> self control unknown-surface01 flags) (surface-flag turn-to-vel))) + (not (logtest? (-> self control unknown-surface01 flags) (surface-flag turn-to-vel))) (>= (- (-> self clock frame-counter) (-> self board unknown-time-frame00)) (seconds 0.1)) ) (let* ((s3-0 @@ -2268,7 +2265,7 @@ (set! (-> self control transv quad) (-> s5-0 quad)) ) ) - (when (zero? (logand s4-3 64)) + (when (not (logtest? s4-3 64)) (vector-float*! (new 'stack-no-clear 'vector) (-> self control dynam gravity-normal) 819.2) ((method-of-object (-> self control) collide-shape-method-28)) ) diff --git a/test/decompiler/reference/jak2/engine/target/gun/gun-h_REF.gc b/test/decompiler/reference/jak2/engine/target/gun/gun-h_REF.gc index f01f5efe6b..857e3b571a 100644 --- a/test/decompiler/reference/jak2/engine/target/gun/gun-h_REF.gc +++ b/test/decompiler/reference/jak2/engine/target/gun/gun-h_REF.gc @@ -466,19 +466,19 @@ (local-vars (v1-36 symbol)) (and (logtest? (-> arg0 game features) (game-feature unk-game-feature-06)) (>= (- (-> self clock frame-counter) (-> arg0 gun gun-time)) (seconds 0.1)) - (zero? (logand (focus-status dead hit board mech dark teleporting) (-> arg0 focus-status))) - (zero? (logand (surface-flag gun-inactive gun-hide gun-off) (-> arg0 control unknown-surface01 flags))) - (zero? (logand (state-flags sf18) (-> arg0 state-flags))) + (not (logtest? (focus-status dead hit board mech dark teleporting) (-> arg0 focus-status))) + (not (logtest? (surface-flag gun-inactive gun-hide gun-off) (-> arg0 control unknown-surface01 flags))) + (not (logtest? (state-flags sf18) (-> arg0 state-flags))) (logtest? (logand (-> *setting-control* user-current features) (game-feature gun-yellow gun-red gun-blue gun-dark)) (-> arg0 game features) ) - (or (zero? (logand (-> arg0 control unknown-surface01 flags) (surface-flag duck))) (can-exit-duck?)) - (or (zero? (logand (focus-status pilot) (-> arg0 focus-status))) (-> arg0 pilot gun?)) + (or (not (logtest? (-> arg0 control unknown-surface01 flags) (surface-flag duck))) (can-exit-duck?)) + (or (not (logtest? (focus-status pilot) (-> arg0 focus-status))) (-> arg0 pilot gun?)) (or arg1 (nonzero? (-> arg0 gun using-gun-type)) (begin (set! v1-36 (and (cpad-hold? (-> arg0 control unknown-cpad-info00 number) r1) - (zero? (logand (-> arg0 focus-status) (focus-status grabbed))) + (not (logtest? (-> arg0 focus-status) (focus-status grabbed))) (begin (set! v1-36 #t) (set! (-> arg0 gun latch?) v1-36) v1-36) ) ) 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 e3a204c12f..86b690c49c 100644 --- a/test/decompiler/reference/jak2/engine/target/logic-target_REF.gc +++ b/test/decompiler/reference/jak2/engine/target/logic-target_REF.gc @@ -667,7 +667,7 @@ (< 0.7 (-> self control unknown-float27)) (and (< (-> self control unknown-float05) 8192.0) (logtest? (-> self control status) (cshape-moving-flags t-wall)) - (zero? (logand (-> self control status) (cshape-moving-flags t-act))) + (not (logtest? (-> self control status) (cshape-moving-flags t-act))) (or (= (-> self control unknown-pat-surface00 event) (pat-event hide)) (let ((a0-2 (level-get-target-inside *level*))) (and a0-2 (logtest? (-> a0-2 info level-flags) 1)) @@ -990,7 +990,7 @@ ) (vector-matrix*! s2-0 s3-1 (-> self control unknown-matrix01)) (let ((f28-0 (vector-vector-xz-distance s3-1 s4-0))) - (when (and (zero? (logand (-> self control status) (cshape-moving-flags t-surface))) + (when (and (not (logtest? (-> self control status) (cshape-moving-flags t-surface))) (let ((v1-51 gp-0)) (< (sqrtf (+ (* (-> v1-51 x) (-> v1-51 x)) (* (-> v1-51 z) (-> v1-51 z)))) (sqrtf (+ (* (-> s3-1 x) (-> s3-1 x)) (* (-> s3-1 z) (-> s3-1 z)))) @@ -1006,7 +1006,7 @@ ) ) ) - (if (and (zero? (logand (-> self control status) (cshape-moving-flags t-wall))) + (if (and (not (logtest? (-> self control status) (cshape-moving-flags t-wall))) (logtest? (-> self control old-status) (cshape-moving-flags t-wall)) (logtest? (-> self control unknown-surface00 flags) (surface-flag air)) (< 0.0 (-> gp-0 y)) @@ -1025,7 +1025,7 @@ (if (< (- (-> self clock frame-counter) (-> self control unknown-time-frame09)) (seconds 0.2)) (set! f30-0 (+ 204800.0 f30-0)) ) - (if (and (zero? (logand (-> self control status) (cshape-moving-flags t-wall))) + (if (and (not (logtest? (-> self control status) (cshape-moving-flags t-wall))) (and (logtest? (-> self control old-status) (cshape-moving-flags t-wall)) (logtest? (-> self control unknown-surface00 flags) (surface-flag air)) (< 0.0 (-> gp-0 y)) @@ -1175,10 +1175,10 @@ ((logtest? (surface-flag turn-to-alt) (-> self control unknown-surface01 flags)) (-> self control unknown-vector03) ) - ((and (or (zero? (logand (logior (-> self control status) (-> self control old-status)) + ((and (or (not (logtest? (logior (-> self control status) (-> self control old-status)) (cshape-moving-flags on-surface t-surface) ) - ) + ) (< (- (-> self clock frame-counter) (-> self control unknown-time-frame07)) (seconds 0.5)) (not (and (-> self next-state) (let ((v1-15 (-> self next-state name))) (or (= v1-15 'target-walk) (= v1-15 'target-gun-walk)) @@ -1641,7 +1641,7 @@ (set! (-> self control unknown-time-frame06) (-> self clock frame-counter)) (set! (-> self control unknown-vector21 quad) (-> self control trans quad)) (if (and (>= (-> self control coverage) 1.0) - (zero? (logand (-> self control status) (cshape-moving-flags t-act on-water))) + (not (logtest? (-> self control status) (cshape-moving-flags t-act on-water))) (logtest? (-> self control status) (cshape-moving-flags on-ground)) ) (set! (-> self control unknown-vector23 quad) (-> self control trans quad)) @@ -1669,12 +1669,12 @@ ) (when (and (cpad-pressed? (-> self control unknown-cpad-info00 number) r3) (zero? (-> self control unknown-word07)) - (zero? (logand (-> *kernel-context* prevent-from-run) (process-mask movie))) + (not (logtest? (-> *kernel-context* prevent-from-run) (process-mask movie))) (not *pause-lock*) ) (if (and (= (-> self cam-user-mode) 'normal) (logtest? (-> self control unknown-surface00 flags) (surface-flag look-around)) - (zero? (logand (focus-status edge-grab pole flut tube board pilot dark) (-> self focus-status))) + (not (logtest? (focus-status edge-grab pole flut tube board pilot dark) (-> self focus-status))) (-> *setting-control* user-current allow-look-around) (>= (- (-> self clock frame-counter) (the-as int (-> self no-look-around-wait))) (seconds 0.05)) (not (and (= (-> self control ground-pat material) (pat-material ice)) @@ -1735,7 +1735,7 @@ (cpad-hold? (-> self control unknown-cpad-info00 number) r2) (cpad-hold? (-> self control unknown-cpad-info00 number) l2) (not *pause-lock*) - (zero? (logand (focus-status grabbed in-head pilot) (-> self focus-status))) + (not (logtest? (focus-status grabbed in-head pilot) (-> self focus-status))) (not (and (-> self next-state) (let ((v1-167 (-> self next-state name))) (or (= v1-167 'target-darkjak-get-on) (= v1-167 'target-float)) ) @@ -1819,8 +1819,8 @@ (and (or (not (and (= *cheat-mode* 'debug) (cpad-hold? (-> self control unknown-cpad-info00 number) r2))) *pause-lock* ) - (zero? (logand (focus-status flut pilot mech indax) (-> self focus-status))) - (zero? (logand (-> self state-flags) (state-flags sf7))) + (not (logtest? (focus-status flut pilot mech indax) (-> self focus-status))) + (not (logtest? (-> self state-flags) (state-flags sf7))) #t ) ) @@ -2406,7 +2406,7 @@ ) (cond ((and (and (-> self next-state) (= (-> self next-state name) 'target-clone-anim)) - (and (zero? (logand (-> self draw status) (draw-control-status no-draw))) + (and (not (logtest? (-> self draw status) (draw-control-status no-draw))) (begin (vector<-cspace! s5-0 (-> self node-list data 3)) (set! (-> s5-0 y) (+ -5896.192 (-> s5-0 y))) diff --git a/test/decompiler/reference/jak2/engine/target/target_REF.gc b/test/decompiler/reference/jak2/engine/target/target_REF.gc index 181b3683b5..7dc08720e7 100644 --- a/test/decompiler/reference/jak2/engine/target/target_REF.gc +++ b/test/decompiler/reference/jak2/engine/target/target_REF.gc @@ -290,7 +290,7 @@ (if (and (cpad-pressed? (-> self control unknown-cpad-info00 number) square) (can-hands? #t)) (go target-running-attack) ) - (if (and (zero? (logand (-> self control status) (cshape-moving-flags on-surface))) + (if (and (not (logtest? (-> self control status) (cshape-moving-flags on-surface))) (>= (- (-> self clock frame-counter) (-> self control unknown-time-frame06)) (seconds 0.08)) ) (go target-falling #f) @@ -817,8 +817,7 @@ ) :trans (behavior () ((-> self state-hook)) - (if (and (or (zero? (logand (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-abs 0) (pad-buttons l1)) - ) + (if (and (or (not (cpad-hold? (-> self control unknown-cpad-info00 number) l1)) (logtest? (-> self state-flags) (state-flags sf9)) ) (let ((v1-13 (ja-group))) @@ -858,7 +857,7 @@ (if (and (cpad-pressed? (-> self control unknown-cpad-info00 number) square) (can-hands? #t) (begin self (can-exit-duck?)) - (zero? (logand (-> self control unknown-surface01 flags) (surface-flag no-jump))) + (not (logtest? (-> self control unknown-surface01 flags) (surface-flag no-jump))) (zero? (logand (-> self state-flags) (state-flags sf7))) ) (go @@ -976,8 +975,7 @@ :trans (behavior () (local-vars (v1-22 joint-control-channel)) ((-> self state-hook)) - (when (and (or (zero? (logand (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-abs 0) (pad-buttons l1)) - ) + (when (and (or (not (cpad-hold? (-> self control unknown-cpad-info00 number) l1)) (logtest? (-> self state-flags) (state-flags sf9)) (and (logtest? (water-flags wading) (-> self water flags)) (>= (- (- (-> self control trans y) (- (-> self water base-height) (-> self water wade-height)))) 2457.6) @@ -1016,7 +1014,7 @@ (if (and (cpad-pressed? (-> self control unknown-cpad-info00 number) square) (can-hands? #t) (begin self (can-exit-duck?)) - (zero? (logand (-> self control unknown-surface01 flags) (surface-flag no-jump))) + (not (logtest? (-> self control unknown-surface01 flags) (surface-flag no-jump))) (zero? (logand (-> self state-flags) (state-flags sf7))) ) (go @@ -1163,7 +1161,7 @@ (* 12288.0 (-> self darkjak-giant-interp) (-> self darkjak-giant-interp)) ) (and (< -61440.0 (vector-dot (-> self control dynam gravity-normal) (-> self control transv))) - (zero? (logand (water-flags touch-water) (-> self water flags))) + (not (logtest? (water-flags touch-water) (-> self water flags))) (zero? (logand (state-flags sf7 sf23) (-> self state-flags))) ) ) @@ -1177,8 +1175,8 @@ (and (>= (- (-> self clock frame-counter) (-> self control unknown-time-frame14)) (the-as time-frame (-> *TARGET-bank* stuck-timeout)) ) - (zero? (logand (-> self state-flags) (state-flags sf8))) - (zero? (logand (-> self control unknown-surface01 flags) (surface-flag no-attack no-hands))) + (not (logtest? (-> self state-flags) (state-flags sf8))) + (not (logtest? (-> self control unknown-surface01 flags) (surface-flag no-attack no-hands))) (not (and (not (using-gun? self)) (!= (-> self skel top-anim interp) 0.0))) ) ) @@ -1433,8 +1431,8 @@ (and (>= (- (-> self clock frame-counter) (-> self control unknown-time-frame14)) (the-as time-frame (-> *TARGET-bank* stuck-timeout)) ) - (zero? (logand (-> self state-flags) (state-flags sf8))) - (zero? (logand (-> self control unknown-surface01 flags) (surface-flag no-attack no-hands))) + (not (logtest? (-> self state-flags) (state-flags sf8))) + (not (logtest? (-> self control unknown-surface01 flags) (surface-flag no-attack no-hands))) (not (and (not (using-gun? self)) (!= (-> self skel top-anim interp) 0.0))) ) ) @@ -1593,8 +1591,8 @@ (and (>= (- (-> self clock frame-counter) (-> self control unknown-time-frame14)) (the-as time-frame (-> *TARGET-bank* stuck-timeout)) ) - (zero? (logand (-> self state-flags) (state-flags sf8))) - (zero? (logand (-> self control unknown-surface01 flags) (surface-flag no-attack no-hands))) + (not (logtest? (-> self state-flags) (state-flags sf8))) + (not (logtest? (-> self control unknown-surface01 flags) (surface-flag no-attack no-hands))) (not (and (not (using-gun? self)) (!= (-> self skel top-anim interp) 0.0))) ) ) @@ -2575,11 +2573,11 @@ ) ) ) - (zero? (logand (-> self state-flags) (state-flags sf7 sf8))) - (zero? (logand (-> self control unknown-surface01 flags) (surface-flag no-attack))) + (not (logtest? (-> self state-flags) (state-flags sf7 sf8))) + (not (logtest? (-> self control unknown-surface01 flags) (surface-flag no-attack))) (let ((v1-48 (ja-group))) (and (not (and v1-48 (= v1-48 (-> self draw art-group data 406)))) - (and (zero? (logand (-> self control unknown-surface01 flags) (surface-flag no-jump))) + (and (not (logtest? (-> self control unknown-surface01 flags) (surface-flag no-jump))) (zero? (logand (-> self state-flags) (state-flags sf7))) ) ) @@ -2691,7 +2689,7 @@ (when (not (ja-min? 0)) (cond ((and (>= (ja-aframe-num 0) 20.0) - (and (and (zero? (logand (-> self control status) (cshape-moving-flags on-surface))) + (and (and (not (logtest? (-> self control status) (cshape-moving-flags on-surface))) (>= (- (-> self clock frame-counter) (-> self control unknown-time-frame06)) (the-as time-frame (-> *TARGET-bank* ground-timeout)) ) @@ -2712,10 +2710,7 @@ ) (set-forward-vel 0.0) ) - ((and (zero? (logand (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-abs 0) - (pad-buttons square) - ) - ) + ((and (not (cpad-hold? (-> self control unknown-cpad-info00 number) square)) (>= (- (-> self clock frame-counter) (-> self control unknown-combo-tracker00 move-start-time)) (seconds 0.05) ) @@ -2847,7 +2842,7 @@ (+! gp-2 1) ) ) - (if (and (zero? (logand (-> self control status) (cshape-moving-flags on-surface))) + (if (and (not (logtest? (-> self control status) (cshape-moving-flags on-surface))) (>= (- (-> self clock frame-counter) (-> self control unknown-time-frame06)) (the-as time-frame (-> *TARGET-bank* ground-timeout)) ) @@ -3340,8 +3335,8 @@ (and (>= (- (-> self clock frame-counter) (-> self control unknown-time-frame14)) (the-as time-frame (-> *TARGET-bank* stuck-timeout)) ) - (zero? (logand (-> self state-flags) (state-flags sf8))) - (zero? (logand (-> self control unknown-surface01 flags) (surface-flag no-attack no-hands))) + (not (logtest? (-> self state-flags) (state-flags sf8))) + (not (logtest? (-> self control unknown-surface01 flags) (surface-flag no-attack no-hands))) (not (and (not (using-gun? self)) (!= (-> self skel top-anim interp) 0.0))) ) ) @@ -3564,7 +3559,7 @@ (when (and (or (< (target-move-dist (seconds 0.1)) 1638.4) (and (logtest? (-> self control status) (cshape-moving-flags t-wall)) (< 0.7 (-> self control poly-angle))) ) - (zero? (logand (-> self control status) (cshape-moving-flags t-act))) + (not (logtest? (-> self control status) (cshape-moving-flags t-act))) (>= (the-as uint (-> self control unknown-word04)) (the-as uint 2)) ) (set! (-> self control unknown-time-frame14) (-> self clock frame-counter)) @@ -4160,7 +4155,7 @@ ) ) (set! (-> self state-time) (-> self clock frame-counter)) - (while (zero? (logand (-> self control status) (cshape-moving-flags on-surface))) + (while (not (logtest? (-> self control status) (cshape-moving-flags on-surface))) (when (>= (- (-> self clock frame-counter) (-> self state-time)) (seconds 0.01)) (let ((v1-50 (ja-group))) (when (not (and v1-50 (= v1-50 (-> self draw art-group data 27)))) diff --git a/test/decompiler/reference/jak2/kernel/gcommon_REF.gc b/test/decompiler/reference/jak2/kernel/gcommon_REF.gc index 65bacf3b23..ed511ec7e9 100644 --- a/test/decompiler/reference/jak2/kernel/gcommon_REF.gc +++ b/test/decompiler/reference/jak2/kernel/gcommon_REF.gc @@ -945,7 +945,7 @@ ;; definition for function print-tree-bitmask (defun print-tree-bitmask ((arg0 int) (arg1 int)) (dotimes (s4-0 arg1) - (if (zero? (logand arg0 1)) + (if (not (logtest? arg0 1)) (format #t " ") (format #t "| ") ) @@ -1050,7 +1050,7 @@ ) ((= arg1 binteger) (cond - ((zero? (logand (the-as int arg0) 7)) + ((not (logtest? (the-as int arg0) 7)) #t ) (else @@ -1063,7 +1063,7 @@ ) ((or (= arg1 symbol) (= arg1 boolean)) (cond - ((zero? (logand (the-as int arg0) 1)) + ((not (logtest? (the-as int arg0) 1)) (if arg2 (format arg4 "ERROR: object #x~X ~S is not a valid object of type '~A' (misaligned)~%" arg0 arg2 arg1) ) diff --git a/test/decompiler/reference/jak2/kernel/gkernel_REF.gc b/test/decompiler/reference/jak2/kernel/gkernel_REF.gc index 0c5b420b6f..95859aafdc 100644 --- a/test/decompiler/reference/jak2/kernel/gkernel_REF.gc +++ b/test/decompiler/reference/jak2/kernel/gkernel_REF.gc @@ -1054,7 +1054,7 @@ (defun execute-process-tree ((arg0 process-tree) (arg1 (function object object)) (arg2 kernel-context)) (logclear! (-> arg0 mask) (process-mask kernel-run)) (let ((s3-0 (or (logtest? (-> arg0 mask) (process-mask process-tree)) - (not (and (zero? (logand (-> arg2 prevent-from-run) (-> arg0 mask))) (run-logic? arg0))) + (not (and (not (logtest? (-> arg2 prevent-from-run) (-> arg0 mask))) (run-logic? arg0))) (begin (logior! (-> arg0 mask) (process-mask kernel-run)) (arg1 arg0)) ) ) @@ -1079,7 +1079,7 @@ ;; definition for function search-process-tree (defun search-process-tree ((arg0 process-tree) (arg1 (function process-tree object))) - (when (zero? (logand (-> arg0 mask) (process-mask process-tree))) + (when (not (logtest? (-> arg0 mask) (process-mask process-tree))) (if (arg1 arg0) (return arg0) ) diff --git a/test/decompiler/test_FormExpressionBuild.cpp b/test/decompiler/test_FormExpressionBuild.cpp index f7f849622e..c7cd45feae 100644 --- a/test/decompiler/test_FormExpressionBuild.cpp +++ b/test/decompiler/test_FormExpressionBuild.cpp @@ -2152,7 +2152,7 @@ TEST_F(FormRegressionTestJak1, ExprPrintTreeBitmask) { "(begin\n" " (dotimes\n" " (s4-0 arg1)\n" - " (if (zero? (logand arg0 1)) (format #t \" \") (format #t \"| \"))\n" + " (if (not (logtest? arg0 1)) (format #t \" \") (format #t \"| \"))\n" " (set! arg0 (shr arg0 1))\n" " )\n" " #f\n" diff --git a/test/decompiler/test_FormExpressionBuildLong.cpp b/test/decompiler/test_FormExpressionBuildLong.cpp index 3e1f41644b..b181e74657 100644 --- a/test/decompiler/test_FormExpressionBuildLong.cpp +++ b/test/decompiler/test_FormExpressionBuildLong.cpp @@ -1886,7 +1886,7 @@ TEST_F(FormRegressionTestJak1, ExprValid) { " )\n" " ((= arg1 binteger)\n" " (cond\n" - " ((zero? (logand (the-as int arg0) 7))\n" + " ((not (logtest? (the-as int arg0) 7))\n" " #t\n" " )\n" " (else\n" From 4d751af38e5d2f9471a2e63a1995ca323cad5737 Mon Sep 17 00:00:00 2001 From: Tyler Wilding Date: Sat, 1 Oct 2022 11:58:36 -0400 Subject: [PATCH 03/10] logs: replace every `fmt::print` with a `lg` call instead (#1368) Favors the `lg` namespace over `fmt` directly, as this will output the logs to a file / has log levels. I also made assertion errors go to a file, this unfortunately means importing `lg` and hence `fmt` which was attempted to be avoided before. But I'm not sure how else to do this aspect without re-inventing the file logging. We have a lot of commented out prints as well that we should probably cleanup at some point / switch them to trace level and default to `info` level. I noticed the pattern of disabling debug logs behind some boolean, something to consider cleaning up in the future -- if our logs were more structured (knowing where they are coming from) then a lot this boilerplate could be eliminated. Closes #1358 --- common/audio/audio_formats.cpp | 11 +- common/cross_sockets/XSocket.cpp | 13 +- common/cross_sockets/XSocketServer.cpp | 7 +- common/custom_data/pack_helpers.cpp | 6 +- common/dma/dma_copy.cpp | 23 +-- common/global_profiler/GlobalProfiler.cpp | 14 +- common/goos/PrettyPrinter.cpp | 1 - common/goos/Reader.cpp | 16 ++- common/log/log.cpp | 27 +++- common/log/log.h | 13 ++ .../serialization/subtitles/subtitles_ser.cpp | 2 +- common/type_system/Type.cpp | 5 +- common/type_system/TypeFieldLookup.cpp | 20 +-- common/type_system/TypeSystem.cpp | 19 +-- common/type_system/deftype.cpp | 7 +- common/util/Assert.cpp | 15 +- common/util/FileUtil.cpp | 8 +- decompiler/Function/CfgVtx.cpp | 125 ++++++++-------- decompiler/Function/Function.cpp | 4 +- decompiler/IR2/AtomicOpForm.cpp | 4 +- decompiler/IR2/AtomicOpTypeAnalysis.cpp | 2 +- decompiler/IR2/Env.cpp | 5 +- decompiler/IR2/ExpressionHelpers.cpp | 25 ++-- decompiler/IR2/FormExpressionAnalysis.cpp | 47 +++--- decompiler/IR2/bitfields.cpp | 5 +- .../ObjectFile/LinkedObjectFileCreation.cpp | 1 + decompiler/ObjectFile/ObjectFileDB.cpp | 22 +-- decompiler/ObjectFile/ObjectFileDB_IR2.cpp | 8 +- decompiler/VuDisasm/VuDisassembler.cpp | 13 +- .../analysis/analyze_inspect_method.cpp | 135 +++++++++--------- decompiler/analysis/cfg_builder.cpp | 79 +++++----- decompiler/analysis/expression_build.cpp | 3 +- decompiler/analysis/find_defstates.cpp | 14 +- decompiler/analysis/inline_asm_rewrite.cpp | 1 + decompiler/analysis/insert_lets.cpp | 39 +++-- decompiler/analysis/mips2c.cpp | 3 +- decompiler/analysis/reg_usage.cpp | 4 +- decompiler/analysis/static_refs.cpp | 1 + decompiler/analysis/symbol_def_map.cpp | 3 +- decompiler/analysis/type_analysis.cpp | 7 +- decompiler/analysis/variable_naming.cpp | 25 ++-- decompiler/config.cpp | 3 +- decompiler/config/jak2/type_casts.jsonc | 4 +- decompiler/config/jak2_ntsc_v1.jsonc | 2 +- decompiler/data/TextureDB.cpp | 5 +- decompiler/data/streamed_audio.cpp | 10 +- decompiler/level_extractor/BspHeader.cpp | 33 ++--- decompiler/level_extractor/MercData.cpp | 12 +- .../level_extractor/extract_collide_frags.cpp | 2 +- decompiler/level_extractor/extract_level.cpp | 25 ++-- decompiler/level_extractor/extract_merc.cpp | 23 +-- decompiler/level_extractor/extract_shrub.cpp | 11 +- decompiler/level_extractor/extract_tfrag.cpp | 111 +++++++------- decompiler/level_extractor/extract_tie.cpp | 51 +++---- .../level_extractor/tfrag_tie_fixup.cpp | 5 +- decompiler/main.cpp | 26 ++-- decompiler/types2/ForwardProp.cpp | 27 ++-- decompiler/types2/types2.cpp | 16 ++- decompiler/util/DecompilerTypeSystem.cpp | 6 +- decompiler/util/TP_Type.h | 2 +- decompiler/util/data_decompile.cpp | 26 ++-- decompiler/util/sparticle_decompile.cpp | 15 +- game/graphics/display.cpp | 1 + game/graphics/gfx.cpp | 1 + .../opengl_renderer/BucketRenderer.cpp | 7 +- .../opengl_renderer/DirectRenderer.cpp | 15 +- .../graphics/opengl_renderer/DirectRenderer.h | 1 - .../opengl_renderer/DirectRenderer2.cpp | 21 ++- game/graphics/opengl_renderer/Profiler.cpp | 4 +- game/graphics/opengl_renderer/Shader.cpp | 6 +- .../opengl_renderer/ShadowRenderer.cpp | 5 +- game/graphics/opengl_renderer/Shadow_PS2.cpp | 4 +- game/graphics/opengl_renderer/SkyRenderer.cpp | 2 - game/graphics/opengl_renderer/Sprite3.cpp | 8 +- .../opengl_renderer/SpriteRenderer.cpp | 4 +- .../opengl_renderer/TextureUploadHandler.cpp | 6 +- .../opengl_renderer/background/Shrub.cpp | 4 +- .../opengl_renderer/background/Tfrag3.cpp | 4 +- .../opengl_renderer/background/Tie3.cpp | 3 +- game/graphics/opengl_renderer/dma_helpers.cpp | 30 ++-- .../foreground/Generic2_OpenGL.cpp | 7 +- .../ocean/CommonOceanRenderer.cpp | 6 +- .../opengl_renderer/ocean/OceanMid.cpp | 4 +- .../opengl_renderer/ocean/OceanNear.cpp | 4 +- game/graphics/texture/TexturePool.cpp | 10 +- game/overlord/iso_api.cpp | 2 +- game/overlord/iso_cd.cpp | 2 +- game/sce/libgraph.cpp | 4 +- game/sound/989snd/ame_handler.cpp | 2 + game/sound/989snd/loader.cpp | 6 +- game/sound/989snd/midi_handler.cpp | 9 +- game/sound/989snd/player.cpp | 13 +- game/sound/989snd/sndplay.cpp | 6 +- game/sound/CMakeLists.txt | 2 +- game/system/Deci2Server.cpp | 3 +- goalc/build_level/build_level.cpp | 10 +- goalc/build_level/collide_bvh.cpp | 6 +- goalc/build_level/collide_pack.cpp | 6 +- goalc/build_level/color_quantization.cpp | 6 +- goalc/build_level/gltf_mesh_extract.cpp | 10 +- goalc/compiler/Compiler.cpp | 31 ++-- goalc/compiler/Compiler.h | 24 ++-- goalc/compiler/Env.cpp | 5 +- goalc/compiler/Util.cpp | 4 +- .../compiler/compilation/CompilerControl.cpp | 23 ++- .../compilation/ConstantPropagation.cpp | 6 +- goalc/compiler/compilation/Debug.cpp | 53 +++---- goalc/compiler/compilation/Define.cpp | 2 - goalc/compiler/compilation/Macro.cpp | 28 ++-- goalc/compiler/compilation/Type.cpp | 7 +- goalc/data_compiler/game_text_common.cpp | 4 +- goalc/debugger/Debugger.cpp | 91 ++++++------ goalc/listener/Listener.cpp | 7 +- goalc/main.cpp | 4 +- goalc/make/MakeSystem.cpp | 55 +++---- goalc/make/Tools.cpp | 2 +- goalc/regalloc/Allocator.cpp | 28 ++-- goalc/regalloc/Allocator_v2.cpp | 39 ++--- goalc/regalloc/allocator_interface.cpp | 19 +-- test/goalc/test_debugger.cpp | 10 +- 120 files changed, 990 insertions(+), 893 deletions(-) diff --git a/common/audio/audio_formats.cpp b/common/audio/audio_formats.cpp index 62398aa4f8..657e06b487 100644 --- a/common/audio/audio_formats.cpp +++ b/common/audio/audio_formats.cpp @@ -1,5 +1,6 @@ #include "audio_formats.h" +#include "common/log/log.h" #include "common/util/BinaryWriter.h" #include "third-party/fmt/core.h" @@ -254,7 +255,7 @@ void test_encode_adpcm(const std::vector& samples, } if (debug) { - fmt::print("Range: {}\n", max_sample - min_sample); + lg::debug("Range: {}", max_sample - min_sample); } // see how many bits we need and pick shift. @@ -283,11 +284,11 @@ void test_encode_adpcm(const std::vector& samples, if (filter_errors[best_filter] || best_filter != filter_debug[block_idx] || best_shift != shift_debug[block_idx]) { - fmt::print("Block {} me {}, {} : answer {} {}: ERR {}\n", block_idx, best_filter, best_shift, - filter_debug[block_idx], shift_debug[block_idx], filter_errors[best_filter]); - fmt::print("filter errors:\n"); + lg::error("Block {} me {}, {} : answer {} {}: ERR {}", block_idx, best_filter, best_shift, + filter_debug[block_idx], shift_debug[block_idx], filter_errors[best_filter]); + lg::error("filter errors:"); for (int i = 0; i < 5; i++) { - fmt::print(" [{}] {} {}\n", i, filter_errors[i], filter_shifts[i]); + lg::error(" [{}] {} {}", i, filter_errors[i], filter_shifts[i]); } ASSERT_MSG(false, fmt::format("prev: {} {}", prev_block_samples[0], prev_block_samples[1])); } diff --git a/common/cross_sockets/XSocket.cpp b/common/cross_sockets/XSocket.cpp index 5ff7bd1e66..71223e77b4 100644 --- a/common/cross_sockets/XSocket.cpp +++ b/common/cross_sockets/XSocket.cpp @@ -18,6 +18,7 @@ #include #include "third-party/fmt/core.h" +#include "common/log/log.h" // clang-format on int open_socket(int af, int type, int protocol) { @@ -29,7 +30,7 @@ int open_socket(int af, int type, int protocol) { // Initialize Winsock iResult = WSAStartup(MAKEWORD(2, 2), &wsaData); if (iResult != 0) { - printf("WSAStartup failed: %d\n", iResult); + lg::error("WSAStartup failed: {}", iResult); return 1; } return socket(af, type, protocol); @@ -71,7 +72,7 @@ int accept_socket(int socket, sockaddr* addr, int* addrLen) { // Initialize Winsock iResult = WSAStartup(MAKEWORD(2, 2), &wsaData); if (iResult != 0) { - printf("WSAStartup failed: %d\n", iResult); + lg::error("WSAStartup failed: {}", iResult); return 1; } return accept(socket, addr, addrLen); @@ -116,13 +117,13 @@ void close_socket(int sock) { int set_socket_option(int socket, int level, int optname, const void* optval, int optlen) { int ret = setsockopt(socket, level, optname, (const char*)optval, optlen); if (ret < 0) { - printf("Failed to setsockopt(%d, %d, %d, _, _) - Error: %s\n", socket, level, optname, - strerror(errno)); + lg::error("Failed to setsockopt({},{}, {}, _, _) - Error: {}", socket, level, optname, + strerror(errno)); } #ifdef _WIN32 if (ret < 0) { int err = WSAGetLastError(); - printf("WSAGetLastError: %d\n", err); + lg::error("WSAGetLastError: {}", err); } #endif return ret; @@ -153,7 +154,7 @@ int write_to_socket(int socket, const char* buf, int len) { bytes_wrote = send(socket, buf, len, 0); #endif if (bytes_wrote < 0) { - fmt::print(stderr, "[XSocket:{}] Error writing to socket\n", socket); + lg::error("[XSocket:{}] Error writing to socket", socket); } return bytes_wrote; } diff --git a/common/cross_sockets/XSocketServer.cpp b/common/cross_sockets/XSocketServer.cpp index 40a1ba246c..6a47671dc7 100644 --- a/common/cross_sockets/XSocketServer.cpp +++ b/common/cross_sockets/XSocketServer.cpp @@ -12,6 +12,7 @@ #include #include #endif +#include "common/log/log.h" // clang-format on XSocketServer::XSocketServer(std::function shutdown_callback, @@ -67,19 +68,19 @@ bool XSocketServer::init_server() { addr.sin_port = htons(tcp_port); if (bind(listening_socket, (sockaddr*)&addr, sizeof(addr)) < 0) { - fmt::print("[XSocketServer:{}] failed to bind\n", tcp_port); + lg::error("[XSocketServer:{}] failed to bind", tcp_port); close_server_socket(); return false; } if (listen(listening_socket, 0) < 0) { - fmt::print("[XSocketServer:{}] failed to listen\n", tcp_port); + lg::error("[XSocketServer:{}] failed to listen", tcp_port); close_server_socket(); return false; } server_initialized = true; - fmt::print("[XSocketServer:{}] initialized\n", tcp_port); + lg::info("[XSocketServer:{}] initialized", tcp_port); post_init(); return true; } diff --git a/common/custom_data/pack_helpers.cpp b/common/custom_data/pack_helpers.cpp index 0025c596b5..6bed346832 100644 --- a/common/custom_data/pack_helpers.cpp +++ b/common/custom_data/pack_helpers.cpp @@ -2,13 +2,15 @@ #include +#include "common/log/log.h" + constexpr float kClusterSize = 4096 * 40; // 100 in-game meters constexpr float kMasterOffset = 12000 * 4096; std::pair position_to_cluster_and_offset(float in) { in += kMasterOffset; if (in < 0) { - fmt::print("negative: {}\n", in); + lg::print("negative: {}\n", in); } ASSERT(in >= 0); int cluster_cell = (in / kClusterSize); @@ -69,4 +71,4 @@ void pack_tfrag_vertices(tfrag3::PackedTfragVertices* result, } ASSERT(next_cluster_idx < UINT16_MAX); -} \ No newline at end of file +} diff --git a/common/dma/dma_copy.cpp b/common/dma/dma_copy.cpp index b02f10df55..5890beccc8 100644 --- a/common/dma/dma_copy.cpp +++ b/common/dma/dma_copy.cpp @@ -3,6 +3,7 @@ #include "common/dma/dma_chain_read.h" #include "common/goal_constants.h" +#include "common/log/log.h" #include "common/util/Timer.h" #include "third-party/fmt/core.h" @@ -36,11 +37,11 @@ void diff_dma_chains(DmaFollower ref, DmaFollower dma) { auto ref_tag = ref.current_tag(); auto dma_tag = dma.current_tag(); if (ref_tag.kind != dma_tag.kind) { - fmt::print("Bad dma tag kinds\n"); + lg::warn("Bad dma tag kinds"); } if (ref_tag.qwc != dma_tag.qwc) { - fmt::print("Bad dma tag qwc: {} {}\n", ref_tag.qwc, dma_tag.qwc); + lg::warn("Bad dma tag qwc: {} {}", ref_tag.qwc, dma_tag.qwc); } auto ref_result = ref.read_and_advance(); @@ -48,19 +49,19 @@ void diff_dma_chains(DmaFollower ref, DmaFollower dma) { for (int i = 0; i < (int)ref_result.size_bytes; i++) { if (ref_result.data[i] != dma_result.data[i]) { - fmt::print("Bad data ({} vs {}) at {} into transfer: {} {}\n", ref_result.data[i], - dma_result.data[i], i, ref_tag.print(), dma_tag.print()); + lg::error("Bad data ({} vs {}) at {} into transfer: {} {}", ref_result.data[i], + dma_result.data[i], i, ref_tag.print(), dma_tag.print()); return; } } } if (!ref.ended()) { - fmt::print("dma ended early\n"); + lg::warn("dma ended early"); } if (!dma.ended()) { - fmt::print("dma had extra data\n"); + lg::warn("dma had extra data"); } } @@ -175,12 +176,12 @@ const DmaData& FixedChunkDmaCopier::run(const void* memory, u32 offset, bool ver auto v2 = flatten_dma(DmaFollower(m_result.data.data(), m_result.start_offset)); if (ref != v2) { - fmt::print("Verification has failed.\n"); - fmt::print("size diff: {} {}\n", ref.size(), v2.size()); + lg::error("Verification has failed."); + lg::error("size diff: {} {}", ref.size(), v2.size()); for (size_t i = 0; i < std::min(ref.size(), v2.size()); i++) { if (ref[i] != v2[i]) { - fmt::print("first diff at {}\n", i); + lg::error("first diff at {}", i); break; } } @@ -188,10 +189,10 @@ const DmaData& FixedChunkDmaCopier::run(const void* memory, u32 offset, bool ver DmaFollower(m_result.data.data(), m_result.start_offset)); ASSERT(false); } else { - fmt::print("verification ok: {} bytes\n", ref.size()); + lg::debug("verification ok: {} bytes", ref.size()); } } m_result.stats.sync_time_ms = timer.getMs(); return m_result; -} \ No newline at end of file +} diff --git a/common/global_profiler/GlobalProfiler.cpp b/common/global_profiler/GlobalProfiler.cpp index 54b563da26..1a459dfd7c 100644 --- a/common/global_profiler/GlobalProfiler.cpp +++ b/common/global_profiler/GlobalProfiler.cpp @@ -24,6 +24,7 @@ u32 get_current_tid() { return (u32)GetCurrentThreadId(); } #endif +#include "common/log/log.h" // clang-format on u64 get_current_ts() { @@ -157,18 +158,17 @@ void GlobalProfiler::dump_to_json(const std::string& path) { // ts json_event["ts"] = (event.ts - lowest_ts) / 1000.f; if (event.ts < info.debug) { - fmt::print("out of order: {} {} {} ms\n", event.ts / 1000.f, info.debug / 1000.f, - (info.debug - event.ts) / 1000000.f); - fmt::print(" idx: {}, range {} {}\n", event_idx, info.lowest_at_target, - info.highest_at_target); - fmt::print(" now: {}\n", m_next_idx); + lg::debug("out of order: {} {} {} ms", event.ts / 1000.f, info.debug / 1000.f, + (info.debug - event.ts) / 1000000.f); + lg::debug(" idx: {}, range {} {}", event_idx, info.lowest_at_target, info.highest_at_target); + lg::debug(" now: {}", m_next_idx); } info.debug = event.ts; } for (auto& t : info_per_thread) { - fmt::print("thread: {}: {} -> {}\n", t.first, t.second.lowest_at_target, - t.second.highest_at_target); + lg::debug("thread: {}: {} -> {}", t.first, t.second.lowest_at_target, + t.second.highest_at_target); } file_util::write_text_file(path, json.dump()); diff --git a/common/goos/PrettyPrinter.cpp b/common/goos/PrettyPrinter.cpp index ee3c994c1c..0e25ec9115 100644 --- a/common/goos/PrettyPrinter.cpp +++ b/common/goos/PrettyPrinter.cpp @@ -13,7 +13,6 @@ #include "Reader.h" #include "common/goos/PrettyPrinter2.h" -#include "common/log/log.h" #include "common/util/Assert.h" #include "third-party/fmt/core.h" diff --git a/common/goos/Reader.cpp b/common/goos/Reader.cpp index 93fd976298..9934b71884 100644 --- a/common/goos/Reader.cpp +++ b/common/goos/Reader.cpp @@ -13,6 +13,7 @@ #include "ReplUtils.h" +#include "common/log/log.h" #include "common/util/FileUtil.h" #include "common/util/FontUtils.h" @@ -291,11 +292,16 @@ Object Reader::internal_read(std::shared_ptr text, ts.seek_past_whitespace_and_comments(); // read list! - auto objs = read_list(ts, false); - if (add_top_level) { - return PairObject::make_new(SymbolObject::make_new(symbolTable, "top-level"), objs); - } else { - return objs; + try { + auto objs = read_list(ts, false); + if (add_top_level) { + return PairObject::make_new(SymbolObject::make_new(symbolTable, "top-level"), objs); + } else { + return objs; + } + } catch (std::exception& e) { + lg::print("{}", e.what()); + throw e; } } diff --git a/common/log/log.cpp b/common/log/log.cpp index 2fd546fed1..b1904a117f 100644 --- a/common/log/log.cpp +++ b/common/log/log.cpp @@ -46,10 +46,14 @@ void log_message(level log_level, LogTime& now, const char* message) { auto now_milliseconds = now.tv.tv_usec / 1000; strftime(date_time_buffer, 128, "%Y-%m-%d %H:%M:%S", localtime(&now_seconds)); std::string date_string = fmt::format("[{}:{:03d}]", date_time_buffer, now_milliseconds); + strftime(date_time_buffer, 128, "%M:%S", localtime(&now_seconds)); + std::string time_condensed = fmt::format("[{}]:{:03d}]", date_time_buffer, now_milliseconds); #else char date_time_buffer[128]; strftime(date_time_buffer, 128, "%Y-%m-%d %H:%M:%S", localtime(&now.tim)); std::string date_string = fmt::format("[{}]", date_time_buffer); + strftime(date_time_buffer, 128, "%M:%S", localtime(&now.tim)); + std::string time_condensed = fmt::format("[{}]", date_time_buffer); #endif { @@ -65,11 +69,12 @@ void log_message(level log_level, LogTime& now, const char* message) { } if (log_level >= gLogger.stdout_log_level) { - fmt::print("{} [", date_string); + fmt::print("{} [", time_condensed); fmt::print(fg(log_colors[int(log_level)]), "{}", log_level_names[int(log_level)]); fmt::print("] {}\n", message); if (log_level >= gLogger.flush_level) { fflush(stdout); + fflush(stderr); } } } @@ -78,6 +83,26 @@ void log_message(level log_level, LogTime& now, const char* message) { exit(-1); } } + +void log_print(const char* message) { + { + // We always immediately flush prints because since it has no associated level + // it could be anything from a fatal error to a useless debug log. + std::lock_guard lock(gLogger.mutex); + if (gLogger.fp) { + // Log to File + std::string msg(message); + fwrite(msg.c_str(), msg.length(), 1, gLogger.fp); + fflush(gLogger.fp); + } + + if (gLogger.stdout_log_level < lg::level::off) { + fmt::print(message); + fflush(stdout); + fflush(stderr); + } + } +} } // namespace internal void set_file(const std::string& filename) { diff --git a/common/log/log.h b/common/log/log.h index b26d0dd230..34470f47a1 100644 --- a/common/log/log.h +++ b/common/log/log.h @@ -7,6 +7,7 @@ #endif #include +#include "third-party/fmt/color.h" #include "third-party/fmt/core.h" namespace lg { @@ -27,6 +28,7 @@ enum class level { trace = 0, debug = 1, info = 2, warn = 3, error = 4, die = 5, namespace internal { // log implementation stuff, not to be called by the user void log_message(level log_level, LogTime& now, const char* message); +void log_print(const char* message); } // namespace internal void set_file(const std::string& filename); @@ -49,6 +51,17 @@ void log(level log_level, const std::string& format, Args&&... args) { internal::log_message(log_level, now, formatted_message.c_str()); } +template +void print(const std::string& format, Args&&... args) { + std::string formatted_message = fmt::format(format, std::forward(args)...); + internal::log_print(formatted_message.c_str()); +} +template +void print(const fmt::text_style& ts, const std::string& format, Args&&... args) { + std::string formatted_message = fmt::format(ts, format, std::forward(args)...); + internal::log_print(formatted_message.c_str()); +} + template void trace(const std::string& format, Args&&... args) { log(level::trace, format, std::forward(args)...); diff --git a/common/serialization/subtitles/subtitles_ser.cpp b/common/serialization/subtitles/subtitles_ser.cpp index dd3d8a9256..36619a8bc2 100644 --- a/common/serialization/subtitles/subtitles_ser.cpp +++ b/common/serialization/subtitles/subtitles_ser.cpp @@ -389,7 +389,7 @@ void GameSubtitleGroups::hydrate_from_asset_file() { m_groups[key] = val.get>(); } } catch (std::exception& ex) { - fmt::print("Bad subtitle group entry - {} - {}", key, ex.what()); + lg::print("Bad subtitle group entry - {} - {}", key, ex.what()); } } } diff --git a/common/type_system/Type.cpp b/common/type_system/Type.cpp index e816b86343..7dbd35e74d 100644 --- a/common/type_system/Type.cpp +++ b/common/type_system/Type.cpp @@ -7,6 +7,7 @@ #include +#include "common/log/log.h" #include "common/util/Assert.h" #include "third-party/fmt/core.h" @@ -196,8 +197,8 @@ std::string Type::get_name() const { std::string Type::get_runtime_name() const { if (!m_allow_in_runtime) { - fmt::print("[TypeSystem] Tried to use type {} as a runtime type, which is not allowed.\n", - get_name()); + lg::print("[TypeSystem] Tried to use type {} as a runtime type, which is not allowed.\n", + get_name()); throw std::runtime_error("get_runtime_name"); } return m_runtime_name; diff --git a/common/type_system/TypeFieldLookup.cpp b/common/type_system/TypeFieldLookup.cpp index 5b690d75de..06eea7e2bd 100644 --- a/common/type_system/TypeFieldLookup.cpp +++ b/common/type_system/TypeFieldLookup.cpp @@ -7,6 +7,8 @@ #include "TypeSystem.h" +#include "common/log/log.h" + #include "third-party/fmt/core.h" namespace { @@ -452,8 +454,8 @@ void try_reverse_lookup(const FieldReverseLookupInput& input, FieldReverseMultiLookupOutput* output, int max_count) { if (debug_reverse_lookup) { - fmt::print(" try_reverse_lookup on {} offset {} deref {} stride {}\n", input.base_type.print(), - input.offset, input.deref.has_value(), input.stride); + lg::debug(" try_reverse_lookup on {} offset {} deref {} stride {}", input.base_type.print(), + input.offset, input.deref.has_value(), input.stride); } auto base_input_type = input.base_type.base_type(); @@ -484,15 +486,15 @@ FieldReverseLookupOutput TypeSystem::reverse_field_lookup( /* if (multi_result.results.size() > 1) { - fmt::print("Multiple:\n"); + lg::print("Multiple:\n"); for (auto& result : multi_result.results) { - fmt::print(" [{}] [{}] ", result.total_score, result.result_type.print()); + lg::print(" [{}] [{}] ", result.total_score, result.result_type.print()); for (auto& tok : result.tokens) { - fmt::print("{} ", tok.print()); + lg::print("{} ", tok.print()); } - fmt::print("\n"); + lg::print("\n"); } - fmt::print("\n\n\n"); + lg::print("\n\n\n"); } */ @@ -510,8 +512,8 @@ FieldReverseMultiLookupOutput TypeSystem::reverse_field_multi_lookup( const FieldReverseLookupInput& input, int max_count) const { if (debug_reverse_lookup) { - fmt::print("reverse_field_lookup on {} offset {} deref {} stride {}\n", input.base_type.print(), - input.offset, input.deref.has_value(), input.stride); + lg::debug("reverse_field_lookup on {} offset {} deref {} stride {}", input.base_type.print(), + input.offset, input.deref.has_value(), input.stride); } FieldReverseMultiLookupOutput result; diff --git a/common/type_system/TypeSystem.cpp b/common/type_system/TypeSystem.cpp index 4490649ff7..a4baa95ab8 100644 --- a/common/type_system/TypeSystem.cpp +++ b/common/type_system/TypeSystem.cpp @@ -9,6 +9,7 @@ #include +#include "common/log/log.h" #include "common/util/Assert.h" #include "common/util/math_util.h" @@ -18,11 +19,11 @@ namespace { template [[noreturn]] void throw_typesystem_error(const std::string& str, Args&&... args) { - fmt::print(fg(fmt::color::crimson) | fmt::emphasis::bold, "-- Type Error! --\n"); + lg::print(fg(fmt::color::crimson) | fmt::emphasis::bold, "-- Type Error! --\n"); if (!str.empty() && str.back() == '\n') { - fmt::print(fg(fmt::color::yellow), str, std::forward(args)...); + lg::print(fg(fmt::color::yellow), str, std::forward(args)...); } else { - fmt::print(fg(fmt::color::yellow), str + '\n', std::forward(args)...); + lg::print(fg(fmt::color::yellow), str + '\n', std::forward(args)...); } throw std::runtime_error( @@ -63,8 +64,8 @@ Type* TypeSystem::add_type(const std::string& name, std::unique_ptr type) if (m_allow_redefinition || std::find(m_types_allowed_to_be_redefined.begin(), m_types_allowed_to_be_redefined.end(), kv->second->get_name()) != m_types_allowed_to_be_redefined.end()) { - fmt::print("[TypeSystem] Type {} was originally\n{}\nand is redefined as\n{}\n", - kv->second->get_name(), kv->second->print(), type->print()); + lg::print("[TypeSystem] Type {} was originally\n{}\nand is redefined as\n{}\n", + kv->second->get_name(), kv->second->print(), type->print()); // extra dangerous, we have allowed type redefinition! // keep the unique_ptr around, just in case somebody references this old type pointer. @@ -1530,11 +1531,11 @@ bool TypeSystem::typecheck_and_throw(const TypeSpec& expected, if (!success) { if (print_on_error) { if (error_source_name.empty()) { - fmt::print("[TypeSystem] Got type \"{}\" when expecting \"{}\"\n", actual.print(), - expected.print()); + lg::print("[TypeSystem] Got type \"{}\" when expecting \"{}\"\n", actual.print(), + expected.print()); } else { - fmt::print("[TypeSystem] For {}, got type \"{}\" when expecting \"{}\"\n", - error_source_name, actual.print(), expected.print()); + lg::print("[TypeSystem] For {}, got type \"{}\" when expecting \"{}\"\n", error_source_name, + actual.print(), expected.print()); } } diff --git a/common/type_system/deftype.cpp b/common/type_system/deftype.cpp index b5f8cea431..b8467530ec 100644 --- a/common/type_system/deftype.cpp +++ b/common/type_system/deftype.cpp @@ -7,6 +7,7 @@ #include "deftype.h" #include "common/goos/ParseHelpers.h" +#include "common/log/log.h" #include "third-party/fmt/core.h" @@ -402,7 +403,7 @@ StructureDefResult parse_structure_def( fmt::format("Process heap underflow in type {}: heap-base is {} vs. auto-detected {}", type->get_name(), flags.heap_base, auto_hb)); //} else if (flags.heap_base != auto_hb) { - // fmt::print("Type {} has manual heap-base ({} vs {}). This is fine. \n", type->get_name(), + // lg::print("Type {} has manual heap-base ({} vs {}). This is fine. \n", type->get_name(), // flags.heap_base, auto_hb); } } @@ -623,14 +624,14 @@ DeftypeResult parse_deftype(const goos::Object& deftype, new_type->set_pack(true); } if (sr.allow_misaligned) { - fmt::print( + lg::print( "[TypeSystem] :allow-misaligned was set on {}, which is a basic and cannot " "be misaligned\n", name); throw std::runtime_error("invalid pack option on basic"); } if (sr.always_stack_singleton) { - fmt::print( + lg::print( "[TypeSystem] :always-stack-singleton was set on {}, which is a basic and cannot " "be a stack singleton\n", name); diff --git a/common/util/Assert.cpp b/common/util/Assert.cpp index 9844d97839..be4e88288c 100644 --- a/common/util/Assert.cpp +++ b/common/util/Assert.cpp @@ -6,20 +6,23 @@ #include #include +#include "common/log/log.h" + void private_assert_failed(const char* expr, const char* file, int line, const char* function, const char* msg) { if (!msg || msg[0] == '\0') { - fprintf(stderr, "Assertion failed: '%s'\n\tSource: %s:%d\n\tFunction: %s\n", expr, file, line, - function); + std::string log = fmt::format("Assertion failed: '{}'\n\tSource: {}:{}\n\tFunction: {}\n", expr, + file, line, function); + lg::die(log); } else { - fprintf(stderr, "Assertion failed: '%s'\n\tMessage: %s\n\tSource: %s:%d\n\tFunction: %s\n", - expr, msg, file, line, function); + std::string log = + fmt::format("Assertion failed: '{}'\n\tMessage: {}\n\tSource: {}:{}\n\tFunction: {}\n", + expr, msg, file, line, function); + lg::die(log); } - fflush(stdout); // ensure any stdout logs are flushed before we terminate - fflush(stderr); abort(); } diff --git a/common/util/FileUtil.cpp b/common/util/FileUtil.cpp index 0234383710..b9f2835039 100644 --- a/common/util/FileUtil.cpp +++ b/common/util/FileUtil.cpp @@ -139,7 +139,7 @@ bool setup_project_path(std::optional project_path_override) { if (project_path_override) { gFilePathInfo.path_to_data = *project_path_override; gFilePathInfo.initialized = true; - fmt::print("Using explicitly set project path: {}\n", project_path_override->string()); + lg::info("Using explicitly set project path: {}", project_path_override->string()); return true; } @@ -147,7 +147,7 @@ bool setup_project_path(std::optional project_path_override) { if (data_path) { gFilePathInfo.path_to_data = *data_path; gFilePathInfo.initialized = true; - fmt::print("Using data path: {}\n", data_path->string()); + lg::info("Using data path: {}", data_path->string()); return true; } @@ -155,11 +155,11 @@ bool setup_project_path(std::optional project_path_override) { if (development_repo_path) { gFilePathInfo.path_to_data = *development_repo_path; gFilePathInfo.initialized = true; - fmt::print("Using development repo path: {}\n", *development_repo_path); + lg::info("Using development repo path: {}", *development_repo_path); return true; } - fmt::print("Failed to initialize project path.\n"); + lg::error("Failed to initialize project path."); return false; } diff --git a/decompiler/Function/CfgVtx.cpp b/decompiler/Function/CfgVtx.cpp index e70be31832..9da41edfd6 100644 --- a/decompiler/Function/CfgVtx.cpp +++ b/decompiler/Function/CfgVtx.cpp @@ -3,6 +3,7 @@ #include "Function.h" #include "common/goos/PrettyPrinter.h" +#include "common/log/log.h" #include "common/symbols.h" #include "common/util/Assert.h" @@ -496,12 +497,12 @@ bool ControlFlowGraph::is_while_loop(CfgVtx* b0, CfgVtx* b1, CfgVtx* b2) { bool debug = b0->to_string() == "Seq CONDNE104 ... Block 18100"; if (debug) { - fmt::print("try while: {} | {} | {}\n", b0->to_string(), b1->to_string(), b2->to_string()); + lg::debug("try while: {} | {} | {}", b0->to_string(), b1->to_string(), b2->to_string()); } if (b0->end_branch.asm_branch || b1->end_branch.asm_branch) { if (debug) - fmt::print("reject 1 {} {}\n", b0->end_branch.asm_branch, b1->end_branch.asm_branch); + lg::debug("reject 1 {} {}", b0->end_branch.asm_branch, b1->end_branch.asm_branch); return false; } @@ -532,17 +533,17 @@ bool ControlFlowGraph::is_while_loop(CfgVtx* b0, CfgVtx* b1, CfgVtx* b2) { return false; ASSERT(!b1->end_branch.has_branch); if (!b2->has_pred(b0)) { - printf("expect b2 (%s) to have pred b0 (%s)\n", b2->to_string().c_str(), - b0->to_string().c_str()); - printf("but it doesn't! instead it has:\n"); + lg::debug("expect b2 ({}) to have pred b0 ({})", b2->to_string().c_str(), + b0->to_string().c_str()); + lg::debug("but it doesn't! instead it has:"); for (auto* x : b2->pred) { - printf(" %s\n", x->to_string().c_str()); + lg::debug(" {}", x->to_string().c_str()); } if (b0->succ_ft) { - printf("b0's succ_ft: %s\n", b0->succ_ft->to_string().c_str()); + lg::debug("b0's succ_ft: {}", b0->succ_ft->to_string().c_str()); } if (b0->succ_branch) { - printf("b0's succ_branch: %s\n", b0->succ_branch->to_string().c_str()); + lg::debug("b0's succ_branch: {}", b0->succ_branch->to_string().c_str()); } } ASSERT(b2->has_pred(b0)); @@ -583,12 +584,9 @@ bool ControlFlowGraph::is_until_loop(CfgVtx* b1, CfgVtx* b2) { return false; ASSERT(!b1->end_branch.has_branch); - if (!b2->has_pred(b1)) { - fmt::print("Graph error {} (s {}) should have pred {} (s {})\n", b2->to_string(), - b2->get_first_block_id(), b1->to_string(), b1->get_first_block_id()); - } - - ASSERT(b2->has_pred(b1)); + ASSERT_MSG(b2->has_pred(b1), + fmt::format("Graph error {} (s {}) should have pred {} (s {})\n", b2->to_string(), + b2->get_first_block_id(), b1->to_string(), b1->get_first_block_id())); if (b2->pred.size() != 1) return false; @@ -938,8 +936,6 @@ bool ControlFlowGraph::find_infinite_continue() { int my_block = b0->get_first_block_id(); int dest_block = b0->succ_branch->get_first_block_id(); - // fmt::print("Considering {} as an infinite continue:\n", b0->to_string()); - if (b0->end_branch.asm_branch) { return true; } @@ -1155,8 +1151,8 @@ bool ControlFlowGraph::clean_up_asm_branches() { } if (debug_asm_branch) { - fmt::print("Looks like asm likely branch: {} {} to {}\n", b0->to_string(), bds->to_string(), - b1->to_string()); + lg::debug("Looks like asm likely branch: {} {} to {}", b0->to_string(), bds->to_string(), + b1->to_string()); } auto* b0_seq = dynamic_cast(b0); @@ -1174,7 +1170,7 @@ bool ControlFlowGraph::clean_up_asm_branches() { for (auto* new_pred : b0->pred) { if (debug_asm_branch) { - fmt::print(" pred {}\n", new_pred->to_string()); + lg::debug(" pred {}", new_pred->to_string()); } new_pred->replace_succ_and_check(b0, new_seq); } @@ -1294,19 +1290,19 @@ bool ControlFlowGraph::clean_up_asm_branches() { else { lg::error("unhandled sequences in clean_up_asm_branches likely seq: {} {}", !!b0_seq, !!b1_seq); - lg::error("{} {}\n", b0->get_first_block_id(), b1->get_first_block_id()); + lg::error("{} {}", b0->get_first_block_id(), b1->get_first_block_id()); } } else { if (debug_asm_branch) { - fmt::print("Looks like asm normal branch: {} to {}\n", b0->to_string(), b1->to_string()); + lg::debug("Looks like asm normal branch: {} to {}", b0->to_string(), b1->to_string()); } auto* b0_seq = dynamic_cast(b0); auto* b1_seq = dynamic_cast(b1); if (!b0_seq && !b1_seq) { if (debug_asm_branch) { - fmt::print("[combo nn] {} and {}\n", b0->get_first_block_id(), b1->get_first_block_id()); + lg::debug("[combo nn] {} and {}", b0->get_first_block_id(), b1->get_first_block_id()); } // build new sequence replaced = true; @@ -1330,19 +1326,19 @@ bool ControlFlowGraph::clean_up_asm_branches() { for (auto* new_succ : b1->succs()) { if (debug_asm_branch) { - fmt::print("changing {}'s pred {} to seq. bc: {}", new_succ->to_string(), - b1->to_string(), new_succ->pred.size()); + lg::debug("changing {}'s pred {} to seq. bc: {}", new_succ->to_string(), + b1->to_string(), new_succ->pred.size()); } new_succ->replace_pred_and_check(b1, new_seq); if (debug_asm_branch) { - fmt::print(" ac: {}\n", new_succ->pred.size()); + lg::debug(" ac: {}", new_succ->pred.size()); } } new_seq->succ_ft = b1->succ_ft; if (b1->succ_branch && debug_asm_branch) { - fmt::print("combining {} and {} into a sequence, succ {}\n", b0->get_first_block_id(), - b1->get_first_block_id(), b1->succ_branch->get_first_block_id()); + lg::debug("combining {} and {} into a sequence, succ {}", b0->get_first_block_id(), + b1->get_first_block_id(), b1->succ_branch->get_first_block_id()); } new_seq->succ_branch = b1->succ_branch; @@ -1367,13 +1363,13 @@ bool ControlFlowGraph::clean_up_asm_branches() { return false; } else if (b0_seq && !b1_seq) { if (debug_asm_branch) { - fmt::print("[combo sn] {} and {}\n", b0->get_first_block_id(), b1->get_first_block_id()); - fmt::print("expanding sequence: {} (s {}) to include {}\n", b0_seq->to_string(), - b0_seq->get_first_block_id(), b1->get_first_block_id()); + lg::debug("[combo sn] {} and {}", b0->get_first_block_id(), b1->get_first_block_id()); + lg::debug("expanding sequence: {} (s {}) to include {}", b0_seq->to_string(), + b0_seq->get_first_block_id(), b1->get_first_block_id()); } if (b1->succ_ft) { if (debug_asm_branch) { - fmt::print(" b1 succ_ft is {}\n", b1->succ_ft->to_string()); + lg::debug(" b1 succ_ft is {}", b1->succ_ft->to_string()); } ASSERT(b1->succ_ft->has_pred(b1)); } @@ -1386,18 +1382,18 @@ bool ControlFlowGraph::clean_up_asm_branches() { if (b0->succ_branch) { if (debug_asm_branch) { - fmt::print("succ {} has {} preds parent: {}\n", b0->succ_branch->get_first_block_id(), - b0->succ_branch->pred.size(), !!b0->succ_branch->parent); + lg::debug("succ {} has {} preds parent: {}", b0->succ_branch->get_first_block_id(), + b0->succ_branch->pred.size(), !!b0->succ_branch->parent); } b0->succ_branch->replace_preds_with_and_check({b0}, nullptr); if (debug_asm_branch) { - fmt::print("OKOK\n"); + lg::debug("OKOK"); } } for (auto* new_succ : b1->succs()) { if (debug_asm_branch) { - fmt::print("fixing up succ {}\n", new_succ->to_string()); + lg::debug("fixing up succ {}", new_succ->to_string()); } new_succ->replace_pred_and_check(b1, b0); } @@ -1419,7 +1415,7 @@ bool ControlFlowGraph::clean_up_asm_branches() { } if (seq->succ_branch && debug_asm_branch) { - fmt::print(" new sb: {}\n", seq->succ_branch->get_first_block_id()); + lg::debug(" new sb: {}", seq->succ_branch->get_first_block_id()); } seq->next = b1->next; if (seq->next) { @@ -1434,8 +1430,8 @@ bool ControlFlowGraph::clean_up_asm_branches() { return false; } else if (b0_seq && b1_seq) { if (debug_asm_branch) { - fmt::print("[combo ss] {} and {}\n", b0->get_first_block_id(), b1->get_first_block_id()); - fmt::print(" {} and {}\n", b0->to_string(), b1->to_string()); + lg::debug("[combo ss] {} and {}", b0->get_first_block_id(), b1->get_first_block_id()); + lg::debug(" {} and {}", b0->to_string(), b1->to_string()); } // printf("make seq type 3 %s %s\n", b0->to_string().c_str(), b1->to_string().c_str()); @@ -1449,8 +1445,8 @@ bool ControlFlowGraph::clean_up_asm_branches() { if (b0->succ_branch) { if (debug_asm_branch) { - fmt::print(" sbp: {}\n", !!b0->succ_branch->parent); - fmt::print(" sb: {}\n", b0->succ_branch->to_string()); + lg::debug(" sbp: {}", !!b0->succ_branch->parent); + lg::debug(" sb: {}", b0->succ_branch->to_string()); } b0->succ_branch->replace_preds_with_and_check({b0}, nullptr); } @@ -1467,7 +1463,7 @@ bool ControlFlowGraph::clean_up_asm_branches() { seq->succ_branch = old_seq->succ_branch; seq->succ_branch = b1->succ_branch; if (seq->succ_branch && debug_asm_branch) { - fmt::print(" DS new sb: {}\n", seq->succ_branch->get_first_block_id()); + lg::debug(" DS new sb: {}", seq->succ_branch->get_first_block_id()); } seq->succ_ft = old_seq->succ_ft; seq->end_branch = old_seq->end_branch; @@ -1483,15 +1479,15 @@ bool ControlFlowGraph::clean_up_asm_branches() { } else if (!b0_seq && b1_seq) { replaced = true; if (!b0->succ_branch) { - fmt::print("bad: {}\n", b0->to_string()); + lg::debug("bad: {}", b0->to_string()); } m_blocks.at(b0->succ_branch->get_first_block_id())->needs_label = true; auto* old_seq = dynamic_cast(b1); ASSERT(old_seq); if (b0->succ_branch) { if (debug_asm_branch) { - fmt::print(" sbp: {}\n", !!b0->succ_branch->parent); - fmt::print(" sb: {}\n", b0->succ_branch->to_string()); + lg::debug(" sbp: {}", !!b0->succ_branch->parent); + lg::debug(" sb: {}", b0->succ_branch->to_string()); } b0->succ_branch->replace_preds_with_and_check({b0}, nullptr); } @@ -2318,18 +2314,18 @@ bool ControlFlowGraph::find_short_circuits() { ShortCircuit::Entry candidate = {vtx, vtx->next}; CfgVtx* end = vtx->next->succ_branch; - // fmt::print("Starting loop\n"); + // lg::print("Starting loop\n"); while (true) { // check candidate: if (!candidate.condition || !candidate.likely_delay || !end) { - // fmt::print("reject begin {} {} {}\n", !!candidate.condition, + // lg::print("reject begin {} {} {}\n", !!candidate.condition, // !!candidate.likely_delay, // !!end); return true; } - // fmt::print(" try {} and {} end {}\n", candidate.condition->to_string(), + // lg::print(" try {} and {} end {}\n", candidate.condition->to_string(), // candidate.likely_delay->to_string(), end->to_string()); if (candidate.condition->next == end) { @@ -2341,13 +2337,13 @@ bool ControlFlowGraph::find_short_circuits() { candidate.likely_delay = nullptr; entries.push_back(candidate); - // fmt::print("all done!"); + // lg::print("all done!"); break; } } if (!candidate.condition->next || !candidate.condition->succ_branch) { - // fmt::print(" fail 0 {}, {}\n", !!candidate.condition->next, + // lg::print(" fail 0 {}, {}\n", !!candidate.condition->next, // !!candidate.condition->succ_branch); return true; } @@ -2357,12 +2353,12 @@ bool ControlFlowGraph::find_short_circuits() { candidate.condition->next != candidate.condition->succ_branch || !candidate.condition->end_branch.branch_likely || candidate.condition->end_branch.kind != CfgVtx::DelaySlotKind::NO_DELAY) { - // fmt::print(" fail 1 {} {} {} {}\n", !candidate.condition->next, + // lg::print(" fail 1 {} {} {} {}\n", !candidate.condition->next, // candidate.condition->next != candidate.condition->succ_branch, // !candidate.condition->end_branch.branch_likely, // candidate.condition->end_branch.kind != // CfgVtx::DelaySlotKind::NO_DELAY); - // fmt::print(" fail 1 condition->next {}, condition->succ_branch {}\n", + // lg::print(" fail 1 condition->next {}, condition->succ_branch {}\n", // candidate.condition->next->to_string(), // candidate.condition->succ_branch->to_string()); return true; @@ -2371,7 +2367,7 @@ bool ControlFlowGraph::find_short_circuits() { if (entries.empty() && candidate.likely_delay->next == end) { entries.push_back(candidate); - // fmt::print("all don2!"); + // lg::print("all don2!"); break; } @@ -2380,7 +2376,7 @@ bool ControlFlowGraph::find_short_circuits() { !candidate.likely_delay->end_branch.branch_always || candidate.likely_delay->end_branch.branch_likely || candidate.likely_delay->end_branch.kind != CfgVtx::DelaySlotKind::NO_DELAY) { - // fmt::print(" fail 2 {} {} {} {} {} {} {}\n", candidate.likely_delay->pred.size() + // lg::print(" fail 2 {} {} {} {} {} {} {}\n", candidate.likely_delay->pred.size() // != 1, // !!candidate.likely_delay->succ_ft, // !candidate.likely_delay->succ_branch, @@ -2389,21 +2385,21 @@ bool ControlFlowGraph::find_short_circuits() { // !!candidate.likely_delay->end_branch.branch_likely, // candidate.likely_delay->end_branch.kind != // CfgVtx::DelaySlotKind::NO_DELAY); - // fmt::print("delay {} has ft {}\n", candidate.likely_delay->to_string(), + // lg::print("delay {} has ft {}\n", candidate.likely_delay->to_string(), // candidate.likely_delay->succ_ft->to_string()); return true; } // slot -> end if (candidate.likely_delay->succ_branch != end) { - // fmt::print(" fail 3\n"); + // lg::print(" fail 3\n"); return true; } // root -> next root if (!candidate.condition->next->next || candidate.condition->next->next != candidate.condition->succ_ft) { - // fmt::print(" fail 4\n"); + // lg::print(" fail 4\n"); return true; } @@ -2415,10 +2411,10 @@ bool ControlFlowGraph::find_short_circuits() { // pre next root check if (next_root->pred.size() != 1) { - // fmt::print(" fail 5\n"); + // lg::print(" fail 5\n"); return true; } - // fmt::print("on to next!\n"); + // lg::print("on to next!\n"); } auto new_sc = alloc(); @@ -2618,7 +2614,7 @@ std::shared_ptr build_cfg(const LinkedObjectFile& file, const CondWithElseLengthHack& cond_with_else_hack, const std::unordered_set& blocks_ending_in_asm_br, GameVersion version) { - // fmt::print("START {}\n", func.guessed_name.to_string()); + // lg::print("START {}\n", func.guessed_name.to_string()); auto cfg = std::make_shared(); const auto& blocks = cfg->create_blocks(func.basic_blocks.size()); @@ -2769,7 +2765,7 @@ std::shared_ptr build_cfg(const LinkedObjectFile& file, if (blocks_ending_in_asm_br.find(i) != blocks_ending_in_asm_br.end()) { b->end_branch.asm_branch = true; if (debug_asm_branch) { - fmt::print("OVERRIDE asm branch at block {}\n", i); + lg::debug("OVERRIDE asm branch at block {}", i); } continue; } @@ -2785,9 +2781,8 @@ std::shared_ptr build_cfg(const LinkedObjectFile& file, if (branch_delay_asm(following, version)) { b->end_branch.asm_branch = true; if (debug_asm_branch) { - fmt::print("LIKELY ASM BRANCH: {} and {}\n", - likely_branch_candidate.to_string(file.labels), - following.to_string(file.labels)); + lg::debug("LIKELY ASM BRANCH: {} and {}", likely_branch_candidate.to_string(file.labels), + following.to_string(file.labels)); } } } @@ -2801,8 +2796,8 @@ std::shared_ptr build_cfg(const LinkedObjectFile& file, if (branch_delay_asm(delay_slot_candidate, version)) { b->end_branch.asm_branch = true; if (debug_asm_branch) { - fmt::print("NORMAL ASM BRANCH: {} and {}\n", branch_candidate.to_string(file.labels), - delay_slot_candidate.to_string(file.labels)); + lg::debug("NORMAL ASM BRANCH: {} and {}", branch_candidate.to_string(file.labels), + delay_slot_candidate.to_string(file.labels)); } } } diff --git a/decompiler/Function/Function.cpp b/decompiler/Function/Function.cpp index 7dc33c21af..c64c9546f3 100644 --- a/decompiler/Function/Function.cpp +++ b/decompiler/Function/Function.cpp @@ -658,7 +658,7 @@ void Function::find_type_defs(LinkedObjectFile& file, DecompilerTypeSystem& dts) if (instr.kind == InstructionKind::SLL && instr.get_dst(0).get_reg() == make_gpr(Reg::V0) && instr.get_src(0).get_reg() == make_gpr(Reg::RA) && instr.get_src(1).get_imm() == 0) { // done! - // fmt::print("Got type {} parent {}\n", type_name, parent_type); + // lg::print("Got type {} parent {}\n", type_name, parent_type); dts.add_type_parent(type_name, parent_type); DecompilerLabel flag_label = file.labels.at(label_idx); u64 word = file.read_data_word(flag_label); @@ -667,7 +667,7 @@ void Function::find_type_defs(LinkedObjectFile& file, DecompilerTypeSystem& dts) word |= (word2 << 32); types_defined.push_back(type_name); dts.add_type_flags(type_name, word); - // fmt::print("Flags are 0x{:x}\n", word); + // lg::print("Flags are 0x{:x}\n", word); state = 0; continue; } diff --git a/decompiler/IR2/AtomicOpForm.cpp b/decompiler/IR2/AtomicOpForm.cpp index c4e1e6f364..a022f968d8 100644 --- a/decompiler/IR2/AtomicOpForm.cpp +++ b/decompiler/IR2/AtomicOpForm.cpp @@ -119,14 +119,14 @@ FormElement* SetVarOp::get_as_form(FormPool& pool, const Env& env) const { menv->disable_use(src_var); } - // fmt::print("marked {} as dead set\n", to_string(env)); + // lg::print("marked {} as dead set\n", to_string(env)); } } else if (m_src.get_arg(0).is_sym_val() && m_src.get_arg(0).get_str() == "#f" && m_dst.reg().allowed_local_gpr()) { auto& ri = env.reg_use().op.at(m_my_idx); if (ri.written_and_unused.find(dst().reg()) != ri.written_and_unused.end()) { result->mark_as_dead_false(); - // fmt::print("marked {} as dead set false\n", to_string(env)); + // lg::print("marked {} as dead set false\n", to_string(env)); } } } diff --git a/decompiler/IR2/AtomicOpTypeAnalysis.cpp b/decompiler/IR2/AtomicOpTypeAnalysis.cpp index 8584821a56..01a46fd86a 100644 --- a/decompiler/IR2/AtomicOpTypeAnalysis.cpp +++ b/decompiler/IR2/AtomicOpTypeAnalysis.cpp @@ -314,7 +314,7 @@ TP_Type get_stack_type_at_constant_offset(int offset, auto rd = dts.ts.reverse_field_lookup(rd_in); if (rd.success) { auto result = TP_Type::make_from_ts(coerce_to_reg_type(rd.result_type)); - fmt::print("Matched a stack variable! {}\n", result.print()); + lg::print("Matched a stack variable! {}\n", result.print()); return result; } */ diff --git a/decompiler/IR2/Env.cpp b/decompiler/IR2/Env.cpp index a8efa145a1..858ea36405 100644 --- a/decompiler/IR2/Env.cpp +++ b/decompiler/IR2/Env.cpp @@ -7,6 +7,7 @@ #include "Form.h" #include "common/goos/PrettyPrinter.h" +#include "common/log/log.h" #include "common/util/math_util.h" #include "decompiler/analysis/atomic_op_builder.h" @@ -175,7 +176,7 @@ VariableWithCast Env::get_variable_and_cast(const RegisterAccess& access) const // note - this may be stricter than needed. but that's ok. if (type_of_var != type_of_reg) { - // fmt::print("casting {} (reg {}, idx {}): reg type {} var type {} remapped var + // lg::print("casting {} (reg {}, idx {}): reg type {} var type {} remapped var // type // {}\n ", // lookup_name, reg.to_charp(), atomic_idx, type_of_reg.print(), @@ -190,7 +191,7 @@ VariableWithCast Env::get_variable_and_cast(const RegisterAccess& access) const // let's leave this to set!'s for now. This is tricky with stuff like (if y x) where the // move is eliminated so the RegisterAccess points to the "wrong" place. // if (!dts->ts.tc(type_of_var, type_of_reg)) { - // fmt::print("op {} reg {} type {}\n", atomic_idx, reg.to_charp(), + // lg::print("op {} reg {} type {}\n", atomic_idx, reg.to_charp(), // get_types_for_op_mode(atomic_idx, mode).get(reg).print()); return // pretty_print::build_list("the-as", type_of_reg.print(), lookup_name); // } diff --git a/decompiler/IR2/ExpressionHelpers.cpp b/decompiler/IR2/ExpressionHelpers.cpp index e907f14378..0c58d2264f 100644 --- a/decompiler/IR2/ExpressionHelpers.cpp +++ b/decompiler/IR2/ExpressionHelpers.cpp @@ -1,6 +1,7 @@ #include "ExpressionHelpers.h" #include "common/goal_constants.h" +#include "common/log/log.h" #include "decompiler/IR2/Env.h" #include "decompiler/IR2/Form.h" @@ -44,14 +45,14 @@ FormElement* handle_get_property_value_float(const std::vector& forms, // get the mode. It must be interp. auto mode_atom = form_as_atom(forms.at(2)); if (!mode_atom || !mode_atom->is_sym_ptr("interp")) { - fmt::print("fail: bad mode {}\n", forms.at(2)->to_string(env)); + lg::error("fail: bad mode {}", forms.at(2)->to_string(env)); return nullptr; } // get the time. It must be DEFAULT_RES_TIME auto lookup_time = try_get_const_float(forms.at(3)); if (!lookup_time || *lookup_time != DEFAULT_RES_TIME) { - fmt::print("fail: bad time {}\n", forms.at(3)->to_string(env)); + lg::error("fail: bad time {}\n", forms.at(3)->to_string(env)); return nullptr; } @@ -119,7 +120,7 @@ FormElement* handle_get_property_data_or_structure(const std::vector& for // get the mode. It must be interp. auto mode_atom = form_as_atom(forms.at(2)); if (!mode_atom || !mode_atom->is_sym_ptr("interp")) { - fmt::print("fail data: bad mode {}\n", forms.at(2)->to_string(env)); + lg::error("fail data: bad mode {}", forms.at(2)->to_string(env)); return nullptr; } @@ -134,7 +135,7 @@ FormElement* handle_get_property_data_or_structure(const std::vector& for Form* default_value = forms.at(4); // but let's see if it's 0, because that's the default in the macro if (default_value->to_string(env) != expcted_default) { - fmt::print("fail data: bad default {}\n", default_value->to_string(env)); + lg::error("fail data: bad default {}", default_value->to_string(env)); return nullptr; } @@ -184,7 +185,7 @@ FormElement* handle_get_property_value(const std::vector& forms, // get the mode. It must be interp. auto mode_atom = form_as_atom(forms.at(2)); if (!mode_atom || !mode_atom->is_sym_ptr("interp")) { - fmt::print("fail data: bad mode {}\n", forms.at(2)->to_string(env)); + lg::error("fail data: bad mode {}", forms.at(2)->to_string(env)); return nullptr; } @@ -318,7 +319,7 @@ FormElement* last_two_in_and_to_handle_get_proc(Form* first, } // auto first_use_of_in = *first_result.maps.regs.at(reg_input_1); - // fmt::print("reg1: {}\n", first_use_of_in.to_string(env)); + // lg::print("reg1: {}\n", first_use_of_in.to_string(env)); auto setup_matcher = Matcher::set_var( Matcher::deref(Matcher::any_reg(reg_input_2), false, @@ -368,22 +369,22 @@ FormElement* last_two_in_and_to_handle_get_proc(Form* first, const auto& temp_use_def = env.get_use_def_info(*second_result.maps.regs.at(reg_temp_1)); if (temp_use_def.use_count() != 2 || temp_use_def.def_count() != 1) { - fmt::print("failed usedef: {} {}\n", temp_use_def.use_count(), temp_use_def.def_count()); + lg::error("failed usedef: {} {}", temp_use_def.use_count(), temp_use_def.def_count()); return nullptr; } if (part_of_longer_sc) { // check that our temporary name matches (it's the var used inside the macro) if (in_name != longer_sc_var.to_string(env)) { - fmt::print("failed var name: {} vs {}\n", temp_name, longer_sc_var.to_string(env)); + lg::error("failed var name: {} vs {}", temp_name, longer_sc_var.to_string(env)); return nullptr; } // check that our temporary has the right usage pattern. const auto& outer_temp_usedef = env.get_use_def_info(longer_sc_var); if (outer_temp_usedef.use_count() != 3 || outer_temp_usedef.def_count() != 1) { - fmt::print("failed usedef2: {} {}\n", outer_temp_usedef.use_count(), - outer_temp_usedef.def_count()); + lg::error("failed usedef2: {} {}", outer_temp_usedef.use_count(), + outer_temp_usedef.def_count()); return nullptr; } @@ -400,7 +401,7 @@ FormElement* last_two_in_and_to_handle_get_proc(Form* first, menv->disable_use(in3); auto repopped = stack.pop_reg(in1, {}, env, true); - // fmt::print("repopped: {}\n", repopped->to_string(env)); + // lg::print("repopped: {}\n", repopped->to_string(env)); if (!repopped) { repopped = var_to_form(in1, pool); @@ -414,4 +415,4 @@ FormElement* last_two_in_and_to_handle_get_proc(Form* first, cast_type_for_result, pool); } } -} // namespace decompiler \ No newline at end of file +} // namespace decompiler diff --git a/decompiler/IR2/FormExpressionAnalysis.cpp b/decompiler/IR2/FormExpressionAnalysis.cpp index d57b651fb9..39e011fb15 100644 --- a/decompiler/IR2/FormExpressionAnalysis.cpp +++ b/decompiler/IR2/FormExpressionAnalysis.cpp @@ -3,6 +3,7 @@ #include "GenericElementMatcher.h" #include "common/goos/PrettyPrinter.h" +#include "common/log/log.h" #include "common/type_system/state.h" #include "common/util/Assert.h" #include "common/util/BitUtils.h" @@ -402,7 +403,7 @@ void pop_helper(const std::vector& vars, submit_regs.push_back(var.reg()); } else { // auto var_id = env.get_program_var_id(var); - // fmt::print( + // lg::print( // "Unsafe to pop {}: used {} times, def {} times, expected use {} ({} {} rd: // {}) ({} " // "{})\n", @@ -413,7 +414,7 @@ void pop_helper(const std::vector& vars, // if (var.to_string(env) == "a3-0") { // for (auto& use : use_def.uses) { // if (!use.disabled) { - // fmt::print(" at instruction {}\n", use.op_id); + // lg::print(" at instruction {}\n", use.op_id); // } // } // } @@ -1231,7 +1232,7 @@ void SimpleExpressionElement::update_from_stack_add_i(const Env& env, } } } - // fmt::print("here {} {} {}\n", rd_in.base_type.print(), rd.success, + // lg::print("here {} {} {}\n", rd_in.base_type.print(), rd.success, // rd.has_variable_token()); if (idx_of_success >= 0) { @@ -1261,7 +1262,7 @@ void SimpleExpressionElement::update_from_stack_add_i(const Env& env, return; } else { // TODO - output error to IR - lg::error("Bad {} at OP: {}\n", args.at(0)->to_string(env), m_my_idx); + lg::error("Bad {} at OP: {}", args.at(0)->to_string(env), m_my_idx); throw std::runtime_error("Failed to match product_with_constant inline array access 2."); } } @@ -1525,7 +1526,7 @@ void SimpleExpressionElement::update_from_stack_pcypld(const Env& env, result->push_back(as_mod); return; } else { - fmt::print("pcpyud rewrite form fail: {} {}\n", base_form.print(), a1_form.print()); + lg::warn("pcpyud rewrite form fail: {} {}", base_form.print(), a1_form.print()); } } auto new_form = pool.alloc_element( @@ -1995,7 +1996,7 @@ void SimpleExpressionElement::update_from_stack_logor_or_logand(const Env& env, auto repopped = stack.pop_reg(var_b, {}, env, true, stack.size() - 1); if (!repopped) { - fmt::print("repop failed.\n{}\n", stack.print(env)); + lg::warn("repop failed.\n{}", stack.print(env)); repopped = var_to_form(var_b, pool); } @@ -2592,7 +2593,7 @@ void SetFormFormElement::push_to_stack(const Env& env, FormPool& pool, FormStack m_src = value; } } else if (src_as_bf_set) { - fmt::print("invalid bf set: {}\n", src_as_bf_set->to_string(env)); + lg::warn("invalid bf set: {}", src_as_bf_set->to_string(env)); } // setting a bitfield to zero is wonky. @@ -3014,12 +3015,12 @@ Form* get_set_next_state(FormElement* set_elt, const Env& env) { Matcher::deref(Matcher::any_reg(0), false, {DerefTokenMatcher::string("next-state")}); auto mr = match(dst_matcher, dst); if (!mr.matched) { - fmt::print("failed to match dst {}\n", dst->to_string(env)); + lg::error("failed to match dst {}", dst->to_string(env)); return nullptr; } if (mr.maps.regs.at(0)->reg() != Register(Reg::GPR, Reg::S6)) { - fmt::print("failed to match pp reg, got {}\n", mr.maps.regs.at(0)->reg().to_string()); + lg::error("failed to match pp reg, got {}", mr.maps.regs.at(0)->reg().to_string()); return nullptr; } @@ -3236,11 +3237,11 @@ void FunctionCallElement::update_from_stack(const Env& env, } if (should_use_virtual) { - // fmt::print("STACK\n{}\n\n", stack.print(env)); + // lg::print("STACK\n{}\n\n", stack.print(env)); auto pop = pop_to_forms({*arg0_mr.maps.regs.at(0)}, env, pool, stack, allow_side_effects, {}, {2}) .at(0); - // fmt::print("GOT: {}\n", pop->to_string(env)); + // lg::print("GOT: {}\n", pop->to_string(env)); arg_forms.at(0) = pop; auto head = mr.maps.forms.at(1); @@ -3855,7 +3856,7 @@ Form* try_rewrite_as_process_to_ppointer(CondNoElseElement* value, return nullptr; } - // fmt::print("Matched condition {} in {}\n", condition_var.to_string(env), + // lg::print("Matched condition {} in {}\n", condition_var.to_string(env), // value->to_string(env)); auto* menv = const_cast(&env); @@ -3909,7 +3910,7 @@ Form* try_rewrite_as_pppointer_to_process(CondNoElseElement* value, return nullptr; } - // fmt::print("Matched condition {} in {}\n", condition_var.to_string(env), + // lg::print("Matched condition {} in {}\n", condition_var.to_string(env), // value->to_string(env)); auto* menv = const_cast(&env); @@ -4045,7 +4046,7 @@ void CondNoElseElement::push_to_stack(const Env& env, FormPool& pool, FormStack& stack.push_value_to_reg(write_as_value, as_ja_group, true, env.get_variable_type(final_destination, false)); } else { - // fmt::print("func {} final destination {} type {}\n", env.func->name(), + // lg::print("func {} final destination {} type {}\n", env.func->name(), // final_destination.to_string(env), // env.get_variable_type(final_destination, false).print()); stack.push_value_to_reg(write_as_value, pool.alloc_single_form(nullptr, this), true, @@ -4213,24 +4214,24 @@ void CondWithElseElement::push_to_stack(const Env& env, FormPool& pool, FormStac // (set! x (if y z (expr))) and z requires a cast, but the move from z to x is // eliminated by GOAL's register allocator. - // fmt::print("func: {}\n", env.func->name()); + // lg::print("func: {}\n", env.func->name()); // - // fmt::print("checking:\n"); + // lg::print("checking:\n"); // for (auto& t : source_types) { - // fmt::print(" {}\n", t.print()); + // lg::print(" {}\n", t.print()); // } auto expected_type = env.get_variable_type(*last_var, true); - // fmt::print("The expected type is {}\n", expected_type.print()); + // lg::print("The expected type is {}\n", expected_type.print()); auto result_type = source_types.empty() ? expected_type : env.dts->ts.lowest_common_ancestor(source_types); - // fmt::print("but we actually got {}\n", result_type.print()); + // lg::print("but we actually got {}\n", result_type.print()); Form* result_value = pool.alloc_single_form(nullptr, this); if (!env.dts->ts.tc(expected_type, result_type)) { result_value = pool.form(expected_type, result_value); } - // fmt::print("{}\n", result_value->to_string(env)); + // lg::print("{}\n", result_value->to_string(env)); stack.push_value_to_reg(*last_var, result_value, true, env.get_variable_type(*last_var, false)); @@ -5323,7 +5324,7 @@ void AsmBranchElement::push_to_stack(const Env& env, FormPool& pool, FormStack& auto op = pool.alloc_element( branch_condition, m_branch_delay, m_branch_op->label_id(), m_branch_op->is_likely()); - // fmt::print("rewrote as {}\n", op->to_string(env)); + // lg::print("rewrote as {}\n", op->to_string(env)); stack.push_form_element(op, true); } @@ -5381,7 +5382,7 @@ void BranchElement::push_to_stack(const Env& env, FormPool& pool, FormStack& sta ASSERT(!m_op->likely()); auto op = pool.alloc_element(branch_condition, branch_delay, m_op->label_id(), m_op->likely()); - // fmt::print("rewrote (non-asm) as {}\n", op->to_string(env)); + // lg::print("rewrote (non-asm) as {}\n", op->to_string(env)); stack.push_form_element(op, true); } @@ -5502,7 +5503,7 @@ void ArrayFieldAccess::update_with_val(Form* new_val, if (!match_result.matched) { result->push_back(this); return; - fmt::print("power {}\n", power_of_two); + lg::error("power {}", power_of_two); throw std::runtime_error( "Couldn't match ArrayFieldAccess (stride power of 2, 0 offset) values: " + new_val->to_string(env)); diff --git a/decompiler/IR2/bitfields.cpp b/decompiler/IR2/bitfields.cpp index 99b8bb2a4e..87f994c05f 100644 --- a/decompiler/IR2/bitfields.cpp +++ b/decompiler/IR2/bitfields.cpp @@ -1,6 +1,7 @@ #include "bitfields.h" #include "common/goos/PrettyPrinter.h" +#include "common/log/log.h" #include "common/util/BitUtils.h" #include "common/util/Range.h" @@ -563,7 +564,7 @@ FormElement* BitfieldAccessElement::push_step(const BitfieldManip step, // in this case, we expect the value we're oring with to be the appropriate mask for the field. - fmt::print("Rare bitfield set!\n"); + lg::info("Rare bitfield set!"); u64 value = step.amount; auto type = ts.lookup_type(m_type); auto as_bitfield = dynamic_cast(type); @@ -621,7 +622,7 @@ FormElement* BitfieldAccessElement::push_step(const BitfieldManip step, } lg::error("Current: {}", step.print()); if (m_got_pcpyud) { - lg::error("Got pcpyud\n"); + lg::error("Got pcpyud"); } throw std::runtime_error("Unknown state in BitfieldReadElement"); diff --git a/decompiler/ObjectFile/LinkedObjectFileCreation.cpp b/decompiler/ObjectFile/LinkedObjectFileCreation.cpp index 51db88689e..3931fd45e2 100644 --- a/decompiler/ObjectFile/LinkedObjectFileCreation.cpp +++ b/decompiler/ObjectFile/LinkedObjectFileCreation.cpp @@ -9,6 +9,7 @@ #include #include "common/link_types.h" +#include "common/log/log.h" #include "common/util/Assert.h" #include "common/util/BitUtils.h" diff --git a/decompiler/ObjectFile/ObjectFileDB.cpp b/decompiler/ObjectFile/ObjectFileDB.cpp index dd75acc271..81c78ad101 100644 --- a/decompiler/ObjectFile/ObjectFileDB.cpp +++ b/decompiler/ObjectFile/ObjectFileDB.cpp @@ -150,7 +150,7 @@ ObjectFileDB::ObjectFileDB(const std::vector& _dgos, auto name = obj_filename_to_name(obj.string()); if (auto it = config.object_patches.find(name); it != config.object_patches.end()) { // print the file CRC - fmt::print("CRC for {} is: 0x{:X}\n", name, crc32(data.data(), data.size())); + lg::print("CRC for {} is: 0x{:X}\n", name, crc32(data.data(), data.size())); // write patch file if necessary if (config.write_patches) { // this is the "target" file we want to patch to @@ -219,7 +219,7 @@ ObjectFileDB::ObjectFileDB(const std::vector& _dgos, } } - lg::info("ObjectFileDB Initialized\n"); + lg::info("ObjectFileDB Initialized"); if (obj_files_by_name.empty()) { lg::error( "No object files have been added. Check that there are input files and the allowed_objects " @@ -496,7 +496,7 @@ void ObjectFileDB::process_link_data(const Config& config) { }); lg::info("Processed Link Data"); - lg::info(" Total {:.2f} ms\n", process_link_timer.getMs()); + lg::info(" Total {:.2f} ms", process_link_timer.getMs()); // printf("\n"); } @@ -511,7 +511,7 @@ void ObjectFileDB::process_labels() { lg::info("Processed Labels:"); lg::info(" Total {} labels", total); - lg::info(" Total {:.2f} ms\n", process_label_timer.getMs()); + lg::info(" Total {:.2f} ms", process_label_timer.getMs()); } /*! @@ -617,7 +617,7 @@ void ObjectFileDB::find_code(const Config& config) { auto total_ops = combined_stats.code_bytes / 4; lg::info(" Decoded {} / {} ({:.3f} %)", combined_stats.decoded_ops, total_ops, 100.f * (float)combined_stats.decoded_ops / total_ops); - lg::info(" Total {:.3f} ms\n", timer.getMs()); + lg::info(" Total {:.3f} ms", timer.getMs()); } /*! @@ -643,7 +643,7 @@ void ObjectFileDB::find_and_write_scripts(const fs::path& output_dir) { file_util::write_text_file(file_name, all_scripts); lg::info("Found scripts:"); - lg::info(" Total {:.3f} ms\n", timer.getMs()); + lg::info(" Total {:.3f} ms", timer.getMs()); } std::string ObjectFileDB::process_tpages(TextureDB& tex_db, const fs::path& output_path) { @@ -741,10 +741,10 @@ void get_art_info(ObjectFileDB& db, ObjectFileData& obj) { const auto& words = obj.linked_data.words_by_seg.at(MAIN_SEGMENT); if (words.at(0).kind() == LinkedWord::Kind::TYPE_PTR && words.at(0).symbol_name() == "art-group") { - // fmt::print("art-group {}:\n", obj.to_unique_name()); + // lg::print("art-group {}:\n", obj.to_unique_name()); auto name = obj.linked_data.get_goal_string_by_label(words.at(2).label_id()); int length = words.at(3).data; - // fmt::print(" length: {}\n", length); + // lg::print(" length: {}\n", length); std::unordered_map art_group_elts; for (int i = 0; i < length; ++i) { const auto& word = words.at(8 + i); @@ -772,7 +772,7 @@ void get_art_info(ObjectFileDB& db, ObjectFileData& obj) { fmt::format("unknown art elt type {} in {}", elt_type, obj.to_unique_name())); } art_group_elts[i] = unique_name; - // fmt::print(" {}: {} ({}) -> {}\n", i, elt_name, elt_type, unique_name); + // lg::print(" {}: {} ({}) -> {}\n", i, elt_name, elt_type, unique_name); } db.dts.art_group_info[obj.to_unique_name()] = art_group_elts; } @@ -795,7 +795,7 @@ void ObjectFileDB::extract_art_info() { } }); - lg::info("Processed art groups: in {:.2f} ms\n", timer.getMs()); + lg::info("Processed art groups: in {:.2f} ms", timer.getMs()); } /*! @@ -822,7 +822,7 @@ void ObjectFileDB::dump_art_info(const fs::path& output_dir) { file_util::write_text_file(filename, result); } - lg::info("Written art group info: in {:.2f} ms\n", timer.getMs()); + lg::info("Written art group info: in {:.2f} ms", timer.getMs()); } void ObjectFileDB::dump_raw_objects(const fs::path& output_dir) { diff --git a/decompiler/ObjectFile/ObjectFileDB_IR2.cpp b/decompiler/ObjectFile/ObjectFileDB_IR2.cpp index 159395d0e2..cddd5df9ce 100644 --- a/decompiler/ObjectFile/ObjectFileDB_IR2.cpp +++ b/decompiler/ObjectFile/ObjectFileDB_IR2.cpp @@ -50,7 +50,7 @@ void ObjectFileDB::analyze_functions_ir2( int file_idx = 1; for_each_obj([&](ObjectFileData& data) { Timer file_timer; - fmt::print("[{:3d}/{}]------ {}\n", file_idx++, total_file_count, data.to_unique_name()); + lg::info("[{:3d}/{}]------ {}", file_idx++, total_file_count, data.to_unique_name()); ir2_do_segment_analysis_phase1(TOP_LEVEL_SEGMENT, config, data); ir2_do_segment_analysis_phase1(DEBUG_SEGMENT, config, data); ir2_do_segment_analysis_phase1(MAIN_SEGMENT, config, data); @@ -125,7 +125,7 @@ void ObjectFileDB::analyze_functions_ir2( }); } - fmt::print("Done in {:.2f}ms\n", file_timer.getMs()); + lg::info("Done in {:.2f}ms", file_timer.getMs()); }); lg::info("{}", stats.let.print()); @@ -172,7 +172,7 @@ void ObjectFileDB::ir2_setup_labels(const Config& config, ObjectFileData& data) std::make_unique(config_labels, data.linked_data.labels, dts); analyze_labels(data.linked_data.label_db.get(), &data.linked_data); } catch (const std::exception& e) { - lg::die("Error parsing labels for {}: {}\n", data.to_unique_name(), e.what()); + lg::die("Error parsing labels for {}: {}", data.to_unique_name(), e.what()); } } } @@ -296,7 +296,7 @@ void ObjectFileDB::ir2_top_level_pass(const Config& config) { lg::info("{:4d} global {:.2f}%", total_named_global_functions, 100.f * total_named_global_functions / total_functions); lg::info("{:4d} methods {:.2f}%", total_methods, 100.f * total_methods / total_functions); - lg::info("{:4d} logins {:.2f}%\n", total_top_levels, 100.f * total_top_levels / total_functions); + lg::info("{:4d} logins {:.2f}%", total_top_levels, 100.f * total_top_levels / total_functions); } void ObjectFileDB::ir2_analyze_all_types(const fs::path& output_file, diff --git a/decompiler/VuDisasm/VuDisassembler.cpp b/decompiler/VuDisasm/VuDisassembler.cpp index c330465ad0..1c8e2be0e5 100644 --- a/decompiler/VuDisasm/VuDisassembler.cpp +++ b/decompiler/VuDisasm/VuDisassembler.cpp @@ -3,6 +3,7 @@ #include #include +#include "common/log/log.h" #include "common/util/Assert.h" #include "common/util/print_float.h" @@ -414,15 +415,15 @@ VuProgram VuDisassembler::disassemble(void* data, int size_bytes, bool debug_pri // debug if (debug_print) { - fmt::print("{}\n", to_string(VuInstructionPair{upper_instr, lower_instr})); + lg::print("{}\n", to_string(VuInstructionPair{upper_instr, lower_instr})); } } name_labels(); if (debug_print) { - fmt::print("----------------------------------\n"); - fmt::print("{}\n", to_string(prog)); + lg::print("----------------------------------\n"); + lg::print("{}\n", to_string(prog)); } return prog; @@ -1014,7 +1015,7 @@ std::string VuDisassembler::to_cpp(const VuInstruction& instr, bool mips2c_forma instr.src.at(1).to_string(m_label_names)); default: unk++; - fmt::print("unknown 0 is {}\n", to_string(instr)); + lg::print("unknown 0 is {}\n", to_string(instr)); return "ASSERT(false);"; //"???"; } @@ -1022,7 +1023,7 @@ std::string VuDisassembler::to_cpp(const VuInstruction& instr, bool mips2c_forma unknown: unk++; - fmt::print("unknown 1 is {}\n", to_string(instr)); + lg::print("unknown 1 is {}\n", to_string(instr)); return "ASSERT(false);"; } @@ -1262,7 +1263,7 @@ std::string VuDisassembler::to_string_with_cpp(const VuProgram& prog, bool mips2 } } } - fmt::print("TOTAL unk: {}\n", unk); + lg::print("TOTAL unk: {}\n", unk); return result; } diff --git a/decompiler/analysis/analyze_inspect_method.cpp b/decompiler/analysis/analyze_inspect_method.cpp index a42dcd3872..d3cfc652c0 100644 --- a/decompiler/analysis/analyze_inspect_method.cpp +++ b/decompiler/analysis/analyze_inspect_method.cpp @@ -1,4 +1,5 @@ #include "analyze_inspect_method.h" +#include "common/log/log.h" #include "decompiler/Disasm/InstructionMatching.h" #include "decompiler/ObjectFile/LinkedObjectFile.h" @@ -371,13 +372,13 @@ FieldPrint get_field_print(const std::string& str) { int get_start_idx_process(Function& function, const std::string& parent_type, Env& env) { if (function.basic_blocks.size() != 5) { - fmt::print("[iim] inspect {} had {} basic blocks, expected 5\n", function.name(), - function.basic_blocks.size()); + lg::print("[iim] inspect {} had {} basic blocks, expected 5\n", function.name(), + function.basic_blocks.size()); return -1; } if (!function.ir2.atomic_ops) { - fmt::print("[iim] no atomic ops in {}\n", function.name()); + lg::print("[iim] no atomic ops in {}\n", function.name()); return -1; } auto& aos = *function.ir2.atomic_ops; @@ -390,23 +391,23 @@ int get_start_idx_process(Function& function, const std::string& parent_type, En */ if (aos.block_id_to_end_atomic_op.at(0) != 2) { - fmt::print("[iim] block 0 had the wrong number of ops: {} for {}\n", - aos.block_id_to_end_atomic_op.at(0), function.name()); + lg::print("[iim] block 0 had the wrong number of ops: {} for {}\n", + aos.block_id_to_end_atomic_op.at(0), function.name()); return -1; } if (!is_op_2(aos.ops.at(op_idx).get(), SimpleExpression::Kind::IDENTITY, Register(Reg::GPR, Reg::GP), Register(Reg::GPR, Reg::A0))) { - fmt::print("[iim] block 0 op 0 bad in {}: {}\n", aos.ops.at(op_idx)->to_string(env), - function.name()); + lg::print("[iim] block 0 op 0 bad in {}: {}\n", aos.ops.at(op_idx)->to_string(env), + function.name()); return -1; } op_idx++; auto br = dynamic_cast(aos.ops.at(op_idx).get()); if (!br) { - fmt::print("[iim] block 0 op 1 bad in {}: {} (not branch)\n", aos.ops.at(1)->to_string(env), - function.name()); + lg::print("[iim] block 0 op 1 bad in {}: {} (not branch)\n", aos.ops.at(1)->to_string(env), + function.name()); return -1; } @@ -415,8 +416,8 @@ int get_start_idx_process(Function& function, const std::string& parent_type, En br->condition().src(0).var().reg() != Register(Reg::GPR, Reg::GP) || br->branch_delay().kind() != IR2_BranchDelay::Kind::SET_REG_FALSE || br->branch_delay().var(0).reg() != Register(Reg::GPR, Reg::V1)) { - fmt::print("[iim] block 0 op 1 bad in {}: {} (bad branch)\n", aos.ops.at(1)->to_string(env), - function.name()); + lg::print("[iim] block 0 op 1 bad in {}: {} (bad branch)\n", aos.ops.at(1)->to_string(env), + function.name()); return -1; } op_idx++; @@ -427,29 +428,29 @@ int get_start_idx_process(Function& function, const std::string& parent_type, En * (b! #t L371 (nop!)) */ if (aos.block_id_to_end_atomic_op.at(1) != 4) { - fmt::print("[iim] block 1 had the wrong number of ops: {} for {}\n", - aos.block_id_to_end_atomic_op.at(1), function.name()); + lg::print("[iim] block 1 had the wrong number of ops: {} for {}\n", + aos.block_id_to_end_atomic_op.at(1), function.name()); return -1; } if (!is_op_2(aos.ops.at(op_idx).get(), SimpleExpression::Kind ::IDENTITY, Register(Reg::GPR, Reg::GP), Register(Reg::GPR, Reg::GP))) { - fmt::print("[iim] op 2 bad in {}: {}\n", aos.ops.at(op_idx)->to_string(env), function.name()); + lg::print("[iim] op 2 bad in {}: {}\n", aos.ops.at(op_idx)->to_string(env), function.name()); return -1; } op_idx++; auto br2 = dynamic_cast(aos.ops.at(op_idx).get()); if (!br2) { - fmt::print("[iim] op 3 bad in {}: {} (not branch)\n", aos.ops.at(op_idx)->to_string(env), - function.name()); + lg::print("[iim] op 3 bad in {}: {} (not branch)\n", aos.ops.at(op_idx)->to_string(env), + function.name()); return -1; } if (br2->likely() || br2->condition().kind() != IR2_Condition::Kind::ALWAYS || br2->branch_delay().kind() != IR2_BranchDelay::Kind::NOP) { - fmt::print("[iim] op3 bad in {}: {} (bad branch)\n", aos.ops.at(op_idx)->to_string(env), - function.name()); + lg::print("[iim] op3 bad in {}: {} (bad branch)\n", aos.ops.at(op_idx)->to_string(env), + function.name()); return -1; } op_idx++; @@ -468,37 +469,37 @@ L2: sll v0, ra, 0 */ if (!is_set_reg_to_int(aos.ops.at(op_idx).get(), Register(Reg::GPR, Reg::V1), 0)) { - fmt::print("[iim] op4 bad in {}: {} (bad set 0)\n", aos.ops.at(op_idx)->to_string(env), - function.name()); + lg::print("[iim] op4 bad in {}: {} (bad set 0)\n", aos.ops.at(op_idx)->to_string(env), + function.name()); return -1; } op_idx++; if (!is_set_reg_to_symbol_value(aos.ops.at(op_idx).get(), Register(Reg::GPR, Reg::V1), parent_type)) { - fmt::print("[iim] op5 bad in {}: {} (bad set parent type)\n", - aos.ops.at(op_idx)->to_string(env), function.name()); + lg::print("[iim] op5 bad in {}: {} (bad set parent type)\n", aos.ops.at(op_idx)->to_string(env), + function.name()); return -1; } op_idx++; if (aos.ops.at(op_idx).get()->to_string(env) != "(set! t9 (l.wu (+ v1 28)))") { - fmt::print("[iim] op6 bad in {}: {} (bad load inspect)\n", aos.ops.at(op_idx)->to_string(env), - function.name()); + lg::print("[iim] op6 bad in {}: {} (bad load inspect)\n", aos.ops.at(op_idx)->to_string(env), + function.name()); return -1; } op_idx++; if (aos.ops.at(op_idx).get()->to_string(env) != "(set! a0 gp)") { - fmt::print("[iim] op7 bad in {}: {} (bad set arg)\n", aos.ops.at(op_idx)->to_string(env), - function.name()); + lg::print("[iim] op7 bad in {}: {} (bad set arg)\n", aos.ops.at(op_idx)->to_string(env), + function.name()); return -1; } op_idx++; if (aos.ops.at(op_idx).get()->to_string(env) != "(call!)") { - fmt::print("[iim] op8 bad in {}: {} (bad call)\n", aos.ops.at(op_idx)->to_string(env), - function.name()); + lg::print("[iim] op8 bad in {}: {} (bad call)\n", aos.ops.at(op_idx)->to_string(env), + function.name()); return -1; } op_idx++; @@ -539,13 +540,13 @@ int get_start_idx(Function& function, const std::string& type_name, Env& env) { if (function.basic_blocks.size() != 5) { - fmt::print("[iim] inspect {} had {} basic blocks, expected 5\n", function.name(), - function.basic_blocks.size()); + lg::print("[iim] inspect {} had {} basic blocks, expected 5\n", function.name(), + function.basic_blocks.size()); return -1; } if (!function.ir2.atomic_ops) { - fmt::print("[iim] no atomic ops in {}\n", function.name()); + lg::print("[iim] no atomic ops in {}\n", function.name()); return -1; } auto& aos = *function.ir2.atomic_ops; @@ -558,23 +559,23 @@ int get_start_idx(Function& function, */ if (aos.block_id_to_end_atomic_op.at(0) != 2) { - fmt::print("[iim] block 0 had the wrong number of ops: {} for {}\n", - aos.block_id_to_end_atomic_op.at(0), function.name()); + lg::print("[iim] block 0 had the wrong number of ops: {} for {}\n", + aos.block_id_to_end_atomic_op.at(0), function.name()); return -1; } if (!is_op_2(aos.ops.at(op_idx).get(), SimpleExpression::Kind::IDENTITY, Register(Reg::GPR, Reg::GP), Register(Reg::GPR, Reg::A0))) { - fmt::print("[iim] block 0 op 0 bad in {}: {}\n", aos.ops.at(op_idx)->to_string(env), - function.name()); + lg::print("[iim] block 0 op 0 bad in {}: {}\n", aos.ops.at(op_idx)->to_string(env), + function.name()); return -1; } op_idx++; auto br = dynamic_cast(aos.ops.at(op_idx).get()); if (!br) { - fmt::print("[iim] block 0 op 1 bad in {}: {} (not branch)\n", aos.ops.at(1)->to_string(env), - function.name()); + lg::print("[iim] block 0 op 1 bad in {}: {} (not branch)\n", aos.ops.at(1)->to_string(env), + function.name()); return -1; } @@ -583,8 +584,8 @@ int get_start_idx(Function& function, br->condition().src(0).var().reg() != Register(Reg::GPR, Reg::GP) || br->branch_delay().kind() != IR2_BranchDelay::Kind::SET_REG_FALSE || br->branch_delay().var(0).reg() != Register(Reg::GPR, Reg::V1)) { - fmt::print("[iim] block 0 op 1 bad in {}: {} (bad branch)\n", aos.ops.at(1)->to_string(env), - function.name()); + lg::print("[iim] block 0 op 1 bad in {}: {} (bad branch)\n", aos.ops.at(1)->to_string(env), + function.name()); return -1; } op_idx++; @@ -595,29 +596,29 @@ int get_start_idx(Function& function, * (b! #t L371 (nop!)) */ if (aos.block_id_to_end_atomic_op.at(1) != 4) { - fmt::print("[iim] block 1 had the wrong number of ops: {} for {}\n", - aos.block_id_to_end_atomic_op.at(1), function.name()); + lg::print("[iim] block 1 had the wrong number of ops: {} for {}\n", + aos.block_id_to_end_atomic_op.at(1), function.name()); return -1; } if (!is_op_2(aos.ops.at(op_idx).get(), SimpleExpression::Kind ::IDENTITY, Register(Reg::GPR, Reg::GP), Register(Reg::GPR, Reg::GP))) { - fmt::print("[iim] op 2 bad in {}: {}\n", aos.ops.at(op_idx)->to_string(env), function.name()); + lg::print("[iim] op 2 bad in {}: {}\n", aos.ops.at(op_idx)->to_string(env), function.name()); return -1; } op_idx++; auto br2 = dynamic_cast(aos.ops.at(op_idx).get()); if (!br2) { - fmt::print("[iim] op 3 bad in {}: {} (not branch)\n", aos.ops.at(op_idx)->to_string(env), - function.name()); + lg::print("[iim] op 3 bad in {}: {} (not branch)\n", aos.ops.at(op_idx)->to_string(env), + function.name()); return -1; } if (br2->likely() || br2->condition().kind() != IR2_Condition::Kind::ALWAYS || br2->branch_delay().kind() != IR2_BranchDelay::Kind::NOP) { - fmt::print("[iim] op3 bad in {}: {} (bad branch)\n", aos.ops.at(op_idx)->to_string(env), - function.name()); + lg::print("[iim] op3 bad in {}: {} (bad branch)\n", aos.ops.at(op_idx)->to_string(env), + function.name()); return -1; } op_idx++; @@ -634,38 +635,38 @@ int get_start_idx(Function& function, */ if (!is_set_reg_to_int(aos.ops.at(op_idx).get(), Register(Reg::GPR, Reg::V1), 0)) { - fmt::print("[iim] op4 bad in {}: {} (bad set 0)\n", aos.ops.at(op_idx)->to_string(env), - function.name()); + lg::print("[iim] op4 bad in {}: {} (bad set 0)\n", aos.ops.at(op_idx)->to_string(env), + function.name()); } op_idx++; if (!is_set_reg_to_symbol_value(aos.ops.at(op_idx).get(), Register(Reg::GPR, Reg::T9), "format")) { - fmt::print("[iim] op5 bad in {}: {} (bad set format)\n", aos.ops.at(op_idx)->to_string(env), - function.name()); + lg::print("[iim] op5 bad in {}: {} (bad set format)\n", aos.ops.at(op_idx)->to_string(env), + function.name()); } op_idx++; if (!is_set_reg_to_symbol_ptr(aos.ops.at(op_idx).get(), Register(Reg::GPR, Reg::A0), "#t")) { - fmt::print("[iim] op6 bad in {}: {} (bad set #t)\n", aos.ops.at(op_idx)->to_string(env), - function.name()); + lg::print("[iim] op6 bad in {}: {} (bad set #t)\n", aos.ops.at(op_idx)->to_string(env), + function.name()); } op_idx++; auto type_name_str = get_string_loaded_to_reg(aos.ops.at(op_idx).get(), Register(Reg::GPR, Reg::A1), file); if (!type_name_str) { - fmt::print("[iim] op7 bad in {}: {} (bad string)\n", aos.ops.at(op_idx)->to_string(env), - function.name()); + lg::print("[iim] op7 bad in {}: {} (bad string)\n", aos.ops.at(op_idx)->to_string(env), + function.name()); } else if (type_name_str != "[~8x] ~A~%") { - fmt::print("[iim] op7 bad in {}: {} (bad string: {})\n", aos.ops.at(op_idx)->to_string(env), - function.name(), *type_name_str); + lg::print("[iim] op7 bad in {}: {} (bad string: {})\n", aos.ops.at(op_idx)->to_string(env), + function.name(), *type_name_str); } op_idx++; if (!is_op_2(aos.ops.at(op_idx).get(), SimpleExpression::Kind ::IDENTITY, Register(Reg::GPR, Reg::A2), Register(Reg::GPR, Reg::GP))) { - fmt::print("[iim] op 8 bad in {}: {}\n", aos.ops.at(op_idx)->to_string(env), function.name()); + lg::print("[iim] op 8 bad in {}: {}\n", aos.ops.at(op_idx)->to_string(env), function.name()); return -1; } op_idx++; @@ -675,13 +676,13 @@ int get_start_idx(Function& function, } else if (aos.ops.at(op_idx)->to_string(env) == "(set! a3 (l.wu (+ gp -4)))") { result->is_basic = true; } else { - fmt::print("[iim] op 9 bad in {}: {}\n", aos.ops.at(op_idx)->to_string(env), function.name()); + lg::print("[iim] op 9 bad in {}: {}\n", aos.ops.at(op_idx)->to_string(env), function.name()); return -1; } op_idx++; if (!dynamic_cast(aos.ops.at(op_idx).get())) { - fmt::print("[iim] op 10 bad in {}: {}\n", aos.ops.at(op_idx)->to_string(env), function.name()); + lg::print("[iim] op 10 bad in {}: {}\n", aos.ops.at(op_idx)->to_string(env), function.name()); return -1; } op_idx++; @@ -1040,7 +1041,7 @@ std::string inspect_inspect_method(Function& inspect_method, DecompilerTypeSystem& previous_game_ts, TypeInspectorCache& ti_cache, ObjectFileDB::PerObjectAllTypeInfo& object_file_meta) { - fmt::print(" iim: {}\n", inspect_method.name()); + lg::print(" iim: {}\n", inspect_method.name()); TypeInspectorResult result; ASSERT(type_name == inspect_method.guessed_name.type_name); TypeFlags flags; @@ -1072,7 +1073,7 @@ std::string inspect_inspect_method(Function& inspect_method, } } if (!result.found_flags) { - fmt::print("[iim] no flags found for {}, maybe defined in the kernel\n", type_name); + lg::print("[iim] no flags found for {}, maybe defined in the kernel\n", type_name); } result.parent_type_name = dts.lookup_parent_from_inspects(type_name); @@ -1495,13 +1496,13 @@ void inspect_top_level_for_metadata(Function& top_level, continue; } - fmt::print("got 1\n"); + lg::print("got 1\n"); // lwu t9, 16(v1) ;; [ 21] (set! t9-0 (l.wu (+ v1-10 16))) // ;; [v1: ] -> [t9: (function symbol type int type) const auto& aop_1 = top_level.ir2.atomic_ops->ops.at(i + 1); if (!is_set_reg_to_load(aop_1.get(), Register(Reg::GPR, Reg::T9), 16)) { - fmt::print("fail1\n"); + lg::print("fail1\n"); continue; } @@ -1509,7 +1510,7 @@ void inspect_top_level_for_metadata(Function& top_level, const auto& aop_2 = top_level.ir2.atomic_ops->ops.at(i + 2); auto type_name = get_set_reg_to_symbol_ptr(aop_2.get(), Register(Reg::GPR, Reg::A0)); if (!type_name) { - fmt::print("fail2\n"); + lg::print("fail2\n"); continue; } @@ -1517,7 +1518,7 @@ void inspect_top_level_for_metadata(Function& top_level, const auto& aop_3 = top_level.ir2.atomic_ops->ops.at(i + 3); auto parent_name = get_set_reg_to_symbol_value(aop_3.get(), Register(Reg::GPR, Reg::A1)); if (!parent_name) { - fmt::print("fail3\n"); + lg::print("fail3\n"); continue; } @@ -1525,14 +1526,14 @@ void inspect_top_level_for_metadata(Function& top_level, const auto& aop_4 = top_level.ir2.atomic_ops->ops.at(i + 4); auto flags = get_set_reg_to_u64_load(aop_4.get(), Register(Reg::GPR, Reg::A2), file); if (!flags) { - fmt::print("fail3\n"); + lg::print("fail3\n"); continue; } // jalr ra, t9 ;; [ 25] (call! a0-0 a1-0 a2-0) const auto& aop_5 = top_level.ir2.atomic_ops->ops.at(i + 5); if (!dynamic_cast(aop_5.get())) { - fmt::print("fial4\n"); + lg::print("fial4\n"); continue; } diff --git a/decompiler/analysis/cfg_builder.cpp b/decompiler/analysis/cfg_builder.cpp index 94ef950a9a..28d729e5c1 100644 --- a/decompiler/analysis/cfg_builder.cpp +++ b/decompiler/analysis/cfg_builder.cpp @@ -4,6 +4,7 @@ */ #include "cfg_builder.h" +#include "common/log/log.h" #include "decompiler/Function/Function.h" #include "decompiler/IR2/Form.h" #include "decompiler/ObjectFile/LinkedObjectFile.h" @@ -716,7 +717,7 @@ void clean_up_cond_no_else_final(Function& func, CondNoElseElement* cne) { ASSERT(fr.has_value()); cne->final_destination = *fr; } else { - fmt::print("failed to clean up cond_no_else_final: {}\n", func.name()); + lg::print("failed to clean up cond_no_else_final: {}\n", func.name()); ASSERT(false); } } @@ -753,7 +754,7 @@ void clean_up_cond_no_else_final(Function& func, CondNoElseElement* cne) { for (size_t i = 0; i < cne->entries.size(); i++) { if (func.ir2.env.has_reg_use()) { auto reg = cne->entries.at(i).false_destination; - // lg::warn("Disable def of {} at {}\n", reg->to_string(func.ir2.env), reg->idx()); + // lg::warn("Disable def of {} at {}", reg->to_string(func.ir2.env), reg->idx()); func.ir2.env.disable_def(*reg, func.warnings); } } @@ -1181,7 +1182,7 @@ SetVarOp get_delay_op(const Function& f, const BlockVtx* vtx) { auto& delay_op = f.ir2.atomic_ops->ops.at(delay_start); auto* delay = dynamic_cast(delay_op.get()); if (!delay) { - fmt::print("bad delay: {}\n", delay_op->to_string(f.ir2.env)); + lg::print("bad delay: {}\n", delay_op->to_string(f.ir2.env)); ASSERT(false); } return *delay; @@ -1196,7 +1197,7 @@ LoadVarOp get_delay_load_op(const Function& f, const BlockVtx* vtx) { auto& delay_op = f.ir2.atomic_ops->ops.at(delay_start); auto* delay = dynamic_cast(delay_op.get()); if (!delay) { - fmt::print("bad delay: {}\n", delay_op->to_string(f.ir2.env)); + lg::print("bad delay: {}\n", delay_op->to_string(f.ir2.env)); ASSERT(false); } return *delay; @@ -1248,69 +1249,69 @@ Form* try_sc_as_type_of_jak2(FormPool& pool, Function& f, const ShortCircuit* vt // get the branch ir's auto b0_ptr = cfg_to_ir(pool, f, b0_c); // should be begin. if (b0_ptr->size() <= 2) { - fmt::print("fail1\n"); + lg::print("fail1\n"); return nullptr; } auto b1_ptr = cfg_to_ir(pool, f, b1_c); if (b1_ptr->size() <= 1) { - fmt::print("fail2\n"); + lg::print("fail2\n"); return nullptr; } auto b2_ptr = cfg_to_ir(pool, f, b2_c); if (b2_ptr->size() <= 1) { - fmt::print("fail3\n"); + lg::print("fail3\n"); return nullptr; } auto b3_ptr = cfg_to_ir(pool, f, b3_c); auto b3_ir = dynamic_cast(b3_ptr->try_as_single_element()); if (!b3_ir) { - fmt::print("fail4\n"); + lg::print("fail4\n"); return nullptr; } // identify the left shift auto set_shift_left = dynamic_cast(b0_ptr->at(b0_ptr->size() - 3)); if (!set_shift_left) { - fmt::print("fail5\n"); + lg::print("fail5\n"); return nullptr; } auto temp_reg0 = set_shift_left->dst(); auto shift_left = dynamic_cast(set_shift_left->src()->try_as_single_element()); if (!shift_left || shift_left->expr().kind() != SimpleExpression::Kind::LEFT_SHIFT) { - fmt::print("fail6\n"); + lg::print("fail6\n"); return nullptr; } auto src_reg = shift_left->expr().get_arg(0).var(); auto sa_left = shift_left->expr().get_arg(1); if (!sa_left.is_int() || sa_left.get_int() != 61) { - fmt::print("fail7\n"); + lg::print("fail7\n"); return nullptr; } // identify the right shift auto set_shift_right = dynamic_cast(b0_ptr->at(b0_ptr->size() - 2)); if (!set_shift_right) { - fmt::print("fail8\n"); + lg::print("fail8\n"); return nullptr; } if (set_shift_right->dst().reg() != set_shift_left->dst().reg()) { - fmt::print("fail9\n"); + lg::print("fail9\n"); return nullptr; } auto shift_right = dynamic_cast(set_shift_right->src()->try_as_single_element()); if (!shift_right || shift_right->expr().kind() != SimpleExpression::Kind::RIGHT_SHIFT_LOGIC) { - fmt::print("fail10\n"); + lg::print("fail10\n"); return nullptr; } if (temp_reg0.reg() != shift_right->expr().get_arg(0).var().reg()) { - fmt::print("fail11\n"); + lg::print("fail11\n"); return nullptr; } auto sa_right = shift_right->expr().get_arg(1); if (!sa_right.is_int() || sa_right.get_int() != 61) { - fmt::print("fail12\n"); + lg::print("fail12\n"); return nullptr; } @@ -1320,7 +1321,7 @@ Form* try_sc_as_type_of_jak2(FormPool& pool, Function& f, const ShortCircuit* vt if (!first_branch || !is_set_symbol_value(b0_delay_op, "binteger") || first_branch->op()->condition().kind() != IR2_Condition::Kind::ZERO || !first_branch->op()->likely()) { - fmt::print("fail13\n"); + lg::print("fail13\n"); return nullptr; } auto temp_reg = first_branch->op()->condition().src(0).var(); @@ -1329,19 +1330,19 @@ Form* try_sc_as_type_of_jak2(FormPool& pool, Function& f, const ShortCircuit* vt // branch 1 if (b1_ptr->size() != 2) { - fmt::print("fail14\n"); + lg::print("fail14\n"); return nullptr; } auto second_branch_pre_op = dynamic_cast(b1_ptr->at(0)); if (!second_branch_pre_op) { - fmt::print("fail15\n"); + lg::print("fail15\n"); return nullptr; } { auto pos = second_branch_pre_op->src(); auto pos_as_se = pos->try_as_element(); if (!pos_as_se || !pos_as_se->expr().is_identity() || !pos_as_se->expr().get_arg(0).is_int(4)) { - fmt::print("fail16\n"); + lg::print("fail16\n"); return nullptr; } } @@ -1357,30 +1358,30 @@ Form* try_sc_as_type_of_jak2(FormPool& pool, Function& f, const ShortCircuit* vt second_branch->op()->condition().src(0).var().reg() != temp_reg0.reg() || !second_branch->op()->condition().src(1).is_var() || second_branch->op()->condition().src(1).var().reg() != temp_reg1.reg()) { - fmt::print("fail17\n"); + lg::print("fail17\n"); return nullptr; } if (!b1_d) { - fmt::print("fail18\n"); + lg::print("fail18\n"); return nullptr; } auto b1_delay_op = get_delay_load_op(f, b1_d); if (b1_delay_op.kind() != LoadVarOp::Kind::UNSIGNED || b1_delay_op.size() != 4) { - fmt::print("fail19\n"); + lg::print("fail19\n"); return nullptr; } IR2_RegOffset ro; if (!get_as_reg_offset(b1_delay_op.src(), &ro)) { - fmt::print("fail20\n"); + lg::print("fail20\n"); return nullptr; } if (ro.offset != -4) { - fmt::print("fail21\n"); + lg::print("fail21\n"); return nullptr; } if (ro.reg != src_reg.reg() || b1_delay_op.get_set_destination().reg() != dst_reg.reg()) { - fmt::print("fail22\n"); + lg::print("fail22\n"); return nullptr; } @@ -1394,19 +1395,19 @@ Form* try_sc_as_type_of_jak2(FormPool& pool, Function& f, const ShortCircuit* vt lw a0, pair(s7) */ if (b2_ptr->size() != 2) { - fmt::print("fail23\n"); + lg::print("fail23\n"); return nullptr; } auto third_branch_pre_op = dynamic_cast(b2_ptr->at(0)); if (!third_branch_pre_op) { - fmt::print("fail24\n"); + lg::print("fail24\n"); return nullptr; } { auto pos = third_branch_pre_op->src(); auto pos_as_se = pos->try_as_element(); if (!pos_as_se || !pos_as_se->expr().is_identity() || !pos_as_se->expr().get_arg(0).is_int(2)) { - fmt::print("fail25\n"); + lg::print("fail25\n"); return nullptr; } } @@ -1417,22 +1418,22 @@ Form* try_sc_as_type_of_jak2(FormPool& pool, Function& f, const ShortCircuit* vt third_branch->op()->condition().src(0).var().reg() != temp_reg0.reg() || !third_branch->op()->condition().src(1).is_var() || third_branch->op()->condition().src(1).var().reg() != temp_reg2.reg()) { - fmt::print("fail26\n"); + lg::print("fail26\n"); return nullptr; } if (!b2_d) { - fmt::print("fail27\n"); + lg::print("fail27\n"); return nullptr; } auto b2_delay_op = get_delay_op(f, b2_d); if (!is_set_symbol_value(b2_delay_op, "pair") || b2_delay_op.dst().reg() != dst_reg.reg()) { - fmt::print("fail28\n"); + lg::print("fail28\n"); return nullptr; } if (!is_set_symbol_value(b3_ir, "symbol")) { - fmt::print("fail29\n"); + lg::print("fail29\n"); return nullptr; } @@ -1708,22 +1709,22 @@ void convert_and_inline(FormPool& pool, Function& f, const BlockVtx* as_block, T auto& ao = f.ir2.atomic_ops->ops.at(j); if (contains(ao->write_regs(), consumed.reg())) { ri.written_and_unused.insert(consumed.reg()); - // fmt::print("GOT 3, making {} wau by {}\n", consumed.reg().to_charp(), + // lg::print("GOT 3, making {} wau by {}\n", consumed.reg().to_charp(), // ao->to_string(f.ir2.env)); // HACK - regenerate: if (add_map.at(j - start_op) != -1) { - // fmt::print("regenerating {} to ", output->at(add_map.at(j - + // lg::print("regenerating {} to ", output->at(add_map.at(j - // start_op))->to_string(f.ir2.env)); output->at(add_map.at(j - start_op)) = f.ir2.atomic_ops->ops.at(j)->get_as_form(pool, f.ir2.env); - // fmt::print("{}\n", output->at(add_map.at(j - + // lg::print("{}\n", output->at(add_map.at(j - // start_op))->to_string(f.ir2.env)); } break; } if (contains(ao->read_regs(), consumed.reg())) { - // fmt::print("GOT 2, making {} consumed by {}\n", + // lg::print("GOT 2, making {} consumed by {}\n", // consumed.reg().to_charp(), // ao->to_string(f.ir2.env)); ri.consumes.insert(consumed.reg()); @@ -1896,8 +1897,8 @@ Form* cfg_to_ir_helper(FormPool& pool, Function& f, const CfgVtx* vtx) { auto& op = f.ir2.atomic_ops->ops.at(delay_start); auto op_as_expr = dynamic_cast(op.get()); if (!op_as_expr) { - fmt::print("bad in {}\n", f.name()); - fmt::print("{}\n", op->to_string(f.ir2.env)); + lg::print("bad in {}\n", f.name()); + lg::print("{}\n", op->to_string(f.ir2.env)); } ASSERT(op_as_expr); e.branch_delay = *op_as_expr; diff --git a/decompiler/analysis/expression_build.cpp b/decompiler/analysis/expression_build.cpp index 96cef58b5c..dc5ee3fddd 100644 --- a/decompiler/analysis/expression_build.cpp +++ b/decompiler/analysis/expression_build.cpp @@ -1,5 +1,6 @@ #include "expression_build.h" #include "common/goos/PrettyPrinter.h" +#include "common/log/log.h" #include "decompiler/Function/Function.h" #include "decompiler/IR2/Form.h" #include "decompiler/IR2/FormStack.h" @@ -46,7 +47,7 @@ bool convert_to_expressions( info.second.name_override = rename->second; } // debug - // fmt::print("STACK {} : {} ({})\n", info.first, info.second.typespec.print(), + // lg::print("STACK {} : {} ({})\n", info.first, info.second.typespec.print(), // info.second.tp_type.print()); } diff --git a/decompiler/analysis/find_defstates.cpp b/decompiler/analysis/find_defstates.cpp index 6237a6dc76..03b3585a00 100644 --- a/decompiler/analysis/find_defstates.cpp +++ b/decompiler/analysis/find_defstates.cpp @@ -2,6 +2,7 @@ #include "find_defstates.h" #include "common/goos/PrettyPrinter.h" +#include "common/log/log.h" #include "common/type_system/state.h" #include "decompiler/IR2/Form.h" #include "decompiler/IR2/GenericElementMatcher.h" @@ -116,7 +117,7 @@ std::vector get_defstate_entries( } if (debug_defstates) { - fmt::print("SET: {} to {}\n", name, val->to_string(env)); + lg::debug("SET: {} to {}", name, val->to_string(env)); } // now we try to find a function @@ -130,7 +131,7 @@ std::vector get_defstate_entries( this_entry.is_behavior = true; if (print_renames) { - fmt::print("RENAME: {} to ", handler_func->name()); + lg::info("RENAME: {} to ", handler_func->name()); } if (virtual_child) { @@ -139,7 +140,7 @@ std::vector get_defstate_entries( handler_func->guessed_name.set_as_nv_state(state_name, handler_kind); } if (print_renames) { - fmt::print("{}\n", handler_func->name()); + lg::info("{}", handler_func->name()); } // scary part - modify the function type! @@ -191,7 +192,7 @@ FormElement* rewrite_nonvirtual_defstate( expected_state_name); } if (debug_defstates) { - fmt::print("State: {} Type: {}\n", info.first, info.second.print()); + lg::debug("State: {} Type: {}", info.first, info.second.print()); } body_index++; @@ -270,7 +271,6 @@ FormElement* rewrite_virtual_defstate( // see if the first thing is an inherit-state. auto maybe_inherit_form = elt->body()->at(body_idx); - // fmt::print("first is {}\n", maybe_inherit_form->to_string(env)); Form temp; temp.elts().push_back(maybe_inherit_form); // (inherit-state gp-1 (method-of-type plat-button dummy-24)) @@ -418,8 +418,6 @@ FormElement* rewrite_virtual_defstate( expected_state_name, method_info.name, method_info.defined_in_type); } - // fmt::print("is a {}\n", typeid(*parent_state->try_as_single_element()).name()); - auto entries = get_defstate_entries( elt->body(), body_idx + 1, env, expected_state_name, elt->entries().at(0).dest, method_info.type.substitute_for_method_call(type_name), pool, type_name, skip_states); @@ -461,7 +459,7 @@ void run_defstate( env.get_variable_type(as_let->entries().at(0).dest, false) == TypeSpec("state")) { std::string expected_state_name = verify_empty_state_and_get_name(src_as_label, env); if (debug_defstates) { - fmt::print("got state let:\n{}\n", pretty_print::to_string(as_let->to_form(env))); + lg::debug("got state let:\n{}", pretty_print::to_string(as_let->to_form(env))); } if (is_nonvirtual_state(as_let)) { diff --git a/decompiler/analysis/inline_asm_rewrite.cpp b/decompiler/analysis/inline_asm_rewrite.cpp index 039001368b..d3f80dea87 100644 --- a/decompiler/analysis/inline_asm_rewrite.cpp +++ b/decompiler/analysis/inline_asm_rewrite.cpp @@ -1,5 +1,6 @@ #include "inline_asm_rewrite.h" #include "common/goos/PrettyPrinter.h" +#include "common/log/log.h" #include "decompiler/Function/Function.h" #include "decompiler/IR2/Form.h" #include "decompiler/IR2/FormStack.h" diff --git a/decompiler/analysis/insert_lets.cpp b/decompiler/analysis/insert_lets.cpp index 555d5abf6a..8e1af0a4dc 100644 --- a/decompiler/analysis/insert_lets.cpp +++ b/decompiler/analysis/insert_lets.cpp @@ -3,6 +3,7 @@ #include #include +#include "common/log/log.h" #include "common/util/Assert.h" #include "common/util/print_float.h" #include "decompiler/IR2/GenericElementMatcher.h" @@ -55,7 +56,7 @@ std::vector path_up_tree(Form* in, const Env&) { in = nullptr; } } - // lg::warn("DONE\n"); + // lg::warn("DONE"); return path; } @@ -65,7 +66,7 @@ Form* lca_form(Form* a, Form* b, const Env& env) { return b; } // - // fmt::print("lca {} ({}) and {} ({})\n", a->to_string(env), (void*)a, b->to_string(env), + // lg::print("lca {} ({}) and {} ({})\n", a->to_string(env), (void*)a, b->to_string(env), // (void*)b); auto a_up = path_up_tree(a, env); @@ -84,12 +85,10 @@ Form* lca_form(Form* a, Form* b, const Env& env) { ai--; bi--; } - if (!result) { - fmt::print("{} bad form is {}\n\n{}\n", env.func->name(), a->to_string(env), b->to_string(env)); - } - ASSERT(result); + ASSERT_MSG(result, fmt::format("{} bad form is {}\n\n{}\n", env.func->name(), a->to_string(env), + b->to_string(env))); - // fmt::print("{}\n\n", result->to_string(env)); + // lg::print("{}\n\n", result->to_string(env)); return result; } @@ -333,7 +332,7 @@ FormElement* rewrite_as_send_event(LetElement* in, auto body = in->body(); if (body->size() < 4) { // from, num-params, message, call - // fmt::print(" fail: size\n"); + // lg::print(" fail: size\n"); return nullptr; } @@ -379,7 +378,7 @@ FormElement* rewrite_as_send_event(LetElement* in, if (!from_mr.matched) { return nullptr; } - fmt::print("case 1: {}\n", from_mr.maps.forms.at(1)->to_string(env)); + lg::print("case 1: {}\n", from_mr.maps.forms.at(1)->to_string(env)); not_proc = true; } @@ -399,13 +398,13 @@ FormElement* rewrite_as_send_event(LetElement* in, Matcher::any_integer(1)); auto num_params_mr = match(set_num_params_matcher, body->at(1)); if (!num_params_mr.matched) { - // fmt::print(" fail: pc1\n"); + // lg::print(" fail: pc1\n"); return nullptr; } int param_count = num_params_mr.maps.ints.at(1); ASSERT(param_count >= 0 && param_count < 7); if (body->size() != 4 + param_count) { - // fmt::print(" fail: pc3\n"); + // lg::print(" fail: pc3\n"); return nullptr; } @@ -416,7 +415,7 @@ FormElement* rewrite_as_send_event(LetElement* in, Matcher::any(1)); auto set_message_mr = match(set_message_matcher, body->at(2)); if (!set_message_mr.matched) { - // fmt::print(" fail: msg1\n"); + // lg::print(" fail: msg1\n"); return nullptr; } Form* message_name = set_message_mr.maps.forms.at(1); @@ -440,7 +439,7 @@ FormElement* rewrite_as_send_event(LetElement* in, Matcher::any(1)); auto set_param_mr = match(set_param_matcher, set_form); if (!set_param_mr.matched) { - // fmt::print(" fail: pv {} 1: {}\n", param_idx, set_form->to_string(env)); + // lg::print(" fail: pv {} 1: {}\n", param_idx, set_form->to_string(env)); return nullptr; } @@ -2066,7 +2065,7 @@ LetStats insert_lets(const Function& func, // Part 2, figure out the lca form which contains all uses of a var for (auto& kv : var_info) { - // fmt::print("--------------------- {}\n", kv.first); + // lg::print("--------------------- {}\n", kv.first); Form* lca = nullptr; for (auto fe : kv.second.elts_using_var) { lca = lca_form(lca, fe->parent_form, env); @@ -2078,7 +2077,7 @@ LetStats insert_lets(const Function& func, // Part 3, find the minimum range of FormElement's within the lca form that contain // all uses. This is the minimum possible range for a set! for (auto& kv : var_info) { - // fmt::print("Setting range for let {}\n", kv.first); + // lg::print("Setting range for let {}\n", kv.first); kv.second.start_idx = std::numeric_limits::max(); kv.second.end_idx = std::numeric_limits::min(); @@ -2099,14 +2098,14 @@ LetStats insert_lets(const Function& func, got_one = true; kv.second.start_idx = std::min(kv.second.start_idx, i); kv.second.end_idx = std::max(kv.second.end_idx, i + 1); - // fmt::print("update range {} to {} because of {}\n", kv.second.start_idx, + // lg::print("update range {} to {} because of {}\n", kv.second.start_idx, // kv.second.end_idx, kv.second.lca_form->at(i)->to_string(env)); } } ASSERT(got_one); } - // fmt::print("\n"); + // lg::print("\n"); // Part 4, sort the var infos in descending size. // this simplifies future passes. @@ -2150,7 +2149,7 @@ LetStats insert_lets(const Function& func, } } // success! - // fmt::print("Want let for {} range {} to {}\n", + // lg::print("Want let for {} range {} to {}\n", // env.get_variable_name(first_form_as_set->dst()), info.start_idx, info.end_idx); if (allowed) { LetInsertion li; @@ -2163,7 +2162,7 @@ LetStats insert_lets(const Function& func, stats.vars_in_lets++; } } else { - // fmt::print("fail for {} : {}\n", info.var_name, first_form->to_string(env)); + // lg::print("fail for {} : {}\n", info.var_name, first_form->to_string(env)); } } @@ -2179,7 +2178,7 @@ LetStats insert_lets(const Function& func, if (let_b.start_elt > let_a.start_elt && let_b.start_elt < let_a.end_elt && let_b.end_elt > let_a.end_elt) { changed = true; - // fmt::print("Resized {}'s end to {}\n", let_a.set_form->dst().to_string(env), + // lg::print("Resized {}'s end to {}\n", let_a.set_form->dst().to_string(env), // let_b.end_elt); let_a.end_elt = let_b.end_elt; } diff --git a/decompiler/analysis/mips2c.cpp b/decompiler/analysis/mips2c.cpp index 127925b9a3..3671fb62a5 100644 --- a/decompiler/analysis/mips2c.cpp +++ b/decompiler/analysis/mips2c.cpp @@ -2,6 +2,7 @@ #include "mips2c.h" +#include "common/log/log.h" #include "common/symbols.h" #include "common/util/print_float.h" #include "decompiler/Disasm/InstructionMatching.h" @@ -1183,7 +1184,7 @@ struct JumpTableBlock { void run_mips2c_jump_table(Function* f, const std::vector& jump_table_locations, GameVersion version) { - fmt::print("mips2c-jump on {}\n", f->name()); + lg::info("mips2c-jump on {}", f->name()); u32 magic_code = std::hash()(f->name()); std::unordered_map loc_to_block; for (size_t bb_idx = 0; bb_idx < f->basic_blocks.size(); bb_idx++) { diff --git a/decompiler/analysis/reg_usage.cpp b/decompiler/analysis/reg_usage.cpp index 7a6d035ee4..95decf5d4e 100644 --- a/decompiler/analysis/reg_usage.cpp +++ b/decompiler/analysis/reg_usage.cpp @@ -212,7 +212,7 @@ RegUsageInfo analyze_ir2_register_usage(const Function& function) { // also useful to know, written and unused. for (auto reg : op->write_regs()) { if (op_info.live.find(reg) == op_info.live.end()) { - // fmt::print("op {} wau {}\n", op->to_string(function.ir2.env), reg.to_string()); + // lg::print("op {} wau {}\n", op->to_string(function.ir2.env), reg.to_string()); op_info.written_and_unused.insert(reg); } } @@ -222,4 +222,4 @@ RegUsageInfo analyze_ir2_register_usage(const Function& function) { ASSERT(result.op.size() == ops->ops.size()); return result; } -} // namespace decompiler \ No newline at end of file +} // namespace decompiler diff --git a/decompiler/analysis/static_refs.cpp b/decompiler/analysis/static_refs.cpp index 7e1cfd1425..c668f118de 100644 --- a/decompiler/analysis/static_refs.cpp +++ b/decompiler/analysis/static_refs.cpp @@ -1,5 +1,6 @@ #include "static_refs.h" #include "common/goos/PrettyPrinter.h" +#include "common/log/log.h" #include "decompiler/Function/Function.h" #include "decompiler/ObjectFile/LinkedObjectFile.h" #include "decompiler/analysis/final_output.h" diff --git a/decompiler/analysis/symbol_def_map.cpp b/decompiler/analysis/symbol_def_map.cpp index 215c7481ec..24cc7785f1 100644 --- a/decompiler/analysis/symbol_def_map.cpp +++ b/decompiler/analysis/symbol_def_map.cpp @@ -1,5 +1,6 @@ #include "symbol_def_map.h" #include "common/link_types.h" +#include "common/log/log.h" #include "decompiler/ObjectFile/ObjectFileDB.h" #include "third-party/json.hpp" @@ -128,4 +129,4 @@ void SymbolMapBuilder::add_deftypes_from_top_level_function(const Function& f, } } -} // namespace decompiler \ No newline at end of file +} // namespace decompiler diff --git a/decompiler/analysis/type_analysis.cpp b/decompiler/analysis/type_analysis.cpp index f9c486e39c..9133cb6134 100644 --- a/decompiler/analysis/type_analysis.cpp +++ b/decompiler/analysis/type_analysis.cpp @@ -1,4 +1,5 @@ #include "type_analysis.h" +#include "common/log/log.h" namespace decompiler { namespace { @@ -37,7 +38,7 @@ void modify_input_types_for_casts( try { auto type_from_cast = TP_Type::make_from_ts(dts.parse_type_spec(cast.type_name)); auto original_type = state->get(cast.reg); - // fmt::print("Cast reg {} : {} -> {}\n", cast.reg.to_string(), original_type.print(), + // lg::print("Cast reg {} : {} -> {}\n", cast.reg.to_string(), original_type.print(), // type_from_cast.print()); if (original_type != type_from_cast) { // the cast will have an effect on types. If we are removing the original type, remember it @@ -63,7 +64,7 @@ void try_modify_input_types_for_casts( DecompilerTypeSystem& dts) { auto kv = casts.find(idx); if (kv != casts.end()) { - // fmt::print("at idx {}, casting:\n", idx); + // lg::print("at idx {}, casting:\n", idx); modify_input_types_for_casts(kv->second, state, changed_types, dts); } @@ -208,7 +209,7 @@ bool run_type_analysis_ir2(const TypeSpec& my_type, DecompilerTypeSystem& dts, F for (auto& info : env.stack_slot_entries) { info.second.typespec = info.second.tp_type.typespec(); // debug - // fmt::print("STACK {} : {} ({})\n", info.first, info.second.typespec.print(), + // lg::print("STACK {} : {} ({})\n", info.first, info.second.typespec.print(), // info.second.tp_type.print()); } diff --git a/decompiler/analysis/variable_naming.cpp b/decompiler/analysis/variable_naming.cpp index e419a92bcd..725b5d2e14 100644 --- a/decompiler/analysis/variable_naming.cpp +++ b/decompiler/analysis/variable_naming.cpp @@ -1,5 +1,6 @@ #include +#include "common/log/log.h" #include "decompiler/Function/Function.h" #include "decompiler/IR2/Env.h" #include "decompiler/util/DecompilerTypeSystem.h" @@ -66,7 +67,7 @@ void VarMapSSA::merge(const VarSSA& var_a, const VarSSA& var_b) { auto b = m_entries.at(var_b.m_entry_id); ASSERT(a.reg == b.reg); if (b.var_id == 0) { - // fmt::print("Merge {} <- {}\n", to_string(var_b), to_string(var_a)); + // lg::print("Merge {} <- {}\n", to_string(var_b), to_string(var_a)); for (auto& entry : m_entries) { if (entry.var_id == a.var_id && entry.reg == a.reg) { @@ -75,7 +76,7 @@ void VarMapSSA::merge(const VarSSA& var_a, const VarSSA& var_b) { } a.var_id = b.var_id; } else { - // fmt::print("Merge {} <- {}\n", to_string(var_a), to_string(var_b)); + // lg::print("Merge {} <- {}\n", to_string(var_a), to_string(var_b)); for (auto& entry : m_entries) { if (entry.var_id == b.var_id && entry.reg == b.reg) { @@ -101,17 +102,17 @@ void VarMapSSA::merge_to_first(const VarSSA& var_a, const VarSSA& var_b) { auto& a = m_entries.at(var_a.m_entry_id); auto b = m_entries.at(var_b.m_entry_id); - // fmt::print("Merge-to-first {} <- {}\n", to_string(var_a), to_string(var_b)); + // lg::print("Merge-to-first {} <- {}\n", to_string(var_a), to_string(var_b)); ASSERT(a.reg == b.reg); // for (auto& entry : m_entries) { for (size_t i = 0; i < m_entries.size(); i++) { auto& entry = m_entries.at(i); if (entry.var_id == b.var_id && entry.reg == b.reg) { - // fmt::print("remap extra {} var_id from {} to {}\n", i, entry.var_id, a.var_id); + // lg::print("remap extra {} var_id from {} to {}\n", i, entry.var_id, a.var_id); entry.var_id = a.var_id; } else { - // fmt::print("no remap at {} (prev is {} {})\n", i, entry.reg.to_charp(), entry.var_id); + // lg::print("no remap at {} (prev is {} {})\n", i, entry.reg.to_charp(), entry.var_id); } } b.var_id = a.var_id; @@ -163,7 +164,7 @@ void VarMapSSA::remap_reg(Register reg, const std::unordered_map& rema void VarMapSSA::debug_print_map() const { for (auto& entry : m_entries) { - fmt::print("[{:02d}] {} {}\n", entry.entry_id, entry.reg.to_charp(), entry.var_id); + lg::print("[{:02d}] {} {}\n", entry.entry_id, entry.reg.to_charp(), entry.var_id); } } @@ -1012,7 +1013,7 @@ void promote_register_class(const Function& func, } for (const auto& promotion : promote_map) { - // fmt::print("Promote {} to {}\n", promotion.first.print(), "uint128"); + // lg::print("Promote {} to {}\n", promotion.first.print(), "uint128"); // first reads: auto read_info = try_lookup_read(result, promotion.first); @@ -1068,21 +1069,21 @@ std::optional run_variable_renaming(const Function& function, debug_in += fmt::format(" out: {}\n\n", reg_to_string(block_info.output)); } - fmt::print("Debug Input\n{}\n----------------------------------\n", debug_in); + lg::print("Debug Input\n{}\n----------------------------------\n", debug_in); } // Create and convert to SSA auto ssa = make_rc_ssa(function, rui, ops); if (debug_prints) { - fmt::print("Basic SSA\n{}\n------------------------------------\n", ssa.print()); + lg::print("Basic SSA\n{}\n------------------------------------\n", ssa.print()); } // eliminate PHIs that are not needed, still keeping us in SSA. while (ssa.simplify()) { } if (debug_prints) { - fmt::print("Simplified SSA\n{}-------------------------------\n", ssa.print()); + lg::print("Simplified SSA\n{}-------------------------------\n", ssa.print()); } // merge special registers @@ -1099,7 +1100,7 @@ std::optional run_variable_renaming(const Function& function, ssa.merge_all_phis(); if (debug_prints) { - fmt::print("{}", ssa.print()); + lg::print("{}", ssa.print()); } if (debug_prints) { ssa.map.debug_print_map(); @@ -1110,7 +1111,7 @@ std::optional run_variable_renaming(const Function& function, // do rename ssa.remap(arg_count(function)); if (debug_prints) { - fmt::print("{}", ssa.print()); + lg::print("{}", ssa.print()); } if (function.ir2.env.has_type_analysis()) { diff --git a/decompiler/config.cpp b/decompiler/config.cpp index 69b2080118..9f2503275b 100644 --- a/decompiler/config.cpp +++ b/decompiler/config.cpp @@ -1,5 +1,6 @@ #include "config.h" +#include "common/log/log.h" #include "common/util/FileUtil.h" #include "common/util/json_util.h" @@ -29,7 +30,7 @@ Config read_config_file(const fs::path& path_to_config_file, const std::string& Config config; auto config_str = file_util::read_text_file(path_to_config_file); auto cfg = parse_commented_json(config_str, path_to_config_file.string()); - fmt::print("Config Overide: '{}'\n", override_json); + lg::info("Config Overide: '{}'\n", override_json); auto cfg_override = parse_commented_json(override_json, ""); cfg.update(cfg_override); diff --git a/decompiler/config/jak2/type_casts.jsonc b/decompiler/config/jak2/type_casts.jsonc index 2ed72cf166..23f9d4c265 100644 --- a/decompiler/config/jak2/type_casts.jsonc +++ b/decompiler/config/jak2/type_casts.jsonc @@ -1832,9 +1832,7 @@ [29, "v1", "fact-info-target"] ], "target-real-post": [[97, "f28", "float"]], - "target-compute-pole": [ - [[12,180], "s2", "swingpole"] - ], + "target-compute-pole": [[[12, 180], "s2", "swingpole"]], "tobot-start": [[26, "s5", "target"]], "(method 10 target)": [[28, "t9", "(function target none)"]], "target-compute-edge": [[48, "a0", "process-drawable"]], diff --git a/decompiler/config/jak2_ntsc_v1.jsonc b/decompiler/config/jak2_ntsc_v1.jsonc index a0a99d6a3a..4caca241f7 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": ["region"], "banned_objects": ["effect-control", "time-of-day", "target-util", "ctywide-scenes"], //////////////////////////// diff --git a/decompiler/data/TextureDB.cpp b/decompiler/data/TextureDB.cpp index 99a1409e92..9785bdcfb3 100644 --- a/decompiler/data/TextureDB.cpp +++ b/decompiler/data/TextureDB.cpp @@ -1,5 +1,6 @@ #include "TextureDB.h" +#include "common/log/log.h" #include "common/util/Assert.h" #include "third-party/fmt/core.h" @@ -49,11 +50,11 @@ void TextureDB::replace_textures(const fs::path& path) { for (auto& tex : textures) { fs::path full_path = base_path / tpage_names.at(tex.second.page) / (tex.second.name + ".png"); if (fs::exists(full_path)) { - fmt::print("Replacing {}\n", full_path.string().c_str()); + lg::info("Replacing {}", full_path.string().c_str()); int w, h; auto data = stbi_load(full_path.string().c_str(), &w, &h, 0, 4); // rgba channels if (!data) { - fmt::print("failed to load PNG file: {}\n", full_path.string().c_str()); + lg::warn("failed to load PNG file: {}", full_path.string().c_str()); continue; } tex.second.rgba_bytes.resize(w * h); diff --git a/decompiler/data/streamed_audio.cpp b/decompiler/data/streamed_audio.cpp index 466626a0f5..306dd47a8c 100644 --- a/decompiler/data/streamed_audio.cpp +++ b/decompiler/data/streamed_audio.cpp @@ -42,7 +42,7 @@ struct AudioDir { void debug_print() const { for (auto& e : entries) { - fmt::print("\"{}\" 0x{:07x} - 0x{:07x}\n", e.name, e.start_byte, e.end_byte); + lg::debug("\"{}\" 0x{:07x} - 0x{:07x}", e.name, e.start_byte, e.end_byte); } } }; @@ -80,9 +80,9 @@ struct VagFileHeader { char temp_name[17]; memcpy(temp_name, name, 16); temp_name[16] = '\0'; - fmt::print("{}{}{}{} v {} zero {} chan {} samp {} z {} {} {} name {}\n", magic[0], magic[1], - magic[2], magic[3], version, zero, channel_size, sample_rate, z[0], z[1], z[2], - temp_name); + lg::debug("{}{}{}{} v {} zero {} chan {} samp {} z {} {} {} name {}", magic[0], magic[1], + magic[2], magic[3], version, zero, channel_size, sample_rate, z[0], z[1], z[2], + temp_name); } }; @@ -96,7 +96,7 @@ AudioDir read_audio_dir(const fs::path& path) { u32 value; }; auto data = file_util::read_binary_file(path); - lg::info("Got {} bytes of audio dir.\n", data.size()); + lg::info("Got {} bytes of audio dir.", data.size()); auto reader = BinaryReader(data); u32 count = reader.read(); diff --git a/decompiler/level_extractor/BspHeader.cpp b/decompiler/level_extractor/BspHeader.cpp index 6644fc39e3..d3063b7276 100644 --- a/decompiler/level_extractor/BspHeader.cpp +++ b/decompiler/level_extractor/BspHeader.cpp @@ -1,6 +1,7 @@ #include "BspHeader.h" #include "common/dma/dma.h" +#include "common/log/log.h" #include "decompiler/ObjectFile/LinkedObjectFile.h" #include "decompiler/util/DecompilerTypeSystem.h" @@ -215,7 +216,7 @@ void tfrag_debug_print_unpack(Ref start, int qwc_total) { while (word_offset < qwc_total * 4) { VifCode next(deref_u32(start, word_offset)); - fmt::print("{} at: {} bytes, {} qw\n", next.print(), word_offset * 4, word_offset / 4); + lg::debug("{} at: {} bytes, {} qw", next.print(), word_offset * 4, word_offset / 4); word_offset++; switch (next.kind) { case VifCode::Kind::UNPACK_V4_16: { @@ -231,8 +232,8 @@ void tfrag_debug_print_unpack(Ref start, int qwc_total) { words[1] = deref_u32(start, word_offset++); u16 unpacked[4]; memcpy(unpacked, words, 8); - fmt::print(" [{:3d} {:3d} {:3d} {:3d}]\n", unpacked[0], unpacked[1], unpacked[2], - unpacked[3]); + lg::debug(" [{:3d} {:3d} {:3d} {:3d}]", unpacked[0], unpacked[1], unpacked[2], + unpacked[3]); } } break; @@ -249,7 +250,7 @@ void tfrag_debug_print_unpack(Ref start, int qwc_total) { words[1] = deref_u32(start, word_offset++); words[2] = deref_u32(start, word_offset++); words[3] = deref_u32(start, word_offset++); - fmt::print(" [{:3d} {:3d} {:3d} {:3d}]\n", words[0], words[1], words[2], words[3]); + lg::debug(" [{:3d} {:3d} {:3d} {:3d}]", words[0], words[1], words[2], words[3]); } } break; @@ -264,7 +265,7 @@ void tfrag_debug_print_unpack(Ref start, int qwc_total) { words[0] = deref_u32(start, word_offset++); words[1] = deref_u32(start, word_offset++); words[2] = deref_u32(start, word_offset++); - fmt::print(" [{:3d} {:3d} {:3d}]\n", words[0], words[1], words[2]); + lg::debug(" [{:3d} {:3d} {:3d}]", words[0], words[1], words[2]); } } break; @@ -274,7 +275,7 @@ void tfrag_debug_print_unpack(Ref start, int qwc_total) { words[1] = deref_u32(start, word_offset++); words[2] = deref_u32(start, word_offset++); words[3] = deref_u32(start, word_offset++); - fmt::print(" row data [{:3d} {:3d} {:3d} {:3d}]\n", words[0], words[1], words[2], words[3]); + lg::debug(" row data [{:3d} {:3d} {:3d} {:3d}]", words[0], words[1], words[2], words[3]); } break; case VifCode::Kind::STMOD: { @@ -293,7 +294,7 @@ void tfrag_debug_print_unpack(Ref start, int qwc_total) { s8 words[4]; u32 all = deref_u32(start, word_offset++); memcpy(words, &all, 4); - fmt::print(" [{:3d} {:3d} {:3d} {:3d}]\n", words[0], words[1], words[2], words[3]); + lg::debug(" [{:3d} {:3d} {:3d} {:3d}]", words[0], words[1], words[2], words[3]); } } break; case VifCode::Kind::NOP: @@ -302,7 +303,7 @@ void tfrag_debug_print_unpack(Ref start, int qwc_total) { ASSERT_MSG(false, fmt::format("unknown: {}", next.print())); } } - fmt::print("-------------------------------------------\n"); + lg::debug("-------------------------------------------"); } std::vector read_dma_chain(Ref& start, u32 qwc) { @@ -350,22 +351,22 @@ void TFragment::read_from_file(TypedRef ref, if (stats->debug_print_dma_data) { // first, common - fmt::print("DMA COMMON {}, {} qwc:\n", dmas[0].label_name, dma_qwc[0]); + lg::info("DMA COMMON {}, {} qwc:", dmas[0].label_name, dma_qwc[0]); tfrag_debug_print_unpack(dmas[0].ref, dma_qwc[0]); // next "base" - fmt::print("DMA BASE {}, {} qwc:\n", dmas[1].label_name, dma_qwc[1]); + lg::info("DMA BASE {}, {} qwc:", dmas[1].label_name, dma_qwc[1]); tfrag_debug_print_unpack(dmas[1].ref, dma_qwc[1]); // next "level0" - // fmt::print("DMA LEVEL0 {}, {} qwc:\n", dmas[0].label_name, dma_qwc[3]); + // lg::print("DMA LEVEL0 {}, {} qwc:\n", dmas[0].label_name, dma_qwc[3]); // tfrag_debug_print_unpack(dmas[0].ref, dma_qwc[3]); // next "level1" - fmt::print("DMA LEVEL1 {}, {} qwc:\n", dmas[2].label_name, dma_qwc[2]); + lg::info("DMA LEVEL1 {}, {} qwc:", dmas[2].label_name, dma_qwc[2]); tfrag_debug_print_unpack(dmas[2].ref, dma_qwc[2]); - fmt::print("qwc's: {} {} {} {}\n", dma_qwc[0], dma_qwc[1], dma_qwc[2], dma_qwc[3]); + lg::info("qwc's: {} {} {} {}", dma_qwc[0], dma_qwc[1], dma_qwc[2], dma_qwc[3]); } num_base_colors = read_plain_data_field(ref, "num-base-colors", dts); @@ -404,7 +405,7 @@ void TFragment::read_from_file(TypedRef ref, // todo shader ASSERT(num_colors / 4 == color_count); - // fmt::print("colors: {} {} {}\n", num_base_colors, num_level0_colors, num_level1_colors); + // lg::print("colors: {} {} {}\n", num_base_colors, num_level0_colors, num_level1_colors); if (version == GameVersion::Jak1) { ASSERT(read_plain_data_field(ref, "pad0", dts) == 0); ASSERT(read_plain_data_field(ref, "pad1", dts) == 0); @@ -920,7 +921,7 @@ void PrototypeBucketTie::read_from_file(TypedRef ref, break; case GameVersion::Jak2: flags = read_plain_data_field(ref, "flags", dts); - fmt::print("flag: {}\n", flags); + lg::print("flag: {}\n", flags); break; default: ASSERT(false); @@ -1576,7 +1577,7 @@ void PrototypeBucketShrub::read_from_file(TypedRef ref, } if (flags) { // lid in misty has flag 2, not sure what it means yet. - fmt::print("proto: {} flags: {}\n", name, flags); + lg::info("proto: {} flags: {}", name, flags); } in_level = read_plain_data_field(ref, "in-level", dts); utextures = read_plain_data_field(ref, "utextures", dts); diff --git a/decompiler/level_extractor/MercData.cpp b/decompiler/level_extractor/MercData.cpp index 7ff7b3611e..64382057ce 100644 --- a/decompiler/level_extractor/MercData.cpp +++ b/decompiler/level_extractor/MercData.cpp @@ -152,7 +152,7 @@ void MercByteHeader::from_ref(TypedRef tr, const DecompilerTypeSystem& dts) { } else { // ASSERT(!got_end); if (got_end) { - // fmt::print("got something after the end\n"); // todo, should investigate more + // lg::print("got something after the end\n"); // todo, should investigate more } } } @@ -203,10 +203,10 @@ TypedRef MercFragment::from_ref(TypedRef tr, const DecompilerTypeSystem& dts, const MercFragmentControl& control, const MercCtrlHeader& main_control) { - // fmt::print("frag::from_ref:\n{}\n", control.print()); + // lg::print("frag::from_ref:\n{}\n", control.print()); TypedRef byte_hdr(get_field_ref(tr, "header", dts), dts.ts.lookup_type("merc-byte-header")); header.from_ref(byte_hdr, dts); - // fmt::print("{}\n", header.print()); + // lg::print("{}\n", header.print()); // all these offsets are super confusing. // the DMA transfers require source and dest addresses/sized to have alignment of 16 bytes. @@ -225,7 +225,7 @@ TypedRef MercFragment::from_ref(TypedRef tr, // dsll32 s0, v0, 4 // daddu t3, t2, s0 u32 my_u4_count = ((control.unsigned_four_count + 3) / 4) * 16; - // fmt::print("my u4: {} ({} qwc)\n", my_u4_count, my_u4_count / 16); + // lg::print("my u4: {} ({} qwc)\n", my_u4_count, my_u4_count / 16); for (u32 w = 0; w < my_u4_count / 4; w++) { u32 val = deref_u32(tr.ref, w); memcpy(unsigned_four_including_header.emplace_back().data(), &val, 4); @@ -237,7 +237,7 @@ TypedRef MercFragment::from_ref(TypedRef tr, // srl s0, s0, 2 // dsll32 s2, s0, 4 u32 my_l4_count = my_u4_count + ((control.lump_four_count + 3) / 4) * 16; - // fmt::print("my l4: {} ({} qwc)\n", my_l4_count, my_l4_count / 16); + // lg::print("my l4: {} ({} qwc)\n", my_l4_count, my_l4_count / 16); // end of lump should align with mm (main memory?) fp off. which // is used for accessing the fp data in main memory. ASSERT(my_l4_count / 16 == header.mm_quadword_fp_off); @@ -409,4 +409,4 @@ std::string MercCtrl::print() { return result; } -} // namespace decompiler \ No newline at end of file +} // namespace decompiler diff --git a/decompiler/level_extractor/extract_collide_frags.cpp b/decompiler/level_extractor/extract_collide_frags.cpp index d32fd25b83..5f7847e9fd 100644 --- a/decompiler/level_extractor/extract_collide_frags.cpp +++ b/decompiler/level_extractor/extract_collide_frags.cpp @@ -179,7 +179,7 @@ void extract_pats(CollideListItem& item) { auto pat_idx = deref_u8(item.mesh->packed_data, byte_offset++); u32 pat = deref_u32(item.mesh->pat_array, pat_idx); - // fmt::print("pat @ {} is 0x{:x}\n", pat_idx, pat); + // lg::print("pat @ {} is 0x{:x}\n", pat_idx, pat); f.pat = pat; } } diff --git a/decompiler/level_extractor/extract_level.cpp b/decompiler/level_extractor/extract_level.cpp index b20ce552af..aa6e857c88 100644 --- a/decompiler/level_extractor/extract_level.cpp +++ b/decompiler/level_extractor/extract_level.cpp @@ -3,6 +3,7 @@ #include #include +#include "common/log/log.h" #include "common/util/FileUtil.h" #include "common/util/SimpleThreadGroup.h" #include "common/util/compress.h" @@ -38,18 +39,18 @@ std::optional get_bsp_file(const std::vector */ bool is_valid_bsp(const decompiler::LinkedObjectFile& file) { if (file.segments != 1) { - fmt::print("Got {} segments, but expected 1\n", file.segments); + lg::error("Got {} segments, but expected 1", file.segments); return false; } auto& first_word = file.words_by_seg.at(0).at(0); if (first_word.kind() != decompiler::LinkedWord::TYPE_PTR) { - fmt::print("Expected the first word to be a type pointer, but it wasn't.\n"); + lg::error("Expected the first word to be a type pointer, but it wasn't."); return false; } if (first_word.symbol_name() != "bsp-header") { - fmt::print("Expected to get a bsp-header, but got {} instead.\n", first_word.symbol_name()); + lg::error("Expected to get a bsp-header, but got {} instead.", first_word.symbol_name()); return false; } @@ -126,7 +127,7 @@ std::vector extract_bsp_from_level(const ObjectFileDB } std::string level_name = bsp_rec->name.substr(0, bsp_rec->name.length() - 4); - fmt::print("Processing level {} ({})\n", dgo_name, level_name); + lg::info("Processing level {} ({})", dgo_name, level_name); const auto& bsp_file = db.lookup_record(*bsp_rec); bool ok = is_valid_bsp(bsp_file.linked_data); ASSERT(ok); @@ -140,7 +141,7 @@ std::vector extract_bsp_from_level(const ObjectFileDB /* level_tools::PrintSettings settings; settings.expand_collide = true; - fmt::print("{}\n", bsp_header.print(settings)); + lg::print("{}\n", bsp_header.print(settings)); */ const std::set tfrag_trees = { @@ -189,7 +190,7 @@ std::vector extract_bsp_from_level(const ObjectFileDB extract_collide_frags(as_collide_frags, all_ties, fmt::format("{}-{}-collide", dgo_name, i++), level_data, false); } else { - // fmt::print(" unsupported tree {}\n", draw_tree->my_type()); + // lg::print(" unsupported tree {}\n", draw_tree->my_type()); } } level_data.level_name = level_name; @@ -228,10 +229,10 @@ void extract_common(const ObjectFileDB& db, auto compressed = compression::compress_zstd(ser.get_save_result().first, ser.get_save_result().second); - fmt::print("stats for {}\n", dgo_name); + lg::info("stats for {}", dgo_name); print_memory_usage(tfrag_level, ser.get_save_result().second); - fmt::print("compressed: {} -> {} ({:.2f}%)\n", ser.get_save_result().second, compressed.size(), - 100.f * compressed.size() / ser.get_save_result().second); + lg::info("compressed: {} -> {} ({:.2f}%)", ser.get_save_result().second, compressed.size(), + 100.f * compressed.size() / ser.get_save_result().second); file_util::write_binary_file( output_folder / fmt::format("{}.fr3", dgo_name.substr(0, dgo_name.length() - 4)), compressed.data(), compressed.size()); @@ -265,10 +266,10 @@ void extract_from_level(const ObjectFileDB& db, level_data.serialize(ser); auto compressed = compression::compress_zstd(ser.get_save_result().first, ser.get_save_result().second); - fmt::print("stats for {}\n", dgo_name); + lg::info("stats for {}", dgo_name); print_memory_usage(level_data, ser.get_save_result().second); - fmt::print("compressed: {} -> {} ({:.2f}%)\n", ser.get_save_result().second, compressed.size(), - 100.f * compressed.size() / ser.get_save_result().second); + lg::info("compressed: {} -> {} ({:.2f}%)", ser.get_save_result().second, compressed.size(), + 100.f * compressed.size() / ser.get_save_result().second); file_util::write_binary_file( output_folder / fmt::format("{}.fr3", dgo_name.substr(0, dgo_name.length() - 4)), compressed.data(), compressed.size()); diff --git a/decompiler/level_extractor/extract_merc.cpp b/decompiler/level_extractor/extract_merc.cpp index 73c1873c58..74a01f65d0 100644 --- a/decompiler/level_extractor/extract_merc.cpp +++ b/decompiler/level_extractor/extract_merc.cpp @@ -1,5 +1,6 @@ #include "extract_merc.h" +#include "common/log/log.h" #include "common/util/FileUtil.h" #include "common/util/colors.h" @@ -198,8 +199,8 @@ void update_mode_from_alpha1(GsAlpha reg, DrawMode& mode) { else { // unsupported blend: a 0 b 1 c 0 d 2 is this part of generic? - fmt::print("unsupported blend: a {} b {} c {} d {}\n", (int)reg.a_mode(), (int)reg.b_mode(), - (int)reg.c_mode(), (int)reg.d_mode()); + lg::warn("unsupported blend: a {} b {} c {} d {}", (int)reg.a_mode(), (int)reg.b_mode(), + (int)reg.c_mode(), (int)reg.d_mode()); mode.set_alpha_blend(DrawMode::AlphaBlend::SRC_DST_SRC_DST); // ASSERT(false); } @@ -297,8 +298,8 @@ void handle_frag(const std::string& debug_name, MercMemory& memory) { (void)frag_ctrl; (void)debug_name; - // fmt::print("handling frag: {}\n", debug_name); - // fmt::print("{}\n", frag.print()); + // lg::print("handling frag: {}\n", debug_name); + // lg::print("{}\n", frag.print()); // we'll iterate through the lump and rgba data int lump_ptr = 0; // vertex data starts at the beginning of "lump" @@ -490,7 +491,7 @@ void handle_frag(const std::string& debug_name, // dst1_adc = dst0_adc && (mat0_flag >= 0); // dst0_adc = !dst0_adc; // dst1_adc = !dst1_adc; - // fmt::print("{}\n", dst1_adc); + // lg::print("{}\n", dst1_adc); } // write to two spots in memory @@ -510,7 +511,7 @@ void handle_frag(const std::string& debug_name, memory.memory.at(vtx.dst1 + 2).kind = MercOutputQuadword::Kind::INVALID; /* - fmt::print("place vertex {} @ {} {}: {} (adc {} {}) {}\n", current_vtx_idx, vtx.dst0, vtx.dst1, + lg::print("place vertex {} @ {} {}: {} (adc {} {}) {}\n", current_vtx_idx, vtx.dst0, vtx.dst1, vtx.pos.to_string_aligned(), dst0_adc, dst1_adc, mat1_flag); */ @@ -542,7 +543,7 @@ std::vector index_list_from_packet(u32 vtx_ptr, u32 nloop, const MercMemory prev_vtx = vtx_mem.vtx_idx; } else { // missing vertex! - fmt::print("MISSING VERTEX at {}\n", vtx_ptr); + lg::warn("MISSING VERTEX at {}", vtx_ptr); result.push_back(UINT32_MAX); } @@ -759,7 +760,7 @@ ConvertedMercEffect convert_merc_effect(const MercEffect& input_effect, u32 srcdst_ptr = frag.header.srcdest_off; for (u32 sci = 0; sci < frag.header.samecopy_cnt; sci++) { auto& cpy = frag.unsigned_four_including_header[srcdst_ptr]; - // fmt::print("sci: {}\n", cpy.to_string_hex_byte()); + // lg::print("sci: {}\n", cpy.to_string_hex_byte()); u32 src = cpy[0]; auto& vert = merc_memories[memory_buffer_toggle].memory.at(src); u32 dst = cpy[1]; @@ -771,7 +772,7 @@ ConvertedMercEffect convert_merc_effect(const MercEffect& input_effect, dvert.adc = !dvert.adc; } } else { - fmt::print("sc missing vert\n"); + lg::warn("sc missing vert"); dvert.kind = MercOutputQuadword::Kind::INVALID; } @@ -781,7 +782,7 @@ ConvertedMercEffect convert_merc_effect(const MercEffect& input_effect, // "cross" copy from the other output buffer for (u32 cci = 0; cci < frag.header.crosscopy_cnt; cci++) { auto& cpy = frag.unsigned_four_including_header[srcdst_ptr]; - // fmt::print("cci: {}\n", cpy.to_string_hex_byte()); + // lg::print("cci: {}\n", cpy.to_string_hex_byte()); u32 src = cpy[0]; auto& vert = merc_memories[memory_buffer_toggle ^ 1].memory.at(src); u32 dst = cpy[1]; @@ -793,7 +794,7 @@ ConvertedMercEffect convert_merc_effect(const MercEffect& input_effect, dvert.adc = !dvert.adc; } } else { - fmt::print("cc missing vert\n"); + lg::warn("cc missing vert"); dvert.kind = MercOutputQuadword::Kind::INVALID; } srcdst_ptr++; diff --git a/decompiler/level_extractor/extract_shrub.cpp b/decompiler/level_extractor/extract_shrub.cpp index 48daeba7c6..78c50be73c 100644 --- a/decompiler/level_extractor/extract_shrub.cpp +++ b/decompiler/level_extractor/extract_shrub.cpp @@ -2,6 +2,7 @@ #include +#include "common/log/log.h" #include "common/util/FileUtil.h" #include "decompiler/ObjectFile/LinkedObjectFile.h" @@ -157,8 +158,8 @@ DrawSettings adgif_to_draw_mode(const AdGifData& ad, // ADGIF 0 bool weird = (u8)ad.tex0_addr != (u32)GsRegisterAddress::TEX0_1; if (weird) { - fmt::print("---------------- WEIRD: 0x{:x}\n", ad.tex0_addr); - fmt::print("i have {} verts\n", count); + lg::info("---------------- WEIRD: 0x{:x}", ad.tex0_addr); + lg::info("i have {} verts", count); } else { ASSERT(ad.tex0_data == 0 || ad.tex0_data == 0x800000000); // note: decal?? todo } @@ -171,7 +172,7 @@ DrawSettings adgif_to_draw_mode(const AdGifData& ad, u32 new_tex = remap_texture(original_tex, map); // try remapping it if (original_tex != new_tex) { - fmt::print("map from 0x{:x} to 0x{:x}\n", original_tex, new_tex); + lg::info("map from 0x{:x} to 0x{:x}", original_tex, new_tex); } // texture the texture page/texture index, and convert to a PC port texture ID u32 tpage = new_tex >> 20; @@ -181,7 +182,7 @@ DrawSettings adgif_to_draw_mode(const AdGifData& ad, auto tex = tdb.textures.find(tex_combo); ASSERT(tex != tdb.textures.end()); if (weird) { - fmt::print("tex: {}\n", tex->second.name); + lg::info("tex: {}", tex->second.name); } // ADGIF 2 @@ -251,7 +252,7 @@ ShrubProtoInfo extract_proto(const shrub_types::PrototypeBucketShrub& proto, memcpy(adgif_data.data(), frag.textures.data(), frag.textures.size()); if (frag_idx == 0 && proto.name == "vil2-cattail.mb") { - fmt::print("Skipping broken village2 thing\n"); + lg::info("Skipping broken village2 thing"); continue; } diff --git a/decompiler/level_extractor/extract_tfrag.cpp b/decompiler/level_extractor/extract_tfrag.cpp index 6e4c2dd2e3..1f3d3475eb 100644 --- a/decompiler/level_extractor/extract_tfrag.cpp +++ b/decompiler/level_extractor/extract_tfrag.cpp @@ -3,6 +3,7 @@ #include "common/custom_data/pack_helpers.h" #include "common/dma/dma.h" #include "common/dma/gs.h" +#include "common/log/log.h" #include "common/util/Assert.h" #include "common/util/FileUtil.h" @@ -42,7 +43,7 @@ bool verify_node_indices_from_array(const level_tools::DrawableInlineArray* arra if (as_tfrags) { for (auto& elt : as_tfrags->tfragments) { if (elt.id != start) { - fmt::print("bad frag: exp {} got {}\n", start, elt.id); + lg::error("bad frag: exp {} got {}", start, elt.id); return false; } start++; @@ -52,7 +53,7 @@ bool verify_node_indices_from_array(const level_tools::DrawableInlineArray* arra } else if (as_nodes) { for (auto& elt : as_nodes->draw_nodes) { if (elt.id != start) { - fmt::print("bad node: exp {} got {}\n", start, elt.id); + lg::error("bad node: exp {} got {}", start, elt.id); return false; } start++; @@ -60,7 +61,7 @@ bool verify_node_indices_from_array(const level_tools::DrawableInlineArray* arra *end = start; return true; } else { - fmt::print("bad node array type: {}\n", array->my_type()); + lg::error("bad node array type: {}", array->my_type()); return false; } } @@ -368,7 +369,7 @@ int handle_unpack_v4_16_mode1(const VifCode& code, qw[3] = row[3] + (u32)deref_ptr(dma + offset); offset += 2; - // fmt::print(" unpack rgba?: {:x} {:x} {:x} {:x}\n", qw[0], qw[1], qw[2], qw[3]); + // lg::print(" unpack rgba?: {:x} {:x} {:x} {:x}\n", qw[0], qw[1], qw[2], qw[3]); memcpy(vu_mem + (dest_qw * 16), qw, 16); } ASSERT((offset % 4) == 0); @@ -456,7 +457,7 @@ void emulate_chain(UnpackState& state, u32 max_words, const u32* start, u8* vu_m while (word < max_words) { VifCode code(start[word]); word++; - // fmt::print("{}\n", code.print()); + // lg::print("{}\n", code.print()); switch (code.kind) { case VifCode::Kind::STROW: state.row_init = true; @@ -737,7 +738,7 @@ bool emulate_kick_subroutine(VuMemWrapper& mem, // iblez vi12, L123 // iaddi vi09, vi09, 0x1 vi09_draw_addr_book++; // on to the next chunk - // fmt::print("VI09 now {}\n", vars.vi09); + // lg::print("VI09 now {}\n", vars.vi09); // no need for new adgifs, just a new strgif. if (((s16)vi12_vert_count) > 0) { @@ -759,10 +760,10 @@ bool emulate_kick_subroutine(VuMemWrapper& mem, // ilwr.x vi12, vi09 vi12_vert_count = mem.ilw_data(vi09_draw_addr_book, 0); // next vert count! if (DEBUG) { - fmt::print("continue with this adgif, but new strgif. next {} verts (kick zone now {})\n", - vi12_vert_count, vi06_kick_zone_ptr); + lg::debug("continue with this adgif, but new strgif. next {} verts (kick zone now {})", + vi12_vert_count, vi06_kick_zone_ptr); } - // fmt::print("didn't kick, vi12 now {}\n", vars.vi12); + // lg::print("didn't kick, vi12 now {}\n", vars.vi12); all_draws.push_back(current_draw); current_draw.verts.clear(); return false; @@ -773,10 +774,10 @@ bool emulate_kick_subroutine(VuMemWrapper& mem, u16 vi01 = mem.ilw_data(vi09_draw_addr_book - 1, 1); // ? // ilw.z vi13, -1(vi09) vi13_adgifs = mem.ilw_data(vi09_draw_addr_book - 1, 2); // load new adgif addr - // fmt::print("VI09 loads: {} {}\n", m_ptrs.vi01, vars.vi13); + // lg::print("VI09 loads: {} {}\n", m_ptrs.vi01, vars.vi13); // ibeq vi00, vi12, L126 // ilwr.x vi14, vi10 - // fmt::print("val is {}: {}\n", vars.vi10, ilw_kick_zone(vars.vi10, 0)); + // lg::print("val is {}: {}\n", vars.vi10, ilw_kick_zone(vars.vi10, 0)); // vars.vi14 = mem.ilw_kick_zone(vi10_start_of_vert_kick_data, 0); old vert count if (vi12_vert_count != 0) { // ibltz vi01, L124 @@ -838,10 +839,10 @@ bool emulate_kick_subroutine(VuMemWrapper& mem, // ilwr.x vi12, vi09 vi12_vert_count = mem.ilw_data(vi09_draw_addr_book, 0); if (DEBUG) { - fmt::print("done with adgifs but not packet, now moving on to another with {}\n", - (s16)vi12_vert_count); + lg::debug("done with adgifs but not packet, now moving on to another with {}", + (s16)vi12_vert_count); } - // fmt::print("didn't kick 2, vi12 now {}\n", vars.vi12); + // lg::print("didn't kick 2, vi12 now {}\n", vars.vi12); return false; } @@ -857,7 +858,7 @@ bool emulate_kick_subroutine(VuMemWrapper& mem, // ibgez vi13, L125 // iswr.x vi14, vi10 - // fmt::print("kick zone store: {}\n", vars.vi14); + // lg::print("kick zone store: {}\n", vars.vi14); // store_u32_kick_zone(vars.vi14, vars.vi10, 0); set eop. if (((s16)vi13_adgifs) < 0) { // xgkick vi01 @@ -944,7 +945,7 @@ bool emulate_kick_subroutine(VuMemWrapper& mem, // jr vi15 // ilwr.x vi12, vi09 vi12_vert_count = mem.ilw_data(vi09_draw_addr_book, 0); - // fmt::print("did kick, vi12 now {}\n", vars.vi12); + // lg::print("did kick, vi12 now {}\n", vars.vi12); return false; } @@ -960,10 +961,10 @@ bool emulate_kick_subroutine(VuMemWrapper& mem, all_draws.push_back(current_draw); current_draw.verts.clear(); // iadd vi14, vi14, vi11 - // fmt::print("before add: {}\n", vars.vi14); + // lg::print("before add: {}\n", vars.vi14); // vars.vi14 += vars.vi11; // iswr.x vi14, vi10 - // fmt::print("kick zone store: {}\n", vars.vi14); + // lg::print("kick zone store: {}\n", vars.vi14); // store_u32_kick_zone(vars.vi14, vars.vi10, 0); // lq.xyzw vf04, 664(vi00) // todo don't think I needed that load of ambient @@ -978,7 +979,7 @@ std::vector emulate_tfrag_execution(const level_tools::TFragment& fra VuMemWrapper& mem, TFragColorUnpack& color_indices, TFragExtractStats* /*stats*/) { - // fmt::print("tfrag exec. offset of colors = {}\n", color_indices.unpack_qw_addr); + // lg::print("tfrag exec. offset of colors = {}\n", color_indices.unpack_qw_addr); std::vector all_draws; TFragDraw current_draw; @@ -990,7 +991,7 @@ std::vector emulate_tfrag_execution(const level_tools::TFragment& fra // ilw.w vi08, 4(vi14) | nop u16 vi08_adgif_base = mem.ilw_data(4 + vi14, 3); // is an address, v4/32 unpack. - // fmt::print("------------- VI08 init: {}\n", vars.vi08); + // lg::print("------------- VI08 init: {}\n", vars.vi08); // ilw.z vi09, 4(vi14) | nop u16 vi09_draw_addr_book = mem.ilw_data(4 + vi14, 2); // is an input address, v4/8 unpack (seems small?) @@ -999,17 +1000,17 @@ std::vector emulate_tfrag_execution(const level_tools::TFragment& fra 3 + vi14, 1); // is an input address (v4-8 with strow). a list of addresses for v4-16's with strow - // fmt::print("-------VI03 init: {}\n", vars.vi03); + // lg::print("-------VI03 init: {}\n", vars.vi03); if (DEBUG) { // small, like 9, 54, 66 level_tools::PrintSettings settings; settings.print_tfrag = true; - fmt::print("{}\n", frag.print(settings, 0)); - fmt::print("ints: {} {} {}\n", vi08_adgif_base, vi09_draw_addr_book, vi03_vert_addr_book); + lg::debug("{}", frag.print(settings, 0)); + lg::debug("ints: {} {} {}", vi08_adgif_base, vi09_draw_addr_book, vi03_vert_addr_book); } - // fmt::print("vi09: #x{:x} ({})\n", vars.vi09, vars.vi14); + // lg::print("vi09: #x{:x} ({})\n", vars.vi09, vars.vi14); // fcset 0x0 | nop // iaddi vi07, vi00, -0x1 | nop @@ -1035,7 +1036,7 @@ std::vector emulate_tfrag_execution(const level_tools::TFragment& fra ASSERT(vi03_vert_addr_book < 328); // should be a buffer 0 addr u16 vi02_pre_vtx_ptr = mem.ilw_data(vi03_vert_addr_book, 0); // is an addr? v4/16 with strom if (DEBUG) { - fmt::print("vi02-warmup 0: {}\n", vi02_pre_vtx_ptr); + lg::debug("vi02-warmup 0: {}", vi02_pre_vtx_ptr); } // lq.xyzw vf09, 8(vi14) | nop @@ -1052,8 +1053,8 @@ std::vector emulate_tfrag_execution(const level_tools::TFragment& fra float vf28_w_addr_of_next_vtx = vf28_load_temp.w(); // addr, of v3-32, with 2, 1 if (DEBUG) { - fmt::print("vf28 load 0: x_f {} y_f {} z_u32 {}\n", vf28_x, vf28_y, - float_2_u32(vf28_w_addr_of_next_vtx)); + lg::debug("vf28 load 0: x_f {} y_f {} z_u32 {}", vf28_x, vf28_y, + float_2_u32(vf28_w_addr_of_next_vtx)); }; // they rotate vi06 to alternate the kick zone buffer. @@ -1065,13 +1066,13 @@ std::vector emulate_tfrag_execution(const level_tools::TFragment& fra // ilwr.x vi12, vi09 | nop u16 vi12_vert_count = mem.ilw_data(vi09_draw_addr_book, 0); // some sort of counter? if (DEBUG) { - fmt::print("vi12: 0x{:x}\n", vi12_vert_count); + lg::debug("vi12: 0x{:x}", vi12_vert_count); } // ilwr.z vi13, vi09 | nop u16 vi13_adgifs = mem.ilw_data(vi09_draw_addr_book, 2); if (DEBUG) { - fmt::print("vi13: 0x{:x}\n", vi13_adgifs); + lg::debug("vi13: 0x{:x}", vi13_adgifs); } // mtir vi04, vf28.w | subz.xyz vf24, vf28, vf02 @@ -1092,7 +1093,7 @@ std::vector emulate_tfrag_execution(const level_tools::TFragment& fra // ilwr.y vi02, vi03 | nop vi02_pre_vtx_ptr = mem.ilw_data(vi03_vert_addr_book, 1); if (DEBUG) { - fmt::print("vi02-warmup 1: {}\n", vi02_pre_vtx_ptr); + lg::debug("vi02-warmup 1: {}", vi02_pre_vtx_ptr); } // vertex load @@ -1119,9 +1120,9 @@ std::vector emulate_tfrag_execution(const level_tools::TFragment& fra vf12_vtx_pos_0 = itof0(vf12_vtx_pos_0); if (DEBUG) { - fmt::print("vf28 load 0: x_f {} y_f {} w_u32 {}\n", vf28_x, vf28_y, - float_2_u32(vf28_w_addr_of_next_vtx)); - fmt::print("vtx w0: {}\n", vf12_vtx_pos_0.to_string_aligned()); + lg::debug("vf28 load 0: x_f {} y_f {} w_u32 {}", vf28_x, vf28_y, + float_2_u32(vf28_w_addr_of_next_vtx)); + lg::debug("vtx w0: {}", vf12_vtx_pos_0.to_string_aligned()); }; // mfir.w vf24, vi06 | nop @@ -1168,7 +1169,7 @@ std::vector emulate_tfrag_execution(const level_tools::TFragment& fra // ilwr.z vi02, vi03 | nop vi02_pre_vtx_ptr = mem.ilw_data(vi03_vert_addr_book, 2); if (DEBUG) { - fmt::print("pre-vtx-vi02-warmup 2: {}\n", vi02_pre_vtx_ptr); + lg::debug("pre-vtx-vi02-warmup 2: {}", vi02_pre_vtx_ptr); } // lq.xyzw vf13, 0(vi04) | madday.xyzw ACC, vf07, vf12 @@ -1234,7 +1235,7 @@ std::vector emulate_tfrag_execution(const level_tools::TFragment& fra // ilwr.w vi02, vi03 | mul.xyz vf24, vf24, Q vi02_pre_vtx_ptr = mem.ilw_data(vi03_vert_addr_book, 3); if (DEBUG) { - fmt::print("pre-vtx-vi02-warmup 3: {}\n", vi02_pre_vtx_ptr); + lg::debug("pre-vtx-vi02-warmup 3: {}", vi02_pre_vtx_ptr); } // lq.xyzw vf14, 0(vi04) | madday.xyzw ACC, vf07, vf13 @@ -1355,12 +1356,12 @@ std::vector emulate_tfrag_execution(const level_tools::TFragment& fra // ibeq vi05, vi06, L133 | miniz.w vf13, vf13, vf01 bool take_branch = (vi05_end_of_vert_kick_data == vi06_kick_zone_ptr); - // fmt::print("L129 prog: {} {}\n", vars.vi05, vars.vi06_kick_zone_ptr); + // lg::print("L129 prog: {} {}\n", vars.vi05, vars.vi06_kick_zone_ptr); // vars.vf13_root_pos_1.w() = std::min(vars.vf13_root_pos_1.w(), m_tfrag_data.fog.z()); // sqi.xyzw vf12, vi06 | clipw.xyz vf17, vf17 vertex_pipeline[0].pre_cam_trans_pos = vf12_vtx_pos_0; // todo move down? - // fmt::print("C: vf12 store: {}\n", int_vec_debug(vars.vf12_root_pos_0)); + // lg::print("C: vf12 store: {}\n", int_vec_debug(vars.vf12_root_pos_0)); current_draw.verts.push_back(vertex_pipeline[0]); vi06_kick_zone_ptr++; // m_clip_and_3ffff = clip_xyz_plus_minus(vars.vf17_scaled_pos_1); @@ -1426,14 +1427,14 @@ std::vector emulate_tfrag_execution(const level_tools::TFragment& fra vertex_pipeline[1].stq[0] = vf25_stq_1[0]; vertex_pipeline[1].stq[1] = vf25_stq_1[1]; vertex_pipeline[1].stq[2] = vf25_stq_1[2]; - // fmt::print("A: vf25 store: {}\n", vars.vf25.to_string_aligned()); + // lg::print("A: vf25 store: {}\n", vars.vf25.to_string_aligned()); vi06_kick_zone_ptr++; // vf14 += m_tfrag_data.hvdf_offset; // sqi.xyzw vf21, vi06 | ftoi4.xyzw vf13, vf13 // store_vector_kick_zone(vars.vi06_kick_zone_ptr, vars.vf21); vertex_pipeline[1].rgba = vf21_vtx_rgba_1; - // fmt::print("B: vf21 store: {}\n", int_vec_debug(vars.vf21)); + // lg::print("B: vf21 store: {}\n", int_vec_debug(vars.vf21)); vi06_kick_zone_ptr++; // vars.vf13_root_pos_1 = ftoi4(vars.vf13_root_pos_1); @@ -1462,7 +1463,7 @@ std::vector emulate_tfrag_execution(const level_tools::TFragment& fra // store_vector_kick_zone(vars.vi06_kick_zone_ptr, vars.vf13_root_pos_1); vertex_pipeline[1].pre_cam_trans_pos = vf13_vtx_pos_1; current_draw.verts.push_back(vertex_pipeline[1]); - // fmt::print("C: vf13 store: {}\n", int_vec_debug(vars.vf13_root_pos_1)); + // lg::print("C: vf13 store: {}\n", int_vec_debug(vars.vf13_root_pos_1)); vi06_kick_zone_ptr++; // m_clip_and_3ffff = clip_xyz_plus_minus(vars.vf18_scaled_pos_2); @@ -1517,7 +1518,7 @@ std::vector emulate_tfrag_execution(const level_tools::TFragment& fra // lq.xyzw vf21, 1(vi04) | maddz.xyzw vf12, vf08, vf12 vf21_vtx_rgba_1 = color_indices.load_color_idx(vi04_vtx_ptr + 1); - // fmt::print("vf21 load from: {}\n", vars.vi04 + 1); + // lg::print("vf21 load from: {}\n", vars.vi04 + 1); // vars.vf12_root_pos_0 = m_acc + in.vf08_cam_mat_z * vars.vf12_root_pos_0.z(); // sqi.xyzw vf26, vi06 | add.xyzw vf15, vf15, vf10 @@ -1525,14 +1526,14 @@ std::vector emulate_tfrag_execution(const level_tools::TFragment& fra vertex_pipeline[2].stq[0] = vf26_stq_2[0]; vertex_pipeline[2].stq[1] = vf26_stq_2[1]; vertex_pipeline[2].stq[2] = vf26_stq_2[2]; - // fmt::print("A: vf26 store: {}\n", vars.vf26.to_string_aligned()); + // lg::print("A: vf26 store: {}\n", vars.vf26.to_string_aligned()); vi06_kick_zone_ptr++; // vars.vf15_loop_pos_1 += m_tfrag_data.hvdf_offset; // sqi.xyzw vf22, vi06 | ftoi4.xyzw vf14, vf14 // store_vector_kick_zone(vars.vi06_kick_zone_ptr, vars.vf22); vertex_pipeline[2].rgba = vf22_vtx_rgba_2; - // fmt::print("B: vf22 store: {}\n", int_vec_debug(vars.vf22)); + // lg::print("B: vf22 store: {}\n", int_vec_debug(vars.vf22)); vi06_kick_zone_ptr++; // vars.vf14_loop_pos_0 = ftoi4(vars.vf14_loop_pos_0); @@ -1560,7 +1561,7 @@ std::vector emulate_tfrag_execution(const level_tools::TFragment& fra vertex_pipeline[2].pre_cam_trans_pos = vf14_vtx_pos_2; current_draw.verts.push_back(vertex_pipeline[2]); - // fmt::print("C: vf14 store: {}\n", int_vec_debug(vars.vf14_loop_pos_0)); + // lg::print("C: vf14 store: {}\n", int_vec_debug(vars.vf14_loop_pos_0)); vi06_kick_zone_ptr++; // m_clip_and_3ffff = clip_xyz_plus_minus(vars.vf19_scaled_pos_3); @@ -1623,7 +1624,7 @@ std::vector emulate_tfrag_execution(const level_tools::TFragment& fra vertex_pipeline[3].stq[0] = vf27_vtx_stq_3[0]; vertex_pipeline[3].stq[1] = vf27_vtx_stq_3[1]; vertex_pipeline[3].stq[2] = vf27_vtx_stq_3[2]; - // fmt::print("A: vf27 store: {}\n", vars.vf27.to_string_aligned()); + // lg::print("A: vf27 store: {}\n", vars.vf27.to_string_aligned()); vi06_kick_zone_ptr++; // vars.vf12_root_pos_0 += m_tfrag_data.hvdf_offset; @@ -1631,7 +1632,7 @@ std::vector emulate_tfrag_execution(const level_tools::TFragment& fra // store_vector_kick_zone(vars.vi06_kick_zone_ptr, vars.vf23); vertex_pipeline[3].rgba = vf23_vtx_rgba_3; - // fmt::print("B: vf23 store: {}\n", int_vec_debug(vars.vf23)); + // lg::print("B: vf23 store: {}\n", int_vec_debug(vars.vf23)); vi06_kick_zone_ptr++; // vars.vf15_loop_pos_1 = ftoi4(vars.vf15_loop_pos_1); @@ -1652,7 +1653,7 @@ std::vector emulate_tfrag_execution(const level_tools::TFragment& fra // ibne vi05, vi06, L128 | miniz.w vf12, vf12, vf01 take_branch = (vi05_end_of_vert_kick_data != vi06_kick_zone_ptr); - // fmt::print("kick check: {} {}\n", vars.vi05, vars.vi06_kick_zone_ptr); + // lg::print("kick check: {} {}\n", vars.vi05, vars.vi06_kick_zone_ptr); // vars.vf12_root_pos_0.w() = std::min(vars.vf12_root_pos_0.w(), m_tfrag_data.fog.z()); // sqi.xyzw vf15, vi06 | clipw.xyz vf16, vf16 @@ -1660,7 +1661,7 @@ std::vector emulate_tfrag_execution(const level_tools::TFragment& fra vertex_pipeline[3].pre_cam_trans_pos = vf15_vtx_pos_3; current_draw.verts.push_back(vertex_pipeline[3]); vi06_kick_zone_ptr++; - // fmt::print("C: vf15 store: {}\n", int_vec_debug(vars.vf15_loop_pos_1)); + // lg::print("C: vf15 store: {}\n", int_vec_debug(vars.vf15_loop_pos_1)); // m_clip_and_3ffff = clip_xyz_plus_minus(vars.vf16_scaled_pos_0); if (!take_branch) { @@ -1815,7 +1816,7 @@ u32 remap_texture(u32 original, const std::vector& ma auto masked = original & 0xffffff00; for (auto& t : map) { if (t.original_texid == masked) { - fmt::print("OKAY! remapped!\n"); + lg::info("OKAY! remapped!"); return t.new_texid | 20; } } @@ -1896,11 +1897,11 @@ void process_draw_mode(std::vector& all_draws, u32 original_tex = draw.get_adgif_upper(ad_idx); u32 new_tex = remap_texture(original_tex, map); if (original_tex != new_tex) { - fmt::print("map from 0x{:x} to 0x{:x}\n", original_tex, new_tex); + lg::info("map from 0x{:x} to 0x{:x}", original_tex, new_tex); } u32 tpage = new_tex >> 20; u32 tidx = (new_tex >> 8) & 0b1111'1111'1111; - // fmt::print("texture: {} : {}\n", tpage, tidx); + // lg::print("texture: {} : {}\n", tpage, tidx); draw.tpage = tpage; draw.tex_in_page = tidx; } @@ -1922,8 +1923,8 @@ void process_draw_mode(std::vector& all_draws, update_mode_from_alpha1(val, mode); break; default: - fmt::print("Address {} ({}) is not supported in process_draw_mode\n", - register_address_name(addr), ad_idx); + lg::info("Address {} ({}) is not supported in process_draw_mode", + register_address_name(addr), ad_idx); } } draw.mode = mode; @@ -1975,7 +1976,7 @@ std::map> make_draw_groups(std::vector& } } - // fmt::print(" grouped to get {} draw calls\n", dc); + // lg::print(" grouped to get {} draw calls\n", dc); return result; } @@ -2180,7 +2181,7 @@ void extract_tfrag(const level_tools::DrawableTreeTfrag* tree, } bool ok = verify_node_indices(tree); ASSERT(ok); - // fmt::print(" tree has {} arrays and {} tfragments\n", tree->length, + // lg::print(" tree has {} arrays and {} tfragments\n", tree->length, // as_tfrag_array->length); auto vis_nodes = extract_vis_data(tree, as_tfrag_array->tfragments.front().id); diff --git a/decompiler/level_extractor/extract_tie.cpp b/decompiler/level_extractor/extract_tie.cpp index 45eb884db8..e82796c448 100644 --- a/decompiler/level_extractor/extract_tie.cpp +++ b/decompiler/level_extractor/extract_tie.cpp @@ -2,6 +2,7 @@ #include +#include "common/log/log.h" #include "common/util/FileUtil.h" #include "decompiler/ObjectFile/LinkedObjectFile.h" @@ -45,7 +46,7 @@ bool verify_node_indices_from_array(const level_tools::DrawableInlineArray* arra if (as_tie_instances) { for (auto& elt : as_tie_instances->instances) { if (elt.id != start) { - fmt::print("bad inst: exp {} got {}\n", start, elt.id); + lg::error("bad inst: exp {} got {}", start, elt.id); return false; } start++; @@ -55,7 +56,7 @@ bool verify_node_indices_from_array(const level_tools::DrawableInlineArray* arra } else if (as_nodes) { for (auto& elt : as_nodes->draw_nodes) { if (elt.id != start) { - fmt::print("bad node: exp {} got {}\n", start, elt.id); + lg::error("bad node: exp {} got {}", start, elt.id); return false; } start++; @@ -63,7 +64,7 @@ bool verify_node_indices_from_array(const level_tools::DrawableInlineArray* arra *end = start; return true; } else { - fmt::print("bad node array type: {}\n", array->my_type()); + lg::error("bad node array type: {}", array->my_type()); return false; } } @@ -550,7 +551,7 @@ void update_proto_info(std::vector* out, // try remapping it u32 new_tex = remap_texture(original_tex, map); if (original_tex != new_tex) { - fmt::print("map from 0x{:x} to 0x{:x}\n", original_tex, new_tex); + lg::info("map from 0x{:x} to 0x{:x}", original_tex, new_tex); } // texture the texture page/texture index, and convert to a PC port texture ID u32 tpage = new_tex >> 20; @@ -565,7 +566,7 @@ void update_proto_info(std::vector* out, memcpy(&adgif.second_w, &gif_data.at(16 * (tex_idx * 5 + 1) + 12), 4); // todo: figure out if this matters. maybe this is decal? if (ra_tex0_val == 0x800000000) { - // fmt::print("texture {} in {} has weird tex setting\n", tex->second.name, proto.name); + // lg::print("texture {} in {} has weird tex setting\n", tex->second.name, proto.name); } // mipmap settings. we ignore, but get the hidden value @@ -784,7 +785,7 @@ void emulate_tie_prototype_program(std::vector& protos) { // vi06 will be one of our gifbufs we can use. u16 vi06; memcpy(&vi06, &vf_gifbufs.y(), sizeof(u16)); - // fmt::print("vi06: {}\n", vi06); + // lg::print("vi06: {}\n", vi06); ASSERT(vi06 == 470 || vi06 == 286 || vi06 == 654); // should be one of the three gifbufs. // lqi.xyzw vf02, vi_point_ptr | suby.xz vf_gifbufs, vf_gifbufs, vf_gifbufs @@ -801,7 +802,7 @@ void emulate_tie_prototype_program(std::vector& protos) { // and vi05 is our other buffer. u16 vi05; memcpy(&vi05, &vf_gifbufs.x(), sizeof(u16)); - // fmt::print("vi05: {}\n", vi05); + // lg::print("vi05: {}\n", vi05); // check that we understand the buffer rotation. if (vi06 == 470) { ASSERT(vi05 == 286); @@ -831,7 +832,7 @@ void emulate_tie_prototype_program(std::vector& protos) { // store adgifs in one buffer. frag.prog_info.adgif_offset_in_gif_buf_qw.push_back(vi03 - vi05); - // fmt::print("adgifs at offset {}\n", frag.prog_info.adgif_offset_in_gif_buf_qw.back()); + // lg::print("adgifs at offset {}\n", frag.prog_info.adgif_offset_in_gif_buf_qw.back()); // sqi.xyzw vf01, vi03 | nop // sqi.xyzw vf02, vi03 | nop // sqi.xyzw vf03, vi03 | nop @@ -889,7 +890,7 @@ void emulate_tie_prototype_program(std::vector& protos) { // u16 vf04_w = frag.other_gif_data.at(11); ASSERT(vi_ind >= frag.adgifs.size()); // at least 1 draw per shader. ASSERT(vi_ind < 1000); // check for insane value. - // fmt::print("got: {}, other size: {}\n", vi_ind, frag.other_gif_data.size()); + // lg::print("got: {}, other size: {}\n", vi_ind, frag.other_gif_data.size()); // iaddi vi_point_ptr, vi_point_ptr, -0x2 | subw.w vf07, vf07, vf07 vi_point_ptr -= 2; @@ -910,7 +911,7 @@ void emulate_tie_prototype_program(std::vector& protos) { vi04 = frag.ilw_other_gif(vi_point_ptr, 2); // offset - // fmt::print("[{}] 7: {} 8: {} 4: {}, for {}\n", vi_point_ptr, vi07, vi08, vi04, vi_ind - 1); + // lg::print("[{}] 7: {} 8: {} 4: {}, for {}\n", vi_point_ptr, vi07, vi08, vi04, vi_ind - 1); // iaddi vi_ind, vi_ind, -0x1 | nop vi_ind--; @@ -934,7 +935,7 @@ void emulate_tie_prototype_program(std::vector& protos) { vi_ind--; // dec remaining tag // sq.xyzw vf07, 0(vi03) | nop info.address = vi03 - vi05; // store the template. but this doesn't have size or anything. - // fmt::print("strgif at {}, {}\n", vi03, vi04); + // lg::print("strgif at {}, {}\n", vi03, vi04); // iswr.x vi07, vi03 | nop info.nloop = vi07 & 0x7fff; @@ -961,7 +962,7 @@ void emulate_tie_prototype_program(std::vector& protos) { // ibne vi00, vi_ind, L3 | nop // lq.xyz vf07, 967(vi08) | nop next_mode = vi08; - // fmt::print("[{}] 7: {} 8: {} 4: {}, for {}\n", vi_point_ptr, vi07, vi08, vi04, vi_ind); + // lg::print("[{}] 7: {} 8: {} 4: {}, for {}\n", vi_point_ptr, vi07, vi08, vi04, vi_ind); frag.prog_info.str_gifs.push_back(info); } @@ -1017,13 +1018,13 @@ void emulate_tie_prototype_program(std::vector& protos) { vf05 = muli64_xyz(vf05); // mtir vi07, vf04.y | itof0.xyzw vf06, vf06 vi07 = vf04_y; - // fmt::print("bonus points: {}\n", vi07); + // lg::print("bonus points: {}\n", vi07); vf06 = itof0(vf06); // L5: Vector4f vf07; top_of_points_loop: - // fmt::print("{}/{}\n", vi05, vi06); + // lg::print("{}/{}\n", vi05, vi06); // lqi.xyzw vf07, vi05 | itof12.xyz vf16, vf16 vf07 = frag.lq_points_allow_past_end(vi05); vi05++; @@ -1278,10 +1279,10 @@ void emulate_tie_prototype_program(std::vector& protos) { void debug_print_info(const std::vector& out) { for (auto& proto : out) { - fmt::print("[{:40}]\n", proto.name); - fmt::print(" generic: {}\n", proto.uses_generic); - fmt::print(" use count: {}\n", proto.instances.size()); - fmt::print(" stiffness: {}\n", proto.stiffness); + lg::debug("[{:40}]", proto.name); + lg::debug(" generic: {}", proto.uses_generic); + lg::debug(" use count: {}", proto.instances.size()); + lg::debug(" stiffness: {}", proto.stiffness); } } @@ -1379,7 +1380,7 @@ void emulate_tie_instance_program(std::vector& protos) { // iadd vi_tgt_bp2_ptr, vi_tgt_bp2_ptr, vi01 | nop tgt_bp2_ptr += vi01; - // fmt::print("b tgts: {} {}\n", tgt_bp1_ptr, tgt_bp2_ptr); + // lg::print("b tgts: {} {}\n", tgt_bp1_ptr, tgt_bp2_ptr); // lqi.xyzw vf_vtx2, vi_point_ptr | mul.xyz vf_pos02, vf_pos02, Q // div Q, vf00.w, vf_pos13.w | mul.xyz vf_tex0, vf_tex0, Q // mtir vi_ind, vf_inds.z | addx.w vtx_0, vtx_0, vf_gifbufs @@ -1388,13 +1389,13 @@ void emulate_tie_instance_program(std::vector& protos) { // iadd vi_tgt_ip2_ptr, vi_tgt_ip2_ptr, vi01 | madday.xyzw ACC, vf_mtx1, vf_vtx2 tgt_ip1_ptr += vi01; tgt_ip2_ptr += vi01; - // fmt::print("i tgts: {} {}\n", tgt_ip1_ptr, tgt_ip2_ptr); + // lg::print("i tgts: {} {}\n", tgt_ip1_ptr, tgt_ip2_ptr); // lq.xyzw vf_mtx3, 838(vi_ind) | ftoi4.xyz vf_res02, vf_pos02 // ibeq vi_tgt_bp1_ptr, vi_dest_ptr, L40 | maddz.xyzw vf_pos02, vf_clr1, vf_vtx2 // iadd vi_kick_addr, vi_kick_addr, vi01 | nop kick_addr += vi01; if (tgt_bp1_ptr == dest_ptr) { - fmt::print("DRAW FINISH 1 (no points)\n"); + lg::info("DRAW FINISH 1 (no points)"); goto program_end; } @@ -1485,7 +1486,7 @@ void emulate_tie_instance_program(std::vector& protos) { float vtx_w = vert_pos.w() + frag.prog_info.gifbufs.x(); dest_ptr = float_to_u16(vtx_w); auto tex_coord = frag.lq_points(point_ptr); - // fmt::print("texw: [{}] {}\n", point_ptr, tex_coord.w()); + // lg::print("texw: [{}] {}\n", point_ptr, tex_coord.w()); point_ptr++; float tex_w = tex_coord.w() + frag.prog_info.gifbufs.x(); u16 dest2_ptr = float_to_u16(tex_w); @@ -1499,7 +1500,7 @@ void emulate_tie_instance_program(std::vector& protos) { vertex_info.tex.y() = tex_coord.y(); vertex_info.tex.z() = tex_coord.z(); - // fmt::print("double draw: {} {}\n", dest_ptr, dest2_ptr); + // lg::print("double draw: {} {}\n", dest_ptr, dest2_ptr); bool inserted = frag.vertex_by_dest_addr.insert({(u32)dest_ptr, vertex_info}).second; ASSERT(inserted); @@ -1974,8 +1975,8 @@ void update_mode_from_alpha1(u64 val, DrawMode& mode) { } else { - fmt::print("unsupported blend: a {} b {} c {} d {}\n", (int)reg.a_mode(), (int)reg.b_mode(), - (int)reg.c_mode(), (int)reg.d_mode()); + lg::error("unsupported blend: a {} b {} c {} d {}", (int)reg.a_mode(), (int)reg.b_mode(), + (int)reg.c_mode(), (int)reg.d_mode()); mode.set_alpha_blend(DrawMode::AlphaBlend::SRC_DST_SRC_DST); ASSERT(false); } diff --git a/decompiler/level_extractor/tfrag_tie_fixup.cpp b/decompiler/level_extractor/tfrag_tie_fixup.cpp index 3e2f93c80b..3bd89bd81c 100644 --- a/decompiler/level_extractor/tfrag_tie_fixup.cpp +++ b/decompiler/level_extractor/tfrag_tie_fixup.cpp @@ -4,6 +4,7 @@ #include #include +#include "common/log/log.h" #include "common/math/Vector.h" #include "common/util/Assert.h" @@ -246,7 +247,7 @@ void build_graph(std::vector& nodes, int group_a = info_a.source_group; int group_b = info_b.source_group; if (info_a.source_group == info_b.source_group) { - fmt::print("duplicate edge in group!\n"); // ?? + lg::print("duplicate edge in group!\n"); // ?? continue; } @@ -453,4 +454,4 @@ void fixup_and_unstrip_tfrag_tie(const std::vector& stripped_indices, // Part 7 make_final_indices(groups, unstripped); -} \ No newline at end of file +} diff --git a/decompiler/main.cpp b/decompiler/main.cpp index e1c63afddc..e24f8fa579 100644 --- a/decompiler/main.cpp +++ b/decompiler/main.cpp @@ -69,7 +69,7 @@ int main(int argc, char** argv) { in_folder = in_folder / config.game_name; // Verify the in_folder is correct if (!exists(in_folder)) { - fmt::print("Aborting - 'in_folder' does not exist '{}'\n", in_folder.string()); + lg::error("Aborting - 'in_folder' does not exist '{}'", in_folder.string()); return 1; } @@ -80,9 +80,9 @@ int main(int argc, char** argv) { // Warning message if expected ELF isn't found, user could be using bad assets / didn't extract // the ISO properly if (!config.expected_elf_name.empty() && !exists(in_folder / config.expected_elf_name)) { - fmt::print( + lg::error( "WARNING - '{}' does not contain the expected ELF file '{}'. Was the ISO extracted " - "properly or is there a version mismatch?\n", + "properly or is there a version mismatch?", in_folder.string(), config.expected_elf_name); } @@ -90,11 +90,11 @@ int main(int argc, char** argv) { Timer decomp_timer; - fmt::print("[Mem] Top of main: {} MB\n", get_peak_rss() / (1024 * 1024)); + lg::info("[Mem] Top of main: {} MB\n", get_peak_rss() / (1024 * 1024)); init_opcode_info(); - fmt::print("[Mem] After init: {} MB\n", get_peak_rss() / (1024 * 1024)); + lg::info("[Mem] After init: {} MB\n", get_peak_rss() / (1024 * 1024)); std::vector dgos, objs, strs; for (const auto& dgo_name : config.dgo_names) { @@ -113,13 +113,13 @@ int main(int argc, char** argv) { file_util::create_dir_if_needed(file_util::get_jak_project_dir() / "debug_out"); } - fmt::print("[Mem] After config read: {} MB\n", get_peak_rss() / (1024 * 1024)); + lg::info("[Mem] After config read: {} MB", get_peak_rss() / (1024 * 1024)); // build file database lg::info("Setting up object file DB..."); ObjectFileDB db(dgos, fs::path(config.obj_file_name_map_file), objs, strs, config); - fmt::print("[Mem] After DB setup: {} MB\n", get_peak_rss() / (1024 * 1024)); + lg::info("[Mem] After DB setup: {} MB", get_peak_rss() / (1024 * 1024)); // write out DGO file info file_util::write_text_file(out_folder / "dgo.txt", db.generate_dgo_listing()); @@ -136,10 +136,10 @@ int main(int argc, char** argv) { // process files (required for all analysis) db.process_link_data(config); - fmt::print("[Mem] After link data: {} MB\n", get_peak_rss() / (1024 * 1024)); + lg::info("[Mem] After link data: {} MB", get_peak_rss() / (1024 * 1024)); db.find_code(config); db.process_labels(); - fmt::print("[Mem] After code: {} MB\n", get_peak_rss() / (1024 * 1024)); + lg::info("[Mem] After code: {} MB", get_peak_rss() / (1024 * 1024)); // top level decompile (do this before printing asm so we get function names) if (config.find_functions) { @@ -168,7 +168,7 @@ int main(int argc, char** argv) { config.hacks.types_with_bad_inspect_methods); } - fmt::print("[Mem] After decomp: {} MB\n", get_peak_rss() / (1024 * 1024)); + lg::info("[Mem] After decomp: {} MB", get_peak_rss() / (1024 * 1024)); // write out all symbols file_util::write_text_file(out_folder / "all-syms.gc", db.dts.dump_symbol_types()); @@ -194,7 +194,7 @@ int main(int argc, char** argv) { } } - fmt::print("[Mem] After text: {} MB\n", get_peak_rss() / (1024 * 1024)); + lg::info("[Mem] After text: {} MB", get_peak_rss() / (1024 * 1024)); decompiler::TextureDB tex_db; if (config.process_tpages || config.levels_extract) { @@ -206,7 +206,7 @@ int main(int argc, char** argv) { } } - fmt::print("[Mem] After textures: {} MB\n", get_peak_rss() / (1024 * 1024)); + lg::info("[Mem] After textures: {} MB", get_peak_rss() / (1024 * 1024)); auto replacements_path = file_util::get_jak_project_dir() / "texture_replacements"; if (fs::exists(replacements_path)) { tex_db.replace_textures(replacements_path); @@ -227,7 +227,7 @@ int main(int argc, char** argv) { config.rip_levels, config.extract_collision, level_out_path); } - fmt::print("[Mem] After extraction: {} MB\n", get_peak_rss() / (1024 * 1024)); + lg::info("[Mem] After extraction: {} MB", get_peak_rss() / (1024 * 1024)); if (!config.audio_dir_file_name.empty()) { auto streaming_audio_in = in_folder / "VAG"; diff --git a/decompiler/types2/ForwardProp.cpp b/decompiler/types2/ForwardProp.cpp index 6bf28da1bc..be3ef66811 100644 --- a/decompiler/types2/ForwardProp.cpp +++ b/decompiler/types2/ForwardProp.cpp @@ -1,3 +1,4 @@ +#include "common/log/log.h" #include "common/util/BitUtils.h" #include "decompiler/IR2/AtomicOp.h" @@ -56,8 +57,8 @@ void types2_from_ambiguous_deref(types2::Instruction& instr, } // the previously selected type is gone... not sure what we can do here, but complain and // use the first one (highest scored). - fmt::print("type2_from_ambiguous_deref: wanted type {}, but couldn't find it.\n", - desired_type.print()); + lg::print("type2_from_ambiguous_deref: wanted type {}, but couldn't find it.\n", + desired_type.print()); type.type = TP_Type::make_from_ts(out.front().result_type); return; } else { @@ -379,7 +380,7 @@ void types2_for_label(types2::Type& type_out, env.file->labels.at(label_idx).name)); } else { auto& name = env.file->labels.at(label_idx).name; - // fmt::print("Encountered unknown label: {}\n", name); + // lg::print("Encountered unknown label: {}\n", name); instr.unknown_label_tag = std::make_unique(); instr.unknown_label_tag->label_idx = label_idx; instr.unknown_label_tag->label_name = name; @@ -1035,7 +1036,7 @@ void types2_addr_on_stack(types2::Type& type_out, throw std::runtime_error( fmt::format("Failed to find a stack variable or structure at offset {}", offset)); } else { - // fmt::print("Encountered unknown stack address {} : {}\n", env.func->name(), offset); + // lg::print("Encountered unknown stack address {} : {}\n", env.func->name(), offset); instr.unknown_stack_structure_tag = std::make_unique(); instr.unknown_stack_structure_tag->stack_offset = offset; type_out.tag.unknown_stack_structure = instr.unknown_stack_structure_tag.get(); @@ -1363,8 +1364,8 @@ void types2_for_add(types2::Type& type_out, } } - fmt::print("checks: {} {} {}\n", tc(dts, TypeSpec("structure"), arg1_type), - !expr.get_arg(0).is_int(), is_int_or_uint(dts, arg0_type)); + lg::print("checks: {} {} {}\n", tc(dts, TypeSpec("structure"), arg1_type), + !expr.get_arg(0).is_int(), is_int_or_uint(dts, arg0_type)); throw std::runtime_error( fmt::format("add failed: {} {}\n", arg0_type.print(), arg1_type.print())); @@ -1800,11 +1801,11 @@ void StoreOp::propagate_types2(types2::Instruction& instr, // temp warning if we have multiple store types if (location_type.size() > 1) { - fmt::print("StoreOp::propagate_types2: multiple possible store types: "); + lg::print("StoreOp::propagate_types2: multiple possible store types: "); for (auto& t : location_type) { - fmt::print("{} ", t.print()); + lg::print("{} ", t.print()); } - fmt::print("\n"); + lg::print("\n"); } if (backprop_tagged_type(location_type.at(0), *value_type, dts)) { @@ -2075,13 +2076,13 @@ bool load_var_op_determine_type(types2::Type& type_out, } } else { /* - fmt::print("ambiguous deref. Choices are:\n"); + lg::print("ambiguous deref. Choices are:\n"); for (auto& result : rd.results) { - fmt::print(" {} : ", result.result_type.print()); + lg::print(" {} : ", result.result_type.print()); for (auto& tok : result.tokens) { - fmt::print("{} ", tok.print()); + lg::print("{} ", tok.print()); } - fmt::print("\n"); + lg::print("\n"); } */ diff --git a/decompiler/types2/types2.cpp b/decompiler/types2/types2.cpp index 8ab979aa4a..6c473acce8 100644 --- a/decompiler/types2/types2.cpp +++ b/decompiler/types2/types2.cpp @@ -2,6 +2,8 @@ #include +#include "common/log/log.h" + #include "decompiler/ObjectFile/LinkedObjectFile.h" #include "decompiler/types2/types2.h" #include "decompiler/util/type_utils.h" @@ -316,7 +318,7 @@ void backprop_from_preds(FunctionCache& cache, tag->is_reg = true; tag->reg = reg; tag->type_to_clear = &cache.blocks.at(succ_idx).start_type_state[reg]->type; - // fmt::print("mark to clear {}\n", succ_idx); + // lg::print("mark to clear {}\n", succ_idx); // add the tag to the type. auto& st = succ_cblock.start_types[reg]; ASSERT(!st.tag.has_tag()); @@ -344,7 +346,7 @@ void backprop_from_preds(FunctionCache& cache, if (my_tag->updated) { tags_updated = true; my_tag->updated = false; - // fmt::print("clearing {}\n", block_idx); + // lg::print("clearing {}\n", block_idx); cblock.needs_run = true; // maybe? *my_tag->type_to_clear = {}; // meh.. } @@ -403,9 +405,9 @@ bool tp_lca(types2::TypeState* combined, const types2::TypeState& add, Decompile bool diff = false; auto comb = combined->try_find_stack_spill_slot(x->slot); if (!comb) { - fmt::print("failed to find {}\n", x->slot); + lg::print("failed to find {}\n", x->slot); for (auto& x : combined->stack_slot_types) { - fmt::print("x = {}\n", x->slot); + lg::print("x = {}\n", x->slot); } } ASSERT(comb); @@ -447,7 +449,7 @@ bool propagate_block(FunctionCache& cache, auto& aop = func.ir2.atomic_ops->ops.at(instr->aop_idx); TypePropExtras extras; extras.tags_locked = tag_lock; - // fmt::print("run: {}\n", aop->to_string(func.ir2.env)); + // lg::print("run: {}\n", aop->to_string(func.ir2.env)); try { aop->propagate_types2(*instr, func.ir2.env, *previous_typestate, *func.ir2.env.dts, extras); @@ -682,7 +684,7 @@ end_type_pass: std::string error; if (!convert_to_old_format(out, function_cache, error, input.func->ir2.env.casts(), input.func->ir2.env.stack_casts(), *input.dts, hit_error)) { - fmt::print("Failed convert_to_old_format: {}\n", error); + lg::print("Failed convert_to_old_format: {}\n", error); } else { input.func->ir2.env.types_succeeded = true; auto last_type = out.op_end_types.back().get(Register(Reg::GPR, Reg::V0)).typespec(); @@ -717,7 +719,7 @@ end_type_pass: for (auto& info : env.stack_slot_entries) { info.second.typespec = info.second.tp_type.typespec(); // debug - // fmt::print("STACK {} : {} ({})\n", info.first, info.second.typespec.print(), + // lg::print("STACK {} : {} ({})\n", info.first, info.second.typespec.print(), // info.second.tp_type.print()); } diff --git a/decompiler/util/DecompilerTypeSystem.cpp b/decompiler/util/DecompilerTypeSystem.cpp index c2532caa94..04753bc512 100644 --- a/decompiler/util/DecompilerTypeSystem.cpp +++ b/decompiler/util/DecompilerTypeSystem.cpp @@ -102,7 +102,7 @@ void DecompilerTypeSystem::parse_type_defs(const std::vector& file_ } } catch (std::exception& e) { auto info = m_reader.db.get_info_for(o); - lg::error("{} when parsing decompiler type file:\n{}", e.what(), info); + lg::error("{} when parsing decompiler type file:{}", e.what(), info); throw e; } }); @@ -184,8 +184,8 @@ void DecompilerTypeSystem::add_symbol(const std::string& name, } else { if (ts.tc(type_spec, skv->second)) { } else { - lg::warn("Attempting to redefine type of symbol {} from {} to {}\n", name, - skv->second.print(), type_spec.print()); + lg::warn("Attempting to redefine type of symbol {} from {} to {}", name, skv->second.print(), + type_spec.print()); throw std::runtime_error("Type redefinition"); } } diff --git a/decompiler/util/TP_Type.h b/decompiler/util/TP_Type.h index 476397ba20..f8ffe87e7b 100644 --- a/decompiler/util/TP_Type.h +++ b/decompiler/util/TP_Type.h @@ -1,9 +1,9 @@ #pragma once #include #include +#include #include "common/common_types.h" -#include "common/log/log.h" #include "common/type_system/TypeSpec.h" #include "common/util/Assert.h" diff --git a/decompiler/util/data_decompile.cpp b/decompiler/util/data_decompile.cpp index 45e911e91d..a5c096005d 100644 --- a/decompiler/util/data_decompile.cpp +++ b/decompiler/util/data_decompile.cpp @@ -77,11 +77,11 @@ goos::Object decompile_at_label_with_hint(const LabelInfo& hint, // TODO - having this logic here isn't great. auto stride = align(field_type_info->get_size_in_memory(), field_type_info->get_inline_array_stride_alignment()); - fmt::print("decompiler {} stride {} {} = {}\n", field_type_info->get_name(), - field_type_info->get_size_in_memory(), - field_type_info->get_inline_array_stride_alignment(), - align(field_type_info->get_size_in_memory(), - field_type_info->get_inline_array_stride_alignment())); + lg::info("decompiler {} stride {} {} = {}", field_type_info->get_name(), + field_type_info->get_size_in_memory(), + field_type_info->get_inline_array_stride_alignment(), + align(field_type_info->get_size_in_memory(), + field_type_info->get_inline_array_stride_alignment())); if (dynamic_cast(field_type_info)) { throw std::runtime_error("Plan basic arrays not supported yet"); @@ -363,7 +363,7 @@ goos::Object decomp_ref_to_integer_array_guess_size( const LinkedObjectFile* /*file*/, const TypeSpec& array_elt_type, int stride) { - // fmt::print("Decomp decomp_ref_to_inline_array_guess_size {}\n", array_elt_type.print()); + // lg::print("Decomp decomp_ref_to_inline_array_guess_size {}\n", array_elt_type.print()); // verify types auto elt_type_info = ts.lookup_type(array_elt_type); @@ -392,13 +392,13 @@ goos::Object decomp_ref_to_integer_array_guess_size( end_offset = end_label.offset; } - // fmt::print("Data is from {} to {}\n", start_label.name, end_label.name); + // lg::print("Data is from {} to {}\n", start_label.name, end_label.name); // now we can figure out the size int size_bytes = end_offset - start_label.offset; int size_elts = size_bytes / stride; // 32 bytes per ocean-near-index int leftover_bytes = size_bytes % stride; - // fmt::print("Size is {} bytes ({} elts), with {} bytes left over\n", size_bytes, + // lg::print("Size is {} bytes ({} elts), with {} bytes left over\n", size_bytes, // size_elts,leftover_bytes); // if we have leftover, should verify that its all zeros, or that it's the type pointer @@ -440,7 +440,7 @@ goos::Object decomp_ref_to_inline_array_guess_size( const LinkedObjectFile* file, const TypeSpec& array_elt_type, int stride) { - // fmt::print("Decomp decomp_ref_to_inline_array_guess_size {}\n", array_elt_type.print()); + // lg::print("Decomp decomp_ref_to_inline_array_guess_size {}\n", array_elt_type.print()); // verify the stride matches the type system auto elt_type_info = ts.lookup_type(array_elt_type); @@ -470,13 +470,13 @@ goos::Object decomp_ref_to_inline_array_guess_size( end_offset = end_label.offset; } - // fmt::print("Data is from {} to {}\n", start_label.name, end_label.name); + // lg::print("Data is from {} to {}\n", start_label.name, end_label.name); // now we can figure out the size int size_bytes = end_offset - start_label.offset; int size_elts = size_bytes / stride; // 32 bytes per ocean-near-index int leftover_bytes = size_bytes % stride; - // fmt::print("Size is {} bytes ({} elts), with {} bytes left over\n", size_bytes, + // lg::print("Size is {} bytes ({} elts), with {} bytes left over\n", size_bytes, // size_elts,leftover_bytes); // if we have leftover, should verify that its all zeros, or that it's the type pointer @@ -643,7 +643,7 @@ goos::Object decompile_sound_spec(const TypeSpec& type, const TypeSystem& ts, const LinkedObjectFile* file) { // auto normal = decompile_structure(type, label, labels, words, ts, file, false); - // fmt::print("Doing: {}\n", normal.print()); + // lg::print("Doing: {}\n", normal.print()); auto uncast_type_info = ts.lookup_type(type); auto type_info = dynamic_cast(uncast_type_info); if (!type_info) { @@ -863,7 +863,7 @@ goos::Object decompile_structure(const TypeSpec& type, if (is_basic || !type_info->is_packed()) { throw std::runtime_error(error); } else { - // fmt::print("{}\n", error); + // lg::print("{}\n", error); } } diff --git a/decompiler/util/sparticle_decompile.cpp b/decompiler/util/sparticle_decompile.cpp index 8a0f829c49..c1747c338c 100644 --- a/decompiler/util/sparticle_decompile.cpp +++ b/decompiler/util/sparticle_decompile.cpp @@ -326,10 +326,7 @@ goos::Object decompile_sparticle_rot_x(const std::vector& words, goos::Object decompile_sparticle_int_with_rand_init(const std::vector& words, const std::string& field_name, const std::string& flag_name) { - if (flag_name != "plain-v1") { - fmt::print("Bad {} {}\n", field_name, flag_name); - } - ASSERT(flag_name == "plain-v1"); + ASSERT_MSG(flag_name == "plain-v1", fmt::format("Bad {} {}\n", field_name, flag_name)); if (word_as_s32(words.at(2)) == 0 && word_as_s32(words.at(3)) == 1) { return decompile_sparticle_int_init(words, field_name, flag_name); } @@ -451,7 +448,7 @@ goos::Object decompile_sparticle_group_item(const TypeSpec& type, const TypeSystem& ts, const LinkedObjectFile* /*file*/) { // auto normal = decompile_structure(type, label, labels, words, ts, file, false); - // fmt::print("Doing: {}\n", normal.print()); + // lg::print("Doing: {}\n", normal.print()); auto uncast_type_info = ts.lookup_type(type); auto type_info = dynamic_cast(uncast_type_info); if (!type_info) { @@ -530,7 +527,7 @@ goos::Object decompile_sparticle_group_item(const TypeSpec& type, } result += ')'; - // fmt::print("Result: {}\n", result); + // lg::print("Result: {}\n", result); return pretty_print::to_symbol(result); } @@ -541,7 +538,7 @@ goos::Object decompile_sparticle_field_init(const TypeSpec& type, const TypeSystem& ts, const LinkedObjectFile* file) { auto normal = decompile_structure(type, label, labels, words, ts, file, false); - // fmt::print("Doing: {}\n", normal.print()); + // lg::print("Doing: {}\n", normal.print()); auto uncast_type_info = ts.lookup_type(type); auto type_info = dynamic_cast(uncast_type_info); if (!type_info) { @@ -623,7 +620,7 @@ goos::Object decompile_sparticle_field_init(const TypeSpec& type, } } - // fmt::print("Result: {}\n\n", result.print()); + // lg::print("Result: {}\n\n", result.print()); return result; } @@ -708,7 +705,7 @@ goos::Object decompile_sparticle_field_init(const DefpartElement::StaticInfo::Pa } } - // fmt::print("Result: {}\n\n", result.print()); + // lg::print("Result: {}\n\n", result.print()); return result; } } // namespace decompiler diff --git a/game/graphics/display.cpp b/game/graphics/display.cpp index 652f2e4a62..25c29501e0 100644 --- a/game/graphics/display.cpp +++ b/game/graphics/display.cpp @@ -85,6 +85,7 @@ void GfxDisplay::restore_display_settings() { if (!file_util::file_exists(file_path)) { return; } + lg::info("reading {}", file_path); auto raw = file_util::read_text_file(file_path); auto json = parse_commented_json(raw, "display-settings.json"); if (json.contains("window_xpos")) { diff --git a/game/graphics/gfx.cpp b/game/graphics/gfx.cpp index b9d1d58045..4452f0d5a5 100644 --- a/game/graphics/gfx.cpp +++ b/game/graphics/gfx.cpp @@ -148,6 +148,7 @@ void SavePeripheralSettings() { void LoadPeripheralSettings(const ghc::filesystem::path& filepath) { Pad::DefaultMapping(g_settings.pad_mapping_info); + lg::info("reading {}", filepath.string()); auto file_txt = file_util::read_text_file(filepath); auto configuration = parse_commented_json(file_txt, filepath.string()); diff --git a/game/graphics/opengl_renderer/BucketRenderer.cpp b/game/graphics/opengl_renderer/BucketRenderer.cpp index 64129a19c2..e14717f598 100644 --- a/game/graphics/opengl_renderer/BucketRenderer.cpp +++ b/game/graphics/opengl_renderer/BucketRenderer.cpp @@ -28,10 +28,9 @@ void EmptyBucketRenderer::render(DmaFollower& dma, // CALL auto call_tag = dma.current_tag(); dma.read_and_advance(); - if (!(call_tag.kind == DmaTag::Kind::CALL && call_tag.qwc == 0)) { - fmt::print("Bucket renderer {} ({}) was supposed to be empty, but wasn't\n", m_my_id, m_name); - } - ASSERT(call_tag.kind == DmaTag::Kind::CALL && call_tag.qwc == 0); + ASSERT_MSG(call_tag.kind == DmaTag::Kind::CALL && call_tag.qwc == 0, + fmt::format("Bucket renderer {} ({}) was supposed to be empty, but wasn't\n", + m_my_id, m_name)); // in the default reg buffer: ASSERT(dma.current_tag_offset() == render_state->default_regs_buffer); diff --git a/game/graphics/opengl_renderer/DirectRenderer.cpp b/game/graphics/opengl_renderer/DirectRenderer.cpp index 7dac2af981..de0b76bb89 100644 --- a/game/graphics/opengl_renderer/DirectRenderer.cpp +++ b/game/graphics/opengl_renderer/DirectRenderer.cpp @@ -311,11 +311,10 @@ void DirectRenderer::update_gl_texture(SharedRenderState* render_state, int unit if (!tex) { // TODO Add back if (state.texture_base_ptr >= 8160 && state.texture_base_ptr <= 8600) { - fmt::print("Failed to find texture at {}, using random (eye zone)\n", state.texture_base_ptr); - + lg::warn("Failed to find texture at {}, using random (eye zone)", state.texture_base_ptr); tex = render_state->texture_pool->get_placeholder_texture(); } else { - fmt::print("Failed to find texture at {}, using random\n", state.texture_base_ptr); + lg::warn("Failed to find texture at {}, using random", state.texture_base_ptr); tex = render_state->texture_pool->get_placeholder_texture(); } } @@ -582,9 +581,8 @@ void DirectRenderer::render_gif(const u8* data, handle_tex0_1_packed(data + offset); break; default: - fmt::print("Register {} is not supported in packed mode yet\n", - reg_descriptor_name(reg_desc[reg])); - ASSERT(false); + ASSERT_MSG(false, fmt::format("Register {} is not supported in packed mode yet\n", + reg_descriptor_name(reg_desc[reg]))); } offset += 16; // PACKED = quadwords } @@ -606,9 +604,8 @@ void DirectRenderer::render_gif(const u8* data, handle_xyzf2(register_data, render_state, prof); break; default: - fmt::print("Register {} is not supported in reglist mode yet\n", - reg_descriptor_name(reg_desc[reg])); - ASSERT(false); + ASSERT_MSG(false, fmt::format("Register {} is not supported in reglist mode yet\n", + reg_descriptor_name(reg_desc[reg]))); } offset += 8; // PACKED = quadwords } diff --git a/game/graphics/opengl_renderer/DirectRenderer.h b/game/graphics/opengl_renderer/DirectRenderer.h index 246843ce62..244b0ce78d 100644 --- a/game/graphics/opengl_renderer/DirectRenderer.h +++ b/game/graphics/opengl_renderer/DirectRenderer.h @@ -3,7 +3,6 @@ #include #include "common/dma/gs.h" -#include "common/log/log.h" #include "common/math/Vector.h" #include "common/util/SmallVector.h" diff --git a/game/graphics/opengl_renderer/DirectRenderer2.cpp b/game/graphics/opengl_renderer/DirectRenderer2.cpp index 30383256fb..5d092dca28 100644 --- a/game/graphics/opengl_renderer/DirectRenderer2.cpp +++ b/game/graphics/opengl_renderer/DirectRenderer2.cpp @@ -97,7 +97,7 @@ void DirectRenderer2::reset_state() { m_state = {}; m_stats = {}; if (m_next_free_draw || m_vertices.next_vertex || m_vertices.next_index) { - fmt::print("[{}] Call to reset_state while there was pending draw data!\n", m_name); + lg::warn("[{}] Call to reset_state while there was pending draw data!", m_name); } reset_buffers(); } @@ -156,10 +156,10 @@ void DirectRenderer2::flush_pending(SharedRenderState* render_state, ScopedProfi void DirectRenderer2::draw_call_loop_simple(SharedRenderState* render_state, ScopedProfilerNode& prof) { - fmt::print("------------------------\n"); + lg::debug("------------------------"); for (u32 draw_idx = 0; draw_idx < m_next_free_draw; draw_idx++) { const auto& draw = m_draw_buffer[draw_idx]; - fmt::print("{}", draw.to_single_line_string()); + lg::debug("{}", draw.to_single_line_string()); setup_opengl_for_draw_mode(draw, render_state); setup_opengl_tex(0, draw.tbp, draw.mode.get_filt_enable(), draw.mode.get_clamp_s_enable(), draw.mode.get_clamp_t_enable(), render_state); @@ -354,11 +354,10 @@ void DirectRenderer2::setup_opengl_tex(u16 unit, if (!tex) { // TODO Add back if (tbp_to_lookup >= 8160 && tbp_to_lookup <= 8600) { - fmt::print("Failed to find texture at {}, using random (eye zone)\n", tbp_to_lookup); - + lg::warn("Failed to find texture at {}, using random (eye zone)", tbp_to_lookup); tex = render_state->texture_pool->get_placeholder_texture(); } else { - fmt::print("Failed to find texture at {}, using random\n", tbp_to_lookup); + lg::warn("Failed to find texture at {}, using random", tbp_to_lookup); tex = render_state->texture_pool->get_placeholder_texture(); } } @@ -444,9 +443,8 @@ void DirectRenderer2::render_gif_data(const u8* data, ASSERT(false); // handle_tex0_1_packed(data + offset); break; default: - fmt::print("Register {} is not supported in packed mode yet\n", - reg_descriptor_name(reg_desc[reg])); - ASSERT(false); + ASSERT_MSG(false, fmt::format("Register {} is not supported in packed mode yet\n", + reg_descriptor_name(reg_desc[reg]))); } offset += 16; // PACKED = quadwords } @@ -468,9 +466,8 @@ void DirectRenderer2::render_gif_data(const u8* data, ASSERT(false); // handle_xyzf2(register_data, render_state, prof); break; default: - fmt::print("Register {} is not supported in reglist mode yet\n", - reg_descriptor_name(reg_desc[reg])); - ASSERT(false); + ASSERT_MSG(false, fmt::format("Register {} is not supported in reglist mode yet\n", + reg_descriptor_name(reg_desc[reg]))); } offset += 8; // PACKED = quadwords } diff --git a/game/graphics/opengl_renderer/Profiler.cpp b/game/graphics/opengl_renderer/Profiler.cpp index 430f6dbc44..cca445cbfc 100644 --- a/game/graphics/opengl_renderer/Profiler.cpp +++ b/game/graphics/opengl_renderer/Profiler.cpp @@ -17,13 +17,13 @@ ProfilerNode* ProfilerNode::make_child(const std::string& name) { void ProfilerNode::finish() { if (m_finished) { - lg::error("finish() called twice on {}\n", m_name); + lg::error("finish() called twice on {}", m_name); } else { m_stats.duration = m_timer.getSeconds(); float total_child_time = 0; for (const auto& child : m_children) { if (!child.finished()) { - lg::error("finish() not called on {}\n", child.name()); + lg::error("finish() not called on {}", child.name()); } total_child_time += child.m_stats.duration; m_stats.add_draw_stats(child.m_stats); diff --git a/game/graphics/opengl_renderer/Shader.cpp b/game/graphics/opengl_renderer/Shader.cpp index 5954ae6f94..bbb854035a 100644 --- a/game/graphics/opengl_renderer/Shader.cpp +++ b/game/graphics/opengl_renderer/Shader.cpp @@ -28,7 +28,7 @@ Shader::Shader(const std::string& shader_name, GameVersion version) { glGetShaderiv(m_vert_shader, GL_COMPILE_STATUS, &compile_ok); if (!compile_ok) { glGetShaderInfoLog(m_vert_shader, len, nullptr, err); - lg::error("Failed to compile vertex shader {}:\n{}\n", shader_name.c_str(), err); + lg::error("Failed to compile vertex shader {}:\n{}", shader_name.c_str(), err); m_is_okay = false; return; } @@ -41,7 +41,7 @@ Shader::Shader(const std::string& shader_name, GameVersion version) { glGetShaderiv(m_frag_shader, GL_COMPILE_STATUS, &compile_ok); if (!compile_ok) { glGetShaderInfoLog(m_frag_shader, len, nullptr, err); - lg::error("Failed to compile fragment shader {}:\n{}\n", shader_name.c_str(), err); + lg::error("Failed to compile fragment shader {}:\n{}", shader_name.c_str(), err); m_is_okay = false; return; } @@ -54,7 +54,7 @@ Shader::Shader(const std::string& shader_name, GameVersion version) { glGetProgramiv(m_program, GL_LINK_STATUS, &compile_ok); if (!compile_ok) { glGetProgramInfoLog(m_program, len, nullptr, err); - lg::error("Failed to link shader {}:\n{}\n", shader_name.c_str(), err); + lg::error("Failed to link shader {}:\n{}", shader_name.c_str(), err); m_is_okay = false; return; } diff --git a/game/graphics/opengl_renderer/ShadowRenderer.cpp b/game/graphics/opengl_renderer/ShadowRenderer.cpp index 95d5106da9..02d63f40bf 100644 --- a/game/graphics/opengl_renderer/ShadowRenderer.cpp +++ b/game/graphics/opengl_renderer/ShadowRenderer.cpp @@ -157,9 +157,8 @@ void ShadowRenderer::xgkick(u16 imm) { } break; default: - fmt::print("Register {} is not supported in packed mode yet\n", - reg_descriptor_name(reg_desc[reg])); - ASSERT(false); + ASSERT_MSG(false, fmt::format("Register {} is not supported in packed mode yet\n", + reg_descriptor_name(reg_desc[reg]))); } offset += 16; // PACKED = quadwords } diff --git a/game/graphics/opengl_renderer/Shadow_PS2.cpp b/game/graphics/opengl_renderer/Shadow_PS2.cpp index 285cbb8f97..69fb615e94 100644 --- a/game/graphics/opengl_renderer/Shadow_PS2.cpp +++ b/game/graphics/opengl_renderer/Shadow_PS2.cpp @@ -1,3 +1,5 @@ +#include "common/log/log.h" + #include "game/graphics/opengl_renderer/ShadowRenderer.h" void ShadowRenderer::run_mscal10_vu2c() { @@ -148,7 +150,7 @@ void ShadowRenderer::run_mscal_vu2c(u16 imm) { goto L21; default: - fmt::print("didn't know mscal imm: {}\n", imm); + lg::warn("didn't know mscal imm: {}", imm); // ASSERT(false); } // clang-format off diff --git a/game/graphics/opengl_renderer/SkyRenderer.cpp b/game/graphics/opengl_renderer/SkyRenderer.cpp index 06ad732f19..23db4a837f 100644 --- a/game/graphics/opengl_renderer/SkyRenderer.cpp +++ b/game/graphics/opengl_renderer/SkyRenderer.cpp @@ -1,7 +1,5 @@ #include "SkyRenderer.h" -#include "common/log/log.h" - #include "game/graphics/opengl_renderer/AdgifHandler.h" #include "game/graphics/pipelines/opengl.h" diff --git a/game/graphics/opengl_renderer/Sprite3.cpp b/game/graphics/opengl_renderer/Sprite3.cpp index 0c2089823c..a24bbf2ba8 100644 --- a/game/graphics/opengl_renderer/Sprite3.cpp +++ b/game/graphics/opengl_renderer/Sprite3.cpp @@ -2,6 +2,8 @@ #include "Sprite3.h" +#include "common/log/log.h" + #include "game/graphics/opengl_renderer/background/background_common.h" #include "game/graphics/opengl_renderer/dma_helpers.h" @@ -1069,7 +1071,7 @@ void Sprite3::flush_sprites(SharedRenderState* render_state, tex = render_state->texture_pool->lookup(tbp); if (!tex) { - fmt::print("Failed to find texture at {}, using random\n", tbp); + lg::warn("Failed to find texture at {}, using random", tbp); tex = render_state->texture_pool->get_placeholder_texture(); } ASSERT(tex); @@ -1216,8 +1218,8 @@ void Sprite3::update_mode_from_alpha1(u64 val, DrawMode& mode) { } else { - fmt::print("unsupported blend: a {} b {} c {} d {}\n", (int)reg.a_mode(), (int)reg.b_mode(), - (int)reg.c_mode(), (int)reg.d_mode()); + lg::error("unsupported blend: a {} b {} c {} d {}", (int)reg.a_mode(), (int)reg.b_mode(), + (int)reg.c_mode(), (int)reg.d_mode()); mode.set_alpha_blend(DrawMode::AlphaBlend::SRC_DST_SRC_DST); ASSERT(false); } diff --git a/game/graphics/opengl_renderer/SpriteRenderer.cpp b/game/graphics/opengl_renderer/SpriteRenderer.cpp index 6bedb8a4b0..659bcf8049 100644 --- a/game/graphics/opengl_renderer/SpriteRenderer.cpp +++ b/game/graphics/opengl_renderer/SpriteRenderer.cpp @@ -1,5 +1,7 @@ #include "SpriteRenderer.h" +#include "common/log/log.h" + #include "game/graphics/opengl_renderer/background/background_common.h" #include "game/graphics/opengl_renderer/dma_helpers.h" @@ -614,7 +616,7 @@ void SpriteRenderer::update_gl_texture(SharedRenderState* render_state, int unit } if (!tex) { - fmt::print("Failed to find texture at {}, using random\n", state.texture_base_ptr); + lg::warn("Failed to find texture at {}, using random", state.texture_base_ptr); tex = render_state->texture_pool->get_placeholder_texture(); } ASSERT(tex); diff --git a/game/graphics/opengl_renderer/TextureUploadHandler.cpp b/game/graphics/opengl_renderer/TextureUploadHandler.cpp index 17d92f0ad1..e152b75644 100644 --- a/game/graphics/opengl_renderer/TextureUploadHandler.cpp +++ b/game/graphics/opengl_renderer/TextureUploadHandler.cpp @@ -1,5 +1,7 @@ #include "TextureUploadHandler.h" +#include "common/log/log.h" + #include "game/graphics/opengl_renderer/EyeRenderer.h" #include "game/graphics/pipelines/opengl.h" @@ -82,9 +84,9 @@ void TextureUploadHandler::flush_uploads(std::vector& uploads, else if (uploads.empty()) { // do nothing. } else { - fmt::print("unhandled upload sequence in {}:\n", m_name); + lg::error("unhandled upload sequence in {}:", m_name); for (auto& upload : uploads) { - fmt::print(" page: 0x{:x} mode: {}\n", upload.page, upload.mode); + lg::error(" page: 0x{:x} mode: {}", upload.page, upload.mode); } ASSERT(false); } diff --git a/game/graphics/opengl_renderer/background/Shrub.cpp b/game/graphics/opengl_renderer/background/Shrub.cpp index 5943e918e5..0a356ff003 100644 --- a/game/graphics/opengl_renderer/background/Shrub.cpp +++ b/game/graphics/opengl_renderer/background/Shrub.cpp @@ -1,5 +1,7 @@ #include "Shrub.h" +#include "common/log/log.h" + Shrub::Shrub(const std::string& name, int my_id) : BucketRenderer(name, my_id) { m_color_result.resize(TIME_OF_DAY_COLOR_COUNT); } @@ -184,7 +186,7 @@ bool Shrub::setup_for_level(const std::string& level, SharedRenderState* render_ } if (tfrag3_setup_timer.getMs() > 5) { - fmt::print("Shrub setup: {:.1f}ms\n", tfrag3_setup_timer.getMs()); + lg::info("Shrub setup: {:.1f}ms", tfrag3_setup_timer.getMs()); } return m_has_level; diff --git a/game/graphics/opengl_renderer/background/Tfrag3.cpp b/game/graphics/opengl_renderer/background/Tfrag3.cpp index a1ee89a64a..cf88268e98 100644 --- a/game/graphics/opengl_renderer/background/Tfrag3.cpp +++ b/game/graphics/opengl_renderer/background/Tfrag3.cpp @@ -1,5 +1,7 @@ #include "Tfrag3.h" +#include "common/log/log.h" + #include "third-party/imgui/imgui.h" Tfrag3::Tfrag3() { @@ -161,7 +163,7 @@ bool Tfrag3::setup_for_level(const std::vector& tree_ } if (tfrag3_setup_timer.getMs() > 5) { - fmt::print("TFRAG setup: {:.1f}ms\n", tfrag3_setup_timer.getMs()); + lg::info("TFRAG setup: {:.1f}ms", tfrag3_setup_timer.getMs()); } return m_has_level; diff --git a/game/graphics/opengl_renderer/background/Tie3.cpp b/game/graphics/opengl_renderer/background/Tie3.cpp index d077e756dd..985c997dc4 100644 --- a/game/graphics/opengl_renderer/background/Tie3.cpp +++ b/game/graphics/opengl_renderer/background/Tie3.cpp @@ -1,6 +1,7 @@ #include "Tie3.h" #include "common/global_profiler/GlobalProfiler.h" +#include "common/log/log.h" #include "third-party/imgui/imgui.h" @@ -168,7 +169,7 @@ bool Tie3::setup_for_level(const std::string& level, SharedRenderState* render_s } if (tfrag3_setup_timer.getMs() > 5) { - fmt::print("TIE setup: {:.1f}ms\n", tfrag3_setup_timer.getMs()); + lg::info("TIE setup: {:.1f}ms", tfrag3_setup_timer.getMs()); } return m_has_level; diff --git a/game/graphics/opengl_renderer/dma_helpers.cpp b/game/graphics/opengl_renderer/dma_helpers.cpp index b698f00ac7..3719d6aa6c 100644 --- a/game/graphics/opengl_renderer/dma_helpers.cpp +++ b/game/graphics/opengl_renderer/dma_helpers.cpp @@ -1,5 +1,7 @@ #include "dma_helpers.h" +#include "common/log/log.h" + #include "third-party/fmt/format.h" /*! @@ -15,17 +17,17 @@ bool verify_unpack_with_stcycl(const DmaTransfer& transfer, bool usn, bool flg) { if (transfer.size_bytes != qwc * 16) { - fmt::print("verify_unpack: bad size {} vs {}\n", transfer.size_bytes, qwc * 16); + lg::error("verify_unpack: bad size {} vs {}", transfer.size_bytes, qwc * 16); return false; } if (transfer.vifcode0().kind != VifCode::Kind::STCYCL) { - fmt::print("verify_unpack: bad vifcode 0\n"); + lg::error("verify_unpack: bad vifcode 0"); return false; } if (transfer.vifcode1().kind != unpack_kind) { - fmt::print("verify_unpack: bad vifcode 1\n"); + lg::error("verify_unpack: bad vifcode 1"); return false; } @@ -33,18 +35,18 @@ bool verify_unpack_with_stcycl(const DmaTransfer& transfer, VifCodeUnpack unpack(transfer.vifcode1()); if (stcycl.cl != cl || stcycl.wl != wl) { - fmt::print("verify_unpack: bad cl/wl {}/{} vs {}/{}\n", stcycl.cl, stcycl.wl, cl, wl); + lg::error("verify_unpack: bad cl/wl {}/{} vs {}/{}", stcycl.cl, stcycl.wl, cl, wl); return false; } if (unpack.addr_qw != addr || unpack.use_tops_flag != flg || unpack.is_unsigned != usn) { - fmt::print("verify_unpack: bad unpack {}/{}/{} vs {}/{}/{}", unpack.addr_qw, - unpack.use_tops_flag, unpack.is_unsigned, addr, flg, usn); + lg::error("verify_unpack: bad unpack {}/{}/{} vs {}/{}/{}", unpack.addr_qw, + unpack.use_tops_flag, unpack.is_unsigned, addr, flg, usn); return false; } if (transfer.vifcode1().num != qwc) { - fmt::print("verify_unpack: bad num {} vs {}\n", transfer.vifcode1().num, qwc); + lg::error("verify_unpack: bad num {} vs {}", transfer.vifcode1().num, qwc); return false; } @@ -82,30 +84,30 @@ bool verify_unpack_no_stcycl(const DmaTransfer& transfer, bool usn, bool flg) { if (transfer.size_bytes != qwc * 16) { - fmt::print("verify_unpack: bad size {} vs {}\n", transfer.size_bytes, qwc * 16); + lg::error("verify_unpack: bad size {} vs {}", transfer.size_bytes, qwc * 16); return false; } if (transfer.vifcode0().kind != VifCode::Kind::NOP) { - fmt::print("verify_unpack: bad vifcode 0\n"); + lg::error("verify_unpack: bad vifcode 0"); return false; } if (transfer.vifcode1().kind != unpack_kind) { - fmt::print("verify_unpack: bad vifcode 1\n"); + lg::error("verify_unpack: bad vifcode 1"); return false; } VifCodeUnpack unpack(transfer.vifcode1()); if (unpack.addr_qw != addr || unpack.use_tops_flag != flg || unpack.is_unsigned != usn) { - fmt::print("verify_unpack: bad unpack {}/{}/{} vs {}/{}/{}", unpack.addr_qw, - unpack.use_tops_flag, unpack.is_unsigned, addr, flg, usn); + lg::error("verify_unpack: bad unpack {}/{}/{} vs {}/{}/{}", unpack.addr_qw, + unpack.use_tops_flag, unpack.is_unsigned, addr, flg, usn); return false; } if (transfer.vifcode1().num != qwc) { - fmt::print("verify_unpack: bad num {} vs {}\n", transfer.vifcode1().num, qwc); + lg::error("verify_unpack: bad num {} vs {}", transfer.vifcode1().num, qwc); return false; } @@ -134,4 +136,4 @@ void verify_mscal(const DmaTransfer& transfer, int address) { ASSERT(transfer.vif0() == 0); ASSERT(transfer.vifcode1().kind == VifCode::Kind::MSCAL); ASSERT(transfer.vifcode1().immediate == address); -} \ No newline at end of file +} diff --git a/game/graphics/opengl_renderer/foreground/Generic2_OpenGL.cpp b/game/graphics/opengl_renderer/foreground/Generic2_OpenGL.cpp index e76a39868e..5b17e13780 100644 --- a/game/graphics/opengl_renderer/foreground/Generic2_OpenGL.cpp +++ b/game/graphics/opengl_renderer/foreground/Generic2_OpenGL.cpp @@ -1,3 +1,5 @@ +#include "common/log/log.h" + #include "Generic2.h" void Generic2::opengl_setup() { @@ -223,11 +225,10 @@ void Generic2::setup_opengl_tex(u16 unit, if (!tex) { // TODO Add back if (tbp_to_lookup >= 8160 && tbp_to_lookup <= 8600) { - fmt::print("Failed to find texture at {}, using random (eye zone)\n", tbp_to_lookup); - + lg::warn("Failed to find texture at {}, using random (eye zone)", tbp_to_lookup); tex = render_state->texture_pool->get_placeholder_texture(); } else { - fmt::print("Failed to find texture at {}, using random\n", tbp_to_lookup); + lg::warn("Failed to find texture at {}, using random", tbp_to_lookup); tex = render_state->texture_pool->get_placeholder_texture(); } } diff --git a/game/graphics/opengl_renderer/ocean/CommonOceanRenderer.cpp b/game/graphics/opengl_renderer/ocean/CommonOceanRenderer.cpp index b5e00a239d..ea3c4fc2a0 100644 --- a/game/graphics/opengl_renderer/ocean/CommonOceanRenderer.cpp +++ b/game/graphics/opengl_renderer/ocean/CommonOceanRenderer.cpp @@ -1,5 +1,7 @@ #include "CommonOceanRenderer.h" +#include "common/log/log.h" + CommonOceanRenderer::CommonOceanRenderer() { m_vertices.resize(4096 * 10); // todo decrease for (auto& buf : m_indices) { @@ -252,7 +254,7 @@ void CommonOceanRenderer::handle_near_adgif(const u8* data, u32 offset, u32 coun } break; default: - fmt::print("reg: {}\n", register_address_name(addr)); + lg::debug("reg: {}", register_address_name(addr)); break; } } @@ -412,7 +414,7 @@ void CommonOceanRenderer::handle_mid_adgif(const u8* data, u32 offset) { } break; default: - fmt::print("reg: {}\n", register_address_name(addr)); + lg::debug("reg: {}", register_address_name(addr)); break; } } diff --git a/game/graphics/opengl_renderer/ocean/OceanMid.cpp b/game/graphics/opengl_renderer/ocean/OceanMid.cpp index 0e192fa22d..07237aace9 100644 --- a/game/graphics/opengl_renderer/ocean/OceanMid.cpp +++ b/game/graphics/opengl_renderer/ocean/OceanMid.cpp @@ -1,5 +1,7 @@ #include "OceanMid.h" +#include "common/log/log.h" + static bool is_end_tag(const DmaTag& tag, const VifCode& v0, const VifCode& v1) { return tag.qwc == 2 && tag.kind == DmaTag::Kind::CNT && v0.kind == VifCode::Kind::NOP && v1.kind == VifCode::Kind::DIRECT; @@ -111,7 +113,7 @@ void OceanMid::run(DmaFollower& dma, SharedRenderState* render_state, ScopedProf run_call275_vu2c(); break; default: - fmt::print("unknown call1: {}\n", v1.immediate); + lg::warn("unknown call1: {}", v1.immediate); } } else if (v0.kind == VifCode::Kind::MSCALF && v1.kind == VifCode::Kind::FLUSHA) { switch (v0.immediate) { diff --git a/game/graphics/opengl_renderer/ocean/OceanNear.cpp b/game/graphics/opengl_renderer/ocean/OceanNear.cpp index ac9c753038..210b53567d 100644 --- a/game/graphics/opengl_renderer/ocean/OceanNear.cpp +++ b/game/graphics/opengl_renderer/ocean/OceanNear.cpp @@ -1,5 +1,7 @@ #include "OceanNear.h" +#include "common/log/log.h" + #include "third-party/imgui/imgui.h" OceanNear::OceanNear(const std::string& name, int my_id) @@ -54,7 +56,7 @@ void OceanNear::render(DmaFollower& dma, } if (dma.current_tag().qwc != 2) { - fmt::print("abort!\n"); + lg::error("abort OceanNear::render!"); while (dma.current_tag_offset() != render_state->next_bucket) { dma.read_and_advance(); } diff --git a/game/graphics/texture/TexturePool.cpp b/game/graphics/texture/TexturePool.cpp index 88998c3d91..f978b344a7 100644 --- a/game/graphics/texture/TexturePool.cpp +++ b/game/graphics/texture/TexturePool.cpp @@ -136,11 +136,9 @@ void TexturePool::unload_texture(PcTextureId tex_id, u64 gpu_id) { ASSERT(false); return; } - if (tex->is_placeholder) { - fmt::print("trying to unload something that was already placholdered: {} {}\n", - get_debug_texture_name(tex_id), tex->gpu_textures.size()); - } - ASSERT(!tex->is_placeholder); + ASSERT_MSG(!tex->is_placeholder, + fmt::format("trying to unload something that was already placholdered: {} {}\n", + get_debug_texture_name(tex_id), tex->gpu_textures.size())); auto it = std::find_if(tex->gpu_textures.begin(), tex->gpu_textures.end(), [&](const auto& a) { return a.gl == gpu_id; }); ASSERT(it != tex->gpu_textures.end()); @@ -378,4 +376,4 @@ std::string TexturePool::get_debug_texture_name(PcTextureId id) { } else { return "???"; } -} \ No newline at end of file +} diff --git a/game/overlord/iso_api.cpp b/game/overlord/iso_api.cpp index 77bda54f31..bcab1e3950 100644 --- a/game/overlord/iso_api.cpp +++ b/game/overlord/iso_api.cpp @@ -56,7 +56,7 @@ s32 LoadISOFileToEE(FileRecord* file, uint32_t addr, uint32_t length) { } s32 LoadISOFileChunkToEE(FileRecord* file, uint32_t dest_addr, uint32_t length, uint32_t offset) { - lg::debug("[OVERLORD] LoadISOFileChunkToEE {} : {} offset {}\n", file->name, length, offset); + lg::debug("[OVERLORD] LoadISOFileChunkToEE {} : {} offset {}", file->name, length, offset); IsoCommandLoadSingle cmd; cmd.cmd_id = LOAD_TO_EE_OFFSET_CMD_ID; cmd.messagebox_to_reply = 0; diff --git a/game/overlord/iso_cd.cpp b/game/overlord/iso_cd.cpp index ac3e305054..17ca97acbf 100644 --- a/game/overlord/iso_cd.cpp +++ b/game/overlord/iso_cd.cpp @@ -390,7 +390,7 @@ void LoadDiscID() { for (uint32_t i = 0; i < SECTOR_SIZE / 4; i++) { CD_ID_SectorSum += CD_ID_Sector[i]; } - lg::info("[OVERLORD] DISK_ID.DIZ OK 0x{:x}\n", CD_ID_SectorSum); + lg::info("[OVERLORD] DISK_ID.DIZ OK 0x{:x}", CD_ID_SectorSum); } /*! diff --git a/game/sce/libgraph.cpp b/game/sce/libgraph.cpp index dbfc64b72a..aa7df6d01b 100644 --- a/game/sce/libgraph.cpp +++ b/game/sce/libgraph.cpp @@ -5,6 +5,6 @@ namespace ee { void sceGsResetPath() {} void sceGsResetGraph(int mode, int inter, int omode, int ffmode) { - lg::warn("sceGsResetGraph: mode {} inter {} omode {} fmode {}\n", mode, inter, omode, ffmode); + lg::warn("sceGsResetGraph: mode {} inter {} omode {} fmode {}", mode, inter, omode, ffmode); } -} // namespace ee \ No newline at end of file +} // namespace ee diff --git a/game/sound/989snd/ame_handler.cpp b/game/sound/989snd/ame_handler.cpp index 1be56ecca0..cce42ca856 100644 --- a/game/sound/989snd/ame_handler.cpp +++ b/game/sound/989snd/ame_handler.cpp @@ -2,6 +2,8 @@ // SPDX-License-Identifier: ISC #include "ame_handler.h" +#include "common/log/log.h" + #include "game/sound/989snd/blocksound_handler.h" namespace snd { diff --git a/game/sound/989snd/loader.cpp b/game/sound/989snd/loader.cpp index 5a3f3bc382..237fec6af1 100644 --- a/game/sound/989snd/loader.cpp +++ b/game/sound/989snd/loader.cpp @@ -7,6 +7,8 @@ #include "midi_handler.h" +#include "common/log/log.h" + #include namespace snd { @@ -85,7 +87,7 @@ u32 loader::read_bank(std::fstream& in) { in.read((char*)(&attr), sizeof(attr)); if (attr.type != 1 && attr.type != 3) { - fmt::print("Error: File type {} not supported.", attr.type); + lg::error("Error: File type {} not supported.", attr.type); return -1; } @@ -136,7 +138,7 @@ void loader::load_midi(std::fstream& in) { in.read((char*)midi.get(), attr.where[0].size); auto h = (MIDIBlock*)midi.get(); - fmt::print("Loaded midi {:.4}\n", (char*)&h->ID); + lg::info("Loaded midi {:.4}", (char*)&h->ID); m_midi.emplace(h->ID, (MIDIBlock*)midi.get()); m_midi_chunks.emplace_back(std::move(midi)); diff --git a/game/sound/989snd/midi_handler.cpp b/game/sound/989snd/midi_handler.cpp index 10b24dc382..f891551166 100644 --- a/game/sound/989snd/midi_handler.cpp +++ b/game/sound/989snd/midi_handler.cpp @@ -4,6 +4,8 @@ #include "ame_handler.h" +#include "common/log/log.h" + #include namespace snd { @@ -261,7 +263,7 @@ void midi_handler::channel_pitch() { u32 pitch = (m_seq_ptr[0] << 7) | m_seq_ptr[1]; (void)pitch; (void)channel; - // fmt::print("{}: pitch ch{:01x} {:04x}\n", m_time, channel, pitch); + // lg::debug("{}: pitch ch{:01x} {:04x}", m_time, channel, pitch); m_seq_ptr += 2; } @@ -303,7 +305,7 @@ void midi_handler::system_event() { m_seq_ptr = ptr; if (!cont) { - // fmt::print("{:x} track stopped by ame\n", (u64)this); + // lg::debug("{:x} track stopped by ame", (u64)this); m_track_complete = true; } } else { @@ -325,8 +327,7 @@ bool midi_handler::tick() { step(); } catch (midi_error& e) { m_track_complete = true; - fmt::print("MIDI Error: {}\n", e.what()); - + lg::error("MIDI Error: {}", e.what()); fmt::print("Sequence following: "); for (int i = 0; i < 10; i++) { fmt::print("{:x} ", m_seq_ptr[i]); diff --git a/game/sound/989snd/player.cpp b/game/sound/989snd/player.cpp index fcf92e79dd..750d83f79d 100644 --- a/game/sound/989snd/player.cpp +++ b/game/sound/989snd/player.cpp @@ -10,6 +10,7 @@ #include #include #endif +#include "common/log/log.h" namespace snd { @@ -26,8 +27,8 @@ void player::init_cubeb() { HRESULT hr = CoInitializeEx(nullptr, COINIT_MULTITHREADED); m_coinitialized = SUCCEEDED(hr); if (FAILED(hr) && hr != RPC_E_CHANGED_MODE) { - fmt::print("Couldn't initialize COM\n"); - fmt::print("Cubeb init failed\n"); + lg::error("Couldn't initialize COM"); + lg::error("Cubeb init failed"); return; } #endif @@ -45,20 +46,20 @@ void player::init_cubeb() { u32 latency = 0; err = cubeb_get_min_latency(m_ctx, &outparam, &latency); if (err != CUBEB_OK) { - fmt::print("Cubeb init failed\n"); + lg::error("Cubeb init failed"); return; } err = cubeb_stream_init(m_ctx, &m_stream, "OpenGOAL", nullptr, nullptr, nullptr, &outparam, latency, &sound_callback, &state_callback, this); if (err != CUBEB_OK) { - fmt::print("Cubeb init failed\n"); + lg::error("Cubeb init failed"); return; } err = cubeb_stream_start(m_stream); if (err != CUBEB_OK) { - fmt::print("Cubeb init failed\n"); + lg::error("Cubeb init failed"); return; } } @@ -126,7 +127,7 @@ u32 player::play_sound(u32 bank_id, u32 sound_id, s32 vol, s32 pan, s32 pm, s32 std::scoped_lock lock(m_ticklock); auto bank = m_loader.get_bank_by_handle(bank_id); if (bank == nullptr) { - fmt::print("play_sound: Bank {} does not exist\n", bank_id); + lg::error("play_sound: Bank {} does not exist", bank_id); return 0; } diff --git a/game/sound/989snd/sndplay.cpp b/game/sound/989snd/sndplay.cpp index a39b2d869d..e5ac4dadd6 100644 --- a/game/sound/989snd/sndplay.cpp +++ b/game/sound/989snd/sndplay.cpp @@ -1,5 +1,7 @@ #include "player.h" +#include "common/log/log.h" + int main(int argc, char* argv[]) { snd::player player; unsigned bankid = 0; @@ -9,14 +11,14 @@ int main(int argc, char* argv[]) { if (argc > 2) { bankid = player.load_bank(file, 0); unsigned sound = player.play_sound(bankid, atoi(argv[2]), 0x400, 0, 0, 0); - fmt::print("sound {} started\n", sound); + lg::info("sound {} started", sound); } while (true) { +#ifdef __linux timespec rqtp{}, rmtp{}; rqtp.tv_nsec = 0; rqtp.tv_sec = 1; -#ifdef __linux if (nanosleep(&rqtp, &rmtp) == -1) { break; } diff --git a/game/sound/CMakeLists.txt b/game/sound/CMakeLists.txt index 4dc75ba4a3..f9abcd3df8 100644 --- a/game/sound/CMakeLists.txt +++ b/game/sound/CMakeLists.txt @@ -18,7 +18,7 @@ set(SOUND_SOURCES ) add_library(sound STATIC ${SOUND_SOURCES}) -target_link_libraries(sound PRIVATE fmt cubeb) +target_link_libraries(sound PRIVATE fmt cubeb common) add_executable(sndplay 989snd/sndplay.cpp) if(WIN32) diff --git a/game/system/Deci2Server.cpp b/game/system/Deci2Server.cpp index 54ae18a147..c5a2acf56e 100644 --- a/game/system/Deci2Server.cpp +++ b/game/system/Deci2Server.cpp @@ -21,6 +21,7 @@ #include #include #endif +#include "common/log/log.h" // clang-format on Deci2Server::~Deci2Server() { @@ -37,7 +38,7 @@ Deci2Server::~Deci2Server() { } void Deci2Server::post_init() { - fmt::print("[Deci2Server:{}] awaiting connections\n", tcp_port); + lg::info("[Deci2Server:{}] awaiting connections", tcp_port); accept_thread_running = true; kill_accept_thread = false; accept_thread = std::thread(&Deci2Server::accept_thread_func, this); diff --git a/goalc/build_level/build_level.cpp b/goalc/build_level/build_level.cpp index 240974794e..5136f31250 100644 --- a/goalc/build_level/build_level.cpp +++ b/goalc/build_level/build_level.cpp @@ -21,10 +21,10 @@ void save_pc_data(const std::string& nickname, data.serialize(ser); auto compressed = compression::compress_zstd(ser.get_save_result().first, ser.get_save_result().second); - fmt::print("stats for {}\n", data.level_name); + lg::print("stats for {}\n", data.level_name); print_memory_usage(data, ser.get_save_result().second); - fmt::print("compressed: {} -> {} ({:.2f}%)\n", ser.get_save_result().second, compressed.size(), - 100.f * compressed.size() / ser.get_save_result().second); + lg::print("compressed: {} -> {} ({:.2f}%)\n", ser.get_save_result().second, compressed.size(), + 100.f * compressed.size() / ser.get_save_result().second); file_util::write_binary_file(fr3_output_dir / fmt::format("{}.fr3", nickname), compressed.data(), compressed.size()); } @@ -104,10 +104,10 @@ bool run_build_level(const std::string& input_file, // Save the GOAL level auto result = file.save_object_file(); - fmt::print("Level bsp file size {} bytes\n", result.size()); + lg::print("Level bsp file size {} bytes\n", result.size()); auto save_path = file_util::get_jak_project_dir() / bsp_output_file; file_util::create_dir_if_needed_for_file(save_path); - fmt::print("Saving to {}\n", save_path.string()); + lg::print("Saving to {}\n", save_path.string()); file_util::write_binary_file(save_path, result.data(), result.size()); // Save the PC level diff --git a/goalc/build_level/collide_bvh.cpp b/goalc/build_level/collide_bvh.cpp index 9e3f4a0e6f..abbab4531e 100644 --- a/goalc/build_level/collide_bvh.cpp +++ b/goalc/build_level/collide_bvh.cpp @@ -108,7 +108,7 @@ void split_along_dim(std::vector& faces, std::sort(faces.begin(), faces.end(), [=](const CollideFace& a, const CollideFace& b) { return a.bsphere[dim] < b.bsphere[dim]; }); - fmt::print("splitting with size: {}\n", faces.size()); + lg::print("splitting with size: {}\n", faces.size()); size_t split_idx = faces.size() / 2; out0->insert(out0->end(), faces.begin(), faces.begin() + split_idx); out1->insert(out1->end(), faces.begin() + split_idx, faces.end()); @@ -304,10 +304,10 @@ CollideTree construct_collide_bvh(const std::vector& tris) { } for (auto [size, count] : size_histogram) { - fmt::print(" [{:3d}] {:3d} ({})\n", size, count, size * count); + lg::print(" [{:3d}] {:3d} ({})\n", size, count, size * count); } return tree; } -} // namespace collide \ No newline at end of file +} // namespace collide diff --git a/goalc/build_level/collide_pack.cpp b/goalc/build_level/collide_pack.cpp index 511e695ab1..3e2f7a421b 100644 --- a/goalc/build_level/collide_pack.cpp +++ b/goalc/build_level/collide_pack.cpp @@ -82,7 +82,7 @@ PackedU16Verts pack_verts_to_u16(const std::vector& input) { math::Vector3f vf14_base_trans_float(result.base[0], result.base[1], result.base[2]); vf13_combo_offset -= vf14_base_trans_float; v -= vf13_combo_offset; - fmt::print("error {}\n", (v - input[i]).to_string_aligned());; + lg::print("error {}\n", (v - input[i]).to_string_aligned());; } */ @@ -201,8 +201,8 @@ CollideFragMeshDataArray pack_collide_frags(const std::vector 128) { - fmt::print("frag with too many vertices: {} had {} tris\n", frag_out.vertex_count, - frag_in.faces.size()); + lg::print("frag with too many vertices: {} had {} tris\n", frag_out.vertex_count, + frag_in.faces.size()); lg::error("SHOULD CRASH\n"); } // the diff --git a/goalc/build_level/color_quantization.cpp b/goalc/build_level/color_quantization.cpp index 5ff39cb519..c36950b9b9 100644 --- a/goalc/build_level/color_quantization.cpp +++ b/goalc/build_level/color_quantization.cpp @@ -24,7 +24,7 @@ QuantizedColors quantize_colors_dumb(const std::vector>& in) result.vtx_to_color.push_back(existing->second); } } - fmt::print("quantize_colors_dumb: {} -> {}\n", in.size(), result.final_colors.size()); + lg::print("quantize_colors_dumb: {} -> {}\n", in.size(), result.final_colors.size()); ASSERT(result.final_colors.size() < 8192); return result; } @@ -205,7 +205,7 @@ QuantizedColors quantize_colors_octree(const std::vector>& i float total_error[3] = {0, 0, 0}; for (size_t i = 0; i < in.size(); i++) { - // fmt::print(" {} -> {}\n", in[i].to_string_hex_byte(), + // lg::print(" {} -> {}\n", in[i].to_string_hex_byte(), // out.final_colors[out.vtx_to_color[i]].to_string_hex_byte()); auto diff = in[i].cast() - out.final_colors[out.vtx_to_color[i]].cast(); @@ -219,4 +219,4 @@ QuantizedColors quantize_colors_octree(const std::vector>& i lg::info("Final palette size: {}", out.final_colors.size()); return out; -} \ No newline at end of file +} diff --git a/goalc/build_level/gltf_mesh_extract.cpp b/goalc/build_level/gltf_mesh_extract.cpp index 7ef450bd7c..82359441e6 100644 --- a/goalc/build_level/gltf_mesh_extract.cpp +++ b/goalc/build_level/gltf_mesh_extract.cpp @@ -138,7 +138,7 @@ ExtractedVertices gltf_vertices(const tinygltf::Model& model, ASSERT_MSG(attrib_accessor.componentType == TINYGLTF_COMPONENT_TYPE_FLOAT, "POSITION wasn't float"); // for (auto& attrib : attributes) { - // fmt::print("attrib: {}\n", attrib.first); + // lg::print("attrib: {}\n", attrib.first); //} auto mesh_verts = extract_vec3f(data_ptr, count, byte_stride); result.reserve(mesh_verts.size()); @@ -796,10 +796,10 @@ void extract(const Input& in, for (int j = 0; j < 3; j++) { float output_dist = face.bsphere.w() - (face.bsphere.xyz() - face.v[j]).length(); if (output_dist < 0) { - fmt::print("{}\n", output_dist); - fmt::print("BAD:\n{}\n{}\n{}\n", face.v[0].to_string_aligned(), - face.v[1].to_string_aligned(), face.v[2].to_string_aligned()); - fmt::print("bsphere: {}\n", face.bsphere.to_string_aligned()); + lg::print("{}\n", output_dist); + lg::print("BAD:\n{}\n{}\n{}\n", face.v[0].to_string_aligned(), + face.v[1].to_string_aligned(), face.v[2].to_string_aligned()); + lg::print("bsphere: {}\n", face.bsphere.to_string_aligned()); } } face.pat = pat.pat; diff --git a/goalc/compiler/Compiler.cpp b/goalc/compiler/Compiler.cpp index c2a449f668..e9364cd683 100644 --- a/goalc/compiler/Compiler.cpp +++ b/goalc/compiler/Compiler.cpp @@ -176,35 +176,35 @@ Val* Compiler::compile_error_guard(const goos::Object& code, Env* env) { bool term; auto loc_info = m_goos.reader.db.get_info_for(code, &term); if (term) { - fmt::print(fg(fmt::color::yellow) | fmt::emphasis::bold, "Location:\n"); - fmt::print(loc_info); + lg::print(fg(fmt::color::yellow) | fmt::emphasis::bold, "Location:\n"); + lg::print(loc_info); } - fmt::print(fg(fmt::color::yellow) | fmt::emphasis::bold, "Code:\n"); - fmt::print("{}\n", pretty_print::to_string(code, 120)); + lg::print(fg(fmt::color::yellow) | fmt::emphasis::bold, "Code:\n"); + lg::print("{}\n", pretty_print::to_string(code, 120)); if (term) { ce.print_err_stack = false; } std::string line(80, '-'); line.push_back('\n'); - fmt::print(line); + lg::print(line); } throw ce; } catch (std::runtime_error& e) { - fmt::print(fg(fmt::color::crimson) | fmt::emphasis::bold, "-- Compilation Error! --\n"); - fmt::print(fmt::emphasis::bold, "{}\n", e.what()); + lg::print(fg(fmt::color::crimson) | fmt::emphasis::bold, "-- Compilation Error! --\n"); + lg::print(fmt::emphasis::bold, "{}\n", e.what()); bool term; auto loc_info = m_goos.reader.db.get_info_for(code, &term); if (term) { - fmt::print(fg(fmt::color::yellow) | fmt::emphasis::bold, "Location:\n"); - fmt::print(loc_info); + lg::print(fg(fmt::color::yellow) | fmt::emphasis::bold, "Location:\n"); + lg::print(loc_info); } - fmt::print(fg(fmt::color::yellow) | fmt::emphasis::bold, "Code:\n"); - fmt::print("{}\n", pretty_print::to_string(code, 120)); + lg::print(fg(fmt::color::yellow) | fmt::emphasis::bold, "Code:\n"); + lg::print("{}\n", pretty_print::to_string(code, 120)); CompilerException ce("Compiler Exception"); if (term) { @@ -212,7 +212,7 @@ Val* Compiler::compile_error_guard(const goos::Object& code, Env* env) { } std::string line(80, '-'); line.push_back('\n'); - fmt::print(line); + lg::print(line); throw ce; } } @@ -251,13 +251,13 @@ void Compiler::color_object_file(FileEnv* env) { if (regalloc_result_2.ok) { if (regalloc_result_2.num_spilled_vars > 0) { - // fmt::print("Function {} has {} spilled vars.\n", f->name(), + // lg::print("Function {} has {} spilled vars.\n", f->name(), // regalloc_result_2.num_spilled_vars); } num_spills_in_file += regalloc_result_2.num_spills; f->set_allocations(std::move(regalloc_result_2)); } else { - fmt::print( + lg::print( "Warning: function {} failed register allocation with the v2 allocator. Falling back to " "the v1 allocator.\n", f->name()); @@ -281,8 +281,7 @@ std::vector Compiler::codegen_object_file(FileEnv* env) { auto result = gen.run(&m_ts); for (auto& f : env->functions()) { if (f->settings.print_asm) { - fmt::print("{}\n", - debug_info->disassemble_function_by_name(f->name(), &ok, &m_goos.reader)); + lg::print("{}\n", debug_info->disassemble_function_by_name(f->name(), &ok, &m_goos.reader)); } } auto stats = gen.get_obj_stats(); diff --git a/goalc/compiler/Compiler.h b/goalc/compiler/Compiler.h index 74d30abf65..75dff8db8e 100644 --- a/goalc/compiler/Compiler.h +++ b/goalc/compiler/Compiler.h @@ -417,38 +417,38 @@ class Compiler { [[noreturn]] void throw_compiler_error(const goos::Object& code, const std::string& str, Args&&... args) { - fmt::print(fg(fmt::color::crimson) | fmt::emphasis::bold, "-- Compilation Error! --\n"); + lg::print(fg(fmt::color::crimson) | fmt::emphasis::bold, "-- Compilation Error! --\n"); if (!str.empty() && str.back() == '\n') { - fmt::print(fmt::emphasis::bold, str, std::forward(args)...); + lg::print(fmt::emphasis::bold, str, std::forward(args)...); } else { - fmt::print(fmt::emphasis::bold, str + '\n', std::forward(args)...); + lg::print(fmt::emphasis::bold, str + '\n', std::forward(args)...); } - fmt::print(fg(fmt::color::yellow) | fmt::emphasis::bold, "Form:\n"); - fmt::print("{}\n", code.print()); + lg::print(fg(fmt::color::yellow) | fmt::emphasis::bold, "Form:\n"); + lg::print("{}\n", code.print()); throw CompilerException("Compilation Error"); } template [[noreturn]] void throw_compiler_error_no_code(const std::string& str, Args&&... args) { - fmt::print(fg(fmt::color::crimson) | fmt::emphasis::bold, "-- Compilation Error! --\n"); + lg::print(fg(fmt::color::crimson) | fmt::emphasis::bold, "-- Compilation Error! --\n"); if (!str.empty() && str.back() == '\n') { - fmt::print(fmt::emphasis::bold, str, std::forward(args)...); + lg::print(fmt::emphasis::bold, str, std::forward(args)...); } else { - fmt::print(fmt::emphasis::bold, str + '\n', std::forward(args)...); + lg::print(fmt::emphasis::bold, str + '\n', std::forward(args)...); } - fmt::print(fg(fmt::color::yellow) | fmt::emphasis::bold, "Form:\n"); + lg::print(fg(fmt::color::yellow) | fmt::emphasis::bold, "Form:\n"); throw CompilerException("Compilation Error"); } template void print_compiler_warning(const std::string& str, Args&&... args) { - fmt::print(fg(fmt::color::yellow) | fmt::emphasis::bold, "[Warning] "); + lg::print(fg(fmt::color::yellow) | fmt::emphasis::bold, "[Warning] "); if (!str.empty() && str.back() == '\n') { - fmt::print(str, std::forward(args)...); + lg::print(str, std::forward(args)...); } else { - fmt::print(str + '\n', std::forward(args)...); + lg::print(str + '\n', std::forward(args)...); } } diff --git a/goalc/compiler/Env.cpp b/goalc/compiler/Env.cpp index de604c7aa0..7e0ed6ff1e 100644 --- a/goalc/compiler/Env.cpp +++ b/goalc/compiler/Env.cpp @@ -5,6 +5,7 @@ #include "IR.h" #include "common/goos/Reader.h" +#include "common/log/log.h" #include "third-party/fmt/core.h" @@ -157,7 +158,7 @@ void FileEnv::add_top_level_function(std::unique_ptr fe) { void FileEnv::debug_print_tl() { if (m_top_level_func) { for (auto& code : m_top_level_func->code()) { - fmt::print("{}\n", code->print()); + lg::print("{}\n", code->print()); } } else { printf("no top level function.\n"); @@ -294,7 +295,7 @@ StackVarAddrVal* FunctionEnv::allocate_aligned_stack_variable(const TypeSpec& ts int size_bytes, int align_bytes) { if (align_bytes > 16) { - fmt::print("\n\n\nBad stack align: {} bytes for {}\n\n\n\n", align_bytes, ts.print()); + lg::print("\n\n\nBad stack align: {} bytes for {}\n\n\n\n", align_bytes, ts.print()); } auto space = allocate_aligned_stack_space(size_bytes, align_bytes); return alloc_val(ts, space.start_slot, space.slot_count); diff --git a/goalc/compiler/Util.cpp b/goalc/compiler/Util.cpp index f4b57fd969..662f7439cb 100644 --- a/goalc/compiler/Util.cpp +++ b/goalc/compiler/Util.cpp @@ -72,7 +72,7 @@ std::vector Compiler::run_test_from_file(const std::string& source_ } return m_listener.stop_recording_messages(); } catch (std::exception& e) { - fmt::print("[Compiler] Failed to compile test program {}: {}\n", source_code, e.what()); + lg::print("[Compiler] Failed to compile test program {}: {}\n", source_code, e.what()); throw e; } } @@ -98,7 +98,7 @@ std::vector Compiler::run_test_from_string(const std::string& src, } return m_listener.stop_recording_messages(); } catch (std::exception& e) { - fmt::print("[Compiler] Failed to compile test program from string {}: {}\n", src, e.what()); + lg::print("[Compiler] Failed to compile test program from string {}: {}\n", src, e.what()); throw e; } } diff --git a/goalc/compiler/compilation/CompilerControl.cpp b/goalc/compiler/compilation/CompilerControl.cpp index d67b463421..c59b2c3212 100644 --- a/goalc/compiler/compilation/CompilerControl.cpp +++ b/goalc/compiler/compilation/CompilerControl.cpp @@ -16,7 +16,6 @@ #include "goalc/data_compiler/dir_tpages.h" #include "goalc/data_compiler/game_count.h" #include "goalc/data_compiler/game_text_common.h" - /*! * Exit the compiler. Disconnects the listener and tells the target to reset itself. * Will actually exit the next time the REPL runs. @@ -369,10 +368,10 @@ Val* Compiler::compile_get_info(const goos::Object& form, const goos::Object& re auto result = m_symbol_info.lookup_exact_name(args.unnamed.at(0).as_symbol()->name); if (!result) { - fmt::print("No results found.\n"); + lg::print("No results found.\n"); } else { for (auto& info : *result) { - fmt::print("{}", make_symbol_info_description(info)); + lg::print("{}", make_symbol_info_description(info)); } } @@ -496,11 +495,11 @@ Val* Compiler::compile_autocomplete(const goos::Object& form, const goos::Object auto time = timer.getMs(); for (auto& x : result) { - fmt::print(" {}\n", x); + lg::print(" {}\n", x); } - fmt::print("Autocomplete: {}/{} symbols matched, took {:.2f} ms\n", result.size(), - m_symbol_info.symbol_count(), time); + lg::print("Autocomplete: {}/{} symbols matched, took {:.2f} ms\n", result.size(), + m_symbol_info.symbol_count(), time); return get_none(); } @@ -562,12 +561,12 @@ Val* Compiler::compile_print_debug_compiler_stats(const goos::Object& form, auto args = get_va(form, rest); va_check(form, args, {}, {}); - fmt::print("Spill operations (total): {}\n", m_debug_stats.num_spills); - fmt::print("Spill operations (v1 only): {}\n", m_debug_stats.num_spills_v1); - fmt::print("Eliminated moves: {}\n", m_debug_stats.num_moves_eliminated); - fmt::print("Total functions: {}\n", m_debug_stats.total_funcs); - fmt::print("Functions requiring v1: {}\n", m_debug_stats.funcs_requiring_v1_allocator); - fmt::print("Size of autocomplete prefix tree: {}\n", m_symbol_info.symbol_count()); + lg::print("Spill operations (total): {}\n", m_debug_stats.num_spills); + lg::print("Spill operations (v1 only): {}\n", m_debug_stats.num_spills_v1); + lg::print("Eliminated moves: {}\n", m_debug_stats.num_moves_eliminated); + lg::print("Total functions: {}\n", m_debug_stats.total_funcs); + lg::print("Functions requiring v1: {}\n", m_debug_stats.funcs_requiring_v1_allocator); + lg::print("Size of autocomplete prefix tree: {}\n", m_symbol_info.symbol_count()); return get_none(); } diff --git a/goalc/compiler/compilation/ConstantPropagation.cpp b/goalc/compiler/compilation/ConstantPropagation.cpp index 6603c0c95b..59736be3e0 100644 --- a/goalc/compiler/compilation/ConstantPropagation.cpp +++ b/goalc/compiler/compilation/ConstantPropagation.cpp @@ -134,8 +134,8 @@ Compiler::ConstPropResult Compiler::try_constant_propagation(const goos::Object& auto ret = constant_propagation_dispatch(form, env); size_t end_size = code_size(env); if (start_size != end_size) { - fmt::print("Compiler bug in constant propagation. Code was generated: {} vs {}\n", start_size, - end_size); + lg::print("Compiler bug in constant propagation. Code was generated: {} vs {}\n", start_size, + end_size); ASSERT(false); } return ret; @@ -315,4 +315,4 @@ ValOrConstFloat Compiler::get_constant_float_or_variable(const goos::Object& in, return ValOrConstFloat(compile_no_const_prop(prop.value, env)); } } -} \ No newline at end of file +} diff --git a/goalc/compiler/compilation/Debug.cpp b/goalc/compiler/compilation/Debug.cpp index 4d13ec2939..9c4dddb022 100644 --- a/goalc/compiler/compilation/Debug.cpp +++ b/goalc/compiler/compilation/Debug.cpp @@ -1,3 +1,4 @@ +#include "common/log/log.h" #include "common/util/FileUtil.h" #include "goalc/compiler/Compiler.h" @@ -57,19 +58,19 @@ Val* Compiler::compile_dbg(const goos::Object& form, const goos::Object& rest, E (void)rest; (void)env; if (!m_debugger.is_valid()) { - fmt::print("[Debugger] Could not start debugger because there is no valid debugging context\n"); + lg::print("[Debugger] Could not start debugger because there is no valid debugging context\n"); return get_none(); } if (m_debugger.is_attached()) { - fmt::print("[Debugger] Could not start debugger because the debugger is already attached.\n"); + lg::print("[Debugger] Could not start debugger because the debugger is already attached.\n"); return get_none(); } if (m_debugger.attach_and_break()) { - fmt::print("Debugger connected.\n"); + lg::print("Debugger connected.\n"); } else { - fmt::print("ERROR\n"); + lg::print("ERROR\n"); } return get_none(); @@ -81,21 +82,21 @@ Val* Compiler::compile_dbs(const goos::Object& form, const goos::Object& rest, E (void)rest; (void)env; - fmt::print(" Listener connected? {}\n", m_listener.is_connected()); - fmt::print(" Debugger context? {}\n", m_debugger.is_valid()); + lg::print(" Listener connected? {}\n", m_listener.is_connected()); + lg::print(" Debugger context? {}\n", m_debugger.is_valid()); if (m_debugger.is_valid()) { - fmt::print(" Attached? {}\n", m_debugger.is_attached()); + lg::print(" Attached? {}\n", m_debugger.is_attached()); if (m_debugger.is_attached()) { - fmt::print(" Halted? {}\n", m_debugger.is_halted()); + lg::print(" Halted? {}\n", m_debugger.is_halted()); } - fmt::print(" Context: {}\n", m_debugger.get_context_string()); + lg::print(" Context: {}\n", m_debugger.get_context_string()); } if (m_debugger.is_valid()) { } else { - fmt::print("There is no valid debug context from the target."); + lg::print("There is no valid debug context from the target."); } return get_none(); @@ -110,8 +111,8 @@ Val* Compiler::compile_cont(const goos::Object& form, const goos::Object& rest, if (m_debugger.is_valid() && m_debugger.is_attached() && m_debugger.is_halted()) { m_debugger.do_continue(); } else { - fmt::print("Couldn't do :cont. Valid {}, attached {}, halted {}\n", m_debugger.is_valid(), - m_debugger.is_attached(), m_debugger.is_halted()); + lg::print("Couldn't do :cont. Valid {}, attached {}, halted {}\n", m_debugger.is_valid(), + m_debugger.is_attached(), m_debugger.is_halted()); } return get_none(); @@ -126,8 +127,8 @@ Val* Compiler::compile_stop(const goos::Object& form, const goos::Object& rest, if (m_debugger.is_valid() && m_debugger.is_attached() && m_debugger.is_halted()) { m_debugger.detach(); } else { - fmt::print("Couldn't do :stop. Valid {}, attached {}, halted {}\n", m_debugger.is_valid(), - m_debugger.is_attached(), m_debugger.is_halted()); + lg::print("Couldn't do :stop. Valid {}, attached {}, halted {}\n", m_debugger.is_valid(), + m_debugger.is_attached(), m_debugger.is_halted()); } return get_none(); @@ -142,8 +143,8 @@ Val* Compiler::compile_break(const goos::Object& form, const goos::Object& rest, if (m_debugger.is_valid() && m_debugger.is_attached() && m_debugger.is_running()) { m_debugger.do_break(); } else { - fmt::print("Couldn't do :break. Valid {}, attached {}, running {}\n", m_debugger.is_valid(), - m_debugger.is_attached(), m_debugger.is_running()); + lg::print("Couldn't do :break. Valid {}, attached {}, running {}\n", m_debugger.is_valid(), + m_debugger.is_attached(), m_debugger.is_running()); } return get_none(); @@ -152,7 +153,7 @@ Val* Compiler::compile_break(const goos::Object& form, const goos::Object& rest, Val* Compiler::compile_dump_all(const goos::Object& form, const goos::Object& rest, Env* env) { (void)env; if (!m_debugger.is_halted()) { - fmt::print("Couldn't dump memory. Must be attached and halted.\n"); + lg::print("Couldn't dump memory. Must be attached and halted.\n"); return get_none(); } @@ -165,7 +166,7 @@ Val* Compiler::compile_dump_all(const goos::Object& form, const goos::Object& re if (!m_debugger.read_memory(buffer + EE_MAIN_MEM_LOW_PROTECT, EE_MAIN_MEM_SIZE - EE_MAIN_MEM_LOW_PROTECT, EE_MAIN_MEM_LOW_PROTECT)) { - fmt::print("Reading memory failed, not dumping.\n"); + lg::print("Reading memory failed, not dumping.\n"); } else { file_util::write_binary_file(file_util::get_file_path({dest_file}), buffer, EE_MAIN_MEM_SIZE); } @@ -203,18 +204,18 @@ void mem_print(T* data, int count, u32 start_addr, PrintMode mode) { for (int i = 0; i < count; i++) { if ((i % elt_per_line) == 0) { // first in line, so we should print the GOAL address - fmt::print(" 0x{:08x}: ", start_addr + (i * sizeof(T))); + lg::print(" 0x{:08x}: ", start_addr + (i * sizeof(T))); } // print the thing - fmt::print(format_string, data[i]); + lg::print(format_string, data[i]); if ((i % elt_per_line) == (elt_per_line - 1)) { // last in line, newline! - fmt::print("\n"); + lg::print("\n"); } } - fmt::print("\n"); + lg::print("\n"); } } // namespace @@ -363,8 +364,8 @@ Val* Compiler::compile_disasm(const goos::Object& form, const goos::Object& rest addr, addr + size, EE_MAIN_MEM_LOW_PROTECT, EE_MAIN_MEM_SIZE); } - fmt::print("{}\n", m_debugger.get_info_about_addr(addr)); - fmt::print("{}\n", m_debugger.disassemble_x86_with_symbols(size, addr)); + lg::print("{}\n", m_debugger.get_info_about_addr(addr)); + lg::print("{}\n", m_debugger.disassemble_x86_with_symbols(size, addr)); return get_none(); } @@ -417,9 +418,9 @@ Val* Compiler::compile_d_sym_name(const goos::Object& form, const goos::Object& auto sym_name = m_debugger.get_symbol_name_from_offset(ofs); if (sym_name) { - fmt::print("symbol name for symbol {:X}h is {}\n", ofs, sym_name); + lg::print("symbol name for symbol {:X}h is {}\n", ofs, sym_name); } else { - fmt::print("symbol {:X}h is not loaded or is invalid\n", ofs); + lg::print("symbol {:X}h is not loaded or is invalid\n", ofs); } return get_none(); diff --git a/goalc/compiler/compilation/Define.cpp b/goalc/compiler/compilation/Define.cpp index 4b9e4d64ab..4a0da76713 100644 --- a/goalc/compiler/compilation/Define.cpp +++ b/goalc/compiler/compilation/Define.cpp @@ -3,8 +3,6 @@ * Forms which define or set things. */ -#include "common/log/log.h" - #include "goalc/compiler/Compiler.h" /*! diff --git a/goalc/compiler/compilation/Macro.cpp b/goalc/compiler/compilation/Macro.cpp index b2cf1580e4..f324b77b18 100644 --- a/goalc/compiler/compilation/Macro.cpp +++ b/goalc/compiler/compilation/Macro.cpp @@ -49,35 +49,35 @@ Val* Compiler::compile_goos_macro(const goos::Object& o, if (ce.print_err_stack) { bool good_info = false; auto info = m_goos.reader.db.get_info_for(o, &good_info); - fmt::print(fg(fmt::color::yellow) | fmt::emphasis::bold, "Code:\n"); - fmt::print("{}\n", pretty_print::to_string(goos_result, 120)); - fmt::print(fg(fmt::color::yellow) | fmt::emphasis::bold, "From macro: "); - fmt::print(fg(fmt::color::orange), "{}\n", name.print()); + lg::print(fg(fmt::color::yellow) | fmt::emphasis::bold, "Code:\n"); + lg::print("{}\n", pretty_print::to_string(goos_result, 120)); + lg::print(fg(fmt::color::yellow) | fmt::emphasis::bold, "From macro: "); + lg::print(fg(fmt::color::orange), "{}\n", name.print()); if (good_info) { - fmt::print(fg(fmt::color::yellow) | fmt::emphasis::bold, "Used in:\n"); - fmt::print("{}\n", info); + lg::print(fg(fmt::color::yellow) | fmt::emphasis::bold, "Used in:\n"); + lg::print("{}\n", info); ce.print_err_stack = false; } std::string line(80, '-'); line.push_back('\n'); - fmt::print(line); + lg::print(line); } throw; } catch (std::runtime_error& e) { bool good_info = false; auto info = m_goos.reader.db.get_info_for(o, &good_info); - fmt::print(fg(fmt::color::yellow) | fmt::emphasis::bold, "Code:\n"); - fmt::print("{}\n", pretty_print::to_string(goos_result, 120)); - fmt::print(fg(fmt::color::yellow) | fmt::emphasis::bold, "From macro: "); - fmt::print(fg(fmt::color::orange), "{}\n", name.print()); + lg::print(fg(fmt::color::yellow) | fmt::emphasis::bold, "Code:\n"); + lg::print("{}\n", pretty_print::to_string(goos_result, 120)); + lg::print(fg(fmt::color::yellow) | fmt::emphasis::bold, "From macro: "); + lg::print(fg(fmt::color::orange), "{}\n", name.print()); if (good_info) { - fmt::print(fg(fmt::color::yellow) | fmt::emphasis::bold, "Used in:\n"); - fmt::print("{}\n", info); + lg::print(fg(fmt::color::yellow) | fmt::emphasis::bold, "Used in:\n"); + lg::print("{}\n", info); } std::string line(80, '-'); line.push_back('\n'); - fmt::print(line); + lg::print(line); throw; } diff --git a/goalc/compiler/compilation/Type.cpp b/goalc/compiler/compilation/Type.cpp index 6b40c11262..dcf4e958fe 100644 --- a/goalc/compiler/compilation/Type.cpp +++ b/goalc/compiler/compilation/Type.cpp @@ -1,3 +1,4 @@ +#include "common/log/log.h" #include "common/type_system/defenum.h" #include "common/type_system/deftype.h" #include "common/type_system/state.h" @@ -371,8 +372,8 @@ Val* Compiler::compile_deftype(const goos::Object& form, const goos::Object& res auto kv = m_symbol_types.find(result.type.base_type()); if (kv != m_symbol_types.end() && kv->second.base_type() != "type") { // we already have something that's not a type with the same name, this is bad. - fmt::print("[Warning] deftype will redefine {} from {} to a type.\n", result.type.base_type(), - kv->second.print()); + lg::print("[Warning] deftype will redefine {} from {} to a type.\n", result.type.base_type(), + kv->second.print()); } // remember that this is a type m_symbol_types[result.type.base_type()] = m_ts.make_typespec("type"); @@ -958,7 +959,7 @@ Val* Compiler::compile_print_type(const goos::Object& form, const goos::Object& auto args = get_va(form, rest); va_check(form, args, {{}}, {}); auto result = compile(args.unnamed.at(0), env)->to_reg(form, env); - fmt::print("[TYPE] {} {}\n", result->type().print(), result->print()); + lg::print("[TYPE] {} {}\n", result->type().print(), result->print()); return result; } diff --git a/goalc/data_compiler/game_text_common.cpp b/goalc/data_compiler/game_text_common.cpp index 8615ad2d59..d108f34c1b 100644 --- a/goalc/data_compiler/game_text_common.cpp +++ b/goalc/data_compiler/game_text_common.cpp @@ -152,7 +152,7 @@ void compile_game_text(const std::vector& filenames, const std::string& output_prefix) { goos::Reader reader; for (auto& filename : filenames) { - fmt::print("[Build Game Text] {}\n", filename.c_str()); + lg::print("[Build Game Text] {}\n", filename.c_str()); auto code = reader.read_from_file({filename}); parse_text(code, db); } @@ -164,7 +164,7 @@ void compile_game_subtitle(const std::vector& filenames, const std::string& output_prefix) { goos::Reader reader; for (auto& filename : filenames) { - fmt::print("[Build Game Subtitle] {}\n", filename.c_str()); + lg::print("[Build Game Subtitle] {}\n", filename.c_str()); auto code = reader.read_from_file({filename}); parse_subtitle(code, db, filename); } diff --git a/goalc/debugger/Debugger.cpp b/goalc/debugger/Debugger.cpp index b3adb9e74c..0b41ce22e4 100644 --- a/goalc/debugger/Debugger.cpp +++ b/goalc/debugger/Debugger.cpp @@ -7,6 +7,7 @@ #include "Debugger.h" #include "common/goal_constants.h" +#include "common/log/log.h" #include "common/symbols.h" #include "common/util/Assert.h" #include "common/util/Timer.h" @@ -130,7 +131,7 @@ bool Debugger::attach_and_break() { // this may fail if you crash at exactly the wrong time. todo - remove? if (info.kind != xdbg::SignalInfo::BREAK) { - fmt::print("[Debugger] got signal {} when expecting break.\n", (int)info.kind); + lg::print("[Debugger] got signal {} when expecting break.\n", (int)info.kind); } // open the memory of the process @@ -146,13 +147,13 @@ bool Debugger::attach_and_break() { auto signal_count = get_signal_count(); if (signal_count != 0) { - fmt::print("[Debugger] got signal count of {} in attach_and_break\n", signal_count); + lg::print("[Debugger] got signal count of {} in attach_and_break\n", signal_count); } return true; } } else { - fmt::print("[Debugger] attach_and_break can't be done when valid = {} and attached = {}\n", - is_valid(), m_attached); + lg::print("[Debugger] attach_and_break can't be done when valid = {} and attached = {}\n", + is_valid(), m_attached); } return false; } @@ -221,15 +222,15 @@ InstructionPointerInfo Debugger::get_rip_info(u64 rip) { } std::vector Debugger::get_backtrace(u64 rip, u64 rsp) { - fmt::print("Backtrace:\n"); + lg::print("Backtrace:\n"); std::vector bt; if (rip == m_debug_context.base) { // we jumped to NULL. - fmt::print("Jumped to GOAL 0x0. Attempting to find previous function.\n"); + lg::print("Jumped to GOAL 0x0. Attempting to find previous function.\n"); u64 next_rip = 0; if (!read_memory_if_safe(&next_rip, rsp - m_debug_context.base)) { - fmt::print(" failed to read return address off of the stack\n"); + lg::print(" failed to read return address off of the stack\n"); return {}; } @@ -239,8 +240,8 @@ std::vector Debugger::get_backtrace(u64 rip, u64 rsp) { int fails = 0; while (true) { - fmt::print(" rsp: 0x{:x} (#x{:x}) rip: 0x{:x} (#x{:x})\n", rsp, rsp - m_debug_context.base, - rip, rip - m_debug_context.base); + lg::print(" rsp: 0x{:x} (#x{:x}) rip: 0x{:x} (#x{:x})\n", rsp, rsp - m_debug_context.base, + rip, rip - m_debug_context.base); BacktraceFrame frame; frame.rip_info = get_rip_info(rip); frame.rsp_at_rip = rsp; @@ -248,16 +249,16 @@ std::vector Debugger::get_backtrace(u64 rip, u64 rsp) { if (frame.rip_info.knows_function && frame.rip_info.func_debug && frame.rip_info.func_debug->stack_usage) { fails = 0; - fmt::print("<====================== CALL STACK ======================>\n"); - fmt::print("{} from {}\n", frame.rip_info.function_name, frame.rip_info.func_debug->obj_name); + lg::print("<====================== CALL STACK ======================>\n"); + lg::print("{} from {}\n", frame.rip_info.function_name, frame.rip_info.func_debug->obj_name); // we're good! auto disasm = disassemble_at_rip(frame.rip_info); - fmt::print("{}\n", disasm.text); + lg::print("{}\n", disasm.text); u64 rsp_at_call = rsp + *frame.rip_info.func_debug->stack_usage; u64 next_rip = 0; if (!read_memory_if_safe(&next_rip, rsp_at_call - m_debug_context.base)) { - fmt::print("Invalid return address encountered!\n"); + lg::print("Invalid return address encountered!\n"); break; } @@ -267,14 +268,14 @@ std::vector Debugger::get_backtrace(u64 rip, u64 rsp) { } else { if (!frame.rip_info.knows_function) { if (fails == 0) { - fmt::print("Unknown Function at rip\n"); + lg::print("Unknown Function at rip\n"); } /* bool found = false; if (s32(rip - m_debug_context.base) > 0 && m_symbol_name_to_value_map.find("function") != m_symbol_name_to_value_map.cend()) { - fmt::print("Attempting to find function at this address.\n"); + lg::print("Attempting to find function at this address.\n"); u32 function_sym_val = m_symbol_name_to_value_map.at("function"); u32 goal_pc = u32(rip - m_debug_context.base) & -8; @@ -290,21 +291,21 @@ std::vector Debugger::get_backtrace(u64 rip, u64 rsp) { if (wordval == function_sym_val) { // found a function! - fmt::print("Found function after {} bytes!\n", + lg::print("Found function after {} bytes!\n", (rip - m_debug_context.base) - goal_pc); break; } } if (goal_pc <= symtable_end) { - fmt::print("Could not find function within this address.\n"); + lg::print("Could not find function within this address.\n"); } else { rip = goal_pc + m_debug_context.base + BASIC_OFFSET; found = true; } } else*/ if (fails > 70) { - fmt::print( + lg::print( "Backtrace was too long. Exception might have happened outside GOAL code, or the " "stack frame is too long.\n"); break; @@ -312,7 +313,7 @@ std::vector Debugger::get_backtrace(u64 rip, u64 rsp) { // attempt to backtrace anyway! if this fails then rip u64 next_rip = 0; if (!read_memory_if_safe(&next_rip, rsp - m_debug_context.base - 8)) { - fmt::print("Invalid return address encountered!\n"); + lg::print("Invalid return address encountered!\n"); break; } @@ -321,10 +322,10 @@ std::vector Debugger::get_backtrace(u64 rip, u64 rsp) { ++fails; // break; } else if (!frame.rip_info.func_debug) { - fmt::print("Function {} has no debug info.\n", frame.rip_info.function_name); + lg::print("Function {} has no debug info.\n", frame.rip_info.function_name); break; } else { - fmt::print("Function {} with no stack frame data.\n", frame.rip_info.function_name); + lg::print("Function {} with no stack frame data.\n", frame.rip_info.function_name); break; } } @@ -417,21 +418,21 @@ void Debugger::update_break_info() { // todo adjust rip if break instruction???? m_memory_map = m_listener->build_memory_map(); - // fmt::print("{}", m_memory_map.print()); + // lg::print("{}", m_memory_map.print()); read_symbol_table(); m_regs_valid = false; if (!xdbg::get_regs_now(m_debug_context.tid, &m_regs_at_break)) { - fmt::print("[Debugger] get_regs_now failed after break, something is wrong\n"); + lg::print("[Debugger] get_regs_now failed after break, something is wrong\n"); } else { m_regs_valid = true; - fmt::print("{}", m_regs_at_break.print_gprs()); + lg::print("{}", m_regs_at_break.print_gprs()); } if (regs_valid()) { m_break_info = get_rip_info(m_regs_at_break.rip); update_continue_info(); auto dis = disassemble_at_rip(m_break_info); - fmt::print("{}\n", dis.text); + lg::print("{}\n", dis.text); get_backtrace(m_regs_at_break.rip, m_regs_at_break.gprs[emitter::RSP]); } @@ -528,7 +529,7 @@ void Debugger::read_symbol_table_jak1() { if (!xdbg::read_goal_memory(mem.data(), SYM_TABLE_MEM_SIZE, st_base, m_debug_context, m_memory_handle)) { - fmt::print("Read failed during read_symbol_table\n"); + lg::print("Read failed during read_symbol_table\n"); return; } reads++; @@ -562,8 +563,8 @@ void Debugger::read_symbol_table_jak1() { sym_type = sym->type; } else { if (sym_type != sym->type) { - fmt::print("Got bad symbol type. Expected 0x{:x} got 0x{:x}: addr 0x{:x}\n", sym_type, - sym->type, offset + st_base + (uint64_t)m_debug_context.base); + lg::print("Got bad symbol type. Expected 0x{:x} got 0x{:x}: addr 0x{:x}\n", sym_type, + sym->type, offset + st_base + (uint64_t)m_debug_context.base); return; } } @@ -575,7 +576,7 @@ void Debugger::read_symbol_table_jak1() { char str_buff[128]; if (!xdbg::read_goal_memory((u8*)str_buff, 128, info->str + 4, m_debug_context, m_memory_handle)) { - fmt::print("Read symbol string failed during read_symbol_table\n"); + lg::print("Read symbol string failed during read_symbol_table\n"); return; } reads++; @@ -590,7 +591,7 @@ void Debugger::read_symbol_table_jak1() { std::string str(str_buff); if (str.length() >= 50) { - fmt::print("Invalid symbol #x{:x}!\n", sym_offset); + lg::print("Invalid symbol #x{:x}!\n", sym_offset); continue; } @@ -603,7 +604,7 @@ void Debugger::read_symbol_table_jak1() { // to hide this duplicate symbol, we append "-hack-copy" to the end of it. str += "-hack-copy"; } else { - fmt::print("Symbol {} (#x{:x}) appears multiple times!\n", str, sym_offset); + lg::print("Symbol {} (#x{:x}) appears multiple times!\n", str, sym_offset); continue; // ASSERT(false); } @@ -616,8 +617,8 @@ void Debugger::read_symbol_table_jak1() { } ASSERT(m_symbol_offset_to_name_map.size() == m_symbol_name_to_offset_map.size()); - fmt::print("Read symbol table ({} bytes, {} reads, {} symbols, {:.2f} ms)\n", bytes_read, reads, - m_symbol_name_to_offset_map.size(), timer.getMs()); + lg::print("Read symbol table ({} bytes, {} reads, {} symbols, {:.2f} ms)\n", bytes_read, reads, + m_symbol_name_to_offset_map.size(), timer.getMs()); } void Debugger::read_symbol_table_jak2() { @@ -637,7 +638,7 @@ void Debugger::read_symbol_table_jak2() { if (!xdbg::read_goal_memory(mem.data(), SYM_TABLE_MEM_SIZE, st_base, m_debug_context, m_memory_handle)) { - fmt::print("Read failed during read_symbol_table\n"); + lg::print("Read failed during read_symbol_table\n"); return; } reads++; @@ -659,7 +660,7 @@ void Debugger::read_symbol_table_jak2() { // now get the string. char str_buff[128]; if (!xdbg::read_goal_memory((u8*)str_buff, 128, info + 4, m_debug_context, m_memory_handle)) { - fmt::print("Read symbol string failed during read_symbol_table\n"); + lg::print("Read symbol string failed during read_symbol_table\n"); return; } reads++; @@ -674,7 +675,7 @@ void Debugger::read_symbol_table_jak2() { std::string str(str_buff); if (str.length() >= 50) { - fmt::print("Invalid symbol #x{:x}!\n", sym_offset); + lg::print("Invalid symbol #x{:x}!\n", sym_offset); continue; } @@ -687,7 +688,7 @@ void Debugger::read_symbol_table_jak2() { // to hide this duplicate symbol, we append "-hack-copy" to the end of it. str += "-hack-copy"; } else { - fmt::print("Symbol {} (#x{:x}) appears multiple times!\n", str, sym_offset); + lg::print("Symbol {} (#x{:x}) appears multiple times!\n", str, sym_offset); continue; // ASSERT(false); } @@ -700,8 +701,8 @@ void Debugger::read_symbol_table_jak2() { } ASSERT(m_symbol_offset_to_name_map.size() == m_symbol_name_to_offset_map.size()); - fmt::print("Read symbol table ({} bytes, {} reads, {} symbols, {:.2f} ms)\n", bytes_read, reads, - m_symbol_name_to_offset_map.size(), timer.getMs()); + lg::print("Read symbol table ({} bytes, {} reads, {} symbols, {:.2f} ms)\n", bytes_read, reads, + m_symbol_name_to_offset_map.size(), timer.getMs()); } /*! @@ -941,8 +942,8 @@ void Debugger::add_addr_breakpoint(u32 addr) { std::unique_lock lock(m_watcher_mutex); auto kv = m_addr_breakpoints.find(addr); if (kv != m_addr_breakpoints.end()) { - fmt::print("Breakpoint at address 0x{:08x} already exists as breakpoint {}\n", addr, - kv->second.id); + lg::print("Breakpoint at address 0x{:08x} already exists as breakpoint {}\n", addr, + kv->second.id); return; } @@ -950,13 +951,13 @@ void Debugger::add_addr_breakpoint(u32 addr) { bp.goal_addr = addr; bp.id = m_addr_breakpoints.size(); if (!read_memory(&bp.old_data, 1, addr)) { - fmt::print("Failed to read memory for breakpoint, not adding breakpoint\n"); + lg::print("Failed to read memory for breakpoint, not adding breakpoint\n"); return; } u8 int3 = 0xcc; if (!write_memory(&int3, 1, addr)) { - fmt::print("Failed to write memory for breakpoint, not adding breakpoint\n"); + lg::print("Failed to write memory for breakpoint, not adding breakpoint\n"); return; } @@ -970,12 +971,12 @@ void Debugger::remove_addr_breakpoint(u32 addr) { update_continue_info(); auto kv = m_addr_breakpoints.find(addr); if (kv == m_addr_breakpoints.end()) { - fmt::print("Breakpoint at address 0x{:08x} does not exist\n", addr); + lg::print("Breakpoint at address 0x{:08x} does not exist\n", addr); return; } if (!write_memory(&kv->second.old_data, 1, addr)) { - fmt::print("Failed to remove breakpoint\n"); + lg::print("Failed to remove breakpoint\n"); return; } diff --git a/goalc/listener/Listener.cpp b/goalc/listener/Listener.cpp index 84943bcd99..7804d4fe7d 100644 --- a/goalc/listener/Listener.cpp +++ b/goalc/listener/Listener.cpp @@ -29,6 +29,7 @@ #include "common/cross_sockets/XSocket.h" #include "common/util/Assert.h" #include "common/versions.h" +#include "common/log/log.h" #include "Listener.h" @@ -225,7 +226,7 @@ void Listener::receive_func() { if (hdr->msg_id == last_sent_id) { printf("[Listener] Received ACK for most recent message late.\n"); if (last_recvd_id != hdr->msg_id - 1) { - fmt::print( + lg::print( "[Listener] WARNING: message ID jumped from {} to {}. Some messages may have " "been lost. You must wait for an ACK before sending the next message.\n", last_recvd_id, hdr->msg_id); @@ -252,7 +253,7 @@ void Listener::receive_func() { got_ack = true; last_recvd_id = hdr->msg_id; if (last_recvd_id > last_sent_id) { - fmt::print( + lg::print( "[Listener] ERROR: Got an ack message with id of {}, but the last message sent " "had an ID of {}.\n", last_recvd_id, last_sent_id); @@ -550,7 +551,7 @@ void Listener::handle_output_message(const char* msg) { } add_load(name_str.substr(2, name_str.length() - 3), entry); - // fmt::print("LOAD:\n{}", entry.print()); + // lg::print("LOAD:\n{}", entry.print()); } else { // todo unload printf("[Listener Warning] unknown output message \"%s\"\n", msg); diff --git a/goalc/main.cpp b/goalc/main.cpp index a5e0571fd0..b5cf1d04c1 100644 --- a/goalc/main.cpp +++ b/goalc/main.cpp @@ -138,7 +138,7 @@ int main(int argc, char** argv) { // Poll Terminal while (status != ReplStatus::WANT_EXIT) { if (status == ReplStatus::WANT_RELOAD) { - fmt::print("Reloading compiler...\n"); + lg::info("Reloading compiler..."); std::lock_guard lock(compiler_mutex); if (compiler) { compiler->save_repl_history(); @@ -160,7 +160,7 @@ int main(int argc, char** argv) { } } } catch (std::exception& e) { - fmt::print(stderr, "Compiler Fatal Error: {}\n", e.what()); + lg::error("Compiler Fatal Error: {}", e.what()); status = ReplStatus::WANT_EXIT; } diff --git a/goalc/make/MakeSystem.cpp b/goalc/make/MakeSystem.cpp index efda451b6e..0d0b5db421 100644 --- a/goalc/make/MakeSystem.cpp +++ b/goalc/make/MakeSystem.cpp @@ -1,6 +1,7 @@ #include "MakeSystem.h" #include "common/goos/ParseHelpers.h" +#include "common/log/log.h" #include "common/util/FileUtil.h" #include "common/util/Timer.h" @@ -89,8 +90,8 @@ void MakeSystem::load_project_file(const std::string& file_path) { auto data = m_goos.reader.read_from_file({file_path}); // interpret it, which will call various handlers. m_goos.eval(data, m_goos.global_environment.as_env_ptr()); - fmt::print("Loaded project {} with {} steps in {} ms\n", file_path, m_output_to_step.size(), - (int)timer.getMs()); + lg::print("Loaded project {} with {} steps in {} ms\n", file_path, m_output_to_step.size(), + (int)timer.getMs()); } goos::Object MakeSystem::handle_defstep(const goos::Object& form, @@ -256,8 +257,8 @@ std::vector MakeSystem::get_dependencies(const std::string& target) get_dependencies(target, target, &result, &added_deps); - fmt::print("Successfully found all {} dependencies for target in {:.3f}s\n", result.size(), - timer.getSeconds()); + lg::print("Successfully found all {} dependencies for target in {:.3f}s\n", result.size(), + timer.getSeconds()); return result; } @@ -312,8 +313,8 @@ std::vector MakeSystem::filter_dependencies(const std::vector& in, char end) { all_names += name; } if (all_names.length() > 70) { - fmt::print("{}...{}", all_names.substr(0, 70 - 3), end); + lg::print("{}...{}", all_names.substr(0, 70 - 3), end); } else { - fmt::print("{}{}{}", all_names, std::string(70 - all_names.length(), ' '), end); + lg::print("{}{}{}", all_names, std::string(70 - all_names.length(), ' '), end); } } } // namespace @@ -338,21 +339,21 @@ void print_input(const std::vector& in, char end) { bool MakeSystem::make(const std::string& target_in, bool force, bool verbose) { std::string target = m_path_map.apply_remaps(target_in); auto deps = get_dependencies(target); - // fmt::print("All deps:\n"); + // lg::print("All deps:\n"); // for (auto& dep : deps) { - // fmt::print("{}\n", dep); + // lg::print("{}\n", dep); // } if (!force) { deps = filter_dependencies(deps); } - // fmt::print("Filt deps:\n"); + // lg::print("Filt deps:\n"); // for (auto& dep : filtered_deps) { - // fmt::print("{}\n", dep); + // lg::print("{}\n", dep); // } Timer make_timer; - fmt::print("Building {} targets...\n", deps.size()); + lg::print("Building {} targets...\n", deps.size()); int i = 0; for (auto& to_make : deps) { Timer step_timer; @@ -360,10 +361,10 @@ bool MakeSystem::make(const std::string& target_in, bool force, bool verbose) { auto& tool = m_tools.at(rule->tool); int percent = (100.0 * (1 + (i++)) / (deps.size())) + 0.5; if (verbose) { - fmt::print("[{:3d}%] [{:8s}] {}{}\n", percent, tool->name(), rule->input.at(0), - rule->input.size() > 1 ? ", ..." : ""); + lg::print("[{:3d}%] [{:8s}] {}{}\n", percent, tool->name(), rule->input.at(0), + rule->input.size() > 1 ? ", ..." : ""); } else { - fmt::print("[{:3d}%] [{:8s}] ", percent, tool->name()); + lg::print("[{:3d}%] [{:8s}] ", percent, tool->name()); print_input(rule->input, '\r'); } @@ -371,35 +372,35 @@ bool MakeSystem::make(const std::string& target_in, bool force, bool verbose) { try { success = tool->run({rule->input, rule->deps, rule->outputs, rule->arg}, m_path_map); } catch (std::exception& e) { - fmt::print("\n"); - fmt::print("Error: {}\n", e.what()); + lg::print("\n"); + lg::print("Error: {}\n", e.what()); } if (!success) { - fmt::print("Build failed on {}{}.\n", rule->input.at(0), - rule->input.size() > 1 ? ", ..." : ""); + lg::print("Build failed on {}{}.\n", rule->input.at(0), + rule->input.size() > 1 ? ", ..." : ""); throw std::runtime_error("Build failed."); return false; } if (verbose) { if (step_timer.getSeconds() > 0.05) { - fmt::print(fg(fmt::color::yellow), " {:.3f}\n", step_timer.getSeconds()); + lg::print(fg(fmt::color::yellow), " {:.3f}\n", step_timer.getSeconds()); } else { - fmt::print(" {:.3f}\n", step_timer.getSeconds()); + lg::print(" {:.3f}\n", step_timer.getSeconds()); } } else { if (step_timer.getSeconds() > 0.05) { - fmt::print("[{:3d}%] [{:8s}] ", percent, tool->name()); - fmt::print(fg(fmt::color::yellow), "{:.3f} ", step_timer.getSeconds()); + lg::print("[{:3d}%] [{:8s}] ", percent, tool->name()); + lg::print(fg(fmt::color::yellow), "{:.3f} ", step_timer.getSeconds()); print_input(rule->input, '\n'); } else { - fmt::print("[{:3d}%] [{:8s}] {:.3f} ", percent, tool->name(), step_timer.getSeconds()); + lg::print("[{:3d}%] [{:8s}] {:.3f} ", percent, tool->name(), step_timer.getSeconds()); print_input(rule->input, '\n'); } } } - fmt::print("\nSuccessfully built all {} targets in {:.3f}s\n", deps.size(), - make_timer.getSeconds()); + lg::print("\nSuccessfully built all {} targets in {:.3f}s\n", deps.size(), + make_timer.getSeconds()); return true; } diff --git a/goalc/make/Tools.cpp b/goalc/make/Tools.cpp index 2b0657e339..036cba0b05 100644 --- a/goalc/make/Tools.cpp +++ b/goalc/make/Tools.cpp @@ -34,7 +34,7 @@ bool CompilerTool::run(const ToolInput& task, const PathMap& /*path_map*/) { options.write = true; m_compiler->asm_file(options); } catch (std::exception& e) { - fmt::print("Compilation failed: {}\n", e.what()); + lg::print("Compilation failed: {}\n", e.what()); return false; } return true; diff --git a/goalc/regalloc/Allocator.cpp b/goalc/regalloc/Allocator.cpp index fc3d1459c8..948ff7b070 100644 --- a/goalc/regalloc/Allocator.cpp +++ b/goalc/regalloc/Allocator.cpp @@ -7,6 +7,8 @@ #include +#include "common/log/log.h" + #include "goalc/regalloc/allocator_interface.h" #include "third-party/fmt/core.h" @@ -136,7 +138,7 @@ void do_constrained_alloc(RegAllocCache* cache, const AllocationInput& in, bool for (auto& constr : in.constraints) { auto var_id = constr.ireg.id; if (trace_debug) { - fmt::print("[RA] Apply constraint {}\n", constr.to_string()); + lg::print("[RA] Apply constraint {}\n", constr.to_string()); } if (constr.contrain_everywhere) { cache->live_ranges.at(var_id).constrain_everywhere(constr.desired_register); @@ -156,18 +158,18 @@ bool check_constrained_alloc(RegAllocCache* cache, const AllocationInput& in) { auto& lr = cache->live_ranges.at(constr.ireg.id); for (int i = lr.min; i <= lr.max; i++) { if (!lr.conflicts_at(i, constr.desired_register)) { - fmt::print("[RegAlloc Error] There are conflicting constraints on {}: {} and {}\n", - constr.ireg.to_string(), constr.desired_register.print(), - cache->live_ranges.at(constr.ireg.id).get(i).to_string()); + lg::print("[RegAlloc Error] There are conflicting constraints on {}: {} and {}\n", + constr.ireg.to_string(), constr.desired_register.print(), + cache->live_ranges.at(constr.ireg.id).get(i).to_string()); ok = false; } } } else { if (!cache->live_ranges.at(constr.ireg.id) .conflicts_at(constr.instr_idx, constr.desired_register)) { - fmt::print("[RegAlloc Error] There are conflicting constraints on {}: {} and {}\n", - constr.ireg.to_string(), constr.desired_register.print(), - cache->live_ranges.at(constr.ireg.id).get(constr.instr_idx).to_string()); + lg::print("[RegAlloc Error] There are conflicting constraints on {}: {} and {}\n", + constr.ireg.to_string(), constr.desired_register.print(), + cache->live_ranges.at(constr.ireg.id).get(constr.instr_idx).to_string()); ok = false; } } @@ -187,7 +189,7 @@ bool check_constrained_alloc(RegAllocCache* cache, const AllocationInput& in) { auto& ass2 = lr2.get(i); if (ass1.occupies_same_reg(ass2)) { // todo, this error won't be helpful - fmt::print( + lg::print( "[RegAlloc Error] Cannot satisfy constraints at instruction {} due to constraints " "on {} and {}\n", i, lr1.var, lr2.var); @@ -719,10 +721,10 @@ namespace { * Print out the state of the RegAllocCache after doing analysis. */ void print_analysis(const AllocationInput& in, RegAllocCache* cache) { - fmt::print("[RegAlloc] Basic Blocks\n"); - fmt::print("-----------------------------------------------------------------\n"); + lg::print("[RegAlloc] Basic Blocks\n"); + lg::print("-----------------------------------------------------------------\n"); for (auto& b : cache->control_flow.basic_blocks) { - fmt::print("{}\n", b.print(in.instructions)); + lg::print("{}\n", b.print(in.instructions)); } printf("[RegAlloc] Alive Info\n"); @@ -797,14 +799,14 @@ AllocationResult allocate_registers(const AllocationInput& input) { // constraint. if (!check_constrained_alloc(&cache, input)) { result.ok = false; - fmt::print("[RegAlloc Error] Register allocation has failed due to bad constraints.\n"); + lg::print("[RegAlloc Error] Register allocation has failed due to bad constraints.\n"); return result; } // do the allocations! if (!run_allocator(&cache, input, input.debug_settings.allocate_log_level)) { result.ok = false; - fmt::print("[RegAlloc Error] Register allocation has failed.\n"); + lg::print("[RegAlloc Error] Register allocation has failed.\n"); return result; } diff --git a/goalc/regalloc/Allocator_v2.cpp b/goalc/regalloc/Allocator_v2.cpp index 7865dd4188..1a6f3c62bc 100644 --- a/goalc/regalloc/Allocator_v2.cpp +++ b/goalc/regalloc/Allocator_v2.cpp @@ -4,6 +4,7 @@ #include #include +#include "common/log/log.h" #include "common/util/Range.h" #include "third-party/fmt/core.h" @@ -522,7 +523,7 @@ void do_constrained_alloc(RACache* cache, const AllocationInput& input, bool tra for (auto& constr : input.constraints) { auto var_id = constr.ireg.id; if (trace_debug) { - fmt::print("[RA] Apply constraint {}\n", constr.to_string()); + lg::print("[RA] Apply constraint {}\n", constr.to_string()); } cache->vars.at(var_id).constrain_to_register(constr.desired_register); } @@ -573,8 +574,8 @@ bool check_constrained_alloc(RACache* cache, const AllocationInput& in) { for (int i = lr.first_live(); i <= lr.last_live(); i++) { if (lr.assigned()) { if (!lr.assigned_to_reg(constr.desired_register)) { - fmt::print("[RegAlloc Error] There are conflicting constraints on {}: {} and {}\n", - constr.ireg.to_string(), constr.desired_register.print(), "???"); + lg::print("[RegAlloc Error] There are conflicting constraints on {}: {} and {}\n", + constr.ireg.to_string(), constr.desired_register.print(), "???"); ok = false; } } @@ -598,7 +599,7 @@ bool check_constrained_alloc(RACache* cache, const AllocationInput& in) { if (lr1.assigned_to_reg() && lr2.assigned_to_reg()) { if (lr1.reg() == lr2.reg() && !safe_overlap(in, *cache, lr1, lr2, i)) { // todo, this error won't be helpful - fmt::print( + lg::print( "[RegAlloc Error] {} Cannot satisfy constraints at instruction {} due to " "constraints " "on {} and {}, both are assigned to register {}\n", @@ -865,7 +866,7 @@ loop_top: auto& op = input.instructions.at(instr_idx); bool is_read = op.reads(var_idx); bool is_written = op.writes(var_idx); - // fmt::print("op {} {} {}\n", instr_idx, is_read, is_written); + // lg::print("op {} {} {}\n", instr_idx, is_read, is_written); if (!is_read && !is_written) { continue; } @@ -916,7 +917,7 @@ loop_top: } } - fmt::print( + lg::print( "In function {}, register allocator fell back to a highly inefficient strategy to create " "a spill temporary register.\n", input.function_name); @@ -1003,8 +1004,8 @@ bool run_assignment_on_var(const AllocationInput& input, if (vector_contains(allowable_local_var_move_elim, other_var.reg())) { bool worked = check_register_assign(input, *cache, var_idx, other_var.reg()); if (trace) { - fmt::print("m0 trying var {} in {}: {}\n", cache->iregs.at(var_idx).to_string(), - other_var.reg().print(), worked); + lg::print("m0 trying var {} in {}: {}\n", cache->iregs.at(var_idx).to_string(), + other_var.reg().print(), worked); } if (worked) { @@ -1020,10 +1021,10 @@ bool run_assignment_on_var(const AllocationInput& input, const auto& other_var = cache->vars.at(other_live_var_idx); if (trace && var_idx == 5) { - fmt::print(" consider {} {} {} {} [{} {}]\n", other_live_var_idx, - other_var.assigned_to_reg(), var.last_live() == other_var.first_live(), - safe_overlap(input, *cache, var, other_var, var.last_live()), var.last_live(), - other_var.first_live()); + lg::print(" consider {} {} {} {} [{} {}]\n", other_live_var_idx, + other_var.assigned_to_reg(), var.last_live() == other_var.first_live(), + safe_overlap(input, *cache, var, other_var, var.last_live()), var.last_live(), + other_var.first_live()); } if (other_var.assigned_to_reg() && @@ -1031,8 +1032,8 @@ bool run_assignment_on_var(const AllocationInput& input, if (vector_contains(allowable_local_var_move_elim, other_var.reg())) { bool worked = check_register_assign(input, *cache, var_idx, other_var.reg()); if (trace) { - fmt::print("m1 trying var {} in {}: {}\n", cache->iregs.at(var_idx).to_string(), - other_var.reg().print(), worked); + lg::print("m1 trying var {} in {}: {}\n", cache->iregs.at(var_idx).to_string(), + other_var.reg().print(), worked); } if (worked) { @@ -1048,8 +1049,8 @@ bool run_assignment_on_var(const AllocationInput& input, for (auto& reg : assign_order) { bool worked = check_register_assign(input, *cache, var_idx, reg); if (trace) { - fmt::print("m2 trying var {} in {}: {}\n", cache->iregs.at(var_idx).to_string(), - reg.print(), worked); + lg::print("m2 trying var {} in {}: {}\n", cache->iregs.at(var_idx).to_string(), + reg.print(), worked); } if (worked) { var.assign_to_register(reg); @@ -1120,7 +1121,7 @@ AllocationResult allocate_registers_v2(const AllocationInput& input) { check_constrained_alloc(&cache, input); if (!check_constrained_alloc(&cache, input)) { result.ok = false; - fmt::print("[RegAlloc Error] Register allocation has failed due to bad constraints.\n"); + lg::print("[RegAlloc Error] Register allocation has failed due to bad constraints.\n"); return result; } @@ -1157,7 +1158,7 @@ AllocationResult allocate_registers_v2(const AllocationInput& input) { for (int var_idx = 0; var_idx < input.max_vars; var_idx++) { auto& var = cache.vars.at(var_idx); if (var.seen() && !var.assigned()) { - // fmt::print("av2: {} failed\n", input.function_name); + // lg::print("av2: {} failed\n", input.function_name); result.ok = false; return result; } @@ -1212,4 +1213,4 @@ AllocationResult allocate_registers_v2(const AllocationInput& input) { result.num_spills = cache.stats.num_spill_ops; return result; -} \ No newline at end of file +} diff --git a/goalc/regalloc/allocator_interface.cpp b/goalc/regalloc/allocator_interface.cpp index 949b663e8d..f63a4b7699 100644 --- a/goalc/regalloc/allocator_interface.cpp +++ b/goalc/regalloc/allocator_interface.cpp @@ -7,31 +7,32 @@ #include -#include "third-party/fmt/core.h" +#include "common/log/log.h" +#include "third-party/fmt/core.h" /*! * Print out the input data for debugging. */ void print_allocate_input(const AllocationInput& in) { - fmt::print("[RegAlloc] Debug Input Program:\n"); + lg::print("[RegAlloc] Debug Input Program:\n"); if (in.instructions.size() == in.debug_instruction_names.size()) { for (size_t i = 0; i < in.instructions.size(); i++) { - // fmt::print(" [{}] {} -> {}\n", in.debug_instruction_names.at(i), + // lg::print(" [{}] {} -> {}\n", in.debug_instruction_names.at(i), // in.instructions.at(i).print()); - fmt::print(" [{:3d}] {:30} -> {:30}\n", i, in.debug_instruction_names.at(i), - in.instructions.at(i).print()); + lg::print(" [{:3d}] {:30} -> {:30}\n", i, in.debug_instruction_names.at(i), + in.instructions.at(i).print()); } } else { for (const auto& instruction : in.instructions) { - fmt::print(" [{:3d}] {}\n", instruction.print()); + lg::print(" [{:3d}] {}\n", instruction.print()); } } - fmt::print("[RegAlloc] Debug Input Constraints:\n"); + lg::print("[RegAlloc] Debug Input Constraints:\n"); for (const auto& c : in.constraints) { - fmt::print(" {}\n", c.to_string()); + lg::print(" {}\n", c.to_string()); } - fmt::print("\n"); + lg::print("\n"); } /*! diff --git a/test/goalc/test_debugger.cpp b/test/goalc/test_debugger.cpp index dbce885a92..312bb51669 100644 --- a/test/goalc/test_debugger.cpp +++ b/test/goalc/test_debugger.cpp @@ -8,11 +8,11 @@ namespace { void connect_compiler_and_debugger(Compiler& compiler, bool do_break) { - lg::info("connect_compiler_and_debugger:\n"); + lg::info("connect_compiler_and_debugger:"); bool connect_status = compiler.connect_to_target(); - lg::info("connected: {}\n", connect_status); + lg::info("connected: {}", connect_status); ASSERT_TRUE(connect_status); - lg::info("poking...\n"); + lg::info("poking..."); compiler.poke_target(); for (int i = 0; i < 100; i++) { if (compiler.get_debugger().is_valid()) { @@ -25,9 +25,9 @@ void connect_compiler_and_debugger(Compiler& compiler, bool do_break) { ASSERT_TRUE(compiler.get_debugger().is_valid()); if (do_break) { - lg::info("break...\n"); + lg::info("break..."); compiler.run_test_from_string("(dbg)"); - lg::info("OK! {} {} {}\n", compiler.get_debugger().is_valid(), + lg::info("OK! {} {} {}", compiler.get_debugger().is_valid(), compiler.get_debugger().is_attached(), compiler.get_debugger().is_halted()); } } From 6bd4649fd0381a99d9ab370ae7ac06149d1458c1 Mon Sep 17 00:00:00 2001 From: water111 <48171810+water111@users.noreply.github.com> Date: Sat, 1 Oct 2022 12:29:08 -0400 Subject: [PATCH 04/10] fix deadlock on shutdown (#1937) --- common/log/log.cpp | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/common/log/log.cpp b/common/log/log.cpp index b1904a117f..2009bdad54 100644 --- a/common/log/log.cpp +++ b/common/log/log.cpp @@ -44,16 +44,12 @@ void log_message(level log_level, LogTime& now, const char* message) { char date_time_buffer[128]; time_t now_seconds = now.tv.tv_sec; auto now_milliseconds = now.tv.tv_usec / 1000; - strftime(date_time_buffer, 128, "%Y-%m-%d %H:%M:%S", localtime(&now_seconds)); - std::string date_string = fmt::format("[{}:{:03d}]", date_time_buffer, now_milliseconds); strftime(date_time_buffer, 128, "%M:%S", localtime(&now_seconds)); - std::string time_condensed = fmt::format("[{}]:{:03d}]", date_time_buffer, now_milliseconds); + std::string time_string = fmt::format("[{}:{:03d}]", date_time_buffer, now_milliseconds); #else char date_time_buffer[128]; - strftime(date_time_buffer, 128, "%Y-%m-%d %H:%M:%S", localtime(&now.tim)); - std::string date_string = fmt::format("[{}]", date_time_buffer); strftime(date_time_buffer, 128, "%M:%S", localtime(&now.tim)); - std::string time_condensed = fmt::format("[{}]", date_time_buffer); + std::string time_string = fmt::format("[{}]", date_time_buffer); #endif { @@ -61,7 +57,7 @@ void log_message(level log_level, LogTime& now, const char* message) { if (gLogger.fp && log_level >= gLogger.file_log_level) { // log to file std::string file_string = - fmt::format("{} [{}] {}\n", date_string, log_level_names[int(log_level)], message); + fmt::format("{} [{}] {}\n", time_string, log_level_names[int(log_level)], message); fwrite(file_string.c_str(), file_string.length(), 1, gLogger.fp); if (log_level >= gLogger.flush_level) { fflush(gLogger.fp); @@ -69,7 +65,7 @@ void log_message(level log_level, LogTime& now, const char* message) { } if (log_level >= gLogger.stdout_log_level) { - fmt::print("{} [", time_condensed); + fmt::print("{} [", time_string); fmt::print(fg(log_colors[int(log_level)]), "{}", log_level_names[int(log_level)]); fmt::print("] {}\n", message); if (log_level >= gLogger.flush_level) { @@ -80,7 +76,12 @@ void log_message(level log_level, LogTime& now, const char* message) { } if (log_level == level::die) { - exit(-1); + fflush(stdout); + fflush(stderr); + if (gLogger.fp) { + fflush(gLogger.fp); + } + abort(); } } From d52739226c3d60d7b4f831613ed835660f53b39a Mon Sep 17 00:00:00 2001 From: water111 <48171810+water111@users.noreply.github.com> Date: Sat, 1 Oct 2022 13:39:56 -0400 Subject: [PATCH 05/10] [decomp] decompile decomp.gc (#1936) A few issues: - lwidea's fr3 is getting loaded and unloaded all the time - the debug line drawing clipping is wrong (doesn't seem wrong in pcsx2, so I think this is on us) - nothing actually using vis data yet - at a large distance, our view frustum culling seems slightly too aggressive (might be that viewport scissoring is wrong) - in the city, things seem darker as you move away. unclear how this is happening (fog?) --- decompiler/analysis/mips2c.cpp | 4 + decompiler/config/jak2/all-types.gc | 75 +- decompiler/config/jak2/hacks.jsonc | 40 +- decompiler/config/jak2/inputs.jsonc | 6 +- decompiler/config/jak2/type_casts.jsonc | 19 + decompiler/config/jak2/var_names.jsonc | 28 + game/CMakeLists.txt | 1 + .../opengl_renderer/OpenGLRenderer.cpp | 1 + game/graphics/opengl_renderer/buckets.h | 1 + .../opengl_renderer/loader/Loader.cpp | 5 +- game/graphics/opengl_renderer/loader/Loader.h | 3 +- game/graphics/pipelines/opengl.cpp | 7 +- game/kernel/common/kdgo.cpp | 28 +- game/kernel/common/kdgo.h | 5 +- game/kernel/common/klink.cpp | 5 +- game/kernel/jak1/kdgo.cpp | 26 + game/kernel/jak2/kdgo.cpp | 26 +- game/mips2c/jak2_functions/debug.cpp | 136 +++ game/mips2c/mips2c_private.h | 5 + game/mips2c/mips2c_table.cpp | 4 +- game/overlord/iso.cpp | 81 +- game/overlord/isocommon.h | 3 +- goal_src/jak2/dgos/lwidea.gd | 18 + goal_src/jak2/engine/ai/enemy-h.gc | 358 +++++++ goal_src/jak2/engine/anim/joint.gc | 2 +- goal_src/jak2/engine/camera/cam-update.gc | 166 +++- goal_src/jak2/engine/debug/debug.gc | 8 +- goal_src/jak2/engine/game/idle-control.gc | 25 + goal_src/jak2/engine/game/main.gc | 6 +- .../engine/gfx/texture/texture-anim-funcs.gc | 3 + goal_src/jak2/engine/level/bsp-h.gc | 6 +- goal_src/jak2/engine/level/level-h.gc | 2 +- goal_src/jak2/engine/level/level.gc | 2 +- goal_src/jak2/engine/load/decomp-h.gc | 2 +- goal_src/jak2/engine/load/decomp.gc | 542 ++++++++++ goal_src/jak2/engine/nav/nav-enemy-h.gc | 260 +++++ goal_src/jak2/examples/debug-jak2.gc | 5 +- goal_src/jak2/game.gp | 24 + .../jak2/levels/city/common/citizen-fat.gc | 8 + goal_src/jak2/levels/city/common/citizen-h.gc | 33 + goal_src/jak2/levels/city/common/civilian.gc | 40 + .../reference/jak2/engine/anim/joint_REF.gc | 2 +- .../jak2/engine/camera/cam-update_REF.gc | 936 +++--------------- .../reference/jak2/engine/level/bsp-h_REF.gc | 2 + .../jak2/engine/level/level-h_REF.gc | 2 +- .../reference/jak2/engine/load/decomp_REF.gc | 539 ++++++++++ test/offline/config/jak2/config.jsonc | 2 + 47 files changed, 2579 insertions(+), 923 deletions(-) create mode 100644 game/mips2c/jak2_functions/debug.cpp create mode 100644 goal_src/jak2/dgos/lwidea.gd create mode 100644 test/decompiler/reference/jak2/engine/load/decomp_REF.gc diff --git a/decompiler/analysis/mips2c.cpp b/decompiler/analysis/mips2c.cpp index 3671fb62a5..89faf72b24 100644 --- a/decompiler/analysis/mips2c.cpp +++ b/decompiler/analysis/mips2c.cpp @@ -1076,6 +1076,10 @@ Mips2C_Line handle_normal_instr(Mips2C_Output& output, return handle_generic_op3(i0, instr_str, "adds"); case InstructionKind::SUBS: return handle_generic_op3(i0, instr_str, "subs"); + case InstructionKind::MINS: + return handle_generic_op3(i0, instr_str, "mins"); + case InstructionKind::MAXS: + return handle_generic_op3(i0, instr_str, "maxs"); case InstructionKind::XOR: return handle_generic_op3(i0, instr_str, "xor_"); case InstructionKind::AND: diff --git a/decompiler/config/jak2/all-types.gc b/decompiler/config/jak2/all-types.gc index fc75351bfb..d60f0b33a3 100644 --- a/decompiler/config/jak2/all-types.gc +++ b/decompiler/config/jak2/all-types.gc @@ -2818,7 +2818,7 @@ (tex-l2-shrub 91) ;; tex (shrub-l2-shrub 92) ;; shrub (shrub-n-l2-shrub 93) ;; shrub - (billboard-l2-shrub 94) ;; shrub + (billboard-l2-shrub 94) ;; shrub (shrub-v-l2-shrub 95) ;; shrub (shrub-nt-l2-shrub 96) ;; shrub (merc-l2-shrub 97) ;; merc @@ -6165,7 +6165,7 @@ @see [[memory-usage-block::10]]" (_type_ symbol) memory-usage-block 14) (inside-boxes-check (_type_ vector) symbol 15) - (level-method-16 () none 16) ;; (update-vis! (_type_ level-vis-info uint uint) symbol 16) + (update-vis! (_type_ level-vis-info uint (pointer uint8)) symbol 16) (load-continue (_type_) _type_ 17) (load-begin (_type_) _type_ 18) (login-begin (_type_) _type_ 19) @@ -17713,6 +17713,7 @@ ;; 0 28 (all-visible-list (pointer uint16) :offset-assert 32) (visible-list-length int16 :offset-assert 36) + (extra-vis-list-length int16 :offset-assert 38) (drawable-trees drawable-tree-array :offset-assert 40) (pat pointer :offset-assert 44) (pat-length int32 :offset-assert 48) @@ -17747,8 +17748,7 @@ ;; 200 is some array ;; 204 is maybe that array's length (wind-array-length int32 :offset 204) - ;; 216 is a vector array - ;; (vec-array (pointer vector) :offset 216) ; TODO see - `update-visible` hits assertion + (vis-spheres vector-array :offset 216) (region-tree drawable-tree-region-prim :offset 252) (tfrag-masks texture-masks-array :offset-assert 256) @@ -17771,6 +17771,8 @@ (bsp-offset vector :inline :offset-assert 304) + + (unk-data uint32 18 :offset 180) (end uint8 :offset 399) @@ -23700,7 +23702,6 @@ ;; decomp ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -#| (deftype huf-dictionary-node (structure) ((zero uint16 :offset-assert 0) (one uint16 :offset-assert 2) @@ -23709,12 +23710,11 @@ :size-assert #x4 :flag-assert #x900000004 ) -|# -;; (define-extern unpack-comp-rle function) ;; (function (pointer int8) (pointer int8) none) -;; (define-extern unpack-comp-huf function) ;; (function (pointer uint8) (pointer uint8) uint huf-dictionary-node none) -(define-extern unpack-comp-lzo (function object object none)) -;; (define-extern pack-comp-rle function) +(define-extern unpack-comp-rle (function (pointer int8) (pointer int8) none)) +(define-extern unpack-comp-huf (function (pointer uint8) (pointer uint8) uint huf-dictionary-node none)) +(define-extern unpack-comp-lzo (function (pointer uint8) (pointer uint8) none)) +(define-extern pack-comp-rle (function (pointer uint8) (pointer uint8) int int none)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; background ;; @@ -32071,15 +32071,14 @@ ) |# -#| (deftype nav-enemy (enemy) - ((frustration-point vector :inline :offset-assert 540) - (move-dest vector :inline :offset-assert 556) - (frustration-time time-frame :offset-assert 572) ;; time-frame - (blocked-start-time time-frame :offset-assert 580) - (restore-nav-radius-time time-frame :offset-assert 588) - (nav-radius-backup float :offset-assert 596) - (circle-radial-dist float :offset-assert 240) + ((frustration-point vector :inline :offset-assert 544) + (move-dest vector :inline :offset-assert 560) + (frustration-time time-frame :offset-assert 576) ;; time-frame + (blocked-start-time time-frame :offset-assert 584) + (restore-nav-radius-time time-frame :offset-assert 592) + (nav-radius-backup float :offset-assert 600) + (circle-radial-dist float :offset 244) ) :method-count-assert 178 :size-assert #x25c @@ -32128,7 +32127,6 @@ (nav-enemy-method-177 () none 177) ) ) -|# #| (deftype nav-enemy-debug-control-info (basic) @@ -49304,9 +49302,9 @@ ;; citizen-h ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -#| (deftype citizen (nav-enemy) - () + ( + (pad uint8 :offset 963)) :method-count-assert 201 :size-assert #x3c4 :flag-assert #xc9035003c4 @@ -49337,7 +49335,6 @@ (citizen-method-200 () none 200) ) ) -|# ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -50137,23 +50134,22 @@ ) |# -#| (deftype civilian (citizen) - ((info basic :offset-assert 960) - (anim-panic-run int32 :offset-assert 964) - (anim-on-ground int32 :offset-assert 968) - (anim-dive int32 :offset-assert 972) - (anim-get-up-front int32 :offset-assert 976) - (anim-get-up-back int32 :offset-assert 980) - (last-second-pos vector :inline :offset-assert 988) - (last-distance float :offset-assert 1004) - (next-time time-frame :offset-assert 1012) - (dive-target-point vector :inline :offset-assert 1020) - (dive-reaction float :offset-assert 1036) - (allow-dive basic :offset-assert 1040) - (dive-finished? basic :offset-assert 1044) - (hit-face uint32 :offset-assert 1048) - (seat int32 :offset-assert 1052) + ((info basic :offset-assert 964) + (anim-panic-run int32 :offset-assert 968) + (anim-on-ground int32 :offset-assert 972) + (anim-dive int32 :offset-assert 976) + (anim-get-up-front int32 :offset-assert 980) + (anim-get-up-back int32 :offset-assert 984) + (last-second-pos vector :inline :offset-assert 992) + (last-distance float :offset-assert 1008) + (next-time time-frame :offset-assert 1016) + (dive-target-point vector :inline :offset-assert 1024) + (dive-reaction float :offset-assert 1040) + (allow-dive basic :offset-assert 1044) + (dive-finished? basic :offset-assert 1048) + (hit-face uint32 :offset-assert 1052) + (seat int32 :offset-assert 1056) ) :method-count-assert 218 :size-assert #x424 @@ -50178,7 +50174,6 @@ (civilian-method-217 () none 217) ) ) -|# ;; (define-extern civilian-flee-post function) ;; (define-extern civilian-avoid-danger-post function) @@ -50275,7 +50270,6 @@ ;; citizen-fat ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -#| (deftype citizen-fat (civilian) () :method-count-assert 218 @@ -50284,7 +50278,6 @@ (:methods ) ) -|# ;; (define-extern *citizen-fat-global-info* civilian-global-info) ;; (define-extern *citizen-fat-nav-enemy-info* nav-enemy-info) diff --git a/decompiler/config/jak2/hacks.jsonc b/decompiler/config/jak2/hacks.jsonc index 80bfbf66df..5399a55879 100644 --- a/decompiler/config/jak2/hacks.jsonc +++ b/decompiler/config/jak2/hacks.jsonc @@ -295,7 +295,45 @@ "upload-vis-bits": [2, 6, 3, 0], "set-background-regs!": [4, 3], "draw-drawable-tree-instance-tie": [21, 23, 31, 33], - "command-get-process": [43] + "command-get-process": [43], + "unpack-comp-rle": [1, 3, 5, 6], + "(method 16 level)": [ + 0, 1, 5, 13, 14, 15 + + ], + "unpack-comp-huf": [2, 4, 5, 6, 7, 8, 9], + "unpack-comp-lzo": [ + 0, +1, +4, +5, +6, +7, +15, +16, +17, +18, +19, +20, +21, +22, +23, +24, +25, +26, +27, +28, +29, +30, +31, +32, +33, +34, +35, // branch fwd 39 +39, // branch fwd no delay +43, // goto 18 +45 // goto 6 +] }, // Sometimes the game might use format strings that are fetched dynamically, diff --git a/decompiler/config/jak2/inputs.jsonc b/decompiler/config/jak2/inputs.jsonc index eb8acee533..ed9cbe3f07 100644 --- a/decompiler/config/jak2/inputs.jsonc +++ b/decompiler/config/jak2/inputs.jsonc @@ -148,13 +148,13 @@ // "DGO/UNB.DGO", // "DGO/CPO.DGO", // "DGO/CAP.DGO", - "DGO/CWI.DGO" + "DGO/CWI.DGO", // "DGO/CTYKORA.DGO", // "DGO/RUI.DGO", // "DGO/LSACK.DGO", // "DGO/CTYASHA.DGO", // "DGO/LPRTRACE.DGO", - // "DGO/LWIDEA.DGO", + "DGO/LWIDEA.DGO" // "DGO/HIPHOG.DGO", // "DGO/LSMYSBRT.DGO", // "DGO/LRACEBB.DGO", @@ -184,5 +184,5 @@ "streamed_audio_file_names": [], - "levels_to_extract": ["PRI.DGO", "CTA.DGO", "CWI.DGO"] + "levels_to_extract": ["PRI.DGO", "CTA.DGO", "CWI.DGO", "LWIDEA.DGO"] } diff --git a/decompiler/config/jak2/type_casts.jsonc b/decompiler/config/jak2/type_casts.jsonc index 23f9d4c265..75b7832b06 100644 --- a/decompiler/config/jak2/type_casts.jsonc +++ b/decompiler/config/jak2/type_casts.jsonc @@ -2759,5 +2759,24 @@ "(method 13 sync-paused)": [ ["_stack_", 16, "res-tag"], [[29, 45], "v1", "(pointer float)"] + ], + + "unpack-comp-rle": [ + [[10, 26], "a0", "(pointer int8)"] + ], + + "(method 16 level)": [ + [222, "v1", "(pointer uint128)"], + [223, "a1", "(pointer uint128)"], + [225, "a0", "(pointer uint128)"], + [[71,168], "s1", "(pointer int8)"], + [72, "v1", "(pointer int8)"], + [[74,169], "s0", "(pointer int8)"], + [[170, 193], "s1", "(pointer uint8)"], + [[171, 193], "s2", "(pointer uint8)"], + [227, "v1", "(pointer uint8)"] + ], + "unpack-comp-huf": [ + [[21,23], "t3", "(pointer uint16)"] ] } diff --git a/decompiler/config/jak2/var_names.jsonc b/decompiler/config/jak2/var_names.jsonc index d50d72c750..c9414df3f9 100644 --- a/decompiler/config/jak2/var_names.jsonc +++ b/decompiler/config/jak2/var_names.jsonc @@ -1537,5 +1537,33 @@ "s4-0": "pad", "s3-1": ["buttons-pushed", "pad-buttons"] } + }, + "(method 16 level)": { + "args": ["obj", "vis-info", "unused", "in-bsp-vis-string"], + "vars": { + "a0-1":"cam-leaf-idx", + "v1-1":"curr-vis-string-offset", + "s3-0":"desired-vis-string-offset", + "s3-1":"vis-buf", + "s2-0":"lower-flag-bits", + "s1-0":"spad-start", + "s0-0":"spad-end", + "s4-1":"list-len", + "v1-30":"qwc", + "v1-33":"comp-mode", + "v1-35":"qwc2", + "sv-16":"extra-vis-length", + "sv-32":"extra-vis-dest", + "v1-45":"extra-vis-in", + "a0-25":"extra-vis-idx", + "a1-9":"vis-byte", + "s2-1":"vis-ptr", + "s1-1":"all-vis-ptr", + "v1-51":"vis-error", + "v1-55":"unpacked-vis-ptr", + "a0-42":"final-vis-ptr", + "a1-22":"all-vis", + "a2-11":"vis-qwc" + } } } diff --git a/game/CMakeLists.txt b/game/CMakeLists.txt index 2036d07565..67f46c74bc 100644 --- a/game/CMakeLists.txt +++ b/game/CMakeLists.txt @@ -83,6 +83,7 @@ set(RUNTIME_SOURCE mips2c/jak1_functions/tie_methods.cpp mips2c/jak1_functions/time_of_day.cpp mips2c/jak2_functions/collide_func.cpp + mips2c/jak2_functions/debug.cpp mips2c/jak2_functions/font.cpp mips2c/jak2_functions/joint.cpp mips2c/jak2_functions/texture.cpp diff --git a/game/graphics/opengl_renderer/OpenGLRenderer.cpp b/game/graphics/opengl_renderer/OpenGLRenderer.cpp index cd8849e3fe..d3c0c6baea 100644 --- a/game/graphics/opengl_renderer/OpenGLRenderer.cpp +++ b/game/graphics/opengl_renderer/OpenGLRenderer.cpp @@ -101,6 +101,7 @@ void OpenGLRenderer::init_bucket_renderers_jak2() { std::vector{tfrag3::TFragmentTreeKind::TRANS}, false, 0); init_bucket_renderer("debug-no-zbuf1", BucketCategory::OTHER, BucketId::DEBUG_NO_ZBUF1, 0x8000); + init_bucket_renderer("debug2", BucketCategory::OTHER, BucketId::DEBUG2, 0x8000); init_bucket_renderer("debug-no-zbuf2", BucketCategory::OTHER, BucketId::DEBUG_NO_ZBUF2, 0x8000); init_bucket_renderer("debug3", BucketCategory::OTHER, BucketId::DEBUG3, 0x8000); diff --git a/game/graphics/opengl_renderer/buckets.h b/game/graphics/opengl_renderer/buckets.h index eabfbe5bff..d52e26ed01 100644 --- a/game/graphics/opengl_renderer/buckets.h +++ b/game/graphics/opengl_renderer/buckets.h @@ -89,6 +89,7 @@ enum class BucketId { SHRUB_L1_SHRUB = 83, TFRAG_T_L0_ALPHA = 128, DEBUG_NO_ZBUF1 = 318, + DEBUG2 = 324, DEBUG_NO_ZBUF2 = 325, DEBUG3 = 326, MAX_BUCKETS = 327 diff --git a/game/graphics/opengl_renderer/loader/Loader.cpp b/game/graphics/opengl_renderer/loader/Loader.cpp index 6c3c0c5302..0c2d7adf86 100644 --- a/game/graphics/opengl_renderer/loader/Loader.cpp +++ b/game/graphics/opengl_renderer/loader/Loader.cpp @@ -17,7 +17,8 @@ std::string uppercase_string(const std::string& s) { } } // namespace -Loader::Loader(const fs::path& base_path) : m_base_path(base_path) { +Loader::Loader(const fs::path& base_path, int max_levels) + : m_base_path(base_path), m_max_levels(max_levels) { m_loader_thread = std::thread(&Loader::loader_thread, this); m_loader_stages = make_loader_stages(); } @@ -333,7 +334,7 @@ void Loader::update(TexturePool& texture_pool) { auto evt = scoped_prof("gpu-unload"); // try to remove levels. Timer unload_timer; - if (m_loaded_tfrag3_levels.size() >= 3) { + if ((int)m_loaded_tfrag3_levels.size() >= m_max_levels) { for (auto& lev : m_loaded_tfrag3_levels) { if (lev.second->frames_since_last_used > 180) { std::unique_lock lk(texture_pool.mutex()); diff --git a/game/graphics/opengl_renderer/loader/Loader.h b/game/graphics/opengl_renderer/loader/Loader.h index f31d4d5fd8..fbce81e7ac 100644 --- a/game/graphics/opengl_renderer/loader/Loader.h +++ b/game/graphics/opengl_renderer/loader/Loader.h @@ -16,7 +16,7 @@ class Loader { public: static constexpr float TIE_LOAD_BUDGET = 1.5f; static constexpr float SHARED_TEXTURE_LOAD_BUDGET = 3.f; - Loader(const fs::path& base_path); + Loader(const fs::path& base_path, int max_levels); ~Loader(); void update(TexturePool& tex_pool); void update_blocking(TexturePool& tex_pool); @@ -53,4 +53,5 @@ class Loader { std::vector> m_loader_stages; fs::path m_base_path; + int m_max_levels = 0; }; diff --git a/game/graphics/pipelines/opengl.cpp b/game/graphics/pipelines/opengl.cpp index 63814480e4..dd8b490f38 100644 --- a/game/graphics/pipelines/opengl.cpp +++ b/game/graphics/pipelines/opengl.cpp @@ -38,6 +38,8 @@ namespace { constexpr bool run_dma_copy = false; +constexpr PerGameVersion fr3_level_count(3, 7); + struct GraphicsData { // vsync std::mutex sync_mutex; @@ -72,8 +74,9 @@ struct GraphicsData { GraphicsData(GameVersion version) : dma_copier(EE_MAIN_MEM_SIZE), texture_pool(std::make_shared(version)), - loader(std::make_shared(file_util::get_jak_project_dir() / "out" / - game_version_names[version] / "fr3")), + loader(std::make_shared( + file_util::get_jak_project_dir() / "out" / game_version_names[version] / "fr3", + fr3_level_count[version])), ogl_renderer(texture_pool, loader, version), version(version) {} }; diff --git a/game/kernel/common/kdgo.cpp b/game/kernel/common/kdgo.cpp index a92ebb9877..86039b6a75 100644 --- a/game/kernel/common/kdgo.cpp +++ b/game/kernel/common/kdgo.cpp @@ -232,30 +232,6 @@ Ptr GetNextDGO(u32* lastObjectFlag) { return buffer; } -/*! - * Instruct the IOP to continue loading the next object. - * Only should be called once it is safe to overwrite the previous. - * @param heapPtr : pointer to heap so the IOP could try to load directly into a heap if it wants. - * This should be updated after each object file load to make sure the IOP knows the exact location - * of the end of the GOAL heap data. - * DONE, - * EXACT - */ -void ContinueLoadingDGO(Ptr heapPtr) { - u32 msgID = sMsgNum; - RPC_Dgo_Cmd* sendBuff = sMsg + sMsgNum; - sMsgNum = sMsgNum ^ 1; - sendBuff->result = DGO_RPC_RESULT_INIT; - sMsg[msgID].buffer1 = 0; - sMsg[msgID].buffer2 = 0; - sMsg[msgID].buffer_heap_top = heapPtr.offset; - // the IOP will wait for this RpcCall to continue the DGO state machine. - RpcCall(DGO_RPC_CHANNEL, DGO_RPC_LOAD_NEXT_FNO, true, sendBuff, sizeof(RPC_Dgo_Cmd), sendBuff, - sizeof(RPC_Dgo_Cmd)); - // this async RPC call will complete when the next object is fully loaded. - sLastMsg = sendBuff; -} - /*! * Load the TEST.DGO file. * Presumably used for debugging DGO loads. @@ -291,7 +267,9 @@ void LoadDGOTest() { } // okay to load the next one - ContinueLoadingDGO(Ptr(0x4000000)); + ASSERT(false); // this is different per version, annoyingly. This function is unused though, + // so let's be lazy for now... + // ContinueLoadingDGO(Ptr(0x4000000)); } sShowStallMsg = lastShowStall; diff --git a/game/kernel/common/kdgo.h b/game/kernel/common/kdgo.h index 5a75d0b1d0..9e6a5b4e12 100644 --- a/game/kernel/common/kdgo.h +++ b/game/kernel/common/kdgo.h @@ -2,8 +2,10 @@ #include "common/common_types.h" +#include "game/common/dgo_rpc_types.h" #include "game/kernel/common/Ptr.h" +extern u32 sMsgNum; s32 RpcCall(s32 rpcChannel, u32 fno, bool async, @@ -13,7 +15,6 @@ s32 RpcCall(s32 rpcChannel, s32 recvSize); void BeginLoadingDGO(const char* name, Ptr buffer1, Ptr buffer2, Ptr currentHeap); Ptr GetNextDGO(u32* lastObjectFlag); -void ContinueLoadingDGO(Ptr heapPtr); u64 RpcCall_wrapper(void* _args); u32 RpcBusy(s32 channel); void RpcSync(s32 channel); @@ -23,3 +24,5 @@ u32 InitRPC(); void StopIOP(); extern u32 sShowStallMsg; +extern RPC_Dgo_Cmd sMsg[2]; +extern RPC_Dgo_Cmd* sLastMsg; \ No newline at end of file diff --git a/game/kernel/common/klink.cpp b/game/kernel/common/klink.cpp index 4a89d7694c..6017e69e5d 100644 --- a/game/kernel/common/klink.cpp +++ b/game/kernel/common/klink.cpp @@ -144,7 +144,7 @@ void link_control::begin(Ptr object_file, m_opengoal = false; // not an open goal object. if (link_debug_printfs) { - printf("Linking GOAL style object\n"); + printf("Linking GOAL style object %s\n", name); } // initialize @@ -252,6 +252,9 @@ Ptr c_symlink2(Ptr objData, Ptr linkObj, Ptr relocTable) { *(objPtr.cast()) = linkObj.offset; } else { // I don't think we should hit this ever. + // if this is hit - there's a good chance something has overwritten the object file data + // after linking has started. + printf("val is 0x%x ptr %p\n", objValue, relocPtr - 1); ASSERT(false); } } while (*relocPtr); diff --git a/game/kernel/jak1/kdgo.cpp b/game/kernel/jak1/kdgo.cpp index f165b7556e..c08b8c5b97 100644 --- a/game/kernel/jak1/kdgo.cpp +++ b/game/kernel/jak1/kdgo.cpp @@ -3,6 +3,7 @@ #include "common/common_types.h" #include "common/log/log.h" +#include "game/common/dgo_rpc_types.h" #include "game/kernel/common/Ptr.h" #include "game/kernel/common/fileio.h" #include "game/kernel/common/kdgo.h" @@ -10,6 +11,31 @@ #include "game/kernel/jak1/klink.h" namespace jak1 { + +/*! + * Instruct the IOP to continue loading the next object. + * Only should be called once it is safe to overwrite the previous. + * @param heapPtr : pointer to heap so the IOP could try to load directly into a heap if it wants. + * This should be updated after each object file load to make sure the IOP knows the exact location + * of the end of the GOAL heap data. + * DONE, + * EXACT + */ +void ContinueLoadingDGO(Ptr heapPtr) { + u32 msgID = sMsgNum; + RPC_Dgo_Cmd* sendBuff = sMsg + sMsgNum; + sMsgNum = sMsgNum ^ 1; + sendBuff->result = DGO_RPC_RESULT_INIT; + sMsg[msgID].buffer1 = 0; + sMsg[msgID].buffer2 = 0; + sMsg[msgID].buffer_heap_top = heapPtr.offset; + // the IOP will wait for this RpcCall to continue the DGO state machine. + RpcCall(DGO_RPC_CHANNEL, DGO_RPC_LOAD_NEXT_FNO, true, sendBuff, sizeof(RPC_Dgo_Cmd), sendBuff, + sizeof(RPC_Dgo_Cmd)); + // this async RPC call will complete when the next object is fully loaded. + sLastMsg = sendBuff; +} + /*! * Load and link a DGO file. * This does not use the mutli-threaded linker and will block until the entire file is done. diff --git a/game/kernel/jak2/kdgo.cpp b/game/kernel/jak2/kdgo.cpp index 246186b37a..d409c9f02d 100644 --- a/game/kernel/jak2/kdgo.cpp +++ b/game/kernel/jak2/kdgo.cpp @@ -10,6 +10,30 @@ namespace jak2 { +/*! + * Instruct the IOP to continue loading the next object. + * Only should be called once it is safe to overwrite the previous. + * @param heapPtr : pointer to heap so the IOP could try to load directly into a heap if it wants. + * This should be updated after each object file load to make sure the IOP knows the exact location + * of the end of the GOAL heap data. + * + * Unlike jak 1, we update buffer1 and buffer2 here for borrow heap loads. + */ +void ContinueLoadingDGO(Ptr b1, Ptr b2, Ptr heapPtr) { + u32 msgID = sMsgNum; + RPC_Dgo_Cmd* sendBuff = sMsg + sMsgNum; + sMsgNum = sMsgNum ^ 1; + sendBuff->result = DGO_RPC_RESULT_INIT; + sMsg[msgID].buffer1 = b1.offset; + sMsg[msgID].buffer2 = b2.offset; + sMsg[msgID].buffer_heap_top = heapPtr.offset; + // the IOP will wait for this RpcCall to continue the DGO state machine. + RpcCall(DGO_RPC_CHANNEL, DGO_RPC_LOAD_NEXT_FNO, true, sendBuff, sizeof(RPC_Dgo_Cmd), sendBuff, + sizeof(RPC_Dgo_Cmd)); + // this async RPC call will complete when the next object is fully loaded. + sLastMsg = sendBuff; +} + /*! * Load and link a DGO file. * This does not use the mutli-threaded linker and will block until the entire file is done. @@ -85,7 +109,7 @@ void load_and_link_dgo_from_c(const char* name, // inform IOP we are done if (!lastObjectLoaded) { - ContinueLoadingDGO(Ptr((heap->current + 0x3f).offset & 0xffffffc0)); + ContinueLoadingDGO(buffer1, buffer2, Ptr((heap->current + 0x3f).offset & 0xffffffc0)); } } sShowStallMsg = oldShowStall; diff --git a/game/mips2c/jak2_functions/debug.cpp b/game/mips2c/jak2_functions/debug.cpp new file mode 100644 index 0000000000..52381010a6 --- /dev/null +++ b/game/mips2c/jak2_functions/debug.cpp @@ -0,0 +1,136 @@ + +//--------------------------MIPS2C--------------------- +// clang-format off +#include "game/mips2c/mips2c_private.h" +#include "game/kernel/jak2/kscheme.h" +using ::jak2::intern_from_c; +namespace Mips2C::jak2 { +namespace debug_line_clip { +struct Cache { + void* math_camera; // *math-camera* +} cache; + +void qfsrv_same_mtsab_4(ExecutionContext* c, int reg) { + u32 temp[4]; + auto& val = c->gprs[reg]; + temp[0] = val.du32[1]; + temp[1] = val.du32[2]; + temp[2] = val.du32[3]; + temp[3] = val.du32[0]; + val.du32[0] = temp[0]; + val.du32[1] = temp[1]; + val.du32[2] = temp[2]; + val.du32[3] = temp[3]; +} + +u64 execute(void* ctxt) { + auto* c = (ExecutionContext*)ctxt; + bool bc = false; + u32 call_addr = 0; + bool cop1_bc = false; + c->load_symbol2(v1, cache.math_camera); // lw v1, *math-camera*(s7) + c->lqc2(vf9, 0, a2); // lqc2 vf9, 0(a2) + c->lqc2(vf10, 0, a3); // lqc2 vf10, 0(a3) + c->lqc2(vf16, 940, v1); // lqc2 vf16, 940(v1) + c->lqc2(vf17, 956, v1); // lqc2 vf17, 956(v1) + c->lqc2(vf18, 972, v1); // lqc2 vf18, 972(v1) + c->lqc2(vf19, 988, v1); // lqc2 vf19, 988(v1) + c->vmula_bc(DEST::xyzw, BC::x, vf16, vf9); // vmulax.xyzw acc, vf16, vf9 + c->vmadda_bc(DEST::xyzw, BC::y, vf17, vf9); // vmadday.xyzw acc, vf17, vf9 + c->vmadda_bc(DEST::xyzw, BC::z, vf18, vf9); // vmaddaz.xyzw acc, vf18, vf9 + c->vmsub_bc(DEST::xyzw, BC::w, vf11, vf19, vf0); // vmsubw.xyzw vf11, vf19, vf0 + c->vmula_bc(DEST::xyzw, BC::x, vf16, vf10); // vmulax.xyzw acc, vf16, vf10 + c->vmadda_bc(DEST::xyzw, BC::y, vf17, vf10); // vmadday.xyzw acc, vf17, vf10 + c->vmadda_bc(DEST::xyzw, BC::z, vf18, vf10); // vmaddaz.xyzw acc, vf18, vf10 + c->vmsub_bc(DEST::xyzw, BC::w, vf12, vf19, vf0); // vmsubw.xyzw vf12, vf19, vf0 + c->mov128_gpr_vf(v1, vf11); // qmfc2.i v1, vf11 + c->pcgtw(v1, r0, v1); // pcgtw v1, r0, v1 + c->ppach(a2, r0, v1); // ppach a2, r0, v1 + c->mov128_gpr_vf(v1, vf12); // qmfc2.i v1, vf12 + c->pcgtw(v1, r0, v1); // pcgtw v1, r0, v1 + c->ppach(a3, r0, v1); // ppach a3, r0, v1 + c->and_(v1, a2, a3); // and v1, a2, a3 + bc = c->sgpr64(v1) != 0; // bne v1, r0, L220 + // nop // sll r0, r0, 0 + if (bc) {goto block_10;} // branch non-likely + + c->vmove(DEST::xyzw, vf13, vf9); // vmove.xyzw vf13, vf9 + c->vmove(DEST::xyzw, vf14, vf10); // vmove.xyzw vf14, vf10 + c->or_(a2, a2, a3); // or a2, a2, a3 + bc = c->sgpr64(a2) == 0; // beq a2, r0, L219 + // nop // sll r0, r0, 0 + if (bc) {goto block_9;} // branch non-likely + + c->mov128_gpr_vf(a2, vf11); // qmfc2.i a2, vf11 + c->mov128_gpr_vf(a3, vf12); // qmfc2.i a3, vf12 + c->mtc1(f0, r0); // mtc1 f0, r0 + c->mtc1(f1, r0); // mtc1 f1, r0 + c->lui(t0, 16256); // lui t0, 16256 + c->mtc1(f2, t0); // mtc1 f2, t0 + c->addiu(t0, r0, 3); // addiu t0, r0, 3 + // Unknown instr: mtsab r0, 4 + + block_3: + c->mtc1(f3, a2); // mtc1 f3, a2 + c->mtc1(f4, a3); // mtc1 f4, a3 + c->subs(f5, f3, f4); // sub.s f5, f3, f4 + cop1_bc = c->fprs[f3] < c->fprs[f0]; // c.lt.s f3, f0 + bc = !cop1_bc; // bc1f L217 + // nop // sll r0, r0, 0 + if (bc) {goto block_5;} // branch non-likely + + c->divs(f6, f3, f5); // div.s f6, f3, f5 + c->maxs(f1, f6, f1); // max.s f1, f6, f1 + + block_5: + cop1_bc = c->fprs[f4] < c->fprs[f0]; // c.lt.s f4, f0 + bc = !cop1_bc; // bc1f L218 + // nop // sll r0, r0, 0 + if (bc) {goto block_7;} // branch non-likely + + c->divs(f3, f3, f5); // div.s f3, f3, f5 + c->mins(f2, f3, f2); // min.s f2, f3, f2 + + block_7: + // Unknown instr: qfsrv a2, a2, a2 + qfsrv_same_mtsab_4(c, a2); + // Unknown instr: qfsrv a3, a3, a3 + qfsrv_same_mtsab_4(c, a3); + bc = c->sgpr64(t0) != 0; // bne t0, r0, L216 + c->daddiu(t0, t0, -1); // daddiu t0, t0, -1 + if (bc) {goto block_3;} // branch non-likely + + c->mfc1(a2, f1); // mfc1 a2, f1 + c->mfc1(a3, f2); // mfc1 a3, f2 + c->mov128_vf_gpr(vf20, a2); // qmtc2.i vf20, a2 + c->mov128_vf_gpr(vf21, a3); // qmtc2.i vf21, a3 + c->vsub(DEST::xyzw, vf15, vf10, vf9); // vsub.xyzw vf15, vf10, vf9 + c->vmul_bc(DEST::xyzw, BC::x, vf13, vf15, vf20); // vmulx.xyzw vf13, vf15, vf20 + c->vadd(DEST::xyzw, vf13, vf9, vf13); // vadd.xyzw vf13, vf9, vf13 + c->vmul_bc(DEST::xyzw, BC::x, vf14, vf15, vf21); // vmulx.xyzw vf14, vf15, vf21 + c->vadd(DEST::xyzw, vf14, vf9, vf14); // vadd.xyzw vf14, vf9, vf14 + + block_9: + c->sqc2(vf13, 0, a0); // sqc2 vf13, 0(a0) + c->sqc2(vf14, 0, a1); // sqc2 vf14, 0(a1) + + block_10: + c->daddiu(v0, s7, 4); // daddiu v0, s7, 4 + c->movn(v0, s7, v1); // movn v0, s7, v1 + //jr ra // jr ra + c->daddu(sp, sp, r0); // daddu sp, sp, r0 + goto end_of_function; // return + + // nop // sll r0, r0, 0 + // nop // sll r0, r0, 0 + end_of_function: + return c->gprs[v0].du64[0]; +} + +void link() { + cache.math_camera = intern_from_c("*math-camera*").c(); + gLinkedFunctionTable.reg("debug-line-clip?", execute, 32); +} + +} // namespace debug_line_clip +} // namespace Mips2C diff --git a/game/mips2c/mips2c_private.h b/game/mips2c/mips2c_private.h index bb9895a3d3..138794a95d 100644 --- a/game/mips2c/mips2c_private.h +++ b/game/mips2c/mips2c_private.h @@ -1289,10 +1289,15 @@ struct ExecutionContext { fprs[dst] = fprs[src0] / fprs[src1]; } } + void divs(int dst, int src0, int src1) { // ASSERT(fprs[src1] != 0); fprs[dst] = fprs[src0] / fprs[src1]; } + + void mins(int dst, int src0, int src1) { fprs[dst] = std::min(fprs[src0], fprs[src1]); } + void maxs(int dst, int src0, int src1) { fprs[dst] = std::max(fprs[src0], fprs[src1]); } + void negs(int dst, int src) { u32 v; memcpy(&v, &fprs[src], 4); diff --git a/game/mips2c/mips2c_table.cpp b/game/mips2c/mips2c_table.cpp index 8befad053c..3314e77b73 100644 --- a/game/mips2c/mips2c_table.cpp +++ b/game/mips2c/mips2c_table.cpp @@ -123,6 +123,7 @@ namespace draw_string_asm { extern void link(); } namespace draw_string { extern void link(); } namespace get_string_length { extern void link(); } namespace adgif_shader_texture_with_update { extern void link(); } +namespace debug_line_clip { extern void link(); } } // clang-format on @@ -203,7 +204,8 @@ PerGameVersion>> gMips2C {"joint", {jak2::calc_animation_from_spr::link, jak2::cspace_parented_transformq_joint::link}}, {"font", {jak2::draw_string::link, jak2::get_string_length::link, jak2::draw_string_asm::link}}, - {"texture", {jak2::adgif_shader_texture_with_update::link}}}, + {"texture", {jak2::adgif_shader_texture_with_update::link}}, + {"debug", {jak2::debug_line_clip::link}}}, }; void LinkedFunctionTable::reg(const std::string& name, u64 (*exec)(void*), u32 stack_size) { diff --git a/game/overlord/iso.cpp b/game/overlord/iso.cpp index cd7acaaef9..0f70c74fbf 100644 --- a/game/overlord/iso.cpp +++ b/game/overlord/iso.cpp @@ -734,9 +734,6 @@ u32 RunDGOStateMachine(IsoMessage* _cmd, IsoBufferHeader* buffer) { // if we are done with header if (cmd->bytes_processed == sizeof(DgoHeader)) { - // printf("[Overlord DGO] Got DGO file header for %s with %d objects\n", - // cmd->dgo_header.name, - // cmd->dgo_header.object_count); // added lg::info("[Overlord DGO] Got DGO file header for {} with {} objects", cmd->dgo_header.name, cmd->dgo_header.object_count); cmd->bytes_processed = 0; @@ -758,9 +755,23 @@ u32 RunDGOStateMachine(IsoMessage* _cmd, IsoBufferHeader* buffer) { case DgoState::Finish_Obj: // we have reached the end of an object file! { // EE synchronization occurs here. + // we "Return" the command to tell the EE that we've loaded stuff + // EE sends us data that we read with LookMbx so we keep loading. + // the order is that we wait for the EE to tell us the next location before we return + // the most recently loaded object. + // we skip this if we're loading the first object so we can double buffer the // linking/loading process and have two in flight at a time (one loading, other linking) + // this fills the pipeline. + + // for jak 2, double buffered is disabled for the "borrow" style loads. + // this is detected by seeing that buffer1 and buffer2 are the same address. + // this function decompiles poorly in ghidra, so this is a best guess. + // in this mode, the order is swapped - the overlord returns the message once loading + // is done, then waits for the next loaddgo. + if (cmd->finished_first_obj) { + // in all cases, need sync after the first object. s32 isSync = LookMbx(sync_mbx); // did we get a "sync" message? if (isSync) { // if so, this means we got a CancelDGO or NextDGO @@ -775,21 +786,35 @@ u32 RunDGOStateMachine(IsoMessage* _cmd, IsoBufferHeader* buffer) { } } - cmd->finished_first_obj = 1; - cmd->status = CMD_STATUS_IN_PROGRESS; + if (cmd->buffer1 != cmd->buffer2) { + // normal double buffered case. + cmd->finished_first_obj = 1; + cmd->status = CMD_STATUS_IN_PROGRESS; - // select a buffer for next time. - if (cmd->buffer_toggle == 1) { - cmd->selectedBuffer = cmd->buffer1; + // select a buffer for next time. + if (cmd->buffer_toggle == 1) { + cmd->selectedBuffer = cmd->buffer1; + } else { + cmd->selectedBuffer = cmd->buffer2; + } + + // we've processed the command, go wake up the DGO RPC thread. + // doesn't terminate the command (ReleaseMessage does this, ReturnMessage just + // wakes up the caller while keeping the command alive). + ReturnMessage(cmd); } else { - cmd->selectedBuffer = cmd->buffer2; + // single buffer mode. before we can move on, we need to wait for the EE to send us + // an update load location. We've already informed the EE where we loaded the most + // recent object, and it is busy linking... + if (cmd->finished_first_obj == 0) { + s32 isSync = LookMbx(sync_mbx); // did we get a "sync" message? + if (!isSync) { + goto cleanup_and_return; + } + cmd->finished_first_obj = 1; + } } - // we've processed the command, go wake up the DGO RPC thread. - // doesn't terminate the command (ReleaseMessage does this, ReturnMessage just - // wakes up the caller while keeping the command alive). - ReturnMessage(cmd); - // toggle buffer if (cmd->buffer_toggle == 1) { cmd->ee_destination_buffer = cmd->buffer2; @@ -800,7 +825,8 @@ u32 RunDGOStateMachine(IsoMessage* _cmd, IsoBufferHeader* buffer) { } // setup for next run - if (cmd->objects_loaded + 1 == cmd->dgo_header.object_count) { + if (cmd->objects_loaded + 1 == cmd->dgo_header.object_count && + cmd->buffer1 != cmd->buffer2) { cmd->dgo_state = DgoState::Read_Last_Obj; } else { cmd->dgo_state = DgoState::Read_Obj_Header; @@ -873,7 +899,10 @@ u32 RunDGOStateMachine(IsoMessage* _cmd, IsoBufferHeader* buffer) { if (cmd->objects_loaded == cmd->dgo_header.object_count) { cmd->dgo_state = DgoState::Finish_Dgo; } else { - cmd->dgo_state = DgoState::Finish_Obj; + // this logic makes jak 2 single buffer loads go to NoDoubleBuffer to return the + // command as soon as loading is done. + cmd->dgo_state = (cmd->buffer1 == cmd->buffer2) ? DgoState::Finish_Obj_NoDoubleBuffer + : DgoState::Finish_Obj; cmd->bytes_processed = 0; } } @@ -885,6 +914,18 @@ u32 RunDGOStateMachine(IsoMessage* _cmd, IsoBufferHeader* buffer) { goto cleanup_and_return; } + case DgoState::Finish_Obj_NoDoubleBuffer: { + // new, added for jak2 - here we return the message once loading finishes. + cmd->status = CMD_STATUS_IN_PROGRESS; + if (cmd->buffer_toggle == 1) { + cmd->selectedBuffer = cmd->buffer1; + } else { + cmd->selectedBuffer = cmd->buffer2; + } + ReturnMessage(cmd); + cmd->dgo_state = DgoState::Finish_Obj; + } break; + default: printf("unknown dgoState!\n"); } @@ -1339,6 +1380,8 @@ void LoadDGO(RPC_Dgo_Cmd* cmd) { scmd.buffer_heaptop = (u8*)(u64)(cmd->buffer_heap_top); scmd.fr = fr; + // printf("LOAD DGO -- 0x%x\n", cmd->buffer1); + // send the command to ISO Thread SendMbx(iso_mbx, &scmd); @@ -1368,12 +1411,18 @@ void LoadDGO(RPC_Dgo_Cmd* cmd) { * This will return when there's another loaded obj. */ void LoadNextDGO(RPC_Dgo_Cmd* cmd) { + // printf("LOAD NEXT DGO -- 0x%x\n", cmd->buffer1); + if (scmd.cmd_id == 0) { // something went wrong. cmd->result = DGO_RPC_RESULT_ERROR; } else { // update heap location scmd.buffer_heaptop = (u8*)(u64)cmd->buffer_heap_top; + if (g_game_version != GameVersion::Jak1) { + scmd.buffer1 = (u8*)(u64)cmd->buffer1; + scmd.buffer2 = (u8*)(u64)cmd->buffer2; + } // allow DGO state machine to advance SendMbx(sync_mbx, nullptr); // wait for another load to finish. diff --git a/game/overlord/isocommon.h b/game/overlord/isocommon.h index 85ffcefdbe..3531502208 100644 --- a/game/overlord/isocommon.h +++ b/game/overlord/isocommon.h @@ -158,7 +158,8 @@ enum class DgoState { Read_Last_Obj = 3, Read_Obj_Header = 4, Read_Obj_data = 5, - Finish_Dgo = 6 + Finish_Dgo = 6, + Finish_Obj_NoDoubleBuffer = 7, // jak 2 only }; /*! diff --git a/goal_src/jak2/dgos/lwidea.gd b/goal_src/jak2/dgos/lwidea.gd new file mode 100644 index 0000000000..c19acfce90 --- /dev/null +++ b/goal_src/jak2/dgos/lwidea.gd @@ -0,0 +1,18 @@ +("LWIDEA.DGO" + ("tpage-2929.go" "tpage-2929") + ("tpage-2930.go" "tpage-2930") + ("citizen-fat-ag.go" "citizen-fat") + ("citizen-norm-ag.go" "citizen-norm") + ("crimson-guard-ag.go" "crimson-guard") + ("citizen-chick-ag.go" "citizen-chick") + ("hellcat-ag.go" "hellcat") + ("carc-ag.go" "carc") + ("cara-ag.go" "cara") + ("carb-ag.go" "carb") + ("citizen-norm-rider-ag.go" "citizen-norm-rider") + ("crimson-bike-ag.go" "crimson-bike") + ("bikec-ag.go" "bikec") + ("bikeb-ag.go" "bikeb") + ("bikea-ag.go" "bikea") + ("lwidea.go" "lwidea") + ) \ No newline at end of file diff --git a/goal_src/jak2/engine/ai/enemy-h.gc b/goal_src/jak2/engine/ai/enemy-h.gc index 67838e223f..2b1a9292a9 100644 --- a/goal_src/jak2/engine/ai/enemy-h.gc +++ b/goal_src/jak2/engine/ai/enemy-h.gc @@ -7,3 +7,361 @@ ;; DECOMP BEGINS +(defenum enemy-flag + :type int64 + :bitfield #t + (lock-focus 0) + (death-start 1) + (enable-on-active 2) + (checking-water 3) + (check-water 4) + (spawn-gem 5) + (chase-startup 6) + (attackable-backup 7) + (look-at-focus 8) + (use-notice-distance 9) + (enable-on-notice 10) + (look-at-move-dest 11) + (notice 12) + (auto-reset-penetrate 13) + (jump-check-blocked 14) + (drawn-mirrored 15) + (multi-focus 16) + (alert 17) + (victory 18) + (dangerous-backup 19) + (actor-pause-backup 20) + (trackable 21) + (called-dying 22) + (check-water-backup 23) + (no-initial-move-to-ground 24) + (cam-attack-mode 25) + (trackable-backup 26) + (enable-on-hostile 27) + (directed-ready 28) + (use-trigger 29) + (directed 30) + (dislike-combo 31) + (recover-applied-velocity 32) + (vulnerable-backup 33) + (vulnerable 34) + (recover 35) + ) + +(deftype enemy-focus (focus) + ((aware uint64 :offset-assert 16) + (flags uint64 :offset-assert 24) + ) + :method-count-assert 14 + :size-assert #x20 + :flag-assert #xe00000020 + (:methods + (enemy-focus-method-13 () none 13) + ) + ) + +(deftype enemy-info (basic) + ((fact-defaults basic :offset-assert 4) + (use-die-falling basic :offset-assert 8) + (use-victory basic :offset-assert 12) + (use-jump-blocked basic :offset-assert 16) + (debug-draw-neck basic :offset-assert 20) + (jump-debug-draw basic :offset-assert 24) + (move-to-ground basic :offset-assert 28) + (hover-if-no-ground basic :offset-assert 32) + (idle-anim-script uint32 :offset-assert 36) + (idle-anim int32 :offset-assert 40) + (notice-anim int32 :offset-assert 44) + (hostile-anim int32 :offset-assert 48) + (hit-anim int32 :offset-assert 52) + (knocked-anim int32 :offset-assert 56) + (knocked-land-anim int32 :offset-assert 60) + (die-anim int32 :offset-assert 64) + (die-falling-anim int32 :offset-assert 68) + (victory-anim int32 :offset-assert 72) + (jump-wind-up-anim int32 :offset-assert 76) + (jump-in-air-anim int32 :offset-assert 80) + (jump-land-anim int32 :offset-assert 84) + (neck-joint int32 :offset-assert 88) + (look-at-joint int32 :offset-assert 92) + (bullseye-joint int32 :offset-assert 96) + (sound-hit uint128 :offset-assert 112) + (sound-die uint128 :offset-assert 128) + (notice-distance meters :offset-assert 144) + (notice-distance-delta meters :offset-assert 148) + (proximity-notice-distance meters :offset-assert 152) + (default-hit-points int32 :offset-assert 156) + (gnd-collide-with uint32 :offset-assert 160) + (overlaps-others-collide-with-filter uint32 :offset-assert 164) + (penetrate-flinch uint64 :offset-assert 168) + (penetrate-knocked uint64 :offset-assert 176) + (movement-gravity meters :offset-assert 184) + (friction float :offset-assert 188) + (slip-factor float :offset-assert 192) + (attack-shove-back meters :offset-assert 196) + (attack-shove-up meters :offset-assert 200) + (attack-mode basic :offset-assert 204) + (attack-damage int32 :offset-assert 208) + (recover-gnd-collide-with uint32 :offset-assert 212) + (jump-height-min meters :offset-assert 216) + (jump-height-factor float :offset-assert 220) + (knocked-seek-ry-clamp float :offset-assert 224) + (knocked-soft-vxz-lo float :offset-assert 228) + (knocked-soft-vxz-hi float :offset-assert 232) + (knocked-soft-vy-lo float :offset-assert 236) + (knocked-soft-vy-hi float :offset-assert 240) + (knocked-medium-vxz-lo float :offset-assert 244) + (knocked-medium-vxz-hi float :offset-assert 248) + (knocked-medium-vy-lo float :offset-assert 252) + (knocked-medium-vy-hi float :offset-assert 256) + (knocked-hard-vxz-lo float :offset-assert 260) + (knocked-hard-vxz-hi float :offset-assert 264) + (knocked-hard-vy-lo float :offset-assert 268) + (knocked-hard-vy-hi float :offset-assert 272) + (knocked-huge-vxz-lo float :offset-assert 276) + (knocked-huge-vxz-hi float :offset-assert 280) + (knocked-huge-vy-lo float :offset-assert 284) + (knocked-huge-vy-hi float :offset-assert 288) + (knocked-yellow-vxz-lo float :offset-assert 292) + (knocked-yellow-vxz-hi float :offset-assert 296) + (knocked-yellow-vy-lo float :offset-assert 300) + (knocked-yellow-vy-hi float :offset-assert 304) + (knocked-red-vxz-lo float :offset-assert 308) + (knocked-red-vxz-hi float :offset-assert 312) + (knocked-red-vy-lo float :offset-assert 316) + (knocked-red-vy-hi float :offset-assert 320) + (knocked-blue-vxz-lo float :offset-assert 324) + (knocked-blue-vxz-hi float :offset-assert 328) + (knocked-blue-vy-lo float :offset-assert 332) + (knocked-blue-vy-hi float :offset-assert 336) + (shadow-size meters :offset-assert 340) + (shadow-max-y meters :offset-assert 344) + (shadow-min-y meters :offset-assert 348) + (shadow-locus-dist meters :offset-assert 352) + (gem-joint int32 :offset-assert 356) + (gem-seg uint32 :offset-assert 360) + (gem-no-seg uint32 :offset-assert 364) + (gem-offset sphere :inline :offset-assert 368) + ) + :method-count-assert 10 + :size-assert #x180 + :flag-assert #xa00000180 + (:methods + (enemy-info-method-9 () none 9) + ) + ) + +(deftype enemy-knocked-info (structure) + ((anim-speed float :offset-assert 0) + (on-surface-count int32 :offset-assert 4) + (move-count int32 :offset-assert 8) + (land-can-land-time time-frame :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x18 + :flag-assert #x900000018 + ) + +(deftype enemy-jump-info (structure) + ((flags uint8 :offset-assert 0) + (anim-speed float :offset-assert 4) + (hang-time time-frame :offset-assert 8) + (start-pos vector :inline :offset-assert 16) + (dest-pos vector :inline :offset-assert 32) + (traj trajectory :inline :offset-assert 48) + ) + :method-count-assert 9 + :size-assert #x58 + :flag-assert #x900000058 + ) + +(deftype enemy-init-by-other-params (structure) + ((trans vector :inline :offset-assert 0) + (quat quaternion :inline :offset-assert 16) + (entity basic :offset-assert 32) + (directed? basic :offset-assert 36) + (no-initial-move-to-ground? basic :offset-assert 40) + ) + :method-count-assert 9 + :size-assert #x2c + :flag-assert #x90000002c + ) + +(deftype enemy-attack-info (structure) + ((attack-id uint32 :offset-assert 0) + (knocked-type uint8 :offset-assert 4) + (blue-juggle-count uint8 :offset-assert 5) + (attacker-handle uint64 :offset-assert 8) + (attack-time time-frame :offset-assert 16) + (penetrate-using uint64 :offset-assert 24) + (attacker-pos vector :inline :offset-assert 32) + (attack-direction vector :inline :offset-assert 48) + ) + :method-count-assert 9 + :size-assert #x40 + :flag-assert #x900000040 + ) + +(deftype enemy-best-focus (structure) + ((proc basic :offset-assert 0) + (rating float :offset-assert 4) + (aware uint64 :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(deftype enemy (process-focusable) + ((enemy-flags enemy-flag :offset-assert 208) + (enemy-info symbol :offset-assert 216) + (hit-points int32 :offset-assert 220) + (gnd-collide uint32 :offset-assert 224) + (attack-id uint32 :offset-assert 228) + (persistent-attack-id uint32 :offset-assert 232) + (water-max-height float :offset-assert 236) + (water-surface-height float :offset-assert 240) + (desired-angle float :offset-assert 244) + (jump-why uint64 :offset-assert 248) + (penetrated-by-all uint64 :offset-assert 256) + (penetrated-flinch uint64 :offset-assert 264) + (penetrated-knocked uint64 :offset-assert 272) + (reaction-time uint64 :offset-assert 280) + (notice-time uint64 :offset-assert 288) + (state-timeout uint64 :offset-assert 296) + (auto-reset-penetrate-time uint64 :offset-assert 304) + (hit-focus-time uint64 :offset-assert 312) + (last-draw-time uint64 :offset-assert 320) + (starting-time uint64 :offset-assert 328) + (fated-time uint64 :offset-assert 336) + (focus-pos vector :inline :offset-assert 352) + (event-param-point vector :inline :offset-assert 368) + (jump-dest vector :inline :offset 368) + (focus enemy-focus :inline :offset-assert 384) + (incoming enemy-attack-info :inline :offset-assert 416) + (actor-group actor-group :offset-assert 480) + (actor-group-count int32 :offset-assert 484) + (neck symbol :offset-assert 488) + (on-notice symbol :offset-assert 492) + (on-active symbol :offset-assert 496) + (on-hostile symbol :offset-assert 500) + (on-death symbol :offset-assert 504) + (idle-anim-player idle-control :inline :offset-assert 512) + (rand-gen symbol :offset-assert 528) + ) + :method-count-assert 137 + :size-assert #x214 + :flag-assert #x8901a00214 + (:methods + (enemy-method-27 () none 27) + (enemy-method-28 () none 28) + (enemy-method-29 () none 29) + (enemy-method-30 () none 30) + (enemy-method-31 () none 31) + (enemy-method-32 () none 32) + (enemy-method-33 () none 33) + (enemy-method-34 () none 34) + (enemy-method-35 () none 35) + (enemy-method-36 () none 36) + (enemy-method-37 () none 37) + (enemy-method-38 () none 38) + (enemy-method-39 () none 39) + (enemy-method-40 () none 40) + (enemy-method-41 () none 41) + (enemy-method-42 () none 42) + (enemy-method-43 () none 43) + (enemy-method-44 () none 44) + (enemy-method-45 () none 45) + (enemy-method-46 () none 46) + (enemy-method-47 () none 47) + (enemy-method-48 () none 48) + (enemy-method-49 () none 49) + (enemy-method-50 () none 50) + (enemy-method-51 () none 51) + (enemy-method-52 () none 52) + (enemy-method-53 () none 53) + (enemy-method-54 () none 54) + (enemy-method-55 () none 55) + (enemy-method-56 () none 56) + (enemy-method-57 () none 57) + (enemy-method-58 () none 58) + (enemy-method-59 () none 59) + (enemy-method-60 () none 60) + (enemy-method-61 () none 61) + (enemy-method-62 () none 62) + (enemy-method-63 () none 63) + (enemy-method-64 () none 64) + (enemy-method-65 () none 65) + (enemy-method-66 () none 66) + (enemy-method-67 () none 67) + (enemy-method-68 () none 68) + (enemy-method-69 () none 69) + (enemy-method-70 () none 70) + (enemy-method-71 () none 71) + (enemy-method-72 () none 72) + (enemy-method-73 () none 73) + (enemy-method-74 () none 74) + (enemy-method-75 () none 75) + (enemy-method-76 () none 76) + (enemy-method-77 () none 77) + (enemy-method-78 () none 78) + (enemy-method-79 () none 79) + (enemy-method-80 () none 80) + (enemy-method-81 () none 81) + (enemy-method-82 () none 82) + (enemy-method-83 () none 83) + (enemy-method-84 () none 84) + (enemy-method-85 () none 85) + (enemy-method-86 () none 86) + (enemy-method-87 () none 87) + (enemy-method-88 () none 88) + (enemy-method-89 () none 89) + (enemy-method-90 () none 90) + (enemy-method-91 () none 91) + (enemy-method-92 () none 92) + (enemy-method-93 () none 93) + (enemy-method-94 () none 94) + (enemy-method-95 () none 95) + (enemy-method-96 () none 96) + (enemy-method-97 () none 97) + (enemy-method-98 () none 98) + (enemy-method-99 () none 99) + (enemy-method-100 () none 100) + (enemy-method-101 () none 101) + (enemy-method-102 () none 102) + (enemy-method-103 () none 103) + (enemy-method-104 () none 104) + (enemy-method-105 () none 105) + (enemy-method-106 () none 106) + (enemy-method-107 () none 107) + (enemy-method-108 () none 108) + (enemy-method-109 () none 109) + (enemy-method-110 () none 110) + (enemy-method-111 () none 111) + (enemy-method-112 () none 112) + (enemy-method-113 () none 113) + (enemy-method-114 () none 114) + (enemy-method-115 () none 115) + (enemy-method-116 () none 116) + (enemy-method-117 () none 117) + (enemy-method-118 () none 118) + (enemy-method-119 () none 119) + (enemy-method-120 () none 120) + (enemy-method-121 () none 121) + (enemy-method-122 () none 122) + (enemy-method-123 () none 123) + (enemy-method-124 () none 124) + (enemy-method-125 () none 125) + (enemy-method-126 () none 126) + (enemy-method-127 () none 127) + (enemy-method-128 () none 128) + (enemy-method-129 () none 129) + (enemy-method-130 () none 130) + (enemy-method-131 () none 131) + (enemy-method-132 () none 132) + (enemy-method-133 () none 133) + (enemy-method-134 () none 134) + (enemy-method-135 () none 135) + (enemy-method-136 () none 136) + ) + ) diff --git a/goal_src/jak2/engine/anim/joint.gc b/goal_src/jak2/engine/anim/joint.gc index bf3dae8667..7ba0b8c51e 100644 --- a/goal_src/jak2/engine/anim/joint.gc +++ b/goal_src/jak2/engine/anim/joint.gc @@ -1756,7 +1756,7 @@ (set! (-> v1-15 comp-data) (the-as uint (-> s5-0 fixed))) ) (let ((s4-1 (kmalloc (-> obj kheap) (the-as int s3-0) (kmalloc-flags) "malloc"))) - (unpack-comp-lzo s4-1 (-> s5-0 fixed)) + (unpack-comp-lzo (the (pointer uint8) s4-1) (the (pointer uint8) (-> s5-0 fixed))) (set! (-> s5-0 flags) (logand -2 (-> s5-0 flags))) (logior! (-> s5-0 flags) 2) (set! (-> s5-0 fixed) (the-as joint-anim-compressed-fixed s4-1)) diff --git a/goal_src/jak2/engine/camera/cam-update.gc b/goal_src/jak2/engine/camera/cam-update.gc index 648ed75212..0df5e4cb88 100644 --- a/goal_src/jak2/engine/camera/cam-update.gc +++ b/goal_src/jak2/engine/camera/cam-update.gc @@ -5,9 +5,6 @@ ;; name in dgo: cam-update ;; dgos: ENGINE, GAME -;; TODO -;; og:ignore-form:update-visible - ;; DECOMP BEGINS (defun plane-from-points ((arg0 (inline-array plane)) (arg1 vector) (arg2 vector) (arg3 vector) (arg4 int)) @@ -97,7 +94,168 @@ (define *update-leaf-when-outside-bsp* #t) -;; ERROR: failed type prop at 290: Could not figure out load: (set! v1 (l.w s3)) +(defun update-visible ((arg0 math-camera)) + (local-vars (s4-0 level-vis-info)) + (when (not *artist-fix-visible*) + (dotimes (s5-0 (-> *level* length)) + (let ((v1-5 (-> *level* level s5-0))) + (when (= (-> v1-5 status) 'active) + (if (and (nonzero? (-> v1-5 bsp nodes)) (or *update-leaf-when-outside-bsp* (-> v1-5 inside-boxes))) + (bsp-camera-asm (-> v1-5 bsp) (-> arg0 trans)) + ) + ) + ) + ) + (dotimes (gp-1 (-> *level* length)) + (let ((s5-1 (-> *level* level gp-1))) + (when (= (-> s5-1 status) 'active) + (let ((a2-0 (/ (+ (-> s5-1 bsp visible-list-length) 15) 16))) + (set! (-> s5-1 all-visible?) (if (-> s5-1 all-visible?) + (-> s5-1 all-visible?) + #t + ) + ) + (cond + ((or (not (-> s5-1 force-all-visible?)) (-> s5-1 inside-boxes)) + (cond + ((or *artist-all-visible* (not (-> s5-1 vis-info 0))) + (quad-copy! (-> s5-1 vis-bits) (-> s5-1 bsp all-visible-list) a2-0) + (if (= (-> s5-1 all-visible?) 'loading) + (set! (-> s5-1 all-visible?) #t) + ) + ) + ((begin + (set! s4-0 (-> s5-1 vis-info (-> s5-1 vis-self-index))) + (let ((v1-32 #f)) + (when (and s4-0 (-> s4-0 from-bsp)) + (set! v1-32 (logtest? (vis-info-flag vis-valid) (-> s4-0 flags))) + (if (< (-> s4-0 length) (-> s4-0 from-bsp current-leaf-idx)) + (set! v1-32 #f) + ) + ) + v1-32 + ) + ) + (if (!= (-> s5-1 all-visible?) 'loading) + (set! (-> s5-1 all-visible?) #f) + ) + (when (update-vis! s5-1 s4-0 (-> s4-0 ramdisk) (the-as (pointer uint8) (-> s4-0 string-block))) + (countdown (v1-40 8) + (let ((a0-27 (-> s5-1 vis-info v1-40))) + (when a0-27 + (if (!= a0-27 s4-0) + (set! (-> a0-27 current-vis-string) (the-as uint -1)) + ) + ) + ) + ) + (set! (-> s5-1 all-visible?) #f) + ) + ) + ((and (= (-> s5-1 all-visible?) 'loading) (-> *level* play?)) + ) + (else + (quad-copy! (-> s5-1 vis-bits) (-> s5-1 bsp all-visible-list) a2-0) + ) + ) + ) + (else + (quad-copy! (-> s5-1 vis-bits) (-> s5-1 bsp all-visible-list) a2-0) + ) + ) + ) + ) + ) + ) + ) + (if (and *artist-fix-visible* (cpad-pressed? 0 r2)) + (set! *fix-visible-level-mask* (logand (+ *fix-visible-level-mask* 1) 63)) + ) + (dotimes (gp-2 (-> *level* length)) + (let ((s5-2 (-> *level* level gp-2))) + (when (= (-> s5-2 status) 'active) + (cond + ((or *artist-fix-visible* *stats-bsp*) + (set! (-> s5-2 render?) (zero? (logand *fix-visible-level-mask* (ash 1 (-> s5-2 index))))) + (format + *stdcon* + "~0kleaf-index ~8S ~C = ~d node ~d ~S ~S~%" + (-> s5-2 name) + (if (not (logtest? *fix-visible-level-mask* (ash 1 (-> s5-2 index)))) + 88 + 32 + ) + (-> s5-2 bsp current-leaf-idx) + (-> s5-2 bsp cam-box-idx) + (if (zero? (-> s5-2 bsp cam-using-back)) + "front" + "back" + ) + (if (nonzero? (-> s5-2 bsp cam-outside-bsp)) + "outside" + "" + ) + ) + ) + (else + (set! (-> s5-2 render?) #t) + ) + ) + (when (and *artist-fix-visible* (zero? (logand *fix-visible-level-mask* (ash 1 (-> s5-2 index))))) + (let ((s4-1 (-> s5-2 bsp current-leaf-idx)) + (s3-0 (-> s5-2 bsp vis-spheres)) + ) + (-> s5-2 bsp unk-data 17) + (when (nonzero? s3-0) + (dotimes (s2-0 (-> s3-0 length)) + (let* ((v1-93 (the int (-> s3-0 data s2-0 w))) + (a0-43 (abs v1-93)) + ) + (when (= a0-43 s4-1) + (if (>= v1-93 0) + (add-debug-sphere #t (bucket-id debug2) (-> s3-0 data s2-0) (meters 1) (new 'static 'rgba :b #xff :a #x80)) + (add-debug-sphere #t (bucket-id debug2) (-> s3-0 data s2-0) (meters 1) (new 'static 'rgba :r #xff :a #x80)) + ) + ) + ) + ) + ) + ) + (when (nonzero? (-> s5-2 bsp nodes)) + (let ((v1-107 (-> s5-2 bsp nodes (-> s5-2 bsp cam-box-idx))) + (a2-9 (new 'stack-no-clear 'vector)) + ) + (set! (-> a2-9 quad) (-> s5-2 bsp bsp-offset quad)) + (let ((a3-6 (new 'stack-no-clear 'vector))) + (set! (-> a3-6 quad) (-> s5-2 bsp bsp-offset quad)) + (cond + ((zero? (-> s5-2 bsp cam-using-back)) + (+! (-> a2-9 x) (the float (* (the-as int (-> v1-107 front-box-min x)) (the int (-> s5-2 bsp bsp-scale x))))) + (+! (-> a2-9 y) (the float (* (the-as int (-> v1-107 front-box-min y)) (the int (-> s5-2 bsp bsp-scale y))))) + (+! (-> a2-9 z) (the float (* (the-as int (-> v1-107 front-box-min z)) (the int (-> s5-2 bsp bsp-scale z))))) + (+! (-> a3-6 x) (the float (* (the-as int (-> v1-107 front-box-max x)) (the int (-> s5-2 bsp bsp-scale x))))) + (+! (-> a3-6 y) (the float (* (the-as int (-> v1-107 front-box-max y)) (the int (-> s5-2 bsp bsp-scale y))))) + (+! (-> a3-6 z) (the float (* (the-as int (-> v1-107 front-box-max z)) (the int (-> s5-2 bsp bsp-scale z))))) + ) + (else + (+! (-> a2-9 x) (the float (* (the-as int (-> v1-107 back-box-min x)) (the int (-> s5-2 bsp bsp-scale x))))) + (+! (-> a2-9 y) (the float (* (the-as int (-> v1-107 back-box-min y)) (the int (-> s5-2 bsp bsp-scale y))))) + (+! (-> a2-9 z) (the float (* (the-as int (-> v1-107 back-box-min z)) (the int (-> s5-2 bsp bsp-scale z))))) + (+! (-> a3-6 x) (the float (* (the-as int (-> v1-107 back-box-max x)) (the int (-> s5-2 bsp bsp-scale x))))) + (+! (-> a3-6 y) (the float (* (the-as int (-> v1-107 back-box-max y)) (the int (-> s5-2 bsp bsp-scale y))))) + (+! (-> a3-6 z) (the float (* (the-as int (-> v1-107 back-box-max z)) (the int (-> s5-2 bsp bsp-scale z))))) + ) + ) + (add-debug-box #t (bucket-id debug2) a2-9 a3-6 (new 'static 'rgba :g #xff :b #xff :a #x80)) + ) + ) + ) + ) + ) + ) + ) + #f + ) (define *save-camera-inv-rot* (new 'global 'matrix)) diff --git a/goal_src/jak2/engine/debug/debug.gc b/goal_src/jak2/engine/debug/debug.gc index 25965e4b20..25eb4343f9 100644 --- a/goal_src/jak2/engine/debug/debug.gc +++ b/goal_src/jak2/engine/debug/debug.gc @@ -194,14 +194,8 @@ #f ) -;;(define-extern debug-line-clip? (function vector vector vector vector symbol)) -;; TODO: doesn't actually do any clipping. -(defun debug-line-clip? ((arg0 vector) (arg1 vector) (arg2 vector) (arg3 vector)) - (vector-copy! arg0 arg2) - (vector-copy! arg1 arg3) - #t - ) +(def-mips2c debug-line-clip? (function vector vector vector vector symbol)) (defun-debug internal-draw-debug-line ((bucket bucket-id) (start vector) (end vector) (start-color rgba) (mode symbol) (end-color rgba)) "Draw a debug line from p0 to p1. Mode can be: diff --git a/goal_src/jak2/engine/game/idle-control.gc b/goal_src/jak2/engine/game/idle-control.gc index d9a02fa7f5..b5abcdb312 100644 --- a/goal_src/jak2/engine/game/idle-control.gc +++ b/goal_src/jak2/engine/game/idle-control.gc @@ -7,3 +7,28 @@ ;; DECOMP BEGINS +(deftype idle-control-frame (uint32) + ((command uint8 :offset 0) + (anim uint8 :offset 8) + (param0 uint8 :offset 16) + (param1 uint8 :offset 24) + ) + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) + +(deftype idle-control (structure) + ((anim uint32 :offset-assert 0) + (current uint32 :offset-assert 4) + (counter int32 :offset-assert 8) + (target int32 :offset-assert 12) + ) + :method-count-assert 11 + :size-assert #x10 + :flag-assert #xb00000010 + (:methods + (idle-control-method-9 () none 9) + (idle-control-method-10 () none 10) + ) + ) \ 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 d3be46e6e3..c9c1dbdaec 100644 --- a/goal_src/jak2/engine/game/main.gc +++ b/goal_src/jak2/engine/game/main.gc @@ -507,9 +507,9 @@ ) ;; using the position of the in-game camera, update visiblity and matrices for rendering. - ; (with-profiler 'camera *profile-camera-color* - ; (update-camera) - ; ) + (with-profiler 'camera *profile-camera-color* + (update-camera) + ) ;; map texture stuff ; (update *bigmap*) diff --git a/goal_src/jak2/engine/gfx/texture/texture-anim-funcs.gc b/goal_src/jak2/engine/gfx/texture/texture-anim-funcs.gc index eca1afd870..871fbe1116 100644 --- a/goal_src/jak2/engine/gfx/texture/texture-anim-funcs.gc +++ b/goal_src/jak2/engine/gfx/texture/texture-anim-funcs.gc @@ -5,5 +5,8 @@ ;; name in dgo: texture-anim-funcs ;; dgos: ENGINE, GAME +;; temp +(define *fog-texture-work* (new 'static 'fog-texture-work :const (new 'static 'vector :x 0.00390625))) + ;; DECOMP BEGINS diff --git a/goal_src/jak2/engine/level/bsp-h.gc b/goal_src/jak2/engine/level/bsp-h.gc index ae1878a345..f80989ba7c 100644 --- a/goal_src/jak2/engine/level/bsp-h.gc +++ b/goal_src/jak2/engine/level/bsp-h.gc @@ -49,6 +49,7 @@ ;; 0 28 (all-visible-list (pointer uint16) :offset-assert 32) (visible-list-length int16 :offset-assert 36) + (extra-vis-list-length int16 :offset-assert 38) (drawable-trees drawable-tree-array :offset-assert 40) (pat pointer :offset-assert 44) (pat-length int32 :offset-assert 48) @@ -82,8 +83,9 @@ (collide-hash collide-hash :offset-assert 196) ;; 200 is some array (wind-array-length int32 :offset 204) - ;; 216 is a vector array - ;; (vec-array (pointer vector) :offset 216) ; TODO see - `update-visible` hits assertion + + (vis-spheres vector-array :offset 216) + (region-tree drawable-tree-region-prim :offset 252) (tfrag-masks texture-masks-array :offset-assert 256) (tfrag-closest (pointer float) :offset-assert 260) diff --git a/goal_src/jak2/engine/level/level-h.gc b/goal_src/jak2/engine/level/level-h.gc index 1d7b03420a..31685b506b 100644 --- a/goal_src/jak2/engine/level/level-h.gc +++ b/goal_src/jak2/engine/level/level-h.gc @@ -314,7 +314,7 @@ (bsp-name (_type_) symbol 13) (compute-memory-usage! (_type_ symbol) memory-usage-block 14) (inside-boxes-check (_type_ vector) symbol 15) - (level-method-16 () none 16) + (update-vis! (_type_ level-vis-info uint (pointer uint8)) symbol 16) (load-continue (_type_) _type_ 17) (load-begin (_type_) _type_ 18) (login-begin (_type_) _type_ 19) diff --git a/goal_src/jak2/engine/level/level.gc b/goal_src/jak2/engine/level/level.gc index 6cebee6023..4dd66fb800 100644 --- a/goal_src/jak2/engine/level/level.gc +++ b/goal_src/jak2/engine/level/level.gc @@ -519,7 +519,6 @@ ;; 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!~%") @@ -531,6 +530,7 @@ (cond ((= (-> obj load-buffer-mode) (load-buffer-mode borrow)) ;; in this "borrow" mode, load directly to the heap. + (start-debug "kick load borrow case~%") (let ((a2-0 (logand -64 (&+ (-> obj heap current) 63)))) (dgo-load-continue a2-0 a2-0 a2-0) ) diff --git a/goal_src/jak2/engine/load/decomp-h.gc b/goal_src/jak2/engine/load/decomp-h.gc index fe4cb6027a..7aa7d6b309 100644 --- a/goal_src/jak2/engine/load/decomp-h.gc +++ b/goal_src/jak2/engine/load/decomp-h.gc @@ -5,7 +5,7 @@ ;; name in dgo: decomp-h ;; dgos: ENGINE, GAME -(define-extern unpack-comp-lzo (function object object none)) +(define-extern unpack-comp-lzo (function (pointer uint8) (pointer uint8) none)) ;; DECOMP BEGINS diff --git a/goal_src/jak2/engine/load/decomp.gc b/goal_src/jak2/engine/load/decomp.gc index bfed7967b3..1446a1ef1b 100644 --- a/goal_src/jak2/engine/load/decomp.gc +++ b/goal_src/jak2/engine/load/decomp.gc @@ -5,5 +5,547 @@ ;; name in dgo: decomp ;; dgos: ENGINE, GAME +;; This file has compression/decompression functions used for compressed visibility data, bigmap data, and +;; joint animations (not the joint-anim-compressed stuff, an outer layer of lzo compression of those) +;; It also has the update-vis! method of level, which handles the details of decompression. +;; Luckily for us, the IOP ramdisk vis stuff from Jak 1 is gone! +;; It's not super clear to me why they ditched this system. Maybe the visibility data is a lot smaller in jak 2. + ;; DECOMP BEGINS +;; definition for function unpack-comp-rle +;; WARN: Return type mismatch (pointer int8) vs none. +(defun unpack-comp-rle ((arg0 (pointer int8)) (arg1 (pointer int8))) + (local-vars (v1-2 int) (v1-3 uint)) + (nop!) + (loop + (loop + (set! v1-2 (-> arg1 0)) + (set! arg1 (&-> arg1 1)) + (b! (<= v1-2 0) cfg-5 :delay (nop!)) + (let ((a2-0 (-> arg1 0))) + (set! arg1 (&-> arg1 1)) + (label cfg-3) + (nop!) + (nop!) + (nop!) + (nop!) + (set! (-> arg0 0) a2-0) + ) + (set! arg0 (&-> arg0 1)) + (b! (> v1-2 0) cfg-3 :delay (set! v1-2 (+ v1-2 -1))) + ) + (label cfg-5) + (b! (zero? v1-2) cfg-8 :delay (set! v1-3 (the-as uint (- v1-2)))) + (label cfg-6) + (let ((a2-1 (-> arg1 0))) + (set! arg1 (&-> arg1 1)) + (nop!) + (nop!) + (set! (-> arg0 0) a2-1) + ) + (+! v1-3 -1) + (b! (> (the-as int v1-3) 0) cfg-6 :delay (set! arg0 (&-> arg0 1))) + ) + (label cfg-8) + (none) + ) + +;; definition of type huf-dictionary-node +(deftype huf-dictionary-node (structure) + ((zero uint16 :offset-assert 0) + (one uint16 :offset-assert 2) + ) + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) + +;; definition for method 3 of type huf-dictionary-node +(defmethod inspect huf-dictionary-node ((obj huf-dictionary-node)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'huf-dictionary-node) + (format #t "~1Tzero: ~D~%" (-> obj zero)) + (format #t "~1Tone: ~D~%" (-> obj one)) + (label cfg-4) + obj + ) + +;; definition for function unpack-comp-huf +;; WARN: Return type mismatch int vs none. +(defun unpack-comp-huf ((arg0 (pointer uint8)) (arg1 (pointer uint8)) (arg2 uint) (arg3 huf-dictionary-node)) + (local-vars (t1-1 uint) (t3-2 (pointer uint16))) + (nop!) + (let ((t1-0 (-> arg3 zero)) + (a2-1 (+ arg2 -1028)) + (t2-0 (-> arg3 one)) + ) + (nop!) + (label cfg-1) + (let ((v1-4 128)) + (nop!) + (let ((t0-0 (-> arg1 0))) + (set! arg1 (&-> arg1 1)) + (label cfg-2) + (let ((t3-0 (logand t0-0 v1-4))) + (shift-arith-right-32 v1-4 v1-4 1) + (b! (zero? t3-0) cfg-4 :delay (set! t1-1 t1-0)) + ) + ) + (nop!) + (set! t1-1 t2-0) + (label cfg-4) + (let ((t2-1 (+ t1-1 -256))) + (let ((t3-1 (* t1-1 4))) + (b! (< (the-as int t2-1) 0) cfg-8 :delay (set! t3-2 (the-as (pointer uint16) (+ t3-1 a2-1)))) + ) + (b! (zero? t2-1) cfg-10 :delay (set! t1-0 (-> t3-2 0))) + ) + (b! (nonzero? v1-4) cfg-2 :delay (set! t2-0 (-> t3-2 1))) + (b! #t cfg-1 :delay (nop!)) + (label cfg-8) + (set! (-> arg0 0) t1-1) + (set! arg0 (&-> arg0 1)) + (nop!) + (set! t1-0 (-> arg3 zero)) + (b! (nonzero? v1-4) cfg-2 :delay (set! t2-0 (-> arg3 one))) + ) + ) + (b! #t cfg-1 :delay (nop!)) + (label cfg-10) + (nop!) + (nop!) + 0 + (none) + ) + +;; definition for function unpack-comp-lzo +;; WARN: Return type mismatch int vs none. +(defun unpack-comp-lzo ((arg0 (pointer uint8)) (arg1 (pointer uint8))) + 0 + (let ((v1-1 arg0)) + (b! (>= (the-as uint 17) (-> arg1 0)) cfg-5 :delay #f) + (let ((a2-4 (the-as int (+ (-> arg1 0) -17)))) + (set! arg1 (&-> arg1 1)) + (b! (< a2-4 4) cfg-41) + (until (<= a2-4 0) + (set! (-> arg0 0) (-> arg1 0)) + (set! arg0 (&-> arg0 1)) + (set! arg1 (&-> arg1 1)) + (+! a2-4 -1) + ) + (b! #t cfg-15 :delay (nop!)) + (label cfg-5) + (b! #t cfg-45 :delay (nop!)) + (label cfg-6) + (let ((a2-6 (-> arg1 0))) + (set! arg1 (&-> arg1 1)) + (b! (>= (the-as int a2-6) 16) cfg-18) + (b! (nonzero? a2-6) cfg-12 :delay (empty-form)) + (while (zero? (-> arg1 0)) + (+! a2-6 255) + (set! arg1 (&-> arg1 1)) + ) + (set! a2-6 (+ (-> arg1 0) 15 a2-6)) + (set! arg1 (&-> arg1 1)) + (label cfg-12) + (set! (-> arg0 0) (-> arg1 0)) + (set! (-> arg0 1) (-> arg1 1)) + (set! (-> arg0 2) (-> arg1 2)) + (set! arg0 (&-> arg0 3)) + (set! arg1 (&-> arg1 3)) + (until (<= (the-as int a2-6) 0) + (set! (-> arg0 0) (-> arg1 0)) + (set! arg0 (&-> arg0 1)) + (set! arg1 (&-> arg1 1)) + (+! a2-6 -1) + ) + (label cfg-15) + (set! a2-6 (-> arg1 0)) + (set! arg1 (&-> arg1 1)) + (b! (>= (the-as int a2-6) 16) cfg-18) + (let ((a2-10 (the-as (pointer uint8) (&- (&- (&-> arg0 -2049) (the-as uint (/ (the-as int a2-6) 4))) (the-as uint (* (-> arg1 0) 4)))))) + (set! arg1 (&-> arg1 1)) + (set! (-> arg0 0) (-> a2-10 0)) + (set! (-> arg0 1) (-> a2-10 1)) + (set! (-> arg0 2) (-> a2-10 2)) + (set! arg0 (&-> arg0 3)) + (&-> a2-10 2) + ) + (b! #t cfg-39 :delay (nop!)) + (b! #t cfg-43 :delay (nop!)) + (label cfg-18) + (b! (< (the-as int a2-6) 64) cfg-20) + (let ((a3-23 + (the-as (pointer uint8) (&- (&- (&-> arg0 -1) (the-as uint (logand (/ (the-as int a2-6) 4) 7))) (the-as uint (* (-> arg1 0) 8)))) + ) + ) + (set! arg1 (&-> arg1 1)) + (let ((a2-13 (+ (/ (the-as int a2-6) 32) -1))) + (b! #t cfg-36 :delay (nop!)) + (label cfg-20) + (b! (< (the-as int a2-6) 32) cfg-27) + (set! a2-13 (the-as int (logand a2-6 31))) + (b! (nonzero? a2-13) cfg-26 :delay (empty-form)) + (b! #t cfg-24 :delay (nop!)) + (label cfg-23) + (+! a2-13 255) + (set! arg1 (&-> arg1 1)) + (label cfg-24) + (b! (zero? (-> arg1 0)) cfg-23 :delay (nop!)) + (set! a2-13 (the-as int (+ (-> arg1 0) 31 a2-13))) + (set! arg1 (&-> arg1 1)) + (label cfg-26) + (set! a3-23 (the-as (pointer uint8) (&- (&-> arg0 -1) (the-as uint (+ (shr (-> arg1 0) 2) (* (-> arg1 1) 64)))))) + (set! arg1 (&-> arg1 2)) + (b! #t cfg-36 :delay (nop!)) + (label cfg-27) + (b! (< (the-as int a2-6) 16) cfg-35) + (let ((a3-32 (the-as (pointer uint8) (&- arg0 (the-as uint (shl (logand a2-6 8) 11)))))) + (set! a2-13 (the-as int (logand a2-6 7))) + (b! (nonzero? a2-13) cfg-33 :delay (empty-form)) + (b! #t cfg-31 :delay (nop!)) + (label cfg-30) + (+! a2-13 255) + (set! arg1 (&-> arg1 1)) + (label cfg-31) + (b! (zero? (-> arg1 0)) cfg-30 :delay (nop!)) + (set! a2-13 (the-as int (+ (-> arg1 0) 7 a2-13))) + (set! arg1 (&-> arg1 1)) + (label cfg-33) + (let ((a3-33 (&- a3-32 (the-as uint (+ (shr (-> arg1 0) 2) (* (-> arg1 1) 64)))))) + (set! arg1 (&-> arg1 2)) + (b! (= a3-33 arg0) cfg-47 :delay (nop!)) + (set! a3-23 (&-> (the-as (pointer uint8) a3-33) -16384)) + ) + ) + (b! #t cfg-36 :delay (nop!)) + (label cfg-35) + (let ((a2-16 (the-as (pointer uint8) (&- (&- (&-> arg0 -1) (the-as uint (/ (the-as int a2-6) 4))) (the-as uint (* (-> arg1 0) 4)))))) + (set! arg1 (&-> arg1 1)) + (set! (-> arg0 0) (-> a2-16 0)) + (set! (-> arg0 1) (-> a2-16 1)) + (set! arg0 (&-> arg0 2)) + (&-> a2-16 1) + ) + (b! #t cfg-39 :delay (nop!)) + (label cfg-36) + (set! (-> arg0 0) (-> a3-23 0)) + (set! (-> arg0 1) (-> a3-23 1)) + (set! arg0 (&-> arg0 2)) + (let ((a3-39 (&-> a3-23 2))) + (until (<= (the-as int a2-13) 0) + (set! (-> arg0 0) (-> a3-39 0)) + (set! arg0 (&-> arg0 1)) + (set! a3-39 (&-> a3-39 1)) + (+! a2-13 -1) + ) + ) + ) + ) + (label cfg-39) + (set! a2-4 (the-as int (logand (-> arg1 -2) 3))) + (b! (zero? (the-as uint a2-4)) cfg-45 :delay (nop!)) + (until (<= a2-4 0) + (label cfg-41) + (set! (-> arg0 0) (-> arg1 0)) + (set! arg0 (&-> arg0 1)) + (set! arg1 (&-> arg1 1)) + (set! a2-4 (the-as int (+ (the-as uint a2-4) -1))) + ) + (set! a2-6 (-> arg1 0)) + ) + ) + (set! arg1 (&-> arg1 1)) + (label cfg-43) + (b! #t cfg-18 :delay (nop!)) + (label cfg-45) + (b! #t cfg-6 :delay (nop!)) + (label cfg-47) + (&- arg0 (the-as uint v1-1)) + ) + (none) + ) + +;; definition for method 16 of type level +;; INFO: Used lq/sq +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 138] +(defmethod update-vis! level ((obj level) (vis-info level-vis-info) (unused uint) (in-bsp-vis-string (pointer uint8))) + (local-vars (t0-3 uint128) (extra-vis-length int) (extra-vis-dest (pointer int8))) + (let* ((cam-leaf-idx (-> vis-info from-bsp current-leaf-idx)) + (curr-vis-string-offset (-> vis-info current-vis-string)) + (desired-vis-string-offset (-> vis-info vis-string cam-leaf-idx)) + ) + 0 + (+ #x70000000 0) + (+ 2048 #x70000000) + (b! (!= curr-vis-string-offset desired-vis-string-offset) cfg-8 :delay (empty-form)) + (b! (not (logtest? (vis-info-flag loading) (-> vis-info flags))) cfg-6 :delay (empty-form)) + (if (check-busy *ramdisk-rpc*) + (return #f) + ) + (logclear! (-> vis-info flags) (vis-info-flag loading)) + (let ((vis-buf (the-as (pointer integer) (-> obj vis-buffer)))) + (b! #t cfg-16 :delay (nop!)) + (label cfg-6) + (return #t) + (label cfg-8) + (when (logtest? (vis-info-flag loading) (-> vis-info flags)) + (if (check-busy *ramdisk-rpc*) + (return #f) + ) + (logclear! (-> vis-info flags) (vis-info-flag loading)) + ) + (set! (-> vis-info current-vis-string) desired-vis-string-offset) + (b! (logtest? (vis-info-flag in-iop) (-> vis-info flags)) cfg-15 :delay (empty-form)) + (set! vis-buf (&+ in-bsp-vis-string desired-vis-string-offset)) + (b! #t cfg-16 :delay (nop!)) + (label cfg-15) + (format 0 "ERROR: ramdisk vis for level ~A, this is not supported~%" (-> obj name)) + (let ((v0-1 #f)) + (b! #t cfg-49 :delay (nop!)) + (label cfg-16) + (let ((lower-flag-bits (the-as int (logand (vis-info-flag + dummy0 + dummy1 + dummy2 + dummy3 + dummy4 + dummy5 + dummy6 + dummy7 + dummy8 + dummy9 + dummy10 + dummy11 + dummy12 + dummy13 + dummy14 + dummy15 + dummy16 + dummy17 + dummy18 + dummy19 + dummy20 + dummy21 + dummy22 + dummy23 + dummy24 + dummy25 + dummy26 + dummy27 + dummy28 + ) + (-> vis-info flags) + ) + ) + ) + (spad-start (&-> (the-as (pointer int8) *fake-scratchpad-data*) 0)) + (spad-end (the-as (pointer int8) (&+ *fake-scratchpad-data* 2048))) + (list-len (-> obj bsp visible-list-length)) + ) + (when (zero? (the-as vis-info-flag lower-flag-bits)) + (let ((qwc (/ (+ list-len 15) 16))) + (dotimes (a0-19 qwc) + (set! (-> (the-as (pointer int128) (&+ spad-start (* a0-19 16)))) (the int128 0)) + ) + ) + (mem-copy! spad-start (the-as (pointer uint8) vis-buf) list-len) + ) + (while (nonzero? lower-flag-bits) + (let ((comp-mode (logand lower-flag-bits 7))) + (cond + ((= comp-mode 1) + (let ((qwc2 (/ (+ list-len 15) 16))) + (dotimes (a0-23 qwc2) + (set! (-> (the-as (pointer int128) (&+ spad-start (* a0-23 16)))) (the int128 0)) + ) + ) + (set! extra-vis-length (-> obj bsp extra-vis-list-length)) + (set! extra-vis-dest (&+ spad-start (- list-len extra-vis-length))) + (let ((extra-vis-in (unpack-vis (-> obj bsp drawable-trees) spad-start (the-as (pointer int8) vis-buf)))) + (dotimes (extra-vis-idx extra-vis-length) + (let ((vis-byte (-> extra-vis-in 0))) + (set! extra-vis-in (&-> extra-vis-in 1)) + (set! (-> extra-vis-dest 0) vis-byte) + ) + (set! extra-vis-dest (&-> extra-vis-dest 1)) + ) + ) + #f + ) + ((= comp-mode 2) + (unpack-comp-rle spad-start (the-as (pointer int8) vis-buf)) + ) + ((= comp-mode 3) + (unpack-comp-huf + (the-as (pointer uint8) spad-start) + (the-as (pointer uint8) vis-buf) + (-> vis-info dictionary) + (the-as huf-dictionary-node (+ (-> vis-info dictionary) (-> vis-info dictionary-length) -4)) + ) + ) + ((= comp-mode 4) + (unpack-comp-lzo (the-as (pointer uint8) spad-start) (the-as (pointer uint8) vis-buf)) + ) + ) + ) + (set! vis-buf spad-start) + (set! spad-start spad-end) + (set! spad-end (the-as (pointer int8) vis-buf)) + (shift-arith-right-32 lower-flag-bits lower-flag-bits 3) + ) + (let ((vis-ptr (the-as (pointer uint8) vis-buf)) + (all-vis-ptr (the-as (pointer uinteger) (-> obj bsp all-visible-list))) + (vis-error #f) + ) + (dotimes (s0-1 list-len) + (when (!= (logand (-> vis-ptr 0) (-> (the-as (pointer uint8) all-vis-ptr) 0)) (-> vis-ptr 0)) + (format + #t + "ERROR: illegal vis bits set [byte ~X] ~X -> ~X~%" + s0-1 + (-> vis-ptr 0) + (-> (the-as (pointer uint8) all-vis-ptr) 0) + ) + (set! vis-error #t) + ) + (set! vis-ptr (&-> vis-ptr 1)) + (set! all-vis-ptr (&+ (the-as (pointer uint16) all-vis-ptr) 1)) + ) + (when vis-error + (format + #t + "src = #x~x dest = #x~x ~s ~s~%" + vis-buf + (-> vis-info vis-bits) + (-> vis-info level) + (-> vis-info from-level) + ) + (format #t "leaf-index = ~d~%" (-> vis-info from-bsp current-leaf-idx)) + 0 + ) + ) + (let ((unpacked-vis-ptr vis-buf) + (final-vis-ptr (the-as object (-> vis-info vis-bits))) + (all-vis (the-as (pointer uinteger) (-> obj bsp all-visible-list))) + (vis-qwc (/ (+ list-len 15) 16)) + ) + (dotimes (a3-6 vis-qwc) + (let ((t0-2 (-> (the-as (pointer uint128) unpacked-vis-ptr) 0)) + (t1-1 (-> (the-as (pointer uint128) all-vis) 0)) + ) + (.pand t0-3 t0-2 t1-1) + ) + (set! (-> (the-as (pointer uint128) final-vis-ptr) 0) t0-3) + (set! final-vis-ptr (+ (the-as uint final-vis-ptr) 16)) + (set! unpacked-vis-ptr (&-> (the-as (pointer uint8) unpacked-vis-ptr) 16)) + (set! all-vis (&-> (the-as (pointer uint16) all-vis) 8)) + ) + ) + ) + (set! v0-1 #t) + (label cfg-49) + v0-1 + ) + ) + ) + ) + +;; definition for function pack-comp-rle +;; WARN: Return type mismatch int vs none. +(defun pack-comp-rle ((arg0 (pointer uint8)) (arg1 (pointer uint8)) (arg2 int) (arg3 int)) + (let ((s4-0 0)) + 0 + (while (and (> arg2 0) (< (+ s4-0 131) arg3)) + (cond + ((= (-> arg1 0) (-> arg1 1)) + (let ((v1-2 (-> arg1 0))) + (set! arg1 (&-> arg1 2)) + (let ((a0-2 2)) + (+! arg2 -2) + (while (> arg2 0) + (cond + ((= v1-2 (-> arg1 0)) + (+! a0-2 1) + (set! arg1 (&-> arg1 1)) + (+! arg2 -1) + (if (>= a0-2 128) + (goto cfg-12) + ) + ) + (else + (goto cfg-12) + ) + ) + ) + (label cfg-12) + (set! (-> arg0 0) (the-as uint (+ a0-2 -1))) + ) + (set! (-> arg0 1) v1-2) + ) + (set! arg0 (&-> arg0 2)) + (+! s4-0 2) + ) + (else + (let ((a0-4 arg1) + (v1-4 1) + ) + (set! arg1 (&-> arg1 1)) + (+! arg2 -1) + (while (< 1 arg2) + (when (and (= (-> arg1 0) (-> arg1 1)) (< 2 arg2)) + (if (= (-> arg1 0) (-> arg1 2)) + (goto cfg-26) + ) + ) + (+! v1-4 1) + (set! arg1 (&-> arg1 1)) + (+! arg2 -1) + (if (>= v1-4 127) + (goto cfg-26) + ) + ) + (label cfg-26) + (when (= arg2 1) + (+! v1-4 1) + (set! arg1 (&-> arg1 1)) + (+! arg2 -1) + ) + (set! (-> arg0 0) (the-as uint (- v1-4))) + (let ((a1-21 (&-> arg0 1)) + (a2-4 (+ s4-0 1)) + ) + (dotimes (t0-0 v1-4) + (set! (-> a1-21 t0-0) (-> a0-4 t0-0)) + ) + (set! arg0 (&+ a1-21 v1-4)) + (set! s4-0 (+ a2-4 v1-4)) + ) + ) + ) + ) + ) + (if (< arg3 (+ s4-0 131)) + (format 0 "(GOMI) Warning: May have run out of bigmap bit mask compression memory~%") + ) + (when (= arg2 1) + (set! (-> arg0 0) (the-as uint -1)) + (set! (-> arg0 1) (-> arg1 0)) + (set! arg0 (&-> arg0 2)) + (+! s4-0 2) + (&-> arg1 1) + ) + (set! (-> arg0 0) (the-as uint 0)) + (&-> arg0 1) + (+ s4-0 1) + ) + (none) + ) + + + + diff --git a/goal_src/jak2/engine/nav/nav-enemy-h.gc b/goal_src/jak2/engine/nav/nav-enemy-h.gc index 113a8b34b6..f663edd09e 100644 --- a/goal_src/jak2/engine/nav/nav-enemy-h.gc +++ b/goal_src/jak2/engine/nav/nav-enemy-h.gc @@ -7,3 +7,263 @@ ;; DECOMP BEGINS +(defenum enemy-flag + :type int64 + :bitfield #t + (lock-focus 0) + (death-start 1) + (enable-on-active 2) + (checking-water 3) + (check-water 4) + (spawn-gem 5) + (chase-startup 6) + (attackable-backup 7) + (look-at-focus 8) + (use-notice-distance 9) + (enable-on-notice 10) + (look-at-move-dest 11) + (notice 12) + (auto-reset-penetrate 13) + (jump-check-blocked 14) + (drawn-mirrored 15) + (multi-focus 16) + (alert 17) + (victory 18) + (dangerous-backup 19) + (actor-pause-backup 20) + (trackable 21) + (called-dying 22) + (check-water-backup 23) + (no-initial-move-to-ground 24) + (cam-attack-mode 25) + (trackable-backup 26) + (enable-on-hostile 27) + (directed-ready 28) + (use-trigger 29) + (directed 30) + (dislike-combo 31) + (recover-applied-velocity 32) + (vulnerable-backup 33) + (vulnerable 34) + (recover 35) + ) + +(deftype enemy-focus (focus) + ((aware uint64 :offset-assert 16) + (flags uint64 :offset-assert 24) + ) + :method-count-assert 14 + :size-assert #x20 + :flag-assert #xe00000020 + (:methods + (enemy-focus-method-13 () none 13) + ) + ) + +(deftype enemy-info (basic) + ((fact-defaults basic :offset-assert 4) + (use-die-falling basic :offset-assert 8) + (use-victory basic :offset-assert 12) + (use-jump-blocked basic :offset-assert 16) + (debug-draw-neck basic :offset-assert 20) + (jump-debug-draw basic :offset-assert 24) + (move-to-ground basic :offset-assert 28) + (hover-if-no-ground basic :offset-assert 32) + (idle-anim-script uint32 :offset-assert 36) + (idle-anim int32 :offset-assert 40) + (notice-anim int32 :offset-assert 44) + (hostile-anim int32 :offset-assert 48) + (hit-anim int32 :offset-assert 52) + (knocked-anim int32 :offset-assert 56) + (knocked-land-anim int32 :offset-assert 60) + (die-anim int32 :offset-assert 64) + (die-falling-anim int32 :offset-assert 68) + (victory-anim int32 :offset-assert 72) + (jump-wind-up-anim int32 :offset-assert 76) + (jump-in-air-anim int32 :offset-assert 80) + (jump-land-anim int32 :offset-assert 84) + (neck-joint int32 :offset-assert 88) + (look-at-joint int32 :offset-assert 92) + (bullseye-joint int32 :offset-assert 96) + (sound-hit uint128 :offset-assert 112) + (sound-die uint128 :offset-assert 128) + (notice-distance meters :offset-assert 144) + (notice-distance-delta meters :offset-assert 148) + (proximity-notice-distance meters :offset-assert 152) + (default-hit-points int32 :offset-assert 156) + (gnd-collide-with uint32 :offset-assert 160) + (overlaps-others-collide-with-filter uint32 :offset-assert 164) + (penetrate-flinch uint64 :offset-assert 168) + (penetrate-knocked uint64 :offset-assert 176) + (movement-gravity meters :offset-assert 184) + (friction float :offset-assert 188) + (slip-factor float :offset-assert 192) + (attack-shove-back meters :offset-assert 196) + (attack-shove-up meters :offset-assert 200) + (attack-mode basic :offset-assert 204) + (attack-damage int32 :offset-assert 208) + (recover-gnd-collide-with uint32 :offset-assert 212) + (jump-height-min meters :offset-assert 216) + (jump-height-factor float :offset-assert 220) + (knocked-seek-ry-clamp float :offset-assert 224) + (knocked-soft-vxz-lo float :offset-assert 228) + (knocked-soft-vxz-hi float :offset-assert 232) + (knocked-soft-vy-lo float :offset-assert 236) + (knocked-soft-vy-hi float :offset-assert 240) + (knocked-medium-vxz-lo float :offset-assert 244) + (knocked-medium-vxz-hi float :offset-assert 248) + (knocked-medium-vy-lo float :offset-assert 252) + (knocked-medium-vy-hi float :offset-assert 256) + (knocked-hard-vxz-lo float :offset-assert 260) + (knocked-hard-vxz-hi float :offset-assert 264) + (knocked-hard-vy-lo float :offset-assert 268) + (knocked-hard-vy-hi float :offset-assert 272) + (knocked-huge-vxz-lo float :offset-assert 276) + (knocked-huge-vxz-hi float :offset-assert 280) + (knocked-huge-vy-lo float :offset-assert 284) + (knocked-huge-vy-hi float :offset-assert 288) + (knocked-yellow-vxz-lo float :offset-assert 292) + (knocked-yellow-vxz-hi float :offset-assert 296) + (knocked-yellow-vy-lo float :offset-assert 300) + (knocked-yellow-vy-hi float :offset-assert 304) + (knocked-red-vxz-lo float :offset-assert 308) + (knocked-red-vxz-hi float :offset-assert 312) + (knocked-red-vy-lo float :offset-assert 316) + (knocked-red-vy-hi float :offset-assert 320) + (knocked-blue-vxz-lo float :offset-assert 324) + (knocked-blue-vxz-hi float :offset-assert 328) + (knocked-blue-vy-lo float :offset-assert 332) + (knocked-blue-vy-hi float :offset-assert 336) + (shadow-size meters :offset-assert 340) + (shadow-max-y meters :offset-assert 344) + (shadow-min-y meters :offset-assert 348) + (shadow-locus-dist meters :offset-assert 352) + (gem-joint int32 :offset-assert 356) + (gem-seg uint32 :offset-assert 360) + (gem-no-seg uint32 :offset-assert 364) + (gem-offset sphere :inline :offset-assert 368) + ) + :method-count-assert 10 + :size-assert #x180 + :flag-assert #xa00000180 + (:methods + (enemy-info-method-9 () none 9) + ) + ) + +(deftype enemy-knocked-info (structure) + ((anim-speed float :offset-assert 0) + (on-surface-count int32 :offset-assert 4) + (move-count int32 :offset-assert 8) + (land-can-land-time time-frame :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x18 + :flag-assert #x900000018 + ) + +(deftype enemy-jump-info (structure) + ((flags uint8 :offset-assert 0) + (anim-speed float :offset-assert 4) + (hang-time time-frame :offset-assert 8) + (start-pos vector :inline :offset-assert 16) + (dest-pos vector :inline :offset-assert 32) + (traj trajectory :inline :offset-assert 48) + ) + :method-count-assert 9 + :size-assert #x58 + :flag-assert #x900000058 + ) + +(deftype enemy-init-by-other-params (structure) + ((trans vector :inline :offset-assert 0) + (quat quaternion :inline :offset-assert 16) + (entity basic :offset-assert 32) + (directed? basic :offset-assert 36) + (no-initial-move-to-ground? basic :offset-assert 40) + ) + :method-count-assert 9 + :size-assert #x2c + :flag-assert #x90000002c + ) + +(deftype enemy-attack-info (structure) + ((attack-id uint32 :offset-assert 0) + (knocked-type uint8 :offset-assert 4) + (blue-juggle-count uint8 :offset-assert 5) + (attacker-handle uint64 :offset-assert 8) + (attack-time time-frame :offset-assert 16) + (penetrate-using uint64 :offset-assert 24) + (attacker-pos vector :inline :offset-assert 32) + (attack-direction vector :inline :offset-assert 48) + ) + :method-count-assert 9 + :size-assert #x40 + :flag-assert #x900000040 + ) + +(deftype enemy-best-focus (structure) + ((proc basic :offset-assert 0) + (rating float :offset-assert 4) + (aware uint64 :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) +(deftype nav-enemy (enemy) + ((frustration-point vector :inline :offset-assert 544) + (move-dest vector :inline :offset-assert 560) + (frustration-time time-frame :offset-assert 576) ;; time-frame + (blocked-start-time time-frame :offset-assert 584) + (restore-nav-radius-time time-frame :offset-assert 592) + (nav-radius-backup float :offset-assert 600) + (circle-radial-dist float :offset 244) + ) + :method-count-assert 178 + :size-assert #x25c + :flag-assert #xb201e0025c + (:methods + (nav-enemy-method-137 () none 137) + (nav-enemy-method-138 () none 138) + (nav-enemy-method-139 () none 139) + (nav-enemy-method-140 () none 140) + (nav-enemy-method-141 () none 141) + (nav-enemy-method-142 () none 142) + (nav-enemy-method-143 () none 143) + (nav-enemy-method-144 () none 144) + (nav-enemy-method-145 () none 145) + (nav-enemy-method-146 () none 146) + (nav-enemy-method-147 () none 147) + (nav-enemy-method-148 () none 148) + (nav-enemy-method-149 () none 149) + (nav-enemy-method-150 () none 150) + (nav-enemy-method-151 () none 151) + (nav-enemy-method-152 () none 152) + (nav-enemy-method-153 () none 153) + (nav-enemy-method-154 () none 154) + (nav-enemy-method-155 () none 155) + (nav-enemy-method-156 () none 156) + (nav-enemy-method-157 () none 157) + (nav-enemy-method-158 () none 158) + (nav-enemy-method-159 () none 159) + (nav-enemy-method-160 () none 160) + (nav-enemy-method-161 () none 161) + (nav-enemy-method-162 () none 162) + (nav-enemy-method-163 () none 163) + (nav-enemy-method-164 () none 164) + (nav-enemy-method-165 () none 165) + (nav-enemy-method-166 () none 166) + (nav-enemy-method-167 () none 167) + (nav-enemy-method-168 () none 168) + (nav-enemy-method-169 () none 169) + (nav-enemy-method-170 () none 170) + (nav-enemy-method-171 () none 171) + (nav-enemy-method-172 () none 172) + (nav-enemy-method-173 () none 173) + (nav-enemy-method-174 () none 174) + (nav-enemy-method-175 () none 175) + (nav-enemy-method-176 () none 176) + (nav-enemy-method-177 () none 177) + ) + ) diff --git a/goal_src/jak2/examples/debug-jak2.gc b/goal_src/jak2/examples/debug-jak2.gc index 1361979a98..992aa4c464 100644 --- a/goal_src/jak2/examples/debug-jak2.gc +++ b/goal_src/jak2/examples/debug-jak2.gc @@ -36,7 +36,8 @@ ) (matrix*! cam-temp cam-rot (-> *math-camera* perspective)) (set! (-> inv-cam-rot vector 3 quad) (-> cam-trans quad)) - + (matrix-copy! *save-camera-inv-rot* inv-cam-rot) ;; hack + (set! *external-cam-mode* 'pad-1) ;; fixes it! ;(set! (-> *math-camera* camera-temp data 15) -6.) ) @@ -273,7 +274,7 @@ ) (defun print-task-node-tree-graphviz () - + (format #t "digraph G {~%") (format #t " node [style=filled shape=ellipse]~%~%") (let ((game-tasks (-> *game-info* play-list))) diff --git a/goal_src/jak2/game.gp b/goal_src/jak2/game.gp index 87b2f067fa..dd0aba8c02 100644 --- a/goal_src/jak2/game.gp +++ b/goal_src/jak2/game.gp @@ -770,6 +770,30 @@ "ctywide-vis" ) +;;;;;;;;;;;;;;;;;;;;; +;; L CITY WIDE A +;;;;;;;;;;;;;;;;;;;;; + +(cgo "LWIDEA.DGO" "lwidea.gd") + +(copy-textures 2929 2930) + +(copy-gos + "citizen-fat-ag" + "citizen-norm-ag" + "crimson-guard-ag" + "citizen-chick-ag" + "hellcat-ag" + "carc-ag" + "cara-ag" + "carb-ag" + "citizen-norm-rider-ag" + "crimson-bike-ag" + "bikec-ag" + "bikeb-ag" + "bikea-ag" + "lwidea") + ;;;;;;;;;;;;;;;;;;;;; ;; CITY SLUM A ;;;;;;;;;;;;;;;;;;;;; diff --git a/goal_src/jak2/levels/city/common/citizen-fat.gc b/goal_src/jak2/levels/city/common/citizen-fat.gc index 703477719b..9dd72129a5 100644 --- a/goal_src/jak2/levels/city/common/citizen-fat.gc +++ b/goal_src/jak2/levels/city/common/citizen-fat.gc @@ -7,3 +7,11 @@ ;; DECOMP BEGINS +(deftype citizen-fat (civilian) + () + :method-count-assert 218 + :size-assert #x424 + :flag-assert #xda03b00424 + (:methods + ) + ) \ No newline at end of file diff --git a/goal_src/jak2/levels/city/common/citizen-h.gc b/goal_src/jak2/levels/city/common/citizen-h.gc index 207a61284d..2aef2eeca8 100644 --- a/goal_src/jak2/levels/city/common/citizen-h.gc +++ b/goal_src/jak2/levels/city/common/citizen-h.gc @@ -7,3 +7,36 @@ ;; DECOMP BEGINS +(deftype citizen (nav-enemy) + ( + (pad uint8 :offset 963)) + :method-count-assert 201 + :size-assert #x3c4 + :flag-assert #xc9035003c4 + ;; Failed to read fields. + (:methods + (citizen-method-178 () none 178) + (citizen-method-179 () none 179) + (citizen-method-180 () none 180) + (citizen-method-181 () none 181) + (citizen-method-182 () none 182) + (citizen-method-183 () none 183) + (citizen-method-184 () none 184) + (citizen-method-185 () none 185) + (citizen-method-186 () none 186) + (citizen-method-187 () none 187) + (citizen-method-188 () none 188) + (citizen-method-189 () none 189) + (citizen-method-190 () none 190) + (citizen-method-191 () none 191) + (citizen-method-192 () none 192) + (citizen-method-193 () none 193) + (citizen-method-194 () none 194) + (citizen-method-195 () none 195) + (citizen-method-196 () none 196) + (citizen-method-197 () none 197) + (citizen-method-198 () none 198) + (citizen-method-199 () none 199) + (citizen-method-200 () none 200) + ) + ) \ No newline at end of file diff --git a/goal_src/jak2/levels/city/common/civilian.gc b/goal_src/jak2/levels/city/common/civilian.gc index 6d17cb9709..8041f9d562 100644 --- a/goal_src/jak2/levels/city/common/civilian.gc +++ b/goal_src/jak2/levels/city/common/civilian.gc @@ -7,3 +7,43 @@ ;; DECOMP BEGINS +(deftype civilian (citizen) + ((info basic :offset-assert 964) + (anim-panic-run int32 :offset-assert 968) + (anim-on-ground int32 :offset-assert 972) + (anim-dive int32 :offset-assert 976) + (anim-get-up-front int32 :offset-assert 980) + (anim-get-up-back int32 :offset-assert 984) + (last-second-pos vector :inline :offset-assert 992) + (last-distance float :offset-assert 1008) + (next-time time-frame :offset-assert 1016) + (dive-target-point vector :inline :offset-assert 1024) + (dive-reaction float :offset-assert 1040) + (allow-dive basic :offset-assert 1044) + (dive-finished? basic :offset-assert 1048) + (hit-face uint32 :offset-assert 1052) + (seat int32 :offset-assert 1056) + ) + :method-count-assert 218 + :size-assert #x424 + :flag-assert #xda03b00424 + (:methods + (avoid-danger () _type_ :state 201) + (clear-path () _type_ :state 202) + (on-ground () _type_ :state 203) + (dive () _type_ :state 204) + (get-up-front () _type_ :state 205) + (get-up-back () _type_ :state 206) + (cower-ground () _type_ :state 207) + (wait-for-ride () _type_ :state 208) + (move-to-vehicle () _type_ :state 209) + (board-vehicle () _type_ :state 210) + (ride () _type_ :state 211) + (exit-vehicle () _type_ :state 212) + (wait-at-dest () _type_ :state 213) + (civilian-method-214 () none 214) + (civilian-method-215 () none 215) + (civilian-method-216 () none 216) + (civilian-method-217 () none 217) + ) + ) \ No newline at end of file diff --git a/test/decompiler/reference/jak2/engine/anim/joint_REF.gc b/test/decompiler/reference/jak2/engine/anim/joint_REF.gc index d4e22d4c5c..122dff2551 100644 --- a/test/decompiler/reference/jak2/engine/anim/joint_REF.gc +++ b/test/decompiler/reference/jak2/engine/anim/joint_REF.gc @@ -2116,7 +2116,7 @@ (set! (-> v1-15 comp-data) (the-as uint (-> s5-0 fixed))) ) (let ((s4-1 (kmalloc (-> obj kheap) (the-as int s3-0) (kmalloc-flags) "malloc"))) - (unpack-comp-lzo s4-1 (-> s5-0 fixed)) + (unpack-comp-lzo (the-as (pointer uint8) s4-1) (the-as (pointer uint8) (-> s5-0 fixed))) (set! (-> s5-0 flags) (logand -2 (-> s5-0 flags))) (logior! (-> s5-0 flags) 2) (set! (-> s5-0 fixed) (the-as joint-anim-compressed-fixed s4-1)) diff --git a/test/decompiler/reference/jak2/engine/camera/cam-update_REF.gc b/test/decompiler/reference/jak2/engine/camera/cam-update_REF.gc index 5673af0c88..2628e5829b 100644 --- a/test/decompiler/reference/jak2/engine/camera/cam-update_REF.gc +++ b/test/decompiler/reference/jak2/engine/camera/cam-update_REF.gc @@ -89,837 +89,167 @@ ;; definition for function update-visible ;; INFO: Used lq/sq -;; ERROR: failed type prop at 290: Could not figure out load: (set! v1 (l.w s3)) -(defun update-visible ((a0-0 math-camera)) - (local-vars - (v0-0 none) - (v0-1 none) - (v0-2 none) - (v0-3 none) - (v0-4 none) - (v0-5 object) - (v0-6 none) - (v0-7 none) - (v0-8 none) - (v0-9 symbol) - (v1-0 symbol) - (v1-2 int) - (v1-3 int) - (v1-4 int) - (v1-5 level) - (v1-6 level-group) - (v1-7 int) - (v1-10 int) - (v1-11 int) - (v1-12 int) - (v1-13 symbol) - (v1-15 bsp-header) - (v1-16 int) - (v1-17 int) - (v1-18 symbol) - (v1-19 symbol) - (v1-20 symbol) - (v1-21 symbol) - (v1-22 symbol) - (v1-23 symbol) - (v1-24 level-vis-info) - (v1-25 bsp-header) - (v1-26 symbol) - (v1-28 symbol) - (v1-29 int) - (v1-30 int) - (v1-31 int) - (v1-32 symbol) - (v1-33 symbol) - (v1-34 symbol) - (v1-37 type) - (v1-38 none) - (v1-40 int) - (v1-44 symbol) - (v1-45 symbol) - (v1-46 level-group) - (v1-48 bsp-header) - (v1-50 bsp-header) - (v1-52 level-group) - (v1-53 int) - (v1-56 symbol) - (v1-57 symbol) - (v1-58 symbol) - (v1-60 int) - (v1-61 int) - (v1-62 int) - (v1-63 int) - (v1-64 int) - (v1-65 int) - (v1-66 symbol) - (v1-68 symbol) - (v1-69 symbol) - (v1-70 symbol) - (v1-71 symbol) - (v1-72 int) - (v1-73 int) - (v1-74 bsp-header) - (v1-75 bsp-header) - (v1-76 bsp-header) - (v1-77 uint) - (v1-78 bsp-header) - (v1-79 uint) - (v1-81 none) - (v1-82 symbol) - (v1-83 symbol) - (v1-84 symbol) - (v1-86 bsp-header) - (v1-87 bsp-header) - (v1-88 bsp-header) - (v1-89 uint) - (v1-91 none) - (v1-92 none) - (v1-93 none) - (v1-94 none) - (v1-95 none) - (v1-96 none) - (v1-97 none) - (v1-98 none) - (v1-99 none) - (v1-102 none) - (v1-103 none) - (v1-105 none) - (v1-106 none) - (v1-107 none) - (v1-108 none) - (v1-109 none) - (v1-111 none) - (v1-112 none) - (v1-115 level-group) - (v1-116 int) - (a0-1 level-group) - (a0-2 symbol) - (a0-4 bsp-header) - (a0-5 (inline-array bsp-node)) - (a0-6 symbol) - (a0-7 symbol) - (a0-9 bsp-header) - (a0-11 level-group) - (a0-12 symbol) - (a0-13 pointer) - (a0-14 symbol) - (a0-15 basic) - (a0-17 int) - (a0-18 int) - (a0-19 int) - (a0-20 uint) - (a0-23 symbol) - (a0-24 level) - (a0-25 int) - (a0-26 int) - (a0-27 level-vis-info) - (a0-28 symbol) - (a0-29 symbol) - (a0-30 pointer) - (a0-31 pointer) - (a0-32 cpad-list) - (a0-33 cpad-info) - (a0-34 pad-buttons) - (a0-35 pad-buttons) - (a0-36 level-group) - (a0-37 symbol) - (a0-38 int) - (a0-39 int) - (a0-40 string) - (a0-41 int) - (a0-42 int) - (a0-43 none) - (a0-45 none) - (a0-47 none) - (a0-49 none) - (a0-50 none) - (a0-51 none) - (a0-52 none) - (a0-53 none) - (a0-54 none) - (a0-55 none) - (a0-56 none) - (a0-57 none) - (a0-58 none) - (a0-59 none) - (a0-60 none) - (a0-61 none) - (a0-62 none) - (a0-63 none) - (a0-64 none) - (a0-65 none) - (a0-66 none) - (a0-67 none) - (a0-68 none) - (a0-69 none) - (a0-70 none) - (a0-71 none) - (a0-72 none) - (a0-73 none) - (a0-74 none) - (a0-75 none) - (a0-76 none) - (a0-77 none) - (a0-78 none) - (a0-79 none) - (a0-80 none) - (a0-81 none) - (a0-82 none) - (a0-83 none) - (a1-0 symbol) - (a1-1 vector) - (a1-2 (pointer uint16)) - (a1-3 vis-info-flag) - (a1-4 bsp-header) - (a1-5 uint) - (a1-9 int) - (a1-10 (pointer uint16)) - (a1-11 (pointer uint16)) - (a1-12 int) - (a1-13 int) - (a1-14 string) - (a1-15 int) - (a1-16 int) - (a1-17 none) - (a1-18 none) - (a1-19 none) - (a1-20 none) - (a1-21 none) - (a1-22 none) - (a1-23 none) - (a1-24 none) - (a1-25 none) - (a1-26 none) - (a1-27 none) - (a1-28 none) - (a1-29 none) - (a1-30 none) - (a1-31 none) - (a1-32 none) - (a1-33 none) - (a1-34 none) - (a1-35 none) - (a1-36 none) - (a1-37 none) - (a1-38 none) - (a1-39 none) - (a1-40 none) - (a1-41 none) - (a2-0 int) - (a2-1 uint) - (a2-2 int) - (a2-4 symbol) - (a2-5 int) - (a2-7 none) - (a2-8 none) - (a2-9 none) - (a3-0 uint) - (a3-1 int) - (a3-2 int) - (a3-3 int) - (a3-4 none) - (a3-5 none) - (a3-6 none) - (t0-0 int) - (t0-2 uint) - (t0-3 none) - (t0-4 none) - (t0-5 none) - (t1-0 uint) - (t2-0 string) - (t3-0 string) - (s2-0 int) - (s3-0 uint) - (s4-0 level-vis-info) - (s4-1 uint) - (s5-0 int) - (s5-1 level) - (s5-2 level) - (t9-0 (function bsp-header vector none)) - (t9-1 (function pointer pointer int none)) - (t9-2 (function none)) - (t9-3 (function pointer pointer int none)) - (t9-4 (function pointer pointer int none)) - (t9-5 (function _varargs_ object)) - (t9-6 none) - (t9-7 none) - (t9-8 none) - (gp-1 int) - (gp-2 int) - (sp-0 none) - (f0-0 none) - (f0-1 none) - (f0-2 none) - (f0-3 none) - (f0-4 none) - (f0-5 none) - (f0-6 none) - (f0-7 none) - (f0-8 none) - (f0-9 none) - (f0-10 none) - (f0-11 none) - (f0-12 none) - (f0-13 none) - (f0-14 none) - (f0-15 none) - (f0-16 none) - (f0-17 none) - (f0-18 none) - (f0-19 none) - (f0-20 none) - (f0-21 none) - (f0-22 none) - (f0-23 none) - (f0-24 none) - (f0-25 none) - (f1-0 none) - (f1-1 none) - (f1-2 none) - (f1-3 none) - (f1-4 none) - (f1-5 none) - (f1-6 none) - (f1-7 none) - (f1-8 none) - (f1-9 none) - (f1-10 none) - (f1-11 none) - (f1-12 none) - (f1-13 none) - (f1-14 none) - (f1-15 none) - (f1-16 none) - (f1-17 none) - (f1-18 none) - (f1-19 none) - (f1-20 none) - (f1-21 none) - (f1-22 none) - (f1-23 none) - (f1-24 none) - (f1-25 none) - (f1-26 none) - (f1-27 none) - (f1-28 none) - (f1-29 none) - (f1-30 none) - (f1-31 none) - (f1-32 none) - (f1-33 none) - (f1-34 none) - (f1-35 none) - (f1-36 none) - (f1-37 none) - (f1-38 none) - (f1-39 none) - (f1-40 none) - (f1-41 none) - (f1-42 none) - (f1-43 none) - (f1-44 none) - (f1-45 none) - (f1-46 none) - (f1-47 none) - ) - (when (begin (set! v1-0 *artist-fix-visible*) (not v1-0)) - (set! s5-0 0) - (while (begin (set! v1-6 *level*) (set! v1-7 (-> v1-6 length)) (<.si s5-0 v1-7)) - (when (begin - (set! v1-2 5232) - (set! v1-3 (*.si v1-2 s5-0)) - (set! v1-4 (+ v1-3 256)) - (set! a0-1 *level*) - (set! v1-5 (+ v1-4 a0-1)) - (set! a0-2 'active) - (set! a1-0 (-> v1-5 status)) - (= a1-0 a0-2) +(defun update-visible ((arg0 math-camera)) + (local-vars (s4-0 level-vis-info)) + (when (not *artist-fix-visible*) + (dotimes (s5-0 (-> *level* length)) + (let ((v1-5 (-> *level* level s5-0))) + (when (= (-> v1-5 status) 'active) + (if (and (nonzero? (-> v1-5 bsp nodes)) (or *update-leaf-when-outside-bsp* (-> v1-5 inside-boxes))) + (bsp-camera-asm (-> v1-5 bsp) (-> arg0 trans)) ) - (when (begin - (and (begin (set! a0-4 (-> v1-5 bsp)) (set! a0-5 (-> a0-4 nodes)) (nonzero? a0-5)) - (or (begin (set! a0-7 *update-leaf-when-outside-bsp*) a0-7) (set! a0-6 (-> v1-5 inside-boxes))) - ) - a0-6 - ) - (set! t9-0 bsp-camera-asm) - (set! a0-9 (-> v1-5 bsp)) - (set! a1-1 (-> a0-0 trans)) - (call! a0-9 a1-1) - (set! a0-10 v0-0) ) ) - (set! s5-0 (+ s5-0 1)) ) - (set! gp-1 0) - (while (begin (set! v1-52 *level*) (set! v1-53 (-> v1-52 length)) (<.si gp-1 v1-53)) - (when (begin - (set! v1-10 5232) - (set! v1-11 (*.si v1-10 gp-1)) - (set! v1-12 (+ v1-11 256)) - (set! a0-11 *level*) - (set! s5-1 (+ v1-12 a0-11)) - (set! v1-13 'active) - (set! a0-12 (-> s5-1 status)) - (= a0-12 v1-13) - ) - (cond - ((begin - (or (begin - (if (begin - (set! v1-15 (-> s5-1 bsp)) - (set! v1-16 (-> v1-15 visible-list-length)) - (set! v1-17 (+ v1-16 15)) - (set! a2-0 (sra v1-17 4)) - (set! v1-18 (-> s5-1 all-visible?)) - v1-18 - ) - (set! v1-19 (-> s5-1 all-visible?)) - (set! v1-19 #t) - ) - (set! (-> s5-1 all-visible?) v1-19) - (set! v1-20 (-> s5-1 force-all-visible?)) - (not v1-20) - ) - (set! v1-21 (-> s5-1 inside-boxes)) - ) - v1-21 - ) - (cond - ((begin - (or (begin (set! v1-22 *artist-all-visible*) v1-22) - (begin (set! v1-24 (-> s5-1 vis-info 0)) (set! v1-23 (not v1-24))) - ) - v1-23 - ) - (when (begin - (set! t9-1 quad-copy!) - (set! a0-13 (-> s5-1 vis-bits)) - (set! v1-25 (-> s5-1 bsp)) - (set! a1-2 (-> v1-25 all-visible-list)) - (call! a0-13 a1-2 a2-0) - (set! v1-26 'loading) - (set! a0-14 (-> s5-1 all-visible?)) - (= a0-14 v1-26) - ) - (set! v1-28 #t) - (set! (-> s5-1 all-visible?) v1-28) - ) - ) - ((begin - (when (begin - (and (begin - (set! v1-29 (-> s5-1 vis-self-index)) - (set! v1-30 (sll v1-29 2)) - (set! v1-31 (+ v1-30 s5-1)) - (set! s4-0 (dynamic-array-field-access v1-31 vis-info PLACEHOLDER)) - (set! v1-32 #f) - s4-0 - ) - (set! a0-15 (-> s4-0 from-bsp)) - ) - a0-15 - ) - (when (begin - (set! v1-33 #t) - (set! a0-17 #x8000) - (set! a0-18 (sll a0-17 16)) - (set! a1-3 (-> s4-0 flags)) - (set! a0-19 (logand a0-18 a1-3)) - (cmove-#f-zero v1-32 a0-19 v1-33) - (set! a0-20 (-> s4-0 length)) - (set! a1-4 (-> s4-0 from-bsp)) - (set! a1-5 (-> a1-4 current-leaf-idx)) - (<.ui a0-20 a1-5) - ) - (set! v1-32 #f) - (set! a0-22 v1-32) - ) + (dotimes (gp-1 (-> *level* length)) + (let ((s5-1 (-> *level* level gp-1))) + (when (= (-> s5-1 status) 'active) + (let ((a2-0 (/ (+ (-> s5-1 bsp visible-list-length) 15) 16))) + (set! (-> s5-1 all-visible?) (if (-> s5-1 all-visible?) + (-> s5-1 all-visible?) + #t + ) ) - v1-32 - ) - (when (begin - (if (begin (set! v1-34 'loading) (set! a0-23 (-> s5-1 all-visible?)) (!= a0-23 v1-34)) - (set! (-> s5-1 all-visible?) #f) - ) - (set! a0-24 s5-1) - (set! v1-37 (-> a0-24 type)) - (set! t9-2 (method-of-type v1-37 level-method-16)) - (set! a1-6 s4-0) - (set! a2-1 (-> s4-0 ramdisk)) - (set! a3-0 (-> s4-0 string-block)) - (set! v0-2 (call!)) - (set! v1-38 v0-2) - v1-38 - ) - (set! v1-40 8) - (while (nonzero? v1-40) - (when (begin - (set! v1-40 (+ v1-40 -1)) - (set! a0-25 (sll v1-40 2)) - (set! a0-26 (+ a0-25 s5-1)) - (set! a0-27 (dynamic-array-field-access a0-26 vis-info PLACEHOLDER)) - a0-27 - ) - (when (!= a0-27 s4-0) - (set! a1-9 -1) - (set! (-> a0-27 current-vis-string) (the-as uint a1-9)) - ) - ) - ) - (set! (-> s5-1 all-visible?) #f) - ) - ) - (else - (and (begin (set! v1-44 (-> s5-1 all-visible?)) (set! a0-28 'loading) (set! a0-29 (= v1-44 a0-28)) a0-29) - (begin (set! v1-46 *level*) (set! v1-45 (-> v1-46 play?))) - ) + (cond + ((or (not (-> s5-1 force-all-visible?)) (-> s5-1 inside-boxes)) (cond - (v1-45 - ) + ((or *artist-all-visible* (not (-> s5-1 vis-info 0))) + (quad-copy! (-> s5-1 vis-bits) (-> s5-1 bsp all-visible-list) a2-0) + (if (= (-> s5-1 all-visible?) 'loading) + (set! (-> s5-1 all-visible?) #t) + ) + ) + ((begin + (set! s4-0 (-> s5-1 vis-info (-> s5-1 vis-self-index))) + (let ((v1-32 #f)) + (when (and s4-0 (-> s4-0 from-bsp)) + (set! v1-32 (logtest? (vis-info-flag vis-valid) (-> s4-0 flags))) + (if (< (-> s4-0 length) (-> s4-0 from-bsp current-leaf-idx)) + (set! v1-32 #f) + ) + ) + v1-32 + ) + ) + (if (!= (-> s5-1 all-visible?) 'loading) + (set! (-> s5-1 all-visible?) #f) + ) + (when (update-vis! s5-1 s4-0 (-> s4-0 ramdisk) (the-as (pointer uint8) (-> s4-0 string-block))) + (countdown (v1-40 8) + (let ((a0-27 (-> s5-1 vis-info v1-40))) + (when a0-27 + (if (!= a0-27 s4-0) + (set! (-> a0-27 current-vis-string) (the-as uint -1)) + ) + ) + ) + ) + (set! (-> s5-1 all-visible?) #f) + ) + ) + ((and (= (-> s5-1 all-visible?) 'loading) (-> *level* play?)) + ) (else - (set! t9-3 quad-copy!) - (set! a0-30 (-> s5-1 vis-bits)) - (set! v1-48 (-> s5-1 bsp)) - (set! a1-10 (-> v1-48 all-visible-list)) - (call! a0-30 a1-10 a2-0) - (set! v1-49 v0-3) + (quad-copy! (-> s5-1 vis-bits) (-> s5-1 bsp all-visible-list) a2-0) ) ) ) + (else + (quad-copy! (-> s5-1 vis-bits) (-> s5-1 bsp all-visible-list) a2-0) + ) + ) + ) + ) + ) + ) + ) + (if (and *artist-fix-visible* (cpad-pressed? 0 r2)) + (set! *fix-visible-level-mask* (logand (+ *fix-visible-level-mask* 1) 63)) + ) + (dotimes (gp-2 (-> *level* length)) + (let ((s5-2 (-> *level* level gp-2))) + (when (= (-> s5-2 status) 'active) + (cond + ((or *artist-fix-visible* *stats-bsp*) + (set! (-> s5-2 render?) (zero? (logand *fix-visible-level-mask* (ash 1 (-> s5-2 index))))) + (format + *stdcon* + "~0kleaf-index ~8S ~C = ~d node ~d ~S ~S~%" + (-> s5-2 name) + (if (not (logtest? *fix-visible-level-mask* (ash 1 (-> s5-2 index)))) + 88 + 32 + ) + (-> s5-2 bsp current-leaf-idx) + (-> s5-2 bsp cam-box-idx) + (if (zero? (-> s5-2 bsp cam-using-back)) + "front" + "back" + ) + (if (nonzero? (-> s5-2 bsp cam-outside-bsp)) + "outside" + "" + ) ) ) (else - (set! t9-4 quad-copy!) - (set! a0-31 (-> s5-1 vis-bits)) - (set! v1-50 (-> s5-1 bsp)) - (set! a1-11 (-> v1-50 all-visible-list)) - (call! a0-31 a1-11 a2-0) - (set! v1-51 v0-4) + (set! (-> s5-2 render?) #t) ) ) - ) - (set! gp-1 (+ gp-1 1)) - ) - ) - (when (begin - (and (begin (set! v1-56 *artist-fix-visible*) v1-56) (begin - (set! v1-58 #t) - (set! a0-32 *cpad-list*) - (set! a0-33 (-> a0-32 cpads 0)) - (set! a0-34 (-> a0-33 button0-rel 0)) - (set! a0-35 (logand a0-34 512)) - (cmove-#f-zero v1-57 a0-35 v1-58) - ) - ) - v1-57 - ) - (set! v1-60 *fix-visible-level-mask*) - (set! v1-61 (+ v1-60 1)) - (set! v1-62 (logand v1-61 63)) - (set! *fix-visible-level-mask* v1-62) - ) - (set! gp-2 0) - (while (begin (set! v1-115 *level*) (set! v1-116 (-> v1-115 length)) (<.si gp-2 v1-116)) - (when (begin - (set! v1-63 5232) - (set! v1-64 (*.si v1-63 gp-2)) - (set! v1-65 (+ v1-64 256)) - (set! a0-36 *level*) - (set! s5-2 (+ v1-65 a0-36)) - (set! v1-66 'active) - (set! a0-37 (-> s5-2 status)) - (= a0-37 v1-66) - ) - (when (begin - (cond - ((begin (or (begin (set! v1-68 *artist-fix-visible*) v1-68) (set! v1-69 *stats-bsp*)) v1-69) - (set! v1-70 #t) - (set! a0-38 *fix-visible-level-mask*) - (set! a1-12 1) - (set! a2-2 (-> s5-2 index)) - (set! a1-13 (ash.si a1-12 a2-2)) - (set! a0-39 (logand a0-38 a1-13)) - (cmove-#f-nonzero v1-71 a0-39 v1-70) - (set! (-> s5-2 render?) v1-71) - (set! t9-5 format) - (set! a0-40 *stdcon*) - (set! a1-14 L105) - (set! a2-4 (-> s5-2 name)) - (set! v1-72 *fix-visible-level-mask*) - (set! a3-1 1) - (set! t0-0 (-> s5-2 index)) - (set! a3-2 (ash.si a3-1 t0-0)) - (if (begin (set! v1-73 (logand v1-72 a3-2)) (zero? v1-73)) - (set! a3-3 88) - (set! a3-3 (the-as int 32)) - ) - (if (begin - (set! v1-74 (-> s5-2 bsp)) - (set! t0-2 (-> v1-74 current-leaf-idx)) - (set! v1-75 (-> s5-2 bsp)) - (set! t1-0 (-> v1-75 cam-box-idx)) - (set! v1-76 (-> s5-2 bsp)) - (set! v1-77 (-> v1-76 cam-using-back)) - (zero? v1-77) + (when (and *artist-fix-visible* (zero? (logand *fix-visible-level-mask* (ash 1 (-> s5-2 index))))) + (let ((s4-1 (-> s5-2 bsp current-leaf-idx)) + (s3-0 (-> s5-2 bsp vis-spheres)) + ) + (-> s5-2 bsp unk-data 17) + (when (nonzero? s3-0) + (dotimes (s2-0 (-> s3-0 length)) + (let* ((v1-93 (the int (-> s3-0 data s2-0 w))) + (a0-43 (abs v1-93)) ) - (set! t2-0 L104) - (set! t2-0 (the-as string L103)) - ) - (if (begin (set! v1-78 (-> s5-2 bsp)) (set! v1-79 (-> v1-78 cam-outside-bsp)) (nonzero? v1-79)) - (set! t3-0 L102) - (set! t3-0 (the-as string L101)) - ) - (call! a0-40 a1-14 a2-4 a3-3 t0-2 t1-0 t2-0 t3-0) - (set! v1-80 v0-5) - ) - (else - (set! v1-81 (the-as none #t)) - (set! (-> s5-2 render?) (the-as symbol v1-81)) - ) - ) - (and (begin (set! v1-82 *artist-fix-visible*) v1-82) (begin - (set! v1-84 #t) - (set! a0-41 *fix-visible-level-mask*) - (set! a1-15 1) - (set! a2-5 (-> s5-2 index)) - (set! a1-16 (ash.si a1-15 a2-5)) - (set! a0-42 (logand a0-41 a1-16)) - (cmove-#f-nonzero v1-83 a0-42 v1-84) - ) - ) - v1-83 - ) - (when (begin - (set! v1-86 (-> s5-2 bsp)) - (set! s4-1 (-> v1-86 current-leaf-idx)) - (set! v1-87 (-> s5-2 bsp)) - (set! s3-0 (-> v1-87 unk-data 9)) - (set! v1-88 (-> s5-2 bsp)) - (set! v1-89 (-> v1-88 unk-data 17)) - (nonzero? s3-0) - ) - (set! s2-0 0) - (while (begin (set! v1-99 (the-as none (l.w s3-0))) (<.si s2-0 v1-99)) - (when (begin - (set! v1-91 (the-as none (sll s2-0 4))) - (set! v1-92 (the-as none (+ s3-0 v1-91))) - (set! f0-0 (the-as none (l.f (+ v1-92 24)))) - (set! f0-1 (the-as none (f2i f0-0))) - (set! v1-93 (the-as none (fpr->gpr f0-1))) - (set! a0-43 (the-as none v1-93)) - (set! a0-43 (the-as none (abs a0-43))) - (= a0-43 s4-1) + (when (= a0-43 s4-1) + (if (>= v1-93 0) + (add-debug-sphere #t (bucket-id debug2) (-> s3-0 data s2-0) (meters 1) (new 'static 'rgba :b #xff :a #x80)) + (add-debug-sphere #t (bucket-id debug2) (-> s3-0 data s2-0) (meters 1) (new 'static 'rgba :r #xff :a #x80)) + ) ) - (cond - ((>=0.si v1-93) - (set! t9-6 (the-as none add-debug-sphere)) - (set! a0-45 (the-as none #t)) - (set! a1-17 (the-as none 324)) - (set! v1-94 (the-as none (sll s2-0 4))) - (set! v1-95 (the-as none (+ v1-94 12))) - (set! a2-7 (the-as none (+ v1-95 s3-0))) - (set! a3-4 (the-as none #x45800000)) - (set! v1-96 (the-as none #x80ff)) - (set! t0-3 (the-as none (sll v1-96 16))) - (call!) - (set! a0-46 (the-as none v0-6)) - ) - (else - (set! t9-7 (the-as none add-debug-sphere)) - (set! a0-47 (the-as none #t)) - (set! a1-18 (the-as none 324)) - (set! v1-97 (the-as none (sll s2-0 4))) - (set! v1-98 (the-as none (+ v1-97 12))) - (set! a2-8 (the-as none (+ v1-98 s3-0))) - (set! a3-5 (the-as none #x45800000)) - (set! t0-4 (the-as none (the-as uint #x800000ff))) - (call!) - (set! a0-48 (the-as none v0-7)) ) ) ) - (set! s2-0 (the-as int (+ s2-0 1))) ) - ) - (when (begin - (set! v1-102 (the-as none (-> s5-2 bsp))) - (set! v1-103 (the-as none (l.wu (+ v1-102 116)))) - (nonzero? v1-103) + (when (nonzero? (-> s5-2 bsp nodes)) + (let ((v1-107 (-> s5-2 bsp nodes (-> s5-2 bsp cam-box-idx))) + (a2-9 (new 'stack-no-clear 'vector)) + ) + (set! (-> a2-9 quad) (-> s5-2 bsp bsp-offset quad)) + (let ((a3-6 (new 'stack-no-clear 'vector))) + (set! (-> a3-6 quad) (-> s5-2 bsp bsp-offset quad)) + (cond + ((zero? (-> s5-2 bsp cam-using-back)) + (+! (-> a2-9 x) (the float (* (the-as int (-> v1-107 front-box-min x)) (the int (-> s5-2 bsp bsp-scale x))))) + (+! (-> a2-9 y) (the float (* (the-as int (-> v1-107 front-box-min y)) (the int (-> s5-2 bsp bsp-scale y))))) + (+! (-> a2-9 z) (the float (* (the-as int (-> v1-107 front-box-min z)) (the int (-> s5-2 bsp bsp-scale z))))) + (+! (-> a3-6 x) (the float (* (the-as int (-> v1-107 front-box-max x)) (the int (-> s5-2 bsp bsp-scale x))))) + (+! (-> a3-6 y) (the float (* (the-as int (-> v1-107 front-box-max y)) (the int (-> s5-2 bsp bsp-scale y))))) + (+! (-> a3-6 z) (the float (* (the-as int (-> v1-107 front-box-max z)) (the int (-> s5-2 bsp bsp-scale z))))) + ) + (else + (+! (-> a2-9 x) (the float (* (the-as int (-> v1-107 back-box-min x)) (the int (-> s5-2 bsp bsp-scale x))))) + (+! (-> a2-9 y) (the float (* (the-as int (-> v1-107 back-box-min y)) (the int (-> s5-2 bsp bsp-scale y))))) + (+! (-> a2-9 z) (the float (* (the-as int (-> v1-107 back-box-min z)) (the int (-> s5-2 bsp bsp-scale z))))) + (+! (-> a3-6 x) (the float (* (the-as int (-> v1-107 back-box-max x)) (the int (-> s5-2 bsp bsp-scale x))))) + (+! (-> a3-6 y) (the float (* (the-as int (-> v1-107 back-box-max y)) (the int (-> s5-2 bsp bsp-scale y))))) + (+! (-> a3-6 z) (the float (* (the-as int (-> v1-107 back-box-max z)) (the int (-> s5-2 bsp bsp-scale z))))) + ) + ) + (add-debug-box #t (bucket-id debug2) a2-9 a3-6 (new 'static 'rgba :g #xff :b #xff :a #x80)) ) - (cond - ((begin - (set! v1-105 (the-as none (l.wu (+ s5-2 92)))) - (set! v1-106 (the-as none (l.wu (+ v1-105 116)))) - (set! a0-49 (the-as none 20)) - (set! a1-19 (the-as none (l.wu (+ s5-2 92)))) - (set! a1-20 (the-as none (l.hu (+ a1-19 150)))) - (set! a0-50 (the-as none (*.ui a0-49 a1-20))) - (set! v1-107 (the-as none (+ v1-106 a0-50))) - (set! a2-9 (the-as none (+ sp-0 16))) - (set! a0-51 (the-as none (l.wu (+ s5-2 92)))) - (set! a0-52 (the-as none (+ a0-51 300))) - (set! a0-53 (the-as none (l.q a0-52))) - (s.q! a2-9 a0-53) - (set! a3-6 (the-as none (+ sp-0 32))) - (set! a0-54 (the-as none (l.wu (+ s5-2 92)))) - (set! a0-55 (the-as none (+ a0-54 300))) - (set! a0-56 (the-as none (l.q a0-55))) - (s.q! a3-6 a0-56) - (set! a0-57 (the-as none (l.wu (+ s5-2 92)))) - (set! a0-58 (the-as none (l.bu (+ a0-57 149)))) - (zero? a0-58) - ) - (set! f0-2 (the-as none (l.f a2-9))) - (set! a0-59 (the-as none (l.b (+ v1-107 4)))) - (set! a1-21 (the-as none (l.wu (+ s5-2 92)))) - (set! f1-0 (the-as none (l.f (+ a1-21 284)))) - (set! f1-1 (the-as none (f2i f1-0))) - (set! a1-22 (the-as none (fpr->gpr f1-1))) - (set! a0-60 (the-as none (*.si a0-59 a1-22))) - (set! f1-2 (the-as none (gpr->fpr a0-60))) - (set! f1-3 (the-as none (i2f f1-2))) - (set! f0-3 (the-as none (+.s f0-2 f1-3))) - (s.f! a2-9 f0-3) - (set! f0-4 (the-as none (l.f (+ a2-9 4)))) - (set! a0-61 (the-as none (l.b (+ v1-107 5)))) - (set! a1-23 (the-as none (l.wu (+ s5-2 92)))) - (set! f1-4 (the-as none (l.f (+ a1-23 288)))) - (set! f1-5 (the-as none (f2i f1-4))) - (set! a1-24 (the-as none (fpr->gpr f1-5))) - (set! a0-62 (the-as none (*.si a0-61 a1-24))) - (set! f1-6 (the-as none (gpr->fpr a0-62))) - (set! f1-7 (the-as none (i2f f1-6))) - (set! f0-5 (the-as none (+.s f0-4 f1-7))) - (s.f! (+ a2-9 4) f0-5) - (set! f0-6 (the-as none (l.f (+ a2-9 8)))) - (set! a0-63 (the-as none (l.b (+ v1-107 6)))) - (set! a1-25 (the-as none (l.wu (+ s5-2 92)))) - (set! f1-8 (the-as none (l.f (+ a1-25 292)))) - (set! f1-9 (the-as none (f2i f1-8))) - (set! a1-26 (the-as none (fpr->gpr f1-9))) - (set! a0-64 (the-as none (*.si a0-63 a1-26))) - (set! f1-10 (the-as none (gpr->fpr a0-64))) - (set! f1-11 (the-as none (i2f f1-10))) - (set! f0-7 (the-as none (+.s f0-6 f1-11))) - (s.f! (+ a2-9 8) f0-7) - (set! f0-8 (the-as none (l.f a3-6))) - (set! a0-65 (the-as none (l.b (+ v1-107 8)))) - (set! a1-27 (the-as none (l.wu (+ s5-2 92)))) - (set! f1-12 (the-as none (l.f (+ a1-27 284)))) - (set! f1-13 (the-as none (f2i f1-12))) - (set! a1-28 (the-as none (fpr->gpr f1-13))) - (set! a0-66 (the-as none (*.si a0-65 a1-28))) - (set! f1-14 (the-as none (gpr->fpr a0-66))) - (set! f1-15 (the-as none (i2f f1-14))) - (set! f0-9 (the-as none (+.s f0-8 f1-15))) - (s.f! a3-6 f0-9) - (set! f0-10 (the-as none (l.f (+ a3-6 4)))) - (set! a0-67 (the-as none (l.b (+ v1-107 9)))) - (set! a1-29 (the-as none (l.wu (+ s5-2 92)))) - (set! f1-16 (the-as none (l.f (+ a1-29 288)))) - (set! f1-17 (the-as none (f2i f1-16))) - (set! a1-30 (the-as none (fpr->gpr f1-17))) - (set! a0-68 (the-as none (*.si a0-67 a1-30))) - (set! f1-18 (the-as none (gpr->fpr a0-68))) - (set! f1-19 (the-as none (i2f f1-18))) - (set! f0-11 (the-as none (+.s f0-10 f1-19))) - (s.f! (+ a3-6 4) f0-11) - (set! f0-12 (the-as none (l.f (+ a3-6 8)))) - (set! v1-108 (the-as none (l.b (+ v1-107 10)))) - (set! a0-69 (the-as none (l.wu (+ s5-2 92)))) - (set! f1-20 (the-as none (l.f (+ a0-69 292)))) - (set! f1-21 (the-as none (f2i f1-20))) - (set! a0-70 (the-as none (fpr->gpr f1-21))) - (set! v1-109 (the-as none (*.si v1-108 a0-70))) - (set! f1-22 (the-as none (gpr->fpr v1-109))) - (set! f1-23 (the-as none (i2f f1-22))) - (set! f0-13 (the-as none (+.s f0-12 f1-23))) - (s.f! (+ a3-6 8) f0-13) - (set! v1-110 (the-as none (fpr->gpr f0-13))) - ) - (else - (set! f0-14 (the-as none (l.f a2-9))) - (set! a0-71 (the-as none (l.b (+ v1-107 12)))) - (set! a1-31 (the-as none (l.wu (+ s5-2 92)))) - (set! f1-24 (the-as none (l.f (+ a1-31 284)))) - (set! f1-25 (the-as none (f2i f1-24))) - (set! a1-32 (the-as none (fpr->gpr f1-25))) - (set! a0-72 (the-as none (*.si a0-71 a1-32))) - (set! f1-26 (the-as none (gpr->fpr a0-72))) - (set! f1-27 (the-as none (i2f f1-26))) - (set! f0-15 (the-as none (+.s f0-14 f1-27))) - (s.f! a2-9 f0-15) - (set! f0-16 (the-as none (l.f (+ a2-9 4)))) - (set! a0-73 (the-as none (l.b (+ v1-107 13)))) - (set! a1-33 (the-as none (l.wu (+ s5-2 92)))) - (set! f1-28 (the-as none (l.f (+ a1-33 288)))) - (set! f1-29 (the-as none (f2i f1-28))) - (set! a1-34 (the-as none (fpr->gpr f1-29))) - (set! a0-74 (the-as none (*.si a0-73 a1-34))) - (set! f1-30 (the-as none (gpr->fpr a0-74))) - (set! f1-31 (the-as none (i2f f1-30))) - (set! f0-17 (the-as none (+.s f0-16 f1-31))) - (s.f! (+ a2-9 4) f0-17) - (set! f0-18 (the-as none (l.f (+ a2-9 8)))) - (set! a0-75 (the-as none (l.b (+ v1-107 14)))) - (set! a1-35 (the-as none (l.wu (+ s5-2 92)))) - (set! f1-32 (the-as none (l.f (+ a1-35 292)))) - (set! f1-33 (the-as none (f2i f1-32))) - (set! a1-36 (the-as none (fpr->gpr f1-33))) - (set! a0-76 (the-as none (*.si a0-75 a1-36))) - (set! f1-34 (the-as none (gpr->fpr a0-76))) - (set! f1-35 (the-as none (i2f f1-34))) - (set! f0-19 (the-as none (+.s f0-18 f1-35))) - (s.f! (+ a2-9 8) f0-19) - (set! f0-20 (the-as none (l.f a3-6))) - (set! a0-77 (the-as none (l.b (+ v1-107 16)))) - (set! a1-37 (the-as none (l.wu (+ s5-2 92)))) - (set! f1-36 (the-as none (l.f (+ a1-37 284)))) - (set! f1-37 (the-as none (f2i f1-36))) - (set! a1-38 (the-as none (fpr->gpr f1-37))) - (set! a0-78 (the-as none (*.si a0-77 a1-38))) - (set! f1-38 (the-as none (gpr->fpr a0-78))) - (set! f1-39 (the-as none (i2f f1-38))) - (set! f0-21 (the-as none (+.s f0-20 f1-39))) - (s.f! a3-6 f0-21) - (set! f0-22 (the-as none (l.f (+ a3-6 4)))) - (set! a0-79 (the-as none (l.b (+ v1-107 17)))) - (set! a1-39 (the-as none (l.wu (+ s5-2 92)))) - (set! f1-40 (the-as none (l.f (+ a1-39 288)))) - (set! f1-41 (the-as none (f2i f1-40))) - (set! a1-40 (the-as none (fpr->gpr f1-41))) - (set! a0-80 (the-as none (*.si a0-79 a1-40))) - (set! f1-42 (the-as none (gpr->fpr a0-80))) - (set! f1-43 (the-as none (i2f f1-42))) - (set! f0-23 (the-as none (+.s f0-22 f1-43))) - (s.f! (+ a3-6 4) f0-23) - (set! f0-24 (the-as none (l.f (+ a3-6 8)))) - (set! v1-111 (the-as none (l.b (+ v1-107 18)))) - (set! a0-81 (the-as none (l.wu (+ s5-2 92)))) - (set! f1-44 (the-as none (l.f (+ a0-81 292)))) - (set! f1-45 (the-as none (f2i f1-44))) - (set! a0-82 (the-as none (fpr->gpr f1-45))) - (set! v1-112 (the-as none (*.si v1-111 a0-82))) - (set! f1-46 (the-as none (gpr->fpr v1-112))) - (set! f1-47 (the-as none (i2f f1-46))) - (set! f0-25 (the-as none (+.s f0-24 f1-47))) - (s.f! (+ a3-6 8) f0-25) - (set! v1-113 (the-as none (fpr->gpr f0-25))) ) ) - (set! t9-8 (the-as none add-debug-box)) - (set! a0-83 (the-as none #t)) - (set! a1-41 (the-as none 324)) - (set! t0-5 (the-as none (the-as uint #x80ffff00))) - (call!) - (set! v1-114 (the-as none v0-8)) ) ) ) - (set! gp-2 (the-as int (+ gp-2 1))) ) - (set! v0-9 #f) - (ret-value v0-9) + #f ) ;; definition for symbol *save-camera-inv-rot*, type matrix 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 4918118ecc..ceb4d0d67f 100644 --- a/test/decompiler/reference/jak2/engine/level/bsp-h_REF.gc +++ b/test/decompiler/reference/jak2/engine/level/bsp-h_REF.gc @@ -38,6 +38,7 @@ ((info file-info :offset 4) (all-visible-list (pointer uint16) :offset-assert 32) (visible-list-length int16 :offset-assert 36) + (extra-vis-list-length int16 :offset-assert 38) (drawable-trees drawable-tree-array :offset-assert 40) (pat pointer :offset-assert 44) (pat-length int32 :offset-assert 48) @@ -70,6 +71,7 @@ (region-array region-array :offset-assert 192) (collide-hash collide-hash :offset-assert 196) (wind-array-length int32 :offset 204) + (vis-spheres vector-array :offset 216) (region-tree drawable-tree-region-prim :offset 252) (tfrag-masks texture-masks-array :offset-assert 256) (tfrag-closest (pointer float) :offset-assert 260) 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 89a2c991b0..fbb09b6861 100644 --- a/test/decompiler/reference/jak2/engine/level/level-h_REF.gc +++ b/test/decompiler/reference/jak2/engine/level/level-h_REF.gc @@ -479,7 +479,7 @@ (bsp-name (_type_) symbol 13) (compute-memory-usage! (_type_ symbol) memory-usage-block 14) (inside-boxes-check (_type_ vector) symbol 15) - (level-method-16 () none 16) + (update-vis! (_type_ level-vis-info uint (pointer uint8)) symbol 16) (load-continue (_type_) _type_ 17) (load-begin (_type_) _type_ 18) (login-begin (_type_) _type_ 19) diff --git a/test/decompiler/reference/jak2/engine/load/decomp_REF.gc b/test/decompiler/reference/jak2/engine/load/decomp_REF.gc new file mode 100644 index 0000000000..81e7c08283 --- /dev/null +++ b/test/decompiler/reference/jak2/engine/load/decomp_REF.gc @@ -0,0 +1,539 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition for function unpack-comp-rle +;; WARN: Return type mismatch (pointer int8) vs none. +(defun unpack-comp-rle ((arg0 (pointer int8)) (arg1 (pointer int8))) + (local-vars (v1-2 int) (v1-3 uint)) + (nop!) + (loop + (loop + (set! v1-2 (-> arg1 0)) + (set! arg1 (&-> arg1 1)) + (b! (<= v1-2 0) cfg-5 :delay (nop!)) + (let ((a2-0 (-> arg1 0))) + (set! arg1 (&-> arg1 1)) + (label cfg-3) + (nop!) + (nop!) + (nop!) + (nop!) + (set! (-> arg0 0) a2-0) + ) + (set! arg0 (&-> arg0 1)) + (b! (> v1-2 0) cfg-3 :delay (set! v1-2 (+ v1-2 -1))) + ) + (label cfg-5) + (b! (zero? v1-2) cfg-8 :delay (set! v1-3 (the-as uint (- v1-2)))) + (label cfg-6) + (let ((a2-1 (-> arg1 0))) + (set! arg1 (&-> arg1 1)) + (nop!) + (nop!) + (set! (-> arg0 0) a2-1) + ) + (+! v1-3 -1) + (b! (> (the-as int v1-3) 0) cfg-6 :delay (set! arg0 (&-> arg0 1))) + ) + (label cfg-8) + (none) + ) + +;; definition of type huf-dictionary-node +(deftype huf-dictionary-node (structure) + ((zero uint16 :offset-assert 0) + (one uint16 :offset-assert 2) + ) + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) + +;; definition for method 3 of type huf-dictionary-node +(defmethod inspect huf-dictionary-node ((obj huf-dictionary-node)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'huf-dictionary-node) + (format #t "~1Tzero: ~D~%" (-> obj zero)) + (format #t "~1Tone: ~D~%" (-> obj one)) + (label cfg-4) + obj + ) + +;; definition for function unpack-comp-huf +;; WARN: Return type mismatch int vs none. +(defun unpack-comp-huf ((arg0 (pointer uint8)) (arg1 (pointer uint8)) (arg2 uint) (arg3 huf-dictionary-node)) + (local-vars (t1-1 uint) (t3-2 (pointer uint16))) + (nop!) + (let ((t1-0 (-> arg3 zero)) + (a2-1 (+ arg2 -1028)) + (t2-0 (-> arg3 one)) + ) + (nop!) + (label cfg-1) + (let ((v1-4 128)) + (nop!) + (let ((t0-0 (-> arg1 0))) + (set! arg1 (&-> arg1 1)) + (label cfg-2) + (let ((t3-0 (logand t0-0 v1-4))) + (shift-arith-right-32 v1-4 v1-4 1) + (b! (zero? t3-0) cfg-4 :delay (set! t1-1 t1-0)) + ) + ) + (nop!) + (set! t1-1 t2-0) + (label cfg-4) + (let ((t2-1 (+ t1-1 -256))) + (let ((t3-1 (* t1-1 4))) + (b! (< (the-as int t2-1) 0) cfg-8 :delay (set! t3-2 (the-as (pointer uint16) (+ t3-1 a2-1)))) + ) + (b! (zero? t2-1) cfg-10 :delay (set! t1-0 (-> t3-2 0))) + ) + (b! (nonzero? v1-4) cfg-2 :delay (set! t2-0 (-> t3-2 1))) + (b! #t cfg-1 :delay (nop!)) + (label cfg-8) + (set! (-> arg0 0) t1-1) + (set! arg0 (&-> arg0 1)) + (nop!) + (set! t1-0 (-> arg3 zero)) + (b! (nonzero? v1-4) cfg-2 :delay (set! t2-0 (-> arg3 one))) + ) + ) + (b! #t cfg-1 :delay (nop!)) + (label cfg-10) + (nop!) + (nop!) + 0 + (none) + ) + +;; definition for function unpack-comp-lzo +;; WARN: Return type mismatch int vs none. +(defun unpack-comp-lzo ((arg0 (pointer uint8)) (arg1 (pointer uint8))) + 0 + (let ((v1-1 arg0)) + (b! (>= (the-as uint 17) (-> arg1 0)) cfg-5 :delay #f) + (let ((a2-4 (the-as int (+ (-> arg1 0) -17)))) + (set! arg1 (&-> arg1 1)) + (b! (< a2-4 4) cfg-41) + (until (<= a2-4 0) + (set! (-> arg0 0) (-> arg1 0)) + (set! arg0 (&-> arg0 1)) + (set! arg1 (&-> arg1 1)) + (+! a2-4 -1) + ) + (b! #t cfg-15 :delay (nop!)) + (label cfg-5) + (b! #t cfg-45 :delay (nop!)) + (label cfg-6) + (let ((a2-6 (-> arg1 0))) + (set! arg1 (&-> arg1 1)) + (b! (>= (the-as int a2-6) 16) cfg-18) + (b! (nonzero? a2-6) cfg-12 :delay (empty-form)) + (while (zero? (-> arg1 0)) + (+! a2-6 255) + (set! arg1 (&-> arg1 1)) + ) + (set! a2-6 (+ (-> arg1 0) 15 a2-6)) + (set! arg1 (&-> arg1 1)) + (label cfg-12) + (set! (-> arg0 0) (-> arg1 0)) + (set! (-> arg0 1) (-> arg1 1)) + (set! (-> arg0 2) (-> arg1 2)) + (set! arg0 (&-> arg0 3)) + (set! arg1 (&-> arg1 3)) + (until (<= (the-as int a2-6) 0) + (set! (-> arg0 0) (-> arg1 0)) + (set! arg0 (&-> arg0 1)) + (set! arg1 (&-> arg1 1)) + (+! a2-6 -1) + ) + (label cfg-15) + (set! a2-6 (-> arg1 0)) + (set! arg1 (&-> arg1 1)) + (b! (>= (the-as int a2-6) 16) cfg-18) + (let ((a2-10 (&- (&- (&-> arg0 -2049) (the-as uint (/ (the-as int a2-6) 4))) (the-as uint (* (-> arg1 0) 4))))) + (set! arg1 (&-> arg1 1)) + (set! (-> arg0 0) (-> a2-10 0)) + (set! (-> arg0 1) (-> a2-10 1)) + (set! (-> arg0 2) (-> a2-10 2)) + (set! arg0 (&-> arg0 3)) + (&-> a2-10 2) + ) + (b! #t cfg-39 :delay (nop!)) + (b! #t cfg-43 :delay (nop!)) + (label cfg-18) + (b! (< (the-as int a2-6) 64) cfg-20) + (let ((a3-23 + (&- (&- (&-> arg0 -1) (the-as uint (logand (/ (the-as int a2-6) 4) 7))) (the-as uint (* (-> arg1 0) 8))) + ) + ) + (set! arg1 (&-> arg1 1)) + (let ((a2-13 (+ (/ (the-as int a2-6) 32) -1))) + (b! #t cfg-36 :delay (nop!)) + (label cfg-20) + (b! (< (the-as int a2-6) 32) cfg-27) + (set! a2-13 (logand a2-6 31)) + (b! (nonzero? a2-13) cfg-26 :delay (empty-form)) + (b! #t cfg-24 :delay (nop!)) + (label cfg-23) + (+! a2-13 255) + (set! arg1 (&-> arg1 1)) + (label cfg-24) + (b! (zero? (-> arg1 0)) cfg-23 :delay (nop!)) + (set! a2-13 (+ (-> arg1 0) 31 a2-13)) + (set! arg1 (&-> arg1 1)) + (label cfg-26) + (set! a3-23 (&- (&-> arg0 -1) (the-as uint (+ (shr (-> arg1 0) 2) (* (-> arg1 1) 64))))) + (set! arg1 (&-> arg1 2)) + (b! #t cfg-36 :delay (nop!)) + (label cfg-27) + (b! (< (the-as int a2-6) 16) cfg-35) + (let ((a3-32 (&- arg0 (the-as uint (shl (logand a2-6 8) 11))))) + (set! a2-13 (logand a2-6 7)) + (b! (nonzero? a2-13) cfg-33 :delay (empty-form)) + (b! #t cfg-31 :delay (nop!)) + (label cfg-30) + (+! a2-13 255) + (set! arg1 (&-> arg1 1)) + (label cfg-31) + (b! (zero? (-> arg1 0)) cfg-30 :delay (nop!)) + (set! a2-13 (+ (-> arg1 0) 7 a2-13)) + (set! arg1 (&-> arg1 1)) + (label cfg-33) + (let ((a3-33 (&- a3-32 (the-as uint (+ (shr (-> arg1 0) 2) (* (-> arg1 1) 64)))))) + (set! arg1 (&-> arg1 2)) + (b! (= a3-33 arg0) cfg-47 :delay (nop!)) + (set! a3-23 (&-> a3-33 -16384)) + ) + ) + (b! #t cfg-36 :delay (nop!)) + (label cfg-35) + (let ((a2-16 (&- (&- (&-> arg0 -1) (the-as uint (/ (the-as int a2-6) 4))) (the-as uint (* (-> arg1 0) 4))))) + (set! arg1 (&-> arg1 1)) + (set! (-> arg0 0) (-> a2-16 0)) + (set! (-> arg0 1) (-> a2-16 1)) + (set! arg0 (&-> arg0 2)) + (&-> a2-16 1) + ) + (b! #t cfg-39 :delay (nop!)) + (label cfg-36) + (set! (-> arg0 0) (-> a3-23 0)) + (set! (-> arg0 1) (-> a3-23 1)) + (set! arg0 (&-> arg0 2)) + (let ((a3-39 (&-> a3-23 2))) + (until (<= (the-as int a2-13) 0) + (set! (-> arg0 0) (-> a3-39 0)) + (set! arg0 (&-> arg0 1)) + (set! a3-39 (&-> a3-39 1)) + (+! a2-13 -1) + ) + ) + ) + ) + (label cfg-39) + (set! a2-4 (the-as int (logand (-> arg1 -2) 3))) + (b! (zero? (the-as uint a2-4)) cfg-45 :delay (nop!)) + (until (<= a2-4 0) + (label cfg-41) + (set! (-> arg0 0) (-> arg1 0)) + (set! arg0 (&-> arg0 1)) + (set! arg1 (&-> arg1 1)) + (set! a2-4 (the-as int (+ (the-as uint a2-4) -1))) + ) + (set! a2-6 (-> arg1 0)) + ) + ) + (set! arg1 (&-> arg1 1)) + (label cfg-43) + (b! #t cfg-18 :delay (nop!)) + (label cfg-45) + (b! #t cfg-6 :delay (nop!)) + (label cfg-47) + (&- arg0 (the-as uint v1-1)) + ) + (none) + ) + +;; definition for method 16 of type level +;; INFO: Used lq/sq +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 138] +(defmethod update-vis! level ((obj level) (vis-info level-vis-info) (unused uint) (in-bsp-vis-string (pointer uint8))) + (local-vars (t0-3 uint128) (extra-vis-length int) (extra-vis-dest (pointer int8))) + (let* ((cam-leaf-idx (-> vis-info from-bsp current-leaf-idx)) + (curr-vis-string-offset (-> vis-info current-vis-string)) + (desired-vis-string-offset (-> vis-info vis-string cam-leaf-idx)) + ) + 0 + (+ #x70000000 0) + (+ 2048 #x70000000) + (b! (!= curr-vis-string-offset desired-vis-string-offset) cfg-8 :delay (empty-form)) + (b! (not (logtest? (vis-info-flag loading) (-> vis-info flags))) cfg-6 :delay (empty-form)) + (if (check-busy *ramdisk-rpc*) + (return #f) + ) + (logclear! (-> vis-info flags) (vis-info-flag loading)) + (let ((vis-buf (the-as (pointer integer) (-> obj vis-buffer)))) + (b! #t cfg-16 :delay (nop!)) + (label cfg-6) + (return #t) + (label cfg-8) + (when (logtest? (vis-info-flag loading) (-> vis-info flags)) + (if (check-busy *ramdisk-rpc*) + (return #f) + ) + (logclear! (-> vis-info flags) (vis-info-flag loading)) + ) + (set! (-> vis-info current-vis-string) desired-vis-string-offset) + (b! (logtest? (vis-info-flag in-iop) (-> vis-info flags)) cfg-15 :delay (empty-form)) + (set! vis-buf (&+ in-bsp-vis-string desired-vis-string-offset)) + (b! #t cfg-16 :delay (nop!)) + (label cfg-15) + (format 0 "ERROR: ramdisk vis for level ~A, this is not supported~%" (-> obj name)) + (let ((v0-1 #f)) + (b! #t cfg-49 :delay (nop!)) + (label cfg-16) + (let ((lower-flag-bits (the-as int (logand (vis-info-flag + dummy0 + dummy1 + dummy2 + dummy3 + dummy4 + dummy5 + dummy6 + dummy7 + dummy8 + dummy9 + dummy10 + dummy11 + dummy12 + dummy13 + dummy14 + dummy15 + dummy16 + dummy17 + dummy18 + dummy19 + dummy20 + dummy21 + dummy22 + dummy23 + dummy24 + dummy25 + dummy26 + dummy27 + dummy28 + ) + (-> vis-info flags) + ) + ) + ) + (spad-start (&-> (the-as (pointer int8) #x70000000) 0)) + (spad-end (the-as (pointer int8) (+ 2048 #x70000000))) + (list-len (-> obj bsp visible-list-length)) + ) + (when (zero? (the-as vis-info-flag lower-flag-bits)) + (let ((qwc (/ (+ list-len 15) 16))) + (dotimes (a0-19 qwc) + (set! (-> (the-as (pointer int128) (&+ spad-start (* a0-19 16)))) 0) + ) + ) + (mem-copy! spad-start (the-as (pointer uint8) vis-buf) list-len) + ) + (while (nonzero? lower-flag-bits) + (let ((comp-mode (logand lower-flag-bits 7))) + (cond + ((= comp-mode 1) + (let ((qwc2 (/ (+ list-len 15) 16))) + (dotimes (a0-23 qwc2) + (set! (-> (the-as (pointer int128) (&+ spad-start (* a0-23 16)))) 0) + ) + ) + (set! extra-vis-length (-> obj bsp extra-vis-list-length)) + (set! extra-vis-dest (&+ spad-start (- list-len extra-vis-length))) + (let ((extra-vis-in (unpack-vis (-> obj bsp drawable-trees) spad-start (the-as (pointer int8) vis-buf)))) + (dotimes (extra-vis-idx extra-vis-length) + (let ((vis-byte (-> extra-vis-in 0))) + (set! extra-vis-in (&-> extra-vis-in 1)) + (set! (-> extra-vis-dest 0) vis-byte) + ) + (set! extra-vis-dest (&-> extra-vis-dest 1)) + ) + ) + #f + ) + ((= comp-mode 2) + (unpack-comp-rle spad-start (the-as (pointer int8) vis-buf)) + ) + ((= comp-mode 3) + (unpack-comp-huf + (the-as (pointer uint8) spad-start) + (the-as (pointer uint8) vis-buf) + (-> vis-info dictionary) + (the-as huf-dictionary-node (+ (-> vis-info dictionary) (-> vis-info dictionary-length) -4)) + ) + ) + ((= comp-mode 4) + (unpack-comp-lzo (the-as (pointer uint8) spad-start) (the-as (pointer uint8) vis-buf)) + ) + ) + ) + (set! vis-buf spad-start) + (set! spad-start spad-end) + (set! spad-end (the-as (pointer int8) vis-buf)) + (shift-arith-right-32 lower-flag-bits lower-flag-bits 3) + ) + (let ((vis-ptr (the-as (pointer uint8) vis-buf)) + (all-vis-ptr (the-as (pointer uinteger) (-> obj bsp all-visible-list))) + (vis-error #f) + ) + (dotimes (s0-1 list-len) + (when (!= (logand (-> vis-ptr 0) (-> (the-as (pointer uint8) all-vis-ptr) 0)) (-> vis-ptr 0)) + (format + #t + "ERROR: illegal vis bits set [byte ~X] ~X -> ~X~%" + s0-1 + (-> vis-ptr 0) + (-> (the-as (pointer uint8) all-vis-ptr) 0) + ) + (set! vis-error #t) + ) + (set! vis-ptr (&-> vis-ptr 1)) + (set! all-vis-ptr (&+ (the-as (pointer uint16) all-vis-ptr) 1)) + ) + (when vis-error + (format + #t + "src = #x~x dest = #x~x ~s ~s~%" + vis-buf + (-> vis-info vis-bits) + (-> vis-info level) + (-> vis-info from-level) + ) + (format #t "leaf-index = ~d~%" (-> vis-info from-bsp current-leaf-idx)) + 0 + ) + ) + (let ((unpacked-vis-ptr vis-buf) + (final-vis-ptr (the-as object (-> vis-info vis-bits))) + (all-vis (the-as (pointer uinteger) (-> obj bsp all-visible-list))) + (vis-qwc (/ (+ list-len 15) 16)) + ) + (dotimes (a3-6 vis-qwc) + (let ((t0-2 (-> (the-as (pointer uint128) unpacked-vis-ptr) 0)) + (t1-1 (-> (the-as (pointer uint128) all-vis) 0)) + ) + (.pand t0-3 t0-2 t1-1) + ) + (set! (-> (the-as (pointer uint128) final-vis-ptr) 0) t0-3) + (set! final-vis-ptr (+ (the-as uint final-vis-ptr) 16)) + (set! unpacked-vis-ptr (&-> (the-as (pointer uint8) unpacked-vis-ptr) 16)) + (set! all-vis (&-> (the-as (pointer uint16) all-vis) 8)) + ) + ) + ) + (set! v0-1 #t) + (label cfg-49) + v0-1 + ) + ) + ) + ) + +;; definition for function pack-comp-rle +;; WARN: Return type mismatch int vs none. +(defun pack-comp-rle ((arg0 (pointer uint8)) (arg1 (pointer uint8)) (arg2 int) (arg3 int)) + (let ((s4-0 0)) + 0 + (while (and (> arg2 0) (< (+ s4-0 131) arg3)) + (cond + ((= (-> arg1 0) (-> arg1 1)) + (let ((v1-2 (-> arg1 0))) + (set! arg1 (&-> arg1 2)) + (let ((a0-2 2)) + (+! arg2 -2) + (while (> arg2 0) + (cond + ((= v1-2 (-> arg1 0)) + (+! a0-2 1) + (set! arg1 (&-> arg1 1)) + (+! arg2 -1) + (if (>= a0-2 128) + (goto cfg-12) + ) + ) + (else + (goto cfg-12) + ) + ) + ) + (label cfg-12) + (set! (-> arg0 0) (the-as uint (+ a0-2 -1))) + ) + (set! (-> arg0 1) v1-2) + ) + (set! arg0 (&-> arg0 2)) + (+! s4-0 2) + ) + (else + (let ((a0-4 arg1) + (v1-4 1) + ) + (set! arg1 (&-> arg1 1)) + (+! arg2 -1) + (while (< 1 arg2) + (when (and (= (-> arg1 0) (-> arg1 1)) (< 2 arg2)) + (if (= (-> arg1 0) (-> arg1 2)) + (goto cfg-26) + ) + ) + (+! v1-4 1) + (set! arg1 (&-> arg1 1)) + (+! arg2 -1) + (if (>= v1-4 127) + (goto cfg-26) + ) + ) + (label cfg-26) + (when (= arg2 1) + (+! v1-4 1) + (set! arg1 (&-> arg1 1)) + (+! arg2 -1) + ) + (set! (-> arg0 0) (the-as uint (- v1-4))) + (let ((a1-21 (&-> arg0 1)) + (a2-4 (+ s4-0 1)) + ) + (dotimes (t0-0 v1-4) + (set! (-> a1-21 t0-0) (-> a0-4 t0-0)) + ) + (set! arg0 (&+ a1-21 v1-4)) + (set! s4-0 (+ a2-4 v1-4)) + ) + ) + ) + ) + ) + (if (< arg3 (+ s4-0 131)) + (format 0 "(GOMI) Warning: May have run out of bigmap bit mask compression memory~%") + ) + (when (= arg2 1) + (set! (-> arg0 0) (the-as uint -1)) + (set! (-> arg0 1) (-> arg1 0)) + (set! arg0 (&-> arg0 2)) + (+! s4-0 2) + (&-> arg1 1) + ) + (set! (-> arg0 0) (the-as uint 0)) + (&-> arg0 1) + (+ s4-0 1) + ) + (none) + ) + + + + diff --git a/test/offline/config/jak2/config.jsonc b/test/offline/config/jak2/config.jsonc index b832ec7196..0a6246cfea 100644 --- a/test/offline/config/jak2/config.jsonc +++ b/test/offline/config/jak2/config.jsonc @@ -164,6 +164,8 @@ "(method 21 load-state)", + "(method 16 level)", "unpack-comp-lzo", // asm mods + "i-hopefully-will-never-exist-dont-add-anything-after-me-please" ], From f1682867af09ddbc89e4c11ab77f64169fef9a41 Mon Sep 17 00:00:00 2001 From: water111 <48171810+water111@users.noreply.github.com> Date: Sat, 1 Oct 2022 17:12:12 -0400 Subject: [PATCH 06/10] [graphics] hook up visibility data for jak 2 (#1938) It works! Visibility off: ![image](https://user-images.githubusercontent.com/48171810/193422627-c5560519-6d20-4645-baa5-5236c7969d6e.png) On: ![image](https://user-images.githubusercontent.com/48171810/193422631-716fff10-9ad7-486f-ad35-9ddcddf2c4eb.png) Overall the visibility data looks a lot better than in jak 1. --- game/CMakeLists.txt | 1 + .../graphics/opengl_renderer/BucketRenderer.h | 2 +- .../opengl_renderer/OpenGLRenderer.cpp | 8 +- .../opengl_renderer/VisDataHandler.cpp | 82 +++++++++++++++++++ .../graphics/opengl_renderer/VisDataHandler.h | 23 ++++++ .../opengl_renderer/background/TFragment.cpp | 18 ++-- game/graphics/opengl_renderer/buckets.h | 1 + .../jak2/engine/gfx/background/background.gc | 57 ++++++++++++- 8 files changed, 178 insertions(+), 14 deletions(-) create mode 100644 game/graphics/opengl_renderer/VisDataHandler.cpp create mode 100644 game/graphics/opengl_renderer/VisDataHandler.h diff --git a/game/CMakeLists.txt b/game/CMakeLists.txt index 67f46c74bc..c1eae73e24 100644 --- a/game/CMakeLists.txt +++ b/game/CMakeLists.txt @@ -143,6 +143,7 @@ set(RUNTIME_SOURCE graphics/opengl_renderer/Sprite3.cpp graphics/opengl_renderer/SpriteRenderer.cpp graphics/opengl_renderer/TextureUploadHandler.cpp + graphics/opengl_renderer/VisDataHandler.cpp graphics/opengl_renderer/DepthCue.cpp graphics/texture/jak1_tpage_dir.cpp graphics/texture/jak2_tpage_dir.cpp diff --git a/game/graphics/opengl_renderer/BucketRenderer.h b/game/graphics/opengl_renderer/BucketRenderer.h index 4a0def8def..4e09832036 100644 --- a/game/graphics/opengl_renderer/BucketRenderer.h +++ b/game/graphics/opengl_renderer/BucketRenderer.h @@ -39,7 +39,6 @@ struct SharedRenderState { bool use_sky_cpu = true; bool use_occlusion_culling = true; - bool enable_merc_xgkick = true; math::Vector fog_color = math::Vector{0, 0, 0, 0}; float fog_intensity = 1.f; bool no_multidraw = false; @@ -77,6 +76,7 @@ struct SharedRenderState { int draw_offset_y = 0; int bucket_for_vis_copy = 0; + int num_vis_to_copy = 0; GameVersion version; }; diff --git a/game/graphics/opengl_renderer/OpenGLRenderer.cpp b/game/graphics/opengl_renderer/OpenGLRenderer.cpp index d3c0c6baea..352c24091f 100644 --- a/game/graphics/opengl_renderer/OpenGLRenderer.cpp +++ b/game/graphics/opengl_renderer/OpenGLRenderer.cpp @@ -11,6 +11,7 @@ #include "game/graphics/opengl_renderer/Sprite3.h" #include "game/graphics/opengl_renderer/SpriteRenderer.h" #include "game/graphics/opengl_renderer/TextureUploadHandler.h" +#include "game/graphics/opengl_renderer/VisDataHandler.h" #include "game/graphics/opengl_renderer/background/Shrub.h" #include "game/graphics/opengl_renderer/background/TFragment.h" #include "game/graphics/opengl_renderer/background/Tie3.h" @@ -87,7 +88,7 @@ void OpenGLRenderer::init_bucket_renderers_jak2() { using namespace jak2; m_bucket_renderers.resize((int)BucketId::MAX_BUCKETS); m_bucket_categories.resize((int)BucketId::MAX_BUCKETS, BucketCategory::OTHER); - + init_bucket_renderer("vis", BucketCategory::OTHER, BucketId::SPECIAL_BUCKET_2); init_bucket_renderer("tfrag-l0-tfrag", BucketCategory::TFRAG, BucketId::TFRAG_L0_TFRAG, std::vector{tfrag3::TFragmentTreeKind::NORMAL}, false, 0); init_bucket_renderer("tie-l0-tfrag", BucketCategory::TIE, BucketId::TIE_L0_TFRAG, 0); @@ -455,7 +456,6 @@ void OpenGLRenderer::draw_renderer_selection_window() { ImGui::SliderFloat("Fog Adjust", &m_render_state.fog_intensity, 0, 10); ImGui::Checkbox("Sky CPU", &m_render_state.use_sky_cpu); ImGui::Checkbox("Occlusion Cull", &m_render_state.use_occlusion_culling); - ImGui::Checkbox("Merc XGKICK", &m_render_state.enable_merc_xgkick); ImGui::Checkbox("Blackout Loads", &m_enable_fast_blackout_loads); for (size_t i = 0; i < m_bucket_renderers.size(); i++) { @@ -697,6 +697,7 @@ void OpenGLRenderer::dispatch_buckets_jak1(DmaFollower dma, dma.current_tag_offset() + 16; // offset by 1 qw for the initial call m_render_state.next_bucket = m_render_state.buckets_base; m_render_state.bucket_for_vis_copy = (int)jak1::BucketId::TFRAG_LEVEL0; + m_render_state.num_vis_to_copy = 2; // Find the default regs buffer auto initial_call_tag = dma.current_tag(); @@ -759,7 +760,8 @@ void OpenGLRenderer::dispatch_buckets_jak2(DmaFollower dma, m_render_state.buckets_base = dma.current_tag_offset(); // starts at 0 in jak 2 m_render_state.next_bucket = m_render_state.buckets_base + 16; - m_render_state.bucket_for_vis_copy = 0; // TODO + m_render_state.bucket_for_vis_copy = (int)jak2::BucketId::SPECIAL_BUCKET_2; + m_render_state.num_vis_to_copy = 6; for (size_t bucket_id = 0; bucket_id < m_bucket_renderers.size(); bucket_id++) { auto& renderer = m_bucket_renderers[bucket_id]; diff --git a/game/graphics/opengl_renderer/VisDataHandler.cpp b/game/graphics/opengl_renderer/VisDataHandler.cpp new file mode 100644 index 0000000000..146d0e51df --- /dev/null +++ b/game/graphics/opengl_renderer/VisDataHandler.cpp @@ -0,0 +1,82 @@ +#include "VisDataHandler.h" + +#include "third-party/imgui/imgui.h" + +VisDataHandler::VisDataHandler(const std::string& name, int my_id) : BucketRenderer(name, my_id) {} + +void VisDataHandler::draw_debug_window() { + ImGui::Checkbox("Count Visible?", &m_count_vis); + for (int i = 0; i < kMaxLevels; i++) { + const auto& stats = m_stats[i]; + if (stats.has_vis) { + if (m_count_vis) { + ImGui::Text("[%d] %d visible", i, stats.num_visible); + } else { + ImGui::Text("[%d] has vis", i); + } + } + } +} + +int bitcount(const u8* data) { + int result = 0; + for (int byte = 0; byte < 16 * 128; byte++) { + u8 val = data[byte]; + for (int i = 0; i < 8; i++) { + if (val & 1) { + result++; + } + val >>= 1; + } + } + return result; +} + +void VisDataHandler::render(DmaFollower& dma, + SharedRenderState* render_state, + ScopedProfilerNode& /*prof*/) { + // reset stats + for (auto& stats : m_stats) { + stats = LevelStats(); + } + if (dma.current_tag_offset() == render_state->next_bucket) { + return; + } + + // skip bucket start + dma.read_and_advance(); + + if (dma.current_tag_offset() == render_state->next_bucket) { + return; + } + + for (int i = 0; i < render_state->num_vis_to_copy; i++) { + auto vis_data = dma.read_and_advance(); + ASSERT(vis_data.vif0() == 0); + if (vis_data.vifcode1().kind != VifCode::Kind::PC_PORT) { + break; + } + if (vis_data.size_bytes == 128 * 16 && render_state->use_occlusion_culling) { + memcpy(render_state->occlusion_vis[i].data, vis_data.data, 128 * 16); + render_state->occlusion_vis[i].valid = true; + m_stats[i].has_vis = true; + if (m_count_vis) { + m_stats[i].num_visible = bitcount(render_state->occlusion_vis[i].data); + } else { + m_stats[i].num_visible = -1; + } + } else { + m_stats[i].has_vis = false; + m_stats[i].num_visible = -1; + } + + auto next = dma.read_and_advance(); + ASSERT(next.size_bytes == 0); + } + + while (dma.current_tag_offset() != render_state->next_bucket) { + auto x = dma.read_and_advance(); + fmt::print("{} {}\n", x.vifcode0().print(), x.vifcode1().print()); + ASSERT(false); + } +} diff --git a/game/graphics/opengl_renderer/VisDataHandler.h b/game/graphics/opengl_renderer/VisDataHandler.h new file mode 100644 index 0000000000..d371ef8849 --- /dev/null +++ b/game/graphics/opengl_renderer/VisDataHandler.h @@ -0,0 +1,23 @@ +#pragma once + +#include "game/graphics/opengl_renderer/BucketRenderer.h" + +/*! + * The VisDataHandler copies visibility data from add-pc-port-background-data for the background + * renderers. + */ +class VisDataHandler : public BucketRenderer { + public: + VisDataHandler(const std::string& name, int my_id); + void render(DmaFollower& dma, SharedRenderState* render_state, ScopedProfilerNode& prof) override; + void draw_debug_window() override; + + private: + struct LevelStats { + bool has_vis = false; + int num_visible = 0; + }; + static constexpr int kMaxLevels = 10; + LevelStats m_stats[kMaxLevels]; + bool m_count_vis = false; +}; diff --git a/game/graphics/opengl_renderer/background/TFragment.cpp b/game/graphics/opengl_renderer/background/TFragment.cpp index 3285bf40d1..1e08ba7496 100644 --- a/game/graphics/opengl_renderer/background/TFragment.cpp +++ b/game/graphics/opengl_renderer/background/TFragment.cpp @@ -60,17 +60,17 @@ void TFragment::render(DmaFollower& dma, return; } - if (m_my_id == render_state->bucket_for_vis_copy) { - DmaTransfer transfers[2]; + if (m_my_id == render_state->bucket_for_vis_copy && + dma.current_tag_vifcode1().kind == VifCode::Kind::PC_PORT) { + DmaTransfer transfers[20]; - transfers[0] = dma.read_and_advance(); - auto next0 = dma.read_and_advance(); - ASSERT(next0.size_bytes == 0); - transfers[1] = dma.read_and_advance(); - auto next1 = dma.read_and_advance(); - ASSERT(next1.size_bytes == 0); + for (int i = 0; i < render_state->num_vis_to_copy; i++) { + transfers[i] = dma.read_and_advance(); + auto next0 = dma.read_and_advance(); + ASSERT(next0.size_bytes == 0); + } - for (int i = 0; i < 2; i++) { + for (int i = 0; i < render_state->num_vis_to_copy; i++) { if (transfers[i].size_bytes == 128 * 16) { if (render_state->use_occlusion_culling) { render_state->occlusion_vis[i].valid = true; diff --git a/game/graphics/opengl_renderer/buckets.h b/game/graphics/opengl_renderer/buckets.h index d52e26ed01..d525ef0974 100644 --- a/game/graphics/opengl_renderer/buckets.h +++ b/game/graphics/opengl_renderer/buckets.h @@ -81,6 +81,7 @@ enum class BucketId { namespace jak2 { enum class BucketId { + SPECIAL_BUCKET_2 = 2, TFRAG_L0_TFRAG = 8, TIE_L0_TFRAG = 9, TFRAG_L1_TFRAG = 19, diff --git a/goal_src/jak2/engine/gfx/background/background.gc b/goal_src/jak2/engine/gfx/background/background.gc index 40a7fbb150..526ca690b7 100644 --- a/goal_src/jak2/engine/gfx/background/background.gc +++ b/goal_src/jak2/engine/gfx/background/background.gc @@ -229,13 +229,68 @@ (none) ) +(defun add-pc-port-background-data ((dma-buf dma-buffer)) + "PC Port added" + ;; loop over levels + (dotimes (lev-idx 6) + (let ((lev (-> *level* draw-level lev-idx)) + (dma-start (-> dma-buf base))) + (cond + ((and lev (= (-> lev status) 'active)) + ;; the level is active. + (let ((packet (the-as dma-packet (-> dma-buf base)))) + (set! (-> packet dma) (new 'static 'dma-tag :id (dma-tag-id cnt) :qwc 128)) + (set! (-> packet vif0) (new 'static 'vif-tag)) + (set! (-> packet vif1) (new 'static 'vif-tag :cmd (vif-cmd pc-port))) + (set! (-> dma-buf base) (the pointer (&+ packet 16))) + ) + (quad-copy! (-> dma-buf base) (-> lev vis-bits) 128) + (&+! (-> dma-buf base) (* 16 128)) + ) + (else + (let ((packet (the-as dma-packet (-> dma-buf base)))) + (set! (-> packet dma) (new 'static 'dma-tag :id (dma-tag-id cnt) :qwc 1)) + (set! (-> packet vif0) (new 'static 'vif-tag)) + (set! (-> packet vif1) (new 'static 'vif-tag :cmd (vif-cmd pc-port))) + (set! (-> dma-buf base) (the pointer (&+ packet 16))) + ) + (set! (-> (the (pointer uint128) (-> dma-buf base))) (the uint128 0)) + (&+! (-> dma-buf base) (* 16 1)) + ) + ) + + + (let ((a3-3 (-> dma-buf base))) + (let ((v1-38 (the-as object (-> dma-buf base)))) + (set! (-> (the-as dma-packet v1-38) dma) (new 'static 'dma-tag :id (dma-tag-id next))) + (set! (-> (the-as dma-packet v1-38) vif0) (new 'static 'vif-tag)) + (set! (-> (the-as dma-packet v1-38) vif1) (new 'static 'vif-tag)) + (set! (-> dma-buf base) (&+ (the-as pointer v1-38) 16)) + ) + (dma-bucket-insert-tag (-> *display* frames (-> *display* on-screen) bucket-group) + (bucket-id bucket-2) + dma-start + (the-as (pointer dma-tag) a3-3) + ) + ) + + ) + ) + ) + (defun finish-background () "Main function for drawing the background (wind, shrub, tie, tfrag)" + + (#when PC_PORT + (add-pc-port-background-data + (-> *display* frames (-> *display* on-screen) global-buf) + ) + ) + (if (-> *blit-displays-work* menu-mode) (return #f) ) - ;; update wind! (when (not (paused?)) (flush-cache 0) From 2d1b5fa57c1d419cf7ce3ce37de1fe84a50ee303 Mon Sep 17 00:00:00 2001 From: Tyler Wilding Date: Sat, 8 Oct 2022 11:45:41 -0400 Subject: [PATCH 07/10] d/jak2: finish `region` as well as some typedef files - `ctywide-obs-h` | `vehicle-h` | `rigid-body-h` (#1935) --- decompiler/config/jak2/all-types.gc | 847 +++++++++------- .../jak2/anonymous_function_types.jsonc | 3 +- decompiler/config/jak2/hacks.jsonc | 10 +- decompiler/config/jak2/stack_structures.jsonc | 11 +- decompiler/config/jak2/type_casts.jsonc | 74 ++ decompiler/config/jak2/var_names.jsonc | 47 + decompiler/util/data_decompile.cpp | 16 + goal_src/jak2/engine/ai/traffic-h.gc | 6 + goal_src/jak2/engine/anim/joint-exploder.gc | 21 + goal_src/jak2/engine/entity/entity.gc | 1 - goal_src/jak2/engine/game/game-info-h.gc | 5 +- goal_src/jak2/engine/game/main-h.gc | 17 +- .../jak2/engine/gfx/background/subdivide-h.gc | 51 +- goal_src/jak2/engine/level/region-h.gc | 41 +- goal_src/jak2/engine/level/region.gc | 703 +++++++++++++ goal_src/jak2/engine/nav/nav-mesh-h.gc | 9 +- goal_src/jak2/engine/physics/rigid-body-h.gc | 385 +++++++ goal_src/jak2/engine/scene/scene-h.gc | 125 +-- goal_src/jak2/engine/util/script.gc | 21 +- goal_src/jak2/kernel/gkernel-h.gc | 4 +- .../jak2/levels/city/common/ctywide-obs-h.gc | 36 + .../jak2/levels/city/common/nav-graph-h.gc | 161 ++- goal_src/jak2/levels/city/common/vehicle-h.gc | 429 ++++++++ scripts/gsrc/update-from-decomp.py | 1 - scripts/gsrc/update-gsrc-via-refs.py | 1 - .../jak2/engine/entity/entity_REF.gc | 2 - .../engine/gfx/background/subdivide-h_REF.gc | 44 +- .../reference/jak2/engine/level/bsp_REF.gc | 5 + .../jak2/engine/level/region-h_REF.gc | 8 +- .../reference/jak2/engine/level/region_REF.gc | 752 ++++++++++++++ .../jak2/engine/nav/nav-mesh-h_REF.gc | 2 +- .../jak2/engine/physics/rigid-body-h_REF.gc | 600 +++++++++++ .../jak2/engine/scene/scene-h_REF.gc | 122 +-- .../levels/city/common/ctywide-obs-h_REF.gc | 88 ++ .../levels/city/common/nav-graph-h_REF.gc | 155 +-- .../jak2/levels/city/common/vehicle-h_REF.gc | 952 ++++++++++++++++++ 36 files changed, 5016 insertions(+), 739 deletions(-) create mode 100644 test/decompiler/reference/jak2/engine/level/region_REF.gc create mode 100644 test/decompiler/reference/jak2/engine/physics/rigid-body-h_REF.gc create mode 100644 test/decompiler/reference/jak2/levels/city/common/ctywide-obs-h_REF.gc create mode 100644 test/decompiler/reference/jak2/levels/city/common/vehicle-h_REF.gc diff --git a/decompiler/config/jak2/all-types.gc b/decompiler/config/jak2/all-types.gc index d60f0b33a3..54b9b9210b 100644 --- a/decompiler/config/jak2/all-types.gc +++ b/decompiler/config/jak2/all-types.gc @@ -576,7 +576,7 @@ (post-hook function :offset-assert 76) (event-hook (function process int symbol event-message-block object) :offset-assert 80) (allocated-length int32 :offset-assert 84) - (pad0 uint32 2) + (pad-unknown-0 uint32 2) ;; had to rename this unfortunately, there is a type that uses this same name "vehicle" (heap-base pointer :offset-assert 96) (heap-top pointer :offset-assert 100) (heap-cur pointer :offset-assert 104) @@ -8111,15 +8111,14 @@ ;; +++main-h:scene-controls (defenum scene-controls :type int64 - (all-off 0) - (channel 1) - (anim-name 2) - (dma-size 4) - (bounds-spheres 8) - (actors 16) - (actor-marks 32) - (special-fma-spheres 64) - (all-on 95)) + :bitfield #t + (channel) + (anim-name) + (dma-size) + (bounds-spheres) + (actors) + (actor-marks) + (special-fma-spheres)) ;; ---main-h:scene-controls (define-extern *display-scene-control* scene-controls) @@ -8311,7 +8310,13 @@ (collect-stats (_type_) none 13) ;; (collide-ray (_type_ int collide-list) none 13) (debug-draw (_type_ drawable display-frame) none 14) (unpack-vis (_type_ (pointer int8) (pointer int8)) (pointer int8) 15) ;; - (collect-regions (_type_ sphere int region-prim-list) none 16) + (collect-regions + "Determines the number of [[drawable]]s in the `obj` that overlap the given `area-of-interest` this number is stored in the `region-list`'s item count + @param area-of-interest The area defined by a sphere that we care about overlaps + @param _count The amount of [[drawable]]s in the object to enumerate through + @param! region-list Stores the overlapping regions and a count for how many were found + @returns none" + (_type_ sphere int region-prim-list) none 16) ) ) @@ -8474,9 +8479,8 @@ :method-count-assert 10 :size-assert #x10 :flag-assert #xa00000010 - ;; field on-enter uses ~A with a signed load field on-inside uses ~A with a signed load field on-exit uses ~A with a signed load (:methods - (region-method-9 () none 9) + (region-method-9 (_type_ vector) symbol 9) ) ) @@ -8489,7 +8493,7 @@ :flag-assert #x900000010 ) - +(declare-type region-prim-area structure) (deftype drawable-region-prim (drawable) ((region region :offset 8) ) @@ -8498,8 +8502,10 @@ :flag-assert #x1400000020 (:methods (debug-draw-region (_type_ int) none 17) - (drawable-region-prim-method-18 () none 18) - (drawable-region-prim-method-19 () none 19) + (track-region "TODO" (_type_ region-prim-area) symbol 18) + (within-area? + "@returns Whether or not the object overlaps with the provided [[region-prim-area]]'s extent" + (_type_ region-prim-area) symbol 19) ) ) @@ -8511,16 +8517,15 @@ :method-count-assert 19 :size-assert #x20 :flag-assert #x1300000020 - ;; Failed to read fields. (:methods - (drawable-tree-region-prim-method-17 () none 17) + (drawable-tree-region-prim-method-17 (_type_ vector) symbol 17) (debug-print (_type_ vector object) none 18) ) ) (deftype drawable-inline-array-region-prim (drawable-inline-array) - ((data drawable-region-prim 1 :inline) + ((data drawable-region-prim 1 :inline :offset-assert 32) (pad uint8 4)) :flag-assert #x1100000044 ) @@ -12456,6 +12461,7 @@ (declare-type continue-point basic) (declare-type game-save basic) +;; +++game-info-h:game-secrets (defenum game-secrets :type uint32 :bitfield #t @@ -12476,7 +12482,9 @@ (reverse-races) (hero-mode) (big-head) - (little-head)) + (little-head) + (game-secret-unknown)) +;; ---game-info-h:game-secrets (defenum game-score (none) @@ -14834,13 +14842,14 @@ ;; scene-h ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +(declare-type scene-player basic) (deftype scene-actor (basic) - ((name basic :offset-assert 4) + ((name string :offset-assert 4) (level basic :offset-assert 8) - (art-group basic :offset-assert 12) - (prefix basic :offset-assert 16) - (draw-frames basic :offset-assert 20) - (scissor-frames basic :offset-assert 24) + (art-group string :offset-assert 12) + (prefix string :offset-assert 16) + (draw-frames pair :offset-assert 20) ;; some form of pair? + (scissor-frames pair :offset-assert 24) (camera int16 :offset-assert 28) (light-index uint8 :offset-assert 30) (shadow-mask uint8 :offset-assert 31) @@ -14851,36 +14860,36 @@ (shadow-volume-joint basic :offset-assert 48) (draw-seg uint64 :offset-assert 56) (no-draw-seg uint64 :offset-assert 64) - (process uint64 :offset-assert 72) + (process handle :offset-assert 72) ) :method-count-assert 10 :size-assert #x50 :flag-assert #xa00000050 (:methods - (scene-actor-method-9 () none 9) + (scene-actor-method-9 (_type_ scene-player) (pointer process) 9) ) ) (deftype scene (art-group) ((mask-to-clear uint32 :offset-assert 32) - (entity basic :offset-assert 36) - (art-group basic :offset-assert 40) - (anim basic :offset-assert 44) + (entity string :offset-assert 36) + (art-group string :offset-assert 40) + (anim string :offset-assert 44) (parts int32 :offset-assert 48) (command-list basic :offset-assert 52) - (cut-list basic :offset-assert 56) + (cut-list pair :offset-assert 56) (wait-max-time time-frame :offset-assert 64) (wait-air-time time-frame :offset-assert 72) (wait-ground-time time-frame :offset-assert 80) - (draw-target basic :offset-assert 88) + (draw-target level-load-info :offset-assert 88) (abort basic :offset-assert 92) - (actor basic :offset-assert 96) - (load-point basic :offset-assert 100) - (end-point basic :offset-assert 104) + (actor (array scene-actor) :offset-assert 96) + (load-point string :offset-assert 100) + (end-point string :offset-assert 104) (borrow basic :offset-assert 108) (sfx-volume float :offset-assert 112) (ambient-volume float :offset-assert 116) - (music-volume float :offset-assert 120) + (music-volume float :offset-assert 120) (blackout-end basic :offset-assert 124) (peaceful basic :offset-assert 128) (music-delay float :offset-assert 132) @@ -14891,26 +14900,26 @@ :size-assert #x8e :flag-assert #x110000008e (:methods - (scene-method-15 () none 15) - (scene-method-16 () none 16) + (scene-method-15 (_type_ spool-anim) none 15) + (scene-method-16 (_type_) _type_ 16) ) ) (deftype scene-player (process-drawable) - ((scene-list basic :offset-assert 200) - (scene basic :offset-assert 204) + ((scene-list (pointer symbol) :offset-assert 200) + (scene scene :offset-assert 204) (scene-index int32 :offset-assert 208) - (anim basic :offset-assert 212) - (next-anim basic :offset-assert 216) - (camera uint64 :offset-assert 224) - (main-entity basic :offset-assert 232) + (anim spool-anim :offset-assert 212) + (next-anim spool-anim :offset-assert 216) + (camera handle :offset-assert 224) + (main-entity entity-actor :offset-assert 232) (wait basic :offset-assert 236) (old-target-pos transformq :inline :offset-assert 240) (pre-cut-frame basic :offset-assert 288) - (preload-continue basic :offset-assert 292) + (preload-continue string :offset-assert 292) (dma-max uint32 :offset-assert 296) (gui-id uint32 :offset-assert 300) - (aborted? basic :offset-assert 304) + (aborted? symbol :offset-assert 304) (scene-start-time time-frame :offset-assert 312) (targ-speed float :offset-assert 320) (cur-speed float :offset-assert 324) @@ -14924,12 +14933,12 @@ :size-assert #x178 :flag-assert #x1a01000178 (:methods - (scene-player-method-20 () none 20) - (scene-player-method-21 () none 21) - (scene-player-method-22 () none 22) - (scene-player-method-23 () none 23) - (scene-player-method-24 () none 24) - (scene-player-method-25 () none 25) + (wait (symbol) _type_ :state 20) + (release () _type_ :state 21) + (play-anim () _type_ :state 22) + (scene-player-method-23 (_type_ string symbol) none 23) + (scene-player-method-24 (_type_ basic symbol) scene 24) + (scene-player-method-25 (_type_ float) none 25) ) ) @@ -18943,28 +18952,54 @@ (deftype region-prim-area (structure) ((region-prim-list region-prim-list :inline :offset-assert 0) (pos vector :inline :offset-assert 1296) + (unknown-vector-uiyb1 vector :inline :offset-assert 1312) (ray vector :inline :offset 1328) + (unknown-vector-t3edh vector :inline :offset-assert 1344) (region-enter-count int32 :offset 1360) - (region-enter-list uint32 320 :offset-assert 1364) - (region-enter-prim-list uint32 320 :offset-assert 2644) + (region-enter-list region-prim-area 320 :offset-assert 1364) + (region-enter-prim-list drawable-region-sphere 320 :offset-assert 2644) (region-exit-count int32 :offset-assert 3924) - (region-exit-list uint32 320 :offset-assert 3928) - (region-exit-prim-list uint32 320 :offset-assert 5208) + (region-exit-list region-prim-area 320 :offset-assert 3928) + (region-exit-prim-list drawable-region-sphere 320 :offset-assert 5208) (region-inside-count int32 :offset-assert 6488) - (region-inside-list uint32 320 :offset-assert 6492) - (region-inside-prim-list uint32 320 :offset-assert 7772) + (region-inside-list region-prim-area 320 :offset-assert 6492) + (region-inside-prim-list drawable-region-sphere 320 :offset-assert 7772) (region-start-count int32 :offset-assert 9052) - (region-start-list uint32 320 :offset-assert 9056) - (region-start-prim-list uint32 320 :offset-assert 10336) + (region-start-list region-prim-area 320 :offset-assert 9056) + (region-start-prim-list drawable-region-sphere 320 :offset-assert 10336) ) :method-count-assert 13 :size-assert #x2d60 :flag-assert #xd00002d60 (:methods - (region-prim-area-method-9 () none 9) - (region-prim-area-method-10 () none 10) - (region-prim-area-method-11 () none 11) - (region-prim-area-method-12 () none 12) + (track-entered-region! + "Enumerates through the objects `region-enter-list`, if we find the provided `region`, do nothing and exit + otherwise, add the [[drawable-region-sphere]] to `region-enter-prim-list` and increment `region-enter-count` + + @param region-sphere Defines the region in question + @returns nothing" + (_type_ drawable-region-sphere) none 9) + (track-exited-region! + "Enumerates through the objects `region-exit-list`, if we find the provided `region`, do nothing and exit + otherwise, add the [[drawable-region-sphere]] to `region-exit-prim-list` and increment `region-exit-count` + + @param region-sphere Defines the region in question + @returns nothing" + (_type_ drawable-region-sphere) none 10) + (track-inside-region! + "Enumerates through the objects `region-inside-list`, if we find the provided `region`, do nothing and exit + otherwise, add the [[drawable-region-sphere]] to `region-inside-prim-list` and increment `region-inside-count` + + @param region-sphere Defines the region in question + @returns nothing" + (_type_ drawable-region-sphere) none 11) + (track-start-region! + "Enumerates through the objects `region-start-list`, if we find the provided `region`, do nothing and exit + otherwise, add the [[drawable-region-sphere]] to `region-start-prim-list` and increment `region-start-count` + + @param region-sphere Defines the region in question + @returns nothing" + (_type_ drawable-region-sphere) none 12) ) ) @@ -21722,7 +21757,7 @@ (user-list engine :offset-assert 36) (next-nav-mesh surface :offset-assert 40) (prev-nav-mesh surface :offset-assert 44) - (bounds sphere :inline :offset-assert 48) + (bounds vector :inline :offset-assert 48) ;; actually a sphere (origin vector :inline :offset 48) (entity entity :offset-assert 64) (link-array (array nav-mesh-link) :offset-assert 68) @@ -22432,7 +22467,7 @@ (define-extern ray-sphere-intersect (function vector vector vector float float)) (define-extern ray-circle-intersect (function vector vector vector float float)) ;; (define-extern ray-cylinder-intersect (function vector vector vector vector float float vector float)) -;; (define-extern ray-plane-intersect function) ;; (function vector vector vector vector vector vector vector float) +(define-extern ray-plane-intersect (function vector vector vector vector vector vector vector float)) ;; ;; (define-extern ray-triangle-intersect function) ;; (function vector vector float matrix vector vector float) ;; (define-extern collide-do-primitives function) ;; (function float) (define-extern moving-sphere-triangle-intersect (function vector vector float collide-cache-tri vector vector float)) ;; @@ -24533,7 +24568,7 @@ ;; (define-extern auto-save-init-by-other function) ;; (function symbol process-tree int int none :behavior auto-save) (define-extern auto-save-command (function symbol int int process-tree symbol none)) (define-extern auto-save-check (function none)) -;; (define-extern auto-save-user function) +(define-extern auto-save-user (function none)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; settings ;; @@ -26997,7 +27032,7 @@ (define-extern can-display-query? (function symbol)) (define-extern talker-surpress! (function none)) (define-extern talker-displayed? (function symbol)) -(define-extern kill-current-talker (function none)) +(define-extern kill-current-talker (function symbol pair symbol none)) ;; see (exit play-anim scene-player) (define-extern string->talker-speech (function string talker-speech-class)) (define-extern talker-spawn-func (function talker-speech-class process-tree vector region int)) (define-extern talker-init (function talker-speech-class vector region none :behavior talker)) @@ -27012,9 +27047,9 @@ ;; region ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; (define-extern region-tree-execute function) +(define-extern region-tree-execute (function symbol vector vector none)) (define-extern region-execute (function none)) -(define-extern region-prim-lookup-by-id (function int drawable-region-prim)) +(define-extern region-prim-lookup-by-id (function int symbol symbol drawable-region-prim)) (define-extern region-lookup-by-id (function int region)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -29127,7 +29162,7 @@ (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 vector type entity)) -(define-extern entity-speed-test (function string none)) +(define-extern entity-speed-test (function string entity)) (define-extern dump-entity-remap (function object object none)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -29623,19 +29658,12 @@ ;; scene ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -#| (deftype scene-stage (process-hidden) () :method-count-assert 15 :size-assert #x80 - :flag-assert #xf00000080 - ;; Failed to read fields. - (:methods - ) - ) -|# + :flag-assert #xf00000080) -#| (deftype subtitle-work (structure) ((draw-tmpl dma-gif-packet :inline :offset-assert 0) (color0 vector4w :inline :offset-assert 32) @@ -29645,13 +29673,12 @@ :size-assert #x40 :flag-assert #x900000040 ) -|# -;; (define-extern scene-decode-continue function) -;; (define-extern scene-lookup function) -;; (define-extern *subtitle-work* object) -;; (define-extern draw-subtitle-image function) -;; (define-extern process-drawable-draw-subtitles function) +(define-extern scene-decode-continue (function basic continue-point)) +(define-extern scene-lookup "TODO - basic can be a string or a scene" (function basic scene)) +(define-extern *subtitle-work* subtitle-work) +(define-extern draw-subtitle-image (function subtitle-image font-context pointer)) +(define-extern process-drawable-draw-subtitles (function none :behavior process-drawable)) (define-extern scene-player-init (function string symbol object none :behavior scene-player)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -32218,6 +32245,7 @@ :flag-assert #x900000040 ) +;; +++rigid-body-h:rigid-body-flag (defenum rigid-body-flag :bitfield #t :type uint32 @@ -32228,6 +32256,7 @@ (debug 4) (blocker 5) ) +;; ---rigid-body-h:rigid-body-flag (deftype rigid-body (structure) ((work basic :offset-assert 0) @@ -32253,9 +32282,9 @@ :size-assert #x120 :flag-assert #x2000000120 (:methods - (rigid-body-method-9 () none 9) - (rigid-body-method-10 () none 10) - (rigid-body-method-11 () none 11) + (rigid-body-method-9 (_type_) none 9) + (rigid-body-method-10 (_type_) none 10) + (rigid-body-method-11 (_type_) none 11) (rigid-body-method-12 (_type_ float) none 12) (rigid-body-method-13 (_type_) none 13) (rigid-body-method-14 (_type_ float) none 14) @@ -32305,12 +32334,12 @@ :size-assert #x130 :flag-assert #x1a00000130 (:methods - (rigid-body-control-method-9 () none 9) - (rigid-body-control-method-10 () none 10) - (rigid-body-control-method-11 () none 11) + (rigid-body-control-method-9 (_type_) none 9) + (rigid-body-control-method-10 (_type_) none 10) + (rigid-body-control-method-11 (_type_) none 11) (rigid-body-control-method-12 (_type_ float) none 12) (rigid-body-control-method-13 (_type_) none 13) - (rigid-body-control-method-14 () none 14) + (rigid-body-control-method-14 (_type_ float) none 14) (clear-force-torque! (_type_) none 15) (clear-momentum! (_type_) none 16) (rigid-body-control-method-17 (_type_ vector vector) none 17) @@ -32325,6 +32354,7 @@ ) ) +;; +++rigid-body-h:rigid-body-object-flag (defenum rigid-body-object-flag :bitfield #t :type uint64 @@ -32337,7 +32367,43 @@ (player-standing-on 6) (player-impulse-force 7) (player-contact-force 8) + (persistent 9) + (in-air 10) + (on-ground 11) + (on-flight-level 12) + (riding 13) + (player-driving 14) + (waiting-for-player 15) + (ignition 16) + (turbo-boost 17) + (reverse-gear 18) + (slide 19) + (hard-turn 20) + (jump 21) + (jump-sound 22) + (ai-driving 23) + (traffic-managed 24) + (flight-level-transition 25) + (flight-level-transition-ending 26) + (camera-bike-mode 27) + (camera-rapid-track-mode 28) + (camera 29) + (alert 30) + (in-pursuit 31) + (target-in-sight 32) + (rammed-target 33) + (draw-marks 34) + (hack-edit-graph-mode 35) + (measure-control-parameters 36) + (lights-on 37) + (lights-update 38) + (lights-dead 39) + (no-hijack 40) + (player-grabbed 41) + (nav-spheres 42) + (idle-sound 43) ) +;; ---rigid-body-h:rigid-body-object-flag (deftype rigid-body-object (process-focusable) ((info rigid-body-object-constants :offset-assert 204) @@ -32899,7 +32965,6 @@ ) |# -#| (deftype joint-exploder-static-joint-params (structure) ((joint-index int16 :offset-assert 0) (parent-joint-index int16 :offset-assert 2) @@ -32908,9 +32973,7 @@ :size-assert #x4 :flag-assert #x900000004 ) -|# -#| (deftype joint-exploder-static-params (basic) ((joints (array joint-exploder-static-joint-params) :offset-assert 4) ;; guessed by decompiler (collide-spec uint32 :offset-assert 8) @@ -32920,7 +32983,6 @@ :size-assert #x10 :flag-assert #x900000010 ) -|# #| (deftype joint-exploder-joint (structure) @@ -48375,25 +48437,25 @@ (declare-type nav-node structure) (deftype nav-branch (structure) - ((node nav-node 2 :offset-assert 0) - (src-node nav-node :offset 0) - (dest-node nav-node :offset 4) - (temp-dest-node-id int32 :offset 4) - (speed-limit uint8 :offset-assert 8) - (density uint8 :offset-assert 9) - (clock-type uint8 :offset-assert 10) - (clock-mask uint8 :offset-assert 11) - (max-user-count uint8 :offset-assert 12) - (user-count uint8 :offset-assert 13) - (width uint8 :offset-assert 14) - (flags uint8 :offset-assert 15) + ((node int32 2 :offset-assert 0) + (src-node nav-node :offset 0) + (dest-node nav-node :offset 4) + (temp-dest-node-id int32 :offset 4) + (speed-limit uint8 :offset-assert 8) + (density uint8 :offset-assert 9) + (clock-type uint8 :offset-assert 10) + (clock-mask uint8 :offset-assert 11) + (max-user-count uint8 :offset-assert 12) + (user-count uint8 :offset-assert 13) + (width uint8 :offset-assert 14) + (flags uint8 :offset-assert 15) ) :method-count-assert 21 :size-assert #x10 :flag-assert #x1500000010 (:methods - (nav-branch-method-9 () none 9) - (nav-branch-method-10 () none 10) + (nav-branch-method-9 (_type_) none 9) + (nav-branch-method-10 (_type_ object int) none 10) (nav-branch-method-11 "TODO @returns `density * 0.0078125` - is this some kind of trick?" @@ -48408,11 +48470,11 @@ (_type_) float 13) (user-limit-reached? (_type_) symbol 14) (nav-branch-method-15 "TODO - checks that `dest-node`'s `id` isn't #FFFF" (_type_) symbol 15) - (nav-branch-method-16 () none 16) - (nav-branch-method-17 () none 17) - (nav-branch-method-18 () none 18) - (nav-branch-method-19 () none 19) - (nav-branch-method-20 () none 20) + (nav-branch-method-16 (_type_ float) none 16) + (nav-branch-method-17 (_type_ float) none 17) + (nav-branch-method-18 (_type_ float) none 18) + (nav-branch-method-19 (_type_ nav-node) none 19) + (nav-branch-method-20 (_type_ nav-node) none 20) ) ) @@ -48429,35 +48491,34 @@ ;; ---nav-graph-h:nav-node-flag-byte (deftype nav-node (structure) - ( - (data uint32 8 :offset-assert 0 :score -999) - (position vector :inline :offset 0) - (pos-x float :offset 0) - (pos-y float :offset 4) - (pos-z float :offset 8) - (angle uint16 :offset 12) - (id uint16 :offset 14) - (radius uint8 :offset 16) - (branch-count int8 :offset 17) - (flags nav-node-flag-byte :offset 18) - (pad0 int8 1 :offset 19) - (branch-array uint32 :offset 20) - (nav-mesh-id uint32 :offset 24) - (level level :offset 28) - ) + ((data uint32 8 :offset-assert 0 :score -999) + (position vector :inline :offset 0) + (pos-x float :offset 0) + (pos-y float :offset 4) + (pos-z float :offset 8) + (angle uint16 :offset 12) + (id uint16 :offset 14) + (radius uint8 :offset 16) + (branch-count int8 :offset 17) + (flags nav-node-flag-byte :offset 18) + (pad0 int8 1 :offset 19) + (branch-array (inline-array nav-branch) :offset 20) + (nav-mesh-id uint32 :offset 24) + (level symbol :offset 28) + ) :method-count-assert 22 :size-assert #x20 :flag-assert #x1600000020 (:methods - (nav-node-method-9 () none 9) - (nav-node-method-10 () none 10) - (nav-node-method-11 () none 11) - (nav-node-method-12 () none 12) - (nav-node-method-13 () none 13) - (nav-node-method-14 () none 14) - (nav-node-method-15 () none 15) - (nav-node-method-16 () none 16) - (nav-node-method-17 () none 17) + (nav-node-method-9 (_type_) none 9) + (nav-node-method-10 (_type_ symbol string) none 10) + (nav-node-method-11 (_type_ int) none 11) + (nav-node-method-12 (_type_ vector nav-node) none 12) + (nav-node-method-13 (_type_ vector) none 13) + (nav-node-method-14 (_type_ nav-node) none 14) + (nav-node-method-15 (_type_ uint) none 15) + (nav-node-method-16 (_type_ float) none 16) + (nav-node-method-17 (_type_ float) none 17) (get-position "@param! ret The [[vector]] that is modified to hold the result @returns the `position` [[vector]] with a `w` component of `1.0`" @@ -48489,63 +48550,64 @@ ) (deftype nav-graph (basic) - ((node-count int16 :offset-assert 4) - (branch-count int16 :offset-assert 6) - (node-array (inline-array nav-node) :offset-assert 8) - (branch-array uint32 :offset-assert 12) - (link-count int16 :offset-assert 16) - (pad2 uint16 :offset-assert 18) - (link-array uint32 :offset-assert 20) - (first-node int16 :offset-assert 24) - (pad0 uint16 :offset-assert 26) - (patched basic :offset-assert 28) - (id uint32 :offset-assert 32) - (pad1 uint32 6 :offset-assert 36) + ((node-count int16 :offset-assert 4) + (branch-count int16 :offset-assert 6) + (node-array (inline-array nav-node) :offset-assert 8) + (branch-array (inline-array nav-branch) :offset-assert 12) + (link-count int16 :offset-assert 16) + (pad2 uint16 :offset-assert 18) + (link-array (inline-array nav-graph-link) :offset-assert 20) + (first-node int16 :offset-assert 24) + (pad0 uint16 :offset-assert 26) + (patched symbol :offset-assert 28) + (id uint32 :offset-assert 32) + (pad1 uint32 6 :offset-assert 36) ) :method-count-assert 45 :size-assert #x3c :flag-assert #x2d0000003c (:methods - (nav-graph-method-9 () none 9) - (nav-graph-method-10 () none 10) - (nav-graph-method-11 () none 11) - (nav-graph-method-12 () none 12) - (nav-graph-method-13 () none 13) - (nav-graph-method-14 () none 14) - (nav-graph-method-15 () none 15) - (nav-graph-method-16 () none 16) - (nav-graph-method-17 () none 17) - (nav-graph-method-18 () none 18) - (nav-graph-method-19 () none 19) - (nav-graph-method-20 () none 20) - (nav-graph-method-21 () none 21) - (nav-graph-method-22 () none 22) - (nav-graph-method-23 () none 23) - (nav-graph-method-24 () none 24) - (nav-graph-method-25 () none 25) - (nav-graph-method-26 () none 26) - (nav-graph-method-27 () none 27) - (nav-graph-method-28 () none 28) - (nav-graph-method-29 () none 29) - (nav-graph-method-30 () none 30) - (nav-graph-method-31 () none 31) - (nav-graph-method-32 () none 32) - (nav-graph-method-33 () none 33) - (nav-graph-method-34 () none 34) - (nav-graph-method-35 () none 35) - (nav-graph-method-36 () none 36) - (nav-graph-method-37 () none 37) + (new (symbol type int int int uint) _type_ 0) + (nav-graph-method-9 (_type_) none 9) + (nav-graph-method-10 (_type_ vector int) none 10) + (nav-graph-method-11 (_type_) none 11) + (nav-graph-method-12 (_type_) none 12) + (nav-graph-method-13 (_type_ int int) none 13) + (nav-graph-method-14 (_type_ int int) none 14) + (nav-graph-method-15 (_type_) none 15) + (nav-graph-method-16 (_type_ int) nav-node 16) + (nav-graph-method-17 (_type_ nav-node) none 17) + (nav-graph-method-18 (_type_ nav-node int) none 18) + (nav-graph-method-19 (_type_ int int int int int int) none 19) + (nav-graph-method-20 (_type_ int int) none 20) + (nav-graph-method-21 (_type_) none 21) + (nav-graph-method-22 (_type_ int int) none 22) + (nav-graph-method-23 (_type_ int int) none 23) + (nav-graph-method-24 (_type_ int int) none 24) + (nav-graph-method-25 (_type_ symbol symbol) none 25) + (nav-graph-method-26 (_type_ symbol symbol) none 26) + (nav-graph-method-27 (_type_) none 27) + (nav-graph-method-28 (_type_) none 28) + (nav-graph-method-29 (_type_ symbol) none 29) + (nav-graph-method-30 (_type_ uint) none 30) + (nav-graph-method-31 (_type_ float) none 31) + (nav-graph-method-32 (_type_ float) none 32) + (nav-graph-method-33 (_type_ float) none 33) + (nav-graph-method-34 (_type_ float) none 34) + (nav-graph-method-35 (_type_ int) none 35) + (nav-graph-method-36 (_type_ int) none 36) + (nav-graph-method-37 (_type_ vector) none 37) (nav-graph-method-38 () none 38) - (nav-graph-method-39 () none 39) - (nav-graph-method-40 () none 40) + (nav-graph-method-39 (_type_) none 39) + (nav-graph-method-40 (_type_ int) int 40) (node-at-idx "Get the `nav-node` at a given position. @param idx The position in the `node-array` to return @returns the [[nav-node]] if it can be found, otherwise return [[#f]]" (_type_ int) nav-node 41) - (nav-graph-method-42 () none 42) - (nav-graph-method-43 () none 43) - (nav-graph-method-44 () none 44) + (nav-graph-method-42 (_type_) none 42) + (nav-graph-method-43 (_type_ nav-graph-link string) none 43) + (from-editor () none 44) ) ) @@ -48554,11 +48616,10 @@ ;; traffic-engine-h ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -#| (deftype nav-segment (structure) - ((vertex UNKNOWN 2 :offset-assert 0) - (length float :offset-assert 12) - (spawn-spacing float :offset-assert 28) + ((vertex vector 2 :inline :offset-assert 0) + (length float :offset 12) + (spawn-spacing float :offset 28) (branch nav-branch :offset-assert 32) (nav-mesh-id uint32 :offset-assert 36) (id uint16 :offset-assert 40) @@ -48571,36 +48632,49 @@ :size-assert #x30 :flag-assert #x900000030 ) -|# -#| +(defenum vis-cell-flag + :type uint8 + :bitfield #t + (active-vehicle) + (active-pedestrian) + (suppress) + ) + (deftype vis-cell (structure) - () + ( + (sphere sphere :inline :offset-assert 0) + (segment-array uint32 :offset-assert 16) + (vis-id uint16 :offset-assert 20) + (id uint16 :offset-assert 22) + (incoming-segment-count int8 :offset-assert 24) + (segment-count int8 :offset-assert 25) + (flags vis-cell-flag :offset-assert 26) + (alloc-segment-count int8 :offset 26) + (prev-flags vis-cell-flag :offset-assert 27) + (pad0 uint32 :offset 28) + ) :method-count-assert 11 :size-assert #x20 :flag-assert #xb00000020 - ;; Failed to read fields. (:methods (vis-cell-method-9 () none 9) (vis-cell-method-10 () none 10) ) ) -|# -#| (deftype vis-grid-pos (structure) - ((data UNKNOWN 3 :offset-assert 0) - (x int8 :offset-assert 0) - (y int8 :offset-assert 1) - (z int8 :offset-assert 2) + ((data int8 3 :offset-assert 0 :score -999) + (x int8 :offset 0) + (y int8 :offset 1) + (z int8 :offset 2) ) + :pack-me :method-count-assert 9 :size-assert #x3 :flag-assert #x900000003 ) -|# -#| (deftype vis-grid-box (structure) ((min vis-grid-pos :inline :offset-assert 0) (max vis-grid-pos :inline :offset-assert 3) @@ -48609,9 +48683,7 @@ :size-assert #x6 :flag-assert #x900000006 ) -|# -#| (deftype vis-ray (structure) ((pos vector :inline :offset-assert 0) (dir vector :inline :offset-assert 16) @@ -48625,13 +48697,11 @@ :size-assert #x4c :flag-assert #x90000004c ) -|# -#| (deftype grid-info (structure) - ((axis-scale UNKNOWN 3 :offset-assert 0) - (dimension-array UNKNOWN 3 :offset-assert 12) - (pad0 UNKNOWN 1 :offset-assert 15) + ((axis-scale float 3 :offset-assert 0) + (dimension-array uint8 3 :offset-assert 12) + (pad0 uint8 1 :offset-assert 15) (box bounding-box :inline :offset-assert 16) (cell-size vector :inline :offset-assert 48) ) @@ -48646,9 +48716,7 @@ (grid-info-method-13 () none 13) ) ) -|# -#| (deftype city-level-info (structure) ((grid-info grid-info :inline :offset-assert 0) (cell-array uint32 :offset-assert 64) @@ -48657,7 +48725,7 @@ (segment-array uint32 :offset-assert 72) (nav-graph basic :offset-assert 76) (camera-ceiling meters :offset-assert 80) - (pad-array UNKNOWN 56 :offset-assert 84) + (pad-array int8 56 :offset-assert 84) ) :method-count-assert 19 :size-assert #x8c @@ -48675,15 +48743,13 @@ (city-level-info-method-18 () none 18) ) ) -|# -#| (deftype traffic-level-data (structure) ((city-info city-level-info :offset-assert 0) (active-cell-count uint8 :offset-assert 4) (newly-active-cell-count uint8 :offset-assert 5) - (active-cell-list UNKNOWN 255 :offset-assert 8) - (newly-active-cell-list UNKNOWN 255 :offset-assert 1028) + (active-cell-list vis-cell 255 :offset-assert 8) + (newly-active-cell-list vis-cell 255 :offset-assert 1028) (active-cell-box bounding-box :inline :offset-assert 2048) ) :method-count-assert 15 @@ -48698,22 +48764,18 @@ (traffic-level-data-method-14 () none 14) ) ) -|# -#| (deftype traffic-suppression-box (structure) - ((data UNKNOWN 32 :offset-assert 0) - (bbox bounding-box :inline :offset-assert 0) - (flags uint8 :offset-assert 12) - (duration uint32 :offset-assert 28) + ((data uint8 32 :offset-assert 0 :score -999) + (bbox bounding-box :inline :offset 0) + (flags uint8 :offset 12) + (duration uint32 :offset 28) ) :method-count-assert 9 :size-assert #x20 :flag-assert #x900000020 ) -|# -#| (deftype traffic-guard-type-info (structure) ((object-type uint8 :offset-assert 0) (max-target-count int8 :offset-assert 1) @@ -48726,9 +48788,7 @@ :size-assert #x6 :flag-assert #x900000006 ) -|# -#| (deftype traffic-guard-type-settings (structure) ((target-count int8 :offset-assert 0) (inaccuracy float :offset-assert 4) @@ -48742,48 +48802,82 @@ :size-assert #x10 :flag-assert #x900000010 ) -|# -#| (deftype traffic-alert-state-settings (structure) - ((guard-settings-array UNKNOWN 6 :offset-assert 0) - (ped-tazer traffic-guard-type-settings :inline :offset-assert 0) - (ped-rifle traffic-guard-type-settings :inline :offset-assert 16) - (ped-grenade traffic-guard-type-settings :inline :offset-assert 32) - (ped-roboguard traffic-guard-type-settings :inline :offset-assert 48) - (bike-turret traffic-guard-type-settings :inline :offset-assert 64) - (hellcat-turret traffic-guard-type-settings :inline :offset-assert 80) + ((guard-settings-array traffic-guard-type-settings 6 :offset-assert 0 :score -999) + (ped-tazer traffic-guard-type-settings :inline :offset 0) + (ped-rifle traffic-guard-type-settings :inline :offset 16) + (ped-grenade traffic-guard-type-settings :inline :offset 32) + (ped-roboguard traffic-guard-type-settings :inline :offset 48) + (bike-turret traffic-guard-type-settings :inline :offset 64) + (hellcat-turret traffic-guard-type-settings :inline :offset 80) ) :method-count-assert 9 :size-assert #x60 :flag-assert #x900000060 ) -|# -#| +(defenum traffic-target-flag + :type uint8 + :bitfield #t + (visible-now) + (visible-recently) + (visible-ever) + (updated) + (force-visible) + ) + (deftype traffic-target-status (structure) - () + ( + (flags traffic-target-flag :offset-assert 0) + (handle handle :offset-assert 8) + (last-seen-time time-frame :offset-assert 16) + (position vector :inline :offset-assert 32) + (velocity vector :inline :offset-assert 48) + (move-position vector :inline :offset-assert 64) + ) :method-count-assert 9 :size-assert #x50 :flag-assert #x900000050 - ;; Failed to read fields. ) -|# -#| +(defenum traffic-alert-flag + :type uint8 + :bitfield #t + (alert-ending) + (alarm-on) + (guard-multi-focus) + (sticky-guard-settings) + (disable-pursuit-control) + (target-jak) + ) + (deftype traffic-alert-state (structure) - () + ( + (flags traffic-alert-flag :offset-assert 0) + (level uint8 :offset-assert 1) + (max-level uint8 :offset-assert 2) + (guards-in-sight-of-target int8 :offset-assert 3) + (guard-aim-count int8 :offset-assert 4) + (guard-inaccuracy-factor float :offset-assert 8) + (guard-target-level float :offset-assert 12) + (duration uint32 :offset-assert 16) + (start-time time-frame :offset-assert 24) + (notify-time time-frame :offset-assert 32) + (alarm-sound-id uint32 :offset-assert 40) + (target-status-array traffic-target-status 3 :inline :offset-assert 48) + (settings traffic-alert-state-settings :inline :offset-assert 288) + (guard-type-info-array traffic-guard-type-info 6 :inline :offset-assert 384) + (guard-type-mask-from-object-type int32 126 :offset-assert 480) + ) :method-count-assert 10 :size-assert #x3d8 :flag-assert #xa000003d8 - ;; Failed to read fields. (:methods (traffic-alert-state-method-9 () none 9) ) ) -|# -#| (deftype traffic-object-type-info (structure) ((flags uint8 :offset-assert 0) (target-count int8 :offset-assert 1) @@ -48802,13 +48896,11 @@ :size-assert #x14 :flag-assert #x900000014 ) -|# -#| (deftype traffic-suppressor (structure) ((flags uint8 :offset-assert 0) (bbox bounding-box :inline :offset-assert 16) - (array UNKNOWN 16 :offset-assert 48) + (array traffic-suppression-box 16 :inline :offset-assert 48) ) :method-count-assert 14 :size-assert #x230 @@ -48821,9 +48913,7 @@ (traffic-suppressor-method-13 () none 13) ) ) -|# -#| (deftype traffic-tracker (structure) ((traffic basic :offset-assert 0) (object-hash basic :offset-assert 4) @@ -48831,8 +48921,8 @@ (id uint8 :offset-assert 12) (active-object-count uint8 :offset-assert 13) (inactive-object-count int8 :offset-assert 14) - (active-object-list UNKNOWN 126 :offset-assert 16) - (active-object-type-list UNKNOWN 126 :offset-assert 1024) + (active-object-list int64 126 :offset-assert 16) + (active-object-type-list int8 126 :offset-assert 1024) ) :method-count-assert 27 :size-assert #x47e @@ -48858,9 +48948,7 @@ (traffic-tracker-method-26 () none 26) ) ) -|# -#| (deftype traffic-engine (basic) ((object-hash basic :offset-assert 4) (manager uint64 :offset-assert 8) @@ -48869,16 +48957,17 @@ (sync-mask-8 uint8 :offset-assert 21) (sync-mask-16 uint16 :offset-assert 22) (sync-mask-32 uint32 :offset-assert 24) - (sync-array UNKNOWN 4 :offset-assert 28) + (sync-array uint8 4 :offset-assert 28) (flags uint8 :offset-assert 32) (alert-state traffic-alert-state :inline :offset-assert 48) - (level-data-array UNKNOWN 2 :offset-assert 1040) - (object-type-info-array UNKNOWN 21 :offset-assert 5200) - (tracker-array UNKNOWN 2 :offset-assert 5872) - (inactive-object-array UNKNOWN 420 :offset-assert 8176) + (level-data-array traffic-level-data 2 :inline :offset-assert 1040) + (object-type-info-array traffic-object-type-info 21 :inline :offset-assert 5200) + (tracker-array traffic-tracker 2 :inline :offset-assert 5872) + (inactive-object-array uint64 420 :offset-assert 8176) (suppressor traffic-suppressor :inline :offset-assert 11536) (danger-sphere-count int8 :offset-assert 12096) - (danger-sphere-array UNKNOWN 4 :offset-assert 12112) + (pad int8 15 :offset-assert 12097) + (danger-sphere-array matrix 4 :inline :offset-assert 12112) ) :method-count-assert 74 :size-assert #x3050 @@ -48951,14 +49040,12 @@ (traffic-engine-method-73 () none 73) ) ) -|# ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; vehicle-h ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -#| (deftype vehicle-lookup-info (structure) ((turn-radius meters :offset-assert 0) (throttle-turning float :offset-assert 4) @@ -48968,9 +49055,7 @@ :size-assert #xc :flag-assert #x90000000c ) -|# -#| (deftype vehicle-control-point (structure) ((local-pos vector :inline :offset-assert 0) (normal vector :inline :offset-assert 16) @@ -48979,36 +49064,30 @@ :size-assert #x20 :flag-assert #x900000020 ) -|# -#| (deftype vehicle-section-info (structure) - ((damage-seg-array UNKNOWN 3 :offset-assert 0) + ((damage-seg-array uint64 3 :offset-assert 0) (damage-seg-count int8 :offset-assert 24) ) :method-count-assert 9 :size-assert #x19 :flag-assert #x900000019 ) -|# -#| (deftype vehicle-seat-info (structure) - ((data UNKNOWN 16 :offset-assert 0) - (position vector :inline :offset-assert 0) - (pos-x float :offset-assert 0) - (pos-y float :offset-assert 4) - (pos-z float :offset-assert 8) - (angle int16 :offset-assert 12) - (flags uint8 :offset-assert 14) + ((data uint8 16 :offset-assert 0 :score -999) + (position vector :inline :offset 0) + (pos-x float :offset 0) + (pos-y float :offset 4) + (pos-z float :offset 8) + (angle int16 :offset 12) + (flags uint8 :offset 14) ) :method-count-assert 9 :size-assert #x10 :flag-assert #x900000010 ) -|# -#| (deftype vehicle-explosion-info (joint-exploder-static-params) ((skel basic :offset-assert 16) (skel-name basic :offset-assert 20) @@ -49018,20 +49097,16 @@ :size-assert #x1c :flag-assert #x90000001c ) -|# -#| (deftype vehicle-grab-rail-info (structure) - ((local-pos UNKNOWN 2 :offset-assert 0) + ((local-pos vector 2 :inline :offset-assert 0) (normal vector :inline :offset-assert 32) ) :method-count-assert 9 :size-assert #x30 :flag-assert #x900000030 ) -|# -#| (deftype rigid-body-vehicle-constants (rigid-body-object-constants) ((flags uint32 :offset-assert 208) (object-type uint8 :offset-assert 212) @@ -49092,15 +49167,15 @@ (rider-stance uint8 :offset-assert 422) (grab-rail-count int8 :offset-assert 423) (grab-rail-array uint32 :offset-assert 424) - (seat-array UNKNOWN 4 :offset-assert 432) - (rider-hand-offset UNKNOWN 2 :offset-assert 496) - (section-array UNKNOWN 4 :offset-assert 528) - (section-bike-front vehicle-section-info :inline :offset-assert 528) - (section-bike-rear vehicle-section-info :inline :offset-assert 560) - (section-car-front-left vehicle-section-info :inline :offset-assert 528) - (section-car-rear-left vehicle-section-info :inline :offset-assert 560) - (section-car-front-right vehicle-section-info :inline :offset-assert 592) - (section-car-rear-right vehicle-section-info :inline :offset-assert 624) + (seat-array vehicle-seat-info 4 :inline :offset-assert 432) + (rider-hand-offset vector 2 :inline :offset-assert 496) + (section-array vehicle-section-info 4 :inline :offset-assert 528 :score -999) + (section-bike-front vehicle-section-info :inline :offset 528) + (section-bike-rear vehicle-section-info :inline :offset 560) + (section-car-front-left vehicle-section-info :inline :offset 528) + (section-car-rear-left vehicle-section-info :inline :offset 560) + (section-car-front-right vehicle-section-info :inline :offset 592) + (section-car-rear-right vehicle-section-info :inline :offset 624) (explosion basic :offset-assert 656) (engine-pitch-scale float :offset-assert 660) (engine-pitch-offset float :offset-assert 664) @@ -49117,22 +49192,23 @@ (taillight-count int8 :offset-assert 789) (thruster-flame-width meters :offset-assert 792) (thruster-flame-length meters :offset-assert 796) - (thruster-local-pos UNKNOWN 2 :offset-assert 800) - (exhaust-local-pos UNKNOWN 2 :offset-assert 832) - (exhaust-local-dir UNKNOWN 2 :offset-assert 864) - (smoke-local-pos UNKNOWN 2 :offset-assert 896) - (smoke-local-vel UNKNOWN 2 :offset-assert 928) - (headlight-local-pos UNKNOWN 3 :offset-assert 960) - (taillight-local-pos UNKNOWN 2 :offset-assert 1008) + (thruster-local-pos vector 2 :inline :offset-assert 800) + (exhaust-local-pos vector 2 :inline :offset-assert 832) + (exhaust-local-dir vector 2 :inline :offset-assert 864) + (smoke-local-pos vector 2 :inline :offset-assert 896) + (smoke-local-vel vector 2 :inline :offset-assert 928) + (headlight-local-pos vector 3 :inline :offset-assert 960) + (taillight-local-pos vector 2 :inline :offset-assert 1008) (lift-thruster-count int8 :offset-assert 1040) (roll-thruster-count int8 :offset-assert 1041) (steering-thruster-count int8 :offset-assert 1042) (stabilizer-count int8 :offset-assert 1043) (inv-lift-thruster-count float :offset-assert 1044) - (lift-thruster-array UNKNOWN 2 :offset-assert 1056) - (roll-thruster-array UNKNOWN 2 :offset-assert 1120) - (steering-thruster-array UNKNOWN 2 :offset-assert 1184) - (stabilizer-array UNKNOWN 6 :offset-assert 1248) + (pad int8 8 :offset-assert 1048) + (lift-thruster-array vector4w-2 2 :inline :offset-assert 1056) + (roll-thruster-array vector4w-2 2 :inline :offset-assert 1120) + (steering-thruster-array vector4w-2 2 :inline :offset-assert 1184) + (stabilizer-array vector4w-2 6 :inline :offset-assert 1248) (engine-thrust-local-pos vector :inline :offset-assert 1440) (brake-local-pos vector :inline :offset-assert 1456) (particle-system-2d basic :offset-assert 1472) @@ -49157,11 +49233,44 @@ (rigid-body-vehicle-constants-method-10 () none 10) ) ) -|# -#| +;; +++vehicle-h:vehicle-controller-flag +(defenum vehicle-controller-flag + :type uint32 + :bitfield #t + (debug) + (draw-marks) + (left-turn) + (on-straightaway) + (do-turn) + (blocking-dest-node) + (attached) + (off-path) + (ignore-others) + (direct-mode) + (recovery-mode) + (no-slowing-for-turns)) +;; ---vehicle-h:vehicle-controller-flag + (deftype vehicle-controller (structure) - () + ( + (flags vehicle-controller-flag :offset-assert 0) + (traffic symbol :offset-assert 4) + (branch nav-branch :offset-assert 8) + (target-speed-offset meters :offset-assert 12) + (target-speed meters :offset-assert 16) + (choose-branch-callback symbol :offset-assert 20) + (turn-accel meters :offset-assert 24) + (max-turn-speed meters :offset-assert 28) + (path-prev-point vector :inline :offset-assert 32) + (turn-enter-point vector :inline :offset-assert 48) + (turn-exit-point vector :inline :offset-assert 64) + (path-dest-point vector :inline :offset 64) + (turn-enter-dir vector :inline :offset-assert 80) + (turn-exit-dir vector :inline :offset-assert 96) + (dest-circle vector :inline :offset-assert 112) + (target-point vector :inline :offset-assert 128) + ) :method-count-assert 22 :size-assert #x90 :flag-assert #x1600000090 @@ -49182,9 +49291,7 @@ (vehicle-controller-method-21 () none 21) ) ) -|# -#| (deftype vehicle-section (structure) ((damage float :offset-assert 0) ) @@ -49192,15 +49299,80 @@ :size-assert #x4 :flag-assert #x900000004 ) -|# -#| (deftype vehicle (rigid-body-object) - () + ( + (pad uint32 4 :offset-assert 272) + (controls vehicle-controls :inline :offset-assert 288) + (prev-controls vehicle-controls :inline :offset-assert 304) + (up-dir vector :inline :offset-assert 320) + (jump-time float :offset-assert 336) + (jump-thrust float :offset-assert 340) + (engine-thrust float :offset-assert 344) + (engine-power-factor float :offset-assert 348) + (force-scale float :offset-assert 352) + (target-distance2 meters :offset-assert 356) + (pad0 uint32 :offset-assert 360) + (target-acceleration vector :inline :offset-assert 368) + (impact-pos vector :inline :offset-assert 384) + (lin-acceleration vector :inline :offset-assert 400) + (hit-points float :offset-assert 416) + (damage-factor float :offset-assert 420) + (crash-level int8 :offset-assert 424) + (force-level int8 :offset-assert 425) + (traffic-hash-id int8 :offset-assert 426) + (traffic-priority-id int8 :offset-assert 427) + (power-fluctuation-factor float :offset-assert 428) + (power-level float :offset-assert 432) + (flight-level-index int8 :offset-assert 436) + (flight-level-index-prev int8 :offset-assert 437) + (overlap-player-counter uint8 :offset-assert 438) + (physics-counter uint8 :offset-assert 439) + (flight-level float :offset-assert 440) + (brake-factor float :offset-assert 444) + (cam-speed-interp float :offset-assert 448) + (camera-dist2 float :offset-assert 452) + (player-dist2 float :offset-assert 456) + (bound-radius float :offset-assert 460) + (rider-array int64 4 :offset-assert 464) + (lift-thrust float 2 :offset-assert 496) + (roll-thrust float 2 :offset-assert 504) + (sent-attack-time time-frame :offset-assert 512) + (air-time time-frame :offset-assert 520) + (turn-time time-frame :offset-assert 528) + (crash-time time-frame :offset-assert 536) + (transition-time time-frame :offset-assert 544) + (transition-end-time time-frame :offset-assert 552) + (turbo-boost-time time-frame :offset-assert 560) + (crash-duration uint16 :offset-assert 568) + (turbo-boost-duration uint16 :offset-assert 570) + (turbo-boost-factor float :offset-assert 572) + (crash-impulse float :offset-assert 576) + (water-height float :offset-assert 580) + (lights-factor float :offset-assert 584) + (outgoing-attack-id uint32 :offset-assert 588) + (scrape-sound-id sound-id :offset-assert 592) + (engine-sound-id sound-id :offset-assert 596) + (thrust-sound-id sound-id :offset-assert 600) + (roll-sound-id sound-id :offset-assert 604) + (damage-pop-sound-id sound-id :offset-assert 608) + (damage-zap-sound-id sound-id :offset-assert 612) + (extra-sound-id sound-id :offset-assert 616) + (fog-fade float :offset-assert 620) + (scrape-sound-envelope float :offset-assert 624) + (engine-sound-envelope float :offset-assert 628) + (engine-sound-factor float :offset-assert 632) + (sputter-sound-envelope float :offset-assert 636) + (rudder-sound-envelope float :offset-assert 640) + (fins-sound-envelope float :offset-assert 644) + (exhaust-part-accum basic 2 :offset-assert 648) + (smoke-part-accum basic 2 :offset-assert 656) + (controller vehicle-controller :inline :offset-assert 672) + (section-array vehicle-section 4 :inline :offset-assert 816) + ) :method-count-assert 144 :size-assert #x370 :flag-assert #x9002f00370 - ;; Failed to read fields. (:methods (vehicle-method-53 () none 53) (vehicle-method-54 () none 54) @@ -49295,7 +49467,6 @@ (vehicle-method-143 () none 143) ) ) -|# ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -49341,44 +49512,45 @@ ;; height-map-h ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -#| (deftype xz-height-map (structure) - ((offset UNKNOWN 3 :offset-assert 0) - (x-offset float :offset-assert 0) - (y-offset float :offset-assert 4) - (z-offset float :offset-assert 8) + ((offset float 3 :offset-assert 0) + (x-offset float :offset 0) + (y-offset float :offset 4) + (z-offset float :offset 8) (x-inv-spacing float :offset-assert 12) (z-inv-spacing float :offset-assert 16) (y-scale float :offset-assert 20) - (dim UNKNOWN 2 :offset-assert 24) - (x-dim int16 :offset-assert 24) - (z-dim int16 :offset-assert 26) - (data uint32 :offset-assert 28) + (dim int16 2 :offset-assert 24) + (x-dim int16 :offset 24) + (z-dim int16 :offset 26) + (data (pointer int8) :offset-assert 28) ;; 2240 words for the traffic-height-map - this could be so many things, but its something with an `int8` at offset 0 ) :method-count-assert 15 :size-assert #x20 :flag-assert #xf00000020 (:methods - (xz-height-map-method-9 () none 9) - (xz-height-map-method-10 () none 10) - (xz-height-map-method-11 () none 11) - (xz-height-map-method-12 () none 12) - (xz-height-map-method-13 () none 13) - (xz-height-map-method-14 () none 14) + (xz-height-map-method-9 (_type_ vector) float 9) + (xz-height-map-method-10 (_type_ vector) none 10) + (xz-height-map-method-11 (_type_) none 11) + (xz-height-map-method-12 (_type_ vector) none 12) + (xz-height-map-method-13 (_type_ vector) none 13) + (xz-height-map-method-14 (_type_ vector int) none 14) ) ) -|# -;; (define-extern get-traffic-height function) +(define-extern get-traffic-height + "@returns The value of [[xz-height-map::9]] using [[*traffic-height-map*]] and the [[vector]] provided + @see [[xz-height-map::9]]" + (function vector float)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ctywide-obs-h ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -#| + (deftype city-race-ring-info (structure) ((pos vector :inline :offset-assert 0) - (angle float :offset-assert 12) + (angle float :offset 12) (boost float :offset-assert 16) (dist float :offset-assert 20) ) @@ -49389,9 +49561,7 @@ (city-race-ring-info-method-9 () none 9) ) ) -|# -#| (deftype city-ambush-spot (structure) ((pos vector :inline :offset-assert 0) (obj-type uint8 :offset-assert 16) @@ -49400,9 +49570,7 @@ :size-assert #x11 :flag-assert #x900000011 ) -|# -#| (deftype city-ambush-info (structure) ((count int16 :offset-assert 0) (array uint32 :offset-assert 4) @@ -49414,26 +49582,25 @@ (city-ambush-info-method-9 () none 9) ) ) -|# ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; height-map ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; (define-extern point-in-bbox? function) +(define-extern point-in-bbox? (function bounding-box vector symbol)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; traffic-height-map ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; (define-extern *traffic-height-map* object) +(define-extern *traffic-height-map* xz-height-map) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; nav-graph ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; (define-extern make-nav-graph function) +(define-extern make-nav-graph (function nav-graph object none)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; vehicle-rider ;; diff --git a/decompiler/config/jak2/anonymous_function_types.jsonc b/decompiler/config/jak2/anonymous_function_types.jsonc index 77dbcdd939..4f252379a3 100644 --- a/decompiler/config/jak2/anonymous_function_types.jsonc +++ b/decompiler/config/jak2/anonymous_function_types.jsonc @@ -397,5 +397,6 @@ [44, "(function surface surface surface int none :behavior target)"], [45, "(function surface object object int float :behavior target)"], [76, "(function surface surface surface int float :behavior target)"] - ] + ], + "scene": [[4, "(function symbol)"]] } diff --git a/decompiler/config/jak2/hacks.jsonc b/decompiler/config/jak2/hacks.jsonc index 5399a55879..63a8122cfc 100644 --- a/decompiler/config/jak2/hacks.jsonc +++ b/decompiler/config/jak2/hacks.jsonc @@ -37,7 +37,6 @@ // checking boxed type is different now - these make the cfg stuff sad "name=", "cspace-inspect-tree", - "scene-player-init", "(method 77 spyder)", "(method 77 flamer)", "(method 77 grenadier)", @@ -123,7 +122,6 @@ "(method 12 effect-control)", "(method 11 effect-control)", "(method 10 effect-control)", - "(anon-function 2 scene)", "progress-trans", "(method 10 bigmap)", "(method 9 editable-region)", // condition branch assert hit @@ -223,7 +221,10 @@ "bg", "update-sound-banks", "entity-remap-names", - "(method 8 process-tree)" + "(method 8 process-tree)", + "(post play-anim scene-player)", + "(method 25 scene-player)", + "(method 25 scene-player)" ], // If format is used with the wrong number of arguments, @@ -333,7 +334,8 @@ 39, // branch fwd no delay 43, // goto 18 45 // goto 6 -] +], + "(method 44 nav-graph)": [1, 3, 6, 13, 17] }, // 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 a533ca6363..95148fc835 100644 --- a/decompiler/config/jak2/stack_structures.jsonc +++ b/decompiler/config/jak2/stack_structures.jsonc @@ -908,5 +908,14 @@ [32, "vector"], [48, "vector"] ], - "target-board-pre-move": [[112, "vector"]] + "target-board-pre-move": [[112, "vector"]], + "(method 10 nav-node)": [[16, "vector"]], + "(method 9 nav-graph)": [[16, "matrix"]], + "(method 10 xz-height-map)": [[16, "matrix"]], + "(method 13 xz-height-map)": [[16, "vector4w-2"]], + "(method 9 nav-node)": [[48, "nav-graph-link"]], + "(method 18 drawable-region-face)": [ + [16, "vector"], + [32, "vector"] + ] } diff --git a/decompiler/config/jak2/type_casts.jsonc b/decompiler/config/jak2/type_casts.jsonc index 75b7832b06..0a7f9cc741 100644 --- a/decompiler/config/jak2/type_casts.jsonc +++ b/decompiler/config/jak2/type_casts.jsonc @@ -2778,5 +2778,79 @@ ], "unpack-comp-huf": [ [[21,23], "t3", "(pointer uint16)"] + ], + "(method 24 scene-player)": [[38, "gp", "scene"]], + "process-drawable-draw-subtitles": [[26, "v0", "(pointer vector)"]], + "(post play-anim scene-player)": [ + [192, "s4", "process-drawable"], + [243, "s4", "process-drawable"], + [306, "s5", "process-drawable"] + ], + "(method 9 scene-actor)": [ + [43, "s4", "skeleton-group"], + [258, "a0", "process-drawable"], + [262, "v1", "process-drawable"], + [266, "a0", "process-drawable"], + [346, "a0", "scene-player"], + [355, "v1", "manipy"], + [361, "v1", "manipy"], + [376, "v1", "manipy"], + [382, "v1", "manipy"], + [533, "a0", "process-drawable"], + [537, "v1", "process-drawable"], + [541, "a0", "process-drawable"] + ], + "(method 25 scene-player)": [ + [99, "s2", "process-drawable"], + [152, "s2", "process-drawable"], + [155, "s2", "process-drawable"], + [158, "s2", "process-drawable"], + [161, "s2", "process-drawable"] + ], + "(method 16 drawable-inline-array-region-prim)": [ + [[1, 7], "v1", "drawable-region-prim"] + ], + "(method 18 drawable-region-face)": [ + [[33, 84], "v1", "(inline-array vector)"] + ], + "(method 18 drawable-tree-region-prim)": [ + [[22, 49], "s2", "drawable-region-prim"] + ], + "(method 9 region)": [ + [[55, 60], "a0", "drawable-region-prim"], + [58, "v1", "region-prim-area"], + [4, "a0", "region-prim-area"], + [50, "v1", "drawable-region-prim"] + ], + "(method 17 drawable-tree-region-prim)": [ + [[23, 28], "a0", "drawable-region-prim"], + [4, "a0", "region-prim-area"] + ], + "(method 19 drawable-region-volume)": [[8, "a3", "drawable-region-face"]], + "(method 18 drawable-region-volume)": [ + [[23, 27], "a0", "drawable-region-face"] + ], + "(method 17 drawable-region-volume)": [ + [[12, 21], "a0", "drawable-region-face"] + ], + "region-prim-lookup-by-id": [[45, "t6", "drawable-region-prim"]], + "region-tree-execute": [ + [114, "v1", "region-prim-area"], + [107, "v1", "region-prim-area"], + [97, "v1", "region-prim-area"], + [159, "v1", "region-prim-area"], + [204, "v1", "region-prim-area"], + [210, "v1", "region-prim-area"], + [221, "v1", "region-prim-area"], + [165, "v1", "region-prim-area"], + [169, "v1", "region-prim-area"], + [175, "a0", "region-prim-area"], + [191, "v1", "region-prim-area"], + [120, "v1", "region-prim-area"], + [124, "v1", "region-prim-area"], + [146, "v1", "region-prim-area"], + [129, "a1", "region-prim-area"], + [103, "v1", "region-prim-area"], + [[19, 29], "v1", "region-prim-area"] ] } diff --git a/decompiler/config/jak2/var_names.jsonc b/decompiler/config/jak2/var_names.jsonc index c9414df3f9..3a81d37957 100644 --- a/decompiler/config/jak2/var_names.jsonc +++ b/decompiler/config/jak2/var_names.jsonc @@ -1565,5 +1565,52 @@ "a1-22":"all-vis", "a2-11":"vis-qwc" } + }, + "(method 16 drawable-region-prim)": { + "args": ["obj", "area-of-interest", "_count", "region-list"], + "vars": { + "s2-0": "count" + } + }, + "(method 9 region-prim-area)": { + "args": ["obj", "region-sphere"], + "vars": { + "v1-0": "regions-entered", + "a2-0": "region", + "a3-0": "idx" + } + }, + "(method 10 region-prim-area)": { + "vars": { + "v1-0": "regions-exited", + "a2-0": "region", + "a3-0": "idx" + } + }, + "(method 11 region-prim-area)": { + "vars": { + "v1-0": "regions-inside", + "a2-0": "region", + "a3-0": "idx" + } + }, + "(method 12 region-prim-area)": { + "vars": { + "v1-0": "regions-started", + "a2-0": "region", + "a3-0": "idx" + } + }, + "(method 18 drawable-region-sphere)": { + "vars": { + "s4-0": "area-of-interest" + }, + "args": ["obj", "area"] + }, + "(method 19 drawable-region-sphere)": { + "args": ["obj", "area"] + }, + "(method 18 drawable-region-volume)": { + "args": ["obj", "area"] } } diff --git a/decompiler/util/data_decompile.cpp b/decompiler/util/data_decompile.cpp index a5c096005d..09c00dfe73 100644 --- a/decompiler/util/data_decompile.cpp +++ b/decompiler/util/data_decompile.cpp @@ -604,6 +604,17 @@ goos::Object nav_mesh_nav_control_arr_decompile( file, TypeSpec("nav-control"), 288); } +goos::Object xz_height_map_data_arr_decompile(const std::vector& words, + const std::vector& labels, + int my_seg, + int field_location, + const TypeSystem& ts, + const std::vector>& all_words, + const LinkedObjectFile* file) { + return decomp_ref_to_inline_array_guess_size(words, labels, my_seg, field_location, ts, all_words, + file, TypeSpec("vector4b"), 4); +} + goos::Object nav_mesh_route_arr_decompile(const std::vector& words, const std::vector& labels, int my_seg, @@ -1030,6 +1041,11 @@ goos::Object decompile_structure(const TypeSpec& type, field_defs_out.emplace_back(field.name(), nav_mesh_nav_control_arr_decompile( obj_words, labels, label.target_segment, field_start, ts, words, file)); + } else if (field.name() == "data" && type.print() == "xz-height-map" && + file->version == GameVersion::Jak2) { + field_defs_out.emplace_back(field.name(), xz_height_map_data_arr_decompile( + obj_words, labels, label.target_segment, + field_start, ts, words, file)); } else if (field.name() == "route" && type.print() == "nav-mesh" && file->version == GameVersion::Jak1) { field_defs_out.emplace_back( diff --git a/goal_src/jak2/engine/ai/traffic-h.gc b/goal_src/jak2/engine/ai/traffic-h.gc index 427e460a7a..1e85951d4d 100644 --- a/goal_src/jak2/engine/ai/traffic-h.gc +++ b/goal_src/jak2/engine/ai/traffic-h.gc @@ -14,8 +14,11 @@ ;; DECOMP BEGINS (define *traffic-manager* (the-as process #f)) + (define *ctywide-entity* (the-as object #f)) + (define *lwide-entity* (the-as object #f)) + (define *race-vehicle-entity* (the-as object #f)) (deftype traffic-danger-info (structure) @@ -33,6 +36,7 @@ :flag-assert #x900000036 ) + (deftype traffic-suppression-params (structure) ((bbox bounding-box :inline :offset-assert 0) (duration uint64 :offset-assert 32) @@ -49,6 +53,8 @@ ) ) + +;; WARN: Return type mismatch symbol vs none. (defmethod has-valid-id? traffic-suppression-params ((obj traffic-suppression-params)) (!= (-> obj id) -1) (none) diff --git a/goal_src/jak2/engine/anim/joint-exploder.gc b/goal_src/jak2/engine/anim/joint-exploder.gc index 4ec9f67865..c1cbf44b63 100644 --- a/goal_src/jak2/engine/anim/joint-exploder.gc +++ b/goal_src/jak2/engine/anim/joint-exploder.gc @@ -5,5 +5,26 @@ ;; name in dgo: joint-exploder ;; dgos: GAME, COMMON +;; TODO - for vehicle-h + +(deftype joint-exploder-static-joint-params (structure) + ((joint-index int16 :offset-assert 0) + (parent-joint-index int16 :offset-assert 2) + ) + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) + +(deftype joint-exploder-static-params (basic) + ((joints (array joint-exploder-static-joint-params) :offset-assert 4) ;; guessed by decompiler + (collide-spec uint32 :offset-assert 8) + (art-level basic :offset-assert 12) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + ;; DECOMP BEGINS diff --git a/goal_src/jak2/engine/entity/entity.gc b/goal_src/jak2/engine/entity/entity.gc index 124882d030..f152825862 100644 --- a/goal_src/jak2/engine/entity/entity.gc +++ b/goal_src/jak2/engine/entity/entity.gc @@ -2447,7 +2447,6 @@ (kill! gp-0) ) ) - (none) ) (defun-debug dump-entity-remap ((arg0 object) (arg1 object)) diff --git a/goal_src/jak2/engine/game/game-info-h.gc b/goal_src/jak2/engine/game/game-info-h.gc index 58142c3401..0d9bc71d63 100644 --- a/goal_src/jak2/engine/game/game-info-h.gc +++ b/goal_src/jak2/engine/game/game-info-h.gc @@ -68,6 +68,7 @@ (cf30 30) ) +;; +++game-secrets (defenum game-secrets :type uint32 :bitfield #t @@ -88,7 +89,9 @@ (reverse-races) (hero-mode) (big-head) - (little-head)) + (little-head) + (game-secret-unknown)) +;; ---game-secrets (defenum game-score (none) diff --git a/goal_src/jak2/engine/game/main-h.gc b/goal_src/jak2/engine/game/main-h.gc index 1b83581bf1..120206cdfc 100644 --- a/goal_src/jak2/engine/game/main-h.gc +++ b/goal_src/jak2/engine/game/main-h.gc @@ -27,15 +27,14 @@ ;; +++scene-controls (defenum scene-controls :type int64 - (all-off 0) - (channel 1) - (anim-name 2) - (dma-size 4) - (bounds-spheres 8) - (actors 16) - (actor-marks 32) - (special-fma-spheres 64) - (all-on 95)) + :bitfield #t + (channel) + (anim-name) + (dma-size) + (bounds-spheres) + (actors) + (actor-marks) + (special-fma-spheres)) ;; ---scene-controls ;; +++bot-marks-controls diff --git a/goal_src/jak2/engine/gfx/background/subdivide-h.gc b/goal_src/jak2/engine/gfx/background/subdivide-h.gc index 7f822a6f57..621b76f6dd 100644 --- a/goal_src/jak2/engine/gfx/background/subdivide-h.gc +++ b/goal_src/jak2/engine/gfx/background/subdivide-h.gc @@ -30,6 +30,7 @@ ) ) + (defmethod new subdivide-settings ((allocation symbol) (type-to-make type) (arg0 meters) (arg1 meters)) (let ((v0-0 (object-new allocation type-to-make (the-as int (-> type-to-make size))))) (dotimes (v1-2 6) @@ -51,6 +52,7 @@ :flag-assert #x900000080 ) + (deftype terrain-stats (structure) ((pris tr-stat :inline :offset-assert 0) (tie-generic tr-stat :inline :offset-assert 16) @@ -88,6 +90,7 @@ :flag-assert #x9000001e0 ) + (deftype dma-area (structure) ((instance-shrub-dma instance-shrub-dma :inline :offset 0) (draw-node-dma draw-node-dma :inline :offset 0) @@ -104,6 +107,7 @@ :flag-assert #x9000038a0 ) + (deftype background-area (structure) ((dma-area dma-area :inline :offset-assert 0) (vis-list uint8 2048 :offset-assert 14496) @@ -113,6 +117,7 @@ :flag-assert #x9000040a0 ) + (deftype foreground-area (structure) ((generic-work generic-work :inline :offset-assert 0) (foreground-work foreground-work :inline :offset 0) @@ -125,34 +130,38 @@ :flag-assert #x900003fe0 ) + (deftype region-prim-area (structure) - ((region-prim-list region-prim-list :inline :offset-assert 0) - (pos vector :inline :offset-assert 1296) - (ray vector :inline :offset 1328) - (region-enter-count int32 :offset 1360) - (region-enter-list uint32 320 :offset-assert 1364) - (region-enter-prim-list uint32 320 :offset-assert 2644) - (region-exit-count int32 :offset-assert 3924) - (region-exit-list uint32 320 :offset-assert 3928) - (region-exit-prim-list uint32 320 :offset-assert 5208) - (region-inside-count int32 :offset-assert 6488) - (region-inside-list uint32 320 :offset-assert 6492) - (region-inside-prim-list uint32 320 :offset-assert 7772) - (region-start-count int32 :offset-assert 9052) - (region-start-list uint32 320 :offset-assert 9056) - (region-start-prim-list uint32 320 :offset-assert 10336) + ((region-prim-list region-prim-list :inline :offset-assert 0) + (pos vector :inline :offset-assert 1296) + (unknown-vector-uiyb1 vector :inline :offset-assert 1312) + (ray vector :inline :offset 1328) + (unknown-vector-t3edh vector :inline :offset-assert 1344) + (region-enter-count int32 :offset 1360) + (region-enter-list region-prim-area 320 :offset-assert 1364) + (region-enter-prim-list drawable-region-sphere 320 :offset-assert 2644) + (region-exit-count int32 :offset-assert 3924) + (region-exit-list region-prim-area 320 :offset-assert 3928) + (region-exit-prim-list drawable-region-sphere 320 :offset-assert 5208) + (region-inside-count int32 :offset-assert 6488) + (region-inside-list region-prim-area 320 :offset-assert 6492) + (region-inside-prim-list drawable-region-sphere 320 :offset-assert 7772) + (region-start-count int32 :offset-assert 9052) + (region-start-list region-prim-area 320 :offset-assert 9056) + (region-start-prim-list drawable-region-sphere 320 :offset-assert 10336) ) :method-count-assert 13 :size-assert #x2d60 :flag-assert #xd00002d60 (:methods - (region-prim-area-method-9 () none 9) - (region-prim-area-method-10 () none 10) - (region-prim-area-method-11 () none 11) - (region-prim-area-method-12 () none 12) + (track-entered-region! (_type_ drawable-region-sphere) none 9) + (track-exited-region! (_type_ drawable-region-sphere) none 10) + (track-inside-region! (_type_ drawable-region-sphere) none 11) + (track-start-region! (_type_ drawable-region-sphere) none 12) ) ) + (deftype sprite-area (structure) ((clock-data vector 13 :inline :offset-assert 0) (buffer uint8 :dynamic :offset-assert 208) @@ -162,6 +171,7 @@ :flag-assert #x9000000d0 ) + (deftype work-area (structure) ((background background-area :inline :offset-assert 0) (foreground foreground-area :inline :offset 0) @@ -173,6 +183,7 @@ :flag-assert #x9000040a0 ) + (deftype terrain-context (structure) ((work work-area :inline :offset-assert 0) ) @@ -181,7 +192,7 @@ :flag-assert #x9000040a0 ) + (define *terrain-stats* (new 'global 'terrain-stats)) (define *collide-stats* (new 'global 'collide-stats)) - diff --git a/goal_src/jak2/engine/level/region-h.gc b/goal_src/jak2/engine/level/region-h.gc index 9802c3e757..b0a056e98e 100644 --- a/goal_src/jak2/engine/level/region-h.gc +++ b/goal_src/jak2/engine/level/region-h.gc @@ -5,6 +5,8 @@ ;; name in dgo: region-h ;; dgos: ENGINE, GAME +(declare-type region-prim-area structure) + ;; DECOMP BEGINS (deftype region (structure) @@ -17,10 +19,11 @@ :size-assert #x10 :flag-assert #xa00000010 (:methods - (region-method-9 () none 9) + (region-method-9 (_type_ vector) symbol 9) ) ) + (deftype region-array (inline-array-class) ((data region :inline :dynamic :offset-assert 16) ) @@ -28,6 +31,8 @@ :size-assert #x10 :flag-assert #x900000010 ) + + (set! (-> region-array heap-base) (the-as uint 16)) (deftype drawable-region-prim (drawable) @@ -38,11 +43,12 @@ :flag-assert #x1400000020 (:methods (debug-draw-region (_type_ int) none 17) - (drawable-region-prim-method-18 () none 18) - (drawable-region-prim-method-19 () none 19) + (track-region (_type_ region-prim-area) symbol 18) + (within-area? (_type_ region-prim-area) symbol 19) ) ) + (deftype drawable-tree-region-prim (drawable-tree) ((name basic :offset 8) (data2 drawable-inline-array :dynamic :offset 32) @@ -51,27 +57,11 @@ :size-assert #x20 :flag-assert #x1300000020 (:methods - (drawable-tree-region-prim-method-17 () none 17) + (drawable-tree-region-prim-method-17 (_type_ vector) symbol 17) (debug-print (_type_ vector object) none 18) ) ) -(defmethod inspect drawable-tree-region-prim ((obj drawable-tree-region-prim)) - (when (not obj) - (return obj) - ) - (format #t "[~8x] ~A~%" obj (-> obj type)) - (format #t "~1Tid: ~D~%" (-> obj id)) - (format #t "~1Tbsphere: ~`vector`P~%" (-> obj bsphere)) - (format #t "~1Tlength: ~D~%" (-> obj length)) - (format #t "~1Tdata[0] @ #x~X~%" (-> obj data)) - (dotimes (s5-0 (-> obj length)) - (format #t "~T [~D]~1Tdata: ~A~%" s5-0 (-> obj data s5-0)) - ) - (format #t "~1Tname: ~A~%" (-> obj name)) - obj - ) - (deftype drawable-inline-array-region-prim (drawable-inline-array) ((data drawable-region-prim 1 :inline :offset-assert 32) @@ -89,6 +79,7 @@ :flag-assert #x1400000020 ) + (deftype region-face-data (structure) ((normal vector :inline :offset-assert 0) (normal-offset float :offset 12) @@ -100,6 +91,7 @@ :flag-assert #x900000020 ) + (deftype drawable-region-face (drawable-region-prim) ((data region-face-data :offset 12) ) @@ -108,6 +100,7 @@ :flag-assert #x1400000020 ) + (deftype region-face-array (inline-array-class) ((data region-face-data :dynamic :offset 20) ) @@ -115,6 +108,8 @@ :size-assert #x14 :flag-assert #x900000014 ) + + (set! (-> region-face-array heap-base) (the-as uint 32)) (deftype drawable-region-volume (drawable-region-prim) @@ -125,6 +120,7 @@ :flag-assert #x1400000020 ) + (deftype region-prim-list (structure) ((num-items int32 :offset-assert 0) (items drawable-region-prim 320 :offset-assert 4) @@ -133,8 +129,3 @@ :size-assert #x504 :flag-assert #x900000504 ) - - -(define-extern region-prim-lookup-by-id (function int drawable-region-prim)) -(define-extern region-lookup-by-id (function int region)) - diff --git a/goal_src/jak2/engine/level/region.gc b/goal_src/jak2/engine/level/region.gc index 7023cffacd..432898e292 100644 --- a/goal_src/jak2/engine/level/region.gc +++ b/goal_src/jak2/engine/level/region.gc @@ -7,3 +7,706 @@ ;; DECOMP BEGINS +;; WARN: Return type mismatch int vs drawable-region-prim. +(defmethod mem-usage drawable-region-prim ((obj drawable-region-prim) (arg0 memory-usage-block) (arg1 int)) + (set! (-> arg0 length) (max 50 (-> arg0 length))) + (set! (-> arg0 data 49 name) "region") + (+! (-> arg0 data 49 count) 1) + (let ((v1-6 (asize-of obj))) + (+! (-> arg0 data 49 used) v1-6) + (+! (-> arg0 data 49 total) (logand -16 (+ v1-6 15))) + ) + (mem-usage (-> obj region) arg0 (logior arg1 128)) + (the-as drawable-region-prim 0) + ) + +;; WARN: Return type mismatch int vs drawable-inline-array-region-prim. +(defmethod mem-usage drawable-inline-array-region-prim ((obj drawable-inline-array-region-prim) (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-region-prim 0) + ) + +(defmethod draw drawable-tree-region-prim ((obj drawable-tree-region-prim) (arg0 drawable-tree-region-prim) (arg1 display-frame)) + 0 + (none) + ) + +(defmethod unpack-vis drawable-tree-region-prim ((obj drawable-tree-region-prim) (arg0 (pointer int8)) (arg1 (pointer int8))) + arg1 + ) + +(defmethod collect-regions drawable-region-prim ((obj drawable-region-prim) (area-of-interest sphere) (_count int) (region-list region-prim-list)) + "Determines the number of [[drawable]]s in the `obj` that overlap the given `area-of-interest` this number is stored in the `region-list`'s item count + @param area-of-interest The area defined by a sphere that we care about overlaps + @param _count The amount of [[drawable]]s in the object to enumerate through + @param! region-list Stores the overlapping regions and a count for how many were found + @returns none" + (dotimes (count _count) + (when (spheres-overlap? area-of-interest (the-as sphere (-> obj bsphere))) + (set! (-> region-list items (-> region-list num-items)) obj) + (+! (-> region-list num-items) 1) + ) + (&+! obj 32) + ) + 0 + (none) + ) + +(defmethod collect-regions drawable-inline-array-region-prim ((obj drawable-inline-array-region-prim) (arg0 sphere) (arg1 int) (arg2 region-prim-list)) + "Determines the number of [[drawable]]s in the `obj` that overlap the given `area-of-interest` this number is stored in the `region-list`'s item count + @param area-of-interest The area defined by a sphere that we care about overlaps + @param _count The amount of [[drawable]]s in the object to enumerate through + @param! region-list Stores the overlapping regions and a count for how many were found + @returns none" + (collect-regions (the-as drawable-region-prim (-> obj data)) arg0 (-> obj length) arg2) + 0 + (none) + ) + +(defmethod collect-regions drawable-tree-region-prim ((obj drawable-tree-region-prim) (arg0 sphere) (arg1 int) (arg2 region-prim-list)) + "Determines the number of [[drawable]]s in the `obj` that overlap the given `area-of-interest` this number is stored in the `region-list`'s item count + @param area-of-interest The area defined by a sphere that we care about overlaps + @param _count The amount of [[drawable]]s in the object to enumerate through + @param! region-list Stores the overlapping regions and a count for how many were found + @returns none" + (collect-regions (-> obj data2 0) arg0 (-> obj length) arg2) + 0 + (none) + ) + +(defmethod debug-draw-region drawable-region-prim ((obj drawable-region-prim) (arg0 int)) + (local-vars (sv-32 vector2h) (sv-36 vector)) + (set! sv-32 (new 'stack 'vector2h)) + (set! sv-36 (-> obj bsphere)) + (add-debug-x #t (bucket-id debug-no-zbuf1) sv-36 (new 'static 'rgba :r #xff :g #xff :a #x80)) + (when (nonzero? (-> obj region)) + (let ((s5-0 add-debug-text-3d) + (s4-0 #t) + (s3-0 318) + ) + (format (clear *temp-string*) "region-~D~%" (-> obj region id)) + (s5-0 s4-0 (the-as bucket-id s3-0) *temp-string* sv-36 (font-color #dadada) sv-32) + ) + (set! (-> sv-32 y) (the-as int (+ (-> sv-32 y) 8))) + (let ((s5-1 (-> obj region on-enter))) + (when s5-1 + (let ((s4-1 add-debug-text-3d) + (s3-1 #t) + (s2-1 318) + ) + (format (clear *temp-string*) "(on-enter ~S)" s5-1) + (s4-1 s3-1 (the-as bucket-id s2-1) *temp-string* sv-36 (font-color #dadada) sv-32) + ) + (set! (-> sv-32 y) (the-as int (+ (-> sv-32 y) 8))) + ) + ) + (let ((s5-2 (-> obj region on-inside))) + (when s5-2 + (let ((s4-2 add-debug-text-3d) + (s3-2 #t) + (s2-2 318) + ) + (format (clear *temp-string*) "(on-inside ~S)" s5-2) + (s4-2 s3-2 (the-as bucket-id s2-2) *temp-string* sv-36 (font-color #dadada) sv-32) + ) + (set! (-> sv-32 y) (the-as int (+ (-> sv-32 y) 8))) + ) + ) + (let ((gp-1 (-> obj region on-exit))) + (when gp-1 + (let ((s5-3 add-debug-text-3d) + (s4-3 #t) + (s3-3 318) + ) + (format (clear *temp-string*) "(on-exit ~S)" gp-1) + (s5-3 s4-3 (the-as bucket-id s3-3) *temp-string* sv-36 (font-color #dadada) sv-32) + ) + (set! (-> sv-32 y) (the-as int (+ (-> sv-32 y) 8))) + ) + ) + ) + 0 + (none) + ) + +(defmethod track-region drawable-region-prim ((obj drawable-region-prim) (arg0 region-prim-area)) + "TODO" + #f + ) + +(defmethod within-area? drawable-region-prim ((obj drawable-region-prim) (arg0 region-prim-area)) + "@returns Whether or not the object overlaps with the provided [[region-prim-area]]'s extent" + #f + ) + +;; WARN: Function (method 9 region-prim-area) has a return type of none, but the expression builder found a return statement. +(defmethod track-entered-region! region-prim-area ((obj region-prim-area) (region-sphere drawable-region-sphere)) + "Enumerates through the objects `region-enter-list`, if we find the provided `region`, do nothing and exit + otherwise, add the [[drawable-region-sphere]] to `region-enter-prim-list` and increment `region-enter-count` + + @param region-sphere Defines the region in question + @returns nothing" + (let ((regions-entered (-> obj region-enter-count))) + (let ((region (-> region-sphere region))) + (countdown (idx regions-entered) + (if (= (-> obj region-enter-list idx) region) + (return #f) + ) + ) + (set! (-> obj region-enter-list regions-entered) (the-as region-prim-area region)) + ) + (set! (-> obj region-enter-prim-list regions-entered) region-sphere) + (set! (-> obj region-enter-count) (+ regions-entered 1)) + ) + 0 + (none) + ) + +;; WARN: Function (method 10 region-prim-area) has a return type of none, but the expression builder found a return statement. +(defmethod track-exited-region! region-prim-area ((obj region-prim-area) (arg0 drawable-region-sphere)) + "Enumerates through the objects `region-exit-list`, if we find the provided `region`, do nothing and exit + otherwise, add the [[drawable-region-sphere]] to `region-exit-prim-list` and increment `region-exit-count` + + @param region-sphere Defines the region in question + @returns nothing" + (let ((regions-exited (-> obj region-exit-count))) + (let ((region (-> arg0 region))) + (countdown (idx regions-exited) + (if (= (-> obj region-exit-list idx) region) + (return #f) + ) + ) + (set! (-> obj region-exit-list regions-exited) (the-as region-prim-area region)) + ) + (set! (-> obj region-exit-prim-list regions-exited) arg0) + (set! (-> obj region-exit-count) (+ regions-exited 1)) + ) + 0 + (none) + ) + +;; WARN: Function (method 11 region-prim-area) has a return type of none, but the expression builder found a return statement. +(defmethod track-inside-region! region-prim-area ((obj region-prim-area) (arg0 drawable-region-sphere)) + "Enumerates through the objects `region-inside-list`, if we find the provided `region`, do nothing and exit + otherwise, add the [[drawable-region-sphere]] to `region-inside-prim-list` and increment `region-inside-count` + + @param region-sphere Defines the region in question + @returns nothing" + (let ((regions-inside (-> obj region-inside-count))) + (let ((region (-> arg0 region))) + (countdown (idx regions-inside) + (if (= (-> obj region-inside-list idx) region) + (return #f) + ) + ) + (set! (-> obj region-inside-list regions-inside) (the-as region-prim-area region)) + ) + (set! (-> obj region-inside-prim-list regions-inside) arg0) + (set! (-> obj region-inside-count) (+ regions-inside 1)) + ) + 0 + (none) + ) + +;; WARN: Function (method 12 region-prim-area) has a return type of none, but the expression builder found a return statement. +(defmethod track-start-region! region-prim-area ((obj region-prim-area) (arg0 drawable-region-sphere)) + "Enumerates through the objects `region-start-list`, if we find the provided `region`, do nothing and exit + otherwise, add the [[drawable-region-sphere]] to `region-start-prim-list` and increment `region-start-count` + + @param region-sphere Defines the region in question + @returns nothing" + (let ((regions-started (-> obj region-start-count))) + (let ((region (-> arg0 region))) + (countdown (idx regions-started) + (if (= (-> obj region-start-list idx) region) + (return #f) + ) + ) + (set! (-> obj region-start-list regions-started) (the-as region-prim-area region)) + ) + (set! (-> obj region-start-prim-list regions-started) arg0) + (set! (-> obj region-start-count) (+ regions-started 1)) + ) + 0 + (none) + ) + +(defmethod debug-draw-region drawable-region-sphere ((obj drawable-region-sphere) (arg0 int)) + (let ((t9-0 (method-of-type drawable-region-prim debug-draw-region))) + (t9-0 obj arg0) + ) + (let ((a2-0 (-> obj bsphere))) + (add-debug-sphere #t (bucket-id debug2) a2-0 (-> obj bsphere w) (new 'static 'rgba :r #xff :a #x80)) + ) + 0 + (none) + ) + +(defmethod track-region drawable-region-sphere ((obj drawable-region-sphere) (area region-prim-area)) + "TODO" + (-> obj region) + (let ((area-of-interest (-> obj bsphere))) + (if (< 0.0 (ray-sphere-intersect (-> area pos) (-> area ray) area-of-interest (-> area-of-interest w))) + (track-entered-region! area obj) + ) + (if (< 0.0 (ray-sphere-intersect + (-> area unknown-vector-uiyb1) + (-> area unknown-vector-t3edh) + area-of-interest + (-> area-of-interest w) + ) + ) + (track-exited-region! area obj) + ) + (if (spheres-overlap? (the-as sphere (-> area pos)) (the-as sphere area-of-interest)) + (track-start-region! area obj) + ) + (when (spheres-overlap? (the-as sphere (-> area unknown-vector-uiyb1)) (the-as sphere area-of-interest)) + (track-inside-region! area obj) + #t + ) + ) + ) + +(defmethod within-area? drawable-region-sphere ((obj drawable-region-sphere) (area region-prim-area)) + "@returns Whether or not the object overlaps with the provided [[region-prim-area]]'s extent" + (spheres-overlap? (the-as sphere (-> area pos)) (the-as sphere (-> obj bsphere))) + ) + +(defmethod debug-draw-region drawable-region-face ((obj drawable-region-face) (arg0 int)) + (when (zero? arg0) + (let ((t9-0 (method-of-type drawable-region-prim debug-draw-region))) + (t9-0 obj arg0) + ) + ) + (let ((s5-0 (-> obj bsphere))) + (add-debug-vector + #t + (bucket-id debug-no-zbuf1) + s5-0 + (-> obj data normal) + (meters 2) + (new 'static 'rgba :r #xff :g #xff :a #x80) + ) + (add-debug-sphere #t (bucket-id debug2) s5-0 (-> obj bsphere w) (new 'static 'rgba :r #xff :a #x30)) + ) + (add-debug-bound + 324 + (the-as transform (-> obj data points)) + (the-as int (-> obj data num-points)) + (new 'static 'rgba :r #xff :g #xff :a #x80) + (new 'static 'rgba :r #xff :a #x80) + 0 + ) + 0 + (none) + ) + +(defmethod track-region drawable-region-face ((obj drawable-region-face) (arg0 region-prim-area)) + "TODO" + (local-vars (sv-48 vector) (sv-52 vector) (sv-56 object)) + (-> obj region) + (let* ((s4-0 (-> obj data)) + (v1-1 (-> s4-0 normal)) + (a0-3 (>= 0.0 (- (vector-dot (-> arg0 pos) v1-1) (-> v1-1 w)))) + (s3-0 (>= 0.0 (- (vector-dot (-> arg0 unknown-vector-uiyb1) v1-1) (-> v1-1 w)))) + ) + (when (!= a0-3 s3-0) + (when (nonzero? (-> s4-0 num-points)) + (set! sv-48 (new 'stack-no-clear 'vector)) + (set! sv-52 (new 'stack-no-clear 'vector)) + (set! sv-56 (the-as (inline-array vector) (-> s4-0 points))) + (ray-plane-intersect + sv-48 + sv-52 + (-> arg0 pos) + (-> arg0 ray) + (-> (the-as (inline-array vector) sv-56) 0) + (-> (the-as (inline-array vector) sv-56) 1) + (-> (the-as (inline-array vector) sv-56) 2) + ) + (let ((s4-1 (-> s4-0 num-points)) + (s2-0 0) + (s1-0 (vector-negate! (new 'stack-no-clear 'vector) sv-52)) + ) + (while (< (+ s2-0 2) (the-as int s4-1)) + (if (the-as + (inline-array vector) + (or (point-in-triangle-cross + sv-48 + sv-52 + (-> (the-as (inline-array vector) sv-56) 0) + (-> (the-as (inline-array vector) sv-56) 1) + (-> (the-as (inline-array vector) sv-56) 2) + ) + (the-as (inline-array vector) (point-in-triangle-cross + sv-48 + s1-0 + (-> (the-as (inline-array vector) sv-56) 0) + (-> (the-as (inline-array vector) sv-56) 1) + (-> (the-as (inline-array vector) sv-56) 2) + ) + ) + ) + ) + (goto cfg-17) + ) + (+! s2-0 1) + (set! sv-56 (-> (the-as (inline-array vector) sv-56) 1)) + ) + ) + (set! s3-0 s3-0) + (goto cfg-20) + ) + (label cfg-17) + (if s3-0 + (track-entered-region! arg0 (the-as drawable-region-sphere obj)) + (track-exited-region! arg0 (the-as drawable-region-sphere obj)) + ) + ) + (label cfg-20) + s3-0 + ) + ) + +(defmethod debug-draw-region drawable-region-volume ((obj drawable-region-volume) (arg0 int)) + (let ((t9-0 (method-of-type drawable-region-prim debug-draw-region))) + (t9-0 obj arg0) + ) + (let* ((s5-0 (-> obj faces length)) + (s4-0 0) + (a0-3 (the-as object (+ (+ (* s4-0 32) 16) (the-as int (-> obj faces))))) + ) + (while (< s4-0 s5-0) + (debug-draw-region (the-as drawable-region-face a0-3) 1) + (+! s4-0 1) + (set! a0-3 (+ (+ (* s4-0 32) 16) (the-as int (-> obj faces)))) + ) + ) + 0 + (none) + ) + +(defmethod track-region drawable-region-volume ((obj drawable-region-volume) (area region-prim-area)) + "TODO" + (if (within-area? obj area) + (track-start-region! area (the-as drawable-region-sphere obj)) + ) + (let* ((s4-0 (-> obj faces length)) + (s3-0 0) + (a0-4 (the-as object (+ (+ (* s3-0 32) 16) (the-as int (-> obj faces))))) + ) + (while (< s3-0 s4-0) + (if (not (track-region (the-as drawable-region-face a0-4) area)) + (return #f) + ) + (+! s3-0 1) + (set! a0-4 (+ (+ (* s3-0 32) 16) (the-as int (-> obj faces)))) + ) + ) + (track-inside-region! area (the-as drawable-region-sphere obj)) + #t + ) + +(defmethod within-area? drawable-region-volume ((obj drawable-region-volume) (arg0 region-prim-area)) + "@returns Whether or not the object overlaps with the provided [[region-prim-area]]'s extent" + (let* ((v1-1 (-> obj faces length)) + (a2-0 0) + (a3-2 (the-as object (+ (+ (* a2-0 32) 16) (the-as int (-> obj faces))))) + ) + (while (< a2-0 v1-1) + (let ((a3-4 (-> (the-as drawable-region-face a3-2) data normal))) + (if (< 0.0 (- (vector-dot (-> arg0 pos) a3-4) (-> a3-4 w))) + (return #f) + ) + ) + (+! a2-0 1) + (set! a3-2 (+ (+ (* a2-0 32) 16) (the-as int (-> obj faces)))) + ) + ) + #t + ) + +(defmethod drawable-tree-region-prim-method-17 drawable-tree-region-prim ((obj drawable-tree-region-prim) (arg0 vector)) + (sphere<-vector+r! (the-as sphere (-> (the-as region-prim-area #x70000000) pos)) arg0 0.0) + (let* ((s5-0 (-> obj data2 (+ (-> obj length) -1) length)) + (s4-0 0) + (a0-8 (the-as object (+ (+ (* s4-0 32) 32) (the-as int (-> obj data2 (+ (-> obj length) -1)))))) + ) + (while (< s4-0 s5-0) + (if (within-area? (the-as drawable-region-prim a0-8) (the-as region-prim-area (+ #x70000000 0))) + (return #t) + ) + (+! s4-0 1) + (set! a0-8 (+ (+ (* s4-0 32) 32) (the-as int (-> obj data2 (+ (-> obj length) -1))))) + ) + ) + #f + ) + +;; WARN: Return type mismatch int vs symbol. +(defmethod region-method-9 region ((obj region) (arg0 vector)) + (local-vars (sv-16 int) (sv-32 int)) + (sphere<-vector+r! (the-as sphere (-> (the-as region-prim-area #x70000000) pos)) arg0 0.0) + (dotimes (s5-0 (-> *level* length)) + (let ((s4-0 (-> *level* level s5-0))) + (when (= (-> s4-0 status) 'active) + (when (nonzero? (-> s4-0 bsp region-trees)) + (let* ((s3-0 (-> s4-0 bsp region-trees length)) + (s2-0 0) + (s1-0 (-> s4-0 bsp region-trees s2-0)) + ) + (while (< s2-0 s3-0) + (let ((s0-0 (-> s1-0 data2 (+ (-> s1-0 length) -1) length))) + (set! sv-16 0) + (set! sv-32 (+ (+ (* sv-16 32) 32) (the-as int (-> s1-0 data2 (+ (-> s1-0 length) -1))))) + (while (< sv-16 s0-0) + (if (and (= (-> (the-as drawable-region-prim sv-32) region) obj) + (within-area? + (the-as drawable-region-prim sv-32) + (the-as region-prim-area (-> (the-as region-prim-area #x70000000) region-prim-list)) + ) + ) + (return (the-as symbol sv-32)) + ) + (set! sv-16 (+ sv-16 1)) + (set! sv-32 (+ (+ (* sv-16 32) 32) (the-as int (-> s1-0 data2 (+ (-> s1-0 length) -1))))) + ) + ) + (+! s2-0 1) + (set! s1-0 (-> s4-0 bsp region-trees s2-0)) + ) + ) + ) + ) + ) + ) + (the-as symbol #f) + ) + +(defmethod debug-print drawable-tree-region-prim ((obj drawable-tree-region-prim) (arg0 vector) (arg1 object)) + (sphere<-vector+r! (the-as sphere (+ 1296 #x70000000)) arg0 0.0) + (let* ((s4-0 (-> obj data2 (+ (-> obj length) -1) length)) + (s3-0 0) + (s2-0 (the-as object (+ (+ (* s3-0 32) 32) (the-as int (-> obj data2 (+ (-> obj length) -1)))))) + ) + (while (< s3-0 s4-0) + (if (within-area? (the-as drawable-region-prim s2-0) (the-as region-prim-area (+ #x70000000 0))) + (format + arg1 + " splitbox-~D ~A~%" + (-> (the-as drawable-region-prim s2-0) id) + (the-as drawable-region-prim s2-0) + ) + ) + (+! s3-0 1) + (set! s2-0 (+ (+ (* s3-0 32) 32) (the-as int (-> obj data2 (+ (-> obj length) -1))))) + ) + ) + 0 + (none) + ) + +(defun region-tree-execute ((arg0 symbol) (arg1 vector) (arg2 vector)) + (local-vars (sv-32 vector)) + (with-pp + (set! sv-32 (vector-average! (new 'stack-no-clear 'vector) arg1 arg2)) + (set! (-> sv-32 w) (* 0.5 (vector-vector-distance arg1 arg2))) + (set! (-> (the-as region-prim-area #x70000000) region-prim-list num-items) 0) + (set! (-> (the-as region-prim-area #x70000000) region-enter-count) 0) + (set! (-> (the-as region-prim-area #x70000000) region-exit-count) 0) + (set! (-> (the-as region-prim-area #x70000000) region-inside-count) 0) + (set! (-> (the-as region-prim-area #x70000000) region-start-count) 0) + (sphere<-vector+r! (the-as sphere (+ 1296 #x70000000)) arg1 0.0) + (sphere<-vector+r! (the-as sphere (+ 1312 #x70000000)) arg2 0.0) + (vector-! (the-as vector (+ 1328 #x70000000)) arg2 arg1) + (vector-! (the-as vector (+ 1344 #x70000000)) arg1 arg2) + (dotimes (s5-1 (-> *level* length)) + (let ((v1-17 (-> *level* level s5-1))) + (when (= (-> v1-17 status) 'active) + (let ((s4-1 (-> v1-17 bsp region-trees))) + (when (nonzero? s4-1) + (let* ((s3-0 (-> s4-1 length)) + (s2-0 0) + (a0-14 (-> s4-1 s2-0)) + ) + (while (< s2-0 s3-0) + (if (= (-> a0-14 name) arg0) + (collect-regions a0-14 (the-as sphere sv-32) 0 (the-as region-prim-list (+ #x70000000 0))) + ) + (+! s2-0 1) + (set! a0-14 (-> s4-1 s2-0)) + ) + ) + ) + ) + ) + ) + ) + (countdown (gp-1 (-> (the-as region-prim-area #x70000000) region-prim-list num-items)) + (track-region + (-> (the-as region-prim-area (+ (* gp-1 4) #x70000000)) region-prim-list items 0) + (the-as region-prim-area (-> (the-as region-prim-area #x70000000) region-prim-list)) + ) + ) + (let ((gp-2 (-> (the-as region-prim-area #x70000000) region-enter-count))) + (while (begin (label cfg-22) (nonzero? gp-2)) + (+! gp-2 -1) + (let* ((a2-5 (-> (the-as region-prim-area (+ (* gp-2 4) #x70000000)) region-enter-list 0)) + (s5-2 (-> a2-5 region-prim-list items 0)) + ) + (when s5-2 + (countdown (v1-47 (-> (the-as region-prim-area #x70000000) region-start-count)) + (if (= a2-5 (-> (the-as region-prim-area #x70000000) region-start-list v1-47)) + (goto cfg-22) + ) + ) + (eval! + (new + 'stack + 'script-context + (the-as basic a2-5) + pp + (-> (the-as region-prim-area (+ (* gp-2 4) #x70000000)) region-enter-prim-list 0 bsphere) + ) + (the-as pair s5-2) + ) + ) + ) + ) + ) + (let ((gp-3 (-> (the-as region-prim-area #x70000000) region-exit-count))) + (while (begin (label cfg-31) (nonzero? gp-3)) + (+! gp-3 -1) + (let* ((a2-6 (-> (the-as region-prim-area (+ (* gp-3 4) #x70000000)) region-exit-list 0)) + (s5-3 (-> a2-6 region-prim-list items 2)) + ) + (when s5-3 + (countdown (v1-64 (-> (the-as region-prim-area #x70000000) region-inside-count)) + (if (= a2-6 (-> (the-as region-prim-area (+ (* v1-64 4) #x70000000)) region-inside-list 0)) + (goto cfg-31) + ) + ) + (eval! + (new + 'stack + 'script-context + (the-as basic a2-6) + pp + (-> (the-as region-prim-area (+ (* gp-3 4) #x70000000)) region-exit-prim-list 0 bsphere) + ) + (the-as pair s5-3) + ) + ) + ) + ) + ) + (countdown (gp-4 (-> (the-as region-prim-area #x70000000) region-inside-count)) + (let* ((a2-7 (-> (the-as region-prim-area (+ (* gp-4 4) #x70000000)) region-inside-list 0)) + (s5-4 (-> a2-7 region-prim-list items 1)) + ) + (if s5-4 + (eval! + (new + 'stack + 'script-context + (the-as basic a2-7) + pp + (-> (the-as region-prim-area (+ (* gp-4 4) #x70000000)) region-inside-prim-list 0 bsphere) + ) + (the-as pair s5-4) + ) + ) + ) + ) + 0 + (none) + ) + ) + +(defun region-execute () + (set! (-> *level* camera-pos 1 quad) (-> *level* camera-pos 0 quad)) + (set! (-> *level* camera-pos 0 quad) (-> (camera-pos) quad)) + (set! (-> *level* target-pos 1 quad) (-> *level* target-pos 0 quad)) + (set! (-> *level* target-pos 0 quad) (-> (target-pos 0) quad)) + (when (and *execute-regions* (-> *setting-control* user-current region-mode) (not (paused?))) + (region-tree-execute 'camera (-> *level* camera-pos 1) (the-as vector (-> *level* camera-pos))) + (region-tree-execute 'target (-> *level* target-pos 1) (the-as vector (-> *level* target-pos))) + ) + 0 + (none) + ) + +;; WARN: Return type mismatch int vs drawable-region-prim. +(defun region-prim-lookup-by-id ((arg0 int) (arg1 symbol) (arg2 symbol)) + (let ((v1-0 -1)) + (dotimes (a3-0 (-> *level* length)) + (let ((t0-3 (-> *level* level a3-0))) + (when (= (-> t0-3 status) 'active) + (when (nonzero? (-> t0-3 bsp region-trees)) + (let* ((t1-8 (-> t0-3 bsp region-trees length)) + (t2-1 0) + (t3-2 (-> t0-3 bsp region-trees t2-1)) + ) + (while (< t2-1 t1-8) + (when (or (not arg1) (= (-> t3-2 name) arg1)) + (let* ((t4-10 (-> t3-2 data2 (+ (-> t3-2 length) -1) length)) + (t5-0 0) + (t6-2 (the-as object (+ (+ (* t5-0 32) 32) (the-as int (-> t3-2 data2 (+ (-> t3-2 length) -1)))))) + ) + (while (< t5-0 t4-10) + (when (= (-> (the-as drawable-region-prim t6-2) region id) arg0) + (+! v1-0 1) + (if (= v1-0 arg2) + (return (the-as drawable-region-prim t6-2)) + ) + ) + (+! t5-0 1) + (set! t6-2 (+ (+ (* t5-0 32) 32) (the-as int (-> t3-2 data2 (+ (-> t3-2 length) -1))))) + ) + ) + ) + (+! t2-1 1) + (set! t3-2 (-> t0-3 bsp region-trees t2-1)) + ) + ) + ) + ) + ) + ) + ) + (the-as drawable-region-prim #f) + ) + +(defun region-lookup-by-id ((arg0 int)) + (dotimes (v1-0 (-> *level* length)) + (let ((a1-3 (-> *level* level v1-0))) + (when (= (-> a1-3 status) 'active) + (when (nonzero? (-> a1-3 bsp region-array)) + (let* ((a2-8 (-> a1-3 bsp region-array length)) + (a3-1 0) + (t0-2 (-> a1-3 bsp region-array data a3-1)) + ) + (while (< a3-1 a2-8) + (if (= (-> t0-2 id) arg0) + (return t0-2) + ) + (+! a3-1 1) + (set! t0-2 (-> a1-3 bsp region-array data a3-1)) + ) + ) + ) + ) + ) + ) + (the-as region #f) + ) diff --git a/goal_src/jak2/engine/nav/nav-mesh-h.gc b/goal_src/jak2/engine/nav/nav-mesh-h.gc index 58ffd5e4d4..e1a98e448e 100644 --- a/goal_src/jak2/engine/nav/nav-mesh-h.gc +++ b/goal_src/jak2/engine/nav/nav-mesh-h.gc @@ -203,7 +203,7 @@ (user-list engine :offset-assert 36) (next-nav-mesh surface :offset-assert 40) (prev-nav-mesh surface :offset-assert 44) - (bounds sphere :inline :offset-assert 48) + (bounds vector :inline :offset-assert 48) (origin vector :inline :offset 48) (entity entity :offset-assert 64) (link-array (array nav-mesh-link) :offset-assert 68) @@ -329,7 +329,6 @@ #f ) -;; WARN: Return type mismatch int vs none. (defun init-ray ((arg0 nav-ray)) (rlet ((acc :class vf) (Q :class vf) @@ -532,7 +531,6 @@ ;; WARN: Stack slot offset 64 signed mismatch ;; WARN: Stack slot offset 44 signed mismatch ;; WARN: Stack slot offset 48 signed mismatch -;; WARN: Return type mismatch int vs none. (defmethod move-along-nav-ray! nav-mesh ((obj nav-mesh) (ray nav-ray)) (local-vars (next-poly-idx int) @@ -617,7 +615,6 @@ (none) ) -;; WARN: Return type mismatch int vs none. (defun-debug nav-sphere-from-cam () (let ((v1-0 (camera-pos))) (format #t "SPHEREM(~4,,1M, ~4,,1M, ~4,,1M, 1.0)~%" (-> v1-0 x) (-> v1-0 y) (-> v1-0 z)) @@ -625,7 +622,3 @@ 0 (none) ) - - - - diff --git a/goal_src/jak2/engine/physics/rigid-body-h.gc b/goal_src/jak2/engine/physics/rigid-body-h.gc index 9b20342342..b0a0d755da 100644 --- a/goal_src/jak2/engine/physics/rigid-body-h.gc +++ b/goal_src/jak2/engine/physics/rigid-body-h.gc @@ -5,5 +5,390 @@ ;; name in dgo: rigid-body-h ;; dgos: GAME, COMMON +;; +++rigid-body-flag +(defenum rigid-body-flag + :bitfield #t + :type uint32 + (display-marks 0) + (enable-physics 1) + (enable-collision 2) + (active 3) + (debug 4) + (blocker 5) + ) +;; ---rigid-body-flag + +;; +++rigid-body-object-flag +(defenum rigid-body-object-flag + :bitfield #t + :type uint64 + (enable-collision 0) + (disturbed 1) + (damaged 2) + (dead 3) + (player-touching 4) + (player-edge-grabbing 5) + (player-standing-on 6) + (player-impulse-force 7) + (player-contact-force 8) + (persistent 9) + (in-air 10) + (on-ground 11) + (on-flight-level 12) + (riding 13) + (player-driving 14) + (waiting-for-player 15) + (ignition 16) + (turbo-boost 17) + (reverse-gear 18) + (slide 19) + (hard-turn 20) + (jump 21) + (jump-sound 22) + (ai-driving 23) + (traffic-managed 24) + (flight-level-transition 25) + (flight-level-transition-ending 26) + (camera-bike-mode 27) + (camera-rapid-track-mode 28) + (camera 29) + (alert 30) + (in-pursuit 31) + (target-in-sight 32) + (rammed-target 33) + (draw-marks 34) + (hack-edit-graph-mode 35) + (measure-control-parameters 36) + (lights-on 37) + (lights-update 38) + (lights-dead 39) + (no-hijack 40) + (player-grabbed 41) + (nav-spheres 42) + (idle-sound 43) + ) +;; ---rigid-body-object-flag + ;; DECOMP BEGINS +(deftype rigid-body-info (structure) + ((mass float :offset-assert 0) + (inv-mass float :offset-assert 4) + (linear-damping float :offset-assert 8) + (angular-damping float :offset-assert 12) + (bounce-factor float :offset-assert 16) + (friction-factor float :offset-assert 20) + (bounce-mult-factor float :offset-assert 24) + (cm-offset-joint vector :inline :offset-assert 32) + (inv-inertial-tensor matrix :inline :offset-assert 48) + (inertial-tensor matrix :inline :offset-assert 112) + (inertial-tensor-box meters 3 :offset-assert 176) + ) + :method-count-assert 10 + :size-assert #xbc + :flag-assert #xa000000bc + (:methods + (rigid-body-info-method-9 (_type_) none 9) + ) + ) + + +(deftype rigid-body-object-extra-info (structure) + ((max-time-step float :offset-assert 0) + (gravity meters :offset-assert 4) + (idle-distance meters :offset-assert 8) + (attack-force-scale float :offset-assert 12) + ) + :pack-me + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + + +(deftype rigid-body-object-constants (structure) + ((info rigid-body-info :inline :offset-assert 0) + (mass float :offset 0) + (inv-mass float :offset 4) + (cm-joint-x meters :offset 32) + (cm-joint-y meters :offset 36) + (cm-joint-z meters :offset 40) + (linear-damping float :offset 8) + (angular-damping float :offset 12) + (bounce-factor float :offset 16) + (friction-factor float :offset 20) + (inertial-tensor-x meters :offset 176) + (inertial-tensor-y meters :offset 180) + (inertial-tensor-z meters :offset 184) + (extra rigid-body-object-extra-info :inline :offset-assert 188) + (max-time-step float :offset 188) + (gravity meters :offset 192) + (idle-distance meters :offset 196) + (attack-force-scale float :offset 200) + (name basic :offset-assert 204) + ) + :method-count-assert 9 + :size-assert #xd0 + :flag-assert #x9000000d0 + ) + + +(deftype rigid-body-impact (structure) + ((point vector :inline :offset-assert 0) + (normal vector :inline :offset-assert 16) + (velocity vector :inline :offset-assert 32) + (impulse float :offset-assert 48) + (pat uint32 :offset-assert 52) + (rbody basic :offset-assert 56) + (prim-id uint32 :offset-assert 60) + ) + :method-count-assert 9 + :size-assert #x40 + :flag-assert #x900000040 + ) + + +(deftype rigid-body (structure) + ((work basic :offset-assert 0) + (info rigid-body-info :offset-assert 4) + (flags rigid-body-flag :offset-assert 8) + (force-callback basic :offset-assert 12) + (blocked-by basic :offset-assert 16) + (time-remaining float :offset-assert 20) + (step-count int16 :offset-assert 24) + (position vector :inline :offset-assert 32) + (rot vector :inline :offset-assert 48) + (rotation quaternion :inline :offset 48) + (lin-momentum vector :inline :offset-assert 64) + (ang-momentum vector :inline :offset-assert 80) + (force vector :inline :offset-assert 96) + (torque vector :inline :offset-assert 112) + (lin-velocity vector :inline :offset-assert 128) + (ang-velocity vector :inline :offset-assert 144) + (matrix matrix :inline :offset-assert 160) + (inv-i-world matrix :inline :offset-assert 224) + ) + :method-count-assert 32 + :size-assert #x120 + :flag-assert #x2000000120 + (:methods + (rigid-body-method-9 (_type_) none 9) + (rigid-body-method-10 (_type_) none 10) + (rigid-body-method-11 (_type_) none 11) + (rigid-body-method-12 (_type_ float) none 12) + (rigid-body-method-13 (_type_) none 13) + (rigid-body-method-14 (_type_ float) none 14) + (rigid-body-method-15 () none 15) + (clear-force-torque! (_type_) none 16) + (clear-momentum! (_type_) none 17) + (rigid-body-method-18 (_type_ vector vector) none 18) + (rigid-body-method-19 (_type_ vector vector) none 19) + (rigid-body-method-20 (_type_ vector) none 20) + (rigid-body-method-21 (_type_ vector vector float) none 21) + (rigid-body-method-22 (_type_ vector vector) vector 22) + (rigid-body-method-23 (_type_ vector) vector 23) + (rigid-body-method-24 (_type_) none 24) + (rigid-body-method-25 (_type_ rigid-body-info vector quaternion basic) none 25) + (rigid-body-method-26 (_type_ vector quaternion) none 26) + (print-physics (_type_ object) none 27) + (print-force-torque (_type_ object) none 28) + (print-position-rotation (_type_ object) none 29) + (print-momentum (_type_ object) none 30) + (print-velocity (_type_ object) none 31) + ) + ) + + +(deftype rigid-body-control (basic) + ((process process :offset-assert 4) + (state rigid-body :inline :offset-assert 16) + (work basic :offset 16) + (info rigid-body-info :offset 20) + (flags rigid-body-flag :offset 24) + (force-callback basic :offset 28) + (blocked-by basic :offset 32) + (time-remaining float :offset 36) + (step-count int16 :offset 40) + (position vector :inline :offset 48) + (rot vector :inline :offset 64) + (rotation quaternion :inline :offset 64) + (lin-momentum vector :inline :offset 80) + (ang-momentum vector :inline :offset 96) + (force vector :inline :offset 112) + (torque vector :inline :offset 128) + (lin-velocity vector :inline :offset 144) + (ang-velocity vector :inline :offset 160) + (matrix matrix :inline :offset 176) + (inv-i-world matrix :inline :offset 240) + ) + :method-count-assert 26 + :size-assert #x130 + :flag-assert #x1a00000130 + (:methods + (rigid-body-control-method-9 (_type_) none 9) + (rigid-body-control-method-10 (_type_) none 10) + (rigid-body-control-method-11 (_type_) none 11) + (rigid-body-control-method-12 (_type_ float) none 12) + (rigid-body-control-method-13 (_type_) none 13) + (rigid-body-control-method-14 (_type_ float) none 14) + (clear-force-torque! (_type_) none 15) + (clear-momentum! (_type_) none 16) + (rigid-body-control-method-17 (_type_ vector vector) none 17) + (rigid-body-control-method-18 (_type_ vector vector) none 18) + (rigid-body-control-method-19 (_type_ vector) none 19) + (rigid-body-control-method-20 (_type_ vector vector float) none 20) + (rigid-body-control-method-21 (_type_ vector vector) vector 21) + (rigid-body-control-method-22 (_type_ vector) vector 22) + (rigid-body-control-method-23 (_type_) none 23) + (rigid-body-control-method-24 (_type_ rigid-body-info vector quaternion basic) none 24) + (rigid-body-control-method-25 (_type_ vector quaternion) none 25) + ) + ) + + +(defmethod rigid-body-control-method-9 rigid-body-control ((obj rigid-body-control)) + (rigid-body-method-9 (-> obj state)) + (none) + ) + +(defmethod rigid-body-control-method-10 rigid-body-control ((obj rigid-body-control)) + (rigid-body-method-10 (-> obj state)) + (none) + ) + +(defmethod rigid-body-control-method-11 rigid-body-control ((obj rigid-body-control)) + (rigid-body-method-11 (-> obj state)) + (none) + ) + +(defmethod rigid-body-control-method-12 rigid-body-control ((obj rigid-body-control) (arg0 float)) + (rigid-body-method-12 (-> obj state) arg0) + (none) + ) + +(defmethod rigid-body-control-method-13 rigid-body-control ((obj rigid-body-control)) + (rigid-body-method-13 (-> obj state)) + (none) + ) + +(defmethod rigid-body-control-method-14 rigid-body-control ((obj rigid-body-control) (arg0 float)) + (rigid-body-method-14 (-> obj state) arg0) + (none) + ) + +(defmethod clear-force-torque! rigid-body-control ((obj rigid-body-control)) + (clear-force-torque! (-> obj state)) + (none) + ) + +(defmethod clear-momentum! rigid-body-control ((obj rigid-body-control)) + (clear-momentum! (-> obj state)) + (none) + ) + +(defmethod rigid-body-control-method-17 rigid-body-control ((obj rigid-body-control) (arg0 vector) (arg1 vector)) + (rigid-body-method-18 (-> obj state) arg0 arg1) + (none) + ) + +(defmethod rigid-body-control-method-18 rigid-body-control ((obj rigid-body-control) (arg0 vector) (arg1 vector)) + (rigid-body-method-19 (-> obj state) arg0 arg1) + (none) + ) + +(defmethod rigid-body-control-method-19 rigid-body-control ((obj rigid-body-control) (arg0 vector)) + (rigid-body-method-20 (-> obj state) arg0) + (none) + ) + +(defmethod rigid-body-control-method-20 rigid-body-control ((obj rigid-body-control) (arg0 vector) (arg1 vector) (arg2 float)) + (rigid-body-method-21 (-> obj state) arg0 arg1 arg2) + (none) + ) + +(defmethod rigid-body-control-method-21 rigid-body-control ((obj rigid-body-control) (arg0 vector) (arg1 vector)) + (rigid-body-method-22 (-> obj state) arg0 arg1) + ) + +(defmethod rigid-body-control-method-22 rigid-body-control ((obj rigid-body-control) (arg0 vector)) + (rigid-body-method-23 (-> obj state) arg0) + ) + +(defmethod rigid-body-control-method-23 rigid-body-control ((obj rigid-body-control)) + (rigid-body-method-24 (-> obj state)) + (none) + ) + +(defmethod rigid-body-control-method-24 rigid-body-control ((obj rigid-body-control) (arg0 rigid-body-info) (arg1 vector) (arg2 quaternion) (arg3 basic)) + (rigid-body-method-25 (-> obj state) arg0 arg1 arg2 arg3) + (none) + ) + +(defmethod rigid-body-control-method-25 rigid-body-control ((obj rigid-body-control) (arg0 vector) (arg1 quaternion)) + (rigid-body-method-26 (-> obj state) arg0 arg1) + (none) + ) + +(deftype rigid-body-object (process-focusable) + ((info rigid-body-object-constants :offset-assert 204) + (flags rigid-body-object-flag :offset-assert 208) + (max-time-step float :offset-assert 216) + (incoming-attack-id uint32 :offset-assert 220) + (player-touch-time time-frame :offset-assert 224) + (disturbed-time time-frame :offset-assert 232) + (player-force-position vector :inline :offset-assert 240) + (player-force vector :inline :offset-assert 256) + ) + :heap-base #x90 + :method-count-assert 53 + :size-assert #x110 + :flag-assert #x3500900110 + (:methods + (rigid-body-object-method-27 () none 27) + (rigid-body-object-method-28 () none 28) + (rigid-body-object-method-29 () none 29) + (rigid-body-object-method-30 () none 30) + (rigid-body-object-method-31 () none 31) + (rigid-body-object-method-32 () none 32) + (rigid-body-object-method-33 () none 33) + (rigid-body-object-method-34 () none 34) + (rigid-body-object-method-35 () none 35) + (rigid-body-object-method-36 () none 36) + (rigid-body-object-method-37 () none 37) + (rigid-body-object-method-38 () none 38) + (rigid-body-object-method-39 () none 39) + (rigid-body-object-method-40 () none 40) + (rigid-body-object-method-41 () none 41) + (rigid-body-object-method-42 () none 42) + (rigid-body-object-method-43 () none 43) + (rigid-body-object-method-44 () none 44) + (rigid-body-object-method-45 () none 45) + (rigid-body-object-method-46 () none 46) + (rigid-body-object-method-47 () none 47) + (rigid-body-object-method-48 () none 48) + (rigid-body-object-method-49 () none 49) + (rigid-body-object-method-50 () none 50) + (rigid-body-object-method-51 () none 51) + (rigid-body-object-method-52 () none 52) + ) + ) + + +(deftype rigid-body-queue (structure) + ((count int8 :offset-assert 0) + (array uint64 128 :offset 8) + ) + :method-count-assert 17 + :size-assert #x408 + :flag-assert #x1100000408 + (:methods + (rigid-body-queue-method-9 () none 9) + (rigid-body-queue-method-10 () none 10) + (rigid-body-queue-method-11 () none 11) + (rigid-body-queue-method-12 () none 12) + (rigid-body-queue-method-13 () none 13) + (rigid-body-queue-method-14 () none 14) + (rigid-body-queue-method-15 () none 15) + (rigid-body-queue-method-16 () none 16) + ) + ) diff --git a/goal_src/jak2/engine/scene/scene-h.gc b/goal_src/jak2/engine/scene/scene-h.gc index 25b7b5a55c..276c0bb806 100644 --- a/goal_src/jak2/engine/scene/scene-h.gc +++ b/goal_src/jak2/engine/scene/scene-h.gc @@ -12,12 +12,12 @@ ;; DECOMP BEGINS (deftype scene-actor (basic) - ((name basic :offset-assert 4) + ((name string :offset-assert 4) (level basic :offset-assert 8) - (art-group basic :offset-assert 12) - (prefix basic :offset-assert 16) - (draw-frames basic :offset-assert 20) - (scissor-frames basic :offset-assert 24) + (art-group string :offset-assert 12) + (prefix string :offset-assert 16) + (draw-frames pair :offset-assert 20) + (scissor-frames pair :offset-assert 24) (camera int16 :offset-assert 28) (light-index uint8 :offset-assert 30) (shadow-mask uint8 :offset-assert 31) @@ -28,89 +28,90 @@ (shadow-volume-joint basic :offset-assert 48) (draw-seg uint64 :offset-assert 56) (no-draw-seg uint64 :offset-assert 64) - (process uint64 :offset-assert 72) + (process handle :offset-assert 72) ) :method-count-assert 10 :size-assert #x50 :flag-assert #xa00000050 (:methods - (scene-actor-method-9 () none 9) + (scene-actor-method-9 (_type_ scene-player) (pointer process) 9) ) ) (deftype scene (art-group) - ((mask-to-clear uint32 :offset-assert 32) - (entity basic :offset-assert 36) - (art-group basic :offset-assert 40) - (anim basic :offset-assert 44) - (parts int32 :offset-assert 48) - (command-list basic :offset-assert 52) - (cut-list basic :offset-assert 56) - (wait-max-time time-frame :offset-assert 64) - (wait-air-time time-frame :offset-assert 72) - (wait-ground-time time-frame :offset-assert 80) - (draw-target basic :offset-assert 88) - (abort basic :offset-assert 92) - (actor basic :offset-assert 96) - (load-point basic :offset-assert 100) - (end-point basic :offset-assert 104) - (borrow basic :offset-assert 108) - (sfx-volume float :offset-assert 112) - (ambient-volume float :offset-assert 116) - (music-volume float :offset-assert 120) - (blackout-end basic :offset-assert 124) - (peaceful basic :offset-assert 128) - (music-delay float :offset-assert 132) - (save basic :offset-assert 136) - (scene-task uint16 :offset-assert 140) + ((mask-to-clear uint32 :offset-assert 32) + (entity string :offset-assert 36) + (art-group string :offset-assert 40) + (anim string :offset-assert 44) + (parts int32 :offset-assert 48) + (command-list basic :offset-assert 52) + (cut-list pair :offset-assert 56) + (wait-max-time time-frame :offset-assert 64) + (wait-air-time time-frame :offset-assert 72) + (wait-ground-time time-frame :offset-assert 80) + (draw-target level-load-info :offset-assert 88) + (abort basic :offset-assert 92) + (actor (array scene-actor) :offset-assert 96) + (load-point string :offset-assert 100) + (end-point string :offset-assert 104) + (borrow basic :offset-assert 108) + (sfx-volume float :offset-assert 112) + (ambient-volume float :offset-assert 116) + (music-volume float :offset-assert 120) + (blackout-end basic :offset-assert 124) + (peaceful basic :offset-assert 128) + (music-delay float :offset-assert 132) + (save basic :offset-assert 136) + (scene-task uint16 :offset-assert 140) ) :method-count-assert 17 :size-assert #x8e :flag-assert #x110000008e (:methods - (scene-method-15 () none 15) - (scene-method-16 () none 16) + (scene-method-15 (_type_ spool-anim) none 15) + (scene-method-16 (_type_) _type_ 16) ) ) + (deftype scene-player (process-drawable) - ((scene-list basic :offset-assert 200) - (scene basic :offset-assert 204) - (scene-index int32 :offset-assert 208) - (anim basic :offset-assert 212) - (next-anim basic :offset-assert 216) - (camera uint64 :offset-assert 224) - (main-entity basic :offset-assert 232) - (wait basic :offset-assert 236) - (old-target-pos transformq :inline :offset-assert 240) - (pre-cut-frame basic :offset-assert 288) - (preload-continue basic :offset-assert 292) - (dma-max uint32 :offset-assert 296) - (gui-id uint32 :offset-assert 300) - (aborted? basic :offset-assert 304) - (scene-start-time time-frame :offset-assert 312) - (targ-speed float :offset-assert 320) - (cur-speed float :offset-assert 324) - (speed-change-time time-frame :offset-assert 328) - (speed-press-time time-frame :offset-assert 336) - (speed-change-speed float :offset-assert 344) - (subtitle-change-time time-frame :offset-assert 352) - (user-sound uint32 4 :offset-assert 360) + ((scene-list (pointer symbol) :offset-assert 200) + (scene scene :offset-assert 204) + (scene-index int32 :offset-assert 208) + (anim spool-anim :offset-assert 212) + (next-anim spool-anim :offset-assert 216) + (camera handle :offset-assert 224) + (main-entity entity-actor :offset-assert 232) + (wait basic :offset-assert 236) + (old-target-pos transformq :inline :offset-assert 240) + (pre-cut-frame basic :offset-assert 288) + (preload-continue string :offset-assert 292) + (dma-max uint32 :offset-assert 296) + (gui-id uint32 :offset-assert 300) + (aborted? symbol :offset-assert 304) + (scene-start-time time-frame :offset-assert 312) + (targ-speed float :offset-assert 320) + (cur-speed float :offset-assert 324) + (speed-change-time time-frame :offset-assert 328) + (speed-press-time time-frame :offset-assert 336) + (speed-change-speed float :offset-assert 344) + (subtitle-change-time time-frame :offset-assert 352) + (user-sound uint32 4 :offset-assert 360) ) :heap-base #x100 :method-count-assert 26 :size-assert #x178 :flag-assert #x1a01000178 (:methods - (scene-player-method-20 () none 20) - (scene-player-method-21 () none 21) - (scene-player-method-22 () none 22) - (scene-player-method-23 () none 23) - (scene-player-method-24 () none 24) - (scene-player-method-25 () none 25) + (wait (symbol) _type_ :state 20) + (release () _type_ :state 21) + (play-anim () _type_ :state 22) + (scene-player-method-23 (_type_ string symbol) none 23) + (scene-player-method-24 (_type_ basic symbol) scene 24) + (scene-player-method-25 (_type_ float) none 25) ) ) -(define *scene-player* (the-as scene-player #f)) +(define *scene-player* (the-as scene-player #f)) diff --git a/goal_src/jak2/engine/util/script.gc b/goal_src/jak2/engine/util/script.gc index fee1ffe9be..4e243e024a 100644 --- a/goal_src/jak2/engine/util/script.gc +++ b/goal_src/jak2/engine/util/script.gc @@ -5,10 +5,13 @@ ;; name in dgo: script ;; dgos: ENGINE, GAME -;; DECOMP BEGINS +(declare-type script-form structure) +(define-extern *script-form* (inline-array script-form)) (with-pp +;; DECOMP BEGINS + (defun command-get-int ((arg0 object) (arg1 int)) (cond ((null? arg0) @@ -570,8 +573,6 @@ (not sv-16) ) -(define-extern *script-form* (inline-array script-form)) - ;; WARN: Using new Jak 2 rtype-of (defmethod eval! script-context ((obj script-context) (arg0 pair)) (let ((s4-0 (the-as object #f))) @@ -1959,15 +1960,11 @@ (set! (-> v1-109 spec) '((return macro (drawable-region-prim)) (function macro (symbol)) (id eval (binteger))) ) - (set! (-> v1-109 func) (lambda ((arg0 script-context)) - "lookup a region by number and return the region-prim." - (let ((gp-0 region-prim-lookup-by-id) - (a0-2 (command-get-int (-> arg0 param 1) 0)) - ) - 0 - (gp-0 a0-2) - ) - ) + (set! (-> v1-109 func) + (lambda ((arg0 script-context)) + "lookup a region by number and return the region-prim." + (region-prim-lookup-by-id (command-get-int (-> arg0 param 1) 0) #f (the-as symbol 0)) + ) ) ) diff --git a/goal_src/jak2/kernel/gkernel-h.gc b/goal_src/jak2/kernel/gkernel-h.gc index a45b48a116..221019f106 100644 --- a/goal_src/jak2/kernel/gkernel-h.gc +++ b/goal_src/jak2/kernel/gkernel-h.gc @@ -287,7 +287,7 @@ (allocated-length int32 :offset-assert 84) ;; ?? - (pad0 uint32 2) + (pad-unknown-0 uint32 2) ;; had to rename this unfortunately, there is a type that uses this same name "vehicle" ;; process heap (heap-base pointer :offset-assert 96) @@ -728,4 +728,4 @@ (defmacro scratchpad-ptr (type &key (offset 0)) "Create a pointer to an object on the scratchpad." `(the-as (pointer ,type) (&+ *fake-scratchpad-data* ,offset)) - ) \ No newline at end of file + ) diff --git a/goal_src/jak2/levels/city/common/ctywide-obs-h.gc b/goal_src/jak2/levels/city/common/ctywide-obs-h.gc index 5e7c096316..44a3065770 100644 --- a/goal_src/jak2/levels/city/common/ctywide-obs-h.gc +++ b/goal_src/jak2/levels/city/common/ctywide-obs-h.gc @@ -7,3 +7,39 @@ ;; DECOMP BEGINS +(deftype city-race-ring-info (structure) + ((pos vector :inline :offset-assert 0) + (angle float :offset 12) + (boost float :offset-assert 16) + (dist float :offset-assert 20) + ) + :method-count-assert 10 + :size-assert #x18 + :flag-assert #xa00000018 + (:methods + (city-race-ring-info-method-9 () none 9) + ) + ) + + +(deftype city-ambush-spot (structure) + ((pos vector :inline :offset-assert 0) + (obj-type uint8 :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x11 + :flag-assert #x900000011 + ) + + +(deftype city-ambush-info (structure) + ((count int16 :offset-assert 0) + (array uint32 :offset-assert 4) + ) + :method-count-assert 10 + :size-assert #x8 + :flag-assert #xa00000008 + (:methods + (city-ambush-info-method-9 () none 9) + ) + ) diff --git a/goal_src/jak2/levels/city/common/nav-graph-h.gc b/goal_src/jak2/levels/city/common/nav-graph-h.gc index be4899aae4..4de3ba0b83 100644 --- a/goal_src/jak2/levels/city/common/nav-graph-h.gc +++ b/goal_src/jak2/levels/city/common/nav-graph-h.gc @@ -23,7 +23,7 @@ ;; DECOMP BEGINS (deftype nav-branch (structure) - ((node nav-node 2 :offset-assert 0) + ((node int32 2 :offset-assert 0) (src-node nav-node :offset 0) (dest-node nav-node :offset 4) (temp-dest-node-id int32 :offset 4) @@ -40,51 +40,51 @@ :size-assert #x10 :flag-assert #x1500000010 (:methods - (nav-branch-method-9 () none 9) - (nav-branch-method-10 () none 10) + (nav-branch-method-9 (_type_) none 9) + (nav-branch-method-10 (_type_ object int) none 10) (nav-branch-method-11 (_type_) float 11) (nav-branch-method-12 (_type_) float 12) (nav-branch-method-13 (_type_) float 13) (user-limit-reached? (_type_) symbol 14) (nav-branch-method-15 (_type_) symbol 15) - (nav-branch-method-16 () none 16) - (nav-branch-method-17 () none 17) - (nav-branch-method-18 () none 18) - (nav-branch-method-19 () none 19) - (nav-branch-method-20 () none 20) + (nav-branch-method-16 (_type_ float) none 16) + (nav-branch-method-17 (_type_ float) none 17) + (nav-branch-method-18 (_type_ float) none 18) + (nav-branch-method-19 (_type_ nav-node) none 19) + (nav-branch-method-20 (_type_ nav-node) none 20) ) ) (deftype nav-node (structure) - ((data uint32 8 :offset-assert 0) - (position vector :inline :offset 0) - (pos-x float :offset 0) - (pos-y float :offset 4) - (pos-z float :offset 8) - (angle uint16 :offset 12) - (id uint16 :offset 14) - (radius uint8 :offset 16) - (branch-count int8 :offset 17) - (flags nav-node-flag-byte :offset 18) - (pad0 int8 1 :offset 19) - (branch-array uint32 :offset 20) - (nav-mesh-id uint32 :offset 24) - (level level :offset 28) + ((data uint32 8 :offset-assert 0) + (position vector :inline :offset 0) + (pos-x float :offset 0) + (pos-y float :offset 4) + (pos-z float :offset 8) + (angle uint16 :offset 12) + (id uint16 :offset 14) + (radius uint8 :offset 16) + (branch-count int8 :offset 17) + (flags nav-node-flag-byte :offset 18) + (pad0 int8 1 :offset 19) + (branch-array (inline-array nav-branch) :offset 20) + (nav-mesh-id uint32 :offset 24) + (level symbol :offset 28) ) :method-count-assert 22 :size-assert #x20 :flag-assert #x1600000020 (:methods - (nav-node-method-9 () none 9) - (nav-node-method-10 () none 10) - (nav-node-method-11 () none 11) - (nav-node-method-12 () none 12) - (nav-node-method-13 () none 13) - (nav-node-method-14 () none 14) - (nav-node-method-15 () none 15) - (nav-node-method-16 () none 16) - (nav-node-method-17 () none 17) + (nav-node-method-9 (_type_) none 9) + (nav-node-method-10 (_type_ symbol string) none 10) + (nav-node-method-11 (_type_ int) none 11) + (nav-node-method-12 (_type_ vector nav-node) none 12) + (nav-node-method-13 (_type_ vector) none 13) + (nav-node-method-14 (_type_ nav-node) none 14) + (nav-node-method-15 (_type_ uint) none 15) + (nav-node-method-16 (_type_ float) none 16) + (nav-node-method-17 (_type_ float) none 17) (get-position (_type_ vector) vector 18) (calc-sine-and-cosine! (_type_ vector) vector 19) (get-angle (_type_) float 20) @@ -169,59 +169,60 @@ (deftype nav-graph (basic) - ((node-count int16 :offset-assert 4) - (branch-count int16 :offset-assert 6) - (node-array (inline-array nav-node) :offset-assert 8) - (branch-array uint32 :offset-assert 12) - (link-count int16 :offset-assert 16) - (pad2 uint16 :offset-assert 18) - (link-array uint32 :offset-assert 20) - (first-node int16 :offset-assert 24) - (pad0 uint16 :offset-assert 26) - (patched basic :offset-assert 28) - (id uint32 :offset-assert 32) - (pad1 uint32 6 :offset-assert 36) + ((node-count int16 :offset-assert 4) + (branch-count int16 :offset-assert 6) + (node-array (inline-array nav-node) :offset-assert 8) + (branch-array (inline-array nav-branch) :offset-assert 12) + (link-count int16 :offset-assert 16) + (pad2 uint16 :offset-assert 18) + (link-array (inline-array nav-graph-link) :offset-assert 20) + (first-node int16 :offset-assert 24) + (pad0 uint16 :offset-assert 26) + (patched symbol :offset-assert 28) + (id uint32 :offset-assert 32) + (pad1 uint32 6 :offset-assert 36) ) :method-count-assert 45 :size-assert #x3c :flag-assert #x2d0000003c (:methods - (nav-graph-method-9 () none 9) - (nav-graph-method-10 () none 10) - (nav-graph-method-11 () none 11) - (nav-graph-method-12 () none 12) - (nav-graph-method-13 () none 13) - (nav-graph-method-14 () none 14) - (nav-graph-method-15 () none 15) - (nav-graph-method-16 () none 16) - (nav-graph-method-17 () none 17) - (nav-graph-method-18 () none 18) - (nav-graph-method-19 () none 19) - (nav-graph-method-20 () none 20) - (nav-graph-method-21 () none 21) - (nav-graph-method-22 () none 22) - (nav-graph-method-23 () none 23) - (nav-graph-method-24 () none 24) - (nav-graph-method-25 () none 25) - (nav-graph-method-26 () none 26) - (nav-graph-method-27 () none 27) - (nav-graph-method-28 () none 28) - (nav-graph-method-29 () none 29) - (nav-graph-method-30 () none 30) - (nav-graph-method-31 () none 31) - (nav-graph-method-32 () none 32) - (nav-graph-method-33 () none 33) - (nav-graph-method-34 () none 34) - (nav-graph-method-35 () none 35) - (nav-graph-method-36 () none 36) - (nav-graph-method-37 () none 37) + (new (symbol type int int int uint) _type_ 0) + (nav-graph-method-9 (_type_) none 9) + (nav-graph-method-10 (_type_ vector int) none 10) + (nav-graph-method-11 (_type_) none 11) + (nav-graph-method-12 (_type_) none 12) + (nav-graph-method-13 (_type_ int int) none 13) + (nav-graph-method-14 (_type_ int int) none 14) + (nav-graph-method-15 (_type_) none 15) + (nav-graph-method-16 (_type_ int) nav-node 16) + (nav-graph-method-17 (_type_ nav-node) none 17) + (nav-graph-method-18 (_type_ nav-node int) none 18) + (nav-graph-method-19 (_type_ int int int int int int) none 19) + (nav-graph-method-20 (_type_ int int) none 20) + (nav-graph-method-21 (_type_) none 21) + (nav-graph-method-22 (_type_ int int) none 22) + (nav-graph-method-23 (_type_ int int) none 23) + (nav-graph-method-24 (_type_ int int) none 24) + (nav-graph-method-25 (_type_ symbol symbol) none 25) + (nav-graph-method-26 (_type_ symbol symbol) none 26) + (nav-graph-method-27 (_type_) none 27) + (nav-graph-method-28 (_type_) none 28) + (nav-graph-method-29 (_type_ symbol) none 29) + (nav-graph-method-30 (_type_ uint) none 30) + (nav-graph-method-31 (_type_ float) none 31) + (nav-graph-method-32 (_type_ float) none 32) + (nav-graph-method-33 (_type_ float) none 33) + (nav-graph-method-34 (_type_ float) none 34) + (nav-graph-method-35 (_type_ int) none 35) + (nav-graph-method-36 (_type_ int) none 36) + (nav-graph-method-37 (_type_ vector) none 37) (nav-graph-method-38 () none 38) - (nav-graph-method-39 () none 39) - (nav-graph-method-40 () none 40) + (nav-graph-method-39 (_type_) none 39) + (nav-graph-method-40 (_type_ int) int 40) (node-at-idx (_type_ int) nav-node 41) - (nav-graph-method-42 () none 42) - (nav-graph-method-43 () none 43) - (nav-graph-method-44 () none 44) + (nav-graph-method-42 (_type_) none 42) + (nav-graph-method-43 (_type_ nav-graph-link string) none 43) + (from-editor () none 44) ) ) @@ -237,9 +238,3 @@ v0-0 ) ) - -0 - - - - diff --git a/goal_src/jak2/levels/city/common/vehicle-h.gc b/goal_src/jak2/levels/city/common/vehicle-h.gc index 85c19246a8..fa8c8cb802 100644 --- a/goal_src/jak2/levels/city/common/vehicle-h.gc +++ b/goal_src/jak2/levels/city/common/vehicle-h.gc @@ -5,5 +5,434 @@ ;; name in dgo: vehicle-h ;; dgos: CWI +;; +++vehicle-controller-flag +(defenum vehicle-controller-flag + :type uint32 + :bitfield #t + (debug) + (draw-marks) + (left-turn) + (on-straightaway) + (do-turn) + (blocking-dest-node) + (attached) + (off-path) + (ignore-others) + (direct-mode) + (recovery-mode) + (no-slowing-for-turns)) +;; ---vehicle-controller-flag + + ;; DECOMP BEGINS +(deftype vehicle-lookup-info (structure) + ((turn-radius meters :offset-assert 0) + (throttle-turning float :offset-assert 4) + (throttle-straight float :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ) + + +(deftype vehicle-control-point (structure) + ((local-pos vector :inline :offset-assert 0) + (normal vector :inline :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) + + +(deftype vehicle-section-info (structure) + ((damage-seg-array uint64 3 :offset-assert 0) + (damage-seg-count int8 :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x19 + :flag-assert #x900000019 + ) + + +(deftype vehicle-seat-info (structure) + ((data uint8 16 :offset-assert 0) + (position vector :inline :offset 0) + (pos-x float :offset 0) + (pos-y float :offset 4) + (pos-z float :offset 8) + (angle int16 :offset 12) + (flags uint8 :offset 14) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + + +(deftype vehicle-explosion-info (joint-exploder-static-params) + ((skel basic :offset-assert 16) + (skel-name basic :offset-assert 20) + (anim int32 :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x1c + :flag-assert #x90000001c + ) + + +(deftype vehicle-grab-rail-info (structure) + ((local-pos vector 2 :inline :offset-assert 0) + (normal vector :inline :offset-assert 32) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) + + +(deftype rigid-body-vehicle-constants (rigid-body-object-constants) + ((flags uint32 :offset-assert 208) + (object-type uint8 :offset-assert 212) + (guard-type uint8 :offset-assert 213) + (max-engine-thrust meters :offset-assert 216) + (inv-max-engine-thrust float :offset-assert 220) + (engine-response-rate float :offset-assert 224) + (engine-intake-factor float :offset-assert 228) + (brake-factor float :offset-assert 232) + (turbo-boost-factor float :offset-assert 236) + (max-xz-speed meters :offset-assert 240) + (ground-probe-distance meters :offset-assert 244) + (ground-probe-offset meters :offset-assert 248) + (cos-ground-effect-angle float :offset-assert 252) + (spring-lift-factor float :offset-assert 256) + (air-steering-factor float :offset-assert 260) + (air-drag-factor float :offset-assert 264) + (steering-fin-angle float :offset-assert 268) + (steering-thruster-factor float :offset-assert 272) + (steering-thruster-max-gain float :offset-assert 276) + (steering-thruster-half-gain-speed meters :offset-assert 280) + (tire-steering-angle float :offset-assert 284) + (tire-friction-factor float :offset-assert 288) + (tire-static-friction float :offset-assert 292) + (tire-static-friction-speed meters :offset-assert 296) + (tire-dynamic-friction float :offset-assert 300) + (tire-dynamic-friction-speed meters :offset-assert 304) + (tire-inv-max-friction-speed float :offset-assert 308) + (airfoil-factor float :offset-assert 312) + (drag-force-factor float :offset-assert 316) + (speed-scrubbing-drag float :offset-assert 320) + (speed-limiting-drag float :offset-assert 324) + (pitch-control-factor float :offset-assert 328) + (roll-control-factor float :offset-assert 332) + (roll-angle float :offset-assert 336) + (jump-thrust-factor float :offset-assert 340) + (buoyancy-factor float :offset-assert 344) + (player-weight float :offset-assert 348) + (player-shift-x meters :offset-assert 352) + (player-shift-z meters :offset-assert 356) + (target-speed-offset meters :offset-assert 360) + (turning-accel meters :offset-assert 364) + (toughness-factor float :offset-assert 368) + (damage-factor float :offset-assert 372) + (camera-string-min-height meters :offset-assert 376) + (camera-string-max-height meters :offset-assert 380) + (camera-string-min-length meters :offset-assert 384) + (camera-string-max-length meters :offset-assert 388) + (camera-min-fov float :offset-assert 392) + (camera-max-fov float :offset-assert 396) + (camera-head-offset float :offset-assert 400) + (camera-foot-offset float :offset-assert 404) + (camera-normal-max-angle-offset float :offset-assert 408) + (camera-air-max-angle-offset float :offset-assert 412) + (camera-max-lookaround-speed float :offset-assert 416) + (seat-count int8 :offset-assert 420) + (section-count int8 :offset-assert 421) + (rider-stance uint8 :offset-assert 422) + (grab-rail-count int8 :offset-assert 423) + (grab-rail-array uint32 :offset-assert 424) + (seat-array vehicle-seat-info 4 :inline :offset-assert 432) + (rider-hand-offset vector 2 :inline :offset-assert 496) + (section-array vehicle-section-info 4 :inline :offset-assert 528) + (section-bike-front vehicle-section-info :inline :offset 528) + (section-bike-rear vehicle-section-info :inline :offset 560) + (section-car-front-left vehicle-section-info :inline :offset 528) + (section-car-rear-left vehicle-section-info :inline :offset 560) + (section-car-front-right vehicle-section-info :inline :offset 592) + (section-car-rear-right vehicle-section-info :inline :offset 624) + (explosion basic :offset-assert 656) + (engine-pitch-scale float :offset-assert 660) + (engine-pitch-offset float :offset-assert 664) + (engine-pitch-mod-amp float :offset-assert 668) + (engine-sound-select int8 :offset-assert 672) + (engine-sound uint128 :offset-assert 688) + (thrust-sound uint128 :offset-assert 704) + (scrape-sound uint128 :offset-assert 720) + (glance-sound uint128 :offset-assert 736) + (impact-sound uint128 :offset-assert 752) + (extra-sound uint128 :offset-assert 768) + (explosion-part int32 :offset-assert 784) + (headlight-count int8 :offset-assert 788) + (taillight-count int8 :offset-assert 789) + (thruster-flame-width meters :offset-assert 792) + (thruster-flame-length meters :offset-assert 796) + (thruster-local-pos vector 2 :inline :offset-assert 800) + (exhaust-local-pos vector 2 :inline :offset-assert 832) + (exhaust-local-dir vector 2 :inline :offset-assert 864) + (smoke-local-pos vector 2 :inline :offset-assert 896) + (smoke-local-vel vector 2 :inline :offset-assert 928) + (headlight-local-pos vector 3 :inline :offset-assert 960) + (taillight-local-pos vector 2 :inline :offset-assert 1008) + (lift-thruster-count int8 :offset-assert 1040) + (roll-thruster-count int8 :offset-assert 1041) + (steering-thruster-count int8 :offset-assert 1042) + (stabilizer-count int8 :offset-assert 1043) + (inv-lift-thruster-count float :offset-assert 1044) + (pad int8 8 :offset-assert 1048) + (lift-thruster-array vector4w-2 2 :inline :offset-assert 1056) + (roll-thruster-array vector4w-2 2 :inline :offset-assert 1120) + (steering-thruster-array vector4w-2 2 :inline :offset-assert 1184) + (stabilizer-array vector4w-2 6 :inline :offset-assert 1248) + (engine-thrust-local-pos vector :inline :offset-assert 1440) + (brake-local-pos vector :inline :offset-assert 1456) + (particle-system-2d basic :offset-assert 1472) + (particle-system-3d basic :offset-assert 1476) + (part-thruster basic :offset-assert 1480) + (part-thruster-scale-x sp-field-init-spec :offset-assert 1484) + (part-thruster-scale-y sp-field-init-spec :offset-assert 1488) + (part-quat quaternion :offset-assert 1492) + (part-vel vector :offset-assert 1496) + (color-option-count int8 :offset-assert 1500) + (color-option-select int8 :offset-assert 1501) + (color-option-array uint32 :offset-assert 1504) + (sample-dir vector :inline :offset-assert 1520) + (sample-time time-frame :offset-assert 1536) + (sample-index int32 :offset-assert 1544) + ) + :method-count-assert 11 + :size-assert #x60c + :flag-assert #xb0000060c + (:methods + (rigid-body-vehicle-constants-method-9 () none 9) + (rigid-body-vehicle-constants-method-10 () none 10) + ) + ) + + +(deftype vehicle-controller (structure) + ((flags vehicle-controller-flag :offset-assert 0) + (traffic symbol :offset-assert 4) + (branch nav-branch :offset-assert 8) + (target-speed-offset meters :offset-assert 12) + (target-speed meters :offset-assert 16) + (choose-branch-callback symbol :offset-assert 20) + (turn-accel meters :offset-assert 24) + (max-turn-speed meters :offset-assert 28) + (path-prev-point vector :inline :offset-assert 32) + (turn-enter-point vector :inline :offset-assert 48) + (turn-exit-point vector :inline :offset-assert 64) + (path-dest-point vector :inline :offset 64) + (turn-enter-dir vector :inline :offset-assert 80) + (turn-exit-dir vector :inline :offset-assert 96) + (dest-circle vector :inline :offset-assert 112) + (target-point vector :inline :offset-assert 128) + ) + :method-count-assert 22 + :size-assert #x90 + :flag-assert #x1600000090 + (:methods + (vehicle-controller-method-9 () none 9) + (vehicle-controller-method-10 () none 10) + (vehicle-controller-method-11 () none 11) + (vehicle-controller-method-12 () none 12) + (vehicle-controller-method-13 () none 13) + (vehicle-controller-method-14 () none 14) + (vehicle-controller-method-15 () none 15) + (vehicle-controller-method-16 () none 16) + (vehicle-controller-method-17 () none 17) + (vehicle-controller-method-18 () none 18) + (vehicle-controller-method-19 () none 19) + (vehicle-controller-method-20 () none 20) + (vehicle-controller-method-21 () none 21) + ) + ) + + +(deftype vehicle-section (structure) + ((damage float :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) + + +(deftype vehicle (rigid-body-object) + ((pad uint32 4 :offset-assert 272) + (controls vehicle-controls :inline :offset-assert 288) + (prev-controls vehicle-controls :inline :offset-assert 304) + (up-dir vector :inline :offset-assert 320) + (jump-time float :offset-assert 336) + (jump-thrust float :offset-assert 340) + (engine-thrust float :offset-assert 344) + (engine-power-factor float :offset-assert 348) + (force-scale float :offset-assert 352) + (target-distance2 meters :offset-assert 356) + (pad0 uint32 :offset-assert 360) + (target-acceleration vector :inline :offset-assert 368) + (impact-pos vector :inline :offset-assert 384) + (lin-acceleration vector :inline :offset-assert 400) + (hit-points float :offset-assert 416) + (damage-factor float :offset-assert 420) + (crash-level int8 :offset-assert 424) + (force-level int8 :offset-assert 425) + (traffic-hash-id int8 :offset-assert 426) + (traffic-priority-id int8 :offset-assert 427) + (power-fluctuation-factor float :offset-assert 428) + (power-level float :offset-assert 432) + (flight-level-index int8 :offset-assert 436) + (flight-level-index-prev int8 :offset-assert 437) + (overlap-player-counter uint8 :offset-assert 438) + (physics-counter uint8 :offset-assert 439) + (flight-level float :offset-assert 440) + (brake-factor float :offset-assert 444) + (cam-speed-interp float :offset-assert 448) + (camera-dist2 float :offset-assert 452) + (player-dist2 float :offset-assert 456) + (bound-radius float :offset-assert 460) + (rider-array int64 4 :offset-assert 464) + (lift-thrust float 2 :offset-assert 496) + (roll-thrust float 2 :offset-assert 504) + (sent-attack-time time-frame :offset-assert 512) + (air-time time-frame :offset-assert 520) + (turn-time time-frame :offset-assert 528) + (crash-time time-frame :offset-assert 536) + (transition-time time-frame :offset-assert 544) + (transition-end-time time-frame :offset-assert 552) + (turbo-boost-time time-frame :offset-assert 560) + (crash-duration uint16 :offset-assert 568) + (turbo-boost-duration uint16 :offset-assert 570) + (turbo-boost-factor float :offset-assert 572) + (crash-impulse float :offset-assert 576) + (water-height float :offset-assert 580) + (lights-factor float :offset-assert 584) + (outgoing-attack-id uint32 :offset-assert 588) + (scrape-sound-id sound-id :offset-assert 592) + (engine-sound-id sound-id :offset-assert 596) + (thrust-sound-id sound-id :offset-assert 600) + (roll-sound-id sound-id :offset-assert 604) + (damage-pop-sound-id sound-id :offset-assert 608) + (damage-zap-sound-id sound-id :offset-assert 612) + (extra-sound-id sound-id :offset-assert 616) + (fog-fade float :offset-assert 620) + (scrape-sound-envelope float :offset-assert 624) + (engine-sound-envelope float :offset-assert 628) + (engine-sound-factor float :offset-assert 632) + (sputter-sound-envelope float :offset-assert 636) + (rudder-sound-envelope float :offset-assert 640) + (fins-sound-envelope float :offset-assert 644) + (exhaust-part-accum basic 2 :offset-assert 648) + (smoke-part-accum basic 2 :offset-assert 656) + (controller vehicle-controller :inline :offset-assert 672) + (section-array vehicle-section 4 :inline :offset-assert 816) + ) + :heap-base #x2f0 + :method-count-assert 144 + :size-assert #x370 + :flag-assert #x9002f00370 + (:methods + (vehicle-method-53 () none 53) + (vehicle-method-54 () none 54) + (vehicle-method-55 () none 55) + (vehicle-method-56 () none 56) + (vehicle-method-57 () none 57) + (vehicle-method-58 () none 58) + (vehicle-method-59 () none 59) + (vehicle-method-60 () none 60) + (vehicle-method-61 () none 61) + (vehicle-method-62 () none 62) + (vehicle-method-63 () none 63) + (vehicle-method-64 () none 64) + (vehicle-method-65 () none 65) + (vehicle-method-66 () none 66) + (vehicle-method-67 () none 67) + (vehicle-method-68 () none 68) + (vehicle-method-69 () none 69) + (vehicle-method-70 () none 70) + (vehicle-method-71 () none 71) + (vehicle-method-72 () none 72) + (vehicle-method-73 () none 73) + (vehicle-method-74 () none 74) + (vehicle-method-75 () none 75) + (vehicle-method-76 () none 76) + (vehicle-method-77 () none 77) + (vehicle-method-78 () none 78) + (vehicle-method-79 () none 79) + (vehicle-method-80 () none 80) + (vehicle-method-81 () none 81) + (vehicle-method-82 () none 82) + (vehicle-method-83 () none 83) + (vehicle-method-84 () none 84) + (vehicle-method-85 () none 85) + (vehicle-method-86 () none 86) + (vehicle-method-87 () none 87) + (vehicle-method-88 () none 88) + (vehicle-method-89 () none 89) + (vehicle-method-90 () none 90) + (vehicle-method-91 () none 91) + (vehicle-method-92 () none 92) + (vehicle-method-93 () none 93) + (vehicle-method-94 () none 94) + (vehicle-method-95 () none 95) + (vehicle-method-96 () none 96) + (vehicle-method-97 () none 97) + (vehicle-method-98 () none 98) + (vehicle-method-99 () none 99) + (vehicle-method-100 () none 100) + (vehicle-method-101 () none 101) + (vehicle-method-102 () none 102) + (vehicle-method-103 () none 103) + (vehicle-method-104 () none 104) + (vehicle-method-105 () none 105) + (vehicle-method-106 () none 106) + (vehicle-method-107 () none 107) + (vehicle-method-108 () none 108) + (vehicle-method-109 () none 109) + (vehicle-method-110 () none 110) + (vehicle-method-111 () none 111) + (vehicle-method-112 () none 112) + (vehicle-method-113 () none 113) + (vehicle-method-114 () none 114) + (vehicle-method-115 () none 115) + (vehicle-method-116 () none 116) + (vehicle-method-117 () none 117) + (vehicle-method-118 () none 118) + (vehicle-method-119 () none 119) + (vehicle-method-120 () none 120) + (vehicle-method-121 () none 121) + (vehicle-method-122 () none 122) + (vehicle-method-123 () none 123) + (vehicle-method-124 () none 124) + (vehicle-method-125 () none 125) + (vehicle-method-126 () none 126) + (vehicle-method-127 () none 127) + (vehicle-method-128 () none 128) + (vehicle-method-129 () none 129) + (vehicle-method-130 () none 130) + (vehicle-method-131 () none 131) + (vehicle-method-132 () none 132) + (vehicle-method-133 () none 133) + (vehicle-method-134 () none 134) + (vehicle-method-135 () none 135) + (vehicle-method-136 () none 136) + (vehicle-method-137 () none 137) + (vehicle-method-138 () none 138) + (vehicle-method-139 () none 139) + (vehicle-method-140 () none 140) + (vehicle-method-141 () none 141) + (vehicle-method-142 () none 142) + (vehicle-method-143 () none 143) + ) + ) diff --git a/scripts/gsrc/update-from-decomp.py b/scripts/gsrc/update-from-decomp.py index bcb1db64ae..85ca3e7a88 100644 --- a/scripts/gsrc/update-from-decomp.py +++ b/scripts/gsrc/update-from-decomp.py @@ -185,7 +185,6 @@ if args.preserve: lines_to_ignore = 0 i = len(final_lines) - 1 while i > 0 and (final_lines[i] == "\n" or final_lines[i] == "0\n"): - print(final_lines[i]) lines_to_ignore = lines_to_ignore + 1 i = i - 1 diff --git a/scripts/gsrc/update-gsrc-via-refs.py b/scripts/gsrc/update-gsrc-via-refs.py index f48cb80c46..701283c6b1 100644 --- a/scripts/gsrc/update-gsrc-via-refs.py +++ b/scripts/gsrc/update-gsrc-via-refs.py @@ -1,6 +1,5 @@ # Updates files in gsrc if they are modified in the reference test folder # Uses git -# TODO - get new untracked files as well import subprocess from git import Repo diff --git a/test/decompiler/reference/jak2/engine/entity/entity_REF.gc b/test/decompiler/reference/jak2/engine/entity/entity_REF.gc index 30caf091c7..6e7eaf5b8d 100644 --- a/test/decompiler/reference/jak2/engine/entity/entity_REF.gc +++ b/test/decompiler/reference/jak2/engine/entity/entity_REF.gc @@ -2625,7 +2625,6 @@ ) ;; 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] @@ -2646,7 +2645,6 @@ (kill! gp-0) ) ) - (none) ) ;; definition (debug) for function dump-entity-remap diff --git a/test/decompiler/reference/jak2/engine/gfx/background/subdivide-h_REF.gc b/test/decompiler/reference/jak2/engine/gfx/background/subdivide-h_REF.gc index 0106268c33..b588e5b330 100644 --- a/test/decompiler/reference/jak2/engine/gfx/background/subdivide-h_REF.gc +++ b/test/decompiler/reference/jak2/engine/gfx/background/subdivide-h_REF.gc @@ -239,30 +239,32 @@ ;; definition of type region-prim-area (deftype region-prim-area (structure) - ((region-prim-list region-prim-list :inline :offset-assert 0) - (pos vector :inline :offset-assert 1296) - (ray vector :inline :offset 1328) - (region-enter-count int32 :offset 1360) - (region-enter-list uint32 320 :offset-assert 1364) - (region-enter-prim-list uint32 320 :offset-assert 2644) - (region-exit-count int32 :offset-assert 3924) - (region-exit-list uint32 320 :offset-assert 3928) - (region-exit-prim-list uint32 320 :offset-assert 5208) - (region-inside-count int32 :offset-assert 6488) - (region-inside-list uint32 320 :offset-assert 6492) - (region-inside-prim-list uint32 320 :offset-assert 7772) - (region-start-count int32 :offset-assert 9052) - (region-start-list uint32 320 :offset-assert 9056) - (region-start-prim-list uint32 320 :offset-assert 10336) + ((region-prim-list region-prim-list :inline :offset-assert 0) + (pos vector :inline :offset-assert 1296) + (unknown-vector-uiyb1 vector :inline :offset-assert 1312) + (ray vector :inline :offset 1328) + (unknown-vector-t3edh vector :inline :offset-assert 1344) + (region-enter-count int32 :offset 1360) + (region-enter-list region-prim-area 320 :offset-assert 1364) + (region-enter-prim-list drawable-region-sphere 320 :offset-assert 2644) + (region-exit-count int32 :offset-assert 3924) + (region-exit-list region-prim-area 320 :offset-assert 3928) + (region-exit-prim-list drawable-region-sphere 320 :offset-assert 5208) + (region-inside-count int32 :offset-assert 6488) + (region-inside-list region-prim-area 320 :offset-assert 6492) + (region-inside-prim-list drawable-region-sphere 320 :offset-assert 7772) + (region-start-count int32 :offset-assert 9052) + (region-start-list region-prim-area 320 :offset-assert 9056) + (region-start-prim-list drawable-region-sphere 320 :offset-assert 10336) ) :method-count-assert 13 :size-assert #x2d60 :flag-assert #xd00002d60 (:methods - (region-prim-area-method-9 () none 9) - (region-prim-area-method-10 () none 10) - (region-prim-area-method-11 () none 11) - (region-prim-area-method-12 () none 12) + (track-entered-region! (_type_ drawable-region-sphere) none 9) + (track-exited-region! (_type_ drawable-region-sphere) none 10) + (track-inside-region! (_type_ drawable-region-sphere) none 11) + (track-start-region! (_type_ drawable-region-sphere) none 12) ) ) @@ -371,7 +373,3 @@ ;; failed to figure out what this is: 0 - - - - diff --git a/test/decompiler/reference/jak2/engine/level/bsp_REF.gc b/test/decompiler/reference/jak2/engine/level/bsp_REF.gc index 465b4371d8..2abec4a786 100644 --- a/test/decompiler/reference/jak2/engine/level/bsp_REF.gc +++ b/test/decompiler/reference/jak2/engine/level/bsp_REF.gc @@ -494,6 +494,11 @@ ;; definition for method 16 of type bsp-header ;; WARN: Return type mismatch int vs none. (defmethod collect-regions bsp-header ((obj bsp-header) (arg0 sphere) (arg1 int) (arg2 region-prim-list)) + "Determines the number of [[drawable]]s in the `obj` that overlap the given `area-of-interest` this number is stored in the `region-list`'s item count + @param area-of-interest The area defined by a sphere that we care about overlaps + @param _count The amount of [[drawable]]s in the object to enumerate through + @param! region-list Stores the overlapping regions and a count for how many were found + @returns none" (let ((s3-0 (-> obj region-trees))) (dotimes (s2-0 (-> s3-0 length)) (collect-regions (-> s3-0 s2-0) arg0 arg1 arg2) 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 357de84b7d..c8d25e9da5 100644 --- a/test/decompiler/reference/jak2/engine/level/region-h_REF.gc +++ b/test/decompiler/reference/jak2/engine/level/region-h_REF.gc @@ -12,7 +12,7 @@ :size-assert #x10 :flag-assert #xa00000010 (:methods - (region-method-9 () none 9) + (region-method-9 (_type_ vector) symbol 9) ) ) @@ -66,8 +66,8 @@ :flag-assert #x1400000020 (:methods (debug-draw-region (_type_ int) none 17) - (drawable-region-prim-method-18 () none 18) - (drawable-region-prim-method-19 () none 19) + (track-region (_type_ region-prim-area) symbol 18) + (within-area? (_type_ region-prim-area) symbol 19) ) ) @@ -94,7 +94,7 @@ :size-assert #x20 :flag-assert #x1300000020 (:methods - (drawable-tree-region-prim-method-17 () none 17) + (drawable-tree-region-prim-method-17 (_type_ vector) symbol 17) (debug-print (_type_ vector object) none 18) ) ) diff --git a/test/decompiler/reference/jak2/engine/level/region_REF.gc b/test/decompiler/reference/jak2/engine/level/region_REF.gc new file mode 100644 index 0000000000..bc8b369437 --- /dev/null +++ b/test/decompiler/reference/jak2/engine/level/region_REF.gc @@ -0,0 +1,752 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition for method 8 of type drawable-region-prim +;; WARN: Return type mismatch int vs drawable-region-prim. +(defmethod mem-usage drawable-region-prim ((obj drawable-region-prim) (arg0 memory-usage-block) (arg1 int)) + (set! (-> arg0 length) (max 50 (-> arg0 length))) + (set! (-> arg0 data 49 name) "region") + (+! (-> arg0 data 49 count) 1) + (let ((v1-6 (asize-of obj))) + (+! (-> arg0 data 49 used) v1-6) + (+! (-> arg0 data 49 total) (logand -16 (+ v1-6 15))) + ) + (mem-usage (-> obj region) arg0 (logior arg1 128)) + (the-as drawable-region-prim 0) + ) + +;; definition for method 8 of type drawable-inline-array-region-prim +;; WARN: Return type mismatch int vs drawable-inline-array-region-prim. +(defmethod mem-usage drawable-inline-array-region-prim ((obj drawable-inline-array-region-prim) (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-region-prim 0) + ) + +;; definition for method 10 of type drawable-tree-region-prim +;; WARN: Return type mismatch int vs none. +(defmethod draw drawable-tree-region-prim ((obj drawable-tree-region-prim) (arg0 drawable-tree-region-prim) (arg1 display-frame)) + 0 + (none) + ) + +;; definition for method 15 of type drawable-tree-region-prim +(defmethod unpack-vis drawable-tree-region-prim ((obj drawable-tree-region-prim) (arg0 (pointer int8)) (arg1 (pointer int8))) + arg1 + ) + +;; definition for method 16 of type drawable-region-prim +;; WARN: Return type mismatch int vs none. +(defmethod collect-regions drawable-region-prim ((obj drawable-region-prim) (area-of-interest sphere) (_count int) (region-list region-prim-list)) + "Determines the number of [[drawable]]s in the `obj` that overlap the given `area-of-interest` this number is stored in the `region-list`'s item count + @param area-of-interest The area defined by a sphere that we care about overlaps + @param _count The amount of [[drawable]]s in the object to enumerate through + @param! region-list Stores the overlapping regions and a count for how many were found + @returns none" + (dotimes (count _count) + (when (spheres-overlap? area-of-interest (the-as sphere (-> obj bsphere))) + (set! (-> region-list items (-> region-list num-items)) obj) + (+! (-> region-list num-items) 1) + ) + (&+! obj 32) + ) + 0 + (none) + ) + +;; definition for method 16 of type drawable-inline-array-region-prim +;; WARN: Return type mismatch int vs none. +(defmethod collect-regions drawable-inline-array-region-prim ((obj drawable-inline-array-region-prim) (arg0 sphere) (arg1 int) (arg2 region-prim-list)) + "Determines the number of [[drawable]]s in the `obj` that overlap the given `area-of-interest` this number is stored in the `region-list`'s item count + @param area-of-interest The area defined by a sphere that we care about overlaps + @param _count The amount of [[drawable]]s in the object to enumerate through + @param! region-list Stores the overlapping regions and a count for how many were found + @returns none" + (collect-regions (the-as drawable-region-prim (-> obj data)) arg0 (-> obj length) arg2) + 0 + (none) + ) + +;; definition for method 16 of type drawable-tree-region-prim +;; WARN: Return type mismatch int vs none. +(defmethod collect-regions drawable-tree-region-prim ((obj drawable-tree-region-prim) (arg0 sphere) (arg1 int) (arg2 region-prim-list)) + "Determines the number of [[drawable]]s in the `obj` that overlap the given `area-of-interest` this number is stored in the `region-list`'s item count + @param area-of-interest The area defined by a sphere that we care about overlaps + @param _count The amount of [[drawable]]s in the object to enumerate through + @param! region-list Stores the overlapping regions and a count for how many were found + @returns none" + (collect-regions (-> obj data2 0) arg0 (-> obj length) arg2) + 0 + (none) + ) + +;; definition for method 17 of type drawable-region-prim +;; WARN: Return type mismatch int vs none. +(defmethod debug-draw-region drawable-region-prim ((obj drawable-region-prim) (arg0 int)) + (local-vars (sv-32 vector2h) (sv-36 vector)) + (set! sv-32 (new 'stack 'vector2h)) + (set! sv-36 (-> obj bsphere)) + (add-debug-x #t (bucket-id debug-no-zbuf1) sv-36 (new 'static 'rgba :r #xff :g #xff :a #x80)) + (when (nonzero? (-> obj region)) + (let ((s5-0 add-debug-text-3d) + (s4-0 #t) + (s3-0 318) + ) + (format (clear *temp-string*) "region-~D~%" (-> obj region id)) + (s5-0 s4-0 (the-as bucket-id s3-0) *temp-string* sv-36 (font-color #dadada) sv-32) + ) + (set! (-> sv-32 y) (the-as int (+ (-> sv-32 y) 8))) + (let ((s5-1 (-> obj region on-enter))) + (when s5-1 + (let ((s4-1 add-debug-text-3d) + (s3-1 #t) + (s2-1 318) + ) + (format (clear *temp-string*) "(on-enter ~S)" s5-1) + (s4-1 s3-1 (the-as bucket-id s2-1) *temp-string* sv-36 (font-color #dadada) sv-32) + ) + (set! (-> sv-32 y) (the-as int (+ (-> sv-32 y) 8))) + ) + ) + (let ((s5-2 (-> obj region on-inside))) + (when s5-2 + (let ((s4-2 add-debug-text-3d) + (s3-2 #t) + (s2-2 318) + ) + (format (clear *temp-string*) "(on-inside ~S)" s5-2) + (s4-2 s3-2 (the-as bucket-id s2-2) *temp-string* sv-36 (font-color #dadada) sv-32) + ) + (set! (-> sv-32 y) (the-as int (+ (-> sv-32 y) 8))) + ) + ) + (let ((gp-1 (-> obj region on-exit))) + (when gp-1 + (let ((s5-3 add-debug-text-3d) + (s4-3 #t) + (s3-3 318) + ) + (format (clear *temp-string*) "(on-exit ~S)" gp-1) + (s5-3 s4-3 (the-as bucket-id s3-3) *temp-string* sv-36 (font-color #dadada) sv-32) + ) + (set! (-> sv-32 y) (the-as int (+ (-> sv-32 y) 8))) + ) + ) + ) + 0 + (none) + ) + +;; definition for method 18 of type drawable-region-prim +(defmethod track-region drawable-region-prim ((obj drawable-region-prim) (arg0 region-prim-area)) + "TODO" + #f + ) + +;; definition for method 19 of type drawable-region-prim +(defmethod within-area? drawable-region-prim ((obj drawable-region-prim) (arg0 region-prim-area)) + "@returns Whether or not the object overlaps with the provided [[region-prim-area]]'s extent" + #f + ) + +;; definition for method 9 of type region-prim-area +;; WARN: Return type mismatch int vs none. +;; WARN: Function (method 9 region-prim-area) has a return type of none, but the expression builder found a return statement. +(defmethod track-entered-region! region-prim-area ((obj region-prim-area) (region-sphere drawable-region-sphere)) + "Enumerates through the objects `region-enter-list`, if we find the provided `region`, do nothing and exit + otherwise, add the [[drawable-region-sphere]] to `region-enter-prim-list` and increment `region-enter-count` + + @param region-sphere Defines the region in question + @returns nothing" + (let ((regions-entered (-> obj region-enter-count))) + (let ((region (-> region-sphere region))) + (countdown (idx regions-entered) + (if (= (-> obj region-enter-list idx) region) + (return #f) + ) + ) + (set! (-> obj region-enter-list regions-entered) (the-as region-prim-area region)) + ) + (set! (-> obj region-enter-prim-list regions-entered) region-sphere) + (set! (-> obj region-enter-count) (+ regions-entered 1)) + ) + 0 + (none) + ) + +;; definition for method 10 of type region-prim-area +;; WARN: Return type mismatch int vs none. +;; WARN: Function (method 10 region-prim-area) has a return type of none, but the expression builder found a return statement. +(defmethod track-exited-region! region-prim-area ((obj region-prim-area) (arg0 drawable-region-sphere)) + "Enumerates through the objects `region-exit-list`, if we find the provided `region`, do nothing and exit + otherwise, add the [[drawable-region-sphere]] to `region-exit-prim-list` and increment `region-exit-count` + + @param region-sphere Defines the region in question + @returns nothing" + (let ((regions-exited (-> obj region-exit-count))) + (let ((region (-> arg0 region))) + (countdown (idx regions-exited) + (if (= (-> obj region-exit-list idx) region) + (return #f) + ) + ) + (set! (-> obj region-exit-list regions-exited) (the-as region-prim-area region)) + ) + (set! (-> obj region-exit-prim-list regions-exited) arg0) + (set! (-> obj region-exit-count) (+ regions-exited 1)) + ) + 0 + (none) + ) + +;; definition for method 11 of type region-prim-area +;; WARN: Return type mismatch int vs none. +;; WARN: Function (method 11 region-prim-area) has a return type of none, but the expression builder found a return statement. +(defmethod track-inside-region! region-prim-area ((obj region-prim-area) (arg0 drawable-region-sphere)) + "Enumerates through the objects `region-inside-list`, if we find the provided `region`, do nothing and exit + otherwise, add the [[drawable-region-sphere]] to `region-inside-prim-list` and increment `region-inside-count` + + @param region-sphere Defines the region in question + @returns nothing" + (let ((regions-inside (-> obj region-inside-count))) + (let ((region (-> arg0 region))) + (countdown (idx regions-inside) + (if (= (-> obj region-inside-list idx) region) + (return #f) + ) + ) + (set! (-> obj region-inside-list regions-inside) (the-as region-prim-area region)) + ) + (set! (-> obj region-inside-prim-list regions-inside) arg0) + (set! (-> obj region-inside-count) (+ regions-inside 1)) + ) + 0 + (none) + ) + +;; definition for method 12 of type region-prim-area +;; WARN: Return type mismatch int vs none. +;; WARN: Function (method 12 region-prim-area) has a return type of none, but the expression builder found a return statement. +(defmethod track-start-region! region-prim-area ((obj region-prim-area) (arg0 drawable-region-sphere)) + "Enumerates through the objects `region-start-list`, if we find the provided `region`, do nothing and exit + otherwise, add the [[drawable-region-sphere]] to `region-start-prim-list` and increment `region-start-count` + + @param region-sphere Defines the region in question + @returns nothing" + (let ((regions-started (-> obj region-start-count))) + (let ((region (-> arg0 region))) + (countdown (idx regions-started) + (if (= (-> obj region-start-list idx) region) + (return #f) + ) + ) + (set! (-> obj region-start-list regions-started) (the-as region-prim-area region)) + ) + (set! (-> obj region-start-prim-list regions-started) arg0) + (set! (-> obj region-start-count) (+ regions-started 1)) + ) + 0 + (none) + ) + +;; definition for method 17 of type drawable-region-sphere +;; WARN: Return type mismatch int vs none. +(defmethod debug-draw-region drawable-region-sphere ((obj drawable-region-sphere) (arg0 int)) + (let ((t9-0 (method-of-type drawable-region-prim debug-draw-region))) + (t9-0 obj arg0) + ) + (let ((a2-0 (-> obj bsphere))) + (add-debug-sphere #t (bucket-id debug2) a2-0 (-> obj bsphere w) (new 'static 'rgba :r #xff :a #x80)) + ) + 0 + (none) + ) + +;; definition for method 18 of type drawable-region-sphere +(defmethod track-region drawable-region-sphere ((obj drawable-region-sphere) (area region-prim-area)) + "TODO" + (-> obj region) + (let ((area-of-interest (-> obj bsphere))) + (if (< 0.0 (ray-sphere-intersect (-> area pos) (-> area ray) area-of-interest (-> area-of-interest w))) + (track-entered-region! area obj) + ) + (if (< 0.0 (ray-sphere-intersect + (-> area unknown-vector-uiyb1) + (-> area unknown-vector-t3edh) + area-of-interest + (-> area-of-interest w) + ) + ) + (track-exited-region! area obj) + ) + (if (spheres-overlap? (the-as sphere (-> area pos)) (the-as sphere area-of-interest)) + (track-start-region! area obj) + ) + (when (spheres-overlap? (the-as sphere (-> area unknown-vector-uiyb1)) (the-as sphere area-of-interest)) + (track-inside-region! area obj) + #t + ) + ) + ) + +;; definition for method 19 of type drawable-region-sphere +(defmethod within-area? drawable-region-sphere ((obj drawable-region-sphere) (area region-prim-area)) + "@returns Whether or not the object overlaps with the provided [[region-prim-area]]'s extent" + (spheres-overlap? (the-as sphere (-> area pos)) (the-as sphere (-> obj bsphere))) + ) + +;; definition for method 17 of type drawable-region-face +;; WARN: Return type mismatch int vs none. +(defmethod debug-draw-region drawable-region-face ((obj drawable-region-face) (arg0 int)) + (when (zero? arg0) + (let ((t9-0 (method-of-type drawable-region-prim debug-draw-region))) + (t9-0 obj arg0) + ) + ) + (let ((s5-0 (-> obj bsphere))) + (add-debug-vector + #t + (bucket-id debug-no-zbuf1) + s5-0 + (-> obj data normal) + (meters 2) + (new 'static 'rgba :r #xff :g #xff :a #x80) + ) + (add-debug-sphere #t (bucket-id debug2) s5-0 (-> obj bsphere w) (new 'static 'rgba :r #xff :a #x30)) + ) + (add-debug-bound + 324 + (the-as transform (-> obj data points)) + (the-as int (-> obj data num-points)) + (new 'static 'rgba :r #xff :g #xff :a #x80) + (new 'static 'rgba :r #xff :a #x80) + 0 + ) + 0 + (none) + ) + +;; definition for method 18 of type drawable-region-face +(defmethod track-region drawable-region-face ((obj drawable-region-face) (arg0 region-prim-area)) + "TODO" + (local-vars (sv-48 vector) (sv-52 vector) (sv-56 object)) + (-> obj region) + (let* ((s4-0 (-> obj data)) + (v1-1 (-> s4-0 normal)) + (a0-3 (>= 0.0 (- (vector-dot (-> arg0 pos) v1-1) (-> v1-1 w)))) + (s3-0 (>= 0.0 (- (vector-dot (-> arg0 unknown-vector-uiyb1) v1-1) (-> v1-1 w)))) + ) + (when (!= a0-3 s3-0) + (when (nonzero? (-> s4-0 num-points)) + (set! sv-48 (new 'stack-no-clear 'vector)) + (set! sv-52 (new 'stack-no-clear 'vector)) + (set! sv-56 (the-as (inline-array vector) (-> s4-0 points))) + (ray-plane-intersect + sv-48 + sv-52 + (-> arg0 pos) + (-> arg0 ray) + (-> (the-as (inline-array vector) sv-56) 0) + (-> (the-as (inline-array vector) sv-56) 1) + (-> (the-as (inline-array vector) sv-56) 2) + ) + (let ((s4-1 (-> s4-0 num-points)) + (s2-0 0) + (s1-0 (vector-negate! (new 'stack-no-clear 'vector) sv-52)) + ) + (while (< (+ s2-0 2) (the-as int s4-1)) + (if (the-as + (inline-array vector) + (or (point-in-triangle-cross + sv-48 + sv-52 + (-> (the-as (inline-array vector) sv-56) 0) + (-> (the-as (inline-array vector) sv-56) 1) + (-> (the-as (inline-array vector) sv-56) 2) + ) + (the-as (inline-array vector) (point-in-triangle-cross + sv-48 + s1-0 + (-> (the-as (inline-array vector) sv-56) 0) + (-> (the-as (inline-array vector) sv-56) 1) + (-> (the-as (inline-array vector) sv-56) 2) + ) + ) + ) + ) + (goto cfg-17) + ) + (+! s2-0 1) + (set! sv-56 (-> (the-as (inline-array vector) sv-56) 1)) + ) + ) + (set! s3-0 s3-0) + (goto cfg-20) + ) + (label cfg-17) + (if s3-0 + (track-entered-region! arg0 (the-as drawable-region-sphere obj)) + (track-exited-region! arg0 (the-as drawable-region-sphere obj)) + ) + ) + (label cfg-20) + s3-0 + ) + ) + +;; definition for method 17 of type drawable-region-volume +;; WARN: Return type mismatch int vs none. +(defmethod debug-draw-region drawable-region-volume ((obj drawable-region-volume) (arg0 int)) + (let ((t9-0 (method-of-type drawable-region-prim debug-draw-region))) + (t9-0 obj arg0) + ) + (let* ((s5-0 (-> obj faces length)) + (s4-0 0) + (a0-3 (the-as object (+ (+ (* s4-0 32) 16) (the-as int (-> obj faces))))) + ) + (while (< s4-0 s5-0) + (debug-draw-region (the-as drawable-region-face a0-3) 1) + (+! s4-0 1) + (set! a0-3 (+ (+ (* s4-0 32) 16) (the-as int (-> obj faces)))) + ) + ) + 0 + (none) + ) + +;; definition for method 18 of type drawable-region-volume +(defmethod track-region drawable-region-volume ((obj drawable-region-volume) (area region-prim-area)) + "TODO" + (if (within-area? obj area) + (track-start-region! area (the-as drawable-region-sphere obj)) + ) + (let* ((s4-0 (-> obj faces length)) + (s3-0 0) + (a0-4 (the-as object (+ (+ (* s3-0 32) 16) (the-as int (-> obj faces))))) + ) + (while (< s3-0 s4-0) + (if (not (track-region (the-as drawable-region-face a0-4) area)) + (return #f) + ) + (+! s3-0 1) + (set! a0-4 (+ (+ (* s3-0 32) 16) (the-as int (-> obj faces)))) + ) + ) + (track-inside-region! area (the-as drawable-region-sphere obj)) + #t + ) + +;; definition for method 19 of type drawable-region-volume +(defmethod within-area? drawable-region-volume ((obj drawable-region-volume) (arg0 region-prim-area)) + "@returns Whether or not the object overlaps with the provided [[region-prim-area]]'s extent" + (let* ((v1-1 (-> obj faces length)) + (a2-0 0) + (a3-2 (the-as object (+ (+ (* a2-0 32) 16) (the-as int (-> obj faces))))) + ) + (while (< a2-0 v1-1) + (let ((a3-4 (-> (the-as drawable-region-face a3-2) data normal))) + (if (< 0.0 (- (vector-dot (-> arg0 pos) a3-4) (-> a3-4 w))) + (return #f) + ) + ) + (+! a2-0 1) + (set! a3-2 (+ (+ (* a2-0 32) 16) (the-as int (-> obj faces)))) + ) + ) + #t + ) + +;; definition for method 17 of type drawable-tree-region-prim +(defmethod drawable-tree-region-prim-method-17 drawable-tree-region-prim ((obj drawable-tree-region-prim) (arg0 vector)) + (sphere<-vector+r! (the-as sphere (-> (the-as region-prim-area #x70000000) pos)) arg0 0.0) + (let* ((s5-0 (-> obj data2 (+ (-> obj length) -1) length)) + (s4-0 0) + (a0-8 (the-as object (+ (+ (* s4-0 32) 32) (the-as int (-> obj data2 (+ (-> obj length) -1)))))) + ) + (while (< s4-0 s5-0) + (if (within-area? (the-as drawable-region-prim a0-8) (the-as region-prim-area (+ #x70000000 0))) + (return #t) + ) + (+! s4-0 1) + (set! a0-8 (+ (+ (* s4-0 32) 32) (the-as int (-> obj data2 (+ (-> obj length) -1))))) + ) + ) + #f + ) + +;; definition for method 9 of type region +;; INFO: Used lq/sq +;; WARN: Return type mismatch int vs symbol. +(defmethod region-method-9 region ((obj region) (arg0 vector)) + (local-vars (sv-16 int) (sv-32 int)) + (sphere<-vector+r! (the-as sphere (-> (the-as region-prim-area #x70000000) pos)) arg0 0.0) + (dotimes (s5-0 (-> *level* length)) + (let ((s4-0 (-> *level* level s5-0))) + (when (= (-> s4-0 status) 'active) + (when (nonzero? (-> s4-0 bsp region-trees)) + (let* ((s3-0 (-> s4-0 bsp region-trees length)) + (s2-0 0) + (s1-0 (-> s4-0 bsp region-trees s2-0)) + ) + (while (< s2-0 s3-0) + (let ((s0-0 (-> s1-0 data2 (+ (-> s1-0 length) -1) length))) + (set! sv-16 0) + (set! sv-32 (+ (+ (* sv-16 32) 32) (the-as int (-> s1-0 data2 (+ (-> s1-0 length) -1))))) + (while (< sv-16 s0-0) + (if (and (= (-> (the-as drawable-region-prim sv-32) region) obj) + (within-area? + (the-as drawable-region-prim sv-32) + (the-as region-prim-area (-> (the-as region-prim-area #x70000000) region-prim-list)) + ) + ) + (return (the-as symbol sv-32)) + ) + (set! sv-16 (+ sv-16 1)) + (set! sv-32 (+ (+ (* sv-16 32) 32) (the-as int (-> s1-0 data2 (+ (-> s1-0 length) -1))))) + ) + ) + (+! s2-0 1) + (set! s1-0 (-> s4-0 bsp region-trees s2-0)) + ) + ) + ) + ) + ) + ) + (the-as symbol #f) + ) + +;; definition for method 18 of type drawable-tree-region-prim +;; WARN: Return type mismatch int vs none. +(defmethod debug-print drawable-tree-region-prim ((obj drawable-tree-region-prim) (arg0 vector) (arg1 object)) + (sphere<-vector+r! (the-as sphere (+ 1296 #x70000000)) arg0 0.0) + (let* ((s4-0 (-> obj data2 (+ (-> obj length) -1) length)) + (s3-0 0) + (s2-0 (the-as object (+ (+ (* s3-0 32) 32) (the-as int (-> obj data2 (+ (-> obj length) -1)))))) + ) + (while (< s3-0 s4-0) + (if (within-area? (the-as drawable-region-prim s2-0) (the-as region-prim-area (+ #x70000000 0))) + (format + arg1 + " splitbox-~D ~A~%" + (-> (the-as drawable-region-prim s2-0) id) + (the-as drawable-region-prim s2-0) + ) + ) + (+! s3-0 1) + (set! s2-0 (+ (+ (* s3-0 32) 32) (the-as int (-> obj data2 (+ (-> obj length) -1))))) + ) + ) + 0 + (none) + ) + +;; definition for function region-tree-execute +;; WARN: Return type mismatch int vs none. +(defun region-tree-execute ((arg0 symbol) (arg1 vector) (arg2 vector)) + (local-vars (sv-32 vector)) + (with-pp + (set! sv-32 (vector-average! (new 'stack-no-clear 'vector) arg1 arg2)) + (set! (-> sv-32 w) (* 0.5 (vector-vector-distance arg1 arg2))) + (set! (-> (the-as region-prim-area #x70000000) region-prim-list num-items) 0) + (set! (-> (the-as region-prim-area #x70000000) region-enter-count) 0) + (set! (-> (the-as region-prim-area #x70000000) region-exit-count) 0) + (set! (-> (the-as region-prim-area #x70000000) region-inside-count) 0) + (set! (-> (the-as region-prim-area #x70000000) region-start-count) 0) + (sphere<-vector+r! (the-as sphere (+ 1296 #x70000000)) arg1 0.0) + (sphere<-vector+r! (the-as sphere (+ 1312 #x70000000)) arg2 0.0) + (vector-! (the-as vector (+ 1328 #x70000000)) arg2 arg1) + (vector-! (the-as vector (+ 1344 #x70000000)) arg1 arg2) + (dotimes (s5-1 (-> *level* length)) + (let ((v1-17 (-> *level* level s5-1))) + (when (= (-> v1-17 status) 'active) + (let ((s4-1 (-> v1-17 bsp region-trees))) + (when (nonzero? s4-1) + (let* ((s3-0 (-> s4-1 length)) + (s2-0 0) + (a0-14 (-> s4-1 s2-0)) + ) + (while (< s2-0 s3-0) + (if (= (-> a0-14 name) arg0) + (collect-regions a0-14 (the-as sphere sv-32) 0 (the-as region-prim-list (+ #x70000000 0))) + ) + (+! s2-0 1) + (set! a0-14 (-> s4-1 s2-0)) + ) + ) + ) + ) + ) + ) + ) + (countdown (gp-1 (-> (the-as region-prim-area #x70000000) region-prim-list num-items)) + (track-region + (-> (the-as region-prim-area (+ (* gp-1 4) #x70000000)) region-prim-list items 0) + (the-as region-prim-area (-> (the-as region-prim-area #x70000000) region-prim-list)) + ) + ) + (let ((gp-2 (-> (the-as region-prim-area #x70000000) region-enter-count))) + (while (begin (label cfg-22) (nonzero? gp-2)) + (+! gp-2 -1) + (let* ((a2-5 (-> (the-as region-prim-area (+ (* gp-2 4) #x70000000)) region-enter-list 0)) + (s5-2 (-> a2-5 region-prim-list items 0)) + ) + (when s5-2 + (countdown (v1-47 (-> (the-as region-prim-area #x70000000) region-start-count)) + (if (= a2-5 (-> (the-as region-prim-area #x70000000) region-start-list v1-47)) + (goto cfg-22) + ) + ) + (eval! + (new + 'stack + 'script-context + (the-as basic a2-5) + pp + (-> (the-as region-prim-area (+ (* gp-2 4) #x70000000)) region-enter-prim-list 0 bsphere) + ) + (the-as pair s5-2) + ) + ) + ) + ) + ) + (let ((gp-3 (-> (the-as region-prim-area #x70000000) region-exit-count))) + (while (begin (label cfg-31) (nonzero? gp-3)) + (+! gp-3 -1) + (let* ((a2-6 (-> (the-as region-prim-area (+ (* gp-3 4) #x70000000)) region-exit-list 0)) + (s5-3 (-> a2-6 region-prim-list items 2)) + ) + (when s5-3 + (countdown (v1-64 (-> (the-as region-prim-area #x70000000) region-inside-count)) + (if (= a2-6 (-> (the-as region-prim-area (+ (* v1-64 4) #x70000000)) region-inside-list 0)) + (goto cfg-31) + ) + ) + (eval! + (new + 'stack + 'script-context + (the-as basic a2-6) + pp + (-> (the-as region-prim-area (+ (* gp-3 4) #x70000000)) region-exit-prim-list 0 bsphere) + ) + (the-as pair s5-3) + ) + ) + ) + ) + ) + (countdown (gp-4 (-> (the-as region-prim-area #x70000000) region-inside-count)) + (let* ((a2-7 (-> (the-as region-prim-area (+ (* gp-4 4) #x70000000)) region-inside-list 0)) + (s5-4 (-> a2-7 region-prim-list items 1)) + ) + (if s5-4 + (eval! + (new + 'stack + 'script-context + (the-as basic a2-7) + pp + (-> (the-as region-prim-area (+ (* gp-4 4) #x70000000)) region-inside-prim-list 0 bsphere) + ) + (the-as pair s5-4) + ) + ) + ) + ) + 0 + (none) + ) + ) + +;; definition for function region-execute +;; INFO: Used lq/sq +;; WARN: Return type mismatch int vs none. +(defun region-execute () + (set! (-> *level* camera-pos 1 quad) (-> *level* camera-pos 0 quad)) + (set! (-> *level* camera-pos 0 quad) (-> (camera-pos) quad)) + (set! (-> *level* target-pos 1 quad) (-> *level* target-pos 0 quad)) + (set! (-> *level* target-pos 0 quad) (-> (target-pos 0) quad)) + (when (and *execute-regions* (-> *setting-control* user-current region-mode) (not (paused?))) + (region-tree-execute 'camera (-> *level* camera-pos 1) (the-as vector (-> *level* camera-pos))) + (region-tree-execute 'target (-> *level* target-pos 1) (the-as vector (-> *level* target-pos))) + ) + 0 + (none) + ) + +;; definition for function region-prim-lookup-by-id +;; WARN: Return type mismatch int vs drawable-region-prim. +(defun region-prim-lookup-by-id ((arg0 int) (arg1 symbol) (arg2 symbol)) + (let ((v1-0 -1)) + (dotimes (a3-0 (-> *level* length)) + (let ((t0-3 (-> *level* level a3-0))) + (when (= (-> t0-3 status) 'active) + (when (nonzero? (-> t0-3 bsp region-trees)) + (let* ((t1-8 (-> t0-3 bsp region-trees length)) + (t2-1 0) + (t3-2 (-> t0-3 bsp region-trees t2-1)) + ) + (while (< t2-1 t1-8) + (when (or (not arg1) (= (-> t3-2 name) arg1)) + (let* ((t4-10 (-> t3-2 data2 (+ (-> t3-2 length) -1) length)) + (t5-0 0) + (t6-2 (the-as object (+ (+ (* t5-0 32) 32) (the-as int (-> t3-2 data2 (+ (-> t3-2 length) -1)))))) + ) + (while (< t5-0 t4-10) + (when (= (-> (the-as drawable-region-prim t6-2) region id) arg0) + (+! v1-0 1) + (if (= v1-0 arg2) + (return (the-as drawable-region-prim t6-2)) + ) + ) + (+! t5-0 1) + (set! t6-2 (+ (+ (* t5-0 32) 32) (the-as int (-> t3-2 data2 (+ (-> t3-2 length) -1))))) + ) + ) + ) + (+! t2-1 1) + (set! t3-2 (-> t0-3 bsp region-trees t2-1)) + ) + ) + ) + ) + ) + ) + ) + (the-as drawable-region-prim #f) + ) + +;; definition for function region-lookup-by-id +(defun region-lookup-by-id ((arg0 int)) + (dotimes (v1-0 (-> *level* length)) + (let ((a1-3 (-> *level* level v1-0))) + (when (= (-> a1-3 status) 'active) + (when (nonzero? (-> a1-3 bsp region-array)) + (let* ((a2-8 (-> a1-3 bsp region-array length)) + (a3-1 0) + (t0-2 (-> a1-3 bsp region-array data a3-1)) + ) + (while (< a3-1 a2-8) + (if (= (-> t0-2 id) arg0) + (return t0-2) + ) + (+! a3-1 1) + (set! t0-2 (-> a1-3 bsp region-array data a3-1)) + ) + ) + ) + ) + ) + ) + (the-as region #f) + ) diff --git a/test/decompiler/reference/jak2/engine/nav/nav-mesh-h_REF.gc b/test/decompiler/reference/jak2/engine/nav/nav-mesh-h_REF.gc index d81d50f721..b02fd9ead4 100644 --- a/test/decompiler/reference/jak2/engine/nav/nav-mesh-h_REF.gc +++ b/test/decompiler/reference/jak2/engine/nav/nav-mesh-h_REF.gc @@ -396,7 +396,7 @@ (user-list engine :offset-assert 36) (next-nav-mesh surface :offset-assert 40) (prev-nav-mesh surface :offset-assert 44) - (bounds sphere :inline :offset-assert 48) + (bounds vector :inline :offset-assert 48) (origin vector :inline :offset 48) (entity entity :offset-assert 64) (link-array (array nav-mesh-link) :offset-assert 68) diff --git a/test/decompiler/reference/jak2/engine/physics/rigid-body-h_REF.gc b/test/decompiler/reference/jak2/engine/physics/rigid-body-h_REF.gc new file mode 100644 index 0000000000..1f1bbd1248 --- /dev/null +++ b/test/decompiler/reference/jak2/engine/physics/rigid-body-h_REF.gc @@ -0,0 +1,600 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type rigid-body-info +(deftype rigid-body-info (structure) + ((mass float :offset-assert 0) + (inv-mass float :offset-assert 4) + (linear-damping float :offset-assert 8) + (angular-damping float :offset-assert 12) + (bounce-factor float :offset-assert 16) + (friction-factor float :offset-assert 20) + (bounce-mult-factor float :offset-assert 24) + (cm-offset-joint vector :inline :offset-assert 32) + (inv-inertial-tensor matrix :inline :offset-assert 48) + (inertial-tensor matrix :inline :offset-assert 112) + (inertial-tensor-box meters 3 :offset-assert 176) + ) + :method-count-assert 10 + :size-assert #xbc + :flag-assert #xa000000bc + (:methods + (rigid-body-info-method-9 (_type_) none 9) + ) + ) + +;; definition for method 3 of type rigid-body-info +(defmethod inspect rigid-body-info ((obj rigid-body-info)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'rigid-body-info) + (format #t "~1Tmass: ~f~%" (-> obj mass)) + (format #t "~1Tinv-mass: ~f~%" (-> obj inv-mass)) + (format #t "~1Tlinear-damping: ~f~%" (-> obj linear-damping)) + (format #t "~1Tangular-damping: ~f~%" (-> obj angular-damping)) + (format #t "~1Tbounce-factor: ~f~%" (-> obj bounce-factor)) + (format #t "~1Tfriction-factor: ~f~%" (-> obj friction-factor)) + (format #t "~1Tbounce-mult-factor: ~f~%" (-> obj bounce-mult-factor)) + (format #t "~1Tcm-offset-joint: ~`vector`P~%" (-> obj cm-offset-joint)) + (format #t "~1Tinv-inertial-tensor: #~%" (-> obj inv-inertial-tensor)) + (format #t "~1Tinertial-tensor: #~%" (-> obj inertial-tensor)) + (format #t "~1Tinertial-tensor-box[3] @ #x~X~%" (-> obj inertial-tensor-box)) + (label cfg-4) + obj + ) + +;; definition of type rigid-body-object-extra-info +(deftype rigid-body-object-extra-info (structure) + ((max-time-step float :offset-assert 0) + (gravity meters :offset-assert 4) + (idle-distance meters :offset-assert 8) + (attack-force-scale float :offset-assert 12) + ) + :pack-me + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +;; definition for method 3 of type rigid-body-object-extra-info +(defmethod inspect rigid-body-object-extra-info ((obj rigid-body-object-extra-info)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'rigid-body-object-extra-info) + (format #t "~1Tmax-time-step: ~f~%" (-> obj max-time-step)) + (format #t "~1Tgravity: (meters ~m)~%" (-> obj gravity)) + (format #t "~1Tidle-distance: (meters ~m)~%" (-> obj idle-distance)) + (format #t "~1Tattack-force-scale: ~f~%" (-> obj attack-force-scale)) + (label cfg-4) + obj + ) + +;; definition of type rigid-body-object-constants +(deftype rigid-body-object-constants (structure) + ((info rigid-body-info :inline :offset-assert 0) + (mass float :offset 0) + (inv-mass float :offset 4) + (cm-joint-x meters :offset 32) + (cm-joint-y meters :offset 36) + (cm-joint-z meters :offset 40) + (linear-damping float :offset 8) + (angular-damping float :offset 12) + (bounce-factor float :offset 16) + (friction-factor float :offset 20) + (inertial-tensor-x meters :offset 176) + (inertial-tensor-y meters :offset 180) + (inertial-tensor-z meters :offset 184) + (extra rigid-body-object-extra-info :inline :offset-assert 188) + (max-time-step float :offset 188) + (gravity meters :offset 192) + (idle-distance meters :offset 196) + (attack-force-scale float :offset 200) + (name basic :offset-assert 204) + ) + :method-count-assert 9 + :size-assert #xd0 + :flag-assert #x9000000d0 + ) + +;; definition for method 3 of type rigid-body-object-constants +(defmethod inspect rigid-body-object-constants ((obj rigid-body-object-constants)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'rigid-body-object-constants) + (format #t "~1Tinfo: #~%" (&-> obj mass)) + (format #t "~1Tmass: ~f~%" (-> obj mass)) + (format #t "~1Tinv-mass: ~f~%" (-> obj inv-mass)) + (format #t "~1Tcm-joint-x: (meters ~m)~%" (-> obj cm-joint-x)) + (format #t "~1Tcm-joint-y: (meters ~m)~%" (-> obj cm-joint-y)) + (format #t "~1Tcm-joint-z: (meters ~m)~%" (-> obj cm-joint-z)) + (format #t "~1Tlinear-damping: ~f~%" (-> obj linear-damping)) + (format #t "~1Tangular-damping: ~f~%" (-> obj angular-damping)) + (format #t "~1Tbounce-factor: ~f~%" (-> obj bounce-factor)) + (format #t "~1Tfriction-factor: ~f~%" (-> obj friction-factor)) + (format #t "~1Tinertial-tensor-x: (meters ~m)~%" (-> obj inertial-tensor-x)) + (format #t "~1Tinertial-tensor-y: (meters ~m)~%" (-> obj inertial-tensor-y)) + (format #t "~1Tinertial-tensor-z: (meters ~m)~%" (-> obj inertial-tensor-z)) + (format #t "~1Textra: #~%" (&-> obj max-time-step)) + (format #t "~1Tmax-time-step: ~f~%" (-> obj max-time-step)) + (format #t "~1Tgravity: (meters ~m)~%" (-> obj gravity)) + (format #t "~1Tidle-distance: (meters ~m)~%" (-> obj idle-distance)) + (format #t "~1Tattack-force-scale: ~f~%" (-> obj attack-force-scale)) + (format #t "~1Tname: ~A~%" (-> obj name)) + (label cfg-4) + obj + ) + +;; definition of type rigid-body-impact +(deftype rigid-body-impact (structure) + ((point vector :inline :offset-assert 0) + (normal vector :inline :offset-assert 16) + (velocity vector :inline :offset-assert 32) + (impulse float :offset-assert 48) + (pat uint32 :offset-assert 52) + (rbody basic :offset-assert 56) + (prim-id uint32 :offset-assert 60) + ) + :method-count-assert 9 + :size-assert #x40 + :flag-assert #x900000040 + ) + +;; definition for method 3 of type rigid-body-impact +(defmethod inspect rigid-body-impact ((obj rigid-body-impact)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'rigid-body-impact) + (format #t "~1Tpoint: ~`vector`P~%" (-> obj point)) + (format #t "~1Tnormal: ~`vector`P~%" (-> obj normal)) + (format #t "~1Tvelocity: ~`vector`P~%" (-> obj velocity)) + (format #t "~1Timpulse: ~f~%" (-> obj impulse)) + (format #t "~1Tpat: ~D~%" (-> obj pat)) + (format #t "~1Trbody: ~A~%" (-> obj rbody)) + (format #t "~1Tprim-id: ~D~%" (-> obj prim-id)) + (label cfg-4) + obj + ) + +;; definition of type rigid-body +(deftype rigid-body (structure) + ((work basic :offset-assert 0) + (info rigid-body-info :offset-assert 4) + (flags rigid-body-flag :offset-assert 8) + (force-callback basic :offset-assert 12) + (blocked-by basic :offset-assert 16) + (time-remaining float :offset-assert 20) + (step-count int16 :offset-assert 24) + (position vector :inline :offset-assert 32) + (rot vector :inline :offset-assert 48) + (rotation quaternion :inline :offset 48) + (lin-momentum vector :inline :offset-assert 64) + (ang-momentum vector :inline :offset-assert 80) + (force vector :inline :offset-assert 96) + (torque vector :inline :offset-assert 112) + (lin-velocity vector :inline :offset-assert 128) + (ang-velocity vector :inline :offset-assert 144) + (matrix matrix :inline :offset-assert 160) + (inv-i-world matrix :inline :offset-assert 224) + ) + :method-count-assert 32 + :size-assert #x120 + :flag-assert #x2000000120 + (:methods + (rigid-body-method-9 (_type_) none 9) + (rigid-body-method-10 (_type_) none 10) + (rigid-body-method-11 (_type_) none 11) + (rigid-body-method-12 (_type_ float) none 12) + (rigid-body-method-13 (_type_) none 13) + (rigid-body-method-14 (_type_ float) none 14) + (rigid-body-method-15 () none 15) + (clear-force-torque! (_type_) none 16) + (clear-momentum! (_type_) none 17) + (rigid-body-method-18 (_type_ vector vector) none 18) + (rigid-body-method-19 (_type_ vector vector) none 19) + (rigid-body-method-20 (_type_ vector) none 20) + (rigid-body-method-21 (_type_ vector vector float) none 21) + (rigid-body-method-22 (_type_ vector vector) vector 22) + (rigid-body-method-23 (_type_ vector) vector 23) + (rigid-body-method-24 (_type_) none 24) + (rigid-body-method-25 (_type_ rigid-body-info vector quaternion basic) none 25) + (rigid-body-method-26 (_type_ vector quaternion) none 26) + (print-physics (_type_ object) none 27) + (print-force-torque (_type_ object) none 28) + (print-position-rotation (_type_ object) none 29) + (print-momentum (_type_ object) none 30) + (print-velocity (_type_ object) none 31) + ) + ) + +;; definition for method 3 of type rigid-body +(defmethod inspect rigid-body ((obj rigid-body)) + (when (not obj) + (set! obj obj) + (goto cfg-16) + ) + (format #t "[~8x] ~A~%" obj 'rigid-body) + (format #t "~1Twork: ~A~%" (-> obj work)) + (format #t "~1Tinfo: #~%" (-> obj info)) + (format #t "~1Tflags: #x~X : (rigid-body-flag " (-> obj flags)) + (let ((s5-0 (-> obj flags))) + (if (= (logand s5-0 (rigid-body-flag active)) (rigid-body-flag active)) + (format #t "active ") + ) + (if (= (logand s5-0 (rigid-body-flag blocker)) (rigid-body-flag blocker)) + (format #t "blocker ") + ) + (if (= (logand s5-0 (rigid-body-flag enable-physics)) (rigid-body-flag enable-physics)) + (format #t "enable-physics ") + ) + (if (= (logand s5-0 (rigid-body-flag display-marks)) (rigid-body-flag display-marks)) + (format #t "display-marks ") + ) + (if (= (logand s5-0 (rigid-body-flag enable-collision)) (rigid-body-flag enable-collision)) + (format #t "enable-collision ") + ) + (if (= (logand s5-0 (rigid-body-flag debug)) (rigid-body-flag debug)) + (format #t "debug ") + ) + ) + (format #t ")~%") + (format #t "~1Tforce-callback: ~A~%" (-> obj force-callback)) + (format #t "~1Tblocked-by: ~A~%" (-> obj blocked-by)) + (format #t "~1Ttime-remaining: ~f~%" (-> obj time-remaining)) + (format #t "~1Tstep-count: ~D~%" (-> obj step-count)) + (format #t "~1Tposition: ~`vector`P~%" (-> obj position)) + (format #t "~1Trot: ~`vector`P~%" (-> obj rotation)) + (format #t "~1Trotation: #~%" (-> obj rotation)) + (format #t "~1Tlin-momentum: ~`vector`P~%" (-> obj lin-momentum)) + (format #t "~1Tang-momentum: ~`vector`P~%" (-> obj ang-momentum)) + (format #t "~1Tforce: ~`vector`P~%" (-> obj force)) + (format #t "~1Ttorque: ~`vector`P~%" (-> obj torque)) + (format #t "~1Tlin-velocity: ~`vector`P~%" (-> obj lin-velocity)) + (format #t "~1Tang-velocity: ~`vector`P~%" (-> obj ang-velocity)) + (format #t "~1Tmatrix: #~%" (-> obj matrix)) + (format #t "~1Tinv-i-world: #~%" (-> obj inv-i-world)) + (label cfg-16) + obj + ) + +;; definition of type rigid-body-control +(deftype rigid-body-control (basic) + ((process process :offset-assert 4) + (state rigid-body :inline :offset-assert 16) + (work basic :offset 16) + (info rigid-body-info :offset 20) + (flags rigid-body-flag :offset 24) + (force-callback basic :offset 28) + (blocked-by basic :offset 32) + (time-remaining float :offset 36) + (step-count int16 :offset 40) + (position vector :inline :offset 48) + (rot vector :inline :offset 64) + (rotation quaternion :inline :offset 64) + (lin-momentum vector :inline :offset 80) + (ang-momentum vector :inline :offset 96) + (force vector :inline :offset 112) + (torque vector :inline :offset 128) + (lin-velocity vector :inline :offset 144) + (ang-velocity vector :inline :offset 160) + (matrix matrix :inline :offset 176) + (inv-i-world matrix :inline :offset 240) + ) + :method-count-assert 26 + :size-assert #x130 + :flag-assert #x1a00000130 + (:methods + (rigid-body-control-method-9 (_type_) none 9) + (rigid-body-control-method-10 (_type_) none 10) + (rigid-body-control-method-11 (_type_) none 11) + (rigid-body-control-method-12 (_type_ float) none 12) + (rigid-body-control-method-13 (_type_) none 13) + (rigid-body-control-method-14 (_type_ float) none 14) + (clear-force-torque! (_type_) none 15) + (clear-momentum! (_type_) none 16) + (rigid-body-control-method-17 (_type_ vector vector) none 17) + (rigid-body-control-method-18 (_type_ vector vector) none 18) + (rigid-body-control-method-19 (_type_ vector) none 19) + (rigid-body-control-method-20 (_type_ vector vector float) none 20) + (rigid-body-control-method-21 (_type_ vector vector) vector 21) + (rigid-body-control-method-22 (_type_ vector) vector 22) + (rigid-body-control-method-23 (_type_) none 23) + (rigid-body-control-method-24 (_type_ rigid-body-info vector quaternion basic) none 24) + (rigid-body-control-method-25 (_type_ vector quaternion) none 25) + ) + ) + +;; definition for method 3 of type rigid-body-control +(defmethod inspect rigid-body-control ((obj rigid-body-control)) + (when (not obj) + (set! obj obj) + (goto cfg-16) + ) + (format #t "[~8x] ~A~%" obj (-> obj type)) + (format #t "~1Tprocess: ~A~%" (-> obj process)) + (format #t "~1Tstate: #~%" (-> obj state)) + (format #t "~1Twork: ~A~%" (-> obj state work)) + (format #t "~1Tinfo: #~%" (-> obj state info)) + (format #t "~1Tflags: #x~X : (rigid-body-flag " (-> obj state flags)) + (let ((s5-0 (-> obj state flags))) + (if (= (logand s5-0 (rigid-body-flag active)) (rigid-body-flag active)) + (format #t "active ") + ) + (if (= (logand s5-0 (rigid-body-flag blocker)) (rigid-body-flag blocker)) + (format #t "blocker ") + ) + (if (= (logand s5-0 (rigid-body-flag enable-physics)) (rigid-body-flag enable-physics)) + (format #t "enable-physics ") + ) + (if (= (logand s5-0 (rigid-body-flag display-marks)) (rigid-body-flag display-marks)) + (format #t "display-marks ") + ) + (if (= (logand s5-0 (rigid-body-flag enable-collision)) (rigid-body-flag enable-collision)) + (format #t "enable-collision ") + ) + (if (= (logand s5-0 (rigid-body-flag debug)) (rigid-body-flag debug)) + (format #t "debug ") + ) + ) + (format #t ")~%") + (format #t "~1Tforce-callback: ~A~%" (-> obj state force-callback)) + (format #t "~1Tblocked-by: ~A~%" (-> obj state blocked-by)) + (format #t "~1Ttime-remaining: ~f~%" (-> obj state time-remaining)) + (format #t "~1Tstep-count: ~D~%" (-> obj state step-count)) + (format #t "~1Tposition: ~`vector`P~%" (-> obj state position)) + (format #t "~1Trot: ~`vector`P~%" (-> obj state rotation)) + (format #t "~1Trotation: #~%" (-> obj state rotation)) + (format #t "~1Tlin-momentum: ~`vector`P~%" (-> obj state lin-momentum)) + (format #t "~1Tang-momentum: ~`vector`P~%" (-> obj state ang-momentum)) + (format #t "~1Tforce: ~`vector`P~%" (-> obj state force)) + (format #t "~1Ttorque: ~`vector`P~%" (-> obj state torque)) + (format #t "~1Tlin-velocity: ~`vector`P~%" (-> obj state lin-velocity)) + (format #t "~1Tang-velocity: ~`vector`P~%" (-> obj state ang-velocity)) + (format #t "~1Tmatrix: #~%" (-> obj state matrix)) + (format #t "~1Tinv-i-world: #~%" (-> obj state inv-i-world)) + (label cfg-16) + obj + ) + +;; definition for method 9 of type rigid-body-control +(defmethod rigid-body-control-method-9 rigid-body-control ((obj rigid-body-control)) + (rigid-body-method-9 (-> obj state)) + (none) + ) + +;; definition for method 10 of type rigid-body-control +(defmethod rigid-body-control-method-10 rigid-body-control ((obj rigid-body-control)) + (rigid-body-method-10 (-> obj state)) + (none) + ) + +;; definition for method 11 of type rigid-body-control +(defmethod rigid-body-control-method-11 rigid-body-control ((obj rigid-body-control)) + (rigid-body-method-11 (-> obj state)) + (none) + ) + +;; definition for method 12 of type rigid-body-control +(defmethod rigid-body-control-method-12 rigid-body-control ((obj rigid-body-control) (arg0 float)) + (rigid-body-method-12 (-> obj state) arg0) + (none) + ) + +;; definition for method 13 of type rigid-body-control +(defmethod rigid-body-control-method-13 rigid-body-control ((obj rigid-body-control)) + (rigid-body-method-13 (-> obj state)) + (none) + ) + +;; definition for method 14 of type rigid-body-control +(defmethod rigid-body-control-method-14 rigid-body-control ((obj rigid-body-control) (arg0 float)) + (rigid-body-method-14 (-> obj state) arg0) + (none) + ) + +;; definition for method 15 of type rigid-body-control +(defmethod clear-force-torque! rigid-body-control ((obj rigid-body-control)) + (clear-force-torque! (-> obj state)) + (none) + ) + +;; definition for method 16 of type rigid-body-control +(defmethod clear-momentum! rigid-body-control ((obj rigid-body-control)) + (clear-momentum! (-> obj state)) + (none) + ) + +;; definition for method 17 of type rigid-body-control +(defmethod rigid-body-control-method-17 rigid-body-control ((obj rigid-body-control) (arg0 vector) (arg1 vector)) + (rigid-body-method-18 (-> obj state) arg0 arg1) + (none) + ) + +;; definition for method 18 of type rigid-body-control +(defmethod rigid-body-control-method-18 rigid-body-control ((obj rigid-body-control) (arg0 vector) (arg1 vector)) + (rigid-body-method-19 (-> obj state) arg0 arg1) + (none) + ) + +;; definition for method 19 of type rigid-body-control +(defmethod rigid-body-control-method-19 rigid-body-control ((obj rigid-body-control) (arg0 vector)) + (rigid-body-method-20 (-> obj state) arg0) + (none) + ) + +;; definition for method 20 of type rigid-body-control +(defmethod rigid-body-control-method-20 rigid-body-control ((obj rigid-body-control) (arg0 vector) (arg1 vector) (arg2 float)) + (rigid-body-method-21 (-> obj state) arg0 arg1 arg2) + (none) + ) + +;; definition for method 21 of type rigid-body-control +(defmethod rigid-body-control-method-21 rigid-body-control ((obj rigid-body-control) (arg0 vector) (arg1 vector)) + (rigid-body-method-22 (-> obj state) arg0 arg1) + ) + +;; definition for method 22 of type rigid-body-control +(defmethod rigid-body-control-method-22 rigid-body-control ((obj rigid-body-control) (arg0 vector)) + (rigid-body-method-23 (-> obj state) arg0) + ) + +;; definition for method 23 of type rigid-body-control +(defmethod rigid-body-control-method-23 rigid-body-control ((obj rigid-body-control)) + (rigid-body-method-24 (-> obj state)) + (none) + ) + +;; definition for method 24 of type rigid-body-control +(defmethod rigid-body-control-method-24 rigid-body-control ((obj rigid-body-control) (arg0 rigid-body-info) (arg1 vector) (arg2 quaternion) (arg3 basic)) + (rigid-body-method-25 (-> obj state) arg0 arg1 arg2 arg3) + (none) + ) + +;; definition for method 25 of type rigid-body-control +(defmethod rigid-body-control-method-25 rigid-body-control ((obj rigid-body-control) (arg0 vector) (arg1 quaternion)) + (rigid-body-method-26 (-> obj state) arg0 arg1) + (none) + ) + +;; definition of type rigid-body-object +(deftype rigid-body-object (process-focusable) + ((info rigid-body-object-constants :offset-assert 204) + (flags rigid-body-object-flag :offset-assert 208) + (max-time-step float :offset-assert 216) + (incoming-attack-id uint32 :offset-assert 220) + (player-touch-time time-frame :offset-assert 224) + (disturbed-time time-frame :offset-assert 232) + (player-force-position vector :inline :offset-assert 240) + (player-force vector :inline :offset-assert 256) + ) + :heap-base #x90 + :method-count-assert 53 + :size-assert #x110 + :flag-assert #x3500900110 + (:methods + (rigid-body-object-method-27 () none 27) + (rigid-body-object-method-28 () none 28) + (rigid-body-object-method-29 () none 29) + (rigid-body-object-method-30 () none 30) + (rigid-body-object-method-31 () none 31) + (rigid-body-object-method-32 () none 32) + (rigid-body-object-method-33 () none 33) + (rigid-body-object-method-34 () none 34) + (rigid-body-object-method-35 () none 35) + (rigid-body-object-method-36 () none 36) + (rigid-body-object-method-37 () none 37) + (rigid-body-object-method-38 () none 38) + (rigid-body-object-method-39 () none 39) + (rigid-body-object-method-40 () none 40) + (rigid-body-object-method-41 () none 41) + (rigid-body-object-method-42 () none 42) + (rigid-body-object-method-43 () none 43) + (rigid-body-object-method-44 () none 44) + (rigid-body-object-method-45 () none 45) + (rigid-body-object-method-46 () none 46) + (rigid-body-object-method-47 () none 47) + (rigid-body-object-method-48 () none 48) + (rigid-body-object-method-49 () none 49) + (rigid-body-object-method-50 () none 50) + (rigid-body-object-method-51 () none 51) + (rigid-body-object-method-52 () none 52) + ) + ) + +;; definition for method 3 of type rigid-body-object +(defmethod inspect rigid-body-object ((obj rigid-body-object)) + (when (not obj) + (set! obj obj) + (goto cfg-22) + ) + (let ((t9-0 (method-of-type process-focusable inspect))) + (t9-0 obj) + ) + (format #t "~2Tinfo: #~%" (-> obj info)) + (format #t "~2Tflags: #x~X : (rigid-body-object-flag " (-> obj flags)) + (let ((s5-0 (-> obj flags))) + (if (= (logand s5-0 (rigid-body-object-flag dead)) (rigid-body-object-flag dead)) + (format #t "dead ") + ) + (if (= (logand s5-0 (rigid-body-object-flag damaged)) (rigid-body-object-flag damaged)) + (format #t "damaged ") + ) + (if (= (logand s5-0 (rigid-body-object-flag player-contact-force)) (rigid-body-object-flag player-contact-force)) + (format #t "player-contact-force ") + ) + (if (= (logand s5-0 (rigid-body-object-flag disturbed)) (rigid-body-object-flag disturbed)) + (format #t "disturbed ") + ) + (if (= (logand s5-0 (rigid-body-object-flag enable-collision)) (rigid-body-object-flag enable-collision)) + (format #t "enable-collision ") + ) + (if (= (logand s5-0 (rigid-body-object-flag player-edge-grabbing)) (rigid-body-object-flag player-edge-grabbing)) + (format #t "player-edge-grabbing ") + ) + (if (= (logand s5-0 (rigid-body-object-flag player-touching)) (rigid-body-object-flag player-touching)) + (format #t "player-touching ") + ) + (if (= (logand s5-0 (rigid-body-object-flag player-standing-on)) (rigid-body-object-flag player-standing-on)) + (format #t "player-standing-on ") + ) + (if (= (logand s5-0 (rigid-body-object-flag player-impulse-force)) (rigid-body-object-flag player-impulse-force)) + (format #t "player-impulse-force ") + ) + ) + (format #t ")~%") + (format #t "~2Tmax-time-step: ~f~%" (-> obj max-time-step)) + (format #t "~2Tincoming-attack-id: ~D~%" (-> obj incoming-attack-id)) + (format #t "~2Tplayer-touch-time: ~D~%" (-> obj player-touch-time)) + (format #t "~2Tdisturbed-time: ~D~%" (-> obj disturbed-time)) + (format #t "~2Tplayer-force-position: #~%" (-> obj player-force-position)) + (format #t "~2Tplayer-force: #~%" (-> obj player-force)) + (label cfg-22) + obj + ) + +;; definition of type rigid-body-queue +(deftype rigid-body-queue (structure) + ((count int8 :offset-assert 0) + (array uint64 128 :offset 8) + ) + :method-count-assert 17 + :size-assert #x408 + :flag-assert #x1100000408 + (:methods + (rigid-body-queue-method-9 () none 9) + (rigid-body-queue-method-10 () none 10) + (rigid-body-queue-method-11 () none 11) + (rigid-body-queue-method-12 () none 12) + (rigid-body-queue-method-13 () none 13) + (rigid-body-queue-method-14 () none 14) + (rigid-body-queue-method-15 () none 15) + (rigid-body-queue-method-16 () none 16) + ) + ) + +;; definition for method 3 of type rigid-body-queue +(defmethod inspect rigid-body-queue ((obj rigid-body-queue)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'rigid-body-queue) + (format #t "~1Tcount: ~D~%" (-> obj count)) + (format #t "~1Tarray[128] @ #x~X~%" (-> obj array)) + (label cfg-4) + obj + ) + +;; failed to figure out what this is: +0 + + + + diff --git a/test/decompiler/reference/jak2/engine/scene/scene-h_REF.gc b/test/decompiler/reference/jak2/engine/scene/scene-h_REF.gc index 401f60c10a..11fd905036 100644 --- a/test/decompiler/reference/jak2/engine/scene/scene-h_REF.gc +++ b/test/decompiler/reference/jak2/engine/scene/scene-h_REF.gc @@ -3,12 +3,12 @@ ;; definition of type scene-actor (deftype scene-actor (basic) - ((name basic :offset-assert 4) + ((name string :offset-assert 4) (level basic :offset-assert 8) - (art-group basic :offset-assert 12) - (prefix basic :offset-assert 16) - (draw-frames basic :offset-assert 20) - (scissor-frames basic :offset-assert 24) + (art-group string :offset-assert 12) + (prefix string :offset-assert 16) + (draw-frames pair :offset-assert 20) + (scissor-frames pair :offset-assert 24) (camera int16 :offset-assert 28) (light-index uint8 :offset-assert 30) (shadow-mask uint8 :offset-assert 31) @@ -19,13 +19,13 @@ (shadow-volume-joint basic :offset-assert 48) (draw-seg uint64 :offset-assert 56) (no-draw-seg uint64 :offset-assert 64) - (process uint64 :offset-assert 72) + (process handle :offset-assert 72) ) :method-count-assert 10 :size-assert #x50 :flag-assert #xa00000050 (:methods - (scene-actor-method-9 () none 9) + (scene-actor-method-9 (_type_ scene-player) (pointer process) 9) ) ) @@ -59,37 +59,37 @@ ;; definition of type scene (deftype scene (art-group) - ((mask-to-clear uint32 :offset-assert 32) - (entity basic :offset-assert 36) - (art-group basic :offset-assert 40) - (anim basic :offset-assert 44) - (parts int32 :offset-assert 48) - (command-list basic :offset-assert 52) - (cut-list basic :offset-assert 56) - (wait-max-time time-frame :offset-assert 64) - (wait-air-time time-frame :offset-assert 72) - (wait-ground-time time-frame :offset-assert 80) - (draw-target basic :offset-assert 88) - (abort basic :offset-assert 92) - (actor basic :offset-assert 96) - (load-point basic :offset-assert 100) - (end-point basic :offset-assert 104) - (borrow basic :offset-assert 108) - (sfx-volume float :offset-assert 112) - (ambient-volume float :offset-assert 116) - (music-volume float :offset-assert 120) - (blackout-end basic :offset-assert 124) - (peaceful basic :offset-assert 128) - (music-delay float :offset-assert 132) - (save basic :offset-assert 136) - (scene-task uint16 :offset-assert 140) + ((mask-to-clear uint32 :offset-assert 32) + (entity string :offset-assert 36) + (art-group string :offset-assert 40) + (anim string :offset-assert 44) + (parts int32 :offset-assert 48) + (command-list basic :offset-assert 52) + (cut-list pair :offset-assert 56) + (wait-max-time time-frame :offset-assert 64) + (wait-air-time time-frame :offset-assert 72) + (wait-ground-time time-frame :offset-assert 80) + (draw-target level-load-info :offset-assert 88) + (abort basic :offset-assert 92) + (actor (array scene-actor) :offset-assert 96) + (load-point string :offset-assert 100) + (end-point string :offset-assert 104) + (borrow basic :offset-assert 108) + (sfx-volume float :offset-assert 112) + (ambient-volume float :offset-assert 116) + (music-volume float :offset-assert 120) + (blackout-end basic :offset-assert 124) + (peaceful basic :offset-assert 128) + (music-delay float :offset-assert 132) + (save basic :offset-assert 136) + (scene-task uint16 :offset-assert 140) ) :method-count-assert 17 :size-assert #x8e :flag-assert #x110000008e (:methods - (scene-method-15 () none 15) - (scene-method-16 () none 16) + (scene-method-15 (_type_ spool-anim) none 15) + (scene-method-16 (_type_) _type_ 16) ) ) @@ -135,40 +135,40 @@ ;; definition of type scene-player (deftype scene-player (process-drawable) - ((scene-list basic :offset-assert 200) - (scene basic :offset-assert 204) - (scene-index int32 :offset-assert 208) - (anim basic :offset-assert 212) - (next-anim basic :offset-assert 216) - (camera uint64 :offset-assert 224) - (main-entity basic :offset-assert 232) - (wait basic :offset-assert 236) - (old-target-pos transformq :inline :offset-assert 240) - (pre-cut-frame basic :offset-assert 288) - (preload-continue basic :offset-assert 292) - (dma-max uint32 :offset-assert 296) - (gui-id uint32 :offset-assert 300) - (aborted? basic :offset-assert 304) - (scene-start-time time-frame :offset-assert 312) - (targ-speed float :offset-assert 320) - (cur-speed float :offset-assert 324) - (speed-change-time time-frame :offset-assert 328) - (speed-press-time time-frame :offset-assert 336) - (speed-change-speed float :offset-assert 344) - (subtitle-change-time time-frame :offset-assert 352) - (user-sound uint32 4 :offset-assert 360) + ((scene-list (pointer symbol) :offset-assert 200) + (scene scene :offset-assert 204) + (scene-index int32 :offset-assert 208) + (anim spool-anim :offset-assert 212) + (next-anim spool-anim :offset-assert 216) + (camera handle :offset-assert 224) + (main-entity entity-actor :offset-assert 232) + (wait basic :offset-assert 236) + (old-target-pos transformq :inline :offset-assert 240) + (pre-cut-frame basic :offset-assert 288) + (preload-continue string :offset-assert 292) + (dma-max uint32 :offset-assert 296) + (gui-id uint32 :offset-assert 300) + (aborted? symbol :offset-assert 304) + (scene-start-time time-frame :offset-assert 312) + (targ-speed float :offset-assert 320) + (cur-speed float :offset-assert 324) + (speed-change-time time-frame :offset-assert 328) + (speed-press-time time-frame :offset-assert 336) + (speed-change-speed float :offset-assert 344) + (subtitle-change-time time-frame :offset-assert 352) + (user-sound uint32 4 :offset-assert 360) ) :heap-base #x100 :method-count-assert 26 :size-assert #x178 :flag-assert #x1a01000178 (:methods - (scene-player-method-20 () none 20) - (scene-player-method-21 () none 21) - (scene-player-method-22 () none 22) - (scene-player-method-23 () none 23) - (scene-player-method-24 () none 24) - (scene-player-method-25 () none 25) + (wait (symbol) _type_ :state 20) + (release () _type_ :state 21) + (play-anim () _type_ :state 22) + (scene-player-method-23 (_type_ string symbol) none 23) + (scene-player-method-24 (_type_ basic symbol) scene 24) + (scene-player-method-25 (_type_ float) none 25) ) ) diff --git a/test/decompiler/reference/jak2/levels/city/common/ctywide-obs-h_REF.gc b/test/decompiler/reference/jak2/levels/city/common/ctywide-obs-h_REF.gc new file mode 100644 index 0000000000..16c4983ce7 --- /dev/null +++ b/test/decompiler/reference/jak2/levels/city/common/ctywide-obs-h_REF.gc @@ -0,0 +1,88 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type city-race-ring-info +(deftype city-race-ring-info (structure) + ((pos vector :inline :offset-assert 0) + (angle float :offset 12) + (boost float :offset-assert 16) + (dist float :offset-assert 20) + ) + :method-count-assert 10 + :size-assert #x18 + :flag-assert #xa00000018 + (:methods + (city-race-ring-info-method-9 () none 9) + ) + ) + +;; definition for method 3 of type city-race-ring-info +(defmethod inspect city-race-ring-info ((obj city-race-ring-info)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'city-race-ring-info) + (format #t "~1Tpos: #~%" (-> obj pos)) + (format #t "~1Tangle: ~f~%" (-> obj pos w)) + (format #t "~1Tboost: ~f~%" (-> obj boost)) + (format #t "~1Tdist: ~f~%" (-> obj dist)) + (label cfg-4) + obj + ) + +;; definition of type city-ambush-spot +(deftype city-ambush-spot (structure) + ((pos vector :inline :offset-assert 0) + (obj-type uint8 :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x11 + :flag-assert #x900000011 + ) + +;; definition for method 3 of type city-ambush-spot +(defmethod inspect city-ambush-spot ((obj city-ambush-spot)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'city-ambush-spot) + (format #t "~1Tpos: #~%" (-> obj pos)) + (format #t "~1Tobj-type: ~D~%" (-> obj obj-type)) + (label cfg-4) + obj + ) + +;; definition of type city-ambush-info +(deftype city-ambush-info (structure) + ((count int16 :offset-assert 0) + (array uint32 :offset-assert 4) + ) + :method-count-assert 10 + :size-assert #x8 + :flag-assert #xa00000008 + (:methods + (city-ambush-info-method-9 () none 9) + ) + ) + +;; definition for method 3 of type city-ambush-info +(defmethod inspect city-ambush-info ((obj city-ambush-info)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'city-ambush-info) + (format #t "~1Tcount: ~D~%" (-> obj count)) + (format #t "~1Tarray: #x~X~%" (-> obj array)) + (label cfg-4) + obj + ) + +;; failed to figure out what this is: +0 + + + + diff --git a/test/decompiler/reference/jak2/levels/city/common/nav-graph-h_REF.gc b/test/decompiler/reference/jak2/levels/city/common/nav-graph-h_REF.gc index cb71fdabcd..4ff2fadb12 100644 --- a/test/decompiler/reference/jak2/levels/city/common/nav-graph-h_REF.gc +++ b/test/decompiler/reference/jak2/levels/city/common/nav-graph-h_REF.gc @@ -3,7 +3,7 @@ ;; definition of type nav-branch (deftype nav-branch (structure) - ((node nav-node 2 :offset-assert 0) + ((node int32 2 :offset-assert 0) (src-node nav-node :offset 0) (dest-node nav-node :offset 4) (temp-dest-node-id int32 :offset 4) @@ -20,18 +20,18 @@ :size-assert #x10 :flag-assert #x1500000010 (:methods - (nav-branch-method-9 () none 9) - (nav-branch-method-10 () none 10) + (nav-branch-method-9 (_type_) none 9) + (nav-branch-method-10 (_type_ object int) none 10) (nav-branch-method-11 (_type_) float 11) (nav-branch-method-12 (_type_) float 12) (nav-branch-method-13 (_type_) float 13) (user-limit-reached? (_type_) symbol 14) (nav-branch-method-15 (_type_) symbol 15) - (nav-branch-method-16 () none 16) - (nav-branch-method-17 () none 17) - (nav-branch-method-18 () none 18) - (nav-branch-method-19 () none 19) - (nav-branch-method-20 () none 20) + (nav-branch-method-16 (_type_ float) none 16) + (nav-branch-method-17 (_type_ float) none 17) + (nav-branch-method-18 (_type_ float) none 18) + (nav-branch-method-19 (_type_ nav-node) none 19) + (nav-branch-method-20 (_type_ nav-node) none 20) ) ) @@ -60,34 +60,34 @@ ;; definition of type nav-node (deftype nav-node (structure) - ((data uint32 8 :offset-assert 0) - (position vector :inline :offset 0) - (pos-x float :offset 0) - (pos-y float :offset 4) - (pos-z float :offset 8) - (angle uint16 :offset 12) - (id uint16 :offset 14) - (radius uint8 :offset 16) - (branch-count int8 :offset 17) - (flags nav-node-flag-byte :offset 18) - (pad0 int8 1 :offset 19) - (branch-array uint32 :offset 20) - (nav-mesh-id uint32 :offset 24) - (level level :offset 28) + ((data uint32 8 :offset-assert 0) + (position vector :inline :offset 0) + (pos-x float :offset 0) + (pos-y float :offset 4) + (pos-z float :offset 8) + (angle uint16 :offset 12) + (id uint16 :offset 14) + (radius uint8 :offset 16) + (branch-count int8 :offset 17) + (flags nav-node-flag-byte :offset 18) + (pad0 int8 1 :offset 19) + (branch-array (inline-array nav-branch) :offset 20) + (nav-mesh-id uint32 :offset 24) + (level symbol :offset 28) ) :method-count-assert 22 :size-assert #x20 :flag-assert #x1600000020 (:methods - (nav-node-method-9 () none 9) - (nav-node-method-10 () none 10) - (nav-node-method-11 () none 11) - (nav-node-method-12 () none 12) - (nav-node-method-13 () none 13) - (nav-node-method-14 () none 14) - (nav-node-method-15 () none 15) - (nav-node-method-16 () none 16) - (nav-node-method-17 () none 17) + (nav-node-method-9 (_type_) none 9) + (nav-node-method-10 (_type_ symbol string) none 10) + (nav-node-method-11 (_type_ int) none 11) + (nav-node-method-12 (_type_ vector nav-node) none 12) + (nav-node-method-13 (_type_ vector) none 13) + (nav-node-method-14 (_type_ nav-node) none 14) + (nav-node-method-15 (_type_ uint) none 15) + (nav-node-method-16 (_type_ float) none 16) + (nav-node-method-17 (_type_ float) none 17) (get-position (_type_ vector) vector 18) (calc-sine-and-cosine! (_type_ vector) vector 19) (get-angle (_type_) float 20) @@ -242,59 +242,60 @@ ;; definition of type nav-graph (deftype nav-graph (basic) - ((node-count int16 :offset-assert 4) - (branch-count int16 :offset-assert 6) - (node-array (inline-array nav-node) :offset-assert 8) - (branch-array uint32 :offset-assert 12) - (link-count int16 :offset-assert 16) - (pad2 uint16 :offset-assert 18) - (link-array uint32 :offset-assert 20) - (first-node int16 :offset-assert 24) - (pad0 uint16 :offset-assert 26) - (patched basic :offset-assert 28) - (id uint32 :offset-assert 32) - (pad1 uint32 6 :offset-assert 36) + ((node-count int16 :offset-assert 4) + (branch-count int16 :offset-assert 6) + (node-array (inline-array nav-node) :offset-assert 8) + (branch-array (inline-array nav-branch) :offset-assert 12) + (link-count int16 :offset-assert 16) + (pad2 uint16 :offset-assert 18) + (link-array (inline-array nav-graph-link) :offset-assert 20) + (first-node int16 :offset-assert 24) + (pad0 uint16 :offset-assert 26) + (patched symbol :offset-assert 28) + (id uint32 :offset-assert 32) + (pad1 uint32 6 :offset-assert 36) ) :method-count-assert 45 :size-assert #x3c :flag-assert #x2d0000003c (:methods - (nav-graph-method-9 () none 9) - (nav-graph-method-10 () none 10) - (nav-graph-method-11 () none 11) - (nav-graph-method-12 () none 12) - (nav-graph-method-13 () none 13) - (nav-graph-method-14 () none 14) - (nav-graph-method-15 () none 15) - (nav-graph-method-16 () none 16) - (nav-graph-method-17 () none 17) - (nav-graph-method-18 () none 18) - (nav-graph-method-19 () none 19) - (nav-graph-method-20 () none 20) - (nav-graph-method-21 () none 21) - (nav-graph-method-22 () none 22) - (nav-graph-method-23 () none 23) - (nav-graph-method-24 () none 24) - (nav-graph-method-25 () none 25) - (nav-graph-method-26 () none 26) - (nav-graph-method-27 () none 27) - (nav-graph-method-28 () none 28) - (nav-graph-method-29 () none 29) - (nav-graph-method-30 () none 30) - (nav-graph-method-31 () none 31) - (nav-graph-method-32 () none 32) - (nav-graph-method-33 () none 33) - (nav-graph-method-34 () none 34) - (nav-graph-method-35 () none 35) - (nav-graph-method-36 () none 36) - (nav-graph-method-37 () none 37) + (new (symbol type int int int uint) _type_ 0) + (nav-graph-method-9 (_type_) none 9) + (nav-graph-method-10 (_type_ vector int) none 10) + (nav-graph-method-11 (_type_) none 11) + (nav-graph-method-12 (_type_) none 12) + (nav-graph-method-13 (_type_ int int) none 13) + (nav-graph-method-14 (_type_ int int) none 14) + (nav-graph-method-15 (_type_) none 15) + (nav-graph-method-16 (_type_ int) nav-node 16) + (nav-graph-method-17 (_type_ nav-node) none 17) + (nav-graph-method-18 (_type_ nav-node int) none 18) + (nav-graph-method-19 (_type_ int int int int int int) none 19) + (nav-graph-method-20 (_type_ int int) none 20) + (nav-graph-method-21 (_type_) none 21) + (nav-graph-method-22 (_type_ int int) none 22) + (nav-graph-method-23 (_type_ int int) none 23) + (nav-graph-method-24 (_type_ int int) none 24) + (nav-graph-method-25 (_type_ symbol symbol) none 25) + (nav-graph-method-26 (_type_ symbol symbol) none 26) + (nav-graph-method-27 (_type_) none 27) + (nav-graph-method-28 (_type_) none 28) + (nav-graph-method-29 (_type_ symbol) none 29) + (nav-graph-method-30 (_type_ uint) none 30) + (nav-graph-method-31 (_type_ float) none 31) + (nav-graph-method-32 (_type_ float) none 32) + (nav-graph-method-33 (_type_ float) none 33) + (nav-graph-method-34 (_type_ float) none 34) + (nav-graph-method-35 (_type_ int) none 35) + (nav-graph-method-36 (_type_ int) none 36) + (nav-graph-method-37 (_type_ vector) none 37) (nav-graph-method-38 () none 38) - (nav-graph-method-39 () none 39) - (nav-graph-method-40 () none 40) + (nav-graph-method-39 (_type_) none 39) + (nav-graph-method-40 (_type_ int) int 40) (node-at-idx (_type_ int) nav-node 41) - (nav-graph-method-42 () none 42) - (nav-graph-method-43 () none 43) - (nav-graph-method-44 () none 44) + (nav-graph-method-42 (_type_) none 42) + (nav-graph-method-43 (_type_ nav-graph-link string) none 43) + (from-editor () none 44) ) ) diff --git a/test/decompiler/reference/jak2/levels/city/common/vehicle-h_REF.gc b/test/decompiler/reference/jak2/levels/city/common/vehicle-h_REF.gc new file mode 100644 index 0000000000..32b0261615 --- /dev/null +++ b/test/decompiler/reference/jak2/levels/city/common/vehicle-h_REF.gc @@ -0,0 +1,952 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type vehicle-lookup-info +(deftype vehicle-lookup-info (structure) + ((turn-radius meters :offset-assert 0) + (throttle-turning float :offset-assert 4) + (throttle-straight float :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ) + +;; definition for method 3 of type vehicle-lookup-info +(defmethod inspect vehicle-lookup-info ((obj vehicle-lookup-info)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'vehicle-lookup-info) + (format #t "~1Tturn-radius: (meters ~m)~%" (-> obj turn-radius)) + (format #t "~1Tthrottle-turning: ~f~%" (-> obj throttle-turning)) + (format #t "~1Tthrottle-straight: ~f~%" (-> obj throttle-straight)) + (label cfg-4) + obj + ) + +;; definition of type vehicle-control-point +(deftype vehicle-control-point (structure) + ((local-pos vector :inline :offset-assert 0) + (normal vector :inline :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) + +;; definition for method 3 of type vehicle-control-point +(defmethod inspect vehicle-control-point ((obj vehicle-control-point)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'vehicle-control-point) + (format #t "~1Tlocal-pos: #~%" (-> obj local-pos)) + (format #t "~1Tnormal: #~%" (-> obj normal)) + (label cfg-4) + obj + ) + +;; definition of type vehicle-section-info +(deftype vehicle-section-info (structure) + ((damage-seg-array uint64 3 :offset-assert 0) + (damage-seg-count int8 :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x19 + :flag-assert #x900000019 + ) + +;; definition for method 3 of type vehicle-section-info +(defmethod inspect vehicle-section-info ((obj vehicle-section-info)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'vehicle-section-info) + (format #t "~1Tdamage-seg-array[3] @ #x~X~%" (-> obj damage-seg-array)) + (format #t "~1Tdamage-seg-count: ~D~%" (-> obj damage-seg-count)) + (label cfg-4) + obj + ) + +;; definition of type vehicle-seat-info +(deftype vehicle-seat-info (structure) + ((data uint8 16 :offset-assert 0) + (position vector :inline :offset 0) + (pos-x float :offset 0) + (pos-y float :offset 4) + (pos-z float :offset 8) + (angle int16 :offset 12) + (flags uint8 :offset 14) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +;; definition for method 3 of type vehicle-seat-info +(defmethod inspect vehicle-seat-info ((obj vehicle-seat-info)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'vehicle-seat-info) + (format #t "~1Tdata[16] @ #x~X~%" (-> obj position)) + (format #t "~1Tposition: #~%" (-> obj position)) + (format #t "~1Tpos-x: ~f~%" (-> obj position x)) + (format #t "~1Tpos-y: ~f~%" (-> obj position y)) + (format #t "~1Tpos-z: ~f~%" (-> obj position z)) + (format #t "~1Tangle: ~D~%" (-> obj angle)) + (format #t "~1Tflags: ~D~%" (-> obj flags)) + (label cfg-4) + obj + ) + +;; definition of type vehicle-explosion-info +(deftype vehicle-explosion-info (joint-exploder-static-params) + ((skel basic :offset-assert 16) + (skel-name basic :offset-assert 20) + (anim int32 :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x1c + :flag-assert #x90000001c + ) + +;; definition for method 3 of type vehicle-explosion-info +(defmethod inspect vehicle-explosion-info ((obj vehicle-explosion-info)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj (-> obj type)) + (format #t "~1Tjoints: ~A~%" (-> obj joints)) + (format #t "~1Tcollide-spec: ~D~%" (-> obj collide-spec)) + (format #t "~1Tart-level: ~A~%" (-> obj art-level)) + (format #t "~1Tskel: ~A~%" (-> obj skel)) + (format #t "~1Tskel-name: ~A~%" (-> obj skel-name)) + (format #t "~1Tanim: ~D~%" (-> obj anim)) + (label cfg-4) + obj + ) + +;; definition of type vehicle-grab-rail-info +(deftype vehicle-grab-rail-info (structure) + ((local-pos vector 2 :inline :offset-assert 0) + (normal vector :inline :offset-assert 32) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) + +;; definition for method 3 of type vehicle-grab-rail-info +(defmethod inspect vehicle-grab-rail-info ((obj vehicle-grab-rail-info)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'vehicle-grab-rail-info) + (format #t "~1Tlocal-pos[2] @ #x~X~%" (-> obj local-pos)) + (format #t "~1Tnormal: #~%" (-> obj normal)) + (label cfg-4) + obj + ) + +;; definition of type rigid-body-vehicle-constants +(deftype rigid-body-vehicle-constants (rigid-body-object-constants) + ((flags uint32 :offset-assert 208) + (object-type uint8 :offset-assert 212) + (guard-type uint8 :offset-assert 213) + (max-engine-thrust meters :offset-assert 216) + (inv-max-engine-thrust float :offset-assert 220) + (engine-response-rate float :offset-assert 224) + (engine-intake-factor float :offset-assert 228) + (brake-factor float :offset-assert 232) + (turbo-boost-factor float :offset-assert 236) + (max-xz-speed meters :offset-assert 240) + (ground-probe-distance meters :offset-assert 244) + (ground-probe-offset meters :offset-assert 248) + (cos-ground-effect-angle float :offset-assert 252) + (spring-lift-factor float :offset-assert 256) + (air-steering-factor float :offset-assert 260) + (air-drag-factor float :offset-assert 264) + (steering-fin-angle float :offset-assert 268) + (steering-thruster-factor float :offset-assert 272) + (steering-thruster-max-gain float :offset-assert 276) + (steering-thruster-half-gain-speed meters :offset-assert 280) + (tire-steering-angle float :offset-assert 284) + (tire-friction-factor float :offset-assert 288) + (tire-static-friction float :offset-assert 292) + (tire-static-friction-speed meters :offset-assert 296) + (tire-dynamic-friction float :offset-assert 300) + (tire-dynamic-friction-speed meters :offset-assert 304) + (tire-inv-max-friction-speed float :offset-assert 308) + (airfoil-factor float :offset-assert 312) + (drag-force-factor float :offset-assert 316) + (speed-scrubbing-drag float :offset-assert 320) + (speed-limiting-drag float :offset-assert 324) + (pitch-control-factor float :offset-assert 328) + (roll-control-factor float :offset-assert 332) + (roll-angle float :offset-assert 336) + (jump-thrust-factor float :offset-assert 340) + (buoyancy-factor float :offset-assert 344) + (player-weight float :offset-assert 348) + (player-shift-x meters :offset-assert 352) + (player-shift-z meters :offset-assert 356) + (target-speed-offset meters :offset-assert 360) + (turning-accel meters :offset-assert 364) + (toughness-factor float :offset-assert 368) + (damage-factor float :offset-assert 372) + (camera-string-min-height meters :offset-assert 376) + (camera-string-max-height meters :offset-assert 380) + (camera-string-min-length meters :offset-assert 384) + (camera-string-max-length meters :offset-assert 388) + (camera-min-fov float :offset-assert 392) + (camera-max-fov float :offset-assert 396) + (camera-head-offset float :offset-assert 400) + (camera-foot-offset float :offset-assert 404) + (camera-normal-max-angle-offset float :offset-assert 408) + (camera-air-max-angle-offset float :offset-assert 412) + (camera-max-lookaround-speed float :offset-assert 416) + (seat-count int8 :offset-assert 420) + (section-count int8 :offset-assert 421) + (rider-stance uint8 :offset-assert 422) + (grab-rail-count int8 :offset-assert 423) + (grab-rail-array uint32 :offset-assert 424) + (seat-array vehicle-seat-info 4 :inline :offset-assert 432) + (rider-hand-offset vector 2 :inline :offset-assert 496) + (section-array vehicle-section-info 4 :inline :offset-assert 528) + (section-bike-front vehicle-section-info :inline :offset 528) + (section-bike-rear vehicle-section-info :inline :offset 560) + (section-car-front-left vehicle-section-info :inline :offset 528) + (section-car-rear-left vehicle-section-info :inline :offset 560) + (section-car-front-right vehicle-section-info :inline :offset 592) + (section-car-rear-right vehicle-section-info :inline :offset 624) + (explosion basic :offset-assert 656) + (engine-pitch-scale float :offset-assert 660) + (engine-pitch-offset float :offset-assert 664) + (engine-pitch-mod-amp float :offset-assert 668) + (engine-sound-select int8 :offset-assert 672) + (engine-sound uint128 :offset-assert 688) + (thrust-sound uint128 :offset-assert 704) + (scrape-sound uint128 :offset-assert 720) + (glance-sound uint128 :offset-assert 736) + (impact-sound uint128 :offset-assert 752) + (extra-sound uint128 :offset-assert 768) + (explosion-part int32 :offset-assert 784) + (headlight-count int8 :offset-assert 788) + (taillight-count int8 :offset-assert 789) + (thruster-flame-width meters :offset-assert 792) + (thruster-flame-length meters :offset-assert 796) + (thruster-local-pos vector 2 :inline :offset-assert 800) + (exhaust-local-pos vector 2 :inline :offset-assert 832) + (exhaust-local-dir vector 2 :inline :offset-assert 864) + (smoke-local-pos vector 2 :inline :offset-assert 896) + (smoke-local-vel vector 2 :inline :offset-assert 928) + (headlight-local-pos vector 3 :inline :offset-assert 960) + (taillight-local-pos vector 2 :inline :offset-assert 1008) + (lift-thruster-count int8 :offset-assert 1040) + (roll-thruster-count int8 :offset-assert 1041) + (steering-thruster-count int8 :offset-assert 1042) + (stabilizer-count int8 :offset-assert 1043) + (inv-lift-thruster-count float :offset-assert 1044) + (pad int8 8 :offset-assert 1048) + (lift-thruster-array vector4w-2 2 :inline :offset-assert 1056) + (roll-thruster-array vector4w-2 2 :inline :offset-assert 1120) + (steering-thruster-array vector4w-2 2 :inline :offset-assert 1184) + (stabilizer-array vector4w-2 6 :inline :offset-assert 1248) + (engine-thrust-local-pos vector :inline :offset-assert 1440) + (brake-local-pos vector :inline :offset-assert 1456) + (particle-system-2d basic :offset-assert 1472) + (particle-system-3d basic :offset-assert 1476) + (part-thruster basic :offset-assert 1480) + (part-thruster-scale-x sp-field-init-spec :offset-assert 1484) + (part-thruster-scale-y sp-field-init-spec :offset-assert 1488) + (part-quat quaternion :offset-assert 1492) + (part-vel vector :offset-assert 1496) + (color-option-count int8 :offset-assert 1500) + (color-option-select int8 :offset-assert 1501) + (color-option-array uint32 :offset-assert 1504) + (sample-dir vector :inline :offset-assert 1520) + (sample-time time-frame :offset-assert 1536) + (sample-index int32 :offset-assert 1544) + ) + :method-count-assert 11 + :size-assert #x60c + :flag-assert #xb0000060c + (:methods + (rigid-body-vehicle-constants-method-9 () none 9) + (rigid-body-vehicle-constants-method-10 () none 10) + ) + ) + +;; definition for method 3 of type rigid-body-vehicle-constants +;; INFO: Used lq/sq +(defmethod inspect rigid-body-vehicle-constants ((obj rigid-body-vehicle-constants)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'rigid-body-vehicle-constants) + (format #t "~1Tinfo: #~%" (&-> obj mass)) + (format #t "~1Tmass: ~f~%" (-> obj mass)) + (format #t "~1Tinv-mass: ~f~%" (-> obj inv-mass)) + (format #t "~1Tcm-joint-x: (meters ~m)~%" (-> obj cm-joint-x)) + (format #t "~1Tcm-joint-y: (meters ~m)~%" (-> obj cm-joint-y)) + (format #t "~1Tcm-joint-z: (meters ~m)~%" (-> obj cm-joint-z)) + (format #t "~1Tlinear-damping: ~f~%" (-> obj linear-damping)) + (format #t "~1Tangular-damping: ~f~%" (-> obj angular-damping)) + (format #t "~1Tbounce-factor: ~f~%" (-> obj bounce-factor)) + (format #t "~1Tfriction-factor: ~f~%" (-> obj friction-factor)) + (format #t "~1Tinertial-tensor-x: (meters ~m)~%" (-> obj inertial-tensor-x)) + (format #t "~1Tinertial-tensor-y: (meters ~m)~%" (-> obj inertial-tensor-y)) + (format #t "~1Tinertial-tensor-z: (meters ~m)~%" (-> obj inertial-tensor-z)) + (format #t "~1Textra: #~%" (&-> obj max-time-step)) + (format #t "~1Tmax-time-step: ~f~%" (-> obj max-time-step)) + (format #t "~1Tgravity: (meters ~m)~%" (-> obj gravity)) + (format #t "~1Tidle-distance: (meters ~m)~%" (-> obj idle-distance)) + (format #t "~1Tattack-force-scale: ~f~%" (-> obj attack-force-scale)) + (format #t "~1Tname: ~A~%" (-> obj name)) + (format #t "~1Tflags: ~D~%" (-> obj flags)) + (format #t "~1Tobject-type: ~D~%" (-> obj object-type)) + (format #t "~1Tguard-type: ~D~%" (-> obj guard-type)) + (format #t "~1Tmax-engine-thrust: (meters ~m)~%" (-> obj max-engine-thrust)) + (format #t "~1Tinv-max-engine-thrust: ~f~%" (-> obj inv-max-engine-thrust)) + (format #t "~1Tengine-response-rate: ~f~%" (-> obj engine-response-rate)) + (format #t "~1Tengine-intake-factor: ~f~%" (-> obj engine-intake-factor)) + (format #t "~1Tbrake-factor: ~f~%" (-> obj brake-factor)) + (format #t "~1Tturbo-boost-factor: ~f~%" (-> obj turbo-boost-factor)) + (format #t "~1Tmax-xz-speed: (meters ~m)~%" (-> obj max-xz-speed)) + (format #t "~1Tground-probe-distance: (meters ~m)~%" (-> obj ground-probe-distance)) + (format #t "~1Tground-probe-offset: (meters ~m)~%" (-> obj ground-probe-offset)) + (format #t "~1Tcos-ground-effect-angle: ~f~%" (-> obj cos-ground-effect-angle)) + (format #t "~1Tspring-lift-factor: ~f~%" (-> obj spring-lift-factor)) + (format #t "~1Tair-steering-factor: ~f~%" (-> obj air-steering-factor)) + (format #t "~1Tair-drag-factor: ~f~%" (-> obj air-drag-factor)) + (format #t "~1Tsteering-fin-angle: ~f~%" (-> obj steering-fin-angle)) + (format #t "~1Tsteering-thruster-factor: ~f~%" (-> obj steering-thruster-factor)) + (format #t "~1Tsteering-thruster-max-gain: ~f~%" (-> obj steering-thruster-max-gain)) + (format #t "~1Tsteering-thruster-half-gain-speed: (meters ~m)~%" (-> obj steering-thruster-half-gain-speed)) + (format #t "~1Ttire-steering-angle: ~f~%" (-> obj tire-steering-angle)) + (format #t "~1Ttire-friction-factor: ~f~%" (-> obj tire-friction-factor)) + (format #t "~1Ttire-static-friction: ~f~%" (-> obj tire-static-friction)) + (format #t "~1Ttire-static-friction-speed: (meters ~m)~%" (-> obj tire-static-friction-speed)) + (format #t "~1Ttire-dynamic-friction: ~f~%" (-> obj tire-dynamic-friction)) + (format #t "~1Ttire-dynamic-friction-speed: (meters ~m)~%" (-> obj tire-dynamic-friction-speed)) + (format #t "~1Ttire-inv-max-friction-speed: ~f~%" (-> obj tire-inv-max-friction-speed)) + (format #t "~1Tairfoil-factor: ~f~%" (-> obj airfoil-factor)) + (format #t "~1Tdrag-force-factor: ~f~%" (-> obj drag-force-factor)) + (format #t "~1Tspeed-scrubbing-drag: ~f~%" (-> obj speed-scrubbing-drag)) + (format #t "~1Tspeed-limiting-drag: ~f~%" (-> obj speed-limiting-drag)) + (format #t "~1Tpitch-control-factor: ~f~%" (-> obj pitch-control-factor)) + (format #t "~1Troll-control-factor: ~f~%" (-> obj roll-control-factor)) + (format #t "~1Troll-angle: ~f~%" (-> obj roll-angle)) + (format #t "~1Tjump-thrust-factor: ~f~%" (-> obj jump-thrust-factor)) + (format #t "~1Tbuoyancy-factor: ~f~%" (-> obj buoyancy-factor)) + (format #t "~1Tplayer-weight: ~f~%" (-> obj player-weight)) + (format #t "~1Tplayer-shift-x: (meters ~m)~%" (-> obj player-shift-x)) + (format #t "~1Tplayer-shift-z: (meters ~m)~%" (-> obj player-shift-z)) + (format #t "~1Ttarget-speed-offset: (meters ~m)~%" (-> obj target-speed-offset)) + (format #t "~1Tturning-accel: (meters ~m)~%" (-> obj turning-accel)) + (format #t "~1Ttoughness-factor: ~f~%" (-> obj toughness-factor)) + (format #t "~1Tdamage-factor: ~f~%" (-> obj damage-factor)) + (format #t "~1Tcamera-string-min-height: (meters ~m)~%" (-> obj camera-string-min-height)) + (format #t "~1Tcamera-string-max-height: (meters ~m)~%" (-> obj camera-string-max-height)) + (format #t "~1Tcamera-string-min-length: (meters ~m)~%" (-> obj camera-string-min-length)) + (format #t "~1Tcamera-string-max-length: (meters ~m)~%" (-> obj camera-string-max-length)) + (format #t "~1Tcamera-min-fov: ~f~%" (-> obj camera-min-fov)) + (format #t "~1Tcamera-max-fov: ~f~%" (-> obj camera-max-fov)) + (format #t "~1Tcamera-head-offset: ~f~%" (-> obj camera-head-offset)) + (format #t "~1Tcamera-foot-offset: ~f~%" (-> obj camera-foot-offset)) + (format #t "~1Tcamera-normal-max-angle-offset: ~f~%" (-> obj camera-normal-max-angle-offset)) + (format #t "~1Tcamera-air-max-angle-offset: ~f~%" (-> obj camera-air-max-angle-offset)) + (format #t "~1Tcamera-max-lookaround-speed: ~f~%" (-> obj camera-max-lookaround-speed)) + (format #t "~1Tseat-count: ~D~%" (-> obj seat-count)) + (format #t "~1Tsection-count: ~D~%" (-> obj section-count)) + (format #t "~1Trider-stance: ~D~%" (-> obj rider-stance)) + (format #t "~1Tgrab-rail-count: ~D~%" (-> obj grab-rail-count)) + (format #t "~1Tgrab-rail-array: #x~X~%" (-> obj grab-rail-array)) + (format #t "~1Tseat-array[4] @ #x~X~%" (-> obj seat-array)) + (format #t "~1Trider-hand-offset[2] @ #x~X~%" (-> obj rider-hand-offset)) + (format #t "~1Tsection-array[4] @ #x~X~%" (-> obj section-bike-front)) + (format #t "~1Tsection-bike-front: #~%" (-> obj section-bike-front)) + (format #t "~1Tsection-bike-rear: #~%" (-> obj section-bike-rear)) + (format #t "~1Tsection-car-front-left: #~%" (-> obj section-bike-front)) + (format #t "~1Tsection-car-rear-left: #~%" (-> obj section-bike-rear)) + (format #t "~1Tsection-car-front-right: #~%" (-> obj section-car-front-right)) + (format #t "~1Tsection-car-rear-right: #~%" (-> obj section-car-rear-right)) + (format #t "~1Texplosion: ~A~%" (-> obj explosion)) + (format #t "~1Tengine-pitch-scale: ~f~%" (-> obj engine-pitch-scale)) + (format #t "~1Tengine-pitch-offset: ~f~%" (-> obj engine-pitch-offset)) + (format #t "~1Tengine-pitch-mod-amp: ~f~%" (-> obj engine-pitch-mod-amp)) + (format #t "~1Tengine-sound-select: ~D~%" (-> obj engine-sound-select)) + (format #t "~1Tengine-sound: ~D~%" (-> obj engine-sound)) + (format #t "~1Tthrust-sound: ~D~%" (-> obj thrust-sound)) + (format #t "~1Tscrape-sound: ~D~%" (-> obj scrape-sound)) + (format #t "~1Tglance-sound: ~D~%" (-> obj glance-sound)) + (format #t "~1Timpact-sound: ~D~%" (-> obj impact-sound)) + (format #t "~1Textra-sound: ~D~%" (-> obj extra-sound)) + (format #t "~1Texplosion-part: ~D~%" (-> obj explosion-part)) + (format #t "~1Theadlight-count: ~D~%" (-> obj headlight-count)) + (format #t "~1Ttaillight-count: ~D~%" (-> obj taillight-count)) + (format #t "~1Tthruster-flame-width: (meters ~m)~%" (-> obj thruster-flame-width)) + (format #t "~1Tthruster-flame-length: (meters ~m)~%" (-> obj thruster-flame-length)) + (format #t "~1Tthruster-local-pos[2] @ #x~X~%" (-> obj thruster-local-pos)) + (format #t "~1Texhaust-local-pos[2] @ #x~X~%" (-> obj exhaust-local-pos)) + (format #t "~1Texhaust-local-dir[2] @ #x~X~%" (-> obj exhaust-local-dir)) + (format #t "~1Tsmoke-local-pos[2] @ #x~X~%" (-> obj smoke-local-pos)) + (format #t "~1Tsmoke-local-vel[2] @ #x~X~%" (-> obj smoke-local-vel)) + (format #t "~1Theadlight-local-pos[3] @ #x~X~%" (-> obj headlight-local-pos)) + (format #t "~1Ttaillight-local-pos[2] @ #x~X~%" (-> obj taillight-local-pos)) + (format #t "~1Tlift-thruster-count: ~D~%" (-> obj lift-thruster-count)) + (format #t "~1Troll-thruster-count: ~D~%" (-> obj roll-thruster-count)) + (format #t "~1Tsteering-thruster-count: ~D~%" (-> obj steering-thruster-count)) + (format #t "~1Tstabilizer-count: ~D~%" (-> obj stabilizer-count)) + (format #t "~1Tinv-lift-thruster-count: ~f~%" (-> obj inv-lift-thruster-count)) + (format #t "~1Tlift-thruster-array[2] @ #x~X~%" (-> obj lift-thruster-array)) + (format #t "~1Troll-thruster-array[2] @ #x~X~%" (-> obj roll-thruster-array)) + (format #t "~1Tsteering-thruster-array[2] @ #x~X~%" (-> obj steering-thruster-array)) + (format #t "~1Tstabilizer-array[6] @ #x~X~%" (-> obj stabilizer-array)) + (format #t "~1Tengine-thrust-local-pos: #~%" (-> obj engine-thrust-local-pos)) + (format #t "~1Tbrake-local-pos: #~%" (-> obj brake-local-pos)) + (format #t "~1Tparticle-system-2d: ~A~%" (-> obj particle-system-2d)) + (format #t "~1Tparticle-system-3d: ~A~%" (-> obj particle-system-3d)) + (format #t "~1Tpart-thruster: ~A~%" (-> obj part-thruster)) + (format #t "~1Tpart-thruster-scale-x: #~%" (-> obj part-thruster-scale-x)) + (format #t "~1Tpart-thruster-scale-y: #~%" (-> obj part-thruster-scale-y)) + (format #t "~1Tpart-quat: #~%" (-> obj part-quat)) + (format #t "~1Tpart-vel: #~%" (-> obj part-vel)) + (format #t "~1Tcolor-option-count: ~D~%" (-> obj color-option-count)) + (format #t "~1Tcolor-option-select: ~D~%" (-> obj color-option-select)) + (format #t "~1Tcolor-option-array: #x~X~%" (-> obj color-option-array)) + (format #t "~1Tsample-dir: #~%" (-> obj sample-dir)) + (format #t "~1Tsample-time: ~D~%" (-> obj sample-time)) + (format #t "~1Tsample-index: ~D~%" (-> obj sample-index)) + (label cfg-4) + obj + ) + +;; definition of type vehicle-controller +(deftype vehicle-controller (structure) + ((flags vehicle-controller-flag :offset-assert 0) + (traffic symbol :offset-assert 4) + (branch nav-branch :offset-assert 8) + (target-speed-offset meters :offset-assert 12) + (target-speed meters :offset-assert 16) + (choose-branch-callback symbol :offset-assert 20) + (turn-accel meters :offset-assert 24) + (max-turn-speed meters :offset-assert 28) + (path-prev-point vector :inline :offset-assert 32) + (turn-enter-point vector :inline :offset-assert 48) + (turn-exit-point vector :inline :offset-assert 64) + (path-dest-point vector :inline :offset 64) + (turn-enter-dir vector :inline :offset-assert 80) + (turn-exit-dir vector :inline :offset-assert 96) + (dest-circle vector :inline :offset-assert 112) + (target-point vector :inline :offset-assert 128) + ) + :method-count-assert 22 + :size-assert #x90 + :flag-assert #x1600000090 + (:methods + (vehicle-controller-method-9 () none 9) + (vehicle-controller-method-10 () none 10) + (vehicle-controller-method-11 () none 11) + (vehicle-controller-method-12 () none 12) + (vehicle-controller-method-13 () none 13) + (vehicle-controller-method-14 () none 14) + (vehicle-controller-method-15 () none 15) + (vehicle-controller-method-16 () none 16) + (vehicle-controller-method-17 () none 17) + (vehicle-controller-method-18 () none 18) + (vehicle-controller-method-19 () none 19) + (vehicle-controller-method-20 () none 20) + (vehicle-controller-method-21 () none 21) + ) + ) + +;; definition for method 3 of type vehicle-controller +(defmethod inspect vehicle-controller ((obj vehicle-controller)) + (when (not obj) + (set! obj obj) + (goto cfg-28) + ) + (format #t "[~8x] ~A~%" obj 'vehicle-controller) + (format #t "~1Tflags: #x~X : (vehicle-controller-flag " (-> obj flags)) + (let ((s5-0 (-> obj flags))) + (if (= (logand s5-0 (vehicle-controller-flag do-turn)) (vehicle-controller-flag do-turn)) + (format #t "do-turn ") + ) + (if (= (logand s5-0 (vehicle-controller-flag off-path)) (vehicle-controller-flag off-path)) + (format #t "off-path ") + ) + (if (= (logand s5-0 (vehicle-controller-flag attached)) (vehicle-controller-flag attached)) + (format #t "attached ") + ) + (if (= (logand s5-0 (vehicle-controller-flag no-slowing-for-turns)) + (vehicle-controller-flag no-slowing-for-turns) + ) + (format #t "no-slowing-for-turns ") + ) + (if (= (logand s5-0 (vehicle-controller-flag recovery-mode)) (vehicle-controller-flag recovery-mode)) + (format #t "recovery-mode ") + ) + (if (= (logand s5-0 (vehicle-controller-flag blocking-dest-node)) (vehicle-controller-flag blocking-dest-node)) + (format #t "blocking-dest-node ") + ) + (if (= (logand s5-0 (vehicle-controller-flag direct-mode)) (vehicle-controller-flag direct-mode)) + (format #t "direct-mode ") + ) + (if (= (logand s5-0 (vehicle-controller-flag ignore-others)) (vehicle-controller-flag ignore-others)) + (format #t "ignore-others ") + ) + (if (= (logand s5-0 (vehicle-controller-flag debug)) (vehicle-controller-flag debug)) + (format #t "debug ") + ) + (if (= (logand s5-0 (vehicle-controller-flag on-straightaway)) (vehicle-controller-flag on-straightaway)) + (format #t "on-straightaway ") + ) + (if (= (logand s5-0 (vehicle-controller-flag draw-marks)) (vehicle-controller-flag draw-marks)) + (format #t "draw-marks ") + ) + (if (= (logand s5-0 (vehicle-controller-flag left-turn)) (vehicle-controller-flag left-turn)) + (format #t "left-turn ") + ) + ) + (format #t ")~%") + (format #t "~1Ttraffic: ~A~%" (-> obj traffic)) + (format #t "~1Tbranch: #~%" (-> obj branch)) + (format #t "~1Ttarget-speed-offset: (meters ~m)~%" (-> obj target-speed-offset)) + (format #t "~1Ttarget-speed: (meters ~m)~%" (-> obj target-speed)) + (format #t "~1Tchoose-branch-callback: ~A~%" (-> obj choose-branch-callback)) + (format #t "~1Tturn-accel: (meters ~m)~%" (-> obj turn-accel)) + (format #t "~1Tmax-turn-speed: (meters ~m)~%" (-> obj max-turn-speed)) + (format #t "~1Tpath-prev-point: ~`vector`P~%" (-> obj path-prev-point)) + (format #t "~1Tturn-enter-point: ~`vector`P~%" (-> obj turn-enter-point)) + (format #t "~1Tturn-exit-point: ~`vector`P~%" (-> obj turn-exit-point)) + (format #t "~1Tpath-dest-point: #~%" (-> obj turn-exit-point)) + (format #t "~1Tturn-enter-dir: ~`vector`P~%" (-> obj turn-enter-dir)) + (format #t "~1Tturn-exit-dir: ~`vector`P~%" (-> obj turn-exit-dir)) + (format #t "~1Tdest-circle: ~`vector`P~%" (-> obj dest-circle)) + (format #t "~1Ttarget-point: ~`vector`P~%" (-> obj target-point)) + (label cfg-28) + obj + ) + +;; definition of type vehicle-section +(deftype vehicle-section (structure) + ((damage float :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) + +;; definition for method 3 of type vehicle-section +(defmethod inspect vehicle-section ((obj vehicle-section)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'vehicle-section) + (format #t "~1Tdamage: ~f~%" (-> obj damage)) + (label cfg-4) + obj + ) + +;; definition of type vehicle +(deftype vehicle (rigid-body-object) + ((pad uint32 4 :offset-assert 272) + (controls vehicle-controls :inline :offset-assert 288) + (prev-controls vehicle-controls :inline :offset-assert 304) + (up-dir vector :inline :offset-assert 320) + (jump-time float :offset-assert 336) + (jump-thrust float :offset-assert 340) + (engine-thrust float :offset-assert 344) + (engine-power-factor float :offset-assert 348) + (force-scale float :offset-assert 352) + (target-distance2 meters :offset-assert 356) + (pad0 uint32 :offset-assert 360) + (target-acceleration vector :inline :offset-assert 368) + (impact-pos vector :inline :offset-assert 384) + (lin-acceleration vector :inline :offset-assert 400) + (hit-points float :offset-assert 416) + (damage-factor float :offset-assert 420) + (crash-level int8 :offset-assert 424) + (force-level int8 :offset-assert 425) + (traffic-hash-id int8 :offset-assert 426) + (traffic-priority-id int8 :offset-assert 427) + (power-fluctuation-factor float :offset-assert 428) + (power-level float :offset-assert 432) + (flight-level-index int8 :offset-assert 436) + (flight-level-index-prev int8 :offset-assert 437) + (overlap-player-counter uint8 :offset-assert 438) + (physics-counter uint8 :offset-assert 439) + (flight-level float :offset-assert 440) + (brake-factor float :offset-assert 444) + (cam-speed-interp float :offset-assert 448) + (camera-dist2 float :offset-assert 452) + (player-dist2 float :offset-assert 456) + (bound-radius float :offset-assert 460) + (rider-array int64 4 :offset-assert 464) + (lift-thrust float 2 :offset-assert 496) + (roll-thrust float 2 :offset-assert 504) + (sent-attack-time time-frame :offset-assert 512) + (air-time time-frame :offset-assert 520) + (turn-time time-frame :offset-assert 528) + (crash-time time-frame :offset-assert 536) + (transition-time time-frame :offset-assert 544) + (transition-end-time time-frame :offset-assert 552) + (turbo-boost-time time-frame :offset-assert 560) + (crash-duration uint16 :offset-assert 568) + (turbo-boost-duration uint16 :offset-assert 570) + (turbo-boost-factor float :offset-assert 572) + (crash-impulse float :offset-assert 576) + (water-height float :offset-assert 580) + (lights-factor float :offset-assert 584) + (outgoing-attack-id uint32 :offset-assert 588) + (scrape-sound-id sound-id :offset-assert 592) + (engine-sound-id sound-id :offset-assert 596) + (thrust-sound-id sound-id :offset-assert 600) + (roll-sound-id sound-id :offset-assert 604) + (damage-pop-sound-id sound-id :offset-assert 608) + (damage-zap-sound-id sound-id :offset-assert 612) + (extra-sound-id sound-id :offset-assert 616) + (fog-fade float :offset-assert 620) + (scrape-sound-envelope float :offset-assert 624) + (engine-sound-envelope float :offset-assert 628) + (engine-sound-factor float :offset-assert 632) + (sputter-sound-envelope float :offset-assert 636) + (rudder-sound-envelope float :offset-assert 640) + (fins-sound-envelope float :offset-assert 644) + (exhaust-part-accum basic 2 :offset-assert 648) + (smoke-part-accum basic 2 :offset-assert 656) + (controller vehicle-controller :inline :offset-assert 672) + (section-array vehicle-section 4 :inline :offset-assert 816) + ) + :heap-base #x2f0 + :method-count-assert 144 + :size-assert #x370 + :flag-assert #x9002f00370 + (:methods + (vehicle-method-53 () none 53) + (vehicle-method-54 () none 54) + (vehicle-method-55 () none 55) + (vehicle-method-56 () none 56) + (vehicle-method-57 () none 57) + (vehicle-method-58 () none 58) + (vehicle-method-59 () none 59) + (vehicle-method-60 () none 60) + (vehicle-method-61 () none 61) + (vehicle-method-62 () none 62) + (vehicle-method-63 () none 63) + (vehicle-method-64 () none 64) + (vehicle-method-65 () none 65) + (vehicle-method-66 () none 66) + (vehicle-method-67 () none 67) + (vehicle-method-68 () none 68) + (vehicle-method-69 () none 69) + (vehicle-method-70 () none 70) + (vehicle-method-71 () none 71) + (vehicle-method-72 () none 72) + (vehicle-method-73 () none 73) + (vehicle-method-74 () none 74) + (vehicle-method-75 () none 75) + (vehicle-method-76 () none 76) + (vehicle-method-77 () none 77) + (vehicle-method-78 () none 78) + (vehicle-method-79 () none 79) + (vehicle-method-80 () none 80) + (vehicle-method-81 () none 81) + (vehicle-method-82 () none 82) + (vehicle-method-83 () none 83) + (vehicle-method-84 () none 84) + (vehicle-method-85 () none 85) + (vehicle-method-86 () none 86) + (vehicle-method-87 () none 87) + (vehicle-method-88 () none 88) + (vehicle-method-89 () none 89) + (vehicle-method-90 () none 90) + (vehicle-method-91 () none 91) + (vehicle-method-92 () none 92) + (vehicle-method-93 () none 93) + (vehicle-method-94 () none 94) + (vehicle-method-95 () none 95) + (vehicle-method-96 () none 96) + (vehicle-method-97 () none 97) + (vehicle-method-98 () none 98) + (vehicle-method-99 () none 99) + (vehicle-method-100 () none 100) + (vehicle-method-101 () none 101) + (vehicle-method-102 () none 102) + (vehicle-method-103 () none 103) + (vehicle-method-104 () none 104) + (vehicle-method-105 () none 105) + (vehicle-method-106 () none 106) + (vehicle-method-107 () none 107) + (vehicle-method-108 () none 108) + (vehicle-method-109 () none 109) + (vehicle-method-110 () none 110) + (vehicle-method-111 () none 111) + (vehicle-method-112 () none 112) + (vehicle-method-113 () none 113) + (vehicle-method-114 () none 114) + (vehicle-method-115 () none 115) + (vehicle-method-116 () none 116) + (vehicle-method-117 () none 117) + (vehicle-method-118 () none 118) + (vehicle-method-119 () none 119) + (vehicle-method-120 () none 120) + (vehicle-method-121 () none 121) + (vehicle-method-122 () none 122) + (vehicle-method-123 () none 123) + (vehicle-method-124 () none 124) + (vehicle-method-125 () none 125) + (vehicle-method-126 () none 126) + (vehicle-method-127 () none 127) + (vehicle-method-128 () none 128) + (vehicle-method-129 () none 129) + (vehicle-method-130 () none 130) + (vehicle-method-131 () none 131) + (vehicle-method-132 () none 132) + (vehicle-method-133 () none 133) + (vehicle-method-134 () none 134) + (vehicle-method-135 () none 135) + (vehicle-method-136 () none 136) + (vehicle-method-137 () none 137) + (vehicle-method-138 () none 138) + (vehicle-method-139 () none 139) + (vehicle-method-140 () none 140) + (vehicle-method-141 () none 141) + (vehicle-method-142 () none 142) + (vehicle-method-143 () none 143) + ) + ) + +;; definition for method 3 of type vehicle +(defmethod inspect vehicle ((obj vehicle)) + (when (not obj) + (set! obj obj) + (goto cfg-92) + ) + (let ((t9-0 (method-of-type rigid-body-object inspect))) + (t9-0 obj) + ) + (format #t "~2Tflags: #x~X : (vehicle-flag " (-> obj flags)) + (let ((s5-0 (-> obj flags))) + (if (= (logand (rigid-body-object-flag lights-update) s5-0) (shl 64 32)) + (format #t "lights-update ") + ) + (if (= (logand (rigid-body-object-flag camera-bike-mode) s5-0) (rigid-body-object-flag camera-bike-mode)) + (format #t "camera-bike-mode ") + ) + (if (= (logand (rigid-body-object-flag jump-sound) s5-0) (rigid-body-object-flag jump-sound)) + (format #t "jump-sound ") + ) + (if (= (logand s5-0 (rigid-body-object-flag dead)) (rigid-body-object-flag dead)) + (format #t "dead ") + ) + (if (= (logand s5-0 (rigid-body-object-flag waiting-for-player)) (rigid-body-object-flag waiting-for-player)) + (format #t "waiting-for-player ") + ) + (if (= (logand (rigid-body-object-flag no-hijack) s5-0) (shl 256 32)) + (format #t "no-hijack ") + ) + (if (= (logand (rigid-body-object-flag hard-turn) s5-0) (rigid-body-object-flag hard-turn)) + (format #t "hard-turn ") + ) + (if (= (logand (rigid-body-object-flag turbo-boost) s5-0) (rigid-body-object-flag turbo-boost)) + (format #t "turbo-boost ") + ) + (if (= (logand (rigid-body-object-flag in-pursuit) s5-0) (shl #x8000 16)) + (format #t "in-pursuit ") + ) + (if (= (logand (rigid-body-object-flag traffic-managed) s5-0) (rigid-body-object-flag traffic-managed)) + (format #t "traffic-managed ") + ) + (if (= (logand s5-0 (rigid-body-object-flag damaged)) (rigid-body-object-flag damaged)) + (format #t "damaged ") + ) + (if (= (logand s5-0 (rigid-body-object-flag player-contact-force)) (rigid-body-object-flag player-contact-force)) + (format #t "player-contact-force ") + ) + (if (= (logand (rigid-body-object-flag player-grabbed) s5-0) (shl 512 32)) + (format #t "player-grabbed ") + ) + (if (= (logand (rigid-body-object-flag flight-level-transition-ending) s5-0) + (rigid-body-object-flag flight-level-transition-ending) + ) + (format #t "flight-level-transition-ending ") + ) + (if (= (logand (rigid-body-object-flag alert) s5-0) (rigid-body-object-flag alert)) + (format #t "alert ") + ) + (if (= (logand s5-0 (rigid-body-object-flag disturbed)) (rigid-body-object-flag disturbed)) + (format #t "disturbed ") + ) + (if (= (logand s5-0 (rigid-body-object-flag enable-collision)) (rigid-body-object-flag enable-collision)) + (format #t "enable-collision ") + ) + (if (= (logand s5-0 (rigid-body-object-flag player-edge-grabbing)) (rigid-body-object-flag player-edge-grabbing)) + (format #t "player-edge-grabbing ") + ) + (if (= (logand (rigid-body-object-flag lights-on) s5-0) (shl 32 32)) + (format #t "lights-on ") + ) + (if (= (logand (rigid-body-object-flag reverse-gear) s5-0) (rigid-body-object-flag reverse-gear)) + (format #t "reverse-gear ") + ) + (if (= (logand (rigid-body-object-flag ai-driving) s5-0) (rigid-body-object-flag ai-driving)) + (format #t "ai-driving ") + ) + (if (= (logand s5-0 (rigid-body-object-flag persistent)) (rigid-body-object-flag persistent)) + (format #t "persistent ") + ) + (if (= (logand (rigid-body-object-flag jump) s5-0) (rigid-body-object-flag jump)) + (format #t "jump ") + ) + (if (= (logand s5-0 (rigid-body-object-flag riding)) (rigid-body-object-flag riding)) + (format #t "riding ") + ) + (if (= (logand s5-0 (rigid-body-object-flag on-flight-level)) (rigid-body-object-flag on-flight-level)) + (format #t "on-flight-level ") + ) + (if (= (logand (rigid-body-object-flag nav-spheres) s5-0) (shl 1024 32)) + (format #t "nav-spheres ") + ) + (if (= (logand s5-0 (rigid-body-object-flag player-driving)) (rigid-body-object-flag player-driving)) + (format #t "player-driving ") + ) + (if (= (logand (rigid-body-object-flag hack-edit-graph-mode) s5-0) (shl 8 32)) + (format #t "hack-edit-graph-mode ") + ) + (if (= (logand (rigid-body-object-flag camera-rapid-track-mode) s5-0) + (rigid-body-object-flag camera-rapid-track-mode) + ) + (format #t "camera-rapid-tracking-mode ") + ) + (if (= (logand (rigid-body-object-flag ignition) s5-0) (rigid-body-object-flag ignition)) + (format #t "ignition ") + ) + (if (= (logand (rigid-body-object-flag slide) s5-0) (rigid-body-object-flag slide)) + (format #t "slide ") + ) + (if (= (logand s5-0 (rigid-body-object-flag on-ground)) (rigid-body-object-flag on-ground)) + (format #t "on-ground ") + ) + (if (= (logand (rigid-body-object-flag flight-level-transition) s5-0) + (rigid-body-object-flag flight-level-transition) + ) + (format #t "flight-level-transition ") + ) + (if (= (logand (rigid-body-object-flag lights-dead) s5-0) (shl 128 32)) + (format #t "lights-dead ") + ) + (if (= (logand s5-0 (rigid-body-object-flag player-touching)) (rigid-body-object-flag player-touching)) + (format #t "player-touching ") + ) + (if (= (logand (rigid-body-object-flag target-in-sight) s5-0) (shl 1 32)) + (format #t "target-in-sight ") + ) + (if (= (logand (rigid-body-object-flag idle-sound) s5-0) (shl 2048 32)) + (format #t "idle-sound ") + ) + (if (= (logand s5-0 (rigid-body-object-flag in-air)) (rigid-body-object-flag in-air)) + (format #t "in-air ") + ) + (if (= (logand (rigid-body-object-flag draw-marks) s5-0) (shl 4 32)) + (format #t "draw-marks ") + ) + (if (= (logand (rigid-body-object-flag camera) s5-0) (rigid-body-object-flag camera)) + (format #t "camera ") + ) + (if (= (logand s5-0 (rigid-body-object-flag player-standing-on)) (rigid-body-object-flag player-standing-on)) + (format #t "player-standing-on ") + ) + (if (= (logand (rigid-body-object-flag measure-control-parameters) s5-0) (shl 16 32)) + (format #t "measure-control-parameters ") + ) + (if (= (logand s5-0 (rigid-body-object-flag player-impulse-force)) (rigid-body-object-flag player-impulse-force)) + (format #t "player-impulse-force ") + ) + (if (= (logand (rigid-body-object-flag rammed-target) s5-0) (shl 2 32)) + (format #t "rammed-target ") + ) + ) + (format #t ")~%") + (format #t "~2Tcontrols: #~%" (-> obj controls)) + (format #t "~2Tprev-controls: #~%" (-> obj prev-controls)) + (format #t "~2Tup-dir: #~%" (-> obj up-dir)) + (format #t "~2Tjump-time: ~f~%" (-> obj jump-time)) + (format #t "~2Tjump-thrust: ~f~%" (-> obj jump-thrust)) + (format #t "~2Tengine-thrust: ~f~%" (-> obj engine-thrust)) + (format #t "~2Tengine-power-factor: ~f~%" (-> obj engine-power-factor)) + (format #t "~2Tforce-scale: ~f~%" (-> obj force-scale)) + (format #t "~2Ttarget-distance2: (meters ~m)~%" (-> obj target-distance2)) + (format #t "~2Tpad0: ~D~%" (-> obj pad0)) + (format #t "~2Ttarget-acceleration: #~%" (-> obj target-acceleration)) + (format #t "~2Timpact-pos: #~%" (-> obj impact-pos)) + (format #t "~2Tlin-acceleration: #~%" (-> obj lin-acceleration)) + (format #t "~2Thit-points: ~f~%" (-> obj hit-points)) + (format #t "~2Tdamage-factor: ~f~%" (-> obj damage-factor)) + (format #t "~2Tcrash-level: ~D~%" (-> obj crash-level)) + (format #t "~2Tforce-level: ~D~%" (-> obj force-level)) + (format #t "~2Ttraffic-hash-id: ~D~%" (-> obj traffic-hash-id)) + (format #t "~2Ttraffic-priority-id: ~D~%" (-> obj traffic-priority-id)) + (format #t "~2Tpower-fluctuation-factor: ~f~%" (-> obj power-fluctuation-factor)) + (format #t "~2Tpower-level: ~f~%" (-> obj power-level)) + (format #t "~2Tflight-level-index: ~D~%" (-> obj flight-level-index)) + (format #t "~2Tflight-level-index-prev: ~D~%" (-> obj flight-level-index-prev)) + (format #t "~2Toverlap-player-counter: ~D~%" (-> obj overlap-player-counter)) + (format #t "~2Tphysics-counter: ~D~%" (-> obj physics-counter)) + (format #t "~2Tflight-level: ~f~%" (-> obj flight-level)) + (format #t "~2Tbrake-factor: ~f~%" (-> obj brake-factor)) + (format #t "~2Tcam-speed-interp: ~f~%" (-> obj cam-speed-interp)) + (format #t "~2Tcamera-dist2: ~f~%" (-> obj camera-dist2)) + (format #t "~2Tplayer-dist2: ~f~%" (-> obj player-dist2)) + (format #t "~2Tbound-radius: ~f~%" (-> obj bound-radius)) + (format #t "~2Trider-array[4] @ #x~X~%" (-> obj rider-array)) + (format #t "~2Tlift-thrust[2] @ #x~X~%" (-> obj lift-thrust)) + (format #t "~2Troll-thrust[2] @ #x~X~%" (-> obj roll-thrust)) + (format #t "~2Tsent-attack-time: ~D~%" (-> obj sent-attack-time)) + (format #t "~2Tair-time: ~D~%" (-> obj air-time)) + (format #t "~2Tturn-time: ~D~%" (-> obj turn-time)) + (format #t "~2Tcrash-time: ~D~%" (-> obj crash-time)) + (format #t "~2Ttransition-time: ~D~%" (-> obj transition-time)) + (format #t "~2Ttransition-end-time: ~D~%" (-> obj transition-end-time)) + (format #t "~2Tturbo-boost-time: ~D~%" (-> obj turbo-boost-time)) + (format #t "~2Tcrash-duration: ~D~%" (-> obj crash-duration)) + (format #t "~2Tturbo-boost-duration: ~D~%" (-> obj turbo-boost-duration)) + (format #t "~2Tturbo-boost-factor: ~f~%" (-> obj turbo-boost-factor)) + (format #t "~2Tcrash-impulse: ~f~%" (-> obj crash-impulse)) + (format #t "~2Twater-height: ~f~%" (-> obj water-height)) + (format #t "~2Tlights-factor: ~f~%" (-> obj lights-factor)) + (format #t "~2Toutgoing-attack-id: ~D~%" (-> obj outgoing-attack-id)) + (format #t "~2Tscrape-sound-id: ~D~%" (-> obj scrape-sound-id)) + (format #t "~2Tengine-sound-id: ~D~%" (-> obj engine-sound-id)) + (format #t "~2Tthrust-sound-id: ~D~%" (-> obj thrust-sound-id)) + (format #t "~2Troll-sound-id: ~D~%" (-> obj roll-sound-id)) + (format #t "~2Tdamage-pop-sound-id: ~D~%" (-> obj damage-pop-sound-id)) + (format #t "~2Tdamage-zap-sound-id: ~D~%" (-> obj damage-zap-sound-id)) + (format #t "~2Textra-sound-id: ~D~%" (-> obj extra-sound-id)) + (format #t "~2Tfog-fade: ~f~%" (-> obj fog-fade)) + (format #t "~2Tscrape-sound-envelope: ~f~%" (-> obj scrape-sound-envelope)) + (format #t "~2Tengine-sound-envelope: ~f~%" (-> obj engine-sound-envelope)) + (format #t "~2Tengine-sound-factor: ~f~%" (-> obj engine-sound-factor)) + (format #t "~2Tsputter-sound-envelope: ~f~%" (-> obj sputter-sound-envelope)) + (format #t "~2Trudder-sound-envelope: ~f~%" (-> obj rudder-sound-envelope)) + (format #t "~2Tfins-sound-envelope: ~f~%" (-> obj fins-sound-envelope)) + (format #t "~2Texhaust-part-accum[2] @ #x~X~%" (-> obj exhaust-part-accum)) + (format #t "~2Tsmoke-part-accum[2] @ #x~X~%" (-> obj smoke-part-accum)) + (format #t "~2Tcontroller: #~%" (-> obj controller)) + (format #t "~2Tsection-array[4] @ #x~X~%" (-> obj section-array)) + (label cfg-92) + obj + ) + +;; failed to figure out what this is: +0 From be1e40a041267ac7bc263c7cda278d34812fb942 Mon Sep 17 00:00:00 2001 From: Tyler Wilding Date: Sat, 8 Oct 2022 12:42:52 -0400 Subject: [PATCH 08/10] d/jak2: decompile `conveyor` | `elevator` | `plat` | `bouncer` | `basebutton` | `base-plat` | most of `sampler` | `simple-nav-sphere` | `simple-focus` | `elec-gate` and `blocking-plane` (#1942) Most of these have been atleast partially documented / named / cleaned up as well. Co-authored-by: water --- common/type_system/state.cpp | 16 + common/type_system/state.h | 1 + decompiler/IR2/Env.cpp | 20 +- decompiler/IR2/Env.h | 2 +- decompiler/IR2/FormExpressionAnalysis.cpp | 7 +- decompiler/analysis/expression_build.cpp | 2 +- decompiler/config/jak2/all-types.gc | 620 +++++---- decompiler/config/jak2/hacks.jsonc | 68 +- decompiler/config/jak2/inputs.jsonc | 2 +- decompiler/config/jak2/label_types.jsonc | 4 +- decompiler/config/jak2/stack_structures.jsonc | 10 + decompiler/config/jak2/type_casts.jsonc | 82 +- decompiler/config/jak2/var_names.jsonc | 401 +++++- .../jak2/engine/collide/collide-shape-h.gc | 11 +- .../jak2/engine/collide/collide-touch-h.gc | 15 +- goal_src/jak2/engine/common_objs/base-plat.gc | 408 ++++++ .../jak2/engine/common_objs/basebutton.gc | 497 +++++++ .../jak2/engine/common_objs/blocking-plane.gc | 234 ++++ goal_src/jak2/engine/common_objs/conveyor.gc | 489 +++++++ goal_src/jak2/engine/common_objs/elevator.gc | 880 ++++++++++++ goal_src/jak2/engine/common_objs/plat.gc | 355 +++++ goal_src/jak2/engine/debug/sampler.gc | 44 + goal_src/jak2/engine/engine/connect.gc | 4 +- goal_src/jak2/engine/entity/entity-h.gc | 6 +- goal_src/jak2/engine/entity/entity.gc | 56 +- goal_src/jak2/engine/entity/relocate.gc | 14 +- goal_src/jak2/engine/gfx/lightning-h.gc | 23 +- goal_src/jak2/engine/nav/nav-mesh-h.gc | 3 + goal_src/jak2/engine/physics/trajectory.gc | 44 +- .../process-drawable/process-drawable-h.gc | 5 + .../engine/process-drawable/simple-focus.gc | 55 + .../process-drawable/simple-nav-sphere.gc | 139 ++ .../jak2/engine/spatial-hash/actor-hash-h.gc | 4 +- .../engine/spatial-hash/spatial-hash-h.gc | 9 +- .../jak2/engine/target/board/target-board.gc | 88 +- goal_src/jak2/engine/target/logic-target.gc | 46 +- goal_src/jak2/engine/util/sync-info-h.gc | 11 + goal_src/jak2/levels/common/airlock.gc | 32 +- goal_src/jak2/levels/common/elec-gate.gc | 1034 ++++++++++++++ goal_src/jak2/levels/common/enemy/bouncer.gc | 248 ++++ goalc/make/MakeSystem.cpp | 3 +- scripts/gsrc/utils.py | 2 +- .../jak1/engine/ambient/ambient_REF.gc | 8 +- .../jak1/engine/camera/cam-combiner_REF.gc | 26 +- .../jak1/engine/camera/cam-states-dbg_REF.gc | 18 +- .../jak1/engine/camera/cam-states_REF.gc | 80 +- .../jak1/engine/camera/pov-camera_REF.gc | 4 +- .../jak1/engine/game/collectables_REF.gc | 118 +- .../reference/jak1/engine/game/crates_REF.gc | 18 +- .../jak1/engine/game/game-save_REF.gc | 4 +- .../jak1/engine/game/generic-obs_REF.gc | 149 +- .../jak1/engine/game/projectiles_REF.gc | 14 +- .../engine/game/task/process-taskable_REF.gc | 46 +- .../jak1/engine/game/voicebox_REF.gc | 4 +- .../jak1/engine/gfx/water/water_REF.gc | 4 +- .../jak1/engine/target/sidekick_REF.gc | 10 +- .../jak1/engine/target/target2_REF.gc | 96 +- .../jak1/engine/target/target_REF.gc | 46 +- .../reference/jak1/engine/ui/hud_REF.gc | 8 +- .../jak1/engine/ui/progress/progress_REF.gc | 20 +- .../jak1/levels/beach/beach-obs_REF.gc | 46 +- .../jak1/levels/beach/beach-rocks_REF.gc | 4 +- .../jak1/levels/beach/pelican_REF.gc | 22 +- .../jak1/levels/citadel/citadel-obs_REF.gc | 32 +- .../jak1/levels/citadel/citadel-sages_REF.gc | 22 +- .../jak1/levels/citadel/citb-drop-plat_REF.gc | 22 +- .../jak1/levels/citadel/citb-plat_REF.gc | 16 +- .../jak1/levels/common/basebutton_REF.gc | 32 +- .../jak1/levels/common/orb-cache_REF.gc | 6 +- .../jak1/levels/common/plat-button_REF.gc | 14 +- .../jak1/levels/common/plat-eco_REF.gc | 10 +- .../jak1/levels/common/ropebridge_REF.gc | 14 +- .../jak1/levels/common/water-anim_REF.gc | 6 +- .../jak1/levels/darkcave/darkcave-obs_REF.gc | 10 +- .../jak1/levels/finalboss/final-door_REF.gc | 16 +- .../levels/finalboss/green-eco-lurker_REF.gc | 4 +- .../levels/finalboss/robotboss-misc_REF.gc | 14 +- .../levels/finalboss/robotboss-weapon_REF.gc | 8 +- .../jak1/levels/finalboss/robotboss_REF.gc | 24 +- .../levels/finalboss/sage-finalboss_REF.gc | 16 +- .../levels/firecanyon/firecanyon-obs_REF.gc | 20 +- .../jak1/levels/flut_common/flutflut_REF.gc | 20 +- .../levels/flut_common/target-flut_REF.gc | 66 +- .../jak1/levels/jungle/bouncer_REF.gc | 14 +- .../jak1/levels/jungle/fisher_REF.gc | 24 +- .../jak1/levels/jungle/jungle-mirrors_REF.gc | 14 +- .../jak1/levels/jungle/jungle-obs_REF.gc | 32 +- .../jak1/levels/jungleb/jungleb-obs_REF.gc | 8 +- .../jak1/levels/jungleb/plant-boss_REF.gc | 104 +- .../jak1/levels/jungleb/plat-flip_REF.gc | 6 +- .../levels/lavatube/lavatube-energy_REF.gc | 26 +- .../jak1/levels/lavatube/lavatube-obs_REF.gc | 28 +- .../jak1/levels/maincave/dark-crystal_REF.gc | 6 +- .../jak1/levels/maincave/gnawer_REF.gc | 54 +- .../jak1/levels/maincave/maincave-obs_REF.gc | 54 +- .../levels/maincave/mother-spider-egg_REF.gc | 12 +- .../jak1/levels/misty/balloonlurker_REF.gc | 4 +- .../jak1/levels/misty/misty-conveyor_REF.gc | 4 +- .../jak1/levels/misty/misty-obs_REF.gc | 10 +- .../levels/misty/misty-teetertotter_REF.gc | 18 +- .../jak1/levels/misty/misty-warehouse_REF.gc | 4 +- .../jak1/levels/misty/mistycannon_REF.gc | 34 +- .../jak1/levels/misty/quicksandlurker_REF.gc | 12 +- .../jak1/levels/misty/sidekick-human_REF.gc | 4 +- .../jak1/levels/ogre/flying-lurker_REF.gc | 162 +-- .../jak1/levels/ogre/ogre-obs_REF.gc | 36 +- .../jak1/levels/ogre/ogreboss_REF.gc | 28 +- .../levels/racer_common/racer-states_REF.gc | 54 +- .../jak1/levels/racer_common/racer_REF.gc | 30 +- .../jak1/levels/robocave/cave-trap_REF.gc | 4 +- .../jak1/levels/robocave/spider-egg_REF.gc | 16 +- .../rolling/rolling-lightning-mole_REF.gc | 12 +- .../jak1/levels/rolling/rolling-obs_REF.gc | 12 +- .../levels/rolling/rolling-race-ring_REF.gc | 10 +- .../jak1/levels/snow/snow-ball_REF.gc | 6 +- .../jak1/levels/snow/snow-bumper_REF.gc | 8 +- .../jak1/levels/snow/snow-flutflut-obs_REF.gc | 54 +- .../jak1/levels/snow/snow-obs_REF.gc | 44 +- .../jak1/levels/snow/snow-ram-boss_REF.gc | 18 +- .../jak1/levels/snow/snow-ram_REF.gc | 22 +- .../jak1/levels/snow/target-snowball_REF.gc | 8 +- .../jak1/levels/sunken/double-lurker_REF.gc | 18 +- .../jak1/levels/sunken/helix-water_REF.gc | 24 +- .../jak1/levels/sunken/orbit-plat_REF.gc | 16 +- .../jak1/levels/sunken/puffer_REF.gc | 4 +- .../jak1/levels/sunken/qbert-plat_REF.gc | 12 +- .../jak1/levels/sunken/shover_REF.gc | 16 +- .../jak1/levels/sunken/square-platform_REF.gc | 30 +- .../levels/sunken/sun-exit-chamber_REF.gc | 22 +- .../jak1/levels/sunken/sun-iris-door_REF.gc | 32 +- .../jak1/levels/sunken/sunken-pipegame_REF.gc | 14 +- .../jak1/levels/sunken/sunken-water_REF.gc | 8 +- .../jak1/levels/sunken/target-tube_REF.gc | 30 +- .../jak1/levels/sunken/wall-plat_REF.gc | 26 +- .../jak1/levels/sunken/wedge-plats_REF.gc | 20 +- .../reference/jak1/levels/swamp/billy_REF.gc | 16 +- .../reference/jak1/levels/swamp/kermit_REF.gc | 6 +- .../jak1/levels/swamp/swamp-obs_REF.gc | 14 +- .../jak1/levels/swamp/swamp-rat-nest_REF.gc | 4 +- .../jak1/levels/title/title-obs_REF.gc | 28 +- .../jak1/levels/training/training-obs_REF.gc | 26 +- .../levels/village1/fishermans-boat_REF.gc | 4 +- .../village1/sequence-a-village1_REF.gc | 4 +- .../jak1/levels/village2/swamp-blimp_REF.gc | 16 +- .../jak1/levels/village2/village2-obs_REF.gc | 30 +- .../jak1/levels/village3/minecart_REF.gc | 8 +- .../jak1/levels/village3/village3-obs_REF.gc | 10 +- .../levels/village_common/villagep-obs_REF.gc | 20 +- .../jak2/engine/camera/cam-combiner_REF.gc | 22 +- .../jak2/engine/camera/cam-states-dbg_REF.gc | 12 +- .../jak2/engine/camera/cam-states_REF.gc | 88 +- .../engine/collide/collide-shape-h_REF.gc | 8 +- .../engine/collide/collide-touch-h_REF.gc | 2 +- .../jak2/engine/common_objs/base-plat_REF.gc | 472 +++++++ .../jak2/engine/common_objs/basebutton_REF.gc | 541 ++++++++ .../engine/common_objs/blocking-plane_REF.gc | 263 ++++ .../jak2/engine/common_objs/conveyor_REF.gc | 590 ++++++++ .../jak2/engine/common_objs/elevator_REF.gc | 953 +++++++++++++ .../jak2/engine/common_objs/plat_REF.gc | 407 ++++++ .../jak2/engine/debug/editable-player_REF.gc | 42 +- .../jak2/engine/debug/sampler_REF.gc | 61 + .../jak2/engine/entity/entity_REF.gc | 30 +- .../jak2/engine/entity/relocate_REF.gc | 6 +- .../jak2/engine/game/task/task-control_REF.gc | 12 +- .../jak2/engine/gfx/lightning-h_REF.gc | 4 +- .../particles/sparticle-launcher_REF.gc | 2 +- .../jak2/engine/physics/trajectory_REF.gc | 12 +- .../process-drawable/process-focusable_REF.gc | 1 + .../process-drawable/simple-focus_REF.gc | 76 ++ .../process-drawable/simple-nav-sphere_REF.gc | 163 +++ .../actor-hash-h_REF.gc | 8 +- .../collide-hash-h_REF.gc | 0 .../spatial-hash-h_REF.gc | 2 +- .../engine/target/board/board-states_REF.gc | 82 +- .../engine/target/board/board-util_REF.gc | 8 +- .../engine/target/board/target-board_REF.gc | 7 +- .../jak2/engine/target/logic-target_REF.gc | 18 +- .../jak2/engine/target/target_REF.gc | 92 +- .../jak2/engine/util/sync-info-h_REF.gc | 1 + .../jak2/levels/common/airlock_REF.gc | 32 +- .../jak2/levels/common/elec-gate_REF.gc | 1215 +++++++++++++++++ .../jak2/levels/common/enemy/bouncer_REF.gc | 277 ++++ test/offline/config/jak2/config.jsonc | 2 + 183 files changed, 12021 insertions(+), 2055 deletions(-) create mode 100644 test/decompiler/reference/jak2/engine/common_objs/base-plat_REF.gc create mode 100644 test/decompiler/reference/jak2/engine/common_objs/basebutton_REF.gc create mode 100644 test/decompiler/reference/jak2/engine/common_objs/blocking-plane_REF.gc create mode 100644 test/decompiler/reference/jak2/engine/common_objs/conveyor_REF.gc create mode 100644 test/decompiler/reference/jak2/engine/common_objs/elevator_REF.gc create mode 100644 test/decompiler/reference/jak2/engine/common_objs/plat_REF.gc create mode 100644 test/decompiler/reference/jak2/engine/debug/sampler_REF.gc create mode 100644 test/decompiler/reference/jak2/engine/process-drawable/simple-focus_REF.gc create mode 100644 test/decompiler/reference/jak2/engine/process-drawable/simple-nav-sphere_REF.gc rename test/decompiler/reference/jak2/engine/{spatial_hash => spatial-hash}/actor-hash-h_REF.gc (52%) rename test/decompiler/reference/jak2/engine/{spatial_hash => spatial-hash}/collide-hash-h_REF.gc (100%) rename test/decompiler/reference/jak2/engine/{spatial_hash => spatial-hash}/spatial-hash-h_REF.gc (99%) create mode 100644 test/decompiler/reference/jak2/levels/common/elec-gate_REF.gc create mode 100644 test/decompiler/reference/jak2/levels/common/enemy/bouncer_REF.gc diff --git a/common/type_system/state.cpp b/common/type_system/state.cpp index aa2cc38b73..a10f0c31a3 100644 --- a/common/type_system/state.cpp +++ b/common/type_system/state.cpp @@ -87,6 +87,22 @@ TypeSpec get_state_handler_type(StateHandler kind, const TypeSpec& state_type) { return result; } +std::vector get_state_handler_arg_names(StateHandler kind) { + switch (kind) { + case StateHandler::CODE: + // can have args, but are arbitrary + case StateHandler::ENTER: + case StateHandler::TRANS: + case StateHandler::POST: + case StateHandler::EXIT: + return {}; + case StateHandler::EVENT: + return {"proc", "arg1", "event-type", "event"}; + default: + ASSERT(false); + } +} + namespace { TypeSpec func_to_state_type(const TypeSpec& func_type, const TypeSpec& proc_type) { TypeSpec result("state"); diff --git a/common/type_system/state.h b/common/type_system/state.h index cf992455a1..4dd53c606b 100644 --- a/common/type_system/state.h +++ b/common/type_system/state.h @@ -17,6 +17,7 @@ StateHandler handler_name_to_kind(const std::string& name); std::string handler_kind_to_name(StateHandler kind); TypeSpec get_state_handler_type(const std::string& handler_name, const TypeSpec& state_type); TypeSpec get_state_handler_type(StateHandler kind, const TypeSpec& state_type); +std::vector get_state_handler_arg_names(StateHandler kind); std::optional get_state_type_from_enter_and_code(const TypeSpec& enter_func_type, const TypeSpec& code_func_type, diff --git a/decompiler/IR2/Env.cpp b/decompiler/IR2/Env.cpp index 858ea36405..08b8c565dc 100644 --- a/decompiler/IR2/Env.cpp +++ b/decompiler/IR2/Env.cpp @@ -10,6 +10,7 @@ #include "common/log/log.h" #include "common/util/math_util.h" +#include "decompiler/Function/Function.h" #include "decompiler/analysis/atomic_op_builder.h" #include "decompiler/util/DecompilerTypeSystem.h" @@ -26,12 +27,21 @@ const char* get_reg_name(int idx) { } } -void Env::set_remap_for_function(const TypeSpec& ts) { - int nargs = ts.arg_count() - 1; - for (int i = 0; i < nargs; i++) { - m_var_remap[get_reg_name(i)] = ("arg" + std::to_string(i)); +void Env::set_remap_for_function(const Function& func) { + std::vector default_arg_names = {}; + if (func.guessed_name.kind == FunctionName::FunctionKind::V_STATE || + func.guessed_name.kind == FunctionName::FunctionKind::NV_STATE) { + default_arg_names = get_state_handler_arg_names(func.guessed_name.handler_kind); } - if (ts.try_get_tag("behavior")) { + int nargs = func.type.arg_count() - 1; + for (int i = 0; i < nargs; i++) { + if (default_arg_names.size() > i) { + m_var_remap[get_reg_name(i)] = default_arg_names.at(i); + } else { + m_var_remap[get_reg_name(i)] = ("arg" + std::to_string(i)); + } + } + if (func.type.try_get_tag("behavior")) { m_var_remap["s6-0"] = "self"; m_pp_mapped_by_behavior = true; } else { diff --git a/decompiler/IR2/Env.h b/decompiler/IR2/Env.h index 6c5a6ef894..e2e2f92865 100644 --- a/decompiler/IR2/Env.h +++ b/decompiler/IR2/Env.h @@ -157,7 +157,7 @@ class Env { const std::string& art_group() const { return m_art_group; } std::optional get_art_elt_name(int idx) const; - void set_remap_for_function(const TypeSpec& ts); + void set_remap_for_function(const Function& func); void set_remap_for_method(const TypeSpec& ts); void set_remap_for_new_method(const TypeSpec& ts); void map_args_from_config(const std::vector& args_names, diff --git a/decompiler/IR2/FormExpressionAnalysis.cpp b/decompiler/IR2/FormExpressionAnalysis.cpp index 39e011fb15..49dc5980b1 100644 --- a/decompiler/IR2/FormExpressionAnalysis.cpp +++ b/decompiler/IR2/FormExpressionAnalysis.cpp @@ -3226,14 +3226,15 @@ void FunctionCallElement::update_from_stack(const Env& env, "type."); } - bool is_res_lump = tp_type.method_from_type().base_type() == "res-lump"; + bool is_res_lump = tp_type.method_from_type().base_type() == "res-lump" || + tp_type.method_from_type().base_type() == "entity-actor"; bool should_use_virtual = env.dts->ts.should_use_virtual_methods(tp_type.method_from_type(), tp_type.method_id()); if (!should_use_virtual && !is_res_lump) { throw std::runtime_error( - fmt::format("Method call on {} id {} used a virtual call unexpectedly.", - tp_type.method_from_type().print(), tp_type.method_id())); + fmt::format("Method call on {} id {} at {} used a virtual call unexpectedly.", + tp_type.method_from_type().print(), tp_type.method_id(), "ya")); } if (should_use_virtual) { diff --git a/decompiler/analysis/expression_build.cpp b/decompiler/analysis/expression_build.cpp index dc5ee3fddd..0a967db763 100644 --- a/decompiler/analysis/expression_build.cpp +++ b/decompiler/analysis/expression_build.cpp @@ -26,7 +26,7 @@ bool convert_to_expressions( f.guessed_name.kind == FunctionName::FunctionKind::UNIDENTIFIED || f.guessed_name.kind == FunctionName::FunctionKind::NV_STATE || f.guessed_name.kind == FunctionName::FunctionKind::V_STATE) { - f.ir2.env.set_remap_for_function(f.type); + f.ir2.env.set_remap_for_function(f); } else if (f.guessed_name.kind == FunctionName::FunctionKind::METHOD) { auto method_type = dts.ts.lookup_method(f.guessed_name.type_name, f.guessed_name.method_id).type; diff --git a/decompiler/config/jak2/all-types.gc b/decompiler/config/jak2/all-types.gc index 54b9b9210b..0b255a68bb 100644 --- a/decompiler/config/jak2/all-types.gc +++ b/decompiler/config/jak2/all-types.gc @@ -6693,7 +6693,7 @@ (deftype connection (connectable) ((param0 basic :offset-assert 16) - (param1 int32 :offset-assert 20) ;; guessed by decompiler + (param1 basic :offset-assert 20) ;; guessed by decompiler (param2 int32 :offset-assert 24) ;; guessed by decompiler (param3 int32 :offset-assert 28) ;; guessed by decompiler (quad uint128 2 :offset 0) ;; guessed by decompiler @@ -13617,6 +13617,7 @@ ;; lightning-h ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +++lightning-h:lightning-spec-flags (defenum lightning-spec-flags :type uint16 :bitfield #t @@ -13626,6 +13627,7 @@ (lsf3 3) (size-from-adjust-dist 4) ) +;; ---lightning-h:lightning-spec-flags (deftype lightning-spec (basic) ((name string :offset-assert 4) @@ -13655,13 +13657,16 @@ :flag-assert #x900000050 ) +;; +++lightning-h:lightning-mode (defenum lightning-mode :type uint8 + (lm-1 -1) (lm0 0) (lm1 1) (lm2 2) (lm3 3) ) +;; ---lightning-h:lightning-mode (deftype lightning-state (structure) ((mode lightning-mode :offset-assert 0) @@ -13692,7 +13697,7 @@ (new (symbol type lightning-spec process float) _type_) (change-mode (_type_ lightning-mode) lightning-mode 9) (get-mode (_type_) lightning-mode 10) - (set-point (_type_ int vector) none 11) + (set-point! (_type_ int vector) none 11) (set-first-meet-point (_type_ vector) none 12) (set-last-meet-point (_type_ vector) none 13) ) @@ -15007,6 +15012,7 @@ (pause-in float :offset-assert 36) (pause-out float :offset-assert 40) ) + :pack-me :method-count-assert 16 :size-assert #x2c :flag-assert #x100000002c @@ -15919,7 +15925,7 @@ (penetrate-using penetrate) (penetrated-by penetrate) (backup-collide-as collide-spec) - (backup-collde-with collide-spec) + (backup-collide-with collide-spec) (event-priority uint8) (rider-max-momentum float) ) @@ -15929,7 +15935,7 @@ ;; Failed to read fields. (:methods (new (symbol type process-drawable collide-list-enum) _type_ 0) - (collide-shape-method-28 () none 28) ;; (move-by-vector! (_type_ vector) none 28) + (move-by-vector! (_type_ vector) none 28) ;; (move-by-vector! (_type_ vector) none 28) (collide-shape-method-29 (_type_ vector) none 29) ;; (alloc-riders (_type_ int) none 29) (collide-shape-method-30 () none 30) ;; (move-to-point! (_type_ vector) none 30) (collide-shape-method-31 () none 31) ;; (debug-draw (_type_) none 31) @@ -16693,7 +16699,7 @@ (get-next (_type_ touching-shapes-entry) touching-prims-entry 10) ;; (get-touched-shape (_type_ collide-shape) collide-shape 10) (touching-shapes-entry-method-11 () none 11) ;; (dummy-11 () none 11) (touching-shapes-entry-method-12 (_type_ collide-shape uint) touching-prims-entry 12) ;; (prims-touching? (_type_ collide-shape-moving uint) touching-prims-entry 12) - (touching-shapes-entry-method-13 () none 13) ;; (prims-touching-action? (_type_ collide-shape collide-action collide-action) touching-prims-entry 13) + (touching-shapes-entry-method-13 (_type_ collide-shape uint uint) basic 13) ;; (prims-touching-action? (_type_ collide-shape collide-action collide-action) touching-prims-entry 13) (touching-shapes-entry-method-14 () none 14) ;; (dummy-14 () none 14) ) ) @@ -16951,7 +16957,9 @@ :size-assert #xcc :flag-assert #x1b005000cc (:methods - (get-trans (_type_ int) vector 20) + (get-trans + "@returns the `trans` [[vector]] from the process's `root` (typically either a [[trsqv]] or a [[collide-shape]]" + (_type_ int) vector 20) (get-quat (_type_) quaternion 21) (get-transv (_type_) vector 22) (process-focusable-method-23 (_type_) none 23) @@ -22172,7 +22180,7 @@ (:methods (spatial-hash-method-34 () none 34) (spatial-hash-method-35 () none 35) - (spatial-hash-method-36 () none 36) + (spatial-hash-method-36 (_type_ sphere (pointer collide-shape) int) int 36) (spatial-hash-method-37 () none 37) (spatial-hash-method-38 () none 38) (spatial-hash-method-39 () none 39) @@ -22185,7 +22193,7 @@ ;; actor-hash-h ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(define-extern *actor-list* pointer) ;; some array of something. +(define-extern *actor-list* (pointer collide-shape)) ;; some array of something. (define-extern *actor-list-length* int) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -27015,8 +27023,8 @@ ;; (define-extern transform-and-sleep function) ;; (define-extern transform-and-sleep-code function) (define-extern transform-post (function int :behavior process-drawable)) ;; -;; (define-extern rider-trans function) ;; (function int :behavior process-drawable) -;; (define-extern rider-post function) ;; (function int :behavior process-drawable) +(define-extern rider-trans (function none :behavior process-drawable)) ;; +(define-extern rider-post (function none :behavior process-drawable)) ;; ;; (define-extern pusher-post function) ;; (function int :behavior process-drawable) ;; (define-extern process-drawable-delay-player function) ;; (function time-frame int :behavior process-drawable) ;; (define-extern process-drawable-fuel-cell-handler function) ;; (function process int symbol event-message-block none :behavior process-drawable) @@ -29160,7 +29168,7 @@ (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 process-entity-status! (function process entity-perm-status symbol entity-perm-status)) ;; (define-extern find-nearest-entity (function vector type entity)) (define-extern entity-speed-test (function string entity)) (define-extern dump-entity-remap (function object object none)) @@ -31239,12 +31247,23 @@ ;; sampler ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; (define-extern *sampler-mem* object) -;; (define-extern *sampler-compare* object) -;; (define-extern *sampler-count* object) -;; (define-extern timer0-handler function) -;; (define-extern sampler-start function) -;; (define-extern sampler-stop function) +(define-extern *sampler-mem* "A pointer to where the sampled data should be stored" pointer) +(define-extern *sampler-compare* + "The value used to set the EE register's `Timer 0 Compare Value`. Always `1`" + uint) +(define-extern *sampler-count* + "Incremented everytime a metric is sampled + @see [[timer0-handler]]" + int) +(define-extern timer0-handler (function none)) +(define-extern sampler-start + "Reset the [[timer-bank]] EE registers. + - If [[*sampler-mem*]] is undefined, allocate 16.7MB in the debug segment + - and when [[*sampler-mem*]] is defined, initialize the [[timer-bank]] fully. Reset [[*sampler-count*]] to 0 as well" + (function none)) +(define-extern sampler-stop + "Sets the [[timer-bank]] mode EE register to 0" + (function none)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; default-menu ;; @@ -31617,22 +31636,24 @@ ;; blocking-plane ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -#| (deftype blocking-plane (process-drawable) - () + ((root-override collide-shape :offset 128 :score 999)) :method-count-assert 22 :size-assert #xc8 :flag-assert #x16005000c8 (:methods (idle () _type_ :state 20) - (blocking-plane-method-21 () none 21) + (init! + "TODO - but sets up the plane given 2 vectors and a height" + (_type_ (inline-array vector) float) none 21) ) ) -|# -;; (define-extern blocking-plane-init-by-other function) ;; (function curve-control int none :behavior blocking-plane) -;; (define-extern blocking-plane-spawn function) ;; (function curve-control none :behavior process) -;; (define-extern blocking-plane-destroy function) ;; (function none) +(define-extern blocking-plane-init-by-other + "Calls [[blocking-plane::21]] with the given args" + (function (inline-array vector) float none :behavior blocking-plane)) +(define-extern blocking-plane-spawn (function curve-control (inline-array vector) float none :behavior process)) +(define-extern blocking-plane-destroy (function none :behavior blocking-plane)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; idle-control ;; @@ -32507,73 +32528,115 @@ ;; base-plat ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -#| (deftype base-plat (process-focusable) - ((smush smush-control :inline :offset-assert 204) - (basetrans vector :inline :offset-assert 236) - (bounce-time time-frame :offset-assert 252) - (bouncing basic :offset-assert 260) - (bounce-scale meters :offset-assert 264) + ((root-override collide-shape-moving :offset 128 :score 100) + (smush smush-control :inline :offset-assert 208) + (basetrans vector :inline :offset-assert 240) + (bounce-time time-frame :offset-assert 256) + (bouncing symbol :offset-assert 264) + (bounce-scale meters :offset-assert 268) ) :method-count-assert 34 :size-assert #x110 :flag-assert #x2200900110 (:methods - (base-plat-method-27 () none 27) - (base-plat-method-28 () none 28) - (base-plat-method-29 () none 29) - (base-plat-method-30 () none 30) - (base-plat-method-31 () none 31) - (base-plat-method-32 () none 32) - (base-plat-method-33 () none 33) + (execute-effects + "Executes various ancillary tasks with the platform, such as spawning particles or playing the associated sound" + (_type_) none 27) + (stop-bouncing! + "Sets `bouncing` to false and resets related settings to their defaults" + (_type_) none 28) + (start-bouncing! + "Sets `bouncing` to [[#t]] and sets up the clock to periodically bounce + and translate the platform via the `smush` + @see [[smush-control]]" + (_type_) none :behavior base-plat 29) + (get-art-group + "@returns The associated [[art-group]]" + (_type_) art-group 30) + (base-plat-method-31 "TODO - collision stuff" (_type_) none 31) + (base-plat-method-32 (_type_) none 32) + (base-plat-method-33 (_type_) none 33) ) ) -|# -#| +;; +++base-plat:eco-door-flags +(defenum eco-door-flags + :bitfield #t + :type int32 + (ecdf00) + (ecdf01) + (auto-close) + (one-way) + ) +;; ---base-plat:eco-door-flags + + (deftype eco-door (process-drawable) - ((speed float :offset-assert 196) - (open-distance float :offset-assert 200) - (close-distance float :offset-assert 204) - (out-dir vector :inline :offset-assert 220) - (open-sound uint128 :offset-assert 236) ;; sound-name - (close-sound uint128 :offset-assert 252) ;; sound-name - (state-actor entity-actor :offset-assert 268) ;; guessed by decompiler - (flags int32 :offset-assert 272) ;; eco-door-flags - (locked symbol :offset-assert 276) ;; guessed by decompiler - (auto-close symbol :offset-assert 280) ;; guessed by decompiler - (one-way symbol :offset-assert 284) ;; guessed by decompiler + "@unused - Likely a left-over from Jak 1" + ((root-override collide-shape :offset 128 :score 100) + (speed float :offset-assert 200) + (open-distance float :offset-assert 204) + (close-distance float :offset-assert 208) + (out-dir vector :inline :offset-assert 224) + (open-sound sound-name :offset-assert 240) ;; sound-name + (close-sound sound-name :offset-assert 256) ;; sound-name + (state-actor entity-actor :offset-assert 272) ;; guessed by decompiler + (flags eco-door-flags :offset-assert 276) ;; eco-door-flags + (locked symbol :offset-assert 280) ;; guessed by decompiler + (auto-close symbol :offset-assert 284) ;; guessed by decompiler + (one-way symbol :offset-assert 288) ;; guessed by decompiler ) :method-count-assert 27 :size-assert #x124 :flag-assert #x1b00b00124 (:methods - (door-closed () _type_ :state 20) ;; (door-closed () _type_ :state 20) - (door-opening () _type_ :state 21) ;; (door-opening () _type_ :state 21) - (door-open () _type_ :state 22) ;; (door-open () _type_ :state 22) - (door-closing () _type_ :state 23) ;; (door-closing () _type_ :state 23) - (eco-door-method-24 () none 24) ;; (TODO-RENAME-24 (_type_) none 24) - (eco-door-method-25 () none 25) ;; (TODO-RENAME-25 (_type_) none 25) - (eco-door-method-26 () none 26) ;; (dummy-26 (_type_) none 26) + (door-closed () _type_ :state 20) + (door-opening () _type_ :state 21) + (door-open () _type_ :state 22) + (door-closing () _type_ :state 23) + (lock-according-to-task! + "If the associated subtask is completed, lock the door if [[eco-door-flags:0]] is set + otherwise, lock it if [[eco-door-flags:0]] is set" + (_type_) none 24) + (eco-door-method-25 (_type_) none 25) ;; (TODO-RENAME-25 (_type_) none 25) + (stub + "@unused - Stub with no overrides" + (_type_) none 26) ) ) -|# -;; (define-extern plat-code function) ;; (function none :behavior baseplat) -;; (define-extern plat-trans function) ;; (function none :behavior baseplat) -;; (define-extern plat-post function) ;; (function none :behavior baseplat) -;; (define-extern plat-event function) ;; (function process int symbol event-message-block object :behavior baseplat) -;; (define-extern eco-door-event-handler function) ;; (function process int symbol event-message-block object :behavior eco-door) +(define-extern plat-code + "After calling [[transform-post]] for 2 consecutive frames, put the process to sleep if it's not bouncing + otherwise, continue bouncing...forever! + @see [[transform-post]]" + (function none :behavior base-plat)) +(define-extern plat-trans + "If the platform is `bouncing`, move the platform accordingly with the [[smush-control]] + - If the amplitude of the `smush` has hit `0.0` then stop bouncing + + If we aren't bouncing however, TODO - CSHAPE" + (function none :behavior base-plat)) +(define-extern plat-post (function none :behavior base-plat)) +(define-extern plat-event + "Handles platform related events. Presently all this does is: + - if `event-type` is [['bonk]], then call [[base-plat:29]]" + (function process int symbol event-message-block object :behavior base-plat)) +(define-extern eco-door-event-handler + "If the `event-type` is `'trigger`, flip the `locked` flag on the door + and play the respective sound + + @unused - likely a leftover from Jak 1" + (function process int symbol event-message-block object :behavior eco-door)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; plat ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -#| (deftype plat (base-plat) - ((path-pos float :offset-assert 268) - (sound-id sound-id :offset-assert 272) ;; guessed by decompiler - (sync sync-eased :inline :offset-assert 276) ;; sync-info-eased :inline + ((path-pos float :offset-assert 272) + (sound-id sound-id :offset-assert 276) ;; guessed by decompiler + (sync sync-eased :inline :offset-assert 280) ;; sync-info-eased :inline ) :method-count-assert 37 :size-assert #x144 @@ -32581,69 +32644,101 @@ (:methods (plat-idle () _type_ :state 34) (plat-path-active () _type_ :state 35) - (plat-method-36 () none 36) + (plat-path-sync + "If the `sync` period is greater than `0` then transition the state to [[plat::35]] + otherwise, [[plat::34]] + + @see [[sync-eased]]" + (_type_) object 36) ) ) -|# -#| (deftype drop-plat (base-plat) - ((art-name basic :offset-assert 268) - (anim basic :offset-assert 272) - (break-anim-name basic :offset-assert 276) - (safe-time time-frame :offset-assert 284) - (hit-point vector :inline :offset-assert 300) + ((art-name string :offset-assert 272) + (anim spool-anim :offset-assert 276) + (break-anim-name string :offset-assert 280) + (safe-time time-frame :offset-assert 288) + (hit-point vector :inline :offset-assert 304) ) :method-count-assert 36 :size-assert #x140 :flag-assert #x2400c00140 (:methods (idle () _type_ :state 34) - (fall () _type_ :state 35) + (fall (symbol) _type_ :state 35) ) ) -|# ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; basebutton ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -#| +;; +++basebutton:button-status +(defenum button-status + :type uint16 + :bitfield #t + (pressed) + (button-status-1) + (button-status-2) + (button-status-3) + (button-status-4)) +;; ---basebutton:button-status + (deftype basebutton (process-focusable) - () + ( + (button-status button-status :offset-assert 204) + (notify-actor entity :offset-assert 208) + (actor-group (pointer actor-group) :offset-assert 212) + (actor-group-count int32 :offset-assert 216) + (timeout float :offset-assert 220) + (button-id int32 :offset-assert 224) + (event-going-down symbol :offset-assert 228) + (event-down symbol :offset-assert 232) + (event-going-up symbol :offset-assert 236) + (event-up symbol :offset-assert 240) + (anim-speed float :offset-assert 244) + (move-to-pos vector :inline :offset-assert 256) + (move-to-quat quaternion :inline :offset-assert 272) + ) :method-count-assert 39 :size-assert #x120 :flag-assert #x2700a00120 - ;; Failed to read fields. (:methods (down-idle () _type_ :state 27) ;; (TODO-RENAME-27 (_type_) collide-shape-moving 27) (going-down () _type_ :state 28) ;; (arm-trigger-event! (_type_) symbol 28) (going-up () _type_ :state 29) ;; (TODO-RENAME-29 (_type_ symbol entity) none 29) (up-idle () _type_ :state 30) ;; (move-to-vec-or-quat! (_type_ vector quaternion) quaternion 30) - (basebutton-method-31 () none 31) ;; (press! (_type_ symbol) int 31) - (basebutton-method-32 () none 32) - (basebutton-method-33 () none 33) - (basebutton-method-34 () none 34) - (basebutton-method-35 () none 35) - (basebutton-method-36 () none 36) - (basebutton-method-37 () none 37) - (basebutton-method-38 () none 38) + (reset! (_type_) none 31) ;; (press! (_type_ symbol) int 31) + (idle-state-transition + "If `button-status` has [[button-status:0]] set, transition to [[basebutton::27]] otherwise, [[basebutton::30]]" + (_type_) object 32) + (basebutton-method-33 "TODO - joint stuff" (_type_) none 33) + (basebutton-method-34 "TODO - collision stuff" (_type_) none 34) + (prepare-trigger-event! + "Sets `event-going-down` to `'trigger`" + (_type_) none 35) + (send-event! + "Prepares an [[event-message-block]] using the provided type to send an event to: + - the `notify-actor` + - every [[entity-actor]] in the `actor-group` array + @see [[entity-actor]]" + (_type_ symbol) none :behavior basebutton 36) + (move-to! (_type_ vector quaternion) none 37) + (press! (_type_ symbol) entity-perm-status 38) ) ) -|# -;; (define-extern basebutton-init-by-other function) ;; (function entity-actor vector quaternion entity-actor symbol float none :behavior basebutton) +(define-extern basebutton-init-by-other (function entity-actor vector quaternion entity-actor symbol float none :behavior basebutton)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; bouncer ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -#| (deftype bouncer (process-drawable) - ((spring-height meters :offset-assert 196) - (smush float :offset-assert 200) - (mods basic :offset-assert 204) + ((spring-height meters :offset-assert 200) + (smush float :offset-assert 204) + (mods basic :offset-assert 208) ) :method-count-assert 25 :size-assert #xd4 @@ -32652,18 +32747,15 @@ (idle () _type_ :state 20) (fire () _type_ :state 21) (smush () _type_ :state 22) - (bouncer-method-23 () none 23) - (bouncer-method-24 () none 24) + (init-skeleton! (_type_) none 23) + (bouncer-method-24 "TODO - collision stuff" (_type_) none 24) ) ) -|# - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; conveyor ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -#| (deftype conveyor-section (structure) ((start vector :inline :offset-assert 0) (trailing plane :inline :offset-assert 16) @@ -32674,48 +32766,54 @@ :size-assert #x40 :flag-assert #x900000040 ) -|# -#| (deftype conveyor-section-array (inline-array-class) - ((length int32 :offset-assert 4) - (allocated-length int32 :offset-assert 8) - (data UNKNOWN :dynamic :offset-assert 16) - ) + ((data conveyor-section :dynamic :inline :offset-assert 16)) :method-count-assert 9 :size-assert #x10 :flag-assert #x900000010 ) -|# -#| (deftype conveyor (process-drawable) - ((speed float :offset-assert 196) - (belt-radius float :offset-assert 200) - (pull-y-threshold float :offset-assert 204) - (speed-mult-array uint32 :offset-assert 208) - (speed-mult-array-len int8 :offset-assert 212) - (sections basic :offset-assert 216) - (leading plane :inline :offset-assert 220) - (collide-bounds sphere :inline :offset-assert 236) + ((speed float :offset-assert 200) + (belt-radius float :offset-assert 204) + (pull-y-threshold float :offset-assert 208) + (speed-mult-array (array float) :offset-assert 212) + (speed-mult-array-len int8 :offset-assert 216) + (sections conveyor-section-array :offset-assert 220) + (leading plane :inline :offset-assert 224) + (collide-bounds sphere :inline :offset-assert 240) ) :method-count-assert 28 :size-assert #x100 :flag-assert #x1c00800100 (:methods (idle () _type_ :state 20) - (conveyor-method-21 () none 21) - (conveyor-method-22 () none 22) - (conveyor-method-23 () none 23) - (conveyor-method-24 () none 24) - (conveyor-method-25 () none 25) - (conveyor-method-26 () none 26) - (conveyor-method-27 () none 27) + (conveyor-method-21 + "TODO - quite dense, has to do with the conveyor sections and the path they are associated with" + (_type_) float 21) + (get-art-group + "@returns The respective [[art-group]] for the [[conveyor]]" + (_type_) art-group 22) + (reset-root! + "Re-initializes the `root` [[trsqv]]" + (_type_) none 23) + (init! + "Initializes defaults for things like the `speed` and `belt-radius`" + (_type_) none 24) + (set-and-get-ambient-sound! + "So long as [[actor-option::16]] is not set, fetch the [[ambient-sound]] for the [[conveyor]] + and return it as well. Otherwise, set it to `0`" + (_type_) ambient-sound 25) + (conveyor-method-26 + "TODO - conveyor section related, perhaps related to moving the process along the belt?" + (_type_ process-focusable) symbol :behavior conveyor 26) + (conveyor-method-27 + "TODO - collision related, has some dead code as well (previous iteration?)" + (_type_) symbol 27) ) ) -|# -#| (deftype strip-conveyor (conveyor) () :method-count-assert 28 @@ -32724,9 +32822,7 @@ (:methods ) ) -|# -#| (deftype lgconveyor (conveyor) () :method-count-assert 28 @@ -32735,28 +32831,39 @@ (:methods ) ) -|# ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; elevator ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -#| +;; +++elevator-flags +(defenum elevator-flags + :type uint64 + :bitfield #t + (elevator-flags-0) + (elevator-flags-1) + (elevator-flags-2) + (elevator-flags-3) + (elevator-flags-4) + (prevent-jump) + (elevator-flags-6) + (elevator-flags-7) + ) +;; ---elevator-flags + (deftype elevator-params (structure) ((xz-threshold float :offset-assert 0) (y-threshold float :offset-assert 4) (start-pos float :offset-assert 8) (move-rate float :offset-assert 12) - (flags uint64 :offset-assert 16) + (flags elevator-flags :offset-assert 16) ) :method-count-assert 9 :size-assert #x18 :flag-assert #x900000018 ) -|# -#| (deftype path-step (structure) ((next-pos float :offset-assert 0) (dist float :offset-assert 4) @@ -32765,63 +32872,99 @@ :size-assert #x8 :flag-assert #x900000008 ) -|# -#| (deftype path-step-inline-array (inline-array-class) - ((length int32 :offset-assert 4) - (allocated-length int32 :offset-assert 8) - (data UNKNOWN :dynamic :offset-assert 16) - ) + ((data path-step :dynamic :inline :offset-assert 16)) :method-count-assert 9 :size-assert #x10 :flag-assert #x900000010 ) -|# -#| +;; +++elevator:elevator-status +(defenum elevator-status + :type uint64 + :bitfield #t + (elevator-status-0) + (elevator-status-1) + (moving) + ) +;; ---elevator:elevator-status + (deftype elevator (base-plat) - ((params elevator-params :inline :offset-assert 268) - (path-seq basic :offset-assert 292) - (path-dest float :offset-assert 296) - (bottom-top UNKNOWN 2 :offset-assert 300) - (move-pos UNKNOWN 2 :offset-assert 308) - (move-dist float :offset-assert 316) - (path-pos float :offset-assert 320) - (path-eased-pos float :offset-assert 324) - (ride-timer uint64 :offset-assert 332) - (sticky-player-last-ride-time time-frame :offset-assert 340) - (elevator-status uint64 :offset-assert 348) - (on-activate basic :offset-assert 356) - (on-deactivate basic :offset-assert 360) + ((params elevator-params :inline :offset-assert 272) + (path-seq path-step-inline-array :offset-assert 296) + (path-dest float :offset-assert 300) + (bottom-top float 2 :offset-assert 304) + (move-pos float 2 :offset-assert 312) + (move-dist float :offset-assert 320) + (path-pos float :offset-assert 324) + (path-eased-pos float :offset-assert 328) + (ride-timer uint64 :offset-assert 336) + (sticky-player-last-ride-time time-frame :offset-assert 344) + (elevator-status elevator-status :offset-assert 352) + (on-activate basic :offset-assert 360) + (on-deactivate basic :offset-assert 364) ) :method-count-assert 49 :size-assert #x170 :flag-assert #x3100f00170 - ;; field on-activate uses ~A with a signed load field on-deactivate uses ~A with a signed load (:methods (dormant () _type_ :state 34) (waiting () _type_ :state 35) (running () _type_ :state 36) (arrived () _type_ :state 37) - (elevator-method-38 () none 38) - (elevator-method-39 () none 39) - (elevator-method-40 () none 40) - (elevator-method-41 () none 41) - (elevator-method-42 () none 42) - (elevator-method-43 () none 43) - (elevator-method-44 () none 44) - (elevator-method-45 () none 45) - (elevator-method-46 () none 46) - (elevator-method-47 () none 47) - (elevator-method-48 () none 48) + (elevator-method-38 (_type_) none 38) + (calc-dist-between-points! + "Calculates the distance between two points in the elevator's path. + + @param path-point-x The index of the first point in the distance calculation, and where `next-pos` and `dist` are stored in the `path-seq` array + @param path-point-y The second point in the distance calculation" + (_type_ int int) none 39) + (elevator-method-40 + "TODO - need to figure out some flags to be confident about this" + (_type_) object 40) + (init-defaults! + "Initializes default settings related to the [[elevator]]: + - `elevator-xz-threshold` + - `elevator-y-threshold` + - `elevator-start-pos` + - `elevator-move-rate` + - `elevator-flags`" + (_type_) none 41) + (clear-ambient-sound! + "Might be a virtual function, but clears the object's [[ambient-sound]]" + (_type_) none 42) + (elevator-method-43 (_type_ vector float float) symbol 43) + (elevator-method-44 (_type_) symbol 44) + (elevator-method-45 + "@returns Stub, or always returns [[#t]]" + (_type_) symbol 45) + (move-to-next-point! + "If the [[*target*]] is in a valid state and there is a point to transition to in the elevator's path + do so. + @see [[elevator::47]]" + (_type_) none 46) + (find-closest-point-in-path! + "Finds and sets the provided [[path-step]]'s `next-pos` field to the vertex index in the path which is closest to + the provided [[vector]] + + @param vec The point at which distance calculations are based off + @param! next-step If a point is found, `next-pos` will be set to the correct point + @param arg2 TODO + @param arg3 TODO + @returns [[#t]] if a point in the path was found" + (_type_ vector path-step symbol symbol) symbol 47) + (elevator-method-48 "TODO - collision related" (_type_) none 48) ) ) -|# -;; (define-extern ease-value-in-out function) -;; (define-extern elevator-event function) -;; (define-extern move-post function) +(define-extern ease-value-in-out + "TODO - the math in this function is full of duplication and isn't totally clear + but if the name is to be believed, it's to slow a values grow at the beginning and end of it's range + which is obviously useful for an elevator." + (function float float float)) +(define-extern elevator-event (function process int symbol event-message-block object :behavior elevator)) +(define-extern move-post (function none :behavior elevator)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; rigid-body ;; @@ -33063,9 +33206,8 @@ ;; simple-focus ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -#| (deftype simple-focus (process-focusable) - ((first-time? basic :offset-assert 200) + ((first-time? symbol :offset-assert 204) ) :method-count-assert 28 :size-assert #xd0 @@ -33074,18 +33216,19 @@ (idle () _type_ :state 27) ) ) -|# -;; (define-extern simple-focus-init-by-other function) +(define-extern simple-focus-init-by-other + "Initializes the new [[simple-focus]]. `first-time?` will be set to [[#t]]" + (function none :behavior simple-focus)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; simple-nav-sphere ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -#| (deftype simple-nav-sphere (process-drawable) - ((first-time? basic :offset-assert 196) - (track-joint int32 :offset-assert 200) + ((root-override collide-shape :offset 128 :score 999) + (first-time? symbol :offset-assert 200) + (track-joint int32 :offset-assert 204) ) :method-count-assert 22 :size-assert #xd0 @@ -33095,10 +33238,9 @@ (active () _type_ :state 21) ) ) -|# -;; (define-extern simple-nav-sphere-event-handler function) -;; (define-extern simple-nav-sphere-init-by-other function) +(define-extern simple-nav-sphere-event-handler (function process int symbol event-message-block none :behavior simple-nav-sphere)) +(define-extern simple-nav-sphere-init-by-other (function float vector nav-mesh int none :behavior simple-nav-sphere)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; process-taskable ;; @@ -33702,10 +33844,9 @@ ;; elec-gate ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -#| (deftype elec-gate-params (structure) - ((bolt-spec basic :offset-assert 0) - (ring-spec basic :offset-assert 4) + ((bolt-spec lightning-spec :offset-assert 0) + (ring-spec lightning-spec :offset-assert 4) (ring-radius-min float :offset-assert 8) (ring-radius-max float :offset-assert 12) (speed-mult float :offset-assert 16) @@ -33714,12 +33855,10 @@ :size-assert #x14 :flag-assert #x900000014 ) -|# -#| (deftype elec-gate-bolt (structure) - ((ring UNKNOWN 2 :offset-assert 0) - (bolt basic :offset-assert 8) + ((ring lightning-control 2 :offset-assert 0) ;; guess + (bolt lightning-control :offset-assert 8) (ring-radius float :offset-assert 12) (pos float :offset-assert 16) ) @@ -33727,9 +33866,7 @@ :size-assert #x14 :flag-assert #x900000014 ) -|# -#| (deftype elec-wall (structure) ((pos vector :inline :offset-assert 0) (dir vector :inline :offset-assert 16) @@ -33738,49 +33875,61 @@ :size-assert #x20 :flag-assert #x900000020 ) -|# -#| (deftype elec-gate (process-drawable) - ((params elec-gate-params :offset-assert 196) - (path-l basic :offset-assert 148) - (path-r basic :offset-assert 200) - (l-bolt UNKNOWN 5 :offset-assert 204) - (part-on basic :offset-assert 164) - (part-off basic :offset-assert 364) - (part-spawner-left basic :offset-assert 368) - (part-spawner-right basic :offset-assert 372) - (on-start basic :offset-assert 376) - (on-stop basic :offset-assert 380) - (dividing-wall elec-wall :inline :offset-assert 396) - (plane UNKNOWN 2 :offset-assert 428) - (wall-y float :offset-assert 492) - (wall-xz float :offset-assert 496) - (lightning-quality float :offset-assert 500) - (quality-enabled? basic :offset-assert 504) + ((params elec-gate-params :offset-assert 200) + (path-l path-control :offset 152) + (path-r path-control :offset-assert 204) + (l-bolt elec-gate-bolt 5 :inline :offset-assert 208) + (part-on sparticle-launch-control :offset 168) + (part-off sparticle-launch-control :offset-assert 368) + (part-spawner-left part-spawner :offset-assert 372) + (part-spawner-right part-spawner :offset-assert 376) + (on-start basic :offset-assert 380) + (on-stop basic :offset-assert 384) + (dividing-wall elec-wall :inline :offset-assert 400) + (plane elec-wall 2 :inline :offset-assert 432) + (wall-y float :offset-assert 496) + (wall-xz float :offset-assert 500) + (lightning-quality float :offset-assert 504) + (quality-enabled? symbol :offset-assert 508) ) :method-count-assert 30 :size-assert #x200 :flag-assert #x1e01800200 - ;; field on-start uses ~A with a signed load field on-stop uses ~A with a signed load (:methods (idle () _type_ :state 20) (active () _type_ :state 21) (shutdown () _type_ :state 22) - (elec-gate-method-23 () none 23) - (elec-gate-method-24 () none 24) - (elec-gate-method-25 () none 25) - (elec-gate-method-26 () none 26) - (elec-gate-method-27 () none 27) - (elec-gate-method-28 () none 28) - (elec-gate-method-29 () none 29) + (get-params + "@returns [[*default-elec-gate-params*]] by default" + (_type_) elec-gate-params 23) + (elec-gate-method-24 "virtual" (_type_) none 24) + (set-palette! + "Sets the [[elec-gate]]'s `palette-id` appropriately" + (_type_) none 25) + (set-state! + "If either [[actor-option::17]] is set on the [[elec-gate]] or the related subtask is completed + make the gate `idle`. + + Otherwise, the gate will be `active`." + (_type_) none 26) + (spawn-particles + "TODO - Calls [[sparticle-launch-control::11]] on `part-spawner-left` and `part-spawner-right` if they are defined" + (_type_ sparticle-launch-control) none 27) + (set-elec-scale-if-close! + "If [[target]]'s position is within `80` [[meters]], set the scale to the value provided + @see [[elec-gate::29]]" (_type_ float) none 28) + (set-elec-scale! + "Calls associated mood functions to set the scale with the value provided + @see mood-funcs + @see mood-funcs2" + (_type_ float) none 29) ) ) -|# -#| (deftype fort-elec-gate (elec-gate) - ((palette-id int32 :offset-assert 508) + ((palette-id int32 :offset-assert 512) ) :method-count-assert 30 :size-assert #x204 @@ -33788,57 +33937,40 @@ (:methods ) ) -|# -#| (deftype drill-elec-gate (elec-gate) - ((palette-id int32 :offset-assert 508) + ((palette-id int32 :offset-assert 512) ) :method-count-assert 30 :size-assert #x204 :flag-assert #x1e01900204 - (:methods - ) - ) -|# + (:methods)) -#| (deftype caspad-elec-gate (elec-gate) () :method-count-assert 30 :size-assert #x200 :flag-assert #x1e01800200 - (:methods - ) - ) -|# + (:methods)) -#| (deftype castle-elec-gate (elec-gate) () :method-count-assert 30 :size-assert #x200 :flag-assert #x1e01800200 - (:methods - ) - ) -|# + (:methods)) -#| (deftype palroof-elec-gate (elec-gate) - ((palette-id int32 :offset-assert 508) + ((palette-id int32 :offset-assert 512) ) :method-count-assert 30 :size-assert #x204 :flag-assert #x1e01900204 - (:methods - ) - ) -|# + (:methods)) -;; (define-extern *default-elec-gate-params* object) -;; (define-extern elec-gate-post function) -;; (define-extern *caspad-elec-gate-params* object) +(define-extern *default-elec-gate-params* elec-gate-params) +(define-extern elec-gate-post (function none :behavior elec-gate)) +(define-extern *caspad-elec-gate-params* elec-gate-params) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; cty-guard-turret-button ;; @@ -41010,9 +41142,8 @@ ;; sewer-obs2 ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -#| (deftype sew-elevator (elevator) - ((sound-id uint32 :offset-assert 364) + ((sound-id sound-id :offset-assert 368) ) :method-count-assert 50 :size-assert #x174 @@ -41021,7 +41152,6 @@ (sew-elevator-method-49 () none 49) ) ) -|# #| (deftype sew-valve (process-drawable) diff --git a/decompiler/config/jak2/hacks.jsonc b/decompiler/config/jak2/hacks.jsonc index 63a8122cfc..2fae9b2c3c 100644 --- a/decompiler/config/jak2/hacks.jsonc +++ b/decompiler/config/jak2/hacks.jsonc @@ -298,43 +298,41 @@ "draw-drawable-tree-instance-tie": [21, 23, 31, 33], "command-get-process": [43], "unpack-comp-rle": [1, 3, 5, 6], - "(method 16 level)": [ - 0, 1, 5, 13, 14, 15 - - ], + "(method 16 level)": [0, 1, 5, 13, 14, 15], "unpack-comp-huf": [2, 4, 5, 6, 7, 8, 9], "unpack-comp-lzo": [ - 0, -1, -4, -5, -6, -7, -15, -16, -17, -18, -19, -20, -21, -22, -23, -24, -25, -26, -27, -28, -29, -30, -31, -32, -33, -34, -35, // branch fwd 39 -39, // branch fwd no delay -43, // goto 18 -45 // goto 6 -], + 0, + 1, + 4, + 5, + 6, + 7, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, // branch fwd 39 + 39, // branch fwd no delay + 43, // goto 18 + 45 // goto 6 + ], + "(method 27 conveyor)": [5, 14, 22], "(method 44 nav-graph)": [1, 3, 6, 13, 17] }, diff --git a/decompiler/config/jak2/inputs.jsonc b/decompiler/config/jak2/inputs.jsonc index ed9cbe3f07..7bb4c35e26 100644 --- a/decompiler/config/jak2/inputs.jsonc +++ b/decompiler/config/jak2/inputs.jsonc @@ -97,7 +97,7 @@ // "DGO/TITLE.DGO", // "DGO/FORDUMPD.DGO", // "DGO/D3A.DGO", - // "DGO/DRILLMTN.DGO", + "DGO/DRILLMTN.DGO", // "DGO/PAC.DGO", // "DGO/LTENTOB.DGO", // "DGO/LRACEBF.DGO", diff --git a/decompiler/config/jak2/label_types.jsonc b/decompiler/config/jak2/label_types.jsonc index 677bad06f4..d9bad29b80 100644 --- a/decompiler/config/jak2/label_types.jsonc +++ b/decompiler/config/jak2/label_types.jsonc @@ -210,7 +210,6 @@ ], "task-control": [["L518", "attack-info"]], "tfrag-methods": [["L119", "(inline-array tfrag-init-data)", 6]], - "nav-mesh": [["L347", "(inline-array vector)", 2]], "progress": [ ["L879", "uint64", true], ["L880", "uint64", true], @@ -272,5 +271,6 @@ ], "target-gun": [["L595", "uint64", true]], "tie-methods": [["L328", "(inline-array tie-init-data)", 6]], - "nav-mesh": [["L347", "(inline-array vector)", 2]] + "blocking-plane": [["L43", "vector"]], + "elec-gate": [["L141", "attack-info"]] } diff --git a/decompiler/config/jak2/stack_structures.jsonc b/decompiler/config/jak2/stack_structures.jsonc index 95148fc835..0793a7e9b9 100644 --- a/decompiler/config/jak2/stack_structures.jsonc +++ b/decompiler/config/jak2/stack_structures.jsonc @@ -909,6 +909,16 @@ [48, "vector"] ], "target-board-pre-move": [[112, "vector"]], + // stack guesser can't handle inline arrays + "(method 11 blocking-plane)": [[16, ["inline-array", "vector", 2]]], + // stack guesser can't handle inline arrays + "blocking-plane-spawn": [[16, ["inline-array", "vector", 2]]], + // stack guesser can't handle inline arrays + "(enter active elec-gate)": [[176, ["inline-array", "vector", 2]]], + "(method 46 elevator)": [ + // bad stack guess (method type was a path-step) + [16, "path-step"] + ], "(method 10 nav-node)": [[16, "vector"]], "(method 9 nav-graph)": [[16, "matrix"]], "(method 10 xz-height-map)": [[16, "matrix"]], diff --git a/decompiler/config/jak2/type_casts.jsonc b/decompiler/config/jak2/type_casts.jsonc index 0a7f9cc741..89de75f00d 100644 --- a/decompiler/config/jak2/type_casts.jsonc +++ b/decompiler/config/jak2/type_casts.jsonc @@ -2761,24 +2761,92 @@ [[29, 45], "v1", "(pointer float)"] ], - "unpack-comp-rle": [ - [[10, 26], "a0", "(pointer int8)"] - ], + "unpack-comp-rle": [[[10, 26], "a0", "(pointer int8)"]], "(method 16 level)": [ [222, "v1", "(pointer uint128)"], [223, "a1", "(pointer uint128)"], [225, "a0", "(pointer uint128)"], - [[71,168], "s1", "(pointer int8)"], + [[71, 168], "s1", "(pointer int8)"], [72, "v1", "(pointer int8)"], - [[74,169], "s0", "(pointer int8)"], + [[74, 169], "s0", "(pointer int8)"], [[170, 193], "s1", "(pointer uint8)"], [[171, 193], "s2", "(pointer uint8)"], [227, "v1", "(pointer uint8)"] ], - "unpack-comp-huf": [ - [[21,23], "t3", "(pointer uint16)"] + "unpack-comp-huf": [[[21, 23], "t3", "(pointer uint16)"]], + "(method 10 elec-gate)": [[13, "t9", "(function process-drawable none)"]], + "(method 11 elec-gate)": [ + [180, "a0", "vector"], + [193, "a0", "vector"] ], + "(event idle simple-focus)": [[6, "v1", "vector"]], + "(trans active simple-nav-sphere)": [[10, "v1", "process-drawable"]], + "simple-nav-sphere-event-handler": [[21, "v1", "float"]], + "sampler-start": [ + [1, "v1", "timer-bank"], + [3, "v1", "timer-bank"], + [6, "a0", "timer-bank"], + [24, "a0", "timer-bank"] + ], + "(top-level-login sampler)": [[14, "v1", "timer-bank"]], + "sampler-stop": [[1, "v1", "timer-bank"]], + "(event up-idle basebutton)": [[[3, 38], "v1", "attack-info"]], + "(method 33 basebutton)": [[35, "v1", "art-joint-anim"]], + "(event idle drop-plat)": [ + [19, "s5", "process-focusable"], + [53, "gp", "process-focusable"] + ], + "(event idle bouncer)": [[[120, 127], "v1", "attack-info"]], + "(method 7 conveyor)": [ + [12, "t9", "(function process-drawable int process-drawable)"] + ], + "(method 27 conveyor)": [ + [23, "a0", "connection"], + [24, "a0", "collide-shape"], + [71, "a0", "connection"], + [72, "a0", "collide-shape"], + [143, "s4", "process-focusable"] + ], + "(method 21 conveyor)": [ + [104, "v1", "vector"], + [102, "v1", "vector"], + [106, "a0", "vector"], + [112, "v1", "vector"], + [118, "v1", "vector"] + ], + "(code idle lgconveyor)": [[10, "v1", "art-joint-anim"]], + "(post idle lgconveyor)": [[4, "t9", "(function none)"]], + "(method 7 elevator)": [[14, "t9", "(function base-plat int base-plat)"]], + "elevator-event": [ + [23, "v1", "focus"], + [88, "gp", "float"], + [132, "gp", "float"] + ], + "(method 46 elevator)": [[11, "f0", "float"]], + "(method 11 elevator)": [[156, "f0", "float"]], + "(enter idle elec-gate)": [ + [[33, 53], "a1", "lightning-mode"], + [[10, 30], "a1", "lightning-mode"], + [[56, 76], "a1", "lightning-mode"] + ], + "(enter active elec-gate)": [ + [[29, 49], "a1", "lightning-mode"], + [[75, 95], "a1", "lightning-mode"], + [[52, 72], "a1", "lightning-mode"] + ], + "(trans active elec-gate)": [ + [[284, 304], "a0", "lightning-mode"], + [[257, 416], "s4", "lightning-mode"] + ], + "(trans shutdown elec-gate)": [ + [[36, 56], "a0", "lightning-mode"], + [[82, 102], "a0", "lightning-mode"], + [[59, 79], "a0", "lightning-mode"] + ], + "(method 11 basebutton)": [["_stack_", 16, "res-tag"]], + "(method 24 conveyor)": [["_stack_", 16, "res-tag"]], + "(method 25 conveyor)": [[11, "v0", "actor-option"]], "(method 24 scene-player)": [[38, "gp", "scene"]], "process-drawable-draw-subtitles": [[26, "v0", "(pointer vector)"]], "(post play-anim scene-player)": [ diff --git a/decompiler/config/jak2/var_names.jsonc b/decompiler/config/jak2/var_names.jsonc index 3a81d37957..fe316a701a 100644 --- a/decompiler/config/jak2/var_names.jsonc +++ b/decompiler/config/jak2/var_names.jsonc @@ -1541,29 +1541,384 @@ "(method 16 level)": { "args": ["obj", "vis-info", "unused", "in-bsp-vis-string"], "vars": { - "a0-1":"cam-leaf-idx", - "v1-1":"curr-vis-string-offset", - "s3-0":"desired-vis-string-offset", - "s3-1":"vis-buf", - "s2-0":"lower-flag-bits", - "s1-0":"spad-start", - "s0-0":"spad-end", - "s4-1":"list-len", - "v1-30":"qwc", - "v1-33":"comp-mode", - "v1-35":"qwc2", - "sv-16":"extra-vis-length", - "sv-32":"extra-vis-dest", - "v1-45":"extra-vis-in", - "a0-25":"extra-vis-idx", - "a1-9":"vis-byte", - "s2-1":"vis-ptr", - "s1-1":"all-vis-ptr", - "v1-51":"vis-error", - "v1-55":"unpacked-vis-ptr", - "a0-42":"final-vis-ptr", - "a1-22":"all-vis", - "a2-11":"vis-qwc" + "a0-1": "cam-leaf-idx", + "v1-1": "curr-vis-string-offset", + "s3-0": "desired-vis-string-offset", + "s3-1": "vis-buf", + "s2-0": "lower-flag-bits", + "s1-0": "spad-start", + "s0-0": "spad-end", + "s4-1": "list-len", + "v1-30": "qwc", + "v1-33": "comp-mode", + "v1-35": "qwc2", + "sv-16": "extra-vis-length", + "sv-32": "extra-vis-dest", + "v1-45": "extra-vis-in", + "a0-25": "extra-vis-idx", + "a1-9": "vis-byte", + "s2-1": "vis-ptr", + "s1-1": "all-vis-ptr", + "v1-51": "vis-error", + "v1-55": "unpacked-vis-ptr", + "a0-42": "final-vis-ptr", + "a1-22": "all-vis", + "a2-11": "vis-qwc" + } + }, + "elec-gate-post": { + "vars": { + "s5-0": "bolt-idx", + "sv-96": "curr-bolt", + "gp-0": "num-points", + "sv-112": "curr-point" + } + }, + "(enter idle elec-gate)": { + "vars": { + "v1-0": "bolt-idx", + "a0-3": "bolt", + "a0-6": "first-ring", + "a0-9": "second-ring", + "a1-1": "mode", + "a1-2": "mode", + "a1-3": "mode", + "a2-2": "mode-diff?", + "a2-12": "mode-diff?", + "a2-22": "mode-diff?" + } + }, + "(enter active elec-gate)": { + "vars": { + "v1-7": "bolt-idx", + "a0-5": "curr-bolt", + "a1-3": "mode", + "a2-3": "mode-diff?", + "a0-8": "first-ring", + "a1-4": "mode", + "a0-11": "second-ring", + "a1-5": "mode", + "a2-23": "mode-diff?", + "a2-13": "mode-diff?", + "v1-10": "vec-idx", + "gp-0": "vec-pair" + } + }, + "(trans active elec-gate)": { + "vars": { + "s5-0": "proc-focus", + "gp-0": "target", + "gp-1": "focus-trans", + "a1-4": "evt", + "v1-20": "attack", + "a0-8": "game-info", + "a2-2": "attack-id", + "s5-2": "bolt-idx" + } + }, + "(trans shutdown elec-gate)": { + "vars": { + "s5-0": "bolt-idx", + "gp-0": "go-idle?", + "s4-0": "left-bolt-0", + "v1-9": "left-bolt-1", + "a0-1": "mode", + "a1-2": "mode-diff?", + "v1-12": "left-bolt-first-ring", + "v1-15": "left-bolt-second-ring", + "a0-2": "mode", + "a0-3": "mode", + "a1-12": "mode-diff?", + "a1-22": "mode-diff?" + } + }, + "(method 27 elec-gate)": { + "args": ["obj", "sparticle-lc"] + }, + "(method 7 elec-gate)": { + "vars": { + "v1-0": "bolt-idx", + "a2-2": "left-bolt" + }, + "args": ["obj", "new-addr"] + }, + "(method 11 elec-gate)": { + "vars": { + "s4-0": "bolt-idx", + "s5-1": "params", + "s3-0": "left-bolt" + } + }, + "(method 29 fort-elec-gate)": { + "args": ["obj", "scale"] + }, + "(event idle blocking-plane)": { + "vars": { + "v1-0": "evt-type", + "v1-3": "prim", + "gp-0": "proc-child-ptr-0", + "s5-0": "proc-child-0", + "gp-1": "proc-child-ptr-1", + "s5-1": "proc-child-1" + } + }, + "(method 21 blocking-plane)": { + "args": ["obj", "vec-pair", "height"] + }, + "blocking-plane-init-by-other": { + "args": ["vec-pair", "height"] + }, + "blocking-plane-destroy": { + "vars": { + "gp-0": "child-proc-ptr", + "s5-0": "child-proc" + } + }, + "simple-focus-init-by-other": { + "vars": { + "gp-0": "root" + } + }, + "simple-nav-sphere-event-handler": { + "args": ["proc", "arg1", "event-type", "event"], + "vars": { + "f0-0": "radius", + "a0-7": "collide-shape" + } + }, + "plat-trans": { + "vars": { + "gp-0": "trans" + } + }, + "plat-event": { + "args": ["proc", "arg1", "event-type", "event"], + "vars": { + "v1-0": "evt-type" + } + }, + "eco-door-event-handler": { + "args": ["proc", "arg1", "event-type", "event"], + "vars": { + "v1-0": "evt-type" + } + }, + "(code door-opening eco-door)": { + "vars": { + "v1-14": "prim" + } + }, + "(code door-open eco-door)": { + "vars": { + "v1-3": "prim", + "f30-0": "dist-from-target", + "f28-0": "dist-from-camera" + } + }, + "(code door-closing eco-door)": { + "vars": { + "gp-0": "params" + } + }, + "(method 25 eco-door)": { + "vars": { + "s5-0": "collision-shape", + "v1-2": "collision-mesh", + "v1-5": "prim" + } + }, + "(method 11 eco-door)": { + "vars": { + "f0-0": "door-scale", + "v1-8": "state-actor" + } + }, + "(method 37 basebutton)": { + "args": ["obj", "vec", "quat"] + }, + "(event up-idle basebutton)": { + "vars": { + "v1-1": "attack" + } + }, + "(event going-down basebutton)": { + "vars": { + "v1-0": "evt-type" + } + }, + "(code going-down basebutton)": { + "vars": { + "gp-0": "activation-script" + } + }, + "(event down-idle basebutton)": { + "vars": { + "v1-0": "evt-type" + } + }, + "(method 38 basebutton)": { + "args": ["obj", "pressed?"] + }, + "(method 33 basebutton)": { + "vars": { + "s5-1": "channel-0", + "s5-2": "channel-1" + } + }, + "(method 34 basebutton)": { + "vars": { + "s5-0": "collision-shape", + "s4-0": "collision-mesh", + "v1-12": "prim" + } + }, + "basebutton-init-by-other": { + "args": [ + "process-actor", + "vec", + "quat", + "notify-actor", + "pressed?", + "timeout" + ] + }, + "(method 36 basebutton)": { + "args": ["obj", "event-type"], + "vars": { + "a1-1": "event", + "a1-2": "event", + "s4-0": "actor-group-idx", + "s3-0": "actor-group", + "s2-0": "actor-idx", + "v1-10": "actor", + "t9-1": "func", + "t9-0": "func", + "v1-2": "actor" + } + }, + "(method 31 plat)": { + "vars": { + "s5-0": "collision-shape", + "s4-0": "collision-mesh", + "v1-11": "prim" + } + }, + "(method 11 plat)": { + "vars": { + "a1-4": "params" + }, + "args": ["obj", "entity"] + }, + "(event idle drop-plat)": { + "vars": { + "a0-5": "proc-focus", + "s5-0": "proc-temp", + "a0-13": "proc-focus" + } + }, + "(event idle bouncer)": { + "vars": { + "v1-0": "evt-type" + } + }, + "(method 24 bouncer)": { + "vars": { + "s5-0": "collision-shape", + "v1-2": "collision-mesh", + "v1-5": "prim" + } + }, + "(method 7 conveyor)": { + "args": ["obj", "new-addr"] + }, + "(method 24 conveyor)": { + "vars": { + "v1-4": "scale-factor", + "a0-1": "entity", + "sv-16": "tag" + } + }, + "(method 25 conveyor)": { + "vars": { + "v0-1": "sound", + "v1-1": "actor-options" + } + }, + "(method 26 conveyor)": { + "vars": { + "s4-0": "vec", + "a1-2": "sections", + "a2-0": "section-count", + "a0-3": "section-idx", + "v1-8": "section", + "a1-3": "vec-temp" + }, + "args": ["obj", "proc-focus"] + }, + "(method 48 elevator)": { + "vars": { + "gp-0": "target", + "v1-6": "collide-query" + } + }, + "(method 41 elevator)": { + "vars": { + "a0-1": "entity", + "a0-2": "entity", + "a0-3": "entity", + "a0-4": "entity", + "a0-5": "entity" + } + }, + "ease-value-in-out": { + "args": ["value", "step-amount"], + "vars": { + "f0-0": "step" + } + }, + "elevator-event": { + "args": ["proc", "arg1", "event-type", "event"], + "vars": { + "v1-0": "evt-type", + "v1-8": "proc-focus", + "v1-20": "next-state-0", + "v1-48": "next-state-1" + } + }, + "(method 47 elevator)": { + "vars": { + "s0-0": "path-vertex-idx", + "sv-32": "path-point", + "s1-0": "elev-params", + "f28-0": "smallest-dist", + "f30-0": "point-idx-tracker", + "f0-12": "dist" + } + }, + "(method 44 elevator)": { + "vars": { + "s5-0": "target-temp", + "a0-2": "target" + } + }, + "(method 46 elevator)": { + "vars": { + "sv-16": "zero", + "a0-1": "target" + } + }, + "(method 11 elevator)": { + "args": ["obj", "entity"], + "vars": { + "s5-1": "num-path-points", + "s3-1": "path-point-idx" + } + }, + "(method 39 elevator)": { + "args": ["obj", "path-point-x", "path-point-y"], + "vars": { + "s3-0": "point-x", + "a1-3": "point-y" } }, "(method 16 drawable-region-prim)": { diff --git a/goal_src/jak2/engine/collide/collide-shape-h.gc b/goal_src/jak2/engine/collide/collide-shape-h.gc index 035f0808a3..c2b93b4b9f 100644 --- a/goal_src/jak2/engine/collide/collide-shape-h.gc +++ b/goal_src/jak2/engine/collide/collide-shape-h.gc @@ -276,7 +276,6 @@ ) -;; WARN: Return type mismatch int vs none. (defmethod prepare collide-rider-pool ((obj collide-rider-pool)) "Gets this pool ready to be used to allow allocations. This should be called once at the start of every frame." (set! (-> obj alloc-count) 0) @@ -446,7 +445,7 @@ (penetrate-using penetrate :offset-assert 168) (penetrated-by penetrate :offset-assert 176) (backup-collide-as collide-spec :offset-assert 184) - (backup-collde-with collide-spec :offset-assert 188) + (backup-collide-with collide-spec :offset-assert 188) (event-priority uint8 :offset-assert 192) (rider-max-momentum float :offset-assert 196) ) @@ -455,7 +454,7 @@ :flag-assert #x37000000c8 (:methods (new (symbol type process-drawable collide-list-enum) _type_ 0) - (collide-shape-method-28 () none 28) + (move-by-vector! (_type_ vector) none 28) (collide-shape-method-29 (_type_ vector) none 29) (collide-shape-method-30 () none 30) (collide-shape-method-31 () none 31) @@ -674,9 +673,3 @@ ) (define-perm *collide-rider-pool* collide-rider-pool (new 'global 'collide-rider-pool)) - -0 - - - - diff --git a/goal_src/jak2/engine/collide/collide-touch-h.gc b/goal_src/jak2/engine/collide/collide-touch-h.gc index 984348f980..5f3468bfff 100644 --- a/goal_src/jak2/engine/collide/collide-touch-h.gc +++ b/goal_src/jak2/engine/collide/collide-touch-h.gc @@ -17,6 +17,7 @@ :flag-assert #x900000068 ) + (deftype touching-prims-entry (structure) ((next touching-prims-entry :offset-assert 0) (prev touching-prims-entry :offset-assert 4) @@ -35,6 +36,7 @@ ) ) + (deftype touching-prims-entry-pool (structure) ((head touching-prims-entry :offset-assert 0) (nodes touching-prims-entry 64 :inline :offset-assert 16) @@ -51,6 +53,7 @@ ) ) + (defmethod init-list! touching-prims-entry-pool ((obj touching-prims-entry-pool)) (let ((v1-0 (the-as touching-prims-entry #f))) (let ((a1-0 (the-as touching-prims-entry (-> obj nodes)))) @@ -71,6 +74,7 @@ (none) ) +;; WARN: Return type mismatch structure vs touching-prims-entry-pool. (defmethod new touching-prims-entry-pool ((allocation symbol) (type-to-make type)) (let ((t9-0 (method-of-type structure new)) (v1-1 type-to-make) @@ -100,11 +104,12 @@ (get-next (_type_ touching-shapes-entry) touching-prims-entry 10) (touching-shapes-entry-method-11 () none 11) (touching-shapes-entry-method-12 (_type_ collide-shape uint) touching-prims-entry 12) - (touching-shapes-entry-method-13 () none 13) + (touching-shapes-entry-method-13 (_type_ collide-shape uint uint) basic 13) (touching-shapes-entry-method-14 () none 14) ) ) + (deftype touching-list (structure) ((num-touching-shapes int32 :offset-assert 0) (resolve-u int8 :offset-assert 4) @@ -123,6 +128,8 @@ ) ) + +;; WARN: Return type mismatch structure vs touching-list. (defmethod new touching-list ((allocation symbol) (type-to-make type)) (let ((t9-0 (method-of-type structure new)) (v1-1 type-to-make) @@ -140,6 +147,7 @@ (-> obj head) ) +;; WARN: Return type mismatch collide-shape vs touching-prims-entry. (defmethod get-next touching-shapes-entry ((obj touching-shapes-entry) (arg0 touching-shapes-entry)) (the-as touching-prims-entry (-> arg0 cshape1)) ) @@ -147,10 +155,7 @@ (kmemopen global "collide-touching-lists") (define-perm *touching-prims-entry-pool* touching-prims-entry-pool (new 'global 'touching-prims-entry-pool)) + (define-perm *touching-list* touching-list (new 'global 'touching-list)) (kmemclose) - - - - diff --git a/goal_src/jak2/engine/common_objs/base-plat.gc b/goal_src/jak2/engine/common_objs/base-plat.gc index 3387f925ad..1f7d9dd634 100644 --- a/goal_src/jak2/engine/common_objs/base-plat.gc +++ b/goal_src/jak2/engine/common_objs/base-plat.gc @@ -5,5 +5,413 @@ ;; name in dgo: base-plat ;; dgos: GAME, COMMON +;; +++eco-door-flags +(defenum eco-door-flags + :bitfield #t + :type int32 + (ecdf00) + (ecdf01) + (auto-close) + (one-way) + ) +;; ---eco-door-flags + + ;; DECOMP BEGINS +(deftype base-plat (process-focusable) + ((root-override collide-shape-moving :offset 128) + (smush smush-control :inline :offset-assert 208) + (basetrans vector :inline :offset-assert 240) + (bounce-time time-frame :offset-assert 256) + (bouncing symbol :offset-assert 264) + (bounce-scale meters :offset-assert 268) + ) + :heap-base #x90 + :method-count-assert 34 + :size-assert #x110 + :flag-assert #x2200900110 + (:methods + (execute-effects (_type_) none 27) + (stop-bouncing! (_type_) none 28) + (start-bouncing! (_type_) none :behavior base-plat 29) + (get-art-group (_type_) art-group 30) + (base-plat-method-31 (_type_) none 31) + (base-plat-method-32 (_type_) none 32) + (base-plat-method-33 (_type_) none 33) + ) + ) + + +(defmethod base-plat-method-33 base-plat ((obj base-plat)) + 0 + (none) + ) + +(defmethod stop-bouncing! base-plat ((obj base-plat)) + "Sets `bouncing` to false and resets related settings to their defaults" + (set! (-> obj basetrans quad) (-> obj root-override trans quad)) + (set! (-> obj bouncing) #f) + (set! (-> obj bounce-scale) 819.2) + 0 + (none) + ) + +(defmethod start-bouncing! base-plat ((obj base-plat)) + "Sets `bouncing` to [[#t]] and sets up the clock to periodically bounce + and translate the platform via the `smush` + @see [[smush-control]]" + (activate! (-> obj smush) -1.0 60 150 1.0 1.0 (-> self clock)) + (set! (-> obj bounce-time) (-> self clock frame-counter)) + (set! (-> obj bouncing) #t) + (sound-play "plat-bounce" :position (-> obj root-override trans)) + (logclear! (-> obj mask) (process-mask sleep)) + (logclear! (-> obj mask) (process-mask sleep-code)) + 0 + (none) + ) + +;; WARN: Return type mismatch symbol vs none. +;; WARN: new jak 2 until loop case, check carefully +(defbehavior plat-code base-plat () + "After calling [[transform-post]] for 2 consecutive frames, put the process to sleep if it's not bouncing + otherwise, continue bouncing...forever! + @see [[transform-post]]" + (transform-post) + (suspend) + (transform-post) + (suspend) + (until #f + (when (not (-> self bouncing)) + (logior! (-> self mask) (process-mask sleep)) + (suspend) + 0 + ) + (while (-> self bouncing) + (suspend) + ) + ) + #f + (none) + ) + +(defbehavior plat-trans base-plat () + "If the platform is `bouncing`, move the platform accordingly with the [[smush-control]] + - If the amplitude of the `smush` has hit `0.0` then stop bouncing + + If we aren't bouncing however, TODO - CSHAPE" + (rider-trans) + (cond + ((-> self bouncing) + (let ((trans (new 'stack-no-clear 'vector))) + (set! (-> trans quad) (-> self basetrans quad)) + (+! (-> trans y) (* (-> self bounce-scale) (update! (-> self smush)))) + (collide-shape-method-29 (-> self root-override) trans) + ) + (if (not (!= (-> self smush amp) 0.0)) + (set! (-> self bouncing) #f) + ) + ) + (else + (collide-shape-method-29 (-> self root-override) (-> self basetrans)) + ) + ) + (none) + ) + +(defbehavior plat-post base-plat () + (execute-effects self) + (rider-post) + (none) + ) + +(defmethod base-plat-method-32 base-plat ((obj base-plat)) + 0 + (none) + ) + +(defmethod execute-effects base-plat ((obj base-plat)) + "Executes various ancillary tasks with the platform, such as spawning particles or playing the associated sound" + (if (nonzero? (-> obj part)) + (sparticle-launch-control-method-11 (-> obj part) (-> obj root-override trans)) + ) + (when (nonzero? (-> obj sound)) + (set! (-> obj sound trans quad) (-> obj root-override trans quad)) + (update! (-> obj sound)) + ) + (none) + ) + +;; WARN: Return type mismatch none vs object. +(defbehavior plat-event base-plat ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + "Handles platform related events. Presently all this does is: + - if `event-type` is [['bonk]], then call [[base-plat:29]]" + (let ((evt-type event-type)) + (the-as object (if (= evt-type 'bonk) + (start-bouncing! self) + ) + ) + ) + ) + +(deftype eco-door (process-drawable) + "@unused - Likely a left-over from Jak 1" + ((root-override collide-shape :offset 128) + (speed float :offset-assert 200) + (open-distance float :offset-assert 204) + (close-distance float :offset-assert 208) + (out-dir vector :inline :offset-assert 224) + (open-sound sound-name :offset-assert 240) + (close-sound sound-name :offset-assert 256) + (state-actor entity-actor :offset-assert 272) + (flags eco-door-flags :offset-assert 276) + (locked symbol :offset-assert 280) + (auto-close symbol :offset-assert 284) + (one-way symbol :offset-assert 288) + ) + :heap-base #xb0 + :method-count-assert 27 + :size-assert #x124 + :flag-assert #x1b00b00124 + (:methods + (door-closed () _type_ :state 20) + (door-opening () _type_ :state 21) + (door-open () _type_ :state 22) + (door-closing () _type_ :state 23) + (lock-according-to-task! (_type_) none 24) + (eco-door-method-25 (_type_) none 25) + (stub (_type_) none 26) + ) + ) + + +;; WARN: Return type mismatch symbol vs object. +(defbehavior eco-door-event-handler eco-door ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + "If the `event-type` is `'trigger`, flip the `locked` flag on the door + and play the respective sound + + @unused - likely a leftover from Jak 1" + (let ((evt-type event-type)) + (the-as object (when (= evt-type 'trigger) + (set! (-> self locked) (not (-> self locked))) + (cond + ((-> self locked) + (if (and (-> self next-state) (= (-> self next-state name) 'door-closed)) + (sound-play "door-lock") + ) + ) + (else + (sound-play "door-unlock") + ) + ) + #t + ) + ) + ) + ) + +eco-door-event-handler + +(defstate door-closed (eco-door) + :virtual #t + :event eco-door-event-handler + :code (behavior () + (ja :num-func num-func-identity :frame-num 0.0) + (suspend) + (collide-shape-method-46 (-> self root-override)) + (ja-post) + (until #f + (when (and *target* (and (>= (-> self open-distance) + (vector-vector-distance (-> self root-override trans) (-> *target* control trans)) + ) + (zero? (logand (focus-status teleporting) (-> *target* focus-status))) + ) + ) + (lock-according-to-task! self) + (if (and (not (-> self locked)) + (or (and (-> self entity) (logtest? (-> self entity extra perm status) (entity-perm-status subtask-complete))) + (send-event *target* 'query 'powerup (pickup-type eco-blue)) + (and (-> self one-way) (< (vector4-dot (-> self out-dir) (target-pos 0)) -8192.0)) + ) + ) + (go-virtual door-opening) + ) + ) + (suspend) + ) + #f + (none) + ) + ) + +(defstate door-opening (eco-door) + :virtual #t + :event eco-door-event-handler + :code (behavior () + (if (and (not (and (-> self entity) (logtest? (-> self entity extra perm status) (entity-perm-status subtask-complete))) + ) + (send-event *target* 'query 'powerup (pickup-type eco-blue)) + ) + (sound-play "blue-eco-on" :position (-> self root-override trans)) + ) + (sound-play-by-name (-> self open-sound) (new-sound-id) 1024 0 0 (sound-group sfx) #t) + (let ((prim (-> self root-override root-prim))) + (set! (-> prim prim-core collide-as) (collide-spec)) + (set! (-> prim prim-core collide-with) (collide-spec)) + ) + 0 + (until (ja-done? 0) + (ja :num! (seek! max (-> self speed))) + (suspend) + ) + (go-virtual door-open) + (none) + ) + :post (the-as (function none :behavior eco-door) transform-post) + ) + +(defstate door-open (eco-door) + :virtual #t + :event eco-door-event-handler + :code (behavior () + (set! (-> self state-time) (-> self clock frame-counter)) + (process-entity-status! self (entity-perm-status subtask-complete) #t) + (let ((prim (-> self root-override root-prim))) + (set! (-> prim prim-core collide-as) (collide-spec)) + (set! (-> prim prim-core collide-with) (collide-spec)) + ) + 0 + (ja :num-func num-func-identity :frame-num max) + (logior! (-> self draw status) (draw-control-status no-draw)) + (suspend) + (collide-shape-method-46 (-> self root-override)) + (ja-post) + (until #f + (let ((dist-from-target (vector4-dot (-> self out-dir) (target-pos 0))) + (dist-from-camera (vector4-dot (-> self out-dir) (camera-pos))) + ) + (when (and (-> self auto-close) + (or (not *target*) (or (< (-> self close-distance) + (vector-vector-distance (-> self root-override trans) (-> *target* control trans)) + ) + (logtest? (focus-status teleporting) (-> *target* focus-status)) + ) + ) + ) + (if (and (>= (* dist-from-target dist-from-camera) 0.0) (< 16384.0 (fabs dist-from-camera))) + (go-virtual door-closing) + ) + ) + ) + (suspend) + ) + #f + (none) + ) + ) + +(defstate door-closing (eco-door) + :virtual #t + :event eco-door-event-handler + :code (behavior () + (let ((v1-1 (-> self root-override root-prim))) + (set! (-> v1-1 prim-core collide-as) (-> self root-override backup-collide-as)) + (set! (-> v1-1 prim-core collide-with) (-> self root-override backup-collide-with)) + ) + (logclear! (-> self draw status) (draw-control-status no-draw)) + (let ((params (new 'stack 'overlaps-others-params))) + (set! (-> params options) (overlaps-others-options oo0)) + (set! (-> params tlist) #f) + (while (find-overlapping-shapes (-> self root-override) params) + (suspend) + ) + ) + (sound-play-by-name (-> self close-sound) (new-sound-id) 1024 0 0 (sound-group sfx) #t) + (until (ja-done? 0) + (ja :num! (seek! 0.0 (-> self speed))) + (suspend) + ) + (if (-> self locked) + (sound-play "door-lock") + ) + (go-virtual door-closed) + (none) + ) + :post (the-as (function none :behavior eco-door) transform-post) + ) + +(defmethod lock-according-to-task! eco-door ((obj eco-door)) + "If the associated subtask is completed, lock the door if [[eco-door-flags:0]] is set + otherwise, lock it if [[eco-door-flags:0]] is set" + (when (-> obj state-actor) + (if (logtest? (-> obj state-actor extra perm status) (entity-perm-status subtask-complete)) + (set! (-> obj locked) (logtest? (-> obj flags) (eco-door-flags ecdf01))) + (set! (-> obj locked) (logtest? (-> obj flags) (eco-door-flags ecdf00))) + ) + ) + 0 + (none) + ) + +(defmethod eco-door-method-25 eco-door ((obj eco-door)) + (let ((collision-shape (new 'process 'collide-shape obj (collide-list-enum hit-by-player)))) + (let ((collision-mesh (new 'process 'collide-shape-prim-mesh collision-shape (the-as uint 0) (the-as uint 0)))) + (set! (-> collision-mesh prim-core collide-as) (collide-spec obstacle)) + (set! (-> collision-mesh prim-core collide-with) (collide-spec jak player-list)) + (set! (-> collision-mesh prim-core action) (collide-action solid)) + (set! (-> collision-mesh transform-index) 0) + (set-vector! (-> collision-mesh local-sphere) 0.0 0.0 0.0 16384.0) + (set! (-> collision-shape total-prims) (the-as uint 1)) + (set! (-> collision-shape root-prim) collision-mesh) + ) + (set! (-> collision-shape nav-radius) (* 0.75 (-> collision-shape root-prim local-sphere w))) + (let ((prim (-> collision-shape root-prim))) + (set! (-> collision-shape backup-collide-as) (-> prim prim-core collide-as)) + (set! (-> collision-shape backup-collide-with) (-> prim prim-core collide-with)) + ) + (set! (-> obj root-override) collision-shape) + ) + 0 + (none) + ) + +(defmethod stub eco-door ((obj eco-door)) + "@unused - Stub with no overrides" + 0 + (none) + ) + +;; WARN: Return type mismatch object vs none. +(defmethod init-from-entity! eco-door ((obj eco-door) (arg0 entity-actor)) + (eco-door-method-25 obj) + (process-drawable-from-entity! obj arg0) + (let ((door-scale (res-lump-float (-> obj entity) 'scale :default 1.0))) + (set-vector! (-> obj root-override scale) door-scale door-scale door-scale 1.0) + ) + (set! (-> obj open-distance) 32768.0) + (set! (-> obj close-distance) 49152.0) + (set! (-> obj speed) 1.0) + (set! (-> obj state-actor) #f) + (let ((state-actor (entity-actor-lookup arg0 'state-actor 0))) + (if state-actor + (set! (-> obj state-actor) state-actor) + ) + ) + (set! (-> obj locked) #f) + (set! (-> obj flags) (res-lump-value arg0 'flags eco-door-flags :time -1000000000.0)) + (lock-according-to-task! obj) + (set! (-> obj auto-close) (logtest? (-> obj flags) (eco-door-flags auto-close))) + (set! (-> obj one-way) (logtest? (-> obj flags) (eco-door-flags one-way))) + (vector-z-quaternion! (-> obj out-dir) (-> obj root-override quat)) + (set! (-> obj out-dir w) (- (vector-dot (-> obj out-dir) (-> obj root-override trans)))) + (collide-shape-method-46 (-> obj root-override)) + (stub obj) + (if (and (not (-> obj auto-close)) + (-> obj entity) + (logtest? (-> obj entity extra perm status) (entity-perm-status subtask-complete)) + ) + (go (method-of-object obj door-open)) + (go (method-of-object obj door-closed)) + ) + (none) + ) diff --git a/goal_src/jak2/engine/common_objs/basebutton.gc b/goal_src/jak2/engine/common_objs/basebutton.gc index f3fea366d4..ac2d9c73ad 100644 --- a/goal_src/jak2/engine/common_objs/basebutton.gc +++ b/goal_src/jak2/engine/common_objs/basebutton.gc @@ -5,5 +5,502 @@ ;; name in dgo: basebutton ;; dgos: GAME, COMMON +;; +++button-status +(defenum button-status + :type uint16 + :bitfield #t + (pressed) + (button-status-1) + (button-status-2) + (button-status-3) + (button-status-4)) +;; ---button-status + + ;; DECOMP BEGINS +(deftype basebutton (process-focusable) + ((button-status button-status :offset-assert 204) + (notify-actor entity :offset-assert 208) + (actor-group (pointer actor-group) :offset-assert 212) + (actor-group-count int32 :offset-assert 216) + (timeout float :offset-assert 220) + (button-id int32 :offset-assert 224) + (event-going-down symbol :offset-assert 228) + (event-down symbol :offset-assert 232) + (event-going-up symbol :offset-assert 236) + (event-up symbol :offset-assert 240) + (anim-speed float :offset-assert 244) + (move-to-pos vector :inline :offset-assert 256) + (move-to-quat quaternion :inline :offset-assert 272) + ) + :heap-base #xa0 + :method-count-assert 39 + :size-assert #x120 + :flag-assert #x2700a00120 + (:methods + (down-idle () _type_ :state 27) + (going-down () _type_ :state 28) + (going-up () _type_ :state 29) + (up-idle () _type_ :state 30) + (reset! (_type_) none 31) + (idle-state-transition (_type_) object 32) + (basebutton-method-33 (_type_) none 33) + (basebutton-method-34 (_type_) none 34) + (prepare-trigger-event! (_type_) none 35) + (send-event! (_type_ symbol) none :behavior basebutton 36) + (move-to! (_type_ vector quaternion) none 37) + (press! (_type_ symbol) entity-perm-status 38) + ) + ) + + +(let ((a0-2 (new 'static 'skeleton-group + :name "skel-generic-button" + :extra #f + :info #f + :art-group-name "mtn-dice-button" + :bounds (new 'static 'vector :w 12288.0) + :version #x7 + ) + ) + ) + (set! (-> a0-2 jgeo) 0) + (set! (-> a0-2 janim) 3) + (set! (-> a0-2 mgeo 0) 1) + (set! (-> a0-2 lod-dist 0) 4095996000.0) + (add-to-loading-level a0-2) + ) + +(defmethod move-to! basebutton ((obj basebutton) (vec vector) (quat quaternion)) + (logclear! (-> obj button-status) (button-status button-status-2)) + (if vec + (set! (-> obj move-to-pos quad) (-> vec quad)) + (set! (-> obj move-to-pos quad) (-> obj root trans quad)) + ) + (if quat + (quaternion-copy! (-> obj move-to-quat) quat) + (quaternion-copy! (-> obj move-to-quat) (-> obj root quat)) + ) + 0 + (none) + ) + +(defmethod idle-state-transition basebutton ((obj basebutton)) + "If `button-status` has [[button-status:0]] set, transition to [[basebutton::27]] otherwise, [[basebutton::30]]" + (if (logtest? (-> obj button-status) (button-status pressed)) + (go (method-of-object obj down-idle)) + (go (method-of-object obj up-idle)) + ) + ) + +(defstate up-idle (basebutton) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) + (the-as object (cond + ((= v1-0 'attack) + (let ((attack (the-as attack-info (-> event param 1)))) + (case (-> attack mode) + (('flop 'spin 'punch 'eco-yellow 'eco-red 'eco-blue 'eco-dark) + (when (or (not (or (= (-> attack mode) 'spin) (= (-> attack mode) 'punch))) + (logtest? (-> self button-status) (button-status button-status-3)) + ) + (send-event! self (-> self event-going-down)) + (go-virtual going-down) + ) + ) + ) + ) + ) + ((= v1-0 'trigger) + (sound-play "silo-button") + (go-virtual going-down) + ) + ((= v1-0 'touch) + (when (logtest? (-> self button-status) (button-status button-status-4)) + (send-event! self (-> self event-going-down)) + (go-virtual going-down) + ) + ) + ((= v1-0 'move-to) + (move-to! self (the-as vector (-> event param 0)) (the-as quaternion (-> event param 1))) + ) + ) + ) + ) + ) + :enter (behavior () + (press! self #f) + (none) + ) + :trans (behavior () + (if (logtest? (-> self button-status) (button-status button-status-2)) + (rider-trans) + ) + (none) + ) + :code (the-as (function none :behavior basebutton) sleep-code) + :post (behavior () + (when (logtest? (-> self button-status) (button-status button-status-2)) + (logclear! (-> self button-status) (button-status button-status-2)) + (set! (-> self root trans quad) (-> self move-to-pos quad)) + (quaternion-copy! (-> self root quat) (-> self move-to-quat)) + (rider-post) + ) + (none) + ) + ) + +(defstate going-down (basebutton) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((evt-type event-type)) + (the-as object (cond + ((= evt-type 'untrigger) + (go-virtual going-up) + ) + ((= evt-type 'move-to) + (move-to! self (the-as vector (-> event param 0)) (the-as quaternion (-> event param 1))) + ) + ) + ) + ) + ) + :enter (behavior () + (press! self #t) + (none) + ) + :trans (the-as (function none :behavior basebutton) rider-trans) + :code (behavior () + (ja-no-eval :num! (seek! max (-> self anim-speed))) + (until (ja-done? 0) + (suspend) + (ja :num! (seek! max (-> self anim-speed))) + ) + (send-event! self (-> self event-down)) + (let ((activation-script (res-lump-struct (-> self entity) 'on-activate structure))) + (if activation-script + (eval! + (new 'stack 'script-context (the-as basic (process->ppointer self)) self (the-as vector #f)) + (the-as pair activation-script) + ) + ) + ) + (go-virtual down-idle) + (none) + ) + :post (behavior () + (when (logtest? (-> self button-status) (button-status button-status-2)) + (logclear! (-> self button-status) (button-status button-status-2)) + (set! (-> self root trans quad) (-> self move-to-pos quad)) + (quaternion-copy! (-> self root quat) (-> self move-to-quat)) + ) + (rider-post) + (none) + ) + ) + +(defstate down-idle (basebutton) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((evt-type event-type)) + (the-as object (cond + ((= evt-type 'untrigger) + (go-virtual going-up) + ) + ((= evt-type 'move-to) + (move-to! self (the-as vector (-> event param 0)) (the-as quaternion (-> event param 1))) + ) + ) + ) + ) + ) + :enter (behavior () + (press! self #t) + (set! (-> self state-time) (-> self clock frame-counter)) + (none) + ) + :trans (behavior () + (if (logtest? (-> self button-status) (button-status button-status-2)) + (rider-trans) + ) + (none) + ) + :code (behavior () + (cond + ((= (-> self timeout) 0.0) + (sleep-code) + ) + (else + (until (>= (- (-> self clock frame-counter) (-> self state-time)) (the int (* 300.0 (-> self timeout)))) + (suspend) + ) + (send-event! self (-> self event-going-up)) + (sound-play "silo-button") + (go-virtual going-up) + ) + ) + (none) + ) + :post (behavior () + (when (logtest? (-> self button-status) (button-status button-status-2)) + (logclear! (-> self button-status) (button-status button-status-2)) + (set! (-> self root trans quad) (-> self move-to-pos quad)) + (quaternion-copy! (-> self root quat) (-> self move-to-quat)) + (rider-post) + ) + (none) + ) + ) + +(defstate going-up (basebutton) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) + (the-as object (cond + ((= v1-0 'move-to) + (move-to! self (the-as vector (-> event param 0)) (the-as quaternion (-> event param 1))) + ) + ((= v1-0 'trigger) + (go-virtual going-down) + ) + ) + ) + ) + ) + :enter (behavior () + (press! self #f) + (none) + ) + :trans (the-as (function none :behavior basebutton) rider-trans) + :code (behavior () + (ja-no-eval :num! (seek! 0.0 (-> self anim-speed))) + (until (ja-done? 0) + (suspend) + (ja :num! (seek! 0.0 (-> self anim-speed))) + ) + (send-event! self (-> self event-up)) + (go-virtual up-idle) + (none) + ) + :post (behavior () + (when (logtest? (-> self button-status) (button-status button-status-2)) + (logclear! (-> self button-status) (button-status button-status-2)) + (set! (-> self root trans quad) (-> self move-to-pos quad)) + (quaternion-copy! (-> self root quat) (-> self move-to-quat)) + ) + (rider-post) + (none) + ) + ) + +(defmethod press! basebutton ((obj basebutton) (pressed? symbol)) + (if pressed? + (logior! (-> obj button-status) (button-status pressed)) + (logclear! (-> obj button-status) (button-status pressed)) + ) + (when (not (logtest? (-> obj button-status) (button-status button-status-1))) + (if pressed? + (process-entity-status! obj (entity-perm-status subtask-complete) #t) + (process-entity-status! obj (entity-perm-status subtask-complete) #f) + ) + ) + ) + +(defmethod send-event! basebutton ((obj basebutton) (event-type symbol)) + "Prepares an [[event-message-block]] using the provided type to send an event to: + - the `notify-actor` + - every [[entity-actor]] in the `actor-group` array + @see [[entity-actor]]" + (when event-type + (let ((event (new 'stack-no-clear 'event-message-block))) + (set! (-> event from) (process->ppointer self)) + (set! (-> event num-params) 0) + (set! (-> event message) event-type) + (let ((func send-event-function) + (actor (-> obj notify-actor)) + ) + (func + (if actor + (-> actor extra process) + ) + event + ) + (dotimes (actor-group-idx (-> obj actor-group-count)) + (let ((actor-group (-> obj actor-group actor-group-idx))) + (dotimes (actor-idx (-> actor-group length)) + (set! event (new 'stack-no-clear 'event-message-block)) + (set! (-> event from) (process->ppointer self)) + (set! (-> event num-params) 0) + (set! (-> event message) event-type) + (set! func send-event-function) + (set! actor (-> actor-group data actor-idx actor)) + (func + (if actor + (-> actor extra process) + ) + event + ) + ) + ) + ) + ) + ) + ) + 0 + (none) + ) + +(defmethod reset! basebutton ((obj basebutton)) + (set! (-> obj button-status) (button-status)) + (set! (-> obj notify-actor) #f) + (set! (-> obj timeout) 0.0) + (set! (-> obj event-going-down) #f) + (set! (-> obj event-down) #f) + (set! (-> obj event-going-up) #f) + (set! (-> obj event-up) #f) + (set! (-> obj anim-speed) 1.0) + 0 + (none) + ) + +(defmethod prepare-trigger-event! basebutton ((obj basebutton)) + "Sets `event-going-down` to `'trigger`" + (set! (-> obj event-going-down) 'trigger) + 0 + (none) + ) + +(defmethod basebutton-method-33 basebutton ((obj basebutton)) + "TODO - joint stuff" + (initialize-skeleton + obj + (the-as skeleton-group (art-group-get-by-name *level* "skel-generic-button" (the-as (pointer uint32) #f))) + (the-as pair 0) + ) + (ja-channel-set! 1) + (cond + ((logtest? (-> obj button-status) (button-status pressed)) + (let ((channel-0 (-> obj skel root-channel 0))) + (joint-control-channel-group-eval! + channel-0 + (the-as art-joint-anim (-> obj draw art-group data 3)) + num-func-identity + ) + (set! (-> channel-0 frame-num) + (the float (+ (-> (the-as art-joint-anim (-> obj draw art-group data 3)) frames num-frames) -1)) + ) + ) + ) + (else + (let ((channel-1 (-> obj skel root-channel 0))) + (joint-control-channel-group-eval! + channel-1 + (the-as art-joint-anim (-> obj draw art-group data 3)) + num-func-identity + ) + (set! (-> channel-1 frame-num) 0.0) + ) + ) + ) + (set! (-> obj anim-speed) 2.0) + (transform-post) + (none) + ) + +(defmethod basebutton-method-34 basebutton ((obj basebutton)) + "TODO - collision stuff" + (let ((collision-shape (new 'process 'collide-shape obj (collide-list-enum hit-by-player)))) + (let ((collision-mesh (new 'process 'collide-shape-prim-mesh collision-shape (the-as uint 0) (the-as uint 0)))) + (set! (-> collision-mesh prim-core collide-as) (collide-spec obstacle pusher)) + (set! (-> collision-mesh prim-core collide-with) (collide-spec jak bot player-list)) + (set! (-> collision-mesh prim-core action) (collide-action solid rideable)) + (set! (-> collision-mesh transform-index) 3) + (set-vector! (-> collision-mesh local-sphere) 0.0 0.0 0.0 12288.0) + (set! (-> collision-shape total-prims) (the-as uint 1)) + (set! (-> collision-shape root-prim) collision-mesh) + ) + ((method-of-object collision-shape collide-shape-method-54)) + (set! (-> collision-shape nav-radius) (* 0.75 (-> collision-shape root-prim local-sphere w))) + (let ((prim (-> collision-shape root-prim))) + (set! (-> collision-shape backup-collide-as) (-> prim prim-core collide-as)) + (set! (-> collision-shape backup-collide-with) (-> prim prim-core collide-with)) + ) + (set! (-> obj root) collision-shape) + ) + 0 + (none) + ) + +;; WARN: Return type mismatch object vs none. +(defmethod init-from-entity! basebutton ((obj basebutton) (arg0 entity-actor)) + (local-vars (sv-16 res-tag)) + (reset! obj) + (set! (-> obj button-id) -1) + (let ((v1-4 (res-lump-value (-> obj entity) 'extra-id uint128 :default (the-as uint128 -1) :time -1000000000.0))) + (if (>= (the-as int v1-4) 0) + (set! (-> obj button-id) (the-as int v1-4)) + ) + ) + (basebutton-method-34 obj) + (process-drawable-from-entity! obj arg0) + (if (and (-> obj entity) (logtest? (-> obj entity extra perm status) (entity-perm-status subtask-complete))) + (logior! (-> obj button-status) (button-status pressed)) + (logclear! (-> obj button-status) (button-status pressed)) + ) + (set! (-> obj notify-actor) (entity-actor-lookup arg0 'alt-actor 0)) + (set! sv-16 (new 'static 'res-tag)) + (let ((v1-15 (res-lump-data (-> obj entity) 'actor-groups pointer :tag-ptr (& sv-16)))) + (cond + ((and v1-15 (nonzero? (-> sv-16 elt-count))) + (set! (-> obj actor-group) (the-as (pointer actor-group) v1-15)) + (set! (-> obj actor-group-count) (the-as int (-> sv-16 elt-count))) + ) + (else + (set! (-> obj actor-group) (the-as (pointer actor-group) #f)) + (set! (-> obj actor-group-count) 0) + 0 + ) + ) + ) + (set! (-> obj timeout) (res-lump-float arg0 'timeout)) + (if (not (logtest? (-> obj button-status) (button-status button-status-1))) + (nav-mesh-connect-from-ent (the-as entity-nav-mesh obj)) + ) + (prepare-trigger-event! obj) + (basebutton-method-33 obj) + (idle-state-transition obj) + (none) + ) + +;; WARN: Return type mismatch object vs none. +(defbehavior basebutton-init-by-other basebutton ((process-actor entity-actor) + (vec vector) + (quat quaternion) + (notify-actor entity-actor) + (pressed? symbol) + (timeout float) + ) + (reset! self) + (logior! (-> self button-status) (button-status button-status-1)) + (set! (-> self button-id) -1) + (if pressed? + (logior! (-> self button-status) (button-status pressed)) + ) + (set! (-> self notify-actor) notify-actor) + (set! (-> self timeout) timeout) + (if process-actor + (process-entity-set! self process-actor) + ) + (set! (-> self actor-group) (the-as (pointer actor-group) #f)) + (set! (-> self actor-group-count) 0) + (basebutton-method-34 self) + (set! (-> self root trans quad) (-> vec quad)) + (quaternion-copy! (-> self root quat) quat) + (set-vector! (-> self root scale) 1.0 1.0 1.0 1.0) + (prepare-trigger-event! self) + (basebutton-method-33 self) + (idle-state-transition self) + (none) + ) diff --git a/goal_src/jak2/engine/common_objs/blocking-plane.gc b/goal_src/jak2/engine/common_objs/blocking-plane.gc index ec0670b009..bfe8c08e81 100644 --- a/goal_src/jak2/engine/common_objs/blocking-plane.gc +++ b/goal_src/jak2/engine/common_objs/blocking-plane.gc @@ -7,3 +7,237 @@ ;; DECOMP BEGINS +(deftype blocking-plane (process-drawable) + ((root-override collide-shape :offset 128) + ) + :heap-base #x50 + :method-count-assert 22 + :size-assert #xc8 + :flag-assert #x16005000c8 + (:methods + (idle () _type_ :state 20) + (init! (_type_ (inline-array vector) float) none 21) + ) + ) + + +(let ((a0-2 (new 'static 'skeleton-group + :name "skel-blocking-plane" + :extra #f + :info #f + :art-group-name "blocking-plane" + :bounds (new 'static 'vector :w 410009.6) + :texture-level #x6 + :version #x7 + ) + ) + ) + (set! (-> a0-2 jgeo) 0) + (set! (-> a0-2 janim) 2) + (set! (-> a0-2 mgeo 0) 1) + (set! (-> a0-2 lod-dist 0) 4095996000.0) + (add-to-loading-level a0-2) + ) + +(defstate idle (blocking-plane) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((evt-type event-type)) + (the-as object (cond + ((= evt-type 'on) + (cond + ((nonzero? (-> self root-override)) + (let ((prim (-> self root-override root-prim))) + (set! (-> prim prim-core collide-as) (-> self root-override backup-collide-as)) + (let ((v0-0 (the-as int (-> self root-override backup-collide-with)))) + (set! (-> prim prim-core collide-with) (the-as collide-spec v0-0)) + v0-0 + ) + ) + ) + (else + (let ((proc-child-ptr-0 (-> self child))) + (while proc-child-ptr-0 + (let ((proc-child-0 (ppointer->process proc-child-ptr-0))) + (set! proc-child-ptr-0 (-> proc-child-ptr-0 0 brother)) + (if (type? proc-child-0 blocking-plane) + (send-event proc-child-0 'on) + ) + ) + ) + ) + (the-as int #f) + ) + ) + ) + ((= evt-type 'off) + (cond + ((nonzero? (-> self root-override)) + (let ((v1-13 (-> self root-override root-prim))) + (set! (-> v1-13 prim-core collide-as) (collide-spec)) + (set! (-> v1-13 prim-core collide-with) (collide-spec)) + ) + 0 + ) + (else + (let ((proc-child-ptr-1 (-> self child))) + (while proc-child-ptr-1 + (let ((proc-child-1 (ppointer->process proc-child-ptr-1))) + (set! proc-child-ptr-1 (-> proc-child-ptr-1 0 brother)) + (if (type? proc-child-1 blocking-plane) + (send-event proc-child-1 'off) + ) + ) + ) + ) + (the-as int #f) + ) + ) + ) + ) + ) + ) + ) + :code (the-as (function none :behavior blocking-plane) sleep-code) + ) + +(defmethod init! blocking-plane ((obj blocking-plane) (vec-pair (inline-array vector)) (height float)) + "TODO - but sets up the plane given 2 vectors and a height" + (let ((s3-0 (-> vec-pair 0)) + (s4-0 (-> vec-pair 1)) + ) + 0.0 + (* 0.5 (vector-vector-distance s3-0 s4-0)) + (let ((s2-0 (new 'process 'collide-shape obj (collide-list-enum usually-hit-by-player)))) + (let ((v1-3 (new 'process 'collide-shape-prim-mesh s2-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> v1-3 prim-core collide-as) (collide-spec blocking-plane)) + (set! (-> v1-3 prim-core collide-with) (collide-spec jak player-list)) + (set! (-> v1-3 prim-core action) (collide-action solid)) + (set! (-> v1-3 transform-index) 3) + (set! (-> s2-0 total-prims) (the-as uint 1)) + (set! (-> s2-0 root-prim) v1-3) + ) + (set! (-> s2-0 nav-radius) (* 0.75 (-> s2-0 root-prim local-sphere w))) + (let ((v1-6 (-> s2-0 root-prim))) + (set! (-> s2-0 backup-collide-as) (-> v1-6 prim-core collide-as)) + (set! (-> s2-0 backup-collide-with) (-> v1-6 prim-core collide-with)) + ) + (set! (-> obj root-override) s2-0) + ) + (let ((s1-0 (new 'stack-no-clear 'matrix)) + (s2-1 (-> obj root-override)) + ) + (vector+! (-> s2-1 trans) s3-0 s4-0) + (vector-float*! (-> s2-1 trans) (-> s2-1 trans) 0.5) + (+! (-> s2-1 trans y) (* 0.5 height)) + (vector-! (the-as vector (-> s1-0 vector)) s4-0 s3-0) + (let ((f30-1 (vector-normalize-ret-len! (the-as vector (-> s1-0 vector)) 1.0))) + (set! (-> s2-1 scale x) (* 0.00024414062 f30-1)) + (set! (-> s2-1 scale y) (* 0.00024414062 height)) + (set! (-> s2-1 scale z) 0.0) + (set! (-> s1-0 vector 1 quad) (-> (new 'static 'vector :y 1.0 :w 1.0) quad)) + (vector-cross! (-> s1-0 vector 2) (the-as vector (-> s1-0 vector)) (-> s1-0 vector 1)) + (vector-normalize! (-> s1-0 vector 2) 1.0) + (matrix->quaternion (-> s2-1 quat) s1-0) + (let ((v1-20 (-> obj root-override root-prim local-sphere))) + (set! (-> v1-20 x) 0.0) + (set! (-> v1-20 y) (* 0.00024414062 (* 0.5 height))) + (set! (-> v1-20 z) 0.0) + (let ((f0-17 0.5) + (f1-7 (* f30-1 f30-1)) + (f2-2 height) + ) + (set! (-> v1-20 w) (* f0-17 (sqrtf (+ f1-7 (* f2-2 f2-2))))) + ) + ) + ) + ) + ) + (initialize-skeleton + obj + (the-as skeleton-group (art-group-get-by-name *level* "skel-blocking-plane" (the-as (pointer uint32) #f))) + (the-as pair 0) + ) + (logior! (-> obj draw status) (draw-control-status no-draw-bounds)) + (transform-post) + (none) + ) + +;; WARN: Return type mismatch object vs none. +(defbehavior blocking-plane-init-by-other blocking-plane ((vec-pair (inline-array vector)) (height float)) + "Calls [[blocking-plane::21]] with the given args" + (if (not vec-pair) + (deactivate self) + ) + (init! self vec-pair height) + (go-virtual idle) + (none) + ) + +;; WARN: Return type mismatch object vs none. +(defmethod init-from-entity! blocking-plane ((obj blocking-plane) (arg0 entity-actor)) + (let ((s5-0 (new 'process 'path-control obj 'path 0.0 (the-as entity #f) #f)) + (f30-0 (res-lump-float (-> obj entity) 'height :default 122880.0)) + ) + (set! (-> obj path) s5-0) + (if (or (not s5-0) (< (-> s5-0 curve num-cverts) 2)) + (go process-drawable-art-error "bad path") + ) + (logior! (-> s5-0 flags) (path-control-flag display draw-line draw-point draw-text)) + (let ((s4-0 (+ (-> s5-0 curve num-cverts) -1)) + (s3-0 (new 'stack-no-clear 'inline-array 'vector 2)) + ) + (dotimes (v1-12 2) + (set! (-> s3-0 v1-12 quad) (the-as uint128 0)) + ) + (dotimes (s2-0 s4-0) + (get-point-in-path! s5-0 (-> s3-0 0) (the float s2-0) 'interp) + (get-point-in-path! s5-0 (-> s3-0 1) (the float (+ s2-0 1)) 'interp) + (process-spawn blocking-plane s3-0 f30-0 :to obj) + ) + ) + ) + (go (method-of-object obj idle)) + (none) + ) + +(defbehavior blocking-plane-spawn process ((arg0 curve-control) (arg1 (inline-array vector)) (arg2 float)) + (cond + ((and arg1 (or (not arg0) (logtest? (-> arg0 flags) (path-control-flag not-found)))) + (process-spawn blocking-plane arg1 arg2 :to self) + ) + (else + (let ((s4-1 (the int (get-num-segments arg0))) + (s3-0 0) + (s2-0 (new 'stack-no-clear 'inline-array 'vector 2)) + ) + (dotimes (v1-10 2) + (set! (-> s2-0 v1-10 quad) (the-as uint128 0)) + ) + (while (< s3-0 s4-1) + (get-point-in-path! arg0 (-> s2-0 0) (the float s3-0) 'interp) + (get-point-in-path! arg0 (-> s2-0 1) (the float (+ s3-0 1)) 'interp) + (process-spawn blocking-plane s2-0 arg2 :to self) + (+! s3-0 2) + ) + ) + ) + ) + 0 + (none) + ) + +(defbehavior blocking-plane-destroy blocking-plane () + (let ((child-proc-ptr (-> self child))) + (while child-proc-ptr + (let ((child-proc (ppointer->process child-proc-ptr))) + (set! child-proc-ptr (-> child-proc-ptr 0 brother)) + (if (type? child-proc blocking-plane) + (deactivate child-proc) + ) + ) + ) + ) + 0 + (none) + ) diff --git a/goal_src/jak2/engine/common_objs/conveyor.gc b/goal_src/jak2/engine/common_objs/conveyor.gc index 9391fdee39..3674ed8998 100644 --- a/goal_src/jak2/engine/common_objs/conveyor.gc +++ b/goal_src/jak2/engine/common_objs/conveyor.gc @@ -7,3 +7,492 @@ ;; DECOMP BEGINS +(deftype conveyor-section (structure) + ((start vector :inline :offset-assert 0) + (trailing plane :inline :offset-assert 16) + (pull-dir vector :inline :offset-assert 32) + (radial-dir vector :inline :offset-assert 48) + ) + :method-count-assert 9 + :size-assert #x40 + :flag-assert #x900000040 + ) + + +(deftype conveyor-section-array (inline-array-class) + ((data conveyor-section :inline :dynamic :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + + +(set! (-> conveyor-section-array heap-base) (the-as uint 64)) + +(deftype conveyor (process-drawable) + ((speed float :offset-assert 200) + (belt-radius float :offset-assert 204) + (pull-y-threshold float :offset-assert 208) + (speed-mult-array (array float) :offset-assert 212) + (speed-mult-array-len int8 :offset-assert 216) + (sections conveyor-section-array :offset-assert 220) + (leading plane :inline :offset-assert 224) + (collide-bounds sphere :inline :offset-assert 240) + ) + :heap-base #x80 + :method-count-assert 28 + :size-assert #x100 + :flag-assert #x1c00800100 + (:methods + (idle () _type_ :state 20) + (conveyor-method-21 (_type_) float 21) + (get-art-group (_type_) art-group 22) + (reset-root! (_type_) none 23) + (init! (_type_) none 24) + (set-and-get-ambient-sound! (_type_) ambient-sound 25) + (conveyor-method-26 (_type_ process-focusable) symbol :behavior conveyor 26) + (conveyor-method-27 (_type_) symbol 27) + ) + ) + + +;; WARN: Return type mismatch process-drawable vs conveyor. +(defmethod relocate conveyor ((obj conveyor) (new-addr int)) + (&+! (-> obj sections) new-addr) + (the-as + conveyor + ((the-as (function process-drawable int process-drawable) (find-parent-method conveyor 7)) obj new-addr) + ) + ) + +;; WARN: Return type mismatch symbol vs art-group. +(defmethod get-art-group conveyor ((obj conveyor)) + "@returns The respective [[art-group]] for the [[conveyor]]" + (go process-drawable-art-error "invalid type") + (the-as art-group #f) + ) + +(defmethod reset-root! conveyor ((obj conveyor)) + "Re-initializes the `root` [[trsqv]]" + (set! (-> obj root) (new 'process 'trsqv)) + 0 + (none) + ) + +(defmethod init! conveyor ((obj conveyor)) + "Initializes defaults for things like the `speed` and `belt-radius`" + (local-vars (tag res-tag)) + (set! (-> obj speed) 24576.0) + (set! (-> obj belt-radius) 11878.4) + (set! (-> obj pull-y-threshold) 10240.0) + (set! (-> obj speed-mult-array) #f) + (set! (-> obj speed-mult-array-len) 0) + (let ((entity (-> obj entity))) + (set! tag (new 'static 'res-tag)) + (let ((scale-factor (res-lump-data entity 'scale-factor pointer :tag-ptr (& tag)))) + (when scale-factor + (set! (-> obj speed-mult-array) (the-as (array float) scale-factor)) + (set! (-> obj speed-mult-array-len) (the-as int (-> tag elt-count))) + ) + ) + ) + 0 + (none) + ) + +;; WARN: Return type mismatch object vs ambient-sound. +(defmethod set-and-get-ambient-sound! conveyor ((obj conveyor)) + "So long as [[actor-option::16]] is not set, fetch the [[ambient-sound]] for the [[conveyor]] + and return it as well. Otherwise, set it to `0`" + (let ((actor-options (res-lump-value (-> obj entity) 'options actor-option :time -1000000000.0))) + (the-as + ambient-sound + (cond + ((not (logtest? (actor-option no-amb-sound) actor-options)) + (let ((sound + (the-as object (new 'process 'ambient-sound (static-sound-spec "conveyor" :fo-max 80) (-> obj root trans))) + ) + ) + (set! (-> obj sound) (the-as ambient-sound sound)) + sound + ) + ) + (else + (set! (-> obj sound) (the-as ambient-sound 0)) + 0 + ) + ) + ) + ) + ) + +(defmethod conveyor-method-26 conveyor ((obj conveyor) (proc-focus process-focusable)) + "TODO - conveyor section related, perhaps related to moving the process along the belt?" + (let ((vec (new 'stack-no-clear 'vector))) + (set! (-> vec quad) (-> (get-trans proc-focus 0) quad)) + (set! (-> vec w) 1.0) + (when (>= (vector4-dot vec (the-as vector (-> obj leading))) 0.0) + (let* ((sections (-> obj sections)) + (section-count (-> sections length)) + ) + (dotimes (section-idx section-count) + (let ((section (-> sections data section-idx))) + (when (< (vector4-dot vec (the-as vector (-> section trailing))) 0.0) + (let ((vec-temp (new 'stack-no-clear 'vector))) + (vector-! vec-temp vec (-> section start)) + (when (>= (-> obj belt-radius) (fabs (vector-dot vec-temp (-> section radial-dir)))) + (let* ((f0-7 (vector-dot vec-temp (-> section pull-dir))) + (f1-6 (- (-> vec-temp y) (* (-> section pull-dir y) f0-7))) + ) + (when (>= (-> obj pull-y-threshold) (fabs f1-6)) + (let ((a2-8 (new 'stack-no-clear 'vector))) + (let ((f0-10 (-> obj speed))) + (if (< section-idx (-> obj speed-mult-array-len)) + (set! f0-10 + (* f0-10 (-> (the-as (pointer float) (+ (the-as uint (-> obj speed-mult-array)) (* section-idx 4))))) + ) + ) + (vector-float*! a2-8 (-> section pull-dir) (* f0-10 (-> self clock seconds-per-frame))) + ) + (send-event proc-focus 'push-trans a2-8 3000) + ) + ) + ) + ) + ) + (return #f) + ) + ) + ) + ) + #f + ) + ) + ) + +(defmethod conveyor-method-27 conveyor ((obj conveyor)) + "TODO - collision related, has some dead code as well (previous iteration?)" + (local-vars (a0-10 float) (a2-5 float) (a2-12 float)) + (rlet ((acc :class vf) + (vf0 :class vf) + (vf1 :class vf) + (vf2 :class vf) + (vf3 :class vf) + (vf4 :class vf) + ) + (init-vf0-vector) + (set! *actor-list-length* 0) + (if #t + (set! *actor-list-length* (spatial-hash-method-36 *actor-hash* (-> obj collide-bounds) *actor-list* 256)) + ) + (when #t + (let ((a0-2 (-> *collide-player-list* alive-list next0))) + *collide-player-list* + (let ((v1-11 (-> a0-2 next0))) + (while (!= a0-2 (-> *collide-player-list* alive-list-end)) + (let* ((a0-3 (-> (the-as connection a0-2) param1)) + (a1-1 (-> (the-as collide-shape a0-3) root-prim)) + ) + (when (logtest? (-> a1-1 prim-core collide-as) (collide-spec jak bot enemy hit-by-others-list player-list)) + (let ((a1-2 (-> a1-1 prim-core))) + (let ((a2-4 a1-2) + (a3-1 (-> obj collide-bounds)) + ) + (.lvf vf2 (&-> a2-4 world-sphere quad)) + (.lvf vf3 (&-> a3-1 quad)) + ) + (.sub.vf vf1 vf3 vf2) + (.mul.vf vf1 vf1 vf1) + (.add.y.vf vf1 vf1 vf1 :mask #b1) + (.add.z.vf vf1 vf1 vf1 :mask #b1) + (.mov a2-5 vf1) + (let ((f0-0 a2-5) + (f1-1 (+ (-> a1-2 world-sphere w) (-> obj collide-bounds r))) + ) + (b! (>= f0-0 (* f1-1 f1-1)) cfg-8 :delay #f) + ) + ) + (when (< *actor-list-length* 256) + (set! (-> *actor-list* *actor-list-length*) (the-as collide-shape a0-3)) + (set! *actor-list-length* (+ *actor-list-length* 1)) + ) + ) + ) + (label cfg-8) + (set! a0-2 v1-11) + *collide-player-list* + (set! v1-11 (-> v1-11 next0)) + ) + ) + ) + ) + (when #f + (let ((a0-5 (-> *collide-hit-by-player-list* alive-list next0))) + *collide-hit-by-player-list* + (let ((v1-18 (-> a0-5 next0))) + (while (!= a0-5 (-> *collide-hit-by-player-list* alive-list-end)) + (let* ((a0-6 (-> (the-as connection a0-5) param1)) + (a1-13 (-> (the-as collide-shape a0-6) root-prim)) + ) + (when (logtest? (-> a1-13 prim-core collide-as) (collide-spec jak bot enemy hit-by-others-list player-list)) + (let ((a1-14 (-> a1-13 prim-core))) + (let ((a2-11 a1-14) + (a3-2 (-> obj collide-bounds)) + ) + (.lvf vf2 (&-> a2-11 world-sphere quad)) + (.lvf vf3 (&-> a3-2 quad)) + ) + (.sub.vf vf1 vf3 vf2) + (.mul.vf vf1 vf1 vf1) + (.add.y.vf vf1 vf1 vf1 :mask #b1) + (.add.z.vf vf1 vf1 vf1 :mask #b1) + (.mov a2-12 vf1) + (let ((f0-1 a2-12) + (f1-5 (+ (-> a1-14 world-sphere w) (-> obj collide-bounds r))) + ) + (b! (>= f0-1 (* f1-5 f1-5)) cfg-17 :delay #f) + ) + ) + (when (< *actor-list-length* 256) + (set! (-> *actor-list* *actor-list-length*) (the-as collide-shape a0-6)) + (set! *actor-list-length* (+ *actor-list-length* 1)) + ) + ) + ) + (label cfg-17) + (set! a0-5 v1-18) + *collide-hit-by-player-list* + (set! v1-18 (-> v1-18 next0)) + ) + ) + ) + ) + (dotimes (s5-0 *actor-list-length*) + (let* ((v1-23 (-> *actor-list* s5-0)) + (a0-9 (-> v1-23 root-prim)) + ) + (when (logtest? (-> a0-9 prim-core collide-as) (collide-spec jak bot enemy hit-by-others-list player-list)) + (.lvf vf1 (&-> obj collide-bounds quad)) + (.lvf vf2 (&-> a0-9 prim-core world-sphere quad)) + (.sub.vf vf3 vf1 vf2) + (.add.w.vf vf4 vf1 vf2 :mask #b1000) + (.mul.vf vf3 vf3 vf3 :mask #b111) + (.mul.w.vf vf4 vf4 vf4 :mask #b1000) + (.mul.x.vf acc vf0 vf3 :mask #b1000) + (.add.mul.y.vf acc vf0 vf3 acc :mask #b1000) + (.add.mul.z.vf vf3 vf0 vf3 acc :mask #b1000) + (.sub.w.vf vf3 vf3 vf4 :mask #b1000) + (let ((f0-2 0.0)) + (.add.w.vf vf3 vf0 vf3 :mask #b1) + (.mov a0-10 vf3) + (let ((s4-0 (-> v1-23 process))) + (b! (< f0-2 a0-10) cfg-27) + (let ((a1-29 (if (type? s4-0 process-focusable) + (the-as process-focusable s4-0) + ) + ) + ) + (if a1-29 + (conveyor-method-26 obj a1-29) + ) + ) + ) + ) + (label cfg-27) + 0 + ) + ) + ) + #f + ) + ) + +(defmethod conveyor-method-21 conveyor ((obj conveyor)) + "TODO - quite dense, has to do with the conveyor sections and the path they are associated with" + (local-vars (sv-32 conveyor-section) (sv-48 conveyor-section)) + (let* ((s5-0 (-> obj path)) + (s4-0 (-> s5-0 curve num-cverts)) + (s3-0 (new 'stack-no-clear 'vector)) + ) + (let ((s2-0 (new 'process 'conveyor-section-array (+ s4-0 -1)))) + (set! (-> obj sections) s2-0) + (set! (-> obj collide-bounds quad) (the-as uint128 0)) + (get-point-in-path! s5-0 s3-0 0.0 'exact) + (vector+! (the-as vector (-> obj collide-bounds)) (the-as vector (-> obj collide-bounds)) s3-0) + (let ((s1-0 (+ s4-0 -1))) + (set! sv-32 (the-as conveyor-section #f)) + (dotimes (s0-0 s1-0) + (set! sv-48 (-> s2-0 data s0-0)) + (set! (-> sv-48 start quad) (-> s3-0 quad)) + (get-point-in-path! s5-0 s3-0 (the float (+ s0-0 1)) 'exact) + (vector+! (the-as vector (-> obj collide-bounds)) (the-as vector (-> obj collide-bounds)) s3-0) + (vector-! (-> sv-48 pull-dir) s3-0 (-> sv-48 start)) + (vector-normalize! (-> sv-48 pull-dir) 1.0) + (set! (-> sv-48 trailing quad) (-> sv-48 pull-dir quad)) + (set! (-> sv-48 trailing y) 0.0) + (vector-normalize! (-> sv-48 trailing) 1.0) + (set-vector! (-> sv-48 radial-dir) (- (-> sv-48 trailing z)) 0.0 (-> sv-48 trailing x) 1.0) + (set! (-> sv-48 trailing w) (- (vector-dot s3-0 (the-as vector (-> sv-48 trailing))))) + (when (the-as vector sv-32) + (vector+! (&+ (the-as vector sv-32) 16) (&+ (the-as vector sv-32) 16) (the-as vector (-> sv-48 trailing))) + (vector-normalize! (&+ (the-as vector sv-32) 16) 1.0) + (set! (-> sv-32 trailing w) (- (vector-dot (-> sv-48 start) (&+ (the-as vector sv-32) 16)))) + ) + (set! sv-32 sv-48) + sv-32 + ) + ) + ) + (let ((s2-1 (-> obj sections data))) + (set! (-> obj leading quad) (-> s2-1 0 pull-dir quad)) + (set! (-> obj leading y) 0.0) + (vector-normalize! (-> obj leading) 1.0) + (set! (-> obj leading w) (- (vector-dot (the-as vector (-> s2-1 0)) (the-as vector (-> obj leading))))) + ) + (let ((f0-19 (/ 1.0 (the float s4-0))) + (f30-0 0.0) + ) + (vector-float*! (the-as vector (-> obj collide-bounds)) (the-as vector (-> obj collide-bounds)) f0-19) + (dotimes (s2-2 s4-0) + (get-point-in-path! s5-0 s3-0 (the float s2-2) 'exact) + (let ((f0-22 (vector-vector-distance-squared s3-0 (-> obj collide-bounds)))) + (if (< f30-0 f0-22) + (set! f30-0 f0-22) + ) + ) + ) + (set! (-> obj collide-bounds r) (+ (sqrtf f30-0) (-> obj belt-radius))) + ) + ) + ) + +(defstate idle (conveyor) + :virtual #t + :code (the-as (function none :behavior conveyor) sleep-code) + :post (behavior () + (conveyor-method-27 self) + (if (nonzero? (-> self sound)) + (update! (-> self sound)) + ) + (none) + ) + ) + +;; WARN: Return type mismatch object vs none. +(defmethod init-from-entity! conveyor ((obj conveyor) (arg0 entity-actor)) + (reset-root! obj) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj (the-as skeleton-group (get-art-group obj)) (the-as pair 0)) + (set! (-> obj path) (new 'process 'path-control obj 'path 0.0 (the-as entity #f) #f)) + (logior! (-> obj path flags) (path-control-flag display draw-line draw-point draw-text)) + (if (< (-> obj path curve num-cverts) 2) + (go process-drawable-art-error "bad path") + ) + (init! obj) + (set-and-get-ambient-sound! obj) + (conveyor-method-21 obj) + (ja-post) + (go (method-of-object obj idle)) + (none) + ) + +(deftype strip-conveyor (conveyor) + () + :heap-base #x80 + :method-count-assert 28 + :size-assert #x100 + :flag-assert #x1c00800100 + ) + + +(let ((a0-19 (new 'static 'skeleton-group + :name "skel-strip-conveyor" + :extra #f + :info #f + :art-group-name "strip-conveyor" + :bounds (new 'static 'vector :w 147456.0) + :version #x7 + ) + ) + ) + (set! (-> a0-19 jgeo) 0) + (set! (-> a0-19 janim) 2) + (set! (-> a0-19 mgeo 0) 1) + (set! (-> a0-19 lod-dist 0) 4095996000.0) + (add-to-loading-level a0-19) + ) + +(defmethod get-art-group strip-conveyor ((obj strip-conveyor)) + "@returns The respective [[art-group]] for the [[conveyor]]" + (art-group-get-by-name *level* "skel-strip-conveyor" (the-as (pointer uint32) #f)) + ) + +(deftype lgconveyor (conveyor) + () + :heap-base #x80 + :method-count-assert 28 + :size-assert #x100 + :flag-assert #x1c00800100 + ) + + +(let ((a0-23 (new 'static 'skeleton-group + :name "skel-lgconveyor" + :extra #f + :info #f + :art-group-name "lgconveyor" + :bounds (new 'static 'vector :y 12288.0 :w 61440.0) + :longest-edge (meters 24.7389) + :version #x7 + :origin-joint-index 3 + ) + ) + ) + (set! (-> a0-23 jgeo) 0) + (set! (-> a0-23 janim) 3) + (set! (-> a0-23 mgeo 0) 1) + (set! (-> a0-23 lod-dist 0) 4095996000.0) + (add-to-loading-level a0-23) + ) + +(defmethod get-art-group lgconveyor ((obj lgconveyor)) + "@returns The respective [[art-group]] for the [[conveyor]]" + (art-group-get-by-name *level* "skel-lgconveyor" (the-as (pointer uint32) #f)) + ) + +;; WARN: Return type mismatch float vs none. +(defmethod init! lgconveyor ((obj lgconveyor)) + "Initializes defaults for things like the `speed` and `belt-radius`" + (set! (-> obj speed) 30720.0) + (set! (-> obj belt-radius) 11878.4) + (set! (-> obj pull-y-threshold) 10240.0) + (none) + ) + +(defstate idle (lgconveyor) + :virtual #t + :code (behavior () + (until #f + (ja-no-eval :group! (-> self draw art-group data 3) + :num! (seek! (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 3)) frames num-frames) -1))) + :frame-num 0.0 + ) + (until (ja-done? 0) + (suspend) + (ja :num! (seek!)) + ) + ) + #f + (none) + ) + :post (behavior () + (let ((t9-0 (-> (method-of-type conveyor idle) post))) + (if t9-0 + ((the-as (function none) t9-0)) + ) + ) + (ja-post) + (none) + ) + ) diff --git a/goal_src/jak2/engine/common_objs/elevator.gc b/goal_src/jak2/engine/common_objs/elevator.gc index f393096fd5..b7da9c4d47 100644 --- a/goal_src/jak2/engine/common_objs/elevator.gc +++ b/goal_src/jak2/engine/common_objs/elevator.gc @@ -5,5 +5,885 @@ ;; name in dgo: elevator ;; dgos: GAME, COMMON +;; +++elevator-flags +(defenum elevator-flags + :type uint64 + :bitfield #t + (elevator-flags-0) + (elevator-flags-1) + (elevator-flags-2) + (elevator-flags-3) + (elevator-flags-4) + (prevent-jump) + (elevator-flags-6) + (elevator-flags-7) + ) +;; ---elevator-flags + + +;; +++elevator-status +(defenum elevator-status + :type uint64 + :bitfield #t + (elevator-status-0) + (elevator-status-1) + (moving) + ) +;; ---elevator-status + + ;; DECOMP BEGINS +(deftype elevator-params (structure) + ((xz-threshold float :offset-assert 0) + (y-threshold float :offset-assert 4) + (start-pos float :offset-assert 8) + (move-rate float :offset-assert 12) + (flags elevator-flags :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x18 + :flag-assert #x900000018 + ) + + +(deftype path-step (structure) + ((next-pos float :offset-assert 0) + (dist float :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) + + +(deftype path-step-inline-array (inline-array-class) + ((data path-step :inline :dynamic :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + + +(set! (-> path-step-inline-array heap-base) (the-as uint 16)) + +(deftype elevator (base-plat) + ((params elevator-params :inline :offset-assert 272) + (path-seq path-step-inline-array :offset-assert 296) + (path-dest float :offset-assert 300) + (bottom-top float 2 :offset-assert 304) + (move-pos float 2 :offset-assert 312) + (move-dist float :offset-assert 320) + (path-pos float :offset-assert 324) + (path-eased-pos float :offset-assert 328) + (ride-timer uint64 :offset-assert 336) + (sticky-player-last-ride-time time-frame :offset-assert 344) + (elevator-status elevator-status :offset-assert 352) + (on-activate basic :offset-assert 360) + (on-deactivate basic :offset-assert 364) + ) + :heap-base #xf0 + :method-count-assert 49 + :size-assert #x170 + :flag-assert #x3100f00170 + (:methods + (dormant () _type_ :state 34) + (waiting () _type_ :state 35) + (running () _type_ :state 36) + (arrived () _type_ :state 37) + (elevator-method-38 (_type_) none 38) + (calc-dist-between-points! (_type_ int int) none 39) + (elevator-method-40 (_type_) object 40) + (init-defaults! (_type_) none 41) + (clear-ambient-sound! (_type_) none 42) + (elevator-method-43 (_type_ vector float float) symbol 43) + (elevator-method-44 (_type_) symbol 44) + (elevator-method-45 (_type_) symbol 45) + (move-to-next-point! (_type_) none 46) + (find-closest-point-in-path! (_type_ vector path-step symbol symbol) symbol 47) + (elevator-method-48 (_type_) none 48) + ) + ) + + +(defmethod elevator-method-43 elevator ((obj elevator) (arg0 vector) (arg1 float) (arg2 float)) + #f + ) + +(defmethod elevator-method-48 elevator ((obj elevator)) + "TODO - collision related" + (let ((target *target*)) + (when target + (let ((s4-0 (-> target control unknown-sphere-array00 0)) + (s5-0 (new 'stack-no-clear 'collide-query)) + ) + (set! (-> s5-0 start-pos quad) (-> s4-0 prim-core world-sphere quad)) + (set! (-> s5-0 start-pos y) (+ 8192.0 (-> s5-0 start-pos y))) + (set! (-> s5-0 start-pos w) 1.0) + (vector-reset! (-> s5-0 move-dist)) + (set! (-> s5-0 move-dist y) -90112.0) + (let ((collide-query s5-0)) + (set! (-> collide-query radius) (-> s4-0 local-sphere w)) + (set! (-> collide-query collide-with) (collide-spec hit-by-others-list pusher)) + (set! (-> collide-query ignore-process0) target) + (set! (-> collide-query ignore-process1) #f) + (set! (-> collide-query ignore-pat) (-> target control pat-ignore-mask)) + (set! (-> collide-query action-mask) (collide-action solid)) + ) + (let ((f0-5 (fill-and-probe-using-line-sphere *collide-cache* s5-0))) + (when (< 0.0 f0-5) + (vector-float*! (-> s5-0 move-dist) (-> s5-0 move-dist) f0-5) + (vector+! (-> s5-0 move-dist) (-> s5-0 move-dist) (-> s5-0 start-pos)) + (vector-! (-> s5-0 move-dist) (-> s5-0 move-dist) (the-as vector (-> s4-0 prim-core))) + (move-by-vector! (-> target control) (-> s5-0 move-dist)) + ) + ) + ) + ) + ) + (none) + ) + +(defmethod init-defaults! elevator ((obj elevator)) + "Initializes default settings related to the [[elevator]]: + - `elevator-xz-threshold` + - `elevator-y-threshold` + - `elevator-start-pos` + - `elevator-move-rate` + - `elevator-flags`" + (let ((entity (-> obj entity))) + (set! (-> obj params xz-threshold) ((method-of-object entity get-property-value-float) + entity + 'elevator-xz-threshold + 'interp + -1000000000.0 + 81920.0 + (the-as (pointer res-tag) #f) + *res-static-buf* + ) + ) + (set! entity (-> obj entity)) + (set! (-> obj params y-threshold) ((method-of-object entity get-property-value-float) + entity + 'elevator-y-threshold + 'interp + -1000000000.0 + 20480.0 + (the-as (pointer res-tag) #f) + *res-static-buf* + ) + ) + (set! entity (-> obj entity)) + (set! (-> obj params start-pos) ((method-of-object entity get-property-value-float) + entity + 'elevator-start-pos + 'interp + -1000000000.0 + 0.0 + (the-as (pointer res-tag) #f) + *res-static-buf* + ) + ) + (set! entity (-> obj entity)) + (set! (-> obj params move-rate) ((method-of-object entity get-property-value-float) + entity + 'elevator-move-rate + 'interp + -1000000000.0 + 25600.0 + (the-as (pointer res-tag) #f) + *res-static-buf* + ) + ) + (set! entity (-> obj entity)) + (set! (-> obj params flags) (the-as elevator-flags ((method-of-object entity get-property-value) + entity + 'elevator-flags + 'interp + -1000000000.0 + (the-as uint128 1) + (the-as (pointer res-tag) #f) + *res-static-buf* + ) + ) + ) + ) + 0 + (none) + ) + +(defun ease-value-in-out ((value float) (step-amount float)) + "TODO - the math in this function is full of duplication and isn't totally clear + but if the name is to be believed, it's to slow a values grow at the beginning and end of it's range + which is obviously useful for an elevator." + (let* ((step step-amount) + (f4-0 (- 1.0 step-amount)) + (f3-0 (/ step (- 1.0 f4-0))) + (f2-1 (* step step)) + (f1-6 (+ (* 2.0 step (- f4-0 step)) f2-1)) + (f1-7 (+ (* (- 1.0 f4-0) (- 1.0 f4-0) f3-0) f1-6)) + ) + (/ (cond + ((< value step) + (* value value) + ) + ((< value f4-0) + (+ (* 2.0 step (- value step)) f2-1) + ) + (else + (let ((f0-7 (- 1.0 value))) + (- f1-7 (* f0-7 f0-7 f3-0)) + ) + ) + ) + f1-7 + ) + ) + ) + +;; WARN: Return type mismatch none vs object. +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 18] +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 119] +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 209] +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 222] +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 236] +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 246] +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 257] +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 264] +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 276] +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 301] +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 326] +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 334] +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 337] +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 174] +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 40] +;; WARN: disable def twice: 11. This may happen when a cond (no else) is nested inside of another conditional, but it should be rare. +(defbehavior elevator-event elevator ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((evt-type event-type)) + (the-as + object + (cond + ((= evt-type 'status?) + (and (= (the float (/ (the-as int (-> event param 0)) 8)) (-> self move-pos 0)) + (= (the float (/ (the-as int (-> event param 1)) 8)) (-> self move-pos 1)) + ) + ) + ((= evt-type 'ridden) + (let ((proc-focus (handle->process (-> (the-as focus (-> event param 0)) handle)))) + (if (= (-> proc-focus type) target) + (set! (-> self sticky-player-last-ride-time) (-> self clock frame-counter)) + ) + ) + #t + ) + ((= evt-type 'use-camera) + (if (-> event param 0) + (set-setting! 'entity-name (-> event param 0) 0 0) + (remove-setting! 'entity-name) + ) + ) + ((= evt-type 'move-to) + (when (and (-> self next-state) (let ((next-state-0 (-> self next-state name))) + (or (= next-state-0 'waiting) (= next-state-0 'arrived)) + ) + ) + (set! (-> self move-pos 0) (-> self move-pos 1)) + (cond + ((not (logtest? (-> event param 0) 7)) + (let ((gp-0 (the-as number (-> event param 0)))) + (set! (-> self move-pos 1) (if (type? (the-as uint gp-0) float) + (the-as float gp-0) + ) + ) + ) + ) + (else + (case (-> event param 0) + (('quote 'bottom) + (set! (-> self move-pos 1) (-> self bottom-top 0)) + ) + (('quote 'top) + (set! (-> self move-pos 1) (-> self bottom-top 1)) + ) + ) + ) + ) + (go-virtual running) + ) + ) + ((= evt-type 'jump-to) + (cond + ((not (logtest? (-> event param 0) 7)) + (let ((gp-1 (the-as number (-> event param 0)))) + (set! (-> self move-pos 1) (if (type? (the-as uint gp-1) float) + (the-as float gp-1) + ) + ) + ) + ) + (else + (case (-> event param 0) + (('quote 'bottom) + (set! (-> self move-pos 1) (-> self bottom-top 0)) + ) + (('quote 'top) + (set! (-> self move-pos 1) (-> self bottom-top 1)) + ) + ) + ) + ) + (set! (-> self move-pos 0) (-> self move-pos 1)) + (get-point-in-path! (-> self path) (-> self basetrans) (-> self move-pos 0) 'interp) + (go-virtual waiting) + ) + ((= evt-type 'trigger) + (when (and (-> self next-state) (let ((next-state-1 (-> self next-state name))) + (or (= next-state-1 'waiting) (= next-state-1 'arrived)) + ) + ) + (set! (-> self move-pos 0) (-> self move-pos 1)) + (cond + ((= (-> self move-pos 0) (-> self bottom-top 0)) + (set! (-> self move-pos 1) (-> self bottom-top 1)) + ) + ((= (-> self move-pos 0) (-> self bottom-top 1)) + (set! (-> self move-pos 1) (-> self bottom-top 0)) + ) + ) + (go-virtual running) + ) + ) + ((= evt-type 'query) + (case (-> event param 0) + (('waiting?) + (and (-> self next-state) (= (-> self next-state name) 'waiting)) + ) + (('arrived?) + (and (-> self next-state) (let ((v1-61 (-> self next-state name))) + (or (= v1-61 'arrived) (= v1-61 'waiting)) + ) + ) + ) + (('running?) + (and (-> self next-state) (= (-> self next-state name) 'running)) + ) + (('path-pos?) + (+ (-> self move-pos 0) (* (-> self path-pos) (- (-> self move-pos 1) (-> self move-pos 0)))) + ) + (('player-standing-on?) + (= (-> self sticky-player-last-ride-time) (-> self clock frame-counter)) + ) + (('point-inside-shaft?) + (elevator-method-43 self (the-as vector (-> event param 1)) (-> self bottom-top 1) (-> self bottom-top 0)) + ) + (('going-down?) + (< (-> (get-point-in-path! (-> self path) (new 'stack-no-clear 'vector) (-> self move-pos 1) 'interp) y) + (-> (get-point-in-path! (-> self path) (new 'stack-no-clear 'vector) (-> self move-pos 0) 'interp) y) + ) + ) + (('going-up?) + (< (-> (get-point-in-path! (-> self path) (new 'stack-no-clear 'vector) (-> self move-pos 0) 'interp) y) + (-> (get-point-in-path! (-> self path) (new 'stack-no-clear 'vector) (-> self move-pos 1) 'interp) y) + ) + ) + ) + ) + ((= evt-type 'go-dormant) + (go-virtual dormant) + ) + (else + (plat-event proc arg1 event-type event) + ) + ) + ) + ) + ) + +(defmethod find-closest-point-in-path! elevator ((obj elevator) (arg0 vector) (arg1 path-step) (arg2 symbol) (arg3 symbol)) + "Finds and sets the provided [[path-step]]'s `next-pos` field to the vertex index in the path which is closest to + the provided [[vector]] + + @param vec The point at which distance calculations are based off + @param! next-step If a point is found, `next-pos` will be set to the correct point + @param arg2 TODO + @param arg3 TODO + @returns [[#t]] if a point in the path was found" + (local-vars (path-point vector)) + (let ((elev-params (-> obj params)) + (smallest-dist 0.0) + (point-idx-tracker -1.0) + ) + (dotimes (path-vertex-idx (-> obj path curve num-cverts)) + (set! path-point + (get-point-in-path! (-> obj path) (new 'stack-no-clear 'vector) (the float path-vertex-idx) 'interp) + ) + (when (and (or (not arg2) (< (vector-vector-xz-distance path-point arg0) (-> elev-params xz-threshold))) + (or (not arg3) + (< (fabs (- (-> path-point y) (-> arg0 y))) (-> elev-params y-threshold)) + (and (= path-vertex-idx (the int (-> obj bottom-top 0))) (< (-> arg0 y) (-> path-point y))) + (and (= path-vertex-idx (the int (-> obj bottom-top 1))) (< (-> path-point y) (-> arg0 y))) + ) + ) + (let* ((t9-2 vector-vector-distance) + (a1-3 arg0) + (dist (t9-2 path-point a1-3)) + ) + (when (or (= point-idx-tracker -1.0) (< dist smallest-dist)) + (set! smallest-dist dist) + (set! point-idx-tracker (the float path-vertex-idx)) + ) + ) + ) + ) + (when (!= point-idx-tracker -1.0) + (set! (-> arg1 next-pos) point-idx-tracker) + #t + ) + ) + ) + +;; WARN: Return type mismatch object vs symbol. +(defmethod elevator-method-44 elevator ((obj elevator)) + (let* ((target-temp *target*) + (target (if (type? target-temp process-focusable) + target-temp + ) + ) + ) + (the-as + symbol + (and target (elevator-method-43 obj (get-trans target 0) (-> obj move-pos 0) (-> obj move-pos 1))) + ) + ) + ) + +(defmethod elevator-method-45 elevator ((obj elevator)) + "@returns Stub, or always returns [[#t]]" + #t + ) + +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +(defmethod move-to-next-point! elevator ((obj elevator)) + "If the [[*target*]] is in a valid state and there is a point to transition to in the elevator's path + do so. + @see [[elevator::47]]" + (local-vars (zero float)) + (let ((target *target*)) + (when (and target + (zero? (logand (focus-status dead inactive in-air grabbed edge-grab pole pilot-riding pilot teleporting) + (-> target focus-status) + ) + ) + ) + (set! zero (the-as float 0.0)) + (when (and (find-closest-point-in-path! obj (get-trans target 0) (new 'stack-no-clear 'path-step) #t #t) + (!= (-> obj move-pos 1) zero) + ) + (set! (-> obj move-pos 0) (-> obj move-pos 1)) + (set! (-> obj move-pos 1) zero) + (logior! (-> obj elevator-status) (elevator-status moving)) + (go (method-of-object obj running)) + ) + ) + ) + 0 + (none) + ) + +(defbehavior move-post elevator () + (when (nonzero? (-> self sound)) + (let ((f0-3 (sqrtf (sin-rad (* 3.1415925 (-> self path-pos)))))) + (update-vol! (-> self sound) f0-3) + ) + (update-trans! (-> self sound) (-> self root-override trans)) + (update! (-> self sound)) + ) + (plat-post) + (none) + ) + +(defstate dormant (elevator) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type + (('trigger) + (go-virtual waiting) + ) + (('bonk) + #f + ) + (else + (plat-event proc arg1 event-type event) + ) + ) + ) + :trans (the-as (function none :behavior elevator) plat-trans) + :code (the-as (function none :behavior elevator) sleep-code) + :post (the-as (function none :behavior elevator) plat-post) + ) + +(defstate waiting (elevator) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type + (('ridden) + (if (elevator-method-45 self) + (logior! (-> self elevator-status) (elevator-status elevator-status-0)) + ) + (elevator-event proc arg1 event-type event) + ) + (else + (elevator-event proc arg1 event-type event) + ) + ) + ) + :enter (behavior () + (set! (-> self ride-timer) (the-as uint (-> self clock frame-counter))) + (logclear! (-> self elevator-status) (elevator-status elevator-status-0 moving)) + (logior! (-> self mask) (process-mask actor-pause)) + (if (nonzero? (-> self sound)) + (update-vol! (-> self sound) 0.0) + ) + (none) + ) + :trans (behavior () + (plat-trans) + (when (not (logtest? (-> self elevator-status) (elevator-status elevator-status-0))) + (set! (-> self ride-timer) (the-as uint (-> self clock frame-counter))) + (-> self params) + (if (and (logtest? (-> self params flags) (elevator-flags elevator-flags-0)) + (zero? (logand (-> self params flags) (elevator-flags elevator-flags-3))) + ) + (move-to-next-point! self) + ) + ) + (when (and (not (logtest? (-> self params flags) (elevator-flags elevator-flags-3))) + (>= (- (-> self clock frame-counter) (the-as int (-> self ride-timer))) (seconds 1)) + ) + (set! (-> self move-pos 0) (-> self move-pos 1)) + (set! (-> self move-pos 1) (-> self path-seq data (the int (-> self move-pos 1)) next-pos)) + (go-virtual running) + ) + (none) + ) + :code (the-as (function none :behavior elevator) sleep-code) + :post (behavior () + (logclear! (-> self elevator-status) (elevator-status elevator-status-0)) + (debug-draw (-> self path)) + (plat-post) + (none) + ) + ) + +(defstate running (elevator) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type + (('running?) + #t + ) + (('player-ridden?) + (logtest? (-> self elevator-status) (elevator-status elevator-status-0)) + ) + (else + (elevator-event proc arg1 event-type event) + ) + ) + ) + :enter (behavior () + (if (not (logtest? (-> self params flags) (elevator-flags elevator-flags-7))) + (process-entity-status! self (entity-perm-status no-kill) #t) + ) + (logclear! (-> self elevator-status) (elevator-status elevator-status-1)) + (when (logtest? (-> self params flags) (elevator-flags elevator-flags-2)) + (logclear! (-> self params flags) (elevator-flags elevator-flags-2)) + (logior! (-> self params flags) (elevator-flags elevator-flags-0)) + ) + (set! (-> self move-dist) 0.0) + (let ((v1-13 (the int (-> self move-pos 0))) + (a0-3 (the int (-> self move-pos 1))) + (a1-1 0) + ) + (while (let ((a2-3 (abs (- a0-3 v1-13)))) + (< a1-1 a2-3) + ) + (+! (-> self move-dist) (-> self path-seq data (+ (min v1-13 a0-3) a1-1) dist)) + (+! a1-1 1) + ) + ) + (logclear! (-> self mask) (process-mask actor-pause)) + (set-setting! 'board #f 0 0) + (let ((gp-0 (-> self on-activate))) + (if gp-0 + (eval! + (new + 'stack + 'script-context + (the-as basic (* (the int (-> self move-pos 0)) 8)) + self + (-> self root-override trans) + ) + (the-as pair gp-0) + ) + ) + ) + (set! (-> self path-pos) 0.0) + (if (nonzero? (-> self sound)) + (update-vol! (-> self sound) 0.0) + ) + (when (logtest? (-> self params flags) (elevator-flags prevent-jump)) + (set-setting! 'jump #f 0 0) + (apply-settings *setting-control*) + ) + (none) + ) + :exit (behavior () + (if (not (logtest? (-> self params flags) (elevator-flags elevator-flags-7))) + (process-entity-status! self (entity-perm-status no-kill) #f) + ) + (remove-setting! 'board) + (if (logtest? (-> self params flags) (elevator-flags prevent-jump)) + (remove-setting! 'jump) + ) + (none) + ) + :trans (behavior () + (if (and (not (logtest? (-> self elevator-status) (elevator-status elevator-status-1))) + (= (-> self path-pos) 1.0) + ) + (go-virtual arrived) + ) + (if (elevator-method-44 self) + (set! (-> self path-dest) 0.0) + (set! (-> self path-dest) 1.0) + ) + (if (logtest? (-> self params flags) (elevator-flags prevent-jump)) + (elevator-method-48 self) + ) + (plat-trans) + (none) + ) + :code (behavior () + (logior! (-> self elevator-status) (elevator-status elevator-status-1)) + (until #f + (suspend) + (if (= (-> self path-pos) 1.0) + (logclear! (-> self elevator-status) (elevator-status elevator-status-1)) + ) + ) + #f + (none) + ) + :post (behavior () + (when (logtest? (-> self elevator-status) (elevator-status elevator-status-1)) + (seek! + (-> self path-pos) + (-> self path-dest) + (* (/ (-> self params move-rate) (-> self move-dist)) (-> self clock seconds-per-frame)) + ) + (let* ((f30-0 (-> self move-pos 0)) + (f28-0 (-> self move-pos 1)) + (f0-9 (+ f30-0 (* (ease-value-in-out (-> self path-pos) 0.08) (- f28-0 f30-0)))) + ) + (get-point-in-path! (-> self path) (-> self basetrans) f0-9 'interp) + ) + ) + (move-post) + (none) + ) + ) + +(defstate arrived (elevator) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type + (('ridden) + (set! (-> self ride-timer) (the-as uint (-> self clock frame-counter))) + (elevator-event proc arg1 event-type event) + ) + (else + (elevator-event proc arg1 event-type event) + ) + ) + ) + :enter (behavior () + (set! (-> self ride-timer) (the-as uint (-> self clock frame-counter))) + (if (not (-> *setting-control* user-current jump)) + (remove-setting! 'jump) + ) + (let ((gp-0 (-> self on-deactivate))) + (if gp-0 + (eval! + (new + 'stack + 'script-context + (the-as basic (* (the int (-> self move-pos 1)) 8)) + self + (-> self root-override trans) + ) + (the-as pair gp-0) + ) + ) + ) + (none) + ) + :trans (behavior () + (if (and (< (the-as int (- (-> self ride-timer) (the-as uint (-> self sticky-player-last-ride-time)))) 600) + (begin *target* *target*) + (logtest? (-> *target* focus-status) (focus-status in-air)) + ) + (set! (-> self ride-timer) (the-as uint (-> self clock frame-counter))) + ) + (when (or (logtest? (-> self elevator-status) (elevator-status moving)) + (>= (- (-> self clock frame-counter) (the-as int (-> self ride-timer))) (seconds 0.5)) + ) + (cond + ((and (logtest? (-> self params flags) (elevator-flags elevator-flags-1)) + (!= (-> self move-pos 1) (-> self params start-pos)) + ) + (set! (-> self move-pos 0) (-> self move-pos 1)) + (set! (-> self move-pos 1) (-> self params start-pos)) + (go-virtual running) + ) + (else + (go-virtual waiting) + ) + ) + ) + (plat-trans) + (none) + ) + :code (the-as (function none :behavior elevator) sleep-code) + :post (the-as (function none :behavior elevator) plat-post) + ) + +(defmethod calc-dist-between-points! elevator ((obj elevator) (path-point-x int) (path-point-y int)) + "Calculates the distance between two points in the elevator's path. + + @param path-point-x The index of the first point in the distance calculation, and where `next-pos` and `dist` are stored in the `path-seq` array + @param path-point-y The second point in the distance calculation" + (set! (-> obj path-seq data path-point-x next-pos) (the float path-point-y)) + (let ((point-x (get-point-in-path! (-> obj path) (new 'stack-no-clear 'vector) (the float path-point-x) 'interp)) + (point-y (get-point-in-path! (-> obj path) (new 'stack-no-clear 'vector) (the float path-point-y) 'interp)) + ) + (set! (-> obj path-seq data path-point-x dist) (vector-vector-distance point-x point-y)) + ) + 0 + (none) + ) + +(defmethod clear-ambient-sound! elevator ((obj elevator)) + "Might be a virtual function, but clears the object's [[ambient-sound]]" + (set! (-> obj sound) (the-as ambient-sound 0)) + 0 + (none) + ) + +(defmethod base-plat-method-33 elevator ((obj elevator)) + 0 + (none) + ) + +;; WARN: Return type mismatch base-plat vs elevator. +(defmethod relocate elevator ((obj elevator) (arg0 int)) + (if (nonzero? (-> obj path-seq)) + (&+! (-> obj path-seq) arg0) + ) + (the-as elevator ((the-as (function base-plat int base-plat) (find-parent-method elevator 7)) obj arg0)) + ) + +(defmethod elevator-method-40 elevator ((obj elevator)) + "TODO - need to figure out some flags to be confident about this" + (if (logtest? (-> obj params flags) (elevator-flags elevator-flags-6)) + (go (method-of-object obj arrived)) + (go (method-of-object obj waiting)) + ) + ) + +;; 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 32 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 32 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 32 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 object vs none. +(defmethod init-from-entity! elevator ((obj elevator) (entity entity-actor)) + (local-vars (sv-32 float) (sv-36 path-control) (sv-40 target)) + (base-plat-method-31 obj) + (process-drawable-from-entity! obj entity) + (initialize-skeleton obj (the-as skeleton-group (get-art-group obj)) (the-as pair 0)) + (stop-bouncing! obj) + (set! (-> obj elevator-status) (elevator-status)) + (collide-shape-method-46 (-> obj root-override)) + (base-plat-method-32 obj) + (init-defaults! obj) + (set! (-> obj on-activate) (res-lump-struct (-> obj entity) 'on-activate basic)) + (set! (-> obj on-deactivate) (res-lump-struct (-> obj entity) 'on-deactivate basic)) + (set! (-> obj path) (new 'process 'path-control obj 'path 0.0 entity #f)) + (if (logtest? (-> obj path flags) (path-control-flag not-found)) + (go process-drawable-art-error "error in path") + ) + (logior! (-> obj path flags) (path-control-flag display draw-line draw-point draw-text)) + (let ((num-path-points (-> obj path curve num-cverts)) + (s4-1 0) + (f30-0 0.0) + (f28-0 0.0) + ) + (set! (-> obj path-seq) (new 'process 'path-step-inline-array num-path-points)) + (dotimes (path-point-idx num-path-points) + (calc-dist-between-points! obj path-point-idx (mod (+ path-point-idx 1) num-path-points)) + (let ((v1-31 (get-point-in-path! (-> obj path) (new 'stack-no-clear 'vector) (the float path-point-idx) 'interp))) + (when (or (not (logtest? s4-1 1)) (< (-> v1-31 y) f28-0)) + (set! (-> obj bottom-top 0) (the float path-point-idx)) + (set! f28-0 (-> v1-31 y)) + (set! s4-1 (logior s4-1 1)) + ) + (when (or (not (logtest? s4-1 2)) (< f30-0 (-> v1-31 y))) + (set! (-> obj bottom-top 1) (the float path-point-idx)) + (set! f30-0 (-> v1-31 y)) + (set! s4-1 (logior s4-1 2)) + ) + ) + ) + ) + (set! sv-32 (the-as float 0.0)) + (set! sv-36 (-> obj path)) + (let ((s5-2 *target*)) + (set! sv-40 (if (type? s5-2 process-focusable) + s5-2 + ) + ) + ) + (if (not (and sv-40 + (logtest? (-> obj params flags) (elevator-flags elevator-flags-4)) + (find-closest-point-in-path! obj (get-trans sv-40 0) (the-as path-step (& sv-32)) #f #t) + ) + ) + (set! sv-32 (-> obj params start-pos)) + ) + (set! (-> obj move-pos 0) sv-32) + (set! (-> obj move-pos 1) sv-32) + (get-point-in-path! sv-36 (-> obj basetrans) sv-32 'interp) + (set! (-> obj root-override pause-adjust-distance) + (+ 122880.0 (-> obj params xz-threshold) (total-distance (-> obj path))) + ) + (clear-ambient-sound! obj) + (base-plat-method-33 obj) + (elevator-method-40 obj) + (none) + ) diff --git a/goal_src/jak2/engine/common_objs/plat.gc b/goal_src/jak2/engine/common_objs/plat.gc index 1f07c5b465..98c7ca4c77 100644 --- a/goal_src/jak2/engine/common_objs/plat.gc +++ b/goal_src/jak2/engine/common_objs/plat.gc @@ -7,3 +7,358 @@ ;; DECOMP BEGINS +(deftype plat (base-plat) + ((path-pos float :offset-assert 272) + (sound-id sound-id :offset-assert 276) + (sync sync-eased :inline :offset-assert 280) + ) + :heap-base #xd0 + :method-count-assert 37 + :size-assert #x144 + :flag-assert #x2500d00144 + (:methods + (plat-idle () _type_ :state 34) + (plat-path-active () _type_ :state 35) + (plat-path-sync (_type_) object 36) + ) + ) + + +(let ((a0-2 (new 'static 'skeleton-group + :name "skel-plat" + :extra #f + :info #f + :art-group-name "plat" + :bounds (new 'static 'vector :y -2048.0 :w 12288.0) + :max-lod 2 + :version #x7 + ) + ) + ) + (set! (-> a0-2 jgeo) 0) + (set! (-> a0-2 janim) 4) + (set! (-> a0-2 mgeo 0) 1) + (set! (-> a0-2 lod-dist 0) 81920.0) + (set! (-> a0-2 mgeo 1) 2) + (set! (-> a0-2 lod-dist 1) 163840.0) + (set! (-> a0-2 mgeo 2) 3) + (set! (-> a0-2 lod-dist 2) 4095996000.0) + (add-to-loading-level a0-2) + ) + +(defmethod get-art-group plat ((obj plat)) + "@returns The associated [[art-group]]" + (art-group-get-by-name *level* "skel-plat" (the-as (pointer uint32) #f)) + ) + +(defmethod base-plat-method-31 plat ((obj plat)) + "TODO - collision stuff" + (let ((collision-shape (new 'process 'collide-shape obj (collide-list-enum hit-by-player)))) + (let ((collision-mesh (new 'process 'collide-shape-prim-mesh collision-shape (the-as uint 0) (the-as uint 0)))) + (set! (-> collision-mesh prim-core collide-as) (collide-spec pusher)) + (set! (-> collision-mesh prim-core collide-with) (collide-spec jak player-list)) + (set! (-> collision-mesh prim-core action) (collide-action solid rideable)) + (set! (-> collision-mesh transform-index) 0) + (set-vector! (-> collision-mesh local-sphere) 0.0 0.0 0.0 13107.2) + (set! (-> collision-shape total-prims) (the-as uint 1)) + (set! (-> collision-shape root-prim) collision-mesh) + ) + ((method-of-object collision-shape collide-shape-method-54)) + (set! (-> collision-shape nav-radius) (* 0.75 (-> collision-shape root-prim local-sphere w))) + (let ((prim (-> collision-shape root-prim))) + (set! (-> collision-shape backup-collide-as) (-> prim prim-core collide-as)) + (set! (-> collision-shape backup-collide-with) (-> prim prim-core collide-with)) + ) + (set! (-> obj root-override) (the-as collide-shape-moving collision-shape)) + ) + 0 + (none) + ) + +(defmethod base-plat-method-33 plat ((obj plat)) + 0 + (none) + ) + +(defmethod base-plat-method-32 plat ((obj plat)) + 0 + (none) + ) + +(defmethod plat-path-sync plat ((obj plat)) + "If the `sync` period is greater than `0` then transition the state to [[plat::35]] + otherwise, [[plat::34]] + + @see [[sync-eased]]" + (cond + ((logtest? (-> obj path flags) (path-control-flag not-found)) + (go (method-of-object obj plat-idle)) + ) + ((> (-> obj sync period) 0) + (go (method-of-object obj plat-path-active)) + ) + (else + (go (method-of-object obj plat-idle)) + ) + ) + ) + +(defstate plat-idle (plat) + :virtual #t + :event (the-as (function process int symbol event-message-block object :behavior plat) plat-event) + :trans (behavior () + (execute-effects self) + (none) + ) + :code (behavior () + (plat-trans) + (rider-post) + (suspend) + (until #f + (when (not (-> self bouncing)) + (plat-trans) + (rider-post) + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + 0 + ) + (while (-> self bouncing) + (plat-trans) + (rider-post) + (suspend) + ) + ) + #f + (none) + ) + ) + +(defstate plat-path-active (plat) + :virtual #t + :event (the-as (function process int symbol event-message-block object :behavior plat) plat-event) + :exit (behavior () + (sound-stop (-> self sound-id)) + (none) + ) + :trans (behavior () + (set! (-> self path-pos) (get-norm! (-> self sync) 0)) + (get-point-at-percent-along-path! (-> self path) (-> self basetrans) (-> self path-pos) 'interp) + (if (< (vector-vector-distance (-> self root-override trans) (ear-trans 0)) 81920.0) + (sound-play "eco-plat-hover" :id (-> self sound-id) :position (-> self root-override trans)) + ) + (plat-trans) + (none) + ) + :code (behavior () + (until #f + (ja-no-eval :group! (ja-group) + :num! (seek! (the float (+ (-> (ja-group) frames num-frames) -1))) + :frame-num 0.0 + ) + (until (ja-done? 0) + (suspend) + (ja :num! (seek!)) + ) + ) + #f + (none) + ) + :post (the-as (function none :behavior plat) plat-post) + ) + +;; WARN: Return type mismatch object vs none. +(defmethod init-from-entity! plat ((obj plat) (entity entity-actor)) + (set! (-> obj mask) (logior (process-mask platform) (-> obj mask))) + (base-plat-method-31 obj) + (process-drawable-from-entity! obj entity) + (initialize-skeleton obj (the-as skeleton-group (get-art-group obj)) (the-as pair 0)) + (collide-shape-method-46 (-> obj root-override)) + (stop-bouncing! obj) + (base-plat-method-32 obj) + (set! (-> obj fact) + (new 'process 'fact-info obj (pickup-type eco-pill-random) (-> *FACT-bank* default-eco-pill-green-inc)) + ) + (let ((params (new 'stack-no-clear 'sync-info-params))) + (let ((v1-15 0)) + (if (not (logtest? (-> obj fact options) (actor-option loop))) + (set! v1-15 (logior v1-15 1)) + ) + (set! (-> params sync-type) (the-as basic 'sync-eased)) + (set! (-> params sync-flags) (the-as sync-flags v1-15)) + ) + (set! (-> params period) (the-as uint 1200)) + (set! (-> params entity) entity) + (set! (-> params percent) 0.0) + (set! (-> params ease-in) 0.15) + (set! (-> params ease-out) 0.15) + (set! (-> params pause-in) 0.0) + (set! (-> params pause-out) 0.0) + (initialize! (-> obj sync) params) + ) + (set! (-> obj path) (new 'process 'curve-control obj 'path -1000000000.0)) + (logior! (-> obj path flags) (path-control-flag display draw-line draw-point draw-text)) + (set! (-> obj sound-id) (new-sound-id)) + (cond + ((logtest? (-> obj path flags) (path-control-flag not-found)) + (set! (-> obj path-pos) 0.0) + (base-plat-method-33 obj) + (plat-path-sync obj) + ) + ((> (-> obj sync period) 0) + (set! (-> obj path-pos) (get-norm! (-> obj sync) 0)) + (get-point-at-percent-along-path! (-> obj path) (-> obj root-override trans) (-> obj path-pos) 'interp) + (base-plat-method-33 obj) + (plat-path-sync obj) + ) + (else + (set! (-> obj path-pos) 0.0) + (get-point-at-percent-along-path! (-> obj path) (-> obj root-override trans) (-> obj path-pos) 'interp) + (base-plat-method-33 obj) + (plat-path-sync obj) + ) + ) + (none) + ) + +(deftype drop-plat (base-plat) + ((art-name string :offset-assert 272) + (anim spool-anim :offset-assert 276) + (break-anim-name string :offset-assert 280) + (safe-time time-frame :offset-assert 288) + (hit-point vector :inline :offset-assert 304) + ) + :heap-base #xc0 + :method-count-assert 36 + :size-assert #x140 + :flag-assert #x2400c00140 + (:methods + (idle () _type_ :state 34) + (fall (symbol) _type_ :state 35) + ) + ) + + +;; WARN: Return type mismatch base-plat vs drop-plat. +(defmethod relocate drop-plat ((obj drop-plat) (arg0 int)) + (if (nonzero? (-> obj break-anim-name)) + (&+! (-> obj break-anim-name) arg0) + ) + (let ((v1-5 (-> obj anim buffer))) + (if (and (>= (the-as int v1-5) (-> *kernel-context* relocating-min)) + (< (the-as int v1-5) (-> *kernel-context* relocating-max)) + ) + (&+! (-> obj anim buffer) arg0) + ) + ) + (the-as drop-plat ((method-of-type base-plat relocate) obj arg0)) + ) + +(defstate idle (drop-plat) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type + (('touch 'attack 'bonk) + (let* ((proc-temp proc) + (proc-focus (if (type? proc-temp process-focusable) + (the-as process-focusable proc-temp) + ) + ) + ) + (cond + ((and proc-focus (logtest? (-> proc-focus focus-status) (focus-status edge-grab))) + (set! (-> self safe-time) (+ (-> self clock frame-counter) (seconds 0.2))) + (return (the-as object #f)) + ) + ((< (- (-> self clock frame-counter) (-> self safe-time)) (seconds 0.05)) + (return (the-as object #f)) + ) + ) + (set! (-> self hit-point quad) (-> self root-override trans quad)) + (set! proc-focus (if (type? proc process-focusable) + (the-as process-focusable proc) + ) + ) + (set! (-> self hit-point quad) (-> (get-trans proc-focus 0) quad)) + ) + (if (zero? (-> self bounce-time)) + (start-bouncing! self) + ) + #f + ) + ) + ) + :trans (the-as (function none :behavior drop-plat) plat-trans) + :code (behavior () + (gui-control-method-9 + *gui-control* + self + (gui-channel art-load) + (gui-action queue) + (-> self anim name) + -99.0 + 0 + ) + (until #f + (when (not (-> self bouncing)) + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + 0 + ) + (while (-> self bouncing) + (suspend) + ) + (go-virtual fall #f) + ) + #f + (none) + ) + :post (the-as (function none :behavior drop-plat) plat-post) + ) + +(defstate fall (drop-plat) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type + (('edge-grabbed) + (if (>= (- (-> self clock frame-counter) (-> self state-time)) (seconds 0.5)) + (send-event proc 'end-mode) + ) + ) + (('die) + (go-virtual fall #t) + ) + ) + ) + :enter (behavior ((arg0 symbol)) + (set! (-> self state-time) (-> self clock frame-counter)) + (none) + ) + :exit (behavior () + (ja-abort-spooled-anim (-> self anim) (the-as art-joint-anim #f) -1) + (none) + ) + :trans (the-as (function none :behavior drop-plat) rider-trans) + :code (behavior ((arg0 symbol)) + (process-entity-status! self (entity-perm-status subtask-complete) #t) + (let ((v1-1 (-> self root-override root-prim))) + (set! (-> v1-1 prim-core collide-as) (collide-spec)) + (set! (-> v1-1 prim-core collide-with) (collide-spec)) + ) + 0 + (if (not arg0) + (ja-play-spooled-anim + (-> self anim) + (ja-group) + (the-as art-joint-anim #f) + (the-as (function process-drawable symbol) false-func) + ) + ) + (ja-channel-set! 0) + (suspend) + (logior! (-> self mask) (process-mask sleep)) + (suspend) + 0 + (none) + ) + :post (the-as (function none :behavior drop-plat) rider-post) + ) diff --git a/goal_src/jak2/engine/debug/sampler.gc b/goal_src/jak2/engine/debug/sampler.gc index 46f8f5fa3b..c6a063a793 100644 --- a/goal_src/jak2/engine/debug/sampler.gc +++ b/goal_src/jak2/engine/debug/sampler.gc @@ -5,5 +5,49 @@ ;; name in dgo: sampler ;; dgos: ENGINE, GAME +;; og:ignore-form:install-handler 9 timer0-handler + ;; DECOMP BEGINS +;; this file is debug only +(declare-file (debug)) +(when *debug-segment* +(define *sampler-mem* "A pointer to where the sampled data should be stored" (the-as pointer #f)) + +(define *sampler-compare* + "The value used to set the EE register's `Timer 0 Compare Value`. Always `1`" + (the-as uint 1) + ) + +(define *sampler-count* "Incremented everytime a metric is sampled + @see [[timer0-handler]]" 0) + +(defun-debug sampler-start () + "Reset the [[timer-bank]] EE registers. + - If [[*sampler-mem*]] is undefined, allocate 16.7MB in the debug segment + - and when [[*sampler-mem*]] is defined, initialize the [[timer-bank]] fully. Reset [[*sampler-count*]] to 0 as well" + (set! (-> (the-as timer-bank #x10000000) mode) (new 'static 'timer-mode)) + (set! (-> (the-as timer-bank #x10000000) count) (the-as uint 0)) + (set! (-> (the-as timer-bank #x10000000) comp) *sampler-compare*) + (if (not *sampler-mem*) + (set! *sampler-mem* (malloc 'debug #x1000000)) + ) + (when (nonzero? *sampler-mem*) + (mem-set32! *sampler-mem* #x400000 0) + (set! (-> (the-as timer-bank #x10000000) mode) + (new 'static 'timer-mode :clks (timer-clock-selection busclk/256) :zret #x1 :cue #x1 :cmpe #x1 :equf #x1) + ) + (set! *sampler-count* 0) + 0 + ) + (none) + ) + +(defun-debug sampler-stop () + "Sets the [[timer-bank]] mode EE register to 0" + (set! (-> (the-as timer-bank #x10000000) mode) (new 'static 'timer-mode)) + 0 + (none) + ) + +) diff --git a/goal_src/jak2/engine/engine/connect.gc b/goal_src/jak2/engine/engine/connect.gc index c27d5f51c8..d0783a1643 100644 --- a/goal_src/jak2/engine/engine/connect.gc +++ b/goal_src/jak2/engine/engine/connect.gc @@ -60,7 +60,7 @@ (deftype connection (connectable) ((param0 basic :offset-assert 16) - (param1 int32 :offset-assert 20) + (param1 basic :offset-assert 20) (param2 int32 :offset-assert 24) (param3 int32 :offset-assert 28) (quad uint128 2 :offset 0) @@ -394,7 +394,7 @@ (let ((v1-0 (the-as connection (-> obj dead-list next0)))) (when (not (or (not arg0) (= v1-0 (-> obj dead-list-end)))) (set! (-> v1-0 param0) (the-as basic arg1)) - (set! (-> v1-0 param1) (the-as int arg2)) + (set! (-> v1-0 param1) (the-as basic arg2)) (set! (-> v1-0 param2) (the-as int arg3)) (set! (-> v1-0 param3) (the-as int arg4)) (set! (-> obj dead-list next0) (-> v1-0 next0)) diff --git a/goal_src/jak2/engine/entity/entity-h.gc b/goal_src/jak2/engine/entity/entity-h.gc index 504dd0abf7..9ceec646c7 100644 --- a/goal_src/jak2/engine/entity/entity-h.gc +++ b/goal_src/jak2/engine/entity/entity-h.gc @@ -29,7 +29,7 @@ (define-extern reset-cameras (function none)) ;; NOTE - for airlock -(define-extern process-entity-status! (function process entity-perm-status symbol int)) +(define-extern process-entity-status! (function process entity-perm-status symbol entity-perm-status)) (define-extern process-drawable-from-entity! (function process-drawable entity-actor none)) (declare-type nav-poly structure) @@ -191,8 +191,8 @@ ) (deftype actor-reference (structure) - ((actor entity :offset-assert 0) - (id uint32 :offset-assert 4) + ((actor entity :offset-assert 0) + (id uint32 :offset-assert 4) ) :pack-me :method-count-assert 9 diff --git a/goal_src/jak2/engine/entity/entity.gc b/goal_src/jak2/engine/entity/entity.gc index f152825862..9fc0c69dde 100644 --- a/goal_src/jak2/engine/entity/entity.gc +++ b/goal_src/jak2/engine/entity/entity.gc @@ -435,7 +435,7 @@ ) (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)) + (a2-0 (if (and arg0 (not (logtest? (-> *kernel-context* prevent-from-run) (-> arg0 mask))) (run-logic? arg0)) 114 32 ) @@ -1989,7 +1989,7 @@ ) ) ) - (when (zero? (logand (-> obj status) (entity-perm-status bit-5))) + (when (not (logtest? (-> obj status) (entity-perm-status bit-5))) (set! (-> obj user-uint64) (the-as uint 0)) 0 ) @@ -2048,7 +2048,7 @@ ) ) (let ((s5-1 (lambda ((arg0 process)) - (if (zero? (logand (-> arg0 mask) (process-mask no-kill))) + (if (not (logtest? (-> arg0 mask) (process-mask no-kill))) (deactivate arg0) ) (none) @@ -2100,7 +2100,7 @@ ) (defmethod run-logic? process-drawable ((obj process-drawable)) - (or (zero? (logand (-> obj mask) (process-mask actor-pause))) + (or (not (logtest? (-> 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)) ) @@ -2111,7 +2111,7 @@ ) (defmethod birth? entity-links ((obj entity-links) (arg0 vector)) - (and (zero? (logand (-> obj perm status) (entity-perm-status bit-0 dead))) + (and (not (logtest? (-> obj perm status) (entity-perm-status bit-0 dead))) (< (vector-vector-distance (-> obj trans) arg0) (-> *ACTOR-bank* birth-dist)) ) ) @@ -2196,7 +2196,7 @@ ) (else (if (and (-> v1-54 process) - (zero? (logand (-> v1-54 perm status) (entity-perm-status no-kill))) + (not (logtest? (-> v1-54 perm status) (entity-perm-status no-kill))) (zero? (logand (-> v1-54 process mask) (process-mask no-kill))) ) (kill! (-> v1-54 entity)) @@ -2214,7 +2214,7 @@ (dotimes (s2-1 s3-2) (let ((v1-67 (-> s4-3 data s2-1))) (cond - ((zero? (logand (-> v1-67 kill-mask) sv-32)) + ((not (logtest? (-> 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)) @@ -2225,7 +2225,7 @@ ) (else (if (and (-> v1-67 process) - (zero? (logand (-> v1-67 perm status) (entity-perm-status no-kill))) + (not (logtest? (-> v1-67 perm status) (entity-perm-status no-kill))) (zero? (logand (-> v1-67 process mask) (process-mask no-kill))) ) (kill! (-> v1-67 entity)) @@ -2244,7 +2244,7 @@ (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))) + (not (logtest? (-> 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)))) @@ -2257,7 +2257,7 @@ ) (else (if (and (-> s1-0 process) - (zero? (logand (-> s1-0 perm status) (entity-perm-status no-kill))) + (not (logtest? (-> s1-0 perm status) (entity-perm-status no-kill))) (zero? (logand (-> s1-0 process mask) (process-mask no-kill))) ) (kill! (-> s1-0 entity)) @@ -2278,8 +2278,8 @@ (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)) + (not (logtest? (-> sv-48 perm status) (entity-perm-status bit-9 bit-10))) + (not (logtest? (-> 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)) @@ -2302,7 +2302,7 @@ ) (else (when (and (-> sv-48 process) - (zero? (logand (-> sv-48 perm status) (entity-perm-status no-kill))) + (not (logtest? (-> sv-48 perm status) (entity-perm-status no-kill))) (zero? (logand (-> sv-48 process mask) (process-mask no-kill))) ) (kill! (-> sv-48 entity)) @@ -2369,21 +2369,23 @@ (none) ) +;; WARN: Return type mismatch int vs entity-perm-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 - ) - ) + (the-as entity-perm-status (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 + ) + ) + ) ) ;; WARN: Return type mismatch entity-actor vs entity. diff --git a/goal_src/jak2/engine/entity/relocate.gc b/goal_src/jak2/engine/entity/relocate.gc index 8d3e97014f..8f08c4c075 100644 --- a/goal_src/jak2/engine/entity/relocate.gc +++ b/goal_src/jak2/engine/entity/relocate.gc @@ -32,8 +32,10 @@ ) ) (let ((a0-19 (-> (the-as connection v1-7) param1))) - (if (and (>= a0-19 (-> *kernel-context* relocating-min)) (< a0-19 (-> *kernel-context* relocating-max))) - (+! (-> (the-as connection v1-7) param1) arg0) + (if (and (>= (the-as int a0-19) (-> *kernel-context* relocating-min)) + (< (the-as int a0-19) (-> *kernel-context* relocating-max)) + ) + (&+! (-> (the-as connection v1-7) param1) arg0) ) ) (let ((a0-24 (-> (the-as connection v1-7) param2))) @@ -98,6 +100,7 @@ obj ) +;; WARN: Return type mismatch process vs process-drawable. (defmethod relocate process-drawable ((obj process-drawable) (arg0 int)) (let ((v1-0 *kernel-context*)) (set! (-> v1-0 relocating-process) obj) @@ -163,6 +166,7 @@ obj ) +;; WARN: Return type mismatch collide-shape vs collide-shape-moving. (defmethod relocate collide-shape-moving ((obj collide-shape-moving) (arg0 int)) (if (-> obj dynam) (&+! (-> obj dynam) arg0) @@ -322,6 +326,7 @@ obj ) +;; WARN: Return type mismatch process vs camera-master. (defmethod relocate camera-master ((obj camera-master) (arg0 int)) (if (nonzero? (-> obj water-drip)) (&+! (-> obj water-drip) arg0) @@ -329,6 +334,7 @@ (the-as camera-master ((method-of-type process relocate) obj arg0)) ) +;; WARN: Return type mismatch process vs time-of-day-proc. (defmethod relocate time-of-day-proc ((obj time-of-day-proc) (arg0 int)) (if (nonzero? (-> obj sun)) (&+! (-> obj sun) arg0) @@ -342,6 +348,7 @@ (the-as time-of-day-proc ((method-of-type process relocate) obj arg0)) ) +;; WARN: Return type mismatch process vs part-tracker. (defmethod relocate part-tracker ((obj part-tracker) (arg0 int)) (if (nonzero? (-> obj root)) (&+! (-> obj root) arg0) @@ -352,6 +359,7 @@ (the-as part-tracker ((method-of-type process relocate) obj arg0)) ) +;; WARN: Return type mismatch process vs part-spawner. (defmethod relocate part-spawner ((obj part-spawner) (arg0 int)) (if (nonzero? (-> obj root)) (&+! (-> obj root) arg0) @@ -365,6 +373,7 @@ (the-as part-spawner ((method-of-type process relocate) obj arg0)) ) +;; WARN: Return type mismatch process vs lightning-tracker. (defmethod relocate lightning-tracker ((obj lightning-tracker) (arg0 int)) (if (nonzero? (-> obj root)) (&+! (-> obj root) arg0) @@ -375,6 +384,7 @@ (the-as lightning-tracker ((method-of-type process relocate) obj arg0)) ) +;; WARN: Return type mismatch process-drawable vs manipy. (defmethod relocate manipy ((obj manipy) (arg0 int)) (if (nonzero? (-> obj joint 0)) (&+! (-> obj joint 0) arg0) diff --git a/goal_src/jak2/engine/gfx/lightning-h.gc b/goal_src/jak2/engine/gfx/lightning-h.gc index d30df310f8..cf5a66fbee 100644 --- a/goal_src/jak2/engine/gfx/lightning-h.gc +++ b/goal_src/jak2/engine/gfx/lightning-h.gc @@ -5,6 +5,9 @@ ;; name in dgo: lightning-h ;; dgos: ENGINE, GAME +(define-extern unlink-lightning-spec-by-heap (function kheap none)) + +;; +++lightning-spec-flags (defenum lightning-spec-flags :type uint16 :bitfield #t @@ -14,17 +17,22 @@ (lsf3 3) (size-from-adjust-dist 4) ) +;; ---lightning-spec-flags + +;; +++lightning-mode (defenum lightning-mode :type uint8 + (lm-1 -1) (lm0 0) (lm1 1) (lm2 2) (lm3 3) ) +;; ---lightning-mode -(define-extern unlink-lightning-spec-by-heap (function kheap none)) - +(declare-type lightning-spec basic) +(define-extern *lightning-spec-id-table* (array lightning-spec)) ;; DECOMP BEGINS @@ -56,8 +64,6 @@ :flag-assert #x900000050 ) -(define-extern *lightning-spec-id-table* (array lightning-spec)) - (defun lookup-lightning-spec-by-name ((arg0 string)) (let* ((s5-0 *lightning-spec-id-table*) (s4-0 (-> s5-0 length)) @@ -90,6 +96,7 @@ :flag-assert #x900000094 ) + (deftype lightning-control (basic) ((spec lightning-spec :offset-assert 4) (process process :offset-assert 8) @@ -102,12 +109,13 @@ (new (symbol type lightning-spec process float) _type_ 0) (change-mode (_type_ lightning-mode) lightning-mode 9) (get-mode (_type_) lightning-mode 10) - (set-point (_type_ int vector) none 11) + (set-point! (_type_ int vector) none 11) (set-first-meet-point (_type_ vector) none 12) (set-last-meet-point (_type_ vector) none 13) ) ) + (defmethod change-mode lightning-control ((obj lightning-control) (arg0 lightning-mode)) (let ((v1-1 (!= arg0 (-> obj state mode)))) (case arg0 @@ -130,7 +138,7 @@ (-> obj state mode) ) -(defmethod set-point lightning-control ((obj lightning-control) (arg0 int) (arg1 vector)) +(defmethod set-point! lightning-control ((obj lightning-control) (arg0 int) (arg1 vector)) (let ((v1-0 (-> obj state))) (when (and (-> v1-0 path) (>= arg0 0) (< arg0 (-> v1-0 path length))) (set! (-> v1-0 path data arg0 quad) (-> arg1 quad)) @@ -152,11 +160,13 @@ (none) ) +;; WARN: Return type mismatch (inline-array vector) vs none. (defmethod set-first-meet-point lightning-control ((obj lightning-control) (arg0 vector)) (set! (-> obj state meet data 0 quad) (-> arg0 quad)) (none) ) +;; WARN: Return type mismatch vector vs none. (defmethod set-last-meet-point lightning-control ((obj lightning-control) (arg0 vector)) (set! (-> obj state meet data (+ (-> obj state points-to-draw) -1) quad) (-> arg0 quad)) (none) @@ -178,6 +188,7 @@ obj ) +;; WARN: Return type mismatch object vs lightning-control. (defmethod new lightning-control ((allocation symbol) (type-to-make type) (arg0 lightning-spec) (arg1 process) (arg2 float)) (with-pp (let ((obj (object-new allocation type-to-make (the-as int (-> type-to-make size))))) diff --git a/goal_src/jak2/engine/nav/nav-mesh-h.gc b/goal_src/jak2/engine/nav/nav-mesh-h.gc index e1a98e448e..c3d6ceec1e 100644 --- a/goal_src/jak2/engine/nav/nav-mesh-h.gc +++ b/goal_src/jak2/engine/nav/nav-mesh-h.gc @@ -14,6 +14,9 @@ (declare-type grid-hash basic) (declare-type sphere-hash grid-hash) +;; NOTE - for basebutton +(define-extern nav-mesh-connect-from-ent (function entity-nav-mesh none)) + ;; DECOMP BEGINS (deftype nav-mesh-work-debug (structure) diff --git a/goal_src/jak2/engine/physics/trajectory.gc b/goal_src/jak2/engine/physics/trajectory.gc index 1fda361bc4..1a4cb82c58 100644 --- a/goal_src/jak2/engine/physics/trajectory.gc +++ b/goal_src/jak2/engine/physics/trajectory.gc @@ -23,7 +23,6 @@ (/ (- (-> obj initial-velocity y)) (-> obj gravity)) ) -;; WARN: Return type mismatch int vs none. (defmethod setup-from-to-duration! trajectory ((obj trajectory) (arg0 vector) (arg1 vector) (arg2 float) (arg3 float)) (set! (-> obj initial-position quad) (-> arg0 quad)) (set! (-> obj gravity) arg3) @@ -37,7 +36,6 @@ (none) ) -;; WARN: Return type mismatch int vs none. (defmethod setup-from-to-xz-vel! trajectory ((obj trajectory) (arg0 vector) (arg1 vector) (arg2 float) (arg3 float)) (let ((f0-1 (/ (vector-vector-xz-distance arg1 arg0) arg2))) (setup-from-to-duration! obj arg0 arg1 f0-1 arg3) @@ -46,7 +44,6 @@ (none) ) -;; WARN: Return type mismatch int vs none. (defmethod setup-from-to-y-vel! trajectory ((obj trajectory) (arg0 vector) (arg1 vector) (arg2 float) (arg3 float)) (let* ((f0-0 arg2) (f1-3 (- (* f0-0 f0-0) (* 2.0 (- (-> arg0 y) (-> arg1 y)) arg3))) @@ -63,7 +60,6 @@ (none) ) -;; WARN: Return type mismatch int vs none. (defmethod setup-from-to-height! trajectory ((obj trajectory) (arg0 vector) (arg1 vector) (arg2 float) (arg3 float)) (let* ((f0-1 (+ arg2 (fmax (-> arg0 y) (-> arg1 y)))) (f1-4 (* 2.0 (- (-> arg0 y) f0-1) arg3)) @@ -78,7 +74,6 @@ (none) ) -;; WARN: Return type mismatch int vs none. ;; WARN: Function (method 16 trajectory) has a return type of none, but the expression builder found a return statement. (defmethod setup-from-to-duration-and-height! trajectory ((obj trajectory) (arg0 vector) (arg1 vector) (arg2 float) (arg3 float)) (let ((f0-1 (- (-> arg1 y) (-> arg0 y)))) @@ -112,7 +107,6 @@ (none) ) -;; WARN: Return type mismatch int vs none. (defmethod debug-draw trajectory ((obj trajectory)) (let ((s5-0 (new 'stack-no-clear 'vector)) (s4-0 (new 'stack-no-clear 'vector)) @@ -124,7 +118,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 debug-no-zbuf1) 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 @@ -142,7 +144,6 @@ obj ) -;; WARN: Return type mismatch int vs none. (defmethod update-from-cspace impact-control ((obj impact-control)) (when (>= (-> obj joint) 0) (set! (-> obj trans 1 quad) (-> obj trans 0 quad)) @@ -254,20 +255,21 @@ ) ) (sphere<-vector+r! s1-0 arg1 arg2) - (let ((t9-4 (method-of-object *actor-hash* spatial-hash-method-36))) - (-> s2-1 data) - (-> s2-1 allocated-length) - (set! (-> s2-1 length) (the-as int (t9-4))) - ) + (set! (-> s2-1 length) (spatial-hash-method-36 + *actor-hash* + s1-0 + (the-as (pointer collide-shape) (-> s2-1 data)) + (-> s2-1 allocated-length) + ) + ) (let ((gp-2 (find-nearest-focusable (the-as (array collide-shape) s2-1) arg1 arg2 - (the-as search-info-flag (if (= arg4 65536.0) - 515 - 595 - ) - ) + (if (= arg4 65536.0) + (search-info-flag crate enemy combo) + (search-info-flag crate enemy prefer-angle cull-angle combo) + ) (search-info-flag) arg3 (the-as vector #f) @@ -390,7 +392,6 @@ ) ) -;; WARN: Return type mismatch int vs none. (defmethod cubic-curve-method-9 cubic-curve ((obj cubic-curve) (arg0 vector) (arg1 vector) (arg2 vector) (arg3 vector)) (rlet ((acc :class vf) (vf0 :class vf) @@ -464,7 +465,6 @@ arg0 ) -;; WARN: Return type mismatch int vs none. (defmethod debug-draw-curve cubic-curve ((obj cubic-curve)) (let ((s5-0 (new 'stack-no-clear 'trajectory)) (s4-0 10) @@ -491,7 +491,3 @@ 0 (none) ) - - - - diff --git a/goal_src/jak2/engine/process-drawable/process-drawable-h.gc b/goal_src/jak2/engine/process-drawable/process-drawable-h.gc index b34e3d9ce8..636c7bce15 100644 --- a/goal_src/jak2/engine/process-drawable/process-drawable-h.gc +++ b/goal_src/jak2/engine/process-drawable/process-drawable-h.gc @@ -20,6 +20,11 @@ (define-extern ja-min? (function int symbol :behavior process-drawable)) (define-extern ja-max? (function int symbol :behavior process-drawable)) +;; NOTE - for basebutton +(define-extern rider-trans (function none :behavior process-drawable)) +;; NOTE - for base-plat +(define-extern rider-post (function none :behavior process-drawable)) + ;; DECOMP BEGINS (defun cspace-by-name-no-fail ((arg0 process-drawable) (arg1 string)) diff --git a/goal_src/jak2/engine/process-drawable/simple-focus.gc b/goal_src/jak2/engine/process-drawable/simple-focus.gc index 0af3042720..3bc35286a5 100644 --- a/goal_src/jak2/engine/process-drawable/simple-focus.gc +++ b/goal_src/jak2/engine/process-drawable/simple-focus.gc @@ -7,3 +7,58 @@ ;; DECOMP BEGINS +(deftype simple-focus (process-focusable) + ((first-time? symbol :offset-assert 204) + ) + :heap-base #x50 + :method-count-assert 28 + :size-assert #xd0 + :flag-assert #x1c005000d0 + (:methods + (idle () _type_ :state 27) + ) + ) + + +(defmethod get-trans simple-focus ((obj simple-focus) (arg0 int)) + "@returns the `trans` [[vector]] from the process's `root` (typically either a [[trsqv]] or a [[collide-shape]]" + (-> obj root trans) + ) + +(defmethod run-logic? simple-focus ((obj simple-focus)) + (when (-> obj first-time?) + (set! (-> obj first-time?) #f) + #t + ) + ) + +(defstate idle (simple-focus) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) + (the-as object (when (= v1-0 'move-trans) + (let ((v0-0 (-> self root trans))) + (set! (-> v0-0 quad) (-> (the-as vector (-> event param 0)) quad)) + v0-0 + ) + ) + ) + ) + ) + :code (the-as (function none :behavior simple-focus) sleep-code) + ) + +;; WARN: Return type mismatch object vs none. +(defbehavior simple-focus-init-by-other simple-focus () + "Initializes the new [[simple-focus]]. `first-time?` will be set to [[#t]]" + (let ((root (new 'process 'trsqv))) + (set! (-> self root) root) + (vector-identity! (-> root scale)) + (quaternion-identity! (-> root quat)) + ) + (logclear! (-> self mask) (process-mask enemy)) + (set! (-> self first-time?) #t) + (set! (-> self event-hook) (-> (method-of-object self idle) event)) + (go-virtual idle) + (none) + ) diff --git a/goal_src/jak2/engine/process-drawable/simple-nav-sphere.gc b/goal_src/jak2/engine/process-drawable/simple-nav-sphere.gc index 7b58df92de..9bb4311b78 100644 --- a/goal_src/jak2/engine/process-drawable/simple-nav-sphere.gc +++ b/goal_src/jak2/engine/process-drawable/simple-nav-sphere.gc @@ -7,3 +7,142 @@ ;; DECOMP BEGINS +(deftype simple-nav-sphere (process-drawable) + ((root-override collide-shape :offset 128) + (first-time? symbol :offset-assert 200) + (track-joint int32 :offset-assert 204) + ) + :heap-base #x50 + :method-count-assert 22 + :size-assert #xd0 + :flag-assert #x16005000d0 + (:methods + (idle () _type_ :state 20) + (active () _type_ :state 21) + ) + ) + + +;; WARN: Return type mismatch object vs none. +(defbehavior simple-nav-sphere-event-handler simple-nav-sphere ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type + (('die-fast) + (go empty-state) + ) + (('move-trans) + (collide-shape-method-29 (-> self root-override) (the-as vector (-> event param 0))) + #t + ) + (('set-radius) + (let ((radius (the-as float (-> event param 0))) + (collide-shape (-> self root-override)) + ) + (set! (-> collide-shape nav-radius) radius) + (set! (-> collide-shape root-prim local-sphere w) radius) + (collide-shape-method-46 collide-shape) + ) + #t + ) + ) + (none) + ) + +(defmethod run-logic? simple-nav-sphere ((obj simple-nav-sphere)) + (cond + (*display-nav-marks* + #t + ) + ((>= (-> obj track-joint) 0) + #t + ) + ((-> obj first-time?) + (set! (-> obj first-time?) #f) + #t + ) + ) + ) + +(defstate idle (simple-nav-sphere) + :virtual #t + :event (the-as + (function process int symbol event-message-block object :behavior simple-nav-sphere) + simple-nav-sphere-event-handler + ) + :trans (behavior () + (if *display-nav-marks* + (add-debug-sphere + #t + (bucket-id debug2) + (-> self root-override trans) + (-> self root-override nav-radius) + (new 'static 'rgba :r #x80 :g #x40 :a #x80) + ) + ) + (none) + ) + :code (the-as (function none :behavior simple-nav-sphere) sleep-code) + ) + +(defstate active (simple-nav-sphere) + :virtual #t + :event (the-as + (function process int symbol event-message-block object :behavior simple-nav-sphere) + simple-nav-sphere-event-handler + ) + :trans (behavior () + (let ((v1-0 (ppointer->process (-> self parent))) + (gp-0 (new 'stack-no-clear 'vector)) + ) + (vector<-cspace! gp-0 (-> (the-as process-drawable v1-0) node-list data (-> self track-joint))) + (collide-shape-method-29 (-> self root-override) gp-0) + ) + (none) + ) + :code (the-as (function none :behavior simple-nav-sphere) sleep-code) + ) + +;; WARN: Return type mismatch object vs none. +(defbehavior simple-nav-sphere-init-by-other simple-nav-sphere ((arg0 float) (arg1 vector) (arg2 nav-mesh) (arg3 int)) + (set! (-> self track-joint) arg3) + (set! (-> self first-time?) #t) + (let ((s5-0 (new 'process 'collide-shape self (collide-list-enum usually-hit-by-player)))) + (let ((v1-3 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 0)))) + (set! (-> v1-3 prim-core collide-as) (collide-spec obstacle)) + (set-vector! (-> v1-3 local-sphere) 0.0 0.0 0.0 4096.0) + (set! (-> s5-0 total-prims) (the-as uint 1)) + (set! (-> s5-0 root-prim) v1-3) + ) + (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) + (let ((v1-6 (-> s5-0 root-prim))) + (set! (-> s5-0 backup-collide-as) (-> v1-6 prim-core collide-as)) + (set! (-> s5-0 backup-collide-with) (-> v1-6 prim-core collide-with)) + ) + (set! (-> s5-0 nav-radius) arg0) + (set! (-> s5-0 root-prim local-sphere w) arg0) + (if arg1 + (set! (-> s5-0 trans quad) (-> arg1 quad)) + ) + (vector-identity! (-> s5-0 scale)) + (quaternion-identity! (-> s5-0 quat)) + (let ((v1-11 (-> s5-0 root-prim))) + (set! (-> v1-11 prim-core collide-as) (collide-spec)) + (set! (-> v1-11 prim-core collide-with) (collide-spec)) + ) + 0 + (collide-shape-method-46 s5-0) + (set! (-> self root-override) s5-0) + ) + (logclear! (-> self mask) (process-mask actor-pause enemy)) + (set! (-> self event-hook) + (the-as (function process int symbol event-message-block object) simple-nav-sphere-event-handler) + ) + (if arg2 + (nav-mesh-method-29 arg2 self #f) + (nav-mesh-connect-from-ent (the-as entity-nav-mesh self)) + ) + (if (>= (-> self track-joint) 0) + (go-virtual active) + (go-virtual idle) + ) + (none) + ) 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 fa646d827e..a1a5462728 100644 --- a/goal_src/jak2/engine/spatial-hash/actor-hash-h.gc +++ b/goal_src/jak2/engine/spatial-hash/actor-hash-h.gc @@ -11,6 +11,6 @@ ;; DECOMP BEGINS -(define *actor-list* (malloc 'global 1024)) -(define *actor-list-length* 0) +(define *actor-list* (the-as (pointer collide-shape) (malloc 'global 1024))) +(define *actor-list-length* 0) diff --git a/goal_src/jak2/engine/spatial-hash/spatial-hash-h.gc b/goal_src/jak2/engine/spatial-hash/spatial-hash-h.gc index 4b58a6165c..94e70623c7 100644 --- a/goal_src/jak2/engine/spatial-hash/spatial-hash-h.gc +++ b/goal_src/jak2/engine/spatial-hash/spatial-hash-h.gc @@ -126,17 +126,10 @@ (:methods (spatial-hash-method-34 () none 34) (spatial-hash-method-35 () none 35) - (spatial-hash-method-36 () none 36) + (spatial-hash-method-36 (_type_ sphere (pointer collide-shape) int) int 36) (spatial-hash-method-37 () none 37) (spatial-hash-method-38 () none 38) (spatial-hash-method-39 () none 39) (spatial-hash-method-40 () none 40) ) ) - - -0 - - - - diff --git a/goal_src/jak2/engine/target/board/target-board.gc b/goal_src/jak2/engine/target/board/target-board.gc index e235c915a5..18d100a25b 100644 --- a/goal_src/jak2/engine/target/board/target-board.gc +++ b/goal_src/jak2/engine/target/board/target-board.gc @@ -52,7 +52,8 @@ (define-extern target-board-clone-anim (state handle target)) (define-extern target-board-hit (state vector target)) -;; definition for symbol *board-walk-mods*, type surface +;; decomp begins + (define *board-walk-mods* (new 'static 'surface :name 'run @@ -144,7 +145,6 @@ ) ) -;; definition for symbol *board-duck-mods*, type surface (define *board-duck-mods* (new 'static 'surface :name 'duck :turnv 21845.334 @@ -180,7 +180,6 @@ (set! (-> *board-duck-mods* mult-hook) (-> *board-walk-mods* mult-hook)) -;; definition for symbol *board-air-mods*, type surface (define *board-air-mods* (new 'static 'surface :name 'air :turnv 49152.0 @@ -215,7 +214,6 @@ ) ) -;; definition for symbol *board-jump-mods*, type surface (define *board-jump-mods* (new 'static 'surface :name 'jump :turnv 49152.0 @@ -244,7 +242,6 @@ ) ) -;; definition for symbol *board-ride-jump-mods*, type surface (define *board-ride-jump-mods* (new 'static 'surface :name 'jump @@ -288,12 +285,10 @@ ) ) -;; definition for symbol *board-duck-jump-mods*, type surface (define *board-duck-jump-mods* *board-jump-mods*) (define *board-spin-mods* (copy *board-jump-mods* 'global)) -;; failed to figure out what this is: (let ((v1-10 *board-spin-mods*)) (set! (-> v1-10 name) 'spin) (set! (-> v1-10 flags) (surface-flag no-turn-around check-edge air)) @@ -328,7 +323,6 @@ (set! *board-flip-mods* v1-14) ) -;; definition for symbol *board-wall-kick-mods*, type surface (define *board-wall-kick-mods* (new 'static 'surface :name 'jump @@ -367,7 +361,6 @@ ) ) -;; definition for symbol *board-halfpipe-mods*, type surface (define *board-halfpipe-mods* (new 'static 'surface :name 'jump :turnv 131072.0 @@ -395,7 +388,6 @@ ) ) -;; definition for symbol *board-turn-to-mods*, type surface (define *board-turn-to-mods* (new 'static 'surface :name 'run :turnv 524288.0 @@ -429,7 +421,6 @@ (set! (-> *board-turn-to-mods* mult-hook) (-> *board-walk-mods* mult-hook)) -;; definition for symbol *board-ride-mods*, type surface (define *board-ride-mods* (new 'static 'surface :name 'run :turnv 218453.33 @@ -471,7 +462,6 @@ ) ) -;; definition for symbol *collide-edge-board-halfpipe-spec*, type collide-edge-spec (define *collide-edge-board-halfpipe-spec* (new 'static 'collide-edge-spec :split-dists (new 'static 'array float 2 1024.0 1433.6) :outward-offset (new 'static 'vector :x 708.608 :y 13312.0 :w 1.0) @@ -542,7 +532,6 @@ (none) ) -;; definition for function target-board-init (defbehavior target-board-init target () (target-gun-end-mode #f) (target-exit) @@ -635,8 +624,6 @@ (none) ) -;; definition for function target-board-exit -;; INFO: Used lq/sq (defbehavior target-board-exit target () (when (not (and (-> self next-state) (let ((v1-3 (-> self next-state name))) @@ -705,8 +692,6 @@ (none) ) -;; definition for function target-board-falling-anim-trans -;; WARN: Return type mismatch int vs none. (defbehavior target-board-falling-anim-trans target () (let ((v1-2 (ja-group))) (cond @@ -725,13 +710,10 @@ (none) ) -;; definition for function board-on-ground? (defbehavior board-on-ground? target () (logtest? (-> self control status) (cshape-moving-flags on-surface)) ) -;; definition for function target-board-smack-surface? -;; INFO: Used lq/sq (defbehavior target-board-smack-surface? target () (when (and (logtest? (-> self control status) (cshape-moving-flags t-wall)) (< (+ (-> self clock frame-counter) (seconds -0.05)) (-> self control unknown-time-frame07)) @@ -748,9 +730,6 @@ ) ) -;; definition for function board-add-thrust -;; INFO: Used lq/sq -;; WARN: Return type mismatch int vs none. (defbehavior board-add-thrust target () (let ((gp-0 (-> self control unknown-vector00))) (let* ((v1-1 gp-0) @@ -883,7 +862,6 @@ (none) ) -;; definition for function segment-array-vector->index (defun segment-array-vector->index ((arg0 (inline-array vector)) (arg1 int) (arg2 float) (arg3 float)) (let ((gp-0 -1) (f30-0 0.0) @@ -901,7 +879,6 @@ ) ) -;; definition for function segment-array-index->vector (defun segment-array-index->vector ((arg0 (inline-array vector)) (arg1 int) (arg2 float) (arg3 vector)) (let ((v0-0 (the int arg2))) (let* ((f0-2 arg2) @@ -921,8 +898,6 @@ ) ) -;; definition for function target-board-exit-check -;; WARN: Return type mismatch int vs none. (defbehavior target-board-exit-check target () (if (and (or (and (cpad-pressed? (-> self control unknown-cpad-info00 number) r2) (or (!= *cheat-mode* 'debug) @@ -947,8 +922,6 @@ (none) ) -;; definition for function target-board-effect -;; WARN: Return type mismatch int vs none. (defbehavior target-board-effect target () (let ((gp-0 0)) (cond @@ -966,7 +939,7 @@ ) (set! gp-0 1) ) - ((zero? (logand (-> self control status) (cshape-moving-flags on-surface))) + ((not (logtest? (-> self control status) (cshape-moving-flags on-surface))) (set! gp-0 2) ) ) @@ -1111,9 +1084,6 @@ (none) ) -;; definition for function target-board-physics -;; INFO: Used lq/sq -;; WARN: Return type mismatch int vs none. (defbehavior target-board-physics target ((arg0 vector)) (let ((f30-0 0.5)) (if (>= (- (-> self clock frame-counter) (-> self board unknown-time-frame02)) (seconds 0.3)) @@ -1224,9 +1194,6 @@ (none) ) -;; definition for function target-board-collision -;; INFO: Used lq/sq -;; WARN: Return type mismatch int vs none. (defbehavior target-board-collision target () (let ((gp-0 (new 'stack-no-clear 'vector))) (set! (-> gp-0 quad) (-> self control transv quad)) @@ -1283,7 +1250,7 @@ (set! (-> a2-6 ignore-process1) #f) (set! (-> a2-6 ignore-pat) (-> v1-30 pat-ignore-mask)) (set! (-> a2-6 action-mask) (collide-action solid)) - (collide-shape-method-32 v1-30 (-> v1-30 transv) a2-6 (meters 1.0)) + (collide-shape-method-32 v1-30 (-> v1-30 transv) a2-6 (meters 1)) ) (when (logtest? (-> self control root-prim prim-core action) (collide-action check-edge)) (set! (-> *collide-edge-board-spec* flags) (logand -3 (-> *collide-edge-board-spec* flags))) @@ -1314,7 +1281,7 @@ (when (and (logtest? (-> self control status) (cshape-moving-flags t-wall)) (and (< 16384.0 f30-0) (not (and (-> self next-state) (= (-> self next-state name) 'target-board-smack))) - (zero? (logand (focus-status halfpipe) (-> self focus-status))) + (not (logtest? (focus-status halfpipe) (-> self focus-status))) (!= (-> self control ground-pat mode) 3) (>= (- (-> self clock frame-counter) (-> self board halfpipe-time)) (seconds 0.1)) ) @@ -1421,9 +1388,6 @@ (none) ) -;; definition for function target-board-joint-points -;; INFO: Used lq/sq -;; WARN: Return type mismatch int vs none. (defbehavior target-board-joint-points target () (when (-> self board board) (let ((a1-0 (-> self node-list data 25 bone transform))) @@ -1438,9 +1402,6 @@ (none) ) -;; definition for function target-board-pre-move -;; INFO: Used lq/sq -;; WARN: Return type mismatch int vs none. (defbehavior target-board-pre-move target () (cond ((and (and (logtest? (-> self control unknown-surface00 flags) (surface-flag air)) @@ -1516,10 +1477,7 @@ (logior! (-> self control root-prim prim-core action) (collide-action check-edge)) (logclear! (-> self control root-prim prim-core action) (collide-action check-edge)) ) - (if (zero? (logand (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-abs 0) - (pad-buttons circle square) - ) - ) + (if (not (cpad-hold? (-> self control unknown-cpad-info00 number) circle square)) (set! (-> self board ride-lock) #f) ) (cond @@ -1627,7 +1585,7 @@ (set! (-> self board unknown-time-frame00) (-> self clock frame-counter)) ) ) - (when (and (zero? (logand (-> self control status) (cshape-moving-flags on-surface))) + (when (and (not (logtest? (-> self control status) (cshape-moving-flags on-surface))) (< 0.0 f28-0) (or (and (or (< (target-height-above-ground) 4096.0) (< (- (-> self clock frame-counter) (-> self board unknown-time-frame00)) (seconds 0.1)) @@ -1670,9 +1628,6 @@ (none) ) -;; definition for function target-board-real-post -;; INFO: Used lq/sq -;; WARN: Return type mismatch int vs none. (defbehavior target-board-real-post target () (let ((f30-0 (-> self clock clock-ratio))) (let ((gp-1 (max 1 (the int (-> self clock time-adjust-ratio))))) @@ -1711,14 +1666,14 @@ ) (if (and (= (-> self control unknown-float12) 0.0) (>= (-> self clock frame-counter) (-> self control unknown-time-frame00)) - (zero? (logand (-> self control unknown-surface01 flags) (surface-flag turn-to-vel))) + (not (logtest? (-> self control unknown-surface01 flags) (surface-flag turn-to-vel))) (>= (- (-> self clock frame-counter) (-> self board unknown-time-frame00)) (seconds 0.1)) ) (rot->dir-targ! (-> self control)) ) (when (and (< (- (-> self clock frame-counter) (-> self control unknown-time-frame06)) (seconds 0.1)) (>= (-> self clock frame-counter) (-> self control unknown-time-frame00)) - (zero? (logand (-> self control unknown-surface01 flags) (surface-flag turn-to-vel))) + (not (logtest? (-> self control unknown-surface01 flags) (surface-flag turn-to-vel))) (>= (- (-> self clock frame-counter) (-> self board unknown-time-frame00)) (seconds 0.1)) ) (let* ((s3-0 @@ -1929,8 +1884,6 @@ (none) ) -;; definition for function probe-test -;; INFO: Used lq/sq (defun probe-test ((arg0 control-info) (arg1 vector) (arg2 pat-surface)) (dotimes (s3-0 3) (let ((s2-0 (new 'stack-no-clear 'collide-query))) @@ -2102,7 +2055,7 @@ ) (if (probe-test (-> self control) s3-5 (new 'static 'pat-surface :noentity #x1 :noboard #x1 :probe #x1)) (set! (-> self control status) (logior (cshape-moving-flags csmf16) (-> self control status))) - ((method-of-object (-> self control) collide-shape-method-28)) + (move-by-vector! (-> self control) s3-5) ) ) ) @@ -2309,9 +2262,10 @@ (set! (-> self control transv quad) (-> s5-0 quad)) ) ) - (when (zero? (logand s4-3 64)) - (vector-float*! (new 'stack-no-clear 'vector) (-> self control dynam gravity-normal) 819.2) - ((method-of-object (-> self control) collide-shape-method-28)) + (when (not (logtest? s4-3 64)) + (let ((a1-83 (vector-float*! (new 'stack-no-clear 'vector) (-> self control dynam gravity-normal) 819.2))) + (move-by-vector! (-> self control) a1-83) + ) ) (send-event self 'end-mode (zero? (logand s4-3 75))) ) @@ -2332,8 +2286,6 @@ ) ) -;; definition for function board-ride-add-thrust -;; WARN: Return type mismatch int vs none. (defbehavior board-ride-add-thrust target ((arg0 vector) (arg1 float)) (let* ((f30-0 (-> self board ride-speed)) (f0-4 @@ -2381,9 +2333,6 @@ (none) ) -;; definition for function target-board-ride-post -;; INFO: Used lq/sq -;; WARN: Return type mismatch int vs none. (defbehavior target-board-ride-post target () (let ((f30-0 (-> self clock clock-ratio))) (let ((gp-1 (max 1 (the int (-> self clock time-adjust-ratio))))) @@ -2615,22 +2564,17 @@ (none) ) -;; definition for function target-board-post (defbehavior target-board-post target () (target-board-real-post) (none) ) -;; definition for function target-board-center-anim -;; WARN: Return type mismatch int vs none. (defbehavior target-board-center-anim target () (set! (-> self board turn-anim-frame) 0.0) 0 (none) ) -;; definition for function target-board-turn-anim -;; WARN: Return type mismatch int vs none. (defbehavior target-board-turn-anim target ((arg0 int)) (let ((f30-0 (-> self clock clock-ratio))) (let ((s5-1 (max 1 (the int (-> self clock time-adjust-ratio))))) @@ -2742,8 +2686,6 @@ (none) ) -;; definition for method 9 of type board-info -;; WARN: Return type mismatch int vs none. (defmethod add-to-trick-list board-info ((obj board-info) (arg0 board-tricks) (arg1 float)) "Add specified trick and point amount to trick list." (send-event (handle->process (-> obj process 0 notify)) 'notify 'trick-point arg0) @@ -2862,8 +2804,6 @@ (none) ) -;; definition for method 10 of type board-info -;; WARN: Return type mismatch int vs none. (defmethod flush-trick-list board-info ((obj board-info)) "Flush trick list and give out points." (let ((f30-0 0.0)) diff --git a/goal_src/jak2/engine/target/logic-target.gc b/goal_src/jak2/engine/target/logic-target.gc index f95989eb31..ddf3487421 100644 --- a/goal_src/jak2/engine/target/logic-target.gc +++ b/goal_src/jak2/engine/target/logic-target.gc @@ -673,7 +673,7 @@ (< 0.7 (-> self control unknown-float27)) (and (< (-> self control unknown-float05) 8192.0) (logtest? (-> self control status) (cshape-moving-flags t-wall)) - (zero? (logand (-> self control status) (cshape-moving-flags t-act))) + (not (logtest? (-> self control status) (cshape-moving-flags t-act))) (or (= (-> self control unknown-pat-surface00 event) (pat-event hide)) (let ((a0-2 (level-get-target-inside *level*))) (and a0-2 (logtest? (-> a0-2 info level-flags) 1)) @@ -984,7 +984,7 @@ ) (vector-matrix*! s2-0 s3-1 (-> self control unknown-matrix01)) (let ((f28-0 (vector-vector-xz-distance s3-1 s4-0))) - (when (and (zero? (logand (-> self control status) (cshape-moving-flags t-surface))) + (when (and (not (logtest? (-> self control status) (cshape-moving-flags t-surface))) (let ((v1-51 gp-0)) (< (sqrtf (+ (* (-> v1-51 x) (-> v1-51 x)) (* (-> v1-51 z) (-> v1-51 z)))) (sqrtf (+ (* (-> s3-1 x) (-> s3-1 x)) (* (-> s3-1 z) (-> s3-1 z)))) @@ -1000,7 +1000,7 @@ ) ) ) - (if (and (zero? (logand (-> self control status) (cshape-moving-flags t-wall))) + (if (and (not (logtest? (-> self control status) (cshape-moving-flags t-wall))) (logtest? (-> self control old-status) (cshape-moving-flags t-wall)) (logtest? (-> self control unknown-surface00 flags) (surface-flag air)) (< 0.0 (-> gp-0 y)) @@ -1019,7 +1019,7 @@ (if (< (- (-> self clock frame-counter) (-> self control unknown-time-frame09)) (seconds 0.2)) (set! f30-0 (+ 204800.0 f30-0)) ) - (if (and (zero? (logand (-> self control status) (cshape-moving-flags t-wall))) + (if (and (not (logtest? (-> self control status) (cshape-moving-flags t-wall))) (and (logtest? (-> self control old-status) (cshape-moving-flags t-wall)) (logtest? (-> self control unknown-surface00 flags) (surface-flag air)) (< 0.0 (-> gp-0 y)) @@ -1163,10 +1163,10 @@ ((logtest? (surface-flag turn-to-alt) (-> self control unknown-surface01 flags)) (-> self control unknown-vector03) ) - ((and (or (zero? (logand (logior (-> self control status) (-> self control old-status)) + ((and (or (not (logtest? (logior (-> self control status) (-> self control old-status)) (cshape-moving-flags on-surface t-surface) ) - ) + ) (< (- (-> self clock frame-counter) (-> self control unknown-time-frame07)) (seconds 0.5)) (not (and (-> self next-state) (let ((v1-15 (-> self next-state name))) (or (= v1-15 'target-walk) (= v1-15 'target-gun-walk)) @@ -1616,7 +1616,7 @@ (set! (-> self control unknown-time-frame06) (-> self clock frame-counter)) (set! (-> self control unknown-vector21 quad) (-> self control trans quad)) (if (and (>= (-> self control coverage) 1.0) - (zero? (logand (-> self control status) (cshape-moving-flags t-act on-water))) + (not (logtest? (-> self control status) (cshape-moving-flags t-act on-water))) (logtest? (-> self control status) (cshape-moving-flags on-ground)) ) (set! (-> self control unknown-vector23 quad) (-> self control trans quad)) @@ -1644,12 +1644,12 @@ ) (when (and (cpad-pressed? (-> self control unknown-cpad-info00 number) r3) (zero? (-> self control unknown-word07)) - (zero? (logand (-> *kernel-context* prevent-from-run) (process-mask movie))) + (not (logtest? (-> *kernel-context* prevent-from-run) (process-mask movie))) (not *pause-lock*) ) (if (and (= (-> self cam-user-mode) 'normal) (logtest? (-> self control unknown-surface00 flags) (surface-flag look-around)) - (zero? (logand (focus-status edge-grab pole flut tube board pilot dark) (-> self focus-status))) + (not (logtest? (focus-status edge-grab pole flut tube board pilot dark) (-> self focus-status))) (-> *setting-control* user-current allow-look-around) (>= (- (-> self clock frame-counter) (the-as int (-> self no-look-around-wait))) (seconds 0.05)) (not (and (= (-> self control ground-pat material) (pat-material ice)) @@ -1710,7 +1710,7 @@ (cpad-hold? (-> self control unknown-cpad-info00 number) r2) (cpad-hold? (-> self control unknown-cpad-info00 number) l2) (not *pause-lock*) - (zero? (logand (focus-status grabbed in-head pilot) (-> self focus-status))) + (not (logtest? (focus-status grabbed in-head pilot) (-> self focus-status))) (not (and (-> self next-state) (let ((v1-167 (-> self next-state name))) (or (= v1-167 'target-darkjak-get-on) (= v1-167 'target-float)) ) @@ -1794,8 +1794,8 @@ (and (or (not (and (= *cheat-mode* 'debug) (cpad-hold? (-> self control unknown-cpad-info00 number) r2))) *pause-lock* ) - (zero? (logand (focus-status flut pilot mech indax) (-> self focus-status))) - (zero? (logand (-> self state-flags) (state-flags sf7))) + (not (logtest? (focus-status flut pilot mech indax) (-> self focus-status))) + (not (logtest? (-> self state-flags) (state-flags sf7))) #t ) ) @@ -2161,8 +2161,9 @@ ) (else (vector-normalize! s4-1 1228.8) - (vector+! (new 'stack-no-clear 'vector) s4-1 (-> self control unknown-vector05)) - ((method-of-object (-> self control) collide-shape-method-28)) + (let ((a1-20 (vector+! (new 'stack-no-clear 'vector) s4-1 (-> self control unknown-vector05)))) + (move-by-vector! (-> self control) a1-20) + ) (vector-float*! (-> self control rider-last-move) s4-1 (-> self clock frames-per-second)) (set! (-> self control rider-time) (-> self clock frame-counter)) (if (and (>= (- (-> self clock frame-counter) (-> self control unknown-time-frame16)) (seconds 0.5)) @@ -2250,10 +2251,10 @@ ) (let ((a1-15 (vector-! (new-stack-vector0) (-> gp-0 center-hold) (-> gp-0 center-hold-old)))) (vector-float*! (-> self control rider-last-move) a1-15 (-> self clock frames-per-second)) + (set! (-> self control rider-time) (-> self clock frame-counter)) + (move-by-vector! (-> self control) a1-15) ) ) - (set! (-> self control rider-time) (-> self clock frame-counter)) - ((method-of-object (-> self control) collide-shape-method-28)) (set! (-> self control unknown-float33) 0.0) (joint-control-method-10 (-> self skel)) (draw-control-method-14 (-> self draw) (-> self node-list) (-> self skel)) @@ -2300,7 +2301,7 @@ (bucket-id debug-no-zbuf1) (-> (the-as swingpole s2-0) root trans) (-> (the-as swingpole s2-0) dir) - (meters 3.0) + (meters 3) (the-as rgba (-> (new 'static 'array uint64 1 #x80ff00ff) 0)) ) (add-debug-sphere @@ -2330,10 +2331,7 @@ (let ((a0-26 (vector-! (new-stack-vector0) s5-0 (-> self control unknown-vector30)))) (cond ((and (< 2457.6 (vector-length a0-26)) (not (-> self control unknown-symbol02))) - (let ((s4-2 (method-of-object (-> self control) collide-shape-method-28))) - (vector-normalize! a0-26 2457.6) - (s4-2) - ) + (move-by-vector! (-> self control) (vector-normalize! a0-26 2457.6)) ) (else (set! (-> self control unknown-symbol02) (the-as float #t)) @@ -2368,7 +2366,7 @@ ) (cond ((and (and (-> self next-state) (= (-> self next-state name) 'target-clone-anim)) - (and (zero? (logand (-> self draw status) (draw-control-status no-draw))) + (and (not (logtest? (-> self draw status) (draw-control-status no-draw))) (begin (vector<-cspace! s5-0 (-> self node-list data 3)) (set! (-> s5-0 y) (+ -5896.192 (-> s5-0 y))) @@ -3249,7 +3247,7 @@ (set! (-> s0-0 nav-radius) (* 0.75 (-> s0-0 root-prim local-sphere w))) (let ((v1-66 (-> s0-0 root-prim))) (set! (-> s0-0 backup-collide-as) (-> v1-66 prim-core collide-as)) - (set! (-> s0-0 backup-collde-with) (-> v1-66 prim-core collide-with)) + (set! (-> s0-0 backup-collide-with) (-> v1-66 prim-core collide-with)) ) (set! (-> s0-0 event-priority) (the-as uint 9)) (set! (-> obj control) s0-0) @@ -3350,7 +3348,7 @@ (target-collide-set! 'normal 0.0) (let ((v1-163 (-> obj control root-prim))) (set! (-> obj control backup-collide-as) (-> v1-163 prim-core collide-as)) - (set! (-> obj control backup-collde-with) (-> v1-163 prim-core collide-with)) + (set! (-> obj control backup-collide-with) (-> v1-163 prim-core collide-with)) ) (set! (-> obj sound) (new 'process 'ambient-sound "none" (-> obj control trans))) (set! (-> obj control unknown-sound-id04) (new-sound-id)) diff --git a/goal_src/jak2/engine/util/sync-info-h.gc b/goal_src/jak2/engine/util/sync-info-h.gc index 66ff356920..fd547c5184 100644 --- a/goal_src/jak2/engine/util/sync-info-h.gc +++ b/goal_src/jak2/engine/util/sync-info-h.gc @@ -12,6 +12,7 @@ ) ;; DECOMP BEGINS + (deftype sync-info-params (structure) ((sync-type basic :offset-assert 0) (sync-flags sync-flags :offset-assert 8) @@ -28,6 +29,7 @@ :flag-assert #x90000002c ) + (deftype sync-info (structure) ((sync-flags sync-flags :offset-assert 0) (offset float :offset-assert 8) @@ -47,6 +49,7 @@ ) ) + (deftype sync-linear (sync-info) () :method-count-assert 16 @@ -54,6 +57,7 @@ :flag-assert #x1000000010 ) + (deftype sync-eased (sync-info) ((tlo float :offset-assert 16) (thi float :offset-assert 20) @@ -63,11 +67,13 @@ (pause-in float :offset-assert 36) (pause-out float :offset-assert 40) ) + :pack-me :method-count-assert 16 :size-assert #x2c :flag-assert #x100000002c ) + (deftype sync-paused (sync-info) ((pause-in float :offset-assert 16) (pause-out float :offset-assert 20) @@ -77,6 +83,7 @@ :flag-assert #x1000000018 ) + (deftype delayed-rand-float (structure) ((min-time int32 :offset-assert 0) (max-time int32 :offset-assert 4) @@ -96,6 +103,7 @@ ) ) + (deftype oscillating-float (structure) ((value float :offset-assert 0) (target float :offset-assert 4) @@ -113,6 +121,7 @@ ) ) + (deftype bouncing-float (structure) ((osc oscillating-float :inline :offset-assert 0) (max-value float :offset-assert 24) @@ -131,6 +140,7 @@ ) ) + (deftype delayed-rand-vector (structure) ((min-time int32 :offset-assert 0) (max-time int32 :offset-assert 4) @@ -151,6 +161,7 @@ ) ) + (deftype oscillating-vector (structure) ((value vector :inline :offset-assert 0) (target vector :inline :offset-assert 16) diff --git a/goal_src/jak2/levels/common/airlock.gc b/goal_src/jak2/levels/common/airlock.gc index c430bfdd98..037e70d201 100644 --- a/goal_src/jak2/levels/common/airlock.gc +++ b/goal_src/jak2/levels/common/airlock.gc @@ -392,31 +392,31 @@ (defstate close (com-airlock) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'close) (set! (-> self latch-closed-time) (+ (-> self clock frame-counter) (if (>= arg1 1) - (the-as int (-> arg3 param 0)) + (the-as int (-> event param 0)) 3000 ) ) ) - (if (and (>= arg1 2) (and (= (-> arg3 param 1) #t) (not (want-cross-airlock? self)))) + (if (and (>= arg1 2) (and (= (-> event param 1) #t) (not (want-cross-airlock? self)))) (ja :group! (get-art-by-name (-> self draw art-group) "idle" art-joint-anim) :num! min) ) (and (-> self next-state) (= (-> self next-state name) 'open)) ) ((= v1-0 'open) (set! (-> self latch-open-time) (+ (-> self clock frame-counter) (if (>= arg1 1) - (the-as int (-> arg3 param 0)) + (the-as int (-> event param 0)) 3000 ) ) ) - (if (and (>= arg1 2) (and (= (-> arg3 param 1) #t) (want-cross-airlock? self) (destination-loaded? self #f))) + (if (and (>= arg1 2) (and (= (-> event param 1) #t) (want-cross-airlock? self) (destination-loaded? self #f))) (ja :group! (get-art-by-name (-> self draw art-group) "idle" art-joint-anim) :num! (identity (the float (+ (-> (get-art-by-name (-> self draw art-group) "idle" art-joint-anim) frames num-frames) -1)) @@ -441,7 +441,7 @@ ) ((= v1-0 'sound) (if (>= (check-crossing-distance self (target-pos 0) #f) 0.0) - (play-city-voice-sound self (the-as symbol (-> arg3 param 0))) + (play-city-voice-sound self (the-as symbol (-> event param 0))) ) ) ((= v1-0 'distance) @@ -880,7 +880,7 @@ (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) (let ((v1-13 (-> s5-0 root-prim))) (set! (-> s5-0 backup-collide-as) (-> v1-13 prim-core collide-as)) - (set! (-> s5-0 backup-collde-with) (-> v1-13 prim-core collide-with)) + (set! (-> s5-0 backup-collide-with) (-> v1-13 prim-core collide-with)) ) (set! (-> obj root-override) s5-0) ) @@ -944,7 +944,7 @@ (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) (let ((v1-13 (-> s5-0 root-prim))) (set! (-> s5-0 backup-collide-as) (-> v1-13 prim-core collide-as)) - (set! (-> s5-0 backup-collde-with) (-> v1-13 prim-core collide-with)) + (set! (-> s5-0 backup-collide-with) (-> v1-13 prim-core collide-with)) ) (set! (-> obj root-override) s5-0) ) @@ -1033,7 +1033,7 @@ (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) (let ((v1-13 (-> s5-0 root-prim))) (set! (-> s5-0 backup-collide-as) (-> v1-13 prim-core collide-as)) - (set! (-> s5-0 backup-collde-with) (-> v1-13 prim-core collide-with)) + (set! (-> s5-0 backup-collide-with) (-> v1-13 prim-core collide-with)) ) (set! (-> obj root-override) s5-0) ) @@ -1106,7 +1106,7 @@ (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) (let ((v1-13 (-> s5-0 root-prim))) (set! (-> s5-0 backup-collide-as) (-> v1-13 prim-core collide-as)) - (set! (-> s5-0 backup-collde-with) (-> v1-13 prim-core collide-with)) + (set! (-> s5-0 backup-collide-with) (-> v1-13 prim-core collide-with)) ) (set! (-> obj root-override) s5-0) ) @@ -1168,7 +1168,7 @@ (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) (let ((v1-5 (-> s5-0 root-prim))) (set! (-> s5-0 backup-collide-as) (-> v1-5 prim-core collide-as)) - (set! (-> s5-0 backup-collde-with) (-> v1-5 prim-core collide-with)) + (set! (-> s5-0 backup-collide-with) (-> v1-5 prim-core collide-with)) ) (set! (-> obj root-override) s5-0) ) @@ -1251,7 +1251,7 @@ (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) (let ((v1-13 (-> s5-0 root-prim))) (set! (-> s5-0 backup-collide-as) (-> v1-13 prim-core collide-as)) - (set! (-> s5-0 backup-collde-with) (-> v1-13 prim-core collide-with)) + (set! (-> s5-0 backup-collide-with) (-> v1-13 prim-core collide-with)) ) (set! (-> obj root-override) s5-0) ) @@ -1325,7 +1325,7 @@ (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) (let ((v1-13 (-> s5-0 root-prim))) (set! (-> s5-0 backup-collide-as) (-> v1-13 prim-core collide-as)) - (set! (-> s5-0 backup-collde-with) (-> v1-13 prim-core collide-with)) + (set! (-> s5-0 backup-collide-with) (-> v1-13 prim-core collide-with)) ) (set! (-> obj root-override) s5-0) ) @@ -1399,7 +1399,7 @@ (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) (let ((v1-13 (-> s5-0 root-prim))) (set! (-> s5-0 backup-collide-as) (-> v1-13 prim-core collide-as)) - (set! (-> s5-0 backup-collde-with) (-> v1-13 prim-core collide-with)) + (set! (-> s5-0 backup-collide-with) (-> v1-13 prim-core collide-with)) ) (set! (-> obj root-override) s5-0) ) @@ -1473,7 +1473,7 @@ (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) (let ((v1-13 (-> s5-0 root-prim))) (set! (-> s5-0 backup-collide-as) (-> v1-13 prim-core collide-as)) - (set! (-> s5-0 backup-collde-with) (-> v1-13 prim-core collide-with)) + (set! (-> s5-0 backup-collide-with) (-> v1-13 prim-core collide-with)) ) (set! (-> obj root-override) s5-0) ) diff --git a/goal_src/jak2/levels/common/elec-gate.gc b/goal_src/jak2/levels/common/elec-gate.gc index a9173ff16b..5c233dede1 100644 --- a/goal_src/jak2/levels/common/elec-gate.gc +++ b/goal_src/jak2/levels/common/elec-gate.gc @@ -7,3 +7,1037 @@ ;; DECOMP BEGINS +(deftype elec-gate-params (structure) + ((bolt-spec lightning-spec :offset-assert 0) + (ring-spec lightning-spec :offset-assert 4) + (ring-radius-min float :offset-assert 8) + (ring-radius-max float :offset-assert 12) + (speed-mult float :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x14 + :flag-assert #x900000014 + ) + + +(deftype elec-gate-bolt (structure) + ((ring lightning-control 2 :offset-assert 0) + (bolt lightning-control :offset-assert 8) + (ring-radius float :offset-assert 12) + (pos float :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x14 + :flag-assert #x900000014 + ) + + +(deftype elec-wall (structure) + ((pos vector :inline :offset-assert 0) + (dir vector :inline :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) + + +(deftype elec-gate (process-drawable) + ((params elec-gate-params :offset-assert 200) + (path-l path-control :offset 152) + (path-r path-control :offset-assert 204) + (l-bolt elec-gate-bolt 5 :inline :offset-assert 208) + (part-on sparticle-launch-control :offset 168) + (part-off sparticle-launch-control :offset-assert 368) + (part-spawner-left part-spawner :offset-assert 372) + (part-spawner-right part-spawner :offset-assert 376) + (on-start basic :offset-assert 380) + (on-stop basic :offset-assert 384) + (dividing-wall elec-wall :inline :offset-assert 400) + (plane elec-wall 2 :inline :offset-assert 432) + (wall-y float :offset-assert 496) + (wall-xz float :offset-assert 500) + (lightning-quality float :offset-assert 504) + (quality-enabled? symbol :offset-assert 508) + ) + :heap-base #x180 + :method-count-assert 30 + :size-assert #x200 + :flag-assert #x1e01800200 + (:methods + (idle () _type_ :state 20) + (active () _type_ :state 21) + (shutdown () _type_ :state 22) + (get-params (_type_) elec-gate-params 23) + (elec-gate-method-24 (_type_) none 24) + (set-palette! (_type_) none 25) + (set-state! (_type_) none 26) + (spawn-particles (_type_ sparticle-launch-control) none 27) + (set-elec-scale-if-close! (_type_ float) none 28) + (set-elec-scale! (_type_ float) none 29) + ) + ) + + +(define *default-elec-gate-params* (new 'static 'elec-gate-params + :bolt-spec (new 'static 'lightning-spec + :name #f + :flags (lightning-spec-flags lsf2) + :start-color #x80ffffff + :end-color #x80000000 + :fade-to-color #x58f00bf + :fade-start-factor 0.2 + :fade-time 120.0 + :texture #xc08300 + :reduction 0.42 + :num-points 16 + :box-size 8601.6 + :merge-factor 0.5 + :merge-count 2 + :radius 4096.0 + :duration -1.0 + :sound #f + ) + :ring-spec (new 'static 'lightning-spec + :name #f + :flags (lightning-spec-flags lsf2) + :rand-func #x3 + :start-color #x80ffffff + :end-color #x80ffffff + :fade-to-color #x58f00bf + :fade-start-factor 0.2 + :fade-time 120.0 + :texture #xc08300 + :reduction 0.42 + :num-points 12 + :box-size 3072.0 + :merge-factor 0.5 + :radius 2048.0 + :duration -1.0 + :sound #f + ) + :ring-radius-min 1638.4 + :ring-radius-max 2867.2 + :speed-mult 1.0 + ) + ) + +(defbehavior elec-gate-post elec-gate () + (local-vars (curr-bolt elec-gate-bolt) (curr-point int)) + (let ((num-points (-> self params ring-spec num-points))) + (dotimes (bolt-idx 5) + (set! curr-bolt (-> self l-bolt bolt-idx)) + (let ((s4-0 + (get-point-at-percent-along-path! (-> self path) (new 'stack-no-clear 'vector) (-> curr-bolt pos) 'interp) + ) + (s3-0 + (get-point-at-percent-along-path! (-> self path-r) (new 'stack-no-clear 'vector) (-> curr-bolt pos) 'interp) + ) + ) + (let ((a0-2 (-> curr-bolt bolt)) + (v1-10 s4-0) + ) + (set! (-> a0-2 state meet data 0 quad) (-> v1-10 quad)) + ) + (let ((a0-5 (-> curr-bolt bolt)) + (v1-13 s3-0) + ) + (set! (-> a0-5 state meet data (+ (-> a0-5 state points-to-draw) -1) quad) (-> v1-13 quad)) + ) + (let ((s2-0 (-> curr-bolt ring 0)) + (s1-0 (-> curr-bolt ring 1)) + (s0-0 (new 'stack-no-clear 'vector)) + ) + (set! (-> s0-0 x) 0.0) + (set! (-> s0-0 y) 0.0) + (set! (-> s0-0 z) (-> curr-bolt ring-radius)) + (set! (-> s0-0 w) 0.0) + (let ((f30-0 (* 65536.0 (/ 1.0 (the float (+ num-points -1)))))) + (set! curr-point 0) + (while (< curr-point num-points) + (set-point! s2-0 curr-point (vector+! (new 'stack-no-clear 'vector) s4-0 s0-0)) + (set-point! s1-0 curr-point (vector+! (new 'stack-no-clear 'vector) s3-0 s0-0)) + (vector-rotate-y! s0-0 s0-0 f30-0) + (set! curr-point (+ curr-point 1)) + ) + ) + ) + ) + ) + ) + (debug-draw (-> self path)) + (debug-draw (-> self path-r)) + (none) + ) + +(defstate idle (elec-gate) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type + (('trigger) + (go-virtual active) + ) + ) + ) + :enter (behavior () + (process-entity-status! self (entity-perm-status subtask-complete) #t) + (dotimes (bolt-idx 5) + (let* ((bolt (-> self l-bolt bolt-idx bolt)) + (mode (lightning-mode lm0)) + (mode-diff? (!= mode (-> bolt state mode))) + ) + (case mode + (((lightning-mode lm3)) + (if mode-diff? + (set! (-> bolt state counter) 0.0) + ) + ) + (((lightning-mode lm1)) + (set! (-> bolt state start-color) (-> bolt spec start-color)) + (set! (-> bolt state end-color) (-> bolt spec end-color)) + ) + ) + (set! (-> bolt state mode) mode) + (let ((first-ring (-> self l-bolt bolt-idx ring 0))) + (set! mode (lightning-mode lm0)) + (set! mode-diff? (!= mode (-> first-ring state mode))) + (case mode + (((lightning-mode lm3)) + (if mode-diff? + (set! (-> first-ring state counter) 0.0) + ) + ) + (((lightning-mode lm1)) + (set! (-> first-ring state start-color) (-> first-ring spec start-color)) + (set! (-> first-ring state end-color) (-> first-ring spec end-color)) + ) + ) + (set! (-> first-ring state mode) mode) + ) + (let ((second-ring (-> self l-bolt bolt-idx ring 1))) + (set! mode (lightning-mode lm0)) + (set! mode-diff? (!= mode (-> second-ring state mode))) + (case mode + (((lightning-mode lm3)) + (if mode-diff? + (set! (-> second-ring state counter) 0.0) + ) + ) + (((lightning-mode lm1)) + (set! (-> second-ring state start-color) (-> second-ring spec start-color)) + (set! (-> second-ring state end-color) (-> second-ring spec end-color)) + ) + ) + (set! (-> second-ring state mode) mode) + ) + ) + ) + (none) + ) + :code (the-as (function none :behavior elec-gate) sleep-code) + :post (behavior () + (set-elec-scale-if-close! self 0.0) + (if (nonzero? (-> self part-off)) + (spawn-particles self (-> self part-off)) + ) + (none) + ) + ) + +(defstate active (elec-gate) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type + (('shutdown) + (go-virtual shutdown) + ) + ) + ) + :enter (behavior () + (process-entity-status! self (entity-perm-status subtask-complete) #f) + (if (-> self on-start) + (eval! + (new 'stack 'script-context (the-as basic (process->ppointer self)) self (-> self root trans)) + (the-as pair (-> self on-start)) + ) + ) + (dotimes (bolt-idx 5) + (let* ((curr-bolt (-> self l-bolt bolt-idx bolt)) + (mode (lightning-mode lm1)) + (mode-diff? (!= mode (-> curr-bolt state mode))) + ) + (case mode + (((lightning-mode lm3)) + (if mode-diff? + (set! (-> curr-bolt state counter) 0.0) + ) + ) + (((lightning-mode lm1)) + (set! (-> curr-bolt state start-color) (-> curr-bolt spec start-color)) + (set! (-> curr-bolt state end-color) (-> curr-bolt spec end-color)) + ) + ) + (set! (-> curr-bolt state mode) mode) + (let ((first-ring (-> self l-bolt bolt-idx ring 0))) + (set! mode (lightning-mode lm1)) + (set! mode-diff? (!= mode (-> first-ring state mode))) + (case mode + (((lightning-mode lm3)) + (if mode-diff? + (set! (-> first-ring state counter) 0.0) + ) + ) + (((lightning-mode lm1)) + (set! (-> first-ring state start-color) (-> first-ring spec start-color)) + (set! (-> first-ring state end-color) (-> first-ring spec end-color)) + ) + ) + (set! (-> first-ring state mode) mode) + ) + (let ((second-ring (-> self l-bolt bolt-idx ring 1))) + (set! mode (lightning-mode lm1)) + (set! mode-diff? (!= mode (-> second-ring state mode))) + (case mode + (((lightning-mode lm3)) + (if mode-diff? + (set! (-> second-ring state counter) 0.0) + ) + ) + (((lightning-mode lm1)) + (set! (-> second-ring state start-color) (-> second-ring spec start-color)) + (set! (-> second-ring state end-color) (-> second-ring spec end-color)) + ) + ) + (set! (-> second-ring state mode) mode) + ) + ) + ) + (let ((vec-pair (new 'stack-no-clear 'inline-array 'vector 2))) + (dotimes (vec-idx 2) + (set! (-> vec-pair vec-idx quad) (the-as uint128 0)) + ) + (let ((s5-0 (new 'stack-no-clear 'vector))) + 0.0 + (get-point-in-path! (-> self path) (-> vec-pair 0) 0.0 'interp) + (get-point-in-path! (-> self path-r) (-> vec-pair 1) 0.0 'interp) + (vector-! s5-0 (-> vec-pair 1) (-> vec-pair 0)) + (vector-normalize! s5-0 8192.0) + (vector+! (-> vec-pair 1) (-> vec-pair 1) s5-0) + (vector-negate! s5-0 s5-0) + (vector+! (-> vec-pair 0) (-> vec-pair 0) s5-0) + (vector-normalize-copy! s5-0 *up-vector* -8192.0) + (vector+! (-> vec-pair 0) (-> vec-pair 0) s5-0) + (vector+! (-> vec-pair 1) (-> vec-pair 1) s5-0) + ) + (let ((f0-6 + (+ (- 81920.0 (-> (get-point-in-path! (-> self path) (new 'stack-no-clear 'vector) 0.0 'interp) y)) + (-> (get-point-in-path! (-> self path) (new 'stack-no-clear 'vector) (get-num-segments (-> self path)) 'interp) + y + ) + ) + ) + ) + (blocking-plane-spawn (the-as curve-control #f) vec-pair f0-6) + ) + ) + (none) + ) + :trans (behavior () + (local-vars + (sv-176 (function lightning-spec time-frame symbol process-drawable vector vector none)) + (sv-192 lightning-spec) + (sv-208 int) + (sv-224 symbol) + (sv-240 symbol) + (sv-256 lightning-spec) + (sv-272 int) + (sv-288 symbol) + (sv-304 symbol) + ) + (let* ((target *target*) + (proc-focus (if (type? target process-focusable) + target + ) + ) + ) + (when proc-focus + (let ((focus-trans (get-trans proc-focus 0))) + (let* ((a0-3 (vector-! (new 'stack-no-clear 'vector) focus-trans (the-as vector (-> self dividing-wall)))) + (s4-0 (-> self plane (if (< 0.0 (vector-dot a0-3 (-> self dividing-wall dir))) + 0 + 1 + ) + ) + ) + (s3-1 (vector-! (new 'stack-no-clear 'vector) focus-trans (-> s4-0 pos))) + ) + (when (and (< (vector-dot (vector-normalize-copy! (new 'stack-no-clear 'vector) s3-1 1.0) (-> s4-0 dir)) 0.0) + (let ((v1-13 s3-1)) + (< (sqrtf (+ (* (-> v1-13 x) (-> v1-13 x)) (* (-> v1-13 z) (-> v1-13 z)))) (-> self wall-xz)) + ) + (< (fabs (-> s3-1 y)) (-> self wall-y)) + ) + (let ((evt (new 'stack-no-clear 'event-message-block))) + (set! (-> evt from) (process->ppointer self)) + (set! (-> evt num-params) 2) + (set! (-> evt message) 'attack) + (set! (-> evt param 0) (the-as uint #f)) + (let ((attack (new 'static 'attack-info :mask (attack-info-mask vector shove-back shove-up control id)))) + (let* ((game-info *game-info*) + (attack-id (+ (-> game-info attack-id) 1)) + ) + (set! (-> game-info attack-id) attack-id) + (set! (-> attack id) attack-id) + ) + (set! (-> attack vector quad) (-> s4-0 dir quad)) + (set! (-> attack shove-back) 24576.0) + (set! (-> attack shove-up) 12288.0) + (set! (-> attack control) (if (logtest? (focus-status board) (-> proc-focus focus-status)) + 1.0 + 0.0 + ) + ) + (set! (-> evt param 1) (the-as uint attack)) + ) + (send-event-function proc-focus evt) + ) + (let* ((s4-1 (-> self l-bolt)) + (s3-2 (get-point-at-percent-along-path! (-> self path) (new 'stack-no-clear 'vector) (-> s4-1 0 pos) 'interp)) + (s4-2 + (get-point-at-percent-along-path! (-> self path-r) (new 'stack-no-clear 'vector) (-> s4-1 0 pos) 'interp) + ) + ) + (let ((s2-0 (get-process *default-dead-pool* lightning-tracker #x4000))) + (when s2-0 + (let ((t9-7 (method-of-type lightning-tracker activate))) + (t9-7 + (the-as lightning-tracker s2-0) + *entity-pool* + (symbol->string (-> lightning-tracker symbol)) + (the-as pointer #x70004000) + ) + ) + (let ((s1-0 run-function-in-process) + (s0-0 s2-0) + ) + (set! sv-176 lightning-tracker-init) + (set! sv-192 (-> self params bolt-spec)) + (set! sv-208 15) + (set! sv-224 (the-as symbol #f)) + (set! sv-240 (the-as symbol #f)) + (let ((t3-0 (get-trans proc-focus 3))) + ((the-as (function object object object object object object object object none) s1-0) + s0-0 + sv-176 + sv-192 + sv-208 + sv-224 + sv-240 + s3-2 + t3-0 + ) + ) + ) + (-> s2-0 ppointer) + ) + ) + (let ((s3-3 (get-process *default-dead-pool* lightning-tracker #x4000))) + (when s3-3 + (let ((t9-11 (method-of-type lightning-tracker activate))) + (t9-11 + (the-as lightning-tracker s3-3) + *entity-pool* + (symbol->string (-> lightning-tracker symbol)) + (the-as pointer #x70004000) + ) + ) + (let ((s2-1 run-function-in-process) + (s1-1 s3-3) + (s0-1 lightning-tracker-init) + ) + (set! sv-256 (-> self params bolt-spec)) + (set! sv-272 15) + (set! sv-288 (the-as symbol #f)) + (set! sv-304 (the-as symbol #f)) + (let ((t3-1 (get-trans proc-focus 3))) + ((the-as (function object object object object object object object object none) s2-1) + s1-1 + s0-1 + sv-256 + sv-272 + sv-288 + sv-304 + s4-2 + t3-1 + ) + ) + ) + (-> s3-3 ppointer) + ) + ) + ) + ) + ) + (set! (-> self lightning-quality) + (lerp-scale 0.0 1.0 (vector-vector-distance focus-trans (-> self root trans)) 491520.0 163840.0) + ) + ) + ) + ) + (let ((gp-2 (+ (the int (* 5.0 (-> self lightning-quality))) 1))) + (dotimes (bolt-idx 5) + (let ((s3-5 (-> self l-bolt bolt-idx)) + (s2-2 (-> self params)) + (s4-4 (if (and (-> self quality-enabled?) (zero? (mod bolt-idx gp-2))) + (lightning-mode lm0) + (lightning-mode lm-1) + ) + ) + ) + (seek! (-> s3-5 pos) 1.5 (* (-> s2-2 speed-mult) (+ 0.2 (-> s3-5 pos)) (-> self clock seconds-per-frame))) + (cond + ((>= (-> s3-5 pos) 1.5) + (let ((v1-59 (-> self l-bolt bolt-idx bolt)) + (a0-31 (logand s4-4 (lightning-mode lm1))) + ) + (let ((a1-19 (!= a0-31 (-> v1-59 state mode)))) + (case a0-31 + (((lightning-mode lm3)) + (if a1-19 + (set! (-> v1-59 state counter) 0.0) + ) + ) + (((lightning-mode lm1)) + (set! (-> v1-59 state start-color) (-> v1-59 spec start-color)) + (set! (-> v1-59 state end-color) (-> v1-59 spec end-color)) + ) + ) + ) + (set! (-> v1-59 state mode) a0-31) + ) + (let ((v1-62 (-> self l-bolt bolt-idx ring 0)) + (a0-32 (logand s4-4 (lightning-mode lm1))) + ) + (let ((a1-29 (!= a0-32 (-> v1-62 state mode)))) + (case a0-32 + (((lightning-mode lm3)) + (if a1-29 + (set! (-> v1-62 state counter) 0.0) + ) + ) + (((lightning-mode lm1)) + (set! (-> v1-62 state start-color) (-> v1-62 spec start-color)) + (set! (-> v1-62 state end-color) (-> v1-62 spec end-color)) + ) + ) + ) + (set! (-> v1-62 state mode) a0-32) + ) + (let ((v1-65 (-> self l-bolt bolt-idx ring 1)) + (a0-33 (logand s4-4 (lightning-mode lm1))) + ) + (let ((a1-39 (!= a0-33 (-> v1-65 state mode)))) + (case a0-33 + (((lightning-mode lm3)) + (if a1-39 + (set! (-> v1-65 state counter) 0.0) + ) + ) + (((lightning-mode lm1)) + (set! (-> v1-65 state start-color) (-> v1-65 spec start-color)) + (set! (-> v1-65 state end-color) (-> v1-65 spec end-color)) + ) + ) + ) + (set! (-> v1-65 state mode) a0-33) + ) + (set! (-> s3-5 ring-radius) (rand-vu-float-range (-> s2-2 ring-radius-min) (-> s2-2 ring-radius-max))) + (set! (-> s3-5 pos) 0.0) + ) + ((>= (-> s3-5 pos) 1.0) + (let ((v1-69 (-> self l-bolt bolt-idx bolt)) + (a0-37 (logand (lightning-mode lm0) s4-4)) + ) + (let ((a1-50 (!= a0-37 (-> v1-69 state mode)))) + (case a0-37 + (((lightning-mode lm3)) + (if a1-50 + (set! (-> v1-69 state counter) 0.0) + ) + ) + (((lightning-mode lm1)) + (set! (-> v1-69 state start-color) (-> v1-69 spec start-color)) + (set! (-> v1-69 state end-color) (-> v1-69 spec end-color)) + ) + ) + ) + (set! (-> v1-69 state mode) a0-37) + ) + (let ((v1-72 (-> self l-bolt bolt-idx ring 0)) + (a0-38 (logand (lightning-mode lm0) s4-4)) + ) + (let ((a1-60 (!= a0-38 (-> v1-72 state mode)))) + (case a0-38 + (((lightning-mode lm3)) + (if a1-60 + (set! (-> v1-72 state counter) 0.0) + ) + ) + (((lightning-mode lm1)) + (set! (-> v1-72 state start-color) (-> v1-72 spec start-color)) + (set! (-> v1-72 state end-color) (-> v1-72 spec end-color)) + ) + ) + ) + (set! (-> v1-72 state mode) a0-38) + ) + (let ((v1-75 (-> self l-bolt bolt-idx ring 1)) + (a0-39 (logand (lightning-mode lm0) s4-4)) + ) + (let ((a1-70 (!= a0-39 (-> v1-75 state mode)))) + (case a0-39 + (((lightning-mode lm3)) + (if a1-70 + (set! (-> v1-75 state counter) 0.0) + ) + ) + (((lightning-mode lm1)) + (set! (-> v1-75 state start-color) (-> v1-75 spec start-color)) + (set! (-> v1-75 state end-color) (-> v1-75 spec end-color)) + ) + ) + ) + (set! (-> v1-75 state mode) a0-39) + ) + ) + ) + ) + ) + ) + (none) + ) + :code (the-as (function none :behavior elec-gate) sleep-code) + :post (behavior () + (set-elec-scale-if-close! self 1.0) + (if (nonzero? (-> self part)) + (spawn-particles self (-> self part)) + ) + (update! (-> self sound)) + (elec-gate-post) + (none) + ) + ) + +(defstate shutdown (elec-gate) + :virtual #t + :enter (behavior () + (process-entity-status! self (entity-perm-status subtask-complete) #t) + (stop! (-> self sound)) + (sound-play "elec-gate-off") + (blocking-plane-destroy) + (if (-> self on-stop) + (eval! + (new 'stack 'script-context (the-as basic (process->ppointer self)) self (-> self root trans)) + (the-as pair (-> self on-stop)) + ) + ) + (none) + ) + :trans (behavior () + (let ((go-idle? #t)) + (dotimes (bolt-idx 5) + (let ((left-bolt-0 (-> self l-bolt bolt-idx))) + (seek! (-> left-bolt-0 pos) 0.0 (* (- 1.14 (-> left-bolt-0 pos)) (-> self clock seconds-per-frame))) + (set! go-idle? + (cond + ((or (< 1.0 (-> left-bolt-0 pos)) (>= 0.0 (-> left-bolt-0 pos))) + (let* ((left-bolt-1 (-> self l-bolt bolt-idx bolt)) + (mode (lightning-mode lm3)) + (mode-diff? (!= mode (-> left-bolt-1 state mode))) + ) + (case mode + (((lightning-mode lm3)) + (if mode-diff? + (set! (-> left-bolt-1 state counter) 0.0) + ) + ) + (((lightning-mode lm1)) + (set! (-> left-bolt-1 state start-color) (-> left-bolt-1 spec start-color)) + (set! (-> left-bolt-1 state end-color) (-> left-bolt-1 spec end-color)) + ) + ) + (set! (-> left-bolt-1 state mode) mode) + (let ((left-bolt-first-ring (-> self l-bolt bolt-idx ring 0))) + (set! mode (lightning-mode lm3)) + (set! mode-diff? (!= mode (-> left-bolt-first-ring state mode))) + (case mode + (((lightning-mode lm3)) + (if mode-diff? + (set! (-> left-bolt-first-ring state counter) 0.0) + ) + ) + (((lightning-mode lm1)) + (set! (-> left-bolt-first-ring state start-color) (-> left-bolt-first-ring spec start-color)) + (set! (-> left-bolt-first-ring state end-color) (-> left-bolt-first-ring spec end-color)) + ) + ) + (set! (-> left-bolt-first-ring state mode) mode) + ) + (let ((left-bolt-second-ring (-> self l-bolt bolt-idx ring 1))) + (set! mode (lightning-mode lm3)) + (set! mode-diff? (!= mode (-> left-bolt-second-ring state mode))) + (case mode + (((lightning-mode lm3)) + (if mode-diff? + (set! (-> left-bolt-second-ring state counter) 0.0) + ) + ) + (((lightning-mode lm1)) + (set! (-> left-bolt-second-ring state start-color) (-> left-bolt-second-ring spec start-color)) + (set! (-> left-bolt-second-ring state end-color) (-> left-bolt-second-ring spec end-color)) + ) + ) + (set! (-> left-bolt-second-ring state mode) mode) + ) + ) + go-idle? + ) + (else + #f + ) + ) + ) + ) + ) + (if go-idle? + (go-virtual idle) + ) + ) + (none) + ) + :code (the-as (function none :behavior elec-gate) sleep-code) + :post (behavior () + (set-elec-scale-if-close! self 0.0) + (if (nonzero? (-> self part-off)) + (spawn-particles self (-> self part-off)) + ) + (elec-gate-post) + (none) + ) + ) + +(defmethod set-elec-scale-if-close! elec-gate ((obj elec-gate) (arg0 float)) + "If [[target]]'s position is within `80` [[meters]], set the scale to the value provided + @see [[elec-gate::29]]" + (if (< (vector-vector-distance (-> obj root trans) (target-pos 0)) 327680.0) + (set-elec-scale! obj arg0) + ) + 0 + (none) + ) + +(defmethod spawn-particles elec-gate ((obj elec-gate) (sparticle-lc sparticle-launch-control)) + "TODO - Calls [[sparticle-launch-control::11]] on `part-spawner-left` and `part-spawner-right` if they are defined" + (if (-> obj part-spawner-left) + (sparticle-launch-control-method-11 sparticle-lc (the-as vector (&-> (-> obj part-spawner-left child) 8))) + ) + (if (-> obj part-spawner-right) + (sparticle-launch-control-method-11 sparticle-lc (the-as vector (&-> (-> obj part-spawner-right child) 8))) + ) + 0 + (none) + ) + +;; WARN: Return type mismatch process-drawable vs elec-gate. +(defmethod relocate elec-gate ((obj elec-gate) (new-addr int)) + (dotimes (bolt-idx 5) + (let ((left-bolt (-> obj l-bolt bolt-idx))) + (if (nonzero? (-> left-bolt bolt)) + (&+! (-> left-bolt bolt) new-addr) + ) + (if (nonzero? (-> left-bolt ring 0)) + (&+! (-> left-bolt ring 0) new-addr) + ) + (if (nonzero? (-> left-bolt ring 1)) + (&+! (-> left-bolt ring 1) new-addr) + ) + ) + ) + (if (nonzero? (-> obj path-r)) + (&+! (-> obj path-r) new-addr) + ) + (when (nonzero? (-> obj part-off)) + (if (nonzero? (-> obj part-off)) + (&+! (-> obj part-off) new-addr) + ) + ) + (the-as elec-gate ((method-of-type process-drawable relocate) obj new-addr)) + ) + +(defmethod deactivate elec-gate ((obj elec-gate)) + (set-elec-scale-if-close! obj 0.0) + ((the-as (function process-drawable none) (find-parent-method elec-gate 10)) obj) + (none) + ) + +(defmethod get-params elec-gate ((obj elec-gate)) + "@returns [[*default-elec-gate-params*]] by default" + *default-elec-gate-params* + ) + +(defmethod elec-gate-method-24 elec-gate ((obj elec-gate)) + "virtual" + 0 + (none) + ) + +(defmethod set-palette! elec-gate ((obj elec-gate)) + "Sets the [[elec-gate]]'s `palette-id` appropriately" + 0 + (none) + ) + +(defmethod set-state! elec-gate ((obj elec-gate)) + "If either [[actor-option::17]] is set on the [[elec-gate]] or the related subtask is completed + make the gate `idle`. + + Otherwise, the gate will be `active`." + (if (or (logtest? (actor-option user17) (-> obj fact options)) + (and (-> obj entity) (logtest? (-> obj entity extra perm status) (entity-perm-status subtask-complete))) + ) + (go (method-of-object obj idle)) + (go (method-of-object obj active)) + ) + 0 + (none) + ) + +(defmethod init-from-entity! elec-gate ((obj elec-gate) (arg0 entity-actor)) + (set! (-> obj root) (new 'process 'trsqv)) + (process-drawable-from-entity! obj arg0) + (set! (-> obj entity) arg0) + (set! (-> obj fact) + (new 'process 'fact-info obj (pickup-type eco-pill-random) (-> *FACT-bank* default-eco-pill-green-inc)) + ) + (set! (-> obj params) (get-params obj)) + (logclear! (-> obj mask) (process-mask actor-pause)) + (set! (-> obj path) (new 'process 'path-control obj 'pathl 0.0 (the-as entity #f) #f)) + (logior! (-> obj path flags) (path-control-flag display draw-line draw-point draw-text)) + (set! (-> obj path-r) (new 'process 'path-control obj 'pathr 0.0 (the-as entity #f) #f)) + (logior! (-> obj path-r flags) (path-control-flag display draw-line draw-point draw-text)) + (set! (-> obj part-spawner-left) (the-as part-spawner (entity-actor-lookup arg0 'alt-actor 0))) + (set! (-> obj part-spawner-right) (the-as part-spawner (entity-actor-lookup arg0 'alt-actor 1))) + (let ((params (-> obj params))) + (dotimes (bolt-idx 5) + (let ((left-bolt (-> obj l-bolt bolt-idx))) + (set! (-> left-bolt bolt) (new 'process 'lightning-control (-> params bolt-spec) obj 0.0)) + (set! (-> left-bolt ring 0) (new 'process 'lightning-control (-> params ring-spec) obj 0.0)) + (set! (-> left-bolt ring 1) (new 'process 'lightning-control (-> params ring-spec) obj 0.0)) + (set! (-> left-bolt ring-radius) + (rand-vu-float-range (-> params ring-radius-min) (-> params ring-radius-max)) + ) + (set! (-> left-bolt pos) (* 0.2 (the float bolt-idx))) + ) + ) + ) + (let* ((s4-1 (get-point-in-path! (-> obj path) (new 'stack-no-clear 'vector) 0.0 'interp)) + (v1-26 (get-point-in-path! (-> obj path-r) (new 'stack-no-clear 'vector) 0.0 'interp)) + (a1-15 (vector-! (new 'stack-no-clear 'vector) v1-26 s4-1)) + (s5-3 (vector+float*! (new 'stack-no-clear 'vector) s4-1 a1-15 0.5)) + (v1-28 (vector-normalize-copy! (new 'stack-no-clear 'vector) a1-15 1.0)) + ) + (vector-cross! v1-28 v1-28 *up-vector*) + (set! (-> obj dividing-wall pos quad) (-> s5-3 quad)) + (set! (-> obj dividing-wall dir quad) (-> v1-28 quad)) + (vector+float*! (the-as vector (-> obj plane)) s5-3 v1-28 12288.0) + (set! (-> (the-as vector (&-> obj stack 320)) quad) (-> v1-28 quad)) + (vector-float*! v1-28 v1-28 -1.0) + (vector+float*! (the-as vector (&-> obj stack 336)) s5-3 v1-28 12288.0) + (set! (-> (the-as vector (&-> obj stack 352)) quad) (-> v1-28 quad)) + ) + (set! (-> obj wall-xz) + (vector-vector-distance + (get-point-in-path! (-> obj path) (new 'stack-no-clear 'vector) 0.0 'interp) + (get-point-in-path! (-> obj path-r) (new 'stack-no-clear 'vector) 0.0 'interp) + ) + ) + (set! (-> obj wall-xz) (* 0.5 (-> obj wall-xz))) + (set! (-> obj wall-xz) (+ 4096.0 (-> obj wall-xz))) + (set! (-> obj wall-y) + (fabs + (- (-> (get-point-in-path! (-> obj path) (new 'stack-no-clear 'vector) (get-num-segments (-> obj path)) 'interp) + y + ) + (-> (get-point-in-path! (-> obj path) (new 'stack-no-clear 'vector) 0.0 'interp) y) + ) + ) + ) + (set! (-> obj wall-y) (+ 4096.0 (-> obj wall-y))) + (set! (-> obj quality-enabled?) #t) + (set! (-> obj lightning-quality) 1.0) + (set! (-> obj sound) + (new 'process 'ambient-sound (static-sound-spec "electric-gate" :fo-max 70) (-> obj root trans)) + ) + (set! (-> obj on-start) (res-lump-struct (-> obj entity) 'on-start basic)) + (set! (-> obj on-stop) (res-lump-struct (-> obj entity) 'on-stop basic)) + (elec-gate-method-24 obj) + (set-palette! obj) + (set-state! obj) + (none) + ) + +(deftype fort-elec-gate (elec-gate) + ((palette-id int32 :offset-assert 512) + ) + :heap-base #x190 + :method-count-assert 30 + :size-assert #x204 + :flag-assert #x1e01900204 + ) + + +(defmethod set-elec-scale! fort-elec-gate ((obj fort-elec-gate) (scale float)) + "Calls associated mood functions to set the scale with the value provided + @see mood-funcs + @see mood-funcs2" + (set-fordumpa-electricity-scale! scale) + (set-forresca-electricity-scale! scale (-> obj palette-id)) + (set-forrescb-electricity-scale! scale (-> obj palette-id)) + 0 + (none) + ) + +(defmethod set-palette! fort-elec-gate ((obj fort-elec-gate)) + "Sets the [[elec-gate]]'s `palette-id` appropriately" + (set! (-> obj palette-id) (res-lump-value (-> obj entity) 'extra-id int :time -1000000000.0)) + 0 + (none) + ) + +(deftype drill-elec-gate (elec-gate) + ((palette-id int32 :offset-assert 512) + ) + :heap-base #x190 + :method-count-assert 30 + :size-assert #x204 + :flag-assert #x1e01900204 + ) + + +(defmethod set-elec-scale! drill-elec-gate ((obj drill-elec-gate) (arg0 float)) + "Calls associated mood functions to set the scale with the value provided + @see mood-funcs + @see mood-funcs2" + (set-drill-electricity-scale! arg0 (-> obj palette-id)) + 0 + (none) + ) + +(defmethod set-palette! drill-elec-gate ((obj drill-elec-gate)) + "Sets the [[elec-gate]]'s `palette-id` appropriately" + (set! (-> obj palette-id) (res-lump-value (-> obj entity) 'extra-id int :time -1000000000.0)) + 0 + (none) + ) + +(deftype caspad-elec-gate (elec-gate) + () + :heap-base #x180 + :method-count-assert 30 + :size-assert #x200 + :flag-assert #x1e01800200 + ) + + +(deftype castle-elec-gate (elec-gate) + () + :heap-base #x180 + :method-count-assert 30 + :size-assert #x200 + :flag-assert #x1e01800200 + ) + + +(defmethod set-elec-scale! castle-elec-gate ((obj castle-elec-gate) (arg0 float)) + "Calls associated mood functions to set the scale with the value provided + @see mood-funcs + @see mood-funcs2" + (set-castle-electricity-scale! arg0) + 0 + (none) + ) + +(define *caspad-elec-gate-params* (new 'static 'elec-gate-params + :bolt-spec (new 'static 'lightning-spec + :name #f + :flags (lightning-spec-flags lsf2) + :start-color #x80ffffff + :end-color #x80000000 + :fade-to-color #x58f00bf + :fade-start-factor 0.2 + :fade-time 120.0 + :texture #xc08300 + :reduction 0.42 + :num-points 16 + :box-size 16793.6 + :merge-factor 0.5 + :merge-count 2 + :radius 18841.6 + :duration -1.0 + :sound #f + ) + :ring-spec (new 'static 'lightning-spec + :name #f + :flags (lightning-spec-flags lsf2) + :rand-func #x3 + :start-color #x80ffffff + :end-color #x80ffffff + :fade-to-color #x58f00bf + :fade-start-factor 0.2 + :fade-time 120.0 + :texture #xc08300 + :reduction 0.42 + :num-points 12 + :box-size 17408.0 + :merge-factor 0.5 + :merge-count 2 + :radius 17612.8 + :duration -1.0 + :sound #f + ) + :ring-radius-min 40960.0 + :ring-radius-max 53248.0 + :speed-mult 0.3 + ) + ) + +(defmethod get-params caspad-elec-gate ((obj caspad-elec-gate)) + "@returns [[*default-elec-gate-params*]] by default" + *caspad-elec-gate-params* + ) + +(deftype palroof-elec-gate (elec-gate) + ((palette-id int32 :offset-assert 512) + ) + :heap-base #x190 + :method-count-assert 30 + :size-assert #x204 + :flag-assert #x1e01900204 + ) + + +(defmethod set-elec-scale! palroof-elec-gate ((obj palroof-elec-gate) (arg0 float)) + "Calls associated mood functions to set the scale with the value provided + @see mood-funcs + @see mood-funcs2" + (set-palroof-electricity-scale! arg0 (-> obj palette-id)) + 0 + (none) + ) + +(defmethod set-palette! palroof-elec-gate ((obj palroof-elec-gate)) + "Sets the [[elec-gate]]'s `palette-id` appropriately" + (set! (-> obj palette-id) (res-lump-value (-> obj entity) 'extra-id int :time -1000000000.0)) + 0 + (none) + ) diff --git a/goal_src/jak2/levels/common/enemy/bouncer.gc b/goal_src/jak2/levels/common/enemy/bouncer.gc index a16fa61c52..4468d7ee4d 100644 --- a/goal_src/jak2/levels/common/enemy/bouncer.gc +++ b/goal_src/jak2/levels/common/enemy/bouncer.gc @@ -7,3 +7,251 @@ ;; DECOMP BEGINS +(deftype bouncer (process-drawable) + ((spring-height meters :offset-assert 200) + (smush float :offset-assert 204) + (mods basic :offset-assert 208) + ) + :heap-base #x60 + :method-count-assert 25 + :size-assert #xd4 + :flag-assert #x19006000d4 + (:methods + (idle () _type_ :state 20) + (fire () _type_ :state 21) + (smush () _type_ :state 22) + (init-skeleton! (_type_) none 23) + (bouncer-method-24 (_type_) none 24) + ) + ) + + +(method-set! bouncer 12 (method-of-type process run-logic?)) + +(let ((a0-3 (new 'static 'skeleton-group + :name "skel-bouncer" + :extra #f + :info #f + :art-group-name "bounceytarp" + :bounds (new 'static 'vector :w 16384.0) + :version #x7 + ) + ) + ) + (set! (-> a0-3 jgeo) 0) + (set! (-> a0-3 janim) 2) + (set! (-> a0-3 mgeo 0) 1) + (set! (-> a0-3 lod-dist 0) 4095996000.0) + (add-to-loading-level a0-3) + ) + +(defstate idle (bouncer) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((evt-type event-type)) + (the-as + object + (cond + ((= evt-type 'bonk) + (when ((method-of-type touching-shapes-entry touching-shapes-entry-method-12) + (the-as touching-shapes-entry (-> event param 0)) + (the-as collide-shape (-> self root)) + (the-as uint 1) + ) + (when (send-event proc 'jump (-> self spring-height) (-> self spring-height) (-> self mods)) + (sound-play "trampoline") + (go-virtual fire) + ) + ) + ) + ((= evt-type 'touch) + (let ((gp-2 (-> event param 0))) + (cond + (((method-of-type touching-shapes-entry touching-shapes-entry-method-13) + (the-as touching-shapes-entry gp-2) + (the-as collide-shape (-> self root)) + (the-as uint 1) + (the-as uint 0) + ) + (when ((method-of-type touching-shapes-entry touching-shapes-entry-method-12) + (the-as touching-shapes-entry gp-2) + (the-as collide-shape (-> self root)) + (the-as uint 1) + ) + (if (not (and (-> self next-state) (let ((v1-21 (-> self next-state name))) + (or (= v1-21 'smush) (= v1-21 'fire)) + ) + ) + ) + (go-virtual smush) + ) + ) + ) + (((method-of-type touching-shapes-entry touching-shapes-entry-method-12) + (the-as touching-shapes-entry gp-2) + (the-as collide-shape (-> self root)) + (the-as uint 4) + ) + (persist-with-delay + *setting-control* + (the-as symbol (process->ppointer self)) + (seconds 0.05) + 'double-jump + #f + 0.0 + 0 + ) + ) + ) + ) + ) + ((= evt-type 'attack) + (let ((v1-28 (the-as object (-> event param 1))) + (a0-17 (-> event param 0)) + (a2-7 0) + ) + (cond + ((= (-> (the-as attack-info v1-28) mode) 'flop) + (set! a2-7 1) + ) + ((= (-> (the-as attack-info v1-28) mode) 'board) + (set! a2-7 9) + ) + ) + (when (and (nonzero? a2-7) + (and ((method-of-type touching-shapes-entry touching-shapes-entry-method-12) + (the-as touching-shapes-entry a0-17) + (the-as collide-shape (-> self root)) + (the-as uint a2-7) + ) + (send-event proc 'jump (-> self spring-height) (-> self spring-height) (-> self mods)) + ) + ) + (sound-play "trampoline") + (go-virtual fire) + #f + ) + ) + ) + ) + ) + ) + ) + :code (behavior () + (ja :group! (get-art-by-name (-> self draw art-group) "idle" art-joint-anim) :num! min) + (transform-post) + (until #f + (logior! (-> self mask) (process-mask sleep)) + (suspend) + ) + #f + (none) + ) + ) + +(defstate smush (bouncer) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type + (('touch) + (set! (-> self state-time) (-> self clock frame-counter)) + #f + ) + (else + ((-> (method-of-object self idle) event) proc arg1 event-type event) + ) + ) + ) + :code (behavior () + (set! (-> self state-time) (-> self clock frame-counter)) + (set! (-> self smush) 0.0) + (until #f + (if (>= (- (-> self clock frame-counter) (-> self state-time)) (seconds 0.2)) + (ja :num! (seek! 0.0 0.1)) + (ja :num! (seek! + (lerp-scale + (ja-aframe 6.0 0) + (ja-aframe 2.0 0) + (vector-vector-xz-distance (target-pos 0) (-> self root trans)) + 0.0 + 4096.0 + ) + 0.2 + ) + ) + ) + (suspend) + (if (ja-min? 0) + (go-virtual idle) + ) + ) + #f + (none) + ) + :post (the-as (function none :behavior bouncer) transform-post) + ) + +(defstate fire (bouncer) + :virtual #t + :code (behavior () + (cpad-set-buzz! (-> *cpad-list* cpads 0) 1 178 (seconds 0.1)) + (ja-no-eval :group! (get-art-by-name (-> self draw art-group) "idle" art-joint-anim) + :num! (seek! + (the float (+ (-> (get-art-by-name (-> self draw art-group) "idle" art-joint-anim) frames num-frames) -1)) + ) + :frame-num (ja-aframe 6.0 0) + ) + (until (ja-done? 0) + (suspend) + (ja :num! (seek!)) + ) + (go-virtual idle) + (none) + ) + :post (the-as (function none :behavior bouncer) transform-post) + ) + +(defmethod init-skeleton! bouncer ((obj bouncer)) + (initialize-skeleton + obj + (the-as skeleton-group (art-group-get-by-name *level* "skel-bouncer" (the-as (pointer uint32) #f))) + (the-as pair 0) + ) + 0 + (none) + ) + +(defmethod bouncer-method-24 bouncer ((obj bouncer)) + "TODO - collision stuff" + (let ((collision-shape (new 'process 'collide-shape obj (collide-list-enum hit-by-player)))) + (let ((collision-mesh (new 'process 'collide-shape-prim-mesh collision-shape (the-as uint 0) (the-as uint 0)))) + (set! (-> collision-mesh prim-core collide-as) (collide-spec crate)) + (set! (-> collision-mesh prim-core collide-with) (collide-spec jak player-list)) + (set! (-> collision-mesh prim-core action) (collide-action solid)) + (set! (-> collision-mesh transform-index) 0) + (set-vector! (-> collision-mesh local-sphere) 0.0 3072.0 0.0 6963.2) + (set! (-> collision-shape total-prims) (the-as uint 1)) + (set! (-> collision-shape root-prim) collision-mesh) + ) + (set! (-> collision-shape nav-radius) (* 0.75 (-> collision-shape root-prim local-sphere w))) + (let ((prim (-> collision-shape root-prim))) + (set! (-> collision-shape backup-collide-as) (-> prim prim-core collide-as)) + (set! (-> collision-shape backup-collide-with) (-> prim prim-core collide-with)) + ) + (set! (-> obj root) collision-shape) + ) + 0 + (none) + ) + +;; WARN: Return type mismatch object vs none. +(defmethod init-from-entity! bouncer ((obj bouncer) (arg0 entity-actor)) + (set! (-> obj mods) #f) + (bouncer-method-24 obj) + (process-drawable-from-entity! obj arg0) + (init-skeleton! obj) + (nav-mesh-connect-from-ent (the-as entity-nav-mesh obj)) + (set! (-> obj spring-height) (res-lump-float arg0 'spring-height :default 45056.0)) + (go (method-of-object obj idle)) + (none) + ) diff --git a/goalc/make/MakeSystem.cpp b/goalc/make/MakeSystem.cpp index 0d0b5db421..aa29deaeb8 100644 --- a/goalc/make/MakeSystem.cpp +++ b/goalc/make/MakeSystem.cpp @@ -376,8 +376,7 @@ bool MakeSystem::make(const std::string& target_in, bool force, bool verbose) { lg::print("Error: {}\n", e.what()); } if (!success) { - lg::print("Build failed on {}{}.\n", rule->input.at(0), - rule->input.size() > 1 ? ", ..." : ""); + lg::print("Build failed on {}{}\n", rule->input.at(0), rule->input.size() > 1 ? ", ..." : ""); throw std::runtime_error("Build failed."); return false; } diff --git a/scripts/gsrc/utils.py b/scripts/gsrc/utils.py index 1361ef9252..b7f6c58644 100644 --- a/scripts/gsrc/utils.py +++ b/scripts/gsrc/utils.py @@ -48,5 +48,5 @@ def get_ref_path_from_filename(game_name, file_name, ref_folder): if src_path == "": print("couldn't determine ref path for {}:{}!".format(game_name, file_name)) exit(1) - path = "{}/{}/{}/{}_REF.gc".format(ref_folder, game_name, src_path, file_name) + path = os.path.join(ref_folder, game_name, src_path, "{}_REF.gc".format(file_name)) return path diff --git a/test/decompiler/reference/jak1/engine/ambient/ambient_REF.gc b/test/decompiler/reference/jak1/engine/ambient/ambient_REF.gc index 2198370975..dfd9cc6fc3 100644 --- a/test/decompiler/reference/jak1/engine/ambient/ambient_REF.gc +++ b/test/decompiler/reference/jak1/engine/ambient/ambient_REF.gc @@ -408,8 +408,8 @@ ;; failed to figure out what this is: (defstate level-hint-normal (level-hint) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'exit) (go level-hint-exit) @@ -468,8 +468,8 @@ ;; failed to figure out what this is: (defstate level-hint-sidekick (level-hint) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'exit) (when (nonzero? (-> self sound-id)) diff --git a/test/decompiler/reference/jak1/engine/camera/cam-combiner_REF.gc b/test/decompiler/reference/jak1/engine/camera/cam-combiner_REF.gc index 4e5940d44d..498de6bb8e 100644 --- a/test/decompiler/reference/jak1/engine/camera/cam-combiner_REF.gc +++ b/test/decompiler/reference/jak1/engine/camera/cam-combiner_REF.gc @@ -3,16 +3,16 @@ ;; failed to figure out what this is: (defstate cam-combiner-active (camera-combiner) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'point-of-interest) (cond - ((-> arg3 param 0) + ((-> event param 0) (set! (-> self tracking use-point-of-interest) #t) - (set! (-> self tracking point-of-interest quad) (-> (the-as vector (-> arg3 param 0)) quad)) + (set! (-> self tracking point-of-interest quad) (-> (the-as vector (-> event param 0)) quad)) (set! (-> self tracking point-of-interest-blend target) 1.0) ) (else @@ -23,7 +23,7 @@ ) ((= v1-0 'set-interpolation) (set! (-> self interp-val) 0.0) - (set! (-> self interp-step) (/ 5.0 (the float (-> arg3 param 0)))) + (set! (-> self interp-step) (/ 5.0 (the float (-> event param 0)))) ) ((= v1-0 'teleport) (when (nonzero? (-> self tracking-status)) @@ -48,28 +48,28 @@ (a0-15 0) (a1-3 "ERROR : missing camera-slave parameter to *camera-combiner* start-tracking~%") ) - (let ((v1-7 (-> arg3 param 0))) + (let ((v1-7 (-> event param 0))) (rtype-of v1-7) ) (t9-2 a0-15 a1-3) ) ) ((let ((t9-3 type-type?) - (v1-8 (-> arg3 param 0)) + (v1-8 (-> event param 0)) ) (not (t9-3 (rtype-of v1-8) camera-slave)) ) (let ((t9-4 format) (a0-18 0) (a1-5 "ERROR : invalid type '~A' to *camera-combiner* start-tracking~%") - (v1-10 (-> arg3 param 0)) + (v1-10 (-> event param 0)) ) (t9-4 a0-18 a1-5 (rtype-of v1-10)) ) ) ((zero? (-> self tracking-status)) (set! (-> self tracking-status) (the-as uint 1)) - (let ((gp-1 (the-as object (-> arg3 param 0)))) + (let ((gp-1 (the-as object (-> event param 0)))) (set! (-> self tracking-options) (the-as int (-> (the-as camera-slave gp-1) options))) (set! (-> self tracking no-follow) (-> (the-as camera-slave gp-1) tracking no-follow)) (copy-cam-float-seeker (-> self tracking tilt-adjust) (-> (the-as camera-slave gp-1) tracking tilt-adjust)) @@ -106,21 +106,21 @@ (a0-27 0) (a1-11 "ERROR : missing camera-slave parameter to *camera-combiner* copy-tracking~%") ) - (let ((v1-23 (-> arg3 param 0))) + (let ((v1-23 (-> event param 0))) (rtype-of v1-23) ) (t9-10 a0-27 a1-11) ) ) ((let ((t9-11 type-type?) - (v1-24 (-> arg3 param 0)) + (v1-24 (-> event param 0)) ) (not (t9-11 (rtype-of v1-24) camera-slave)) ) (let ((t9-12 format) (a0-30 0) (a1-13 "ERROR : invalid type '~A' to *camera-combiner* copy-tracking~%") - (v1-25 (-> arg3 param 0)) + (v1-25 (-> event param 0)) ) (t9-12 a0-30 a1-13 (rtype-of v1-25)) ) @@ -130,7 +130,7 @@ ) (else (set! (-> self tracking-status) (the-as uint 1)) - (let ((gp-3 (the-as camera-slave (-> arg3 param 0)))) + (let ((gp-3 (the-as camera-slave (-> event param 0)))) (set! (-> self tracking-options) (the-as int (-> gp-3 options))) (set! (-> self tracking no-follow) (-> gp-3 tracking no-follow)) (copy-cam-float-seeker (-> self tracking tilt-adjust) (-> gp-3 tracking tilt-adjust)) diff --git a/test/decompiler/reference/jak1/engine/camera/cam-states-dbg_REF.gc b/test/decompiler/reference/jak1/engine/camera/cam-states-dbg_REF.gc index df3b2cd1b2..4e3093732e 100644 --- a/test/decompiler/reference/jak1/engine/camera/cam-states-dbg_REF.gc +++ b/test/decompiler/reference/jak1/engine/camera/cam-states-dbg_REF.gc @@ -24,13 +24,13 @@ ;; failed to figure out what this is: (defstate cam-point-watch (camera-slave) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('teleport) #f ) (else - (cam-standard-event-handler arg0 arg1 arg2 arg3) + (cam-standard-event-handler proc arg1 event-type event) ) ) ) @@ -416,13 +416,13 @@ ;; failed to figure out what this is: (defstate cam-free-floating (camera-slave) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('teleport) #f ) (else - (cam-standard-event-handler arg0 arg1 arg2 arg3) + (cam-standard-event-handler proc arg1 event-type event) ) ) ) @@ -522,13 +522,13 @@ ;; failed to figure out what this is: (defstate cam-orbit (camera-slave) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('teleport) #f ) (else - (cam-standard-event-handler arg0 arg1 arg2 arg3) + (cam-standard-event-handler proc arg1 event-type event) ) ) ) diff --git a/test/decompiler/reference/jak1/engine/camera/cam-states_REF.gc b/test/decompiler/reference/jak1/engine/camera/cam-states_REF.gc index b25e2358e5..cea2b4852d 100644 --- a/test/decompiler/reference/jak1/engine/camera/cam-states_REF.gc +++ b/test/decompiler/reference/jak1/engine/camera/cam-states_REF.gc @@ -3,13 +3,13 @@ ;; failed to figure out what this is: (defstate cam-fixed (camera-slave) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('teleport) #f ) (else - (cam-standard-event-handler arg0 arg1 arg2 arg3) + (cam-standard-event-handler proc arg1 event-type event) ) ) ) @@ -42,13 +42,13 @@ ;; failed to figure out what this is: (defstate cam-fixed-read-entity (camera-slave) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('teleport) #f ) (else - (cam-standard-event-handler arg0 arg1 arg2 arg3) + (cam-standard-event-handler proc arg1 event-type event) ) ) ) @@ -86,13 +86,13 @@ ;; failed to figure out what this is: (defstate cam-pov (camera-slave) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('teleport) #f ) (else - (cam-standard-event-handler arg0 arg1 arg2 arg3) + (cam-standard-event-handler proc arg1 event-type event) ) ) ) @@ -146,13 +146,13 @@ ;; failed to figure out what this is: (defstate cam-pov180 (camera-slave) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('teleport) #f ) (else - (cam-standard-event-handler arg0 arg1 arg2 arg3) + (cam-standard-event-handler proc arg1 event-type event) ) ) ) @@ -289,10 +289,10 @@ ;; failed to figure out what this is: (defstate cam-standoff (camera-slave) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('set-standoff-dist) - (vector-normalize! (-> self pivot-pt) (the-as float (-> arg3 param 0))) + (vector-normalize! (-> self pivot-pt) (the-as float (-> event param 0))) (cam-standoff-calc-trans) ) (('set-standoff-height) @@ -301,12 +301,12 @@ (-> self pivot-pt) (-> self pivot-pt) (-> *camera* local-down) - (the-as float (-> arg3 param 0)) + (the-as float (-> event param 0)) ) (cam-standoff-calc-trans) ) (else - (cam-standard-event-handler arg0 arg1 arg2 arg3) + (cam-standard-event-handler proc arg1 event-type event) ) ) ) @@ -422,13 +422,13 @@ ;; failed to figure out what this is: (defstate cam-eye (camera-slave) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('teleport) #f ) (else - (cam-standard-event-handler arg0 arg1 arg2 arg3) + (cam-standard-event-handler proc arg1 event-type event) ) ) ) @@ -601,13 +601,13 @@ ;; failed to figure out what this is: (defstate cam-billy (camera-slave) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('teleport) #f ) (else - (cam-standard-event-handler arg0 arg1 arg2 arg3) + (cam-standard-event-handler proc arg1 event-type event) ) ) ) @@ -820,13 +820,13 @@ ;; failed to figure out what this is: (defstate cam-decel (camera-slave) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('teleport) #f ) (else - (cam-standard-event-handler arg0 arg1 arg2 arg3) + (cam-standard-event-handler proc arg1 event-type event) ) ) ) @@ -873,13 +873,13 @@ ;; failed to figure out what this is: (defstate cam-endlessfall (camera-slave) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('teleport) #f ) (else - (cam-standard-event-handler arg0 arg1 arg2 arg3) + (cam-standard-event-handler proc arg1 event-type event) ) ) ) @@ -1108,8 +1108,8 @@ ;; failed to figure out what this is: (defstate cam-circular (camera-slave) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('teleport) #f ) @@ -1118,7 +1118,7 @@ (cam-circular-position #f) ) (else - (cam-standard-event-handler arg0 arg1 arg2 arg3) + (cam-standard-event-handler proc arg1 event-type event) ) ) ) @@ -2824,8 +2824,8 @@ ;; failed to figure out what this is: (defstate cam-string (camera-slave) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('teleport) (let ((gp-0 (new-stack-vector0))) (cam-string-find-position-rel! gp-0) @@ -2833,8 +2833,8 @@ ) ) (('joystick) - (set! (-> self phony-joystick-x) (the-as float (-> arg3 param 0))) - (set! (-> self phony-joystick-y) (the-as float (-> arg3 param 1))) + (set! (-> self phony-joystick-x) (the-as float (-> event param 0))) + (set! (-> self phony-joystick-y) (the-as float (-> event param 1))) (let ((v0-1 (the-as object #t))) (set! (-> self have-phony-joystick) (the-as symbol v0-1)) v0-1 @@ -2842,10 +2842,10 @@ ) (('set-dist) (cond - ((-> arg3 param 0) + ((-> event param 0) (set! (-> self string-val-locked) #t) - (set! (-> self string-min-val quad) (-> (the-as vector (-> arg3 param 0)) quad)) - (set! (-> self string-max-val quad) (-> (the-as vector (-> arg3 param 1)) quad)) + (set! (-> self string-min-val quad) (-> (the-as vector (-> event param 0)) quad)) + (set! (-> self string-max-val quad) (-> (the-as vector (-> event param 1)) quad)) (set! (-> self string-max-val x) (fmax (-> self string-max-val x) (-> self string-min-val x))) (set! (-> self string-max-val y) (fmax (-> self string-max-val y) (-> self string-min-val y))) (set! (-> self string-max-val z) (fmax (-> self string-max-val z) (-> self string-min-val z))) @@ -2860,7 +2860,7 @@ (-> self los-state) ) (else - (cam-standard-event-handler arg0 arg1 arg2 arg3) + (cam-standard-event-handler proc arg1 event-type event) ) ) ) diff --git a/test/decompiler/reference/jak1/engine/camera/pov-camera_REF.gc b/test/decompiler/reference/jak1/engine/camera/pov-camera_REF.gc index c389a109ed..bf5c3dc9d6 100644 --- a/test/decompiler/reference/jak1/engine/camera/pov-camera_REF.gc +++ b/test/decompiler/reference/jak1/engine/camera/pov-camera_REF.gc @@ -82,8 +82,8 @@ ;; failed to figure out what this is: (defstate pov-camera-playing (pov-camera) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('abort) (when (logtest? (-> self flags) (pov-camera-flag notify-of-abort)) (logior! (-> self flags) (pov-camera-flag allow-abort)) diff --git a/test/decompiler/reference/jak1/engine/game/collectables_REF.gc b/test/decompiler/reference/jak1/engine/game/collectables_REF.gc index 0761f30b58..0d6888f9db 100644 --- a/test/decompiler/reference/jak1/engine/game/collectables_REF.gc +++ b/test/decompiler/reference/jak1/engine/game/collectables_REF.gc @@ -487,63 +487,63 @@ ;; failed to figure out what this is: (defstate wait (eco-collectable) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (local-vars (v0-3 none)) - (when (and (or (= arg2 'touch) (= arg2 'attack)) + (when (and (or (= event-type 'touch) (= event-type 'attack)) (and (logtest? (-> self flags) (collectable-flags can-collect)) (>= (- (-> *display* base-frame-counter) (-> self birth-time)) (-> self collect-timeout)) (!= (-> self next-state name) 'pickup) - (send-event arg0 'get-pickup (-> self fact pickup-type) (-> self fact pickup-amount)) + (send-event proc 'get-pickup (-> self fact pickup-type) (-> self fact pickup-amount)) ) ) (logclear! (-> self mask) (process-mask actor-pause)) - (go-virtual pickup #f (process->handle arg0)) + (go-virtual pickup #f (process->handle proc)) ) (the-as object (cond - ((= arg2 'eco-blue) + ((= event-type 'eco-blue) (when (and (not (logtest? (-> self flags) (collectable-flags fading ignore-blue))) (!= (-> self next-state name) 'pickup) - (begin (check-blue-suck (the-as process-drawable arg0)) #t) + (begin (check-blue-suck (the-as process-drawable proc)) #t) (logtest? (-> self flags) (collectable-flags can-collect)) (>= (- (-> *display* base-frame-counter) (-> self birth-time)) (-> self collect-timeout)) ) (logclear! (-> self mask) (process-mask actor-pause)) - (go-virtual notice-blue (process->handle arg0)) + (go-virtual notice-blue (process->handle proc)) ) ) - ((= arg2 'trans) - (set! (-> self root-override trans quad) (-> (the-as vector (-> arg3 param 0)) quad)) + ((= event-type 'trans) + (set! (-> self root-override trans quad) (-> (the-as vector (-> event param 0)) quad)) (update-transforms! (-> self root-override)) (ja-post) ) - ((= arg2 'jump) + ((= event-type 'jump) (logclear! (-> self mask) (process-mask actor-pause)) - (set! (-> self jump-pos quad) (-> (the-as vector (-> arg3 param 0)) quad)) + (set! (-> self jump-pos quad) (-> (the-as vector (-> event param 0)) quad)) (go-virtual jump) ) - ((= arg2 'pickup) + ((= event-type 'pickup) (when (!= (-> self next-state name) 'pickup) - (if (and (> arg1 0) (-> arg3 param 0)) - (move-to-point! (-> self root-override) (the-as vector (-> arg3 param 0))) + (if (and (> arg1 0) (-> event param 0)) + (move-to-point! (-> self root-override) (the-as vector (-> event param 0))) ) (logclear! (-> self mask) (process-mask actor-pause)) (go-virtual pickup #f (the-as handle #f)) ) ) - ((= arg2 'die) + ((= event-type 'die) (logclear! (-> self mask) (process-mask actor-pause)) (go-virtual die) ) - ((= arg2 'movie-pos) - (set! v0-3 (the-as none (-> arg3 param 0))) + ((= event-type 'movie-pos) + (set! v0-3 (the-as none (-> event param 0))) (set! (-> self movie-pos-index) (the-as int v0-3)) v0-3 ) - ((= arg2 'actor-pause) + ((= event-type 'actor-pause) (cond - ((-> arg3 param 0) + ((-> event param 0) (logior! (-> self mask) (process-mask actor-pause)) (set! v0-3 (the-as none #t)) (set! (-> self actor-pause) (the-as symbol v0-3)) @@ -556,7 +556,7 @@ ) ) ) - ((= arg2 'fade) + ((= event-type 'fade) (logior! (-> self flags) (collectable-flags fade)) (set! (-> self fadeout-timeout) (seconds 0.1)) (set! v0-3 (the-as none (-> *display* base-frame-counter))) @@ -661,16 +661,16 @@ ;; failed to figure out what this is: (defstate notice-blue (eco-collectable) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (when (and (or (= arg2 'touch) (= arg2 'attack)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (when (and (or (= event-type 'touch) (= event-type 'attack)) (and (logtest? (-> self flags) (collectable-flags can-collect)) (>= (- (-> *display* base-frame-counter) (-> self birth-time)) (-> self collect-timeout)) (!= (-> self next-state name) 'pickup) - (send-event arg0 'get-pickup (-> self fact pickup-type) (-> self fact pickup-amount)) + (send-event proc 'get-pickup (-> self fact pickup-type) (-> self fact pickup-amount)) ) ) (logclear! (-> self mask) (process-mask actor-pause)) - (go-virtual pickup #f (process->handle arg0)) + (go-virtual pickup #f (process->handle proc)) ) ) :enter (behavior ((arg0 handle)) @@ -732,15 +732,15 @@ ;; failed to figure out what this is: (defstate pickup (eco-collectable) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'set-movie-pos) (let ((v1-3 (res-lump-struct (-> self entity) 'movie-pos vector :time (the-as float -1000000000.0)))) (the-as symbol (when v1-3 - (set! (-> v1-3 quad) (-> (the-as vector (-> arg3 param 0)) quad)) + (set! (-> v1-3 quad) (-> (the-as vector (-> event param 0)) quad)) (the-as symbol v1-3) ) ) @@ -748,7 +748,7 @@ ) ((= v1-0 'actor-pause) (the-as symbol (cond - ((-> arg3 param 0) + ((-> event param 0) (logior! (-> self mask) (process-mask actor-pause)) (let ((v0-1 #t)) (set! (-> self actor-pause) v0-1) @@ -944,8 +944,8 @@ ;; failed to figure out what this is: (defstate die (eco) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'fade) (process-entity-status! self (entity-perm-status dead) #t) @@ -1572,9 +1572,9 @@ ;; failed to figure out what this is: (defstate wait (fuel-cell) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (local-vars (v0-3 none)) - (when (and (or (= arg2 'touch) (= arg2 'attack)) + (when (and (or (= event-type 'touch) (= event-type 'attack)) (and (logtest? (-> self flags) (collectable-flags can-collect)) (>= (- (-> *display* base-frame-counter) (-> self birth-time)) (-> self collect-timeout)) (and (not (handle->process (-> *game-info* other-camera-handle))) @@ -1588,37 +1588,37 @@ (add-setting! 'allow-progress #f 0.0 0) (apply-settings *setting-control*) (logclear! (-> self mask) (process-mask actor-pause)) - (go-virtual pickup #f (process->handle arg0)) + (go-virtual pickup #f (process->handle proc)) ) (the-as object (cond - ((= arg2 'trans) - (set! (-> self root-override trans quad) (-> (the-as vector (-> arg3 param 0)) quad)) + ((= event-type 'trans) + (set! (-> self root-override trans quad) (-> (the-as vector (-> event param 0)) quad)) (set! (-> self base quad) (-> self root-override trans quad)) (update-transforms! (-> self root-override)) ) - ((= arg2 'pickup) + ((= event-type 'pickup) (when (!= (-> self next-state name) 'pickup) - (if (and (> arg1 0) (-> arg3 param 0)) - (move-to-point! (-> self root-override) (the-as vector (-> arg3 param 0))) + (if (and (> arg1 0) (-> event param 0)) + (move-to-point! (-> self root-override) (the-as vector (-> event param 0))) ) (logclear! (-> self mask) (process-mask actor-pause)) (go-virtual pickup #f (process->handle *target*)) ) ) - ((= arg2 'collide-shape) - (if (-> arg3 param 0) + ((= event-type 'collide-shape) + (if (-> event param 0) (restore-collide-with-as (-> self root-override)) (clear-collide-with-as (-> self root-override)) ) ) - ((= arg2 'movie-pos) - (set! v0-3 (the-as none (-> arg3 param 0))) + ((= event-type 'movie-pos) + (set! v0-3 (the-as none (-> event param 0))) (set! (-> self movie-pos-index) (the-as int v0-3)) v0-3 ) - ((= arg2 'anim) + ((= event-type 'anim) (cond - ((-> arg3 param 0) + ((-> event param 0) (set! v0-3 (the-as none (logclear (-> self flags) (collectable-flags anim)))) (set! (-> self flags) (the-as collectable-flags v0-3)) ) @@ -2202,19 +2202,19 @@ ;; failed to figure out what this is: (defstate fuel-cell-clone-anim (fuel-cell) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('pickup) (when (!= (-> self next-state name) 'pickup) - (if (and (> arg1 0) (-> arg3 param 0)) - (move-to-point! (-> self root-override) (the-as vector (-> arg3 param 0))) + (if (and (> arg1 0) (-> event param 0)) + (move-to-point! (-> self root-override) (the-as vector (-> event param 0))) ) (logclear! (-> self mask) (process-mask actor-pause)) (go-virtual pickup #f (the-as handle #f)) ) ) (('trans) - (set! (-> self root-override trans quad) (-> (the-as vector (-> arg3 param 0)) quad)) + (set! (-> self root-override trans quad) (-> (the-as vector (-> event param 0)) quad)) (set! (-> self base quad) (-> self root-override trans quad)) (update-transforms! (-> self root-override)) ) @@ -2338,8 +2338,8 @@ ;; failed to figure out what this is: (defstate pickup (buzzer) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (if (= v1-0 'notify) (process-entity-status! self (entity-perm-status dead) #t) ) @@ -3100,22 +3100,22 @@ ;; failed to figure out what this is: (defstate vent-wait-for-touch (vent) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (if (and (or (= arg2 'touch) (= arg2 'attack)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (if (and (or (= event-type 'touch) (= event-type 'attack)) (let ((a1-1 (new 'stack-no-clear 'event-message-block))) (set! (-> a1-1 from) self) (set! (-> a1-1 num-params) 2) (set! (-> a1-1 message) 'get-pickup) (set! (-> a1-1 param 0) (the-as uint (-> self fact pickup-type))) (set! (-> a1-1 param 1) (the-as uint (-> self fact pickup-amount))) - (and (= (send-event-function arg0 a1-1) #t) - (or (logtest? (-> self fact options) (fact-options powerup)) (send-event arg0 'powerup)) + (and (= (send-event-function proc a1-1) #t) + (or (logtest? (-> self fact options) (fact-options powerup)) (send-event proc 'powerup)) ) ) ) - (go vent-pickup (process->handle arg0)) + (go vent-pickup (process->handle proc)) ) - (vent-standard-event-handler arg0 arg1 arg2 arg3) + (vent-standard-event-handler proc arg1 event-type event) ) :code (behavior () (loop @@ -3138,8 +3138,8 @@ ;; failed to figure out what this is: (defstate vent-blocked (vent) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('show) (go vent-wait-for-touch) ) diff --git a/test/decompiler/reference/jak1/engine/game/crates_REF.gc b/test/decompiler/reference/jak1/engine/game/crates_REF.gc index 896556ff00..366eccce74 100644 --- a/test/decompiler/reference/jak1/engine/game/crates_REF.gc +++ b/test/decompiler/reference/jak1/engine/game/crates_REF.gc @@ -825,28 +825,28 @@ ;; failed to figure out what this is: (defstate die (crate) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('touched) (case (-> self defense) (('darkeco) (cond - ((= (-> arg0 type) target) - (send-event arg0 'attack (-> arg3 param 0) (static-attack-info ((mode 'darkeco)))) + ((= (-> proc type) target) + (send-event proc 'attack (-> event param 0) (static-attack-info ((mode 'darkeco)))) ) (else (let ((a1-5 (new 'stack-no-clear 'event-message-block))) (set! (-> a1-5 from) self) (set! (-> a1-5 num-params) 4) (set! (-> a1-5 message) 'attack) - (set! (-> a1-5 param 0) (-> arg3 param 0)) + (set! (-> a1-5 param 0) (-> event param 0)) (set! (-> a1-5 param 1) (the-as uint 'darkeco)) (let ((v1-12 (+ *global-attack-id* 1))) (set! *global-attack-id* v1-12) (set! (-> a1-5 param 2) (the-as uint v1-12)) ) (set! (-> a1-5 param 3) (the-as uint 0)) - (send-event-function arg0 a1-5) + (send-event-function proc a1-5) ) ) ) @@ -985,10 +985,10 @@ ;; failed to figure out what this is: (defstate special-contents-die (crate) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'notify) - (case (-> arg3 param 0) + (case (-> event param 0) (('pickup) (let ((gp-0 (-> self entity extra perm))) (logior! (-> gp-0 status) (entity-perm-status user-set-from-cstage)) diff --git a/test/decompiler/reference/jak1/engine/game/game-save_REF.gc b/test/decompiler/reference/jak1/engine/game/game-save_REF.gc index 824528d90f..5c14c479a3 100644 --- a/test/decompiler/reference/jak1/engine/game/game-save_REF.gc +++ b/test/decompiler/reference/jak1/engine/game/game-save_REF.gc @@ -1728,8 +1728,8 @@ auto-save-post ;; failed to figure out what this is: (defstate error (auto-save) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'progress-allowed?) #t diff --git a/test/decompiler/reference/jak1/engine/game/generic-obs_REF.gc b/test/decompiler/reference/jak1/engine/game/generic-obs_REF.gc index 64717b1de5..a9967cc84f 100644 --- a/test/decompiler/reference/jak1/engine/game/generic-obs_REF.gc +++ b/test/decompiler/reference/jak1/engine/game/generic-obs_REF.gc @@ -243,15 +243,15 @@ ;; failed to figure out what this is: (defstate manipy-idle (manipy) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (local-vars (v0-0 none)) - (let ((v1-0 arg2)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'attackable) (cond - ((-> arg3 param 0) + ((-> event param 0) (set! v0-0 (the-as none (logior (process-mask attackable) (-> self mask)))) (set! (-> self mask) (the-as process-mask v0-0)) ) @@ -264,7 +264,7 @@ ) ((= v1-0 'blend-shape) (cond - ((-> arg3 param 0) + ((-> event param 0) (set! v0-0 (the-as none (logior (-> self skel status) (janim-status blerc eye)))) (set! (-> self skel status) (the-as janim-status v0-0)) ) @@ -277,7 +277,7 @@ ) ((= v1-0 'shadow) (cond - ((-> arg3 param 0) + ((-> event param 0) (set! v0-0 (the-as none (-> self shadow-backup))) (set! (-> self draw shadow) (the-as shadow-geo v0-0)) v0-0 @@ -289,37 +289,40 @@ ) ) ((= v1-0 'trans-hook) - (set! v0-0 (the-as none (-> arg3 param 0))) + (set! v0-0 (the-as none (-> event param 0))) (set! (-> self new-trans-hook) (the-as (function none) v0-0)) v0-0 ) ((= v1-0 'post-hook) - (set! v0-0 (the-as none (-> arg3 param 0))) + (set! v0-0 (the-as none (-> event param 0))) (set! (-> self new-post-hook) (the-as (function none) v0-0)) v0-0 ) ((= v1-0 'eval) - ((the-as (function manipy none) (-> arg3 param 0)) self) + ((the-as (function manipy none) (-> event param 0)) self) ) ((= v1-0 'become-hud-object) - (convert-to-hud-object self (the-as hud (-> arg3 param 0))) + (convert-to-hud-object self (the-as hud (-> event param 0))) ) ((= v1-0 'event-hook) - (set! v0-0 (the-as none (-> arg3 param 0))) + (set! v0-0 (the-as none (-> event param 0))) (set! (-> self cur-event-hook) (the-as (function none) v0-0)) v0-0 ) ((= v1-0 'art-joint-anim) (set! (-> self new-joint-anim) - (the-as art-joint-anim (lookup-art (-> self draw art-group) (the-as string (-> arg3 param 0)) art-joint-anim)) + (the-as + art-joint-anim + (lookup-art (-> self draw art-group) (the-as string (-> event param 0)) art-joint-anim) + ) ) - (set! v0-0 (the-as none (-> arg3 param 1))) + (set! v0-0 (the-as none (-> event param 1))) (set! (-> self new-joint-anim-blend) (the-as uint v0-0)) v0-0 ) ((= v1-0 'anim-mode) (when (nonzero? (-> self skel)) - (set! (-> self anim-mode) (the-as symbol (-> arg3 param 0))) + (set! (-> self anim-mode) (the-as symbol (-> event param 0))) (if (= (-> self anim-mode) 'clone-anim) (ja-post) ) @@ -327,16 +330,16 @@ ) ) ((or (= v1-0 'origin-joint-index) (= v1-0 'center-joint)) - (set! (-> self draw origin-joint-index) (-> arg3 param 0)) - (set! v0-0 (the-as none (-> arg3 param 0))) + (set! (-> self draw origin-joint-index) (-> event param 0)) + (set! v0-0 (the-as none (-> event param 0))) (set! (-> self draw shadow-joint-index) (the-as uint v0-0)) v0-0 ) ((= v1-0 'max-vis-dist) - (set! (-> self draw lod-set lod (-> self draw lod-set max-lod) dist) (the-as float (-> arg3 param 0))) + (set! (-> self draw lod-set lod (-> self draw lod-set max-lod) dist) (the-as float (-> event param 0))) ) ((= v1-0 'grab) - (set! (-> self cur-grab-handle) (process->handle (the-as process (-> arg3 param 0)))) + (set! (-> self cur-grab-handle) (process->handle (the-as process (-> event param 0)))) (let ((v1-30 (handle->process (-> self cur-grab-handle)))) (when v1-30 (set! v0-0 (the-as none (-> self old-grab-pos))) @@ -346,33 +349,33 @@ ) ) ((= v1-0 'target) - (set! v0-0 (the-as none (process->handle (the-as process (-> arg3 param 0))))) + (set! v0-0 (the-as none (process->handle (the-as process (-> event param 0))))) (set! (-> self cur-target-handle) (the-as handle v0-0)) v0-0 ) ((= v1-0 'trans) (cond ((type-type? (-> self root type) collide-shape) - (move-to-point! (the-as collide-shape (-> self root)) (the-as vector (-> arg3 param 0))) + (move-to-point! (the-as collide-shape (-> self root)) (the-as vector (-> event param 0))) ) (else (set! v0-0 (the-as none (-> self root trans))) - (set! (-> (the-as vector v0-0) quad) (-> (the-as vector (-> arg3 param 0)) quad)) + (set! (-> (the-as vector v0-0) quad) (-> (the-as vector (-> event param 0)) quad)) v0-0 ) ) ) ((= v1-0 'rot) (let ((s5-0 (new 'stack-no-clear 'matrix))) - (matrix-rotate-y! s5-0 (the-as float (-> arg3 param 0))) + (matrix-rotate-y! s5-0 (the-as float (-> event param 0))) (matrix->quaternion (-> self root quat) s5-0) ) ) ((= v1-0 'rot-quat) - (quaternion-copy! (-> self root quat) (the-as quaternion (-> arg3 param 0))) + (quaternion-copy! (-> self root quat) (the-as quaternion (-> event param 0))) ) ((= v1-0 'clone-copy-trans) - (set! v0-0 (the-as none (-> arg3 param 0))) + (set! v0-0 (the-as none (-> event param 0))) (set! (-> self clone-copy-trans) (the-as symbol v0-0)) v0-0 ) @@ -381,9 +384,9 @@ #f ) ((= v1-0 'draw) - (set! (-> self draw?) (the-as symbol (-> arg3 param 0))) + (set! (-> self draw?) (the-as symbol (-> event param 0))) (cond - ((-> arg3 param 0) + ((-> event param 0) (let ((v1-47 (logtest? (-> self draw status) (draw-status hidden)))) (logclear! (-> self draw status) (draw-status hidden)) (when v1-47 @@ -411,7 +414,7 @@ ) ) ((= v1-0 'query) - (case (-> arg3 param 0) + (case (-> event param 0) (('grab) (handle->process (-> self cur-grab-handle)) ) @@ -427,7 +430,7 @@ ((= v1-0 'set-frame-num) (let ((v1-73 (-> self skel root-channel 0))) (set! (-> v1-73 num-func) num-func-identity) - (set! (-> v1-73 frame-num) (the-as float (-> arg3 param 0))) + (set! (-> v1-73 frame-num) (the-as float (-> event param 0))) ) ) (else @@ -1152,22 +1155,22 @@ ;; failed to figure out what this is: (defstate camera-tracker-process (camera-tracker) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (local-vars (v0-0 uint)) - (let ((v1-0 arg2)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'message) - (set! v0-0 (-> arg3 param 0)) + (set! v0-0 (-> event param 0)) (set! (-> self message) (the-as basic v0-0)) v0-0 ) ((= v1-0 'mask) - (set! v0-0 (-> arg3 param 0)) + (set! v0-0 (-> event param 0)) (set! (-> self mask-to-clear) (the-as process-mask v0-0)) v0-0 ) ((= v1-0 'border) - (set! v0-0 (-> arg3 param 0)) + (set! v0-0 (-> event param 0)) (set! (-> self border-value) (the-as basic v0-0)) v0-0 ) @@ -1421,8 +1424,8 @@ ;; failed to figure out what this is: (defstate part-spawner-active (part-spawner) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('stop) (process-entity-status! self (entity-perm-status complete) #t) (set! (-> self enable) #f) @@ -1434,7 +1437,7 @@ #t ) (('trans) - (let ((v0-1 (the-as object (-> (the-as vector (-> arg3 param 0)) quad)))) + (let ((v0-1 (the-as object (-> (the-as vector (-> event param 0)) quad)))) (set! (-> self root trans quad) (the-as uint128 v0-1)) v0-1 ) @@ -1827,13 +1830,13 @@ ;; failed to figure out what this is: (defstate cam-launcher-shortfall (camera-slave) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('teleport) #f ) (else - (cam-standard-event-handler arg0 arg1 arg2 arg3) + (cam-standard-event-handler proc arg1 event-type event) ) ) ) @@ -1900,13 +1903,13 @@ ;; failed to figure out what this is: (defstate cam-launcher-longfall (camera-slave) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('teleport) #f ) (else - (cam-standard-event-handler arg0 arg1 arg2 arg3) + (cam-standard-event-handler proc arg1 event-type event) ) ) ) @@ -1996,13 +1999,13 @@ ;; failed to figure out what this is: (defstate launcher-idle (launcher) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('instant-death) (go launcher-deactivated) ) (('trans) - (move-to-point! (-> self root-override) (the-as vector (-> arg3 param 0))) + (move-to-point! (-> self root-override) (the-as vector (-> event param 0))) (update-transforms! (-> self root-override)) ) ) @@ -2043,17 +2046,17 @@ ;; failed to figure out what this is: (defstate launcher-active (launcher) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (when (or (= arg2 'touch) (= arg2 'attack)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (when (or (= event-type 'touch) (= event-type 'attack)) (set! (-> self state-time) (-> *display* base-frame-counter)) - (send-event arg0 'launch (-> self spring-height) (-> self camera) (-> self dest) (-> self seek-time)) + (send-event proc 'launch (-> self spring-height) (-> self camera) (-> self dest) (-> self seek-time)) ) (cond - ((= arg2 'instant-death) + ((= event-type 'instant-death) (go launcher-deactivated) ) - ((= arg2 'trans) - (move-to-point! (-> self root-override) (the-as vector (-> arg3 param 0))) + ((= event-type 'trans) + (move-to-point! (-> self root-override) (the-as vector (-> event param 0))) (update-transforms! (-> self root-override)) ) ) @@ -2229,19 +2232,19 @@ ;; failed to figure out what this is: (defstate touch-tracker-idle (touch-tracker) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (local-vars (v0-0 none)) - (let ((v1-0 arg2)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'touched) (let ((v1-1 (ppointer->process (-> self parent)))) - (when (!= v1-1 arg0) + (when (!= v1-1 proc) (cond ((= (-> self event) 'attack) (cond - ((= (-> arg0 type) target) + ((= (-> proc type) target) (send-event - arg0 + proc (-> self event) :from (the-as process v1-1) #f @@ -2250,7 +2253,7 @@ ) ((= (-> v1-1 type) target) (send-event - arg0 + proc (-> self event) :from (the-as process v1-1) #f @@ -2271,26 +2274,26 @@ (set! (-> a1-5 param 2) (the-as uint v1-19)) ) (set! (-> a1-5 param 3) (the-as uint 0)) - (send-event-function arg0 a1-5) + (send-event-function proc a1-5) ) ) ) ) ((-> self event) - (send-event arg0 (-> self event) :from (the-as process v1-1)) + (send-event proc (-> self event) :from (the-as process v1-1)) ) (else (let ((t0-5 (new 'stack-no-clear 'event-message-block))) - (set! (-> t0-5 from) arg0) + (set! (-> t0-5 from) proc) (set! (-> t0-5 num-params) arg1) - (set! (-> t0-5 message) arg2) - (set! (-> t0-5 param 0) (-> arg3 param 0)) - (set! (-> t0-5 param 1) (-> arg3 param 1)) - (set! (-> t0-5 param 2) (-> arg3 param 2)) - (set! (-> t0-5 param 3) (-> arg3 param 3)) - (set! (-> t0-5 param 4) (-> arg3 param 4)) - (set! (-> t0-5 param 5) (-> arg3 param 5)) - (set! (-> t0-5 param 6) (-> arg3 param 6)) + (set! (-> t0-5 message) event-type) + (set! (-> t0-5 param 0) (-> event param 0)) + (set! (-> t0-5 param 1) (-> event param 1)) + (set! (-> t0-5 param 2) (-> event param 2)) + (set! (-> t0-5 param 3) (-> event param 3)) + (set! (-> t0-5 param 4) (-> event param 4)) + (set! (-> t0-5 param 5) (-> event param 5)) + (set! (-> t0-5 param 6) (-> event param 6)) (send-event-function v1-1 t0-5) ) ) @@ -2299,26 +2302,26 @@ ) ) ((= v1-0 'target) - (set! v0-0 (the-as none (process->handle (the-as process (-> arg3 param 0))))) + (set! v0-0 (the-as none (process->handle (the-as process (-> event param 0))))) (set! (-> self target) (the-as handle v0-0)) v0-0 ) ((= v1-0 'event) - (set! (-> self event) (the-as symbol (-> arg3 param 0))) - (set! v0-0 (the-as none (-> arg3 param 1))) + (set! (-> self event) (the-as symbol (-> event param 0))) + (set! v0-0 (the-as none (-> event param 1))) (set! (-> self event-mode) (the-as basic v0-0)) v0-0 ) ((= v1-0 'exit) - (set! v0-0 (the-as none (-> arg3 param 0))) + (set! v0-0 (the-as none (-> event param 0))) (set! (-> self run-function) (the-as (function object) v0-0)) v0-0 ) ((= v1-0 'eval) - ((the-as (function touch-tracker none) (-> arg3 param 0)) self) + ((the-as (function touch-tracker none) (-> event param 0)) self) ) ((= v1-0 'function) - (set! v0-0 (the-as none (-> arg3 param 0))) + (set! v0-0 (the-as none (-> event param 0))) (set! (-> self callback) (the-as (function touch-tracker none) v0-0)) v0-0 ) diff --git a/test/decompiler/reference/jak1/engine/game/projectiles_REF.gc b/test/decompiler/reference/jak1/engine/game/projectiles_REF.gc index deb9370b18..9c555c4bb5 100644 --- a/test/decompiler/reference/jak1/engine/game/projectiles_REF.gc +++ b/test/decompiler/reference/jak1/engine/game/projectiles_REF.gc @@ -647,33 +647,33 @@ ;; failed to figure out what this is: (defstate projectile-moving (projectile) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('touched) (when (-> self attack-mode) (when (cond - ((= (-> arg0 type) target) - (send-event arg0 'attack (-> arg3 param 0) (static-attack-info ((mode (-> self attack-mode))))) + ((= (-> proc type) target) + (send-event proc 'attack (-> event param 0) (static-attack-info ((mode (-> self attack-mode))))) ) (else (let ((a1-2 (new 'stack-no-clear 'event-message-block))) (set! (-> a1-2 from) self) (set! (-> a1-2 num-params) 4) (set! (-> a1-2 message) 'attack) - (set! (-> a1-2 param 0) (-> arg3 param 0)) + (set! (-> a1-2 param 0) (-> event param 0)) (set! (-> a1-2 param 1) (the-as uint (-> self attack-mode))) (let ((v1-13 (+ *global-attack-id* 1))) (set! *global-attack-id* v1-13) (set! (-> a1-2 param 2) (the-as uint v1-13)) ) (set! (-> a1-2 param 3) (the-as uint 0)) - (send-event-function arg0 a1-2) + (send-event-function proc a1-2) ) ) ) (let ((v1-14 (-> self notify-handle))) (if (handle->process v1-14) - (send-event (-> v1-14 process 0) 'notify 'attack arg0) + (send-event (-> v1-14 process 0) 'notify 'attack proc) ) ) (+! (-> self hits) 1) diff --git a/test/decompiler/reference/jak1/engine/game/task/process-taskable_REF.gc b/test/decompiler/reference/jak1/engine/game/task/process-taskable_REF.gc index 5838ba29e6..4bbe06c477 100644 --- a/test/decompiler/reference/jak1/engine/game/task/process-taskable_REF.gc +++ b/test/decompiler/reference/jak1/engine/game/task/process-taskable_REF.gc @@ -605,11 +605,11 @@ ;; failed to figure out what this is: (defstate play-anim (process-taskable) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('shadow) (cond - ((-> arg3 param 0) + ((-> event param 0) (let ((v0-0 (the-as object (-> self shadow-backup)))) (set! (-> self draw shadow) (the-as shadow-geo v0-0)) v0-0 @@ -624,10 +624,10 @@ (('shadow-min-max) (let ((v1-5 (-> self draw shadow-ctrl))) (let ((a0-4 v1-5)) - (set! (-> a0-4 settings bot-plane w) (- (the-as float (-> arg3 param 0)))) + (set! (-> a0-4 settings bot-plane w) (- (the-as float (-> event param 0)))) ) 0 - (set! (-> v1-5 settings top-plane w) (- (the-as float (-> arg3 param 1)))) + (set! (-> v1-5 settings top-plane w) (- (the-as float (-> event param 1)))) ) 0 ) @@ -793,12 +793,12 @@ ;; failed to figure out what this is: (defstate be-clone (process-taskable) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as shadow-geo (cond ((= v1-0 'shadow) (the-as shadow-geo (cond - ((-> arg3 param 0) + ((-> event param 0) (let ((v0-0 (-> self shadow-backup))) (set! (-> self draw shadow) v0-0) v0-0 @@ -814,10 +814,10 @@ ((= v1-0 'shadow-min-max) (let ((v1-5 (-> self draw shadow-ctrl))) (let ((a0-5 v1-5)) - (set! (-> a0-5 settings bot-plane w) (- (the-as float (-> arg3 param 0)))) + (set! (-> a0-5 settings bot-plane w) (- (the-as float (-> event param 0)))) ) 0 - (set! (-> v1-5 settings top-plane w) (- (the-as float (-> arg3 param 1)))) + (set! (-> v1-5 settings top-plane w) (- (the-as float (-> event param 1)))) ) (the-as shadow-geo 0) ) @@ -870,8 +870,8 @@ ;; failed to figure out what this is: (defstate idle (process-taskable) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond @@ -881,7 +881,7 @@ (if (-> self bounce-away) (the-as symbol - (send-event arg0 'shove #f (static-attack-info ((shove-back (meters 3)) (shove-up (meters 1))))) + (send-event proc 'shove #f (static-attack-info ((shove-back (meters 3)) (shove-up (meters 1))))) ) ) ) @@ -889,8 +889,8 @@ ((= v1-0 'touch) (the-as symbol (send-shove-back (-> self root-override) - arg0 - (the-as touching-shapes-entry (-> arg3 param 0)) + proc + (the-as touching-shapes-entry (-> event param 0)) 0.7 6144.0 16384.0 @@ -898,7 +898,7 @@ ) ) ((= v1-0 'clone) - (the-as symbol (go-virtual be-clone (the-as handle (-> arg3 param 0)))) + (the-as symbol (go-virtual be-clone (the-as handle (-> event param 0)))) ) ((= v1-0 'play-anim) (logclear! (-> self mask) (process-mask actor-pause)) @@ -1177,9 +1177,9 @@ ;; failed to figure out what this is: (defstate othercam-running (othercam) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (local-vars (v0-0 object)) - (case arg2 + (case event-type (('die) (set! v0-0 #t) (set! (-> self die?) (the-as symbol v0-0)) @@ -1187,13 +1187,13 @@ ) (('joint) (let ((t9-0 type-type?) - (v1-1 (-> arg3 param 0)) + (v1-1 (-> event param 0)) ) (cond ((t9-0 (rtype-of v1-1) string) (let ((v1-8 (lookup-art (-> (the-as process-taskable (-> self hand process 0)) draw jgeo) - (the-as string (-> arg3 param 0)) + (the-as string (-> event param 0)) (the-as type #f) ) ) @@ -1205,8 +1205,8 @@ ) ) ) - ((not (logtest? (-> arg3 param 0) 7)) - (set! v0-0 (-> arg3 param 0)) + ((not (logtest? (-> event param 0) 7)) + (set! v0-0 (-> event param 0)) (set! (-> self cam-joint-index) (the-as int v0-0)) v0-0 ) @@ -1214,7 +1214,7 @@ ) ) (('mask) - (set! v0-0 (-> arg3 param 0)) + (set! v0-0 (-> event param 0)) (set! (-> self mask-to-clear) (the-as process-mask v0-0)) v0-0 ) diff --git a/test/decompiler/reference/jak1/engine/game/voicebox_REF.gc b/test/decompiler/reference/jak1/engine/game/voicebox_REF.gc index 3d7c50b61d..ffd5b4fa03 100644 --- a/test/decompiler/reference/jak1/engine/game/voicebox_REF.gc +++ b/test/decompiler/reference/jak1/engine/game/voicebox_REF.gc @@ -134,8 +134,8 @@ ;; failed to figure out what this is: (defstate enter (voicebox) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('die) (go-virtual exit) ) diff --git a/test/decompiler/reference/jak1/engine/gfx/water/water_REF.gc b/test/decompiler/reference/jak1/engine/gfx/water/water_REF.gc index c8fdb93e82..5a8da87f97 100644 --- a/test/decompiler/reference/jak1/engine/gfx/water/water_REF.gc +++ b/test/decompiler/reference/jak1/engine/gfx/water/water_REF.gc @@ -1361,8 +1361,8 @@ ;; failed to figure out what this is: (defstate water-vol-idle (water-vol) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (if (= v1-0 'update) (TODO-RENAME-26 self) ) diff --git a/test/decompiler/reference/jak1/engine/target/sidekick_REF.gc b/test/decompiler/reference/jak1/engine/target/sidekick_REF.gc index 2c44bbfd1b..82405e2ffa 100644 --- a/test/decompiler/reference/jak1/engine/target/sidekick_REF.gc +++ b/test/decompiler/reference/jak1/engine/target/sidekick_REF.gc @@ -61,11 +61,11 @@ ;; failed to figure out what this is: (defstate sidekick-clone (sidekick) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (local-vars (v0-0 object)) - (case arg2 + (case event-type (('matrix) - (case (-> arg3 param 0) + (case (-> event param 0) (('play-anim) (set! v0-0 (-> self node-list data)) (set! (-> (the-as (inline-array cspace) v0-0) 0 param0) cspace<-cspace+quaternion!) @@ -98,13 +98,13 @@ v0-0 ) (('shadow) - (set! v0-0 (-> arg3 param 0)) + (set! v0-0 (-> event param 0)) (set! (-> self shadow-in-movie?) (the-as symbol v0-0)) v0-0 ) (('blend-shape) (cond - ((-> arg3 param 0) + ((-> event param 0) (set! v0-0 (logior (-> self skel status) (janim-status blerc))) (set! (-> self skel status) (the-as janim-status v0-0)) ) diff --git a/test/decompiler/reference/jak1/engine/target/target2_REF.gc b/test/decompiler/reference/jak1/engine/target/target2_REF.gc index cd18969c1d..bae30af231 100644 --- a/test/decompiler/reference/jak1/engine/target/target2_REF.gc +++ b/test/decompiler/reference/jak1/engine/target/target2_REF.gc @@ -3,14 +3,14 @@ ;; failed to figure out what this is: (defstate target-load-wait (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('loading) (set! (-> self state-time) (-> *display* base-frame-counter)) #f ) (else - (target-standard-event-handler arg0 arg1 arg2 arg3) + (target-standard-event-handler proc arg1 event-type event) ) ) ) @@ -55,13 +55,13 @@ ;; failed to figure out what this is: (defstate target-stance-ambient (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('movie) (go target-stance) ) (else - (target-standard-event-handler arg0 arg1 arg2 arg3) + (target-standard-event-handler proc arg1 event-type event) ) ) ) @@ -293,8 +293,8 @@ ;; failed to figure out what this is: (defstate hud-waiting (first-person-hud) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('go-away) (go hud-going-out) ) @@ -479,21 +479,21 @@ ;; failed to figure out what this is: (defstate target-look-around (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (cond - ((and (= arg2 'query) (= (-> arg3 param 0) 'mode)) + ((and (= event-type 'query) (= (-> event param 0) 'mode)) (-> self state name) ) - ((let ((v1-4 arg2)) + ((let ((v1-4 event-type)) (= v1-4 'end-mode) ) (go target-stance-look-around) ) ((-> self control unknown-symbol30) - (target-dangerous-event-handler arg0 arg1 arg2 arg3) + (target-dangerous-event-handler proc arg1 event-type event) ) (else - (target-standard-event-handler arg0 arg1 arg2 arg3) + (target-standard-event-handler proc arg1 event-type event) ) ) ) @@ -640,18 +640,18 @@ ;; failed to figure out what this is: (defstate target-billy-game (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (cond - ((and (= arg2 'query) (= (-> arg3 param 0) 'mode)) + ((and (= event-type 'query) (= (-> event param 0) 'mode)) (-> self state name) ) - ((let ((v1-4 arg2)) + ((let ((v1-4 event-type)) (= v1-4 'end-mode) ) (go target-stance) ) (else - (target-standard-event-handler arg0 arg1 arg2 arg3) + (target-standard-event-handler proc arg1 event-type event) ) ) ) @@ -773,38 +773,38 @@ ;; failed to figure out what this is: (defstate target-grab (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (cond - ((and (= arg2 'query) (= (-> arg3 param 0) 'mode)) + ((and (= event-type 'query) (= (-> event param 0) 'mode)) (-> self state name) ) (else - (case arg2 + (case event-type (('end-mode) (go target-stance) ) (('play-anim) - (let ((v0-0 (the-as object (-> arg3 param 0)))) + (let ((v0-0 (the-as object (-> event param 0)))) (set! (-> self control unknown-uint20) (the-as uint v0-0)) v0-0 ) ) (('clone-anim) - (go target-clone-anim (process->handle (the-as process (-> arg3 param 0)))) + (go target-clone-anim (process->handle (the-as process (-> event param 0)))) ) (('change-mode) - (case (-> arg3 param 0) + (case (-> event param 0) (('final-door) (go target-final-door - (the-as basic (process->handle (the-as process (-> arg3 param 1)))) - (process->handle (the-as process (-> arg3 param 2))) + (the-as basic (process->handle (the-as process (-> event param 1)))) + (process->handle (the-as process (-> event param 2))) ) ) ) ) (else - (target-generic-event-handler arg0 arg1 arg2 arg3) + (target-generic-event-handler proc arg1 event-type event) ) ) ) @@ -943,10 +943,10 @@ ;; failed to figure out what this is: (defstate target-pole-cycle (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (if (and (= arg2 'query) (= (-> arg3 param 0) 'mode)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (if (and (= event-type 'query) (= (-> event param 0) 'mode)) (-> self state name) - (target-standard-event-handler arg0 arg1 arg2 arg3) + (target-standard-event-handler proc arg1 event-type event) ) ) :enter (behavior ((arg0 handle)) @@ -1164,13 +1164,13 @@ ;; failed to figure out what this is: (defstate target-edge-grab (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('end-mode) (go target-falling 'target-edge-grab) ) (else - (target-standard-event-handler arg0 arg1 arg2 arg3) + (target-standard-event-handler proc arg1 event-type event) ) ) ) @@ -1284,13 +1284,13 @@ ;; failed to figure out what this is: (defstate target-edge-grab-jump (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('end-mode) (go target-falling 'target-edge-grab) ) (else - (target-standard-event-handler arg0 arg1 arg2 arg3) + (target-standard-event-handler proc arg1 event-type event) ) ) ) @@ -2239,10 +2239,10 @@ ;; failed to figure out what this is: (defstate target-swim-down (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('attack 'attack-invinc) - (let ((v1-2 (the-as attack-info (-> arg3 param 1)))) + (let ((v1-2 (the-as attack-info (-> event param 1)))) (when (or (not (logtest? (-> v1-2 mask) (attack-mask mode))) (= (-> v1-2 mode) 'generic) (= (-> v1-2 mode) 'drown)) (set! (-> v1-2 mode) 'damage) (if (and (= (-> self game mode) 'play) (>= 1.0 (-> self fact-info-target health))) @@ -2254,7 +2254,7 @@ ) ) ) - (target-standard-event-handler arg0 arg1 arg2 arg3) + (target-standard-event-handler proc arg1 event-type event) ) :enter (behavior () (set! (-> self state-time) (-> *display* base-frame-counter)) @@ -2636,10 +2636,10 @@ ;; failed to figure out what this is: (defstate target-launch (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (if (and (= arg2 'query) (= (-> arg3 param 0) 'mode)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (if (and (= event-type 'query) (= (-> event param 0) 'mode)) 'target-launch - (target-standard-event-handler arg0 arg1 arg2 arg3) + (target-standard-event-handler proc arg1 event-type event) ) ) :code (behavior ((arg0 float) (arg1 symbol) (arg2 vector) (arg3 int)) @@ -2733,8 +2733,8 @@ ;; failed to figure out what this is: (defstate target-periscope (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('change-mode) #f ) @@ -2745,7 +2745,7 @@ ) ) (else - (target-generic-event-handler arg0 arg1 arg2 arg3) + (target-generic-event-handler proc arg1 event-type event) ) ) ) @@ -2834,11 +2834,11 @@ ;; failed to figure out what this is: (defstate target-clone-anim (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (if (and (= arg2 'trans) (= (-> arg3 param 0) 'restore)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (if (and (= event-type 'trans) (= (-> event param 0) 'restore)) (set! (-> self control unknown-uint20) (the-as uint #f)) ) - ((-> target-grab event) arg0 arg1 arg2 arg3) + ((-> target-grab event) proc arg1 event-type event) ) :enter (behavior ((arg0 handle)) (set! (-> self control unknown-handle10) arg0) diff --git a/test/decompiler/reference/jak1/engine/target/target_REF.gc b/test/decompiler/reference/jak1/engine/target/target_REF.gc index 2bd8fc9cac..5c1b8d2236 100644 --- a/test/decompiler/reference/jak1/engine/target/target_REF.gc +++ b/test/decompiler/reference/jak1/engine/target/target_REF.gc @@ -2022,19 +2022,19 @@ ;; failed to figure out what this is: (defstate target-running-attack (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('touched) (cond (((method-of-type touching-shapes-entry prims-touching?) - (the-as touching-shapes-entry (-> arg3 param 0)) + (the-as touching-shapes-entry (-> event param 0)) (-> self control) (the-as uint 224) ) (let ((gp-1 (target-send-attack - arg0 + proc (the-as uint (-> self control unknown-symbol30)) - (the-as touching-shapes-entry (-> arg3 param 0)) + (the-as touching-shapes-entry (-> event param 0)) (-> self control unknown-dword50) (-> self control unknown-dword51) ) @@ -2042,8 +2042,8 @@ ) (when gp-1 (set! (-> self control unknown-uint20) (the-as uint (-> *display* base-frame-counter))) - (let ((v1-9 (if (and (nonzero? arg0) (type-type? (-> arg0 type) process-drawable)) - arg0 + (let ((v1-9 (if (and (nonzero? proc) (type-type? (-> proc type) process-drawable)) + proc ) ) ) @@ -2073,12 +2073,12 @@ ) ) (else - (target-dangerous-event-handler arg0 arg1 arg2 arg3) + (target-dangerous-event-handler proc arg1 event-type event) ) ) ) (else - (target-dangerous-event-handler arg0 arg1 arg2 arg3) + (target-dangerous-event-handler proc arg1 event-type event) ) ) ) @@ -2302,15 +2302,15 @@ ;; failed to figure out what this is: (defstate target-attack-air (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v0-0 (target-bonk-event-handler arg0 arg1 arg2 arg3))) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v0-0 (target-bonk-event-handler proc arg1 event-type event))) (cond (v0-0 (empty) v0-0 ) (else - (target-dangerous-event-handler arg0 arg1 arg2 arg3) + (target-dangerous-event-handler proc arg1 event-type event) ) ) ) @@ -2621,14 +2621,14 @@ ;; failed to figure out what this is: (defstate target-flop (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v0-0 (target-bonk-event-handler arg0 arg1 arg2 arg3))) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v0-0 (target-bonk-event-handler proc arg1 event-type event))) (cond (v0-0 (empty) v0-0 ) - ((let ((v1-0 arg2)) + ((let ((v1-0 event-type)) (= v1-0 'swim) ) (cond @@ -2650,7 +2650,7 @@ ) ) (else - (target-dangerous-event-handler arg0 arg1 arg2 arg3) + (target-dangerous-event-handler proc arg1 event-type event) ) ) ) @@ -2864,13 +2864,13 @@ ;; failed to figure out what this is: (defstate target-flop-hit-ground (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('swim) #f ) (else - (target-standard-event-handler arg0 arg1 arg2 arg3) + (target-standard-event-handler proc arg1 event-type event) ) ) ) @@ -2938,11 +2938,11 @@ ;; failed to figure out what this is: (defstate target-wheel (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (if (= arg2 'touched) - (send-event arg0 'roll) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (if (= event-type 'touched) + (send-event proc 'roll) ) - (target-standard-event-handler arg0 arg1 arg2 arg3) + (target-standard-event-handler proc arg1 event-type event) ) :enter (behavior () (set! (-> self state-time) (-> *display* base-frame-counter)) diff --git a/test/decompiler/reference/jak1/engine/ui/hud_REF.gc b/test/decompiler/reference/jak1/engine/ui/hud_REF.gc index f50a78c6a6..5ff46d2150 100644 --- a/test/decompiler/reference/jak1/engine/ui/hud_REF.gc +++ b/test/decompiler/reference/jak1/engine/ui/hud_REF.gc @@ -219,9 +219,9 @@ ;; failed to figure out what this is: (defstate hud-hidden (hud) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (local-vars (v0-0 object)) - (case arg2 + (case event-type (('show) (if (and (not *progress-process*) (!= (-> self last-hide-time) (-> *display* base-frame-counter))) (go hud-arriving) @@ -296,9 +296,9 @@ ;; failed to figure out what this is: (defstate hud-arriving (hud) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (local-vars (v0-3 object)) - (case arg2 + (case event-type (('hide-quick) (set! (-> self last-hide-time) (-> *display* base-frame-counter)) (set! (-> self force-on-screen) #f) diff --git a/test/decompiler/reference/jak1/engine/ui/progress/progress_REF.gc b/test/decompiler/reference/jak1/engine/ui/progress/progress_REF.gc index 31740517b5..bb83e52d5a 100644 --- a/test/decompiler/reference/jak1/engine/ui/progress/progress_REF.gc +++ b/test/decompiler/reference/jak1/engine/ui/progress/progress_REF.gc @@ -1088,8 +1088,8 @@ ;; failed to figure out what this is: (defstate progress-waiting (progress) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('go-away) (go progress-gone) ) @@ -1939,16 +1939,16 @@ ;; failed to figure out what this is: (defstate progress-normal (progress) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (local-vars (v0-0 none)) - (let ((v1-0 arg2)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'go-away) (go progress-going-out) ) ((= v1-0 'notify) (cond - ((= (-> arg3 param 0) 'done) + ((= (-> event param 0) 'done) (case (-> self display-state) (((progress-screen memcard-saving)) (cond @@ -1989,11 +1989,11 @@ ) ) ) - ((= (-> arg3 param 0) 'error) + ((= (-> event param 0) 'error) (let ((t9-4 format) (a0-17 #t) (a1-2 "ERROR NOTIFY: ~S ~D~%") - (v1-13 (-> arg3 param 1)) + (v1-13 (-> event param 1)) ) (t9-4 a0-17 @@ -2060,7 +2060,7 @@ (-> self display-state) ) ) - (case (-> arg3 param 1) + (case (-> event param 1) ((14) (set! v0-0 (the-as none 7)) (set! (-> self next-display-state) (the-as progress-screen v0-0)) @@ -2482,8 +2482,8 @@ ;; failed to figure out what this is: (defstate progress-debug (progress) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('go-away) (go progress-going-out) ) diff --git a/test/decompiler/reference/jak1/levels/beach/beach-obs_REF.gc b/test/decompiler/reference/jak1/levels/beach/beach-obs_REF.gc index 16c09e5575..e2272a93af 100644 --- a/test/decompiler/reference/jak1/levels/beach/beach-obs_REF.gc +++ b/test/decompiler/reference/jak1/levels/beach/beach-obs_REF.gc @@ -242,19 +242,19 @@ ;; failed to figure out what this is: (defstate grottopole-idle (grottopole) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (when (= (-> arg0 type) target) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (when (= (-> proc type) target) + (case event-type (('attack) - (let ((v1-2 (-> arg3 param 2))) + (let ((v1-2 (-> event param 2))) (when (!= v1-2 (-> self incomming-attack-id)) (set! (-> self incomming-attack-id) v1-2) - (case (-> arg3 param 1) + (case (-> event param 1) (('uppercut) (when (and (< (-> *target* control trans y) (+ -40960.0 (-> self root-override trans y))) (< (-> self position) (-> self max-position)) ((method-of-type touching-shapes-entry prims-touching?) - (the-as touching-shapes-entry (-> arg3 param 0)) + (the-as touching-shapes-entry (-> event param 0)) (the-as collide-shape-moving (-> self root-override)) (the-as uint 2) ) @@ -269,7 +269,7 @@ (when (and (< (+ -40960.0 (-> self root-override trans y)) (-> *target* control trans y)) (> (-> self position) 0) ((method-of-type touching-shapes-entry prims-touching?) - (the-as touching-shapes-entry (-> arg3 param 0)) + (the-as touching-shapes-entry (-> event param 0)) (the-as collide-shape-moving (-> self root-override)) (the-as uint 1) ) @@ -598,8 +598,8 @@ ;; failed to figure out what this is: (defstate ecoventrock-idle (ecoventrock) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('attack) (sound-play "cannon-shot") (increment-success-for-hint (game-text-id sidekick-hint-ecorocks)) @@ -1145,15 +1145,15 @@ ;; failed to figure out what this is: (defstate flutflutegg-idle (flutflutegg) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (when (and (= arg2 'attack) - (or (= (-> arg3 param 1) 'punch) (= (-> arg3 param 1) 'spin) (= (-> arg3 param 1) 'spin-air)) - (!= (-> self incomming-attack-id) (-> arg3 param 2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (when (and (= event-type 'attack) + (or (= (-> event param 1) 'punch) (= (-> event param 1) 'spin) (= (-> event param 1) 'spin-air)) + (!= (-> self incomming-attack-id) (-> event param 2)) ) - (set! (-> self incomming-attack-id) (-> arg3 param 2)) + (set! (-> self incomming-attack-id) (-> event param 2)) (flutflutegg-hit-sounds) (let ((s5-1 - (vector-! (new-stack-vector0) (-> (the-as process-drawable arg0) root trans) (-> self root-override trans)) + (vector-! (new-stack-vector0) (-> (the-as process-drawable proc) root trans) (-> self root-override trans)) ) ) (set! (-> s5-1 y) 0.0) @@ -1239,18 +1239,18 @@ ;; failed to figure out what this is: (defstate flutflutegg-physics (flutflutegg) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (the-as object (when (and (>= (- (-> *display* base-frame-counter) (-> self state-time)) (seconds 0.5)) - (= arg2 'attack) - (or (= (-> arg3 param 1) 'punch) (= (-> arg3 param 1) 'spin) (= (-> arg3 param 1) 'spin-air)) - (!= (-> self incomming-attack-id) (-> arg3 param 2)) + (= event-type 'attack) + (or (= (-> event param 1) 'punch) (= (-> event param 1) 'spin) (= (-> event param 1) 'spin-air)) + (!= (-> self incomming-attack-id) (-> event param 2)) ) - (set! (-> self incomming-attack-id) (-> arg3 param 2)) + (set! (-> self incomming-attack-id) (-> event param 2)) (flutflutegg-hit-sounds) (let ((s5-1 - (vector-! (new-stack-vector0) (-> (the-as process-drawable arg0) root trans) (-> self root-override trans)) + (vector-! (new-stack-vector0) (-> (the-as process-drawable proc) root trans) (-> self root-override trans)) ) ) (set! (-> s5-1 y) 0.0) @@ -1508,8 +1508,8 @@ ;; failed to figure out what this is: (defstate harvester-idle (harvester) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('update) (if (and (-> self alt-actor) (logtest? (-> self alt-actor extra perm status) (entity-perm-status complete))) (go harvester-inflate #f) diff --git a/test/decompiler/reference/jak1/levels/beach/beach-rocks_REF.gc b/test/decompiler/reference/jak1/levels/beach/beach-rocks_REF.gc index c15b68b7c3..755000612c 100644 --- a/test/decompiler/reference/jak1/levels/beach/beach-rocks_REF.gc +++ b/test/decompiler/reference/jak1/levels/beach/beach-rocks_REF.gc @@ -295,8 +295,8 @@ ;; failed to figure out what this is: (defstate idle (beach-rock) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('trigger) (set! (-> self trigger) #t) (go-virtual falling) diff --git a/test/decompiler/reference/jak1/levels/beach/pelican_REF.gc b/test/decompiler/reference/jak1/levels/beach/pelican_REF.gc index af6616bfa2..463bfab161 100644 --- a/test/decompiler/reference/jak1/levels/beach/pelican_REF.gc +++ b/test/decompiler/reference/jak1/levels/beach/pelican_REF.gc @@ -231,8 +231,8 @@ ;; failed to figure out what this is: (defstate pelican-circle (pelican) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond @@ -246,7 +246,7 @@ (handle->process (-> self fuel-cell)) ) ((= v1-0 'position) - (set! (-> self path-pos) (the-as float (-> arg3 param 0))) + (set! (-> self path-pos) (the-as float (-> event param 0))) (let ((a1-3 (TODO-RENAME-12 (-> self path) (new 'stack-no-clear 'vector) (-> self path-pos)))) (set-heading-vec! (-> self root-override) a1-3) ) @@ -370,8 +370,8 @@ ;; failed to figure out what this is: (defstate pelican-dive (pelican) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'got-cell?) (-> self state-object) @@ -489,13 +489,13 @@ ;; failed to figure out what this is: (defstate pelican-wait-at-nest (pelican) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'attack) - (case (-> arg3 param 1) + (case (-> event param 1) (('explode) (let ((a0-2 (handle->process (-> self fuel-cell)))) (if a0-2 @@ -506,7 +506,7 @@ #f ) (else - (let* ((gp-0 arg0) + (let* ((gp-0 proc) (v1-13 (if (and (nonzero? gp-0) (type-type? (-> gp-0 type) process-drawable)) gp-0 ) @@ -529,8 +529,8 @@ ((= v1-0 'touch) (send-shove-back (-> self root-override) - arg0 - (the-as touching-shapes-entry (-> arg3 param 0)) + proc + (the-as touching-shapes-entry (-> event param 0)) 0.7 6144.0 16384.0 diff --git a/test/decompiler/reference/jak1/levels/citadel/citadel-obs_REF.gc b/test/decompiler/reference/jak1/levels/citadel/citadel-obs_REF.gc index 0b5cea63fc..4f38bb5e81 100644 --- a/test/decompiler/reference/jak1/levels/citadel/citadel-obs_REF.gc +++ b/test/decompiler/reference/jak1/levels/citadel/citadel-obs_REF.gc @@ -482,10 +482,10 @@ ;; failed to figure out what this is: (defstate citb-disc-idle (citb-disc) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'touch) - (send-event arg0 'no-look-around (seconds 0.25)) + (send-event proc 'no-look-around (seconds 0.25)) #f ) ) @@ -957,12 +957,12 @@ ;; failed to figure out what this is: (defstate citb-robotboss-idle (citb-robotboss) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (local-vars (sv-96 int) (sv-112 int)) (the-as object (cond - ((= arg2 'shield-off) + ((= event-type 'shield-off) (stop! (-> self sound)) (if (-> self shield-on) (sound-play "robotcage-off") @@ -970,17 +970,17 @@ (set! (-> self shield-on) #f) #f ) - ((= arg2 'shield-on) + ((= event-type 'shield-on) (let ((v0-3 #t)) (set! (-> self shield-on) v0-3) v0-3 ) ) - ((= arg2 'die) + ((= event-type 'die) (cleanup-for-death self) (the-as symbol (deactivate self)) ) - ((or (= arg2 'touch) (= arg2 'attack)) + ((or (= event-type 'touch) (= event-type 'attack)) (let ((s4-0 sound-play-by-name) (s3-0 (make-u128 #x7061 (the-as uint #x7a2d646c65696873))) (s2-0 (new-sound-id)) @@ -994,9 +994,9 @@ ) ) (the-as symbol (send-event - arg0 + proc 'shove - (-> arg3 param 0) + (-> event param 0) (static-attack-info ((shove-up (meters 2)) (shove-back (meters 3)))) ) ) @@ -1157,8 +1157,8 @@ ;; failed to figure out what this is: (defstate citb-coil-idle (citb-coil) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('trigger) (go citb-coil-break) ) @@ -1539,8 +1539,8 @@ ;; failed to figure out what this is: (defstate citb-generator-idle (citb-generator) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('attack) (if (-> self mushroom) (increment-success-for-hint (game-text-id citadel-generator)) @@ -1791,8 +1791,8 @@ ;; failed to figure out what this is: (defstate citadelcam-idle (citadelcam) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('trigger) (when (and (task-complete? *game-info* (game-task citadel-sage-blue)) (task-complete? *game-info* (game-task citadel-sage-red)) diff --git a/test/decompiler/reference/jak1/levels/citadel/citadel-sages_REF.gc b/test/decompiler/reference/jak1/levels/citadel/citadel-sages_REF.gc index 811e50684e..05f65fb8a2 100644 --- a/test/decompiler/reference/jak1/levels/citadel/citadel-sages_REF.gc +++ b/test/decompiler/reference/jak1/levels/citadel/citadel-sages_REF.gc @@ -105,9 +105,9 @@ ;; failed to figure out what this is: (defstate citb-sagecage-idle (citb-sagecage) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (local-vars (v0-3 none)) - (let ((v1-0 arg2)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'disable-bars) (stop! (-> self sound)) @@ -474,13 +474,13 @@ ;; failed to figure out what this is: (defstate play-anim (citb-sage) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('disable-bars) (send-event (handle->process (-> self cage)) 'disable-bars) ) (else - ((-> (method-of-type process-taskable play-anim) event) arg0 arg1 arg2 arg3) + ((-> (method-of-type process-taskable play-anim) event) proc arg1 event-type event) ) ) ) @@ -489,13 +489,13 @@ ;; failed to figure out what this is: (defstate idle (citb-sage) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('open) (send-event (handle->process (-> self cage)) 'disable-bars) ) (else - ((-> (method-of-type process-taskable idle) event) arg0 arg1 arg2 arg3) + ((-> (method-of-type process-taskable idle) event) proc arg1 event-type event) ) ) ) @@ -1132,8 +1132,8 @@ ;; failed to figure out what this is: (defstate play-anim (green-sagecage) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('spawn-robot) (let ((gp-0 (entity-by-name "robotboss-3"))) (format 0 "robotboss ent ~A~%" gp-0) @@ -1154,7 +1154,7 @@ ) ) (else - ((-> (method-of-type citb-sage play-anim) event) arg0 arg1 arg2 arg3) + ((-> (method-of-type citb-sage play-anim) event) proc arg1 event-type event) ) ) ) diff --git a/test/decompiler/reference/jak1/levels/citadel/citb-drop-plat_REF.gc b/test/decompiler/reference/jak1/levels/citadel/citb-drop-plat_REF.gc index 7f831904c0..08b21925e5 100644 --- a/test/decompiler/reference/jak1/levels/citadel/citb-drop-plat_REF.gc +++ b/test/decompiler/reference/jak1/levels/citadel/citb-drop-plat_REF.gc @@ -78,8 +78,8 @@ ;; failed to figure out what this is: (defstate drop-plat-idle (drop-plat) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('drop) (logclear! (-> self mask) (process-mask actor-pause)) (go drop-plat-drop) @@ -126,8 +126,8 @@ ;; failed to figure out what this is: (defstate drop-plat-spawn (drop-plat) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('drop) (go drop-plat-die) ) @@ -157,8 +157,8 @@ ;; failed to figure out what this is: (defstate drop-plat-rise (drop-plat) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('drop) (go drop-plat-drop) ) @@ -527,8 +527,8 @@ ;; failed to figure out what this is: (defstate citb-drop-plat-idle (citb-drop-plat) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('trigger) (go citb-drop-plat-active) ) @@ -545,13 +545,13 @@ ;; failed to figure out what this is: (defstate citb-drop-plat-active (citb-drop-plat) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'player-stepped) (when (>= (- (-> *display* base-frame-counter) (-> self drop-time)) (seconds 0.2)) (set! (-> self drop-time) (-> *display* base-frame-counter)) - (citb-drop-plat-drop-children (the-as int (-> arg3 param 0))) + (citb-drop-plat-drop-children (the-as int (-> event param 0))) ) ) ((= v1-0 'trigger) diff --git a/test/decompiler/reference/jak1/levels/citadel/citb-plat_REF.gc b/test/decompiler/reference/jak1/levels/citadel/citb-plat_REF.gc index 0e459b2613..32723149ed 100644 --- a/test/decompiler/reference/jak1/levels/citadel/citb-plat_REF.gc +++ b/test/decompiler/reference/jak1/levels/citadel/citb-plat_REF.gc @@ -343,8 +343,8 @@ ;; failed to figure out what this is: (defstate citb-base-plat-idle (citb-stair-plat) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'trigger) (logclear! (-> self mask) (process-mask actor-pause)) (let ((v0-0 #t)) @@ -1053,13 +1053,13 @@ ;; failed to figure out what this is: (defstate citb-firehose-blast (citb-firehose) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('touch) (send-event - arg0 + proc 'attack - (-> arg3 param 0) + (-> event param 0) (static-attack-info ((mode 'damage) (shove-back (meters 6)) (shove-up (meters 3)))) ) ) @@ -1177,8 +1177,8 @@ ;; failed to figure out what this is: (defstate citb-exit-plat-idle (citb-exit-plat) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('trigger) (let ((v1-3 (-> self entity extra perm))) (logior! (-> v1-3 status) (entity-perm-status user-set-from-cstage)) diff --git a/test/decompiler/reference/jak1/levels/common/basebutton_REF.gc b/test/decompiler/reference/jak1/levels/common/basebutton_REF.gc index 5fb6020d23..992b408edc 100644 --- a/test/decompiler/reference/jak1/levels/common/basebutton_REF.gc +++ b/test/decompiler/reference/jak1/levels/common/basebutton_REF.gc @@ -96,10 +96,10 @@ ;; failed to figure out what this is: (defstate basebutton-up-idle (basebutton) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('attack) - (case (-> arg3 param 1) + (case (-> event param 1) (('flop) (TODO-RENAME-29 self (-> self event-going-down) (-> self notify-actor)) (sound-play "silo-button") @@ -112,7 +112,7 @@ (go-virtual basebutton-going-down) ) (('move-to) - (move-to-vec-or-quat! self (the-as vector (-> arg3 param 0)) (the-as quaternion (-> arg3 param 1))) + (move-to-vec-or-quat! self (the-as vector (-> event param 0)) (the-as quaternion (-> event param 1))) ) ) ) @@ -141,14 +141,14 @@ ;; failed to figure out what this is: (defstate basebutton-going-down (basebutton) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('untrigger) (sound-play "silo-button") (go-virtual basebutton-going-up) ) (('move-to) - (move-to-vec-or-quat! self (the-as vector (-> arg3 param 0)) (the-as quaternion (-> arg3 param 1))) + (move-to-vec-or-quat! self (the-as vector (-> event param 0)) (the-as quaternion (-> event param 1))) ) ) ) @@ -181,14 +181,14 @@ ;; failed to figure out what this is: (defstate basebutton-down-idle (basebutton) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('untrigger) (sound-play "silo-button") (go-virtual basebutton-going-up) ) (('move-to) - (move-to-vec-or-quat! self (the-as vector (-> arg3 param 0)) (the-as quaternion (-> arg3 param 1))) + (move-to-vec-or-quat! self (the-as vector (-> event param 0)) (the-as quaternion (-> event param 1))) ) ) ) @@ -233,10 +233,10 @@ ;; failed to figure out what this is: (defstate basebutton-going-up (basebutton) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('move-to) - (move-to-vec-or-quat! self (the-as vector (-> arg3 param 0)) (the-as quaternion (-> arg3 param 1))) + (move-to-vec-or-quat! self (the-as vector (-> event param 0)) (the-as quaternion (-> event param 1))) ) (('trigger) (sound-play "silo-button") @@ -592,8 +592,8 @@ ;; failed to figure out what this is: (defstate target-warp-out (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('death-end) (let ((v0-0 (the-as object (logior (-> self draw status) (draw-status hidden))))) (set! (-> self draw status) (the-as draw-status v0-0)) @@ -601,7 +601,7 @@ ) ) (else - (target-generic-event-handler arg0 arg1 arg2 arg3) + (target-generic-event-handler proc arg1 event-type event) ) ) ) diff --git a/test/decompiler/reference/jak1/levels/common/orb-cache_REF.gc b/test/decompiler/reference/jak1/levels/common/orb-cache_REF.gc index 31a1e481ef..7dbf45a09d 100644 --- a/test/decompiler/reference/jak1/levels/common/orb-cache_REF.gc +++ b/test/decompiler/reference/jak1/levels/common/orb-cache_REF.gc @@ -55,8 +55,8 @@ ;; failed to figure out what this is: (defstate orb-cache-top-idle (orb-cache-top) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('eco-blue) (process-entity-status! self (entity-perm-status complete) #t) (dotimes (gp-0 5) @@ -66,7 +66,7 @@ (go orb-cache-top-activate #f) ) (else - (plat-event arg0 arg1 arg2 arg3) + (plat-event proc arg1 event-type event) ) ) ) diff --git a/test/decompiler/reference/jak1/levels/common/plat-button_REF.gc b/test/decompiler/reference/jak1/levels/common/plat-button_REF.gc index f42459f123..9825fe4110 100644 --- a/test/decompiler/reference/jak1/levels/common/plat-button_REF.gc +++ b/test/decompiler/reference/jak1/levels/common/plat-button_REF.gc @@ -73,12 +73,12 @@ ;; failed to figure out what this is: (defstate plat-button-idle (plat-button) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('touch) (when (can-activate? self) (if (and ((method-of-type touching-shapes-entry prims-touching?) - (the-as touching-shapes-entry (-> arg3 param 0)) + (the-as touching-shapes-entry (-> event param 0)) (-> self root-override) (the-as uint 1) ) @@ -189,8 +189,8 @@ ;; failed to figure out what this is: (defstate plat-button-move-downward (plat-button) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (the-as object (when (or (= arg2 'touch) (= arg2 'attack)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (the-as object (when (or (= event-type 'touch) (= event-type 'attack)) (set! (-> self state-time) (-> *display* base-frame-counter)) #f ) @@ -264,8 +264,8 @@ ;; failed to figure out what this is: (defstate plat-button-move-upward (plat-button) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (the-as object (when (or (= arg2 'touch) (= arg2 'attack)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (the-as object (when (or (= event-type 'touch) (= event-type 'attack)) (set! (-> self state-time) (-> *display* base-frame-counter)) #f ) diff --git a/test/decompiler/reference/jak1/levels/common/plat-eco_REF.gc b/test/decompiler/reference/jak1/levels/common/plat-eco_REF.gc index 7c5b734e71..42f8eadb73 100644 --- a/test/decompiler/reference/jak1/levels/common/plat-eco_REF.gc +++ b/test/decompiler/reference/jak1/levels/common/plat-eco_REF.gc @@ -52,13 +52,13 @@ ;; failed to figure out what this is: (defstate plat-idle (plat-eco) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('wake) (go-virtual plat-path-active (the-as plat #f)) ) (('eco-blue) - (go-virtual notice-blue (process->handle arg0)) + (go-virtual notice-blue (process->handle proc)) ) (('ridden 'edge-grabbed) (when (send-event *target* 'query 'powerup (pickup-type eco-blue)) @@ -100,8 +100,8 @@ ;; failed to figure out what this is: (defstate notice-blue (plat-eco) :virtual override - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('wake) (sound-play "blue-eco-on" :position (the-as symbol (-> self root-override trans))) (go-virtual plat-path-active (the-as plat #f)) diff --git a/test/decompiler/reference/jak1/levels/common/ropebridge_REF.gc b/test/decompiler/reference/jak1/levels/common/ropebridge_REF.gc index 393185cd7c..4775f7e040 100644 --- a/test/decompiler/reference/jak1/levels/common/ropebridge_REF.gc +++ b/test/decompiler/reference/jak1/levels/common/ropebridge_REF.gc @@ -611,20 +611,20 @@ ;; failed to figure out what this is: (defstate ropebridge-idle (ropebridge) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (let ((f0-0 -1.0)) (cond - ((= arg2 'bonk) + ((= event-type 'bonk) (when (>= (- (-> *display* base-frame-counter) (-> self bonk-time-stamp)) (seconds 0.2)) (set! (-> self bonk-time-stamp) (-> *display* base-frame-counter)) - (set! f0-0 (the-as float (-> arg3 param 1))) + (set! f0-0 (the-as float (-> event param 1))) (if (>= f0-0 (-> self tuning rider-bonk-max)) (set! f0-0 (-> self tuning rider-bonk-max)) ) ) ) - ((and (= arg2 'attack) (= (-> arg3 param 1) 'flop)) - (let ((v1-17 (-> arg3 param 2))) + ((and (= event-type 'attack) (= (-> event param 1) 'flop)) + (let ((v1-17 (-> event param 2))) (when (!= v1-17 (-> self player-attack-id)) (set! (-> self player-attack-id) v1-17) (set! (-> self attack-flop-time-stamp) (-> *display* base-frame-counter)) @@ -635,13 +635,13 @@ ) (the-as object - (when (and (>= f0-0 (-> self tuning rider-bonk-min)) (-> arg3 param 0)) + (when (and (>= f0-0 (-> self tuning rider-bonk-min)) (-> event param 0)) (set! (-> self agitated-time-stamp) (-> *display* base-frame-counter)) (let* ((f30-0 (/ (* (- f0-0 (-> self tuning rider-bonk-min)) (-> self tuning rider-bonk-force)) (- (-> self tuning rider-bonk-max) (-> self tuning rider-bonk-min)) ) ) - (gp-0 (the-as object (-> arg3 param 0))) + (gp-0 (the-as object (-> event param 0))) (a0-7 (-> (the-as touching-shapes-entry gp-0) head)) (s4-0 (-> self root-override)) (s5-0 (get-touched-prim a0-7 s4-0 (the-as touching-shapes-entry gp-0))) 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 401e74e9c6..c8a16cab7d 100644 --- a/test/decompiler/reference/jak1/levels/common/water-anim_REF.gc +++ b/test/decompiler/reference/jak1/levels/common/water-anim_REF.gc @@ -553,10 +553,10 @@ ;; failed to figure out what this is: (defstate water-vol-idle (water-anim) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'move-to) - (set! (-> self root trans quad) (-> (the-as vector (-> arg3 param 0)) quad)) + (set! (-> self root trans quad) (-> (the-as vector (-> event param 0)) quad)) (set! (-> self water-height) (-> self root trans y)) (if (nonzero? (-> self sound)) (update-trans! (-> self sound) (-> self root trans)) diff --git a/test/decompiler/reference/jak1/levels/darkcave/darkcave-obs_REF.gc b/test/decompiler/reference/jak1/levels/darkcave/darkcave-obs_REF.gc index b8b5b6a0fd..8059a3ca49 100644 --- a/test/decompiler/reference/jak1/levels/darkcave/darkcave-obs_REF.gc +++ b/test/decompiler/reference/jak1/levels/darkcave/darkcave-obs_REF.gc @@ -115,8 +115,8 @@ ;; failed to figure out what this is: (defstate cavecrystal-idle (cavecrystal) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('attack) (go cavecrystal-active) ) @@ -145,10 +145,10 @@ ;; failed to figure out what this is: (defstate cavecrystal-active (cavecrystal) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'attack) - (let ((v1-1 (-> arg3 param 2))) + (let ((v1-1 (-> event param 2))) (cond ((!= v1-1 (-> self player-attack-id)) (set! (-> self player-attack-id) v1-1) diff --git a/test/decompiler/reference/jak1/levels/finalboss/final-door_REF.gc b/test/decompiler/reference/jak1/levels/finalboss/final-door_REF.gc index b309b1f601..7f6f3e735d 100644 --- a/test/decompiler/reference/jak1/levels/finalboss/final-door_REF.gc +++ b/test/decompiler/reference/jak1/levels/finalboss/final-door_REF.gc @@ -88,8 +88,8 @@ ;; failed to figure out what this is: (defstate idle (final-door) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('open) (go-virtual open #f) ) @@ -107,11 +107,11 @@ ;; failed to figure out what this is: (defstate open (final-door) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'brightness) - (let ((f0-0 (the-as float (-> arg3 param 0))) - (f1-0 (the-as float (-> arg3 param 1))) + (let ((f0-0 (the-as float (-> event param 0))) + (f1-0 (the-as float (-> event param 1))) ) (set-vector! (-> self draw color-mult) f0-0 f0-0 f0-0 f0-0) (let ((v0-0 (-> self draw color-emissive))) @@ -382,8 +382,8 @@ ;; failed to figure out what this is: (defstate target-final-door (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - ((-> target-grab event) arg0 arg1 arg2 arg3) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + ((-> target-grab event) proc arg1 event-type event) ) :enter (behavior ((arg0 basic) (arg1 handle)) (send-event *camera* 'change-to-entity-by-name "camera-403") diff --git a/test/decompiler/reference/jak1/levels/finalboss/green-eco-lurker_REF.gc b/test/decompiler/reference/jak1/levels/finalboss/green-eco-lurker_REF.gc index 6705ebefdf..7ee6dddc9a 100644 --- a/test/decompiler/reference/jak1/levels/finalboss/green-eco-lurker_REF.gc +++ b/test/decompiler/reference/jak1/levels/finalboss/green-eco-lurker_REF.gc @@ -828,8 +828,8 @@ ;; failed to figure out what this is: (defstate spawn-minions (green-eco-lurker-gen) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('blob-died) (set! (-> self num-alive) (max 0 (+ (-> self num-alive) -1))) (send-event (ppointer->process (-> self parent)) 'blob-died) diff --git a/test/decompiler/reference/jak1/levels/finalboss/robotboss-misc_REF.gc b/test/decompiler/reference/jak1/levels/finalboss/robotboss-misc_REF.gc index a6466ca346..2ee619a3fc 100644 --- a/test/decompiler/reference/jak1/levels/finalboss/robotboss-misc_REF.gc +++ b/test/decompiler/reference/jak1/levels/finalboss/robotboss-misc_REF.gc @@ -14,11 +14,11 @@ ;; failed to figure out what this is: (defstate cam-robotboss (camera-slave) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('set-pivot) (let ((v0-0 (the-as object (-> self pivot-pt)))) - (set! (-> (the-as vector v0-0) quad) (-> (the-as vector (-> arg3 param 0)) quad)) + (set! (-> (the-as vector v0-0) quad) (-> (the-as vector (-> event param 0)) quad)) v0-0 ) ) @@ -26,7 +26,7 @@ #f ) (else - (cam-standard-event-handler arg0 arg1 arg2 arg3) + (cam-standard-event-handler proc arg1 event-type event) ) ) ) @@ -344,10 +344,10 @@ ;; failed to figure out what this is: (defstate idle (silodoor) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('open) - (set! (-> self part-opened) (the-as float (-> arg3 param 0))) + (set! (-> self part-opened) (the-as float (-> event param 0))) ) (('hide) (go-virtual hidden) diff --git a/test/decompiler/reference/jak1/levels/finalboss/robotboss-weapon_REF.gc b/test/decompiler/reference/jak1/levels/finalboss/robotboss-weapon_REF.gc index aa28d9984f..5e54ecf0e5 100644 --- a/test/decompiler/reference/jak1/levels/finalboss/robotboss-weapon_REF.gc +++ b/test/decompiler/reference/jak1/levels/finalboss/robotboss-weapon_REF.gc @@ -914,11 +914,11 @@ ;; failed to figure out what this is: (defstate yellowshot-idle (yellowshot) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('touch 'attack) - (when (= (-> arg0 type) target) - (send-event *target* 'attack (-> arg3 param 0) (static-attack-info ((mode 'generic)))) + (when (= (-> proc type) target) + (send-event *target* 'attack (-> event param 0) (static-attack-info ((mode 'generic)))) (send-event (ppointer->process (-> self parent)) 'hit-jak) ) ) diff --git a/test/decompiler/reference/jak1/levels/finalboss/robotboss_REF.gc b/test/decompiler/reference/jak1/levels/finalboss/robotboss_REF.gc index 5995100516..e9b3fe9461 100644 --- a/test/decompiler/reference/jak1/levels/finalboss/robotboss_REF.gc +++ b/test/decompiler/reference/jak1/levels/finalboss/robotboss_REF.gc @@ -439,8 +439,8 @@ ;; failed to figure out what this is: (defstate robotboss-yellow-dark-bomb-wait (robotboss) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'white-eco-picked-up) (close-specific-task! (game-task finalboss-movies) (task-status unknown)) @@ -464,7 +464,7 @@ (deactivate self) ) (else - (robotboss-bomb-handler arg0 arg1 arg2 arg3) + (robotboss-bomb-handler proc arg1 event-type event) ) ) ) @@ -923,8 +923,8 @@ ;; failed to figure out what this is: (defstate robotboss-yellow-wait (robotboss) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('hit-jak) (let ((f0-2 (rand-float-gen))) (cond @@ -952,7 +952,7 @@ ) ) (else - (robotboss-handler arg0 arg1 arg2 arg3) + (robotboss-handler proc arg1 event-type event) ) ) ) @@ -1523,8 +1523,8 @@ ;; failed to figure out what this is: (defstate robotboss-red-wait (robotboss) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('hit-jak) (let ((f0-2 (rand-float-gen))) (cond @@ -1552,7 +1552,7 @@ ) ) (else - (robotboss-handler arg0 arg1 arg2 arg3) + (robotboss-handler proc arg1 event-type event) ) ) ) @@ -1981,8 +1981,8 @@ ;; failed to figure out what this is: (defstate robotboss-green-wait (robotboss) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('trigger) (ja-channel-push! 1 (seconds 0.2)) (ja :group! robotboss-green-roar-ja) @@ -2040,7 +2040,7 @@ ) ) (else - (robotboss-handler arg0 arg1 arg2 arg3) + (robotboss-handler proc arg1 event-type event) ) ) ) diff --git a/test/decompiler/reference/jak1/levels/finalboss/sage-finalboss_REF.gc b/test/decompiler/reference/jak1/levels/finalboss/sage-finalboss_REF.gc index ae47f219ac..593a59ba68 100644 --- a/test/decompiler/reference/jak1/levels/finalboss/sage-finalboss_REF.gc +++ b/test/decompiler/reference/jak1/levels/finalboss/sage-finalboss_REF.gc @@ -88,11 +88,11 @@ ;; failed to figure out what this is: (defstate plat-path-active (plat-eco-finalboss) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('target) (process-entity-status! self (entity-perm-status complete) #t) - (set! (-> self force-dest) (the-as float (-> arg3 param 0))) + (set! (-> self force-dest) (the-as float (-> event param 0))) ) (('ridden 'edge-grabbed) (if (>= (- (-> *display* base-frame-counter) (-> self touch-time)) (seconds 2)) @@ -114,7 +114,7 @@ #f ) (else - (plat-event arg0 arg1 arg2 arg3) + (plat-event proc arg1 event-type event) ) ) ) @@ -629,8 +629,8 @@ ;; failed to figure out what this is: (defstate play-anim (sage-finalboss) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('fade) (set! (-> self credit-fade) 1.0) ) @@ -639,12 +639,12 @@ ) (('activate-particle) (let ((v0-0 (the-as object #t))) - (set! (-> self particle (-> arg3 param 0) active) (the-as symbol v0-0)) + (set! (-> self particle (-> event param 0) active) (the-as symbol v0-0)) v0-0 ) ) (('deactivate-particle) - (set! (-> self particle (-> arg3 param 0) active) #f) + (set! (-> self particle (-> event param 0) active) #f) #f ) ) diff --git a/test/decompiler/reference/jak1/levels/firecanyon/firecanyon-obs_REF.gc b/test/decompiler/reference/jak1/levels/firecanyon/firecanyon-obs_REF.gc index a9bd6b6b89..110bfa711c 100644 --- a/test/decompiler/reference/jak1/levels/firecanyon/firecanyon-obs_REF.gc +++ b/test/decompiler/reference/jak1/levels/firecanyon/firecanyon-obs_REF.gc @@ -124,10 +124,10 @@ ;; failed to figure out what this is: (defstate balloon-idle (balloon) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('attack) - (send-event arg0 'heat -10.0) + (send-event proc 'heat -10.0) (go balloon-popping) ) ) @@ -202,8 +202,8 @@ ;; failed to figure out what this is: (defstate spike-up (spike) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (if (= v1-0 'go-spike-up) #t ) @@ -254,8 +254,8 @@ ;; failed to figure out what this is: (defstate spike-down (spike) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'go-spike-up) (go spike-up) #t @@ -647,10 +647,10 @@ ;; failed to figure out what this is: (defstate idle (crate-darkeco-cluster) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('attack 'touch) - (send-event arg0 'attack (-> arg3 param 0) (static-attack-info ((mode 'darkeco)))) + (send-event proc 'attack (-> event param 0) (static-attack-info ((mode 'darkeco)))) (go-virtual die) ) ) diff --git a/test/decompiler/reference/jak1/levels/flut_common/flutflut_REF.gc b/test/decompiler/reference/jak1/levels/flut_common/flutflut_REF.gc index dd07b00530..a97742e079 100644 --- a/test/decompiler/reference/jak1/levels/flut_common/flutflut_REF.gc +++ b/test/decompiler/reference/jak1/levels/flut_common/flutflut_REF.gc @@ -92,13 +92,13 @@ ;; failed to figure out what this is: (defstate wait-for-start (flutflut) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'trans) - (vector+! (the-as vector (-> arg3 param 0)) (-> self root-override trans) (-> self extra-trans)) + (vector+! (the-as vector (-> event param 0)) (-> self root-override trans) (-> self extra-trans)) ) ((= v1-0 'notify) (let ((v0-1 (the-as structure #t))) @@ -261,8 +261,8 @@ ;; failed to figure out what this is: (defstate pickup (flutflut) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('draw) (ja-channel-set! 1) (ja :group! (-> self draw art-group data 3)) @@ -271,7 +271,7 @@ (transform-post) ) (('trans) - (vector+! (the-as vector (-> arg3 param 0)) (-> self root-override trans) (-> self extra-trans)) + (vector+! (the-as vector (-> event param 0)) (-> self root-override trans) (-> self extra-trans)) ) (('touch 'attack) #f @@ -312,14 +312,14 @@ ;; failed to figure out what this is: (defstate wait-for-return (flutflut) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (if (and (or (= arg2 'touch) (= arg2 'attack)) (send-event *target* 'end-mode)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (if (and (or (= event-type 'touch) (= event-type 'attack)) (send-event *target* 'end-mode)) (go-virtual pickup (method-of-object self idle)) ) (the-as object - (if (= arg2 'trans) - (vector+! (the-as vector (-> arg3 param 0)) (-> self root-override trans) (-> self extra-trans)) + (if (= event-type 'trans) + (vector+! (the-as vector (-> event param 0)) (-> self root-override trans) (-> self extra-trans)) ) ) ) diff --git a/test/decompiler/reference/jak1/levels/flut_common/target-flut_REF.gc b/test/decompiler/reference/jak1/levels/flut_common/target-flut_REF.gc index edb91b49e9..e5a1272c94 100644 --- a/test/decompiler/reference/jak1/levels/flut_common/target-flut_REF.gc +++ b/test/decompiler/reference/jak1/levels/flut_common/target-flut_REF.gc @@ -792,10 +792,10 @@ ;; failed to figure out what this is: (defstate target-flut-jump (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (when (and (= arg2 'touched) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (when (and (= event-type 'touched) ((method-of-type touching-shapes-entry prims-touching?) - (the-as touching-shapes-entry (-> arg3 param 0)) + (the-as touching-shapes-entry (-> event param 0)) (-> self control) (the-as uint 6) ) @@ -806,22 +806,22 @@ ) ) ) - (send-event arg0 'bonk (-> arg3 param 0) (-> self control ground-impact-vel)) + (send-event proc 'bonk (-> event param 0) (-> self control ground-impact-vel)) (when (target-send-attack - arg0 + proc (the-as uint 'flut-bonk) - (the-as touching-shapes-entry (-> arg3 param 0)) + (the-as touching-shapes-entry (-> event param 0)) (-> self control unknown-dword50) (-> self control unknown-dword51) ) ) ) - (case arg2 + (case event-type (('jump) - (go target-flut-jump (the-as float (-> arg3 param 0)) (the-as float (-> arg3 param 0))) + (go target-flut-jump (the-as float (-> event param 0)) (the-as float (-> event param 0))) ) (else - (target-flut-standard-event-handler arg0 arg1 arg2 arg3) + (target-flut-standard-event-handler proc arg1 event-type event) ) ) ) @@ -1191,19 +1191,19 @@ ;; failed to figure out what this is: (defstate target-flut-running-attack (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('touched) (cond (((method-of-type touching-shapes-entry prims-touching?) - (the-as touching-shapes-entry (-> arg3 param 0)) + (the-as touching-shapes-entry (-> event param 0)) (-> self control) (the-as uint 224) ) (let ((gp-1 (target-send-attack - arg0 + proc (the-as uint (-> self control unknown-symbol30)) - (the-as touching-shapes-entry (-> arg3 param 0)) + (the-as touching-shapes-entry (-> event param 0)) (-> self control unknown-dword50) (-> self control unknown-dword51) ) @@ -1211,8 +1211,8 @@ ) (when gp-1 (set! (-> self control unknown-uint20) (the-as uint (-> *display* base-frame-counter))) - (let ((v1-9 (if (and (nonzero? arg0) (type-type? (-> arg0 type) process-drawable)) - arg0 + (let ((v1-9 (if (and (nonzero? proc) (type-type? (-> proc type) process-drawable)) + proc ) ) ) @@ -1243,12 +1243,12 @@ ) ) (else - (target-flut-dangerous-event-handler arg0 arg1 arg2 arg3) + (target-flut-dangerous-event-handler proc arg1 event-type event) ) ) ) (else - (target-flut-dangerous-event-handler arg0 arg1 arg2 arg3) + (target-flut-dangerous-event-handler proc arg1 event-type event) ) ) ) @@ -1460,10 +1460,10 @@ ;; failed to figure out what this is: (defstate target-flut-air-attack (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (if (and (= arg2 'touched) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (if (and (= event-type 'touched) ((method-of-type touching-shapes-entry prims-touching?) - (the-as touching-shapes-entry (-> arg3 param 0)) + (the-as touching-shapes-entry (-> event param 0)) (-> self control) (the-as uint 6) ) @@ -1474,14 +1474,14 @@ ) ) ) - (send-event arg0 'bonk (-> arg3 param 0) (-> self control ground-impact-vel)) + (send-event proc 'bonk (-> event param 0) (-> self control ground-impact-vel)) ) - (case arg2 + (case event-type (('jump) - (go target-flut-jump (the-as float (-> arg3 param 0)) (the-as float (-> arg3 param 0))) + (go target-flut-jump (the-as float (-> event param 0)) (the-as float (-> event param 0))) ) (else - (target-flut-dangerous-event-handler arg0 arg1 arg2 arg3) + (target-flut-dangerous-event-handler proc arg1 event-type event) ) ) ) @@ -2161,21 +2161,21 @@ ;; failed to figure out what this is: (defstate target-flut-grab (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (cond - ((and (= arg2 'query) (= (-> arg3 param 0) 'mode)) + ((and (= event-type 'query) (= (-> event param 0) 'mode)) (-> self state name) ) (else - (case arg2 + (case event-type (('end-mode) (go target-flut-stance) ) (('clone-anim) - (go target-flut-clone-anim (process->handle (the-as process (-> arg3 param 0)))) + (go target-flut-clone-anim (process->handle (the-as process (-> event param 0)))) ) (else - (target-generic-event-handler arg0 arg1 arg2 arg3) + (target-generic-event-handler proc arg1 event-type event) ) ) ) @@ -2203,11 +2203,11 @@ ;; failed to figure out what this is: (defstate target-flut-clone-anim (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (if (and (= arg2 'trans) (= (-> arg3 param 0) 'restore)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (if (and (= event-type 'trans) (= (-> event param 0) 'restore)) (set! (-> self control unknown-uint20) (the-as uint #f)) ) - ((-> target-flut-grab event) arg0 arg1 arg2 arg3) + ((-> target-flut-grab event) proc arg1 event-type event) ) :enter (-> target-clone-anim enter) :exit (behavior () diff --git a/test/decompiler/reference/jak1/levels/jungle/bouncer_REF.gc b/test/decompiler/reference/jak1/levels/jungle/bouncer_REF.gc index 92bed6abce..c1d78d83db 100644 --- a/test/decompiler/reference/jak1/levels/jungle/bouncer_REF.gc +++ b/test/decompiler/reference/jak1/levels/jungle/bouncer_REF.gc @@ -40,10 +40,10 @@ ;; failed to figure out what this is: (defstate bouncer-wait (springbox) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('bonk) - (when (send-event arg0 'jump (-> self spring-height) (-> self spring-height) #f) + (when (send-event proc 'jump (-> self spring-height) (-> self spring-height) #f) (sound-play "trampoline") (go bouncer-fire) ) @@ -54,7 +54,7 @@ ) ) (('attack) - (when (and (= (-> arg3 param 1) 'flop) (send-event arg0 'jump (-> self spring-height) (-> self spring-height) #f)) + (when (and (= (-> event param 1) 'flop) (send-event proc 'jump (-> self spring-height) (-> self spring-height) #f)) (go bouncer-fire) #f ) @@ -74,14 +74,14 @@ ;; failed to figure out what this is: (defstate bouncer-smush (springbox) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('touch) (set! (-> self state-time) (-> *display* base-frame-counter)) #f ) (else - ((-> bouncer-wait event) arg0 arg1 arg2 arg3) + ((-> bouncer-wait event) proc arg1 event-type event) ) ) ) diff --git a/test/decompiler/reference/jak1/levels/jungle/fisher_REF.gc b/test/decompiler/reference/jak1/levels/jungle/fisher_REF.gc index 48a617d27d..15bf462658 100644 --- a/test/decompiler/reference/jak1/levels/jungle/fisher_REF.gc +++ b/test/decompiler/reference/jak1/levels/jungle/fisher_REF.gc @@ -1625,18 +1625,18 @@ ;; failed to figure out what this is: (defstate fisher-playing (fisher) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (local-vars (v0-2 object)) - (case arg2 + (case event-type (('fisher-fish-die) (sound-play "fish-miss") - (set! v0-2 (+ (-> self missed) (-> arg3 param 0))) + (set! v0-2 (+ (-> self missed) (-> event param 0))) (set! (-> self missed) (the-as int v0-2)) v0-2 ) (('fisher-fish-caught) (send-event *target* 'bounce) - (set! v0-2 (+ (-> self caught) (-> arg3 param 0))) + (set! v0-2 (+ (-> self caught) (-> event param 0))) (set! (-> self caught) (the-as int v0-2)) v0-2 ) @@ -1822,9 +1822,9 @@ ;; failed to figure out what this is: (defstate play-accept (fisher) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (local-vars (v0-0 rgbaf)) - (let ((v1-0 arg2)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'emissive-on) (set-vector! (-> self draw color-mult) 0.6 0.6 0.6 1.0) @@ -2124,18 +2124,18 @@ ;; failed to figure out what this is: (defstate target-fishing (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (cond - ((= arg2 'bounce) + ((= event-type 'bounce) (set-zero! (-> self control unknown-smush00)) (activate! (-> self control unknown-smush00) 1.0 120 210 0.3 1.0) ) - ((= arg2 'lose) - (set! (-> self control unknown-uint20) (the-as uint arg2)) - arg2 + ((= event-type 'lose) + (set! (-> self control unknown-uint20) (the-as uint event-type)) + event-type ) (else - ((-> target-grab event) arg0 arg1 arg2 arg3) + ((-> target-grab event) proc arg1 event-type event) ) ) ) diff --git a/test/decompiler/reference/jak1/levels/jungle/jungle-mirrors_REF.gc b/test/decompiler/reference/jak1/levels/jungle/jungle-mirrors_REF.gc index 8d7403aa58..059dfbb672 100644 --- a/test/decompiler/reference/jak1/levels/jungle/jungle-mirrors_REF.gc +++ b/test/decompiler/reference/jak1/levels/jungle/jungle-mirrors_REF.gc @@ -1286,8 +1286,8 @@ ;; failed to figure out what this is: (defstate periscope-idle (periscope) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('activate) (logclear! (-> self mask) (process-mask actor-pause)) (go periscope-activate) @@ -1392,8 +1392,8 @@ ;; failed to figure out what this is: (defstate periscope-wait-for-player (periscope) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('touch) (when (and *target* (not (and (logtest? (-> *target* control unknown-surface00 flags) (surface-flags jump)) (zero? (logand (-> *target* control status) (cshape-moving-flags onsurf))) @@ -1401,7 +1401,7 @@ ) ) (when ((method-of-type touching-shapes-entry prims-touching?) - (the-as touching-shapes-entry (-> arg3 param 0)) + (the-as touching-shapes-entry (-> event param 0)) (the-as collide-shape-moving (-> self root-override)) (the-as uint 1) ) @@ -1946,8 +1946,8 @@ ;; failed to figure out what this is: (defstate reflector-mirror-idle (reflector-mirror) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('attack) (sound-play "mirror-smash") (go reflector-mirror-broken #f) diff --git a/test/decompiler/reference/jak1/levels/jungle/jungle-obs_REF.gc b/test/decompiler/reference/jak1/levels/jungle/jungle-obs_REF.gc index 31bcd57ddd..049d5484b7 100644 --- a/test/decompiler/reference/jak1/levels/jungle/jungle-obs_REF.gc +++ b/test/decompiler/reference/jak1/levels/jungle/jungle-obs_REF.gc @@ -58,9 +58,9 @@ ;; failed to figure out what this is: (defstate idle (logtrap) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (if (or (= arg2 'touch) (= arg2 'attack)) - (send-event arg0 'attack (-> arg3 param 0) (new 'static 'attack-info)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (if (or (= event-type 'touch) (= event-type 'attack)) + (send-event proc 'attack (-> event param 0) (new 'static 'attack-info)) ) ) :code (behavior () @@ -210,8 +210,8 @@ ;; failed to figure out what this is: (defstate lurkerm-tall-sail-idle (lurkerm-tall-sail) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'stop) (process-entity-status! self (entity-perm-status complete) #t) (set! (-> self speed) 0.0) @@ -316,8 +316,8 @@ ;; failed to figure out what this is: (defstate lurkerm-short-sail-idle (lurkerm-short-sail) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'stop) (process-entity-status! self (entity-perm-status complete) #t) (set! (-> self speed) 0.0) @@ -445,8 +445,8 @@ ;; failed to figure out what this is: (defstate lurkerm-piston-idle (lurkerm-piston) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'stop) (process-entity-status! self (entity-perm-status complete) #t) (set! (-> self speed) 0.0) @@ -572,8 +572,8 @@ ;; failed to figure out what this is: (defstate accordian-idle (accordian) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'stop) (process-entity-status! self (entity-perm-status complete) #t) (set! (-> self speed) 0.0) @@ -750,8 +750,8 @@ ;; failed to figure out what this is: (defstate precurbridge-idle (precurbridge) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('go) (go precurbridge-activate) ) @@ -837,12 +837,12 @@ ;; failed to figure out what this is: (defstate precurbridge-active (precurbridge) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'bonk) - (let* ((gp-0 (the-as object (-> arg3 param 0))) + (let* ((gp-0 (the-as object (-> event param 0))) (a0-2 (-> (the-as touching-shapes-entry gp-0) head)) (s5-0 (-> self root-override)) ) diff --git a/test/decompiler/reference/jak1/levels/jungleb/jungleb-obs_REF.gc b/test/decompiler/reference/jak1/levels/jungleb/jungleb-obs_REF.gc index c3ecbf09c4..22e186ec17 100644 --- a/test/decompiler/reference/jak1/levels/jungleb/jungleb-obs_REF.gc +++ b/test/decompiler/reference/jak1/levels/jungleb/jungleb-obs_REF.gc @@ -198,12 +198,12 @@ ;; failed to figure out what this is: (defstate eggtop-idle (eggtop) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'notify) - (case (-> arg3 param 0) + (case (-> event param 0) (('pickup) - (if (type-type? (-> arg0 type) fuel-cell) + (if (type-type? (-> proc type) fuel-cell) (save-reminder (get-task-control (-> self entity extra perm task)) 1 0) ) ) diff --git a/test/decompiler/reference/jak1/levels/jungleb/plant-boss_REF.gc b/test/decompiler/reference/jak1/levels/jungleb/plant-boss_REF.gc index d6a96d46c8..d48e5a5f99 100644 --- a/test/decompiler/reference/jak1/levels/jungleb/plant-boss_REF.gc +++ b/test/decompiler/reference/jak1/levels/jungleb/plant-boss_REF.gc @@ -289,13 +289,13 @@ ;; failed to figure out what this is: (defstate plant-boss-arm-idle (plant-boss-arm) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('hide 'die) - (go plant-boss-arm-die (the-as symbol (-> arg3 param 0))) + (go plant-boss-arm-die (the-as symbol (-> event param 0))) ) (('hit) - (go plant-boss-arm-hit (the-as basic (-> arg3 param 0))) + (go plant-boss-arm-hit (the-as basic (-> event param 0))) ) ) ) @@ -407,16 +407,16 @@ ;; failed to figure out what this is: (defstate plant-boss-back-arms-idle (plant-boss-arm) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (if (or (= arg2 'touch) (= arg2 'attack)) - (send-event arg0 'attack (-> arg3 param 0) (new 'static 'attack-info)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (if (or (= event-type 'touch) (= event-type 'attack)) + (send-event proc 'attack (-> event param 0) (new 'static 'attack-info)) ) (cond - ((= arg2 'hit) - (go plant-boss-back-arms-hit (the-as symbol (-> arg3 param 0))) + ((= event-type 'hit) + (go plant-boss-back-arms-hit (the-as symbol (-> event param 0))) ) - ((= arg2 'die) - (go plant-boss-back-arms-die (the-as symbol (-> arg3 param 0))) + ((= event-type 'die) + (go plant-boss-back-arms-die (the-as symbol (-> event param 0))) ) ) ) @@ -502,13 +502,13 @@ ;; failed to figure out what this is: (defstate plant-boss-vine-idle (plant-boss-arm) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('hide 'die) - (go plant-boss-vine-die (the-as symbol (-> arg3 param 0))) + (go plant-boss-vine-die (the-as symbol (-> event param 0))) ) (('hit) - (go plant-boss-vine-hit (the-as basic (-> arg3 param 0))) + (go plant-boss-vine-hit (the-as basic (-> event param 0))) ) ) ) @@ -577,10 +577,10 @@ ;; failed to figure out what this is: (defstate plant-boss-root-idle (plant-boss-arm) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('hide 'die) - (go plant-boss-root-die (the-as symbol (-> arg3 param 0))) + (go plant-boss-root-die (the-as symbol (-> event param 0))) ) ) ) @@ -742,13 +742,13 @@ ;; failed to figure out what this is: (defstate plant-boss-leaf-idle (plant-boss-leaf) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('trigger) - (go plant-boss-leaf-open (the-as symbol (-> arg3 param 0))) + (go plant-boss-leaf-open (the-as symbol (-> event param 0))) ) (('die) - (go plant-boss-leaf-die (the-as basic (-> arg3 param 0))) + (go plant-boss-leaf-die (the-as basic (-> event param 0))) ) ) ) @@ -782,13 +782,13 @@ ;; failed to figure out what this is: (defstate plant-boss-leaf-open (plant-boss-leaf) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('kill) (go plant-boss-leaf-close) ) (('die) - (go plant-boss-leaf-die (the-as basic (-> arg3 param 0))) + (go plant-boss-leaf-die (the-as basic (-> event param 0))) ) ) ) @@ -840,11 +840,11 @@ ;; failed to figure out what this is: (defstate plant-boss-leaf-open-idle (plant-boss-leaf) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('kill) (set! (-> self state-object) #t) - (let ((v0-0 (the-as object (+ (-> *display* base-frame-counter) (the-as time-frame (-> arg3 param 0)))))) + (let ((v0-0 (the-as object (+ (-> *display* base-frame-counter) (the-as time-frame (-> event param 0)))))) (set! (-> self state-time-frame) (the-as time-frame v0-0)) v0-0 ) @@ -855,7 +855,7 @@ ) ) (('die) - (go plant-boss-leaf-die (the-as basic (-> arg3 param 0))) + (go plant-boss-leaf-die (the-as basic (-> event param 0))) ) ) ) @@ -889,17 +889,17 @@ ;; failed to figure out what this is: (defstate plant-boss-leaf-bounce (plant-boss-leaf) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('kill) (set! (-> self state-object) #t) - (let ((v0-0 (the-as object (+ (-> *display* base-frame-counter) (the-as time-frame (-> arg3 param 0)))))) + (let ((v0-0 (the-as object (+ (-> *display* base-frame-counter) (the-as time-frame (-> event param 0)))))) (set! (-> self state-time-frame) (the-as time-frame v0-0)) v0-0 ) ) (('die) - (go plant-boss-leaf-die (the-as basic (-> arg3 param 0))) + (go plant-boss-leaf-die (the-as basic (-> event param 0))) ) ) ) @@ -932,10 +932,10 @@ ;; failed to figure out what this is: (defstate plant-boss-leaf-close (plant-boss-leaf) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('die) - (go plant-boss-leaf-die (the-as basic (-> arg3 param 0))) + (go plant-boss-leaf-die (the-as basic (-> event param 0))) ) ) ) @@ -1325,25 +1325,25 @@ ;; failed to figure out what this is: (defstate plant-boss-vulnerable (plant-boss) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('attack) (when ((method-of-type touching-shapes-entry prims-touching?) - (the-as touching-shapes-entry (-> arg3 param 0)) + (the-as touching-shapes-entry (-> event param 0)) (the-as collide-shape-moving (-> self root-override)) (the-as uint 1) ) (send-event - arg0 + proc 'shove - (-> arg3 param 0) + (-> event param 0) (static-attack-info ((shove-up (meters 2)) (shove-back (meters 6)))) ) - (go plant-boss-hit (the-as symbol (-> arg3 param 1))) + (go plant-boss-hit (the-as symbol (-> event param 1))) ) ) (else - (plant-boss-generic-event-handler arg0 arg1 arg2 arg3) + (plant-boss-generic-event-handler proc arg1 event-type event) ) ) ) @@ -1425,17 +1425,17 @@ ;; failed to figure out what this is: (defstate plant-boss-attack (plant-boss) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('touch 'attack) (when (and ((method-of-type touching-shapes-entry prims-touching?) - (the-as touching-shapes-entry (-> arg3 param 0)) + (the-as touching-shapes-entry (-> event param 0)) (the-as collide-shape-moving (-> self root-override)) (the-as uint 1) ) (not (ja-group? plant-boss-main-vulnerable2idle-ja)) ) - (when (send-event arg0 'attack-or-shove (-> arg3 param 0) (static-attack-info ((mode 'plant-boss)))) + (when (send-event proc 'attack-or-shove (-> event param 0) (static-attack-info ((mode 'plant-boss)))) (let ((v0-1 (the-as object #t))) (set! (-> self ate) (the-as symbol v0-1)) v0-1 @@ -1444,7 +1444,7 @@ ) ) (else - (plant-boss-default-event-handler arg0 arg1 arg2 arg3) + (plant-boss-default-event-handler proc arg1 event-type event) ) ) ) @@ -1778,20 +1778,20 @@ ;; failed to figure out what this is: (defstate plant-boss-dead-idle (plant-boss) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('bonk) (go plant-boss-dead-bounce (lerp-scale (the-as float 0.1) (the-as float 1.0) - (the-as float (-> arg3 param 1)) + (the-as float (-> event param 1)) (the-as float 40960.0) (the-as float 81920.0) ) ) ) (else - (plant-boss-generic-event-handler arg0 arg1 arg2 arg3) + (plant-boss-generic-event-handler proc arg1 event-type event) ) ) ) diff --git a/test/decompiler/reference/jak1/levels/jungleb/plat-flip_REF.gc b/test/decompiler/reference/jak1/levels/jungleb/plat-flip_REF.gc index 6c8cc5c475..1c1db95697 100644 --- a/test/decompiler/reference/jak1/levels/jungleb/plat-flip_REF.gc +++ b/test/decompiler/reference/jak1/levels/jungleb/plat-flip_REF.gc @@ -50,14 +50,14 @@ ;; failed to figure out what this is: (defstate plat-flip-idle (plat-flip) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'bonk) (activate! (-> self smush) -1.0 90 300 1.0 1.0) ) ((= v1-0 'touch) - (send-event arg0 'no-look-around (seconds 1.5)) + (send-event proc 'no-look-around (seconds 1.5)) (the-as smush-control #f) ) ) diff --git a/test/decompiler/reference/jak1/levels/lavatube/lavatube-energy_REF.gc b/test/decompiler/reference/jak1/levels/lavatube/lavatube-energy_REF.gc index bd0d54f359..f73741f004 100644 --- a/test/decompiler/reference/jak1/levels/lavatube/lavatube-energy_REF.gc +++ b/test/decompiler/reference/jak1/levels/lavatube/lavatube-energy_REF.gc @@ -710,8 +710,8 @@ ;; failed to figure out what this is: (defstate energybase-idle (energybase) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('stop) (go energybase-stopping) ) @@ -861,10 +861,10 @@ ;; failed to figure out what this is: (defstate energyball-idle (energyball) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'attack) - (when (and (>= arg1 2) (= (-> arg3 param 1) 'eco-yellow)) + (when (and (>= arg1 2) (= (-> event param 1) 'eco-yellow)) (increment-success-for-hint (game-text-id lavatube-balls)) (sound-play "dcrate-break") (process-spawn @@ -1034,8 +1034,8 @@ ;; failed to figure out what this is: (defstate energyarm-no-ball (energyarm) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('stop) (go energyarm-stop) ) @@ -1118,8 +1118,8 @@ ;; failed to figure out what this is: (defstate energyarm-idle (energyarm) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('stop) (go energyarm-stop) ) @@ -1350,8 +1350,8 @@ ;; failed to figure out what this is: (defstate energyhub-stop (energyhub) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (if (= v1-0 'flash) (set! (-> self palette-val) 1.9921875) ) @@ -1432,8 +1432,8 @@ ;; failed to figure out what this is: (defstate energyhub-idle (energyhub) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (if (= v1-0 'flash) (set! (-> self palette-val) 1.9921875) ) diff --git a/test/decompiler/reference/jak1/levels/lavatube/lavatube-obs_REF.gc b/test/decompiler/reference/jak1/levels/lavatube/lavatube-obs_REF.gc index f1ee8d7401..6e55b7599f 100644 --- a/test/decompiler/reference/jak1/levels/lavatube/lavatube-obs_REF.gc +++ b/test/decompiler/reference/jak1/levels/lavatube/lavatube-obs_REF.gc @@ -622,26 +622,26 @@ ;; failed to figure out what this is: (defstate darkecobarrel-mover-move (darkecobarrel-mover) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('touch 'attack) (cond - ((= arg0 *target*) - (let ((s5-0 (-> arg3 param 0))) + ((= proc *target*) + (let ((s5-0 (-> event param 0))) (if (and s5-0 ((method-of-type touching-shapes-entry prims-touching?) (the-as touching-shapes-entry s5-0) (-> self root-override) (the-as uint 1) ) - (send-event arg0 'attack-invinc s5-0 (static-attack-info ((mode 'death)))) + (send-event proc 'attack-invinc s5-0 (static-attack-info ((mode 'death)))) ) (go darkecobarrel-mover-die) ) ) ) ((>= arg1 2) - (case (-> arg3 param 1) + (case (-> event param 1) (('eco-yellow) (+! (-> self hits) 1) (cond @@ -649,8 +649,8 @@ (go darkecobarrel-mover-die) ) (else - (let ((v1-17 (if (and (nonzero? arg0) (type-type? (-> arg0 type) process-drawable)) - arg0 + (let ((v1-17 (if (and (nonzero? proc) (type-type? (-> proc type) process-drawable)) + proc ) ) (gp-1 (new 'stack-no-clear 'vector)) @@ -1194,10 +1194,10 @@ ;; failed to figure out what this is: (defstate idle (chainmine) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('attack 'touch) - (send-event arg0 'attack (-> arg3 param 0) (static-attack-info ((mode 'deadly)))) + (send-event proc 'attack (-> event param 0) (static-attack-info ((mode 'deadly)))) (go-virtual die) ) ) @@ -1380,10 +1380,10 @@ ;; failed to figure out what this is: (defstate idle (lavaballoon) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('attack) - (send-event arg0 'heat -10.0) + (send-event proc 'heat -10.0) (go-virtual die) ) ) 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 9735b0e74d..9bfd424253 100644 --- a/test/decompiler/reference/jak1/levels/maincave/dark-crystal_REF.gc +++ b/test/decompiler/reference/jak1/levels/maincave/dark-crystal_REF.gc @@ -444,10 +444,10 @@ ;; failed to figure out what this is: (defstate dark-crystal-idle (dark-crystal) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('touch 'attack) - (if (= (-> arg0 type) target) + (if (= (-> proc type) target) (level-hint-spawn (game-text-id cave-dark-crystals-flee) "sksp0334" diff --git a/test/decompiler/reference/jak1/levels/maincave/gnawer_REF.gc b/test/decompiler/reference/jak1/levels/maincave/gnawer_REF.gc index 9f8582be94..a2265ee545 100644 --- a/test/decompiler/reference/jak1/levels/maincave/gnawer_REF.gc +++ b/test/decompiler/reference/jak1/levels/maincave/gnawer_REF.gc @@ -919,14 +919,14 @@ ;; failed to figure out what this is: (defstate gnawer-chewing-on-post (gnawer) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('touch) - (if (= (-> arg0 type) target) + (if (= (-> proc type) target) (send-event - arg0 + proc 'shove - (-> arg3 param 0) + (-> event param 0) (static-attack-info ((shove-up (meters 1.5)) (shove-back (meters 2.5)))) ) ) @@ -1074,26 +1074,26 @@ ;; failed to figure out what this is: (defstate gnawer-run (gnawer) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (local-vars (v0-0 object)) - (case arg2 + (case event-type (('touch) - (if (= (-> arg0 type) target) + (if (= (-> proc type) target) (send-event - arg0 + proc 'shove - (-> arg3 param 0) + (-> event param 0) (static-attack-info ((shove-up (meters 1.5)) (shove-back (meters 2.5)))) ) ) ) (('attack) (cond - ((= (-> arg0 type) target) + ((= (-> proc type) target) (send-event - arg0 + proc 'attack - (-> arg3 param 0) + (-> event param 0) (static-attack-info ((shove-up (meters 1.5)) (shove-back (meters 2.5)))) ) ) @@ -1101,7 +1101,7 @@ (if (< (- (-> *display* base-frame-counter) (-> self last-hit-time)) (seconds 0.5)) (return #f) ) - (let* ((a2-1 (the-as object (-> arg3 param 0))) + (let* ((a2-1 (the-as object (-> event param 0))) (v1-19 (-> (get-touched-prim (-> (the-as touching-shapes-entry a2-1) head) (-> self root-override) @@ -1223,11 +1223,11 @@ ;; failed to figure out what this is: (defstate gnawer-dying-give-pickups (gnawer) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'notify) - (if (and (= (-> arg0 type) money) (= (-> arg3 param 0) 'pickup)) - (dummy-30 self (the-as process-drawable arg0)) + (if (and (= (-> proc type) money) (= (-> event param 0) 'pickup)) + (dummy-30 self (the-as process-drawable proc)) ) ) ) @@ -1295,19 +1295,19 @@ ;; failed to figure out what this is: (defstate gnawer-give-fuel-cell (gnawer) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'notify) (cond - ((and (= (-> arg0 type) maincavecam) (= (-> arg3 param 0) 'die)) + ((and (= (-> proc type) maincavecam) (= (-> event param 0) 'die)) (process-entity-status! self (entity-perm-status bit-3) #f) (let ((v0-0 (the-as uint (logior (-> self mask) (process-mask actor-pause))))) (set! (-> self mask) (the-as process-mask v0-0)) v0-0 ) ) - ((and (= (-> arg0 type) money) (= (-> arg3 param 0) 'pickup)) - (dummy-30 self (the-as process-drawable arg0)) + ((and (= (-> proc type) money) (= (-> event param 0) 'pickup)) + (dummy-30 self (the-as process-drawable proc)) ) ) ) @@ -1364,11 +1364,11 @@ ;; failed to figure out what this is: (defstate gnawer-put-items-at-dest (gnawer) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'notify) - (if (and (= (-> arg0 type) money) (= (-> arg3 param 0) 'pickup)) - (dummy-30 self (the-as process-drawable arg0)) + (if (and (= (-> proc type) money) (= (-> event param 0) 'pickup)) + (dummy-30 self (the-as process-drawable proc)) ) ) ) diff --git a/test/decompiler/reference/jak1/levels/maincave/maincave-obs_REF.gc b/test/decompiler/reference/jak1/levels/maincave/maincave-obs_REF.gc index 9d59b38bea..3d2f91cd64 100644 --- a/test/decompiler/reference/jak1/levels/maincave/maincave-obs_REF.gc +++ b/test/decompiler/reference/jak1/levels/maincave/maincave-obs_REF.gc @@ -161,12 +161,12 @@ ;; failed to figure out what this is: (defstate cavecrusher-idle (cavecrusher) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (or (= v1-0 'touch) (= v1-0 'attack)) - (when (= (-> arg0 type) target) + (when (= (-> proc type) target) (if ((method-of-type touching-shapes-entry prims-touching-action?) - (the-as touching-shapes-entry (-> arg3 param 0)) + (the-as touching-shapes-entry (-> event param 0)) (-> *target* control) (collide-action solid) (collide-action) @@ -263,12 +263,12 @@ ;; failed to figure out what this is: (defstate idle (cavetrapdoor) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('touch) - (when (= (-> arg0 type) target) + (when (= (-> proc type) target) (when (>= (- (-> (target-pos 0) y) (-> self root-override trans y)) 409.6) - (send-event arg0 'no-look-around (seconds 1.5)) + (send-event proc 'no-look-around (seconds 1.5)) (go-virtual trigger) ) ) @@ -495,12 +495,12 @@ ;; failed to figure out what this is: (defstate caveflamepots-active (caveflamepots) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('touch 'attack) - (when (= (-> arg0 type) target) + (when (= (-> proc type) target) (when ((method-of-type touching-shapes-entry prims-touching-action?) - (the-as touching-shapes-entry (-> arg3 param 0)) + (the-as touching-shapes-entry (-> event param 0)) (-> *target* control) (collide-action solid) (collide-action) @@ -512,15 +512,15 @@ (< 0.75 (-> *target* control poly-normal y)) ) (send-event - arg0 + proc 'attack-or-shove - (-> arg3 param 0) + (-> event param 0) (static-attack-info ((mode 'burn) (vector (-> s4-0 vector)) (shove-up (-> s4-0 shove-up)))) ) (send-event - arg0 + proc 'attack-or-shove - (-> arg3 param 0) + (-> event param 0) (static-attack-info ((mode 'burn) (shove-up (meters 0)) (shove-back (meters 2)) @@ -1065,8 +1065,8 @@ ;; failed to figure out what this is: (defstate caveelevator-cycle-active (caveelevator) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (if (= v1-0 'bonk) (activate! (-> self smush) -1.0 60 150 1.0 1.0) ) @@ -1108,14 +1108,14 @@ ;; failed to figure out what this is: (defstate caveelevator-one-way-idle-start (caveelevator) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('bonk) (activate! (-> self smush) -1.0 60 150 1.0 1.0) (go caveelevator-one-way-travel-to-end) ) (('attack 'touch) - (if (and (= (-> arg0 type) target) + (if (and (= (-> proc type) target) (>= 8192.0 (vector-vector-xz-distance (target-pos 0) (-> self root-override trans))) ) (go caveelevator-one-way-travel-to-end) @@ -1148,8 +1148,8 @@ ;; failed to figure out what this is: (defstate caveelevator-one-way-travel-to-end (caveelevator) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (if (= v1-0 'bonk) (activate! (-> self smush) -1.0 60 150 1.0 1.0) ) @@ -1188,8 +1188,8 @@ ;; failed to figure out what this is: (defstate caveelevator-one-way-idle-end (caveelevator) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (if (= v1-0 'bonk) (activate! (-> self smush) -1.0 60 150 1.0 1.0) ) @@ -1231,8 +1231,8 @@ ;; failed to figure out what this is: (defstate caveelevator-one-way-travel-to-start (caveelevator) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (if (= v1-0 'bonk) (activate! (-> self smush) -1.0 60 150 1.0 1.0) ) diff --git a/test/decompiler/reference/jak1/levels/maincave/mother-spider-egg_REF.gc b/test/decompiler/reference/jak1/levels/maincave/mother-spider-egg_REF.gc index b54c073e80..395eea89e9 100644 --- a/test/decompiler/reference/jak1/levels/maincave/mother-spider-egg_REF.gc +++ b/test/decompiler/reference/jak1/levels/maincave/mother-spider-egg_REF.gc @@ -242,8 +242,8 @@ ;; failed to figure out what this is: (defstate mother-spider-egg-falling (mother-spider-egg) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('touch 'attack) (go mother-spider-egg-die-while-falling) ) @@ -288,14 +288,14 @@ ;; failed to figure out what this is: (defstate mother-spider-egg-on-ground (mother-spider-egg) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'touch) (send-shove-back (-> self root-override) - arg0 - (the-as touching-shapes-entry (-> arg3 param 0)) + proc + (the-as touching-shapes-entry (-> event param 0)) 0.7 6144.0 16384.0 diff --git a/test/decompiler/reference/jak1/levels/misty/balloonlurker_REF.gc b/test/decompiler/reference/jak1/levels/misty/balloonlurker_REF.gc index ff45efa8ff..1bb6efdb54 100644 --- a/test/decompiler/reference/jak1/levels/misty/balloonlurker_REF.gc +++ b/test/decompiler/reference/jak1/levels/misty/balloonlurker_REF.gc @@ -922,8 +922,8 @@ ;; failed to figure out what this is: (defstate balloonlurker-pilot-idle (balloonlurker-pilot) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('attack) (send-event (ppointer->process (-> self parent-override)) 'die) (go balloonlurker-pilot-die) 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 4a489abb9a..26b0492c85 100644 --- a/test/decompiler/reference/jak1/levels/misty/misty-conveyor_REF.gc +++ b/test/decompiler/reference/jak1/levels/misty/misty-conveyor_REF.gc @@ -208,8 +208,8 @@ ;; failed to figure out what this is: (defstate keg-on-paddle (keg) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('detach) (go keg-paddle-to-path) ) diff --git a/test/decompiler/reference/jak1/levels/misty/misty-obs_REF.gc b/test/decompiler/reference/jak1/levels/misty/misty-obs_REF.gc index fd5a9d83fb..7b0aa84451 100644 --- a/test/decompiler/reference/jak1/levels/misty/misty-obs_REF.gc +++ b/test/decompiler/reference/jak1/levels/misty/misty-obs_REF.gc @@ -1467,10 +1467,10 @@ ;; failed to figure out what this is: (defstate breakaway-idle (breakaway) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('touch) - (send-event arg0 'no-look-around (seconds 1.5)) + (send-event proc 'no-look-around (seconds 1.5)) (go breakaway-about-to-fall) ) ) @@ -2067,8 +2067,8 @@ ;; failed to figure out what this is: (defstate boat-fuelcell-idle (boat-fuelcell) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('task-complete) (set! (-> self play-cutscene?) #t) (process-entity-status! self (entity-perm-status complete) #t) diff --git a/test/decompiler/reference/jak1/levels/misty/misty-teetertotter_REF.gc b/test/decompiler/reference/jak1/levels/misty/misty-teetertotter_REF.gc index 95ad9a3870..d9a7869645 100644 --- a/test/decompiler/reference/jak1/levels/misty/misty-teetertotter_REF.gc +++ b/test/decompiler/reference/jak1/levels/misty/misty-teetertotter_REF.gc @@ -49,10 +49,10 @@ ;; failed to figure out what this is: (defstate teetertotter-idle (teetertotter) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('attack) - (case (-> arg3 param 1) + (case (-> event param 1) (('flop) (when (target-on-end-of-teetertotter? self) (set! (-> self in-launch-window) #f) @@ -88,21 +88,21 @@ ;; failed to figure out what this is: (defstate teetertotter-launch (teetertotter) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (the-as object - (when (= arg2 'touch) + (when (= event-type 'touch) (if (and ((method-of-type touching-shapes-entry prims-touching?) - (the-as touching-shapes-entry (-> arg3 param 0)) + (the-as touching-shapes-entry (-> event param 0)) (the-as collide-shape-moving (-> self root)) (the-as uint 1) ) (-> self rock-is-dangerous) ) - (send-event arg0 'attack (-> arg3 param 0) (static-attack-info ((mode 'deadly)))) + (send-event proc 'attack (-> event param 0) (static-attack-info ((mode 'deadly)))) ) (when (and ((method-of-type touching-shapes-entry prims-touching?) - (the-as touching-shapes-entry (-> arg3 param 0)) + (the-as touching-shapes-entry (-> event param 0)) (the-as collide-shape-moving (-> self root)) (the-as uint 2) ) @@ -111,7 +111,7 @@ (-> self in-launch-window) ) (when (send-event - arg0 + proc 'shove #f (static-attack-info ((shove-back (meters 0)) (shove-up (meters 13)) (angle 'jump) (control 1.0))) diff --git a/test/decompiler/reference/jak1/levels/misty/misty-warehouse_REF.gc b/test/decompiler/reference/jak1/levels/misty/misty-warehouse_REF.gc index bccae768b3..457ea466ab 100644 --- a/test/decompiler/reference/jak1/levels/misty/misty-warehouse_REF.gc +++ b/test/decompiler/reference/jak1/levels/misty/misty-warehouse_REF.gc @@ -38,8 +38,8 @@ ;; failed to figure out what this is: (defstate silostep-idle (silostep) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('trigger) (go silostep-camera) ) diff --git a/test/decompiler/reference/jak1/levels/misty/mistycannon_REF.gc b/test/decompiler/reference/jak1/levels/misty/mistycannon_REF.gc index f299d517ab..8dde56e3da 100644 --- a/test/decompiler/reference/jak1/levels/misty/mistycannon_REF.gc +++ b/test/decompiler/reference/jak1/levels/misty/mistycannon_REF.gc @@ -719,8 +719,8 @@ ;; failed to figure out what this is: (defstate mistycannon-missile-idle (mistycannon-missile) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('attack) (go mistycannon-missile-explode) ) @@ -894,10 +894,10 @@ ;; failed to figure out what this is: (defstate mistycannon-missile-explode (mistycannon-missile) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('touched) - (let* ((s4-0 arg0) + (let* ((s4-0 proc) (v1-2 (if (and (nonzero? s4-0) (type-type? (-> s4-0 type) process-drawable)) s4-0 ) @@ -925,22 +925,22 @@ 0.0 ) (cond - ((= (-> arg0 type) target) - (send-event arg0 'attack (-> arg3 param 0) (static-attack-info ((mode 'explode)))) + ((= (-> proc type) target) + (send-event proc 'attack (-> event param 0) (static-attack-info ((mode 'explode)))) ) (else (let ((a1-4 (new 'stack-no-clear 'event-message-block))) (set! (-> a1-4 from) self) (set! (-> a1-4 num-params) 4) (set! (-> a1-4 message) 'attack) - (set! (-> a1-4 param 0) (-> arg3 param 0)) + (set! (-> a1-4 param 0) (-> event param 0)) (set! (-> a1-4 param 1) (the-as uint 'explode)) (let ((v1-18 (+ *global-attack-id* 1))) (set! *global-attack-id* v1-18) (set! (-> a1-4 param 2) (the-as uint v1-18)) ) (set! (-> a1-4 param 3) (the-as uint 0)) - (send-event-function arg0 a1-4) + (send-event-function proc a1-4) ) ) ) @@ -1605,11 +1605,11 @@ ;; failed to figure out what this is: (defstate mistycannon-waiting-for-player (mistycannon) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('touch) (when ((method-of-type touching-shapes-entry prims-touching?) - (the-as touching-shapes-entry (-> arg3 param 0)) + (the-as touching-shapes-entry (-> event param 0)) (-> self root-override) (the-as uint 1) ) @@ -1712,8 +1712,8 @@ ;; failed to figure out what this is: (defstate mistycannon-player-control (mistycannon) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('change-mode) (send-event *camera* 'change-state cam-mistycannon 0) ) @@ -1812,11 +1812,11 @@ ;; failed to figure out what this is: (defstate mistycannon-waiting-for-player-to-fuck-off (mistycannon) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'touch) (when ((method-of-type touching-shapes-entry prims-touching?) - (the-as touching-shapes-entry (-> arg3 param 0)) + (the-as touching-shapes-entry (-> event param 0)) (-> self root-override) (the-as uint 1) ) diff --git a/test/decompiler/reference/jak1/levels/misty/quicksandlurker_REF.gc b/test/decompiler/reference/jak1/levels/misty/quicksandlurker_REF.gc index b735f5ad3f..ff544708e6 100644 --- a/test/decompiler/reference/jak1/levels/misty/quicksandlurker_REF.gc +++ b/test/decompiler/reference/jak1/levels/misty/quicksandlurker_REF.gc @@ -319,26 +319,26 @@ ;; failed to figure out what this is: (defstate quicksandlurker-missile-idle (quicksandlurker-missile) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('touched) (when (cond - ((= (-> arg0 type) target) - (send-event arg0 'attack (-> arg3 param 0) (static-attack-info ((mode 'explode)))) + ((= (-> proc type) target) + (send-event proc 'attack (-> event param 0) (static-attack-info ((mode 'explode)))) ) (else (let ((a1-4 (new 'stack-no-clear 'event-message-block))) (set! (-> a1-4 from) self) (set! (-> a1-4 num-params) 4) (set! (-> a1-4 message) 'attack) - (set! (-> a1-4 param 0) (-> arg3 param 0)) + (set! (-> a1-4 param 0) (-> event param 0)) (set! (-> a1-4 param 1) (the-as uint 'explode)) (let ((v1-12 (+ *global-attack-id* 1))) (set! *global-attack-id* v1-12) (set! (-> a1-4 param 2) (the-as uint v1-12)) ) (set! (-> a1-4 param 3) (the-as uint 0)) - (send-event-function arg0 a1-4) + (send-event-function proc a1-4) ) ) ) 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 02997a808f..54b6076315 100644 --- a/test/decompiler/reference/jak1/levels/misty/sidekick-human_REF.gc +++ b/test/decompiler/reference/jak1/levels/misty/sidekick-human_REF.gc @@ -1500,8 +1500,8 @@ ;; failed to figure out what this is: (defstate play-anim (sequenceB) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('offset-army) (dotimes (gp-0 9) (let ((v1-3 (-> *lurker-army* gp-0))) diff --git a/test/decompiler/reference/jak1/levels/ogre/flying-lurker_REF.gc b/test/decompiler/reference/jak1/levels/ogre/flying-lurker_REF.gc index be2509c17c..a2597e5cd6 100644 --- a/test/decompiler/reference/jak1/levels/ogre/flying-lurker_REF.gc +++ b/test/decompiler/reference/jak1/levels/ogre/flying-lurker_REF.gc @@ -172,8 +172,8 @@ ;; failed to figure out what this is: (defstate plunger-lurker-flee (plunger-lurker) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'attack) (let ((v0-0 #t)) (set! (-> self got-hit) v0-0) @@ -231,8 +231,8 @@ ;; failed to figure out what this is: (defstate plunger-lurker-idle (plunger-lurker) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('plunge) (logclear! (-> self mask) (process-mask actor-pause)) (go plunger-lurker-plunge) @@ -641,8 +641,8 @@ ;; failed to figure out what this is: (defstate flying-lurker-fly (flying-lurker) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'clone-and-kill-links) (let ((a1-1 (new 'stack-no-clear 'event-message-block))) @@ -660,20 +660,20 @@ ) ) ) - (go flying-lurker-clone (the-as handle (-> arg3 param 0)) "") + (go flying-lurker-clone (the-as handle (-> event param 0)) "") ) ((= v1-0 'die) (let ((v1-7 (new 'stack-no-clear 'event-message-block))) - (set! (-> v1-7 from) arg0) + (set! (-> v1-7 from) proc) (set! (-> v1-7 num-params) arg1) - (set! (-> v1-7 message) arg2) - (set! (-> v1-7 param 0) (-> arg3 param 0)) - (set! (-> v1-7 param 1) (-> arg3 param 1)) - (set! (-> v1-7 param 2) (-> arg3 param 2)) - (set! (-> v1-7 param 3) (-> arg3 param 3)) - (set! (-> v1-7 param 4) (-> arg3 param 4)) - (set! (-> v1-7 param 5) (-> arg3 param 5)) - (set! (-> v1-7 param 6) (-> arg3 param 6)) + (set! (-> v1-7 message) event-type) + (set! (-> v1-7 param 0) (-> event param 0)) + (set! (-> v1-7 param 1) (-> event param 1)) + (set! (-> v1-7 param 2) (-> event param 2)) + (set! (-> v1-7 param 3) (-> event param 3)) + (set! (-> v1-7 param 4) (-> event param 4)) + (set! (-> v1-7 param 5) (-> event param 5)) + (set! (-> v1-7 param 6) (-> event param 6)) (let ((t9-2 send-event-function) (a1-3 (-> self link next)) ) @@ -690,16 +690,16 @@ ) ((= v1-0 'sleep) (let ((v1-12 (new 'stack-no-clear 'event-message-block))) - (set! (-> v1-12 from) arg0) + (set! (-> v1-12 from) proc) (set! (-> v1-12 num-params) arg1) - (set! (-> v1-12 message) arg2) - (set! (-> v1-12 param 0) (-> arg3 param 0)) - (set! (-> v1-12 param 1) (-> arg3 param 1)) - (set! (-> v1-12 param 2) (-> arg3 param 2)) - (set! (-> v1-12 param 3) (-> arg3 param 3)) - (set! (-> v1-12 param 4) (-> arg3 param 4)) - (set! (-> v1-12 param 5) (-> arg3 param 5)) - (set! (-> v1-12 param 6) (-> arg3 param 6)) + (set! (-> v1-12 message) event-type) + (set! (-> v1-12 param 0) (-> event param 0)) + (set! (-> v1-12 param 1) (-> event param 1)) + (set! (-> v1-12 param 2) (-> event param 2)) + (set! (-> v1-12 param 3) (-> event param 3)) + (set! (-> v1-12 param 4) (-> event param 4)) + (set! (-> v1-12 param 5) (-> event param 5)) + (set! (-> v1-12 param 6) (-> event param 6)) (let ((t9-5 send-event-function) (a1-5 (-> self link next)) ) @@ -715,16 +715,16 @@ ) ((= v1-0 'reset) (let ((v1-15 (new 'stack-no-clear 'event-message-block))) - (set! (-> v1-15 from) arg0) + (set! (-> v1-15 from) proc) (set! (-> v1-15 num-params) arg1) - (set! (-> v1-15 message) arg2) - (set! (-> v1-15 param 0) (-> arg3 param 0)) - (set! (-> v1-15 param 1) (-> arg3 param 1)) - (set! (-> v1-15 param 2) (-> arg3 param 2)) - (set! (-> v1-15 param 3) (-> arg3 param 3)) - (set! (-> v1-15 param 4) (-> arg3 param 4)) - (set! (-> v1-15 param 5) (-> arg3 param 5)) - (set! (-> v1-15 param 6) (-> arg3 param 6)) + (set! (-> v1-15 message) event-type) + (set! (-> v1-15 param 0) (-> event param 0)) + (set! (-> v1-15 param 1) (-> event param 1)) + (set! (-> v1-15 param 2) (-> event param 2)) + (set! (-> v1-15 param 3) (-> event param 3)) + (set! (-> v1-15 param 4) (-> event param 4)) + (set! (-> v1-15 param 5) (-> event param 5)) + (set! (-> v1-15 param 6) (-> event param 6)) (let ((t9-7 send-event-function) (a1-7 (-> self link next)) ) @@ -1039,21 +1039,21 @@ ;; failed to figure out what this is: (defstate flying-lurker-clone (flying-lurker) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'die) (let ((v1-1 (new 'stack-no-clear 'event-message-block))) - (set! (-> v1-1 from) arg0) + (set! (-> v1-1 from) proc) (set! (-> v1-1 num-params) arg1) - (set! (-> v1-1 message) arg2) - (set! (-> v1-1 param 0) (-> arg3 param 0)) - (set! (-> v1-1 param 1) (-> arg3 param 1)) - (set! (-> v1-1 param 2) (-> arg3 param 2)) - (set! (-> v1-1 param 3) (-> arg3 param 3)) - (set! (-> v1-1 param 4) (-> arg3 param 4)) - (set! (-> v1-1 param 5) (-> arg3 param 5)) - (set! (-> v1-1 param 6) (-> arg3 param 6)) + (set! (-> v1-1 message) event-type) + (set! (-> v1-1 param 0) (-> event param 0)) + (set! (-> v1-1 param 1) (-> event param 1)) + (set! (-> v1-1 param 2) (-> event param 2)) + (set! (-> v1-1 param 3) (-> event param 3)) + (set! (-> v1-1 param 4) (-> event param 4)) + (set! (-> v1-1 param 5) (-> event param 5)) + (set! (-> v1-1 param 6) (-> event param 6)) (let ((t9-0 send-event-function) (a1-1 (-> self link next)) ) @@ -1070,16 +1070,16 @@ ) ((= v1-0 'sleep) (let ((v1-6 (new 'stack-no-clear 'event-message-block))) - (set! (-> v1-6 from) arg0) + (set! (-> v1-6 from) proc) (set! (-> v1-6 num-params) arg1) - (set! (-> v1-6 message) arg2) - (set! (-> v1-6 param 0) (-> arg3 param 0)) - (set! (-> v1-6 param 1) (-> arg3 param 1)) - (set! (-> v1-6 param 2) (-> arg3 param 2)) - (set! (-> v1-6 param 3) (-> arg3 param 3)) - (set! (-> v1-6 param 4) (-> arg3 param 4)) - (set! (-> v1-6 param 5) (-> arg3 param 5)) - (set! (-> v1-6 param 6) (-> arg3 param 6)) + (set! (-> v1-6 message) event-type) + (set! (-> v1-6 param 0) (-> event param 0)) + (set! (-> v1-6 param 1) (-> event param 1)) + (set! (-> v1-6 param 2) (-> event param 2)) + (set! (-> v1-6 param 3) (-> event param 3)) + (set! (-> v1-6 param 4) (-> event param 4)) + (set! (-> v1-6 param 5) (-> event param 5)) + (set! (-> v1-6 param 6) (-> event param 6)) (let ((t9-3 send-event-function) (a1-3 (-> self link next)) ) @@ -1095,16 +1095,16 @@ ) ((= v1-0 'reset) (let ((v1-9 (new 'stack-no-clear 'event-message-block))) - (set! (-> v1-9 from) arg0) + (set! (-> v1-9 from) proc) (set! (-> v1-9 num-params) arg1) - (set! (-> v1-9 message) arg2) - (set! (-> v1-9 param 0) (-> arg3 param 0)) - (set! (-> v1-9 param 1) (-> arg3 param 1)) - (set! (-> v1-9 param 2) (-> arg3 param 2)) - (set! (-> v1-9 param 3) (-> arg3 param 3)) - (set! (-> v1-9 param 4) (-> arg3 param 4)) - (set! (-> v1-9 param 5) (-> arg3 param 5)) - (set! (-> v1-9 param 6) (-> arg3 param 6)) + (set! (-> v1-9 message) event-type) + (set! (-> v1-9 param 0) (-> event param 0)) + (set! (-> v1-9 param 1) (-> event param 1)) + (set! (-> v1-9 param 2) (-> event param 2)) + (set! (-> v1-9 param 3) (-> event param 3)) + (set! (-> v1-9 param 4) (-> event param 4)) + (set! (-> v1-9 param 5) (-> event param 5)) + (set! (-> v1-9 param 6) (-> event param 6)) (let ((t9-5 send-event-function) (a1-5 (-> self link next)) ) @@ -1119,7 +1119,7 @@ (deactivate self) ) (else - (flying-lurker-handler arg0 arg1 arg2 arg3) + (flying-lurker-handler proc arg1 event-type event) ) ) ) @@ -1137,23 +1137,23 @@ ;; failed to figure out what this is: (defstate flying-lurker-idle (flying-lurker) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('saw-player) (set! (-> self take-off) #t) (when (-> self link prev) (entity-birth-no-kill (-> self link prev)) (let ((a1-1 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-1 from) arg0) + (set! (-> a1-1 from) proc) (set! (-> a1-1 num-params) arg1) - (set! (-> a1-1 message) arg2) - (set! (-> a1-1 param 0) (-> arg3 param 0)) - (set! (-> a1-1 param 1) (-> arg3 param 1)) - (set! (-> a1-1 param 2) (-> arg3 param 2)) - (set! (-> a1-1 param 3) (-> arg3 param 3)) - (set! (-> a1-1 param 4) (-> arg3 param 4)) - (set! (-> a1-1 param 5) (-> arg3 param 5)) - (set! (-> a1-1 param 6) (-> arg3 param 6)) + (set! (-> a1-1 message) event-type) + (set! (-> a1-1 param 0) (-> event param 0)) + (set! (-> a1-1 param 1) (-> event param 1)) + (set! (-> a1-1 param 2) (-> event param 2)) + (set! (-> a1-1 param 3) (-> event param 3)) + (set! (-> a1-1 param 4) (-> event param 4)) + (set! (-> a1-1 param 5) (-> event param 5)) + (set! (-> a1-1 param 6) (-> event param 6)) (let ((t9-1 send-event-function) (v1-13 (-> self link prev)) ) @@ -1174,8 +1174,8 @@ (set! (-> a1-2 from) self) (set! (-> a1-2 num-params) 2) (set! (-> a1-2 message) 'clone) - (set! (-> a1-2 param 0) (-> arg3 param 0)) - (set! (-> a1-2 param 1) (+ (-> arg3 param 1) -1)) + (set! (-> a1-2 param 0) (-> event param 0)) + (set! (-> a1-2 param 1) (+ (-> event param 1) -1)) (let ((t9-3 send-event-function) (v1-25 (-> self link next)) ) @@ -1188,17 +1188,17 @@ ) ) ) - (case (-> arg3 param 1) + (case (-> event param 1) ((2) - (go flying-lurker-clone (the-as handle (-> arg3 param 0)) "flying-lurker-b-") + (go flying-lurker-clone (the-as handle (-> event param 0)) "flying-lurker-b-") ) ((1) - (go flying-lurker-clone (the-as handle (-> arg3 param 0)) "flying-lurker-c-") + (go flying-lurker-clone (the-as handle (-> event param 0)) "flying-lurker-c-") ) ) ) (else - (flying-lurker-handler arg0 arg1 arg2 arg3) + (flying-lurker-handler proc arg1 event-type event) ) ) ) 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 ed54ae5dc8..6aa3bc939a 100644 --- a/test/decompiler/reference/jak1/levels/ogre/ogre-obs_REF.gc +++ b/test/decompiler/reference/jak1/levels/ogre/ogre-obs_REF.gc @@ -378,8 +378,8 @@ ;; failed to figure out what this is: (defstate idle (tntbarrel) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('die-big) (go-virtual die #t) ) @@ -387,7 +387,7 @@ (go-virtual die #f) ) (('attack 'touch) - (send-event arg0 'attack-invinc (-> arg3 param 0) (static-attack-info ((mode 'death)))) + (send-event proc 'attack-invinc (-> event param 0) (static-attack-info ((mode 'death)))) (go-virtual die #f) ) ) @@ -508,11 +508,11 @@ ;; failed to figure out what this is: (defstate rigid-body-platform-idle (ogre-plat) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'trigger) (set! (-> self triggered) (the-as entity-actor #t)) - (set! (-> self delay) (the-as time-frame (-> arg3 param 0))) + (set! (-> self delay) (the-as time-frame (-> event param 0))) (let ((v0-0 (-> *display* base-frame-counter))) (set! (-> self state-time) v0-0) v0-0 @@ -1087,8 +1087,8 @@ ;; failed to figure out what this is: (defstate ogre-bridge-activated (ogre-bridge) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('break) (+! (-> self dead-joint-count) 4) (go ogre-bridge-break) @@ -1115,12 +1115,12 @@ ;; failed to figure out what this is: (defstate ogre-bridge-break (ogre-bridge) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'effect) - (when (= (-> arg3 param 0) 'splash) + (when (= (-> event param 0) 'splash) (let ((gp-0 (new 'stack-no-clear 'vector))) - (let ((a1-1 (-> arg3 param 2))) + (let ((a1-1 (-> event param 2))) (set! (-> gp-0 quad) (-> self node-list data a1-1 bone transform vector 3 quad)) ) (set! (-> gp-0 y) 118784.0) @@ -1439,8 +1439,8 @@ ;; failed to figure out what this is: (defstate water-vol-idle (ogre-lava) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('submerge1) (set! (-> self anim) 3) (go-virtual water-vol-idle) @@ -1462,7 +1462,7 @@ (go-virtual water-vol-idle) ) (else - ((-> (method-of-type water-anim water-vol-idle) event) arg0 arg1 arg2 arg3) + ((-> (method-of-type water-anim water-vol-idle) event) proc arg1 event-type event) ) ) ) @@ -1675,10 +1675,10 @@ ;; failed to figure out what this is: (defstate shortcut-boulder-idle (shortcut-boulder) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('attack) - (if (and (>= arg1 2) (= (-> arg3 param 1) 'eco-yellow)) + (if (and (>= arg1 2) (= (-> event param 1) 'eco-yellow)) (go shortcut-boulder-break) ) ) diff --git a/test/decompiler/reference/jak1/levels/ogre/ogreboss_REF.gc b/test/decompiler/reference/jak1/levels/ogre/ogreboss_REF.gc index 766f6fc39b..51cde1fc6b 100644 --- a/test/decompiler/reference/jak1/levels/ogre/ogreboss_REF.gc +++ b/test/decompiler/reference/jak1/levels/ogre/ogreboss_REF.gc @@ -212,37 +212,37 @@ ;; failed to figure out what this is: (defstate ogreboss-missile-impact (ogreboss-missile) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('touched) (cond (#f (cond - ((= (-> arg0 type) target) - (send-event arg0 'attack (-> arg3 param 0) (static-attack-info ((mode 'explode)))) + ((= (-> proc type) target) + (send-event proc 'attack (-> event param 0) (static-attack-info ((mode 'explode)))) ) (else (let ((a1-2 (new 'stack-no-clear 'event-message-block))) (set! (-> a1-2 from) self) (set! (-> a1-2 num-params) 4) (set! (-> a1-2 message) 'attack) - (set! (-> a1-2 param 0) (-> arg3 param 0)) + (set! (-> a1-2 param 0) (-> event param 0)) (set! (-> a1-2 param 1) (the-as uint 'explode)) (let ((v1-12 (+ *global-attack-id* 1))) (set! *global-attack-id* v1-12) (set! (-> a1-2 param 2) (the-as uint v1-12)) ) (set! (-> a1-2 param 3) (the-as uint 0)) - (send-event-function arg0 a1-2) + (send-event-function proc a1-2) ) ) ) - (if (= (-> arg0 type) target) + (if (= (-> proc type) target) (send-event (ppointer->process (-> self parent-override)) 'victory) ) ) (else - (let* ((s4-0 arg0) + (let* ((s4-0 proc) (t1-0 (if (and (nonzero? s4-0) (type-type? (-> s4-0 type) target)) s4-0 ) @@ -280,7 +280,7 @@ (the-as rgba (new 'static 'rgba :g #xff :a #x80)) ) (when (>= f30-0 0.0) - (send-event arg0 'attack (-> arg3 param 0) (static-attack-info ((mode 'damage)))) + (send-event proc 'attack (-> event param 0) (static-attack-info ((mode 'damage)))) (send-event (ppointer->process (-> self parent-override)) 'victory) ) ) @@ -289,7 +289,7 @@ (else (let ((v1-37 (new 'stack-no-clear 'vector))) (set-vector! v1-37 0.0 -12288000.0 0.0 1.0) - (send-event arg0 'impulse v1-37) + (send-event proc 'impulse v1-37) ) ) ) @@ -524,8 +524,8 @@ ;; failed to figure out what this is: (defstate ogreboss-super-boulder-idle (ogreboss-super-boulder) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('speedup) (set! (-> self speed) (* 1.3 (-> self speed))) ) @@ -1558,8 +1558,8 @@ ;; failed to figure out what this is: (defstate ogreboss-stage1 (ogreboss) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('next-stage) (set! (-> self bridge-assembled) #t) (go ogreboss-stage2) diff --git a/test/decompiler/reference/jak1/levels/racer_common/racer-states_REF.gc b/test/decompiler/reference/jak1/levels/racer_common/racer-states_REF.gc index d61c6b763d..c5cf4bf0f5 100644 --- a/test/decompiler/reference/jak1/levels/racer_common/racer-states_REF.gc +++ b/test/decompiler/reference/jak1/levels/racer_common/racer-states_REF.gc @@ -3,38 +3,38 @@ ;; failed to figure out what this is: (defstate target-racing-start (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (cond - ((and (= arg2 'query) (= (-> arg3 param 0) 'mode)) + ((and (= event-type 'query) (= (-> event param 0) 'mode)) 'racer ) - ((and (= arg2 'get-pickup) (= (-> arg3 param 0) 3)) + ((and (= event-type 'get-pickup) (= (-> event param 0) 3)) (if (>= (- (-> *display* base-frame-counter) (-> self racer boost-time)) (seconds 1)) - (send-event self 'boost (fmax 1.0 (fmin 2.0 (the-as float (-> arg3 param 1))))) + (send-event self 'boost (fmax 1.0 (fmin 2.0 (the-as float (-> event param 1))))) ) ) (else - (case arg2 + (case event-type (('end-mode) - (go target-racing-get-off (process->handle arg0)) + (go target-racing-get-off (process->handle proc)) ) (('touched) - (send-event arg0 'attack (-> arg3 param 0) 'racer 0 0) - (when (and (type-type? (-> arg0 type) babak) (< 40960.0 (-> self control unknown-float01))) + (send-event proc 'attack (-> event param 0) 'racer 0 0) + (when (and (type-type? (-> proc type) babak) (< 40960.0 (-> self control unknown-float01))) (let ((f0-5 (lerp-scale 16384.0 32768.0 (-> self control unknown-float01) 40960.0 (-> self racer transv-max)))) (go target-racing-jump f0-5 f0-5 #f) ) ) ) (('attack 'attack-or-shove 'attack-invinc) - (let ((v1-27 (the-as attack-info (-> arg3 param 1)))) + (let ((v1-27 (the-as attack-info (-> event param 1)))) (if (not (and (logtest? (-> v1-27 mask) (attack-mask mode)) (or (= (-> v1-27 mode) 'burn) (= (-> v1-27 mode) 'burnup))) ) (target-attacked - arg2 - (the-as attack-info (-> arg3 param 1)) - arg0 - (the-as touching-shapes-entry (-> arg3 param 0)) + event-type + (the-as attack-info (-> event param 1)) + proc + (the-as touching-shapes-entry (-> event param 0)) (the-as (state symbol attack-info target) target-racing-hit) ) ) @@ -42,7 +42,7 @@ ) (('heat) (set! (-> self racer heat) - (fmax 0.0 (fmin (+ (-> self racer heat) (the-as float (-> arg3 param 0))) (-> *RACER-bank* heat-max))) + (fmax 0.0 (fmin (+ (-> self racer heat) (the-as float (-> event param 0))) (-> *RACER-bank* heat-max))) ) ) (('boost) @@ -52,7 +52,7 @@ (set! (-> self racer boost-level) (seek (-> self racer boost-level) (-> *RACER-bank* boost-level-max) - (* (-> *RACER-bank* boost-level-inc) (the-as float (-> arg3 param 0))) + (* (-> *RACER-bank* boost-level-inc) (the-as float (-> event param 0))) ) ) ) @@ -60,20 +60,20 @@ (go target-racing-smack (-> self control unknown-float01) #t) ) (('jump) - (go target-racing-jump (the-as float (-> arg3 param 0)) (the-as float (-> arg3 param 1)) #f) + (go target-racing-jump (the-as float (-> event param 0)) (the-as float (-> event param 1)) #f) ) (('change-mode) - (case (-> arg3 param 0) + (case (-> event param 0) (('grab) (go target-racing-grab) ) ) ) (('clone-anim) - (go target-racing-clone-anim (process->handle (the-as process (-> arg3 param 0)))) + (go target-racing-clone-anim (process->handle (the-as process (-> event param 0)))) ) (else - (target-generic-event-handler arg0 arg1 arg2 arg3) + (target-generic-event-handler proc arg1 event-type event) ) ) ) @@ -1428,21 +1428,21 @@ ;; failed to figure out what this is: (defstate target-racing-grab (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (cond - ((and (= arg2 'query) (= (-> arg3 param 0) 'mode)) + ((and (= event-type 'query) (= (-> event param 0) 'mode)) (-> self state name) ) (else - (case arg2 + (case event-type (('end-mode) (go target-racing) ) (('clone-anim) - (go target-racing-clone-anim (process->handle (the-as process (-> arg3 param 0)))) + (go target-racing-clone-anim (process->handle (the-as process (-> event param 0)))) ) (else - (target-generic-event-handler arg0 arg1 arg2 arg3) + (target-generic-event-handler proc arg1 event-type event) ) ) ) @@ -1482,11 +1482,11 @@ ;; failed to figure out what this is: (defstate target-racing-clone-anim (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (if (and (= arg2 'trans) (= (-> arg3 param 0) 'restore)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (if (and (= event-type 'trans) (= (-> event param 0) 'restore)) (set! (-> self control unknown-uint20) (the-as uint #f)) ) - ((-> target-racing-grab event) arg0 arg1 arg2 arg3) + ((-> target-racing-grab event) proc arg1 event-type event) ) :enter (-> target-clone-anim enter) :exit (behavior () diff --git a/test/decompiler/reference/jak1/levels/racer_common/racer_REF.gc b/test/decompiler/reference/jak1/levels/racer_common/racer_REF.gc index 4c046dfab6..ac721a10a4 100644 --- a/test/decompiler/reference/jak1/levels/racer_common/racer_REF.gc +++ b/test/decompiler/reference/jak1/levels/racer_common/racer_REF.gc @@ -99,14 +99,14 @@ ;; failed to figure out what this is: (defstate wait-for-start (racer) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (local-vars (v0-1 structure)) - (let ((v1-0 arg2)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'trans) - (vector+! (the-as vector (-> arg3 param 0)) (-> self root-override trans) (-> self extra-trans)) + (vector+! (the-as vector (-> event param 0)) (-> self root-override trans) (-> self extra-trans)) ) ((= v1-0 'notify) (set! v0-1 #t) @@ -115,7 +115,7 @@ ) ((= v1-0 'shadow) (cond - ((-> arg3 param 0) + ((-> event param 0) (set! v0-1 (-> self shadow-backup)) (set! (-> self draw shadow) (the-as shadow-geo v0-1)) v0-1 @@ -287,8 +287,8 @@ ;; failed to figure out what this is: (defstate pickup (racer) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('draw) (ja-channel-set! 1) (ja :group! (-> self draw art-group data 3)) @@ -297,14 +297,14 @@ (transform-post) ) (('trans) - (vector+! (the-as vector (-> arg3 param 0)) (-> self root-override trans) (-> self extra-trans)) + (vector+! (the-as vector (-> event param 0)) (-> self root-override trans) (-> self extra-trans)) ) (('touch 'attack) #f ) (('shadow) (cond - ((-> arg3 param 0) + ((-> event param 0) (let ((v0-1 (the-as object (-> self shadow-backup)))) (set! (-> self draw shadow) (the-as shadow-geo v0-1)) v0-1 @@ -360,19 +360,21 @@ ;; failed to figure out what this is: (defstate wait-for-return (racer) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (if (and (or (= arg2 'touch) (= arg2 'attack)) (and (!= (-> self condition) 4) (send-event *target* 'end-mode))) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (if (and (or (= event-type 'touch) (= event-type 'attack)) + (and (!= (-> self condition) 4) (send-event *target* 'end-mode)) + ) (go-virtual pickup (the-as (state collectable) (method-of-object self idle))) ) (the-as object (cond - ((= arg2 'trans) - (vector+! (the-as vector (-> arg3 param 0)) (-> self root-override trans) (-> self extra-trans)) + ((= event-type 'trans) + (vector+! (the-as vector (-> event param 0)) (-> self root-override trans) (-> self extra-trans)) ) - ((= arg2 'shadow) + ((= event-type 'shadow) (cond - ((-> arg3 param 0) + ((-> event param 0) (let ((v0-3 (the-as structure (-> self shadow-backup)))) (set! (-> self draw shadow) (the-as shadow-geo v0-3)) v0-3 diff --git a/test/decompiler/reference/jak1/levels/robocave/cave-trap_REF.gc b/test/decompiler/reference/jak1/levels/robocave/cave-trap_REF.gc index 8d5c2ae8aa..0eb293c986 100644 --- a/test/decompiler/reference/jak1/levels/robocave/cave-trap_REF.gc +++ b/test/decompiler/reference/jak1/levels/robocave/cave-trap_REF.gc @@ -61,9 +61,9 @@ ;; failed to figure out what this is: (defstate spider-vent-idle (spider-vent) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (local-vars (v0-0 object)) - (case arg2 + (case event-type (('can-spawn?) (return (>= (- (-> *display* base-frame-counter) (-> self last-spawn-time)) (seconds 1))) v0-0 diff --git a/test/decompiler/reference/jak1/levels/robocave/spider-egg_REF.gc b/test/decompiler/reference/jak1/levels/robocave/spider-egg_REF.gc index 5d6289ad0a..52fab27f4f 100644 --- a/test/decompiler/reference/jak1/levels/robocave/spider-egg_REF.gc +++ b/test/decompiler/reference/jak1/levels/robocave/spider-egg_REF.gc @@ -50,15 +50,15 @@ ;; failed to figure out what this is: (defstate spider-egg-idle (spider-egg) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (local-vars (v0-0 none)) - (let ((v1-0 arg2)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'touch) (send-shove-back (-> self root-override) - arg0 - (the-as touching-shapes-entry (-> arg3 param 0)) + proc + (the-as touching-shapes-entry (-> event param 0)) 0.7 6144.0 16384.0 @@ -126,9 +126,9 @@ ;; failed to figure out what this is: (defstate spider-egg-hatch (spider-egg) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (local-vars (v0-0 symbol)) - (case arg2 + (case event-type (('can-spawn?) (return (the-as object #f)) v0-0 @@ -168,9 +168,9 @@ ;; failed to figure out what this is: (defstate spider-egg-die (spider-egg) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (local-vars (v0-0 symbol)) - (case arg2 + (case event-type (('can-spawn?) (return (the-as object #f)) v0-0 diff --git a/test/decompiler/reference/jak1/levels/rolling/rolling-lightning-mole_REF.gc b/test/decompiler/reference/jak1/levels/rolling/rolling-lightning-mole_REF.gc index d0fa139359..c1346e5edf 100644 --- a/test/decompiler/reference/jak1/levels/rolling/rolling-lightning-mole_REF.gc +++ b/test/decompiler/reference/jak1/levels/rolling/rolling-lightning-mole_REF.gc @@ -1299,8 +1299,8 @@ ;; failed to figure out what this is: (defstate peeper-wait (peeper) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'hide) (let ((v0-0 (-> *display* base-frame-counter))) (set! (-> self state-time) v0-0) @@ -1355,8 +1355,8 @@ ;; failed to figure out what this is: (defstate peeper-down (peeper) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('hide) (go peeper-wait) ) @@ -1404,8 +1404,8 @@ ;; failed to figure out what this is: (defstate peeper-up (peeper) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('hide) (go peeper-hide) ) diff --git a/test/decompiler/reference/jak1/levels/rolling/rolling-obs_REF.gc b/test/decompiler/reference/jak1/levels/rolling/rolling-obs_REF.gc index a871ecb83b..5aa2303f2a 100644 --- a/test/decompiler/reference/jak1/levels/rolling/rolling-obs_REF.gc +++ b/test/decompiler/reference/jak1/levels/rolling/rolling-obs_REF.gc @@ -945,8 +945,8 @@ ;; failed to figure out what this is: (defstate rolling-start-break (rolling-start) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('unbreak) (go rolling-start-whole) ) @@ -981,8 +981,8 @@ ;; failed to figure out what this is: (defstate rolling-start-whole (rolling-start) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('break) (sound-play "cool-rolling-st") (go rolling-start-break #f) @@ -1448,8 +1448,8 @@ ;; failed to figure out what this is: (defstate gorge-start-racing (gorge-start) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('finished) (go gorge-start-race-finished) ) diff --git a/test/decompiler/reference/jak1/levels/rolling/rolling-race-ring_REF.gc b/test/decompiler/reference/jak1/levels/rolling/rolling-race-ring_REF.gc index 251b738800..9fee54e139 100644 --- a/test/decompiler/reference/jak1/levels/rolling/rolling-race-ring_REF.gc +++ b/test/decompiler/reference/jak1/levels/rolling/rolling-race-ring_REF.gc @@ -609,13 +609,13 @@ ;; failed to figure out what this is: (defstate race-ring-active (race-ring) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (local-vars (v0-0 symbol)) - (let ((v1-0 arg2)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'notify) - (when (and (= (-> arg3 param 0) 'die) (= arg0 (-> self part-track process 0))) + (when (and (= (-> event param 0) 'die) (= proc (-> self part-track process 0))) (cond ((= (-> self entity extra perm task) (game-task rolling-ring-chase-2)) (set! (-> self part-track) (ppointer->handle (process-spawn @@ -980,8 +980,8 @@ ;; failed to figure out what this is: (defstate race-ring-idle (race-ring) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('activate) (logclear! (-> self mask) (process-mask actor-pause)) (go race-ring-active) diff --git a/test/decompiler/reference/jak1/levels/snow/snow-ball_REF.gc b/test/decompiler/reference/jak1/levels/snow/snow-ball_REF.gc index 6f0adc0d4e..4fea94510c 100644 --- a/test/decompiler/reference/jak1/levels/snow/snow-ball_REF.gc +++ b/test/decompiler/reference/jak1/levels/snow/snow-ball_REF.gc @@ -438,10 +438,10 @@ ;; failed to figure out what this is: (defstate snow-ball-roller-idle (snow-ball-roller) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (or (= v1-0 'touch) (= v1-0 'attack)) - (when (= (-> arg0 type) target) + (when (= (-> proc type) target) (do-push-aways! (-> self root-override)) (when (>= (- (-> *display* base-frame-counter) (-> self hit-player-time)) (seconds 0.5)) (set! (-> self hit-player-time) (-> *display* base-frame-counter)) diff --git a/test/decompiler/reference/jak1/levels/snow/snow-bumper_REF.gc b/test/decompiler/reference/jak1/levels/snow/snow-bumper_REF.gc index 948a67ea4a..8a118102ad 100644 --- a/test/decompiler/reference/jak1/levels/snow/snow-bumper_REF.gc +++ b/test/decompiler/reference/jak1/levels/snow/snow-bumper_REF.gc @@ -176,11 +176,11 @@ ;; failed to figure out what this is: (defstate snow-bumper-active-close-idle (snow-bumper) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('touch 'attack 'bonk) - (when (= (-> arg0 type) target) - (let ((gp-0 (-> arg3 param 0))) + (when (= (-> proc type) target) + (let ((gp-0 (-> event param 0))) (when (and (>= 6144.0 (vector-vector-xz-distance (-> self root trans) (target-pos 0))) ((method-of-type touching-shapes-entry prims-touching?) (the-as touching-shapes-entry gp-0) diff --git a/test/decompiler/reference/jak1/levels/snow/snow-flutflut-obs_REF.gc b/test/decompiler/reference/jak1/levels/snow/snow-flutflut-obs_REF.gc index 62e35214fd..b4198d4255 100644 --- a/test/decompiler/reference/jak1/levels/snow/snow-flutflut-obs_REF.gc +++ b/test/decompiler/reference/jak1/levels/snow/snow-flutflut-obs_REF.gc @@ -269,11 +269,11 @@ ;; failed to figure out what this is: (defstate snow-button-up-idle (snow-button) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (local-vars (v0-2 object)) - (case arg2 + (case event-type (('touch 'attack 'bonk) - (when (and (= (-> arg0 type) target) + (when (and (= (-> proc type) target) (logtest? (-> *target* control root-prim prim-core action) (collide-action ca-14)) (>= 10649.6 (vector-vector-xz-distance (-> self root-override trans) (target-pos 0))) ) @@ -301,9 +301,9 @@ ;; failed to figure out what this is: (defstate snow-button-activate (snow-button) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (local-vars (v0-0 object)) - (case arg2 + (case event-type (('untrigger) (go snow-button-deactivate) ) @@ -362,9 +362,9 @@ ;; failed to figure out what this is: (defstate snow-button-deactivate (snow-button) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (local-vars (v0-0 symbol)) - (case arg2 + (case event-type (('query) (return (the-as object #f)) v0-0 @@ -532,8 +532,8 @@ ;; failed to figure out what this is: (defstate plat-startup (flutflut-plat) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('trigger) (when (or (!= (-> self plat-type) 1) (not (and (-> self entity) (logtest? (-> self entity extra perm status) (entity-perm-status complete)))) @@ -580,8 +580,8 @@ ;; failed to figure out what this is: (defstate flutflut-plat-hidden-idle (flutflut-plat) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('trigger) (logclear! (-> self mask) (process-mask actor-pause)) (go flutflut-plat-appear) @@ -608,8 +608,8 @@ ;; failed to figure out what this is: (defstate flutflut-plat-appear (flutflut-plat) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (if (or (= v1-0 'bonk) (= v1-0 'bounce)) (dummy-22 self) ) @@ -685,8 +685,8 @@ ;; failed to figure out what this is: (defstate plat-idle (flutflut-plat) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((or (= v1-0 'bonk) (= v1-0 'bounce)) (dummy-22 self) @@ -732,8 +732,8 @@ ;; failed to figure out what this is: (defstate plat-path-active (flutflut-plat) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((or (= v1-0 'bonk) (= v1-0 'bounce)) (dummy-22 self) @@ -771,8 +771,8 @@ ;; failed to figure out what this is: (defstate flutflut-plat-hide (flutflut-plat) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (if (= v1-0 'bonk) (dummy-22 self) ) @@ -830,8 +830,8 @@ ;; failed to figure out what this is: (defstate elevator-idle-at-cave (flutflut-plat) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond @@ -868,8 +868,8 @@ ;; failed to figure out what this is: (defstate elevator-travel-to-fort (flutflut-plat) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (if (or (= v1-0 'bonk) (= v1-0 'bounce)) (dummy-22 self) ) @@ -893,8 +893,8 @@ ;; failed to figure out what this is: (defstate elevator-idle-at-fort (flutflut-plat) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (if (or (= v1-0 'bonk) (= v1-0 'bounce)) (dummy-22 self) ) @@ -927,8 +927,8 @@ ;; failed to figure out what this is: (defstate elevator-travel-to-cave (flutflut-plat) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (if (or (= v1-0 'bonk) (= v1-0 'bounce)) (dummy-22 self) ) diff --git a/test/decompiler/reference/jak1/levels/snow/snow-obs_REF.gc b/test/decompiler/reference/jak1/levels/snow/snow-obs_REF.gc index 97585a1229..8a254f5e1a 100644 --- a/test/decompiler/reference/jak1/levels/snow/snow-obs_REF.gc +++ b/test/decompiler/reference/jak1/levels/snow/snow-obs_REF.gc @@ -318,12 +318,12 @@ ;; failed to figure out what this is: (defstate snow-eggtop-idle-up (snow-eggtop) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'notify) - (case (-> arg3 param 0) + (case (-> event param 0) (('pickup) - (if (type-type? (-> arg0 type) fuel-cell) + (if (type-type? (-> proc type) fuel-cell) (save-reminder (get-task-control (-> self entity extra perm task)) 1 4) ) ) @@ -354,18 +354,18 @@ ;; failed to figure out what this is: (defstate snow-eggtop-activate (snow-eggtop) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('notify) - (when (= (-> arg0 type) snowcam) + (when (= (-> proc type) snowcam) (cond - ((= (-> arg3 param 0) 'die) + ((= (-> event param 0) 'die) (if *target* (set! (-> *target* control trans y) (+ 1024.0 (-> *target* control trans y))) ) (go snow-eggtop-idle-down) ) - ((= (-> arg3 param 0) 'cut) + ((= (-> event param 0) 'cut) (stop! (-> self sound)) (set! (-> self play-sound?) #f) #f @@ -572,10 +572,10 @@ ;; failed to figure out what this is: (defstate snowpusher-idle (snowpusher) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'touch) - (send-event arg0 'no-look-around (seconds 1.5)) + (send-event proc 'no-look-around (seconds 1.5)) #f ) ) @@ -709,8 +709,8 @@ ;; failed to figure out what this is: (defstate snow-spatula-idle (snow-spatula) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'bonk) (dummy-22 self) (sound-play "snow-spat-short" :vol 75 :pitch 0.75) @@ -1008,8 +1008,8 @@ ;; failed to figure out what this is: (defstate snow-fort-gate-idle-closed (snow-fort-gate) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('notice) (go snow-fort-gate-activate) ) @@ -1307,8 +1307,8 @@ ;; failed to figure out what this is: (defstate snow-gears-idle (snow-gears) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('notice) (logclear! (-> self mask) (process-mask actor-pause)) (process-entity-status! self (entity-perm-status bit-3) #t) @@ -1678,8 +1678,8 @@ ;; failed to figure out what this is: (defstate snow-log-wait-for-master (snow-log) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('trigger) (go snow-log-activate) ) @@ -1722,8 +1722,8 @@ ;; failed to figure out what this is: (defstate snow-log-hidden (snow-log) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('trigger) (logclear! (-> self mask) (process-mask actor-pause)) (process-entity-status! self (entity-perm-status bit-3) #t) diff --git a/test/decompiler/reference/jak1/levels/snow/snow-ram-boss_REF.gc b/test/decompiler/reference/jak1/levels/snow/snow-ram-boss_REF.gc index 3e5c82ae32..e70768aee4 100644 --- a/test/decompiler/reference/jak1/levels/snow/snow-ram-boss_REF.gc +++ b/test/decompiler/reference/jak1/levels/snow/snow-ram-boss_REF.gc @@ -693,8 +693,8 @@ ;; failed to figure out what this is: (defstate ram-boss-proj-growing (ram-boss-proj) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('launch) (let ((v1-1 (-> self parent-override))) (set! (-> v1-1 0 proj-stoked) #f) @@ -1353,13 +1353,13 @@ ;; failed to figure out what this is: (defstate ram-boss-idle (ram-boss) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('jump) - (go ram-boss-jump-down arg0) + (go ram-boss-jump-down proc) ) (('touch 'attack) - (nav-enemy-send-attack arg0 (the-as touching-shapes-entry (-> arg3 param 0)) 'generic) + (nav-enemy-send-attack proc (the-as touching-shapes-entry (-> event param 0)) 'generic) ) ) ) @@ -1400,10 +1400,10 @@ ;; failed to figure out what this is: (defstate ram-boss-jump-down (ram-boss) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('touch 'attack) - (nav-enemy-send-attack arg0 (the-as touching-shapes-entry (-> arg3 param 0)) 'generic) + (nav-enemy-send-attack proc (the-as touching-shapes-entry (-> event param 0)) 'generic) ) ) ) diff --git a/test/decompiler/reference/jak1/levels/snow/snow-ram_REF.gc b/test/decompiler/reference/jak1/levels/snow/snow-ram_REF.gc index 3dc728b922..6821332ee9 100644 --- a/test/decompiler/reference/jak1/levels/snow/snow-ram_REF.gc +++ b/test/decompiler/reference/jak1/levels/snow/snow-ram_REF.gc @@ -185,18 +185,18 @@ ;; failed to figure out what this is: (defstate ram-idle (ram) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('touch 'attack) (if ((method-of-type touching-shapes-entry prims-touching?) - (the-as touching-shapes-entry (-> arg3 param 0)) + (the-as touching-shapes-entry (-> event param 0)) (-> self root-override) (the-as uint 1) ) (send-event - arg0 + proc 'attack - (-> arg3 param 0) + (-> event param 0) (static-attack-info ((shove-up (meters 0.5)) (shove-back (meters 2)))) ) ) @@ -261,10 +261,10 @@ ;; failed to figure out what this is: (defstate ram-fun-idle (ram) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('notify) - (when (= (-> arg0 type) ram-boss) + (when (= (-> proc type) ram-boss) (if (dummy-22 self) (go ram-give-fuel-cell) ) @@ -294,10 +294,10 @@ ;; failed to figure out what this is: (defstate ram-give-fuel-cell (ram) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('notify) - (if (and (= (-> arg0 type) snowcam) (= (-> arg3 param 0) 'die)) + (if (and (= (-> proc type) snowcam) (= (-> event param 0) 'die)) (go ram-fun-idle) ) ) diff --git a/test/decompiler/reference/jak1/levels/snow/target-snowball_REF.gc b/test/decompiler/reference/jak1/levels/snow/target-snowball_REF.gc index 9bc6ac0a99..a6faaf1e03 100644 --- a/test/decompiler/reference/jak1/levels/snow/target-snowball_REF.gc +++ b/test/decompiler/reference/jak1/levels/snow/target-snowball_REF.gc @@ -59,12 +59,12 @@ ;; failed to figure out what this is: (defstate target-snowball-start (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (cond - ((and (= arg2 'query) (= (-> arg3 param 0) 'mode)) + ((and (= event-type 'query) (= (-> event param 0) 'mode)) 'snowball ) - ((let ((v1-3 arg2)) + ((let ((v1-3 event-type)) (= v1-3 'end-mode) ) (go @@ -75,7 +75,7 @@ ) ) (else - (target-generic-event-handler arg0 arg1 arg2 arg3) + (target-generic-event-handler proc arg1 event-type event) ) ) ) diff --git a/test/decompiler/reference/jak1/levels/sunken/double-lurker_REF.gc b/test/decompiler/reference/jak1/levels/sunken/double-lurker_REF.gc index 5da7c7a52a..77d4ba089a 100644 --- a/test/decompiler/reference/jak1/levels/sunken/double-lurker_REF.gc +++ b/test/decompiler/reference/jak1/levels/sunken/double-lurker_REF.gc @@ -259,18 +259,18 @@ ;; failed to figure out what this is: (defstate double-lurker-top-on-shoulders (double-lurker-top) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('trigger) (let ((v1-1 (-> self fall-dest)) - (a0-4 (-> (the-as vector (-> arg3 param 0)) quad)) + (a0-4 (-> (the-as vector (-> event param 0)) quad)) ) (set! (-> v1-1 quad) a0-4) - (go double-lurker-top-knocked-down a0-4 (the-as vector arg1) (the-as vector arg2)) + (go double-lurker-top-knocked-down a0-4 (the-as vector arg1) (the-as vector event-type)) ) ) (('instant-death) - (let ((v1-3 (the-as object (-> arg3 param 0)))) + (let ((v1-3 (the-as object (-> event param 0)))) (quaternion-axis-angle! (-> self collide-info quat) 0.0 @@ -315,13 +315,13 @@ ;; failed to figure out what this is: (defstate double-lurker-top-knocked-down (double-lurker-top) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('touch) (send-event - arg0 + proc 'shove - (-> arg3 param 0) + (-> event param 0) (static-attack-info ((shove-up (meters 3)) (shove-back (meters 2)))) ) ) diff --git a/test/decompiler/reference/jak1/levels/sunken/helix-water_REF.gc b/test/decompiler/reference/jak1/levels/sunken/helix-water_REF.gc index a3ecf8176c..9de33811aa 100644 --- a/test/decompiler/reference/jak1/levels/sunken/helix-water_REF.gc +++ b/test/decompiler/reference/jak1/levels/sunken/helix-water_REF.gc @@ -131,8 +131,8 @@ ;; failed to figure out what this is: (defstate water-vol-idle (helix-dark-eco) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('trigger) (let ((a0-1 (-> self sound))) (set! (-> a0-1 spec pitch-mod) 2057) @@ -140,7 +140,7 @@ ) ) (else - ((-> (method-of-type water-anim water-vol-idle) event) arg0 arg1 arg2 arg3) + ((-> (method-of-type water-anim water-vol-idle) event) proc arg1 event-type event) ) ) ) @@ -178,8 +178,8 @@ ;; failed to figure out what this is: (defstate helix-slide-door-idle-open (helix-slide-door) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('trigger) (go helix-slide-door-close) ) @@ -286,8 +286,8 @@ ;; failed to figure out what this is: (defstate helix-button-idle-up (helix-button) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('touch) (when *target* (when (logtest? (-> *target* control status) (cshape-moving-flags onsurf)) @@ -659,8 +659,8 @@ ;; failed to figure out what this is: (defstate helix-water-idle (helix-water) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'trigger) (go helix-water-activated) @@ -689,10 +689,10 @@ ;; failed to figure out what this is: (defstate helix-water-activated (helix-water) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('notify) - (when (= (-> arg0 type) launcherdoor) + (when (= (-> proc type) launcherdoor) (remove-setting! 'music) (go helix-water-idle) ) diff --git a/test/decompiler/reference/jak1/levels/sunken/orbit-plat_REF.gc b/test/decompiler/reference/jak1/levels/sunken/orbit-plat_REF.gc index 72b43cddca..9f918415e0 100644 --- a/test/decompiler/reference/jak1/levels/sunken/orbit-plat_REF.gc +++ b/test/decompiler/reference/jak1/levels/sunken/orbit-plat_REF.gc @@ -304,8 +304,8 @@ ;; failed to figure out what this is: (defstate orbit-plat-idle (orbit-plat) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'bonk) (dummy-22 self) @@ -420,8 +420,8 @@ ;; failed to figure out what this is: (defstate orbit-plat-still (orbit-plat) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'bonk) (dummy-22 self) @@ -544,8 +544,8 @@ ;; failed to figure out what this is: (defstate orbit-plat-rotating (orbit-plat) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'bonk) (dummy-22 self) @@ -758,8 +758,8 @@ ;; failed to figure out what this is: (defstate orbit-plat-reset (orbit-plat) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'bonk) (dummy-22 self) diff --git a/test/decompiler/reference/jak1/levels/sunken/puffer_REF.gc b/test/decompiler/reference/jak1/levels/sunken/puffer_REF.gc index 15fe858845..ca174da5e2 100644 --- a/test/decompiler/reference/jak1/levels/sunken/puffer_REF.gc +++ b/test/decompiler/reference/jak1/levels/sunken/puffer_REF.gc @@ -710,8 +710,8 @@ ;; failed to figure out what this is: (defstate puffer-die (puffer) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as uint (cond diff --git a/test/decompiler/reference/jak1/levels/sunken/qbert-plat_REF.gc b/test/decompiler/reference/jak1/levels/sunken/qbert-plat_REF.gc index e08e605f14..a4c1841e5c 100644 --- a/test/decompiler/reference/jak1/levels/sunken/qbert-plat_REF.gc +++ b/test/decompiler/reference/jak1/levels/sunken/qbert-plat_REF.gc @@ -141,8 +141,8 @@ ;; failed to figure out what this is: (defstate qbert-plat-on-mimic (qbert-plat) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('die) (go qbert-plat-on-die) ) @@ -432,13 +432,13 @@ ;; failed to figure out what this is: (defstate qbert-plat-master-idle (qbert-plat-master) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('trigger) (start-hint-timer (game-text-id sunken-qbert-plat-hint)) (close-specific-task! (game-task sunken-platforms) (task-status need-hint)) (when (not (-> self puzzle-beaten?)) - (let ((v1-2 (-> arg3 param 0))) + (let ((v1-2 (-> event param 0))) (when (!= v1-2 (-> self last-plat-triggered)) (set! (-> self last-plat-triggered) (the-as int v1-2)) (let ((s5-1 (= (-> self plat-states-needed-to-open-door) (-> self plat-states)))) @@ -454,7 +454,7 @@ ) ) ) - (send-event arg0 'notify) + (send-event proc 'notify) (let ((a0-13 (= (-> self plat-states-needed-to-open-door) (-> self plat-states)))) (if (!= s5-1 a0-13) (go qbert-plat-master-do-door a0-13) diff --git a/test/decompiler/reference/jak1/levels/sunken/shover_REF.gc b/test/decompiler/reference/jak1/levels/sunken/shover_REF.gc index 5606d3f689..9b01e19fbc 100644 --- a/test/decompiler/reference/jak1/levels/sunken/shover_REF.gc +++ b/test/decompiler/reference/jak1/levels/sunken/shover_REF.gc @@ -34,12 +34,12 @@ ;; failed to figure out what this is: (defstate shover-idle (shover) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('touch 'attack) - (when (= (-> arg0 type) target) + (when (= (-> proc type) target) (when ((method-of-type touching-shapes-entry prims-touching-action?) - (the-as touching-shapes-entry (-> arg3 param 0)) + (the-as touching-shapes-entry (-> event param 0)) (-> *target* control) (collide-action solid) (collide-action) @@ -52,15 +52,15 @@ (< 0.75 (-> *target* control poly-normal y)) ) (send-event - arg0 + proc 'attack-or-shove - (-> arg3 param 0) + (-> event param 0) (static-attack-info ((mode 'burn) (vector (-> s4-0 vector)) (shove-up (-> s4-0 shove-up)))) ) (send-event - arg0 + proc 'attack-or-shove - (-> arg3 param 0) + (-> event param 0) (static-attack-info ((mode 'burn) (shove-up (meters 0)) (shove-back (meters 2)) diff --git a/test/decompiler/reference/jak1/levels/sunken/square-platform_REF.gc b/test/decompiler/reference/jak1/levels/sunken/square-platform_REF.gc index 8728d4f7e6..13d165257f 100644 --- a/test/decompiler/reference/jak1/levels/sunken/square-platform_REF.gc +++ b/test/decompiler/reference/jak1/levels/sunken/square-platform_REF.gc @@ -309,11 +309,11 @@ ;; failed to figure out what this is: (defstate square-platform-lowered (square-platform) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('trigger) - (if (and (= (-> arg0 type) square-platform-master) - (= (-> (the-as square-platform-master arg0) plat-id) (-> self plat-id)) + (if (and (= (-> proc type) square-platform-master) + (= (-> (the-as square-platform-master proc) plat-id) (-> self plat-id)) ) (go square-platform-rising) ) @@ -332,8 +332,8 @@ ;; failed to figure out what this is: (defstate square-platform-rising (square-platform) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((or (= v1-0 'bonk) (= v1-0 'bounce)) (dummy-22 self) @@ -376,8 +376,8 @@ ;; failed to figure out what this is: (defstate square-platform-raised (square-platform) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((or (= v1-0 'bonk) (= v1-0 'bounce)) (dummy-22 self) @@ -403,8 +403,8 @@ ;; failed to figure out what this is: (defstate square-platform-lowering (square-platform) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((or (= v1-0 'bonk) (= v1-0 'bounce)) (dummy-22 self) @@ -413,7 +413,7 @@ (go square-platform-rising) ) ((= v1-0 'touch) - (send-event arg0 'no-look-around (seconds 1.5)) + (send-event proc 'no-look-around (seconds 1.5)) #f ) ) @@ -558,11 +558,11 @@ ;; failed to figure out what this is: (defstate square-platform-master-idle (square-platform-master) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('trigger) - (when (= (-> arg0 type) square-platform-button) - (set! (-> self button-id) (-> (the-as square-platform-button arg0) button-id)) + (when (= (-> proc type) square-platform-button) + (set! (-> self button-id) (-> (the-as square-platform-button proc) button-id)) (logclear! (-> self mask) (process-mask actor-pause)) (process-entity-status! self (entity-perm-status bit-3) #t) (go square-platform-master-activate) diff --git a/test/decompiler/reference/jak1/levels/sunken/sun-exit-chamber_REF.gc b/test/decompiler/reference/jak1/levels/sunken/sun-exit-chamber_REF.gc index 99ef1d268a..d495d959ff 100644 --- a/test/decompiler/reference/jak1/levels/sunken/sun-exit-chamber_REF.gc +++ b/test/decompiler/reference/jak1/levels/sunken/sun-exit-chamber_REF.gc @@ -721,14 +721,14 @@ ;; failed to figure out what this is: (defstate exit-chamber-charger-puzzle (exit-chamber) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (local-vars (v0-0 object)) - (case arg2 + (case event-type (('notify) - (case (-> arg3 param 0) + (case (-> event param 0) ((1) (when (zero? (get-reminder (get-task-control (game-task sunken-room)) 0)) - (let* ((a1-2 (-> arg3 param 1)) + (let* ((a1-2 (-> event param 1)) (v1-5 (logior (-> self chargers-active) (ash 1 a1-2))) ) (set! (-> self chargers-active) v1-5) @@ -743,7 +743,7 @@ ) ((2) (when (zero? (get-reminder (get-task-control (game-task sunken-room)) 0)) - (let ((a1-6 (-> arg3 param 1))) + (let ((a1-6 (-> event param 1))) (set! v0-0 (logclear (-> self chargers-active) (ash 1 a1-6))) ) (set! (-> self chargers-active) (the-as uint v0-0)) @@ -796,16 +796,16 @@ ;; failed to figure out what this is: (defstate exit-chamber-idle-in-sunken (exit-chamber) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (local-vars (v0-1 object)) - (case arg2 + (case event-type (('trigger) (go exit-chamber-rise) (return #t) v0-1 ) (('notify) - (when (and (= (-> arg0 type) fuel-cell) (= (-> arg3 param 0) 'pickup)) + (when (and (= (-> proc type) fuel-cell) (= (-> event param 0) 'pickup)) (let ((a0-5 (handle->process (-> self fcell-handle)))) (when a0-5 (let ((v1-10 (new 'stack-no-clear 'vector))) @@ -983,13 +983,13 @@ ;; failed to figure out what this is: (defstate exit-chamber-idle-in-village (exit-chamber) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('trigger) (go exit-chamber-lower) ) (('notify) - (when (and (= (-> arg0 type) fuel-cell) (= (-> arg3 param 0) 'pickup)) + (when (and (= (-> proc type) fuel-cell) (= (-> event param 0) 'pickup)) (let ((a0-5 (handle->process (-> self fcell-handle)))) (when a0-5 (let ((v1-8 (new 'stack-no-clear 'vector))) diff --git a/test/decompiler/reference/jak1/levels/sunken/sun-iris-door_REF.gc b/test/decompiler/reference/jak1/levels/sunken/sun-iris-door_REF.gc index c0343a7921..126f6fac32 100644 --- a/test/decompiler/reference/jak1/levels/sunken/sun-iris-door_REF.gc +++ b/test/decompiler/reference/jak1/levels/sunken/sun-iris-door_REF.gc @@ -95,15 +95,15 @@ ;; failed to figure out what this is: (defstate sun-iris-door-closed (sun-iris-door) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('trigger) (go sun-iris-door-opening) ) (('move-to) (set! (-> self move-to?) #t) - (set! (-> self move-to-pos quad) (-> (the-as vector (-> arg3 param 0)) quad)) - (quaternion-copy! (-> self move-to-quat) (the-as quaternion (-> arg3 param 1))) + (set! (-> self move-to-pos quad) (-> (the-as vector (-> event param 0)) quad)) + (quaternion-copy! (-> self move-to-quat) (the-as quaternion (-> event param 1))) ) ) ) @@ -135,15 +135,15 @@ ;; failed to figure out what this is: (defstate sun-iris-door-opening (sun-iris-door) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('untrigger) (go sun-iris-door-closing) ) (('move-to) (set! (-> self move-to?) #t) - (set! (-> self move-to-pos quad) (-> (the-as vector (-> arg3 param 0)) quad)) - (quaternion-copy! (-> self move-to-quat) (the-as quaternion (-> arg3 param 1))) + (set! (-> self move-to-pos quad) (-> (the-as vector (-> event param 0)) quad)) + (quaternion-copy! (-> self move-to-quat) (the-as quaternion (-> event param 1))) ) ) ) @@ -229,8 +229,8 @@ ;; failed to figure out what this is: (defstate sun-iris-door-open (sun-iris-door) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('trigger) (let ((v0-0 (the-as object (-> *display* base-frame-counter)))) (set! (-> self state-time) (the-as time-frame v0-0)) @@ -242,8 +242,8 @@ ) (('move-to) (set! (-> self move-to?) #t) - (set! (-> self move-to-pos quad) (-> (the-as vector (-> arg3 param 0)) quad)) - (quaternion-copy! (-> self move-to-quat) (the-as quaternion (-> arg3 param 1))) + (set! (-> self move-to-pos quad) (-> (the-as vector (-> event param 0)) quad)) + (quaternion-copy! (-> self move-to-quat) (the-as quaternion (-> event param 1))) ) ) ) @@ -291,15 +291,15 @@ ;; failed to figure out what this is: (defstate sun-iris-door-closing (sun-iris-door) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('trigger) (go sun-iris-door-opening) ) (('move-to) (set! (-> self move-to?) #t) - (set! (-> self move-to-pos quad) (-> (the-as vector (-> arg3 param 0)) quad)) - (quaternion-copy! (-> self move-to-quat) (the-as quaternion (-> arg3 param 1))) + (set! (-> self move-to-pos quad) (-> (the-as vector (-> event param 0)) quad)) + (quaternion-copy! (-> self move-to-quat) (the-as quaternion (-> event param 1))) ) ) ) diff --git a/test/decompiler/reference/jak1/levels/sunken/sunken-pipegame_REF.gc b/test/decompiler/reference/jak1/levels/sunken/sunken-pipegame_REF.gc index 1e57939859..1227c7fe92 100644 --- a/test/decompiler/reference/jak1/levels/sunken/sunken-pipegame_REF.gc +++ b/test/decompiler/reference/jak1/levels/sunken/sunken-pipegame_REF.gc @@ -581,11 +581,11 @@ ;; failed to figure out what this is: (defstate sunken-pipegame-idle (sunken-pipegame) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('trigger) - (when (= (-> arg0 type) sunken-pipegame-button) - (set! (-> self challenge) (-> (the-as sunken-pipegame-button arg0) button-id)) + (when (= (-> proc type) sunken-pipegame-button) + (set! (-> self challenge) (-> (the-as sunken-pipegame-button proc) button-id)) (go sunken-pipegame-begin-play) ) ) @@ -601,10 +601,10 @@ ;; failed to figure out what this is: (defstate sunken-pipegame-begin-play (sunken-pipegame) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('notify) - (case (-> arg0 type) + (case (-> proc type) ((fuel-cell buzzer) (go sunken-pipegame-beat-challenge) ) diff --git a/test/decompiler/reference/jak1/levels/sunken/sunken-water_REF.gc b/test/decompiler/reference/jak1/levels/sunken/sunken-water_REF.gc index 06c5582814..13509409d5 100644 --- a/test/decompiler/reference/jak1/levels/sunken/sunken-water_REF.gc +++ b/test/decompiler/reference/jak1/levels/sunken/sunken-water_REF.gc @@ -112,15 +112,15 @@ ;; failed to figure out what this is: (defstate water-vol-idle (sunken-water) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('notify) - (if (= (-> arg3 param 0) 'attack) + (if (= (-> event param 0) 'attack) (sound-play "get-shocked") ) ) (else - ((-> (method-of-type water-anim water-vol-idle) event) arg0 arg1 arg2 arg3) + ((-> (method-of-type water-anim water-vol-idle) event) proc arg1 event-type event) ) ) ) diff --git a/test/decompiler/reference/jak1/levels/sunken/target-tube_REF.gc b/test/decompiler/reference/jak1/levels/sunken/target-tube_REF.gc index 0190853497..fd05cb864e 100644 --- a/test/decompiler/reference/jak1/levels/sunken/target-tube_REF.gc +++ b/test/decompiler/reference/jak1/levels/sunken/target-tube_REF.gc @@ -456,13 +456,13 @@ ;; failed to figure out what this is: (defstate target-tube-start (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (cond - ((and (= arg2 'query) (= (-> arg3 param 0) 'mode)) + ((and (= event-type 'query) (= (-> event param 0) 'mode)) 'tube ) (else - (case arg2 + (case event-type (('end-mode) (go target-jump @@ -472,20 +472,20 @@ ) ) (('touched) - (send-event arg0 'attack (-> arg3 param 0) 'tube 0 0) + (send-event proc 'attack (-> event param 0) 'tube 0 0) #f ) (('attack 'attack-or-shove 'attack-invinc) (target-attacked 'attack-or-shove - (the-as attack-info (-> arg3 param 1)) - arg0 - (the-as touching-shapes-entry (-> arg3 param 0)) + (the-as attack-info (-> event param 1)) + proc + (the-as touching-shapes-entry (-> event param 0)) target-tube-hit ) ) (else - (target-generic-event-handler arg0 arg1 arg2 arg3) + (target-generic-event-handler proc arg1 event-type event) ) ) ) @@ -1007,13 +1007,13 @@ ;; failed to figure out what this is: (defstate slide-control-ride (slide-control) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('end-mode) (go-virtual slide-control-watch) ) (('update) - (let* ((s4-0 arg0) + (let* ((s4-0 proc) (gp-0 (if (and (nonzero? s4-0) (type-type? (-> s4-0 type) process-drawable)) s4-0 ) @@ -1022,10 +1022,10 @@ (if gp-0 (find-target-point (-> (the-as process-drawable gp-0) root trans)) ) - (set! (-> (the-as vector (-> arg3 param 0)) quad) (-> self trans quad)) - (set! (-> (the-as vector (-> arg3 param 1)) quad) (-> self rot quad)) - (set! (-> (the-as vector (-> arg3 param 2)) quad) (-> self side quad)) - (eval-path-curve-div! (-> self path) (the-as vector (-> arg3 param 3)) (+ 0.2 (-> self pos)) 'interp) + (set! (-> (the-as vector (-> event param 0)) quad) (-> self trans quad)) + (set! (-> (the-as vector (-> event param 1)) quad) (-> self rot quad)) + (set! (-> (the-as vector (-> event param 2)) quad) (-> self side quad)) + (eval-path-curve-div! (-> self path) (the-as vector (-> event param 3)) (+ 0.2 (-> self pos)) 'interp) (if (>= (-> self pos) (+ -0.2 (the float (+ (-> self path curve num-cverts) -1)))) (send-event gp-0 'end-mode) ) diff --git a/test/decompiler/reference/jak1/levels/sunken/wall-plat_REF.gc b/test/decompiler/reference/jak1/levels/sunken/wall-plat_REF.gc index 5418e37ebe..b1bca9e0a1 100644 --- a/test/decompiler/reference/jak1/levels/sunken/wall-plat_REF.gc +++ b/test/decompiler/reference/jak1/levels/sunken/wall-plat_REF.gc @@ -46,8 +46,8 @@ ;; failed to figure out what this is: (defstate wall-plat-retracted (wall-plat) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('trigger) (go wall-plat-extending) ) @@ -68,10 +68,10 @@ ;; failed to figure out what this is: (defstate wall-plat-extending (wall-plat) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'touch) - (send-event arg0 'no-look-around (seconds 1.5)) + (send-event proc 'no-look-around (seconds 1.5)) #f ) ) @@ -103,8 +103,8 @@ ;; failed to figure out what this is: (defstate wall-plat-extended (wall-plat) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('untrigger) (go wall-plat-retracting) ) @@ -124,10 +124,10 @@ ;; failed to figure out what this is: (defstate wall-plat-retracting (wall-plat) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'touch) - (send-event arg0 'no-look-around (seconds 1.5)) + (send-event proc 'no-look-around (seconds 1.5)) #f ) ) @@ -158,10 +158,10 @@ ;; failed to figure out what this is: (defstate wall-plat-sync-idle (wall-plat) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'touch) - (send-event arg0 'no-look-around (seconds 1.5)) + (send-event proc 'no-look-around (seconds 1.5)) #f ) ) diff --git a/test/decompiler/reference/jak1/levels/sunken/wedge-plats_REF.gc b/test/decompiler/reference/jak1/levels/sunken/wedge-plats_REF.gc index f6b180f2c0..a308da4316 100644 --- a/test/decompiler/reference/jak1/levels/sunken/wedge-plats_REF.gc +++ b/test/decompiler/reference/jak1/levels/sunken/wedge-plats_REF.gc @@ -140,8 +140,8 @@ ;; failed to figure out what this is: (defstate wedge-plat-idle (wedge-plat) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (if (= v1-0 'bonk) (dummy-22 self) ) @@ -164,14 +164,14 @@ ;; failed to figure out what this is: (defstate wedge-plat-tip (wedge-plat) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'bonk) (dummy-22 self) ) ((= v1-0 'touch) - (send-event arg0 'no-look-around (seconds 1.5)) + (send-event proc 'no-look-around (seconds 1.5)) #f ) ) @@ -320,8 +320,8 @@ ;; failed to figure out what this is: (defstate wedge-plat-outer-idle (wedge-plat-outer) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (if (= v1-0 'bonk) (dummy-22 self) ) @@ -344,14 +344,14 @@ ;; failed to figure out what this is: (defstate wedge-plat-outer-tip (wedge-plat-outer) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'bonk) (dummy-22 self) ) ((= v1-0 'touch) - (send-event arg0 'no-look-around (seconds 1.5)) + (send-event proc 'no-look-around (seconds 1.5)) ) ) ) diff --git a/test/decompiler/reference/jak1/levels/swamp/billy_REF.gc b/test/decompiler/reference/jak1/levels/swamp/billy_REF.gc index e8f39a515a..478330eeb7 100644 --- a/test/decompiler/reference/jak1/levels/swamp/billy_REF.gc +++ b/test/decompiler/reference/jak1/levels/swamp/billy_REF.gc @@ -118,8 +118,8 @@ ;; failed to figure out what this is: (defstate billy-snack-idle (billy-snack) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('eat) (go billy-snack-eat) ) @@ -537,10 +537,10 @@ ;; failed to figure out what this is: (defstate billy-done (billy) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'billy-rat-needs-destination) - (let* ((gp-0 arg0) + (let* ((gp-0 proc) (v1-2 (if (and (nonzero? gp-0) (type-type? (-> gp-0 type) billy-rat)) gp-0 ) @@ -829,8 +829,8 @@ ;; failed to figure out what this is: (defstate billy-playing (billy) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('billy-rat-die) (+! (-> self num-rats) -1) (let* ((f0-2 (rand-float-gen)) @@ -862,7 +862,7 @@ ) ) (('billy-rat-needs-destination) - (let* ((s5-0 arg0) + (let* ((s5-0 proc) (gp-0 (if (and (nonzero? s5-0) (type-type? (-> s5-0 type) billy-rat)) (the-as billy-rat s5-0) ) diff --git a/test/decompiler/reference/jak1/levels/swamp/kermit_REF.gc b/test/decompiler/reference/jak1/levels/swamp/kermit_REF.gc index 6aef844ea7..8f2377ac83 100644 --- a/test/decompiler/reference/jak1/levels/swamp/kermit_REF.gc +++ b/test/decompiler/reference/jak1/levels/swamp/kermit_REF.gc @@ -571,10 +571,10 @@ ;; failed to figure out what this is: (defstate kermit-pulse-idle (kermit-pulse) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('touch 'attack) - (send-event arg0 'attack (-> arg3 param 0) (new 'static 'attack-info)) + (send-event proc 'attack (-> event param 0) (new 'static 'attack-info)) (go kermit-pulse-impact) ) ) diff --git a/test/decompiler/reference/jak1/levels/swamp/swamp-obs_REF.gc b/test/decompiler/reference/jak1/levels/swamp/swamp-obs_REF.gc index c14f721e7d..de1da7506d 100644 --- a/test/decompiler/reference/jak1/levels/swamp/swamp-obs_REF.gc +++ b/test/decompiler/reference/jak1/levels/swamp/swamp-obs_REF.gc @@ -289,8 +289,8 @@ ;; failed to figure out what this is: (defstate swamp-spike-gate-up (swampgate) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'trigger) (let ((v0-0 #t)) (set! (-> self open-gate) v0-0) @@ -461,8 +461,8 @@ ;; failed to figure out what this is: (defstate balance-plat-idle (balance-plat) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'grow) (let ((v0-0 #t)) (set! (-> self got-grow) v0-0) @@ -688,10 +688,10 @@ ;; failed to figure out what this is: (defstate swamp-rock-idle (swamp-rock) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('attack) - (if (and (>= arg1 2) (= (-> arg3 param 1) 'eco-yellow)) + (if (and (>= arg1 2) (= (-> event param 1) 'eco-yellow)) (go swamp-rock-break) ) ) diff --git a/test/decompiler/reference/jak1/levels/swamp/swamp-rat-nest_REF.gc b/test/decompiler/reference/jak1/levels/swamp/swamp-rat-nest_REF.gc index d6711ad4ba..3df39f4bc1 100644 --- a/test/decompiler/reference/jak1/levels/swamp/swamp-rat-nest_REF.gc +++ b/test/decompiler/reference/jak1/levels/swamp/swamp-rat-nest_REF.gc @@ -1002,8 +1002,8 @@ swamp-rat-nest-default-event-handler ;; failed to figure out what this is: (defstate swamp-rat-nest-idle (swamp-rat-nest) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('hit) (go swamp-rat-nest-active) ) diff --git a/test/decompiler/reference/jak1/levels/title/title-obs_REF.gc b/test/decompiler/reference/jak1/levels/title/title-obs_REF.gc index 9dfa51a6b2..2624f431c9 100644 --- a/test/decompiler/reference/jak1/levels/title/title-obs_REF.gc +++ b/test/decompiler/reference/jak1/levels/title/title-obs_REF.gc @@ -150,13 +150,13 @@ ;; failed to figure out what this is: (defstate idle (logo-slave) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (local-vars (v0-0 uint)) - (let ((v1-0 arg2)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'blend-shape) (cond - ((-> arg3 param 0) + ((-> event param 0) (set! v0-0 (the-as uint (logior (-> self skel status) (janim-status blerc eye)))) (set! (-> self skel status) (the-as janim-status v0-0)) ) @@ -168,7 +168,7 @@ v0-0 ) ((= v1-0 'origin-joint-index) - (set! v0-0 (-> arg3 param 0)) + (set! v0-0 (-> event param 0)) (set! (-> self draw origin-joint-index) v0-0) v0-0 ) @@ -224,8 +224,8 @@ ;; failed to figure out what this is: (defstate startup (logo) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (if (= v1-0 'update) (remove-setting! 'process-mask) ) @@ -493,8 +493,8 @@ ;; failed to figure out what this is: (defstate ndi (logo) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (if (= v1-0 'blackout) (set-setting! 'bg-a 'abs 1.0 0) ) @@ -812,8 +812,8 @@ ;; failed to figure out what this is: (defstate target-title-play (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'wait) (go target-title-wait) @@ -822,7 +822,7 @@ (deactivate (-> self manipy 0)) ) (else - (target-generic-event-handler arg0 arg1 arg2 arg3) + (target-generic-event-handler proc arg1 event-type event) ) ) ) @@ -841,8 +841,8 @@ ;; failed to figure out what this is: (defstate target-title-wait (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'play) (go target-title-play) @@ -851,7 +851,7 @@ (deactivate (-> self manipy 0)) ) (else - (target-generic-event-handler arg0 arg1 arg2 arg3) + (target-generic-event-handler proc arg1 event-type event) ) ) ) diff --git a/test/decompiler/reference/jak1/levels/training/training-obs_REF.gc b/test/decompiler/reference/jak1/levels/training/training-obs_REF.gc index f23afaa864..daaed30370 100644 --- a/test/decompiler/reference/jak1/levels/training/training-obs_REF.gc +++ b/test/decompiler/reference/jak1/levels/training/training-obs_REF.gc @@ -710,13 +710,13 @@ ;; failed to figure out what this is: (defstate idle (scarecrow-a) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'attack) - (let* ((s3-0 (-> arg3 param 2)) + (let* ((s3-0 (-> event param 2)) (s4-0 (get-task-control (game-task training-gimmie))) (v1-2 (get-reminder s4-0 0)) ) @@ -725,11 +725,11 @@ (cond ((= (-> self type) scarecrow-b) ) - ((and (= (-> arg3 param 1) 'spin) (zero? v1-2)) + ((and (= (-> event param 1) 'spin) (zero? v1-2)) (save-reminder s4-0 1 0) 1 ) - ((and (= (-> arg3 param 1) 'punch) (= v1-2 1)) + ((and (= (-> event param 1) 'punch) (= v1-2 1)) (save-reminder s4-0 2 0) 2 ) @@ -738,7 +738,7 @@ ((= v1-2 1) ) ) - (let* ((s4-1 arg0) + (let* ((s4-1 proc) (v1-14 (if (and (nonzero? s4-1) (type-type? (-> s4-1 type) process-drawable)) s4-1 ) @@ -758,7 +758,7 @@ ) ) (a0-24 ((method-of-type touching-shapes-entry prims-touching?) - (the-as touching-shapes-entry (-> arg3 param 0)) + (the-as touching-shapes-entry (-> event param 0)) (the-as collide-shape-moving (-> self root-override)) (the-as uint -1) ) @@ -774,14 +774,14 @@ (the-as symbol (and ((method-of-type touching-shapes-entry prims-touching?) - (the-as touching-shapes-entry (-> arg3 param 0)) + (the-as touching-shapes-entry (-> event param 0)) (the-as collide-shape-moving (-> self root-override)) (the-as uint 2) ) (or (= (-> self type) scarecrow-a) - (and (= (-> arg0 type) target) - (logtest? (-> (the-as target arg0) control unknown-surface00 flags) (surface-flags jump)) - (zero? (logand (-> (the-as target arg0) control status) (cshape-moving-flags onsurf))) + (and (= (-> proc type) target) + (logtest? (-> (the-as target proc) control unknown-surface00 flags) (surface-flags jump)) + (zero? (logand (-> (the-as target proc) control status) (cshape-moving-flags onsurf))) ) ) ) @@ -794,8 +794,8 @@ ((= v1-0 'touch) (send-shove-back (-> self root-override) - arg0 - (the-as touching-shapes-entry (-> arg3 param 0)) + proc + (the-as touching-shapes-entry (-> event param 0)) 0.7 6144.0 16384.0 diff --git a/test/decompiler/reference/jak1/levels/village1/fishermans-boat_REF.gc b/test/decompiler/reference/jak1/levels/village1/fishermans-boat_REF.gc index 120490ce73..d23f4daba1 100644 --- a/test/decompiler/reference/jak1/levels/village1/fishermans-boat_REF.gc +++ b/test/decompiler/reference/jak1/levels/village1/fishermans-boat_REF.gc @@ -1659,8 +1659,8 @@ ;; failed to figure out what this is: (defstate fishermans-boat-ride-to-village1 (fishermans-boat) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond diff --git a/test/decompiler/reference/jak1/levels/village1/sequence-a-village1_REF.gc b/test/decompiler/reference/jak1/levels/village1/sequence-a-village1_REF.gc index 350b22b1d5..922033e99f 100644 --- a/test/decompiler/reference/jak1/levels/village1/sequence-a-village1_REF.gc +++ b/test/decompiler/reference/jak1/levels/village1/sequence-a-village1_REF.gc @@ -276,8 +276,8 @@ ;; failed to figure out what this is: (defstate play-anim (sequenceA-village1) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('sidekick-human) (format 0 "got sidekick-human~%") (when (= (level-status *level* 'misty) 'active) diff --git a/test/decompiler/reference/jak1/levels/village2/swamp-blimp_REF.gc b/test/decompiler/reference/jak1/levels/village2/swamp-blimp_REF.gc index c8c40adc96..b3b7daef91 100644 --- a/test/decompiler/reference/jak1/levels/village2/swamp-blimp_REF.gc +++ b/test/decompiler/reference/jak1/levels/village2/swamp-blimp_REF.gc @@ -991,17 +991,17 @@ ;; failed to figure out what this is: (defstate swamp-tetherrock-idle (swamp-tetherrock) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('attack) - (when (and (>= arg1 2) (= (-> arg3 param 1) 'eco-yellow)) + (when (and (>= arg1 2) (= (-> event param 1) 'eco-yellow)) (+! (-> self hits) 1) (cond ((>= (-> self hits) 1) (go swamp-tetherrock-break) ) (else - (let* ((s5-0 arg0) + (let* ((s5-0 proc) (gp-0 (if (and (nonzero? s5-0) (type-type? (-> s5-0 type) process-drawable)) s5-0 ) @@ -1181,8 +1181,8 @@ ;; failed to figure out what this is: (defstate precursor-arm-idle (precursor-arm) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('arm-sink-evt) (go precursor-arm-sink) ) @@ -1758,8 +1758,8 @@ ;; failed to figure out what this is: (defstate swamp-blimp-idle (swamp-blimp) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'tetherrock-break-evt) (increment-success-for-hint (game-text-id swamp-tetherrock-eco-yellow-hint)) (swamp-blimp-setup) diff --git a/test/decompiler/reference/jak1/levels/village2/village2-obs_REF.gc b/test/decompiler/reference/jak1/levels/village2/village2-obs_REF.gc index 91959f174c..531fb3037b 100644 --- a/test/decompiler/reference/jak1/levels/village2/village2-obs_REF.gc +++ b/test/decompiler/reference/jak1/levels/village2/village2-obs_REF.gc @@ -168,15 +168,15 @@ ;; failed to figure out what this is: (defstate rigid-body-platform-float (pontoon) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'die) (cleanup-for-death self) (deactivate self) ) (else - (rigid-body-platform-event-handler arg0 arg1 arg2 arg3) + (rigid-body-platform-event-handler proc arg1 event-type event) ) ) ) @@ -187,8 +187,8 @@ ;; failed to figure out what this is: (defstate rigid-body-platform-idle (pontoon) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'die) (cleanup-for-death self) (deactivate self) @@ -566,8 +566,8 @@ ;; failed to figure out what this is: (defstate allpontoons-be-clone (allpontoons) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'end-mode) (cleanup-for-death self) (deactivate self) @@ -605,10 +605,10 @@ ;; failed to figure out what this is: (defstate allpontoons-idle (allpontoons) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('clone) - (go allpontoons-be-clone (the-as handle (-> arg3 param 0))) + (go allpontoons-be-clone (the-as handle (-> event param 0))) ) ) ) @@ -786,8 +786,8 @@ ;; failed to figure out what this is: (defstate fireboulder-be-clone (fireboulder) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('stop-cloning) (go fireboulder-hover) ) @@ -814,10 +814,10 @@ ;; failed to figure out what this is: (defstate fireboulder-idle (fireboulder) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('clone) - (go fireboulder-be-clone (the-as handle (-> arg3 param 0))) + (go fireboulder-be-clone (the-as handle (-> event param 0))) ) ) ) diff --git a/test/decompiler/reference/jak1/levels/village3/minecart_REF.gc b/test/decompiler/reference/jak1/levels/village3/minecart_REF.gc index d221c00246..fef1a18011 100644 --- a/test/decompiler/reference/jak1/levels/village3/minecart_REF.gc +++ b/test/decompiler/reference/jak1/levels/village3/minecart_REF.gc @@ -42,13 +42,13 @@ ;; failed to figure out what this is: (defstate idle (minecartsteel) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (or (= v1-0 'touch) (= v1-0 'attack)) - (when (= (-> arg0 type) target) + (when (= (-> proc type) target) (let ((a2-1 (new 'stack 'collide-overlap-result))) (if (not (on-platform (-> self root-override) (-> *target* control) a2-1)) - (send-event arg0 'no-look-around (seconds 1.5)) + (send-event proc 'no-look-around (seconds 1.5)) ) ) ) diff --git a/test/decompiler/reference/jak1/levels/village3/village3-obs_REF.gc b/test/decompiler/reference/jak1/levels/village3/village3-obs_REF.gc index b94e35cbcc..f30578a0b3 100644 --- a/test/decompiler/reference/jak1/levels/village3/village3-obs_REF.gc +++ b/test/decompiler/reference/jak1/levels/village3/village3-obs_REF.gc @@ -446,10 +446,10 @@ ;; failed to figure out what this is: (defstate idle (pistons) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('update) - (go-virtual active (process->handle arg0) #f) + (go-virtual active (process->handle proc) #f) ) ) ) @@ -512,8 +512,8 @@ ;; failed to figure out what this is: (defstate idle (gondolacables) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (when (= v1-0 'update) (process-entity-status! self (entity-perm-status complete) #t) (let ((v0-0 1)) diff --git a/test/decompiler/reference/jak1/levels/village_common/villagep-obs_REF.gc b/test/decompiler/reference/jak1/levels/village_common/villagep-obs_REF.gc index 04cba7533a..17cfa0cabf 100644 --- a/test/decompiler/reference/jak1/levels/village_common/villagep-obs_REF.gc +++ b/test/decompiler/reference/jak1/levels/village_common/villagep-obs_REF.gc @@ -122,8 +122,8 @@ ;; failed to figure out what this is: (defstate idle (warp-gate) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('hide) (go-virtual hidden) ) @@ -680,8 +680,8 @@ ;; failed to figure out what this is: (defstate basebutton-up-idle (warp-gate-switch) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('touch 'attack) (when (pressable? self) (TODO-RENAME-29 self (-> self event-going-down) (-> self notify-actor)) @@ -689,10 +689,10 @@ ) ) (('hide) - (send-event (handle->process (-> self warp)) arg2) + (send-event (handle->process (-> self warp)) event-type) ) (else - ((-> (method-of-type basebutton basebutton-up-idle) event) arg0 arg1 arg2 arg3) + ((-> (method-of-type basebutton basebutton-up-idle) event) proc arg1 event-type event) ) ) ) @@ -800,13 +800,13 @@ ;; failed to figure out what this is: (defstate basebutton-down-idle (warp-gate-switch) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('hide) - (send-event (handle->process (-> self warp)) arg2) + (send-event (handle->process (-> self warp)) event-type) ) (else - ((-> (method-of-type basebutton basebutton-down-idle) event) arg0 arg1 arg2 arg3) + ((-> (method-of-type basebutton basebutton-down-idle) event) proc arg1 event-type event) ) ) ) diff --git a/test/decompiler/reference/jak2/engine/camera/cam-combiner_REF.gc b/test/decompiler/reference/jak2/engine/camera/cam-combiner_REF.gc index d0b736cede..0baf0590ae 100644 --- a/test/decompiler/reference/jak2/engine/camera/cam-combiner_REF.gc +++ b/test/decompiler/reference/jak2/engine/camera/cam-combiner_REF.gc @@ -123,9 +123,9 @@ ;; failed to figure out what this is: (defstate cam-combiner-active (camera-combiner) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (local-vars (v0-0 none)) - (let ((v1-0 arg2)) + (let ((v1-0 event-type)) (the-as object (cond @@ -135,7 +135,7 @@ v0-0 ) ((= v1-0 'set-interpolation) - (let ((f0-1 (the float (-> arg3 param 0)))) + (let ((f0-1 (the float (-> event param 0)))) (cond ((>= 0.0 f0-1) (set! (-> self interp-val) 1.0) @@ -171,24 +171,24 @@ (a0-14 0) (a1-4 "ERROR : missing camera-slave parameter to *camera-combiner* start-tracking~%") ) - (let ((v1-8 (-> arg3 param 0))) + (let ((v1-8 (-> event param 0))) (rtype-of v1-8) ) (t9-3 a0-14 a1-4) ) ) - ((not (type? (-> arg3 param 0) camera-slave)) + ((not (type? (-> event param 0) camera-slave)) (let ((t9-5 format) (a0-16 0) (a1-6 "ERROR : invalid type '~A' to *camera-combiner* start-tracking~%") - (v1-11 (-> arg3 param 0)) + (v1-11 (-> event param 0)) ) (t9-5 a0-16 a1-6 (rtype-of v1-11)) ) ) ((zero? (-> self tracking-status)) (set! (-> self tracking-status) (the-as uint 1)) - (let ((gp-1 (the-as camera-slave (-> arg3 param 0)))) + (let ((gp-1 (the-as camera-slave (-> event param 0)))) (set! (-> self tracking-options) (the-as int (-> gp-1 options))) (set! (-> self tracking no-follow) (-> gp-1 tracking no-follow)) (copy-to (-> self tracking tilt-adjust) (-> gp-1 tracking tilt-adjust)) @@ -209,17 +209,17 @@ (a0-23 0) (a1-12 "ERROR : missing camera-slave parameter to *camera-combiner* copy-tracking~%") ) - (let ((v1-23 (-> arg3 param 0))) + (let ((v1-23 (-> event param 0))) (rtype-of v1-23) ) (t9-11 a0-23 a1-12) ) ) - ((not (type? (-> arg3 param 0) camera-slave)) + ((not (type? (-> event param 0) camera-slave)) (let ((t9-13 format) (a0-25 0) (a1-14 "ERROR : invalid type '~A' to *camera-combiner* copy-tracking~%") - (v1-25 (-> arg3 param 0)) + (v1-25 (-> event param 0)) ) (t9-13 a0-25 a1-14 (rtype-of v1-25)) ) @@ -229,7 +229,7 @@ ) (else (set! (-> self tracking-status) (the-as uint 1)) - (let ((gp-3 (the-as camera-slave (-> arg3 param 0)))) + (let ((gp-3 (the-as camera-slave (-> event param 0)))) (set! (-> self tracking-options) (the-as int (-> gp-3 options))) (set! (-> self tracking no-follow) (-> gp-3 tracking no-follow)) (copy-to (-> self tracking tilt-adjust) (-> gp-3 tracking tilt-adjust)) diff --git a/test/decompiler/reference/jak2/engine/camera/cam-states-dbg_REF.gc b/test/decompiler/reference/jak2/engine/camera/cam-states-dbg_REF.gc index a362b505b9..ccd15149c1 100644 --- a/test/decompiler/reference/jak2/engine/camera/cam-states-dbg_REF.gc +++ b/test/decompiler/reference/jak2/engine/camera/cam-states-dbg_REF.gc @@ -29,11 +29,11 @@ ;; failed to figure out what this is: (defstate cam-point-watch (camera-slave) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (if (= v1-0 'teleport) #f - (cam-standard-event-handler arg0 arg1 arg2 arg3) + (cam-standard-event-handler proc arg1 event-type event) ) ) ) @@ -478,11 +478,11 @@ ;; failed to figure out what this is: (defstate cam-free-floating (camera-slave) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (if (= v1-0 'teleport) #f - (cam-standard-event-handler arg0 arg1 arg2 arg3) + (cam-standard-event-handler proc arg1 event-type event) ) ) ) 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 315c013deb..94c181ec9e 100644 --- a/test/decompiler/reference/jak2/engine/camera/cam-states_REF.gc +++ b/test/decompiler/reference/jak2/engine/camera/cam-states_REF.gc @@ -3,11 +3,11 @@ ;; failed to figure out what this is: (defstate cam-really-fixed (camera-slave) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (if (= v1-0 'teleport) #f - (cam-standard-event-handler arg0 arg1 arg2 arg3) + (cam-standard-event-handler proc arg1 event-type event) ) ) ) @@ -32,11 +32,11 @@ ;; failed to figure out what this is: (defstate cam-fixed (camera-slave) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (if (= v1-0 'teleport) #f - (cam-standard-event-handler arg0 arg1 arg2 arg3) + (cam-standard-event-handler proc arg1 event-type event) ) ) ) @@ -71,11 +71,11 @@ ;; failed to figure out what this is: (defstate cam-fixed-read-entity (camera-slave) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (if (= v1-0 'teleport) #f - (cam-standard-event-handler arg0 arg1 arg2 arg3) + (cam-standard-event-handler proc arg1 event-type event) ) ) ) @@ -110,11 +110,11 @@ ;; failed to figure out what this is: (defstate cam-pov (camera-slave) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (if (= v1-0 'teleport) #f - (cam-standard-event-handler arg0 arg1 arg2 arg3) + (cam-standard-event-handler proc arg1 event-type event) ) ) ) @@ -176,11 +176,11 @@ ;; failed to figure out what this is: (defstate cam-pov180 (camera-slave) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (if (= v1-0 'teleport) #f - (cam-standard-event-handler arg0 arg1 arg2 arg3) + (cam-standard-event-handler proc arg1 event-type event) ) ) ) @@ -357,11 +357,11 @@ ;; failed to figure out what this is: (defstate cam-standoff (camera-slave) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'set-standoff-dist) - (vector-normalize! (-> self pivot-pt) (the-as float (-> arg3 param 0))) + (vector-normalize! (-> self pivot-pt) (the-as float (-> event param 0))) (cam-standoff-calc-trans) ) ((= v1-0 'set-standoff-height) @@ -370,12 +370,12 @@ (-> self pivot-pt) (-> self pivot-pt) (-> *camera* local-down) - (the-as float (-> arg3 param 0)) + (the-as float (-> event param 0)) ) (cam-standoff-calc-trans) ) (else - (cam-standard-event-handler arg0 arg1 arg2 arg3) + (cam-standard-event-handler proc arg1 event-type event) ) ) ) @@ -498,11 +498,11 @@ ;; failed to figure out what this is: (defstate cam-eye (camera-slave) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (if (= v1-0 'teleport) #f - (cam-standard-event-handler arg0 arg1 arg2 arg3) + (cam-standard-event-handler proc arg1 event-type event) ) ) ) @@ -761,11 +761,11 @@ ;; failed to figure out what this is: (defstate cam-decel (camera-slave) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (if (= v1-0 'teleport) #f - (cam-standard-event-handler arg0 arg1 arg2 arg3) + (cam-standard-event-handler proc arg1 event-type event) ) ) ) @@ -816,11 +816,11 @@ ;; failed to figure out what this is: (defstate cam-endlessfall (camera-slave) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (if (= v1-0 'teleport) #f - (cam-standard-event-handler arg0 arg1 arg2 arg3) + (cam-standard-event-handler proc arg1 event-type event) ) ) ) @@ -4886,9 +4886,9 @@ ;; failed to figure out what this is: (defstate cam-string (camera-slave) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (local-vars (v0-0 none)) - (let ((v1-0 arg2)) + (let ((v1-0 event-type)) (the-as object (cond @@ -4896,7 +4896,7 @@ (set! (-> self butt-timer) (the-as uint (+ (-> self clock frame-counter) (seconds 0.25)))) (set! (-> self butt-seek) (the-as basic #t)) (set! v0-0 (the-as none (-> self butt-vector))) - (set! (-> (the-as vector v0-0) quad) (-> (the-as vector (-> arg3 param 0)) quad)) + (set! (-> (the-as vector v0-0) quad) (-> (the-as vector (-> event param 0)) quad)) v0-0 ) ((= v1-0 'teleport) @@ -4906,18 +4906,18 @@ ) ) ((= v1-0 'joystick) - (set! (-> self phony-joystick-x) (the-as float (-> arg3 param 0))) - (set! (-> self phony-joystick-y) (the-as float (-> arg3 param 1))) + (set! (-> self phony-joystick-x) (the-as float (-> event param 0))) + (set! (-> self phony-joystick-y) (the-as float (-> event param 1))) (set! v0-0 (the-as none #t)) (set! (-> self have-phony-joystick) (the-as basic v0-0)) v0-0 ) ((= v1-0 'tween-dist) (cond - ((-> arg3 param 0) + ((-> event param 0) (set! (-> self string-val-locked) (the-as basic #t)) - (let ((s5-0 (the-as object (-> arg3 param 0))) - (gp-1 (the-as object (-> arg3 param 1))) + (let ((s5-0 (the-as object (-> event param 0))) + (gp-1 (the-as object (-> event param 1))) ) (if (!= (-> (the-as vector s5-0) y) 4095996000.0) (seek! @@ -4960,10 +4960,10 @@ ) ((= v1-0 'set-dist) (cond - ((-> arg3 param 0) + ((-> event param 0) (set! (-> self string-val-locked) (the-as basic #t)) - (set! (-> self string-min-val quad) (-> (the-as vector (-> arg3 param 0)) quad)) - (set! (-> self string-max-val quad) (-> (the-as vector (-> arg3 param 1)) quad)) + (set! (-> self string-min-val quad) (-> (the-as vector (-> event param 0)) quad)) + (set! (-> self string-max-val quad) (-> (the-as vector (-> event param 1)) quad)) (set! (-> self string-max-val x) (fmax (-> self string-max-val x) (-> self string-min-val x))) (set! (-> self string-max-val y) (fmax (-> self string-max-val y) (-> self string-min-val y))) (set! (-> self string-max-val z) (fmax (-> self string-max-val z) (-> self string-min-val z))) @@ -4976,11 +4976,11 @@ ) ((= v1-0 'relative-position) (cond - ((-> arg3 param 0) + ((-> event param 0) (set! (-> self string-val-locked) (the-as basic #t)) (set! (-> self string-relative) (the-as basic #t)) (set! v0-0 (the-as none (-> self relative-position))) - (set! (-> (the-as vector v0-0) quad) (-> (the-as vector (-> arg3 param 0)) quad)) + (set! (-> (the-as vector v0-0) quad) (-> (the-as vector (-> event param 0)) quad)) v0-0 ) (else @@ -4991,13 +4991,13 @@ ) ) ((= v1-0 'set-max-angle-offset) - (set! (-> self max-angle-offset) (the-as float (-> arg3 param 0))) + (set! (-> self max-angle-offset) (the-as float (-> event param 0))) ) ((= v1-0 'blocked-side?) (-> self los-state) ) (else - (cam-standard-event-handler arg0 arg1 arg2 arg3) + (cam-standard-event-handler proc arg1 event-type event) ) ) ) diff --git a/test/decompiler/reference/jak2/engine/collide/collide-shape-h_REF.gc b/test/decompiler/reference/jak2/engine/collide/collide-shape-h_REF.gc index 4a2b4a778e..3d6b6f831e 100644 --- a/test/decompiler/reference/jak2/engine/collide/collide-shape-h_REF.gc +++ b/test/decompiler/reference/jak2/engine/collide/collide-shape-h_REF.gc @@ -1297,7 +1297,7 @@ (penetrate-using penetrate :offset-assert 168) (penetrated-by penetrate :offset-assert 176) (backup-collide-as collide-spec :offset-assert 184) - (backup-collde-with collide-spec :offset-assert 188) + (backup-collide-with collide-spec :offset-assert 188) (event-priority uint8 :offset-assert 192) (rider-max-momentum float :offset-assert 196) ) @@ -1306,7 +1306,7 @@ :flag-assert #x37000000c8 (:methods (new (symbol type process-drawable collide-list-enum) _type_ 0) - (collide-shape-method-28 () none 28) + (move-by-vector! (_type_ vector) none 28) (collide-shape-method-29 (_type_ vector) none 29) (collide-shape-method-30 () none 30) (collide-shape-method-31 () none 31) @@ -1573,7 +1573,7 @@ ) (format #t ")~%") (format #t "~1Tbackup-collide-as: ~D~%" (-> obj backup-collide-as)) - (format #t "~1Tbackup-collide-with: ~D~%" (-> obj backup-collde-with)) + (format #t "~1Tbackup-collide-with: ~D~%" (-> obj backup-collide-with)) (format #t "~1Tevent-priority: ~D~%" (-> obj event-priority)) (format #t "~1Trider-max-momentum: ~f~%" (-> obj rider-max-momentum)) (label cfg-136) @@ -1867,7 +1867,7 @@ ) (format #t ")~%") (format #t "~1Tbackup-collide-as: ~D~%" (-> obj backup-collide-as)) - (format #t "~1Tbackup-collide-with: ~D~%" (-> obj backup-collde-with)) + (format #t "~1Tbackup-collide-with: ~D~%" (-> obj backup-collide-with)) (format #t "~1Tevent-priority: ~D~%" (-> obj event-priority)) (format #t "~1Trider-max-momentum: ~f~%" (-> obj rider-max-momentum)) (format #t "~1Trider-time: ~D~%" (-> obj rider-time)) diff --git a/test/decompiler/reference/jak2/engine/collide/collide-touch-h_REF.gc b/test/decompiler/reference/jak2/engine/collide/collide-touch-h_REF.gc index 4d7dbbac27..9e75bb8eeb 100644 --- a/test/decompiler/reference/jak2/engine/collide/collide-touch-h_REF.gc +++ b/test/decompiler/reference/jak2/engine/collide/collide-touch-h_REF.gc @@ -146,7 +146,7 @@ (get-next (_type_ touching-shapes-entry) touching-prims-entry 10) (touching-shapes-entry-method-11 () none 11) (touching-shapes-entry-method-12 (_type_ collide-shape uint) touching-prims-entry 12) - (touching-shapes-entry-method-13 () none 13) + (touching-shapes-entry-method-13 (_type_ collide-shape uint uint) basic 13) (touching-shapes-entry-method-14 () none 14) ) ) diff --git a/test/decompiler/reference/jak2/engine/common_objs/base-plat_REF.gc b/test/decompiler/reference/jak2/engine/common_objs/base-plat_REF.gc new file mode 100644 index 0000000000..a1fcaca7e9 --- /dev/null +++ b/test/decompiler/reference/jak2/engine/common_objs/base-plat_REF.gc @@ -0,0 +1,472 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type base-plat +(deftype base-plat (process-focusable) + ((root-override collide-shape-moving :offset 128) + (smush smush-control :inline :offset-assert 208) + (basetrans vector :inline :offset-assert 240) + (bounce-time time-frame :offset-assert 256) + (bouncing symbol :offset-assert 264) + (bounce-scale meters :offset-assert 268) + ) + :heap-base #x90 + :method-count-assert 34 + :size-assert #x110 + :flag-assert #x2200900110 + (:methods + (execute-effects (_type_) none 27) + (stop-bouncing! (_type_) none 28) + (start-bouncing! (_type_) none :behavior base-plat 29) + (get-art-group (_type_) art-group 30) + (base-plat-method-31 (_type_) none 31) + (base-plat-method-32 (_type_) none 32) + (base-plat-method-33 (_type_) none 33) + ) + ) + +;; definition for method 3 of type base-plat +(defmethod inspect base-plat ((obj base-plat)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (let ((t9-0 (method-of-type process-focusable inspect))) + (t9-0 obj) + ) + (format #t "~2Tsmush: #~%" (-> obj smush)) + (format #t "~2Tbasetrans: #~%" (-> obj basetrans)) + (format #t "~2Tbounce-time: ~D~%" (-> obj bounce-time)) + (format #t "~2Tbouncing: ~A~%" (-> obj bouncing)) + (format #t "~2Tbounce-scale: (meters ~m)~%" (-> obj bounce-scale)) + (label cfg-4) + obj + ) + +;; definition for method 33 of type base-plat +;; WARN: Return type mismatch int vs none. +(defmethod base-plat-method-33 base-plat ((obj base-plat)) + 0 + (none) + ) + +;; definition for method 28 of type base-plat +;; INFO: Used lq/sq +;; WARN: Return type mismatch int vs none. +(defmethod stop-bouncing! base-plat ((obj base-plat)) + "Sets `bouncing` to false and resets related settings to their defaults" + (set! (-> obj basetrans quad) (-> obj root-override trans quad)) + (set! (-> obj bouncing) #f) + (set! (-> obj bounce-scale) 819.2) + 0 + (none) + ) + +;; definition for method 29 of type base-plat +;; WARN: Return type mismatch int vs none. +(defmethod start-bouncing! base-plat ((obj base-plat)) + "Sets `bouncing` to [[#t]] and sets up the clock to periodically bounce + and translate the platform via the `smush` + @see [[smush-control]]" + (activate! (-> obj smush) -1.0 60 150 1.0 1.0 (-> self clock)) + (set! (-> obj bounce-time) (-> self clock frame-counter)) + (set! (-> obj bouncing) #t) + (sound-play "plat-bounce" :position (-> obj root-override trans)) + (logclear! (-> obj mask) (process-mask sleep)) + (logclear! (-> obj mask) (process-mask sleep-code)) + 0 + (none) + ) + +;; definition for function plat-code +;; WARN: Return type mismatch symbol vs none. +;; WARN: new jak 2 until loop case, check carefully +(defbehavior plat-code base-plat () + "After calling [[transform-post]] for 2 consecutive frames, put the process to sleep if it's not bouncing + otherwise, continue bouncing...forever! + @see [[transform-post]]" + (transform-post) + (suspend) + (transform-post) + (suspend) + (until #f + (when (not (-> self bouncing)) + (logior! (-> self mask) (process-mask sleep)) + (suspend) + 0 + ) + (while (-> self bouncing) + (suspend) + ) + ) + #f + (none) + ) + +;; definition for function plat-trans +;; INFO: Used lq/sq +(defbehavior plat-trans base-plat () + "If the platform is `bouncing`, move the platform accordingly with the [[smush-control]] + - If the amplitude of the `smush` has hit `0.0` then stop bouncing + + If we aren't bouncing however, TODO - CSHAPE" + (rider-trans) + (cond + ((-> self bouncing) + (let ((trans (new 'stack-no-clear 'vector))) + (set! (-> trans quad) (-> self basetrans quad)) + (+! (-> trans y) (* (-> self bounce-scale) (update! (-> self smush)))) + (collide-shape-method-29 (-> self root-override) trans) + ) + (if (not (!= (-> self smush amp) 0.0)) + (set! (-> self bouncing) #f) + ) + ) + (else + (collide-shape-method-29 (-> self root-override) (-> self basetrans)) + ) + ) + (none) + ) + +;; definition for function plat-post +(defbehavior plat-post base-plat () + (execute-effects self) + (rider-post) + (none) + ) + +;; definition for method 32 of type base-plat +;; WARN: Return type mismatch int vs none. +(defmethod base-plat-method-32 base-plat ((obj base-plat)) + 0 + (none) + ) + +;; definition for method 27 of type base-plat +;; INFO: Used lq/sq +;; WARN: Return type mismatch int vs none. +(defmethod execute-effects base-plat ((obj base-plat)) + "Executes various ancillary tasks with the platform, such as spawning particles or playing the associated sound" + (if (nonzero? (-> obj part)) + (sparticle-launch-control-method-11 (-> obj part) (-> obj root-override trans)) + ) + (when (nonzero? (-> obj sound)) + (set! (-> obj sound trans quad) (-> obj root-override trans quad)) + (update! (-> obj sound)) + ) + (none) + ) + +;; definition for function plat-event +;; WARN: Return type mismatch none vs object. +(defbehavior plat-event base-plat ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + "Handles platform related events. Presently all this does is: + - if `event-type` is [['bonk]], then call [[base-plat:29]]" + (let ((evt-type event-type)) + (the-as object (if (= evt-type 'bonk) + (start-bouncing! self) + ) + ) + ) + ) + +;; definition of type eco-door +(deftype eco-door (process-drawable) + "@unused - Likely a left-over from Jak 1" + ((root-override collide-shape :offset 128) + (speed float :offset-assert 200) + (open-distance float :offset-assert 204) + (close-distance float :offset-assert 208) + (out-dir vector :inline :offset-assert 224) + (open-sound sound-name :offset-assert 240) + (close-sound sound-name :offset-assert 256) + (state-actor entity-actor :offset-assert 272) + (flags eco-door-flags :offset-assert 276) + (locked symbol :offset-assert 280) + (auto-close symbol :offset-assert 284) + (one-way symbol :offset-assert 288) + ) + :heap-base #xb0 + :method-count-assert 27 + :size-assert #x124 + :flag-assert #x1b00b00124 + (:methods + (door-closed () _type_ :state 20) + (door-opening () _type_ :state 21) + (door-open () _type_ :state 22) + (door-closing () _type_ :state 23) + (lock-according-to-task! (_type_) none 24) + (eco-door-method-25 (_type_) none 25) + (stub (_type_) none 26) + ) + ) + +;; definition for method 3 of type eco-door +;; INFO: Used lq/sq +(defmethod inspect eco-door ((obj eco-door)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~2Tspeed: ~f~%" (-> obj speed)) + (format #t "~2Topen-distance: ~f~%" (-> obj open-distance)) + (format #t "~2Tclose-distance: ~f~%" (-> obj close-distance)) + (format #t "~2Tout-dir: #~%" (-> obj out-dir)) + (format #t "~2Topen-sound: ~D~%" (-> obj open-sound)) + (format #t "~2Tclose-sound: ~D~%" (-> obj close-sound)) + (format #t "~2Tstate-actor: ~A~%" (-> obj state-actor)) + (format #t "~2Tflags: ~D~%" (-> obj flags)) + (format #t "~2Tlocked: ~A~%" (-> obj locked)) + (format #t "~2Tauto-close: ~A~%" (-> obj auto-close)) + (format #t "~2Tone-way: ~A~%" (-> obj one-way)) + (label cfg-4) + obj + ) + +;; definition for function eco-door-event-handler +;; WARN: Return type mismatch symbol vs object. +(defbehavior eco-door-event-handler eco-door ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + "If the `event-type` is `'trigger`, flip the `locked` flag on the door + and play the respective sound + + @unused - likely a leftover from Jak 1" + (let ((evt-type event-type)) + (the-as object (when (= evt-type 'trigger) + (set! (-> self locked) (not (-> self locked))) + (cond + ((-> self locked) + (if (and (-> self next-state) (= (-> self next-state name) 'door-closed)) + (sound-play "door-lock") + ) + ) + (else + (sound-play "door-unlock") + ) + ) + #t + ) + ) + ) + ) + +;; failed to figure out what this is: +eco-door-event-handler + +;; failed to figure out what this is: +(defstate door-closed (eco-door) + :virtual #t + :event eco-door-event-handler + :code (behavior () + (ja :num-func num-func-identity :frame-num 0.0) + (suspend) + (collide-shape-method-46 (-> self root-override)) + (ja-post) + (until #f + (when (and *target* (and (>= (-> self open-distance) + (vector-vector-distance (-> self root-override trans) (-> *target* control trans)) + ) + (zero? (logand (focus-status teleporting) (-> *target* focus-status))) + ) + ) + (lock-according-to-task! self) + (if (and (not (-> self locked)) + (or (and (-> self entity) (logtest? (-> self entity extra perm status) (entity-perm-status subtask-complete))) + (send-event *target* 'query 'powerup (pickup-type eco-blue)) + (and (-> self one-way) (< (vector4-dot (-> self out-dir) (target-pos 0)) -8192.0)) + ) + ) + (go-virtual door-opening) + ) + ) + (suspend) + ) + #f + (none) + ) + ) + +;; failed to figure out what this is: +(defstate door-opening (eco-door) + :virtual #t + :event eco-door-event-handler + :code (behavior () + (if (and (not (and (-> self entity) (logtest? (-> self entity extra perm status) (entity-perm-status subtask-complete))) + ) + (send-event *target* 'query 'powerup (pickup-type eco-blue)) + ) + (sound-play "blue-eco-on" :position (-> self root-override trans)) + ) + (sound-play-by-name (-> self open-sound) (new-sound-id) 1024 0 0 (sound-group sfx) #t) + (let ((prim (-> self root-override root-prim))) + (set! (-> prim prim-core collide-as) (collide-spec)) + (set! (-> prim prim-core collide-with) (collide-spec)) + ) + 0 + (until (ja-done? 0) + (ja :num! (seek! max (-> self speed))) + (suspend) + ) + (go-virtual door-open) + (none) + ) + :post (the-as (function none :behavior eco-door) transform-post) + ) + +;; failed to figure out what this is: +(defstate door-open (eco-door) + :virtual #t + :event eco-door-event-handler + :code (behavior () + (set! (-> self state-time) (-> self clock frame-counter)) + (process-entity-status! self (entity-perm-status subtask-complete) #t) + (let ((prim (-> self root-override root-prim))) + (set! (-> prim prim-core collide-as) (collide-spec)) + (set! (-> prim prim-core collide-with) (collide-spec)) + ) + 0 + (ja :num-func num-func-identity :frame-num max) + (logior! (-> self draw status) (draw-control-status no-draw)) + (suspend) + (collide-shape-method-46 (-> self root-override)) + (ja-post) + (until #f + (let ((dist-from-target (vector4-dot (-> self out-dir) (target-pos 0))) + (dist-from-camera (vector4-dot (-> self out-dir) (camera-pos))) + ) + (when (and (-> self auto-close) + (or (not *target*) (or (< (-> self close-distance) + (vector-vector-distance (-> self root-override trans) (-> *target* control trans)) + ) + (logtest? (focus-status teleporting) (-> *target* focus-status)) + ) + ) + ) + (if (and (>= (* dist-from-target dist-from-camera) 0.0) (< 16384.0 (fabs dist-from-camera))) + (go-virtual door-closing) + ) + ) + ) + (suspend) + ) + #f + (none) + ) + ) + +;; failed to figure out what this is: +(defstate door-closing (eco-door) + :virtual #t + :event eco-door-event-handler + :code (behavior () + (let ((v1-1 (-> self root-override root-prim))) + (set! (-> v1-1 prim-core collide-as) (-> self root-override backup-collide-as)) + (set! (-> v1-1 prim-core collide-with) (-> self root-override backup-collide-with)) + ) + (logclear! (-> self draw status) (draw-control-status no-draw)) + (let ((params (new 'stack 'overlaps-others-params))) + (set! (-> params options) (overlaps-others-options oo0)) + (set! (-> params tlist) #f) + (while (find-overlapping-shapes (-> self root-override) params) + (suspend) + ) + ) + (sound-play-by-name (-> self close-sound) (new-sound-id) 1024 0 0 (sound-group sfx) #t) + (until (ja-done? 0) + (ja :num! (seek! 0.0 (-> self speed))) + (suspend) + ) + (if (-> self locked) + (sound-play "door-lock") + ) + (go-virtual door-closed) + (none) + ) + :post (the-as (function none :behavior eco-door) transform-post) + ) + +;; definition for method 24 of type eco-door +;; WARN: Return type mismatch int vs none. +(defmethod lock-according-to-task! eco-door ((obj eco-door)) + "If the associated subtask is completed, lock the door if [[eco-door-flags:0]] is set + otherwise, lock it if [[eco-door-flags:0]] is set" + (when (-> obj state-actor) + (if (logtest? (-> obj state-actor extra perm status) (entity-perm-status subtask-complete)) + (set! (-> obj locked) (logtest? (-> obj flags) (eco-door-flags ecdf01))) + (set! (-> obj locked) (logtest? (-> obj flags) (eco-door-flags ecdf00))) + ) + ) + 0 + (none) + ) + +;; definition for method 25 of type eco-door +;; WARN: Return type mismatch int vs none. +(defmethod eco-door-method-25 eco-door ((obj eco-door)) + (let ((collision-shape (new 'process 'collide-shape obj (collide-list-enum hit-by-player)))) + (let ((collision-mesh (new 'process 'collide-shape-prim-mesh collision-shape (the-as uint 0) (the-as uint 0)))) + (set! (-> collision-mesh prim-core collide-as) (collide-spec obstacle)) + (set! (-> collision-mesh prim-core collide-with) (collide-spec jak player-list)) + (set! (-> collision-mesh prim-core action) (collide-action solid)) + (set! (-> collision-mesh transform-index) 0) + (set-vector! (-> collision-mesh local-sphere) 0.0 0.0 0.0 16384.0) + (set! (-> collision-shape total-prims) (the-as uint 1)) + (set! (-> collision-shape root-prim) collision-mesh) + ) + (set! (-> collision-shape nav-radius) (* 0.75 (-> collision-shape root-prim local-sphere w))) + (let ((prim (-> collision-shape root-prim))) + (set! (-> collision-shape backup-collide-as) (-> prim prim-core collide-as)) + (set! (-> collision-shape backup-collide-with) (-> prim prim-core collide-with)) + ) + (set! (-> obj root-override) collision-shape) + ) + 0 + (none) + ) + +;; definition for method 26 of type eco-door +;; WARN: Return type mismatch int vs none. +(defmethod stub eco-door ((obj eco-door)) + "@unused - Stub with no overrides" + 0 + (none) + ) + +;; definition for method 11 of type eco-door +;; WARN: Return type mismatch object vs none. +(defmethod init-from-entity! eco-door ((obj eco-door) (arg0 entity-actor)) + (eco-door-method-25 obj) + (process-drawable-from-entity! obj arg0) + (let ((door-scale (res-lump-float (-> obj entity) 'scale :default 1.0))) + (set-vector! (-> obj root-override scale) door-scale door-scale door-scale 1.0) + ) + (set! (-> obj open-distance) 32768.0) + (set! (-> obj close-distance) 49152.0) + (set! (-> obj speed) 1.0) + (set! (-> obj state-actor) #f) + (let ((state-actor (entity-actor-lookup arg0 'state-actor 0))) + (if state-actor + (set! (-> obj state-actor) state-actor) + ) + ) + (set! (-> obj locked) #f) + (set! (-> obj flags) (res-lump-value arg0 'flags eco-door-flags :time -1000000000.0)) + (lock-according-to-task! obj) + (set! (-> obj auto-close) (logtest? (-> obj flags) (eco-door-flags auto-close))) + (set! (-> obj one-way) (logtest? (-> obj flags) (eco-door-flags one-way))) + (vector-z-quaternion! (-> obj out-dir) (-> obj root-override quat)) + (set! (-> obj out-dir w) (- (vector-dot (-> obj out-dir) (-> obj root-override trans)))) + (collide-shape-method-46 (-> obj root-override)) + (stub obj) + (if (and (not (-> obj auto-close)) + (-> obj entity) + (logtest? (-> obj entity extra perm status) (entity-perm-status subtask-complete)) + ) + (go (method-of-object obj door-open)) + (go (method-of-object obj door-closed)) + ) + (none) + ) diff --git a/test/decompiler/reference/jak2/engine/common_objs/basebutton_REF.gc b/test/decompiler/reference/jak2/engine/common_objs/basebutton_REF.gc new file mode 100644 index 0000000000..7b45b65e09 --- /dev/null +++ b/test/decompiler/reference/jak2/engine/common_objs/basebutton_REF.gc @@ -0,0 +1,541 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type basebutton +(deftype basebutton (process-focusable) + ((button-status button-status :offset-assert 204) + (notify-actor entity :offset-assert 208) + (actor-group (pointer actor-group) :offset-assert 212) + (actor-group-count int32 :offset-assert 216) + (timeout float :offset-assert 220) + (button-id int32 :offset-assert 224) + (event-going-down symbol :offset-assert 228) + (event-down symbol :offset-assert 232) + (event-going-up symbol :offset-assert 236) + (event-up symbol :offset-assert 240) + (anim-speed float :offset-assert 244) + (move-to-pos vector :inline :offset-assert 256) + (move-to-quat quaternion :inline :offset-assert 272) + ) + :heap-base #xa0 + :method-count-assert 39 + :size-assert #x120 + :flag-assert #x2700a00120 + (:methods + (down-idle () _type_ :state 27) + (going-down () _type_ :state 28) + (going-up () _type_ :state 29) + (up-idle () _type_ :state 30) + (reset! (_type_) none 31) + (idle-state-transition (_type_) object 32) + (basebutton-method-33 (_type_) none 33) + (basebutton-method-34 (_type_) none 34) + (prepare-trigger-event! (_type_) none 35) + (send-event! (_type_ symbol) none :behavior basebutton 36) + (move-to! (_type_ vector quaternion) none 37) + (press! (_type_ symbol) entity-perm-status 38) + ) + ) + +;; definition for method 3 of type basebutton +(defmethod inspect basebutton ((obj basebutton)) + (when (not obj) + (set! obj obj) + (goto cfg-7) + ) + (let ((t9-0 (method-of-type process-focusable inspect))) + (t9-0 obj) + ) + (format #t "~2Tbutton-status: ~D~%" (-> obj button-status)) + (format #t "~2Tnotify-actor: ~A~%" (-> obj notify-actor)) + (format #t "~2Tactor-group: #x~X~%" (-> obj actor-group)) + (dotimes (s5-0 (-> obj actor-group-count)) + (format #t "~T [~D]~2Tactor-group: ~`actor-group`P~%" s5-0 (-> obj actor-group s5-0)) + ) + (format #t "~2Tactor-group-count: ~D~%" (-> obj actor-group-count)) + (format #t "~2Ttimeout: ~f~%" (-> obj timeout)) + (format #t "~2Tbutton-id: ~D~%" (-> obj button-id)) + (format #t "~2Tevent-going-down: ~A~%" (-> obj event-going-down)) + (format #t "~2Tevent-down: ~A~%" (-> obj event-down)) + (format #t "~2Tevent-going-up: ~A~%" (-> obj event-going-up)) + (format #t "~2Tevent-up: ~A~%" (-> obj event-up)) + (format #t "~2Tanim-speed: ~f~%" (-> obj anim-speed)) + (format #t "~2Tmove-to-pos: #~%" (-> obj move-to-pos)) + (format #t "~2Tmove-to-quat: #~%" (-> obj move-to-quat)) + (label cfg-7) + obj + ) + +;; failed to figure out what this is: +(let ((a0-2 (new 'static 'skeleton-group + :name "skel-generic-button" + :extra #f + :info #f + :art-group-name "mtn-dice-button" + :bounds (new 'static 'vector :w 12288.0) + :version #x7 + ) + ) + ) + (set! (-> a0-2 jgeo) 0) + (set! (-> a0-2 janim) 3) + (set! (-> a0-2 mgeo 0) 1) + (set! (-> a0-2 lod-dist 0) 4095996000.0) + (add-to-loading-level a0-2) + ) + +;; definition for method 37 of type basebutton +;; INFO: Used lq/sq +;; WARN: Return type mismatch int vs none. +(defmethod move-to! basebutton ((obj basebutton) (vec vector) (quat quaternion)) + (logclear! (-> obj button-status) (button-status button-status-2)) + (if vec + (set! (-> obj move-to-pos quad) (-> vec quad)) + (set! (-> obj move-to-pos quad) (-> obj root trans quad)) + ) + (if quat + (quaternion-copy! (-> obj move-to-quat) quat) + (quaternion-copy! (-> obj move-to-quat) (-> obj root quat)) + ) + 0 + (none) + ) + +;; definition for method 32 of type basebutton +(defmethod idle-state-transition basebutton ((obj basebutton)) + "If `button-status` has [[button-status:0]] set, transition to [[basebutton::27]] otherwise, [[basebutton::30]]" + (if (logtest? (-> obj button-status) (button-status pressed)) + (go (method-of-object obj down-idle)) + (go (method-of-object obj up-idle)) + ) + ) + +;; failed to figure out what this is: +(defstate up-idle (basebutton) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) + (the-as object (cond + ((= v1-0 'attack) + (let ((attack (the-as attack-info (-> event param 1)))) + (case (-> attack mode) + (('flop 'spin 'punch 'eco-yellow 'eco-red 'eco-blue 'eco-dark) + (when (or (not (or (= (-> attack mode) 'spin) (= (-> attack mode) 'punch))) + (logtest? (-> self button-status) (button-status button-status-3)) + ) + (send-event! self (-> self event-going-down)) + (go-virtual going-down) + ) + ) + ) + ) + ) + ((= v1-0 'trigger) + (sound-play "silo-button") + (go-virtual going-down) + ) + ((= v1-0 'touch) + (when (logtest? (-> self button-status) (button-status button-status-4)) + (send-event! self (-> self event-going-down)) + (go-virtual going-down) + ) + ) + ((= v1-0 'move-to) + (move-to! self (the-as vector (-> event param 0)) (the-as quaternion (-> event param 1))) + ) + ) + ) + ) + ) + :enter (behavior () + (press! self #f) + (none) + ) + :trans (behavior () + (if (logtest? (-> self button-status) (button-status button-status-2)) + (rider-trans) + ) + (none) + ) + :code (the-as (function none :behavior basebutton) sleep-code) + :post (behavior () + (when (logtest? (-> self button-status) (button-status button-status-2)) + (logclear! (-> self button-status) (button-status button-status-2)) + (set! (-> self root trans quad) (-> self move-to-pos quad)) + (quaternion-copy! (-> self root quat) (-> self move-to-quat)) + (rider-post) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate going-down (basebutton) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((evt-type event-type)) + (the-as object (cond + ((= evt-type 'untrigger) + (go-virtual going-up) + ) + ((= evt-type 'move-to) + (move-to! self (the-as vector (-> event param 0)) (the-as quaternion (-> event param 1))) + ) + ) + ) + ) + ) + :enter (behavior () + (press! self #t) + (none) + ) + :trans (the-as (function none :behavior basebutton) rider-trans) + :code (behavior () + (ja-no-eval :num! (seek! max (-> self anim-speed))) + (until (ja-done? 0) + (suspend) + (ja :num! (seek! max (-> self anim-speed))) + ) + (send-event! self (-> self event-down)) + (let ((activation-script (res-lump-struct (-> self entity) 'on-activate structure))) + (if activation-script + (eval! + (new 'stack 'script-context (the-as basic (process->ppointer self)) self (the-as vector #f)) + (the-as pair activation-script) + ) + ) + ) + (go-virtual down-idle) + (none) + ) + :post (behavior () + (when (logtest? (-> self button-status) (button-status button-status-2)) + (logclear! (-> self button-status) (button-status button-status-2)) + (set! (-> self root trans quad) (-> self move-to-pos quad)) + (quaternion-copy! (-> self root quat) (-> self move-to-quat)) + ) + (rider-post) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate down-idle (basebutton) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((evt-type event-type)) + (the-as object (cond + ((= evt-type 'untrigger) + (go-virtual going-up) + ) + ((= evt-type 'move-to) + (move-to! self (the-as vector (-> event param 0)) (the-as quaternion (-> event param 1))) + ) + ) + ) + ) + ) + :enter (behavior () + (press! self #t) + (set! (-> self state-time) (-> self clock frame-counter)) + (none) + ) + :trans (behavior () + (if (logtest? (-> self button-status) (button-status button-status-2)) + (rider-trans) + ) + (none) + ) + :code (behavior () + (cond + ((= (-> self timeout) 0.0) + (sleep-code) + ) + (else + (until (>= (- (-> self clock frame-counter) (-> self state-time)) (the int (* 300.0 (-> self timeout)))) + (suspend) + ) + (send-event! self (-> self event-going-up)) + (sound-play "silo-button") + (go-virtual going-up) + ) + ) + (none) + ) + :post (behavior () + (when (logtest? (-> self button-status) (button-status button-status-2)) + (logclear! (-> self button-status) (button-status button-status-2)) + (set! (-> self root trans quad) (-> self move-to-pos quad)) + (quaternion-copy! (-> self root quat) (-> self move-to-quat)) + (rider-post) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate going-up (basebutton) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) + (the-as object (cond + ((= v1-0 'move-to) + (move-to! self (the-as vector (-> event param 0)) (the-as quaternion (-> event param 1))) + ) + ((= v1-0 'trigger) + (go-virtual going-down) + ) + ) + ) + ) + ) + :enter (behavior () + (press! self #f) + (none) + ) + :trans (the-as (function none :behavior basebutton) rider-trans) + :code (behavior () + (ja-no-eval :num! (seek! 0.0 (-> self anim-speed))) + (until (ja-done? 0) + (suspend) + (ja :num! (seek! 0.0 (-> self anim-speed))) + ) + (send-event! self (-> self event-up)) + (go-virtual up-idle) + (none) + ) + :post (behavior () + (when (logtest? (-> self button-status) (button-status button-status-2)) + (logclear! (-> self button-status) (button-status button-status-2)) + (set! (-> self root trans quad) (-> self move-to-pos quad)) + (quaternion-copy! (-> self root quat) (-> self move-to-quat)) + ) + (rider-post) + (none) + ) + ) + +;; definition for method 38 of type basebutton +(defmethod press! basebutton ((obj basebutton) (pressed? symbol)) + (if pressed? + (logior! (-> obj button-status) (button-status pressed)) + (logclear! (-> obj button-status) (button-status pressed)) + ) + (when (not (logtest? (-> obj button-status) (button-status button-status-1))) + (if pressed? + (process-entity-status! obj (entity-perm-status subtask-complete) #t) + (process-entity-status! obj (entity-perm-status subtask-complete) #f) + ) + ) + ) + +;; definition for method 36 of type basebutton +;; WARN: Return type mismatch int vs none. +(defmethod send-event! basebutton ((obj basebutton) (event-type symbol)) + "Prepares an [[event-message-block]] using the provided type to send an event to: + - the `notify-actor` + - every [[entity-actor]] in the `actor-group` array + @see [[entity-actor]]" + (when event-type + (let ((event (new 'stack-no-clear 'event-message-block))) + (set! (-> event from) (process->ppointer self)) + (set! (-> event num-params) 0) + (set! (-> event message) event-type) + (let ((func send-event-function) + (actor (-> obj notify-actor)) + ) + (func + (if actor + (-> actor extra process) + ) + event + ) + (dotimes (actor-group-idx (-> obj actor-group-count)) + (let ((actor-group (-> obj actor-group actor-group-idx))) + (dotimes (actor-idx (-> actor-group length)) + (set! event (new 'stack-no-clear 'event-message-block)) + (set! (-> event from) (process->ppointer self)) + (set! (-> event num-params) 0) + (set! (-> event message) event-type) + (set! func send-event-function) + (set! actor (-> actor-group data actor-idx actor)) + (func + (if actor + (-> actor extra process) + ) + event + ) + ) + ) + ) + ) + ) + ) + 0 + (none) + ) + +;; definition for method 31 of type basebutton +;; WARN: Return type mismatch int vs none. +(defmethod reset! basebutton ((obj basebutton)) + (set! (-> obj button-status) (button-status)) + (set! (-> obj notify-actor) #f) + (set! (-> obj timeout) 0.0) + (set! (-> obj event-going-down) #f) + (set! (-> obj event-down) #f) + (set! (-> obj event-going-up) #f) + (set! (-> obj event-up) #f) + (set! (-> obj anim-speed) 1.0) + 0 + (none) + ) + +;; definition for method 35 of type basebutton +;; WARN: Return type mismatch int vs none. +(defmethod prepare-trigger-event! basebutton ((obj basebutton)) + "Sets `event-going-down` to `'trigger`" + (set! (-> obj event-going-down) 'trigger) + 0 + (none) + ) + +;; definition for method 33 of type basebutton +;; WARN: Return type mismatch int vs none. +(defmethod basebutton-method-33 basebutton ((obj basebutton)) + "TODO - joint stuff" + (initialize-skeleton + obj + (the-as skeleton-group (art-group-get-by-name *level* "skel-generic-button" (the-as (pointer uint32) #f))) + (the-as pair 0) + ) + (ja-channel-set! 1) + (cond + ((logtest? (-> obj button-status) (button-status pressed)) + (let ((channel-0 (-> obj skel root-channel 0))) + (joint-control-channel-group-eval! + channel-0 + (the-as art-joint-anim (-> obj draw art-group data 3)) + num-func-identity + ) + (set! (-> channel-0 frame-num) + (the float (+ (-> (the-as art-joint-anim (-> obj draw art-group data 3)) frames num-frames) -1)) + ) + ) + ) + (else + (let ((channel-1 (-> obj skel root-channel 0))) + (joint-control-channel-group-eval! + channel-1 + (the-as art-joint-anim (-> obj draw art-group data 3)) + num-func-identity + ) + (set! (-> channel-1 frame-num) 0.0) + ) + ) + ) + (set! (-> obj anim-speed) 2.0) + (transform-post) + (none) + ) + +;; definition for method 34 of type basebutton +;; WARN: Return type mismatch int vs none. +(defmethod basebutton-method-34 basebutton ((obj basebutton)) + "TODO - collision stuff" + (let ((collision-shape (new 'process 'collide-shape obj (collide-list-enum hit-by-player)))) + (let ((collision-mesh (new 'process 'collide-shape-prim-mesh collision-shape (the-as uint 0) (the-as uint 0)))) + (set! (-> collision-mesh prim-core collide-as) (collide-spec obstacle pusher)) + (set! (-> collision-mesh prim-core collide-with) (collide-spec jak bot player-list)) + (set! (-> collision-mesh prim-core action) (collide-action solid rideable)) + (set! (-> collision-mesh transform-index) 3) + (set-vector! (-> collision-mesh local-sphere) 0.0 0.0 0.0 12288.0) + (set! (-> collision-shape total-prims) (the-as uint 1)) + (set! (-> collision-shape root-prim) collision-mesh) + ) + ((method-of-object collision-shape collide-shape-method-54)) + (set! (-> collision-shape nav-radius) (* 0.75 (-> collision-shape root-prim local-sphere w))) + (let ((prim (-> collision-shape root-prim))) + (set! (-> collision-shape backup-collide-as) (-> prim prim-core collide-as)) + (set! (-> collision-shape backup-collide-with) (-> prim prim-core collide-with)) + ) + (set! (-> obj root) collision-shape) + ) + 0 + (none) + ) + +;; definition for method 11 of type basebutton +;; INFO: Used lq/sq +;; WARN: Return type mismatch object vs none. +(defmethod init-from-entity! basebutton ((obj basebutton) (arg0 entity-actor)) + (local-vars (sv-16 res-tag)) + (reset! obj) + (set! (-> obj button-id) -1) + (let ((v1-4 (res-lump-value (-> obj entity) 'extra-id uint128 :default (the-as uint128 -1) :time -1000000000.0))) + (if (>= (the-as int v1-4) 0) + (set! (-> obj button-id) (the-as int v1-4)) + ) + ) + (basebutton-method-34 obj) + (process-drawable-from-entity! obj arg0) + (if (and (-> obj entity) (logtest? (-> obj entity extra perm status) (entity-perm-status subtask-complete))) + (logior! (-> obj button-status) (button-status pressed)) + (logclear! (-> obj button-status) (button-status pressed)) + ) + (set! (-> obj notify-actor) (entity-actor-lookup arg0 'alt-actor 0)) + (set! sv-16 (new 'static 'res-tag)) + (let ((v1-15 (res-lump-data (-> obj entity) 'actor-groups pointer :tag-ptr (& sv-16)))) + (cond + ((and v1-15 (nonzero? (-> sv-16 elt-count))) + (set! (-> obj actor-group) (the-as (pointer actor-group) v1-15)) + (set! (-> obj actor-group-count) (the-as int (-> sv-16 elt-count))) + ) + (else + (set! (-> obj actor-group) (the-as (pointer actor-group) #f)) + (set! (-> obj actor-group-count) 0) + 0 + ) + ) + ) + (set! (-> obj timeout) (res-lump-float arg0 'timeout)) + (if (not (logtest? (-> obj button-status) (button-status button-status-1))) + (nav-mesh-connect-from-ent (the-as entity-nav-mesh obj)) + ) + (prepare-trigger-event! obj) + (basebutton-method-33 obj) + (idle-state-transition obj) + (none) + ) + +;; definition for function basebutton-init-by-other +;; INFO: Used lq/sq +;; WARN: Return type mismatch object vs none. +(defbehavior basebutton-init-by-other basebutton ((process-actor entity-actor) + (vec vector) + (quat quaternion) + (notify-actor entity-actor) + (pressed? symbol) + (timeout float) + ) + (reset! self) + (logior! (-> self button-status) (button-status button-status-1)) + (set! (-> self button-id) -1) + (if pressed? + (logior! (-> self button-status) (button-status pressed)) + ) + (set! (-> self notify-actor) notify-actor) + (set! (-> self timeout) timeout) + (if process-actor + (process-entity-set! self process-actor) + ) + (set! (-> self actor-group) (the-as (pointer actor-group) #f)) + (set! (-> self actor-group-count) 0) + (basebutton-method-34 self) + (set! (-> self root trans quad) (-> vec quad)) + (quaternion-copy! (-> self root quat) quat) + (set-vector! (-> self root scale) 1.0 1.0 1.0 1.0) + (prepare-trigger-event! self) + (basebutton-method-33 self) + (idle-state-transition self) + (none) + ) diff --git a/test/decompiler/reference/jak2/engine/common_objs/blocking-plane_REF.gc b/test/decompiler/reference/jak2/engine/common_objs/blocking-plane_REF.gc new file mode 100644 index 0000000000..4ede4de5f9 --- /dev/null +++ b/test/decompiler/reference/jak2/engine/common_objs/blocking-plane_REF.gc @@ -0,0 +1,263 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type blocking-plane +(deftype blocking-plane (process-drawable) + ((root-override collide-shape :offset 128) + ) + :heap-base #x50 + :method-count-assert 22 + :size-assert #xc8 + :flag-assert #x16005000c8 + (:methods + (idle () _type_ :state 20) + (init! (_type_ (inline-array vector) float) none 21) + ) + ) + +;; definition for method 3 of type blocking-plane +(defmethod inspect blocking-plane ((obj blocking-plane)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (label cfg-4) + obj + ) + +;; failed to figure out what this is: +(let ((a0-2 (new 'static 'skeleton-group + :name "skel-blocking-plane" + :extra #f + :info #f + :art-group-name "blocking-plane" + :bounds (new 'static 'vector :w 410009.6) + :texture-level #x6 + :version #x7 + ) + ) + ) + (set! (-> a0-2 jgeo) 0) + (set! (-> a0-2 janim) 2) + (set! (-> a0-2 mgeo 0) 1) + (set! (-> a0-2 lod-dist 0) 4095996000.0) + (add-to-loading-level a0-2) + ) + +;; failed to figure out what this is: +(defstate idle (blocking-plane) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((evt-type event-type)) + (the-as object (cond + ((= evt-type 'on) + (cond + ((nonzero? (-> self root-override)) + (let ((prim (-> self root-override root-prim))) + (set! (-> prim prim-core collide-as) (-> self root-override backup-collide-as)) + (let ((v0-0 (the-as int (-> self root-override backup-collide-with)))) + (set! (-> prim prim-core collide-with) (the-as collide-spec v0-0)) + v0-0 + ) + ) + ) + (else + (let ((proc-child-ptr-0 (-> self child))) + (while proc-child-ptr-0 + (let ((proc-child-0 (ppointer->process proc-child-ptr-0))) + (set! proc-child-ptr-0 (-> proc-child-ptr-0 0 brother)) + (if (type? proc-child-0 blocking-plane) + (send-event proc-child-0 'on) + ) + ) + ) + ) + (the-as int #f) + ) + ) + ) + ((= evt-type 'off) + (cond + ((nonzero? (-> self root-override)) + (let ((v1-13 (-> self root-override root-prim))) + (set! (-> v1-13 prim-core collide-as) (collide-spec)) + (set! (-> v1-13 prim-core collide-with) (collide-spec)) + ) + 0 + ) + (else + (let ((proc-child-ptr-1 (-> self child))) + (while proc-child-ptr-1 + (let ((proc-child-1 (ppointer->process proc-child-ptr-1))) + (set! proc-child-ptr-1 (-> proc-child-ptr-1 0 brother)) + (if (type? proc-child-1 blocking-plane) + (send-event proc-child-1 'off) + ) + ) + ) + ) + (the-as int #f) + ) + ) + ) + ) + ) + ) + ) + :code (the-as (function none :behavior blocking-plane) sleep-code) + ) + +;; definition for method 21 of type blocking-plane +;; INFO: Used lq/sq +;; WARN: Return type mismatch int vs none. +(defmethod init! blocking-plane ((obj blocking-plane) (vec-pair (inline-array vector)) (height float)) + "TODO - but sets up the plane given 2 vectors and a height" + (let ((s3-0 (-> vec-pair 0)) + (s4-0 (-> vec-pair 1)) + ) + 0.0 + (* 0.5 (vector-vector-distance s3-0 s4-0)) + (let ((s2-0 (new 'process 'collide-shape obj (collide-list-enum usually-hit-by-player)))) + (let ((v1-3 (new 'process 'collide-shape-prim-mesh s2-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> v1-3 prim-core collide-as) (collide-spec blocking-plane)) + (set! (-> v1-3 prim-core collide-with) (collide-spec jak player-list)) + (set! (-> v1-3 prim-core action) (collide-action solid)) + (set! (-> v1-3 transform-index) 3) + (set! (-> s2-0 total-prims) (the-as uint 1)) + (set! (-> s2-0 root-prim) v1-3) + ) + (set! (-> s2-0 nav-radius) (* 0.75 (-> s2-0 root-prim local-sphere w))) + (let ((v1-6 (-> s2-0 root-prim))) + (set! (-> s2-0 backup-collide-as) (-> v1-6 prim-core collide-as)) + (set! (-> s2-0 backup-collide-with) (-> v1-6 prim-core collide-with)) + ) + (set! (-> obj root-override) s2-0) + ) + (let ((s1-0 (new 'stack-no-clear 'matrix)) + (s2-1 (-> obj root-override)) + ) + (vector+! (-> s2-1 trans) s3-0 s4-0) + (vector-float*! (-> s2-1 trans) (-> s2-1 trans) 0.5) + (+! (-> s2-1 trans y) (* 0.5 height)) + (vector-! (the-as vector (-> s1-0 vector)) s4-0 s3-0) + (let ((f30-1 (vector-normalize-ret-len! (the-as vector (-> s1-0 vector)) 1.0))) + (set! (-> s2-1 scale x) (* 0.00024414062 f30-1)) + (set! (-> s2-1 scale y) (* 0.00024414062 height)) + (set! (-> s2-1 scale z) 0.0) + (set! (-> s1-0 vector 1 quad) (-> (new 'static 'vector :y 1.0 :w 1.0) quad)) + (vector-cross! (-> s1-0 vector 2) (the-as vector (-> s1-0 vector)) (-> s1-0 vector 1)) + (vector-normalize! (-> s1-0 vector 2) 1.0) + (matrix->quaternion (-> s2-1 quat) s1-0) + (let ((v1-20 (-> obj root-override root-prim local-sphere))) + (set! (-> v1-20 x) 0.0) + (set! (-> v1-20 y) (* 0.00024414062 (* 0.5 height))) + (set! (-> v1-20 z) 0.0) + (let ((f0-17 0.5) + (f1-7 (* f30-1 f30-1)) + (f2-2 height) + ) + (set! (-> v1-20 w) (* f0-17 (sqrtf (+ f1-7 (* f2-2 f2-2))))) + ) + ) + ) + ) + ) + (initialize-skeleton + obj + (the-as skeleton-group (art-group-get-by-name *level* "skel-blocking-plane" (the-as (pointer uint32) #f))) + (the-as pair 0) + ) + (logior! (-> obj draw status) (draw-control-status no-draw-bounds)) + (transform-post) + (none) + ) + +;; definition for function blocking-plane-init-by-other +;; WARN: Return type mismatch object vs none. +(defbehavior blocking-plane-init-by-other blocking-plane ((vec-pair (inline-array vector)) (height float)) + "Calls [[blocking-plane::21]] with the given args" + (if (not vec-pair) + (deactivate self) + ) + (init! self vec-pair height) + (go-virtual idle) + (none) + ) + +;; definition for method 11 of type blocking-plane +;; INFO: Used lq/sq +;; WARN: Return type mismatch object vs none. +(defmethod init-from-entity! blocking-plane ((obj blocking-plane) (arg0 entity-actor)) + (let ((s5-0 (new 'process 'path-control obj 'path 0.0 (the-as entity #f) #f)) + (f30-0 (res-lump-float (-> obj entity) 'height :default 122880.0)) + ) + (set! (-> obj path) s5-0) + (if (or (not s5-0) (< (-> s5-0 curve num-cverts) 2)) + (go process-drawable-art-error "bad path") + ) + (logior! (-> s5-0 flags) (path-control-flag display draw-line draw-point draw-text)) + (let ((s4-0 (+ (-> s5-0 curve num-cverts) -1)) + (s3-0 (new 'stack-no-clear 'inline-array 'vector 2)) + ) + (dotimes (v1-12 2) + (set! (-> s3-0 v1-12 quad) (the-as uint128 0)) + ) + (dotimes (s2-0 s4-0) + (get-point-in-path! s5-0 (-> s3-0 0) (the float s2-0) 'interp) + (get-point-in-path! s5-0 (-> s3-0 1) (the float (+ s2-0 1)) 'interp) + (process-spawn blocking-plane s3-0 f30-0 :to obj) + ) + ) + ) + (go (method-of-object obj idle)) + (none) + ) + +;; definition for function blocking-plane-spawn +;; INFO: Used lq/sq +;; WARN: Return type mismatch int vs none. +(defbehavior blocking-plane-spawn process ((arg0 curve-control) (arg1 (inline-array vector)) (arg2 float)) + (cond + ((and arg1 (or (not arg0) (logtest? (-> arg0 flags) (path-control-flag not-found)))) + (process-spawn blocking-plane arg1 arg2 :to self) + ) + (else + (let ((s4-1 (the int (get-num-segments arg0))) + (s3-0 0) + (s2-0 (new 'stack-no-clear 'inline-array 'vector 2)) + ) + (dotimes (v1-10 2) + (set! (-> s2-0 v1-10 quad) (the-as uint128 0)) + ) + (while (< s3-0 s4-1) + (get-point-in-path! arg0 (-> s2-0 0) (the float s3-0) 'interp) + (get-point-in-path! arg0 (-> s2-0 1) (the float (+ s3-0 1)) 'interp) + (process-spawn blocking-plane s2-0 arg2 :to self) + (+! s3-0 2) + ) + ) + ) + ) + 0 + (none) + ) + +;; definition for function blocking-plane-destroy +;; WARN: Return type mismatch int vs none. +(defbehavior blocking-plane-destroy blocking-plane () + (let ((child-proc-ptr (-> self child))) + (while child-proc-ptr + (let ((child-proc (ppointer->process child-proc-ptr))) + (set! child-proc-ptr (-> child-proc-ptr 0 brother)) + (if (type? child-proc blocking-plane) + (deactivate child-proc) + ) + ) + ) + ) + 0 + (none) + ) diff --git a/test/decompiler/reference/jak2/engine/common_objs/conveyor_REF.gc b/test/decompiler/reference/jak2/engine/common_objs/conveyor_REF.gc new file mode 100644 index 0000000000..4facad4c4f --- /dev/null +++ b/test/decompiler/reference/jak2/engine/common_objs/conveyor_REF.gc @@ -0,0 +1,590 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type conveyor-section +(deftype conveyor-section (structure) + ((start vector :inline :offset-assert 0) + (trailing plane :inline :offset-assert 16) + (pull-dir vector :inline :offset-assert 32) + (radial-dir vector :inline :offset-assert 48) + ) + :method-count-assert 9 + :size-assert #x40 + :flag-assert #x900000040 + ) + +;; definition for method 3 of type conveyor-section +(defmethod inspect conveyor-section ((obj conveyor-section)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'conveyor-section) + (format #t "~1Tstart: #~%" (-> obj start)) + (format #t "~1Ttrailing: #~%" (-> obj trailing)) + (format #t "~1Tpull-dir: #~%" (-> obj pull-dir)) + (format #t "~1Tradial-dir: #~%" (-> obj radial-dir)) + (label cfg-4) + obj + ) + +;; definition of type conveyor-section-array +(deftype conveyor-section-array (inline-array-class) + ((data conveyor-section :inline :dynamic :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +;; definition for method 3 of type conveyor-section-array +(defmethod inspect conveyor-section-array ((obj conveyor-section-array)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj (-> obj type)) + (format #t "~1Tlength: ~D~%" (-> obj length)) + (format #t "~1Tallocated-length: ~D~%" (-> obj allocated-length)) + (format #t "~1Tdata[0] @ #x~X~%" (-> obj data)) + (label cfg-4) + obj + ) + +;; failed to figure out what this is: +(set! (-> conveyor-section-array heap-base) (the-as uint 64)) + +;; definition of type conveyor +(deftype conveyor (process-drawable) + ((speed float :offset-assert 200) + (belt-radius float :offset-assert 204) + (pull-y-threshold float :offset-assert 208) + (speed-mult-array (array float) :offset-assert 212) + (speed-mult-array-len int8 :offset-assert 216) + (sections conveyor-section-array :offset-assert 220) + (leading plane :inline :offset-assert 224) + (collide-bounds sphere :inline :offset-assert 240) + ) + :heap-base #x80 + :method-count-assert 28 + :size-assert #x100 + :flag-assert #x1c00800100 + (:methods + (idle () _type_ :state 20) + (conveyor-method-21 (_type_) float 21) + (get-art-group (_type_) art-group 22) + (reset-root! (_type_) none 23) + (init! (_type_) none 24) + (set-and-get-ambient-sound! (_type_) ambient-sound 25) + (conveyor-method-26 (_type_ process-focusable) symbol :behavior conveyor 26) + (conveyor-method-27 (_type_) symbol 27) + ) + ) + +;; definition for method 3 of type conveyor +(defmethod inspect conveyor ((obj conveyor)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~2Tspeed: ~f~%" (-> obj speed)) + (format #t "~2Tbelt-radius: ~f~%" (-> obj belt-radius)) + (format #t "~2Tpull-y-threshold: ~f~%" (-> obj pull-y-threshold)) + (format #t "~2Tspeed-mult-array: #x~X~%" (-> obj speed-mult-array)) + (format #t "~2Tspeed-mult-array-len: ~D~%" (-> obj speed-mult-array-len)) + (format #t "~2Tsections: ~A~%" (-> obj sections)) + (format #t "~2Tleading: #~%" (-> obj leading)) + (format #t "~2Tcollide-bounds: #~%" (-> obj collide-bounds)) + (label cfg-4) + obj + ) + +;; definition for method 7 of type conveyor +;; WARN: Return type mismatch process-drawable vs conveyor. +(defmethod relocate conveyor ((obj conveyor) (new-addr int)) + (&+! (-> obj sections) new-addr) + (the-as + conveyor + ((the-as (function process-drawable int process-drawable) (find-parent-method conveyor 7)) obj new-addr) + ) + ) + +;; definition for method 22 of type conveyor +;; WARN: Return type mismatch symbol vs art-group. +(defmethod get-art-group conveyor ((obj conveyor)) + "@returns The respective [[art-group]] for the [[conveyor]]" + (go process-drawable-art-error "invalid type") + (the-as art-group #f) + ) + +;; definition for method 23 of type conveyor +;; WARN: Return type mismatch int vs none. +(defmethod reset-root! conveyor ((obj conveyor)) + "Re-initializes the `root` [[trsqv]]" + (set! (-> obj root) (new 'process 'trsqv)) + 0 + (none) + ) + +;; definition for method 24 of type conveyor +;; INFO: Used lq/sq +;; WARN: Return type mismatch int vs none. +(defmethod init! conveyor ((obj conveyor)) + "Initializes defaults for things like the `speed` and `belt-radius`" + (local-vars (tag res-tag)) + (set! (-> obj speed) 24576.0) + (set! (-> obj belt-radius) 11878.4) + (set! (-> obj pull-y-threshold) 10240.0) + (set! (-> obj speed-mult-array) #f) + (set! (-> obj speed-mult-array-len) 0) + (let ((entity (-> obj entity))) + (set! tag (new 'static 'res-tag)) + (let ((scale-factor (res-lump-data entity 'scale-factor pointer :tag-ptr (& tag)))) + (when scale-factor + (set! (-> obj speed-mult-array) (the-as (array float) scale-factor)) + (set! (-> obj speed-mult-array-len) (the-as int (-> tag elt-count))) + ) + ) + ) + 0 + (none) + ) + +;; definition for method 25 of type conveyor +;; WARN: Return type mismatch object vs ambient-sound. +(defmethod set-and-get-ambient-sound! conveyor ((obj conveyor)) + "So long as [[actor-option::16]] is not set, fetch the [[ambient-sound]] for the [[conveyor]] + and return it as well. Otherwise, set it to `0`" + (let ((actor-options (res-lump-value (-> obj entity) 'options actor-option :time -1000000000.0))) + (the-as + ambient-sound + (cond + ((not (logtest? (actor-option no-amb-sound) actor-options)) + (let ((sound + (the-as object (new 'process 'ambient-sound (static-sound-spec "conveyor" :fo-max 80) (-> obj root trans))) + ) + ) + (set! (-> obj sound) (the-as ambient-sound sound)) + sound + ) + ) + (else + (set! (-> obj sound) (the-as ambient-sound 0)) + 0 + ) + ) + ) + ) + ) + +;; definition for method 26 of type conveyor +;; INFO: Used lq/sq +(defmethod conveyor-method-26 conveyor ((obj conveyor) (proc-focus process-focusable)) + "TODO - conveyor section related, perhaps related to moving the process along the belt?" + (let ((vec (new 'stack-no-clear 'vector))) + (set! (-> vec quad) (-> (get-trans proc-focus 0) quad)) + (set! (-> vec w) 1.0) + (when (>= (vector4-dot vec (the-as vector (-> obj leading))) 0.0) + (let* ((sections (-> obj sections)) + (section-count (-> sections length)) + ) + (dotimes (section-idx section-count) + (let ((section (-> sections data section-idx))) + (when (< (vector4-dot vec (the-as vector (-> section trailing))) 0.0) + (let ((vec-temp (new 'stack-no-clear 'vector))) + (vector-! vec-temp vec (-> section start)) + (when (>= (-> obj belt-radius) (fabs (vector-dot vec-temp (-> section radial-dir)))) + (let* ((f0-7 (vector-dot vec-temp (-> section pull-dir))) + (f1-6 (- (-> vec-temp y) (* (-> section pull-dir y) f0-7))) + ) + (when (>= (-> obj pull-y-threshold) (fabs f1-6)) + (let ((a2-8 (new 'stack-no-clear 'vector))) + (let ((f0-10 (-> obj speed))) + (if (< section-idx (-> obj speed-mult-array-len)) + (set! f0-10 + (* f0-10 (-> (the-as (pointer float) (+ (the-as uint (-> obj speed-mult-array)) (* section-idx 4))))) + ) + ) + (vector-float*! a2-8 (-> section pull-dir) (* f0-10 (-> self clock seconds-per-frame))) + ) + (send-event proc-focus 'push-trans a2-8 3000) + ) + ) + ) + ) + ) + (return #f) + ) + ) + ) + ) + #f + ) + ) + ) + +;; definition for method 27 of type conveyor +(defmethod conveyor-method-27 conveyor ((obj conveyor)) + "TODO - collision related, has some dead code as well (previous iteration?)" + (local-vars (a0-10 float) (a2-5 float) (a2-12 float)) + (rlet ((acc :class vf) + (vf0 :class vf) + (vf1 :class vf) + (vf2 :class vf) + (vf3 :class vf) + (vf4 :class vf) + ) + (init-vf0-vector) + (set! *actor-list-length* 0) + (if #t + (set! *actor-list-length* (spatial-hash-method-36 *actor-hash* (-> obj collide-bounds) *actor-list* 256)) + ) + (when #t + (let ((a0-2 (-> *collide-player-list* alive-list next0))) + *collide-player-list* + (let ((v1-11 (-> a0-2 next0))) + (while (!= a0-2 (-> *collide-player-list* alive-list-end)) + (let* ((a0-3 (-> (the-as connection a0-2) param1)) + (a1-1 (-> (the-as collide-shape a0-3) root-prim)) + ) + (when (logtest? (-> a1-1 prim-core collide-as) (collide-spec jak bot enemy hit-by-others-list player-list)) + (let ((a1-2 (-> a1-1 prim-core))) + (let ((a2-4 a1-2) + (a3-1 (-> obj collide-bounds)) + ) + (.lvf vf2 (&-> a2-4 world-sphere quad)) + (.lvf vf3 (&-> a3-1 quad)) + ) + (.sub.vf vf1 vf3 vf2) + (.mul.vf vf1 vf1 vf1) + (.add.y.vf vf1 vf1 vf1 :mask #b1) + (.add.z.vf vf1 vf1 vf1 :mask #b1) + (.mov a2-5 vf1) + (let ((f0-0 a2-5) + (f1-1 (+ (-> a1-2 world-sphere w) (-> obj collide-bounds r))) + ) + (b! (>= f0-0 (* f1-1 f1-1)) cfg-8 :delay #f) + ) + ) + (when (< *actor-list-length* 256) + (set! (-> *actor-list* *actor-list-length*) (the-as collide-shape a0-3)) + (set! *actor-list-length* (+ *actor-list-length* 1)) + ) + ) + ) + (label cfg-8) + (set! a0-2 v1-11) + *collide-player-list* + (set! v1-11 (-> v1-11 next0)) + ) + ) + ) + ) + (when #f + (let ((a0-5 (-> *collide-hit-by-player-list* alive-list next0))) + *collide-hit-by-player-list* + (let ((v1-18 (-> a0-5 next0))) + (while (!= a0-5 (-> *collide-hit-by-player-list* alive-list-end)) + (let* ((a0-6 (-> (the-as connection a0-5) param1)) + (a1-13 (-> (the-as collide-shape a0-6) root-prim)) + ) + (when (logtest? (-> a1-13 prim-core collide-as) (collide-spec jak bot enemy hit-by-others-list player-list)) + (let ((a1-14 (-> a1-13 prim-core))) + (let ((a2-11 a1-14) + (a3-2 (-> obj collide-bounds)) + ) + (.lvf vf2 (&-> a2-11 world-sphere quad)) + (.lvf vf3 (&-> a3-2 quad)) + ) + (.sub.vf vf1 vf3 vf2) + (.mul.vf vf1 vf1 vf1) + (.add.y.vf vf1 vf1 vf1 :mask #b1) + (.add.z.vf vf1 vf1 vf1 :mask #b1) + (.mov a2-12 vf1) + (let ((f0-1 a2-12) + (f1-5 (+ (-> a1-14 world-sphere w) (-> obj collide-bounds r))) + ) + (b! (>= f0-1 (* f1-5 f1-5)) cfg-17 :delay #f) + ) + ) + (when (< *actor-list-length* 256) + (set! (-> *actor-list* *actor-list-length*) (the-as collide-shape a0-6)) + (set! *actor-list-length* (+ *actor-list-length* 1)) + ) + ) + ) + (label cfg-17) + (set! a0-5 v1-18) + *collide-hit-by-player-list* + (set! v1-18 (-> v1-18 next0)) + ) + ) + ) + ) + (dotimes (s5-0 *actor-list-length*) + (let* ((v1-23 (-> *actor-list* s5-0)) + (a0-9 (-> v1-23 root-prim)) + ) + (when (logtest? (-> a0-9 prim-core collide-as) (collide-spec jak bot enemy hit-by-others-list player-list)) + (.lvf vf1 (&-> obj collide-bounds quad)) + (.lvf vf2 (&-> a0-9 prim-core world-sphere quad)) + (.sub.vf vf3 vf1 vf2) + (.add.w.vf vf4 vf1 vf2 :mask #b1000) + (.mul.vf vf3 vf3 vf3 :mask #b111) + (.mul.w.vf vf4 vf4 vf4 :mask #b1000) + (.mul.x.vf acc vf0 vf3 :mask #b1000) + (.add.mul.y.vf acc vf0 vf3 acc :mask #b1000) + (.add.mul.z.vf vf3 vf0 vf3 acc :mask #b1000) + (.sub.w.vf vf3 vf3 vf4 :mask #b1000) + (let ((f0-2 0.0)) + (.add.w.vf vf3 vf0 vf3 :mask #b1) + (.mov a0-10 vf3) + (let ((s4-0 (-> v1-23 process))) + (b! (< f0-2 a0-10) cfg-27) + (let ((a1-29 (if (type? s4-0 process-focusable) + (the-as process-focusable s4-0) + ) + ) + ) + (if a1-29 + (conveyor-method-26 obj a1-29) + ) + ) + ) + ) + (label cfg-27) + 0 + ) + ) + ) + #f + ) + ) + +;; definition for method 21 of type conveyor +;; INFO: Used lq/sq +(defmethod conveyor-method-21 conveyor ((obj conveyor)) + "TODO - quite dense, has to do with the conveyor sections and the path they are associated with" + (local-vars (sv-32 conveyor-section) (sv-48 conveyor-section)) + (let* ((s5-0 (-> obj path)) + (s4-0 (-> s5-0 curve num-cverts)) + (s3-0 (new 'stack-no-clear 'vector)) + ) + (let ((s2-0 (new 'process 'conveyor-section-array (+ s4-0 -1)))) + (set! (-> obj sections) s2-0) + (set! (-> obj collide-bounds quad) (the-as uint128 0)) + (get-point-in-path! s5-0 s3-0 0.0 'exact) + (vector+! (the-as vector (-> obj collide-bounds)) (the-as vector (-> obj collide-bounds)) s3-0) + (let ((s1-0 (+ s4-0 -1))) + (set! sv-32 (the-as conveyor-section #f)) + (dotimes (s0-0 s1-0) + (set! sv-48 (-> s2-0 data s0-0)) + (set! (-> sv-48 start quad) (-> s3-0 quad)) + (get-point-in-path! s5-0 s3-0 (the float (+ s0-0 1)) 'exact) + (vector+! (the-as vector (-> obj collide-bounds)) (the-as vector (-> obj collide-bounds)) s3-0) + (vector-! (-> sv-48 pull-dir) s3-0 (-> sv-48 start)) + (vector-normalize! (-> sv-48 pull-dir) 1.0) + (set! (-> sv-48 trailing quad) (-> sv-48 pull-dir quad)) + (set! (-> sv-48 trailing y) 0.0) + (vector-normalize! (-> sv-48 trailing) 1.0) + (set-vector! (-> sv-48 radial-dir) (- (-> sv-48 trailing z)) 0.0 (-> sv-48 trailing x) 1.0) + (set! (-> sv-48 trailing w) (- (vector-dot s3-0 (the-as vector (-> sv-48 trailing))))) + (when (the-as vector sv-32) + (vector+! (&+ (the-as vector sv-32) 16) (&+ (the-as vector sv-32) 16) (the-as vector (-> sv-48 trailing))) + (vector-normalize! (&+ (the-as vector sv-32) 16) 1.0) + (set! (-> sv-32 trailing w) (- (vector-dot (-> sv-48 start) (&+ (the-as vector sv-32) 16)))) + ) + (set! sv-32 sv-48) + sv-32 + ) + ) + ) + (let ((s2-1 (-> obj sections data))) + (set! (-> obj leading quad) (-> s2-1 0 pull-dir quad)) + (set! (-> obj leading y) 0.0) + (vector-normalize! (-> obj leading) 1.0) + (set! (-> obj leading w) (- (vector-dot (the-as vector (-> s2-1 0)) (the-as vector (-> obj leading))))) + ) + (let ((f0-19 (/ 1.0 (the float s4-0))) + (f30-0 0.0) + ) + (vector-float*! (the-as vector (-> obj collide-bounds)) (the-as vector (-> obj collide-bounds)) f0-19) + (dotimes (s2-2 s4-0) + (get-point-in-path! s5-0 s3-0 (the float s2-2) 'exact) + (let ((f0-22 (vector-vector-distance-squared s3-0 (-> obj collide-bounds)))) + (if (< f30-0 f0-22) + (set! f30-0 f0-22) + ) + ) + ) + (set! (-> obj collide-bounds r) (+ (sqrtf f30-0) (-> obj belt-radius))) + ) + ) + ) + +;; failed to figure out what this is: +(defstate idle (conveyor) + :virtual #t + :code (the-as (function none :behavior conveyor) sleep-code) + :post (behavior () + (conveyor-method-27 self) + (if (nonzero? (-> self sound)) + (update! (-> self sound)) + ) + (none) + ) + ) + +;; definition for method 11 of type conveyor +;; WARN: Return type mismatch object vs none. +(defmethod init-from-entity! conveyor ((obj conveyor) (arg0 entity-actor)) + (reset-root! obj) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj (the-as skeleton-group (get-art-group obj)) (the-as pair 0)) + (set! (-> obj path) (new 'process 'path-control obj 'path 0.0 (the-as entity #f) #f)) + (logior! (-> obj path flags) (path-control-flag display draw-line draw-point draw-text)) + (if (< (-> obj path curve num-cverts) 2) + (go process-drawable-art-error "bad path") + ) + (init! obj) + (set-and-get-ambient-sound! obj) + (conveyor-method-21 obj) + (ja-post) + (go (method-of-object obj idle)) + (none) + ) + +;; definition of type strip-conveyor +(deftype strip-conveyor (conveyor) + () + :heap-base #x80 + :method-count-assert 28 + :size-assert #x100 + :flag-assert #x1c00800100 + ) + +;; definition for method 3 of type strip-conveyor +(defmethod inspect strip-conveyor ((obj strip-conveyor)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (let ((t9-0 (method-of-type conveyor inspect))) + (t9-0 obj) + ) + (label cfg-4) + obj + ) + +;; failed to figure out what this is: +(let ((a0-19 (new 'static 'skeleton-group + :name "skel-strip-conveyor" + :extra #f + :info #f + :art-group-name "strip-conveyor" + :bounds (new 'static 'vector :w 147456.0) + :version #x7 + ) + ) + ) + (set! (-> a0-19 jgeo) 0) + (set! (-> a0-19 janim) 2) + (set! (-> a0-19 mgeo 0) 1) + (set! (-> a0-19 lod-dist 0) 4095996000.0) + (add-to-loading-level a0-19) + ) + +;; definition for method 22 of type strip-conveyor +(defmethod get-art-group strip-conveyor ((obj strip-conveyor)) + "@returns The respective [[art-group]] for the [[conveyor]]" + (art-group-get-by-name *level* "skel-strip-conveyor" (the-as (pointer uint32) #f)) + ) + +;; definition of type lgconveyor +(deftype lgconveyor (conveyor) + () + :heap-base #x80 + :method-count-assert 28 + :size-assert #x100 + :flag-assert #x1c00800100 + ) + +;; definition for method 3 of type lgconveyor +(defmethod inspect lgconveyor ((obj lgconveyor)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (let ((t9-0 (method-of-type conveyor inspect))) + (t9-0 obj) + ) + (label cfg-4) + obj + ) + +;; failed to figure out what this is: +(let ((a0-23 (new 'static 'skeleton-group + :name "skel-lgconveyor" + :extra #f + :info #f + :art-group-name "lgconveyor" + :bounds (new 'static 'vector :y 12288.0 :w 61440.0) + :longest-edge (meters 24.7389) + :version #x7 + :origin-joint-index 3 + ) + ) + ) + (set! (-> a0-23 jgeo) 0) + (set! (-> a0-23 janim) 3) + (set! (-> a0-23 mgeo 0) 1) + (set! (-> a0-23 lod-dist 0) 4095996000.0) + (add-to-loading-level a0-23) + ) + +;; definition for method 22 of type lgconveyor +(defmethod get-art-group lgconveyor ((obj lgconveyor)) + "@returns The respective [[art-group]] for the [[conveyor]]" + (art-group-get-by-name *level* "skel-lgconveyor" (the-as (pointer uint32) #f)) + ) + +;; definition for method 24 of type lgconveyor +;; WARN: Return type mismatch float vs none. +(defmethod init! lgconveyor ((obj lgconveyor)) + "Initializes defaults for things like the `speed` and `belt-radius`" + (set! (-> obj speed) 30720.0) + (set! (-> obj belt-radius) 11878.4) + (set! (-> obj pull-y-threshold) 10240.0) + (none) + ) + +;; failed to figure out what this is: +(defstate idle (lgconveyor) + :virtual #t + :code (behavior () + (until #f + (ja-no-eval :group! (-> self draw art-group data 3) + :num! (seek! (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 3)) frames num-frames) -1))) + :frame-num 0.0 + ) + (until (ja-done? 0) + (suspend) + (ja :num! (seek!)) + ) + ) + #f + (none) + ) + :post (behavior () + (let ((t9-0 (-> (method-of-type conveyor idle) post))) + (if t9-0 + ((the-as (function none) t9-0)) + ) + ) + (ja-post) + (none) + ) + ) diff --git a/test/decompiler/reference/jak2/engine/common_objs/elevator_REF.gc b/test/decompiler/reference/jak2/engine/common_objs/elevator_REF.gc new file mode 100644 index 0000000000..c7c605c43c --- /dev/null +++ b/test/decompiler/reference/jak2/engine/common_objs/elevator_REF.gc @@ -0,0 +1,953 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type elevator-params +(deftype elevator-params (structure) + ((xz-threshold float :offset-assert 0) + (y-threshold float :offset-assert 4) + (start-pos float :offset-assert 8) + (move-rate float :offset-assert 12) + (flags elevator-flags :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x18 + :flag-assert #x900000018 + ) + +;; definition for method 3 of type elevator-params +(defmethod inspect elevator-params ((obj elevator-params)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'elevator-params) + (format #t "~1Txz-threshold: ~f~%" (-> obj xz-threshold)) + (format #t "~1Ty-threshold: ~f~%" (-> obj y-threshold)) + (format #t "~1Tstart-pos: ~f~%" (-> obj start-pos)) + (format #t "~1Tmove-rate: ~f~%" (-> obj move-rate)) + (format #t "~1Tflags: ~D~%" (-> obj flags)) + (label cfg-4) + obj + ) + +;; definition of type path-step +(deftype path-step (structure) + ((next-pos float :offset-assert 0) + (dist float :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) + +;; definition for method 3 of type path-step +(defmethod inspect path-step ((obj path-step)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'path-step) + (format #t "~1Tnext-pos: ~f~%" (-> obj next-pos)) + (format #t "~1Tdist: ~f~%" (-> obj dist)) + (label cfg-4) + obj + ) + +;; definition of type path-step-inline-array +(deftype path-step-inline-array (inline-array-class) + ((data path-step :inline :dynamic :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +;; definition for method 3 of type path-step-inline-array +(defmethod inspect path-step-inline-array ((obj path-step-inline-array)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj (-> obj type)) + (format #t "~1Tlength: ~D~%" (-> obj length)) + (format #t "~1Tallocated-length: ~D~%" (-> obj allocated-length)) + (format #t "~1Tdata[0] @ #x~X~%" (-> obj data)) + (label cfg-4) + obj + ) + +;; failed to figure out what this is: +(set! (-> path-step-inline-array heap-base) (the-as uint 16)) + +;; definition of type elevator +(deftype elevator (base-plat) + ((params elevator-params :inline :offset-assert 272) + (path-seq path-step-inline-array :offset-assert 296) + (path-dest float :offset-assert 300) + (bottom-top float 2 :offset-assert 304) + (move-pos float 2 :offset-assert 312) + (move-dist float :offset-assert 320) + (path-pos float :offset-assert 324) + (path-eased-pos float :offset-assert 328) + (ride-timer uint64 :offset-assert 336) + (sticky-player-last-ride-time time-frame :offset-assert 344) + (elevator-status elevator-status :offset-assert 352) + (on-activate basic :offset-assert 360) + (on-deactivate basic :offset-assert 364) + ) + :heap-base #xf0 + :method-count-assert 49 + :size-assert #x170 + :flag-assert #x3100f00170 + (:methods + (dormant () _type_ :state 34) + (waiting () _type_ :state 35) + (running () _type_ :state 36) + (arrived () _type_ :state 37) + (elevator-method-38 (_type_) none 38) + (calc-dist-between-points! (_type_ int int) none 39) + (elevator-method-40 (_type_) object 40) + (init-defaults! (_type_) none 41) + (clear-ambient-sound! (_type_) none 42) + (elevator-method-43 (_type_ vector float float) symbol 43) + (elevator-method-44 (_type_) symbol 44) + (elevator-method-45 (_type_) symbol 45) + (move-to-next-point! (_type_) none 46) + (find-closest-point-in-path! (_type_ vector path-step symbol symbol) symbol 47) + (elevator-method-48 (_type_) none 48) + ) + ) + +;; definition for method 3 of type elevator +(defmethod inspect elevator ((obj elevator)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (let ((t9-0 (method-of-type base-plat inspect))) + (t9-0 obj) + ) + (format #t "~2Tparams: #~%" (-> obj params)) + (format #t "~2Tpath-seq: ~A~%" (-> obj path-seq)) + (format #t "~2Tpath-dest: ~f~%" (-> obj path-dest)) + (format #t "~2Tbottom-top[2] @ #x~X~%" (-> obj bottom-top)) + (format #t "~2Tmove-pos[2] @ #x~X~%" (-> obj move-pos)) + (format #t "~2Tmove-dist: ~f~%" (-> obj move-dist)) + (format #t "~2Tpath-pos: ~f~%" (-> obj path-pos)) + (format #t "~2Tpath-eased-pos: ~f~%" (-> obj path-eased-pos)) + (format #t "~2Tride-timer: ~D~%" (-> obj ride-timer)) + (format #t "~2Tsticky-player-last-ride-time: ~D~%" (-> obj sticky-player-last-ride-time)) + (format #t "~2Televator-status: ~D~%" (-> obj elevator-status)) + (format #t "~2Ton-activate: ~A~%" (-> obj on-activate)) + (format #t "~2Ton-deactivate: ~A~%" (-> obj on-deactivate)) + (label cfg-4) + obj + ) + +;; definition for method 43 of type elevator +(defmethod elevator-method-43 elevator ((obj elevator) (arg0 vector) (arg1 float) (arg2 float)) + #f + ) + +;; definition for method 48 of type elevator +;; INFO: Used lq/sq +(defmethod elevator-method-48 elevator ((obj elevator)) + "TODO - collision related" + (let ((target *target*)) + (when target + (let ((s4-0 (-> target control unknown-sphere-array00 0)) + (s5-0 (new 'stack-no-clear 'collide-query)) + ) + (set! (-> s5-0 start-pos quad) (-> s4-0 prim-core world-sphere quad)) + (set! (-> s5-0 start-pos y) (+ 8192.0 (-> s5-0 start-pos y))) + (set! (-> s5-0 start-pos w) 1.0) + (vector-reset! (-> s5-0 move-dist)) + (set! (-> s5-0 move-dist y) -90112.0) + (let ((collide-query s5-0)) + (set! (-> collide-query radius) (-> s4-0 local-sphere w)) + (set! (-> collide-query collide-with) (collide-spec hit-by-others-list pusher)) + (set! (-> collide-query ignore-process0) target) + (set! (-> collide-query ignore-process1) #f) + (set! (-> collide-query ignore-pat) (-> target control pat-ignore-mask)) + (set! (-> collide-query action-mask) (collide-action solid)) + ) + (let ((f0-5 (fill-and-probe-using-line-sphere *collide-cache* s5-0))) + (when (< 0.0 f0-5) + (vector-float*! (-> s5-0 move-dist) (-> s5-0 move-dist) f0-5) + (vector+! (-> s5-0 move-dist) (-> s5-0 move-dist) (-> s5-0 start-pos)) + (vector-! (-> s5-0 move-dist) (-> s5-0 move-dist) (the-as vector (-> s4-0 prim-core))) + (move-by-vector! (-> target control) (-> s5-0 move-dist)) + ) + ) + ) + ) + ) + (none) + ) + +;; definition for method 41 of type elevator +;; WARN: Return type mismatch int vs none. +(defmethod init-defaults! elevator ((obj elevator)) + "Initializes default settings related to the [[elevator]]: + - `elevator-xz-threshold` + - `elevator-y-threshold` + - `elevator-start-pos` + - `elevator-move-rate` + - `elevator-flags`" + (let ((entity (-> obj entity))) + (set! (-> obj params xz-threshold) ((method-of-object entity get-property-value-float) + entity + 'elevator-xz-threshold + 'interp + -1000000000.0 + 81920.0 + (the-as (pointer res-tag) #f) + *res-static-buf* + ) + ) + (set! entity (-> obj entity)) + (set! (-> obj params y-threshold) ((method-of-object entity get-property-value-float) + entity + 'elevator-y-threshold + 'interp + -1000000000.0 + 20480.0 + (the-as (pointer res-tag) #f) + *res-static-buf* + ) + ) + (set! entity (-> obj entity)) + (set! (-> obj params start-pos) ((method-of-object entity get-property-value-float) + entity + 'elevator-start-pos + 'interp + -1000000000.0 + 0.0 + (the-as (pointer res-tag) #f) + *res-static-buf* + ) + ) + (set! entity (-> obj entity)) + (set! (-> obj params move-rate) ((method-of-object entity get-property-value-float) + entity + 'elevator-move-rate + 'interp + -1000000000.0 + 25600.0 + (the-as (pointer res-tag) #f) + *res-static-buf* + ) + ) + (set! entity (-> obj entity)) + (set! (-> obj params flags) (the-as elevator-flags ((method-of-object entity get-property-value) + entity + 'elevator-flags + 'interp + -1000000000.0 + (the-as uint128 1) + (the-as (pointer res-tag) #f) + *res-static-buf* + ) + ) + ) + ) + 0 + (none) + ) + +;; definition for function ease-value-in-out +(defun ease-value-in-out ((value float) (step-amount float)) + "TODO - the math in this function is full of duplication and isn't totally clear + but if the name is to be believed, it's to slow a values grow at the beginning and end of it's range + which is obviously useful for an elevator." + (let* ((step step-amount) + (f4-0 (- 1.0 step-amount)) + (f3-0 (/ step (- 1.0 f4-0))) + (f2-1 (* step step)) + (f1-6 (+ (* 2.0 step (- f4-0 step)) f2-1)) + (f1-7 (+ (* (- 1.0 f4-0) (- 1.0 f4-0) f3-0) f1-6)) + ) + (/ (cond + ((< value step) + (* value value) + ) + ((< value f4-0) + (+ (* 2.0 step (- value step)) f2-1) + ) + (else + (let ((f0-7 (- 1.0 value))) + (- f1-7 (* f0-7 f0-7 f3-0)) + ) + ) + ) + f1-7 + ) + ) + ) + +;; definition for function elevator-event +;; WARN: Return type mismatch none vs object. +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 18] +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 119] +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 209] +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 222] +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 236] +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 246] +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 257] +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 264] +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 276] +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 301] +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 326] +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 334] +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 337] +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 174] +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 40] +;; WARN: disable def twice: 11. This may happen when a cond (no else) is nested inside of another conditional, but it should be rare. +(defbehavior elevator-event elevator ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((evt-type event-type)) + (the-as + object + (cond + ((= evt-type 'status?) + (and (= (the float (/ (the-as int (-> event param 0)) 8)) (-> self move-pos 0)) + (= (the float (/ (the-as int (-> event param 1)) 8)) (-> self move-pos 1)) + ) + ) + ((= evt-type 'ridden) + (let ((proc-focus (handle->process (-> (the-as focus (-> event param 0)) handle)))) + (if (= (-> proc-focus type) target) + (set! (-> self sticky-player-last-ride-time) (-> self clock frame-counter)) + ) + ) + #t + ) + ((= evt-type 'use-camera) + (if (-> event param 0) + (set-setting! 'entity-name (-> event param 0) 0 0) + (remove-setting! 'entity-name) + ) + ) + ((= evt-type 'move-to) + (when (and (-> self next-state) (let ((next-state-0 (-> self next-state name))) + (or (= next-state-0 'waiting) (= next-state-0 'arrived)) + ) + ) + (set! (-> self move-pos 0) (-> self move-pos 1)) + (cond + ((not (logtest? (-> event param 0) 7)) + (let ((gp-0 (the-as number (-> event param 0)))) + (set! (-> self move-pos 1) (if (type? (the-as uint gp-0) float) + (the-as float gp-0) + ) + ) + ) + ) + (else + (case (-> event param 0) + (('quote 'bottom) + (set! (-> self move-pos 1) (-> self bottom-top 0)) + ) + (('quote 'top) + (set! (-> self move-pos 1) (-> self bottom-top 1)) + ) + ) + ) + ) + (go-virtual running) + ) + ) + ((= evt-type 'jump-to) + (cond + ((not (logtest? (-> event param 0) 7)) + (let ((gp-1 (the-as number (-> event param 0)))) + (set! (-> self move-pos 1) (if (type? (the-as uint gp-1) float) + (the-as float gp-1) + ) + ) + ) + ) + (else + (case (-> event param 0) + (('quote 'bottom) + (set! (-> self move-pos 1) (-> self bottom-top 0)) + ) + (('quote 'top) + (set! (-> self move-pos 1) (-> self bottom-top 1)) + ) + ) + ) + ) + (set! (-> self move-pos 0) (-> self move-pos 1)) + (get-point-in-path! (-> self path) (-> self basetrans) (-> self move-pos 0) 'interp) + (go-virtual waiting) + ) + ((= evt-type 'trigger) + (when (and (-> self next-state) (let ((next-state-1 (-> self next-state name))) + (or (= next-state-1 'waiting) (= next-state-1 'arrived)) + ) + ) + (set! (-> self move-pos 0) (-> self move-pos 1)) + (cond + ((= (-> self move-pos 0) (-> self bottom-top 0)) + (set! (-> self move-pos 1) (-> self bottom-top 1)) + ) + ((= (-> self move-pos 0) (-> self bottom-top 1)) + (set! (-> self move-pos 1) (-> self bottom-top 0)) + ) + ) + (go-virtual running) + ) + ) + ((= evt-type 'query) + (case (-> event param 0) + (('waiting?) + (and (-> self next-state) (= (-> self next-state name) 'waiting)) + ) + (('arrived?) + (and (-> self next-state) (let ((v1-61 (-> self next-state name))) + (or (= v1-61 'arrived) (= v1-61 'waiting)) + ) + ) + ) + (('running?) + (and (-> self next-state) (= (-> self next-state name) 'running)) + ) + (('path-pos?) + (+ (-> self move-pos 0) (* (-> self path-pos) (- (-> self move-pos 1) (-> self move-pos 0)))) + ) + (('player-standing-on?) + (= (-> self sticky-player-last-ride-time) (-> self clock frame-counter)) + ) + (('point-inside-shaft?) + (elevator-method-43 self (the-as vector (-> event param 1)) (-> self bottom-top 1) (-> self bottom-top 0)) + ) + (('going-down?) + (< (-> (get-point-in-path! (-> self path) (new 'stack-no-clear 'vector) (-> self move-pos 1) 'interp) y) + (-> (get-point-in-path! (-> self path) (new 'stack-no-clear 'vector) (-> self move-pos 0) 'interp) y) + ) + ) + (('going-up?) + (< (-> (get-point-in-path! (-> self path) (new 'stack-no-clear 'vector) (-> self move-pos 0) 'interp) y) + (-> (get-point-in-path! (-> self path) (new 'stack-no-clear 'vector) (-> self move-pos 1) 'interp) y) + ) + ) + ) + ) + ((= evt-type 'go-dormant) + (go-virtual dormant) + ) + (else + (plat-event proc arg1 event-type event) + ) + ) + ) + ) + ) + +;; definition for method 47 of type elevator +;; INFO: Used lq/sq +(defmethod find-closest-point-in-path! elevator ((obj elevator) (arg0 vector) (arg1 path-step) (arg2 symbol) (arg3 symbol)) + "Finds and sets the provided [[path-step]]'s `next-pos` field to the vertex index in the path which is closest to + the provided [[vector]] + + @param vec The point at which distance calculations are based off + @param! next-step If a point is found, `next-pos` will be set to the correct point + @param arg2 TODO + @param arg3 TODO + @returns [[#t]] if a point in the path was found" + (local-vars (path-point vector)) + (let ((elev-params (-> obj params)) + (smallest-dist 0.0) + (point-idx-tracker -1.0) + ) + (dotimes (path-vertex-idx (-> obj path curve num-cverts)) + (set! path-point + (get-point-in-path! (-> obj path) (new 'stack-no-clear 'vector) (the float path-vertex-idx) 'interp) + ) + (when (and (or (not arg2) (< (vector-vector-xz-distance path-point arg0) (-> elev-params xz-threshold))) + (or (not arg3) + (< (fabs (- (-> path-point y) (-> arg0 y))) (-> elev-params y-threshold)) + (and (= path-vertex-idx (the int (-> obj bottom-top 0))) (< (-> arg0 y) (-> path-point y))) + (and (= path-vertex-idx (the int (-> obj bottom-top 1))) (< (-> path-point y) (-> arg0 y))) + ) + ) + (let* ((t9-2 vector-vector-distance) + (a1-3 arg0) + (dist (t9-2 path-point a1-3)) + ) + (when (or (= point-idx-tracker -1.0) (< dist smallest-dist)) + (set! smallest-dist dist) + (set! point-idx-tracker (the float path-vertex-idx)) + ) + ) + ) + ) + (when (!= point-idx-tracker -1.0) + (set! (-> arg1 next-pos) point-idx-tracker) + #t + ) + ) + ) + +;; definition for method 44 of type elevator +;; WARN: Return type mismatch object vs symbol. +(defmethod elevator-method-44 elevator ((obj elevator)) + (let* ((target-temp *target*) + (target (if (type? target-temp process-focusable) + target-temp + ) + ) + ) + (the-as + symbol + (and target (elevator-method-43 obj (get-trans target 0) (-> obj move-pos 0) (-> obj move-pos 1))) + ) + ) + ) + +;; definition for method 45 of type elevator +(defmethod elevator-method-45 elevator ((obj elevator)) + "@returns Stub, or always returns [[#t]]" + #t + ) + +;; definition for method 46 of type elevator +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Return type mismatch int vs none. +(defmethod move-to-next-point! elevator ((obj elevator)) + "If the [[*target*]] is in a valid state and there is a point to transition to in the elevator's path + do so. + @see [[elevator::47]]" + (local-vars (zero float)) + (let ((target *target*)) + (when (and target + (zero? (logand (focus-status dead inactive in-air grabbed edge-grab pole pilot-riding pilot teleporting) + (-> target focus-status) + ) + ) + ) + (set! zero (the-as float 0.0)) + (when (and (find-closest-point-in-path! obj (get-trans target 0) (new 'stack-no-clear 'path-step) #t #t) + (!= (-> obj move-pos 1) zero) + ) + (set! (-> obj move-pos 0) (-> obj move-pos 1)) + (set! (-> obj move-pos 1) zero) + (logior! (-> obj elevator-status) (elevator-status moving)) + (go (method-of-object obj running)) + ) + ) + ) + 0 + (none) + ) + +;; definition for function move-post +(defbehavior move-post elevator () + (when (nonzero? (-> self sound)) + (let ((f0-3 (sqrtf (sin-rad (* 3.1415925 (-> self path-pos)))))) + (update-vol! (-> self sound) f0-3) + ) + (update-trans! (-> self sound) (-> self root-override trans)) + (update! (-> self sound)) + ) + (plat-post) + (none) + ) + +;; failed to figure out what this is: +(defstate dormant (elevator) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type + (('trigger) + (go-virtual waiting) + ) + (('bonk) + #f + ) + (else + (plat-event proc arg1 event-type event) + ) + ) + ) + :trans (the-as (function none :behavior elevator) plat-trans) + :code (the-as (function none :behavior elevator) sleep-code) + :post (the-as (function none :behavior elevator) plat-post) + ) + +;; failed to figure out what this is: +(defstate waiting (elevator) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type + (('ridden) + (if (elevator-method-45 self) + (logior! (-> self elevator-status) (elevator-status elevator-status-0)) + ) + (elevator-event proc arg1 event-type event) + ) + (else + (elevator-event proc arg1 event-type event) + ) + ) + ) + :enter (behavior () + (set! (-> self ride-timer) (the-as uint (-> self clock frame-counter))) + (logclear! (-> self elevator-status) (elevator-status elevator-status-0 moving)) + (logior! (-> self mask) (process-mask actor-pause)) + (if (nonzero? (-> self sound)) + (update-vol! (-> self sound) 0.0) + ) + (none) + ) + :trans (behavior () + (plat-trans) + (when (not (logtest? (-> self elevator-status) (elevator-status elevator-status-0))) + (set! (-> self ride-timer) (the-as uint (-> self clock frame-counter))) + (-> self params) + (if (and (logtest? (-> self params flags) (elevator-flags elevator-flags-0)) + (zero? (logand (-> self params flags) (elevator-flags elevator-flags-3))) + ) + (move-to-next-point! self) + ) + ) + (when (and (not (logtest? (-> self params flags) (elevator-flags elevator-flags-3))) + (>= (- (-> self clock frame-counter) (the-as int (-> self ride-timer))) (seconds 1)) + ) + (set! (-> self move-pos 0) (-> self move-pos 1)) + (set! (-> self move-pos 1) (-> self path-seq data (the int (-> self move-pos 1)) next-pos)) + (go-virtual running) + ) + (none) + ) + :code (the-as (function none :behavior elevator) sleep-code) + :post (behavior () + (logclear! (-> self elevator-status) (elevator-status elevator-status-0)) + (debug-draw (-> self path)) + (plat-post) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate running (elevator) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type + (('running?) + #t + ) + (('player-ridden?) + (logtest? (-> self elevator-status) (elevator-status elevator-status-0)) + ) + (else + (elevator-event proc arg1 event-type event) + ) + ) + ) + :enter (behavior () + (if (not (logtest? (-> self params flags) (elevator-flags elevator-flags-7))) + (process-entity-status! self (entity-perm-status no-kill) #t) + ) + (logclear! (-> self elevator-status) (elevator-status elevator-status-1)) + (when (logtest? (-> self params flags) (elevator-flags elevator-flags-2)) + (logclear! (-> self params flags) (elevator-flags elevator-flags-2)) + (logior! (-> self params flags) (elevator-flags elevator-flags-0)) + ) + (set! (-> self move-dist) 0.0) + (let ((v1-13 (the int (-> self move-pos 0))) + (a0-3 (the int (-> self move-pos 1))) + (a1-1 0) + ) + (while (let ((a2-3 (abs (- a0-3 v1-13)))) + (< a1-1 a2-3) + ) + (+! (-> self move-dist) (-> self path-seq data (+ (min v1-13 a0-3) a1-1) dist)) + (+! a1-1 1) + ) + ) + (logclear! (-> self mask) (process-mask actor-pause)) + (set-setting! 'board #f 0 0) + (let ((gp-0 (-> self on-activate))) + (if gp-0 + (eval! + (new + 'stack + 'script-context + (the-as basic (* (the int (-> self move-pos 0)) 8)) + self + (-> self root-override trans) + ) + (the-as pair gp-0) + ) + ) + ) + (set! (-> self path-pos) 0.0) + (if (nonzero? (-> self sound)) + (update-vol! (-> self sound) 0.0) + ) + (when (logtest? (-> self params flags) (elevator-flags prevent-jump)) + (set-setting! 'jump #f 0 0) + (apply-settings *setting-control*) + ) + (none) + ) + :exit (behavior () + (if (not (logtest? (-> self params flags) (elevator-flags elevator-flags-7))) + (process-entity-status! self (entity-perm-status no-kill) #f) + ) + (remove-setting! 'board) + (if (logtest? (-> self params flags) (elevator-flags prevent-jump)) + (remove-setting! 'jump) + ) + (none) + ) + :trans (behavior () + (if (and (not (logtest? (-> self elevator-status) (elevator-status elevator-status-1))) + (= (-> self path-pos) 1.0) + ) + (go-virtual arrived) + ) + (if (elevator-method-44 self) + (set! (-> self path-dest) 0.0) + (set! (-> self path-dest) 1.0) + ) + (if (logtest? (-> self params flags) (elevator-flags prevent-jump)) + (elevator-method-48 self) + ) + (plat-trans) + (none) + ) + :code (behavior () + (logior! (-> self elevator-status) (elevator-status elevator-status-1)) + (until #f + (suspend) + (if (= (-> self path-pos) 1.0) + (logclear! (-> self elevator-status) (elevator-status elevator-status-1)) + ) + ) + #f + (none) + ) + :post (behavior () + (when (logtest? (-> self elevator-status) (elevator-status elevator-status-1)) + (seek! + (-> self path-pos) + (-> self path-dest) + (* (/ (-> self params move-rate) (-> self move-dist)) (-> self clock seconds-per-frame)) + ) + (let* ((f30-0 (-> self move-pos 0)) + (f28-0 (-> self move-pos 1)) + (f0-9 (+ f30-0 (* (ease-value-in-out (-> self path-pos) 0.08) (- f28-0 f30-0)))) + ) + (get-point-in-path! (-> self path) (-> self basetrans) f0-9 'interp) + ) + ) + (move-post) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate arrived (elevator) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type + (('ridden) + (set! (-> self ride-timer) (the-as uint (-> self clock frame-counter))) + (elevator-event proc arg1 event-type event) + ) + (else + (elevator-event proc arg1 event-type event) + ) + ) + ) + :enter (behavior () + (set! (-> self ride-timer) (the-as uint (-> self clock frame-counter))) + (if (not (-> *setting-control* user-current jump)) + (remove-setting! 'jump) + ) + (let ((gp-0 (-> self on-deactivate))) + (if gp-0 + (eval! + (new + 'stack + 'script-context + (the-as basic (* (the int (-> self move-pos 1)) 8)) + self + (-> self root-override trans) + ) + (the-as pair gp-0) + ) + ) + ) + (none) + ) + :trans (behavior () + (if (and (< (the-as int (- (-> self ride-timer) (the-as uint (-> self sticky-player-last-ride-time)))) 600) + (begin *target* *target*) + (logtest? (-> *target* focus-status) (focus-status in-air)) + ) + (set! (-> self ride-timer) (the-as uint (-> self clock frame-counter))) + ) + (when (or (logtest? (-> self elevator-status) (elevator-status moving)) + (>= (- (-> self clock frame-counter) (the-as int (-> self ride-timer))) (seconds 0.5)) + ) + (cond + ((and (logtest? (-> self params flags) (elevator-flags elevator-flags-1)) + (!= (-> self move-pos 1) (-> self params start-pos)) + ) + (set! (-> self move-pos 0) (-> self move-pos 1)) + (set! (-> self move-pos 1) (-> self params start-pos)) + (go-virtual running) + ) + (else + (go-virtual waiting) + ) + ) + ) + (plat-trans) + (none) + ) + :code (the-as (function none :behavior elevator) sleep-code) + :post (the-as (function none :behavior elevator) plat-post) + ) + +;; definition for method 39 of type elevator +;; WARN: Return type mismatch int vs none. +(defmethod calc-dist-between-points! elevator ((obj elevator) (path-point-x int) (path-point-y int)) + "Calculates the distance between two points in the elevator's path. + + @param path-point-x The index of the first point in the distance calculation, and where `next-pos` and `dist` are stored in the `path-seq` array + @param path-point-y The second point in the distance calculation" + (set! (-> obj path-seq data path-point-x next-pos) (the float path-point-y)) + (let ((point-x (get-point-in-path! (-> obj path) (new 'stack-no-clear 'vector) (the float path-point-x) 'interp)) + (point-y (get-point-in-path! (-> obj path) (new 'stack-no-clear 'vector) (the float path-point-y) 'interp)) + ) + (set! (-> obj path-seq data path-point-x dist) (vector-vector-distance point-x point-y)) + ) + 0 + (none) + ) + +;; definition for method 42 of type elevator +;; WARN: Return type mismatch int vs none. +(defmethod clear-ambient-sound! elevator ((obj elevator)) + "Might be a virtual function, but clears the object's [[ambient-sound]]" + (set! (-> obj sound) (the-as ambient-sound 0)) + 0 + (none) + ) + +;; definition for method 33 of type elevator +;; WARN: Return type mismatch int vs none. +(defmethod base-plat-method-33 elevator ((obj elevator)) + 0 + (none) + ) + +;; definition for method 7 of type elevator +;; WARN: Return type mismatch base-plat vs elevator. +(defmethod relocate elevator ((obj elevator) (arg0 int)) + (if (nonzero? (-> obj path-seq)) + (&+! (-> obj path-seq) arg0) + ) + (the-as elevator ((the-as (function base-plat int base-plat) (find-parent-method elevator 7)) obj arg0)) + ) + +;; definition for method 40 of type elevator +(defmethod elevator-method-40 elevator ((obj elevator)) + "TODO - need to figure out some flags to be confident about this" + (if (logtest? (-> obj params flags) (elevator-flags elevator-flags-6)) + (go (method-of-object obj arrived)) + (go (method-of-object obj waiting)) + ) + ) + +;; definition for method 11 of type elevator +;; 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 32 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 32 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 32 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 object vs none. +(defmethod init-from-entity! elevator ((obj elevator) (entity entity-actor)) + (local-vars (sv-32 float) (sv-36 path-control) (sv-40 target)) + (base-plat-method-31 obj) + (process-drawable-from-entity! obj entity) + (initialize-skeleton obj (the-as skeleton-group (get-art-group obj)) (the-as pair 0)) + (stop-bouncing! obj) + (set! (-> obj elevator-status) (elevator-status)) + (collide-shape-method-46 (-> obj root-override)) + (base-plat-method-32 obj) + (init-defaults! obj) + (set! (-> obj on-activate) (res-lump-struct (-> obj entity) 'on-activate basic)) + (set! (-> obj on-deactivate) (res-lump-struct (-> obj entity) 'on-deactivate basic)) + (set! (-> obj path) (new 'process 'path-control obj 'path 0.0 entity #f)) + (if (logtest? (-> obj path flags) (path-control-flag not-found)) + (go process-drawable-art-error "error in path") + ) + (logior! (-> obj path flags) (path-control-flag display draw-line draw-point draw-text)) + (let ((num-path-points (-> obj path curve num-cverts)) + (s4-1 0) + (f30-0 0.0) + (f28-0 0.0) + ) + (set! (-> obj path-seq) (new 'process 'path-step-inline-array num-path-points)) + (dotimes (path-point-idx num-path-points) + (calc-dist-between-points! obj path-point-idx (mod (+ path-point-idx 1) num-path-points)) + (let ((v1-31 (get-point-in-path! (-> obj path) (new 'stack-no-clear 'vector) (the float path-point-idx) 'interp))) + (when (or (not (logtest? s4-1 1)) (< (-> v1-31 y) f28-0)) + (set! (-> obj bottom-top 0) (the float path-point-idx)) + (set! f28-0 (-> v1-31 y)) + (set! s4-1 (logior s4-1 1)) + ) + (when (or (not (logtest? s4-1 2)) (< f30-0 (-> v1-31 y))) + (set! (-> obj bottom-top 1) (the float path-point-idx)) + (set! f30-0 (-> v1-31 y)) + (set! s4-1 (logior s4-1 2)) + ) + ) + ) + ) + (set! sv-32 (the-as float 0.0)) + (set! sv-36 (-> obj path)) + (let ((s5-2 *target*)) + (set! sv-40 (if (type? s5-2 process-focusable) + s5-2 + ) + ) + ) + (if (not (and sv-40 + (logtest? (-> obj params flags) (elevator-flags elevator-flags-4)) + (find-closest-point-in-path! obj (get-trans sv-40 0) (the-as path-step (& sv-32)) #f #t) + ) + ) + (set! sv-32 (-> obj params start-pos)) + ) + (set! (-> obj move-pos 0) sv-32) + (set! (-> obj move-pos 1) sv-32) + (get-point-in-path! sv-36 (-> obj basetrans) sv-32 'interp) + (set! (-> obj root-override pause-adjust-distance) + (+ 122880.0 (-> obj params xz-threshold) (total-distance (-> obj path))) + ) + (clear-ambient-sound! obj) + (base-plat-method-33 obj) + (elevator-method-40 obj) + (none) + ) diff --git a/test/decompiler/reference/jak2/engine/common_objs/plat_REF.gc b/test/decompiler/reference/jak2/engine/common_objs/plat_REF.gc new file mode 100644 index 0000000000..7d8584cfd4 --- /dev/null +++ b/test/decompiler/reference/jak2/engine/common_objs/plat_REF.gc @@ -0,0 +1,407 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type plat +(deftype plat (base-plat) + ((path-pos float :offset-assert 272) + (sound-id sound-id :offset-assert 276) + (sync sync-eased :inline :offset-assert 280) + ) + :heap-base #xd0 + :method-count-assert 37 + :size-assert #x144 + :flag-assert #x2500d00144 + (:methods + (plat-idle () _type_ :state 34) + (plat-path-active () _type_ :state 35) + (plat-path-sync (_type_) object 36) + ) + ) + +;; definition for method 3 of type plat +(defmethod inspect plat ((obj plat)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (let ((t9-0 (method-of-type base-plat inspect))) + (t9-0 obj) + ) + (format #t "~2Tpath-pos: ~f~%" (-> obj path-pos)) + (format #t "~2Tsound-id: ~D~%" (-> obj sound-id)) + (format #t "~2Tsync: #~%" (-> obj sync)) + (label cfg-4) + obj + ) + +;; failed to figure out what this is: +(let ((a0-2 (new 'static 'skeleton-group + :name "skel-plat" + :extra #f + :info #f + :art-group-name "plat" + :bounds (new 'static 'vector :y -2048.0 :w 12288.0) + :max-lod 2 + :version #x7 + ) + ) + ) + (set! (-> a0-2 jgeo) 0) + (set! (-> a0-2 janim) 4) + (set! (-> a0-2 mgeo 0) 1) + (set! (-> a0-2 lod-dist 0) 81920.0) + (set! (-> a0-2 mgeo 1) 2) + (set! (-> a0-2 lod-dist 1) 163840.0) + (set! (-> a0-2 mgeo 2) 3) + (set! (-> a0-2 lod-dist 2) 4095996000.0) + (add-to-loading-level a0-2) + ) + +;; definition for method 30 of type plat +(defmethod get-art-group plat ((obj plat)) + "@returns The associated [[art-group]]" + (art-group-get-by-name *level* "skel-plat" (the-as (pointer uint32) #f)) + ) + +;; definition for method 31 of type plat +;; WARN: Return type mismatch int vs none. +(defmethod base-plat-method-31 plat ((obj plat)) + "TODO - collision stuff" + (let ((collision-shape (new 'process 'collide-shape obj (collide-list-enum hit-by-player)))) + (let ((collision-mesh (new 'process 'collide-shape-prim-mesh collision-shape (the-as uint 0) (the-as uint 0)))) + (set! (-> collision-mesh prim-core collide-as) (collide-spec pusher)) + (set! (-> collision-mesh prim-core collide-with) (collide-spec jak player-list)) + (set! (-> collision-mesh prim-core action) (collide-action solid rideable)) + (set! (-> collision-mesh transform-index) 0) + (set-vector! (-> collision-mesh local-sphere) 0.0 0.0 0.0 13107.2) + (set! (-> collision-shape total-prims) (the-as uint 1)) + (set! (-> collision-shape root-prim) collision-mesh) + ) + ((method-of-object collision-shape collide-shape-method-54)) + (set! (-> collision-shape nav-radius) (* 0.75 (-> collision-shape root-prim local-sphere w))) + (let ((prim (-> collision-shape root-prim))) + (set! (-> collision-shape backup-collide-as) (-> prim prim-core collide-as)) + (set! (-> collision-shape backup-collide-with) (-> prim prim-core collide-with)) + ) + (set! (-> obj root-override) (the-as collide-shape-moving collision-shape)) + ) + 0 + (none) + ) + +;; definition for method 33 of type plat +;; WARN: Return type mismatch int vs none. +(defmethod base-plat-method-33 plat ((obj plat)) + 0 + (none) + ) + +;; definition for method 32 of type plat +;; WARN: Return type mismatch int vs none. +(defmethod base-plat-method-32 plat ((obj plat)) + 0 + (none) + ) + +;; definition for method 36 of type plat +(defmethod plat-path-sync plat ((obj plat)) + "If the `sync` period is greater than `0` then transition the state to [[plat::35]] + otherwise, [[plat::34]] + + @see [[sync-eased]]" + (cond + ((logtest? (-> obj path flags) (path-control-flag not-found)) + (go (method-of-object obj plat-idle)) + ) + ((> (-> obj sync period) 0) + (go (method-of-object obj plat-path-active)) + ) + (else + (go (method-of-object obj plat-idle)) + ) + ) + ) + +;; failed to figure out what this is: +(defstate plat-idle (plat) + :virtual #t + :event (the-as (function process int symbol event-message-block object :behavior plat) plat-event) + :trans (behavior () + (execute-effects self) + (none) + ) + :code (behavior () + (plat-trans) + (rider-post) + (suspend) + (until #f + (when (not (-> self bouncing)) + (plat-trans) + (rider-post) + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + 0 + ) + (while (-> self bouncing) + (plat-trans) + (rider-post) + (suspend) + ) + ) + #f + (none) + ) + ) + +;; failed to figure out what this is: +(defstate plat-path-active (plat) + :virtual #t + :event (the-as (function process int symbol event-message-block object :behavior plat) plat-event) + :exit (behavior () + (sound-stop (-> self sound-id)) + (none) + ) + :trans (behavior () + (set! (-> self path-pos) (get-norm! (-> self sync) 0)) + (get-point-at-percent-along-path! (-> self path) (-> self basetrans) (-> self path-pos) 'interp) + (if (< (vector-vector-distance (-> self root-override trans) (ear-trans 0)) 81920.0) + (sound-play "eco-plat-hover" :id (-> self sound-id) :position (-> self root-override trans)) + ) + (plat-trans) + (none) + ) + :code (behavior () + (until #f + (ja-no-eval :group! (ja-group) + :num! (seek! (the float (+ (-> (ja-group) frames num-frames) -1))) + :frame-num 0.0 + ) + (until (ja-done? 0) + (suspend) + (ja :num! (seek!)) + ) + ) + #f + (none) + ) + :post (the-as (function none :behavior plat) plat-post) + ) + +;; definition for method 11 of type plat +;; WARN: Return type mismatch object vs none. +(defmethod init-from-entity! plat ((obj plat) (entity entity-actor)) + (set! (-> obj mask) (logior (process-mask platform) (-> obj mask))) + (base-plat-method-31 obj) + (process-drawable-from-entity! obj entity) + (initialize-skeleton obj (the-as skeleton-group (get-art-group obj)) (the-as pair 0)) + (collide-shape-method-46 (-> obj root-override)) + (stop-bouncing! obj) + (base-plat-method-32 obj) + (set! (-> obj fact) + (new 'process 'fact-info obj (pickup-type eco-pill-random) (-> *FACT-bank* default-eco-pill-green-inc)) + ) + (let ((params (new 'stack-no-clear 'sync-info-params))) + (let ((v1-15 0)) + (if (not (logtest? (-> obj fact options) (actor-option loop))) + (set! v1-15 (logior v1-15 1)) + ) + (set! (-> params sync-type) (the-as basic 'sync-eased)) + (set! (-> params sync-flags) (the-as sync-flags v1-15)) + ) + (set! (-> params period) (the-as uint 1200)) + (set! (-> params entity) entity) + (set! (-> params percent) 0.0) + (set! (-> params ease-in) 0.15) + (set! (-> params ease-out) 0.15) + (set! (-> params pause-in) 0.0) + (set! (-> params pause-out) 0.0) + (initialize! (-> obj sync) params) + ) + (set! (-> obj path) (new 'process 'curve-control obj 'path -1000000000.0)) + (logior! (-> obj path flags) (path-control-flag display draw-line draw-point draw-text)) + (set! (-> obj sound-id) (new-sound-id)) + (cond + ((logtest? (-> obj path flags) (path-control-flag not-found)) + (set! (-> obj path-pos) 0.0) + (base-plat-method-33 obj) + (plat-path-sync obj) + ) + ((> (-> obj sync period) 0) + (set! (-> obj path-pos) (get-norm! (-> obj sync) 0)) + (get-point-at-percent-along-path! (-> obj path) (-> obj root-override trans) (-> obj path-pos) 'interp) + (base-plat-method-33 obj) + (plat-path-sync obj) + ) + (else + (set! (-> obj path-pos) 0.0) + (get-point-at-percent-along-path! (-> obj path) (-> obj root-override trans) (-> obj path-pos) 'interp) + (base-plat-method-33 obj) + (plat-path-sync obj) + ) + ) + (none) + ) + +;; definition of type drop-plat +(deftype drop-plat (base-plat) + ((art-name string :offset-assert 272) + (anim spool-anim :offset-assert 276) + (break-anim-name string :offset-assert 280) + (safe-time time-frame :offset-assert 288) + (hit-point vector :inline :offset-assert 304) + ) + :heap-base #xc0 + :method-count-assert 36 + :size-assert #x140 + :flag-assert #x2400c00140 + (:methods + (idle () _type_ :state 34) + (fall (symbol) _type_ :state 35) + ) + ) + +;; definition for method 3 of type drop-plat +(defmethod inspect drop-plat ((obj drop-plat)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (let ((t9-0 (method-of-type base-plat inspect))) + (t9-0 obj) + ) + (format #t "~2Tart-name: ~A~%" (-> obj art-name)) + (format #t "~2Tanim: ~A~%" (-> obj anim)) + (format #t "~2Tbreak-anim-name: ~A~%" (-> obj break-anim-name)) + (format #t "~2Tsafe-time: ~D~%" (-> obj safe-time)) + (format #t "~2Thit-point: ~`vector`P~%" (-> obj hit-point)) + (label cfg-4) + obj + ) + +;; definition for method 7 of type drop-plat +;; WARN: Return type mismatch base-plat vs drop-plat. +(defmethod relocate drop-plat ((obj drop-plat) (arg0 int)) + (if (nonzero? (-> obj break-anim-name)) + (&+! (-> obj break-anim-name) arg0) + ) + (let ((v1-5 (-> obj anim buffer))) + (if (and (>= (the-as int v1-5) (-> *kernel-context* relocating-min)) + (< (the-as int v1-5) (-> *kernel-context* relocating-max)) + ) + (&+! (-> obj anim buffer) arg0) + ) + ) + (the-as drop-plat ((method-of-type base-plat relocate) obj arg0)) + ) + +;; failed to figure out what this is: +(defstate idle (drop-plat) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type + (('touch 'attack 'bonk) + (let* ((proc-temp proc) + (proc-focus (if (type? proc-temp process-focusable) + (the-as process-focusable proc-temp) + ) + ) + ) + (cond + ((and proc-focus (logtest? (-> proc-focus focus-status) (focus-status edge-grab))) + (set! (-> self safe-time) (+ (-> self clock frame-counter) (seconds 0.2))) + (return (the-as object #f)) + ) + ((< (- (-> self clock frame-counter) (-> self safe-time)) (seconds 0.05)) + (return (the-as object #f)) + ) + ) + (set! (-> self hit-point quad) (-> self root-override trans quad)) + (set! proc-focus (if (type? proc process-focusable) + (the-as process-focusable proc) + ) + ) + (set! (-> self hit-point quad) (-> (get-trans proc-focus 0) quad)) + ) + (if (zero? (-> self bounce-time)) + (start-bouncing! self) + ) + #f + ) + ) + ) + :trans (the-as (function none :behavior drop-plat) plat-trans) + :code (behavior () + (gui-control-method-9 + *gui-control* + self + (gui-channel art-load) + (gui-action queue) + (-> self anim name) + -99.0 + 0 + ) + (until #f + (when (not (-> self bouncing)) + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + 0 + ) + (while (-> self bouncing) + (suspend) + ) + (go-virtual fall #f) + ) + #f + (none) + ) + :post (the-as (function none :behavior drop-plat) plat-post) + ) + +;; failed to figure out what this is: +(defstate fall (drop-plat) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type + (('edge-grabbed) + (if (>= (- (-> self clock frame-counter) (-> self state-time)) (seconds 0.5)) + (send-event proc 'end-mode) + ) + ) + (('die) + (go-virtual fall #t) + ) + ) + ) + :enter (behavior ((arg0 symbol)) + (set! (-> self state-time) (-> self clock frame-counter)) + (none) + ) + :exit (behavior () + (ja-abort-spooled-anim (-> self anim) (the-as art-joint-anim #f) -1) + (none) + ) + :trans (the-as (function none :behavior drop-plat) rider-trans) + :code (behavior ((arg0 symbol)) + (process-entity-status! self (entity-perm-status subtask-complete) #t) + (let ((v1-1 (-> self root-override root-prim))) + (set! (-> v1-1 prim-core collide-as) (collide-spec)) + (set! (-> v1-1 prim-core collide-with) (collide-spec)) + ) + 0 + (if (not arg0) + (ja-play-spooled-anim + (-> self anim) + (ja-group) + (the-as art-joint-anim #f) + (the-as (function process-drawable symbol) false-func) + ) + ) + (ja-channel-set! 0) + (suspend) + (logior! (-> self mask) (process-mask sleep)) + (suspend) + 0 + (none) + ) + :post (the-as (function none :behavior drop-plat) rider-post) + ) diff --git a/test/decompiler/reference/jak2/engine/debug/editable-player_REF.gc b/test/decompiler/reference/jak2/engine/debug/editable-player_REF.gc index 9c22228633..795b00eb5a 100644 --- a/test/decompiler/reference/jak2/engine/debug/editable-player_REF.gc +++ b/test/decompiler/reference/jak2/engine/debug/editable-player_REF.gc @@ -1634,14 +1634,14 @@ ;; failed to figure out what this is: (defstate idle (editable-player) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (local-vars (v0-0 none)) - (let ((v1-0 arg2)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'execute) - (let ((a2-1 (-> arg3 param 0))) + (let ((a2-1 (-> event param 0))) (case a2-1 ((28 27 35 29 31 32) (editable-array-method-13 @@ -1677,26 +1677,26 @@ (deactivate self) ) ((= v1-0 'menu) - (set! v0-0 (the-as none (+ (-> self clock frame-counter) (the-as time-frame (-> arg3 param 0))))) + (set! v0-0 (the-as none (+ (-> self clock frame-counter) (the-as time-frame (-> event param 0))))) (set! (-> self close-menu-time) (the-as time-frame v0-0)) v0-0 ) ((or (= v1-0 'on-enter) (= v1-0 'on-exit) (= v1-0 'on-inside)) (let ((s4-0 (-> self current region))) (when s4-0 - (let ((gp-1 (-> arg3 param 0))) + (let ((gp-1 (-> event param 0))) (set! (-> *syntax-context* got-error?) #f) (eval! *syntax-context* (the-as pair gp-1)) (when (not (-> *syntax-context* got-error?)) (set! (-> s4-0 changed) #t) (cond - ((= arg2 'on-enter) + ((= event-type 'on-enter) (set! (-> s4-0 on-enter) (the-as string gp-1)) ) - ((= arg2 'on-inside) + ((= event-type 'on-inside) (set! (-> s4-0 on-inside) (the-as string gp-1)) ) - ((= arg2 'on-exit) + ((= event-type 'on-exit) (set! (-> s4-0 on-exit) (the-as string gp-1)) ) ) @@ -1709,7 +1709,7 @@ ) ) ((= v1-0 'select) - (let ((gp-2 (-> arg3 param 0))) + (let ((gp-2 (-> event param 0))) (editable-array-method-9 (-> self current) (editable-command select-none) (the-as editable-array #f)) (let* ((s5-1 (-> self current length)) (s4-1 0) @@ -1747,7 +1747,7 @@ ) ) (when v1-60 - (set! (-> v1-60 name) (the-as string (-> arg3 param 0))) + (set! (-> v1-60 name) (the-as string (-> event param 0))) (logior! (-> v1-60 flags) (editable-flag changed)) (let ((v1-61 (-> v1-60 region))) (if v1-61 @@ -1764,7 +1764,7 @@ #f ) ((= v1-0 'level) - (let ((gp-3 (lookup-level-info (the-as symbol (-> arg3 param 0))))) + (let ((gp-3 (lookup-level-info (the-as symbol (-> event param 0))))) (when (-> gp-3 dbname) (let* ((s5-3 (-> self current length)) (s4-3 0) @@ -1795,10 +1795,10 @@ (-> self current level) ) ((= v1-0 'direction) - (let* ((f30-0 (the-as float (-> arg3 param 0))) - (f28-0 (the-as float (-> arg3 param 1))) - (f26-0 (the-as float (-> arg3 param 2))) - (f24-0 (if (and (zero? (-> arg3 param 0)) (zero? (-> arg3 param 1)) (zero? (-> arg3 param 2))) + (let* ((f30-0 (the-as float (-> event param 0))) + (f28-0 (the-as float (-> event param 1))) + (f26-0 (the-as float (-> event param 2))) + (f24-0 (if (and (zero? (-> event param 0)) (zero? (-> event param 1)) (zero? (-> event param 2))) 0.0 1.0 ) @@ -1833,10 +1833,10 @@ #f ) ((= v1-0 'color) - (let* ((f30-1 (the-as float (-> arg3 param 0))) - (f28-1 (the-as float (-> arg3 param 1))) - (f26-1 (the-as float (-> arg3 param 2))) - (f24-1 (the-as float (-> arg3 param 3))) + (let* ((f30-1 (the-as float (-> event param 0))) + (f28-1 (the-as float (-> event param 1))) + (f26-1 (the-as float (-> event param 2))) + (f24-1 (the-as float (-> event param 3))) (gp-5 (-> self current length)) (s5-5 0) (s4-5 (-> self current data s5-5)) @@ -1866,8 +1866,8 @@ #f ) ((= v1-0 'param) - (let ((s5-6 (-> arg3 param 0)) - (f30-2 (the-as float (-> arg3 param 1))) + (let ((s5-6 (-> event param 0)) + (f30-2 (the-as float (-> event param 1))) ) (when (and (>= (the-as int s5-6) 0) (>= 2 (the-as int s5-6))) (let* ((gp-6 (-> self current length)) diff --git a/test/decompiler/reference/jak2/engine/debug/sampler_REF.gc b/test/decompiler/reference/jak2/engine/debug/sampler_REF.gc new file mode 100644 index 0000000000..ad5fa79290 --- /dev/null +++ b/test/decompiler/reference/jak2/engine/debug/sampler_REF.gc @@ -0,0 +1,61 @@ +;;-*-Lisp-*- +(in-package goal) + +;; this file is debug only +(declare-file (debug)) +(when *debug-segment* +;; definition for symbol *sampler-mem*, type pointer +(define *sampler-mem* "A pointer to where the sampled data should be stored" (the-as pointer #f)) + +;; definition for symbol *sampler-compare*, type uint +(define *sampler-compare* + "The value used to set the EE register's `Timer 0 Compare Value`. Always `1`" + (the-as uint 1) + ) + +;; definition for symbol *sampler-count*, type int +(define *sampler-count* "Incremented everytime a metric is sampled + @see [[timer0-handler]]" 0) + +;; definition (debug) for function timer0-handler +;; ERROR: function was not converted to expressions. Cannot decompile. + +;; failed to figure out what this is: +(set! (-> (the-as timer-bank #x10000000) mode) (new 'static 'timer-mode)) + +;; failed to figure out what this is: +(install-handler 9 timer0-handler) + +;; definition (debug) for function sampler-start +;; WARN: Return type mismatch int vs none. +(defun-debug sampler-start () + "Reset the [[timer-bank]] EE registers. + - If [[*sampler-mem*]] is undefined, allocate 16.7MB in the debug segment + - and when [[*sampler-mem*]] is defined, initialize the [[timer-bank]] fully. Reset [[*sampler-count*]] to 0 as well" + (set! (-> (the-as timer-bank #x10000000) mode) (new 'static 'timer-mode)) + (set! (-> (the-as timer-bank #x10000000) count) (the-as uint 0)) + (set! (-> (the-as timer-bank #x10000000) comp) *sampler-compare*) + (if (not *sampler-mem*) + (set! *sampler-mem* (malloc 'debug #x1000000)) + ) + (when (nonzero? *sampler-mem*) + (mem-set32! *sampler-mem* #x400000 0) + (set! (-> (the-as timer-bank #x10000000) mode) + (new 'static 'timer-mode :clks (timer-clock-selection busclk/256) :zret #x1 :cue #x1 :cmpe #x1 :equf #x1) + ) + (set! *sampler-count* 0) + 0 + ) + (none) + ) + +;; definition (debug) for function sampler-stop +;; WARN: Return type mismatch int vs none. +(defun-debug sampler-stop () + "Sets the [[timer-bank]] mode EE register to 0" + (set! (-> (the-as timer-bank #x10000000) mode) (new 'static 'timer-mode)) + 0 + (none) + ) + +) diff --git a/test/decompiler/reference/jak2/engine/entity/entity_REF.gc b/test/decompiler/reference/jak2/engine/entity/entity_REF.gc index 6e7eaf5b8d..3fbac882c0 100644 --- a/test/decompiler/reference/jak2/engine/entity/entity_REF.gc +++ b/test/decompiler/reference/jak2/engine/entity/entity_REF.gc @@ -2566,21 +2566,23 @@ ) ;; definition for function process-entity-status! +;; WARN: Return type mismatch int vs entity-perm-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 - ) - ) + (the-as entity-perm-status (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 diff --git a/test/decompiler/reference/jak2/engine/entity/relocate_REF.gc b/test/decompiler/reference/jak2/engine/entity/relocate_REF.gc index 4bfd5f3d6d..8397133d40 100644 --- a/test/decompiler/reference/jak2/engine/entity/relocate_REF.gc +++ b/test/decompiler/reference/jak2/engine/entity/relocate_REF.gc @@ -27,8 +27,10 @@ ) ) (let ((a0-19 (-> (the-as connection v1-7) param1))) - (if (and (>= a0-19 (-> *kernel-context* relocating-min)) (< a0-19 (-> *kernel-context* relocating-max))) - (+! (-> (the-as connection v1-7) param1) arg0) + (if (and (>= (the-as int a0-19) (-> *kernel-context* relocating-min)) + (< (the-as int a0-19) (-> *kernel-context* relocating-max)) + ) + (&+! (-> (the-as connection v1-7) param1) arg0) ) ) (let ((a0-24 (-> (the-as connection v1-7) param2))) diff --git a/test/decompiler/reference/jak2/engine/game/task/task-control_REF.gc b/test/decompiler/reference/jak2/engine/game/task/task-control_REF.gc index b61e6b4f10..96f94f9877 100644 --- a/test/decompiler/reference/jak2/engine/game/task/task-control_REF.gc +++ b/test/decompiler/reference/jak2/engine/game/task/task-control_REF.gc @@ -1529,8 +1529,8 @@ ;; failed to figure out what this is: (defstate idle (fail-mission) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('reset) (cond ((logtest? (-> self flags) (fail-mission-flags famflags-1)) @@ -1545,7 +1545,7 @@ ) ) (('query) - (case (-> arg3 param 0) + (case (-> event param 0) (('reset) (logtest? (-> self flags) (fail-mission-flags famflags-1)) ) @@ -1705,14 +1705,14 @@ ;; failed to figure out what this is: (defstate resetting (fail-mission) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'reset) #t ) ((= v1-0 'query) - (case (-> arg3 param 0) + (case (-> event param 0) (('reset) #t ) diff --git a/test/decompiler/reference/jak2/engine/gfx/lightning-h_REF.gc b/test/decompiler/reference/jak2/engine/gfx/lightning-h_REF.gc index 52d44f00d5..4fa37dc63b 100644 --- a/test/decompiler/reference/jak2/engine/gfx/lightning-h_REF.gc +++ b/test/decompiler/reference/jak2/engine/gfx/lightning-h_REF.gc @@ -130,7 +130,7 @@ (new (symbol type lightning-spec process float) _type_ 0) (change-mode (_type_ lightning-mode) lightning-mode 9) (get-mode (_type_) lightning-mode 10) - (set-point (_type_ int vector) none 11) + (set-point! (_type_ int vector) none 11) (set-first-meet-point (_type_ vector) none 12) (set-last-meet-point (_type_ vector) none 13) ) @@ -177,7 +177,7 @@ ;; definition for method 11 of type lightning-control ;; INFO: Used lq/sq ;; WARN: Return type mismatch int vs none. -(defmethod set-point lightning-control ((obj lightning-control) (arg0 int) (arg1 vector)) +(defmethod set-point! lightning-control ((obj lightning-control) (arg0 int) (arg1 vector)) (let ((v1-0 (-> obj state))) (when (and (-> v1-0 path) (>= arg0 0) (< arg0 (-> v1-0 path length))) (set! (-> v1-0 path data arg0 quad) (-> arg1 quad)) 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 d905c4d299..31b1463ed6 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 @@ -1426,7 +1426,7 @@ (v1-28 level-group) (v1-29 int) (a0-1 connectable) - (a0-2 int) + (a0-2 basic) (a0-3 none) (a0-4 none) (a0-5 none) diff --git a/test/decompiler/reference/jak2/engine/physics/trajectory_REF.gc b/test/decompiler/reference/jak2/engine/physics/trajectory_REF.gc index ba0a6fab8c..46b8cc90df 100644 --- a/test/decompiler/reference/jak2/engine/physics/trajectory_REF.gc +++ b/test/decompiler/reference/jak2/engine/physics/trajectory_REF.gc @@ -280,11 +280,13 @@ ) ) (sphere<-vector+r! s1-0 arg1 arg2) - (let ((t9-4 (method-of-object *actor-hash* spatial-hash-method-36))) - (-> s2-1 data) - (-> s2-1 allocated-length) - (set! (-> s2-1 length) (the-as int (t9-4))) - ) + (set! (-> s2-1 length) (spatial-hash-method-36 + *actor-hash* + s1-0 + (the-as (pointer collide-shape) (-> s2-1 data)) + (-> s2-1 allocated-length) + ) + ) (let ((gp-2 (find-nearest-focusable (the-as (array collide-shape) s2-1) arg1 diff --git a/test/decompiler/reference/jak2/engine/process-drawable/process-focusable_REF.gc b/test/decompiler/reference/jak2/engine/process-drawable/process-focusable_REF.gc index ee7316bbb8..aeb074c328 100644 --- a/test/decompiler/reference/jak2/engine/process-drawable/process-focusable_REF.gc +++ b/test/decompiler/reference/jak2/engine/process-drawable/process-focusable_REF.gc @@ -37,6 +37,7 @@ ;; definition for method 20 of type process-focusable ;; WARN: Return type mismatch structure vs vector. (defmethod get-trans process-focusable ((obj process-focusable) (arg0 int)) + "@returns the `trans` [[vector]] from the process's `root` (typically either a [[trsqv]] or a [[collide-shape]]" (let ((gp-0 (-> obj root))) (the-as vector (cond ((zero? arg0) diff --git a/test/decompiler/reference/jak2/engine/process-drawable/simple-focus_REF.gc b/test/decompiler/reference/jak2/engine/process-drawable/simple-focus_REF.gc new file mode 100644 index 0000000000..b3e6491a87 --- /dev/null +++ b/test/decompiler/reference/jak2/engine/process-drawable/simple-focus_REF.gc @@ -0,0 +1,76 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type simple-focus +(deftype simple-focus (process-focusable) + ((first-time? symbol :offset-assert 204) + ) + :heap-base #x50 + :method-count-assert 28 + :size-assert #xd0 + :flag-assert #x1c005000d0 + (:methods + (idle () _type_ :state 27) + ) + ) + +;; definition for method 3 of type simple-focus +(defmethod inspect simple-focus ((obj simple-focus)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (let ((t9-0 (method-of-type process-focusable inspect))) + (t9-0 obj) + ) + (format #t "~2Tfirst-time?: ~A~%" (-> obj first-time?)) + (label cfg-4) + obj + ) + +;; definition for method 20 of type simple-focus +(defmethod get-trans simple-focus ((obj simple-focus) (arg0 int)) + "@returns the `trans` [[vector]] from the process's `root` (typically either a [[trsqv]] or a [[collide-shape]]" + (-> obj root trans) + ) + +;; definition for method 12 of type simple-focus +(defmethod run-logic? simple-focus ((obj simple-focus)) + (when (-> obj first-time?) + (set! (-> obj first-time?) #f) + #t + ) + ) + +;; failed to figure out what this is: +(defstate idle (simple-focus) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) + (the-as object (when (= v1-0 'move-trans) + (let ((v0-0 (-> self root trans))) + (set! (-> v0-0 quad) (-> (the-as vector (-> event param 0)) quad)) + v0-0 + ) + ) + ) + ) + ) + :code (the-as (function none :behavior simple-focus) sleep-code) + ) + +;; definition for function simple-focus-init-by-other +;; WARN: Return type mismatch object vs none. +(defbehavior simple-focus-init-by-other simple-focus () + "Initializes the new [[simple-focus]]. `first-time?` will be set to [[#t]]" + (let ((root (new 'process 'trsqv))) + (set! (-> self root) root) + (vector-identity! (-> root scale)) + (quaternion-identity! (-> root quat)) + ) + (logclear! (-> self mask) (process-mask enemy)) + (set! (-> self first-time?) #t) + (set! (-> self event-hook) (-> (method-of-object self idle) event)) + (go-virtual idle) + (none) + ) diff --git a/test/decompiler/reference/jak2/engine/process-drawable/simple-nav-sphere_REF.gc b/test/decompiler/reference/jak2/engine/process-drawable/simple-nav-sphere_REF.gc new file mode 100644 index 0000000000..c2f184bd95 --- /dev/null +++ b/test/decompiler/reference/jak2/engine/process-drawable/simple-nav-sphere_REF.gc @@ -0,0 +1,163 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type simple-nav-sphere +(deftype simple-nav-sphere (process-drawable) + ((root-override collide-shape :offset 128) + (first-time? symbol :offset-assert 200) + (track-joint int32 :offset-assert 204) + ) + :heap-base #x50 + :method-count-assert 22 + :size-assert #xd0 + :flag-assert #x16005000d0 + (:methods + (idle () _type_ :state 20) + (active () _type_ :state 21) + ) + ) + +;; definition for method 3 of type simple-nav-sphere +(defmethod inspect simple-nav-sphere ((obj simple-nav-sphere)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~2Tfirst-time?: ~A~%" (-> obj first-time?)) + (format #t "~2Ttrack-joint: ~D~%" (-> obj track-joint)) + (label cfg-4) + obj + ) + +;; definition for function simple-nav-sphere-event-handler +;; WARN: Return type mismatch object vs none. +(defbehavior simple-nav-sphere-event-handler simple-nav-sphere ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type + (('die-fast) + (go empty-state) + ) + (('move-trans) + (collide-shape-method-29 (-> self root-override) (the-as vector (-> event param 0))) + #t + ) + (('set-radius) + (let ((radius (the-as float (-> event param 0))) + (collide-shape (-> self root-override)) + ) + (set! (-> collide-shape nav-radius) radius) + (set! (-> collide-shape root-prim local-sphere w) radius) + (collide-shape-method-46 collide-shape) + ) + #t + ) + ) + (none) + ) + +;; definition for method 12 of type simple-nav-sphere +(defmethod run-logic? simple-nav-sphere ((obj simple-nav-sphere)) + (cond + (*display-nav-marks* + #t + ) + ((>= (-> obj track-joint) 0) + #t + ) + ((-> obj first-time?) + (set! (-> obj first-time?) #f) + #t + ) + ) + ) + +;; failed to figure out what this is: +(defstate idle (simple-nav-sphere) + :virtual #t + :event (the-as + (function process int symbol event-message-block object :behavior simple-nav-sphere) + simple-nav-sphere-event-handler + ) + :trans (behavior () + (if *display-nav-marks* + (add-debug-sphere + #t + (bucket-id debug2) + (-> self root-override trans) + (-> self root-override nav-radius) + (new 'static 'rgba :r #x80 :g #x40 :a #x80) + ) + ) + (none) + ) + :code (the-as (function none :behavior simple-nav-sphere) sleep-code) + ) + +;; failed to figure out what this is: +(defstate active (simple-nav-sphere) + :virtual #t + :event (the-as + (function process int symbol event-message-block object :behavior simple-nav-sphere) + simple-nav-sphere-event-handler + ) + :trans (behavior () + (let ((v1-0 (ppointer->process (-> self parent))) + (gp-0 (new 'stack-no-clear 'vector)) + ) + (vector<-cspace! gp-0 (-> (the-as process-drawable v1-0) node-list data (-> self track-joint))) + (collide-shape-method-29 (-> self root-override) gp-0) + ) + (none) + ) + :code (the-as (function none :behavior simple-nav-sphere) sleep-code) + ) + +;; definition for function simple-nav-sphere-init-by-other +;; INFO: Used lq/sq +;; WARN: Return type mismatch object vs none. +(defbehavior simple-nav-sphere-init-by-other simple-nav-sphere ((arg0 float) (arg1 vector) (arg2 nav-mesh) (arg3 int)) + (set! (-> self track-joint) arg3) + (set! (-> self first-time?) #t) + (let ((s5-0 (new 'process 'collide-shape self (collide-list-enum usually-hit-by-player)))) + (let ((v1-3 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 0)))) + (set! (-> v1-3 prim-core collide-as) (collide-spec obstacle)) + (set-vector! (-> v1-3 local-sphere) 0.0 0.0 0.0 4096.0) + (set! (-> s5-0 total-prims) (the-as uint 1)) + (set! (-> s5-0 root-prim) v1-3) + ) + (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) + (let ((v1-6 (-> s5-0 root-prim))) + (set! (-> s5-0 backup-collide-as) (-> v1-6 prim-core collide-as)) + (set! (-> s5-0 backup-collide-with) (-> v1-6 prim-core collide-with)) + ) + (set! (-> s5-0 nav-radius) arg0) + (set! (-> s5-0 root-prim local-sphere w) arg0) + (if arg1 + (set! (-> s5-0 trans quad) (-> arg1 quad)) + ) + (vector-identity! (-> s5-0 scale)) + (quaternion-identity! (-> s5-0 quat)) + (let ((v1-11 (-> s5-0 root-prim))) + (set! (-> v1-11 prim-core collide-as) (collide-spec)) + (set! (-> v1-11 prim-core collide-with) (collide-spec)) + ) + 0 + (collide-shape-method-46 s5-0) + (set! (-> self root-override) s5-0) + ) + (logclear! (-> self mask) (process-mask actor-pause enemy)) + (set! (-> self event-hook) + (the-as (function process int symbol event-message-block object) simple-nav-sphere-event-handler) + ) + (if arg2 + (nav-mesh-method-29 arg2 self #f) + (nav-mesh-connect-from-ent (the-as entity-nav-mesh self)) + ) + (if (>= (-> self track-joint) 0) + (go-virtual active) + (go-virtual idle) + ) + (none) + ) diff --git a/test/decompiler/reference/jak2/engine/spatial_hash/actor-hash-h_REF.gc b/test/decompiler/reference/jak2/engine/spatial-hash/actor-hash-h_REF.gc similarity index 52% rename from test/decompiler/reference/jak2/engine/spatial_hash/actor-hash-h_REF.gc rename to test/decompiler/reference/jak2/engine/spatial-hash/actor-hash-h_REF.gc index aa4fb59d6b..5fbd2d4d50 100644 --- a/test/decompiler/reference/jak2/engine/spatial_hash/actor-hash-h_REF.gc +++ b/test/decompiler/reference/jak2/engine/spatial-hash/actor-hash-h_REF.gc @@ -1,15 +1,11 @@ ;;-*-Lisp-*- (in-package goal) -;; definition for symbol *actor-list*, type pointer -(define *actor-list* (malloc 'global 1024)) +;; definition for symbol *actor-list*, type (pointer collide-shape) +(define *actor-list* (the-as (pointer collide-shape) (malloc 'global 1024))) ;; definition for symbol *actor-list-length*, type int (define *actor-list-length* 0) ;; failed to figure out what this is: 0 - - - - diff --git a/test/decompiler/reference/jak2/engine/spatial_hash/collide-hash-h_REF.gc b/test/decompiler/reference/jak2/engine/spatial-hash/collide-hash-h_REF.gc similarity index 100% rename from test/decompiler/reference/jak2/engine/spatial_hash/collide-hash-h_REF.gc rename to test/decompiler/reference/jak2/engine/spatial-hash/collide-hash-h_REF.gc diff --git a/test/decompiler/reference/jak2/engine/spatial_hash/spatial-hash-h_REF.gc b/test/decompiler/reference/jak2/engine/spatial-hash/spatial-hash-h_REF.gc similarity index 99% rename from test/decompiler/reference/jak2/engine/spatial_hash/spatial-hash-h_REF.gc rename to test/decompiler/reference/jak2/engine/spatial-hash/spatial-hash-h_REF.gc index 3bdae68477..6ad801527b 100644 --- a/test/decompiler/reference/jak2/engine/spatial_hash/spatial-hash-h_REF.gc +++ b/test/decompiler/reference/jak2/engine/spatial-hash/spatial-hash-h_REF.gc @@ -225,7 +225,7 @@ (:methods (spatial-hash-method-34 () none 34) (spatial-hash-method-35 () none 35) - (spatial-hash-method-36 () none 36) + (spatial-hash-method-36 (_type_ sphere (pointer collide-shape) int) int 36) (spatial-hash-method-37 () none 37) (spatial-hash-method-38 () none 38) (spatial-hash-method-39 () none 39) diff --git a/test/decompiler/reference/jak2/engine/target/board/board-states_REF.gc b/test/decompiler/reference/jak2/engine/target/board/board-states_REF.gc index 78b4ee44b3..b2651ede1a 100644 --- a/test/decompiler/reference/jak2/engine/target/board/board-states_REF.gc +++ b/test/decompiler/reference/jak2/engine/target/board/board-states_REF.gc @@ -547,8 +547,8 @@ ;; failed to figure out what this is: (defstate target-board-stance (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('lip) (when (and (= (-> self control ground-pat mode) (pat-mode halfpipe)) (< (-> self control poly-angle) 0.5) @@ -565,7 +565,7 @@ ) (set! (-> self board halfpipe-lip-time) (-> self clock frame-counter)) (set! (-> self board halfpipe-side-time) (-> self clock frame-counter)) - (set! (-> self board halfpipe-lip-event) (the-as symbol (-> arg3 param 0))) + (set! (-> self board halfpipe-lip-event) (the-as symbol (-> event param 0))) (let ((v0-2 (the-as object (logior (-> self control root-prim prim-core action) (collide-action no-normal-reset)))) ) (set! (-> self control root-prim prim-core action) (the-as collide-action v0-2)) @@ -576,13 +576,13 @@ (('jump) (go target-board-jump - (the-as meters (-> arg3 param 0)) - (the-as meters (-> arg3 param 1)) - (the-as symbol (-> arg3 param 2)) + (the-as meters (-> event param 0)) + (the-as meters (-> event param 1)) + (the-as symbol (-> event param 2)) ) ) (else - (target-board-handler arg0 arg1 arg2 arg3) + (target-board-handler proc arg1 event-type event) ) ) ) @@ -914,11 +914,11 @@ ;; failed to figure out what this is: (defstate target-board-jump (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (if (and (= arg2 'edge-grab) (< (- (-> self clock frame-counter) (-> self state-time)) (seconds 0.1))) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (if (and (= event-type 'edge-grab) (< (- (-> self clock frame-counter) (-> self state-time)) (seconds 0.1))) (return #f) ) - (target-board-handler arg0 arg1 arg2 arg3) + (target-board-handler proc arg1 event-type event) ) :enter (behavior ((arg0 meters) (arg1 meters) (arg2 symbol)) (local-vars @@ -1132,8 +1132,8 @@ ;; failed to figure out what this is: (defstate target-board-halfpipe (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('edge-grab) (format #t @@ -1178,14 +1178,14 @@ ) ) (('grenade) - (if (< (the-as float (-> arg3 param 0)) + (if (< (the-as float (-> event param 0)) (vector-dot (-> self control dynam gravity-normal) (-> self control transv)) ) - (go target-board-grenade (process->handle arg0)) + (go target-board-grenade (process->handle proc)) ) ) (else - (target-board-handler arg0 arg1 arg2 arg3) + (target-board-handler proc arg1 event-type event) ) ) ) @@ -2232,13 +2232,13 @@ ;; failed to figure out what this is: (defstate target-board-ride-edge (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('edge-grab 'push-transv 'push-trans) #f ) (('end-mode) - (when (-> arg3 param 0) + (when (-> event param 0) (let ((v1-6 (/ (- (-> self clock frame-counter) (-> self board ride-start-time)) 300))) (if (> v1-6 0) (add-to-trick-list (-> self board) (board-tricks board-rail) (* 100.0 (the float v1-6))) @@ -2248,7 +2248,7 @@ (go target-board-turn-to (-> self control transv) (seconds 0.2)) ) (else - (target-board-handler arg0 arg1 arg2 arg3) + (target-board-handler proc arg1 event-type event) ) ) ) @@ -2506,13 +2506,13 @@ ;; failed to figure out what this is: (defstate target-board-grenade (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('target) (handle->process (-> self control unknown-handle02)) ) (else - (target-board-handler arg0 arg1 arg2 arg3) + (target-board-handler proc arg1 event-type event) ) ) ) @@ -2617,19 +2617,19 @@ ;; failed to figure out what this is: (defstate target-board-get-on (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('attack 'attack-or-shove 'attack-invinc) (target-attacked - arg2 - (the-as attack-info (-> arg3 param 1)) - arg0 - (the-as process (-> arg3 param 0)) + event-type + (the-as attack-info (-> event param 1)) + proc + (the-as process (-> event param 0)) target-hit ) ) (else - (target-generic-event-handler arg0 arg1 arg2 arg3) + (target-generic-event-handler proc arg1 event-type event) ) ) ) @@ -2775,13 +2775,13 @@ ;; failed to figure out what this is: (defstate target-board-pegasus (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('end-mode) (go target-jump 16384.0 16384.0 (the-as surface #f)) ) (else - (target-generic-event-handler arg0 arg1 arg2 arg3) + (target-generic-event-handler proc arg1 event-type event) ) ) ) @@ -3078,21 +3078,21 @@ ;; failed to figure out what this is: (defstate target-board-grab (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (cond - ((and (= arg2 'query) (= (-> arg3 param 0) 'mode)) + ((and (= event-type 'query) (= (-> event param 0) 'mode)) (-> self state name) ) (else - (case arg2 + (case event-type (('end-mode) (go target-board-stance) ) (('clone-anim) - (go target-board-clone-anim (process->handle (the-as process (-> arg3 param 0)))) + (go target-board-clone-anim (process->handle (the-as process (-> event param 0)))) ) (('change-mode) - (case (-> arg3 param 0) + (case (-> event param 0) (('normal) enter-state 'stance @@ -3101,7 +3101,7 @@ ) ) (else - (target-generic-event-handler arg0 arg1 arg2 arg3) + (target-generic-event-handler proc arg1 event-type event) ) ) ) @@ -3143,11 +3143,11 @@ ;; failed to figure out what this is: (defstate target-board-clone-anim (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (if (and (= arg2 'trans) (= (-> arg3 param 0) 'restore)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (if (and (= event-type 'trans) (= (-> event param 0) 'restore)) (set! (-> self control unknown-word04) (the-as uint #f)) ) - ((-> target-board-grab event) arg0 arg1 arg2 arg3) + ((-> target-board-grab event) proc arg1 event-type event) ) :enter (-> target-clone-anim enter) :exit (behavior () diff --git a/test/decompiler/reference/jak2/engine/target/board/board-util_REF.gc b/test/decompiler/reference/jak2/engine/target/board/board-util_REF.gc index 8b1b026f32..b04b08001a 100644 --- a/test/decompiler/reference/jak2/engine/target/board/board-util_REF.gc +++ b/test/decompiler/reference/jak2/engine/target/board/board-util_REF.gc @@ -89,8 +89,8 @@ ;; failed to figure out what this is: (defstate idle (board) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('open) (go-virtual use) ) @@ -140,8 +140,8 @@ ;; failed to figure out what this is: (defstate use (board) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('close) (go-virtual idle #f) ) diff --git a/test/decompiler/reference/jak2/engine/target/board/target-board_REF.gc b/test/decompiler/reference/jak2/engine/target/board/target-board_REF.gc index e010d318d5..53aeca4cc3 100644 --- a/test/decompiler/reference/jak2/engine/target/board/target-board_REF.gc +++ b/test/decompiler/reference/jak2/engine/target/board/target-board_REF.gc @@ -2058,7 +2058,7 @@ ) (if (probe-test (-> self control) s3-5 (new 'static 'pat-surface :noentity #x1 :noboard #x1 :probe #x1)) (set! (-> self control status) (logior (cshape-moving-flags csmf16) (-> self control status))) - ((method-of-object (-> self control) collide-shape-method-28)) + (move-by-vector! (-> self control) s3-5) ) ) ) @@ -2266,8 +2266,9 @@ ) ) (when (not (logtest? s4-3 64)) - (vector-float*! (new 'stack-no-clear 'vector) (-> self control dynam gravity-normal) 819.2) - ((method-of-object (-> self control) collide-shape-method-28)) + (let ((a1-83 (vector-float*! (new 'stack-no-clear 'vector) (-> self control dynam gravity-normal) 819.2))) + (move-by-vector! (-> self control) a1-83) + ) ) (send-event self 'end-mode (zero? (logand s4-3 75))) ) 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 86b690c49c..a78d14c9bb 100644 --- a/test/decompiler/reference/jak2/engine/target/logic-target_REF.gc +++ b/test/decompiler/reference/jak2/engine/target/logic-target_REF.gc @@ -2192,8 +2192,9 @@ ) (else (vector-normalize! s4-1 1228.8) - (vector+! (new 'stack-no-clear 'vector) s4-1 (-> self control unknown-vector05)) - ((method-of-object (-> self control) collide-shape-method-28)) + (let ((a1-20 (vector+! (new 'stack-no-clear 'vector) s4-1 (-> self control unknown-vector05)))) + (move-by-vector! (-> self control) a1-20) + ) (vector-float*! (-> self control rider-last-move) s4-1 (-> self clock frames-per-second)) (set! (-> self control rider-time) (-> self clock frame-counter)) (if (and (>= (- (-> self clock frame-counter) (-> self control unknown-time-frame16)) (seconds 0.5)) @@ -2283,10 +2284,10 @@ ) (let ((a1-15 (vector-! (new-stack-vector0) (-> gp-0 center-hold) (-> gp-0 center-hold-old)))) (vector-float*! (-> self control rider-last-move) a1-15 (-> self clock frames-per-second)) + (set! (-> self control rider-time) (-> self clock frame-counter)) + (move-by-vector! (-> self control) a1-15) ) ) - (set! (-> self control rider-time) (-> self clock frame-counter)) - ((method-of-object (-> self control) collide-shape-method-28)) (set! (-> self control unknown-float33) 0.0) (joint-control-method-10 (-> self skel)) (draw-control-method-14 (-> self draw) (-> self node-list) (-> self skel)) @@ -2365,10 +2366,7 @@ (let ((a0-26 (vector-! (new-stack-vector0) s5-0 (-> self control unknown-vector30)))) (cond ((and (< 2457.6 (vector-length a0-26)) (not (-> self control unknown-symbol02))) - (let ((s4-2 (method-of-object (-> self control) collide-shape-method-28))) - (vector-normalize! a0-26 2457.6) - (s4-2) - ) + (move-by-vector! (-> self control) (vector-normalize! a0-26 2457.6)) ) (else (set! (-> self control unknown-symbol02) (the-as float #t)) @@ -3308,7 +3306,7 @@ (set! (-> s0-0 nav-radius) (* 0.75 (-> s0-0 root-prim local-sphere w))) (let ((v1-66 (-> s0-0 root-prim))) (set! (-> s0-0 backup-collide-as) (-> v1-66 prim-core collide-as)) - (set! (-> s0-0 backup-collde-with) (-> v1-66 prim-core collide-with)) + (set! (-> s0-0 backup-collide-with) (-> v1-66 prim-core collide-with)) ) (set! (-> s0-0 event-priority) (the-as uint 9)) (set! (-> obj control) s0-0) @@ -3409,7 +3407,7 @@ (target-collide-set! 'normal 0.0) (let ((v1-163 (-> obj control root-prim))) (set! (-> obj control backup-collide-as) (-> v1-163 prim-core collide-as)) - (set! (-> obj control backup-collde-with) (-> v1-163 prim-core collide-with)) + (set! (-> obj control backup-collide-with) (-> v1-163 prim-core collide-with)) ) (set! (-> obj sound) (new 'process 'ambient-sound "none" (-> obj control trans))) (set! (-> obj control unknown-sound-id04) (new-sound-id)) diff --git a/test/decompiler/reference/jak2/engine/target/target_REF.gc b/test/decompiler/reference/jak2/engine/target/target_REF.gc index 7dc08720e7..187578556d 100644 --- a/test/decompiler/reference/jak2/engine/target/target_REF.gc +++ b/test/decompiler/reference/jak2/engine/target/target_REF.gc @@ -436,13 +436,13 @@ ;; failed to figure out what this is: (defstate target-slide-down-to-ground (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('slide) #f ) (else - (target-standard-event-handler arg0 arg1 arg2 arg3) + (target-standard-event-handler proc arg1 event-type event) ) ) ) @@ -2109,23 +2109,23 @@ ;; failed to figure out what this is: (defstate target-attack (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('touched) (cond (((method-of-type touching-shapes-entry touching-shapes-entry-method-12) - (the-as touching-shapes-entry (-> arg3 param 0)) + (the-as touching-shapes-entry (-> event param 0)) (-> self control) (the-as uint 1920) ) (let ((t9-1 target-send-attack) (a1-2 (-> self control unknown-symbol04)) - (a2-2 (-> arg3 param 0)) + (a2-2 (-> event param 0)) (a3-1 (-> self control unknown-symbol05)) (t0-0 (-> self control unknown-dword05)) ) (-> self control penetrate-using) - (when (t9-1 arg0 (the-as uint a1-2) a2-2 (the-as int a3-1) (the-as int t0-0)) + (when (t9-1 proc (the-as uint a1-2) a2-2 (the-as int a3-1) (the-as int t0-0)) (set! (-> self gun combo-window-start) (-> self clock frame-counter)) (let ((v0-2 (the-as object (-> self state name)))) (set! (-> self gun combo-window-state) (the-as symbol v0-2)) @@ -2135,12 +2135,12 @@ ) ) (else - (target-dangerous-event-handler arg0 arg1 arg2 arg3) + (target-dangerous-event-handler proc arg1 event-type event) ) ) ) (('gun-combo) - (when (-> arg3 param 0) + (when (-> event param 0) (forward-up-nopitch->quaternion (-> self control dir-targ) (vector-! (new 'stack-no-clear 'vector) (-> self gun track-trans) (-> self control trans)) @@ -2155,7 +2155,7 @@ #f ) (else - (target-dangerous-event-handler arg0 arg1 arg2 arg3) + (target-dangerous-event-handler proc arg1 event-type event) ) ) ) @@ -2397,19 +2397,19 @@ ;; failed to figure out what this is: (defstate target-running-attack (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('touched) (cond (((method-of-type touching-shapes-entry touching-shapes-entry-method-12) - (the-as touching-shapes-entry (-> arg3 param 0)) + (the-as touching-shapes-entry (-> event param 0)) (-> self control) (the-as uint 1920) ) (let ((t9-1 target-send-attack) - (a0-3 arg0) + (a0-3 proc) (a1-2 (-> self control unknown-symbol04)) - (a2-2 (-> arg3 param 0)) + (a2-2 (-> event param 0)) (a3-1 (-> self control unknown-symbol05)) (t0-0 (-> self control unknown-dword05)) ) @@ -2419,8 +2419,8 @@ (set! (-> self control unknown-time-frame17) (-> self clock frame-counter)) (set! (-> self gun combo-window-start) (-> self clock frame-counter)) (set! (-> self gun combo-window-state) (-> self state name)) - (let ((v1-13 (if (type? arg0 process-focusable) - arg0 + (let ((v1-13 (if (type? proc process-focusable) + proc ) ) ) @@ -2459,12 +2459,12 @@ ) ) (else - (target-dangerous-event-handler arg0 arg1 arg2 arg3) + (target-dangerous-event-handler proc arg1 event-type event) ) ) ) (('gun-combo) - (if (-> arg3 param 0) + (if (-> event param 0) (go target-stance) ) #t @@ -2473,7 +2473,7 @@ #f ) (else - (target-dangerous-event-handler arg0 arg1 arg2 arg3) + (target-dangerous-event-handler proc arg1 event-type event) ) ) ) @@ -2943,15 +2943,15 @@ ;; failed to figure out what this is: (defstate target-attack-air (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v0-0 (target-bonk-event-handler arg0 arg1 arg2 arg3))) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v0-0 (target-bonk-event-handler proc arg1 event-type event))) (cond (v0-0 (empty) v0-0 ) (else - (target-dangerous-event-handler arg0 arg1 arg2 arg3) + (target-dangerous-event-handler proc arg1 event-type event) ) ) ) @@ -3266,10 +3266,10 @@ ;; failed to figure out what this is: (defstate target-attack-uppercut-jump (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('gun-combo) - (when (-> arg3 param 0) + (when (-> event param 0) (forward-up-nopitch->quaternion (-> self control dir-targ) (vector-! (new 'stack-no-clear 'vector) (-> self gun track-trans) (-> self control trans)) @@ -3301,7 +3301,7 @@ #t ) (else - (target-dangerous-event-handler arg0 arg1 arg2 arg3) + (target-dangerous-event-handler proc arg1 event-type event) ) ) ) @@ -3459,15 +3459,15 @@ ;; failed to figure out what this is: (defstate target-flop (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (local-vars (v1-0 symbol)) - (let ((v0-0 (target-bonk-event-handler arg0 arg1 arg2 arg3))) + (let ((v0-0 (target-bonk-event-handler proc arg1 event-type event))) (cond (v0-0 (empty) v0-0 ) - ((begin (set! v1-0 arg2) (= v1-0 'slide)) + ((begin (set! v1-0 event-type) (= v1-0 'slide)) #f ) ((= v1-0 'swim) @@ -3483,7 +3483,7 @@ ) ) (else - (target-dangerous-event-handler arg0 arg1 arg2 arg3) + (target-dangerous-event-handler proc arg1 event-type event) ) ) ) @@ -3764,20 +3764,20 @@ ;; failed to figure out what this is: (defstate target-flop-hit-ground (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) (cond ((and (-> self next-state) (= (-> self next-state name) 'target-flop-hit-ground)) - (case arg2 + (case event-type (('swim 'slide) #f ) (else - (target-standard-event-handler arg0 arg1 arg2 arg3) + (target-standard-event-handler proc arg1 event-type event) ) ) ) (else - (target-jump-event-handler arg0 arg1 arg2 arg3) + (target-jump-event-handler proc arg1 event-type event) ) ) ) @@ -3867,13 +3867,13 @@ ;; failed to figure out what this is: (defstate target-roll (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (if (= arg2 'touched) - (send-event arg0 'roll) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (if (= event-type 'touched) + (send-event proc 'roll) ) - (case arg2 + (case event-type (('gun-combo) - (when (-> arg3 param 0) + (when (-> event param 0) (forward-up-nopitch->quaternion (-> self control dir-targ) (vector-! (new 'stack-no-clear 'vector) (-> self gun track-trans) (-> self control trans)) @@ -3887,7 +3887,7 @@ #t ) (else - (target-standard-event-handler arg0 arg1 arg2 arg3) + (target-standard-event-handler proc arg1 event-type event) ) ) ) @@ -4044,10 +4044,10 @@ ;; failed to figure out what this is: (defstate target-roll-flip (target) - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type (('gun-combo) - (when (-> arg3 param 0) + (when (-> event param 0) (forward-up-nopitch->quaternion (-> self control dir-targ) (vector-! (new 'stack-no-clear 'vector) (-> self gun track-trans) (-> self control trans)) @@ -4059,7 +4059,7 @@ #t ) (else - (target-jump-event-handler arg0 arg1 arg2 arg3) + (target-jump-event-handler proc arg1 event-type event) ) ) ) diff --git a/test/decompiler/reference/jak2/engine/util/sync-info-h_REF.gc b/test/decompiler/reference/jak2/engine/util/sync-info-h_REF.gc index 0ba2e69027..d9e91b3603 100644 --- a/test/decompiler/reference/jak2/engine/util/sync-info-h_REF.gc +++ b/test/decompiler/reference/jak2/engine/util/sync-info-h_REF.gc @@ -104,6 +104,7 @@ (pause-in float :offset-assert 36) (pause-out float :offset-assert 40) ) + :pack-me :method-count-assert 16 :size-assert #x2c :flag-assert #x100000002c diff --git a/test/decompiler/reference/jak2/levels/common/airlock_REF.gc b/test/decompiler/reference/jak2/levels/common/airlock_REF.gc index 67c83e8c66..8a729322a0 100644 --- a/test/decompiler/reference/jak2/levels/common/airlock_REF.gc +++ b/test/decompiler/reference/jak2/levels/common/airlock_REF.gc @@ -448,31 +448,31 @@ ;; failed to figure out what this is: (defstate close (com-airlock) :virtual #t - :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) (the-as object (cond ((= v1-0 'close) (set! (-> self latch-closed-time) (+ (-> self clock frame-counter) (if (>= arg1 1) - (the-as int (-> arg3 param 0)) + (the-as int (-> event param 0)) 3000 ) ) ) - (if (and (>= arg1 2) (and (= (-> arg3 param 1) #t) (not (want-cross-airlock? self)))) + (if (and (>= arg1 2) (and (= (-> event param 1) #t) (not (want-cross-airlock? self)))) (ja :group! (get-art-by-name (-> self draw art-group) "idle" art-joint-anim) :num! min) ) (and (-> self next-state) (= (-> self next-state name) 'open)) ) ((= v1-0 'open) (set! (-> self latch-open-time) (+ (-> self clock frame-counter) (if (>= arg1 1) - (the-as int (-> arg3 param 0)) + (the-as int (-> event param 0)) 3000 ) ) ) - (if (and (>= arg1 2) (and (= (-> arg3 param 1) #t) (want-cross-airlock? self) (destination-loaded? self #f))) + (if (and (>= arg1 2) (and (= (-> event param 1) #t) (want-cross-airlock? self) (destination-loaded? self #f))) (ja :group! (get-art-by-name (-> self draw art-group) "idle" art-joint-anim) :num! (identity (the float (+ (-> (get-art-by-name (-> self draw art-group) "idle" art-joint-anim) frames num-frames) -1)) @@ -497,7 +497,7 @@ ) ((= v1-0 'sound) (if (>= (check-crossing-distance self (target-pos 0) #f) 0.0) - (play-city-voice-sound self (the-as symbol (-> arg3 param 0))) + (play-city-voice-sound self (the-as symbol (-> event param 0))) ) ) ((= v1-0 'distance) @@ -951,7 +951,7 @@ (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) (let ((v1-13 (-> s5-0 root-prim))) (set! (-> s5-0 backup-collide-as) (-> v1-13 prim-core collide-as)) - (set! (-> s5-0 backup-collde-with) (-> v1-13 prim-core collide-with)) + (set! (-> s5-0 backup-collide-with) (-> v1-13 prim-core collide-with)) ) (set! (-> obj root-override) s5-0) ) @@ -1029,7 +1029,7 @@ (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) (let ((v1-13 (-> s5-0 root-prim))) (set! (-> s5-0 backup-collide-as) (-> v1-13 prim-core collide-as)) - (set! (-> s5-0 backup-collde-with) (-> v1-13 prim-core collide-with)) + (set! (-> s5-0 backup-collide-with) (-> v1-13 prim-core collide-with)) ) (set! (-> obj root-override) s5-0) ) @@ -1133,7 +1133,7 @@ (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) (let ((v1-13 (-> s5-0 root-prim))) (set! (-> s5-0 backup-collide-as) (-> v1-13 prim-core collide-as)) - (set! (-> s5-0 backup-collde-with) (-> v1-13 prim-core collide-with)) + (set! (-> s5-0 backup-collide-with) (-> v1-13 prim-core collide-with)) ) (set! (-> obj root-override) s5-0) ) @@ -1221,7 +1221,7 @@ (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) (let ((v1-13 (-> s5-0 root-prim))) (set! (-> s5-0 backup-collide-as) (-> v1-13 prim-core collide-as)) - (set! (-> s5-0 backup-collde-with) (-> v1-13 prim-core collide-with)) + (set! (-> s5-0 backup-collide-with) (-> v1-13 prim-core collide-with)) ) (set! (-> obj root-override) s5-0) ) @@ -1298,7 +1298,7 @@ (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) (let ((v1-5 (-> s5-0 root-prim))) (set! (-> s5-0 backup-collide-as) (-> v1-5 prim-core collide-as)) - (set! (-> s5-0 backup-collde-with) (-> v1-5 prim-core collide-with)) + (set! (-> s5-0 backup-collide-with) (-> v1-5 prim-core collide-with)) ) (set! (-> obj root-override) s5-0) ) @@ -1409,7 +1409,7 @@ (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) (let ((v1-13 (-> s5-0 root-prim))) (set! (-> s5-0 backup-collide-as) (-> v1-13 prim-core collide-as)) - (set! (-> s5-0 backup-collde-with) (-> v1-13 prim-core collide-with)) + (set! (-> s5-0 backup-collide-with) (-> v1-13 prim-core collide-with)) ) (set! (-> obj root-override) s5-0) ) @@ -1498,7 +1498,7 @@ (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) (let ((v1-13 (-> s5-0 root-prim))) (set! (-> s5-0 backup-collide-as) (-> v1-13 prim-core collide-as)) - (set! (-> s5-0 backup-collde-with) (-> v1-13 prim-core collide-with)) + (set! (-> s5-0 backup-collide-with) (-> v1-13 prim-core collide-with)) ) (set! (-> obj root-override) s5-0) ) @@ -1587,7 +1587,7 @@ (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) (let ((v1-13 (-> s5-0 root-prim))) (set! (-> s5-0 backup-collide-as) (-> v1-13 prim-core collide-as)) - (set! (-> s5-0 backup-collde-with) (-> v1-13 prim-core collide-with)) + (set! (-> s5-0 backup-collide-with) (-> v1-13 prim-core collide-with)) ) (set! (-> obj root-override) s5-0) ) @@ -1676,7 +1676,7 @@ (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) (let ((v1-13 (-> s5-0 root-prim))) (set! (-> s5-0 backup-collide-as) (-> v1-13 prim-core collide-as)) - (set! (-> s5-0 backup-collde-with) (-> v1-13 prim-core collide-with)) + (set! (-> s5-0 backup-collide-with) (-> v1-13 prim-core collide-with)) ) (set! (-> obj root-override) s5-0) ) diff --git a/test/decompiler/reference/jak2/levels/common/elec-gate_REF.gc b/test/decompiler/reference/jak2/levels/common/elec-gate_REF.gc new file mode 100644 index 0000000000..f030fd69d1 --- /dev/null +++ b/test/decompiler/reference/jak2/levels/common/elec-gate_REF.gc @@ -0,0 +1,1215 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type elec-gate-params +(deftype elec-gate-params (structure) + ((bolt-spec lightning-spec :offset-assert 0) + (ring-spec lightning-spec :offset-assert 4) + (ring-radius-min float :offset-assert 8) + (ring-radius-max float :offset-assert 12) + (speed-mult float :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x14 + :flag-assert #x900000014 + ) + +;; definition for method 3 of type elec-gate-params +(defmethod inspect elec-gate-params ((obj elec-gate-params)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'elec-gate-params) + (format #t "~1Tbolt-spec: ~A~%" (-> obj bolt-spec)) + (format #t "~1Tring-spec: ~A~%" (-> obj ring-spec)) + (format #t "~1Tring-radius-min: ~f~%" (-> obj ring-radius-min)) + (format #t "~1Tring-radius-max: ~f~%" (-> obj ring-radius-max)) + (format #t "~1Tspeed-mult: ~f~%" (-> obj speed-mult)) + (label cfg-4) + obj + ) + +;; definition of type elec-gate-bolt +(deftype elec-gate-bolt (structure) + ((ring lightning-control 2 :offset-assert 0) + (bolt lightning-control :offset-assert 8) + (ring-radius float :offset-assert 12) + (pos float :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x14 + :flag-assert #x900000014 + ) + +;; definition for method 3 of type elec-gate-bolt +(defmethod inspect elec-gate-bolt ((obj elec-gate-bolt)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'elec-gate-bolt) + (format #t "~1Tring[2] @ #x~X~%" (-> obj ring)) + (format #t "~1Tbolt: ~A~%" (-> obj bolt)) + (format #t "~1Tring-radius: ~f~%" (-> obj ring-radius)) + (format #t "~1Tpos: ~f~%" (-> obj pos)) + (label cfg-4) + obj + ) + +;; definition of type elec-wall +(deftype elec-wall (structure) + ((pos vector :inline :offset-assert 0) + (dir vector :inline :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) + +;; definition for method 3 of type elec-wall +(defmethod inspect elec-wall ((obj elec-wall)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'elec-wall) + (format #t "~1Tpos: #~%" (-> obj pos)) + (format #t "~1Tdir: #~%" (-> obj dir)) + (label cfg-4) + obj + ) + +;; definition of type elec-gate +(deftype elec-gate (process-drawable) + ((params elec-gate-params :offset-assert 200) + (path-l path-control :offset 152) + (path-r path-control :offset-assert 204) + (l-bolt elec-gate-bolt 5 :inline :offset-assert 208) + (part-on sparticle-launch-control :offset 168) + (part-off sparticle-launch-control :offset-assert 368) + (part-spawner-left part-spawner :offset-assert 372) + (part-spawner-right part-spawner :offset-assert 376) + (on-start basic :offset-assert 380) + (on-stop basic :offset-assert 384) + (dividing-wall elec-wall :inline :offset-assert 400) + (plane elec-wall 2 :inline :offset-assert 432) + (wall-y float :offset-assert 496) + (wall-xz float :offset-assert 500) + (lightning-quality float :offset-assert 504) + (quality-enabled? symbol :offset-assert 508) + ) + :heap-base #x180 + :method-count-assert 30 + :size-assert #x200 + :flag-assert #x1e01800200 + (:methods + (idle () _type_ :state 20) + (active () _type_ :state 21) + (shutdown () _type_ :state 22) + (get-params (_type_) elec-gate-params 23) + (elec-gate-method-24 (_type_) none 24) + (set-palette! (_type_) none 25) + (set-state! (_type_) none 26) + (spawn-particles (_type_ sparticle-launch-control) none 27) + (set-elec-scale-if-close! (_type_ float) none 28) + (set-elec-scale! (_type_ float) none 29) + ) + ) + +;; definition for method 3 of type elec-gate +(defmethod inspect elec-gate ((obj elec-gate)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~2Tparams: #~%" (-> obj params)) + (format #t "~2Tpath-l: ~A~%" (-> obj path)) + (format #t "~2Tpath-r: ~A~%" (-> obj path-r)) + (format #t "~2Tl-bolt[5] @ #x~X~%" (-> obj l-bolt)) + (format #t "~2Tpart-on: ~A~%" (-> obj part)) + (format #t "~2Tpart-off: ~A~%" (-> obj part-off)) + (format #t "~2Tpart-spawner-left: ~A~%" (-> obj part-spawner-left)) + (format #t "~2Tpart-spawner-right: ~A~%" (-> obj part-spawner-right)) + (format #t "~2Ton-start: ~A~%" (-> obj on-start)) + (format #t "~2Ton-stop: ~A~%" (-> obj on-stop)) + (format #t "~2Tdividing-wall: #~%" (-> obj dividing-wall)) + (format #t "~2Tplane[2] @ #x~X~%" (-> obj plane)) + (format #t "~2Twall-y: ~f~%" (-> obj wall-y)) + (format #t "~2Twall-xz: ~f~%" (-> obj wall-xz)) + (format #t "~2Tlightning-quality: ~f~%" (-> obj lightning-quality)) + (format #t "~2Tquality-enabled?: ~A~%" (-> obj quality-enabled?)) + (label cfg-4) + obj + ) + +;; definition for symbol *default-elec-gate-params*, type elec-gate-params +(define *default-elec-gate-params* (new 'static 'elec-gate-params + :bolt-spec (new 'static 'lightning-spec + :name #f + :flags (lightning-spec-flags lsf2) + :start-color #x80ffffff + :end-color #x80000000 + :fade-to-color #x58f00bf + :fade-start-factor 0.2 + :fade-time 120.0 + :texture #xc08300 + :reduction 0.42 + :num-points 16 + :box-size 8601.6 + :merge-factor 0.5 + :merge-count 2 + :radius 4096.0 + :duration -1.0 + :sound #f + ) + :ring-spec (new 'static 'lightning-spec + :name #f + :flags (lightning-spec-flags lsf2) + :rand-func #x3 + :start-color #x80ffffff + :end-color #x80ffffff + :fade-to-color #x58f00bf + :fade-start-factor 0.2 + :fade-time 120.0 + :texture #xc08300 + :reduction 0.42 + :num-points 12 + :box-size 3072.0 + :merge-factor 0.5 + :radius 2048.0 + :duration -1.0 + :sound #f + ) + :ring-radius-min 1638.4 + :ring-radius-max 2867.2 + :speed-mult 1.0 + ) + ) + +;; definition for function elec-gate-post +;; INFO: Used lq/sq +(defbehavior elec-gate-post elec-gate () + (local-vars (curr-bolt elec-gate-bolt) (curr-point int)) + (let ((num-points (-> self params ring-spec num-points))) + (dotimes (bolt-idx 5) + (set! curr-bolt (-> self l-bolt bolt-idx)) + (let ((s4-0 + (get-point-at-percent-along-path! (-> self path) (new 'stack-no-clear 'vector) (-> curr-bolt pos) 'interp) + ) + (s3-0 + (get-point-at-percent-along-path! (-> self path-r) (new 'stack-no-clear 'vector) (-> curr-bolt pos) 'interp) + ) + ) + (let ((a0-2 (-> curr-bolt bolt)) + (v1-10 s4-0) + ) + (set! (-> a0-2 state meet data 0 quad) (-> v1-10 quad)) + ) + (let ((a0-5 (-> curr-bolt bolt)) + (v1-13 s3-0) + ) + (set! (-> a0-5 state meet data (+ (-> a0-5 state points-to-draw) -1) quad) (-> v1-13 quad)) + ) + (let ((s2-0 (-> curr-bolt ring 0)) + (s1-0 (-> curr-bolt ring 1)) + (s0-0 (new 'stack-no-clear 'vector)) + ) + (set! (-> s0-0 x) 0.0) + (set! (-> s0-0 y) 0.0) + (set! (-> s0-0 z) (-> curr-bolt ring-radius)) + (set! (-> s0-0 w) 0.0) + (let ((f30-0 (* 65536.0 (/ 1.0 (the float (+ num-points -1)))))) + (set! curr-point 0) + (while (< curr-point num-points) + (set-point! s2-0 curr-point (vector+! (new 'stack-no-clear 'vector) s4-0 s0-0)) + (set-point! s1-0 curr-point (vector+! (new 'stack-no-clear 'vector) s3-0 s0-0)) + (vector-rotate-y! s0-0 s0-0 f30-0) + (set! curr-point (+ curr-point 1)) + ) + ) + ) + ) + ) + ) + (debug-draw (-> self path)) + (debug-draw (-> self path-r)) + (none) + ) + +;; failed to figure out what this is: +(defstate idle (elec-gate) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type + (('trigger) + (go-virtual active) + ) + ) + ) + :enter (behavior () + (process-entity-status! self (entity-perm-status subtask-complete) #t) + (dotimes (bolt-idx 5) + (let* ((bolt (-> self l-bolt bolt-idx bolt)) + (mode (lightning-mode lm0)) + (mode-diff? (!= mode (-> bolt state mode))) + ) + (case mode + (((lightning-mode lm3)) + (if mode-diff? + (set! (-> bolt state counter) 0.0) + ) + ) + (((lightning-mode lm1)) + (set! (-> bolt state start-color) (-> bolt spec start-color)) + (set! (-> bolt state end-color) (-> bolt spec end-color)) + ) + ) + (set! (-> bolt state mode) mode) + (let ((first-ring (-> self l-bolt bolt-idx ring 0))) + (set! mode (lightning-mode lm0)) + (set! mode-diff? (!= mode (-> first-ring state mode))) + (case mode + (((lightning-mode lm3)) + (if mode-diff? + (set! (-> first-ring state counter) 0.0) + ) + ) + (((lightning-mode lm1)) + (set! (-> first-ring state start-color) (-> first-ring spec start-color)) + (set! (-> first-ring state end-color) (-> first-ring spec end-color)) + ) + ) + (set! (-> first-ring state mode) mode) + ) + (let ((second-ring (-> self l-bolt bolt-idx ring 1))) + (set! mode (lightning-mode lm0)) + (set! mode-diff? (!= mode (-> second-ring state mode))) + (case mode + (((lightning-mode lm3)) + (if mode-diff? + (set! (-> second-ring state counter) 0.0) + ) + ) + (((lightning-mode lm1)) + (set! (-> second-ring state start-color) (-> second-ring spec start-color)) + (set! (-> second-ring state end-color) (-> second-ring spec end-color)) + ) + ) + (set! (-> second-ring state mode) mode) + ) + ) + ) + (none) + ) + :code (the-as (function none :behavior elec-gate) sleep-code) + :post (behavior () + (set-elec-scale-if-close! self 0.0) + (if (nonzero? (-> self part-off)) + (spawn-particles self (-> self part-off)) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate active (elec-gate) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type + (('shutdown) + (go-virtual shutdown) + ) + ) + ) + :enter (behavior () + (process-entity-status! self (entity-perm-status subtask-complete) #f) + (if (-> self on-start) + (eval! + (new 'stack 'script-context (the-as basic (process->ppointer self)) self (-> self root trans)) + (the-as pair (-> self on-start)) + ) + ) + (dotimes (bolt-idx 5) + (let* ((curr-bolt (-> self l-bolt bolt-idx bolt)) + (mode (lightning-mode lm1)) + (mode-diff? (!= mode (-> curr-bolt state mode))) + ) + (case mode + (((lightning-mode lm3)) + (if mode-diff? + (set! (-> curr-bolt state counter) 0.0) + ) + ) + (((lightning-mode lm1)) + (set! (-> curr-bolt state start-color) (-> curr-bolt spec start-color)) + (set! (-> curr-bolt state end-color) (-> curr-bolt spec end-color)) + ) + ) + (set! (-> curr-bolt state mode) mode) + (let ((first-ring (-> self l-bolt bolt-idx ring 0))) + (set! mode (lightning-mode lm1)) + (set! mode-diff? (!= mode (-> first-ring state mode))) + (case mode + (((lightning-mode lm3)) + (if mode-diff? + (set! (-> first-ring state counter) 0.0) + ) + ) + (((lightning-mode lm1)) + (set! (-> first-ring state start-color) (-> first-ring spec start-color)) + (set! (-> first-ring state end-color) (-> first-ring spec end-color)) + ) + ) + (set! (-> first-ring state mode) mode) + ) + (let ((second-ring (-> self l-bolt bolt-idx ring 1))) + (set! mode (lightning-mode lm1)) + (set! mode-diff? (!= mode (-> second-ring state mode))) + (case mode + (((lightning-mode lm3)) + (if mode-diff? + (set! (-> second-ring state counter) 0.0) + ) + ) + (((lightning-mode lm1)) + (set! (-> second-ring state start-color) (-> second-ring spec start-color)) + (set! (-> second-ring state end-color) (-> second-ring spec end-color)) + ) + ) + (set! (-> second-ring state mode) mode) + ) + ) + ) + (let ((vec-pair (new 'stack-no-clear 'inline-array 'vector 2))) + (dotimes (vec-idx 2) + (set! (-> vec-pair vec-idx quad) (the-as uint128 0)) + ) + (let ((s5-0 (new 'stack-no-clear 'vector))) + 0.0 + (get-point-in-path! (-> self path) (-> vec-pair 0) 0.0 'interp) + (get-point-in-path! (-> self path-r) (-> vec-pair 1) 0.0 'interp) + (vector-! s5-0 (-> vec-pair 1) (-> vec-pair 0)) + (vector-normalize! s5-0 8192.0) + (vector+! (-> vec-pair 1) (-> vec-pair 1) s5-0) + (vector-negate! s5-0 s5-0) + (vector+! (-> vec-pair 0) (-> vec-pair 0) s5-0) + (vector-normalize-copy! s5-0 *up-vector* -8192.0) + (vector+! (-> vec-pair 0) (-> vec-pair 0) s5-0) + (vector+! (-> vec-pair 1) (-> vec-pair 1) s5-0) + ) + (let ((f0-6 + (+ (- 81920.0 (-> (get-point-in-path! (-> self path) (new 'stack-no-clear 'vector) 0.0 'interp) y)) + (-> (get-point-in-path! (-> self path) (new 'stack-no-clear 'vector) (get-num-segments (-> self path)) 'interp) + y + ) + ) + ) + ) + (blocking-plane-spawn (the-as curve-control #f) vec-pair f0-6) + ) + ) + (none) + ) + :trans (behavior () + (local-vars + (sv-176 (function lightning-spec time-frame symbol process-drawable vector vector none)) + (sv-192 lightning-spec) + (sv-208 int) + (sv-224 symbol) + (sv-240 symbol) + (sv-256 lightning-spec) + (sv-272 int) + (sv-288 symbol) + (sv-304 symbol) + ) + (let* ((target *target*) + (proc-focus (if (type? target process-focusable) + target + ) + ) + ) + (when proc-focus + (let ((focus-trans (get-trans proc-focus 0))) + (let* ((a0-3 (vector-! (new 'stack-no-clear 'vector) focus-trans (the-as vector (-> self dividing-wall)))) + (s4-0 (-> self plane (if (< 0.0 (vector-dot a0-3 (-> self dividing-wall dir))) + 0 + 1 + ) + ) + ) + (s3-1 (vector-! (new 'stack-no-clear 'vector) focus-trans (-> s4-0 pos))) + ) + (when (and (< (vector-dot (vector-normalize-copy! (new 'stack-no-clear 'vector) s3-1 1.0) (-> s4-0 dir)) 0.0) + (let ((v1-13 s3-1)) + (< (sqrtf (+ (* (-> v1-13 x) (-> v1-13 x)) (* (-> v1-13 z) (-> v1-13 z)))) (-> self wall-xz)) + ) + (< (fabs (-> s3-1 y)) (-> self wall-y)) + ) + (let ((evt (new 'stack-no-clear 'event-message-block))) + (set! (-> evt from) (process->ppointer self)) + (set! (-> evt num-params) 2) + (set! (-> evt message) 'attack) + (set! (-> evt param 0) (the-as uint #f)) + (let ((attack (new 'static 'attack-info :mask (attack-info-mask vector shove-back shove-up control id)))) + (let* ((game-info *game-info*) + (attack-id (+ (-> game-info attack-id) 1)) + ) + (set! (-> game-info attack-id) attack-id) + (set! (-> attack id) attack-id) + ) + (set! (-> attack vector quad) (-> s4-0 dir quad)) + (set! (-> attack shove-back) 24576.0) + (set! (-> attack shove-up) 12288.0) + (set! (-> attack control) (if (logtest? (focus-status board) (-> proc-focus focus-status)) + 1.0 + 0.0 + ) + ) + (set! (-> evt param 1) (the-as uint attack)) + ) + (send-event-function proc-focus evt) + ) + (let* ((s4-1 (-> self l-bolt)) + (s3-2 (get-point-at-percent-along-path! (-> self path) (new 'stack-no-clear 'vector) (-> s4-1 0 pos) 'interp)) + (s4-2 + (get-point-at-percent-along-path! (-> self path-r) (new 'stack-no-clear 'vector) (-> s4-1 0 pos) 'interp) + ) + ) + (let ((s2-0 (get-process *default-dead-pool* lightning-tracker #x4000))) + (when s2-0 + (let ((t9-7 (method-of-type lightning-tracker activate))) + (t9-7 + (the-as lightning-tracker s2-0) + *entity-pool* + (symbol->string (-> lightning-tracker symbol)) + (the-as pointer #x70004000) + ) + ) + (let ((s1-0 run-function-in-process) + (s0-0 s2-0) + ) + (set! sv-176 lightning-tracker-init) + (set! sv-192 (-> self params bolt-spec)) + (set! sv-208 15) + (set! sv-224 (the-as symbol #f)) + (set! sv-240 (the-as symbol #f)) + (let ((t3-0 (get-trans proc-focus 3))) + ((the-as (function object object object object object object object object none) s1-0) + s0-0 + sv-176 + sv-192 + sv-208 + sv-224 + sv-240 + s3-2 + t3-0 + ) + ) + ) + (-> s2-0 ppointer) + ) + ) + (let ((s3-3 (get-process *default-dead-pool* lightning-tracker #x4000))) + (when s3-3 + (let ((t9-11 (method-of-type lightning-tracker activate))) + (t9-11 + (the-as lightning-tracker s3-3) + *entity-pool* + (symbol->string (-> lightning-tracker symbol)) + (the-as pointer #x70004000) + ) + ) + (let ((s2-1 run-function-in-process) + (s1-1 s3-3) + (s0-1 lightning-tracker-init) + ) + (set! sv-256 (-> self params bolt-spec)) + (set! sv-272 15) + (set! sv-288 (the-as symbol #f)) + (set! sv-304 (the-as symbol #f)) + (let ((t3-1 (get-trans proc-focus 3))) + ((the-as (function object object object object object object object object none) s2-1) + s1-1 + s0-1 + sv-256 + sv-272 + sv-288 + sv-304 + s4-2 + t3-1 + ) + ) + ) + (-> s3-3 ppointer) + ) + ) + ) + ) + ) + (set! (-> self lightning-quality) + (lerp-scale 0.0 1.0 (vector-vector-distance focus-trans (-> self root trans)) 491520.0 163840.0) + ) + ) + ) + ) + (let ((gp-2 (+ (the int (* 5.0 (-> self lightning-quality))) 1))) + (dotimes (bolt-idx 5) + (let ((s3-5 (-> self l-bolt bolt-idx)) + (s2-2 (-> self params)) + (s4-4 (if (and (-> self quality-enabled?) (zero? (mod bolt-idx gp-2))) + (lightning-mode lm0) + (lightning-mode lm-1) + ) + ) + ) + (seek! (-> s3-5 pos) 1.5 (* (-> s2-2 speed-mult) (+ 0.2 (-> s3-5 pos)) (-> self clock seconds-per-frame))) + (cond + ((>= (-> s3-5 pos) 1.5) + (let ((v1-59 (-> self l-bolt bolt-idx bolt)) + (a0-31 (logand s4-4 (lightning-mode lm1))) + ) + (let ((a1-19 (!= a0-31 (-> v1-59 state mode)))) + (case a0-31 + (((lightning-mode lm3)) + (if a1-19 + (set! (-> v1-59 state counter) 0.0) + ) + ) + (((lightning-mode lm1)) + (set! (-> v1-59 state start-color) (-> v1-59 spec start-color)) + (set! (-> v1-59 state end-color) (-> v1-59 spec end-color)) + ) + ) + ) + (set! (-> v1-59 state mode) a0-31) + ) + (let ((v1-62 (-> self l-bolt bolt-idx ring 0)) + (a0-32 (logand s4-4 (lightning-mode lm1))) + ) + (let ((a1-29 (!= a0-32 (-> v1-62 state mode)))) + (case a0-32 + (((lightning-mode lm3)) + (if a1-29 + (set! (-> v1-62 state counter) 0.0) + ) + ) + (((lightning-mode lm1)) + (set! (-> v1-62 state start-color) (-> v1-62 spec start-color)) + (set! (-> v1-62 state end-color) (-> v1-62 spec end-color)) + ) + ) + ) + (set! (-> v1-62 state mode) a0-32) + ) + (let ((v1-65 (-> self l-bolt bolt-idx ring 1)) + (a0-33 (logand s4-4 (lightning-mode lm1))) + ) + (let ((a1-39 (!= a0-33 (-> v1-65 state mode)))) + (case a0-33 + (((lightning-mode lm3)) + (if a1-39 + (set! (-> v1-65 state counter) 0.0) + ) + ) + (((lightning-mode lm1)) + (set! (-> v1-65 state start-color) (-> v1-65 spec start-color)) + (set! (-> v1-65 state end-color) (-> v1-65 spec end-color)) + ) + ) + ) + (set! (-> v1-65 state mode) a0-33) + ) + (set! (-> s3-5 ring-radius) (rand-vu-float-range (-> s2-2 ring-radius-min) (-> s2-2 ring-radius-max))) + (set! (-> s3-5 pos) 0.0) + ) + ((>= (-> s3-5 pos) 1.0) + (let ((v1-69 (-> self l-bolt bolt-idx bolt)) + (a0-37 (logand (lightning-mode lm0) s4-4)) + ) + (let ((a1-50 (!= a0-37 (-> v1-69 state mode)))) + (case a0-37 + (((lightning-mode lm3)) + (if a1-50 + (set! (-> v1-69 state counter) 0.0) + ) + ) + (((lightning-mode lm1)) + (set! (-> v1-69 state start-color) (-> v1-69 spec start-color)) + (set! (-> v1-69 state end-color) (-> v1-69 spec end-color)) + ) + ) + ) + (set! (-> v1-69 state mode) a0-37) + ) + (let ((v1-72 (-> self l-bolt bolt-idx ring 0)) + (a0-38 (logand (lightning-mode lm0) s4-4)) + ) + (let ((a1-60 (!= a0-38 (-> v1-72 state mode)))) + (case a0-38 + (((lightning-mode lm3)) + (if a1-60 + (set! (-> v1-72 state counter) 0.0) + ) + ) + (((lightning-mode lm1)) + (set! (-> v1-72 state start-color) (-> v1-72 spec start-color)) + (set! (-> v1-72 state end-color) (-> v1-72 spec end-color)) + ) + ) + ) + (set! (-> v1-72 state mode) a0-38) + ) + (let ((v1-75 (-> self l-bolt bolt-idx ring 1)) + (a0-39 (logand (lightning-mode lm0) s4-4)) + ) + (let ((a1-70 (!= a0-39 (-> v1-75 state mode)))) + (case a0-39 + (((lightning-mode lm3)) + (if a1-70 + (set! (-> v1-75 state counter) 0.0) + ) + ) + (((lightning-mode lm1)) + (set! (-> v1-75 state start-color) (-> v1-75 spec start-color)) + (set! (-> v1-75 state end-color) (-> v1-75 spec end-color)) + ) + ) + ) + (set! (-> v1-75 state mode) a0-39) + ) + ) + ) + ) + ) + ) + (none) + ) + :code (the-as (function none :behavior elec-gate) sleep-code) + :post (behavior () + (set-elec-scale-if-close! self 1.0) + (if (nonzero? (-> self part)) + (spawn-particles self (-> self part)) + ) + (update! (-> self sound)) + (elec-gate-post) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate shutdown (elec-gate) + :virtual #t + :enter (behavior () + (process-entity-status! self (entity-perm-status subtask-complete) #t) + (stop! (-> self sound)) + (sound-play "elec-gate-off") + (blocking-plane-destroy) + (if (-> self on-stop) + (eval! + (new 'stack 'script-context (the-as basic (process->ppointer self)) self (-> self root trans)) + (the-as pair (-> self on-stop)) + ) + ) + (none) + ) + :trans (behavior () + (let ((go-idle? #t)) + (dotimes (bolt-idx 5) + (let ((left-bolt-0 (-> self l-bolt bolt-idx))) + (seek! (-> left-bolt-0 pos) 0.0 (* (- 1.14 (-> left-bolt-0 pos)) (-> self clock seconds-per-frame))) + (set! go-idle? + (cond + ((or (< 1.0 (-> left-bolt-0 pos)) (>= 0.0 (-> left-bolt-0 pos))) + (let* ((left-bolt-1 (-> self l-bolt bolt-idx bolt)) + (mode (lightning-mode lm3)) + (mode-diff? (!= mode (-> left-bolt-1 state mode))) + ) + (case mode + (((lightning-mode lm3)) + (if mode-diff? + (set! (-> left-bolt-1 state counter) 0.0) + ) + ) + (((lightning-mode lm1)) + (set! (-> left-bolt-1 state start-color) (-> left-bolt-1 spec start-color)) + (set! (-> left-bolt-1 state end-color) (-> left-bolt-1 spec end-color)) + ) + ) + (set! (-> left-bolt-1 state mode) mode) + (let ((left-bolt-first-ring (-> self l-bolt bolt-idx ring 0))) + (set! mode (lightning-mode lm3)) + (set! mode-diff? (!= mode (-> left-bolt-first-ring state mode))) + (case mode + (((lightning-mode lm3)) + (if mode-diff? + (set! (-> left-bolt-first-ring state counter) 0.0) + ) + ) + (((lightning-mode lm1)) + (set! (-> left-bolt-first-ring state start-color) (-> left-bolt-first-ring spec start-color)) + (set! (-> left-bolt-first-ring state end-color) (-> left-bolt-first-ring spec end-color)) + ) + ) + (set! (-> left-bolt-first-ring state mode) mode) + ) + (let ((left-bolt-second-ring (-> self l-bolt bolt-idx ring 1))) + (set! mode (lightning-mode lm3)) + (set! mode-diff? (!= mode (-> left-bolt-second-ring state mode))) + (case mode + (((lightning-mode lm3)) + (if mode-diff? + (set! (-> left-bolt-second-ring state counter) 0.0) + ) + ) + (((lightning-mode lm1)) + (set! (-> left-bolt-second-ring state start-color) (-> left-bolt-second-ring spec start-color)) + (set! (-> left-bolt-second-ring state end-color) (-> left-bolt-second-ring spec end-color)) + ) + ) + (set! (-> left-bolt-second-ring state mode) mode) + ) + ) + go-idle? + ) + (else + #f + ) + ) + ) + ) + ) + (if go-idle? + (go-virtual idle) + ) + ) + (none) + ) + :code (the-as (function none :behavior elec-gate) sleep-code) + :post (behavior () + (set-elec-scale-if-close! self 0.0) + (if (nonzero? (-> self part-off)) + (spawn-particles self (-> self part-off)) + ) + (elec-gate-post) + (none) + ) + ) + +;; definition for method 28 of type elec-gate +;; WARN: Return type mismatch int vs none. +(defmethod set-elec-scale-if-close! elec-gate ((obj elec-gate) (arg0 float)) + "If [[target]]'s position is within `80` [[meters]], set the scale to the value provided + @see [[elec-gate::29]]" + (if (< (vector-vector-distance (-> obj root trans) (target-pos 0)) 327680.0) + (set-elec-scale! obj arg0) + ) + 0 + (none) + ) + +;; definition for method 27 of type elec-gate +;; WARN: Return type mismatch int vs none. +(defmethod spawn-particles elec-gate ((obj elec-gate) (sparticle-lc sparticle-launch-control)) + "TODO - Calls [[sparticle-launch-control::11]] on `part-spawner-left` and `part-spawner-right` if they are defined" + (if (-> obj part-spawner-left) + (sparticle-launch-control-method-11 sparticle-lc (the-as vector (&-> (-> obj part-spawner-left child) 8))) + ) + (if (-> obj part-spawner-right) + (sparticle-launch-control-method-11 sparticle-lc (the-as vector (&-> (-> obj part-spawner-right child) 8))) + ) + 0 + (none) + ) + +;; definition for method 7 of type elec-gate +;; WARN: Return type mismatch process-drawable vs elec-gate. +(defmethod relocate elec-gate ((obj elec-gate) (new-addr int)) + (dotimes (bolt-idx 5) + (let ((left-bolt (-> obj l-bolt bolt-idx))) + (if (nonzero? (-> left-bolt bolt)) + (&+! (-> left-bolt bolt) new-addr) + ) + (if (nonzero? (-> left-bolt ring 0)) + (&+! (-> left-bolt ring 0) new-addr) + ) + (if (nonzero? (-> left-bolt ring 1)) + (&+! (-> left-bolt ring 1) new-addr) + ) + ) + ) + (if (nonzero? (-> obj path-r)) + (&+! (-> obj path-r) new-addr) + ) + (when (nonzero? (-> obj part-off)) + (if (nonzero? (-> obj part-off)) + (&+! (-> obj part-off) new-addr) + ) + ) + (the-as elec-gate ((method-of-type process-drawable relocate) obj new-addr)) + ) + +;; definition for method 10 of type elec-gate +(defmethod deactivate elec-gate ((obj elec-gate)) + (set-elec-scale-if-close! obj 0.0) + ((the-as (function process-drawable none) (find-parent-method elec-gate 10)) obj) + (none) + ) + +;; definition for method 23 of type elec-gate +(defmethod get-params elec-gate ((obj elec-gate)) + "@returns [[*default-elec-gate-params*]] by default" + *default-elec-gate-params* + ) + +;; definition for method 24 of type elec-gate +;; WARN: Return type mismatch int vs none. +(defmethod elec-gate-method-24 elec-gate ((obj elec-gate)) + "virtual" + 0 + (none) + ) + +;; definition for method 25 of type elec-gate +;; WARN: Return type mismatch int vs none. +(defmethod set-palette! elec-gate ((obj elec-gate)) + "Sets the [[elec-gate]]'s `palette-id` appropriately" + 0 + (none) + ) + +;; definition for method 26 of type elec-gate +;; WARN: Return type mismatch int vs none. +(defmethod set-state! elec-gate ((obj elec-gate)) + "If either [[actor-option::17]] is set on the [[elec-gate]] or the related subtask is completed + make the gate `idle`. + + Otherwise, the gate will be `active`." + (if (or (logtest? (actor-option user17) (-> obj fact options)) + (and (-> obj entity) (logtest? (-> obj entity extra perm status) (entity-perm-status subtask-complete))) + ) + (go (method-of-object obj idle)) + (go (method-of-object obj active)) + ) + 0 + (none) + ) + +;; definition for method 11 of type elec-gate +;; INFO: Used lq/sq +(defmethod init-from-entity! elec-gate ((obj elec-gate) (arg0 entity-actor)) + (set! (-> obj root) (new 'process 'trsqv)) + (process-drawable-from-entity! obj arg0) + (set! (-> obj entity) arg0) + (set! (-> obj fact) + (new 'process 'fact-info obj (pickup-type eco-pill-random) (-> *FACT-bank* default-eco-pill-green-inc)) + ) + (set! (-> obj params) (get-params obj)) + (logclear! (-> obj mask) (process-mask actor-pause)) + (set! (-> obj path) (new 'process 'path-control obj 'pathl 0.0 (the-as entity #f) #f)) + (logior! (-> obj path flags) (path-control-flag display draw-line draw-point draw-text)) + (set! (-> obj path-r) (new 'process 'path-control obj 'pathr 0.0 (the-as entity #f) #f)) + (logior! (-> obj path-r flags) (path-control-flag display draw-line draw-point draw-text)) + (set! (-> obj part-spawner-left) (the-as part-spawner (entity-actor-lookup arg0 'alt-actor 0))) + (set! (-> obj part-spawner-right) (the-as part-spawner (entity-actor-lookup arg0 'alt-actor 1))) + (let ((params (-> obj params))) + (dotimes (bolt-idx 5) + (let ((left-bolt (-> obj l-bolt bolt-idx))) + (set! (-> left-bolt bolt) (new 'process 'lightning-control (-> params bolt-spec) obj 0.0)) + (set! (-> left-bolt ring 0) (new 'process 'lightning-control (-> params ring-spec) obj 0.0)) + (set! (-> left-bolt ring 1) (new 'process 'lightning-control (-> params ring-spec) obj 0.0)) + (set! (-> left-bolt ring-radius) + (rand-vu-float-range (-> params ring-radius-min) (-> params ring-radius-max)) + ) + (set! (-> left-bolt pos) (* 0.2 (the float bolt-idx))) + ) + ) + ) + (let* ((s4-1 (get-point-in-path! (-> obj path) (new 'stack-no-clear 'vector) 0.0 'interp)) + (v1-26 (get-point-in-path! (-> obj path-r) (new 'stack-no-clear 'vector) 0.0 'interp)) + (a1-15 (vector-! (new 'stack-no-clear 'vector) v1-26 s4-1)) + (s5-3 (vector+float*! (new 'stack-no-clear 'vector) s4-1 a1-15 0.5)) + (v1-28 (vector-normalize-copy! (new 'stack-no-clear 'vector) a1-15 1.0)) + ) + (vector-cross! v1-28 v1-28 *up-vector*) + (set! (-> obj dividing-wall pos quad) (-> s5-3 quad)) + (set! (-> obj dividing-wall dir quad) (-> v1-28 quad)) + (vector+float*! (the-as vector (-> obj plane)) s5-3 v1-28 12288.0) + (set! (-> (the-as vector (&-> obj stack 320)) quad) (-> v1-28 quad)) + (vector-float*! v1-28 v1-28 -1.0) + (vector+float*! (the-as vector (&-> obj stack 336)) s5-3 v1-28 12288.0) + (set! (-> (the-as vector (&-> obj stack 352)) quad) (-> v1-28 quad)) + ) + (set! (-> obj wall-xz) + (vector-vector-distance + (get-point-in-path! (-> obj path) (new 'stack-no-clear 'vector) 0.0 'interp) + (get-point-in-path! (-> obj path-r) (new 'stack-no-clear 'vector) 0.0 'interp) + ) + ) + (set! (-> obj wall-xz) (* 0.5 (-> obj wall-xz))) + (set! (-> obj wall-xz) (+ 4096.0 (-> obj wall-xz))) + (set! (-> obj wall-y) + (fabs + (- (-> (get-point-in-path! (-> obj path) (new 'stack-no-clear 'vector) (get-num-segments (-> obj path)) 'interp) + y + ) + (-> (get-point-in-path! (-> obj path) (new 'stack-no-clear 'vector) 0.0 'interp) y) + ) + ) + ) + (set! (-> obj wall-y) (+ 4096.0 (-> obj wall-y))) + (set! (-> obj quality-enabled?) #t) + (set! (-> obj lightning-quality) 1.0) + (set! (-> obj sound) + (new 'process 'ambient-sound (static-sound-spec "electric-gate" :fo-max 70) (-> obj root trans)) + ) + (set! (-> obj on-start) (res-lump-struct (-> obj entity) 'on-start basic)) + (set! (-> obj on-stop) (res-lump-struct (-> obj entity) 'on-stop basic)) + (elec-gate-method-24 obj) + (set-palette! obj) + (set-state! obj) + (none) + ) + +;; definition of type fort-elec-gate +(deftype fort-elec-gate (elec-gate) + ((palette-id int32 :offset-assert 512) + ) + :heap-base #x190 + :method-count-assert 30 + :size-assert #x204 + :flag-assert #x1e01900204 + ) + +;; definition for method 3 of type fort-elec-gate +(defmethod inspect fort-elec-gate ((obj fort-elec-gate)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (let ((t9-0 (method-of-type elec-gate inspect))) + (t9-0 obj) + ) + (format #t "~2Tpalette-id: ~D~%" (-> obj palette-id)) + (label cfg-4) + obj + ) + +;; definition for method 29 of type fort-elec-gate +;; WARN: Return type mismatch int vs none. +(defmethod set-elec-scale! fort-elec-gate ((obj fort-elec-gate) (scale float)) + "Calls associated mood functions to set the scale with the value provided + @see mood-funcs + @see mood-funcs2" + (set-fordumpa-electricity-scale! scale) + (set-forresca-electricity-scale! scale (-> obj palette-id)) + (set-forrescb-electricity-scale! scale (-> obj palette-id)) + 0 + (none) + ) + +;; definition for method 25 of type fort-elec-gate +;; WARN: Return type mismatch int vs none. +(defmethod set-palette! fort-elec-gate ((obj fort-elec-gate)) + "Sets the [[elec-gate]]'s `palette-id` appropriately" + (set! (-> obj palette-id) (res-lump-value (-> obj entity) 'extra-id int :time -1000000000.0)) + 0 + (none) + ) + +;; definition of type drill-elec-gate +(deftype drill-elec-gate (elec-gate) + ((palette-id int32 :offset-assert 512) + ) + :heap-base #x190 + :method-count-assert 30 + :size-assert #x204 + :flag-assert #x1e01900204 + ) + +;; definition for method 3 of type drill-elec-gate +(defmethod inspect drill-elec-gate ((obj drill-elec-gate)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (let ((t9-0 (method-of-type elec-gate inspect))) + (t9-0 obj) + ) + (format #t "~2Tpalette-id: ~D~%" (-> obj palette-id)) + (label cfg-4) + obj + ) + +;; definition for method 29 of type drill-elec-gate +;; WARN: Return type mismatch int vs none. +(defmethod set-elec-scale! drill-elec-gate ((obj drill-elec-gate) (arg0 float)) + "Calls associated mood functions to set the scale with the value provided + @see mood-funcs + @see mood-funcs2" + (set-drill-electricity-scale! arg0 (-> obj palette-id)) + 0 + (none) + ) + +;; definition for method 25 of type drill-elec-gate +;; WARN: Return type mismatch int vs none. +(defmethod set-palette! drill-elec-gate ((obj drill-elec-gate)) + "Sets the [[elec-gate]]'s `palette-id` appropriately" + (set! (-> obj palette-id) (res-lump-value (-> obj entity) 'extra-id int :time -1000000000.0)) + 0 + (none) + ) + +;; definition of type caspad-elec-gate +(deftype caspad-elec-gate (elec-gate) + () + :heap-base #x180 + :method-count-assert 30 + :size-assert #x200 + :flag-assert #x1e01800200 + ) + +;; definition for method 3 of type caspad-elec-gate +(defmethod inspect caspad-elec-gate ((obj caspad-elec-gate)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (let ((t9-0 (method-of-type elec-gate inspect))) + (t9-0 obj) + ) + (label cfg-4) + obj + ) + +;; definition of type castle-elec-gate +(deftype castle-elec-gate (elec-gate) + () + :heap-base #x180 + :method-count-assert 30 + :size-assert #x200 + :flag-assert #x1e01800200 + ) + +;; definition for method 3 of type castle-elec-gate +(defmethod inspect castle-elec-gate ((obj castle-elec-gate)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (let ((t9-0 (method-of-type elec-gate inspect))) + (t9-0 obj) + ) + (label cfg-4) + obj + ) + +;; definition for method 29 of type castle-elec-gate +;; WARN: Return type mismatch int vs none. +(defmethod set-elec-scale! castle-elec-gate ((obj castle-elec-gate) (arg0 float)) + "Calls associated mood functions to set the scale with the value provided + @see mood-funcs + @see mood-funcs2" + (set-castle-electricity-scale! arg0) + 0 + (none) + ) + +;; definition for symbol *caspad-elec-gate-params*, type elec-gate-params +(define *caspad-elec-gate-params* (new 'static 'elec-gate-params + :bolt-spec (new 'static 'lightning-spec + :name #f + :flags (lightning-spec-flags lsf2) + :start-color #x80ffffff + :end-color #x80000000 + :fade-to-color #x58f00bf + :fade-start-factor 0.2 + :fade-time 120.0 + :texture #xc08300 + :reduction 0.42 + :num-points 16 + :box-size 16793.6 + :merge-factor 0.5 + :merge-count 2 + :radius 18841.6 + :duration -1.0 + :sound #f + ) + :ring-spec (new 'static 'lightning-spec + :name #f + :flags (lightning-spec-flags lsf2) + :rand-func #x3 + :start-color #x80ffffff + :end-color #x80ffffff + :fade-to-color #x58f00bf + :fade-start-factor 0.2 + :fade-time 120.0 + :texture #xc08300 + :reduction 0.42 + :num-points 12 + :box-size 17408.0 + :merge-factor 0.5 + :merge-count 2 + :radius 17612.8 + :duration -1.0 + :sound #f + ) + :ring-radius-min 40960.0 + :ring-radius-max 53248.0 + :speed-mult 0.3 + ) + ) + +;; definition for method 23 of type caspad-elec-gate +(defmethod get-params caspad-elec-gate ((obj caspad-elec-gate)) + "@returns [[*default-elec-gate-params*]] by default" + *caspad-elec-gate-params* + ) + +;; definition of type palroof-elec-gate +(deftype palroof-elec-gate (elec-gate) + ((palette-id int32 :offset-assert 512) + ) + :heap-base #x190 + :method-count-assert 30 + :size-assert #x204 + :flag-assert #x1e01900204 + ) + +;; definition for method 3 of type palroof-elec-gate +(defmethod inspect palroof-elec-gate ((obj palroof-elec-gate)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (let ((t9-0 (method-of-type elec-gate inspect))) + (t9-0 obj) + ) + (format #t "~2Tpalette-id: ~D~%" (-> obj palette-id)) + (label cfg-4) + obj + ) + +;; definition for method 29 of type palroof-elec-gate +;; WARN: Return type mismatch int vs none. +(defmethod set-elec-scale! palroof-elec-gate ((obj palroof-elec-gate) (arg0 float)) + "Calls associated mood functions to set the scale with the value provided + @see mood-funcs + @see mood-funcs2" + (set-palroof-electricity-scale! arg0 (-> obj palette-id)) + 0 + (none) + ) + +;; definition for method 25 of type palroof-elec-gate +;; WARN: Return type mismatch int vs none. +(defmethod set-palette! palroof-elec-gate ((obj palroof-elec-gate)) + "Sets the [[elec-gate]]'s `palette-id` appropriately" + (set! (-> obj palette-id) (res-lump-value (-> obj entity) 'extra-id int :time -1000000000.0)) + 0 + (none) + ) diff --git a/test/decompiler/reference/jak2/levels/common/enemy/bouncer_REF.gc b/test/decompiler/reference/jak2/levels/common/enemy/bouncer_REF.gc new file mode 100644 index 0000000000..8621433393 --- /dev/null +++ b/test/decompiler/reference/jak2/levels/common/enemy/bouncer_REF.gc @@ -0,0 +1,277 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type bouncer +(deftype bouncer (process-drawable) + ((spring-height meters :offset-assert 200) + (smush float :offset-assert 204) + (mods basic :offset-assert 208) + ) + :heap-base #x60 + :method-count-assert 25 + :size-assert #xd4 + :flag-assert #x19006000d4 + (:methods + (idle () _type_ :state 20) + (fire () _type_ :state 21) + (smush () _type_ :state 22) + (init-skeleton! (_type_) none 23) + (bouncer-method-24 (_type_) none 24) + ) + ) + +;; definition for method 3 of type bouncer +(defmethod inspect bouncer ((obj bouncer)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~2Tspring-height: (meters ~m)~%" (-> obj spring-height)) + (format #t "~2Tsmush: ~f~%" (-> obj smush)) + (format #t "~2Tmods: ~A~%" (-> obj mods)) + (label cfg-4) + obj + ) + +;; failed to figure out what this is: +(method-set! bouncer 12 (method-of-type process run-logic?)) + +;; failed to figure out what this is: +(let ((a0-3 (new 'static 'skeleton-group + :name "skel-bouncer" + :extra #f + :info #f + :art-group-name "bounceytarp" + :bounds (new 'static 'vector :w 16384.0) + :version #x7 + ) + ) + ) + (set! (-> a0-3 jgeo) 0) + (set! (-> a0-3 janim) 2) + (set! (-> a0-3 mgeo 0) 1) + (set! (-> a0-3 lod-dist 0) 4095996000.0) + (add-to-loading-level a0-3) + ) + +;; failed to figure out what this is: +(defstate idle (bouncer) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((evt-type event-type)) + (the-as + object + (cond + ((= evt-type 'bonk) + (when ((method-of-type touching-shapes-entry touching-shapes-entry-method-12) + (the-as touching-shapes-entry (-> event param 0)) + (the-as collide-shape (-> self root)) + (the-as uint 1) + ) + (when (send-event proc 'jump (-> self spring-height) (-> self spring-height) (-> self mods)) + (sound-play "trampoline") + (go-virtual fire) + ) + ) + ) + ((= evt-type 'touch) + (let ((gp-2 (-> event param 0))) + (cond + (((method-of-type touching-shapes-entry touching-shapes-entry-method-13) + (the-as touching-shapes-entry gp-2) + (the-as collide-shape (-> self root)) + (the-as uint 1) + (the-as uint 0) + ) + (when ((method-of-type touching-shapes-entry touching-shapes-entry-method-12) + (the-as touching-shapes-entry gp-2) + (the-as collide-shape (-> self root)) + (the-as uint 1) + ) + (if (not (and (-> self next-state) (let ((v1-21 (-> self next-state name))) + (or (= v1-21 'smush) (= v1-21 'fire)) + ) + ) + ) + (go-virtual smush) + ) + ) + ) + (((method-of-type touching-shapes-entry touching-shapes-entry-method-12) + (the-as touching-shapes-entry gp-2) + (the-as collide-shape (-> self root)) + (the-as uint 4) + ) + (persist-with-delay + *setting-control* + (the-as symbol (process->ppointer self)) + (seconds 0.05) + 'double-jump + #f + 0.0 + 0 + ) + ) + ) + ) + ) + ((= evt-type 'attack) + (let ((v1-28 (the-as object (-> event param 1))) + (a0-17 (-> event param 0)) + (a2-7 0) + ) + (cond + ((= (-> (the-as attack-info v1-28) mode) 'flop) + (set! a2-7 1) + ) + ((= (-> (the-as attack-info v1-28) mode) 'board) + (set! a2-7 9) + ) + ) + (when (and (nonzero? a2-7) + (and ((method-of-type touching-shapes-entry touching-shapes-entry-method-12) + (the-as touching-shapes-entry a0-17) + (the-as collide-shape (-> self root)) + (the-as uint a2-7) + ) + (send-event proc 'jump (-> self spring-height) (-> self spring-height) (-> self mods)) + ) + ) + (sound-play "trampoline") + (go-virtual fire) + #f + ) + ) + ) + ) + ) + ) + ) + :code (behavior () + (ja :group! (get-art-by-name (-> self draw art-group) "idle" art-joint-anim) :num! min) + (transform-post) + (until #f + (logior! (-> self mask) (process-mask sleep)) + (suspend) + ) + #f + (none) + ) + ) + +;; failed to figure out what this is: +(defstate smush (bouncer) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type + (('touch) + (set! (-> self state-time) (-> self clock frame-counter)) + #f + ) + (else + ((-> (method-of-object self idle) event) proc arg1 event-type event) + ) + ) + ) + :code (behavior () + (set! (-> self state-time) (-> self clock frame-counter)) + (set! (-> self smush) 0.0) + (until #f + (if (>= (- (-> self clock frame-counter) (-> self state-time)) (seconds 0.2)) + (ja :num! (seek! 0.0 0.1)) + (ja :num! (seek! + (lerp-scale + (ja-aframe 6.0 0) + (ja-aframe 2.0 0) + (vector-vector-xz-distance (target-pos 0) (-> self root trans)) + 0.0 + 4096.0 + ) + 0.2 + ) + ) + ) + (suspend) + (if (ja-min? 0) + (go-virtual idle) + ) + ) + #f + (none) + ) + :post (the-as (function none :behavior bouncer) transform-post) + ) + +;; failed to figure out what this is: +(defstate fire (bouncer) + :virtual #t + :code (behavior () + (cpad-set-buzz! (-> *cpad-list* cpads 0) 1 178 (seconds 0.1)) + (ja-no-eval :group! (get-art-by-name (-> self draw art-group) "idle" art-joint-anim) + :num! (seek! + (the float (+ (-> (get-art-by-name (-> self draw art-group) "idle" art-joint-anim) frames num-frames) -1)) + ) + :frame-num (ja-aframe 6.0 0) + ) + (until (ja-done? 0) + (suspend) + (ja :num! (seek!)) + ) + (go-virtual idle) + (none) + ) + :post (the-as (function none :behavior bouncer) transform-post) + ) + +;; definition for method 23 of type bouncer +;; WARN: Return type mismatch int vs none. +(defmethod init-skeleton! bouncer ((obj bouncer)) + (initialize-skeleton + obj + (the-as skeleton-group (art-group-get-by-name *level* "skel-bouncer" (the-as (pointer uint32) #f))) + (the-as pair 0) + ) + 0 + (none) + ) + +;; definition for method 24 of type bouncer +;; WARN: Return type mismatch int vs none. +(defmethod bouncer-method-24 bouncer ((obj bouncer)) + "TODO - collision stuff" + (let ((collision-shape (new 'process 'collide-shape obj (collide-list-enum hit-by-player)))) + (let ((collision-mesh (new 'process 'collide-shape-prim-mesh collision-shape (the-as uint 0) (the-as uint 0)))) + (set! (-> collision-mesh prim-core collide-as) (collide-spec crate)) + (set! (-> collision-mesh prim-core collide-with) (collide-spec jak player-list)) + (set! (-> collision-mesh prim-core action) (collide-action solid)) + (set! (-> collision-mesh transform-index) 0) + (set-vector! (-> collision-mesh local-sphere) 0.0 3072.0 0.0 6963.2) + (set! (-> collision-shape total-prims) (the-as uint 1)) + (set! (-> collision-shape root-prim) collision-mesh) + ) + (set! (-> collision-shape nav-radius) (* 0.75 (-> collision-shape root-prim local-sphere w))) + (let ((prim (-> collision-shape root-prim))) + (set! (-> collision-shape backup-collide-as) (-> prim prim-core collide-as)) + (set! (-> collision-shape backup-collide-with) (-> prim prim-core collide-with)) + ) + (set! (-> obj root) collision-shape) + ) + 0 + (none) + ) + +;; definition for method 11 of type bouncer +;; WARN: Return type mismatch object vs none. +(defmethod init-from-entity! bouncer ((obj bouncer) (arg0 entity-actor)) + (set! (-> obj mods) #f) + (bouncer-method-24 obj) + (process-drawable-from-entity! obj arg0) + (init-skeleton! obj) + (nav-mesh-connect-from-ent (the-as entity-nav-mesh obj)) + (set! (-> obj spring-height) (res-lump-float arg0 'spring-height :default 45056.0)) + (go (method-of-object obj idle)) + (none) + ) diff --git a/test/offline/config/jak2/config.jsonc b/test/offline/config/jak2/config.jsonc index 0a6246cfea..c7d3a562f4 100644 --- a/test/offline/config/jak2/config.jsonc +++ b/test/offline/config/jak2/config.jsonc @@ -77,6 +77,8 @@ "joint-mod-look-at-handler", // bad stack-no-clear decomp "ja-play-spooled-anim", + // sampler - asm function, has to be manually re-written + "timer0-handler", // default menu // - weird array accessing pattern, we never fixed it in jak 1 From 3d4dfb2077a4153a96451d32a9372bbed65c1113 Mon Sep 17 00:00:00 2001 From: water111 <48171810+water111@users.noreply.github.com> Date: Sat, 8 Oct 2022 13:33:03 -0400 Subject: [PATCH 09/10] [decomp] Decompile some time-of-day stuff, support new style Jak 2 time of day (#1943) - Add "tfrag-water" tfrag tree support (may just be the same as Jak 1's 'dirt' for the settings) - Add "tfrag-trans" tfrag tree support, reusing "trans-tfrag" from jak 1. - Add a hack to `LinkedObjectFileCreation` to handle `oracle`, which is accidentally multiply defined as a type leftover from jak 1 (an entity in village1), and level info for jak 2. - Add `VI1.DGO` - add `time-of-day.gc`, and a few other stub functions so it works - Set up some time of day stuff in GOAL for jak 2/PC renderers - Clean up time of day in c++ renderers, support the more complicated weight system used by jak 2 (backward compatible with jak 1, thankfully) The mood functions now run, so this could cause problems if they rely on stuff we don't have yet. But it seems fine for ctysluma and prison for now. ![image](https://user-images.githubusercontent.com/48171810/194719441-d185f59c-19dc-4cd3-a5c4-00b0cfe1d6c3.png) ![image](https://user-images.githubusercontent.com/48171810/194719449-6e051bf3-0750-42e5-a654-901313dbe479.png) ![image](https://user-images.githubusercontent.com/48171810/194719455-3ca6793e-873a-449a-8e85-9c20ffeb4da3.png) ![image](https://user-images.githubusercontent.com/48171810/194719461-8f27af17-4434-4492-96cd-8c5eec6eafdf.png) ![image](https://user-images.githubusercontent.com/48171810/194719468-720715b9-985a-4acf-928c-eab948cfcb03.png) ![image](https://user-images.githubusercontent.com/48171810/194719486-bfb91e83-f6ca-4585-80ad-3b2c0cbbd5af.png) ![image](https://user-images.githubusercontent.com/48171810/194719492-df065d2f-cb5a-47e3-a248-f5317c42082f.png) ![image](https://user-images.githubusercontent.com/48171810/194719507-91e1f477-ecfe-4d6c-b744-5f24646255ca.png) --- common/custom_data/Tfrag3Data.h | 6 +- common/math/Vector.h | 9 + decompiler/IR2/AtomicOpTypeAnalysis.cpp | 1 - decompiler/IR2/Env.cpp | 2 +- decompiler/IR2/FormExpressionAnalysis.cpp | 2 +- .../ObjectFile/LinkedObjectFileCreation.cpp | 6 +- decompiler/config/jak2/all-types.gc | 17 +- decompiler/config/jak2/hacks.jsonc | 3 +- decompiler/config/jak2/inputs.jsonc | 6 +- decompiler/config/jak2/type_casts.jsonc | 9 +- decompiler/config/jak2_ntsc_v1.jsonc | 4 +- decompiler/level_extractor/BspHeader.cpp | 24 + decompiler/level_extractor/BspHeader.h | 15 + decompiler/level_extractor/extract_level.cpp | 9 +- decompiler/level_extractor/extract_tfrag.cpp | 18 +- decompiler/level_extractor/extract_tie.cpp | 7 +- decompiler/level_extractor/extract_tie.h | 3 +- decompiler/types2/ForwardProp.cpp | 2 - decompiler/util/DecompilerTypeSystem.cpp | 2 +- decompiler/util/data_decompile.cpp | 5 +- .../opengl_renderer/OpenGLRenderer.cpp | 3 + .../opengl_renderer/background/Shrub.cpp | 7 +- .../opengl_renderer/background/TFragment.cpp | 19 +- .../opengl_renderer/background/TFragment.h | 2 - .../opengl_renderer/background/Tfrag3.cpp | 4 +- .../opengl_renderer/background/Tie3.cpp | 16 +- .../background/background_common.cpp | 165 ++--- .../background/background_common.h | 9 +- game/graphics/opengl_renderer/buckets.h | 1 + game/kernel/jak2/kscheme.cpp | 6 +- game/mips2c/jak2_functions/debug.cpp | 1 - game/mips2c/jak2_functions/texture.cpp | 1 - goal_src/jak2/dgos/vi1.gd | 21 + goal_src/jak2/engine/common_objs/base-plat.gc | 2 +- goal_src/jak2/engine/draw/drawable.gc | 16 +- goal_src/jak2/engine/game/main.gc | 2 +- .../jak2/engine/gfx/background/background.gc | 18 +- goal_src/jak2/engine/gfx/mood/mood.gc | 60 +- goal_src/jak2/engine/gfx/mood/time-of-day.gc | 692 ++++++++++++++++- goal_src/jak2/engine/gfx/mood/weather-part.gc | 53 ++ goal_src/jak2/engine/gfx/sky/sky-h.gc | 8 +- goal_src/jak2/engine/gfx/sky/sky-tng.gc | 63 ++ .../sprite/particles/sparticle-launcher-h.gc | 3 +- .../sprite/particles/sparticle-launcher.gc | 10 +- .../jak2/engine/gfx/texture/texture-anim-h.gc | 32 +- .../engine/gfx/texture/texture-anim-tables.gc | 10 +- .../jak2/engine/target/board/target-board.gc | 2 +- goal_src/jak2/game.gp | 29 +- goal_src/jak2/kernel/gstate.gc | 4 +- goal_src/jak2/levels/common/elec-gate.gc | 4 +- scripts/decomp_progress.py | 7 +- .../jak2/engine/common_objs/base-plat_REF.gc | 2 +- .../jak2/engine/gfx/mood/time-of-day_REF.gc | 697 ++++++++++++++++++ .../jak2/engine/gfx/sky/sky-h_REF.gc | 4 +- .../particles/sparticle-launcher-h_REF.gc | 2 +- .../particles/sparticle-launcher_REF.gc | 197 ++++- .../engine/gfx/texture/texture-anim-h_REF.gc | 36 +- .../engine/target/board/target-board_REF.gc | 2 +- .../jak2/levels/common/elec-gate_REF.gc | 4 +- test/offline/config/jak2/config.jsonc | 1 + 60 files changed, 2076 insertions(+), 289 deletions(-) create mode 100644 goal_src/jak2/dgos/vi1.gd create mode 100644 test/decompiler/reference/jak2/engine/gfx/mood/time-of-day_REF.gc diff --git a/common/custom_data/Tfrag3Data.h b/common/custom_data/Tfrag3Data.h index 930e0163c7..9243fc3016 100644 --- a/common/custom_data/Tfrag3Data.h +++ b/common/custom_data/Tfrag3Data.h @@ -259,10 +259,10 @@ struct Texture { }; // Tfrag trees have several kinds: -enum class TFragmentTreeKind { NORMAL, TRANS, DIRT, ICE, LOWRES, LOWRES_TRANS, INVALID }; +enum class TFragmentTreeKind { NORMAL, TRANS, DIRT, ICE, LOWRES, LOWRES_TRANS, WATER, INVALID }; -constexpr const char* tfrag_tree_names[] = {"normal", "trans", "dirt", "ice", - "lowres", "lowres-trans", "invalid"}; +constexpr const char* tfrag_tree_names[] = {"normal", "trans", "dirt", "ice", + "lowres", "lowres-trans", "water", "invalid"}; // A tfrag model struct TfragTree { diff --git a/common/math/Vector.h b/common/math/Vector.h index e79c1149ef..01bd3c21b2 100644 --- a/common/math/Vector.h +++ b/common/math/Vector.h @@ -225,6 +225,15 @@ class Vector { return result + "]"; } + std::string to_string_hex_word() const { + std::string result = "["; + for (auto x : m_data) { + result.append(fmt::format("0x{:08x} ", x)); + } + result.pop_back(); + return result + "]"; + } + T* data() { return m_data; } const T* data() const { return m_data; } diff --git a/decompiler/IR2/AtomicOpTypeAnalysis.cpp b/decompiler/IR2/AtomicOpTypeAnalysis.cpp index 01a46fd86a..49e92d6880 100644 --- a/decompiler/IR2/AtomicOpTypeAnalysis.cpp +++ b/decompiler/IR2/AtomicOpTypeAnalysis.cpp @@ -1428,7 +1428,6 @@ TypeState CallOp::propagate_types_internal(const TypeState& input, in_type.last_arg() == TypeSpec("array")) { // array new: auto& a2 = input.get(Register(Reg::GPR, arg_regs[2])); // elt type - auto& a1 = input.get(Register(Reg::GPR, arg_regs[1])); // array auto& a0 = input.get(Register(Reg::GPR, arg_regs[0])); // allocation if (a2.kind == TP_Type::Kind::TYPE_OF_TYPE_NO_VIRTUAL && diff --git a/decompiler/IR2/Env.cpp b/decompiler/IR2/Env.cpp index 08b8c565dc..382c81d12f 100644 --- a/decompiler/IR2/Env.cpp +++ b/decompiler/IR2/Env.cpp @@ -35,7 +35,7 @@ void Env::set_remap_for_function(const Function& func) { } int nargs = func.type.arg_count() - 1; for (int i = 0; i < nargs; i++) { - if (default_arg_names.size() > i) { + if ((int)default_arg_names.size() > i) { m_var_remap[get_reg_name(i)] = default_arg_names.at(i); } else { m_var_remap[get_reg_name(i)] = ("arg" + std::to_string(i)); diff --git a/decompiler/IR2/FormExpressionAnalysis.cpp b/decompiler/IR2/FormExpressionAnalysis.cpp index 49dc5980b1..509d66b571 100644 --- a/decompiler/IR2/FormExpressionAnalysis.cpp +++ b/decompiler/IR2/FormExpressionAnalysis.cpp @@ -1052,7 +1052,7 @@ void SimpleExpressionElement::update_from_stack_add_i(const Env& env, // try to find symbol to string stuff auto arg0_int = get_goal_integer_constant(args.at(0), env); - if (arg0_int && (*arg0_int == SYMBOL_TO_STRING_MEM_OFFSET_DECOMP[env.version]) && + if (arg0_int && ((s64)*arg0_int == SYMBOL_TO_STRING_MEM_OFFSET_DECOMP[env.version]) && allowable_base_type_for_symbol_to_string(arg1_type.typespec())) { result->push_back(pool.alloc_element(args.at(1))); return; diff --git a/decompiler/ObjectFile/LinkedObjectFileCreation.cpp b/decompiler/ObjectFile/LinkedObjectFileCreation.cpp index 3931fd45e2..f7eaad5f95 100644 --- a/decompiler/ObjectFile/LinkedObjectFileCreation.cpp +++ b/decompiler/ObjectFile/LinkedObjectFileCreation.cpp @@ -126,7 +126,11 @@ static uint32_t c_symlink2(LinkedObjectFile& f, word_kind = LinkedWord::EMPTY_PTR; break; case SymbolLinkKind::TYPE: - dts.add_symbol(name, "type", {}); + // hack for jak 2: this symbol is used as a type in village 1 and also the oracle level + // level info. We'll just leave it out, as we don't really need these definitions. + if (std::string(name) != "oracle") { + dts.add_symbol(name, "type", {}); + } word_kind = LinkedWord::TYPE_PTR; break; default: diff --git a/decompiler/config/jak2/all-types.gc b/decompiler/config/jak2/all-types.gc index 0b255a68bb..a25ddc6bee 100644 --- a/decompiler/config/jak2/all-types.gc +++ b/decompiler/config/jak2/all-types.gc @@ -5150,14 +5150,14 @@ (tex basic :offset-assert 12) (tex-name basic :offset-assert 16) (extra vector :inline :offset-assert 32) - (color uint32 :offset-assert 48) + (color rgba :offset-assert 48) (frame-time float :offset-assert 52) (frame-delta float :offset-assert 56) (frame-mod float :offset-assert 60) - (test uint64 :offset-assert 64) - (alpha uint64 :offset-assert 72) - (clamp uint64 :offset-assert 80) - (data uint8 :dynamic :offset-assert 88) + (test gs-test :offset-assert 64) + (alpha gs-alpha :offset-assert 72) + (clamp gs-clamp :offset-assert 80) + (data texture-anim-layer :dynamic :offset-assert 88) ) :method-count-assert 11 :size-assert #x58 @@ -9979,8 +9979,8 @@ (:methods (init-sun-data! "Sets the sun related upload data - the sun, halo and aurora" (_type_ int float float float) none 9) (init-orbit-settings! (_type_ int float float float float float float) none 10) - (sky-work-method-11 () none 11) - (sky-work-method-12 () none 12) + (update-colors-for-time (_type_ float) none 11) + (update-time-and-speed (_type_ float float) none 12) ;; update time-of-day settings (draw (_type_) none 13) (sky-work-method-14 () none 14) (sky-work-method-15 () none 15) @@ -19545,6 +19545,7 @@ (start-dead 2) (launch-asap 3) (bit6 6) + (bit7 7) ) (defenum sp-launch-state-flags @@ -19708,7 +19709,7 @@ (:methods (initialize (_type_ sparticle-launch-group process) none 9) ;; (sparticle-launch-control-method-10 (_type_ vector) symbol 10) ;; (is-visible? (_type_ vector) symbol 10) - (sparticle-launch-control-method-11 (_type_ vector) none 11) ;; TODO - CFG ;; (spawn (_type_ vector) object 11) + (spawn (_type_ vector) none 11) ;; TODO - CFG ;; (spawn (_type_ vector) object 11) (sparticle-launch-control-method-12 (_type_ matrix) none 12) (sparticle-launch-control-method-13 (_type_ cspace) none 13) (kill-and-free-particles (_type_) none 14) diff --git a/decompiler/config/jak2/hacks.jsonc b/decompiler/config/jak2/hacks.jsonc index 2fae9b2c3c..61fce95ecc 100644 --- a/decompiler/config/jak2/hacks.jsonc +++ b/decompiler/config/jak2/hacks.jsonc @@ -333,7 +333,8 @@ 45 // goto 6 ], "(method 27 conveyor)": [5, 14, 22], - "(method 44 nav-graph)": [1, 3, 6, 13, 17] + "(method 44 nav-graph)": [1, 3, 6, 13, 17], + "(method 11 sparticle-launch-control)": [18, 24, 25, 28, 29, 32, 33, 34, 36, 41, 55, 58, 93, 95] }, // Sometimes the game might use format strings that are fetched dynamically, diff --git a/decompiler/config/jak2/inputs.jsonc b/decompiler/config/jak2/inputs.jsonc index 7bb4c35e26..d23d3bae87 100644 --- a/decompiler/config/jak2/inputs.jsonc +++ b/decompiler/config/jak2/inputs.jsonc @@ -154,13 +154,13 @@ // "DGO/LSACK.DGO", // "DGO/CTYASHA.DGO", // "DGO/LPRTRACE.DGO", - "DGO/LWIDEA.DGO" + "DGO/LWIDEA.DGO", // "DGO/HIPHOG.DGO", // "DGO/LSMYSBRT.DGO", // "DGO/LRACEBB.DGO", // "DGO/CASCITY.DGO", // "DGO/LYSAMSAM.DGO" //, - // "DGO/VI1.DGO" + "DGO/VI1.DGO" ], // some objects are part of STR files (streaming data). @@ -184,5 +184,5 @@ "streamed_audio_file_names": [], - "levels_to_extract": ["PRI.DGO", "CTA.DGO", "CWI.DGO", "LWIDEA.DGO"] + "levels_to_extract": ["PRI.DGO", "CTA.DGO", "CWI.DGO", "LWIDEA.DGO", "VI1.DGO"] } diff --git a/decompiler/config/jak2/type_casts.jsonc b/decompiler/config/jak2/type_casts.jsonc index 89de75f00d..aed6a3b71e 100644 --- a/decompiler/config/jak2/type_casts.jsonc +++ b/decompiler/config/jak2/type_casts.jsonc @@ -964,7 +964,7 @@ [5, "s5", "glst-named-node"], [6, "v1", "glst-named-node"] ], - "(event time-of-day-tick)": [[10, "v1", "float"]], + "(event time-of-day-tick)": [[10, "v1", "float"], [148, "v1", "float"]], "cam-slave-get-vector-with-offset": [[[52, 61], "s3", "vector"]], "cam-slave-get-interp-time": [[43, "f0", "float"]], "cam-standard-event-handler": [ @@ -2774,7 +2774,12 @@ [[171, 193], "s2", "(pointer uint8)"], [227, "v1", "(pointer uint8)"] ], - "unpack-comp-huf": [[[21, 23], "t3", "(pointer uint16)"]], + "set-fog-height!": [ + [2, "v1", "(array texture-anim)"] + ], + "unpack-comp-huf": [ + [[21,23], "t3", "(pointer uint16)"] + ], "(method 10 elec-gate)": [[13, "t9", "(function process-drawable none)"]], "(method 11 elec-gate)": [ [180, "a0", "vector"], diff --git a/decompiler/config/jak2_ntsc_v1.jsonc b/decompiler/config/jak2_ntsc_v1.jsonc index 4caca241f7..711a924837 100644 --- a/decompiler/config/jak2_ntsc_v1.jsonc +++ b/decompiler/config/jak2_ntsc_v1.jsonc @@ -7,8 +7,8 @@ // if you want to filter to only some object names. // it will make the decompiler much faster. - "allowed_objects": ["region"], - "banned_objects": ["effect-control", "time-of-day", "target-util", "ctywide-scenes"], + "allowed_objects": ["mood"], + "banned_objects": ["effect-control", "target-util", "ctywide-scenes"], //////////////////////////// // CODE ANALYSIS OPTIONS diff --git a/decompiler/level_extractor/BspHeader.cpp b/decompiler/level_extractor/BspHeader.cpp index d3063b7276..7088bf1e8d 100644 --- a/decompiler/level_extractor/BspHeader.cpp +++ b/decompiler/level_extractor/BspHeader.cpp @@ -781,6 +781,18 @@ std::unique_ptr make_drawable_inline_array( return result; } + if (ref.type->get_name() == "drawable-inline-array-tfrag-trans") { + auto result = std::make_unique(); + result->read_from_file(ref, dts, stats, version); + return result; + } + + if (ref.type->get_name() == "drawable-inline-array-tfrag-water") { + auto result = std::make_unique(); + result->read_from_file(ref, dts, stats, version); + return result; + } + if (ref.type->get_name() == "drawable-inline-array-instance-tie") { auto result = std::make_unique(); result->read_from_file(ref, dts, stats, version); @@ -1773,6 +1785,18 @@ std::unique_ptr make_drawable_tree(TypedRef ref, return tree; } + if (ref.type->get_name() == "drawable-tree-tfrag-trans") { + auto tree = std::make_unique(); + tree->read_from_file(ref, dts, stats, version); + return tree; + } + + if (ref.type->get_name() == "drawable-tree-tfrag-water") { + auto tree = std::make_unique(); + tree->read_from_file(ref, dts, stats, version); + return tree; + } + if (ref.type->get_name() == "drawable-tree-actor") { auto tree = std::make_unique(); tree->read_from_file(ref, dts, stats, version); diff --git a/decompiler/level_extractor/BspHeader.h b/decompiler/level_extractor/BspHeader.h index 625f1884f4..c0a0d5e734 100644 --- a/decompiler/level_extractor/BspHeader.h +++ b/decompiler/level_extractor/BspHeader.h @@ -363,6 +363,21 @@ struct DrawableInlineArrayTransTFrag : public DrawableInlineArrayTFrag { std::string my_type() const override { return "drawable-inline-array-trans-tfrag"; } }; +struct DrawableInlineArrayTFragTrans : public DrawableInlineArrayTFrag { + std::string my_type() const override { return "drawable-inline-array-tfrag-trans"; } +}; + +struct DrawableInlineArrayTFragWater : public DrawableInlineArrayTFrag { + std::string my_type() const override { return "drawable-inline-array-tfrag-water"; } +}; + +struct DrawableTreeTfragTrans : public DrawableTreeTfrag { + std::string my_type() const override { return "drawable-tree-tfrag-trans"; } +}; + +struct DrawableTreeTfragWater : public DrawableTreeTfrag { + std::string my_type() const override { return "drawable-tree-tfrag-water"; } +}; ///////////////////// // TIE ///////////////////// diff --git a/decompiler/level_extractor/extract_level.cpp b/decompiler/level_extractor/extract_level.cpp index aa6e857c88..6417af89e9 100644 --- a/decompiler/level_extractor/extract_level.cpp +++ b/decompiler/level_extractor/extract_level.cpp @@ -145,8 +145,9 @@ std::vector extract_bsp_from_level(const ObjectFileDB */ const std::set tfrag_trees = { - "drawable-tree-tfrag", "drawable-tree-trans-tfrag", "drawable-tree-dirt-tfrag", - "drawable-tree-ice-tfrag", "drawable-tree-lowres-tfrag", "drawable-tree-lowres-trans-tfrag"}; + "drawable-tree-tfrag", "drawable-tree-trans-tfrag", "drawable-tree-tfrag-trans", + "drawable-tree-dirt-tfrag", "drawable-tree-tfrag-water", "drawable-tree-ice-tfrag", + "drawable-tree-lowres-tfrag", "drawable-tree-lowres-trans-tfrag"}; int i = 0; std::vector all_ties; @@ -174,7 +175,7 @@ std::vector extract_bsp_from_level(const ObjectFileDB auto as_tie_tree = dynamic_cast(draw_tree.get()); ASSERT(as_tie_tree); extract_tie(as_tie_tree, fmt::format("{}-{}-tie", dgo_name, i++), - bsp_header.texture_remap_table, tex_db, level_data, false); + bsp_header.texture_remap_table, tex_db, level_data, false, db.version()); } else if (draw_tree->my_type() == "drawable-tree-instance-shrub") { auto as_shrub_tree = dynamic_cast(draw_tree.get()); @@ -190,7 +191,7 @@ std::vector extract_bsp_from_level(const ObjectFileDB extract_collide_frags(as_collide_frags, all_ties, fmt::format("{}-{}-collide", dgo_name, i++), level_data, false); } else { - // lg::print(" unsupported tree {}\n", draw_tree->my_type()); + lg::print(" unsupported tree {}\n", draw_tree->my_type()); } } level_data.level_name = level_name; diff --git a/decompiler/level_extractor/extract_tfrag.cpp b/decompiler/level_extractor/extract_tfrag.cpp index 1f3d3475eb..1a45c30188 100644 --- a/decompiler/level_extractor/extract_tfrag.cpp +++ b/decompiler/level_extractor/extract_tfrag.cpp @@ -1875,6 +1875,16 @@ void process_draw_mode(std::vector& all_draws, mode.set_depth_test(GsTest::ZTest::GEQUAL); // :ztst (gs-ztest greater-equal) mode.enable_ab(); break; + case tfrag3::TFragmentTreeKind::WATER: + // (new 'static 'gs-test :ate #x1 :afail #x1 :zte #x1 :ztst (gs-ztest greater-equal)) + mode.enable_at(); + mode.set_alpha_test(DrawMode::AlphaTest::NEVER); + mode.set_alpha_fail(GsTest::AlphaFail::FB_ONLY); + mode.set_aref(0); + mode.enable_zt(); + mode.set_depth_test(GsTest::ZTest::GEQUAL); + mode.enable_ab(); + break; default: ASSERT(false); } @@ -1889,7 +1899,7 @@ void process_draw_mode(std::vector& all_draws, update_mode_from_test1(val, mode); break; case GsRegisterAddress::TEX0_1: - ASSERT(val == 0); + // ASSERT(val == 0); HACK jak 2 sets this. break; case GsRegisterAddress::TEX1_1: ASSERT(val == 0x120); // some flag @@ -1914,8 +1924,6 @@ void process_draw_mode(std::vector& all_draws, ASSERT_MSG(false, fmt::format("clamp: 0x{:x}", val)); } - // this isn't quite right, but I'm hoping it's enough! - // mode.set_clamp_enable(val == 0b101); mode.set_clamp_s_enable(val & 0b1); mode.set_clamp_t_enable(val & 0b100); break; @@ -2161,6 +2169,10 @@ void extract_tfrag(const level_tools::DrawableTreeTfrag* tree, this_tree.kind = tfrag3::TFragmentTreeKind::LOWRES; } else if (tree->my_type() == "drawable-tree-trans-tfrag") { this_tree.kind = tfrag3::TFragmentTreeKind::TRANS; + } else if (tree->my_type() == "drawable-tree-tfrag-trans") { + this_tree.kind = tfrag3::TFragmentTreeKind::TRANS; + } else if (tree->my_type() == "drawable-tree-tfrag-water") { + this_tree.kind = tfrag3::TFragmentTreeKind::WATER; } else { ASSERT_MSG(false, fmt::format("unknown tfrag tree kind: {}", tree->my_type())); } diff --git a/decompiler/level_extractor/extract_tie.cpp b/decompiler/level_extractor/extract_tie.cpp index e82796c448..a80d551698 100644 --- a/decompiler/level_extractor/extract_tie.cpp +++ b/decompiler/level_extractor/extract_tie.cpp @@ -2295,7 +2295,8 @@ void extract_tie(const level_tools::DrawableTreeInstanceTie* tree, const std::vector& tex_map, const TextureDB& tex_db, tfrag3::Level& out, - bool dump_level) { + bool dump_level, + GameVersion version) { for (int geo = 0; geo < GEOM_MAX; ++geo) { tfrag3::TieTree this_tree; @@ -2336,7 +2337,9 @@ void extract_tie(const level_tools::DrawableTreeInstanceTie* tree, auto info = collect_instance_info(as_instance_array, &tree->prototypes.prototype_array_tie.data, geo); update_proto_info(&info, tex_map, tex_db, tree->prototypes.prototype_array_tie.data, geo); - check_wind_vectors_zero(info, tree->prototypes.wind_vectors); + if (version != GameVersion::Jak2) { + check_wind_vectors_zero(info, tree->prototypes.wind_vectors); + } // determine draws from VU program emulate_tie_prototype_program(info); emulate_tie_instance_program(info); diff --git a/decompiler/level_extractor/extract_tie.h b/decompiler/level_extractor/extract_tie.h index 6429a775ee..c64101f57a 100644 --- a/decompiler/level_extractor/extract_tie.h +++ b/decompiler/level_extractor/extract_tie.h @@ -14,5 +14,6 @@ void extract_tie(const level_tools::DrawableTreeInstanceTie* tree, const std::vector& tex_map, const TextureDB& tex_db, tfrag3::Level& out, - bool dump_level); + bool dump_level, + GameVersion version); } diff --git a/decompiler/types2/ForwardProp.cpp b/decompiler/types2/ForwardProp.cpp index be3ef66811..b266127423 100644 --- a/decompiler/types2/ForwardProp.cpp +++ b/decompiler/types2/ForwardProp.cpp @@ -287,7 +287,6 @@ bool backprop_tagged_type(const TP_Type& expected_type, actual_type.tag.unknown_label->selected_type == expected_type.typespec()) { return false; // no need to update } else { - auto& tag = actual_type.tag.unknown_label; actual_type.tag.unknown_label->selected_type = expected_type.typespec(); return true; } @@ -297,7 +296,6 @@ bool backprop_tagged_type(const TP_Type& expected_type, actual_type.tag.unknown_stack_structure->selected_type == expected_type.typespec()) { return false; // no need to update } else { - auto& tag = actual_type.tag.unknown_stack_structure; actual_type.tag.unknown_stack_structure->selected_type = expected_type.typespec(); return true; } diff --git a/decompiler/util/DecompilerTypeSystem.cpp b/decompiler/util/DecompilerTypeSystem.cpp index 04753bc512..ec30a41799 100644 --- a/decompiler/util/DecompilerTypeSystem.cpp +++ b/decompiler/util/DecompilerTypeSystem.cpp @@ -434,7 +434,7 @@ int DecompilerTypeSystem::get_format_arg_count(const std::string& str) const { bool code_takes_no_arg = false; for (auto& ignored_code : code_ignore_list) { - int j = i; + size_t j = i; bool match = true; for (const char c : ignored_code) { if (j > str.length()) { diff --git a/decompiler/util/data_decompile.cpp b/decompiler/util/data_decompile.cpp index 09c00dfe73..938d523eea 100644 --- a/decompiler/util/data_decompile.cpp +++ b/decompiler/util/data_decompile.cpp @@ -1427,7 +1427,7 @@ goos::Object decompile_boxed_array(const DecompilerLabel& label, if (type_ptr.kind() != LinkedWord::TYPE_PTR) { throw std::runtime_error("Invalid basic in decompile_boxed_array"); } - if (type_ptr.symbol_name() == "array") { + if (type_ptr.symbol_name() == "array" || type_ptr.symbol_name() == "texture-anim-array") { auto content_type_ptr_word_idx = type_ptr_word_idx + 3; auto& content_type_ptr = words.at(label.target_segment).at(content_type_ptr_word_idx); if (content_type_ptr.kind() != LinkedWord::TYPE_PTR) { @@ -1435,7 +1435,8 @@ goos::Object decompile_boxed_array(const DecompilerLabel& label, } content_type = TypeSpec(content_type_ptr.symbol_name()); } else { - throw std::runtime_error("Wrong basic type in decompile_boxed_array"); + throw std::runtime_error( + fmt::format("Wrong basic type in decompile_boxed_array: got {}", type_ptr.symbol_name())); } } else { throw std::runtime_error("Invalid alignment in decompile_boxed_array"); diff --git a/game/graphics/opengl_renderer/OpenGLRenderer.cpp b/game/graphics/opengl_renderer/OpenGLRenderer.cpp index 352c24091f..b672a7cbd4 100644 --- a/game/graphics/opengl_renderer/OpenGLRenderer.cpp +++ b/game/graphics/opengl_renderer/OpenGLRenderer.cpp @@ -100,6 +100,9 @@ void OpenGLRenderer::init_bucket_renderers_jak2() { init_bucket_renderer("tfrag-t-l0-alpha", BucketCategory::TFRAG, BucketId::TFRAG_T_L0_ALPHA, std::vector{tfrag3::TFragmentTreeKind::TRANS}, false, 0); + init_bucket_renderer("tfrag-w-l0-alpha", BucketCategory::TFRAG, + BucketId::TFRAG_W_L0_WATER, + std::vector{tfrag3::TFragmentTreeKind::WATER}, false, 0); init_bucket_renderer("debug-no-zbuf1", BucketCategory::OTHER, BucketId::DEBUG_NO_ZBUF1, 0x8000); init_bucket_renderer("debug2", BucketCategory::OTHER, BucketId::DEBUG2, 0x8000); diff --git a/game/graphics/opengl_renderer/background/Shrub.cpp b/game/graphics/opengl_renderer/background/Shrub.cpp index 0a356ff003..501698a623 100644 --- a/game/graphics/opengl_renderer/background/Shrub.cpp +++ b/game/graphics/opengl_renderer/background/Shrub.cpp @@ -52,9 +52,8 @@ void Shrub::render(DmaFollower& dma, SharedRenderState* render_state, ScopedProf memcpy(settings.math_camera.data(), m_pc_port_data.camera[0].data(), 64); settings.tree_idx = 0; - for (int i = 0; i < 8; i++) { - settings.time_of_day_weights[i] = - 2 * (0xff & m_pc_port_data.itimes[i / 2].data()[2 * (i % 2)]) / 127.f; + for (int i = 0; i < 4; i++) { + settings.itimes[i] = m_pc_port_data.itimes[i]; } update_render_state_from_pc_settings(render_state, m_pc_port_data); @@ -229,7 +228,7 @@ void Shrub::render_tree(int idx, } Timer interp_timer; - interp_time_of_day_fast(settings.time_of_day_weights, tree.tod_cache, m_color_result.data()); + interp_time_of_day_fast(settings.itimes, tree.tod_cache, m_color_result.data()); tree.perf.tod_time.add(interp_timer.getSeconds()); Timer setup_timer; diff --git a/game/graphics/opengl_renderer/background/TFragment.cpp b/game/graphics/opengl_renderer/background/TFragment.cpp index 1e08ba7496..60f578706f 100644 --- a/game/graphics/opengl_renderer/background/TFragment.cpp +++ b/game/graphics/opengl_renderer/background/TFragment.cpp @@ -128,17 +128,7 @@ void TFragment::render(DmaFollower& dma, for (int i = 0; i < 4; i++) { settings.planes[i] = m_pc_port_data.planes[i]; - } - - if (m_override_time_of_day) { - for (int i = 0; i < 8; i++) { - settings.time_of_day_weights[i] = m_time_of_days[i]; - } - } else { - for (int i = 0; i < 8; i++) { - settings.time_of_day_weights[i] = - 2 * (0xff & m_pc_port_data.itimes[i / 2].data()[2 * (i % 2)]) / 127.f; - } + settings.itimes[i] = m_pc_port_data.itimes[i]; } auto t3prof = prof.make_scoped_child("t3"); @@ -152,13 +142,6 @@ void TFragment::render(DmaFollower& dma, } void TFragment::draw_debug_window() { - ImGui::Checkbox("Manual Time of Day", &m_override_time_of_day); - if (m_override_time_of_day) { - for (int i = 0; i < 8; i++) { - ImGui::SliderFloat(fmt::format("{}", i).c_str(), m_time_of_days + i, 0.f, 1.f); - } - } - m_tfrag3.draw_debug_window(); } diff --git a/game/graphics/opengl_renderer/background/TFragment.h b/game/graphics/opengl_renderer/background/TFragment.h index ea48b0f63e..17adf3a8b2 100644 --- a/game/graphics/opengl_renderer/background/TFragment.h +++ b/game/graphics/opengl_renderer/background/TFragment.h @@ -48,8 +48,6 @@ class TFragment : public BucketRenderer { void handle_initialization(DmaFollower& dma); bool m_child_mode = false; - bool m_override_time_of_day = false; - float m_time_of_days[8] = {1, 0, 0, 0, 0, 0, 0, 0}; // GS setup data u8 m_test_setup[32]; diff --git a/game/graphics/opengl_renderer/background/Tfrag3.cpp b/game/graphics/opengl_renderer/background/Tfrag3.cpp index cf88268e98..fd679ecfb9 100644 --- a/game/graphics/opengl_renderer/background/Tfrag3.cpp +++ b/game/graphics/opengl_renderer/background/Tfrag3.cpp @@ -183,9 +183,9 @@ void Tfrag3::render_tree(int geom, m_color_result.resize(tree.colors->size()); } if (m_use_fast_time_of_day) { - interp_time_of_day_fast(settings.time_of_day_weights, tree.tod_cache, m_color_result.data()); + interp_time_of_day_fast(settings.itimes, tree.tod_cache, m_color_result.data()); } else { - interp_time_of_day_slow(settings.time_of_day_weights, *tree.colors, m_color_result.data()); + interp_time_of_day_slow(settings.itimes, *tree.colors, m_color_result.data()); } glActiveTexture(GL_TEXTURE10); glBindTexture(GL_TEXTURE_1D, tree.time_of_day_texture); diff --git a/game/graphics/opengl_renderer/background/Tie3.cpp b/game/graphics/opengl_renderer/background/Tie3.cpp index 985c997dc4..e8a8b10446 100644 --- a/game/graphics/opengl_renderer/background/Tie3.cpp +++ b/game/graphics/opengl_renderer/background/Tie3.cpp @@ -383,17 +383,7 @@ void Tie3::render(DmaFollower& dma, SharedRenderState* render_state, ScopedProfi for (int i = 0; i < 4; i++) { settings.planes[i] = m_pc_port_data.planes[i]; - } - - if (false) { - // for (int i = 0; i < 8; i++) { - // settings.time_of_day_weights[i] = m_time_of_days[i]; - // } - } else { - for (int i = 0; i < 8; i++) { - settings.time_of_day_weights[i] = - 2 * (0xff & m_pc_port_data.itimes[i / 2].data()[2 * (i % 2)]) / 127.f; - } + settings.itimes[i] = m_pc_port_data.itimes[i]; } if (!m_override_level) { @@ -552,9 +542,9 @@ void Tie3::render_tree(int idx, Timer interp_timer; if (m_use_fast_time_of_day) { - interp_time_of_day_fast(settings.time_of_day_weights, tree.tod_cache, m_color_result.data()); + interp_time_of_day_fast(settings.itimes, tree.tod_cache, m_color_result.data()); } else { - interp_time_of_day_slow(settings.time_of_day_weights, *tree.colors, m_color_result.data()); + interp_time_of_day_slow(settings.itimes, *tree.colors, m_color_result.data()); } tree.perf.tod_time.add(interp_timer.getSeconds()); diff --git a/game/graphics/opengl_renderer/background/background_common.cpp b/game/graphics/opengl_renderer/background/background_common.cpp index 168badf275..2fe62be6e8 100644 --- a/game/graphics/opengl_renderer/background/background_common.cpp +++ b/game/graphics/opengl_renderer/background/background_common.cpp @@ -165,14 +165,32 @@ void first_tfrag_draw_setup(const TfragRenderSettings& settings, render_state->fog_intensity / 255); } -void interp_time_of_day_slow(const float weights[8], +void interp_time_of_day_slow(const math::Vector itimes[4], const std::vector& in, math::Vector* out) { // Timer interp_timer; + math::Vector4f weights[8]; + for (int component = 0; component < 8; component++) { + int quad_idx = component / 2; + int word_off = (component % 2 * 2); + for (int channel = 0; channel < 4; channel++) { + int word = word_off + (channel / 2); + int hw_off = channel % 2; + + u32 word_val = itimes[quad_idx][word]; + u32 hw_val = hw_off ? (word_val >> 16) : word_val; + hw_val = hw_val & 0xff; + weights[component][channel] = hw_val / 64.f; + } + } + for (size_t color = 0; color < in.size(); color++) { math::Vector4f result = math::Vector4f::zero(); for (int component = 0; component < 8; component++) { - result += in[color].rgba[component].cast() * weights[component]; + for (int channel = 0; channel < 4; channel++) { + result[channel] += in[color].rgba[component][channel] * weights[component][channel]; + } + // result += in[color].rgba[component].cast() * weights[component]; } result[0] = std::min(result[0], 255.f); result[1] = std::min(result[1], 255.f); @@ -229,127 +247,52 @@ SwizzledTimeOfDay swizzle_time_of_day(const std::vector& return out; } -// This does the same thing as interp_time_of_day_slow, but is faster. -// Due to using integers instead of floats, it may be a tiny bit different. -// TODO: it might be possible to reorder the loop into two blocks of loads and avoid spilling xmms. -// It's ~8x faster than the slow version. - -void interp_time_of_day_fast_avx2(const float weights[8], - const SwizzledTimeOfDay& in, - math::Vector* out) { - // even though the colors are 8 bits, we'll use 16 bits so we can saturate correctly -#ifdef __AVX2__ - // weight multipliers - __m256i weights0 = _mm256_set1_epi16(weights[0] * 64.f); - __m256i weights1 = _mm256_set1_epi16(weights[1] * 64.f); - __m256i weights2 = _mm256_set1_epi16(weights[2] * 64.f); - __m256i weights3 = _mm256_set1_epi16(weights[3] * 64.f); - __m256i weights4 = _mm256_set1_epi16(weights[4] * 64.f); - __m256i weights5 = _mm256_set1_epi16(weights[5] * 64.f); - __m256i weights6 = _mm256_set1_epi16(weights[6] * 64.f); - __m256i weights7 = _mm256_set1_epi16(weights[7] * 64.f); - - // saturation: note that alpha is saturated to 128 but the rest are 255. - // TODO: maybe we should saturate to 255 for everybody (can do this using a single packus) and - // change the shader to deal with this. - __m256i sat = _mm256_set_epi16(128, 255, 255, 255, 128, 255, 255, 255, 128, 255, 255, 255, 128, - 255, 255, 255); - - for (u32 color_quad = 0; color_quad < in.color_count / 4; color_quad++) { - // first, load colors. We put 16 bytes / register and don't touch the upper half because we - // convert u8s to u16s. - const u8* base = in.data.data() + color_quad * 128; - __m128i color0_p = _mm_loadu_si128((const __m128i*)(base + 0)); - __m128i color1_p = _mm_loadu_si128((const __m128i*)(base + 16)); - __m128i color2_p = _mm_loadu_si128((const __m128i*)(base + 32)); - __m128i color3_p = _mm_loadu_si128((const __m128i*)(base + 48)); - __m128i color4_p = _mm_loadu_si128((const __m128i*)(base + 64)); - __m128i color5_p = _mm_loadu_si128((const __m128i*)(base + 80)); - __m128i color6_p = _mm_loadu_si128((const __m128i*)(base + 96)); - __m128i color7_p = _mm_loadu_si128((const __m128i*)(base + 112)); - - // unpack to 16-bits. each has 16x 16 bit colors. - __m256i color0 = _mm256_cvtepu8_epi16(color0_p); - __m256i color1 = _mm256_cvtepu8_epi16(color1_p); - __m256i color2 = _mm256_cvtepu8_epi16(color2_p); - __m256i color3 = _mm256_cvtepu8_epi16(color3_p); - __m256i color4 = _mm256_cvtepu8_epi16(color4_p); - __m256i color5 = _mm256_cvtepu8_epi16(color5_p); - __m256i color6 = _mm256_cvtepu8_epi16(color6_p); - __m256i color7 = _mm256_cvtepu8_epi16(color7_p); - - // multiply by weights - color0 = _mm256_mullo_epi16(color0, weights0); - color1 = _mm256_mullo_epi16(color1, weights1); - color2 = _mm256_mullo_epi16(color2, weights2); - color3 = _mm256_mullo_epi16(color3, weights3); - color4 = _mm256_mullo_epi16(color4, weights4); - color5 = _mm256_mullo_epi16(color5, weights5); - color6 = _mm256_mullo_epi16(color6, weights6); - color7 = _mm256_mullo_epi16(color7, weights7); - - // add. This order minimizes dependencies. - color0 = _mm256_add_epi16(color0, color1); - color2 = _mm256_add_epi16(color2, color3); - color4 = _mm256_add_epi16(color4, color5); - color6 = _mm256_add_epi16(color6, color7); - - color0 = _mm256_add_epi16(color0, color2); - color4 = _mm256_add_epi16(color4, color6); - - color0 = _mm256_add_epi16(color0, color4); - - // divide, because we multiplied our weights by 2^7. - color0 = _mm256_srli_epi16(color0, 6); - - // saturate - color0 = _mm256_min_epu16(sat, color0); - - // back to u8s. - auto hi = _mm256_extracti128_si256(color0, 1); - auto result = _mm_packus_epi16(_mm256_castsi256_si128(color0), hi); - - // store result - _mm_storeu_si128((__m128i*)(&out[color_quad * 4]), result); - } -#else - // unreachable. - (void)weights; - (void)in; - (void)out; - ASSERT(false); -#endif -} - -void interp_time_of_day_fast(const float weights[8], - const SwizzledTimeOfDay& in, +void interp_time_of_day_fast(const math::Vector itimes[4], + const SwizzledTimeOfDay& swizzled_colors, math::Vector* out) { - // even though the colors are 8 bits, we'll use 16 bits so we can saturate correctly - if (get_cpu_info().has_avx2) { - interp_time_of_day_fast_avx2(weights, in, out); - return; + math::Vector weights[8]; + for (int component = 0; component < 8; component++) { + int quad_idx = component / 2; + int word_off = (component % 2 * 2); + for (int channel = 0; channel < 4; channel++) { + int word = word_off + (channel / 2); + int hw_off = channel % 2; + + u32 word_val = itimes[quad_idx][word]; + u32 hw_val = hw_off ? (word_val >> 16) : word_val; + hw_val = hw_val & 0xff; + weights[component][channel] = hw_val; + } } // weight multipliers - __m128i weights0 = _mm_set1_epi16(weights[0] * 64.f); - __m128i weights1 = _mm_set1_epi16(weights[1] * 64.f); - __m128i weights2 = _mm_set1_epi16(weights[2] * 64.f); - __m128i weights3 = _mm_set1_epi16(weights[3] * 64.f); - __m128i weights4 = _mm_set1_epi16(weights[4] * 64.f); - __m128i weights5 = _mm_set1_epi16(weights[5] * 64.f); - __m128i weights6 = _mm_set1_epi16(weights[6] * 64.f); - __m128i weights7 = _mm_set1_epi16(weights[7] * 64.f); + __m128i weights0 = _mm_setr_epi16(weights[0][0], weights[0][1], weights[0][2], weights[0][3], + weights[0][0], weights[0][1], weights[0][2], weights[0][3]); + __m128i weights1 = _mm_setr_epi16(weights[1][0], weights[1][1], weights[1][2], weights[1][3], + weights[1][0], weights[1][1], weights[1][2], weights[1][3]); + __m128i weights2 = _mm_setr_epi16(weights[2][0], weights[2][1], weights[2][2], weights[2][3], + weights[2][0], weights[2][1], weights[2][2], weights[2][3]); + __m128i weights3 = _mm_setr_epi16(weights[3][0], weights[3][1], weights[3][2], weights[3][3], + weights[3][0], weights[3][1], weights[3][2], weights[3][3]); + __m128i weights4 = _mm_setr_epi16(weights[4][0], weights[4][1], weights[4][2], weights[4][3], + weights[4][0], weights[4][1], weights[4][2], weights[4][3]); + __m128i weights5 = _mm_setr_epi16(weights[5][0], weights[5][1], weights[5][2], weights[5][3], + weights[5][0], weights[5][1], weights[5][2], weights[5][3]); + __m128i weights6 = _mm_setr_epi16(weights[6][0], weights[6][1], weights[6][2], weights[6][3], + weights[6][0], weights[6][1], weights[6][2], weights[6][3]); + __m128i weights7 = _mm_setr_epi16(weights[7][0], weights[7][1], weights[7][2], weights[7][3], + weights[7][0], weights[7][1], weights[7][2], weights[7][3]); // saturation: note that alpha is saturated to 128 but the rest are 255. // TODO: maybe we should saturate to 255 for everybody (can do this using a single packus) and // change the shader to deal with this. __m128i sat = _mm_set_epi16(128, 255, 255, 255, 128, 255, 255, 255); - for (u32 color_quad = 0; color_quad < in.color_count / 4; color_quad++) { + for (u32 color_quad = 0; color_quad < swizzled_colors.color_count / 4; color_quad++) { // first, load colors. We put 16 bytes / register and don't touch the upper half because we // convert u8s to u16s. { - const u8* base = in.data.data() + color_quad * 128; + const u8* base = swizzled_colors.data.data() + color_quad * 128; __m128i color0_p = _mm_loadu_si64((const __m128i*)(base + 0)); __m128i color1_p = _mm_loadu_si64((const __m128i*)(base + 16)); __m128i color2_p = _mm_loadu_si64((const __m128i*)(base + 32)); @@ -404,7 +347,7 @@ void interp_time_of_day_fast(const float weights[8], } { - const u8* base = in.data.data() + color_quad * 128 + 8; + const u8* base = swizzled_colors.data.data() + color_quad * 128 + 8; __m128i color0_p = _mm_loadu_si64((const __m128i*)(base + 0)); __m128i color1_p = _mm_loadu_si64((const __m128i*)(base + 16)); __m128i color2_p = _mm_loadu_si64((const __m128i*)(base + 32)); diff --git a/game/graphics/opengl_renderer/background/background_common.h b/game/graphics/opengl_renderer/background/background_common.h index 1218b96cfe..2f24f7646a 100644 --- a/game/graphics/opengl_renderer/background/background_common.h +++ b/game/graphics/opengl_renderer/background/background_common.h @@ -22,7 +22,7 @@ struct TfragRenderSettings { math::Vector4f hvdf_offset; math::Vector4f fog; int tree_idx; - float time_of_day_weights[8] = {0}; + math::Vector itimes[4]; math::Vector4f planes[4]; bool debug_culling = false; const u8* occlusion_culling = nullptr; @@ -42,7 +42,8 @@ DoubleDraw setup_opengl_from_draw_mode(DrawMode mode, u32 tex_unit, bool mipmap) void first_tfrag_draw_setup(const TfragRenderSettings& settings, SharedRenderState* render_state, ShaderId shader); -void interp_time_of_day_slow(const float weights[8], + +void interp_time_of_day_slow(const math::Vector itimes[4], const std::vector& in, math::Vector* out); @@ -53,8 +54,8 @@ struct SwizzledTimeOfDay { SwizzledTimeOfDay swizzle_time_of_day(const std::vector& in); -void interp_time_of_day_fast(const float weights[8], - const SwizzledTimeOfDay& in, +void interp_time_of_day_fast(const math::Vector itimes[4], + const SwizzledTimeOfDay& swizzled_colors, math::Vector* out); void cull_check_all_slow(const math::Vector4f* planes, diff --git a/game/graphics/opengl_renderer/buckets.h b/game/graphics/opengl_renderer/buckets.h index d525ef0974..69159412a2 100644 --- a/game/graphics/opengl_renderer/buckets.h +++ b/game/graphics/opengl_renderer/buckets.h @@ -89,6 +89,7 @@ enum class BucketId { SHRUB_L0_SHRUB = 74, SHRUB_L1_SHRUB = 83, TFRAG_T_L0_ALPHA = 128, + TFRAG_W_L0_WATER = 255, DEBUG_NO_ZBUF1 = 318, DEBUG2 = 324, DEBUG_NO_ZBUF2 = 325, diff --git a/game/kernel/jak2/kscheme.cpp b/game/kernel/jak2/kscheme.cpp index 35afc14031..5e41a313e5 100644 --- a/game/kernel/jak2/kscheme.cpp +++ b/game/kernel/jak2/kscheme.cpp @@ -1460,7 +1460,7 @@ int InitHeapAndSymbol() { set_fixed_symbol(FIX_SYM_ASIZE_OF_BASIC_FUNC, "asize-of-basic-func", make_function_from_c((void*)asize_of_basic).offset); set_fixed_symbol(FIX_SYM_COPY_BASIC_FUNC, "asize-of-basic-func", - make_function_from_c((void*)copy_basic).offset); + make_function_from_c((void*)copy_basic, true).offset); set_fixed_symbol(FIX_SYM_DELETE_BASIC, "delete-basic", make_function_from_c((void*)delete_basic).offset); set_fixed_symbol(FIX_SYM_GLOBAL_HEAP, "global", kglobalheap.offset); @@ -1509,7 +1509,7 @@ int InitHeapAndSymbol() { set_fixed_type(FIX_SYM_BASIC, "basic", get_fixed_type_symbol(FIX_SYM_STRUCTURE), pack_type_flag(9, 0, 4), make_function_from_c((void*)print_basic).offset, make_function_from_c((void*)inspect_basic).offset); - basic_type->new_method = make_function_from_c((void*)new_basic); + basic_type->new_method = make_function_from_c((void*)new_basic, true); basic_type->delete_method = Ptr(u32_in_fixed_sym(FIX_SYM_DELETE_BASIC)); basic_type->asize_of_method = Ptr(u32_in_fixed_sym(FIX_SYM_ASIZE_OF_BASIC_FUNC)); basic_type->copy_method = Ptr(u32_in_fixed_sym(FIX_SYM_COPY_BASIC_FUNC)); @@ -1636,7 +1636,7 @@ int InitHeapAndSymbol() { pack_type_flag(9, 0, 16), 0, 0); Ptr(u32_in_fixed_sym(FIX_SYM_OBJECT_TYPE))->new_method = - make_function_from_c((void*)alloc_heap_object); + make_function_from_c((void*)alloc_heap_object, true); make_function_symbol_from_c("string->symbol", (void*)intern); make_function_symbol_from_c("print", (void*)sprint); diff --git a/game/mips2c/jak2_functions/debug.cpp b/game/mips2c/jak2_functions/debug.cpp index 52381010a6..ad8251f75a 100644 --- a/game/mips2c/jak2_functions/debug.cpp +++ b/game/mips2c/jak2_functions/debug.cpp @@ -26,7 +26,6 @@ void qfsrv_same_mtsab_4(ExecutionContext* c, int reg) { u64 execute(void* ctxt) { auto* c = (ExecutionContext*)ctxt; bool bc = false; - u32 call_addr = 0; bool cop1_bc = false; c->load_symbol2(v1, cache.math_camera); // lw v1, *math-camera*(s7) c->lqc2(vf9, 0, a2); // lqc2 vf9, 0(a2) diff --git a/game/mips2c/jak2_functions/texture.cpp b/game/mips2c/jak2_functions/texture.cpp index 2d46af7838..7ef876ed79 100644 --- a/game/mips2c/jak2_functions/texture.cpp +++ b/game/mips2c/jak2_functions/texture.cpp @@ -8,7 +8,6 @@ namespace adgif_shader_texture_with_update { u64 execute(void* ctxt) { auto* c = (ExecutionContext*)ctxt; bool bc = false; - u32 call_addr = 0; c->ld(a2, 16, a0); // ld a2, 16(a0) c->addiu(v1, r0, 256); // addiu v1, r0, 256 c->andi(a2, a2, 513); // andi a2, a2, 513 diff --git a/goal_src/jak2/dgos/vi1.gd b/goal_src/jak2/dgos/vi1.gd new file mode 100644 index 0000000000..8708b026d7 --- /dev/null +++ b/goal_src/jak2/dgos/vi1.gd @@ -0,0 +1,21 @@ +("VI1.DGO" + ("tpage-3034.go" "tpage-3034") + ("tpage-3037.go" "tpage-3037") + ("tpage-3035.go" "tpage-3035") + ("tpage-3038.go" "tpage-3038") + ("tpage-3036.go" "tpage-3036") + ("tpage-2761.go" "tpage-2761") + ("tpage-3516.go" "tpage-3516") + ("daxter-highres-ag.go" "daxter-highres") + ("darkjak-highres-ag.go" "darkjak-highres") + ("metalkor-torso-ag.go" "metalkor-torso") + ("rift-ring-ag.go" "rift-ring") + ("vil-break-support-ag.go" "vil-break-support") + ("intro-flamer-ag.go" "intro-flamer") + ("rift-rider-donut-ag.go" "rift-rider-donut") + ("vil-windmill-sail-ag.go" "vil-windmill-sail") + ("vil-windspinner-ag.go" "vil-windspinner") + ("vil-sagesail-ag.go" "vil-sagesail") + ("particleman-ag.go" "particleman") + ("village1-vis.go" "village1-vis") + ) diff --git a/goal_src/jak2/engine/common_objs/base-plat.gc b/goal_src/jak2/engine/common_objs/base-plat.gc index 1f7d9dd634..266af63c93 100644 --- a/goal_src/jak2/engine/common_objs/base-plat.gc +++ b/goal_src/jak2/engine/common_objs/base-plat.gc @@ -133,7 +133,7 @@ (defmethod execute-effects base-plat ((obj base-plat)) "Executes various ancillary tasks with the platform, such as spawning particles or playing the associated sound" (if (nonzero? (-> obj part)) - (sparticle-launch-control-method-11 (-> obj part) (-> obj root-override trans)) + (spawn (-> obj part) (-> obj root-override trans)) ) (when (nonzero? (-> obj sound)) (set! (-> obj sound trans quad) (-> obj root-override trans quad)) diff --git a/goal_src/jak2/engine/draw/drawable.gc b/goal_src/jak2/engine/draw/drawable.gc index e8f121a6da..947af10092 100644 --- a/goal_src/jak2/engine/draw/drawable.gc +++ b/goal_src/jak2/engine/draw/drawable.gc @@ -322,17 +322,17 @@ ; (foreground-initialize-engines) ;; update time of day and wind effects. - ; (let ((gp-2 (-> pp clock))) - ; (if (= (-> *time-of-day-context* mode) (time-of-day-palette-id unk3)) - ; (set! (-> pp clock) (-> *display* bg-clock)) - ; (set! (-> pp clock) (-> *display* real-clock)) - ; ) + (let ((gp-2 (-> pp clock))) + (if (= (-> *time-of-day-context* mode) (time-of-day-palette-id unk3)) + (set! (-> pp clock) (-> *display* bg-clock)) + (set! (-> pp clock) (-> *display* real-clock)) + ) ; (if (not (paused?)) ; (update-wind *wind-work* *wind-scales*) ; ) - ; (update-time-of-day *time-of-day-context*) - ; (set! (-> pp clock) gp-2) - ; ) + (update-time-of-day *time-of-day-context*) + (set! (-> pp clock) gp-2) + ) ;; draw the sky diff --git a/goal_src/jak2/engine/game/main.gc b/goal_src/jak2/engine/game/main.gc index c9c1dbdaec..c7b467c37b 100644 --- a/goal_src/jak2/engine/game/main.gc +++ b/goal_src/jak2/engine/game/main.gc @@ -720,7 +720,7 @@ (let ((gp-1 *display*)) (set! *teleport* #t) ; (update *setting-control*) - ; (init-time-of-day-context *time-of-day-context*) + (init-time-of-day-context *time-of-day-context*) (format 0 "about to display-sync~%") (display-sync gp-1) (format 0 "about to swap-display~%") diff --git a/goal_src/jak2/engine/gfx/background/background.gc b/goal_src/jak2/engine/gfx/background/background.gc index 526ca690b7..9e99aa7702 100644 --- a/goal_src/jak2/engine/gfx/background/background.gc +++ b/goal_src/jak2/engine/gfx/background/background.gc @@ -619,20 +619,10 @@ (set! (-> data-ptr 1) (-> *math-camera* plane 1 quad)) (set! (-> data-ptr 2) (-> *math-camera* plane 2 quad)) (set! (-> data-ptr 3) (-> *math-camera* plane 3 quad)) - - ;; hack to set time of day to something. - (let ((hack-itimes (new 'stack 'vector4w))) - (dotimes (i 4) - (set! (-> hack-itimes data i) #x60) - ) - (dotimes (i 4) - (set! (-> data-ptr (+ 4 i)) (-> hack-itimes quad)) - ) - ) - ; (set! (-> data-ptr 4) (-> lev mood itimes 0 quad)) todo, time of day - ; (set! (-> data-ptr 5) (-> lev mood itimes 1 quad)) - ; (set! (-> data-ptr 6) (-> lev mood itimes 2 quad)) - ; (set! (-> data-ptr 7) (-> lev mood itimes 3 quad)) + (set! (-> data-ptr 4) (-> lev mood-context itimes 0 quad)) + (set! (-> data-ptr 5) (-> lev mood-context itimes 1 quad)) + (set! (-> data-ptr 6) (-> lev mood-context itimes 2 quad)) + (set! (-> data-ptr 7) (-> lev mood-context itimes 3 quad)) (set! (-> data-ptr 8) (-> *math-camera* camera-temp vector 0 quad)) (set! (-> data-ptr 9) (-> *math-camera* camera-temp vector 1 quad)) (set! (-> data-ptr 10) (-> *math-camera* camera-temp vector 2 quad)) diff --git a/goal_src/jak2/engine/gfx/mood/mood.gc b/goal_src/jak2/engine/gfx/mood/mood.gc index 09eec9d249..bf6f1d1a38 100644 --- a/goal_src/jak2/engine/gfx/mood/mood.gc +++ b/goal_src/jak2/engine/gfx/mood/mood.gc @@ -144,8 +144,64 @@ ) ) -;; ERROR: Expression building failed: In update-mood-direction: Failed to match non-power of two case: t3-14 - +(defun update-mood-direction ((arg0 mood-context-core3) (arg1 mood-table) (arg2 float)) + (local-vars (sv-16 light-group)) + (let* ((v1-0 (-> arg1 mood-channel-group)) + (a2-1 (-> arg1 mood-direction-table)) + (a3-0 (the int arg2)) + (t0-1 (mod (+ a3-0 1) 24)) + (f0-3 (- arg2 (the float a3-0))) + (f1-3 (- 1.0 f0-3)) + (t1-0 0) + (a1-3 (-> arg0 light-group)) + ) + (set! sv-16 (-> arg0 light-group 1)) + (set! (-> a1-3 0 ambi extra x) 1.0) + (set! (-> a1-3 0 dir0 extra x) 0.0) + (set! (-> a1-3 0 dir1 extra x) 0.0) + (set! (-> a1-3 0 dir2 extra x) 0.0) + (dotimes (t2-2 4) + (let ((f2-6 (+ (* f1-3 (-> (the-as (pointer float) (+ (+ (* a3-0 4) (* 96 t2-2)) (the-as int v1-0))))) + (* f0-3 (-> (the-as (pointer float) (+ (+ (* t0-1 4) (* 96 t2-2)) (the-as int v1-0))))) + ) + ) + ) + (when (!= f2-6 0.0) + (set! (-> a1-3 0 lights t1-0 extra x) f2-6) + (set! (-> a1-3 0 lights t1-0 mask) (the-as uint (ash 2 t2-2))) + (set! (-> a1-3 0 lights t1-0 palette-index) (+ t2-2 1)) + (set! (-> a1-3 0 lights t1-0 direction quad) (-> a2-1 data t2-2 quad)) + (set! (-> (the-as (pointer uint128) (+ (the-as uint (-> a1-3 0 dir0 color)) (* 48 t1-0)))) + (-> arg0 times (+ t2-2 1) quad) + ) + (set! (-> arg0 times (+ t2-2 1) w) f2-6) + (+! t1-0 1) + ) + ) + ) + (set! (-> a1-3 0 ambi mask) (the-as uint 1)) + (set! (-> a1-3 0 ambi palette-index) 0) + (mem-copy! (the-as pointer sv-16) (the-as pointer a1-3) 192) + ) + (let ((f0-4 1.0)) + (let ((f1-4 1.1)) + (cond + ((or (>= 6.0 arg2) (>= arg2 18.0)) + (set! f0-4 f1-4) + ) + ((and (< 6.0 arg2) (< arg2 7.0)) + (+! f0-4 (* (- f1-4 f0-4) (- 7.0 arg2))) + ) + ((and (< 17.0 arg2) (< arg2 18.0)) + (+! f0-4 (* (- f1-4 f0-4) (+ -17.0 arg2))) + ) + ) + ) + (set! (-> sv-16 dir0 extra x) (* (-> sv-16 dir0 extra x) f0-4)) + (set! (-> sv-16 dir1 extra x) (* (-> sv-16 dir1 extra x) f0-4)) + (set! (-> sv-16 dir2 extra x) (* (-> sv-16 dir2 extra x) f0-4)) + ) + ) (defun update-mood-exterior ((arg0 mood-context-core3) (arg1 mood-table) (arg2 float) (arg3 int)) (local-vars (v0-1 object) (sv-32 mood-color) (sv-48 mood-color) (sv-64 vector)) (cond diff --git a/goal_src/jak2/engine/gfx/mood/time-of-day.gc b/goal_src/jak2/engine/gfx/mood/time-of-day.gc index 71c4c73b93..20a36790b7 100644 --- a/goal_src/jak2/engine/gfx/mood/time-of-day.gc +++ b/goal_src/jak2/engine/gfx/mood/time-of-day.gc @@ -5,7 +5,697 @@ ;; name in dgo: time-of-day ;; dgos: ENGINE, GAME +(define-extern time-of-day-effect (function none)) + ;; DECOMP BEGINS +;; definition for method 5 of type time-of-day-palette +;; WARN: Return type mismatch uint vs int. +(defmethod asize-of time-of-day-palette ((obj time-of-day-palette)) + (the-as int (+ (-> obj type size) (* (* (-> obj height) (-> obj width)) 4))) + ) + +;; definition for method 10 of type time-of-day-proc +(defmethod deactivate time-of-day-proc ((obj time-of-day-proc)) + (if (nonzero? (-> obj sun)) + (kill-and-free-particles (-> obj sun)) + ) + (if (nonzero? (-> obj green-sun)) + (kill-and-free-particles (-> obj green-sun)) + ) + (if (nonzero? (-> obj moon)) + (kill-and-free-particles (-> obj moon)) + ) + ((method-of-type process deactivate) obj) + (none) + ) + +;; failed to figure out what this is: +(if (zero? time-of-day-effect) + (set! time-of-day-effect nothing) + ) + +;; definition for function time-of-day-update +;; INFO: Used lq/sq +;; WARN: Return type mismatch int vs none. +(defbehavior time-of-day-update time-of-day-proc () + (time-of-day-effect) + (let ((gp-0 #t)) + (dotimes (v1-0 (-> *level* length)) + (let ((a0-3 (-> *level* level v1-0))) + (when (= (-> a0-3 status) 'active) + (if (-> a0-3 info use-camera-other) + (set! gp-0 #f) + ) + ) + ) + ) + (when (and (-> *setting-control* user-current weather) gp-0) + (let ((s5-0 (new 'stack-no-clear 'vector))) + (let ((s4-0 (new 'stack-no-clear 'vector)) + (v1-8 (-> *math-camera* inv-camera-rot vector 2)) + ) + (set! (-> s5-0 quad) (-> *math-camera* trans quad)) + (vector-! s4-0 s5-0 (-> *math-camera* prev-trans)) + (let ((f0-1 (vector-dot s4-0 v1-8))) + (vector+float*! s5-0 s5-0 v1-8 (* 25.0 f0-1)) + ) + ) + (set! (-> s5-0 y) (-> *math-camera* trans y)) + ) + (if (< 0.0 (-> *setting-control* user-current rain)) + (update-rain (the-as target (-> *setting-control* user-current rain))) + ) + (if (< 0.0 (-> *setting-control* user-current snow)) + (update-snow (the-as target (-> *setting-control* user-current snow))) + ) + ) + (cond + ((and (>= (-> self time-of-day) 6.25) + (and (< (-> self time-of-day) 18.75) (-> *time-of-day-context* sky) gp-0) + ) + (when (and *dproc* (zero? (-> self sun-count))) + (spawn (-> self sun) (math-camera-pos)) + (+! (-> self sun-count) 1) + ) + ) + ((> (-> self sun-count) 0) + (kill-and-free-particles (-> self sun)) + (set! (-> self sun-count) 0) + 0 + ) + ) + (cond + ((and (or (>= (-> self time-of-day) 21.75) (>= 10.25 (-> self time-of-day))) + (-> *time-of-day-context* sky) + gp-0 + ) + (when (and *dproc* (zero? (-> self green-sun-count))) + (spawn (-> self green-sun) (math-camera-pos)) + (+! (-> self green-sun-count) 1) + ) + ) + ((> (-> self green-sun-count) 0) + (kill-and-free-particles (-> self green-sun)) + (set! (-> self green-sun-count) 0) + 0 + ) + ) + (set! gp-0 (and (or (>= 7.0 (-> self time-of-day)) (>= (-> self time-of-day) 17.0)) + (and (-> *time-of-day-context* sky) gp-0) + ) + ) + (cond + (gp-0 + (when (and *dproc* (zero? (-> self moon-count))) + (spawn (-> self moon) (math-camera-pos)) + (+! (-> self moon-count) 1) + ) + ) + ((> (-> self moon-count) 0) + (kill-and-free-particles (-> self moon)) + (set! (-> self moon-count) 0) + 0 + ) + ) + ) + (update-time-and-speed *sky-work* (-> self time-of-day) (-> self time-ratio)) + 0 + (none) + ) + +;; definition for function update-counters +(defbehavior update-counters time-of-day-proc () + (let ((v1-2 (-> *display* bg-clock frame-counter))) + 0 + (let ((v1-3 (* 60 v1-2))) + (set! (-> self old-frame) (-> self current-frame)) + (set! (-> self current-frame) (the-as uint v1-3)) + (set! (-> self frames) (the-as uint v1-3)) + (set! (-> self hours) (/ v1-3 #x107ac0)) + (let ((v1-4 (- v1-3 (* #x107ac0 (-> self hours))))) + (set! (-> self minutes) (/ v1-4 #x4650)) + (let ((v1-5 (- v1-4 (* #x4650 (-> self minutes))))) + (set! (-> self seconds) (/ v1-5 300)) + (- v1-5 (* 300 (-> self seconds))) + ) + ) + ) + ) + (let ((f0-1 (* 0.0000009259259 (the float (mod (the-as int (-> self frames)) #x18b8200))))) + (set! (-> self time-of-day) f0-1) + (set! (-> *time-of-day-context* time) f0-1) + f0-1 + ) + ) + +;; failed to figure out what this is: +(defstate time-of-day-tick (time-of-day-proc) + :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as + object + (cond + ((= v1-0 'change) + (case (-> arg3 param 0) + (('ratio) + (let ((a0-5 (-> *display* bg-clock)) + (f0-0 (the-as float (-> arg3 param 1))) + ) + (set! (-> self time-ratio) f0-0) + (set! (-> self dest-time-ratio) f0-0) + (update-rates! a0-5 f0-0) + ) + ) + (('hour) + (update-counters) + (let ((v1-7 (-> *display* bg-clock frame-counter)) + (a0-7 #x69780) + (a1-5 (/ (the int (* 1080000.0 (the float (-> arg3 param 1)))) 60)) + ) + (set! (-> *display* bg-clock frame-counter) (+ (- v1-7 (the-as time-frame (mod v1-7 a0-7))) a0-7 a1-5)) + ) + (update-counters) + (-> self hours) + (kill-and-free-particles (-> self sun)) + (spawn (-> self sun) (math-camera-pos)) + (set! (-> self sun-count) 1) + (kill-and-free-particles (-> self green-sun)) + (spawn (-> self green-sun) (math-camera-pos)) + (set! (-> self green-sun-count) 1) + (kill-and-free-particles (-> self moon)) + (spawn (-> self moon) (math-camera-pos)) + (let ((v0-0 (the-as number 1))) + (set! (-> self moon-count) (the-as int v0-0)) + v0-0 + ) + ) + ) + ) + ((= v1-0 'ratio) + (-> self time-ratio) + ) + ((= v1-0 'day-length) + (if (= (-> self time-ratio) 0.0) + 0 + (/ 25920000.0 (-> self time-ratio)) + ) + ) + ((= v1-0 'time-frame) + (-> self frames) + ) + ((= v1-0 'time-of-day) + (-> self time-of-day) + ) + ((= v1-0 'time-of-day-norm) + (* 0.041666668 (-> self time-of-day)) + ) + ((= v1-0 'hour) + (-> self hours) + ) + ((= v1-0 'minute) + (-> self minutes) + ) + ((= v1-0 'second) + (-> self seconds) + ) + ((= v1-0 'dest-clock-ratio-set) + (set! (-> self dest-time-ratio) (the-as float (-> arg3 param 0))) + (let ((f0-12 (-> self time-ratio)) + (f1-5 (-> self dest-time-ratio)) + (f2-1 (/ 300.0 (the float (-> arg3 param 1)))) + ) + (set! (-> self dest-time-delta) (* (fabs (- f0-12 f1-5)) f2-1 (-> *display* real-clock seconds-per-frame))) + ) + (-> self dest-time-ratio) + ) + ) + ) + ) + ) + :code (behavior () + (until #f + (if (!= (-> self time-ratio) 0.0) + (set! (-> *time-of-day-context* mode) (time-of-day-palette-id unk3)) + ) + (when (!= (-> self time-ratio) (-> self dest-time-ratio)) + (seek! (-> self time-ratio) (-> self dest-time-ratio) (-> self dest-time-delta)) + (update-rates! (-> *display* bg-clock) (-> self time-ratio)) + ) + (update-counters) + (suspend) + ) + #f + (none) + ) + :post time-of-day-update + ) + +;; definition for function init-time-of-day +(defbehavior init-time-of-day time-of-day-proc () + (stack-size-set! (-> self main-thread) 128) + (set! (-> self hours) 0) + (set! (-> self minutes) 0) + (set! (-> self seconds) 0) + (set! (-> self frames) (the-as uint 0)) + (set! (-> self time-of-day) 0.0) + (cond + (*time-of-day-fast* + (set! (-> self time-ratio) 60.0) + (set! (-> self dest-time-ratio) 60.0) + ) + (else + (set! (-> self time-ratio) 1.0) + (set! (-> self dest-time-ratio) 1.0) + ) + ) + (update-rates! (-> *display* bg-clock) (-> self time-ratio)) + (set! (-> self sun) (create-launch-control (-> *part-group-id-table* 3) self)) + (set! (-> self green-sun) (create-launch-control (-> *part-group-id-table* 4) self)) + (set! (-> self moon) (create-launch-control (-> *part-group-id-table* 5) self)) + (set! (-> self event-hook) (-> time-of-day-tick event)) + (go time-of-day-tick) + ) + +;; definition for function start-time-of-day +;; WARN: Return type mismatch (pointer time-of-day-proc) vs (pointer process). +(defun start-time-of-day () + (kill-by-name "time-of-day-proc" *active-pool*) + (set! *time-of-day* (process-spawn time-of-day-proc :init init-time-of-day :to *bg-pool*)) + (the-as (pointer process) *time-of-day*) + ) + +;; definition for function time-of-day-setup (defun time-of-day-setup ((arg0 symbol)) - #f) \ No newline at end of file + (when arg0 + (when (= (-> *time-of-day* 0 time-ratio) 0.0) + (send-event (ppointer->process *time-of-day*) 'change 'ratio (if *time-of-day-fast* + #x42700000 + #x3f800000 + ) + ) + (set! (-> *time-of-day-context* mode) (time-of-day-palette-id unk3)) + ) + ) + (!= (-> *time-of-day* 0 time-ratio) 0.0) + ) + +;; definition for function time-of-day-interp-colors +;; ERROR: function was not converted to expressions. Cannot decompile. + +;; definition for function time-of-day-interp-colors-scratch +;; ERROR: function was not converted to expressions. Cannot decompile. + +;; definition for function init-time-of-day-context +(defun init-time-of-day-context ((arg0 time-of-day-context)) + (set-vector! (-> arg0 title-light-group dir0 color) 0.82 0.82 0.82 1.0) + (set-vector! (-> arg0 title-light-group dir1 color) 2.0 2.0 2.0 1.0) + (set-vector! (-> arg0 title-light-group ambi color) 0.4 0.4 0.4 1.0) + (set! (-> arg0 title-light-group dir0 extra x) 1.0) + (set! (-> arg0 title-light-group dir1 extra x) 1.0) + (set! (-> arg0 title-light-group ambi extra x) 1.0) + (set-vector! (-> arg0 filter-color) 1.0 1.0 1.0 1.0) + (set! (-> arg0 overide-enable) #f) + (when *debug-segment* + (mem-copy! (the-as pointer *overide-mood-color-table*) (the-as pointer *no-cloud-mood-color-table*) 256) + (mem-copy! (the-as pointer *overide-mood-fog-table*) (the-as pointer *no-cloud-clear-mood-fog-table*) 384) + (dotimes (v1-8 8) + (set! (-> *overide-mood-color-table* data v1-8 lgt-color w) 1.0) + (set! (-> *overide-mood-color-table* data v1-8 amb-color w) 1.0) + (set! (-> *overide-mood-fog-table* data v1-8 fog-color w) 1.0) + (set! (-> *overide-mood-fog-table* data v1-8 fog-dists x) + (* 0.00024414062 (-> *overide-mood-fog-table* data v1-8 fog-dists x)) + ) + (set! (-> *overide-mood-fog-table* data v1-8 fog-dists y) + (* 0.00024414062 (-> *overide-mood-fog-table* data v1-8 fog-dists y)) + ) + (set-vector! (-> *time-of-day-context* times v1-8) 1.0 1.0 1.0 1.0) + ) + #f + ) + ) + +;; definition for function set-filter-color! +;; WARN: Return type mismatch int vs none. +(defun set-filter-color! ((arg0 float) (arg1 float) (arg2 float)) + (set-vector! (-> *time-of-day-context* filter-color) arg0 arg1 arg2 1.0) + 0 + (none) + ) + +;; definition for function tod-madd! +(defun tod-madd! ((arg0 vector) (arg1 vector) (arg2 vector)) + (local-vars (v0-0 float)) + (rlet ((acc :class vf) + (vf0 :class vf) + (vf4 :class vf) + (vf5 :class vf) + (vf6 :class vf) + ) + (init-vf0-vector) + (.mov vf6 arg2) + (.lvf vf4 (&-> arg0 quad)) + (.lvf vf5 (&-> arg1 quad)) + (.mul.w.vf acc vf4 vf0) + (.add.mul.x.vf vf4 vf5 vf6 acc) + (.svf (&-> arg0 quad) vf4) + (.mov v0-0 vf4) + v0-0 + ) + ) + +;; definition for function update-environment-colors +(defun update-environment-colors ((arg0 time-of-day-context)) + (let* ((v1-0 (-> arg0 light-group)) + (s4-0 (-> v1-0 0 ambi color)) + (s5-0 (new 'stack-no-clear 'vector)) + ) + (let ((s2-0 (-> arg0 current-prt-color)) + (s3-0 (-> arg0 current-env-color)) + ) + (vector4-lerp! s5-0 (-> v1-0 0 dir0 color) (-> v1-0 0 dir1 color) (-> v1-0 0 dir1 extra x)) + (when (and (= (-> s2-0 x) 0.0) (= (-> s2-0 y) 0.0) (= (-> s2-0 z) 0.0)) + (set! (-> s2-0 x) (* 0.5 (+ (-> s4-0 x) (* 0.5 (+ (-> s4-0 x) (-> s5-0 x)))))) + (set! (-> s2-0 y) (* 0.5 (+ (-> s4-0 y) (* 0.5 (+ (-> s4-0 y) (-> s5-0 y)))))) + (set! (-> s2-0 z) (* 0.5 (+ (-> s4-0 z) (* 0.5 (+ (-> s4-0 z) (-> s5-0 z)))))) + (set! (-> s2-0 w) 1.0) + ) + (when (and (= (-> s3-0 x) 0.0) (= (-> s3-0 y) 0.0) (= (-> s3-0 z) 0.0)) + (set! (-> s3-0 x) (* 48.0 (+ (-> s5-0 x) (* 0.5 (+ (-> s4-0 x) (-> s5-0 x)))))) + (set! (-> s3-0 y) (* 48.0 (+ (-> s5-0 y) (* 0.5 (+ (-> s4-0 y) (-> s5-0 y)))))) + (set! (-> s3-0 z) (* 48.0 (+ (-> s5-0 z) (* 0.5 (+ (-> s4-0 z) (-> s5-0 z)))))) + (set! (-> s3-0 w) 128.0) + ) + ) + (let* ((f0-23 (fmax (fmax (-> s4-0 x) (-> s4-0 y)) (-> s4-0 z))) + (f2-14 (fmax (fmax (-> s5-0 x) (-> s5-0 y)) (-> s5-0 z))) + (f0-27 (fmin 0.85 (- 1.0 (/ (* 0.5 f2-14) (+ f0-23 f2-14))))) + (v0-1 (-> arg0 current-shadow-color)) + ) + (set! (-> v0-1 x) f0-27) + (set! (-> v0-1 y) f0-27) + (set! (-> v0-1 z) f0-27) + (set! (-> v0-1 w) 1.0) + v0-1 + ) + ) + ) + +;; definition for function update-time-of-day +;; INFO: Used lq/sq +;; WARN: Return type mismatch int vs none. +(defun update-time-of-day ((arg0 time-of-day-context)) + (with-pp + (set! (-> arg0 exterior-level) #f) + (init-weather! *mood-control*) + (update-colors-for-time *sky-work* (-> arg0 time)) + (cond + ((-> arg0 overide-enable) + (mem-copy! (the-as pointer (-> *overide-table* mood-fog-table)) (the-as pointer *overide-mood-fog-table*) 384) + (mem-copy! + (the-as pointer (-> *overide-table* mood-color-table)) + (the-as pointer *overide-mood-color-table*) + 256 + ) + (dotimes (v1-7 8) + (vector-float*! + (the-as vector (-> *overide-table* mood-fog-table data v1-7)) + (the-as vector (-> *overide-table* mood-fog-table data v1-7)) + (-> *overide-table* mood-fog-table data v1-7 fog-color w) + ) + (vector-float*! + (the-as vector (-> *overide-table* mood-color-table data v1-7)) + (the-as vector (-> *overide-table* mood-color-table data v1-7)) + (-> *overide-table* mood-color-table data v1-7 lgt-color w) + ) + (vector-float*! + (the-as vector (+ (the-as uint (-> *overide-table* mood-color-table data 0 amb-color)) (* v1-7 32))) + (the-as vector (+ (the-as uint (-> *overide-table* mood-color-table data 0 amb-color)) (* v1-7 32))) + (-> *overide-table* mood-color-table data v1-7 amb-color w) + ) + (set! (-> *overide-table* mood-fog-table data v1-7 fog-color w) 128.0) + (set! (-> *overide-table* mood-color-table data v1-7 lgt-color w) 0.0) + (set! (-> *overide-table* mood-fog-table data v1-7 fog-dists x) + (* 4096.0 (-> *overide-table* mood-fog-table data v1-7 fog-dists x)) + ) + (set! (-> *overide-table* mood-fog-table data v1-7 fog-dists y) + (* 4096.0 (-> *overide-table* mood-fog-table data v1-7 fog-dists y)) + ) + ) + (let ((s5-0 (-> *level* default-level mood-context))) + (clear-mood-times s5-0) + (update-mood-exterior s5-0 *overide-table* (-> arg0 time) 6) + (update-mood-itimes s5-0) + ) + ) + (else + (let ((s5-1 *mood-control*)) + (set! (-> arg0 current-clouds cloud-min) (-> s5-1 mood-clouds cloud-min)) + (set! (-> arg0 current-clouds cloud-max) (-> s5-1 mood-clouds cloud-max)) + (let ((s4-0 (-> *level* default-level mood-context))) + (clear-mood-times s4-0) + (update-mood-exterior s4-0 s5-1 (-> arg0 time) 6) + (update-mood-itimes s4-0) + ) + ) + ) + ) + (vector-float*! (-> arg0 filter) (-> arg0 filter-color) (-> arg0 filter-color w)) + (set! (-> arg0 sky) #f) + (set! (-> arg0 use-camera-other) #f) + (set! (-> arg0 target-interp) 0.0) + (let ((f0-16 4096000.0)) + (dotimes (v1-19 (-> *level* length)) + (let ((a0-50 (-> *level* level v1-19))) + (when (= (-> a0-50 status) 'active) + (if (-> a0-50 info sky) + (set! (-> arg0 sky) #t) + ) + (if (-> a0-50 info use-camera-other) + (set! (-> arg0 use-camera-other) (the-as basic #t)) + ) + (set! f0-16 (fmin f0-16 (-> a0-50 info fog-height))) + ) + ) + ) + (set-fog-height! f0-16) + ) + (if (-> arg0 sky) + (set! (-> (&-> *level* default-level texture-anim-array 9) 0) *sky-texture-anim-array*) + (set! (-> (&-> *level* default-level texture-anim-array 9) 0) #f) + ) + (let ((s5-2 (level-get-target-inside *level*))) + (dotimes (s4-1 6) + (let ((s3-0 (-> *level* level s4-1))) + (case (-> s3-0 status) + (('active 'loaded) + (when (not (paused?)) + (cond + ((= s3-0 s5-2) + (if *teleport* + (set! (-> arg0 interp s4-1) 1.0) + (set! (-> arg0 interp s4-1) (fmin 1.0 (+ 0.0166 (-> arg0 interp s4-1)))) + ) + ) + (*teleport* + (set! (-> arg0 interp s4-1) 0.0) + ) + (else + (set! (-> arg0 interp s4-1) (fmax 0.0 (+ -0.0166 (-> arg0 interp s4-1)))) + ) + ) + ) + (let ((s2-0 (-> pp clock))) + (set! (-> pp clock) (-> *display* real-clock)) + (clear-mood-times (-> s3-0 mood-context)) + ((-> s3-0 mood-func) (-> s3-0 mood-context) (-> arg0 time) s4-1) + (when (-> arg0 overide-enable) + (let ((s1-0 (new 'stack-no-clear 'vector))) + (dotimes (s0-0 8) + (let ((a1-48 (-> s3-0 mood-context times s0-0))) + (vector-float*! (the-as vector s1-0) (-> arg0 times s0-0) (-> arg0 times s0-0 w)) + (vector4-mul! (the-as vector4 a1-48) (the-as vector4 a1-48) (the-as vector4 s1-0)) + ) + ) + ) + ) + (update-mood-itimes (-> s3-0 mood-context)) + (set! (-> pp clock) s2-0) + ) + ) + (else + (set! (-> arg0 interp s4-1) 0.0) + ) + ) + ) + ) + ) + (if (and (-> arg0 exterior-level) (!= (-> *mood-control* lightning-flash) 0.0)) + (set! (-> *display* force-sync) (the-as uint 2)) + ) + (let ((f0-27 0.0)) + (dotimes (v1-79 6) + (+! f0-27 (-> arg0 interp v1-79)) + ) + (when (!= f0-27 0.0) + (dotimes (v1-83 6) + (set! (-> arg0 interp v1-83) (/ (-> arg0 interp v1-83) f0-27)) + ) + (let ((v1-86 (-> arg0 current-fog))) + (dotimes (a0-76 103) + (set! (-> (the-as (pointer int128) (+ (* a0-76 16) (the-as int v1-86)))) (the int128 0)) + ) + ) + (let ((s5-3 (-> arg0 current-fog)) + (s4-2 (-> *mood-control* range)) + ) + (set! (-> s4-2 quad) (the-as uint128 0)) + (set! (-> arg0 max-rain) 0.0) + (set! (-> arg0 fog-mult) 0.0) + (set! (-> arg0 ocean-alpha) 0.0) + (dotimes (s3-1 6) + (let ((f30-0 (-> arg0 interp s3-1)) + (s2-1 *level*) + ) + (when (!= f30-0 0.0) + (let ((a2-20 (+ (the-as uint (-> s2-1 level0 mood-context)) (* 5232 s3-1)))) + (vector4-array-madd! + (the-as (inline-array vector4) s5-3) + (the-as (inline-array vector4) s5-3) + (the-as (inline-array vector4) a2-20) + f30-0 + 103 + ) + ) + (let ((a2-21 (-> s2-1 level s3-1 info mood-range))) + (vector4-madd! (the-as vector4 s4-2) (the-as vector4 s4-2) (the-as vector4 a2-21) f30-0) + ) + (+! (-> arg0 max-rain) (* (-> s2-1 level s3-1 info max-rain) f30-0)) + (+! (-> arg0 fog-mult) (* (-> s2-1 level s3-1 info fog-mult) f30-0)) + (+! (-> arg0 ocean-alpha) (* (-> s2-1 level s3-1 info ocean-alpha) f30-0)) + ) + ) + ) + ) + (dotimes (s5-4 8) + (dotimes (s4-3 3) + (let ((v1-119 (+ (+ (* 48 s4-3) 140 (* 192 s5-4)) (the-as int arg0)))) + (vector-normalize! (the-as vector (+ v1-119 0)) 1.0) + ) + ) + ) + ) + ) + (if (and (-> arg0 overide-enable) (!= (-> *time-of-day-context* mode) 8)) + (mem-copy! + (the-as pointer (-> arg0 current-fog)) + (the-as + pointer + (-> *overide-table* + mood-fog-table + data + (the-as uint (logand (-> *time-of-day-context* mode) (time-of-day-palette-id unk0 unk1 unk2))) + ) + ) + 48 + ) + ) + (update-environment-colors arg0) + (let ((v1-134 (-> arg0 current-fog))) + (let ((a0-87 (-> v1-134 fog-color))) + (set! *fog-color* + (new 'static 'rgba :r (the int (-> a0-87 x)) :g (the int (-> a0-87 y)) :b (the int (-> a0-87 z))) + ) + (set! (-> *fog-texture-work* color) + (the-as + uint + (logior (logior (logior (shr (shl (the int (-> a0-87 z)) 56) 40) (shr (shl (the int (-> a0-87 y)) 56) 48)) + (shr (shl (the int (-> a0-87 x)) 56) 56) + ) + (shr (shl (the int (-> a0-87 x)) 56) 56) + ) + ) + ) + ) + (let ((a0-92 (-> v1-134 erase-color))) + (set! (-> arg0 erase-color) + (new 'static 'rgba :a #x80 :b (the int (-> a0-92 z)) :g (the int (-> a0-92 y)) :r (the int (-> a0-92 x))) + ) + ) + (let ((f0-58 (-> v1-134 fog-dists x)) + (f1-18 (-> v1-134 fog-dists y)) + ) + (let ((f3-0 (-> v1-134 fog-dists z)) + (f2-2 (-> v1-134 fog-dists w)) + ) + (set! (-> *math-camera* fog-start) f0-58) + (set! (-> *math-camera* fog-end) f1-18) + (set! (-> *math-camera* fog-max) f3-0) + (set! (-> *math-camera* fog-min) f2-2) + (set! (-> *fog-texture-work* alpha-near) (* 0.003921569 (the float (- 255 (the int f3-0))))) + (set! (-> *fog-texture-work* alpha-far) (* 0.003921569 (the float (- 255 (the int f2-2))))) + ) + (set! (-> *fog-texture-work* alpha-delta) + (- (-> *fog-texture-work* alpha-far) (-> *fog-texture-work* alpha-near)) + ) + (set! (-> *fog-texture-work* fog-near) f0-58) + (set! (-> *fog-texture-work* fog-far) f1-18) + (set! (-> *fog-texture-work* fog-delta) (- f1-18 f0-58)) + ) + ) + (set-cloud-minmax! (-> arg0 current-clouds cloud-min) (-> arg0 current-clouds cloud-max)) + (reset! *palette-fade-controls*) + 0 + (none) + ) + ) + +;; definition for function calc-fade-from-fog +(defun calc-fade-from-fog ((arg0 vector)) + (let* ((f0-0 (vector-vector-distance (math-camera-pos) arg0)) + (v1-1 (-> *time-of-day-context* current-fog)) + (f1-0 (-> v1-1 fog-dists x)) + (f2-0 (-> v1-1 fog-dists y)) + (f3-1 (* 0.003921569 (-> v1-1 fog-dists w))) + (f4-2 (* 0.003921569 (-> v1-1 fog-dists z))) + ) + (+ f4-2 (* (fmax 0.0 (fmin 1.0 (/ (- f0-0 f1-0) (- f2-0 f1-0)))) (- f3-1 f4-2))) + ) + ) + +;; definition for method 10 of type palette-fade-controls +;; INFO: Used lq/sq +(defmethod set-fade! palette-fade-controls ((obj palette-fade-controls) (arg0 int) (arg1 float) (arg2 float) (arg3 vector)) + (cond + ((and (>= arg0 0) (< arg0 8)) + (let ((v1-3 (-> obj control arg0))) + (when (< arg2 (-> v1-3 actor-dist)) + (if arg3 + (set! (-> v1-3 trans quad) (-> arg3 quad)) + ) + (set! (-> v1-3 fade) (fmax 0.0 (fmin 1.993 arg1))) + (set! (-> v1-3 actor-dist) arg2) + ) + ) + ) + (else + (format 0 "ERROR: Bogus palette-fade-control index!~%") + ) + ) + ) + +;; definition for method 9 of type palette-fade-controls +;; WARN: Return type mismatch int vs none. +(defmethod reset! palette-fade-controls ((obj palette-fade-controls)) + (countdown (v1-0 8) + (let ((a1-2 (-> obj control v1-0))) + (set! (-> a1-2 fade) 0.0) + (set! (-> a1-2 actor-dist) 4096000000.0) + ) + ) + 0 + (none) + ) + +;; failed to figure out what this is: +(start-time-of-day) diff --git a/goal_src/jak2/engine/gfx/mood/weather-part.gc b/goal_src/jak2/engine/gfx/mood/weather-part.gc index 7307116d00..8dcc745bb0 100644 --- a/goal_src/jak2/engine/gfx/mood/weather-part.gc +++ b/goal_src/jak2/engine/gfx/mood/weather-part.gc @@ -7,3 +7,56 @@ ;; DECOMP BEGINS +;; all these are stubbed out + +(defun update-rain ((a0-0 target)) + (none) + ) + +(defun update-snow ((arg target)) + (none)) + +(set! (-> *part-group-id-table* 4) + (new 'static 'sparticle-launch-group + :length 0 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag always-draw) + :name "group-green-sun" + :launcher (new 'static 'inline-array sparticle-group-item 0) + :scale-x 1.0 + :scale-y 1.0 + :scale-z 1.0 + :bounds (new 'static 'sphere :w 286720.0) + ) + ) + +(set! (-> *part-group-id-table* 3) + (new 'static 'sparticle-launch-group + :length 0 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag always-draw) + :name "group-sun" + :launcher (new 'static 'inline-array sparticle-group-item 0) + :scale-x 1.0 + :scale-y 1.0 + :scale-z 1.0 + :bounds (new 'static 'sphere :w 286720.0) + ) + ) + +(set! (-> *part-group-id-table* 5) + (new 'static 'sparticle-launch-group + :length 0 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag always-draw) + :name "group-moon" + :launcher (new 'static 'inline-array sparticle-group-item 0) + :scale-x 1.0 + :scale-y 1.0 + :scale-z 1.0 + :bounds (new 'static 'sphere :w 286720.0) + ) + ) diff --git a/goal_src/jak2/engine/gfx/sky/sky-h.gc b/goal_src/jak2/engine/gfx/sky/sky-h.gc index 8f9cfc0aaa..d628c676c4 100644 --- a/goal_src/jak2/engine/gfx/sky/sky-h.gc +++ b/goal_src/jak2/engine/gfx/sky/sky-h.gc @@ -231,8 +231,8 @@ (:methods (init-sun-data! (_type_ int float float float) none 9) (init-orbit-settings! (_type_ int float float float float float float) none 10) - (sky-work-method-11 () none 11) - (sky-work-method-12 () none 12) + (update-colors-for-time (_type_ float) none 11) + (update-time-and-speed (_type_ float float) none 12) (draw (_type_) none 13) (sky-work-method-14 () none 14) (sky-work-method-15 () none 15) @@ -263,6 +263,4 @@ 0 - - - +(define-extern *sky-work* sky-work) \ No newline at end of file diff --git a/goal_src/jak2/engine/gfx/sky/sky-tng.gc b/goal_src/jak2/engine/gfx/sky/sky-tng.gc index 712a2c422d..88513567d4 100644 --- a/goal_src/jak2/engine/gfx/sky/sky-tng.gc +++ b/goal_src/jak2/engine/gfx/sky/sky-tng.gc @@ -7,3 +7,66 @@ ;; DECOMP BEGINS + +;; TODO +(defmethod update-time-and-speed sky-work ((obj sky-work) (arg0 float) (arg1 float)) + (if (and (level-get-target-inside *level*) (= (-> (level-get-target-inside *level*) info taskname) 'nest)) + (set! arg1 (* 10.0 arg1)) + ) + (sky-make-sun-data obj 0 arg0) + (sky-make-sun-data obj 1 arg0) + (sky-make-moon-data obj arg0) + (+! (-> obj off-s) (the int (* -8.0 arg1))) + (+! (-> obj off-t) (the int (* 2.0 arg1))) + (set! (-> obj time) arg0) + 0 + (none) + ) + +(defmethod update-colors-for-time sky-work ((obj sky-work) (arg0 float)) + 0 + 0 + 0.0 + (let ((s5-0 *no-cloud-mood-color-table*)) + (let ((s3-0 (-> *level* default-level mood-context)) + (s4-0 (new 'stack-no-clear 'vector)) + ) + (let* ((v1-3 (the int arg0)) + (f0-4 (- arg0 (the float v1-3))) + (f1-3 (- 1.0 f0-4)) + (a0-3 (/ v1-3 24)) + (a1-2 (-> *mood-interp-table* hour (- v1-3 (* 24 a0-3)))) + (a0-6 (-> a1-2 snapshot1)) + (v1-7 (-> a1-2 snapshot2)) + (f0-6 (+ (* f1-3 (-> a1-2 morph-start)) (* f0-4 (-> a1-2 morph-end)))) + ) + (cond + ((= a0-6 v1-7) + (set! (-> obj sun0-color quad) (-> s5-0 data a0-6 lgt-color quad)) + ) + (else + (let ((a1-5 (-> s5-0 data a0-6)) + (v1-11 (-> s5-0 data v1-7)) + ) + (vector4-lerp! (the-as vector (-> obj sun0-color)) (-> a1-5 lgt-color) (-> v1-11 lgt-color) f0-6) + ) + ) + ) + ) + (set! (-> obj sun0-color-lower quad) (-> s3-0 times 1 quad)) + (set! (-> obj ambi-color-lower quad) (-> s3-0 times 0 quad)) + (set-vector! s4-0 1.9921875 1.9921875 1.9921875 1.0) + (vector4-lerp! + (the-as vector (-> obj ambi-color)) + (the-as vector (-> obj ambi-color-lower)) + s4-0 + (-> *mood-control* lightning-flash) + ) + ) + (set! (-> obj sun0-color quad) (-> obj sun0-color quad)) + (set! (-> obj sun1-color quad) (-> s5-0 data 7 lgt-color quad)) + (set! (-> obj moon-color quad) (-> s5-0 data 6 lgt-color quad)) + ) + 0 + (none) + ) \ No newline at end of file diff --git a/goal_src/jak2/engine/gfx/sprite/particles/sparticle-launcher-h.gc b/goal_src/jak2/engine/gfx/sprite/particles/sparticle-launcher-h.gc index 2c81c626d5..1257ff51e3 100644 --- a/goal_src/jak2/engine/gfx/sprite/particles/sparticle-launcher-h.gc +++ b/goal_src/jak2/engine/gfx/sprite/particles/sparticle-launcher-h.gc @@ -109,6 +109,7 @@ (start-dead 2) (launch-asap 3) (bit6 6) + (bit7 7) ) (defenum sp-launch-state-flags @@ -279,7 +280,7 @@ (:methods (initialize (_type_ sparticle-launch-group process) none 9) (sparticle-launch-control-method-10 (_type_ vector) symbol 10) - (sparticle-launch-control-method-11 (_type_ vector) none 11) + (spawn (_type_ vector) none 11) (sparticle-launch-control-method-12 (_type_ matrix) none 12) (sparticle-launch-control-method-13 (_type_ cspace) none 13) (kill-and-free-particles (_type_) none 14) 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 efc800725a..da3aabcdba 100644 --- a/goal_src/jak2/engine/gfx/sprite/particles/sparticle-launcher.gc +++ b/goal_src/jak2/engine/gfx/sprite/particles/sparticle-launcher.gc @@ -569,6 +569,11 @@ ;; ERROR: failed type prop at 32: Could not figure out load: (set! a1 (l.w (+ gp 104))) +;; TODO stub +(defmethod spawn sparticle-launch-control ((obj sparticle-launch-control) (arg0 vector)) + (none) + ) + (defmethod initialize sparticle-launch-control ((obj sparticle-launch-control) (arg0 sparticle-launch-group) (arg1 process)) (with-pp (let ((s5-0 0)) @@ -655,6 +660,7 @@ ;; WARN: Return type mismatch object vs sparticle-launch-control. (defmethod create-launch-control sparticle-launch-group ((obj sparticle-launch-group) (arg0 process)) + (format 0 "create launch control: ~A ~D~%" arg0 (-> obj length)) (let ((gp-0 (the-as object (new 'process 'sparticle-launch-control (-> obj length))))) (when (zero? (the-as sparticle-launch-control gp-0)) (go process-drawable-art-error "memory") @@ -762,7 +768,7 @@ ) ) ) - (sparticle-launch-control-method-11 obj (-> arg0 trans)) + (spawn obj (-> arg0 trans)) (none) ) @@ -808,7 +814,7 @@ ) ) ) - (sparticle-launch-control-method-11 obj (vector<-cspace! (-> obj origin trans) arg0)) + (spawn obj (vector<-cspace! (-> obj origin trans) arg0)) (none) ) diff --git a/goal_src/jak2/engine/gfx/texture/texture-anim-h.gc b/goal_src/jak2/engine/gfx/texture/texture-anim-h.gc index 685ad33d4a..90094ac4d0 100644 --- a/goal_src/jak2/engine/gfx/texture/texture-anim-h.gc +++ b/goal_src/jak2/engine/gfx/texture/texture-anim-h.gc @@ -47,22 +47,22 @@ ) (deftype texture-anim (structure) - ((num-layers uint32 :offset-assert 0) - (func basic :offset-assert 4) - (func-id basic :offset 4) - (init-func basic :offset-assert 8) - (init-func-id basic :offset 8) - (tex basic :offset-assert 12) - (tex-name basic :offset-assert 16) - (extra vector :inline :offset-assert 32) - (color uint32 :offset-assert 48) - (frame-time float :offset-assert 52) - (frame-delta float :offset-assert 56) - (frame-mod float :offset-assert 60) - (test uint64 :offset-assert 64) - (alpha uint64 :offset-assert 72) - (clamp uint64 :offset-assert 80) - (data uint8 :dynamic :offset-assert 88) + ((num-layers uint32 :offset-assert 0) + (func basic :offset-assert 4) + (func-id basic :offset 4) + (init-func basic :offset-assert 8) + (init-func-id basic :offset 8) + (tex basic :offset-assert 12) + (tex-name basic :offset-assert 16) + (extra vector :inline :offset-assert 32) + (color rgba :offset-assert 48) + (frame-time float :offset-assert 52) + (frame-delta float :offset-assert 56) + (frame-mod float :offset-assert 60) + (test gs-test :offset-assert 64) + (alpha gs-alpha :offset-assert 72) + (clamp gs-clamp :offset-assert 80) + (data texture-anim-layer :dynamic :offset-assert 88) ) :method-count-assert 11 :size-assert #x58 diff --git a/goal_src/jak2/engine/gfx/texture/texture-anim-tables.gc b/goal_src/jak2/engine/gfx/texture/texture-anim-tables.gc index dec86f7299..71bc356cd4 100644 --- a/goal_src/jak2/engine/gfx/texture/texture-anim-tables.gc +++ b/goal_src/jak2/engine/gfx/texture/texture-anim-tables.gc @@ -12,4 +12,12 @@ (define-extern *skull-gem-texture-anim-array* texture-anim-array) (define-extern *waterfall-texture-anim-array* texture-anim-array) (define-extern *waterfall-b-texture-anim-array* texture-anim-array) -(define-extern *bomb-texture-anim-array* texture-anim-array) \ No newline at end of file +(define-extern *bomb-texture-anim-array* texture-anim-array) + +(defun set-fog-height! ((arg0 float)) + (none) + ) + +(defun set-cloud-minmax! ((a0-0 float) (a1-0 float)) + (none) + ) \ No newline at end of file diff --git a/goal_src/jak2/engine/target/board/target-board.gc b/goal_src/jak2/engine/target/board/target-board.gc index 18d100a25b..e8362e7fad 100644 --- a/goal_src/jak2/engine/target/board/target-board.gc +++ b/goal_src/jak2/engine/target/board/target-board.gc @@ -1060,7 +1060,7 @@ ) ) ) - (sparticle-launch-control-method-11 (-> self board part-control) (-> self control trans)) + (spawn (-> self board part-control) (-> self control trans)) (let ((t9-26 (method-of-object (-> self skel effect) effect-control-method-10))) 'effect-board-poof 0 diff --git a/goal_src/jak2/game.gp b/goal_src/jak2/game.gp index dd0aba8c02..04c7a7a5c1 100644 --- a/goal_src/jak2/game.gp +++ b/goal_src/jak2/game.gp @@ -667,6 +667,13 @@ "fort-entry-gate-ag" ) +;;;;;;;;;;;;;;;;;;;;; +;; COMMON +;;;;;;;;;;;;;;;;;;;;; + +(copy-gos + "daxter-highres-ag") + ;;;;;;;;;;;;;;;;;;;;; ;; PRISON ;;;;;;;;;;;;;;;;;;;;; @@ -684,7 +691,6 @@ (copy-textures 1578 1950 1579 2647) (copy-gos - "daxter-highres-ag" "prsn-torture-ag" "prsn-chair-shackle-ag" "prsn-hang-cell-ag" @@ -815,6 +821,27 @@ "ctysluma-vis" ) +;;;;;;;;;;;;;;;;;;;;; +;; VILLAGE 1 +;;;;;;;;;;;;;;;;;;;;; + +(cgo "VI1.DGO" "vi1.gd") +(copy-textures 3034 3037 3035 3038 3036 2761 3516) + +(copy-gos +"darkjak-highres-ag" +"metalkor-torso-ag" +"rift-ring-ag" +"vil-break-support-ag" +"intro-flamer-ag" +"rift-rider-donut-ag" +"vil-windmill-sail-ag" +"vil-windspinner-ag" +"vil-sagesail-ag" +"particleman-ag" +"village1-vis" +) + ;;;;;;;;;;;;;;;;;;;;; ;; ISO Group ;;;;;;;;;;;;;;;;;;;;; diff --git a/goal_src/jak2/kernel/gstate.gc b/goal_src/jak2/kernel/gstate.gc index 1529628934..788460e8a7 100644 --- a/goal_src/jak2/kernel/gstate.gc +++ b/goal_src/jak2/kernel/gstate.gc @@ -105,7 +105,7 @@ It type checks the arguments for the entry function. (with-gensyms (new-proc) `(let ((,new-proc (the-as ,proc-type (get-process ,from ,proc-type ,stack-size)))) (when ,new-proc - ((method-of-type ,proc-type activate) ,new-proc ,to ,(if name name `(symbol->string ,proc-type)) ,stack) + ((method-of-type ,proc-type activate) ,new-proc ,to ,(if name name `(symbol->string ',proc-type)) ,stack) (run-next-time-in-process ,new-proc ,func ,@args) (the (pointer ,proc-type) (-> ,new-proc ppointer)) ) @@ -120,7 +120,7 @@ It type checks the arguments for the entry function. (with-gensyms (new-proc) `(let ((,new-proc (the-as ,proc-type (get-process ,from ,proc-type ,stack-size)))) (when ,new-proc - ((method-of-type ,proc-type activate) ,new-proc ,to ,(if name name `(symbol->string ,proc-type)) ,stack) + ((method-of-type ,proc-type activate) ,new-proc ,to ,(if name name `(symbol->string ',proc-type)) ,stack) (run-now-in-process ,new-proc ,(if init init (string->symbol (fmt #f "{}-init-by-other" proc-type))) ,@args) (the (pointer ,proc-type) (-> ,new-proc ppointer)) ) diff --git a/goal_src/jak2/levels/common/elec-gate.gc b/goal_src/jak2/levels/common/elec-gate.gc index 5c233dede1..f5d02b43eb 100644 --- a/goal_src/jak2/levels/common/elec-gate.gc +++ b/goal_src/jak2/levels/common/elec-gate.gc @@ -739,10 +739,10 @@ (defmethod spawn-particles elec-gate ((obj elec-gate) (sparticle-lc sparticle-launch-control)) "TODO - Calls [[sparticle-launch-control::11]] on `part-spawner-left` and `part-spawner-right` if they are defined" (if (-> obj part-spawner-left) - (sparticle-launch-control-method-11 sparticle-lc (the-as vector (&-> (-> obj part-spawner-left child) 8))) + (spawn sparticle-lc (the-as vector (&-> (-> obj part-spawner-left child) 8))) ) (if (-> obj part-spawner-right) - (sparticle-launch-control-method-11 sparticle-lc (the-as vector (&-> (-> obj part-spawner-right child) 8))) + (spawn sparticle-lc (the-as vector (&-> (-> obj part-spawner-right child) 8))) ) 0 (none) diff --git a/scripts/decomp_progress.py b/scripts/decomp_progress.py index 755f2b9757..899ac87fb7 100644 --- a/scripts/decomp_progress.py +++ b/scripts/decomp_progress.py @@ -4,7 +4,7 @@ import argparse ### Script to track decompilation progress. -### Example usage: python3 scripts/decomp_progress.py ~/jak-project/goal_src +### Example usage: python3 scripts/decomp_progress.py ~/jak-project/goal_src/jak2 def get_goal_files(root_dir, ext = "*.gc"): """Get all GOAL source files under root_dir.""" @@ -29,7 +29,7 @@ def print_table(stats, total_gc_files): print("-------------------------------------") print("| {: <24} | {: >6} |".format("TOTAL", total_lines)) print("-------------------------------------") - estimated_lines = 500000 + estimated_lines = 1000000 print("Progress: {}/{} lines ({:.2f}%)".format(total_lines, estimated_lines, 100. * total_lines / estimated_lines)) print("{}/{} files modified from template ({:.2f}%)".format(len(stats), total_gc_files, 100. * len(stats) / total_gc_files)) @@ -41,8 +41,7 @@ def main(): args = parser.parse_args() all_files = get_goal_files(args.goal_src) - ref_files = get_goal_files(args.goal_src + "/../test/", "*_REF.gc") - + ref_files = get_goal_files(args.goal_src + "/../../test/decompiler/reference/jak2", "*_REF.gc") ref_files_no_ext = [os.path.basename(fn)[:-7] for fn in ref_files] diff --git a/test/decompiler/reference/jak2/engine/common_objs/base-plat_REF.gc b/test/decompiler/reference/jak2/engine/common_objs/base-plat_REF.gc index a1fcaca7e9..48f137d907 100644 --- a/test/decompiler/reference/jak2/engine/common_objs/base-plat_REF.gc +++ b/test/decompiler/reference/jak2/engine/common_objs/base-plat_REF.gc @@ -149,7 +149,7 @@ (defmethod execute-effects base-plat ((obj base-plat)) "Executes various ancillary tasks with the platform, such as spawning particles or playing the associated sound" (if (nonzero? (-> obj part)) - (sparticle-launch-control-method-11 (-> obj part) (-> obj root-override trans)) + (spawn (-> obj part) (-> obj root-override trans)) ) (when (nonzero? (-> obj sound)) (set! (-> obj sound trans quad) (-> obj root-override trans quad)) diff --git a/test/decompiler/reference/jak2/engine/gfx/mood/time-of-day_REF.gc b/test/decompiler/reference/jak2/engine/gfx/mood/time-of-day_REF.gc new file mode 100644 index 0000000000..1ed80206d4 --- /dev/null +++ b/test/decompiler/reference/jak2/engine/gfx/mood/time-of-day_REF.gc @@ -0,0 +1,697 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition for method 5 of type time-of-day-palette +;; WARN: Return type mismatch uint vs int. +(defmethod asize-of time-of-day-palette ((obj time-of-day-palette)) + (the-as int (+ (-> obj type size) (* (* (-> obj height) (-> obj width)) 4))) + ) + +;; definition for method 10 of type time-of-day-proc +(defmethod deactivate time-of-day-proc ((obj time-of-day-proc)) + (if (nonzero? (-> obj sun)) + (kill-and-free-particles (-> obj sun)) + ) + (if (nonzero? (-> obj green-sun)) + (kill-and-free-particles (-> obj green-sun)) + ) + (if (nonzero? (-> obj moon)) + (kill-and-free-particles (-> obj moon)) + ) + ((method-of-type process deactivate) obj) + (none) + ) + +;; failed to figure out what this is: +(if (zero? time-of-day-effect) + (set! time-of-day-effect nothing) + ) + +;; definition for function time-of-day-update +;; INFO: Used lq/sq +;; WARN: Return type mismatch int vs none. +(defbehavior time-of-day-update time-of-day-proc () + (time-of-day-effect) + (let ((gp-0 #t)) + (dotimes (v1-0 (-> *level* length)) + (let ((a0-3 (-> *level* level v1-0))) + (when (= (-> a0-3 status) 'active) + (if (-> a0-3 info use-camera-other) + (set! gp-0 #f) + ) + ) + ) + ) + (when (and (-> *setting-control* user-current weather) gp-0) + (let ((s5-0 (new 'stack-no-clear 'vector))) + (let ((s4-0 (new 'stack-no-clear 'vector)) + (v1-8 (-> *math-camera* inv-camera-rot vector 2)) + ) + (set! (-> s5-0 quad) (-> *math-camera* trans quad)) + (vector-! s4-0 s5-0 (-> *math-camera* prev-trans)) + (let ((f0-1 (vector-dot s4-0 v1-8))) + (vector+float*! s5-0 s5-0 v1-8 (* 25.0 f0-1)) + ) + ) + (set! (-> s5-0 y) (-> *math-camera* trans y)) + ) + (if (< 0.0 (-> *setting-control* user-current rain)) + (update-rain (the-as target (-> *setting-control* user-current rain))) + ) + (if (< 0.0 (-> *setting-control* user-current snow)) + (update-snow (the-as target (-> *setting-control* user-current snow))) + ) + ) + (cond + ((and (>= (-> self time-of-day) 6.25) + (and (< (-> self time-of-day) 18.75) (-> *time-of-day-context* sky) gp-0) + ) + (when (and *dproc* (zero? (-> self sun-count))) + (spawn (-> self sun) (math-camera-pos)) + (+! (-> self sun-count) 1) + ) + ) + ((> (-> self sun-count) 0) + (kill-and-free-particles (-> self sun)) + (set! (-> self sun-count) 0) + 0 + ) + ) + (cond + ((and (or (>= (-> self time-of-day) 21.75) (>= 10.25 (-> self time-of-day))) + (-> *time-of-day-context* sky) + gp-0 + ) + (when (and *dproc* (zero? (-> self green-sun-count))) + (spawn (-> self green-sun) (math-camera-pos)) + (+! (-> self green-sun-count) 1) + ) + ) + ((> (-> self green-sun-count) 0) + (kill-and-free-particles (-> self green-sun)) + (set! (-> self green-sun-count) 0) + 0 + ) + ) + (set! gp-0 (and (or (>= 7.0 (-> self time-of-day)) (>= (-> self time-of-day) 17.0)) + (and (-> *time-of-day-context* sky) gp-0) + ) + ) + (cond + (gp-0 + (when (and *dproc* (zero? (-> self moon-count))) + (spawn (-> self moon) (math-camera-pos)) + (+! (-> self moon-count) 1) + ) + ) + ((> (-> self moon-count) 0) + (kill-and-free-particles (-> self moon)) + (set! (-> self moon-count) 0) + 0 + ) + ) + ) + (update-time-and-speed *sky-work* (-> self time-of-day) (-> self time-ratio)) + 0 + (none) + ) + +;; definition for function update-counters +(defbehavior update-counters time-of-day-proc () + (let ((v1-2 (-> *display* bg-clock frame-counter))) + 0 + (let ((v1-3 (* 60 v1-2))) + (set! (-> self old-frame) (-> self current-frame)) + (set! (-> self current-frame) (the-as uint v1-3)) + (set! (-> self frames) (the-as uint v1-3)) + (set! (-> self hours) (/ v1-3 #x107ac0)) + (let ((v1-4 (- v1-3 (* #x107ac0 (-> self hours))))) + (set! (-> self minutes) (/ v1-4 #x4650)) + (let ((v1-5 (- v1-4 (* #x4650 (-> self minutes))))) + (set! (-> self seconds) (/ v1-5 300)) + (- v1-5 (* 300 (-> self seconds))) + ) + ) + ) + ) + (let ((f0-1 (* 0.0000009259259 (the float (mod (the-as int (-> self frames)) #x18b8200))))) + (set! (-> self time-of-day) f0-1) + (set! (-> *time-of-day-context* time) f0-1) + f0-1 + ) + ) + +;; failed to figure out what this is: +(defstate time-of-day-tick (time-of-day-proc) + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (let ((v1-0 event-type)) + (the-as + object + (cond + ((= v1-0 'change) + (case (-> event param 0) + (('ratio) + (let ((a0-5 (-> *display* bg-clock)) + (f0-0 (the-as float (-> event param 1))) + ) + (set! (-> self time-ratio) f0-0) + (set! (-> self dest-time-ratio) f0-0) + (update-rates! a0-5 f0-0) + ) + ) + (('hour) + (update-counters) + (let ((v1-7 (-> *display* bg-clock frame-counter)) + (a0-7 #x69780) + (a1-5 (/ (the int (* 1080000.0 (the float (-> event param 1)))) 60)) + ) + (set! (-> *display* bg-clock frame-counter) (+ (- v1-7 (the-as time-frame (mod v1-7 a0-7))) a0-7 a1-5)) + ) + (update-counters) + (-> self hours) + (kill-and-free-particles (-> self sun)) + (spawn (-> self sun) (math-camera-pos)) + (set! (-> self sun-count) 1) + (kill-and-free-particles (-> self green-sun)) + (spawn (-> self green-sun) (math-camera-pos)) + (set! (-> self green-sun-count) 1) + (kill-and-free-particles (-> self moon)) + (spawn (-> self moon) (math-camera-pos)) + (let ((v0-0 (the-as number 1))) + (set! (-> self moon-count) (the-as int v0-0)) + v0-0 + ) + ) + ) + ) + ((= v1-0 'ratio) + (-> self time-ratio) + ) + ((= v1-0 'day-length) + (if (= (-> self time-ratio) 0.0) + 0 + (/ 25920000.0 (-> self time-ratio)) + ) + ) + ((= v1-0 'time-frame) + (-> self frames) + ) + ((= v1-0 'time-of-day) + (-> self time-of-day) + ) + ((= v1-0 'time-of-day-norm) + (* 0.041666668 (-> self time-of-day)) + ) + ((= v1-0 'hour) + (-> self hours) + ) + ((= v1-0 'minute) + (-> self minutes) + ) + ((= v1-0 'second) + (-> self seconds) + ) + ((= v1-0 'dest-clock-ratio-set) + (set! (-> self dest-time-ratio) (the-as float (-> event param 0))) + (let ((f0-12 (-> self time-ratio)) + (f1-5 (-> self dest-time-ratio)) + (f2-1 (/ 300.0 (the float (-> event param 1)))) + ) + (set! (-> self dest-time-delta) (* (fabs (- f0-12 f1-5)) f2-1 (-> *display* real-clock seconds-per-frame))) + ) + (-> self dest-time-ratio) + ) + ) + ) + ) + ) + :code (behavior () + (until #f + (if (!= (-> self time-ratio) 0.0) + (set! (-> *time-of-day-context* mode) (time-of-day-palette-id unk3)) + ) + (when (!= (-> self time-ratio) (-> self dest-time-ratio)) + (seek! (-> self time-ratio) (-> self dest-time-ratio) (-> self dest-time-delta)) + (update-rates! (-> *display* bg-clock) (-> self time-ratio)) + ) + (update-counters) + (suspend) + ) + #f + (none) + ) + :post time-of-day-update + ) + +;; definition for function init-time-of-day +(defbehavior init-time-of-day time-of-day-proc () + (stack-size-set! (-> self main-thread) 128) + (set! (-> self hours) 0) + (set! (-> self minutes) 0) + (set! (-> self seconds) 0) + (set! (-> self frames) (the-as uint 0)) + (set! (-> self time-of-day) 0.0) + (cond + (*time-of-day-fast* + (set! (-> self time-ratio) 60.0) + (set! (-> self dest-time-ratio) 60.0) + ) + (else + (set! (-> self time-ratio) 1.0) + (set! (-> self dest-time-ratio) 1.0) + ) + ) + (update-rates! (-> *display* bg-clock) (-> self time-ratio)) + (set! (-> self sun) (create-launch-control (-> *part-group-id-table* 3) self)) + (set! (-> self green-sun) (create-launch-control (-> *part-group-id-table* 4) self)) + (set! (-> self moon) (create-launch-control (-> *part-group-id-table* 5) self)) + (set! (-> self event-hook) (-> time-of-day-tick event)) + (go time-of-day-tick) + ) + +;; definition for function start-time-of-day +;; WARN: Return type mismatch (pointer time-of-day-proc) vs (pointer process). +(defun start-time-of-day () + (kill-by-name "time-of-day-proc" *active-pool*) + (set! *time-of-day* (process-spawn time-of-day-proc :init init-time-of-day :to *bg-pool*)) + (the-as (pointer process) *time-of-day*) + ) + +;; definition for function time-of-day-setup +(defun time-of-day-setup ((arg0 symbol)) + (when arg0 + (when (= (-> *time-of-day* 0 time-ratio) 0.0) + (send-event (ppointer->process *time-of-day*) 'change 'ratio (if *time-of-day-fast* + #x42700000 + #x3f800000 + ) + ) + (set! (-> *time-of-day-context* mode) (time-of-day-palette-id unk3)) + ) + ) + (!= (-> *time-of-day* 0 time-ratio) 0.0) + ) + +;; definition for function time-of-day-interp-colors +;; ERROR: function was not converted to expressions. Cannot decompile. + +;; definition for function time-of-day-interp-colors-scratch +;; ERROR: function was not converted to expressions. Cannot decompile. + +;; definition for function init-time-of-day-context +(defun init-time-of-day-context ((arg0 time-of-day-context)) + (set-vector! (-> arg0 title-light-group dir0 color) 0.82 0.82 0.82 1.0) + (set-vector! (-> arg0 title-light-group dir1 color) 2.0 2.0 2.0 1.0) + (set-vector! (-> arg0 title-light-group ambi color) 0.4 0.4 0.4 1.0) + (set! (-> arg0 title-light-group dir0 extra x) 1.0) + (set! (-> arg0 title-light-group dir1 extra x) 1.0) + (set! (-> arg0 title-light-group ambi extra x) 1.0) + (set-vector! (-> arg0 filter-color) 1.0 1.0 1.0 1.0) + (set! (-> arg0 overide-enable) #f) + (when *debug-segment* + (mem-copy! (the-as pointer *overide-mood-color-table*) (the-as pointer *no-cloud-mood-color-table*) 256) + (mem-copy! (the-as pointer *overide-mood-fog-table*) (the-as pointer *no-cloud-clear-mood-fog-table*) 384) + (dotimes (v1-8 8) + (set! (-> *overide-mood-color-table* data v1-8 lgt-color w) 1.0) + (set! (-> *overide-mood-color-table* data v1-8 amb-color w) 1.0) + (set! (-> *overide-mood-fog-table* data v1-8 fog-color w) 1.0) + (set! (-> *overide-mood-fog-table* data v1-8 fog-dists x) + (* 0.00024414062 (-> *overide-mood-fog-table* data v1-8 fog-dists x)) + ) + (set! (-> *overide-mood-fog-table* data v1-8 fog-dists y) + (* 0.00024414062 (-> *overide-mood-fog-table* data v1-8 fog-dists y)) + ) + (set-vector! (-> *time-of-day-context* times v1-8) 1.0 1.0 1.0 1.0) + ) + #f + ) + ) + +;; definition for function set-filter-color! +;; WARN: Return type mismatch int vs none. +(defun set-filter-color! ((arg0 float) (arg1 float) (arg2 float)) + (set-vector! (-> *time-of-day-context* filter-color) arg0 arg1 arg2 1.0) + 0 + (none) + ) + +;; definition for function tod-madd! +(defun tod-madd! ((arg0 vector) (arg1 vector) (arg2 vector)) + (local-vars (v0-0 float)) + (rlet ((acc :class vf) + (vf0 :class vf) + (vf4 :class vf) + (vf5 :class vf) + (vf6 :class vf) + ) + (init-vf0-vector) + (.mov vf6 arg2) + (.lvf vf4 (&-> arg0 quad)) + (.lvf vf5 (&-> arg1 quad)) + (.mul.w.vf acc vf4 vf0) + (.add.mul.x.vf vf4 vf5 vf6 acc) + (.svf (&-> arg0 quad) vf4) + (.mov v0-0 vf4) + v0-0 + ) + ) + +;; definition for function update-environment-colors +(defun update-environment-colors ((arg0 time-of-day-context)) + (let* ((v1-0 (-> arg0 light-group)) + (s4-0 (-> v1-0 0 ambi color)) + (s5-0 (new 'stack-no-clear 'vector)) + ) + (let ((s2-0 (-> arg0 current-prt-color)) + (s3-0 (-> arg0 current-env-color)) + ) + (vector4-lerp! s5-0 (-> v1-0 0 dir0 color) (-> v1-0 0 dir1 color) (-> v1-0 0 dir1 extra x)) + (when (and (= (-> s2-0 x) 0.0) (= (-> s2-0 y) 0.0) (= (-> s2-0 z) 0.0)) + (set! (-> s2-0 x) (* 0.5 (+ (-> s4-0 x) (* 0.5 (+ (-> s4-0 x) (-> s5-0 x)))))) + (set! (-> s2-0 y) (* 0.5 (+ (-> s4-0 y) (* 0.5 (+ (-> s4-0 y) (-> s5-0 y)))))) + (set! (-> s2-0 z) (* 0.5 (+ (-> s4-0 z) (* 0.5 (+ (-> s4-0 z) (-> s5-0 z)))))) + (set! (-> s2-0 w) 1.0) + ) + (when (and (= (-> s3-0 x) 0.0) (= (-> s3-0 y) 0.0) (= (-> s3-0 z) 0.0)) + (set! (-> s3-0 x) (* 48.0 (+ (-> s5-0 x) (* 0.5 (+ (-> s4-0 x) (-> s5-0 x)))))) + (set! (-> s3-0 y) (* 48.0 (+ (-> s5-0 y) (* 0.5 (+ (-> s4-0 y) (-> s5-0 y)))))) + (set! (-> s3-0 z) (* 48.0 (+ (-> s5-0 z) (* 0.5 (+ (-> s4-0 z) (-> s5-0 z)))))) + (set! (-> s3-0 w) 128.0) + ) + ) + (let* ((f0-23 (fmax (fmax (-> s4-0 x) (-> s4-0 y)) (-> s4-0 z))) + (f2-14 (fmax (fmax (-> s5-0 x) (-> s5-0 y)) (-> s5-0 z))) + (f0-27 (fmin 0.85 (- 1.0 (/ (* 0.5 f2-14) (+ f0-23 f2-14))))) + (v0-1 (-> arg0 current-shadow-color)) + ) + (set! (-> v0-1 x) f0-27) + (set! (-> v0-1 y) f0-27) + (set! (-> v0-1 z) f0-27) + (set! (-> v0-1 w) 1.0) + v0-1 + ) + ) + ) + +;; definition for function update-time-of-day +;; INFO: Used lq/sq +;; WARN: Return type mismatch int vs none. +(defun update-time-of-day ((arg0 time-of-day-context)) + (with-pp + (set! (-> arg0 exterior-level) #f) + (init-weather! *mood-control*) + (update-colors-for-time *sky-work* (-> arg0 time)) + (cond + ((-> arg0 overide-enable) + (mem-copy! (the-as pointer (-> *overide-table* mood-fog-table)) (the-as pointer *overide-mood-fog-table*) 384) + (mem-copy! + (the-as pointer (-> *overide-table* mood-color-table)) + (the-as pointer *overide-mood-color-table*) + 256 + ) + (dotimes (v1-7 8) + (vector-float*! + (the-as vector (-> *overide-table* mood-fog-table data v1-7)) + (the-as vector (-> *overide-table* mood-fog-table data v1-7)) + (-> *overide-table* mood-fog-table data v1-7 fog-color w) + ) + (vector-float*! + (the-as vector (-> *overide-table* mood-color-table data v1-7)) + (the-as vector (-> *overide-table* mood-color-table data v1-7)) + (-> *overide-table* mood-color-table data v1-7 lgt-color w) + ) + (vector-float*! + (the-as vector (+ (the-as uint (-> *overide-table* mood-color-table data 0 amb-color)) (* v1-7 32))) + (the-as vector (+ (the-as uint (-> *overide-table* mood-color-table data 0 amb-color)) (* v1-7 32))) + (-> *overide-table* mood-color-table data v1-7 amb-color w) + ) + (set! (-> *overide-table* mood-fog-table data v1-7 fog-color w) 128.0) + (set! (-> *overide-table* mood-color-table data v1-7 lgt-color w) 0.0) + (set! (-> *overide-table* mood-fog-table data v1-7 fog-dists x) + (* 4096.0 (-> *overide-table* mood-fog-table data v1-7 fog-dists x)) + ) + (set! (-> *overide-table* mood-fog-table data v1-7 fog-dists y) + (* 4096.0 (-> *overide-table* mood-fog-table data v1-7 fog-dists y)) + ) + ) + (let ((s5-0 (-> *level* default-level mood-context))) + (clear-mood-times s5-0) + (update-mood-exterior s5-0 *overide-table* (-> arg0 time) 6) + (update-mood-itimes s5-0) + ) + ) + (else + (let ((s5-1 *mood-control*)) + (set! (-> arg0 current-clouds cloud-min) (-> s5-1 mood-clouds cloud-min)) + (set! (-> arg0 current-clouds cloud-max) (-> s5-1 mood-clouds cloud-max)) + (let ((s4-0 (-> *level* default-level mood-context))) + (clear-mood-times s4-0) + (update-mood-exterior s4-0 s5-1 (-> arg0 time) 6) + (update-mood-itimes s4-0) + ) + ) + ) + ) + (vector-float*! (-> arg0 filter) (-> arg0 filter-color) (-> arg0 filter-color w)) + (set! (-> arg0 sky) #f) + (set! (-> arg0 use-camera-other) #f) + (set! (-> arg0 target-interp) 0.0) + (let ((f0-16 4096000.0)) + (dotimes (v1-19 (-> *level* length)) + (let ((a0-50 (-> *level* level v1-19))) + (when (= (-> a0-50 status) 'active) + (if (-> a0-50 info sky) + (set! (-> arg0 sky) #t) + ) + (if (-> a0-50 info use-camera-other) + (set! (-> arg0 use-camera-other) (the-as basic #t)) + ) + (set! f0-16 (fmin f0-16 (-> a0-50 info fog-height))) + ) + ) + ) + (set-fog-height! f0-16) + ) + (if (-> arg0 sky) + (set! (-> (&-> *level* default-level texture-anim-array 9) 0) *sky-texture-anim-array*) + (set! (-> (&-> *level* default-level texture-anim-array 9) 0) #f) + ) + (let ((s5-2 (level-get-target-inside *level*))) + (dotimes (s4-1 6) + (let ((s3-0 (-> *level* level s4-1))) + (case (-> s3-0 status) + (('active 'loaded) + (when (not (paused?)) + (cond + ((= s3-0 s5-2) + (if *teleport* + (set! (-> arg0 interp s4-1) 1.0) + (set! (-> arg0 interp s4-1) (fmin 1.0 (+ 0.0166 (-> arg0 interp s4-1)))) + ) + ) + (*teleport* + (set! (-> arg0 interp s4-1) 0.0) + ) + (else + (set! (-> arg0 interp s4-1) (fmax 0.0 (+ -0.0166 (-> arg0 interp s4-1)))) + ) + ) + ) + (let ((s2-0 (-> pp clock))) + (set! (-> pp clock) (-> *display* real-clock)) + (clear-mood-times (-> s3-0 mood-context)) + ((-> s3-0 mood-func) (-> s3-0 mood-context) (-> arg0 time) s4-1) + (when (-> arg0 overide-enable) + (let ((s1-0 (new 'stack-no-clear 'structure))) + (dotimes (s0-0 8) + (let ((a1-48 (-> s3-0 mood-context times s0-0))) + (vector-float*! (the-as vector s1-0) (-> arg0 times s0-0) (-> arg0 times s0-0 w)) + (vector4-mul! (the-as vector4 a1-48) (the-as vector4 a1-48) (the-as vector4 s1-0)) + ) + ) + ) + ) + (update-mood-itimes (-> s3-0 mood-context)) + (set! (-> pp clock) s2-0) + ) + ) + (else + (set! (-> arg0 interp s4-1) 0.0) + ) + ) + ) + ) + ) + (if (and (-> arg0 exterior-level) (!= (-> *mood-control* lightning-flash) 0.0)) + (set! (-> *display* force-sync) (the-as uint 2)) + ) + (let ((f0-27 0.0)) + (dotimes (v1-79 6) + (+! f0-27 (-> arg0 interp v1-79)) + ) + (when (!= f0-27 0.0) + (dotimes (v1-83 6) + (set! (-> arg0 interp v1-83) (/ (-> arg0 interp v1-83) f0-27)) + ) + (let ((v1-86 (-> arg0 current-fog))) + (dotimes (a0-76 103) + (set! (-> (the-as (pointer int128) (+ (* a0-76 16) (the-as int v1-86)))) 0) + ) + ) + (let ((s5-3 (-> arg0 current-fog)) + (s4-2 (-> *mood-control* range)) + ) + (set! (-> s4-2 quad) (the-as uint128 0)) + (set! (-> arg0 max-rain) 0.0) + (set! (-> arg0 fog-mult) 0.0) + (set! (-> arg0 ocean-alpha) 0.0) + (dotimes (s3-1 6) + (let ((f30-0 (-> arg0 interp s3-1)) + (s2-1 *level*) + ) + (when (!= f30-0 0.0) + (let ((a2-20 (+ (the-as uint (-> s2-1 level0 mood-context)) (* 5232 s3-1)))) + (vector4-array-madd! + (the-as (inline-array vector4) s5-3) + (the-as (inline-array vector4) s5-3) + (the-as (inline-array vector4) a2-20) + f30-0 + 103 + ) + ) + (let ((a2-21 (-> s2-1 level s3-1 info mood-range))) + (vector4-madd! (the-as vector4 s4-2) (the-as vector4 s4-2) (the-as vector4 a2-21) f30-0) + ) + (+! (-> arg0 max-rain) (* (-> s2-1 level s3-1 info max-rain) f30-0)) + (+! (-> arg0 fog-mult) (* (-> s2-1 level s3-1 info fog-mult) f30-0)) + (+! (-> arg0 ocean-alpha) (* (-> s2-1 level s3-1 info ocean-alpha) f30-0)) + ) + ) + ) + ) + (dotimes (s5-4 8) + (dotimes (s4-3 3) + (let ((v1-119 (+ (+ (* 48 s4-3) 140 (* 192 s5-4)) (the-as int arg0)))) + (vector-normalize! (the-as vector (+ v1-119 0)) 1.0) + ) + ) + ) + ) + ) + (if (and (-> arg0 overide-enable) (!= (-> *time-of-day-context* mode) 8)) + (mem-copy! + (the-as pointer (-> arg0 current-fog)) + (the-as + pointer + (-> *overide-table* + mood-fog-table + data + (the-as uint (logand (-> *time-of-day-context* mode) (time-of-day-palette-id unk0 unk1 unk2))) + ) + ) + 48 + ) + ) + (update-environment-colors arg0) + (let ((v1-134 (-> arg0 current-fog))) + (let ((a0-87 (-> v1-134 fog-color))) + (set! *fog-color* + (new 'static 'rgba :r (the int (-> a0-87 x)) :g (the int (-> a0-87 y)) :b (the int (-> a0-87 z))) + ) + (set! (-> *fog-texture-work* color) + (the-as + uint + (logior (logior (logior (shr (shl (the int (-> a0-87 z)) 56) 40) (shr (shl (the int (-> a0-87 y)) 56) 48)) + (shr (shl (the int (-> a0-87 x)) 56) 56) + ) + (shr (shl (the int (-> a0-87 x)) 56) 56) + ) + ) + ) + ) + (let ((a0-92 (-> v1-134 erase-color))) + (set! (-> arg0 erase-color) + (new 'static 'rgba :a #x80 :b (the int (-> a0-92 z)) :g (the int (-> a0-92 y)) :r (the int (-> a0-92 x))) + ) + ) + (let ((f0-58 (-> v1-134 fog-dists x)) + (f1-18 (-> v1-134 fog-dists y)) + ) + (let ((f3-0 (-> v1-134 fog-dists z)) + (f2-2 (-> v1-134 fog-dists w)) + ) + (set! (-> *math-camera* fog-start) f0-58) + (set! (-> *math-camera* fog-end) f1-18) + (set! (-> *math-camera* fog-max) f3-0) + (set! (-> *math-camera* fog-min) f2-2) + (set! (-> *fog-texture-work* alpha-near) (* 0.003921569 (the float (- 255 (the int f3-0))))) + (set! (-> *fog-texture-work* alpha-far) (* 0.003921569 (the float (- 255 (the int f2-2))))) + ) + (set! (-> *fog-texture-work* alpha-delta) + (- (-> *fog-texture-work* alpha-far) (-> *fog-texture-work* alpha-near)) + ) + (set! (-> *fog-texture-work* fog-near) f0-58) + (set! (-> *fog-texture-work* fog-far) f1-18) + (set! (-> *fog-texture-work* fog-delta) (- f1-18 f0-58)) + ) + ) + (set-cloud-minmax! (-> arg0 current-clouds cloud-min) (-> arg0 current-clouds cloud-max)) + (reset! *palette-fade-controls*) + 0 + (none) + ) + ) + +;; definition for function calc-fade-from-fog +(defun calc-fade-from-fog ((arg0 vector)) + (let* ((f0-0 (vector-vector-distance (math-camera-pos) arg0)) + (v1-1 (-> *time-of-day-context* current-fog)) + (f1-0 (-> v1-1 fog-dists x)) + (f2-0 (-> v1-1 fog-dists y)) + (f3-1 (* 0.003921569 (-> v1-1 fog-dists w))) + (f4-2 (* 0.003921569 (-> v1-1 fog-dists z))) + ) + (+ f4-2 (* (fmax 0.0 (fmin 1.0 (/ (- f0-0 f1-0) (- f2-0 f1-0)))) (- f3-1 f4-2))) + ) + ) + +;; definition for method 10 of type palette-fade-controls +;; INFO: Used lq/sq +(defmethod set-fade! palette-fade-controls ((obj palette-fade-controls) (arg0 int) (arg1 float) (arg2 float) (arg3 vector)) + (cond + ((and (>= arg0 0) (< arg0 8)) + (let ((v1-3 (-> obj control arg0))) + (when (< arg2 (-> v1-3 actor-dist)) + (if arg3 + (set! (-> v1-3 trans quad) (-> arg3 quad)) + ) + (set! (-> v1-3 fade) (fmax 0.0 (fmin 1.993 arg1))) + (set! (-> v1-3 actor-dist) arg2) + ) + ) + ) + (else + (format 0 "ERROR: Bogus palette-fade-control index!~%") + ) + ) + ) + +;; definition for method 9 of type palette-fade-controls +;; WARN: Return type mismatch int vs none. +(defmethod reset! palette-fade-controls ((obj palette-fade-controls)) + (countdown (v1-0 8) + (let ((a1-2 (-> obj control v1-0))) + (set! (-> a1-2 fade) 0.0) + (set! (-> a1-2 actor-dist) 4096000000.0) + ) + ) + 0 + (none) + ) + +;; failed to figure out what this is: +(start-time-of-day) + + + + diff --git a/test/decompiler/reference/jak2/engine/gfx/sky/sky-h_REF.gc b/test/decompiler/reference/jak2/engine/gfx/sky/sky-h_REF.gc index 1908fa15ba..7ee1353682 100644 --- a/test/decompiler/reference/jak2/engine/gfx/sky/sky-h_REF.gc +++ b/test/decompiler/reference/jak2/engine/gfx/sky/sky-h_REF.gc @@ -444,8 +444,8 @@ (:methods (init-sun-data! (_type_ int float float float) none 9) (init-orbit-settings! (_type_ int float float float float float float) none 10) - (sky-work-method-11 () none 11) - (sky-work-method-12 () none 12) + (update-colors-for-time (_type_ float) none 11) + (update-time-and-speed (_type_ float float) none 12) (draw (_type_) none 13) (sky-work-method-14 () none 14) (sky-work-method-15 () none 15) diff --git a/test/decompiler/reference/jak2/engine/gfx/sprite/particles/sparticle-launcher-h_REF.gc b/test/decompiler/reference/jak2/engine/gfx/sprite/particles/sparticle-launcher-h_REF.gc index f42430d669..39987b36b3 100644 --- a/test/decompiler/reference/jak2/engine/gfx/sprite/particles/sparticle-launcher-h_REF.gc +++ b/test/decompiler/reference/jak2/engine/gfx/sprite/particles/sparticle-launcher-h_REF.gc @@ -273,7 +273,7 @@ (:methods (initialize (_type_ sparticle-launch-group process) none 9) (sparticle-launch-control-method-10 (_type_ vector) symbol 10) - (sparticle-launch-control-method-11 (_type_ vector) none 11) + (spawn (_type_ vector) none 11) (sparticle-launch-control-method-12 (_type_ matrix) none 12) (sparticle-launch-control-method-13 (_type_ cspace) none 13) (kill-and-free-particles (_type_) none 14) 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 31b1463ed6..edd52bf81e 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 @@ -1332,7 +1332,7 @@ ) ) ) - (sparticle-launch-control-method-11 obj (-> arg0 trans)) + (spawn obj (-> arg0 trans)) (none) ) @@ -1380,12 +1380,203 @@ ) ) ) - (sparticle-launch-control-method-11 obj (vector<-cspace! (-> obj origin trans) arg0)) + (spawn obj (vector<-cspace! (-> obj origin trans) arg0)) (none) ) ;; definition for method 11 of type sparticle-launch-control -;; ERROR: function was not converted to expressions. Cannot decompile. +;; INFO: Used lq/sq +;; WARN: Return type mismatch int vs none. +;; WARN: Function (method 11 sparticle-launch-control) has a return type of none, but the expression builder found a return statement. +(defmethod spawn sparticle-launch-control ((obj sparticle-launch-control) (arg0 vector)) + (with-pp + (set! (-> obj origin trans quad) (-> arg0 quad)) + (if (not (or (sparticle-launch-control-method-10 obj arg0) + (logtest? (-> obj group flags) (sp-group-flag always-draw screen-space)) + ) + ) + (return 0) + ) + (let ((s4-0 (the-as int (-> pp clock frame-counter))) + (s5-0 (-> obj last-spawn-time)) + ) + (let ((v1-10 (-> *display* real-frame-clock integral-frame-counter))) + (if (!= v1-10 (+ (-> obj last-spawn-frame) 1)) + (set! s5-0 (the-as int (- (the-as time-frame s4-0) (logand (the-as int (-> pp clock sparticle-data x)) 255)))) + ) + ) + (set! (-> obj last-spawn-frame) (the-as int (-> *display* real-frame-clock integral-frame-counter))) + (set! (-> obj last-spawn-time) s4-0) + (when (logtest? (-> obj group flags) (sp-group-flag use-local-clock)) + (set! s5-0 (-> obj local-clock)) + (+! (-> obj local-clock) (logand (the-as int (-> pp clock sparticle-data x)) 255)) + (set! s4-0 (-> obj local-clock)) + ) + (let* ((f30-0 (vector-vector-distance arg0 (math-camera-pos))) + (v1-26 1) + (a0-13 *time-of-day*) + (s3-1 (ash v1-26 (if a0-13 + (-> a0-13 0 hours) + 0 + ) + ) + ) + ) + (if (nonzero? (-> obj matrix)) + (set! f30-0 0.0) + ) + (let ((s2-1 (-> obj length))) + (b! #t cfg-95 :delay (nop!)) + (label cfg-19) + (+! s2-1 -1) + (let* ((a3-0 (-> obj data s2-1)) + (v1-33 (-> a3-0 group-item)) + (a1-4 (-> *part-id-table* (-> v1-33 launcher))) + ) + (b! + (not (and a1-4 (nonzero? a1-4) (logtest? (-> a3-0 flags) (sp-launch-state-flags launcher-active)))) + cfg-95 + :delay (empty-form) + ) + (let* ((f1-3 (if (!= (-> v1-33 falloff-to) 0.0) + (- 1.0 (/ f30-0 (-> v1-33 falloff-to))) + 1.0 + ) + ) + (f0-5 f1-3) + ) + (let ((a0-25 sparticle-launcher)) + (b! (!= (-> a1-4 type) a0-25) cfg-94 :delay (nop!)) + ) + (b! (not (logtest? (-> v1-33 flags) (sp-group-item-flag launch-asap))) cfg-42 :delay (nop!)) + (when (not (logtest? (-> a3-0 flags) (sp-launch-state-flags particles-active))) + (set! (-> a3-0 spawn-time) (the-as uint s4-0)) + (logior! (-> a3-0 flags) (sp-launch-state-flags particles-active)) + (when (< 0.0 f0-5) + (b! (not (logtest? (-> v1-33 flags) (sp-group-item-flag bit7))) cfg-37 :delay (nop!)) + (let ((t9-3 sp-launch-particles-var)) + (b! (not (logtest? (-> v1-33 flags) (sp-group-item-flag is-3d))) cfg-35 :delay (nop!)) + (let ((a0-36 *sp-particle-system-3d*)) + (b! #t cfg-36 :delay (nop!)) + (label cfg-35) + (set! a0-36 *sp-particle-system-2d*) + (label cfg-36) + (t9-3 a0-36 a1-4 (-> obj origin) a3-0 obj f0-5) + ) + ) + (b! #t cfg-41 :delay (nop!)) + (label cfg-37) + (let ((t9-4 sp-launch-particles-var) + (a0-38 (if (logtest? (-> v1-33 flags) (sp-group-item-flag is-3d)) + *sp-particle-system-3d* + *sp-particle-system-2d* + ) + ) + (a2-4 *launch-matrix*) + ) + (set! (-> a2-4 trans quad) (-> a3-0 center quad)) + (t9-4 a0-38 a1-4 a2-4 a3-0 obj f0-5) + ) + ) + ) + (label cfg-41) + (b! #t cfg-93 :delay (nop!)) + (label cfg-42) + (when (or (logtest? s3-1 (-> v1-33 hour-mask)) + (not (or (= (-> v1-33 fade-after) 0.0) (< f30-0 (-> v1-33 fade-after)))) + ) + 0 + (goto cfg-93) + ) + (b! (nonzero? (-> v1-33 period)) cfg-59 :delay (empty-form)) + (if (not (logtest? (-> v1-33 flags) (sp-group-item-flag bit6))) + (set! f0-5 (* 0.2 (the float (- s4-0 s5-0)) f0-5)) + ) + (b! #t cfg-81 :delay (nop!)) + (label cfg-59) + 0 + 0 + (let* ((a2-5 (-> v1-33 length)) + (a0-57 (-> v1-33 period)) + (t0-10 (mod (+ (- s5-0 (the-as int (-> obj data s2-1 offset))) a0-57) (the-as int a0-57))) + (a0-58 (mod (the-as uint (+ (- s4-0 (the-as int (-> obj data s2-1 offset))) a0-57)) a0-57)) + ) + (set! f0-5 (cond + ((and (< t0-10 (the-as int a2-5)) (< (the-as int a0-58) (the-as int a2-5))) + (* 0.2 (the float (- s4-0 s5-0)) f0-5) + ) + ((and (< t0-10 (the-as int a2-5)) (>= (the-as int a0-58) (the-as int a2-5))) + (* 0.2 (the float (- a2-5 (the-as uint t0-10))) f0-5) + ) + ((and (>= t0-10 (the-as int a2-5)) (< (the-as int a0-58) (the-as int a2-5))) + (* 0.2 (the float a0-58) f0-5) + ) + (else + (when (not (logtest? (-> v1-33 flags) (sp-group-item-flag bit1))) + 0 + (goto cfg-93) + ) + (when (< (the-as uint (- s4-0 (the-as int (-> obj data s2-1 spawn-time)))) (-> v1-33 period)) + 0 + (goto cfg-93) + ) + (set! (-> obj data s2-1 offset) (- (-> v1-33 period) a0-58)) + (* 0.2 (the float (- s4-0 s5-0)) f0-5) + ) + ) + ) + ) + (label cfg-81) + (set! (-> a3-0 spawn-time) (the-as uint s4-0)) + (logior! (-> a3-0 flags) (sp-launch-state-flags particles-active)) + (when (< 0.0 f0-5) + (if (logtest? (-> v1-33 flags) (sp-group-item-flag bit6)) + (set! f0-5 f1-3) + ) + (cond + ((logtest? (-> v1-33 flags) (sp-group-item-flag bit7)) + (sp-launch-particles-var + (if (logtest? (-> v1-33 flags) (sp-group-item-flag is-3d)) + *sp-particle-system-3d* + *sp-particle-system-2d* + ) + a1-4 + (-> obj origin) + a3-0 + obj + f0-5 + ) + ) + (else + (let ((t9-6 sp-launch-particles-var) + (a0-83 (if (logtest? (-> v1-33 flags) (sp-group-item-flag is-3d)) + *sp-particle-system-3d* + *sp-particle-system-2d* + ) + ) + (a2-22 *launch-matrix*) + ) + (set! (-> a2-22 trans quad) (-> a3-0 center quad)) + (t9-6 a0-83 a1-4 a2-22 a3-0 obj f0-5) + ) + ) + ) + ) + ) + ) + (label cfg-93) + (b! #t cfg-95 :delay (nop!)) + (label cfg-94) + (format 0 "spawn called for non-sparticle-launcher~%") + (label cfg-95) + (b! (nonzero? s2-1) cfg-19 :delay (nop!)) + ) + ) + ) + 0 + (none) + ) + ) ;; definition for function execute-part-engine ;; INFO: Used lq/sq diff --git a/test/decompiler/reference/jak2/engine/gfx/texture/texture-anim-h_REF.gc b/test/decompiler/reference/jak2/engine/gfx/texture/texture-anim-h_REF.gc index 79e31cd478..f499b558b9 100644 --- a/test/decompiler/reference/jak2/engine/gfx/texture/texture-anim-h_REF.gc +++ b/test/decompiler/reference/jak2/engine/gfx/texture/texture-anim-h_REF.gc @@ -82,22 +82,22 @@ ;; definition of type texture-anim (deftype texture-anim (structure) - ((num-layers uint32 :offset-assert 0) - (func basic :offset-assert 4) - (func-id basic :offset 4) - (init-func basic :offset-assert 8) - (init-func-id basic :offset 8) - (tex basic :offset-assert 12) - (tex-name basic :offset-assert 16) - (extra vector :inline :offset-assert 32) - (color uint32 :offset-assert 48) - (frame-time float :offset-assert 52) - (frame-delta float :offset-assert 56) - (frame-mod float :offset-assert 60) - (test uint64 :offset-assert 64) - (alpha uint64 :offset-assert 72) - (clamp uint64 :offset-assert 80) - (data uint8 :dynamic :offset-assert 88) + ((num-layers uint32 :offset-assert 0) + (func basic :offset-assert 4) + (func-id basic :offset 4) + (init-func basic :offset-assert 8) + (init-func-id basic :offset 8) + (tex basic :offset-assert 12) + (tex-name basic :offset-assert 16) + (extra vector :inline :offset-assert 32) + (color rgba :offset-assert 48) + (frame-time float :offset-assert 52) + (frame-delta float :offset-assert 56) + (frame-mod float :offset-assert 60) + (test gs-test :offset-assert 64) + (alpha gs-alpha :offset-assert 72) + (clamp gs-clamp :offset-assert 80) + (data texture-anim-layer :dynamic :offset-assert 88) ) :method-count-assert 11 :size-assert #x58 @@ -464,7 +464,3 @@ ;; failed to figure out what this is: 0 - - - - diff --git a/test/decompiler/reference/jak2/engine/target/board/target-board_REF.gc b/test/decompiler/reference/jak2/engine/target/board/target-board_REF.gc index 53aeca4cc3..256a4481f6 100644 --- a/test/decompiler/reference/jak2/engine/target/board/target-board_REF.gc +++ b/test/decompiler/reference/jak2/engine/target/board/target-board_REF.gc @@ -1044,7 +1044,7 @@ ) ) ) - (sparticle-launch-control-method-11 (-> self board part-control) (-> self control trans)) + (spawn (-> self board part-control) (-> self control trans)) (let ((t9-26 (method-of-object (-> self skel effect) effect-control-method-10))) 'effect-board-poof 0 diff --git a/test/decompiler/reference/jak2/levels/common/elec-gate_REF.gc b/test/decompiler/reference/jak2/levels/common/elec-gate_REF.gc index f030fd69d1..7575d3c12e 100644 --- a/test/decompiler/reference/jak2/levels/common/elec-gate_REF.gc +++ b/test/decompiler/reference/jak2/levels/common/elec-gate_REF.gc @@ -816,10 +816,10 @@ (defmethod spawn-particles elec-gate ((obj elec-gate) (sparticle-lc sparticle-launch-control)) "TODO - Calls [[sparticle-launch-control::11]] on `part-spawner-left` and `part-spawner-right` if they are defined" (if (-> obj part-spawner-left) - (sparticle-launch-control-method-11 sparticle-lc (the-as vector (&-> (-> obj part-spawner-left child) 8))) + (spawn sparticle-lc (the-as vector (&-> (-> obj part-spawner-left child) 8))) ) (if (-> obj part-spawner-right) - (sparticle-launch-control-method-11 sparticle-lc (the-as vector (&-> (-> obj part-spawner-right child) 8))) + (spawn sparticle-lc (the-as vector (&-> (-> obj part-spawner-right child) 8))) ) 0 (none) diff --git a/test/offline/config/jak2/config.jsonc b/test/offline/config/jak2/config.jsonc index c7d3a562f4..90b26401c1 100644 --- a/test/offline/config/jak2/config.jsonc +++ b/test/offline/config/jak2/config.jsonc @@ -167,6 +167,7 @@ "(method 21 load-state)", "(method 16 level)", "unpack-comp-lzo", // asm mods + "update-time-of-day", "i-hopefully-will-never-exist-dont-add-anything-after-me-please" ], From 405a1448159174ba4bc5c711279851dc2da59221 Mon Sep 17 00:00:00 2001 From: water111 <48171810+water111@users.noreply.github.com> Date: Sat, 8 Oct 2022 17:02:40 -0400 Subject: [PATCH 10/10] [decomp] finish up debug.gc, get boundary rendering working (#1944) ![image](https://user-images.githubusercontent.com/48171810/194726152-74167185-0297-4982-8ed9-42936ad80fe7.png) --- common/util/Assert.h | 5 + decompiler/analysis/mips2c.cpp | 20 +- decompiler/config/jak2/all-types.gc | 18 +- decompiler/config/jak2/hacks.jsonc | 7 +- decompiler/config/jak2/label_types.jsonc | 4 +- decompiler/config/jak2/type_casts.jsonc | 14 + decompiler/config/jak2/var_names.jsonc | 6 + game/CMakeLists.txt | 1 + game/mips2c/jak2_functions/debug.cpp | 457 +++++++++++++ game/mips2c/jak2_functions/sky.cpp | 599 ++++++++++++++++++ game/mips2c/jak2_functions/sky.h | 14 + game/mips2c/mips2c_private.h | 6 + game/mips2c/mips2c_table.cpp | 12 +- goal_src/jak2/engine/debug/debug-h.gc | 1 - goal_src/jak2/engine/debug/debug.gc | 219 +++++-- goal_src/jak2/engine/debug/editable.gc | 12 +- goal_src/jak2/engine/gfx/sky/sky-h.gc | 2 + goal_src/jak2/engine/gfx/sky/sky-tng.gc | 18 + goal_src/jak2/engine/level/region.gc | 4 +- .../reference/jak2/engine/debug/debug_REF.gc | 350 ++++------ .../jak2/engine/debug/editable_REF.gc | 8 +- .../reference/jak2/engine/level/region_REF.gc | 4 +- 22 files changed, 1479 insertions(+), 302 deletions(-) create mode 100644 game/mips2c/jak2_functions/sky.cpp create mode 100644 game/mips2c/jak2_functions/sky.h diff --git a/common/util/Assert.h b/common/util/Assert.h index 09d1b4ddcc..0d78ccf84b 100644 --- a/common/util/Assert.h +++ b/common/util/Assert.h @@ -28,9 +28,14 @@ #define ASSERT(EX) \ (void)((EX) || (private_assert_failed(#EX, __FILE__, __LINE__, __PRETTY_FUNCTION__), 0)) +#define ASSERT_NOT_REACHED() \ + (void)((private_assert_failed("not reached", __FILE__, __LINE__, __PRETTY_FUNCTION__), 0)) + #define ASSERT_MSG(EXPR, STR) \ (void)((EXPR) || (private_assert_failed(#EXPR, __FILE__, __LINE__, __PRETTY_FUNCTION__, STR), 0)) +#define ASSERT_NOT_REACHED_MSG(STR) \ + (void)((private_assert_failed("not reached", __FILE__, __LINE__, __PRETTY_FUNCTION__, STR), 0)) #else #define ASSERT(EX) ((void)0) diff --git a/decompiler/analysis/mips2c.cpp b/decompiler/analysis/mips2c.cpp index 89faf72b24..9fdd63c4e6 100644 --- a/decompiler/analysis/mips2c.cpp +++ b/decompiler/analysis/mips2c.cpp @@ -556,12 +556,13 @@ Mips2C_Line handle_lwc1(const Instruction& i0, Mips2C_Line handle_lw(Mips2C_Output& out, const Instruction& i0, const std::string& instr_str, - const LinkedObjectFile* file) { + const LinkedObjectFile* file, + GameVersion version) { if (i0.get_src(1).is_reg(rs7()) && i0.get_src(0).is_sym()) { // symbol load. out.require_symbol(i0.get_src(0).get_sym()); - return {fmt::format("c->load_symbol({}, cache.{});", reg_to_name(i0.get_dst(0)), - goal_to_c_name(i0.get_src(0).get_sym())), + return {fmt::format("c->load_symbol{}({}, cache.{});", version == GameVersion::Jak1 ? "" : "2", + reg_to_name(i0.get_dst(0)), goal_to_c_name(i0.get_src(0).get_sym())), instr_str}; } if (i0.get_src(1).is_reg(rfp()) && i0.get_src(0).is_label()) { @@ -888,11 +889,14 @@ Mips2C_Line handle_vopmsub(const Instruction& i0, const std::string& instr_strin instr_string}; } -Mips2C_Line handle_lui(const Instruction& i0, const std::string& instr_string, Mips2C_Output& op) { +Mips2C_Line handle_lui(const Instruction& i0, + const std::string& instr_string, + Mips2C_Output& op, + GameVersion version) { if (i0.get_src(0).get_imm() == 0x7000) { op.require_symbol("*fake-scratchpad-data*"); - return {fmt::format("get_fake_spad_addr({}, cache.fake_scratchpad_data, 0, c);", - reg_to_name(i0.get_dst(0))), + return {fmt::format("get_fake_spad_addr{}({}, cache.fake_scratchpad_data, 0, c);", + version == GameVersion::Jak1 ? "" : "2", reg_to_name(i0.get_dst(0))), instr_string}; } else { return {fmt::format("c->lui({}, {});", reg_to_name(i0.get_dst(0)), i0.get_src(0).get_imm()), @@ -946,7 +950,7 @@ Mips2C_Line handle_normal_instr(Mips2C_Output& output, case InstructionKind::CFC2: return handle_cfc2(i0, instr_str); case InstructionKind::LW: - return handle_lw(output, i0, instr_str, file); + return handle_lw(output, i0, instr_str, file, version); case InstructionKind::LB: case InstructionKind::LWL: case InstructionKind::LWR: @@ -1148,7 +1152,7 @@ Mips2C_Line handle_normal_instr(Mips2C_Output& output, case InstructionKind::PROT3W: return handle_generic_op2(i0, instr_str, "prot3w"); case InstructionKind::LUI: - return handle_lui(i0, instr_str, output); + return handle_lui(i0, instr_str, output, version); case InstructionKind::CLTS: output.needs_cop1_bc = true; return handle_clts(i0, instr_str); diff --git a/decompiler/config/jak2/all-types.gc b/decompiler/config/jak2/all-types.gc index a25ddc6bee..80071fedfa 100644 --- a/decompiler/config/jak2/all-types.gc +++ b/decompiler/config/jak2/all-types.gc @@ -22476,7 +22476,7 @@ (define-extern ray-sphere-intersect (function vector vector vector float float)) (define-extern ray-circle-intersect (function vector vector vector float float)) ;; (define-extern ray-cylinder-intersect (function vector vector vector vector float float vector float)) -(define-extern ray-plane-intersect (function vector vector vector vector vector vector vector float)) ;; +(define-extern ray-plane-intersect (function vector vector vector vector vector vector vector float)) ;; ;; (define-extern ray-triangle-intersect function) ;; (function vector vector float matrix vector vector float) ;; (define-extern collide-do-primitives function) ;; (function float) (define-extern moving-sphere-triangle-intersect (function vector vector float collide-cache-tri vector vector float)) ;; @@ -23002,14 +23002,14 @@ (define-extern dma-timeout-cam (function vector)) (define-extern display-file-info (function int)) (define-extern add-debug-cursor (function symbol bucket-id int int int none)) -(define-extern *boundary-polygon* none) ;; (inline-array lbvtx) ;; TODO: figure out what this actually is +(define-extern *boundary-polygon* (inline-array sky-vertex)) (define-extern init-boundary-regs (function none)) (define-extern add-boundary-shader (function texture-id dma-buffer none)) ;; (define-extern draw-boundary-polygon function) ;; function ;; (define-extern render-boundary-quad function) ;; (function lbvtx dma-buffer none) -;; (define-extern render-boundary-tri function) ;; (function lbvtx dma-buffer none) -;; (define-extern add-debug-bound-internal function) -(define-extern add-debug-bound (function int transform int rgba rgba int none)) +(define-extern render-boundary-tri (function sky-vertex dma-buffer none)) +(define-extern add-debug-bound-internal (function dma-buffer (inline-array vector) int rgba rgba int none)) +(define-extern add-debug-bound (function bucket-id (inline-array vector) int rgba rgba int none)) (define-extern cpu-delay (function int none)) (define-extern qword-read-time (function (array uint128) int int)) (define-extern bugfix? (function symbol)) @@ -25618,7 +25618,7 @@ ;; (define-extern clip-polygon-against-negative-hyperplane function) ;; function ;; (define-extern render-sky-quad function) ;; (function int dma-buffer none) ;; (define-extern render-sky-tri function) ;; (function (inline-array sky-vertex) dma-buffer none) -;; (define-extern close-sky-buffer function) ;; (function dma-buffer none) +(define-extern close-sky-buffer (function dma-buffer none)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; load-state ;; @@ -27024,8 +27024,8 @@ ;; (define-extern transform-and-sleep function) ;; (define-extern transform-and-sleep-code function) (define-extern transform-post (function int :behavior process-drawable)) ;; -(define-extern rider-trans (function none :behavior process-drawable)) ;; -(define-extern rider-post (function none :behavior process-drawable)) ;; +(define-extern rider-trans (function none :behavior process-drawable)) ;; +(define-extern rider-post (function none :behavior process-drawable)) ;; ;; (define-extern pusher-post function) ;; (function int :behavior process-drawable) ;; (define-extern process-drawable-delay-player function) ;; (function time-frame int :behavior process-drawable) ;; (define-extern process-drawable-fuel-cell-handler function) ;; (function process int symbol event-message-block none :behavior process-drawable) @@ -33218,7 +33218,7 @@ ) ) -(define-extern simple-focus-init-by-other +(define-extern simple-focus-init-by-other "Initializes the new [[simple-focus]]. `first-time?` will be set to [[#t]]" (function none :behavior simple-focus)) diff --git a/decompiler/config/jak2/hacks.jsonc b/decompiler/config/jak2/hacks.jsonc index 61fce95ecc..c7504758f4 100644 --- a/decompiler/config/jak2/hacks.jsonc +++ b/decompiler/config/jak2/hacks.jsonc @@ -358,7 +358,12 @@ "draw-string", "get-string-length", "adgif-shader<-texture-with-update!", - "init-boundary-regs" + "init-boundary-regs", + "draw-boundary-polygon", + "render-boundary-quad", + "render-boundary-tri", + "clip-polygon-against-negative-hyperplane", + "clip-polygon-against-positive-hyperplane" ], "mips2c_jump_table_functions": {}, diff --git a/decompiler/config/jak2/label_types.jsonc b/decompiler/config/jak2/label_types.jsonc index d9bad29b80..912b980e6c 100644 --- a/decompiler/config/jak2/label_types.jsonc +++ b/decompiler/config/jak2/label_types.jsonc @@ -73,7 +73,9 @@ ["L256", "vector"], ["L257", "vector"], ["L258", "vector"], - ["L259", "vector"] + ["L259", "vector"], + ["L231", "matrix"], + ["L232", "matrix"] ], "mood-funcs": [ ["L231", "vector"], diff --git a/decompiler/config/jak2/type_casts.jsonc b/decompiler/config/jak2/type_casts.jsonc index aed6a3b71e..ae37f51dae 100644 --- a/decompiler/config/jak2/type_casts.jsonc +++ b/decompiler/config/jak2/type_casts.jsonc @@ -2925,5 +2925,19 @@ [129, "a1", "region-prim-area"], [103, "v1", "region-prim-area"], [[19, 29], "v1", "region-prim-area"] + ], + "add-debug-bound": [ + [[33, 41], "a0", "dma-packet"], + [[42, 50], "a0", "gs-gif-tag"], + [53, "a0", "(pointer gs-zbuf)"], + [55, "a0", "(pointer gs-reg64)"], + [57, "a0", "(pointer gs-test)"], + [59, "a0", "(pointer gs-reg64)"], + [61, "a0", "(pointer gs-alpha)"], + [63, "a0", "(pointer gs-reg64)"], + [[107, 114], "v1", "dma-packet"], + [105, "v1", "dma-packet"], + [99, "a0", "dma-packet"], + [97, "a1", "dma-packet"] ] } diff --git a/decompiler/config/jak2/var_names.jsonc b/decompiler/config/jak2/var_names.jsonc index fe316a701a..6a7f58ace9 100644 --- a/decompiler/config/jak2/var_names.jsonc +++ b/decompiler/config/jak2/var_names.jsonc @@ -1967,5 +1967,11 @@ }, "(method 18 drawable-region-volume)": { "args": ["obj", "area"] + }, + "add-debug-bound-internal": { + "args": ["buf", "pts", "num-pts", "color0", "color1", "flip-tex"] + }, + "add-debug-bound": { + "args": ["buf", "pts", "c0", "c1", "flash"] } } diff --git a/game/CMakeLists.txt b/game/CMakeLists.txt index c1eae73e24..7f6e1324d5 100644 --- a/game/CMakeLists.txt +++ b/game/CMakeLists.txt @@ -86,6 +86,7 @@ set(RUNTIME_SOURCE mips2c/jak2_functions/debug.cpp mips2c/jak2_functions/font.cpp mips2c/jak2_functions/joint.cpp + mips2c/jak2_functions/sky.cpp mips2c/jak2_functions/texture.cpp overlord/dma.cpp overlord/fake_iso.cpp diff --git a/game/mips2c/jak2_functions/debug.cpp b/game/mips2c/jak2_functions/debug.cpp index ad8251f75a..a59f717742 100644 --- a/game/mips2c/jak2_functions/debug.cpp +++ b/game/mips2c/jak2_functions/debug.cpp @@ -3,6 +3,8 @@ // clang-format off #include "game/mips2c/mips2c_private.h" #include "game/kernel/jak2/kscheme.h" +#include "game/mips2c/jak2_functions/sky.h" + using ::jak2::intern_from_c; namespace Mips2C::jak2 { namespace debug_line_clip { @@ -133,3 +135,458 @@ void link() { } // namespace debug_line_clip } // namespace Mips2C + +//--------------------------MIPS2C--------------------- +// clang-format off +using ::jak2::intern_from_c; +namespace Mips2C::jak2 { +namespace init_boundary_regs { +struct Cache { + void* math_camera; // *math-camera* + void* sky_work; // *sky-work* +} cache; + +u64 execute(void* ctxt) { + auto* c = (ExecutionContext*)ctxt; + c->load_symbol2(v1, cache.math_camera); // lw v1, *math-camera*(s7) + c->load_symbol2(a0, cache.sky_work); // lw a0, *sky-work*(s7) + c->daddiu(a0, a0, 1008); // daddiu a0, a0, 1008 + c->lwc1(f0, 908, v1); // lwc1 f0, 908(v1) + c->swc1(f0, 0, a0); // swc1 f0, 0(a0) + c->lwc1(f0, 128, v1); // lwc1 f0, 128(v1) + c->swc1(f0, 4, a0); // swc1 f0, 4(a0) + c->lwc1(f0, 124, v1); // lwc1 f0, 124(v1) + c->swc1(f0, 8, a0); // swc1 f0, 8(a0) + c->lui(a1, 17727); // lui a1, 17727 + c->ori(a1, a1, 61440); // ori a1, a1, 61440 + c->mtc1(f0, a1); // mtc1 f0, a1 + c->swc1(f0, 12, a0); // swc1 f0, 12(a0) + c->lqc2(vf31, 572, v1); // lqc2 vf31, 572(v1) + c->lqc2(vf30, 588, v1); // lqc2 vf30, 588(v1) + c->lqc2(vf29, 604, v1); // lqc2 vf29, 604(v1) + c->lqc2(vf28, 620, v1); // lqc2 vf28, 620(v1) + c->lqc2(vf14, 780, v1); // lqc2 vf14, 780(v1) + c->lqc2(vf26, 796, v1); // lqc2 vf26, 796(v1) + c->lqc2(vf25, 812, v1); // lqc2 vf25, 812(v1) + c->load_symbol2(v1, cache.sky_work); // lw v1, *sky-work*(s7) + c->lqc2(vf13, 1008, v1); // lqc2 vf13, 1008(v1) + c->vmul(DEST::xyzw, vf31, vf31, vf14); // vmul.xyzw vf31, vf31, vf14 + c->vmul(DEST::xyzw, vf30, vf30, vf14); // vmul.xyzw vf30, vf30, vf14 + c->vmul(DEST::xyzw, vf29, vf29, vf14); // vmul.xyzw vf29, vf29, vf14 + c->vmul(DEST::xyzw, vf28, vf28, vf14); // vmul.xyzw vf28, vf28, vf14 + c->vmove(DEST::xyzw, vf24, vf0); // vmove.xyzw vf24, vf0 + c->mov128_gpr_vf(v1, vf24); // qmfc2.i v1, vf24 + c->gprs[v0].du64[0] = 0; // or v0, r0, r0 + //jr ra // jr ra + c->daddu(sp, sp, r0); // daddu sp, sp, r0 + goto end_of_function; // return + + // nop // sll r0, r0, 0 + // nop // sll r0, r0, 0 + end_of_function: + sky_regs_vfs.copy_vfs_from_other(c); + return c->gprs[v0].du64[0]; +} + +void link() { + cache.math_camera = intern_from_c("*math-camera*").c(); + cache.sky_work = intern_from_c("*sky-work*").c(); + gLinkedFunctionTable.reg("init-boundary-regs", execute, 128); +} + +} // namespace init_boundary_regs +} // namespace Mips2C + +//--------------------------MIPS2C--------------------- +// clang-format off +using ::jak2::intern_from_c; +namespace Mips2C::jak2 { +namespace draw_boundary_polygon { +struct Cache { + void* clip_polygon_against_negative_hyperplane; // clip-polygon-against-negative-hyperplane + void* clip_polygon_against_positive_hyperplane; // clip-polygon-against-positive-hyperplane +} cache; + +u64 execute(void* ctxt) { + auto* c = (ExecutionContext*)ctxt; + bool bc = false; + u32 call_addr = 0; + // nop // sll r0, r0, 0 + c->daddiu(sp, sp, -8); // daddiu sp, sp, -8 + // nop // sll r0, r0, 0 + c->sd(ra, 0, sp); // sd ra, 0(sp) + c->load_symbol2(t9, cache.clip_polygon_against_positive_hyperplane);// lw t9, clip-polygon-against-positive-hyperplane(s7) + c->mov64(a2, t4); // or a2, t4, r0 + c->mov64(a3, t5); // or a3, t5, r0 + call_addr = c->gprs[t9].du32[0]; // function call: + c->daddu(t2, a2, r0); // daddu t2, a2, r0 + // c->jalr(call_addr); // jalr ra, t9 + clip_polygon_against_positive_hyperplane::execute(ctxt); + bc = c->sgpr64(t0) == 0; // beq t0, r0, L32 + // nop // sll r0, r0, 0 + if (bc) {goto block_7;} // branch non-likely + + c->mov64(a2, t5); // or a2, t5, r0 + c->mov64(a3, t4); // or a3, t4, r0 + call_addr = c->gprs[t9].du32[0]; // function call: + c->daddiu(t2, a2, 4); // daddiu t2, a2, 4 + // c->jalr(call_addr); // jalr ra, t9 + clip_polygon_against_positive_hyperplane::execute(ctxt); + bc = c->sgpr64(t0) == 0; // beq t0, r0, L32 + c->load_symbol2(t9, cache.clip_polygon_against_negative_hyperplane);// lw t9, clip-polygon-against-negative-hyperplane(s7) + if (bc) {goto block_7;} // branch non-likely + + c->mov64(a2, t4); // or a2, t4, r0 + c->mov64(a3, t5); // or a3, t5, r0 + call_addr = c->gprs[t9].du32[0]; // function call: + c->daddu(t2, a2, r0); // daddu t2, a2, r0 + // c->jalr(call_addr); // jalr ra, t9 + clip_polygon_against_negative_hyperplane::execute(ctxt); + bc = c->sgpr64(t0) == 0; // beq t0, r0, L32 + // nop // sll r0, r0, 0 + if (bc) {goto block_7;} // branch non-likely + + c->mov64(a2, t5); // or a2, t5, r0 + c->mov64(a3, t4); // or a3, t4, r0 + call_addr = c->gprs[t9].du32[0]; // function call: + c->daddiu(t2, a2, 4); // daddiu t2, a2, 4 + // c->jalr(call_addr); // jalr ra, t9 + clip_polygon_against_negative_hyperplane::execute(ctxt); + bc = c->sgpr64(t0) == 0; // beq t0, r0, L32 + c->lw(a3, 4, a1); // lw a3, 4(a1) + if (bc) {goto block_7;} // branch non-likely + + c->mov64(a2, t4); // or a2, t4, r0 + // nop // sll r0, r0, 0 + c->sqc2(vf27, 0, a3); // sqc2 vf27, 0(a3) + c->daddiu(a3, a3, 16); // daddiu a3, a3, 16 + c->sw(t0, -16, a3); // sw t0, -16(a3) + // nop // sll r0, r0, 0 + + block_5: + c->lqc2(vf1, 0, a2); // lqc2 vf1, 0(a2) + // nop // sll r0, r0, 0 + c->lqc2(vf2, 16, a2); // lqc2 vf2, 16(a2) + // nop // sll r0, r0, 0 + c->lqc2(vf3, 32, a2); // lqc2 vf3, 32(a2) + c->vdiv(vf0, BC::w, vf1, BC::w); // vdiv Q, vf0.w, vf1.w + c->vmul(DEST::xyzw, vf1, vf1, vf26); // vmul.xyzw vf1, vf1, vf26 + // nop // sll r0, r0, 0 + c->vftoi0(DEST::xyzw, vf3, vf3); // vftoi0.xyzw vf3, vf3 + // nop // sll r0, r0, 0 + c->vadd(DEST::xyzw, vf2, vf2, vf24); // vadd.xyzw vf2, vf2, vf24 + // nop // sll r0, r0, 0 + c->vwaitq(); // vwaitq + // nop // sll r0, r0, 0 + c->vmulq(DEST::xyz, vf1, vf1); // vmulq.xyz vf1, vf1, Q + c->sqc2(vf3, 16, a3); // sqc2 vf3, 16(a3) + c->vmulq(DEST::xyzw, vf2, vf2); // vmulq.xyzw vf2, vf2, Q + c->daddiu(a2, a2, 48); // daddiu a2, a2, 48 + c->vadd(DEST::xyzw, vf1, vf1, vf25); // vadd.xyzw vf1, vf1, vf25 + c->daddiu(a3, a3, 48); // daddiu a3, a3, 48 + c->vmax_bc(DEST::z, BC::z, vf1, vf1, vf0); // vmaxz.z vf1, vf1, vf0 + // nop // sll r0, r0, 0 + c->vmini_bc(DEST::w, BC::z, vf1, vf1, vf13); // vminiz.w vf1, vf1, vf13 + // nop // sll r0, r0, 0 + c->vmax_bc(DEST::w, BC::y, vf1, vf1, vf13); // vmaxy.w vf1, vf1, vf13 + // nop // sll r0, r0, 0 + c->sqc2(vf2, -48, a3); // sqc2 vf2, -48(a3) + c->daddiu(t0, t0, -1); // daddiu t0, t0, -1 + c->vftoi4(DEST::xyzw, vf1, vf1); // vftoi4.xyzw vf1, vf1 + // nop // sll r0, r0, 0 + bc = c->sgpr64(t0) != 0; // bne t0, r0, L31 + c->sqc2(vf1, -16, a3); // sqc2 vf1, -16(a3) + if (bc) {goto block_5;} // branch non-likely + + c->sw(a3, 4, a1); // sw a3, 4(a1) + // nop // sll r0, r0, 0 + c->ld(ra, 0, sp); // ld ra, 0(sp) + c->daddiu(v0, s7, 4); // daddiu v0, s7, 4 + //jr ra // jr ra + c->daddiu(sp, sp, 8); // daddiu sp, sp, 8 + goto end_of_function; // return + + + block_7: + c->ld(ra, 0, sp); // ld ra, 0(sp) + c->mov64(v0, s7); // or v0, s7, r0 + //jr ra // jr ra + c->daddiu(sp, sp, 8); // daddiu sp, sp, 8 + goto end_of_function; // return + + //jr ra // jr ra + c->daddu(sp, sp, r0); // daddu sp, sp, r0 + goto end_of_function; // return + + // nop // sll r0, r0, 0 + // nop // sll r0, r0, 0 + end_of_function: + return c->gprs[v0].du64[0]; +} + +void link() { + cache.clip_polygon_against_negative_hyperplane = intern_from_c("clip-polygon-against-negative-hyperplane").c(); + cache.clip_polygon_against_positive_hyperplane = intern_from_c("clip-polygon-against-positive-hyperplane").c(); + gLinkedFunctionTable.reg("draw-boundary-polygon", execute, 1024); +} + +} // namespace draw_boundary_polygon +} // namespace Mips2C + + +//--------------------------MIPS2C--------------------- +// clang-format off +#include "game/mips2c/mips2c_private.h" +#include "game/kernel/jak2/kscheme.h" +using ::jak2::intern_from_c; +namespace Mips2C::jak2 { +namespace render_boundary_quad { +struct Cache { + void* fake_scratchpad_data; // *fake-scratchpad-data* + void* math_camera; // *math-camera* + void* draw_boundary_polygon; // draw-boundary-polygon +} cache; + +u64 execute(void* ctxt) { + auto* c = (ExecutionContext*)ctxt; + c->copy_vfs_from_other(&sky_regs_vfs); + bool bc = false; + c->mov64(v1, a0); // or v1, a0, r0 + c->load_symbol2(v1, cache.math_camera); // lw v1, *math-camera*(s7) + c->lqc2(vf14, 780, v1); // lqc2 vf14, 780(v1) + get_fake_spad_addr2(t4, cache.fake_scratchpad_data, 0, c);// lui t4, 28672 + c->ori(t4, t4, 12288); // ori t4, t4, 12288 + get_fake_spad_addr2(t5, cache.fake_scratchpad_data, 0, c);// lui t5, 28672 + c->ori(t5, t5, 14336); // ori t5, t5, 14336 + c->mov64(a3, t4); // or a3, t4, r0 + // nop // sll r0, r0, 0 + c->lqc2(vf1, 0, a0); // lqc2 vf1, 0(a0) + c->addiu(t0, r0, 4); // addiu t0, r0, 4 + c->lqc2(vf2, 16, a0); // lqc2 vf2, 16(a0) + // nop // sll r0, r0, 0 + c->lqc2(vf3, 32, a0); // lqc2 vf3, 32(a0) + c->vmula_bc(DEST::xyzw, BC::x, vf31, vf1); // vmulax.xyzw acc, vf31, vf1 + c->lqc2(vf4, 48, a0); // lqc2 vf4, 48(a0) + c->vmadda_bc(DEST::xyzw, BC::y, vf30, vf1); // vmadday.xyzw acc, vf30, vf1 + c->lqc2(vf5, 64, a0); // lqc2 vf5, 64(a0) + c->vmadda_bc(DEST::xyzw, BC::z, vf29, vf1); // vmaddaz.xyzw acc, vf29, vf1 + c->lqc2(vf6, 80, a0); // lqc2 vf6, 80(a0) + c->vmadd_bc(DEST::xyzw, BC::w, vf1, vf28, vf1); // vmaddw.xyzw vf1, vf28, vf1 + c->lqc2(vf7, 96, a0); // lqc2 vf7, 96(a0) + // nop // sll r0, r0, 0 + c->lqc2(vf8, 112, a0); // lqc2 vf8, 112(a0) + c->vmula_bc(DEST::xyzw, BC::x, vf31, vf4); // vmulax.xyzw acc, vf31, vf4 + // nop // sll r0, r0, 0 + c->vmadda_bc(DEST::xyzw, BC::y, vf30, vf4); // vmadday.xyzw acc, vf30, vf4 + c->lqc2(vf10, 144, a0); // lqc2 vf10, 144(a0) + c->vmadda_bc(DEST::xyzw, BC::z, vf29, vf4); // vmaddaz.xyzw acc, vf29, vf4 + c->lqc2(vf11, 160, a0); // lqc2 vf11, 160(a0) + c->vmadd_bc(DEST::xyzw, BC::w, vf4, vf28, vf4); // vmaddw.xyzw vf4, vf28, vf4 + // nop // sll r0, r0, 0 + // nop // sll r0, r0, 0 + c->sqc2(vf2, 16, a3); // sqc2 vf2, 16(a3) + c->vmula_bc(DEST::xyzw, BC::x, vf31, vf7); // vmulax.xyzw acc, vf31, vf7 + c->sqc2(vf3, 32, a3); // sqc2 vf3, 32(a3) + c->vmadda_bc(DEST::xyzw, BC::y, vf30, vf7); // vmadday.xyzw acc, vf30, vf7 + c->sqc2(vf5, 64, a3); // sqc2 vf5, 64(a3) + c->vmadda_bc(DEST::xyzw, BC::z, vf29, vf7); // vmaddaz.xyzw acc, vf29, vf7 + c->sqc2(vf3, 80, a3); // sqc2 vf3, 80(a3) + c->vmadd_bc(DEST::xyzw, BC::w, vf7, vf28, vf7); // vmaddw.xyzw vf7, vf28, vf7 + c->sqc2(vf8, 112, a3); // sqc2 vf8, 112(a3) + // nop // sll r0, r0, 0 + c->sqc2(vf3, 128, a3); // sqc2 vf3, 128(a3) + c->vmula_bc(DEST::xyzw, BC::x, vf31, vf10); // vmulax.xyzw acc, vf31, vf10 + c->sqc2(vf11, 160, a3); // sqc2 vf11, 160(a3) + c->vmadda_bc(DEST::xyzw, BC::y, vf30, vf10); // vmadday.xyzw acc, vf30, vf10 + c->sqc2(vf3, 176, a3); // sqc2 vf3, 176(a3) + c->vmadda_bc(DEST::xyzw, BC::z, vf29, vf10); // vmaddaz.xyzw acc, vf29, vf10 + c->sqc2(vf2, 208, a3); // sqc2 vf2, 208(a3) + c->vmadd_bc(DEST::xyzw, BC::w, vf10, vf28, vf10); // vmaddw.xyzw vf10, vf28, vf10 + c->sqc2(vf3, 224, a3); // sqc2 vf3, 224(a3) + // nop // sll r0, r0, 0 + c->sqc2(vf1, 0, a3); // sqc2 vf1, 0(a3) + // nop // sll r0, r0, 0 + c->sqc2(vf1, 192, a3); // sqc2 vf1, 192(a3) + // nop // sll r0, r0, 0 + c->sqc2(vf4, 48, a3); // sqc2 vf4, 48(a3) + // nop // sll r0, r0, 0 + c->sqc2(vf7, 96, a3); // sqc2 vf7, 96(a3) + // nop // sll r0, r0, 0 + c->sqc2(vf10, 144, a3); // sqc2 vf10, 144(a3) + c->load_symbol2(t9, cache.draw_boundary_polygon); // lw t9, draw-boundary-polygon(s7) + c->vsub(DEST::xyzw, vf4, vf4, vf1); // vsub.xyzw vf4, vf4, vf1 + // nop // sll r0, r0, 0 + c->vsub(DEST::xyzw, vf7, vf7, vf1); // vsub.xyzw vf7, vf7, vf1 + // nop // sll r0, r0, 0 + c->vopmula(vf4, vf7); // vopmula.xyz acc, vf4, vf7 + // nop // sll r0, r0, 0 + c->vopmsub(vf10, vf7, vf4); // vopmsub.xyz vf10, vf7, vf4 + // nop // sll r0, r0, 0 + c->vmul(DEST::xyzw, vf10, vf10, vf1); // vmul.xyzw vf10, vf10, vf1 + // nop // sll r0, r0, 0 + c->vadd_bc(DEST::y, BC::x, vf10, vf10, vf10); // vaddx.y vf10, vf10, vf10 + // nop // sll r0, r0, 0 + c->vadd_bc(DEST::y, BC::z, vf10, vf10, vf10); // vaddz.y vf10, vf10, vf10 + // nop // sll r0, r0, 0 + c->mov128_gpr_vf(v0, vf10); // qmfc2.i v0, vf10 + // nop // sll r0, r0, 0 + bc = ((s64)c->sgpr64(v0)) >= 0; // bgez v0, L29 + // nop // sll r0, r0, 0 + if (bc) {goto block_2;} // branch non-likely + + // Unknown instr: jr t9 + // nop // sll r0, r0, 0 + draw_boundary_polygon::execute(ctxt); + goto end_of_function; + + block_2: + c->sqc2(vf6, 32, a3); // sqc2 vf6, 32(a3) + // nop // sll r0, r0, 0 + c->sqc2(vf6, 80, a3); // sqc2 vf6, 80(a3) + // nop // sll r0, r0, 0 + c->sqc2(vf6, 128, a3); // sqc2 vf6, 128(a3) + // nop // sll r0, r0, 0 + c->sqc2(vf6, 176, a3); // sqc2 vf6, 176(a3) + // nop // sll r0, r0, 0 + // Unknown instr: jr t9 + draw_boundary_polygon::execute(ctxt); + goto end_of_function; + // nop // sll r0, r0, 0 + //jr ra // jr ra + c->daddu(sp, sp, r0); // daddu sp, sp, r0 + goto end_of_function; // return + + // nop // sll r0, r0, 0 + // nop // sll r0, r0, 0 + end_of_function: + return c->gprs[v0].du64[0]; +} + +void link() { + cache.fake_scratchpad_data = intern_from_c("*fake-scratchpad-data*").c(); + cache.math_camera = intern_from_c("*math-camera*").c(); + cache.draw_boundary_polygon = intern_from_c("draw-boundary-polygon").c(); + gLinkedFunctionTable.reg("render-boundary-quad", execute, 32); +} + +} // namespace render_boundary_quad +} // namespace Mips2C + +//--------------------------MIPS2C--------------------- +// clang-format off +using ::jak2::intern_from_c; +namespace Mips2C::jak2 { +namespace render_boundary_tri { +struct Cache { + void* fake_scratchpad_data; // *fake-scratchpad-data* + void* draw_boundary_polygon; // draw-boundary-polygon +} cache; + +u64 execute(void* ctxt) { + auto* c = (ExecutionContext*)ctxt; + c->copy_vfs_from_other(&sky_regs_vfs); + bool bc = false; + c->mov64(v1, a0); // or v1, a0, r0 + get_fake_spad_addr2(t4, cache.fake_scratchpad_data, 0, c);// lui t4, 28672 + c->ori(t4, t4, 12288); // ori t4, t4, 12288 + get_fake_spad_addr2(t5, cache.fake_scratchpad_data, 0, c);// lui t5, 28672 + c->ori(t5, t5, 14336); // ori t5, t5, 14336 + c->mov64(a3, t4); // or a3, t4, r0 + // nop // sll r0, r0, 0 + c->lqc2(vf1, 0, a0); // lqc2 vf1, 0(a0) + c->addiu(t0, r0, 3); // addiu t0, r0, 3 + c->lqc2(vf2, 16, a0); // lqc2 vf2, 16(a0) + // nop // sll r0, r0, 0 + c->lqc2(vf3, 32, a0); // lqc2 vf3, 32(a0) + c->vmula_bc(DEST::xyzw, BC::x, vf31, vf1); // vmulax.xyzw acc, vf31, vf1 + c->lqc2(vf4, 48, a0); // lqc2 vf4, 48(a0) + c->vmadda_bc(DEST::xyzw, BC::y, vf30, vf1); // vmadday.xyzw acc, vf30, vf1 + c->lqc2(vf5, 64, a0); // lqc2 vf5, 64(a0) + c->vmadda_bc(DEST::xyzw, BC::z, vf29, vf1); // vmaddaz.xyzw acc, vf29, vf1 + c->lqc2(vf6, 80, a0); // lqc2 vf6, 80(a0) + c->vmadd_bc(DEST::xyzw, BC::w, vf1, vf28, vf1); // vmaddw.xyzw vf1, vf28, vf1 + c->lqc2(vf7, 96, a0); // lqc2 vf7, 96(a0) + // nop // sll r0, r0, 0 + c->lqc2(vf8, 112, a0); // lqc2 vf8, 112(a0) + c->vmula_bc(DEST::xyzw, BC::x, vf31, vf4); // vmulax.xyzw acc, vf31, vf4 + // nop // sll r0, r0, 0 + c->vmadda_bc(DEST::xyzw, BC::y, vf30, vf4); // vmadday.xyzw acc, vf30, vf4 + c->sqc2(vf2, 16, a3); // sqc2 vf2, 16(a3) + c->vmadda_bc(DEST::xyzw, BC::z, vf29, vf4); // vmaddaz.xyzw acc, vf29, vf4 + c->sqc2(vf3, 32, a3); // sqc2 vf3, 32(a3) + c->vmadd_bc(DEST::xyzw, BC::w, vf4, vf28, vf4); // vmaddw.xyzw vf4, vf28, vf4 + c->sqc2(vf5, 64, a3); // sqc2 vf5, 64(a3) + // nop // sll r0, r0, 0 + c->sqc2(vf3, 80, a3); // sqc2 vf3, 80(a3) + c->vmula_bc(DEST::xyzw, BC::x, vf31, vf7); // vmulax.xyzw acc, vf31, vf7 + c->sqc2(vf8, 112, a3); // sqc2 vf8, 112(a3) + c->vmadda_bc(DEST::xyzw, BC::y, vf30, vf7); // vmadday.xyzw acc, vf30, vf7 + c->sqc2(vf3, 128, a3); // sqc2 vf3, 128(a3) + c->vmadda_bc(DEST::xyzw, BC::z, vf29, vf7); // vmaddaz.xyzw acc, vf29, vf7 + c->sqc2(vf2, 160, a3); // sqc2 vf2, 160(a3) + c->vmadd_bc(DEST::xyzw, BC::w, vf7, vf28, vf7); // vmaddw.xyzw vf7, vf28, vf7 + c->sqc2(vf3, 176, a3); // sqc2 vf3, 176(a3) + // nop // sll r0, r0, 0 + c->sqc2(vf1, 0, a3); // sqc2 vf1, 0(a3) + // nop // sll r0, r0, 0 + c->sqc2(vf1, 144, a3); // sqc2 vf1, 144(a3) + // nop // sll r0, r0, 0 + c->sqc2(vf4, 48, a3); // sqc2 vf4, 48(a3) + // nop // sll r0, r0, 0 + c->sqc2(vf7, 96, a3); // sqc2 vf7, 96(a3) + c->load_symbol2(t9, cache.draw_boundary_polygon); // lw t9, draw-boundary-polygon(s7) + c->vsub(DEST::xyzw, vf4, vf4, vf1); // vsub.xyzw vf4, vf4, vf1 + // nop // sll r0, r0, 0 + c->vsub(DEST::xyzw, vf7, vf7, vf1); // vsub.xyzw vf7, vf7, vf1 + // nop // sll r0, r0, 0 + c->vopmula(vf4, vf7); // vopmula.xyz acc, vf4, vf7 + // nop // sll r0, r0, 0 + c->vopmsub(vf10, vf7, vf4); // vopmsub.xyz vf10, vf7, vf4 + // nop // sll r0, r0, 0 + c->vmul(DEST::xyzw, vf10, vf10, vf1); // vmul.xyzw vf10, vf10, vf1 + // nop // sll r0, r0, 0 + c->vadd_bc(DEST::y, BC::x, vf10, vf10, vf10); // vaddx.y vf10, vf10, vf10 + // nop // sll r0, r0, 0 + c->vadd_bc(DEST::y, BC::z, vf10, vf10, vf10); // vaddz.y vf10, vf10, vf10 + // nop // sll r0, r0, 0 + c->mov128_gpr_vf(v0, vf10); // qmfc2.i v0, vf10 + // nop // sll r0, r0, 0 + bc = ((s64)c->sgpr64(v0)) >= 0; // bgez v0, L27 + // nop // sll r0, r0, 0 + if (bc) {goto block_2;} // branch non-likely + + // Unknown instr: jr t9 + draw_boundary_polygon::execute(ctxt); + goto end_of_function; + // nop // sll r0, r0, 0 + + block_2: + c->sqc2(vf6, 32, a3); // sqc2 vf6, 32(a3) + // nop // sll r0, r0, 0 + c->sqc2(vf6, 80, a3); // sqc2 vf6, 80(a3) + // nop // sll r0, r0, 0 + c->sqc2(vf6, 128, a3); // sqc2 vf6, 128(a3) + // nop // sll r0, r0, 0 + c->sqc2(vf6, 176, a3); // sqc2 vf6, 176(a3) + // nop // sll r0, r0, 0 + // Unknown instr: jr t9 + draw_boundary_polygon::execute(ctxt); + // nop // sll r0, r0, 0 + //jr ra // jr ra + c->daddu(sp, sp, r0); // daddu sp, sp, r0 + goto end_of_function; // return + + // nop // sll r0, r0, 0 + // nop // sll r0, r0, 0 + end_of_function: + return c->gprs[v0].du64[0]; +} + +void link() { + cache.fake_scratchpad_data = intern_from_c("*fake-scratchpad-data*").c(); + cache.draw_boundary_polygon = intern_from_c("draw-boundary-polygon").c(); + gLinkedFunctionTable.reg("render-boundary-tri", execute, 32); +} + +} // namespace render_boundary_tri +} // namespace Mips2C diff --git a/game/mips2c/jak2_functions/sky.cpp b/game/mips2c/jak2_functions/sky.cpp new file mode 100644 index 0000000000..ad38a561b4 --- /dev/null +++ b/game/mips2c/jak2_functions/sky.cpp @@ -0,0 +1,599 @@ +#include "sky.h" + +#include "game/kernel/jak2/kscheme.h" +#include "game/mips2c/mips2c_private.h" + +namespace Mips2C::jak2 { + +ExecutionContext sky_regs_vfs; + +namespace set_sky_vf27 { +u64 execute(void* ctxt) { + auto* c = (ExecutionContext*)ctxt; + // sky_regs_vfs.vfs[27] + memcpy(&sky_regs_vfs.vfs[27].f[0], g_ee_main_mem + c->gpr_addr(a0), 16); + return 0; +} + +void link() { + gLinkedFunctionTable.reg("set-sky-vf27", execute, 64); +} + +} // namespace set_sky_vf27 + +} // namespace Mips2C::jak2 + +//--------------------------MIPS2C--------------------- +// clang-format off +using ::jak2::intern_from_c; +namespace Mips2C::jak2 { +namespace clip_polygon_against_positive_hyperplane { +u64 execute(void* ctxt) { + auto* c = (ExecutionContext*)ctxt; + bool bc = false; + bool cop1_bc = false; + // nop // sll r0, r0, 0 + c->mov64(t1, t0); // or t1, t0, r0 + c->addiu(t0, r0, 0); // addiu t0, r0, 0 + c->lwc1(f1, 0, t2); // lwc1 f1, 0(t2) + c->daddiu(t2, t2, 48); // daddiu t2, t2, 48 + c->lwc1(f0, 12, a2); // lwc1 f0, 12(a2) + c->mov64(t3, a3); // or t3, a3, r0 + c->lqc2(vf1, 0, a2); // lqc2 vf1, 0(a2) + c->daddiu(a2, a2, 48); // daddiu a2, a2, 48 + cop1_bc = c->fprs[f0] < c->fprs[f1]; // c.lt.s f0, f1 + c->lqc2(vf2, -32, a2); // lqc2 vf2, -32(a2) + bc = !cop1_bc; // bc1f L112 + c->lqc2(vf3, -16, a2); // lqc2 vf3, -16(a2) + if (bc) {goto block_9;} // branch non-likely + + + block_1: + c->lwc1(f3, 0, t2); // lwc1 f3, 0(t2) + c->daddiu(t2, t2, 48); // daddiu t2, t2, 48 + c->lwc1(f2, 12, a2); // lwc1 f2, 12(a2) + c->daddiu(t1, t1, -1); // daddiu t1, t1, -1 + c->lqc2(vf4, 0, a2); // lqc2 vf4, 0(a2) + c->daddiu(a2, a2, 48); // daddiu a2, a2, 48 + cop1_bc = c->fprs[f2] < c->fprs[f3]; // c.lt.s f2, f3 + c->lqc2(vf5, -32, a2); // lqc2 vf5, -32(a2) + bc = !cop1_bc; // bc1f L110 + c->lqc2(vf6, -16, a2); // lqc2 vf6, -16(a2) + if (bc) {goto block_6;} // branch non-likely + + bc = c->sgpr64(t1) == 0; // beq t1, r0, L116 + // nop // sll r0, r0, 0 + if (bc) {goto block_17;} // branch non-likely + + + block_3: + c->lwc1(f1, 0, t2); // lwc1 f1, 0(t2) + c->daddiu(t2, t2, 48); // daddiu t2, t2, 48 + c->lwc1(f0, 12, a2); // lwc1 f0, 12(a2) + c->daddiu(t1, t1, -1); // daddiu t1, t1, -1 + c->lqc2(vf1, 0, a2); // lqc2 vf1, 0(a2) + c->daddiu(a2, a2, 48); // daddiu a2, a2, 48 + cop1_bc = c->fprs[f0] < c->fprs[f1]; // c.lt.s f0, f1 + c->lqc2(vf2, -32, a2); // lqc2 vf2, -32(a2) + bc = !cop1_bc; // bc1f L111 + c->lqc2(vf3, -16, a2); // lqc2 vf3, -16(a2) + if (bc) {goto block_8;} // branch non-likely + + bc = c->sgpr64(t1) != 0; // bne t1, r0, L108 + // nop // sll r0, r0, 0 + if (bc) {goto block_1;} // branch non-likely + + //beq r0, r0, L116 // beq r0, r0, L116 + // nop // sll r0, r0, 0 + goto block_17; // branch always + + + block_6: + c->subs(f7, f0, f1); // sub.s f7, f0, f1 + c->vsub(DEST::xyzw, vf7, vf4, vf1); // vsub.xyzw vf7, vf4, vf1 + c->subs(f8, f2, f3); // sub.s f8, f2, f3 + c->vsub(DEST::xyzw, vf8, vf5, vf2); // vsub.xyzw vf8, vf5, vf2 + c->subs(f5, f7, f8); // sub.s f5, f7, f8 + c->vsub(DEST::xyzw, vf9, vf6, vf3); // vsub.xyzw vf9, vf6, vf3 + c->divs(f6, f7, f5); // div.s f6, f7, f5 + c->daddiu(a3, a3, 48); // daddiu a3, a3, 48 + c->mfc1(v1, f6); // mfc1 v1, f6 + c->mov128_vf_gpr(vf10, v1); // qmtc2.i vf10, v1 + c->daddiu(t0, t0, 1); // daddiu t0, t0, 1 + c->vmula_bc(DEST::xyzw, BC::w, vf1, vf0); // vmulaw.xyzw acc, vf1, vf0 + c->daddiu(t6, s7, 4); // daddiu t6, s7, 4 + c->vmadd_bc(DEST::xyzw, BC::x, vf7, vf7, vf10); // vmaddx.xyzw vf7, vf7, vf10 + // nop // sll r0, r0, 0 + c->vmula_bc(DEST::xyzw, BC::w, vf2, vf0); // vmulaw.xyzw acc, vf2, vf0 + // nop // sll r0, r0, 0 + c->vmadd_bc(DEST::xyzw, BC::x, vf8, vf8, vf10); // vmaddx.xyzw vf8, vf8, vf10 + // nop // sll r0, r0, 0 + c->vmula_bc(DEST::xyzw, BC::w, vf3, vf0); // vmulaw.xyzw acc, vf3, vf0 + // nop // sll r0, r0, 0 + c->vmadd_bc(DEST::xyzw, BC::x, vf9, vf9, vf10); // vmaddx.xyzw vf9, vf9, vf10 + // nop // sll r0, r0, 0 + c->sqc2(vf7, -48, a3); // sqc2 vf7, -48(a3) + // nop // sll r0, r0, 0 + c->sqc2(vf8, -32, a3); // sqc2 vf8, -32(a3) + // nop // sll r0, r0, 0 + bc = c->sgpr64(t1) != 0; // bne t1, r0, L113 + c->sqc2(vf9, -16, a3); // sqc2 vf9, -16(a3) + if (bc) {goto block_11;} // branch non-likely + + //beq r0, r0, L116 // beq r0, r0, L116 + // nop // sll r0, r0, 0 + goto block_17; // branch always + + + block_8: + c->subs(f7, f0, f1); // sub.s f7, f0, f1 + c->vsub(DEST::xyzw, vf7, vf1, vf4); // vsub.xyzw vf7, vf1, vf4 + c->subs(f8, f2, f3); // sub.s f8, f2, f3 + c->vsub(DEST::xyzw, vf8, vf2, vf5); // vsub.xyzw vf8, vf2, vf5 + c->subs(f5, f8, f7); // sub.s f5, f8, f7 + c->vsub(DEST::xyzw, vf9, vf3, vf6); // vsub.xyzw vf9, vf3, vf6 + c->divs(f6, f8, f5); // div.s f6, f8, f5 + c->daddiu(a3, a3, 48); // daddiu a3, a3, 48 + c->mfc1(v1, f6); // mfc1 v1, f6 + c->mov128_vf_gpr(vf10, v1); // qmtc2.i vf10, v1 + c->daddiu(t0, t0, 1); // daddiu t0, t0, 1 + c->vmula_bc(DEST::xyzw, BC::w, vf4, vf0); // vmulaw.xyzw acc, vf4, vf0 + c->daddiu(t6, s7, 4); // daddiu t6, s7, 4 + c->vmadd_bc(DEST::xyzw, BC::x, vf7, vf7, vf10); // vmaddx.xyzw vf7, vf7, vf10 + // nop // sll r0, r0, 0 + c->vmula_bc(DEST::xyzw, BC::w, vf5, vf0); // vmulaw.xyzw acc, vf5, vf0 + // nop // sll r0, r0, 0 + c->vmadd_bc(DEST::xyzw, BC::x, vf8, vf8, vf10); // vmaddx.xyzw vf8, vf8, vf10 + // nop // sll r0, r0, 0 + c->vmula_bc(DEST::xyzw, BC::w, vf6, vf0); // vmulaw.xyzw acc, vf6, vf0 + // nop // sll r0, r0, 0 + c->vmadd_bc(DEST::xyzw, BC::x, vf9, vf9, vf10); // vmaddx.xyzw vf9, vf9, vf10 + // nop // sll r0, r0, 0 + c->sqc2(vf7, -48, a3); // sqc2 vf7, -48(a3) + // nop // sll r0, r0, 0 + c->sqc2(vf8, -32, a3); // sqc2 vf8, -32(a3) + // nop // sll r0, r0, 0 + bc = c->sgpr64(t1) == 0; // beq t1, r0, L116 + c->sqc2(vf9, -16, a3); // sqc2 vf9, -16(a3) + if (bc) {goto block_17;} // branch non-likely + + + block_9: + c->lwc1(f3, 0, t2); // lwc1 f3, 0(t2) + c->daddiu(t2, t2, 48); // daddiu t2, t2, 48 + c->lwc1(f2, 12, a2); // lwc1 f2, 12(a2) + c->daddiu(t1, t1, -1); // daddiu t1, t1, -1 + c->lqc2(vf4, 0, a2); // lqc2 vf4, 0(a2) + c->daddiu(a2, a2, 48); // daddiu a2, a2, 48 + cop1_bc = c->fprs[f2] < c->fprs[f3]; // c.lt.s f2, f3 + c->lqc2(vf5, -32, a2); // lqc2 vf5, -32(a2) + bc = cop1_bc; // bc1t L114 + c->lqc2(vf6, -16, a2); // lqc2 vf6, -16(a2) + if (bc) {goto block_14;} // branch non-likely + + c->sqc2(vf1, 0, a3); // sqc2 vf1, 0(a3) + c->daddiu(a3, a3, 48); // daddiu a3, a3, 48 + c->sqc2(vf2, -32, a3); // sqc2 vf2, -32(a3) + c->daddiu(t0, t0, 1); // daddiu t0, t0, 1 + bc = c->sgpr64(t1) == 0; // beq t1, r0, L116 + c->sqc2(vf3, -16, a3); // sqc2 vf3, -16(a3) + if (bc) {goto block_17;} // branch non-likely + + + block_11: + c->lwc1(f1, 0, t2); // lwc1 f1, 0(t2) + c->daddiu(t2, t2, 48); // daddiu t2, t2, 48 + c->lwc1(f0, 12, a2); // lwc1 f0, 12(a2) + c->daddiu(t1, t1, -1); // daddiu t1, t1, -1 + c->lqc2(vf1, 0, a2); // lqc2 vf1, 0(a2) + c->daddiu(a2, a2, 48); // daddiu a2, a2, 48 + cop1_bc = c->fprs[f0] < c->fprs[f1]; // c.lt.s f0, f1 + c->lqc2(vf2, -32, a2); // lqc2 vf2, -32(a2) + bc = cop1_bc; // bc1t L115 + c->lqc2(vf3, -16, a2); // lqc2 vf3, -16(a2) + if (bc) {goto block_16;} // branch non-likely + + c->sqc2(vf4, 0, a3); // sqc2 vf4, 0(a3) + c->daddiu(a3, a3, 48); // daddiu a3, a3, 48 + c->sqc2(vf5, -32, a3); // sqc2 vf5, -32(a3) + c->daddiu(t0, t0, 1); // daddiu t0, t0, 1 + bc = c->sgpr64(t1) != 0; // bne t1, r0, L112 + c->sqc2(vf6, -16, a3); // sqc2 vf6, -16(a3) + if (bc) {goto block_9;} // branch non-likely + + //beq r0, r0, L116 // beq r0, r0, L116 + // nop // sll r0, r0, 0 + goto block_17; // branch always + + + block_14: + c->subs(f7, f0, f1); // sub.s f7, f0, f1 + c->vsub(DEST::xyzw, vf7, vf1, vf4); // vsub.xyzw vf7, vf1, vf4 + c->subs(f8, f2, f3); // sub.s f8, f2, f3 + c->vsub(DEST::xyzw, vf8, vf2, vf5); // vsub.xyzw vf8, vf2, vf5 + c->subs(f5, f8, f7); // sub.s f5, f8, f7 + c->vsub(DEST::xyzw, vf9, vf3, vf6); // vsub.xyzw vf9, vf3, vf6 + c->divs(f6, f8, f5); // div.s f6, f8, f5 + c->daddiu(a3, a3, 96); // daddiu a3, a3, 96 + c->mfc1(v1, f6); // mfc1 v1, f6 + c->mov128_vf_gpr(vf10, v1); // qmtc2.i vf10, v1 + c->sqc2(vf1, -96, a3); // sqc2 vf1, -96(a3) + c->vmula_bc(DEST::xyzw, BC::w, vf4, vf0); // vmulaw.xyzw acc, vf4, vf0 + c->sqc2(vf2, -80, a3); // sqc2 vf2, -80(a3) + c->vmadd_bc(DEST::xyzw, BC::x, vf7, vf7, vf10); // vmaddx.xyzw vf7, vf7, vf10 + c->sqc2(vf3, -64, a3); // sqc2 vf3, -64(a3) + c->vmula_bc(DEST::xyzw, BC::w, vf5, vf0); // vmulaw.xyzw acc, vf5, vf0 + c->daddiu(t0, t0, 2); // daddiu t0, t0, 2 + c->vmadd_bc(DEST::xyzw, BC::x, vf8, vf8, vf10); // vmaddx.xyzw vf8, vf8, vf10 + c->daddiu(t6, s7, 4); // daddiu t6, s7, 4 + c->vmula_bc(DEST::xyzw, BC::w, vf6, vf0); // vmulaw.xyzw acc, vf6, vf0 + // nop // sll r0, r0, 0 + c->vmadd_bc(DEST::xyzw, BC::x, vf9, vf9, vf10); // vmaddx.xyzw vf9, vf9, vf10 + // nop // sll r0, r0, 0 + c->sqc2(vf7, -48, a3); // sqc2 vf7, -48(a3) + // nop // sll r0, r0, 0 + c->sqc2(vf8, -32, a3); // sqc2 vf8, -32(a3) + // nop // sll r0, r0, 0 + bc = c->sgpr64(t1) != 0; // bne t1, r0, L109 + c->sqc2(vf9, -16, a3); // sqc2 vf9, -16(a3) + if (bc) {goto block_3;} // branch non-likely + + //beq r0, r0, L116 // beq r0, r0, L116 + // nop // sll r0, r0, 0 + goto block_17; // branch always + + + block_16: + c->subs(f7, f0, f1); // sub.s f7, f0, f1 + c->vsub(DEST::xyzw, vf7, vf4, vf1); // vsub.xyzw vf7, vf4, vf1 + c->subs(f8, f2, f3); // sub.s f8, f2, f3 + c->vsub(DEST::xyzw, vf8, vf5, vf2); // vsub.xyzw vf8, vf5, vf2 + c->subs(f5, f7, f8); // sub.s f5, f7, f8 + c->vsub(DEST::xyzw, vf9, vf6, vf3); // vsub.xyzw vf9, vf6, vf3 + c->divs(f6, f7, f5); // div.s f6, f7, f5 + c->daddiu(a3, a3, 96); // daddiu a3, a3, 96 + c->mfc1(v1, f6); // mfc1 v1, f6 + c->mov128_vf_gpr(vf10, v1); // qmtc2.i vf10, v1 + c->sqc2(vf4, -96, a3); // sqc2 vf4, -96(a3) + c->vmula_bc(DEST::xyzw, BC::w, vf1, vf0); // vmulaw.xyzw acc, vf1, vf0 + c->sqc2(vf5, -80, a3); // sqc2 vf5, -80(a3) + c->vmadd_bc(DEST::xyzw, BC::x, vf7, vf7, vf10); // vmaddx.xyzw vf7, vf7, vf10 + c->sqc2(vf6, -64, a3); // sqc2 vf6, -64(a3) + c->vmula_bc(DEST::xyzw, BC::w, vf2, vf0); // vmulaw.xyzw acc, vf2, vf0 + c->daddiu(t0, t0, 2); // daddiu t0, t0, 2 + c->vmadd_bc(DEST::xyzw, BC::x, vf8, vf8, vf10); // vmaddx.xyzw vf8, vf8, vf10 + c->daddiu(t6, s7, 4); // daddiu t6, s7, 4 + c->vmula_bc(DEST::xyzw, BC::w, vf3, vf0); // vmulaw.xyzw acc, vf3, vf0 + // nop // sll r0, r0, 0 + c->vmadd_bc(DEST::xyzw, BC::x, vf9, vf9, vf10); // vmaddx.xyzw vf9, vf9, vf10 + // nop // sll r0, r0, 0 + c->sqc2(vf7, -48, a3); // sqc2 vf7, -48(a3) + // nop // sll r0, r0, 0 + c->sqc2(vf8, -32, a3); // sqc2 vf8, -32(a3) + // nop // sll r0, r0, 0 + bc = c->sgpr64(t1) != 0; // bne t1, r0, L108 + c->sqc2(vf9, -16, a3); // sqc2 vf9, -16(a3) + if (bc) {goto block_1;} // branch non-likely + + + block_17: + c->lqc2(vf1, 0, t3); // lqc2 vf1, 0(t3) + // nop // sll r0, r0, 0 + c->lqc2(vf2, 16, t3); // lqc2 vf2, 16(t3) + // nop // sll r0, r0, 0 + c->lqc2(vf3, 32, t3); // lqc2 vf3, 32(t3) + // nop // sll r0, r0, 0 + c->sqc2(vf1, 0, a3); // sqc2 vf1, 0(a3) + // nop // sll r0, r0, 0 + c->sqc2(vf2, 16, a3); // sqc2 vf2, 16(a3) + // nop // sll r0, r0, 0 + //jr ra // jr ra + c->sqc2(vf3, 32, a3); // sqc2 vf3, 32(a3) + goto end_of_function; // return + + //jr ra // jr ra + c->daddu(sp, sp, r0); // daddu sp, sp, r0 + goto end_of_function; // return + + // nop // sll r0, r0, 0 + // nop // sll r0, r0, 0 + end_of_function: + return c->gprs[v0].du64[0]; +} + +} // namespace clip_polygon_against_positive_hyperplane +} // namespace Mips2C + +//--------------------------MIPS2C--------------------- +// clang-format off +#include "game/mips2c/mips2c_private.h" +#include "game/kernel/jak2/kscheme.h" +using ::jak2::intern_from_c; +namespace Mips2C::jak2 { +namespace clip_polygon_against_negative_hyperplane { +u64 execute(void* ctxt) { + auto* c = (ExecutionContext*)ctxt; + bool bc = false; + bool cop1_bc = false; + // nop // sll r0, r0, 0 + c->mov64(t1, t0); // or t1, t0, r0 + c->addiu(t0, r0, 0); // addiu t0, r0, 0 + c->lwc1(f0, 12, a2); // lwc1 f0, 12(a2) + c->mov64(t3, a3); // or t3, a3, r0 + c->lwc1(f1, 0, t2); // lwc1 f1, 0(t2) + c->daddiu(t2, t2, 48); // daddiu t2, t2, 48 + c->lqc2(vf1, 0, a2); // lqc2 vf1, 0(a2) + c->negs(f0, f0); // neg.s f0, f0 + // nop // sll r0, r0, 0 + c->lqc2(vf2, 16, a2); // lqc2 vf2, 16(a2) + cop1_bc = c->fprs[f1] < c->fprs[f0]; // c.lt.s f1, f0 + c->daddiu(a2, a2, 48); // daddiu a2, a2, 48 + bc = !cop1_bc; // bc1f L102 + c->lqc2(vf3, -16, a2); // lqc2 vf3, -16(a2) + if (bc) {goto block_9;} // branch non-likely + + + block_1: + c->lwc1(f2, 12, a2); // lwc1 f2, 12(a2) + c->daddiu(t1, t1, -1); // daddiu t1, t1, -1 + c->lwc1(f3, 0, t2); // lwc1 f3, 0(t2) + c->daddiu(t2, t2, 48); // daddiu t2, t2, 48 + c->lqc2(vf4, 0, a2); // lqc2 vf4, 0(a2) + c->negs(f2, f2); // neg.s f2, f2 + // nop // sll r0, r0, 0 + c->lqc2(vf5, 16, a2); // lqc2 vf5, 16(a2) + cop1_bc = c->fprs[f3] < c->fprs[f2]; // c.lt.s f3, f2 + c->daddiu(a2, a2, 48); // daddiu a2, a2, 48 + bc = !cop1_bc; // bc1f L100 + c->lqc2(vf6, -16, a2); // lqc2 vf6, -16(a2) + if (bc) {goto block_6;} // branch non-likely + + bc = c->sgpr64(t1) == 0; // beq t1, r0, L106 + // nop // sll r0, r0, 0 + if (bc) {goto block_17;} // branch non-likely + + + block_3: + c->lwc1(f0, 12, a2); // lwc1 f0, 12(a2) + c->daddiu(t1, t1, -1); // daddiu t1, t1, -1 + c->lwc1(f1, 0, t2); // lwc1 f1, 0(t2) + c->daddiu(t2, t2, 48); // daddiu t2, t2, 48 + c->lqc2(vf1, 0, a2); // lqc2 vf1, 0(a2) + c->negs(f0, f0); // neg.s f0, f0 + // nop // sll r0, r0, 0 + c->lqc2(vf2, 16, a2); // lqc2 vf2, 16(a2) + cop1_bc = c->fprs[f1] < c->fprs[f0]; // c.lt.s f1, f0 + c->daddiu(a2, a2, 48); // daddiu a2, a2, 48 + bc = !cop1_bc; // bc1f L101 + c->lqc2(vf3, -16, a2); // lqc2 vf3, -16(a2) + if (bc) {goto block_8;} // branch non-likely + + bc = c->sgpr64(t1) != 0; // bne t1, r0, L98 + // nop // sll r0, r0, 0 + if (bc) {goto block_1;} // branch non-likely + + //beq r0, r0, L106 // beq r0, r0, L106 + // nop // sll r0, r0, 0 + goto block_17; // branch always + + + block_6: + c->subs(f7, f0, f1); // sub.s f7, f0, f1 + c->vsub(DEST::xyzw, vf7, vf4, vf1); // vsub.xyzw vf7, vf4, vf1 + c->subs(f8, f2, f3); // sub.s f8, f2, f3 + c->vsub(DEST::xyzw, vf8, vf5, vf2); // vsub.xyzw vf8, vf5, vf2 + c->subs(f5, f7, f8); // sub.s f5, f7, f8 + c->vsub(DEST::xyzw, vf9, vf6, vf3); // vsub.xyzw vf9, vf6, vf3 + c->divs(f6, f7, f5); // div.s f6, f7, f5 + c->daddiu(a3, a3, 48); // daddiu a3, a3, 48 + c->mfc1(v1, f6); // mfc1 v1, f6 + c->mov128_vf_gpr(vf10, v1); // qmtc2.i vf10, v1 + c->daddiu(t0, t0, 1); // daddiu t0, t0, 1 + c->vmula_bc(DEST::xyzw, BC::w, vf1, vf0); // vmulaw.xyzw acc, vf1, vf0 + c->daddiu(t6, s7, 4); // daddiu t6, s7, 4 + c->vmadd_bc(DEST::xyzw, BC::x, vf7, vf7, vf10); // vmaddx.xyzw vf7, vf7, vf10 + // nop // sll r0, r0, 0 + c->vmula_bc(DEST::xyzw, BC::w, vf2, vf0); // vmulaw.xyzw acc, vf2, vf0 + // nop // sll r0, r0, 0 + c->vmadd_bc(DEST::xyzw, BC::x, vf8, vf8, vf10); // vmaddx.xyzw vf8, vf8, vf10 + // nop // sll r0, r0, 0 + c->vmula_bc(DEST::xyzw, BC::w, vf3, vf0); // vmulaw.xyzw acc, vf3, vf0 + // nop // sll r0, r0, 0 + c->vmadd_bc(DEST::xyzw, BC::x, vf9, vf9, vf10); // vmaddx.xyzw vf9, vf9, vf10 + // nop // sll r0, r0, 0 + c->sqc2(vf7, -48, a3); // sqc2 vf7, -48(a3) + // nop // sll r0, r0, 0 + c->sqc2(vf8, -32, a3); // sqc2 vf8, -32(a3) + // nop // sll r0, r0, 0 + bc = c->sgpr64(t1) != 0; // bne t1, r0, L103 + c->sqc2(vf9, -16, a3); // sqc2 vf9, -16(a3) + if (bc) {goto block_11;} // branch non-likely + + //beq r0, r0, L106 // beq r0, r0, L106 + // nop // sll r0, r0, 0 + goto block_17; // branch always + + + block_8: + c->subs(f7, f0, f1); // sub.s f7, f0, f1 + c->vsub(DEST::xyzw, vf7, vf1, vf4); // vsub.xyzw vf7, vf1, vf4 + c->subs(f8, f2, f3); // sub.s f8, f2, f3 + c->vsub(DEST::xyzw, vf8, vf2, vf5); // vsub.xyzw vf8, vf2, vf5 + c->subs(f5, f8, f7); // sub.s f5, f8, f7 + c->vsub(DEST::xyzw, vf9, vf3, vf6); // vsub.xyzw vf9, vf3, vf6 + c->divs(f6, f8, f5); // div.s f6, f8, f5 + c->daddiu(a3, a3, 48); // daddiu a3, a3, 48 + c->mfc1(v1, f6); // mfc1 v1, f6 + c->mov128_vf_gpr(vf10, v1); // qmtc2.i vf10, v1 + c->daddiu(t0, t0, 1); // daddiu t0, t0, 1 + c->vmula_bc(DEST::xyzw, BC::w, vf4, vf0); // vmulaw.xyzw acc, vf4, vf0 + c->daddiu(t6, s7, 4); // daddiu t6, s7, 4 + c->vmadd_bc(DEST::xyzw, BC::x, vf7, vf7, vf10); // vmaddx.xyzw vf7, vf7, vf10 + // nop // sll r0, r0, 0 + c->vmula_bc(DEST::xyzw, BC::w, vf5, vf0); // vmulaw.xyzw acc, vf5, vf0 + // nop // sll r0, r0, 0 + c->vmadd_bc(DEST::xyzw, BC::x, vf8, vf8, vf10); // vmaddx.xyzw vf8, vf8, vf10 + // nop // sll r0, r0, 0 + c->vmula_bc(DEST::xyzw, BC::w, vf6, vf0); // vmulaw.xyzw acc, vf6, vf0 + // nop // sll r0, r0, 0 + c->vmadd_bc(DEST::xyzw, BC::x, vf9, vf9, vf10); // vmaddx.xyzw vf9, vf9, vf10 + // nop // sll r0, r0, 0 + c->sqc2(vf7, -48, a3); // sqc2 vf7, -48(a3) + // nop // sll r0, r0, 0 + c->sqc2(vf8, -32, a3); // sqc2 vf8, -32(a3) + // nop // sll r0, r0, 0 + bc = c->sgpr64(t1) == 0; // beq t1, r0, L106 + c->sqc2(vf9, -16, a3); // sqc2 vf9, -16(a3) + if (bc) {goto block_17;} // branch non-likely + + + block_9: + c->lwc1(f2, 12, a2); // lwc1 f2, 12(a2) + c->daddiu(t1, t1, -1); // daddiu t1, t1, -1 + c->lwc1(f3, 0, t2); // lwc1 f3, 0(t2) + c->daddiu(t2, t2, 48); // daddiu t2, t2, 48 + c->lqc2(vf4, 0, a2); // lqc2 vf4, 0(a2) + c->negs(f2, f2); // neg.s f2, f2 + // nop // sll r0, r0, 0 + c->lqc2(vf5, 16, a2); // lqc2 vf5, 16(a2) + cop1_bc = c->fprs[f3] < c->fprs[f2]; // c.lt.s f3, f2 + c->daddiu(a2, a2, 48); // daddiu a2, a2, 48 + bc = cop1_bc; // bc1t L104 + c->lqc2(vf6, -16, a2); // lqc2 vf6, -16(a2) + if (bc) {goto block_14;} // branch non-likely + + c->sqc2(vf1, 0, a3); // sqc2 vf1, 0(a3) + c->daddiu(a3, a3, 48); // daddiu a3, a3, 48 + c->sqc2(vf2, -32, a3); // sqc2 vf2, -32(a3) + c->daddiu(t0, t0, 1); // daddiu t0, t0, 1 + bc = c->sgpr64(t1) == 0; // beq t1, r0, L106 + c->sqc2(vf3, -16, a3); // sqc2 vf3, -16(a3) + if (bc) {goto block_17;} // branch non-likely + + + block_11: + c->lwc1(f0, 12, a2); // lwc1 f0, 12(a2) + c->daddiu(t1, t1, -1); // daddiu t1, t1, -1 + c->lwc1(f1, 0, t2); // lwc1 f1, 0(t2) + c->daddiu(t2, t2, 48); // daddiu t2, t2, 48 + c->lqc2(vf1, 0, a2); // lqc2 vf1, 0(a2) + c->negs(f0, f0); // neg.s f0, f0 + // nop // sll r0, r0, 0 + c->lqc2(vf2, 16, a2); // lqc2 vf2, 16(a2) + cop1_bc = c->fprs[f1] < c->fprs[f0]; // c.lt.s f1, f0 + c->daddiu(a2, a2, 48); // daddiu a2, a2, 48 + bc = cop1_bc; // bc1t L105 + c->lqc2(vf3, -16, a2); // lqc2 vf3, -16(a2) + if (bc) {goto block_16;} // branch non-likely + + c->sqc2(vf4, 0, a3); // sqc2 vf4, 0(a3) + c->daddiu(a3, a3, 48); // daddiu a3, a3, 48 + c->sqc2(vf5, -32, a3); // sqc2 vf5, -32(a3) + c->daddiu(t0, t0, 1); // daddiu t0, t0, 1 + bc = c->sgpr64(t1) != 0; // bne t1, r0, L102 + c->sqc2(vf6, -16, a3); // sqc2 vf6, -16(a3) + if (bc) {goto block_9;} // branch non-likely + + //beq r0, r0, L106 // beq r0, r0, L106 + // nop // sll r0, r0, 0 + goto block_17; // branch always + + + block_14: + c->subs(f7, f0, f1); // sub.s f7, f0, f1 + c->vsub(DEST::xyzw, vf7, vf1, vf4); // vsub.xyzw vf7, vf1, vf4 + c->subs(f8, f2, f3); // sub.s f8, f2, f3 + c->vsub(DEST::xyzw, vf8, vf2, vf5); // vsub.xyzw vf8, vf2, vf5 + c->subs(f5, f8, f7); // sub.s f5, f8, f7 + c->vsub(DEST::xyzw, vf9, vf3, vf6); // vsub.xyzw vf9, vf3, vf6 + c->divs(f6, f8, f5); // div.s f6, f8, f5 + c->daddiu(a3, a3, 96); // daddiu a3, a3, 96 + c->mfc1(v1, f6); // mfc1 v1, f6 + c->mov128_vf_gpr(vf10, v1); // qmtc2.i vf10, v1 + c->sqc2(vf1, -96, a3); // sqc2 vf1, -96(a3) + c->vmula_bc(DEST::xyzw, BC::w, vf4, vf0); // vmulaw.xyzw acc, vf4, vf0 + c->sqc2(vf2, -80, a3); // sqc2 vf2, -80(a3) + c->vmadd_bc(DEST::xyzw, BC::x, vf7, vf7, vf10); // vmaddx.xyzw vf7, vf7, vf10 + c->sqc2(vf3, -64, a3); // sqc2 vf3, -64(a3) + c->vmula_bc(DEST::xyzw, BC::w, vf5, vf0); // vmulaw.xyzw acc, vf5, vf0 + c->daddiu(t0, t0, 2); // daddiu t0, t0, 2 + c->vmadd_bc(DEST::xyzw, BC::x, vf8, vf8, vf10); // vmaddx.xyzw vf8, vf8, vf10 + c->daddiu(t6, s7, 4); // daddiu t6, s7, 4 + c->vmula_bc(DEST::xyzw, BC::w, vf6, vf0); // vmulaw.xyzw acc, vf6, vf0 + // nop // sll r0, r0, 0 + c->vmadd_bc(DEST::xyzw, BC::x, vf9, vf9, vf10); // vmaddx.xyzw vf9, vf9, vf10 + // nop // sll r0, r0, 0 + c->sqc2(vf7, -48, a3); // sqc2 vf7, -48(a3) + // nop // sll r0, r0, 0 + c->sqc2(vf8, -32, a3); // sqc2 vf8, -32(a3) + // nop // sll r0, r0, 0 + bc = c->sgpr64(t1) != 0; // bne t1, r0, L99 + c->sqc2(vf9, -16, a3); // sqc2 vf9, -16(a3) + if (bc) {goto block_3;} // branch non-likely + + //beq r0, r0, L106 // beq r0, r0, L106 + // nop // sll r0, r0, 0 + goto block_17; // branch always + + + block_16: + c->subs(f7, f0, f1); // sub.s f7, f0, f1 + c->vsub(DEST::xyzw, vf7, vf4, vf1); // vsub.xyzw vf7, vf4, vf1 + c->subs(f8, f2, f3); // sub.s f8, f2, f3 + c->vsub(DEST::xyzw, vf8, vf5, vf2); // vsub.xyzw vf8, vf5, vf2 + c->subs(f5, f7, f8); // sub.s f5, f7, f8 + c->vsub(DEST::xyzw, vf9, vf6, vf3); // vsub.xyzw vf9, vf6, vf3 + c->divs(f6, f7, f5); // div.s f6, f7, f5 + c->daddiu(a3, a3, 96); // daddiu a3, a3, 96 + c->mfc1(v1, f6); // mfc1 v1, f6 + c->mov128_vf_gpr(vf10, v1); // qmtc2.i vf10, v1 + c->sqc2(vf4, -96, a3); // sqc2 vf4, -96(a3) + c->vmula_bc(DEST::xyzw, BC::w, vf1, vf0); // vmulaw.xyzw acc, vf1, vf0 + c->sqc2(vf5, -80, a3); // sqc2 vf5, -80(a3) + c->vmadd_bc(DEST::xyzw, BC::x, vf7, vf7, vf10); // vmaddx.xyzw vf7, vf7, vf10 + c->sqc2(vf6, -64, a3); // sqc2 vf6, -64(a3) + c->vmula_bc(DEST::xyzw, BC::w, vf2, vf0); // vmulaw.xyzw acc, vf2, vf0 + c->daddiu(t0, t0, 2); // daddiu t0, t0, 2 + c->vmadd_bc(DEST::xyzw, BC::x, vf8, vf8, vf10); // vmaddx.xyzw vf8, vf8, vf10 + c->daddiu(t6, s7, 4); // daddiu t6, s7, 4 + c->vmula_bc(DEST::xyzw, BC::w, vf3, vf0); // vmulaw.xyzw acc, vf3, vf0 + // nop // sll r0, r0, 0 + c->vmadd_bc(DEST::xyzw, BC::x, vf9, vf9, vf10); // vmaddx.xyzw vf9, vf9, vf10 + // nop // sll r0, r0, 0 + c->sqc2(vf7, -48, a3); // sqc2 vf7, -48(a3) + // nop // sll r0, r0, 0 + c->sqc2(vf8, -32, a3); // sqc2 vf8, -32(a3) + // nop // sll r0, r0, 0 + bc = c->sgpr64(t1) != 0; // bne t1, r0, L98 + c->sqc2(vf9, -16, a3); // sqc2 vf9, -16(a3) + if (bc) {goto block_1;} // branch non-likely + + + block_17: + c->lqc2(vf1, 0, t3); // lqc2 vf1, 0(t3) + // nop // sll r0, r0, 0 + c->lqc2(vf2, 16, t3); // lqc2 vf2, 16(t3) + // nop // sll r0, r0, 0 + c->lqc2(vf3, 32, t3); // lqc2 vf3, 32(t3) + // nop // sll r0, r0, 0 + c->sqc2(vf1, 0, a3); // sqc2 vf1, 0(a3) + // nop // sll r0, r0, 0 + c->sqc2(vf2, 16, a3); // sqc2 vf2, 16(a3) + // nop // sll r0, r0, 0 + //jr ra // jr ra + c->sqc2(vf3, 32, a3); // sqc2 vf3, 32(a3) + goto end_of_function; // return + + //jr ra // jr ra + c->daddu(sp, sp, r0); // daddu sp, sp, r0 + goto end_of_function; // return + + // nop // sll r0, r0, 0 + // nop // sll r0, r0, 0 + end_of_function: + return c->gprs[v0].du64[0]; +} + +} // namespace clip_polygon_against_negative_hyperplane +} // namespace Mips2C + diff --git a/game/mips2c/jak2_functions/sky.h b/game/mips2c/jak2_functions/sky.h new file mode 100644 index 0000000000..2fd1e7510e --- /dev/null +++ b/game/mips2c/jak2_functions/sky.h @@ -0,0 +1,14 @@ +#pragma once +#include "game/mips2c/mips2c_private.h" + +namespace Mips2C::jak2 { +extern ExecutionContext sky_regs_vfs; + +namespace clip_polygon_against_positive_hyperplane { +extern u64 execute(void* ctxt); +} + +namespace clip_polygon_against_negative_hyperplane { +extern u64 execute(void* ctxt); +} +} // namespace Mips2C::jak2 \ No newline at end of file diff --git a/game/mips2c/mips2c_private.h b/game/mips2c/mips2c_private.h index 138794a95d..a5da76deb9 100644 --- a/game/mips2c/mips2c_private.h +++ b/game/mips2c/mips2c_private.h @@ -1444,6 +1444,12 @@ inline void get_fake_spad_addr(int dst, void* sym_addr, u32 offset, ExecutionCon c->gprs[dst].du64[0] = val + offset; } +inline void get_fake_spad_addr2(int dst, void* sym_addr, u32 offset, ExecutionContext* c) { + u32 val; + memcpy(&val, (u8*)sym_addr - 1, 4); + c->gprs[dst].du64[0] = val + offset; +} + inline void spad_to_dma(void* spad_sym_addr, u32 madr, u32 sadr, u32 qwc) { u32 spad_addr_goal; memcpy(&spad_addr_goal, spad_sym_addr, 4); diff --git a/game/mips2c/mips2c_table.cpp b/game/mips2c/mips2c_table.cpp index 3314e77b73..41feb5b73d 100644 --- a/game/mips2c/mips2c_table.cpp +++ b/game/mips2c/mips2c_table.cpp @@ -124,6 +124,11 @@ namespace draw_string { extern void link(); } namespace get_string_length { extern void link(); } namespace adgif_shader_texture_with_update { extern void link(); } namespace debug_line_clip { extern void link(); } +namespace init_boundary_regs { extern void link(); } +namespace render_boundary_tri { extern void link(); } +namespace render_boundary_quad { extern void link(); } +namespace set_sky_vf27 { extern void link(); } +namespace draw_boundary_polygon { extern void link(); } } // clang-format on @@ -205,7 +210,10 @@ PerGameVersion>> gMips2C {"font", {jak2::draw_string::link, jak2::get_string_length::link, jak2::draw_string_asm::link}}, {"texture", {jak2::adgif_shader_texture_with_update::link}}, - {"debug", {jak2::debug_line_clip::link}}}, + {"debug", + {jak2::debug_line_clip::link, jak2::init_boundary_regs::link, + jak2::render_boundary_quad::link, jak2::render_boundary_tri::link, jak2::set_sky_vf27::link, + jak2::draw_boundary_polygon::link}}}, }; void LinkedFunctionTable::reg(const std::string& name, u64 (*exec)(void*), u32 stack_size) { @@ -285,7 +293,7 @@ void LinkedFunctionTable::reg(const std::string& name, u64 (*exec)(void*), u32 s u32 LinkedFunctionTable::get(const std::string& name) { auto it = m_executes.find(name); if (it == m_executes.end()) { - ASSERT(false); + ASSERT_NOT_REACHED_MSG(fmt::format("mips2c function {} is unknown", name)); } return it->second.goal_trampoline.offset; } diff --git a/goal_src/jak2/engine/debug/debug-h.gc b/goal_src/jak2/engine/debug/debug-h.gc index d9edc437cc..7a1ed713b7 100644 --- a/goal_src/jak2/engine/debug/debug-h.gc +++ b/goal_src/jak2/engine/debug/debug-h.gc @@ -13,7 +13,6 @@ ;; NOTE - for editable (define-extern add-debug-x (function symbol bucket-id vector rgba symbol)) (define-extern add-debug-vector (function symbol bucket-id vector vector meters rgba symbol)) -(define-extern add-debug-bound (function int transform int rgba rgba int none)) (define-extern add-debug-line2d (function symbol bucket-id vector vector vector symbol)) (define-extern add-debug-text-3d (function symbol bucket-id string vector font-color vector2h symbol)) diff --git a/goal_src/jak2/engine/debug/debug.gc b/goal_src/jak2/engine/debug/debug.gc index 25eb4343f9..1ff0cb3b87 100644 --- a/goal_src/jak2/engine/debug/debug.gc +++ b/goal_src/jak2/engine/debug/debug.gc @@ -538,23 +538,6 @@ :flag-assert #x90000003c ) -(defmethod inspect debug-line ((obj debug-line)) - (when (not obj) - (set! obj obj) - (goto cfg-4) - ) - (format #t "[~8x] ~A~%" obj 'debug-line) - (format #t "~1Tflags: ~D~%" (-> obj flags)) - (format #t "~1Tbucket: ~D~%" (-> obj bucket)) - (format #t "~1Tv1: #~%" (-> obj v1)) - (format #t "~1Tv2: #~%" (-> obj v2)) - (format #t "~1Tcolor: ~D~%" (-> obj color)) - (format #t "~1Tmode: ~A~%" (-> obj mode)) - (format #t "~1Tcolor2: ~D~%" (-> obj color2)) - (label cfg-4) - obj - ) - (deftype debug-text-3d (structure) ((flags int32 :offset-assert 0) (bucket bucket-id :offset-assert 4) @@ -568,22 +551,6 @@ :flag-assert #x90000002c ) -(defmethod inspect debug-text-3d ((obj debug-text-3d)) - (when (not obj) - (set! obj obj) - (goto cfg-4) - ) - (format #t "[~8x] ~A~%" obj 'debug-text-3d) - (format #t "~1Tflags: ~D~%" (-> obj flags)) - (format #t "~1Tbucket: ~D~%" (-> obj bucket)) - (format #t "~1Tpos: #~%" (-> obj pos)) - (format #t "~1Tcolor: ~D~%" (-> obj color)) - (format #t "~1Toffset: #~%" (-> obj offset)) - (format #t "~1Tstr: ~A~%" (-> obj str)) - (label cfg-4) - obj - ) - (deftype debug-tracking-thang (basic) ((length int32 :offset-assert 4) (allocated-length int32 :offset-assert 8) @@ -593,17 +560,6 @@ :flag-assert #x90000000c ) -(defmethod inspect debug-tracking-thang ((obj debug-tracking-thang)) - (when (not obj) - (set! obj obj) - (goto cfg-4) - ) - (format #t "[~8x] ~A~%" obj (-> obj type)) - (format #t "~1Tlength: ~D~%" (-> obj length)) - (format #t "~1Tallocated-length: ~D~%" (-> obj allocated-length)) - (label cfg-4) - obj - ) (define *debug-lines* (the-as (inline-array debug-line) (malloc 'debug #x100000))) (define *debug-lines-trk* (new 'debug 'debug-tracking-thang)) @@ -1789,11 +1745,20 @@ ;; Boundary Debug ;;;;;;;;;;;;;;;;;; -;; TODO: missing a bunch of functions here +;; the debug drawing for boundaries reuses the sky polygon drawing code. +;; this does a bunch of crazy that violate calling conventions, so it's all in C++ and patched. -(define-extern init-boundary-regs (function none)) +(when *debug-segment* + (define *boundary-polygon* (the-as (inline-array sky-vertex) (malloc 'debug 768))) + ) -(defun-debug add-boundary-shader ((tex-id texture-id) (buf dma-buffer)) +;; init-boundary-regs loads vf registers with math camera values and stuff from sky-work +(def-mips2c init-boundary-regs (function none)) + +;; add-boundary-shader +(defun add-boundary-shader ((tex-id texture-id) (buf dma-buffer)) + "Generate adgif shader data (including GIF tag, but not VIF/DMA) for the given + texture, and write to the given dma-buffer." (let ((tex (lookup-texture-by-id tex-id))) (when tex (let* ((v1-0 buf) @@ -1824,14 +1789,158 @@ (none) ) +;; draw-boundary-polygon : this is handled entirely in mips2c +;; render-boundary-quad +;; render-boundary-tri +(def-mips2c render-boundary-tri (function sky-vertex dma-buffer none)) -;;;;;;;;;;;;;;;;;; -;; More Misc -;;;;;;;;;;;;;;;;;; +;; add-debug-bound-internal sneaks an extra value in vf27 - so this set-sky-vf27 function +;; was added so we can pass this value down to c++. +(def-mips2c set-sky-vf27 (function object none)) -(define-extern cpu-delay (function int none)) +(defun add-debug-bound-internal ((buf dma-buffer) (pts (inline-array vector)) (num-pts int) (color0 rgba) (color1 rgba) (flip-tex int)) + "Draw a boundary polygon using the boundary renderer. This renderer reuses components of the sky render + to properly clip (and subdivide) very large polgons. + This is intended to be called by add-debug-bound, after it has set up dma buffers for the boundary rendering." + (rlet ((vf27 :class vf)) + (set-vector! + (-> *boundary-polygon* 0 col) + (the float (-> color0 r)) + (the float (-> color0 g)) + (the float (-> color0 b)) + (the float (-> color0 a)) + ) + (set-vector! + (-> *boundary-polygon* 1 col) + (the float (-> color1 r)) + (the float (-> color1 g)) + (the float (-> color1 b)) + (the float (-> color1 a)) + ) + (init-boundary-regs) + ;;(.lvf vf27 (&-> *sky-work* giftag-roof quad)) + (set-sky-vf27 (&-> *sky-work* giftag-roof quad)) + (let ((s3-0 0) + (s2-1 (if (nonzero? flip-tex) + (new 'static 'matrix :vector (new 'static 'inline-array vector 4 + (new 'static 'vector :x 1.0 :y 8.0 :z 1.0 :w 1.0) + (new 'static 'vector :z 1.0 :w 1.0) + (new 'static 'vector :y 8.0 :z 1.0 :w 1.0) + (new 'static 'vector :x 1.0 :z 1.0 :w 1.0) + ) + ) + (new 'static 'matrix :vector (new 'static 'inline-array vector 4 + (new 'static 'vector :z 1.0 :w 1.0) + (new 'static 'vector :y 8.0 :z 1.0 :w 1.0) + (new 'static 'vector :x 1.0 :z 1.0 :w 1.0) + (new 'static 'vector :x 1.0 :y 8.0 :z 1.0 :w 1.0) + ) + ) + ) + ) + ) + (while (< s3-0 (+ num-pts -2)) + (cond + ((not (logtest? s3-0 1)) + (dotimes (v1-6 3) + (set! (-> *boundary-polygon* v1-6 pos quad) (-> pts (+ s3-0 v1-6) quad)) + (set! (-> *boundary-polygon* v1-6 stq quad) (-> s2-1 vector (+ s3-0 v1-6) quad)) + ) + ) + (else + (set! (-> *boundary-polygon* 0 pos quad) (-> pts (+ s3-0 1) quad)) + (set! (-> *boundary-polygon* 1 pos quad) (-> pts s3-0 quad)) + (set! (-> *boundary-polygon* 2 pos quad) (-> pts (+ s3-0 2) quad)) + (set! (-> *boundary-polygon* 0 stq quad) (-> s2-1 vector (+ s3-0 1) quad)) + (set! (-> *boundary-polygon* 1 stq quad) (-> s2-1 vector s3-0 quad)) + (set! (-> *boundary-polygon* 2 stq quad) (-> s2-1 vector (+ s3-0 2) quad)) + ) + ) + (render-boundary-tri (-> *boundary-polygon* 0) buf) + (+! s3-0 1) + ) + ) + (none) + ) + ) -(define-extern qword-read-time (function (array uint128) int int)) - -;; Returns whether some workaround for an EE memory controller bug is enabled. -(define-extern bugfix? (function symbol)) +(defun add-debug-bound ((buf bucket-id) (pts (inline-array vector)) (c0 int) (c1 rgba) (flash rgba) (arg5 int)) + "Draw a debug boundary polygon." + (local-vars (sv-16 pointer) (sv-32 int)) + (set! sv-32 arg5) + (if (< c0 3) + (return 0) + ) + (case sv-32 + ((1) + (if (logtest? (-> *display* real-frame-clock integral-frame-counter) 4) + (set! sv-32 1) + (set! sv-32 0) + ) + sv-32 + ) + ) + (let* ((s4-0 (-> *display* frames (-> *display* on-screen) global-buf)) + (s5-0 (-> s4-0 base)) + ) + (let* ((v1-16 s4-0) + (a0-3 (the-as dma-packet (-> v1-16 base))) + ) + (set! (-> a0-3 dma) (new 'static 'dma-tag :qwc #x4 :id (dma-tag-id cnt))) + (set! (-> a0-3 vif0) (new 'static 'vif-tag)) + (set! (-> a0-3 vif1) (new 'static 'vif-tag :imm #x4 :cmd (vif-cmd direct) :msk #x1)) + (set! (-> v1-16 base) (the-as pointer (the-as dma-packet (&+ a0-3 16)))) + ) + (let* ((v1-17 s4-0) + (a0-5 (the-as gs-gif-tag (-> v1-17 base))) + ) + (set! (-> a0-5 tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x3)) + (set! (-> a0-5 regs) GIF_REGS_ALL_AD) + (set! (-> v1-17 base) (the-as pointer (the-as gs-gif-tag (&+ a0-5 16)))) + ) + (let* ((v1-18 s4-0) + (a0-7 (-> v1-18 base)) + ) + (set! (-> (the-as (pointer gs-zbuf) a0-7) 0) (new 'static 'gs-zbuf :zbp #x130 :psm (gs-psm ct24))) + (set! (-> (the-as (pointer gs-reg64) a0-7) 1) (gs-reg64 zbuf-1)) + (set! (-> (the-as (pointer gs-test) a0-7) 2) (new 'static 'gs-test + :ate #x1 + :atst (gs-atest greater-equal) + :aref #x26 + :zte #x1 + :ztst (gs-ztest greater-equal) + ) + ) + (set! (-> (the-as (pointer gs-reg64) a0-7) 3) (gs-reg64 test-1)) + (set! (-> (the-as (pointer gs-alpha) a0-7) 4) (new 'static 'gs-alpha :b #x1 :d #x1)) + (set! (-> (the-as (pointer gs-reg64) a0-7) 5) (gs-reg64 alpha-1)) + (set! (-> v1-18 base) (&+ a0-7 48)) + ) + (set! sv-16 (-> s4-0 base)) + (&+! (-> s4-0 base) 16) + (add-boundary-shader (new 'static 'texture-id :index #x3 :page #x70c) s4-0) + (add-debug-bound-internal s4-0 pts c0 c1 flash sv-32) + (close-sky-buffer s4-0) + (let ((v1-25 (/ (the-as int (+ (- -16 (the-as int sv-16)) (the-as int (-> s4-0 base)))) 16))) + (set! (-> (the-as dma-packet sv-16) dma) (new 'static 'dma-tag :id (dma-tag-id cnt) :qwc v1-25)) + (set! (-> (the-as dma-packet sv-16) vif0) (new 'static 'vif-tag)) + (set! (-> (the-as dma-packet sv-16) vif1) (new 'static 'vif-tag :cmd (vif-cmd direct) :msk #x1 :imm v1-25)) + ) + (let ((a3-2 (-> s4-0 base))) + (let ((v1-29 (the-as dma-packet (-> s4-0 base)))) + (set! (-> v1-29 dma) (new 'static 'dma-tag :id (dma-tag-id next))) + (set! (-> v1-29 vif0) (new 'static 'vif-tag)) + (set! (-> v1-29 vif1) (new 'static 'vif-tag)) + (set! (-> s4-0 base) (the-as pointer (the-as dma-packet (&+ v1-29 16)))) + ) + (dma-bucket-insert-tag + (-> *display* frames (-> *display* on-screen) bucket-group) + buf + s5-0 + (the-as (pointer dma-tag) a3-2) + ) + ) + ) + 0 + (none) + ) \ No newline at end of file diff --git a/goal_src/jak2/engine/debug/editable.gc b/goal_src/jak2/engine/debug/editable.gc index 6b0126dd9f..20e76990f7 100644 --- a/goal_src/jak2/engine/debug/editable.gc +++ b/goal_src/jak2/engine/debug/editable.gc @@ -1164,14 +1164,14 @@ ) ) (add-debug-bound - 324 - (the-as transform gp-0) + (bucket-id debug2) + gp-0 sv-112 (if (logtest? (-> obj flags) (editable-flag orient)) (the-as rgba (-> (new 'static 'array uint64 1 #x800000ff) 0)) (the-as rgba (-> (new 'static 'array uint64 1 #x8000ffff) 0)) ) - (if (zero? (logand (-> obj flags) (editable-flag orient))) + (if (not (logtest? (-> obj flags) (editable-flag orient))) (the-as rgba (-> (new 'static 'array uint64 1 #x800000ff) 0)) (the-as rgba (-> (new 'static 'array uint64 1 #x8000ffff) 0)) ) @@ -1454,14 +1454,14 @@ (the-as rgba -1) ) (add-debug-bound - 324 - (the-as transform gp-0) + (bucket-id debug2) + (the-as (inline-array vector) gp-0) s4-0 (if (logtest? (-> obj flags) (editable-flag orient)) (the-as rgba (-> (new 'static 'array uint64 1 #x800000ff) 0)) (the-as rgba (-> (new 'static 'array uint64 1 #x8000ffff) 0)) ) - (if (zero? (logand (-> obj flags) (editable-flag orient))) + (if (not (logtest? (-> obj flags) (editable-flag orient))) (the-as rgba (-> (new 'static 'array uint64 1 #x800000ff) 0)) (the-as rgba (-> (new 'static 'array uint64 1 #x8000ffff) 0)) ) diff --git a/goal_src/jak2/engine/gfx/sky/sky-h.gc b/goal_src/jak2/engine/gfx/sky/sky-h.gc index d628c676c4..66cd6d016f 100644 --- a/goal_src/jak2/engine/gfx/sky/sky-h.gc +++ b/goal_src/jak2/engine/gfx/sky/sky-h.gc @@ -5,6 +5,8 @@ ;; name in dgo: sky-h ;; dgos: ENGINE, GAME +(define-extern close-sky-buffer (function dma-buffer none)) + ;; DECOMP BEGINS (deftype sky-color-hour (structure) diff --git a/goal_src/jak2/engine/gfx/sky/sky-tng.gc b/goal_src/jak2/engine/gfx/sky/sky-tng.gc index 88513567d4..0f4703e23d 100644 --- a/goal_src/jak2/engine/gfx/sky/sky-tng.gc +++ b/goal_src/jak2/engine/gfx/sky/sky-tng.gc @@ -9,6 +9,24 @@ ;; TODO + +(defun close-sky-buffer ((arg0 dma-buffer)) + (nop!) + (let ((v1-0 #x8000) + (v0-0 (-> arg0 base)) + ) + (set! (-> (the-as (pointer uint128) v0-0)) (the uint128 0)) + (nop!) + (set! (-> (the-as (pointer int32) v0-0)) v1-0) + (let ((v0-1 (&+ v0-0 16))) + ;; to save like 1 instruction they put this in the delay slot of the jr-ra + ;;(.jr ra-0) + (set! (-> arg0 base) v0-1) + ) + ) + (none) + ) + (defmethod update-time-and-speed sky-work ((obj sky-work) (arg0 float) (arg1 float)) (if (and (level-get-target-inside *level*) (= (-> (level-get-target-inside *level*) info taskname) 'nest)) (set! arg1 (* 10.0 arg1)) diff --git a/goal_src/jak2/engine/level/region.gc b/goal_src/jak2/engine/level/region.gc index 432898e292..1806e1b8d9 100644 --- a/goal_src/jak2/engine/level/region.gc +++ b/goal_src/jak2/engine/level/region.gc @@ -300,8 +300,8 @@ (add-debug-sphere #t (bucket-id debug2) s5-0 (-> obj bsphere w) (new 'static 'rgba :r #xff :a #x30)) ) (add-debug-bound - 324 - (the-as transform (-> obj data points)) + (bucket-id debug2) + (-> obj data points) (the-as int (-> obj data num-points)) (new 'static 'rgba :r #xff :g #xff :a #x80) (new 'static 'rgba :r #xff :a #x80) diff --git a/test/decompiler/reference/jak2/engine/debug/debug_REF.gc b/test/decompiler/reference/jak2/engine/debug/debug_REF.gc index b80c433a3e..12d5ac2844 100644 --- a/test/decompiler/reference/jak2/engine/debug/debug_REF.gc +++ b/test/decompiler/reference/jak2/engine/debug/debug_REF.gc @@ -1877,8 +1877,8 @@ ;; this part is debug only (when *debug-segment* -;; definition for symbol *boundary-polygon*, type none -(define *boundary-polygon* (the-as none (malloc 'debug 768))) +;; definition for symbol *boundary-polygon*, type (inline-array sky-vertex) +(define *boundary-polygon* (the-as (inline-array sky-vertex) (malloc 'debug 768))) ) ;; definition (debug) for function init-boundary-regs @@ -1927,224 +1927,152 @@ ;; ERROR: function was not converted to expressions. Cannot decompile. ;; definition (debug) for function add-debug-bound-internal -;; ERROR: function has no type analysis. Cannot decompile. +;; INFO: Used lq/sq +;; WARN: Return type mismatch symbol vs none. +(defun-debug add-debug-bound-internal ((buf dma-buffer) (pts (inline-array vector)) (num-pts int) (color0 rgba) (color1 rgba) (flip-tex int)) + (rlet ((vf27 :class vf)) + (set-vector! + (-> *boundary-polygon* 0 col) + (the float (-> color0 r)) + (the float (-> color0 g)) + (the float (-> color0 b)) + (the float (-> color0 a)) + ) + (set-vector! + (-> *boundary-polygon* 1 col) + (the float (-> color1 r)) + (the float (-> color1 g)) + (the float (-> color1 b)) + (the float (-> color1 a)) + ) + (init-boundary-regs) + (.lvf vf27 (&-> *sky-work* giftag-roof quad)) + (let ((s3-0 0) + (s2-1 (if (nonzero? flip-tex) + (new 'static 'matrix :vector (new 'static 'inline-array vector 4 + (new 'static 'vector :x 1.0 :y 8.0 :z 1.0 :w 1.0) + (new 'static 'vector :z 1.0 :w 1.0) + (new 'static 'vector :y 8.0 :z 1.0 :w 1.0) + (new 'static 'vector :x 1.0 :z 1.0 :w 1.0) + ) + ) + (new 'static 'matrix :vector (new 'static 'inline-array vector 4 + (new 'static 'vector :z 1.0 :w 1.0) + (new 'static 'vector :y 8.0 :z 1.0 :w 1.0) + (new 'static 'vector :x 1.0 :z 1.0 :w 1.0) + (new 'static 'vector :x 1.0 :y 8.0 :z 1.0 :w 1.0) + ) + ) + ) + ) + ) + (while (< s3-0 (+ num-pts -2)) + (cond + ((not (logtest? s3-0 1)) + (dotimes (v1-6 3) + (set! (-> *boundary-polygon* v1-6 pos quad) (-> pts (+ s3-0 v1-6) quad)) + (set! (-> *boundary-polygon* v1-6 stq quad) (-> s2-1 vector (+ s3-0 v1-6) quad)) + ) + ) + (else + (set! (-> *boundary-polygon* 0 pos quad) (-> pts (+ s3-0 1) quad)) + (set! (-> *boundary-polygon* 1 pos quad) (-> pts s3-0 quad)) + (set! (-> *boundary-polygon* 2 pos quad) (-> pts (+ s3-0 2) quad)) + (set! (-> *boundary-polygon* 0 stq quad) (-> s2-1 vector (+ s3-0 1) quad)) + (set! (-> *boundary-polygon* 1 stq quad) (-> s2-1 vector s3-0 quad)) + (set! (-> *boundary-polygon* 2 stq quad) (-> s2-1 vector (+ s3-0 2) quad)) + ) + ) + (render-boundary-tri (-> *boundary-polygon* 0) buf) + (+! s3-0 1) + ) + ) + (none) + ) + ) ;; definition (debug) for function add-debug-bound ;; INFO: Used lq/sq -;; ERROR: failed type prop at 82: Called a function, but we do not know its type ;; WARN: Return type mismatch int vs none. -(defun-debug add-debug-bound ((a0-0 int) (a1-0 transform) (a2-0 int) (a3-0 rgba) (t0-0 rgba) (t1-0 int)) - (local-vars - (v0-0 int) - (v0-1 none) - (v0-2 none) - (v0-3 none) - (v0-4 none) - (v0-5 none) - (v1-2 int) - (v1-4 display) - (v1-5 clock) - (v1-6 uint) - (v1-7 uint) - (v1-8 int) - (v1-9 int) - (v1-10 int) - (v1-11 display) - (v1-12 int) - (v1-13 int) - (v1-14 int) - (v1-15 display-frame) - (v1-16 dma-buffer) - (v1-17 dma-buffer) - (v1-18 dma-buffer) - (v1-19 pointer) - (v1-20 pointer) - (v1-21 pointer) - (v1-22 none) - (v1-23 none) - (v1-24 none) - (v1-25 none) - (v1-26 none) - (v1-27 none) - (v1-28 none) - (v1-29 none) - (v1-30 none) - (v1-31 none) - (v1-32 none) - (v1-33 none) - (v1-34 none) - (v1-35 none) - (a0-1 int) - (a0-2 display) - (a0-3 pointer) - (a0-4 pointer) - (a0-5 pointer) - (a0-6 pointer) - (a0-7 pointer) - (a0-8 pointer) - (a0-9 int) - (a0-12 none) - (a0-13 none) - (a0-14 none) - (a0-15 none) - (a0-16 none) - (a0-17 none) - (a0-18 none) - (a0-19 none) - (a0-20 none) - (a0-21 none) - (a1-1 int) - (a1-2 int) - (a1-3 uint) - (a1-4 uint) - (a1-5 uint) - (a1-6 int) - (a1-7 int) - (a1-8 int) - (a1-9 int) - (a1-10 int) - (a1-11 int) - (a1-12 dma-buffer) - (a1-14 none) - (a1-15 none) - (a1-16 none) - (a3-2 none) - (t1-1 int) - (s4-0 dma-buffer) - (s5-0 pointer) - (t9-0 (function texture-id dma-buffer none)) - (t9-1 function) - (t9-2 none) - (t9-3 none) - (sv-16 pointer) - (sv-32 int) - ) - (if (begin (set! sv-32 t1-0) (<.si a2-0 3)) - (return (set! v0-0 0)) +;; WARN: Function add-debug-bound has a return type of none, but the expression builder found a return statement. +(defun-debug add-debug-bound ((buf bucket-id) (pts (inline-array vector)) (c0 int) (c1 rgba) (flash rgba) (arg5 int)) + (local-vars (sv-16 pointer) (sv-32 int)) + (set! sv-32 arg5) + (if (< c0 3) + (return 0) ) - (when (begin (set! v1-2 sv-32) (set! a0-1 1) (= v1-2 a0-1)) - (cond - ((begin - (set! v1-4 *display*) - (set! v1-5 (-> v1-4 real-frame-clock)) - (set! v1-6 (-> v1-5 integral-frame-counter)) - (set! v1-7 (logand v1-6 4)) - (nonzero? v1-7) + (case sv-32 + ((1) + (if (logtest? (-> *display* real-frame-clock integral-frame-counter) 4) + (set! sv-32 1) + (set! sv-32 0) ) - (set! v1-8 1) - (set! sv-32 v1-8) - ) - (else - (set! v1-9 0) - (set! sv-32 v1-9) + sv-32 + ) + ) + (let* ((s4-0 (-> *display* frames (-> *display* on-screen) global-buf)) + (s5-0 (-> s4-0 base)) + ) + (let* ((v1-16 s4-0) + (a0-3 (the-as dma-packet (-> v1-16 base))) + ) + (set! (-> a0-3 dma) (new 'static 'dma-tag :qwc #x4 :id (dma-tag-id cnt))) + (set! (-> a0-3 vif0) (new 'static 'vif-tag)) + (set! (-> a0-3 vif1) (new 'static 'vif-tag :imm #x4 :cmd (vif-cmd direct) :msk #x1)) + (set! (-> v1-16 base) (the-as pointer (the-as dma-packet (&+ a0-3 16)))) + ) + (let* ((v1-17 s4-0) + (a0-5 (the-as gs-gif-tag (-> v1-17 base))) + ) + (set! (-> a0-5 tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x3)) + (set! (-> a0-5 regs) GIF_REGS_ALL_AD) + (set! (-> v1-17 base) (the-as pointer (the-as gs-gif-tag (&+ a0-5 16)))) + ) + (let* ((v1-18 s4-0) + (a0-7 (-> v1-18 base)) + ) + (set! (-> (the-as (pointer gs-zbuf) a0-7) 0) (new 'static 'gs-zbuf :zbp #x130 :psm (gs-psm ct24))) + (set! (-> (the-as (pointer gs-reg64) a0-7) 1) (gs-reg64 zbuf-1)) + (set! (-> (the-as (pointer gs-test) a0-7) 2) (new 'static 'gs-test + :ate #x1 + :atst (gs-atest greater-equal) + :aref #x26 + :zte #x1 + :ztst (gs-ztest greater-equal) + ) + ) + (set! (-> (the-as (pointer gs-reg64) a0-7) 3) (gs-reg64 test-1)) + (set! (-> (the-as (pointer gs-alpha) a0-7) 4) (new 'static 'gs-alpha :b #x1 :d #x1)) + (set! (-> (the-as (pointer gs-reg64) a0-7) 5) (gs-reg64 alpha-1)) + (set! (-> v1-18 base) (&+ a0-7 48)) + ) + (set! sv-16 (-> s4-0 base)) + (&+! (-> s4-0 base) 16) + (add-boundary-shader (new 'static 'texture-id :index #x3 :page #x70c) s4-0) + (add-debug-bound-internal s4-0 pts c0 c1 flash sv-32) + (close-sky-buffer s4-0) + (let ((v1-25 (/ (the-as int (+ (- -16 (the-as int sv-16)) (the-as int (-> s4-0 base)))) 16))) + (set! (-> (the-as dma-packet sv-16) dma) (new 'static 'dma-tag :id (dma-tag-id cnt) :qwc v1-25)) + (set! (-> (the-as dma-packet sv-16) vif0) (new 'static 'vif-tag)) + (set! (-> (the-as dma-packet sv-16) vif1) (new 'static 'vif-tag :cmd (vif-cmd direct) :msk #x1 :imm v1-25)) + ) + (let ((a3-2 (-> s4-0 base))) + (let ((v1-29 (the-as dma-packet (-> s4-0 base)))) + (set! (-> v1-29 dma) (new 'static 'dma-tag :id (dma-tag-id next))) + (set! (-> v1-29 vif0) (new 'static 'vif-tag)) + (set! (-> v1-29 vif1) (new 'static 'vif-tag)) + (set! (-> s4-0 base) (the-as pointer (the-as dma-packet (&+ v1-29 16)))) + ) + (dma-bucket-insert-tag + (-> *display* frames (-> *display* on-screen) bucket-group) + buf + s5-0 + (the-as (pointer dma-tag) a3-2) ) ) - (set! v1-10 sv-32) ) - (set! v1-11 *display*) - (set! v1-12 (-> v1-11 on-screen)) - (set! v1-13 (sll v1-12 2)) - (set! a0-2 *display*) - (set! v1-14 (+ v1-13 a0-2)) - (set! v1-15 (dynamic-array-field-access v1-14 frames PLACEHOLDER)) - (set! s4-0 (-> v1-15 global-buf)) - (set! s5-0 (-> s4-0 base)) - (set! v1-16 s4-0) - (set! a0-3 (-> v1-16 base)) - (set! a1-1 #x10000004) - (set! (the-as (pointer int64) (-> (the-as (pointer int64) a0-3))) a1-1) - (s.w! (+ a0-3 8) 0) - (set! a1-2 #x50000004) - (s.w! (+ a0-3 12) a1-2) - (set! a0-4 (+ a0-3 16)) - (set! (-> v1-16 base) a0-4) - (set! v1-17 s4-0) - (set! a0-5 (-> v1-17 base)) - (set! a1-3 (the-as uint #x3000000000008001)) - (set! a1-4 (pcypld 0 a1-3)) - (set! (the-as (pointer uint64) (-> (the-as (pointer uint64) a0-5))) a1-4) - (set! a1-5 (the-as uint #xeeeeeeeeeeeeeeee)) - (s.d! (+ a0-5 8) a1-5) - (set! a0-6 (+ a0-5 16)) - (set! (-> v1-17 base) a0-6) - (set! v1-18 s4-0) - (set! a0-7 (-> v1-18 base)) - (set! a1-6 #x1000130) - (set! (the-as (pointer int64) (-> (the-as (pointer int64) a0-7))) a1-6) - (set! a1-7 78) - (s.d! (+ a0-7 8) a1-7) - (set! a1-8 #x5026b) - (s.d! (+ a0-7 16) a1-8) - (set! a1-9 71) - (s.d! (+ a0-7 24) a1-9) - (set! a1-10 68) - (s.d! (+ a0-7 32) a1-10) - (set! a1-11 66) - (s.d! (+ a0-7 40) a1-11) - (set! a0-8 (+ a0-7 48)) - (set! (-> v1-18 base) a0-8) - (set! v1-19 (-> s4-0 base)) - (set! sv-16 v1-19) - (set! v1-20 (-> s4-0 base)) - (set! v1-21 (+ v1-20 16)) - (set! (-> s4-0 base) v1-21) - (set! t9-0 add-boundary-shader) - (set! a0-9 #x70c00300) - (set! a1-12 s4-0) - (call! a0-9 a1-12) - (set! t9-1 add-debug-bound-internal) - (set! a0-10 s4-0) - (set! a1-13 a1-0) - (set! a2-1 a2-0) - (set! a3-1 a3-0) - (set! t0-1 t0-0) - (set! t1-1 sv-32) - (call!) - (set! t9-2 (the-as none close-sky-buffer)) - (set! a0-11 (the-as none s4-0)) - (call!) - (set! v1-22 (the-as none -16)) - (set! a0-12 (the-as none sv-16)) - (set! v1-23 (the-as none (- v1-22 a0-12))) - (set! a0-13 (the-as none (-> s4-0 base))) - (set! v1-24 (the-as none (+ v1-23 a0-13))) - (set! v1-25 (the-as none (sra v1-24 4))) - (set! a0-14 (the-as none #x10000000)) - (set! a1-14 (the-as none (sll v1-25 48))) - (set! a1-15 (the-as none (srl a1-14 48))) - (set! a0-15 (the-as none (logior a0-14 a1-15))) - (set! a1-16 (the-as none sv-16)) - (s.d! a1-16 a0-15) - (set! a0-16 (the-as none sv-16)) - (s.w! (+ a0-16 8) 0) - (set! a0-17 (the-as none #x50000000)) - (set! v1-26 (the-as none (sll v1-25 48))) - (set! v1-27 (the-as none (srl v1-26 48))) - (set! a0-18 (the-as none (logior a0-17 v1-27))) - (set! v1-28 (the-as none sv-16)) - (s.w! (+ v1-28 12) a0-18) - (set! a3-2 (the-as none (-> s4-0 base))) - (set! v1-29 (the-as none (-> s4-0 base))) - (set! a0-19 (the-as none #x20000000)) - (s.d! v1-29 a0-19) - (s.w! (+ v1-29 8) 0) - (s.w! (+ v1-29 12) 0) - (set! v1-30 (the-as none (+ v1-29 16))) - (set! (-> s4-0 base) (the-as pointer v1-30)) - (set! t9-3 (the-as none dma-bucket-insert-tag)) - (set! v1-31 (the-as none *display*)) - (set! v1-32 (the-as none (l.w v1-31))) - (set! v1-33 (the-as none (sll v1-32 2))) - (set! a0-20 (the-as none *display*)) - (set! v1-34 (the-as none (+ v1-33 a0-20))) - (set! v1-35 (the-as none (l.wu (+ v1-34 8)))) - (set! a0-21 (the-as none (l.wu (+ v1-35 40)))) - (set! a1-17 (the-as none a0-0)) - (set! a2-2 (the-as none s5-0)) - (call!) - (set! v1-36 (the-as none v0-4)) - (set! v0-5 (the-as none 0)) - (ret-none) + 0 + (none) ) ;; definition (debug) for function cpu-delay diff --git a/test/decompiler/reference/jak2/engine/debug/editable_REF.gc b/test/decompiler/reference/jak2/engine/debug/editable_REF.gc index 11ddc7b59e..07e0a7b6b9 100644 --- a/test/decompiler/reference/jak2/engine/debug/editable_REF.gc +++ b/test/decompiler/reference/jak2/engine/debug/editable_REF.gc @@ -1416,8 +1416,8 @@ ) ) (add-debug-bound - 324 - (the-as transform gp-0) + (bucket-id debug2) + gp-0 sv-112 (if (logtest? (-> obj flags) (editable-flag orient)) (the-as rgba (-> (new 'static 'array uint64 1 #x800000ff) 0)) @@ -1778,8 +1778,8 @@ (the-as rgba -1) ) (add-debug-bound - 324 - (the-as transform gp-0) + (bucket-id debug2) + (the-as (inline-array vector) gp-0) s4-0 (if (logtest? (-> obj flags) (editable-flag orient)) (the-as rgba (-> (new 'static 'array uint64 1 #x800000ff) 0)) diff --git a/test/decompiler/reference/jak2/engine/level/region_REF.gc b/test/decompiler/reference/jak2/engine/level/region_REF.gc index bc8b369437..7c33086aa4 100644 --- a/test/decompiler/reference/jak2/engine/level/region_REF.gc +++ b/test/decompiler/reference/jak2/engine/level/region_REF.gc @@ -323,8 +323,8 @@ (add-debug-sphere #t (bucket-id debug2) s5-0 (-> obj bsphere w) (new 'static 'rgba :r #xff :a #x30)) ) (add-debug-bound - 324 - (the-as transform (-> obj data points)) + (bucket-id debug2) + (-> obj data points) (the-as int (-> obj data num-points)) (new 'static 'rgba :r #xff :g #xff :a #x80) (new 'static 'rgba :r #xff :a #x80)