From caac740afff8b0e4e50e7afe2c555e2263b108bd Mon Sep 17 00:00:00 2001 From: ManDude <7569514+ManDude@users.noreply.github.com> Date: Sat, 16 Oct 2021 19:06:33 +0100 Subject: [PATCH] [decomp] `fisher` and `FIN.DGO` (finalboss) level (#899) * decomp `fisher`, `robotboss`, `light-eco`, `green-eco-lurker`, `sage-finalboss`, `robotboss-weapon`, `robotboss-misc` * fixes * add files * add `:states` list to `deftype` and fix files * test state forward decl's on a few more types * also the refs * add light-eco * whatever --- common/type_system/Type.cpp | 38 +- common/type_system/Type.h | 12 + common/type_system/TypeSystem.cpp | 20 + common/type_system/deftype.cpp | 33 +- decompiler/IR2/AtomicOpTypeAnalysis.cpp | 9 +- decompiler/config/all-types.gc | 1332 ++-- .../anonymous_function_types.jsonc | 40 +- .../config/jak1_ntsc_black_label/hacks.jsonc | 3 - .../jak1_ntsc_black_label/label_types.jsonc | 153 + .../stack_structures.jsonc | 209 +- .../jak1_ntsc_black_label/type_casts.jsonc | 270 +- .../jak1_ntsc_black_label/var_names.jsonc | 24 + .../jak1_pal/anonymous_function_types.jsonc | 27 +- decompiler/config/jak1_pal/hacks.jsonc | 13 +- decompiler/config/jak1_pal/label_types.jsonc | 211 + .../config/jak1_pal/stack_structures.jsonc | 252 +- decompiler/config/jak1_pal/type_casts.jsonc | 436 +- decompiler/config/jak1_pal/var_names.jsonc | 6 + decompiler/util/DecompilerTypeSystem.cpp | 4 + decompiler/util/data_decompile.cpp | 69 +- goal_src/engine/camera/camera-h.gc | 1 + goal_src/engine/camera/camera.gc | 81 +- goal_src/engine/collide/collide-shape-h.gc | 5 +- goal_src/engine/collide/collide-target-h.gc | 3 +- goal_src/engine/data/art-h.gc | 2 +- goal_src/engine/debug/default-menu.gc | 4 +- goal_src/engine/entity/relocate.gc | 2 +- goal_src/engine/game/game-h.gc | 2 +- goal_src/engine/game/generic-obs-h.gc | 12 +- goal_src/engine/game/projectiles.gc | 95 +- goal_src/engine/game/task/process-taskable.gc | 105 +- goal_src/engine/game/task/task-control-h.gc | 20 +- goal_src/engine/game/task/task-control.gc | 4 +- goal_src/engine/sound/gsound-h.gc | 4 +- goal_src/engine/ui/text-h.gc | 14 +- goal_src/kernel-defs.gc | 2 +- goal_src/levels/beach/bird-lady.gc | 12 +- goal_src/levels/beach/lurkercrab.gc | 15 +- goal_src/levels/beach/mayor.gc | 65 +- goal_src/levels/beach/sculptor.gc | 122 +- goal_src/levels/citadel/citb-drop-plat-CIT.gc | 91 +- goal_src/levels/common/babak-with-cannon.gc | 40 +- goal_src/levels/common/babak.gc | 4 +- goal_src/levels/common/basebutton.gc | 32 +- goal_src/levels/common/baseplat.gc | 7 +- goal_src/levels/common/battlecontroller.gc | 12 +- goal_src/levels/common/nav-enemy-h.gc | 10 +- goal_src/levels/common/nav-enemy.gc | 157 +- goal_src/levels/common/plat-button.gc | 61 +- goal_src/levels/common/plat.gc | 64 +- goal_src/levels/common/sharkey.gc | 75 +- goal_src/levels/finalboss/final-door.gc | 48 +- goal_src/levels/finalboss/green-eco-lurker.gc | 1353 ++++ goal_src/levels/finalboss/light-eco.gc | 1213 ++++ goal_src/levels/finalboss/robotboss-h.gc | 39 +- goal_src/levels/finalboss/robotboss-misc.gc | 890 +++ goal_src/levels/finalboss/robotboss-weapon.gc | 1540 ++++ goal_src/levels/finalboss/robotboss.gc | 6328 ++++++++++++++++ .../levels/finalboss/sage-finalboss-FIN.gc | 7 + .../levels/firecanyon/assistant-firecanyon.gc | 23 +- goal_src/levels/jungle/bouncer.gc | 29 +- goal_src/levels/jungle/hopper.gc | 60 +- .../levels/lavatube/assistant-lavatube.gc | 19 +- goal_src/levels/maincave/baby-spider.gc | 123 +- goal_src/levels/maincave/spiderwebs.gc | 8 +- goal_src/levels/misty/bonelurker.gc | 6 +- goal_src/levels/misty/misty-conveyor.gc | 29 +- goal_src/levels/misty/misty-warehouse.gc | 40 +- goal_src/levels/misty/muse.gc | 87 +- goal_src/levels/misty/sidekick-human.gc | 131 +- goal_src/levels/snow/yeti.gc | 16 +- goal_src/levels/sunken/qbert-plat.gc | 17 +- goal_src/levels/sunken/square-platform.gc | 5 +- goal_src/levels/sunken/wall-plat.gc | 10 +- goal_src/levels/sunken/wedge-plats.gc | 47 +- goal_src/levels/swamp/swamp-bat.gc | 45 +- goal_src/levels/swamp/swamp-rat-nest.gc | 44 +- goal_src/levels/swamp/swamp-rat.gc | 19 +- goal_src/levels/village1/assistant.gc | 47 +- goal_src/levels/village1/explorer.gc | 39 +- goal_src/levels/village1/farmer.gc | 33 +- goal_src/levels/village1/fishermans-boat.gc | 31 +- goal_src/levels/village1/sage.gc | 63 +- goal_src/levels/village1/yakow.gc | 16 +- .../levels/village2/assistant-village2.gc | 61 +- goal_src/levels/village2/gambler.gc | 53 +- goal_src/levels/village2/geologist.gc | 57 +- goal_src/levels/village2/sage-bluehut.gc | 36 +- goal_src/levels/village2/warrior.gc | 21 +- .../levels/village3/assistant-village3.gc | 31 +- goal_src/levels/village3/miners.gc | 79 +- goal_src/levels/village3/sage-village3.gc | 46 +- goalc/compiler/compilation/Type.cpp | 19 + scripts/batch/gc-no-lt.bat | 4 + .../reference/engine/camera/camera_REF.gc | 4 +- .../engine/collide/collide-shape-h_REF.gc | 11 +- .../engine/collide/collide-target-h_REF.gc | 3 +- .../reference/engine/data/art-h_REF.gc | 2 +- .../reference/engine/debug/debug_REF.gc | 2 +- .../reference/engine/debug/menu_REF.gc | 16 +- .../reference/engine/entity/relocate_REF.gc | 6 +- .../reference/engine/game/game-h_REF.gc | 2 +- .../engine/game/generic-obs-h_REF.gc | 38 +- .../reference/engine/game/projectiles_REF.gc | 14 +- .../engine/game/task/process-taskable_REF.gc | 116 +- .../engine/game/task/task-control-h_REF.gc | 20 +- .../engine/game/task/task-control_REF.gc | 65 +- .../reference/engine/sound/gsound-h_REF.gc | 4 +- .../reference/engine/sound/gsound_REF.gc | 2 +- .../engine/target/logic-target_REF.gc | 13 +- .../engine/target/target-util_REF.gc | 7 +- .../reference/levels/beach/beach-part_REF.gc | 21 +- .../levels/beach/bird-lady-beach_REF.gc | 13 +- .../reference/levels/beach/bird-lady_REF.gc | 12 +- .../reference/levels/beach/lurkercrab_REF.gc | 13 +- .../reference/levels/beach/lurkerpuppy_REF.gc | 4 +- .../reference/levels/beach/mayor_REF.gc | 65 +- .../reference/levels/beach/sculptor_REF.gc | 122 +- .../levels/citadel/assistant-citadel_REF.gc | 11 +- .../levels/citadel/citb-drop-plat-CIT_REF.gc | 22 +- .../levels/common/babak-with-cannon_REF.gc | 20 +- .../reference/levels/common/babak_REF.gc | 4 +- .../reference/levels/common/basebutton_REF.gc | 20 +- .../reference/levels/common/baseplat_REF.gc | 2 +- .../levels/common/battlecontroller_REF.gc | 12 +- .../levels/common/nav-enemy-h_REF.gc | 8 +- .../reference/levels/common/nav-enemy_REF.gc | 93 +- .../levels/common/plat-button_REF.gc | 10 +- .../reference/levels/common/plat_REF.gc | 38 +- .../reference/levels/common/sharkey_REF.gc | 14 +- .../reference/levels/common/water-anim_REF.gc | 483 +- .../levels/finalboss/final-door_REF.gc | 11 +- .../levels/finalboss/green-eco-lurker_REF.gc | 1409 ++++ .../levels/finalboss/light-eco_REF.gc | 1282 ++++ .../levels/finalboss/robotboss-h_REF.gc | 23 +- .../levels/finalboss/robotboss-misc_REF.gc | 939 +++ .../levels/finalboss/robotboss-weapon_REF.gc | 1653 +++++ .../levels/finalboss/robotboss_REF.gc | 6396 +++++++++++++++++ .../firecanyon/assistant-firecanyon_REF.gc | 18 +- .../levels/flut_common/flutflut_REF.gc | 21 +- .../reference/levels/intro/evilbro_REF.gc | 6 +- .../reference/levels/jungle/bouncer_REF.gc | 5 +- .../reference/levels/jungle/fisher-JUN_REF.gc | 3348 +++++++++ .../reference/levels/jungle/hopper_REF.gc | 16 +- .../levels/jungle/jungle-elevator_REF.gc | 10 +- .../reference/levels/jungle/junglefish_REF.gc | 4 +- .../reference/levels/jungleb/aphid_REF.gc | 4 +- .../levels/lavatube/assistant-lavatube_REF.gc | 14 +- .../levels/lavatube/lavatube-part_REF.gc | 46 +- .../levels/maincave/baby-spider_REF.gc | 120 +- .../levels/maincave/spiderwebs_REF.gc | 8 +- .../reference/levels/misty/bonelurker_REF.gc | 9 +- .../levels/misty/misty-conveyor_REF.gc | 19 +- .../reference/levels/misty/misty-part_REF.gc | 88 +- .../reference/levels/misty/muse_REF.gc | 31 +- .../levels/misty/sidekick-human_REF.gc | 9 +- .../target-racer-h-FIC-LAV-MIS-OGR-ROL_REF.gc | 4 +- .../reference/levels/snow/yeti_REF.gc | 6 +- .../reference/levels/sunken/qbert-plat_REF.gc | 12 +- .../levels/sunken/wedge-plats_REF.gc | 12 +- .../reference/levels/swamp/swamp-bat_REF.gc | 25 +- .../levels/swamp/swamp-rat-nest_REF.gc | 10 +- .../reference/levels/swamp/swamp-rat_REF.gc | 14 +- .../levels/training/training-part_REF.gc | 21 +- .../levels/village1/assistant_REF.gc | 47 +- .../reference/levels/village1/explorer_REF.gc | 39 +- .../reference/levels/village1/farmer_REF.gc | 33 +- .../levels/village1/fishermans-boat_REF.gc | 11 +- .../reference/levels/village1/sage_REF.gc | 63 +- .../levels/village1/village1-part2_REF.gc | 21 +- .../levels/village1/village1-part_REF.gc | 21 +- .../reference/levels/village1/yakow_REF.gc | 16 +- .../levels/village2/assistant-village2_REF.gc | 56 +- .../levels/village2/flutflut-bluehut_REF.gc | 6 +- .../reference/levels/village2/gambler_REF.gc | 53 +- .../levels/village2/geologist_REF.gc | 57 +- .../levels/village2/sage-bluehut_REF.gc | 36 +- .../levels/village2/village2-part_REF.gc | 84 +- .../reference/levels/village2/warrior_REF.gc | 21 +- .../levels/village3/assistant-village3_REF.gc | 31 +- .../reference/levels/village3/miners_REF.gc | 79 +- .../levels/village3/sage-village3_REF.gc | 46 +- .../levels/village3/village3-part_REF.gc | 189 +- .../levels/village_common/oracle_REF.gc | 36 +- test/offline/config.json | 5 +- 185 files changed, 30529 insertions(+), 4422 deletions(-) create mode 100644 scripts/batch/gc-no-lt.bat create mode 100644 test/decompiler/reference/levels/finalboss/green-eco-lurker_REF.gc create mode 100644 test/decompiler/reference/levels/finalboss/light-eco_REF.gc create mode 100644 test/decompiler/reference/levels/finalboss/robotboss-misc_REF.gc create mode 100644 test/decompiler/reference/levels/finalboss/robotboss-weapon_REF.gc create mode 100644 test/decompiler/reference/levels/finalboss/robotboss_REF.gc create mode 100644 test/decompiler/reference/levels/jungle/fisher-JUN_REF.gc diff --git a/common/type_system/Type.cpp b/common/type_system/Type.cpp index 8506c4da48..9dd363af01 100644 --- a/common/type_system/Type.cpp +++ b/common/type_system/Type.cpp @@ -246,6 +246,21 @@ std::string Type::common_type_info_diff(const Type& other) const { } } } + if (m_states != other.m_states) { + if (m_states.size() != other.m_states.size()) { + result += fmt::format("Number of additional states {} vs. {}\n", m_states.size(), + other.m_states.size()); + } + + for (size_t i = 0; i < std::min(m_states.size(), other.m_states.size()); i++) { + if (m_states.at(i) != other.m_states.at(i)) { + result += + fmt::format("State {} ({}/{}):\n", i, m_states.at(i).name, other.m_states.at(i).name); + result += m_states.at(i).diff(other.m_states.at(i)); + result += "\n"; + } + } + } if (m_new_method_info != other.m_new_method_info) { result += m_new_method_info.diff(other.m_new_method_info); } @@ -381,6 +396,27 @@ std::string Type::print_method_info() const { return result; } +const StateInfo& Type::add_state(const StateInfo& info) { + m_states.push_back(info); + return m_states.back(); +} + +bool StateInfo::operator==(const StateInfo& other) const { + return name == other.name && type == other.type; +} + +std::string StateInfo::diff(const StateInfo& other) const { + std::string result; + if (name != other.name) { + result += fmt::format("name: {} vs. {}\n", name, other.name); + } + + if (type != other.type) { + result += fmt::format("type: {} vs. {}\n", type.print(), other.type.print()); + } + return result; +} + std::string Type::incompatible_diff(const Type& other) const { return fmt::format("diff is not implemented between {} and {}\n", typeid((*this)).name(), typeid(other).name()); @@ -1067,4 +1103,4 @@ std::string EnumType::diff_impl(const Type& other_) const { } return result; -} \ No newline at end of file +} diff --git a/common/type_system/Type.h b/common/type_system/Type.h index d2fa056b4b..82e20f1258 100644 --- a/common/type_system/Type.h +++ b/common/type_system/Type.h @@ -27,6 +27,15 @@ struct MethodInfo { std::string diff(const MethodInfo& other) const; }; +struct StateInfo { + std::string name; + TypeSpec type; + + bool operator==(const StateInfo& other) const; + bool operator!=(const StateInfo& other) const { return !((*this) == other); } + std::string diff(const StateInfo& other) const; +}; + /*! * Parent class of all Types. */ @@ -80,12 +89,14 @@ class Type { const MethodInfo& add_method(const MethodInfo& info); const MethodInfo& add_new_method(const MethodInfo& info); std::string print_method_info() const; + const StateInfo& add_state(const StateInfo& info); void disallow_in_runtime() { m_allow_in_runtime = false; } virtual ~Type() = default; const std::vector& get_methods_defined_for_type() const { return m_methods; } + const std::vector& get_states_declared_for_type() const { return m_states; } const MethodInfo* get_new_method_defined_for_type() const { if (m_new_method_info_defined) { @@ -105,6 +116,7 @@ class Type { std::string incompatible_diff(const Type& other) const; std::vector m_methods; + std::vector m_states; MethodInfo m_new_method_info; bool m_new_method_info_defined = false; diff --git a/common/type_system/TypeSystem.cpp b/common/type_system/TypeSystem.cpp index 1fffea6b07..4df2fbf618 100644 --- a/common/type_system/TypeSystem.cpp +++ b/common/type_system/TypeSystem.cpp @@ -1692,6 +1692,26 @@ std::string TypeSystem::generate_deftype_footer(const Type* type) const { result.append(")\n "); } + std::string states_string; + for (auto& info : type->get_states_declared_for_type()) { + if (info.type.arg_count() > 1) { + states_string.append(fmt::format(" ({}", info.name)); + for (size_t i = 0; i < info.type.arg_count() - 1; i++) { + states_string.push_back(' '); + states_string.append(info.type.get_arg(i).print()); + } + states_string.append(")\n"); + } else { + states_string.append(fmt::format(" {}\n", info.name)); + } + } + + if (!states_string.empty()) { + result.append("(:states\n"); + result.append(states_string); + result.append(" )\n "); + } + result.append(")\n"); return result; } diff --git a/common/type_system/deftype.cpp b/common/type_system/deftype.cpp index 25e79ed9c8..d9aafecb74 100644 --- a/common/type_system/deftype.cpp +++ b/common/type_system/deftype.cpp @@ -243,6 +243,34 @@ void declare_method(Type* type, TypeSystem* type_system, const goos::Object& def }); } +void declare_state(Type* type, TypeSystem* type_system, const goos::Object& def) { + for_each_in_list(def, [&](const goos::Object& _obj) { + auto obj = &_obj; + if (obj->is_list()) { + // (name ,@args) + auto state_name = symbol_string(car(obj)); + auto args = cdr(obj); + + TypeSpec state_typespec("state"); + + for_each_in_list(*args, [&](const goos::Object& o) { + state_typespec.add_arg(parse_typespec(type_system, o)); + }); + state_typespec.add_arg(TypeSpec(type->get_name())); + + type->add_state({state_name, state_typespec}); + } else { + // name + auto state_name = symbol_string(*obj); + + TypeSpec state_typespec("state"); + state_typespec.add_arg(TypeSpec(type->get_name())); + + type->add_state({state_name, state_typespec}); + } + }); +} + struct StructureDefResult { TypeFlags flags; bool generate_runtime_type = true; @@ -274,8 +302,11 @@ StructureDefResult parse_structure_def(StructureType* type, auto& first = car(opt_list); opt_list = cdr(opt_list); - if (symbol_string(first) == ":methods") { + auto list_name = symbol_string(first); + if (list_name == ":methods") { declare_method(type, ts, *opt_list); + } else if (list_name == ":states") { + declare_state(type, ts, *opt_list); } else { throw std::runtime_error("Invalid option list in field specification: " + car(rest).print()); diff --git a/decompiler/IR2/AtomicOpTypeAnalysis.cpp b/decompiler/IR2/AtomicOpTypeAnalysis.cpp index a2a33e6172..8257777fe2 100644 --- a/decompiler/IR2/AtomicOpTypeAnalysis.cpp +++ b/decompiler/IR2/AtomicOpTypeAnalysis.cpp @@ -1385,10 +1385,11 @@ TypeState StackSpillLoadOp::propagate_types_internal(const TypeState& input, const Env& env, DecompilerTypeSystem&) { // stack slot load - auto info = env.stack_spills().lookup(m_offset); + auto& info = env.stack_spills().lookup(m_offset); if (info.size != m_size) { - env.func->warnings.general_warning("Stack slot load mismatch: defined as size {}, got size {}", - info.size, m_size); + env.func->warnings.general_warning( + "Stack slot load at {} mismatch: defined as size {}, got size {}", m_offset, info.size, + m_size); } if (info.is_signed != m_is_signed) { @@ -1404,7 +1405,7 @@ TypeState StackSpillLoadOp::propagate_types_internal(const TypeState& input, TypeState StackSpillStoreOp::propagate_types_internal(const TypeState& input, const Env& env, DecompilerTypeSystem& dts) { - auto info = env.stack_spills().lookup(m_offset); + auto& info = env.stack_spills().lookup(m_offset); if (info.size != m_size) { env.func->warnings.general_warning( "Stack slot store mismatch: defined as size {}, got size {}\n", info.size, m_size); diff --git a/decompiler/config/all-types.gc b/decompiler/config/all-types.gc index b09d5b53d4..8276fc5ce4 100644 --- a/decompiler/config/all-types.gc +++ b/decompiler/config/all-types.gc @@ -803,6 +803,7 @@ (confirm #x103) (press-to-use #x105) (confirm-play #x106) + (play-again? #x107) (quit #x108) (pause #x109) (sfx-volume #x10a) @@ -942,13 +943,20 @@ (beach-seagulls-avalanche #x273) + (sidekick-hint-fish-powerup #x278) + + (yakow-owed-powercell #x297) + (misty-teetertotter-bonk-dax-tutorial #x2a4) (daxter-blue-eco-plat-tutorial #x2a7) - (firecanyon-collect-cells-text #x2b3) + (fish? #x2a9) - (yakow-owed-powercell #x297) + (firecanyon-collect-cells-text #x2b3) + (caught #x2b4) + (missed #x2b5) + (lose! #x2b6) (village2-gambler-money #x300) (village2-geologist-money #x301) @@ -2945,8 +2953,8 @@ ((mask uint16 :offset-assert 4) (num float :offset-assert 8) (group uint8 :offset-assert 12) - (sound-name-char uint8 16 :offset 16) - (sound-name sound-name :offset 16) + (sound-name sound-name :score 20 :offset 16) + (sound-name-char uint8 16 :offset 16) ;; moved to after sound-name (trans float 4 :offset-assert 32) ;; guess (volume int32 :offset-assert 48) (pitch-mod int32 :offset-assert 52) @@ -7890,7 +7898,7 @@ (new (symbol type process art-joint-geo) _type_ 0) (dummy-9 (_type_) (pointer int8) 9) (dummy-10 (_type_ int) int 10) - (dummy-11 (_type_ pointer) int 11) + (dummy-11 (_type_ lod-set) none 11) ) ) @@ -10061,7 +10069,7 @@ (water water-control :offset-assert 156) (sound ambient-sound :offset-assert 160) (state-flags uint32 :offset-assert 164) - (state-time seconds :offset-assert 168) + (state-time int64 :offset-assert 168) ) :heap-base #x40 :method-count-assert 20 @@ -10192,7 +10200,7 @@ (cur-grab-handle handle :offset-assert 208) (cur-target-handle handle :offset-assert 216) (old-grab-pos vector :inline :offset-assert 224) - (joint joint 4 :offset-assert 240) + (joint process-drawable 4 :offset-assert 240) (new-post-hook function :offset-assert 256) (cur-post-hook function :offset-assert 260) (clone-copy-trans basic :offset-assert 264) @@ -10301,10 +10309,10 @@ (deftype gui-query (structure) ((x-position int32 :offset-assert 0) (y-position int32 :offset-assert 4) - (message symbol :offset-assert 8) ;; a guess, i suspect its an `event-message-block` + (message string :offset-assert 8) (decision symbol :offset-assert 12) (only-allow-cancel symbol :offset-assert 16) - (no-msg symbol :offset-assert 20) + (no-msg string :offset-assert 20) (message-space int32 :offset-assert 24) ) :pack-me @@ -10312,8 +10320,8 @@ :size-assert #x1c :flag-assert #xb0000001c (:methods - (init! (_type_ symbol int int int symbol symbol) none 9) - (dummy-10 (_type_) symbol 10) + (init! (_type_ string int int int symbol string) none 9) + (get-response (_type_) symbol 10) ) ) @@ -11041,7 +11049,8 @@ (deftype collide-shape-prim-group (collide-shape-prim) ((num-prims int32 :offset-assert 72) (allocated-prims int32 :offset-assert 76) - (prim uint32 1 :offset-assert 80) + (prim collide-shape-prim 1 :offset-assert 80) + (prims collide-shape-prim :dynamic :score 20 :offset 80) ;; added ) :method-count-assert 30 :size-assert #x54 @@ -11275,10 +11284,11 @@ (unknown-dword40 int64 :offset 2160) ;; from logic-target::target-compute-edge (unknown-dword41 int64 :offset 2168) ;; from logic-target::target-compute-edge (unknown-handle10 handle :offset 2176) ;; from logic-target::target-compute-pole - probably a swingpole - (unknown-int11 int32 :offset 2184) ;; from (anon-function 1 basebutton) + (unknown-symbol20 symbol :offset 2184) ;; from (anon-function 1 basebutton) (unknown-int20 int32 :offset 2188) ;; from logic-target::target-compute-pole (unknown-vector102 vector :inline :offset 2224) ;; from (anon-function 3 basebutton) (unknown-vector103 vector :inline :offset 2240) ;; from (anon-function 3 basebutton) + (unknown-smush00 smush-control :inline :offset 2288) ;; from (event target-fishing) (unknown-vector110 vector :inline :offset 2320) ;; from logic-target::flag-setup (unknown-vector111 vector :inline :offset 2336) ;; from logic-target::flag-setup (unknown-int30 int32 :offset 2384) ;; from target-util::target-danger-set! @@ -13509,7 +13519,7 @@ (spt-num 6) (spt-sound 7) (misc-fields-end 8) - + (sprite-fields-start 9) (spt-x 10) (spt-y 11) @@ -13524,7 +13534,7 @@ (spt-b 20) (spt-a 21) (sprite-fields-end 22) - + (cpu-fields-start 23) (spt-omega 24) (spt-vel-x 25) @@ -13555,7 +13565,7 @@ (spt-next-time 50) (spt-next-launcher 51) (cpu-fields-end 52) - + (launch-fields-start 53) (spt-launchrot-x 54) (spt-launchrot-y 55) @@ -13568,7 +13578,7 @@ (spt-conerot-radius 62) (spt-rotate-y 63) (launch-fields-end 64) - + (spt-scale 65) (spt-scalevel 66) (spt-end 67) @@ -16819,8 +16829,8 @@ :size-assert #xc :flag-assert #x130000000c (:methods - (current-task (_type_) int 9) - (current-status (_type_) int 10) + (current-task (_type_) game-task 9) + (current-status (_type_) task-status 10) (close-current! (_type_) none 11) (close-status! (_type_ task-status) int 12) (first-any (_type_ symbol) int 13) @@ -16833,9 +16843,9 @@ ) (deftype ambient-control (structure) - ((last-ambient-time uint64 :offset-assert 0) - (last-ambient basic :offset-assert 8) - (last-ambient-id uint32 :offset-assert 12) + ((last-ambient-time int64 :offset-assert 0) + (last-ambient string :offset-assert 8) + (last-ambient-id sound-id :offset-assert 12) ) :method-count-assert 12 :size-assert #x10 @@ -16843,7 +16853,7 @@ (:methods (dummy-9 (_type_ vector int float process-drawable) none 9) (TODO-RENAME-10 (_type_ vector int float process-drawable) vector 10) - (dummy-11 (_type_ string symbol vector) symbol 11) + (play-ambient (_type_ string symbol vector) symbol 11) ) ) @@ -16894,10 +16904,10 @@ (get-art-elem (_type_) art-element 31) (play-anim! (_type_ symbol) basic 32) ;; ret - spool-anim | .. (dummy-33 (_type_) none 33) - (TODO-RENAME-34 (_type_ symbol) symbol 34) - (dummy-35 (_type_) none 35) - (get-spool-anim-or-?? (_type_ symbol) basic 36) ;; ret - spool-anim | .. - (spool-push-anim (_type_) none 37) + (get-accept-anim (_type_ symbol) spool-anim 34) + (push-accept-anim (_type_) none 35) + (get-reject-anim (_type_ symbol) spool-anim 36) ;; ret - spool-anim | .. + (push-reject-anim (_type_) none 37) (dummy-38 (_type_) none 38) (should-display? (_type_) symbol 39) (dummy-40 (_type_ object skeleton-group int int vector int) none 40) @@ -18278,7 +18288,7 @@ (define-extern fourth-power (function float float)) ;; unused (define-extern third-power (function float float)) ;; unused (define-extern parameter-ease-sqr-clamp (function float float)) -(define-extern cam-slave-go (function camera-slave none)) +(define-extern cam-slave-go (function state none)) (define-extern cam-slave-init (function state entity none :behavior camera-slave)) (define-extern cam-standard-event-handler (function process int symbol event-message-block object :behavior camera-slave)) (define-extern cam-curve-pos (function vector vector curve symbol vector :behavior camera-slave)) @@ -18366,7 +18376,7 @@ ;; - Symbols -(define-extern cam-free-floating state) +(define-extern cam-free-floating (state camera-slave)) (define-extern cam-master-active state) (define-extern list-keeper-active state) (define-extern *CAMERA_MASTER-bank* camera-master-bank) @@ -19220,7 +19230,7 @@ (define-extern touch-tracker-init (function object object object none)) (define-extern process-drawable-pair-random-point! function) (define-extern birth-func-set-quat function) -(define-extern draw-eco-beam function) +(define-extern draw-eco-beam (function vector vector none)) ;; - Unknowns @@ -19472,7 +19482,7 @@ ;; - Functions -(define-extern cspace<-cspace+quaternion! function) +(define-extern cspace<-cspace+quaternion! (function cspace quaternion cspace)) (define-extern starts function) ;; - Unknowns @@ -19563,8 +19573,8 @@ ;;(define-extern target-flut-start object) ;; unknown type (define-extern target-snowball-start (state handle target)) ;; unknown type (define-extern target-tube-start (state handle target)) ;; unknown type -;;(define-extern target-periscope object) ;; unknown type -;;(define-extern target-fishing object) ;; unknown type +(define-extern target-periscope (state target)) ;; unknown type +(define-extern target-fishing (state handle target)) ;; unknown type (define-extern target-final-door (state basic handle target)) ;; unknown type ;;(define-extern target-play-anim object) ;; unknown type ;;(define-extern target-clone-anim object) ;; unknown type @@ -21688,13 +21698,13 @@ ;; - Unknowns -(define-extern *popup-menu-context* debug-menu-context) ;; unknown type -(define-extern *instance-shrub-menu* debug-menu) ;; unknown type -(define-extern *instance-tie-menu* debug-menu) ;; unknown type -(define-extern *enable-instance-tie-menu* debug-menu) ;; unknown type -(define-extern *shader-pick-menu* debug-menu) ;; unknown type -(define-extern cam-robotboss state) ;; unknown type -(define-extern *dm-cam-mode-interpolation* debug-menu) ;; unknown type +(define-extern *popup-menu-context* debug-menu-context) +(define-extern *instance-shrub-menu* debug-menu) +(define-extern *instance-tie-menu* debug-menu) +(define-extern *enable-instance-tie-menu* debug-menu) +(define-extern *shader-pick-menu* debug-menu) +(define-extern cam-robotboss (state camera-slave)) +(define-extern *dm-cam-mode-interpolation* debug-menu) ;; ---------------------- @@ -21759,7 +21769,7 @@ ;; - Symbols -(define-extern *ocean-texture* texture) ;; unknown type +(define-extern *ocean-texture* texture) ;; ---------------------- @@ -22167,11 +22177,11 @@ ;; - Unknowns -(define-extern ripple-for-dark-eco-pool ripple-wave-set) ;; unknown type -(define-extern ripple-for-misty-dark-eco-pool ripple-wave-set) ;; unknown type -(define-extern ripple-for-maincave-dark-eco-pool ripple-wave-set) ;; unknown type -(define-extern ripple-for-sunken-dark-eco-helix-room ripple-wave-set) ;; unknown type -(define-extern ripple-for-finalboss-dark-eco-pool ripple-wave-set) ;; unknown type +(define-extern ripple-for-dark-eco-pool ripple-wave-set) +(define-extern ripple-for-misty-dark-eco-pool ripple-wave-set) +(define-extern ripple-for-maincave-dark-eco-pool ripple-wave-set) +(define-extern ripple-for-sunken-dark-eco-helix-room ripple-wave-set) +(define-extern ripple-for-finalboss-dark-eco-pool ripple-wave-set) ;; ---------------------- @@ -22373,7 +22383,6 @@ :method-count-assert 76 :size-assert #x190 :flag-assert #x4c01200190 - ;; inherited inspect of process-drawable (:methods (nav-enemy-attack () _type_ :state 20) (nav-enemy-chase () _type_ :state 21) @@ -22406,8 +22415,8 @@ (TODO-RENAME-48 (_type_) none 48) ;; - Stubbed (TODO-RENAME-49 (_type_ nav-enemy-info) float 49) (TODO-RENAME-50 (_type_ vector) symbol 50) - (dummy-51 (_type_) float 51) - (dummy-52 (_type_ vector) vector 52) + (dummy-51 (_type_ vector) object 51) + (dummy-52 (_type_ vector) symbol 52) (dummy-53 (_type_) symbol 53) (dummy-54 (_type_) none 54) (dummy-55 (_type_) none 55) @@ -22427,8 +22436,8 @@ (dummy-69 (_type_) none 69) (dummy-70 (_type_) none 70) (dummy-71 (_type_) none 71) - (dummy-72 (_type_ process event-message-block) object 72) ;; 3rd arg contains a touching-shapes-entry offset 16/20 - (TODO-RENAME-73 (_type_ process) symbol 73) + (nav-enemy-touch-handler (_type_ process event-message-block) object 72) + (nav-enemy-attack-handler (_type_ process event-message-block) object 73) (nav-enemy-jump-blocked () _type_ :state 74) (dummy-75 (_type_) none 75) ) @@ -22494,7 +22503,7 @@ ;; - Unknowns -(define-extern *nav-enemy-dummy-shadow-control* shadow-control) ;; unknown type +(define-extern *nav-enemy-dummy-shadow-control* shadow-control) ;; ---------------------- @@ -22520,7 +22529,7 @@ (dummy-20 (_type_) none 20) (dummy-21 (_type_) none 21) (dummy-22 (_type_) none 22) - (TODO-RENAME-23 (_type_) skeleton-group 23) + (get-unlit-skel (_type_) skeleton-group 23) (dummy-24 (_type_) none 24) (TODO-RENAME-25 (_type_) sparticle-launch-group 25) (dummy-26 (_type_) none 26) @@ -22636,9 +22645,9 @@ ;; - Unknowns -(define-extern *warp-jump-mods* surface) ;; unknown type -(define-extern target-warp-out (state vector vector target)) ;; unknown type -(define-extern *warp-info* (array string)) ;; unknown type +(define-extern *warp-jump-mods* surface) +(define-extern target-warp-out (state vector vector target)) +(define-extern *warp-info* (array string)) (define-extern *generic-button-sg* skeleton-group) @@ -22782,7 +22791,7 @@ ;; - Unknowns -(define-extern joint-exploder-shatter (state joint-exploder)) ;; unknown type +(define-extern joint-exploder-shatter (state joint-exploder)) ;; ---------------------- @@ -22929,12 +22938,12 @@ :flag-assert #x2100a00108 ;; inherited inspect of baseplat (:methods - (dummy-27 () none 27) + (get-lit-skel (_type_) skeleton-group 27) (dummy-28 () none 28) (wad () _type_ :state 29) - (plat-startup () _type_ :state 30) ;; state + (plat-startup (plat) _type_ :state 30) ;; state (plat-idle () _type_ :state 31) ;; state - (plat-path-active () _type_ :state 32) ;; state + (plat-path-active (plat) _type_ :state 32) ;; state ) ) @@ -23869,17 +23878,17 @@ ;; - Unknowns (define-extern *pelican-sg* skeleton-group) -(define-extern pelican-wait-at-end (state pelican)) ;; unknown type -(define-extern pelican-wait-at-nest (state pelican)) ;; unknown type -(define-extern pelican-circle (state pelican)) ;; unknown type -(define-extern zero-func (function int)) ;; unknown type -(define-extern *PELICAN-bank* pelican-bank) ;; unknown type -(define-extern pelican-dive (state pelican)) ;; unknown type -(define-extern pelican-from-nest (state pelican)) ;; unknown type -(define-extern pelican-explode (state pelican)) ;; unknown type -(define-extern pelican-spit (state pelican)) ;; unknown type -(define-extern pelican-fly-to-end (state pelican)) ;; unknown type -(define-extern pelican-to-nest (state pelican)) ;; unknown type +(define-extern pelican-wait-at-end (state pelican)) +(define-extern pelican-wait-at-nest (state pelican)) +(define-extern pelican-circle (state pelican)) +(define-extern zero-func (function int)) +(define-extern *PELICAN-bank* pelican-bank) +(define-extern pelican-dive (state pelican)) +(define-extern pelican-from-nest (state pelican)) +(define-extern pelican-explode (state pelican)) +(define-extern pelican-spit (state pelican)) +(define-extern pelican-fly-to-end (state pelican)) +(define-extern pelican-to-nest (state pelican)) ;; ---------------------- @@ -23943,6 +23952,9 @@ :heap-base #x130 :size-assert #x194 :flag-assert #x4c01300194 + (:states + lurkercrab-pushed + ) ) ;; - Functions @@ -23954,7 +23966,6 @@ (define-extern *lurkercrab-sg* skeleton-group) (define-extern *lurkercrab-nav-enemy-info* nav-enemy-info) -(define-extern lurkercrab-pushed (state lurkercrab)) ;; unknown type ;; ---------------------- @@ -24097,17 +24108,17 @@ ;; - Unknowns -(define-extern sound-seagull-squall sound-spec) ;; unknown type -(define-extern seagullflock-idle (state seagullflock)) ;; unknown type -(define-extern seagullflock-at-waterfall (state seagullflock)) ;; unknown type +(define-extern sound-seagull-squall sound-spec) +(define-extern seagullflock-idle (state seagullflock)) +(define-extern seagullflock-at-waterfall (state seagullflock)) (define-extern aybabtu (function int int)) ;; this is just sceCdMmode (define-extern *seagull-sg* skeleton-group) -(define-extern seagull-idle (state seagull)) ;; unknown type -(define-extern seagull-soaring (state seagull)) ;; unknown type -(define-extern seagull-flying (state seagull)) ;; unknown type -(define-extern seagull-landing (state seagull)) ;; unknown type -(define-extern *seagull-boxes* (inline-array air-box)) ;; unknown type -(define-extern seagull-takeoff (state seagull)) ;; unknown type +(define-extern seagull-idle (state seagull)) +(define-extern seagull-soaring (state seagull)) +(define-extern seagull-flying (state seagull)) +(define-extern seagull-landing (state seagull)) +(define-extern *seagull-boxes* (inline-array air-box)) +(define-extern seagull-takeoff (state seagull)) ;; ---------------------- @@ -24128,7 +24139,7 @@ ;; - Unknowns -(define-extern sound-beach-waterfall sound-spec) ;; unknown type +(define-extern sound-beach-waterfall sound-spec) (define-extern beach-part-grotto-1 (state beach-part)) @@ -25552,19 +25563,19 @@ ;; - Unknowns -(define-extern citb-exit-plat-idle (state citb-exit-plat)) ;; unknown type +(define-extern citb-exit-plat-idle (state citb-exit-plat)) (define-extern *citb-exit-plat-sg* skeleton-group) -(define-extern citb-exit-plat-rise (state citb-exit-plat)) ;; unknown type +(define-extern citb-exit-plat-rise (state citb-exit-plat)) (define-extern *citb-firehose-sg* skeleton-group) -(define-extern citb-firehose-idle (state citb-firehose)) ;; unknown type -(define-extern citb-firehose-active (state citb-firehose)) ;; unknown type -(define-extern citb-firehose-blast (state citb-firehose)) ;; unknown type +(define-extern citb-firehose-idle (state citb-firehose)) +(define-extern citb-firehose-active (state citb-firehose)) +(define-extern citb-firehose-blast (state citb-firehose)) (define-extern *citb-stopbox-sg* skeleton-group) (define-extern *citb-donut-sg* skeleton-group) (define-extern *citb-rotatebox-sg* skeleton-group) (define-extern *citb-chain-plat-sg* skeleton-group) -(define-extern *citb-chain-plat-constants* rigid-body-platform-constants) ;; unknown type -(define-extern citb-chain-plat-settle (state citb-chain-plat)) ;; unknown type +(define-extern *citb-chain-plat-constants* rigid-body-platform-constants) +(define-extern citb-chain-plat-settle (state citb-chain-plat)) (define-extern *plat-citb-sg* skeleton-group) (define-extern *plat-eco-citb-lit-sg* skeleton-group) (define-extern *plat-eco-citb-unlit-sg* skeleton-group) @@ -25672,7 +25683,7 @@ (define-extern *yellowsage-sg* skeleton-group) (define-extern *bluesage-sg* skeleton-group) (define-extern *redsage-sg* skeleton-group) -(define-extern citb-sagecage-idle (state citb-sagecage)) ;; unknown type +(define-extern citb-sagecage-idle (state citb-sagecage)) (define-extern *citb-sagecage-sg* skeleton-group) @@ -25968,18 +25979,18 @@ ;; - Unknowns -(define-extern citb-drop-plat-idle (state citb-drop-plat)) ;; unknown type -(define-extern citb-drop-plat-active (state citb-drop-plat)) ;; unknown type -(define-extern drop-plat-spawn (state drop-plat)) ;; unknown type +(define-extern citb-drop-plat-idle (state citb-drop-plat)) +(define-extern citb-drop-plat-active (state citb-drop-plat)) +(define-extern drop-plat-spawn (state drop-plat)) (define-extern *citb-drop-plat-red-sg* skeleton-group) (define-extern *citb-drop-plat-green-sg* skeleton-group) (define-extern *citb-drop-plat-blue-sg* skeleton-group) (define-extern *citb-drop-plat-yellow-sg* skeleton-group) (define-extern *citb-drop-plat-sg* skeleton-group) -(define-extern drop-plat-die (state drop-plat)) ;; unknown type -(define-extern drop-plat-idle (state drop-plat)) ;; unknown type -(define-extern drop-plat-drop (state drop-plat)) ;; unknown type -(define-extern drop-plat-rise (state draw-control drop-plat)) ;; unknown type +(define-extern drop-plat-die (state drop-plat)) +(define-extern drop-plat-idle (state drop-plat)) +(define-extern drop-plat-drop (state drop-plat)) +(define-extern drop-plat-rise (state draw-control drop-plat)) ;; ---------------------- @@ -26412,7 +26423,7 @@ ;; - Unknowns (define-extern *cavecrystal-sg* skeleton-group) -(define-extern *cavecrystal-light-control* cavecrystal-light-control) ;; unknown type +(define-extern *cavecrystal-light-control* cavecrystal-light-control) ;;(define-extern cavecrystal-idle object) ;; unknown type ;;(define-extern cavecrystal-active object) ;; unknown type @@ -26798,25 +26809,26 @@ ) (deftype robotboss (process-drawable) - ((alts entity-actor 13 :offset-assert 176) + ((root-override collide-shape-moving :score 100 :offset 112) ;; custom + (alts entity-actor 13 :offset-assert 176) (desired-loc vector :inline :offset-assert 240) (old-loc vector :inline :offset-assert 256) (loc-t float :offset-assert 272) - (loc-t-start seconds :offset-assert 280) - (loc-t-duration seconds :offset-assert 288) + (loc-t-start int64 :offset-assert 280) + (loc-t-duration int64 :offset-assert 288) (hits-to-go int32 :offset-assert 296) (took-hit symbol :offset-assert 300) (children-spawned int32 :offset-assert 304) - (vulnerable seconds :offset-assert 312) - (till-next-shot seconds :offset-assert 320) - (shot-attractor uint64 :offset-assert 328) + (vulnerable int64 :offset-assert 312) + (till-next-shot int64 :offset-assert 320) + (shot-attractor handle :offset-assert 328) (desired-pool-y float :offset-assert 336) (particle sparticle-launch-control 7 :offset-assert 340) - (blue-smoke basic :offset-assert 368) - (red-smoke basic :offset-assert 372) - (yellow-smoke basic :offset-assert 376) + (blue-smoke symbol :offset-assert 368) + (red-smoke symbol :offset-assert 372) + (yellow-smoke symbol :offset-assert 376) (white-eco handle :offset-assert 384) - (des-cam-entity basic :offset-assert 392) + (des-cam-entity string :offset-assert 392) (use-interesting symbol :offset-assert 396) (ignore-camera symbol :offset-assert 400) (ambient ambient-control :offset 408) @@ -26833,7 +26845,7 @@ :size-assert #x1d0 :flag-assert #x15001601d0 (:methods - (dummy-20 () none 20) + (ease-loc-t (_type_) float 20) ) ) @@ -26871,87 +26883,69 @@ ;; - Types -; (deftype light-eco-child (process-drawable) -; ((angle-bit int32 :offset-assert 176) -; (ground-y float :offset-assert 180) -; (falling-start-time uint64 :offset-assert 184) -; (last-update-time uint64 :offset-assert 192) -; (rot vector :inline :offset-assert 208) -; (rotv vector :inline :offset-assert 224) -; (traj trajectory :inline :offset-assert 240) -; ) -; :method-count-assert 21 -; :size-assert #x118 -; :heap-base #xb0 -; :flag-assert #x1500b00118 -; ;; inherited inspect of process-drawable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; ) -; ) +(deftype light-eco-child (process-drawable) + ((root-override collide-shape :score 20 :offset 112) + (angle-bit int32 :offset-assert 176) + (ground-y float :offset-assert 180) + (falling-start-time int64 :offset-assert 184) + (last-update-time int64 :offset-assert 192) + (rot vector :inline :offset-assert 208) + (rotv vector :inline :offset-assert 224) + (traj trajectory :inline :offset-assert 240) + ) + :method-count-assert 21 + :size-assert #x118 + :heap-base #xb0 + :flag-assert #x1500b00118 + ;; inherited inspect of process-drawable + (:methods + (common-trans (_type_) none 20) + ) + (:states + light-eco-child-grabbed + light-eco-child-hit-ground + light-eco-child-idle + light-eco-child-die + ) + ) -; (deftype light-eco-mother (process-drawable) -; ((player-got-eco? basic :offset-assert 176) -; (angle-mask uint64 :offset-assert 184) -; (delay-til-spawn int32 :offset-assert 192) -; (part2 basic :offset-assert 196) -; (last-update-time uint64 :offset-assert 200) -; (last-spawned-time uint64 :offset-assert 208) -; ) -; :method-count-assert 22 -; :size-assert #xd8 -; :heap-base #x70 -; :flag-assert #x16007000d8 -; ;; inherited inspect of process-drawable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; ) -; ) +(deftype light-eco-mother (process-drawable) + ((player-got-eco? symbol :offset-assert 176) + (angle-mask int64 :offset-assert 184) + (delay-til-spawn int32 :offset-assert 192) + (part2 sparticle-launch-control :offset-assert 196) ;; guess + (last-update-time int64 :offset-assert 200) + (last-spawned-time int64 :offset-assert 208) + ) + :method-count-assert 22 + :size-assert #xd8 + :heap-base #x70 + :flag-assert #x16007000d8 + (:methods + (spawn-child-eco (_type_) symbol 20) + (common-trans (_type_) none 21) + ) + (:states + light-eco-mother-discipate + light-eco-mother-active + ) + ) ;; - Functions -(define-extern light-eco-child-init-by-other function) -(define-extern check-drop-level-lighteco-big-pops function) -(define-extern check-drop-level-lighteco-pops function) -(define-extern light-eco-child-default-event-handler function) -(define-extern light-eco-mother-default-event-handler function) -(define-extern light-eco-mother-init-by-other function) +(define-extern light-eco-child-init-by-other (function entity vector vector int none :behavior light-eco-child)) +(define-extern check-drop-level-lighteco-big-pops (function sparticle-system sparticle-cpuinfo vector none)) +(define-extern check-drop-level-lighteco-pops (function sparticle-system sparticle-cpuinfo vector none)) +(define-extern light-eco-child-default-event-handler (function process int symbol event-message-block object :behavior light-eco-child)) +(define-extern light-eco-mother-default-event-handler (function process int symbol event-message-block object :behavior light-eco-mother)) +(define-extern light-eco-mother-init-by-other (function entity vector none :behavior light-eco-mother)) ;; - Unknowns (define-extern *light-eco-big-sg* skeleton-group) -;;(define-extern light-eco-mother-appear object) ;; unknown type -;;(define-extern light-eco-mother-active object) ;; unknown type -;;(define-extern light-eco-mother-discipate object) ;; unknown type +(define-extern light-eco-mother-appear (state light-eco-mother)) (define-extern *light-eco-small-sg* skeleton-group) -;;(define-extern light-eco-child-appear object) ;; unknown type -;;(define-extern light-eco-child-die object) ;; unknown type -;;(define-extern light-eco-child-idle object) ;; unknown type -;;(define-extern light-eco-child-hit-ground object) ;; unknown type -;;(define-extern light-eco-child-grabbed object) ;; unknown type +(define-extern light-eco-child-appear (state light-eco-child)) ;; ---------------------- @@ -26962,188 +26956,118 @@ ;; - Types -; (deftype torus (structure) -; ((origin vector :inline :offset-assert 0) -; (axis vector :inline :offset-assert 16) -; (radius-primary float :offset-assert 32) -; (radius-secondary float :offset-assert 36) -; ) -; :method-count-assert 13 -; :size-assert #x28 -; :flag-assert #xd00000028 -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; ) -; ) +(deftype torus (structure) + ((origin vector :inline :offset-assert 0) + (axis vector :inline :offset-assert 16) + (radius-primary float :offset-assert 32) + (radius-secondary float :offset-assert 36) + ) + :method-count-assert 13 + :size-assert #x28 + :flag-assert #xd00000028 + (:methods + (dummy-9 (_type_ vector) none 9) + (dummy-10 (_type_ vector vector) symbol 10) + (dummy-11 (_type_ vector) symbol 11) + (dummy-12 (_type_ vector) none 12) + ) + ) -; (deftype torus-verts (structure) -; ((vert UNKNOWN 8 :offset-assert 0) -; ) -; :method-count-assert 9 -; :size-assert #x80 -; :flag-assert #x900000080 -; ) +(deftype torus-verts (structure) + ((vert vector 8 :inline :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #x80 + :flag-assert #x900000080 + ) -; (deftype arcing-shot (process-drawable) -; ((y-vel float :offset-assert 176) -; (grav float :offset-assert 180) -; (from vector :inline :offset-assert 192) -; (to vector :inline :offset-assert 208) -; ) -; :method-count-assert 20 -; :size-assert #xe0 -; :heap-base #x70 -; :flag-assert #x14007000e0 -; ;; inherited inspect of process-drawable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; ) -; ) +(deftype arcing-shot (process-drawable) + ((y-vel float :offset-assert 176) + (grav float :offset-assert 180) + (from vector :inline :offset-assert 192) + (to vector :inline :offset-assert 208) + ) + :method-count-assert 20 + :size-assert #xe0 + :heap-base #x70 + :flag-assert #x14007000e0 + ) -; (deftype darkecobomb (arcing-shot) -; ((flight-time uint64 :offset-assert 224) -; (countdown-time float :offset-assert 232) -; (anim-speed float :offset-assert 236) -; (next-tick float :offset-assert 240) -; ) -; :method-count-assert 20 -; :size-assert #xf4 -; :heap-base #x90 -; :flag-assert #x14009000f4 -; ;; inherited inspect of arcing-shot -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; ) -; ) +(deftype darkecobomb (arcing-shot) + ((flight-time int64 :offset-assert 224) + (countdown-time float :offset-assert 232) + (anim-speed float :offset-assert 236) + (next-tick float :offset-assert 240) + ) + :method-count-assert 20 + :size-assert #xf4 + :heap-base #x90 + :flag-assert #x14009000f4 + ) -; (deftype greenshot (arcing-shot) -; ((flight-time uint64 :offset-assert 224) -; ) -; :method-count-assert 20 -; :size-assert #xe8 -; :heap-base #x80 -; :flag-assert #x14008000e8 -; ;; inherited inspect of arcing-shot -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; ) -; ) +(deftype greenshot (arcing-shot) + ((flight-time int64 :offset-assert 224) + ) + :method-count-assert 20 + :size-assert #xe8 + :heap-base #x80 + :flag-assert #x14008000e8 + ) -; (deftype redshot (arcing-shot) -; ((flight-time uint64 :offset-assert 224) -; (stall-time uint64 :offset-assert 232) -; (ring torus :inline :offset-assert 240) -; (rotation-offset uint64 :offset-assert 280) -; (part-track uint64 :offset-assert 288) -; (shot-particle basic :offset-assert 296) -; (test-particle basic :offset-assert 300) -; ) -; :method-count-assert 20 -; :size-assert #x130 -; :heap-base #xc0 -; :flag-assert #x1400c00130 -; ;; inherited inspect of arcing-shot -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; ) -; ) +(deftype redshot (arcing-shot) + ((flight-time int64 :offset-assert 224) + (stall-time int64 :offset-assert 232) + (ring torus :inline :offset-assert 240) + (rotation-offset int64 :offset-assert 280) + (part-track handle :offset-assert 288) + (shot-particle sparticle-launch-control :offset-assert 296) + (test-particle sparticle-launch-control :offset-assert 300) + ) + :method-count-assert 20 + :size-assert #x130 + :heap-base #xc0 + :flag-assert #x1400c00130 + ) -; (deftype yellowshot (arcing-shot) -; ((flight-time uint64 :offset-assert 224) -; ) -; :method-count-assert 20 -; :size-assert #xe8 -; :heap-base #x80 -; :flag-assert #x14008000e8 -; ;; inherited inspect of arcing-shot -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; ) -; ) +(deftype yellowshot (arcing-shot) + ((flight-time int64 :offset-assert 224) + ) + :method-count-assert 20 + :size-assert #xe8 + :heap-base #x80 + :flag-assert #x14008000e8 + ) ;; - Functions -(define-extern arcing-shot-setup function) -(define-extern arcing-shot-calculate function) -(define-extern redshot-trans function) -(define-extern redshot-particle-callback function) -(define-extern darkecobomb-explode-if-player-high-enough function) -(define-extern arcing-shot-draw function) -(define-extern darkecobomb-handler function) -(define-extern darkecobomb-init-by-other function) -(define-extern greenshot-init-by-other function) -(define-extern redshot-handler function) -(define-extern redshot-init-by-other function) -(define-extern yellowshot-init-by-other function) +(define-extern arcing-shot-setup (function vector vector float none :behavior arcing-shot)) +(define-extern arcing-shot-calculate (function vector float none :behavior arcing-shot)) +(define-extern redshot-trans (function int object :behavior redshot)) +(define-extern redshot-particle-callback (function part-tracker none)) +(define-extern darkecobomb-explode-if-player-high-enough (function none :behavior darkecobomb)) +(define-extern arcing-shot-draw (function symbol :behavior arcing-shot)) +(define-extern darkecobomb-handler (function process int symbol event-message-block object :behavior darkecobomb)) +(define-extern darkecobomb-init-by-other (function vector vector float int float none :behavior darkecobomb)) +(define-extern greenshot-init-by-other (function vector vector float uint none :behavior greenshot)) +(define-extern redshot-handler (function process int symbol event-message-block object :behavior redshot)) +(define-extern redshot-init-by-other (function vector vector float int int int none :behavior redshot)) +(define-extern yellowshot-init-by-other (function vector vector float uint none :behavior yellowshot)) ;; - Unknowns (define-extern *redring-sg* skeleton-group) -;;(define-extern yellowshot-idle object) ;; unknown type -;;(define-extern redshot-idle object) ;; unknown type -;;(define-extern redshot-wait object) ;; unknown type -;;(define-extern redshot-explode object) ;; unknown type +(define-extern yellowshot-idle (state yellowshot)) +(define-extern redshot-idle (state redshot)) +(define-extern redshot-wait (state redshot)) +(define-extern redshot-explode (state redshot)) (define-extern *greenshot-sg* skeleton-group) -;;(define-extern greenshot-idle object) ;; unknown type +(define-extern greenshot-idle (state greenshot)) (define-extern *darkecobomb-sg* skeleton-group) -;;(define-extern darkecobomb-idle object) ;; unknown type -;;(define-extern darkecobomb-land object) ;; unknown type -;;(define-extern darkecobomb-countdown object) ;; unknown type -;;(define-extern darkecobomb-explode object) ;; unknown type -;;(define-extern arcing-shot-debug-trajectory object) ;; unknown type +(define-extern darkecobomb-idle (state darkecobomb)) +(define-extern darkecobomb-land (state darkecobomb)) +(define-extern darkecobomb-countdown (state darkecobomb)) +(define-extern darkecobomb-explode (state symbol darkecobomb)) +(define-extern arcing-shot-debug-trajectory (state arcing-shot)) ;; ---------------------- @@ -27154,135 +27078,62 @@ ;; - Types -; (deftype ecoclaw-part-info (structure) -; ((tracker uint64 :offset-assert 0) -; (kind basic :offset-assert 8) -; (trans vector :inline :offset-assert 16) -; ) -; :method-count-assert 9 -; :size-assert #x20 -; :flag-assert #x900000020 -; ) +(deftype ecoclaw-part-info (structure) + ((tracker handle :offset-assert 0) + (kind basic :offset-assert 8) + (trans vector :inline :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) -; (deftype ecoclaw (process-drawable) -; ((particles UNKNOWN 3 :offset-assert 176) -; ) -; :method-count-assert 20 -; :size-assert #x110 -; :heap-base #xa0 -; :flag-assert #x1400a00110 -; ;; inherited inspect of process-drawable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; ) -; ) +(deftype ecoclaw (process-drawable) + ((particles ecoclaw-part-info 3 :inline :offset-assert 176) + ) + :method-count-assert 20 + :size-assert #x110 + :heap-base #xa0 + :flag-assert #x1400a00110 + ) -; (deftype silodoor (process-drawable) -; ((part-opened float :offset-assert 176) -; ) -; :method-count-assert 22 -; :size-assert #xb4 -; :heap-base #x50 -; :flag-assert #x16005000b4 -; ;; inherited inspect of process-drawable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; ) -; ) +(deftype silodoor (process-drawable) + ((part-opened float :offset-assert 176) + ) + :method-count-assert 22 + :size-assert #xb4 + :heap-base #x50 + :flag-assert #x16005000b4 + (:methods + (idle () _type_ :state 20) + (hidden () _type_ :state 21) + ) + ) -; (deftype finalbosscam (process-taskable) -; ((robotboss uint64 :offset-assert 384) -; ) -; :method-count-assert 53 -; :size-assert #x188 -; :heap-base #x120 -; :flag-assert #x3501200188 -; ;; inherited inspect of process-taskable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; (dummy-28 () none 28) -; (dummy-29 () none 29) -; (dummy-30 () none 30) -; (dummy-31 () none 31) -; (dummy-32 () none 32) -; (dummy-33 () none 33) -; (dummy-34 () none 34) -; (dummy-35 () none 35) -; (dummy-36 () none 36) -; (dummy-37 () none 37) -; (dummy-38 () none 38) -; (dummy-39 () none 39) -; (dummy-40 () none 40) -; (dummy-41 () none 41) -; (dummy-42 () none 42) -; (dummy-43 () none 43) -; (dummy-44 () none 44) -; (dummy-45 () none 45) -; (dummy-46 () none 46) -; (dummy-47 () none 47) -; (dummy-48 () none 48) -; (dummy-49 () none 49) -; (dummy-50 () none 50) -; (dummy-51 () none 51) -; (dummy-52 () none 52) -; ) -; ) +(deftype finalbosscam (process-taskable) + ((robotboss handle :offset-assert 384) + ) + :method-count-assert 53 + :size-assert #x188 + :heap-base #x120 + :flag-assert #x3501200188 + ) ;; - Functions -(define-extern robotboss-manipy-trans-hook function) -(define-extern ecoclaw-beam-particle-callback function) -(define-extern ecoclaw-handler function) -(define-extern finalbosscam-init-by-other function) +(define-extern robotboss-manipy-trans-hook (function none :behavior robotboss)) +(define-extern ecoclaw-beam-particle-callback (function part-tracker none)) +(define-extern ecoclaw-handler (function process int symbol event-message-block object :behavior ecoclaw)) +(define-extern finalbosscam-init-by-other (function entity none :behavior finalbosscam)) ;; - Unknowns (define-extern *finalbosscam-sg* skeleton-group) (define-extern *silodoor-sg* skeleton-group) (define-extern *ecoclaw-sg* skeleton-group) -;;(define-extern *ecoclaw* object) ;; unknown type -;;(define-extern ecoclaw-idle object) ;; unknown type -;;(define-extern ecoclaw-activate object) ;; unknown type +(define-extern *ecoclaw* (pointer ecoclaw)) +(define-extern ecoclaw-idle (state ecoclaw)) +(define-extern ecoclaw-activate (state ecoclaw)) (define-extern *med-res-snow1-sg* skeleton-group) @@ -27304,6 +27155,10 @@ :size-assert #x1d8 :heap-base #x170 :flag-assert #x4c017001d8 + (:states + green-eco-lurker-appear + green-eco-lurker-appear-land + ) ) (deftype green-eco-lurker-gen (process-drawable) @@ -27319,18 +27174,16 @@ ;; - Functions -(define-extern green-eco-lurker-init-by-other function) -(define-extern green-eco-lurker-gen-init-by-other function) +(define-extern green-eco-lurker-init-by-other (function entity green-eco-lurker-gen vector none :behavior green-eco-lurker)) +(define-extern green-eco-lurker-gen-init-by-other (function entity vector int none :behavior green-eco-lurker-gen)) ;; - Unknowns -(define-extern spawn-minions (state green-eco-lurker-gen)) ;; unknown type -(define-extern green-eco-lurker-wait-to-appear (state green-eco-lurker)) ;; unknown type +(define-extern spawn-minions (state green-eco-lurker-gen)) +(define-extern green-eco-lurker-wait-to-appear (state green-eco-lurker)) (define-extern *green-eco-lurker-sg* skeleton-group) (define-extern *green-eco-lurker-nav-enemy-info* nav-enemy-info) -(define-extern green-eco-lurker-appear-land (state green-eco-lurker)) ;; unknown type -(define-extern green-eco-lurker-appear (state green-eco-lurker)) ;; unknown type -(define-extern green-eco-lurker-tune-spheres (state green-eco-lurker)) ;; unknown type +(define-extern green-eco-lurker-tune-spheres (state green-eco-lurker)) ;; ---------------------- @@ -27341,69 +27194,70 @@ ;; - Types -; (deftype redshot-launch-info (UNKNOWN) -; () -; :method-count-assert 0 -; :size-assert #x0 -; :flag-assert #x0 -; ;; bad get label -; ) +(deftype redshot-launch-info (structure) + ((dest vector :inline :offset-assert 0) + (flight-time int64 :offset-assert 16) + (stall-time int64 :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) -; (deftype redshot-launch-array (UNKNOWN) -; () -; :method-count-assert 0 -; :size-assert #x0 -; :flag-assert #x0 -; ;; bad get label -; ) +(deftype redshot-launch-array (structure) + ((info redshot-launch-info 6 :inline :offset-assert 0)) + :method-count-assert 9 + :size-assert #xc0 + :flag-assert #x9000000c0 + ) ;; - Functions -(define-extern robotboss-always-trans function) -(define-extern robotboss-shooting-trans function) -(define-extern robotboss-blue-done function) -(define-extern robotboss-blue-beam function) -(define-extern robotboss-position function) -(define-extern robotboss-cut-cam function) -(define-extern robotboss-set-dda function) -(define-extern robotboss-cut-cam-exit function) -(define-extern robotboss-setup-for-hits function) -(define-extern robotboss-yellow-eco-on function) -(define-extern robotboss-yellow-eco-off function) -(define-extern robotboss-greenshot function) -(define-extern robotboss-handler function) -(define-extern robotboss-darkecobomb function) -(define-extern robotboss-is-red-hit function) -(define-extern robotboss-redshot-fill-array function) -(define-extern robotboss-redshot function) -(define-extern robotboss-time-to-shoot-yellow function) -(define-extern robotboss-is-yellow-hit function) -(define-extern robotboss-yellowshot function) -(define-extern robotboss-bomb-handler function) -(define-extern robotboss-anim-blend-loop function) +(define-extern robotboss-always-trans (function state none :behavior robotboss)) ;; CFG problems TODO +(define-extern robotboss-shooting-trans (function int none :behavior robotboss)) +(define-extern robotboss-blue-done (function object :behavior robotboss)) +(define-extern robotboss-blue-beam (function int symbol none :behavior robotboss)) +(define-extern robotboss-position (function object :behavior robotboss)) +(define-extern robotboss-cut-cam (function float float int none :behavior robotboss)) +(define-extern robotboss-set-dda (function none :behavior robotboss)) ;; TODO - what structure type does this return? +(define-extern robotboss-cut-cam-exit (function none :behavior robotboss)) +(define-extern robotboss-setup-for-hits (function int int object :behavior robotboss)) +(define-extern robotboss-yellow-eco-on (function entity-perm-status :behavior robotboss)) +(define-extern robotboss-yellow-eco-off (function entity-perm-status :behavior robotboss)) +(define-extern robotboss-greenshot (function vector basic basic symbol none :behavior robotboss)) +(define-extern robotboss-handler (function process int symbol event-message-block object :behavior robotboss)) +(define-extern robotboss-darkecobomb (function vector float (pointer process) :behavior robotboss)) +(define-extern robotboss-is-red-hit (function symbol :behavior robotboss)) +(define-extern robotboss-redshot-fill-array (function redshot-launch-array none :behavior robotboss)) +(define-extern robotboss-redshot (function redshot-launch-info symbol sound-id :behavior robotboss)) ;; run-func-in-process edge-case +(define-extern robotboss-time-to-shoot-yellow (function symbol :behavior robotboss)) +(define-extern robotboss-is-yellow-hit (function symbol :behavior robotboss)) +(define-extern robotboss-yellowshot (function none :behavior robotboss)) +(define-extern robotboss-bomb-handler (function process int symbol event-message-block object :behavior robotboss)) +(define-extern robotboss-anim-blend-loop (function art-joint-anim none :behavior robotboss)) ;; - Unknowns -;;(define-extern robotboss-blue-wait object) ;; unknown type -;;(define-extern robotboss-blue-dark-bomb object) ;; unknown type +(define-extern robotboss-blue-wait (state robotboss)) +(define-extern robotboss-blue-dark-bomb (state robotboss)) (define-extern *robotboss-blueeco-sg* skeleton-group) -;;(define-extern robotboss-blue-dark-bomb-wait object) ;; unknown type -;;(define-extern robotboss-green object) ;; unknown type -;;(define-extern robotboss-green-wait object) ;; unknown type -;;(define-extern robotboss-green-dark-bomb object) ;; unknown type -;;(define-extern robotboss-green-dark-bomb-wait object) ;; unknown type -;;(define-extern robotboss-red object) ;; unknown type -;;(define-extern robotboss-red-wait object) ;; unknown type -;;(define-extern robotboss-red-dark-bomb object) ;; unknown type +(define-extern robotboss-blue-dark-bomb-wait (state robotboss)) +(define-extern robotboss-green (state robotboss)) +(define-extern robotboss-green-wait (state robotboss)) +(define-extern robotboss-green-dark-bomb (state robotboss)) +(define-extern robotboss-green-dark-bomb-wait (state robotboss)) +(define-extern robotboss-red (state robotboss)) +(define-extern robotboss-red-wait (state robotboss)) +(define-extern robotboss-red-dark-bomb (state robotboss)) (define-extern *robotboss-redeco-sg* skeleton-group) -;;(define-extern robotboss-red-dark-bomb-wait object) ;; unknown type -;;(define-extern robotboss-yellow object) ;; unknown type -;;(define-extern robotboss-yellow-wait object) ;; unknown type -;;(define-extern robotboss-yellow-dark-bomb object) ;; unknown type +(define-extern robotboss-red-dark-bomb-wait (state robotboss)) +(define-extern robotboss-yellow (state robotboss)) +(define-extern robotboss-yellow-wait (state robotboss)) +(define-extern robotboss-yellow-dark-bomb (state robotboss)) (define-extern *robotboss-yelloweco-sg* skeleton-group) -;;(define-extern robotboss-white-eco-movie object) ;; unknown type -;;(define-extern robotboss-daxter-sacrifice-movie object) ;; unknown type -;;(define-extern robotboss-yellow-dark-bomb-wait object) ;; unknown type +(define-extern robotboss-white-eco-movie (state robotboss)) +(define-extern robotboss-daxter-sacrifice-movie (state robotboss)) +(define-extern robotboss-yellow-dark-bomb-wait (state robotboss)) ;; ---------------------- @@ -27487,137 +27341,64 @@ ;; - Types -; (deftype plat-eco-finalboss (plat-eco) -; ((force-dest float :offset-assert 360) -; (targ-dest float :offset-assert 364) -; (dest float :offset-assert 368) -; (speed float :offset-assert 372) -; (touch-time uint64 :offset-assert 376) -; ) -; :method-count-assert 33 -; :size-assert #x180 -; :heap-base #x110 -; :flag-assert #x2101100180 -; ;; inherited inspect of plat-eco -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; (dummy-28 () none 28) -; (dummy-29 () none 29) -; (dummy-30 () none 30) -; (dummy-31 () none 31) -; (dummy-32 () none 32) -; ) -; ) +(deftype plat-eco-finalboss (plat-eco) + ((force-dest float :offset-assert 360) + (targ-dest float :offset-assert 364) + (dest float :offset-assert 368) + (speed float :offset-assert 372) + (touch-time int64 :offset-assert 376) + ) + :method-count-assert 33 + :size-assert #x180 + :heap-base #x110 + :flag-assert #x2101100180 + ) -; (deftype sage-finalboss-particle (structure) -; ((part basic :offset-assert 0) -; (active basic :offset-assert 4) -; ) -; :method-count-assert 9 -; :size-assert #x8 -; :flag-assert #x900000008 -; ) +(deftype sage-finalboss-particle (structure) + ((part sparticle-launch-control :offset-assert 0) + (active symbol :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + :allow-misaligned + ) -; (deftype sage-finalboss (process-taskable) -; ((redsage uint64 :offset-assert 384) -; (bluesage uint64 :offset-assert 392) -; (yellowsage uint64 :offset-assert 400) -; (assistant uint64 :offset-assert 408) -; (robotplat uint64 :offset-assert 416) -; (robotboss uint64 :offset-assert 424) -; (silodoor uint64 :offset-assert 432) -; (jak-white uint64 :offset-assert 440) -; (left-door basic :offset-assert 448) -; (right-door basic :offset-assert 452) -; (kick-in-the-door basic :offset-assert 456) -; (kick-the-credits basic :offset-assert 460) -; (credit-fade float :offset-assert 464) -; (palette-val float :offset-assert 468) -; (particle UNKNOWN 9 :offset-assert 472) -; (particle-whiteout basic :offset-assert 616) -; (credits-played basic :offset-assert 620) -; ) -; :method-count-assert 53 -; :size-assert #x270 -; :heap-base #x200 -; :flag-assert #x3502000270 -; ;; inherited inspect of process-taskable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; (dummy-28 () none 28) -; (dummy-29 () none 29) -; (dummy-30 () none 30) -; (dummy-31 () none 31) -; (dummy-32 () none 32) -; (dummy-33 () none 33) -; (dummy-34 () none 34) -; (dummy-35 () none 35) -; (dummy-36 () none 36) -; (dummy-37 () none 37) -; (dummy-38 () none 38) -; (dummy-39 () none 39) -; (dummy-40 () none 40) -; (dummy-41 () none 41) -; (dummy-42 () none 42) -; (dummy-43 () none 43) -; (dummy-44 () none 44) -; (dummy-45 () none 45) -; (dummy-46 () none 46) -; (dummy-47 () none 47) -; (dummy-48 () none 48) -; (dummy-49 () none 49) -; (dummy-50 () none 50) -; (dummy-51 () none 51) -; (dummy-52 () none 52) -; ) -; ) +(deftype sage-finalboss (process-taskable) + ((redsage handle :offset-assert 384) + (bluesage handle :offset-assert 392) + (yellowsage handle :offset-assert 400) + (assistant handle :offset-assert 408) + (robotplat handle :offset-assert 416) + (robotboss handle :offset-assert 424) + (silodoor handle :offset-assert 432) + (jak-white handle :offset-assert 440) + (left-door entity-actor :offset-assert 448) + (right-door entity-actor :offset-assert 452) + (kick-in-the-door symbol :offset-assert 456) + (kick-the-credits symbol :offset-assert 460) + (credit-fade float :offset-assert 464) + (palette-val float :offset-assert 468) + (particle sage-finalboss-particle 9 :inline :offset-assert 472) + (particle-whiteout sparticle-launch-control :offset-assert 616) + (credits-played symbol :offset-assert 620) + ) + :method-count-assert 53 + :size-assert #x270 + :heap-base #x200 + :flag-assert #x3502000270 + ) ;; - Functions -(define-extern sage-finalboss-extra-enter function) -(define-extern sage-finalboss-extra-trans function) -(define-extern sage-finalboss-credit-particle function) +(define-extern sage-finalboss-extra-enter (function none :behavior sage-finalboss)) +(define-extern sage-finalboss-extra-trans (function none :behavior sage-finalboss)) +(define-extern sage-finalboss-credit-particle (function none :behavior sage-finalboss)) ;; - Unknowns (define-extern *sage-finalboss-sg* skeleton-group) -;;(define-extern sage-finalboss-credits object) ;; unknown type +(define-extern sage-finalboss-credits (state sage-finalboss)) (define-extern *jak-white-sg* skeleton-group) (define-extern *robotboss-cinematic-sg* skeleton-group) (define-extern *plat-eco-finalboss-lit-sg* skeleton-group) @@ -29028,162 +28809,103 @@ ;; - Types -; (deftype fisher-bank (basic) -; ((width meters :offset-assert 4) -; (net-radius meters :offset-assert 8) -; (max-caught int32 :offset-assert 12) -; (max-missed int32 :offset-assert 16) -; ) -; :method-count-assert 9 -; :size-assert #x14 -; :flag-assert #x900000014 -; ) +(deftype fisher-bank (basic) + ((width meters :offset-assert 4) + (net-radius meters :offset-assert 8) + (max-caught int32 :offset-assert 12) + (max-missed int32 :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x14 + :flag-assert #x900000014 + ) -; (deftype fisher-params (structure) -; ((timeout uint64 :offset-assert 0) -; (vel float :offset-assert 8) -; (swing-min uint64 :offset-assert 16) -; (swing-max uint64 :offset-assert 24) -; (period uint64 :offset-assert 32) -; (fish-vel float :offset-assert 40) -; (bad-percent float :offset-assert 44) -; (deadly-percent float :offset-assert 48) -; (powerup-percent float :offset-assert 52) -; ) -; :method-count-assert 9 -; :size-assert #x38 -; :flag-assert #x900000038 -; ) +(deftype fisher-params (structure) + ((timeout seconds :offset-assert 0) + (vel float :offset-assert 8) + (swing-min seconds :offset-assert 16) + (swing-max seconds :offset-assert 24) + (period seconds :offset-assert 32) + (fish-vel float :offset-assert 40) + (bad-percent float :offset-assert 44) + (deadly-percent float :offset-assert 48) + (powerup-percent float :offset-assert 52) + ) + :allow-misaligned + :method-count-assert 9 + :size-assert #x38 + :flag-assert #x900000038 + ) -; (deftype fisher (process-taskable) -; ((paddle-end UNKNOWN 2 :offset-assert 384) -; (paddle-pos vector :inline :offset-assert 416) -; (paddle float :offset-assert 432) -; (paddle-vel float :offset-assert 436) -; (spawner float :offset-assert 440) -; (spawner-last float :offset-assert 444) -; (spawn-time uint64 :offset-assert 448) -; (turn-time uint64 :offset-assert 456) -; (swing-time uint64 :offset-assert 464) -; (block-time uint64 :offset-assert 472) -; (block int32 :offset-assert 480) -; (caught int32 :offset-assert 484) -; (missed int32 :offset-assert 488) -; (difficulty int32 :offset-assert 492) -; (start-time uint64 :offset-assert 496) -; (ambient-big-one uint64 :offset-assert 504) -; (ambient-steady uint64 :offset-assert 512) -; (ambient-sagging uint64 :offset-assert 520) -; (ambient-almost uint64 :offset-assert 528) -; (cheat-temp int32 :offset-assert 536) -; (hard basic :offset-assert 540) -; (training basic :offset-assert 544) -; (params fisher-params :inline :offset-assert 552) -; ) -; :method-count-assert 53 -; :size-assert #x260 -; :heap-base #x1f0 -; :flag-assert #x3501f00260 -; ;; inherited inspect of process-taskable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; (dummy-28 () none 28) -; (dummy-29 () none 29) -; (dummy-30 () none 30) -; (dummy-31 () none 31) -; (dummy-32 () none 32) -; (dummy-33 () none 33) -; (dummy-34 () none 34) -; (dummy-35 () none 35) -; (dummy-36 () none 36) -; (dummy-37 () none 37) -; (dummy-38 () none 38) -; (dummy-39 () none 39) -; (dummy-40 () none 40) -; (dummy-41 () none 41) -; (dummy-42 () none 42) -; (dummy-43 () none 43) -; (dummy-44 () none 44) -; (dummy-45 () none 45) -; (dummy-46 () none 46) -; (dummy-47 () none 47) -; (dummy-48 () none 48) -; (dummy-49 () none 49) -; (dummy-50 () none 50) -; (dummy-51 () none 51) -; (dummy-52 () none 52) -; ) -; ) +(deftype fisher (process-taskable) + ((paddle-end vector 2 :inline :offset-assert 384) + (paddle-pos vector :inline :offset-assert 416) + (paddle float :offset-assert 432) + (paddle-vel float :offset-assert 436) + (spawner float :offset-assert 440) + (spawner-last float :offset-assert 444) + (spawn-time int64 :offset-assert 448) + (turn-time int64 :offset-assert 456) + (swing-time int64 :offset-assert 464) + (block-time int64 :offset-assert 472) + (block int32 :offset-assert 480) + (caught int32 :offset-assert 484) + (missed int32 :offset-assert 488) + (difficulty int32 :offset-assert 492) + (start-time int64 :offset-assert 496) + (ambient-big-one int64 :offset-assert 504) + (ambient-steady int64 :offset-assert 512) + (ambient-sagging int64 :offset-assert 520) + (ambient-almost int64 :offset-assert 528) + (cheat-temp int32 :offset-assert 536) + (hard symbol :offset-assert 540) + (training symbol :offset-assert 544) + (params fisher-params :inline :offset-assert 552) + ) + :method-count-assert 53 + :size-assert #x260 + :heap-base #x1f0 + :flag-assert #x3501f00260 + ) -; (deftype fisher-fish (process-drawable) -; ((dir vector :inline :offset-assert 176) -; (offset float :offset-assert 192) -; (pos float :offset-assert 196) -; (vel float :offset-assert 200) -; (mode basic :offset-assert 204) -; (size meters :offset-assert 208) -; ) -; :method-count-assert 20 -; :size-assert #xd4 -; :heap-base #x70 -; :flag-assert #x14007000d4 -; ;; inherited inspect of process-drawable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; ) -; ) +(deftype fisher-fish (process-drawable) + ((dir vector :inline :offset-assert 176) + (offset float :offset-assert 192) + (pos float :offset-assert 196) + (vel float :offset-assert 200) + (mode basic :offset-assert 204) + (size meters :offset-assert 208) + ) + :method-count-assert 20 + :size-assert #xd4 + :heap-base #x70 + :flag-assert #x14007000d4 + ;; inherited inspect of process-drawable + ) ;; - Functions -(define-extern fisher-fish-water function) -(define-extern fisher-game-update function) -(define-extern fisher-draw-display function) -(define-extern fisher-spawn-ambient function) -(define-extern fisher-fish-init-by-other function) -(define-extern fisher-fish-move function) +(define-extern fisher-fish-water (function vector float none :behavior fisher-fish)) +(define-extern fisher-game-update (function none :behavior fisher)) +(define-extern fisher-draw-display (function fisher none :behavior fisher)) +(define-extern fisher-spawn-ambient (function none :behavior fisher)) +(define-extern fisher-fish-init-by-other (function symbol float float none :behavior fisher-fish)) +(define-extern fisher-fish-move (function none :behavior fisher-fish)) ;; - Unknowns (define-extern *fish-net-sg* skeleton-group) (define-extern *fisher-sg* skeleton-group) -;;(define-extern *FISHER-bank* object) ;; unknown type -;;(define-extern fisher-playing object) ;; unknown type -;;(define-extern *fisher-params* object) ;; unknown type -;;(define-extern fisher-done object) ;; unknown type +(define-extern *FISHER-bank* fisher-bank) ;; unknown type +(define-extern fisher-playing (state fisher)) ;; unknown type +(define-extern *fisher-params* (array (inline-array fisher-params))) ;; unknown type +(define-extern fisher-done (state fisher)) ;; unknown type (define-extern *catch-fishc-sg* skeleton-group) (define-extern *catch-fishb-sg* skeleton-group) (define-extern *catch-fisha-sg* skeleton-group) -;;(define-extern fisher-fish-fall object) ;; unknown type -;;(define-extern fisher-fish-caught object) ;; unknown type -;;(define-extern fisher-fish-die object) ;; unknown type +(define-extern fisher-fish-fall (state fisher-fish)) ;; unknown type +(define-extern fisher-fish-caught (state fisher-fish)) ;; unknown type +(define-extern fisher-fish-die (state fisher-fish)) ;; unknown type ;; ---------------------- @@ -33797,6 +33519,10 @@ :size-assert #xb4 :heap-base #x50 :flag-assert #x14005000b4 + (:states + spiderwebs-idle + spiderwebs-bounce + ) ) ;; - Functions @@ -33806,9 +33532,7 @@ ;; - Unknowns (define-extern *spiderwebs-sg* skeleton-group) -(define-extern spiderwebs-idle (state spiderwebs)) ;; unknown type -(define-extern *spider-jump-mods* surface) ;; unknown type -(define-extern spiderwebs-bounce (state spiderwebs)) ;; unknown type +(define-extern *spider-jump-mods* surface) ;; ---------------------- @@ -33866,14 +33590,14 @@ (pickup int32 :offset-assert 16) (pickup-amount int32 :offset-assert 20) (event-death symbol :offset-assert 24) - (delay-before-dying-if-not-visible uint64 :offset-assert 32) + (delay-before-dying-if-not-visible int64 :offset-assert 32) ) :method-count-assert 11 :size-assert #x28 :flag-assert #xb00000028 (:methods (init! (_type_ symbol symbol symbol symbol int int symbol) int 9) - (set-delay! (_type_ uint) uint 10) + (set-delay! (_type_ int) int 10) ) ) @@ -33885,13 +33609,13 @@ (delta-wiggle-angle float :offset-assert 416) (wiggle-factor float :offset-assert 420) (event-death symbol :offset-assert 424) - (delay-before-dying-if-not-visible uint64 :offset-assert 432) - (chase-rest-time uint64 :offset-assert 440) - (target-nav-time uint64 :offset-assert 448) + (delay-before-dying-if-not-visible int64 :offset-assert 432) + (chase-rest-time int64 :offset-assert 440) + (target-nav-time int64 :offset-assert 448) (unknown00 basic :offset-assert 456) (unknown01 basic :offset-assert 460) - (wiggle-time uint64 :offset-assert 464) - (last-visible-time uint64 :offset-assert 472) + (wiggle-time int64 :offset-assert 464) + (last-visible-time int64 :offset-assert 472) (up-vector vector :inline :offset-assert 480) (state-vector vector :inline :offset-assert 496) ) @@ -33899,6 +33623,11 @@ :size-assert #x200 :heap-base #x190 :flag-assert #x4c01900200 + (:states + baby-spider-hatching + baby-spider-resume + baby-spider-die-fast + ) ) ;; - Functions @@ -33908,12 +33637,9 @@ ;; - Unknowns -(define-extern baby-spider-hatching (state baby-spider)) ;; unknown type -(define-extern baby-spider-resume (state baby-spider)) ;; unknown type (define-extern *baby-spider-sg* skeleton-group) -(define-extern *baby-spider-nav-enemy-info-for-cave-trap* nav-enemy-info) ;; unknown type +(define-extern *baby-spider-nav-enemy-info-for-cave-trap* nav-enemy-info) (define-extern *baby-spider-nav-enemy-info* nav-enemy-info) -(define-extern baby-spider-die-fast (state baby-spider)) ;; unknown type ;; ---------------------- diff --git a/decompiler/config/jak1_ntsc_black_label/anonymous_function_types.jsonc b/decompiler/config/jak1_ntsc_black_label/anonymous_function_types.jsonc index c578a3c18a..83d31a3dff 100644 --- a/decompiler/config/jak1_ntsc_black_label/anonymous_function_types.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/anonymous_function_types.jsonc @@ -579,7 +579,7 @@ [3, "(function basic symbol)"], [2, "(function process symbol)"] ], - + "anim-tester": [ [11, "(function none :behavior anim-tester)"], [12, "(function none :behavior anim-tester)"], @@ -590,7 +590,7 @@ [1, "(function none :behavior camera-combiner)"], [2, "(function basic int basic event-message-block object :behavior camera-combiner)"] ], - + "title-obs": [ [0, "(function none)"] ], @@ -669,7 +669,7 @@ [2, "(function sparticle-launch-group :behavior oracle)"], [3, "(function none :behavior oracle)"] ], - + "time-of-day": [ [10, "(function none :behavior time-of-day-proc)"], [12, "(function sparticle-system sparticle-cpuinfo none)"] @@ -757,5 +757,39 @@ [6, "(function sparticle-system sparticle-cpuinfo none)"] ], + "fisher-JUN": [ + [27, "(function none :behavior process)"], + [28, "(function none :behavior fisher)"], + [20, "(function none :behavior fisher-fish)"], + [1, "(function none :behavior target)"] + ], + "fisher-JUNGLE-L1": [ + [27, "(function none :behavior process)"], + [28, "(function none :behavior fisher)"], + [20, "(function none :behavior fisher-fish)"], + [1, "(function none :behavior target)"] + ], + + "robotboss-misc": [ + [5, "(function sparticle-launch-control :behavior finalbosscam)"] + ], + + "sage-finalboss-FIN": [ + [21, "(function none :behavior sage-finalboss)"], + [22, "(function none :behavior sage-finalboss)"], + [15, "(function final-door symbol)"], + [16, "(function final-door symbol)"], + [7, "(function final-door symbol)"], + [6, "(function final-door symbol)"] + ], + "sage-finalboss-L1": [ + [21, "(function none :behavior sage-finalboss)"], + [22, "(function none :behavior sage-finalboss)"], + [15, "(function final-door symbol)"], + [16, "(function final-door symbol)"], + [7, "(function final-door symbol)"], + [6, "(function final-door symbol)"] + ], + "placeholder-do-not-add-below": [] } diff --git a/decompiler/config/jak1_ntsc_black_label/hacks.jsonc b/decompiler/config/jak1_ntsc_black_label/hacks.jsonc index 5312112830..11fe9c48c0 100644 --- a/decompiler/config/jak1_ntsc_black_label/hacks.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/hacks.jsonc @@ -353,9 +353,6 @@ "(method 27 ropebridge)", // all unchecked and in level DGO code - "(anon-function 11 robotboss)", - "(anon-function 18 robotboss)", - "(anon-function 49 robotboss)", "(anon-function 21 plant-boss)", "(anon-function 10 ice-cube)", "(anon-function 15 ice-cube)", diff --git a/decompiler/config/jak1_ntsc_black_label/label_types.jsonc b/decompiler/config/jak1_ntsc_black_label/label_types.jsonc index aa3d72d15d..a81fdc51f4 100644 --- a/decompiler/config/jak1_ntsc_black_label/label_types.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/label_types.jsonc @@ -868,6 +868,159 @@ ["L670", "uint64", true] ], + "fisher-JUN": [ + ["L262", "vector"], + ["L463", "(array (inline-array fisher-params))"] + ], + "fisher-JUNGLE-L1": [ + ["L262", "vector"], + ["L463", "(array (inline-array fisher-params))"] + ], + + "robotboss-weapon": [ + ["L122", "attack-info"], + ["L127", "attack-info"], + ["L138", "attack-info"], + ["L144", "vector4w"], + ["L145", "vector"] + ], + + "robotboss-misc": [ + ["L99", "vector"] + ], + + "robotboss": [ + ["L646", "attack-info"], + ["L647", "attack-info"], + ["L651", "vector"], + ["L654", "vector"], + ["L655", "vector"], + ["L656", "vector"], + ["L657", "vector"], + ["L658", "vector"], + ["L659", "vector"], + ["L660", "vector"], + ["L661", "vector"], + ["L662", "vector"], + ["L678", "vector"], + ["L669", "vector"], + ["L701", "vector"], + ["L702", "vector"], + ["L703", "vector"], + ["L705", "vector"], + ["L642", "robotboss-dda"], + ["L643", "robotboss-dda"], + ["L644", "robotboss-dda"], + ["L645", "robotboss-dda"], + ["L632", "robotboss-dda"], + ["L713", "float", true], + ["L714", "float", true], + ["L715", "float", true], + ["L716", "float", true], + ["L717", "float", true], + ["L718", "float", true], + ["L719", "float", true], + ["L720", "float", true], + ["L721", "float", true], + ["L722", "float", true], + ["L723", "float", true], + ["L724", "float", true], + ["L725", "float", true], + ["L726", "float", true], + ["L727", "float", true], + ["L728", "float", true], + ["L729", "float", true], + ["L730", "float", true], + ["L731", "float", true], + ["L732", "float", true], + ["L733", "float", true], + ["L734", "float", true], + ["L735", "float", true], + ["L736", "float", true], + ["L737", "float", true], + ["L738", "float", true], + ["L739", "float", true], + ["L740", "float", true], + ["L741", "float", true], + ["L742", "float", true], + ["L743", "float", true], + ["L744", "float", true], + ["L745", "float", true], + ["L746", "float", true], + ["L747", "float", true], + ["L748", "float", true], + ["L749", "float", true], + ["L750", "float", true], + ["L751", "float", true], + ["L752", "float", true], + ["L753", "float", true], + ["L754", "float", true], + ["L755", "float", true], + ["L756", "float", true], + ["L757", "float", true], + ["L758", "float", true], + ["L759", "float", true], + ["L760", "float", true], + ["L761", "float", true], + ["L762", "float", true], + ["L763", "float", true], + ["L764", "float", true], + ["L765", "float", true], + ["L766", "float", true], + ["L767", "float", true], + ["L768", "(pointer float)", 1], + ["L769", "float", true], + ["L770", "float", true], + ["L771", "float", true], + ["L772", "float", true], + ["L773", "float", true], + ["L774", "float", true], + ["L775", "float", true], + ["L776", "float", true], + ["L777", "float", true], + ["L778", "float", true], + ["L779", "float", true], + ["L780", "float", true], + ["L781", "float", true], + ["L782", "float", true], + ["L783", "float", true], + ["L784", "float", true], + ["L785", "float", true], + ["L786", "float", true], + ["L787", "float", true], + ["L788", "float", true], + ["L789", "float", true], + ["L790", "float", true], + ["L791", "float", true], + ["L792", "float", true], + ["L793", "float", true], + ["L794", "float", true], + ["L795", "float", true], + ["L796", "float", true], + ["L797", "float", true], + ["L798", "float", true], + ["L799", "float", true], + ["L800", "float", true], + ["L801", "uint64", true], + ["L802", "uint64", true], + ["L803", "uint64", true], + ["L804", "uint64", true], + ["L814", "float", true], + ["L815", "uint64", true], + ["L816", "uint64", true] + ], + + "sage-finalboss-FIN": [ + ["L528", "vector"], + ["L272", "vector"], + ["L527", "quaternion"] + ], + "sage-finalboss-L1": [ + ["L528", "vector"], + ["L272", "vector"], + ["L527", "quaternion"] + ], + // please do not add things after this entry! git is dumb. "object-file-that-doesnt-actually-exist-and-i-just-put-this-here-to-prevent-merge-conflicts-with-this-file": [] } diff --git a/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc b/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc index 9052b20247..00b07e7f44 100644 --- a/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc @@ -1855,7 +1855,7 @@ "(method 11 wall-plat)": [ [16, "vector"] ], - + "(code plunger-lurker-plunge)": [[16, "event-message-block"]], "(event flying-lurker-fly)": [[16, "event-message-block"]], "(trans flying-lurker-fly)": [[16, "event-message-block"]], @@ -1882,7 +1882,7 @@ [144, "vector"], [160, "vector"] ], - + "(method 18 collide-cache)": [[16, "collide-cache-prim"]], "kill-current-level-hint": [[16, "event-message-block"]], @@ -1917,7 +1917,7 @@ "sparticle-60-to-50":[ [16, "quaternion"] - ], + ], "sp-orbiter":[ [16, "vector"], @@ -2741,7 +2741,7 @@ [128, "vector"], [144, "vector"] ], - + "(method 11 effect-control)": [ [16, "vector"], [32, "vector"] @@ -2796,5 +2796,206 @@ [16,["inline-array", "sky-vertex", 12]] ], + "fisher-fish-move": [[16, "vector"]], + "fisher-fish-water": [[16, "vector"]], + "(trans play-accept fisher)": [[16, "vector"]], + "(method 11 fisher)": [[16, "vector"]], + "(code fisher-fish-caught)": [[16, "event-message-block"]], + "(code fisher-fish-die)": [[16, "event-message-block"]], + "(exit fisher-done)": [[16, "event-message-block"]], + "(enter fisher-done)": [[16, "event-message-block"]], + "(event fisher-playing)": [[16, "event-message-block"]], + "(enter fisher-playing)": [[16, "event-message-block"]], + "(exit fisher-playing)": [[16, "event-message-block"]], + "(trans enter-playing fisher)": [[16, "event-message-block"]], + "(code target-fishing)": [ + [16, "event-message-block"], + [96, "vector"], + [112, "quaternion"], + [128, "quaternion"], + [144, "quaternion"] + ], + "(method 43 fisher)": [ + [16, "vector"], + [32, "vector"] + ], + "fisher-draw-display": [[16, "font-context"]], + + "(method 10 torus)": [ + [16, "vector"], + [32, "vector"] + ], + "(method 12 torus)": [[16, "matrix"]], + "redshot-trans": [[16, "matrix"]], + "(trans redshot-explode)": [ + [16, "vector"], + [32, "event-message-block"], + [112, "vector"] + ], + "(code darkecobomb-explode)": [[16, "event-message-block"]], + "(event yellowshot-idle)": [[16, "event-message-block"]], + "(trans yellowshot-idle)": [[16, "event-message-block"]], + "(trans darkecobomb-countdown)": [[16, "vector"]], + + "arcing-shot-draw": [ + [16, "vector"], + [32, "vector"] + ], + + "(method 9 torus)": [ + [16, "vector"], + [32, "vector"], + [48, "vector"], + [64, "matrix"], + [128, ["inline-array", "vector", 8]] + ], + + "(method 32 finalbosscam)": [[16, "event-message-block"]], + + "(code cam-robotboss)": [ + [16, "vector"], + [32, "vector"] + ], + + "ecoclaw-beam-particle-callback": [[16, "vector"]], + "robotboss-manipy-trans-hook": [[16, "vector"]], + "robotboss-redshot": [[16, "vector"]], + "robotboss-cut-cam": [[16, "vector"]], + + "robotboss-yellowshot": [ + [16, "vector"], + [32, "vector"], + [48, "event-message-block"] + ], + + "(trans robotboss-white-eco-movie)": [[16, "vector"]], + + "(code robotboss-red-wait)": [ + [16, "vector"], + [32, "redshot-launch-array"] + ], + + "(trans robotboss-yellow-wait)": [ + [16, "vector"], + [32, "event-message-block"], + [112, "vector"] + ], + + "robotboss-setup-for-hits": [ + [16, "sphere"], + [32, "event-message-block"] + ], + + "robotboss-position": [ + [16, "vector"], + [32, "matrix"], + [96, "event-message-block"], + [176, "vector"] + ], + + "robotboss-shooting-trans": [ + [16, "vector"], + [32, "event-message-block"] + ], + + "robotboss-darkecobomb": [ + [16, "vector"], + [32, "vector"] + ], + + "robotboss-redshot-fill-array": [ + [16, "vector"], + [32, "vector"] + ], + + "robotboss-blue-beam": [ + [16, "vector"], + [32, "vector"], + [48, "vector"], + [64, "collide-mesh-cache-tri"], + [160, "vector"], + [176, "event-message-block"] + ], + + "robotboss-bomb-handler": [[16, "event-message-block"]], + "robotboss-blue-done": [[16, "event-message-block"]], + "(exit robotboss-blue-wait)": [[16, "event-message-block"]], + "(enter robotboss-blue-wait)": [[16, "event-message-block"]], + "(exit robotboss-green-wait)": [[16, "event-message-block"]], + "(event robotboss-green-wait)": [[16, "event-message-block"]], + + "(trans robotboss-red-wait)": [ + [16, "event-message-block"], + [96, "vector"] + ], + + "(exit robotboss-red-wait)": [[16, "event-message-block"]], + "(exit robotboss-yellow-wait)": [[16, "event-message-block"]], + "(code robotboss-white-eco-movie)": [[16, "event-message-block"]], + "(event robotboss-yellow-dark-bomb-wait)": [[16, "event-message-block"]], + "(exit robotboss-yellow-dark-bomb-wait)": [[16, "event-message-block"]], + "(code robotboss-daxter-sacrifice-movie)": [[16, "event-message-block"]], + + "robotboss-greenshot": [ + [16, "vector"], + [32, "vector"] + ], + + "(trans robotboss-blue-wait)": [ + [16, "vector"], + [32, "event-message-block"], + [112, "vector"] + ], + + "(code robotboss-blue-wait)": [[16, "event-message-block"]], + + "(method 44 green-eco-lurker)": [[16, "event-message-block"]], + "(method 72 green-eco-lurker)": [[16, "event-message-block"]], + "(enter nav-enemy-die green-eco-lurker)": [[16, "event-message-block"]], + "(event spawn-minions)": [[16, "event-message-block"]], + "(method 51 green-eco-lurker)": [[16, "vector"]], + "(enter green-eco-lurker-appear)": [ + [16, "vector"], + [32, "vector"] + ], + "(code spawn-minions)": [ + [16, "vector"], + [32, "event-message-block"] + ], + + "check-drop-level-lighteco-big-pops": [[16, "vector"]], + "check-drop-level-lighteco-pops": [[16, "vector"]], + "(method 20 light-eco-child)": [[16, "vector"]], + "light-eco-child-default-event-handler": [[16, "event-message-block"]], + "(code light-eco-child-die)": [[16, "event-message-block"]], + "light-eco-mother-default-event-handler": [[16, "event-message-block"]], + "(trans light-eco-child-hit-ground)": [[16, "vector"]], + "(method 21 light-eco-mother)": [[16, "vector"]], + "(method 20 light-eco-mother)": [[16, "vector"]], + + "(trans plat-path-active plat-eco-finalboss)": [ + [16, "vector"], + [32, "vector"], + [48, "event-message-block"] + ], + "(method 44 sage-finalboss)": [[16, "event-message-block"]], + "(method 45 sage-finalboss)": [[16, "event-message-block"]], + "(method 32 sage-finalboss)": [[16, "event-message-block"]], + "(exit play-anim sage-finalboss)": [[16, "event-message-block"]], + "sage-finalboss-extra-trans": [[16, "event-message-block"]], + "sage-finalboss-extra-enter": [[16, "event-message-block"]], + "(trans play-anim sage-finalboss)": [ + [16, "event-message-block"], + [96, "vector"], + [112, "vector"], + [128, "vector"], + [144, "vector"], + [160, "vector"], + [176, "vector"], + [192, "vector"], + [208, "vector"], + [224, "vector"] + ], + "placeholder-do-not-add-below!": [] } diff --git a/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc b/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc index 0cf753c0c7..1580935c15 100644 --- a/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc @@ -3961,7 +3961,7 @@ [111, "s2", "(pointer gs-tex1)"], [113, "s2", "(pointer gs-reg64)"], [115, "s2", "(pointer gs-clamp)"], - [117, "s2", "(pointer gs-reg64)"], + [117, "s2", "(pointer gs-reg64)"], [118, "s2", "(pointer uint64)"], [120, "s2", "(pointer gs-reg64)"], [[159, 166], "s3", "dma-packet"], @@ -4063,5 +4063,273 @@ [[75, 78], "v1", "dma-packet"] ], + "fisher-fish-move": [ + [9, "v1", "fisher"], + [21, "v1", "fisher"] + ], + + "(code fisher-fish-fall)": [ + [5, "v1", "fisher"], + [60, "v1", "fisher"], + [79, "v1", "fisher"] + ], + + "(code fisher-fish-caught)": [ + [169, "v1", "fisher"] + ], + + "(code fisher-fish-die)": [ + [35, "v1", "fisher"], + [47, "v1", "fisher"], + [90, "v1", "fisher"], + [98, "v1", "fisher"], + [112, "v1", "fisher"], + [129, "v1", "fisher"], + [137, "v1", "fisher"], + [151, "v1", "fisher"], + [165, "v1", "fisher"], + [179, "v1", "fisher"], + [193, "v1", "fisher"], + [205, "v1", "fisher"], + [209, "v1", "fisher"], + [27, "v1", "float"], + [79, "v1", "float"] + ], + + "(method 38 fisher)": [ + [33, "t9", "(function fisher none)"] + ], + + "(enter fisher-done)": [ + [137, "f0", "float"], + [148, "f0", "float"], + [213, "f0", "float"] + ], + + "fisher-spawn-ambient": [ + [8, "v1", "float"] + ], + + "(method 43 fisher)": [ + [27, "v1", "float"], + [69, "v1", "float"] + ], + + "(trans play-accept fisher)": [ + [101, "v0", "state"] + ], + + "(trans idle fisher)": [ + [4, "v0", "state"] + ], + + "(code idle fisher)": [ + [132, "v1", "art-joint-anim"], + [35, "v1", "float"] + ], + + "(code target-fishing)": [ + [163, "v1", "fisher"], + [290, "v1", "art-joint-anim"] + ], + + "(method 11 torus)": [ + [[5, 22], "s4", "collide-shape-prim-group"] + ], + + "(method 12 torus)": [ + [11, "v1", "float"], + [51, "v1", "float"] + ], + + "(code darkecobomb-countdown)": [ + [25, "v1", "art-joint-anim"], + [75, "v1", "art-joint-anim"] + ], + + "(code darkecobomb-land)": [ + [36, "v1", "art-joint-anim"] + ], + + "(code darkecobomb-idle)": [ + [10, "v1", "art-joint-anim"], + [60, "v1", "art-joint-anim"] + ], + + "redshot-particle-callback": [ + [2, "v1", "(pointer redshot)"] + ], + + "(event cam-robotboss)": [ + [5, "v1", "vector"] + ], + + "ecoclaw-handler": [ + [73, "v1", "vector"] + ], + + "(event idle silodoor)": [ + [4, "v1", "float"] + ], + + "ecoclaw-beam-particle-callback": [ + [1, "a0", "(pointer projectile)"], + [3, "a0", "(pointer projectile)"] + ], + + "(method 32 finalbosscam)": [ + [156, "v1", "robotboss"] + ], + + "(trans ecoclaw-activate)": [ + [30, "a0", "part-tracker"] + ], + + "robotboss-position": [ + [109, "a0", "process-drawable"] + ], + + "robotboss-bomb-handler": [ + [6, "v1", "float"] + ], + + "robotboss-handler": [ + [6, "v1", "float"] + ], + + "(event robotboss-red-wait)": [ + [12, "v1", "float"], + [68, "v1", "float"] + ], + + "(event robotboss-yellow-wait)": [ + [12, "v1", "float"], + [68, "v1", "float"] + ], + + "(code robotboss-white-eco-movie)": [ + [[188, 215], "gp", "handle"] + ], + + "(code robotboss-yellow-wait)": [ + [336, "v1", "float"], + [365, "v1", "float"], + [530, "v1", "art-joint-anim"] + ], + + "(code robotboss-red-wait)": [ + [153, "v1", "float"], + [287, "v1", "float"], + [339, "v1", "float"], + [500, "v1", "art-joint-anim"] + ], + + "robotboss-redshot": [ + [45, "v1", "float"], + [70, "v1", "float"] + ], + + "(event robotboss-green-wait)": [ + [39, "v1", "float"], + [95, "v1", "float"] + ], + + "(exit robotboss-yellow-wait)": [ + [50, "v1", "collide-shape-prim-group"], + [54, "v1", "collide-shape-prim-group"] + ], + + "(exit robotboss-green-wait)": [ + [50, "v1", "collide-shape-prim-group"], + [54, "v1", "collide-shape-prim-group"] + ], + + "(exit robotboss-red-wait)": [ + [50, "v1", "collide-shape-prim-group"], + [54, "v1", "collide-shape-prim-group"] + ], + + "(exit robotboss-blue-wait)": [ + [50, "v1", "collide-shape-prim-group"], + [54, "v1", "collide-shape-prim-group"] + ], + + "robotboss-redshot-fill-array": [ + [24, "v1", "float"], + [46, "v1", "float"], + [109, "v1", "float"], + [137, "v1", "float"], + [137, "v1", "float"] + ], + + "(trans robotboss-blue-wait)": [ + [254, "v1", "float"] + ], + + "(code robotboss-blue-wait)": [ + [14, "v1", "art-joint-anim"] + ], + + "(enter green-eco-lurker-appear)": [ + [12, "v1", "robotboss"], + [17, "v1", "robotboss"] + ], + + "(code green-eco-lurker-appear)": [ + [42, "v1", "art-joint-anim"], + [93, "v1", "art-joint-anim"] + ], + + "(code green-eco-lurker-appear-land)": [ + [74, "v1", "art-joint-anim"] + ], + + "(code nav-enemy-chase green-eco-lurker)": [ + [55, "v1", "art-joint-anim"] + ], + + "(code nav-enemy-patrol green-eco-lurker)": [ + [8, "t9", "(function none)"] + ], + + "(trans light-eco-child-hit-ground)": [ + [63, "v1", "light-eco-mother"], + [75, "a1", "light-eco-mother"], + [88, "a1", "light-eco-mother"] + ], + + "(event plat-path-active plat-eco-finalboss)": [ + [10, "v1", "float"] + ], + + "(method 45 sage-finalboss)": [ + [[40, 57], "s5", "manipy"] + ], + + "(method 32 sage-finalboss)": [ + [[241, 245], "v1", "manipy"], + [[309, 313], "v1", "manipy"] + ], + + "(trans play-anim sage-finalboss)": [ + [[179, 183], "a0", "manipy"], + [[216, 220], "a0", "manipy"], + [[295, 299], "a1", "manipy"], + [[334, 338], "a1", "manipy"], + [[371, 375], "a1", "manipy"], + [391, "v0", "final-door"], + [396, "v0", "final-door"] + ], + + "(method 7 sage-finalboss)": [ + [2, "v1", "(inline-array sage-finalboss-particle)"], + [6, "v1", "(inline-array sage-finalboss-particle)"], + [10, "v1", "(inline-array sage-finalboss-particle)"] + ], + + "(trans fisher-done)": [ + [[41, 46], "v1", "dma-packet"] + ], + "placeholder-do-not-add-below": [] } diff --git a/decompiler/config/jak1_ntsc_black_label/var_names.jsonc b/decompiler/config/jak1_ntsc_black_label/var_names.jsonc index ed591b7a83..d596aec4f4 100644 --- a/decompiler/config/jak1_ntsc_black_label/var_names.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/var_names.jsonc @@ -3547,11 +3547,35 @@ } }, + "(trans fisher-done)": { + "vars": { + "v1-13": ["v1-13", "dma-packet"] + } + }, + "anim-tester-get-playing-item": { "vars": { "v0-0": ["v0-0", "anim-test-seq-item"] } }, + "light-eco-mother-default-event-handler": { + "vars": { + "v0-0": ["v0-0", "int"] + } + }, + + "(method 7 sage-finalboss)": { + "vars": { + "v1-0": ["v1-0", "(inline-array sage-finalboss-particle)"] + } + }, + + "(code robotboss-white-eco-movie)": { + "vars": { + "gp-1": ["gp-1", "handle"] + } + }, + "aaaaaaaaaaaaaaaaaaaaaaa": {} } diff --git a/decompiler/config/jak1_pal/anonymous_function_types.jsonc b/decompiler/config/jak1_pal/anonymous_function_types.jsonc index 7a3864cd3d..55ee7b498b 100644 --- a/decompiler/config/jak1_pal/anonymous_function_types.jsonc +++ b/decompiler/config/jak1_pal/anonymous_function_types.jsonc @@ -579,7 +579,7 @@ [3, "(function basic symbol)"], [2, "(function process symbol)"] ], - + "anim-tester": [ [11, "(function none :behavior anim-tester)"], [12, "(function none :behavior anim-tester)"], @@ -590,7 +590,7 @@ [1, "(function none :behavior camera-combiner)"], [2, "(function basic int basic event-message-block object :behavior camera-combiner)"] ], - + "title-obs": [ [0, "(function none)"] ], @@ -669,10 +669,10 @@ [2, "(function sparticle-launch-group :behavior oracle)"], [3, "(function none :behavior oracle)"] ], - + "time-of-day": [ - [10, "(function none)"], - [12, "(function sparticle-system sparticle-cpuinfo int none)"] + [10, "(function none :behavior time-of-day-proc)"], + [12, "(function sparticle-system sparticle-cpuinfo none)"] ], "basebutton": [ @@ -761,5 +761,22 @@ [29, "(function none)"] ], + "fisher-JUN": [ + [27, "(function none :behavior process)"], + [28, "(function none :behavior fisher)"], + [20, "(function none :behavior fisher-fish)"], + [1, "(function none :behavior target)"] + ], + "fisher-JUNGLE-L1": [ + [27, "(function none :behavior process)"], + [28, "(function none :behavior fisher)"], + [20, "(function none :behavior fisher-fish)"], + [1, "(function none :behavior target)"] + ], + + "robotboss-misc": [ + [5, "(function sparticle-launch-control :behavior finalbosscam)"] + ], + "placeholder-do-not-add-below": [] } diff --git a/decompiler/config/jak1_pal/hacks.jsonc b/decompiler/config/jak1_pal/hacks.jsonc index abdb8606ef..3193f29140 100644 --- a/decompiler/config/jak1_pal/hacks.jsonc +++ b/decompiler/config/jak1_pal/hacks.jsonc @@ -353,9 +353,6 @@ "(method 27 ropebridge)", // all unchecked and in level DGO code - "(anon-function 11 robotboss)", - "(anon-function 18 robotboss)", - "(anon-function 49 robotboss)", "(anon-function 21 plant-boss)", "(anon-function 10 ice-cube)", "(anon-function 15 ice-cube)", @@ -548,7 +545,15 @@ "particle-adgif", "sp-launch-particles-var", "sp-process-block-2d", - "sp-process-block-3d" + "sp-process-block-3d", + "draw-large-polygon", + "clip-polygon-against-positive-hyperplane", + "clip-polygon-against-negative-hyperplane", + "render-sky-quad", + "render-sky-tri", + "init-sky-regs", + "set-tex-offset", + "adgif-shader<-texture-with-update!" ] } diff --git a/decompiler/config/jak1_pal/label_types.jsonc b/decompiler/config/jak1_pal/label_types.jsonc index f10ef98827..a937e89fe0 100644 --- a/decompiler/config/jak1_pal/label_types.jsonc +++ b/decompiler/config/jak1_pal/label_types.jsonc @@ -803,6 +803,217 @@ ["L733", "uint64", true] ], + "sky": [ + ["L13", "vu-function"] + ], + + "sky-tng": [ + ["L82", "sky-work"], + // 576 bytes, 32 bytes each + ["L81", "(inline-array sky-vertex)", 12], + ["L80", "(inline-array sky-vertex)", 12], + ["L79", "(inline-array sky-vertex)", 72], + ["L78", "(pointer uint8)", 48], + ["L77", "vector"], + ["L76", "vector"] + ], + + "effect-control": [ + ["L300", "float", true], + ["L301", "float", true], + ["L302", "float", true], + ["L306", "float", true], + ["L307", "float", true], + ["L309", "float", true], + ["L310", "float", true], + ["L312", "float", true], + ["L314", "float", true] + ], + + "seagull": [ + ["L226", "(inline-array air-box)", 20] + ], + + "rolling-race-ring": [ + ["L94", "vector"], + ["L95", "vector"], + ["L96", "vector"], + ["L97", "vector"], + ["L98", "vector"], + ["L99", "vector"], + ["L100", "vector"] + ], + + "part-tester": [ + ["L32", "uint64", true] + ], + + "anim-tester": [ + ["L509", "(inline-array list-field)", 12], + ["L523", "vector"], + ["L524", "vector"], + ["L649", "(pointer float)", 1], + ["L650", "(pointer float)", 1], + ["L651", "(pointer float)", 1], + ["L652", "(pointer float)", 1], + ["L653", "(pointer float)", 1], + ["L654", "(pointer float)", 1], + ["L655", "(pointer float)", 1], + ["L656", "(pointer float)", 1], + ["L657", "uint64", true], + ["L658", "uint64", true], + ["L663", "uint64", true], + ["L664", "uint64", true], + ["L665", "uint64", true], + ["L666", "uint64", true], + ["L667", "uint64", true], + ["L668", "uint64", true], + ["L669", "uint64", true], + ["L670", "uint64", true] + ], + + "fisher-JUN": [ + ["L262", "vector"], + ["L463", "(array (inline-array fisher-params))"] + ], + "fisher-JUNGLE-L1": [ + ["L262", "vector"], + ["L463", "(array (inline-array fisher-params))"] + ], + + "robotboss-weapon": [ + ["L122", "attack-info"], + ["L127", "attack-info"], + ["L138", "attack-info"], + ["L144", "vector4w"], + ["L145", "vector"] + ], + + "robotboss-misc": [ + ["L99", "vector"] + ], + + "robotboss": [ + ["L646", "attack-info"], + ["L647", "attack-info"], + ["L651", "vector"], + ["L654", "vector"], + ["L655", "vector"], + ["L656", "vector"], + ["L657", "vector"], + ["L658", "vector"], + ["L659", "vector"], + ["L660", "vector"], + ["L661", "vector"], + ["L662", "vector"], + ["L678", "vector"], + ["L669", "vector"], + ["L701", "vector"], + ["L702", "vector"], + ["L703", "vector"], + ["L705", "vector"], + ["L642", "robotboss-dda"], + ["L643", "robotboss-dda"], + ["L644", "robotboss-dda"], + ["L645", "robotboss-dda"], + ["L632", "robotboss-dda"], + ["L713", "float", true], + ["L714", "float", true], + ["L715", "float", true], + ["L716", "float", true], + ["L717", "float", true], + ["L718", "float", true], + ["L719", "float", true], + ["L720", "float", true], + ["L721", "float", true], + ["L722", "float", true], + ["L723", "float", true], + ["L724", "float", true], + ["L725", "float", true], + ["L726", "float", true], + ["L727", "float", true], + ["L728", "float", true], + ["L729", "float", true], + ["L730", "float", true], + ["L731", "float", true], + ["L732", "float", true], + ["L733", "float", true], + ["L734", "float", true], + ["L735", "float", true], + ["L736", "float", true], + ["L737", "float", true], + ["L738", "float", true], + ["L739", "float", true], + ["L740", "float", true], + ["L741", "float", true], + ["L742", "float", true], + ["L743", "float", true], + ["L744", "float", true], + ["L745", "float", true], + ["L746", "float", true], + ["L747", "float", true], + ["L748", "float", true], + ["L749", "float", true], + ["L750", "float", true], + ["L751", "float", true], + ["L752", "float", true], + ["L753", "float", true], + ["L754", "float", true], + ["L755", "float", true], + ["L756", "float", true], + ["L757", "float", true], + ["L758", "float", true], + ["L759", "float", true], + ["L760", "float", true], + ["L761", "float", true], + ["L762", "float", true], + ["L763", "float", true], + ["L764", "float", true], + ["L765", "float", true], + ["L766", "float", true], + ["L767", "float", true], + ["L768", "(pointer float)", 1], + ["L769", "float", true], + ["L770", "float", true], + ["L771", "float", true], + ["L772", "float", true], + ["L773", "float", true], + ["L774", "float", true], + ["L775", "float", true], + ["L776", "float", true], + ["L777", "float", true], + ["L778", "float", true], + ["L779", "float", true], + ["L780", "float", true], + ["L781", "float", true], + ["L782", "float", true], + ["L783", "float", true], + ["L784", "float", true], + ["L785", "float", true], + ["L786", "float", true], + ["L787", "float", true], + ["L788", "float", true], + ["L789", "float", true], + ["L790", "float", true], + ["L791", "float", true], + ["L792", "float", true], + ["L793", "float", true], + ["L794", "float", true], + ["L795", "float", true], + ["L796", "float", true], + ["L797", "float", true], + ["L798", "float", true], + ["L799", "float", true], + ["L800", "float", true], + ["L801", "uint64", true], + ["L802", "uint64", true], + ["L803", "uint64", true], + ["L804", "uint64", true], + ["L814", "float", true], + ["L815", "uint64", true], + ["L816", "uint64", true] + ], + // please do not add things after this entry! git is dumb. "object-file-that-doesnt-actually-exist-and-i-just-put-this-here-to-prevent-merge-conflicts-with-this-file": [] } diff --git a/decompiler/config/jak1_pal/stack_structures.jsonc b/decompiler/config/jak1_pal/stack_structures.jsonc index 7c78a8432f..e4e01fa588 100644 --- a/decompiler/config/jak1_pal/stack_structures.jsonc +++ b/decompiler/config/jak1_pal/stack_structures.jsonc @@ -1201,7 +1201,8 @@ ], "update-time-of-day": [ - [16, "(array float)"] // TODO - broken! + [16, "(array float)"], // TODO - broken! + [48, "vector"] ], "check-drop-level-rain": [ @@ -1854,7 +1855,7 @@ "(method 11 wall-plat)": [ [16, "vector"] ], - + "(code plunger-lurker-plunge)": [[16, "event-message-block"]], "(event flying-lurker-fly)": [[16, "event-message-block"]], "(trans flying-lurker-fly)": [[16, "event-message-block"]], @@ -1881,7 +1882,7 @@ [144, "vector"], [160, "vector"] ], - + "(method 18 collide-cache)": [[16, "collide-cache-prim"]], "kill-current-level-hint": [[16, "event-message-block"]], @@ -1916,7 +1917,7 @@ "sparticle-60-to-50":[ [16, "quaternion"] - ], + ], "sp-orbiter":[ [16, "vector"], @@ -1952,9 +1953,7 @@ ], "(method 10 gui-query)": [ - [16, "font-context"], - [112, "font-context"], - [208, "font-context"] + [16, "font-context"] ], "(method 46 process-taskable)": [ @@ -2735,5 +2734,244 @@ [16, "event-message-block"] ], + "(method 10 effect-control)": [ + [16, "event-message-block"], + [96, "vector"], + [112, "vector"], + [128, "vector"], + [144, "vector"] + ], + + "(method 11 effect-control)": [ + [16, "vector"], + [32, "vector"] + ], + + "(method 12 effect-control)": [ + [16, "sound-spec"], + [96, "vector"] + ], + + "(code helix-button-startup)": [ + [16, "vector"] + ], + + "(method 43 green-eco-lurker)": [ + [16, "event-message-block"] + ], + + "(method 73 green-eco-lurker)": [ + [16, "event-message-block"] + ], + + "citb-sagecage-draw-bars": [ + [16, "vector"], + [32, "vector"], + [48, "vector"] + ], + + "(code sunken-pipegame-start-up)": [ + [16, "event-message-block"] + ], + + "(code race-ring-active)": [ + [16, "event-message-block"], + [96, "vector"] + ], + + "(method 11 race-ring)": [ + [16, "vector"], + [32, "vector"] + ], + + "init-sky-regs": [ + [16, "vector"] + ], + + "set-tex-offset": [ + [16, "vector"] + ], + + "sky-tng-setup-cloud-layer": [ + [16,["inline-array", "sky-vertex", 12]] + ], + + "fisher-fish-move": [[16, "vector"]], + "fisher-fish-water": [[16, "vector"]], + "(trans play-accept fisher)": [[16, "vector"]], + "(method 11 fisher)": [[16, "vector"]], + "(code fisher-fish-caught)": [[16, "event-message-block"]], + "(code fisher-fish-die)": [[16, "event-message-block"]], + "(exit fisher-done)": [[16, "event-message-block"]], + "(enter fisher-done)": [[16, "event-message-block"]], + "(event fisher-playing)": [[16, "event-message-block"]], + "(enter fisher-playing)": [[16, "event-message-block"]], + "(exit fisher-playing)": [[16, "event-message-block"]], + "(trans enter-playing fisher)": [[16, "event-message-block"]], + "(code target-fishing)": [ + [16, "event-message-block"], + [96, "vector"], + [112, "quaternion"], + [128, "quaternion"], + [144, "quaternion"] + ], + "(method 43 fisher)": [ + [16, "vector"], + [32, "vector"] + ], + "fisher-draw-display": [[16, "font-context"]], + + "(method 10 torus)": [ + [16, "vector"], + [32, "vector"] + ], + "(method 12 torus)": [[16, "matrix"]], + "redshot-trans": [[16, "matrix"]], + "(trans redshot-explode)": [ + [16, "vector"], + [32, "event-message-block"], + [112, "vector"] + ], + "(code darkecobomb-explode)": [[16, "event-message-block"]], + "(event yellowshot-idle)": [[16, "event-message-block"]], + "(trans yellowshot-idle)": [[16, "event-message-block"]], + "(trans darkecobomb-countdown)": [[16, "vector"]], + + "arcing-shot-draw": [ + [16, "vector"], + [32, "vector"] + ], + + "(method 9 torus)": [ + [16, "vector"], + [32, "vector"], + [48, "vector"], + [64, "matrix"], + [128, ["inline-array", "vector", 8]] + ], + + "(method 32 finalbosscam)": [[16, "event-message-block"]], + + "(code cam-robotboss)": [ + [16, "vector"], + [32, "vector"] + ], + + "ecoclaw-beam-particle-callback": [[16, "vector"]], + "robotboss-manipy-trans-hook": [[16, "vector"]], + "robotboss-redshot": [[16, "vector"]], + "robotboss-cut-cam": [[16, "vector"]], + + "robotboss-yellowshot": [ + [16, "vector"], + [32, "vector"], + [48, "event-message-block"] + ], + + "(trans robotboss-white-eco-movie)": [[16, "vector"]], + + "(code robotboss-red-wait)": [ + [16, "vector"], + [32, "redshot-launch-info"] + ], + + "(trans robotboss-yellow-wait)": [ + [16, "vector"], + [32, "event-message-block"], + [112, "vector"] + ], + + "robotboss-setup-for-hits": [ + [16, "sphere"], + [32, "event-message-block"] + ], + + "robotboss-position": [ + [16, "vector"], + [32, "matrix"], + [96, "event-message-block"], + [176, "vector"] + ], + + "robotboss-shooting-trans": [ + [16, "vector"], + [32, "event-message-block"] + ], + + "robotboss-darkecobomb": [ + [16, "vector"], + [32, "vector"] + ], + + "robotboss-redshot-fill-array": [ + [16, "vector"], + [32, "vector"] + ], + + "robotboss-blue-beam": [ + [16, "vector"], + [32, "vector"], + [48, "vector"], + [64, "collide-mesh-cache-tri"], + [160, "vector"], + [176, "event-message-block"] + ], + + "robotboss-bomb-handler": [[16, "event-message-block"]], + "robotboss-blue-done": [[16, "event-message-block"]], + "(exit robotboss-blue-wait)": [[16, "event-message-block"]], + "(enter robotboss-blue-wait)": [[16, "event-message-block"]], + "(exit robotboss-green-wait)": [[16, "event-message-block"]], + "(event robotboss-green-wait)": [[16, "event-message-block"]], + + "(trans robotboss-red-wait)": [ + [16, "event-message-block"], + [96, "vector"] + ], + + "(exit robotboss-red-wait)": [[16, "event-message-block"]], + "(exit robotboss-yellow-wait)": [[16, "event-message-block"]], + "(code robotboss-white-eco-movie)": [[16, "event-message-block"]], + "(event robotboss-yellow-dark-bomb-wait)": [[16, "event-message-block"]], + "(exit robotboss-yellow-dark-bomb-wait)": [[16, "event-message-block"]], + "(code robotboss-daxter-sacrifice-movie)": [[16, "event-message-block"]], + + "robotboss-greenshot": [ + [16, "vector"], + [32, "vector"] + ], + + "(trans robotboss-blue-wait)": [ + [16, "vector"], + [32, "event-message-block"], + [112, "vector"] + ], + + "(code robotboss-blue-wait)": [[16, "event-message-block"]], + + "(method 44 green-eco-lurker)": [[16, "event-message-block"]], + "(method 72 green-eco-lurker)": [[16, "event-message-block"]], + "(enter nav-enemy-die green-eco-lurker)": [[16, "event-message-block"]], + "(event spawn-minions)": [[16, "event-message-block"]], + "(method 51 green-eco-lurker)": [[16, "vector"]], + "(enter green-eco-lurker-appear)": [ + [16, "vector"], + [32, "vector"] + ], + "(code spawn-minions)": [ + [16, "vector"], + [32, "event-message-block"] + ], + + "check-drop-level-lighteco-big-pops": [[16, "vector"]], + "check-drop-level-lighteco-pops": [[16, "vector"]], + "(method 20 light-eco-child)": [[16, "vector"]], + "light-eco-child-default-event-handler": [[16, "event-message-block"]], + "(code light-eco-child-die)": [[16, "event-message-block"]], + "light-eco-mother-default-event-handler": [[16, "event-message-block"]], + "(trans light-eco-child-hit-ground)": [[16, "vector"]], + "(method 21 light-eco-mother)": [[16, "vector"]], + "(method 20 light-eco-mother)": [[16, "vector"]], + "placeholder-do-not-add-below!": [] } diff --git a/decompiler/config/jak1_pal/type_casts.jsonc b/decompiler/config/jak1_pal/type_casts.jsonc index 0a51f17bfa..d182444d8d 100644 --- a/decompiler/config/jak1_pal/type_casts.jsonc +++ b/decompiler/config/jak1_pal/type_casts.jsonc @@ -1335,6 +1335,7 @@ ], "(method 0 anim-test-seq-item)": [ + [7, "v0", "anim-test-seq-item"], [8, "v1", "anim-test-seq-item"], [10, "v0", "anim-test-seq-item"], [11, "v0", "anim-test-seq-item"], @@ -1444,14 +1445,17 @@ "anim-test-obj-list-handler": [ [25, "s5", "anim-test-obj"], [31, "s5", "anim-test-obj"], + [[50, 53], "v1", "dma-packet"], [110, "s5", "anim-test-obj"], [166, "s5", "anim-test-obj"], - [112, "v1", "anim-tester"] + [112, "v1", "anim-tester"], + [[202, 205], "v1", "dma-packet"] ], "anim-test-anim-list-handler": [ [2, "s5", "anim-test-obj"], [25, "s5", "anim-test-obj"], + [[44, 47], "v1", "dma-packet"], [65, "s5", "anim-test-obj"], [227, "s5", "anim-test-obj"], [90, "v1", "anim-test-obj"], @@ -1465,13 +1469,15 @@ [167, "v1", "anim-test-obj"], [169, "v1", "anim-test-obj"], [171, "v1", "anim-test-obj"], - [173, "v1", "anim-test-obj"] + [173, "v1", "anim-test-obj"], + [[263, 266], "v1", "dma-packet"] ], "anim-test-sequence-list-handler": [ [2, "s5", "anim-test-sequence"], [25, "s5", "anim-test-sequence"], [31, "s5", "anim-test-sequence"], + [[50, 53], "v1", "dma-packet"], [71, "s5", "anim-test-sequence"], [231, "s5", "anim-test-sequence"], [96, "v1", "anim-test-sequence"], @@ -1481,10 +1487,16 @@ [136, "v1", "anim-test-sequence"], [137, "v1", "anim-test-sequence"], [146, "v1", "anim-test-sequence"], - [151, "v1", "anim-test-sequence"] + [151, "v1", "anim-test-sequence"], + [[267, 270], "v1", "dma-packet"] ], "anim-test-edit-sequence-list-handler": [ + [[82, 85], "v1", "dma-packet"], + [[148, 151], "v1", "dma-packet"], + [[323, 326], "v1", "dma-packet"], + [[979, 982], "v1", "dma-packet"], + [[1028, 1031], "v1", "dma-packet"], [[122, 965], "s4", "anim-test-sequence"], [129, "v1", "glst-named-node"], [[128, 909], "gp", "anim-test-seq-item"], @@ -1499,26 +1511,37 @@ "anim-tester-interface": [ [[34, 48], "gp", "anim-test-obj"], + [[70, 73], "v1", "dma-packet"], + [[131, 134], "v1", "dma-packet"], + [[189, 192], "v1", "dma-packet"], + [[228, 231], "v1", "dma-packet"], [[95, 109], "gp", "anim-test-obj"], [[156, 160], "v1", "anim-test-obj"], [[162, 165], "v1", "anim-test-sequence"] ], "anim-tester-get-playing-item": [ - [7, "v0", "anim-test-seq-item"], + [4, "t9", "(function glst-list int anim-test-seq-item)"], + [20, "t9", "(function glst-list int anim-test-seq-item)"], [[5, 22], "s5", "anim-test-seq-item"], [21, "v0", "anim-test-seq-item"], - [25, "v0", "anim-test-seq-item"] + [25, "v0", "anim-test-seq-item"], + [5, "v0", "anim-test-seq-item"] ], "anim-tester-add-newobj": [ + ["_stack_", 128, "anim-test-obj"], [[2, 185], "s2", "anim-test-obj"], [[70, 193], "s5", "anim-test-obj"], [149, "v1", "anim-test-sequence"], [154, "v1", "anim-test-sequence"], [160, "v1", "anim-test-sequence"], [164, "a0", "art-joint-anim"], - [170, "a0", "art-joint-anim"] + [168, "v1", "anim-test-seq-item"], + [168, "v1", "anim-test-seq-item"], + [170, "a0", "art-joint-anim"], + [171, "v1", "anim-test-seq-item"], + [173, "v1", "anim-test-seq-item"] ], "anim-tester-start": [[20, "t9", "(function process function none)"]], @@ -2612,23 +2635,6 @@ [[15, 250], "s5", "symbol"] ], - "time-of-day-update": [ - [[0, 999], "s6", "time-of-day-proc"] - ], - - "(anon-function 10 time-of-day)": [ - [[0, 999], "s6", "time-of-day-proc"] - ], - - "init-time-of-day": [ - [[0, 999], "s6", "time-of-day-proc"], - [[51, 54], "t9", "(function object object object)"] - ], - - "start-time-of-day": [ - [[20, 23], "t9", "(function process function object)"] - ], - "cam-master-effect": [ [[0, 999], "s6", "camera-master"] ], @@ -3912,5 +3918,389 @@ [2, "v1", "(pointer process-drawable)"] ], + "update-time-of-day": [ + [46, "v0", "(array float)"] + ], + + "sky-make-light": [ + [[10, 23], "a0", "sky-sun-data"] + ], + + "make-sky-textures": [ + [[90, 94], "a0", "dma-packet"], + [[100, 103], "a0", "gs-gif-tag"], + [108, "a0", "(pointer gs-alpha)"], + [110, "a0", "(pointer gs-reg64)"], + [[121, 124], "v1", "dma-packet"] + ], + + "copy-cloud-texture": [ + [[2, 48], "s5", "(pointer uint128)"], + [[28, 32], "s4", "adgif-shader"] + ], + + "copy-sky-texture": [ + [[2, 48], "s5", "(pointer uint128)"], + [[28, 32], "s4", "adgif-shader"] + ], + + "render-sky-tng": [ + [[244, 262], "s2", "(inline-array sky-vertex)"], + [[34, 38], "a0", "dma-packet"], + [[44, 47], "a0", "gs-gif-tag"], + [52, "a0", "(pointer gs-zbuf)"], + [54, "a0", "(pointer gs-reg64)"], + [56, "a0", "(pointer gs-test)"], + [58, "a0", "(pointer gs-reg64)"], + [60, "a0", "(pointer gs-alpha)"], + [62, "a0", "(pointer gs-reg64)"], + [[74, 78], "a0", "dma-packet"], + [[84, 87], "a0", "gs-gif-tag"], + + [107, "s2", "(pointer gs-tex0)"], + [109, "s2", "(pointer gs-reg64)"], + [111, "s2", "(pointer gs-tex1)"], + [113, "s2", "(pointer gs-reg64)"], + [115, "s2", "(pointer gs-clamp)"], + [117, "s2", "(pointer gs-reg64)"], + [118, "s2", "(pointer uint64)"], + [120, "s2", "(pointer gs-reg64)"], + [[159, 166], "s3", "dma-packet"], + [[171, 175], "a0", "dma-packet"], + [[181, 184], "a0", "gs-gif-tag"], + + [189, "s2", "(pointer gs-alpha)"], + [191, "s2", "(pointer gs-reg64)"], + [209, "s2", "(pointer gs-tex0)"], + [211, "s2", "(pointer gs-reg64)"], + [213, "s2", "(pointer gs-tex1)"], + [215, "s2", "(pointer gs-reg64)"], + [216, "s2", "(pointer gs-clamp)"], + [218, "s2", "(pointer gs-reg64)"], + [219, "s2", "(pointer int64)"], + [221, "s2", "(pointer gs-reg64)"], + [[303, 310], "s3", "dma-packet"], + [[312, 316], "v1", "dma-packet"] + ], + + "render-sky-tri": [ + [5, "a0", "int"], + [[6, 50], "a0", "(inline-array sky-vertex)"], + [[25, 48], "a3", "(inline-array sky-vertex)"] + ], + + "render-sky-quad": [ + [[9, 32], "a0", "(inline-array sky-vertex)"], + [[33, 62], "a3", "(inline-array sky-vertex)"] + ], + + "(method 10 effect-control)": [ + [88, "v1", "collide-shape-moving"], + [143, "s3", "(pointer sparticle-launch-group)"], + [147, "s3", "sparticle-launch-group"], + [199, "s3", "sparticle-launch-group"], + [240, "s3", "basic"], + [286, "s3", "basic"], + [346, "s3", "basic"], + [367, "s3", "basic"], + [367, "s3", "basic"], + [[371, 451], "s3", "death-info"] + ], + + "(post water-vol-idle helix-dark-eco)": [ + [4, "t9", "(function none :behavior helix-dark-eco)"] + ], + + "(code helix-slide-door-close)": [ + [10, "v1", "art-joint-anim"] + ], + + "(code helix-button-startup)": [ + [39, "v1", "process-drawable"] + ], + + "(method 73 green-eco-lurker)": [ + [6, "a1", "touching-shapes-entry"] + ], + + "citb-sagecage-update-collision": [ + [2, "a0", "collide-shape-prim-group"] + ], + + "race-ring-set-particle-rotation-callback": [ + [1, "v1", "(pointer race-ring)"] + ], + + "race-ring-blue-set-particle-rotation-callback": [ + [1, "v1", "(pointer race-ring)"] + ], + + "(code race-ring-active)": [ + [242, "v1", "handle"], + [245, "v1", "handle"], + [253, "gp", "handle"], + [269, "s5", "handle"], + [272, "s5", "handle"] + ], + + "(trans race-ring-active)": [ + [26, "a0", "part-tracker"] + ], + + "(code anim-tester-process)": [ + [41, "v1", "anim-test-obj"], + [45, "v1", "anim-test-obj"], + [[40, 114], "s4", "anim-test-obj"], + [82, "v0", "anim-test-sequence"], + [119, "v0", "art-joint-anim"] + ], + + "display-list-control": [ + [[194, 197], "v1", "dma-packet"], + [[423, 426], "v1", "dma-packet"] + ], + + "anim-tester-disp-frame-num": [ + [[75, 78], "v1", "dma-packet"] + ], + + "fisher-fish-move": [ + [9, "v1", "fisher"], + [21, "v1", "fisher"] + ], + + "(code fisher-fish-fall)": [ + [5, "v1", "fisher"], + [60, "v1", "fisher"], + [79, "v1", "fisher"] + ], + + "(code fisher-fish-caught)": [ + [169, "v1", "fisher"] + ], + + "(code fisher-fish-die)": [ + [35, "v1", "fisher"], + [47, "v1", "fisher"], + [90, "v1", "fisher"], + [98, "v1", "fisher"], + [112, "v1", "fisher"], + [129, "v1", "fisher"], + [137, "v1", "fisher"], + [151, "v1", "fisher"], + [165, "v1", "fisher"], + [179, "v1", "fisher"], + [193, "v1", "fisher"], + [205, "v1", "fisher"], + [209, "v1", "fisher"], + [27, "v1", "float"], + [79, "v1", "float"] + ], + + "(method 38 fisher)": [ + [33, "t9", "(function fisher none)"] + ], + + "(enter fisher-done)": [ + [137, "f0", "float"], + [148, "f0", "float"], + [213, "f0", "float"] + ], + + "fisher-spawn-ambient": [ + [8, "v1", "float"] + ], + + "(method 43 fisher)": [ + [27, "v1", "float"], + [69, "v1", "float"] + ], + + "(trans play-accept fisher)": [ + [101, "v0", "state"] + ], + + "(trans idle fisher)": [ + [4, "v0", "state"] + ], + + "(code idle fisher)": [ + [132, "v1", "art-joint-anim"], + [35, "v1", "float"] + ], + + "(code target-fishing)": [ + [163, "v1", "fisher"], + [290, "v1", "art-joint-anim"] + ], + + "(method 11 torus)": [ + [[5, 22], "s4", "collide-shape-prim-group"] + ], + + "(method 12 torus)": [ + [11, "v1", "float"], + [51, "v1", "float"] + ], + + "(code darkecobomb-countdown)": [ + [25, "v1", "art-joint-anim"], + [75, "v1", "art-joint-anim"] + ], + + "(code darkecobomb-land)": [ + [36, "v1", "art-joint-anim"] + ], + + "(code darkecobomb-idle)": [ + [10, "v1", "art-joint-anim"], + [60, "v1", "art-joint-anim"] + ], + + "redshot-particle-callback": [ + [2, "v1", "(pointer redshot)"] + ], + + "(event cam-robotboss)": [ + [5, "v1", "vector"] + ], + + "ecoclaw-handler": [ + [73, "v1", "vector"] + ], + + "(event idle silodoor)": [ + [4, "v1", "float"] + ], + + "ecoclaw-beam-particle-callback": [ + [1, "a0", "(pointer projectile)"], + [3, "a0", "(pointer projectile)"] + ], + + "(method 32 finalbosscam)": [ + [156, "v1", "robotboss"] + ], + + "(trans ecoclaw-activate)": [ + [30, "a0", "part-tracker"] + ], + + "robotboss-position": [ + [109, "a0", "process-drawable"] + ], + + "robotboss-bomb-handler": [ + [6, "v1", "float"] + ], + + "robotboss-handler": [ + [6, "v1", "float"] + ], + + "(event robotboss-red-wait)": [ + [12, "v1", "float"], + [68, "v1", "float"] + ], + + "(event robotboss-yellow-wait)": [ + [12, "v1", "float"], + [68, "v1", "float"] + ], + + "(code robotboss-white-eco-movie)": [ + [189, "v1", "handle"], + [192, "v1", "handle"], + [208, "gp", "handle"], + [211, "gp", "handle"] + ], + + "(code robotboss-yellow-wait)": [ + [336, "v1", "float"], + [365, "v1", "float"], + [530, "v1", "art-joint-anim"] + ], + + "(code robotboss-red-wait)": [ + [153, "v1", "float"], + [287, "v1", "float"], + [339, "v1", "float"], + [500, "v1", "art-joint-anim"] + ], + + "robotboss-redshot": [ + [45, "v1", "float"], + [70, "v1", "float"] + ], + + "(event robotboss-green-wait)": [ + [39, "v1", "float"], + [95, "v1", "float"] + ], + + "(exit robotboss-yellow-wait)": [ + [50, "v1", "collide-shape-prim-group"], + [54, "v1", "collide-shape-prim-group"] + ], + + "(exit robotboss-green-wait)": [ + [50, "v1", "collide-shape-prim-group"], + [54, "v1", "collide-shape-prim-group"] + ], + + "(exit robotboss-red-wait)": [ + [50, "v1", "collide-shape-prim-group"], + [54, "v1", "collide-shape-prim-group"] + ], + + "(exit robotboss-blue-wait)": [ + [50, "v1", "collide-shape-prim-group"], + [54, "v1", "collide-shape-prim-group"] + ], + + "robotboss-redshot-fill-array": [ + [24, "v1", "float"], + [46, "v1", "float"], + [109, "v1", "float"], + [137, "v1", "float"], + [137, "v1", "float"] + ], + + "(trans robotboss-blue-wait)": [ + [254, "v1", "float"] + ], + + "(code robotboss-blue-wait)": [ + [14, "v1", "art-joint-anim"] + ], + + "(enter green-eco-lurker-appear)": [ + [12, "v1", "robotboss"], + [17, "v1", "robotboss"] + ], + + "(code green-eco-lurker-appear)": [ + [42, "v1", "art-joint-anim"], + [93, "v1", "art-joint-anim"] + ], + + "(code green-eco-lurker-appear-land)": [ + [74, "v1", "art-joint-anim"] + ], + + "(code nav-enemy-chase green-eco-lurker)": [ + [55, "v1", "art-joint-anim"] + ], + + "(code nav-enemy-patrol green-eco-lurker)": [ + [8, "t9", "(function none)"] + ], + + "(trans light-eco-child-hit-ground)": [ + [63, "v1", "light-eco-mother"], + [75, "a1", "light-eco-mother"], + [88, "a1", "light-eco-mother"] + ], + "placeholder-do-not-add-below": [] } diff --git a/decompiler/config/jak1_pal/var_names.jsonc b/decompiler/config/jak1_pal/var_names.jsonc index 1d20b598b4..2b098dfac2 100644 --- a/decompiler/config/jak1_pal/var_names.jsonc +++ b/decompiler/config/jak1_pal/var_names.jsonc @@ -3550,5 +3550,11 @@ } }, + "anim-tester-get-playing-item": { + "vars": { + "v0-0": ["v0-0", "anim-test-seq-item"] + } + }, + "aaaaaaaaaaaaaaaaaaaaaaa": {} } diff --git a/decompiler/util/DecompilerTypeSystem.cpp b/decompiler/util/DecompilerTypeSystem.cpp index 69c74d1dd5..b7b80b3afc 100644 --- a/decompiler/util/DecompilerTypeSystem.cpp +++ b/decompiler/util/DecompilerTypeSystem.cpp @@ -65,6 +65,10 @@ void DecompilerTypeSystem::parse_type_defs(const std::vector& file_ if (dtr.create_runtime_type) { add_symbol(dtr.type.base_type(), "type"); } + // declare the type's states globally + for (auto& state : dtr.type_info->get_states_declared_for_type()) { + add_symbol(state.name, state.type); + } } else if (car(o).as_symbol()->name == "declare-type") { auto* rest = &cdr(o); diff --git a/decompiler/util/data_decompile.cpp b/decompiler/util/data_decompile.cpp index 57e2eadce5..90ccb2fb85 100644 --- a/decompiler/util/data_decompile.cpp +++ b/decompiler/util/data_decompile.cpp @@ -327,16 +327,12 @@ goos::Object decomp_ref_to_inline_array_guess_size( int my_seg, int field_location, const TypeSystem& ts, - const Field& data_field, const std::vector>& all_words, 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()); - // verify that the field is the right type. - assert(data_field.type() == TypeSpec("inline-array", {array_elt_type})); - // verify the stride matches the type system auto elt_type_info = ts.lookup_type(array_elt_type); assert(stride == align(elt_type_info->get_size_in_memory(), @@ -425,12 +421,10 @@ goos::Object ocean_near_indices_decompile(const std::vector& words, int my_seg, int field_location, const TypeSystem& ts, - const Field& data_field, const std::vector>& all_words, const LinkedObjectFile* file) { - return decomp_ref_to_inline_array_guess_size(words, labels, my_seg, field_location, ts, - data_field, all_words, file, - TypeSpec("ocean-near-index"), 32); + return decomp_ref_to_inline_array_guess_size(words, labels, my_seg, field_location, ts, all_words, + file, TypeSpec("ocean-near-index"), 32); } goos::Object ocean_mid_masks_decompile(const std::vector& words, @@ -438,12 +432,10 @@ goos::Object ocean_mid_masks_decompile(const std::vector& words, int my_seg, int field_location, const TypeSystem& ts, - const Field& data_field, const std::vector>& all_words, const LinkedObjectFile* file) { - return decomp_ref_to_inline_array_guess_size(words, labels, my_seg, field_location, ts, - data_field, all_words, file, - TypeSpec("ocean-mid-mask"), 8); + return decomp_ref_to_inline_array_guess_size(words, labels, my_seg, field_location, ts, all_words, + file, TypeSpec("ocean-mid-mask"), 8); } goos::Object sp_field_init_spec_decompile(const std::vector& words, @@ -451,12 +443,10 @@ goos::Object sp_field_init_spec_decompile(const std::vector& words, int my_seg, int field_location, const TypeSystem& ts, - const Field& data_field, const std::vector>& all_words, const LinkedObjectFile* file) { - return decomp_ref_to_inline_array_guess_size(words, labels, my_seg, field_location, ts, - data_field, all_words, file, - TypeSpec("sp-field-init-spec"), 16); + return decomp_ref_to_inline_array_guess_size(words, labels, my_seg, field_location, ts, all_words, + file, TypeSpec("sp-field-init-spec"), 16); } goos::Object sp_launch_grp_launcher_decompile(const std::vector& words, @@ -464,12 +454,10 @@ goos::Object sp_launch_grp_launcher_decompile(const std::vector& wor int my_seg, int field_location, const TypeSystem& ts, - const Field& data_field, const std::vector>& all_words, const LinkedObjectFile* file) { - return decomp_ref_to_inline_array_guess_size(words, labels, my_seg, field_location, ts, - data_field, all_words, file, - TypeSpec("sparticle-group-item"), 32); + return decomp_ref_to_inline_array_guess_size(words, labels, my_seg, field_location, ts, all_words, + file, TypeSpec("sparticle-group-item"), 32); } } // namespace @@ -658,19 +646,19 @@ goos::Object decompile_structure(const TypeSpec& type, // first, get the label: field_defs_out.emplace_back( field.name(), ocean_near_indices_decompile(obj_words, labels, label.target_segment, - field_start, ts, field, words, file)); + field_start, ts, words, file)); } else if (field.name() == "data" && type.print() == "ocean-mid-masks") { field_defs_out.emplace_back( field.name(), ocean_mid_masks_decompile(obj_words, labels, label.target_segment, - field_start, ts, field, words, file)); + field_start, ts, words, file)); } else if (field.name() == "init-specs" && type.print() == "sparticle-launcher") { field_defs_out.emplace_back( field.name(), sp_field_init_spec_decompile(obj_words, labels, label.target_segment, - field_start, ts, field, words, file)); + field_start, ts, words, file)); } else if (field.name() == "launcher" && type.print() == "sparticle-launch-group") { field_defs_out.emplace_back(field.name(), sp_launch_grp_launcher_decompile( obj_words, labels, label.target_segment, - field_start, ts, field, words, file)); + field_start, ts, words, file)); } else { if (field.type().base_type() == "pointer") { if (obj_words.at(field_start / 4).kind != LinkedWord::SYM_PTR) { @@ -950,15 +938,18 @@ goos::Object decompile_value(const TypeSpec& type, } } else if (type == TypeSpec("seconds")) { assert(bytes.size() == 8); - u64 value; + s64 value; memcpy(&value, bytes.data(), 8); // only rewrite if exact. - u64 seconds = value / TICKS_PER_SECOND; - if (seconds * TICKS_PER_SECOND == value) { - return pretty_print::to_symbol(fmt::format("(seconds {})", seconds)); + s64 seconds_int = value / TICKS_PER_SECOND; + if (seconds_int * TICKS_PER_SECOND == value) { + return pretty_print::to_symbol(fmt::format("(seconds {})", seconds_int)); + } + double seconds = (double)value / TICKS_PER_SECOND; + if (seconds * TICKS_PER_SECOND == value) { + return pretty_print::build_list("seconds", pretty_print::float_representation(seconds)); } - return pretty_print::to_symbol(fmt::format("#x{:x}", value)); } else if (ts.tc(TypeSpec("uint64"), type)) { assert(bytes.size() == 8); @@ -1070,6 +1061,23 @@ goos::Object decompile_boxed_array(const DecompilerLabel& label, } } + return pretty_print::build_list(result); + } else if (content_type.base_type() == "inline-array") { + std::vector result = { + pretty_print::to_symbol("new"), pretty_print::to_symbol("'static"), + pretty_print::to_symbol("'boxed-array"), + pretty_print::to_symbol(fmt::format(":type {} :length {} :allocated-length {}", + content_type.print(), array_length, + array_allocated_length))}; + + for (int elt = 0; elt < array_length; elt++) { + auto& word = words.at(label.target_segment).at(first_elt_word_idx + elt); + auto segment = labels.at(word.label_id).target_segment; + result.push_back(decomp_ref_to_inline_array_guess_size( + words.at(segment), labels, segment, (first_elt_word_idx + elt) * 4, ts, words, file, + content_type.get_single_arg(), ts.get_deref_info(content_type).stride)); + } + return pretty_print::build_list(result); } else { // value array @@ -1088,7 +1096,8 @@ goos::Object decompile_boxed_array(const DecompilerLabel& label, for (int j = start; j < end; j++) { auto& word = words.at(label.target_segment).at(j / 4); if (word.kind != LinkedWord::PLAIN_DATA) { - throw std::runtime_error("Got bad word in kind in array of values"); + throw std::runtime_error( + fmt::format("Got bad word of kind {} in boxed array of values", word.kind)); } elt_bytes.push_back(word.get_byte(j % 4)); } diff --git a/goal_src/engine/camera/camera-h.gc b/goal_src/engine/camera/camera-h.gc index dd64a1cbb5..31c51922fa 100644 --- a/goal_src/engine/camera/camera-h.gc +++ b/goal_src/engine/camera/camera-h.gc @@ -447,3 +447,4 @@ (define-extern paused? (function symbol)) ;; TODO - for cam-start (define-extern cam-master-init (function none :behavior camera-master)) +(define-extern v-slrp3! (function vector vector vector vector float vector)) diff --git a/goal_src/engine/camera/camera.gc b/goal_src/engine/camera/camera.gc index 33086d64b0..6cd111524b 100644 --- a/goal_src/engine/camera/camera.gc +++ b/goal_src/engine/camera/camera.gc @@ -5,11 +5,10 @@ ;; name in dgo: camera ;; dgos: GAME, ENGINE -;; definition for symbol *cam-res-string*, type string +;; DECOMP BEGINS + (define *cam-res-string* (new 'global 'string 64 (the-as string #f))) -;; definition for function cam-slave-get-vector-with-offset -;; Used lq/sq (defun cam-slave-get-vector-with-offset ((arg0 entity-actor) (arg1 vector) (arg2 symbol)) @@ -57,7 +56,6 @@ ) ) -;; definition for function cam-slave-get-flags (defun cam-slave-get-flags ((arg0 entity) (arg1 symbol)) (let ((gp-0 (res-lump-value arg0 arg1 uint128)) (s3-0 (method-of-type res-lump get-property-value)) @@ -98,7 +96,6 @@ ) ) -;; definition for function cam-slave-get-float (defun cam-slave-get-float ((arg0 entity) (arg1 symbol) (arg2 float)) (let ((f30-0 (res-lump-float arg0 arg1 :default arg2)) (s4-0 (method-of-type res-lump get-property-value-float)) @@ -119,7 +116,6 @@ ) ) -;; definition for function cam-slave-get-fov (defun cam-slave-get-fov ((arg0 entity)) (let ((f30-0 (res-lump-float arg0 'fov)) (s5-0 (method-of-type res-lump get-property-value-float)) @@ -146,7 +142,6 @@ ) ) -;; definition for function cam-slave-get-intro-step (defun cam-slave-get-intro-step ((arg0 entity)) (let ((f30-0 (res-lump-float arg0 'intro-time)) (s5-0 (method-of-type res-lump get-property-value-float)) @@ -176,7 +171,6 @@ ) ) -;; definition for function cam-slave-get-interp-time (defun cam-slave-get-interp-time ((arg0 entity)) (let ((f30-0 (res-lump-float arg0 'interpTime)) (s5-0 (method-of-type res-lump get-property-value-float)) @@ -206,7 +200,6 @@ ) ) -;; definition for function cam-slave-get-rot (defun cam-slave-get-rot ((arg0 entity-actor) (arg1 quaternion)) (let ((s4-0 (method-of-type res-lump get-property-struct)) (s3-0 arg0) @@ -242,7 +235,6 @@ arg1 ) -;; definition for function cam-state-from-entity (defun cam-state-from-entity ((arg0 entity)) (let ((s5-0 (new 'stack 'curve))) (cond @@ -268,12 +260,10 @@ ) ) -;; definition for function parameter-ease-none (defun parameter-ease-none ((arg0 object)) arg0 ) -;; definition for function parameter-ease-clamp (defun parameter-ease-clamp ((arg0 float)) (cond ((>= arg0 1.0) @@ -286,7 +276,6 @@ arg0 ) -;; definition for function parameter-ease-lerp-clamp (defun parameter-ease-lerp-clamp ((arg0 float)) (cond ((>= arg0 1.0) @@ -307,7 +296,6 @@ ) ) -;; definition for function parameter-ease-sqrt-clamp (defun parameter-ease-sqrt-clamp ((arg0 float)) (cond ((>= arg0 1.0) @@ -325,19 +313,16 @@ ) ) -;; definition for function fourth-power (defun fourth-power ((arg0 float)) (let ((f0-2 (* arg0 arg0))) (* f0-2 f0-2) ) ) -;; definition for function third-power (defun third-power ((arg0 float)) (* arg0 arg0 arg0) ) -;; definition for function parameter-ease-sqr-clamp (defun parameter-ease-sqr-clamp ((arg0 float)) (cond ((>= arg0 1.0) @@ -364,7 +349,6 @@ ) ) -;; definition for function parameter-ease-sin-clamp (defun parameter-ease-sin-clamp ((arg0 float)) (cond ((>= arg0 1.0) @@ -379,8 +363,6 @@ ) ) -;; definition for method 9 of type cam-index -;; Used lq/sq (defmethod dummy-9 cam-index @@ -391,10 +373,9 @@ (-> obj flags) (the-as uint (cam-slave-get-flags arg1 (string->symbol *res-key-string*))) ) - (let - ((s3-2 (res-lump-data arg1 arg0 pointer)) - (s0-1 (method-of-type res-lump get-property-struct)) - ) + (let ((s3-2 (res-lump-data arg1 arg0 pointer)) + (s0-1 (method-of-type res-lump get-property-struct)) + ) (set! sv-32 format) (let ((a0-7 (clear *res-key-string*)) (a1-4 "~S~S") @@ -485,8 +466,6 @@ #t ) -;; definition for method 10 of type cam-index -;; Used lq/sq (defmethod dummy-10 cam-index ((obj cam-index) (arg0 vector)) (let ((s5-0 (new-stack-vector0))) 0.0 @@ -506,9 +485,6 @@ ) ) -;; definition for method 10 of type tracking-spline -;; INFO: Return type mismatch int vs none. -;; Used lq/sq (defmethod TODO-RENAME-10 tracking-spline ((obj tracking-spline) (arg0 vector)) (set! (-> obj point 0 position quad) (-> arg0 quad)) (set! (-> obj point 0 next) -134250495) @@ -533,8 +509,6 @@ (none) ) -;; definition for method 13 of type tracking-spline -;; INFO: Return type mismatch int vs none. (defmethod TODO-RENAME-13 tracking-spline ((obj tracking-spline) (arg0 int)) (let ((v1-3 (-> obj point arg0 next))) (cond @@ -578,8 +552,6 @@ (none) ) -;; definition for method 14 of type tracking-spline -;; INFO: Return type mismatch int vs none. (defmethod TODO-RENAME-14 tracking-spline ((obj tracking-spline) (arg0 vector)) (let ((v1-0 (-> obj used-point))) (set! (-> obj partial-point) (-> arg0 y)) @@ -630,8 +602,6 @@ (none) ) -;; definition for method 15 of type tracking-spline -;; INFO: Return type mismatch int vs none. (defmethod TODO-RENAME-15 tracking-spline ((obj tracking-spline)) (let ((s5-0 (new 'stack-no-clear 'tracking-spline-sampler))) (let ((a2-0 (new 'stack-no-clear 'tracking-point))) @@ -691,8 +661,6 @@ (none) ) -;; definition for method 16 of type tracking-spline -;; INFO: Return type mismatch int vs none. (defmethod TODO-RENAME-16 tracking-spline ((obj tracking-spline) (arg0 float)) (let ((s4-0 (new 'stack-no-clear 'tracking-spline-sampler))) (let ((a2-0 (new 'stack-no-clear 'vector))) @@ -748,8 +716,6 @@ (none) ) -;; definition for method 17 of type tracking-spline -;; Used lq/sq (defmethod TODO-RENAME-17 tracking-spline @@ -798,7 +764,6 @@ 0 ) -;; definition for method 18 of type tracking-spline (defmethod TODO-RENAME-18 tracking-spline @@ -864,7 +829,6 @@ (the-as vector #f) ) -;; definition for method 19 of type tracking-spline (defmethod TODO-RENAME-19 tracking-spline @@ -878,8 +842,6 @@ arg1 ) -;; definition for method 20 of type tracking-spline -;; INFO: Return type mismatch int vs none. (defmethod TODO-RENAME-20 tracking-spline @@ -989,8 +951,6 @@ (none) ) -;; definition for method 21 of type tracking-spline -;; Used lq/sq (defmethod TODO-RENAME-21 tracking-spline @@ -1052,8 +1012,6 @@ arg0 ) -;; definition for method 22 of type tracking-spline -;; INFO: Return type mismatch int vs none. (defmethod TODO-RENAME-22 tracking-spline ((obj tracking-spline) (arg0 float)) (when (< arg0 (-> obj summed-len)) (let ((s5-0 (new 'stack-no-clear 'tracking-spline-sampler))) @@ -1069,8 +1027,6 @@ (none) ) -;; definition for method 9 of type tracking-spline -;; INFO: Return type mismatch int vs none. (defmethod TODO-RENAME-9 tracking-spline ((obj tracking-spline)) (let ((v1-0 (-> obj used-point)) (s4-0 0) @@ -1123,8 +1079,6 @@ (none) ) -;; definition for function cam-slave-init-vars -;; Used lq/sq (defbehavior cam-slave-init-vars camera-slave () (cond (*camera* @@ -1212,13 +1166,11 @@ (none) ) -;; definition for function cam-slave-go -;; INFO: Return type mismatch int vs none. -(defun cam-slave-go ((arg0 camera-slave)) +(defun cam-slave-go ((arg0 state)) (with-pp (cam-slave-init-vars) (let ((t9-1 (the-as (function object) enter-state))) - (set! (-> pp next-state) (the-as state arg0)) + (set! (-> pp next-state) arg0) (t9-1) ) 0 @@ -1226,8 +1178,6 @@ ) ) -;; definition for function cam-slave-init -;; INFO: Return type mismatch int vs none. (defbehavior cam-slave-init camera-slave ((arg0 state) (arg1 entity)) (stack-size-set! (-> self main-thread) 512) (change-to-last-brother self) @@ -1252,7 +1202,7 @@ (set! (-> a1-3 param 0) (the-as uint self)) (let ((t9-4 send-event-function)) (set! a0-4 *camera*) - (t9-4 (the-as process a0-4) a1-3) + (t9-4 (the-as camera-master a0-4) a1-3) ) ) ) @@ -1273,13 +1223,10 @@ (none) ) -;; definition for function cam-standard-event-handler -;; INFO: Return type mismatch none vs object. ;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? ;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? ;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? ;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? -;; Used lq/sq (defbehavior cam-standard-event-handler camera-slave ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) @@ -1361,8 +1308,6 @@ ) ) -;; definition for function cam-curve-pos -;; Used lq/sq (defbehavior cam-curve-pos camera-slave ((arg0 vector) (arg1 vector) (arg2 curve) (arg3 symbol)) @@ -1456,8 +1401,6 @@ arg0 ) -;; definition for function cam-curve-setup -;; INFO: Return type mismatch int vs none. (defbehavior cam-curve-setup camera-slave ((arg0 vector)) (when (get-curve-data! @@ -1513,8 +1456,6 @@ (none) ) -;; definition for function cam-calc-follow! -;; Used lq/sq (defun cam-calc-follow! ((arg0 cam-rotation-tracker) (arg1 vector) (arg2 symbol)) (with-pp (cond @@ -1684,8 +1625,6 @@ ) ) -;; definition for function mat-remove-z-rot -;; Used lq/sq (defun mat-remove-z-rot ((arg0 matrix) (arg1 vector)) (let ((s4-0 (new-stack-vector0))) 0.0 @@ -1711,8 +1650,6 @@ arg0 ) -;; definition for function slave-matrix-blend-2 -;; Used lq/sq (defun slave-matrix-blend-2 ((arg0 matrix) (arg1 float) (arg2 vector) (arg3 matrix)) @@ -1775,8 +1712,6 @@ ) ) -;; definition for function vector-into-frustum-nosmooth! -;; Used lq/sq (defun vector-into-frustum-nosmooth! ((arg0 matrix) (arg1 vector) (arg2 float)) (local-vars (sv-112 (inline-array vector)) diff --git a/goal_src/engine/collide/collide-shape-h.gc b/goal_src/engine/collide/collide-shape-h.gc index c7648eeed1..040fee34d2 100644 --- a/goal_src/engine/collide/collide-shape-h.gc +++ b/goal_src/engine/collide/collide-shape-h.gc @@ -211,7 +211,8 @@ (deftype collide-shape-prim-group (collide-shape-prim) ((num-prims int32 :offset-assert 72) (allocated-prims int32 :offset-assert 76) - (prim uint32 1 :offset-assert 80) ; array of references + (prim collide-shape-prim 1 :offset-assert 80) + (prims collide-shape-prim :dynamic :score 20 :offset 80) ;; added ) :method-count-assert 30 :size-assert #x54 @@ -375,7 +376,7 @@ (set! (-> obj prim-core prim-type) 0) (while (nonzero? elt-count) (+! elt-count -1) - (set! (-> obj prim elt-count) (the uint #f)) + (set! (-> obj prim elt-count) (the collide-shape-prim #f)) (nop!) ) obj diff --git a/goal_src/engine/collide/collide-target-h.gc b/goal_src/engine/collide/collide-target-h.gc index 838cec7b81..26e2c5701e 100644 --- a/goal_src/engine/collide/collide-target-h.gc +++ b/goal_src/engine/collide/collide-target-h.gc @@ -121,10 +121,11 @@ (unknown-dword40 int64 :offset 2160) ;; from logic-target::target-compute-edge (unknown-dword41 int64 :offset 2168) ;; from logic-target::target-compute-edge (unknown-handle10 handle :offset 2176) ;; from logic-target::target-compute-pole - probably a swingpole - (unknown-int11 int32 :offset 2184) ;; from (anon-function 1 basebutton) + (unknown-symbol20 symbol :offset 2184) ;; from (anon-function 1 basebutton) (unknown-int20 int32 :offset 2188) ;; from logic-target::target-compute-pole (unknown-vector102 vector :inline :offset 2224) ;; from (anon-function 3 basebutton) (unknown-vector103 vector :inline :offset 2240) ;; from (anon-function 3 basebutton) + (unknown-smush00 smush-control :inline :offset 2288) ;; from (event target-fishing) (unknown-vector110 vector :inline :offset 2320) ;; from logic-target::flag-setup (unknown-vector111 vector :inline :offset 2336) ;; from logic-target::flag-setup (unknown-int30 int32 :offset 2384) ;; from target-util::target-danger-set! diff --git a/goal_src/engine/data/art-h.gc b/goal_src/engine/data/art-h.gc index 7efda16a5f..d1a95e5b12 100644 --- a/goal_src/engine/data/art-h.gc +++ b/goal_src/engine/data/art-h.gc @@ -292,7 +292,7 @@ (new (symbol type process art-joint-geo) _type_ 0) (dummy-9 (_type_) (pointer int8) 9) (dummy-10 (_type_ int) int 10) - (dummy-11 (_type_ pointer) int 11) + (dummy-11 (_type_ lod-set) none 11) ) ) diff --git a/goal_src/engine/debug/default-menu.gc b/goal_src/engine/debug/default-menu.gc index 9c4baedbb3..a561c4a82a 100644 --- a/goal_src/engine/debug/default-menu.gc +++ b/goal_src/engine/debug/default-menu.gc @@ -11,7 +11,7 @@ (define-extern *compact-actors* symbol) (define-extern find-instance-by-name (function string instance)) (define-extern *edit-instance* string) -(define-extern cam-free-floating state) +(define-extern cam-free-floating (state camera-slave)) (define-extern cam-standoff state) (define-extern cam-pov state) (define-extern cam-pov180 state) @@ -26,7 +26,7 @@ (define-extern cam-eye state) (define-extern cam-point-watch state) (define-extern cam-orbit state) -(define-extern cam-robotboss state) +(define-extern cam-robotboss (state camera-slave)) (define-extern cam-layout-stop (function none)) (define-extern cam-layout-start (function none)) (define-extern prototype-bucket-recalc-fields (function instance none)) diff --git a/goal_src/engine/entity/relocate.gc b/goal_src/engine/entity/relocate.gc index 501136956a..216fbe0896 100644 --- a/goal_src/engine/entity/relocate.gc +++ b/goal_src/engine/entity/relocate.gc @@ -219,7 +219,7 @@ ((obj collide-shape-prim-group) (arg0 int)) (&+! (-> obj cshape) arg0) (countdown (v1-2 (-> obj num-prims)) - (+! (-> obj prim v1-2) arg0) + (&+! (-> obj prims v1-2) arg0) ) obj ) diff --git a/goal_src/engine/game/game-h.gc b/goal_src/engine/game/game-h.gc index 053b47f56e..1e0c08239b 100644 --- a/goal_src/engine/game/game-h.gc +++ b/goal_src/engine/game/game-h.gc @@ -28,7 +28,7 @@ (water water-control :offset-assert 156) (sound ambient-sound :offset-assert 160) (state-flags uint32 :offset-assert 164) - (state-time seconds :offset-assert 168) + (state-time int64 :offset-assert 168) ) :heap-base #x40 :method-count-assert 20 diff --git a/goal_src/engine/game/generic-obs-h.gc b/goal_src/engine/game/generic-obs-h.gc index b435b4279d..3633265cb8 100644 --- a/goal_src/engine/game/generic-obs-h.gc +++ b/goal_src/engine/game/generic-obs-h.gc @@ -12,6 +12,8 @@ (define-extern ja-anim-done? (function symbol)) +(define-extern draw-eco-beam (function vector vector none)) + ;; decomp begins (deftype manipy (process-drawable) @@ -24,7 +26,7 @@ (cur-grab-handle handle :offset-assert 208) (cur-target-handle handle :offset-assert 216) (old-grab-pos vector :inline :offset-assert 224) - (joint joint 4 :offset-assert 240) + (joint process-drawable 4 :offset-assert 240) (new-post-hook function :offset-assert 256) (cur-post-hook function :offset-assert 260) (clone-copy-trans basic :offset-assert 264) @@ -133,10 +135,10 @@ (deftype gui-query (structure) ((x-position int32 :offset-assert 0) (y-position int32 :offset-assert 4) - (message symbol :offset-assert 8) ;; a guess, i suspect its an `event-message-block` + (message string :offset-assert 8) (decision symbol :offset-assert 12) (only-allow-cancel symbol :offset-assert 16) - (no-msg symbol :offset-assert 20) + (no-msg string :offset-assert 20) (message-space int32 :offset-assert 24) ) :pack-me @@ -144,8 +146,8 @@ :size-assert #x1c :flag-assert #xb0000001c (:methods - (init! (_type_ symbol int int int symbol symbol) none 9) - (dummy-10 (_type_) symbol 10) + (init! (_type_ string int int int symbol string) none 9) + (get-response (_type_) symbol 10) ) ) diff --git a/goal_src/engine/game/projectiles.gc b/goal_src/engine/game/projectiles.gc index 1128b14781..a58b53144d 100644 --- a/goal_src/engine/game/projectiles.gc +++ b/goal_src/engine/game/projectiles.gc @@ -5,7 +5,8 @@ ;; name in dgo: projectiles ;; dgos: GAME, ENGINE -;; definition of type search-info +;; DECOMP BEGINS + (deftype search-info (structure) ((point vector :inline :offset-assert 0) (best-point vector :inline :offset-assert 16) @@ -24,11 +25,9 @@ :flag-assert #x900000054 ) -;; definition for symbol *search-info*, type search-info + (define *search-info* (new 'global 'search-info)) -;; definition for function find-nearest-attackable -;; Used lq/sq (defun find-nearest-attackable ((arg0 vector) @@ -197,9 +196,6 @@ ) ) -;; definition for function projectile-collision-reaction -;; INFO: Return type mismatch int vs none. -;; Used lq/sq (defun projectile-collision-reaction ((arg0 collide-shape-moving) @@ -318,7 +314,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-group-id-table* 102) (new 'static 'sparticle-launch-group @@ -367,7 +362,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-id-table* 349) (new 'static 'sparticle-launcher @@ -386,7 +380,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-id-table* 350) (new 'static 'sparticle-launcher @@ -412,7 +405,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-id-table* 351) (new 'static 'sparticle-launcher @@ -438,7 +430,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-id-table* 352) (new 'static 'sparticle-launcher @@ -463,7 +454,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-id-table* 353) (new 'static 'sparticle-launcher @@ -497,7 +487,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-id-table* 354) (new 'static 'sparticle-launcher @@ -509,7 +498,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-group-id-table* 103) (new 'static 'sparticle-launch-group @@ -545,7 +533,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-id-table* 355) (new 'static 'sparticle-launcher @@ -570,7 +557,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-id-table* 357) (new 'static 'sparticle-launcher @@ -601,7 +587,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-id-table* 356) (new 'static 'sparticle-launcher @@ -631,7 +616,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-id-table* 360) (new 'static 'sparticle-launcher @@ -661,7 +645,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-id-table* 358) (new 'static 'sparticle-launcher @@ -684,7 +667,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-id-table* 361) (new 'static 'sparticle-launcher @@ -707,7 +689,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-id-table* 359) (new 'static 'sparticle-launcher @@ -738,7 +719,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-group-id-table* 104) (new 'static 'sparticle-launch-group @@ -758,7 +738,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-id-table* 2060) (new 'static 'sparticle-launcher @@ -789,7 +768,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-id-table* 2063) (new 'static 'sparticle-launcher @@ -804,7 +782,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-id-table* 2062) (new 'static 'sparticle-launcher @@ -828,7 +805,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-id-table* 2059) (new 'static 'sparticle-launcher @@ -850,7 +826,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-id-table* 2061) (new 'static 'sparticle-launcher @@ -883,7 +858,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-id-table* 2064) (new 'static 'sparticle-launcher @@ -898,8 +872,6 @@ ) ) -;; definition for method 24 of type projectile -;; INFO: Return type mismatch int vs none. (defmethod dummy-24 projectile ((obj projectile)) (spawn (-> obj part) @@ -909,14 +881,11 @@ (none) ) -;; definition for method 28 of type projectile -;; INFO: Return type mismatch int vs none. (defmethod dummy-28 projectile ((obj projectile)) 0 (none) ) -;; failed to figure out what this is: (defstate projectile-moving (projectile) :virtual #t :event @@ -996,10 +965,7 @@ ) :enter (behavior () - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) (none) ) :code @@ -1007,7 +973,7 @@ (let ((gp-0 #f)) (while (< - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + (- (-> *display* base-frame-counter) (-> self state-time)) (the-as int (-> self timeout)) ) (let ((s5-0 (the int (-> *display* time-ratio)))) @@ -1087,9 +1053,6 @@ ) ) -;; definition for function projectile-update-velocity-space-wars -;; INFO: Return type mismatch int vs none. -;; Used lq/sq (defun projectile-update-velocity-space-wars ((arg0 projectile)) (let ((s5-1 @@ -1151,7 +1114,6 @@ (none) ) -;; failed to figure out what this is: (defstate projectile-impact (projectile) :virtual #t :code @@ -1197,7 +1159,6 @@ ) ) -;; failed to figure out what this is: (defstate projectile-dissipate (projectile) :virtual #t :code @@ -1243,15 +1204,11 @@ ) ) -;; definition for method 27 of type projectile -;; INFO: Return type mismatch int vs none. (defmethod dummy-27 projectile ((obj projectile)) 0 (none) ) -;; definition for method 26 of type projectile -;; INFO: Return type mismatch int vs none. (defmethod dummy-26 projectile ((obj projectile)) (let ((s5-0 @@ -1279,15 +1236,12 @@ (none) ) -;; definition for method 25 of type projectile -;; INFO: Return type mismatch int vs none. (defmethod dummy-25 projectile ((obj projectile)) (go (method-of-object obj projectile-moving)) 0 (none) ) -;; failed to figure out what this is: (defstate projectile-die (projectile) :virtual #t :code @@ -1308,7 +1262,6 @@ ) ) -;; definition for method 10 of type projectile (defmethod deactivate projectile ((obj projectile)) (if (nonzero? (-> obj sound-id)) (sound-stop (-> obj sound-id)) @@ -1317,8 +1270,6 @@ (none) ) -;; definition for function projectile-init-by-other -;; Used lq/sq (defbehavior projectile-init-by-other projectile ((arg0 entity) (arg1 vector) (arg2 vector) (arg3 uint) (arg4 handle)) @@ -1378,9 +1329,6 @@ (none) ) -;; definition for method 27 of type projectile-yellow -;; INFO: Return type mismatch int vs none. -;; Used lq/sq (defmethod dummy-27 projectile-yellow ((obj projectile-yellow)) (cpad-set-buzz! (-> *cpad-list* cpads 0) 1 204 30) (set! (-> obj attack-mode) 'eco-yellow) @@ -1518,8 +1466,6 @@ (none) ) -;; definition for method 26 of type projectile-yellow -;; INFO: Return type mismatch uint vs none. (defmethod dummy-26 projectile-yellow ((obj projectile-yellow)) (let ((t9-0 (method-of-type projectile dummy-26))) (t9-0 obj) @@ -1528,8 +1474,6 @@ (none) ) -;; definition for method 24 of type projectile-yellow -;; INFO: Return type mismatch int vs none. (defmethod dummy-24 projectile-yellow ((obj projectile-yellow)) (with-pp (find-ground-and-draw-shadow @@ -1558,16 +1502,8 @@ ) (cond ((logtest? (-> obj options) 32) - (when - (>= - (- (-> *display* base-frame-counter) (the-as int (-> obj state-time))) - 15 - ) - (when - (< - (- (-> *display* base-frame-counter) (the-as int (-> obj state-time))) - 150 - ) + (when (>= (- (-> *display* base-frame-counter) (-> obj state-time)) 15) + (when (< (- (-> *display* base-frame-counter) (-> obj state-time)) 150) (set! (-> *part-id-table* 353 init-specs 16 initial-valuef) (the-as float 0) @@ -1618,9 +1554,6 @@ ) ) -;; definition for method 28 of type projectile-yellow -;; INFO: Return type mismatch int vs none. -;; Used lq/sq (defmethod dummy-28 projectile-yellow ((obj projectile-yellow)) (cond ((or @@ -1725,9 +1658,6 @@ (none) ) -;; definition for method 27 of type projectile-blue -;; INFO: Return type mismatch int vs none. -;; Used lq/sq (defmethod dummy-27 projectile-blue ((obj projectile-blue)) (cpad-set-buzz! (-> *cpad-list* cpads 0) 1 204 30) (sound-play-by-name @@ -1780,8 +1710,6 @@ (none) ) -;; definition for method 26 of type projectile-blue -;; INFO: Return type mismatch int vs none. (defmethod dummy-26 projectile-blue ((obj projectile-blue)) (let ((s5-0 @@ -1809,9 +1737,6 @@ (none) ) -;; definition for function spawn-projectile-blue -;; INFO: Return type mismatch int vs none. -;; Used lq/sq (defun spawn-projectile-blue ((arg0 target)) (local-vars (sv-48 entity)) (with-pp @@ -1875,8 +1800,6 @@ ) ) -;; definition for method 28 of type projectile-blue -;; INFO: Return type mismatch int vs none. (defmethod dummy-28 projectile-blue ((obj projectile-blue)) (let* ((s5-0 (handle->process (-> obj last-target))) (v1-4 @@ -1903,8 +1826,6 @@ (none) ) -;; definition for method 24 of type projectile-blue -;; INFO: Return type mismatch int vs none. (defmethod dummy-24 projectile-blue ((obj projectile-blue)) (if (rand-vu-percent? 0.75) (eco-blue-glow @@ -1915,7 +1836,6 @@ (none) ) -;; failed to figure out what this is: (defstate projectile-impact (projectile-blue) :virtual #t :code @@ -1925,7 +1845,6 @@ ) ) -;; failed to figure out what this is: (defstate projectile-dissipate (projectile-blue) :virtual #t :code diff --git a/goal_src/engine/game/task/process-taskable.gc b/goal_src/engine/game/task/process-taskable.gc index 52e23bc1ee..4cc8bdab7b 100644 --- a/goal_src/engine/game/task/process-taskable.gc +++ b/goal_src/engine/game/task/process-taskable.gc @@ -28,12 +28,12 @@ init! gui-query ((obj gui-query) - (arg0 symbol) + (arg0 string) (arg1 int) (arg2 int) (arg3 int) (arg4 symbol) - (arg5 symbol) + (arg5 string) ) (set! (-> obj x-position) arg1) (set! (-> obj y-position) arg2) @@ -47,7 +47,7 @@ ) ;; definition for method 10 of type gui-query -(defmethod dummy-10 gui-query ((obj gui-query)) +(defmethod get-response gui-query ((obj gui-query)) (kill-current-level-hint '() '(sidekick voicebox stinger) 'exit) (level-hint-surpress!) (hide-hud) @@ -77,7 +77,7 @@ (set! (-> v1-6 scale) 0.9) ) (set! (-> a1-2 flags) (font-flags shadow kerning left large)) - (print-game-text (the-as string (-> obj message)) a1-2 #f 128 22) + (print-game-text (-> obj message) a1-2 #f 128 22) ) ) (cond @@ -295,16 +295,20 @@ ) ;; definition for method 34 of type process-taskable -(defmethod TODO-RENAME-34 process-taskable ((obj process-taskable) (arg0 symbol)) - #f +;; INFO: Return type mismatch symbol vs spool-anim. +(defmethod + get-accept-anim + process-taskable + ((obj process-taskable) (arg0 symbol)) + (the-as spool-anim #f) ) ;; definition for method 35 of type process-taskable ;; INFO: Return type mismatch int vs none. -(defmethod dummy-35 process-taskable ((obj process-taskable)) - (let ((s5-0 (the-as basic (TODO-RENAME-34 obj #f)))) - (if (type-type? (-> (the-as symbol s5-0) type) spool-anim) - (spool-push *art-control* (-> (the-as spool-anim s5-0) name) 0 obj -99.0) +(defmethod push-accept-anim process-taskable ((obj process-taskable)) + (let ((s5-0 (get-accept-anim obj #f))) + (if (type-type? (-> s5-0 type) spool-anim) + (spool-push *art-control* (-> s5-0 name) 0 obj -99.0) ) ) 0 @@ -312,20 +316,20 @@ ) ;; definition for method 36 of type process-taskable -;; INFO: Return type mismatch symbol vs basic. +;; INFO: Return type mismatch symbol vs spool-anim. (defmethod - get-spool-anim-or-?? + get-reject-anim process-taskable ((obj process-taskable) (arg0 symbol)) - (the-as basic #f) + (the-as spool-anim #f) ) ;; definition for method 37 of type process-taskable ;; INFO: Return type mismatch int vs none. -(defmethod spool-push-anim process-taskable ((obj process-taskable)) - (let ((s5-0 (get-spool-anim-or-?? obj #f))) +(defmethod push-reject-anim process-taskable ((obj process-taskable)) + (let ((s5-0 (get-reject-anim obj #f))) (if (type-type? (-> s5-0 type) spool-anim) - (spool-push *art-control* (-> (the-as spool-anim s5-0) name) 0 obj -99.0) + (spool-push *art-control* (-> s5-0 name) 0 obj -99.0) ) ) 0 @@ -441,7 +445,7 @@ #t "ERROR: ~S got into give-cell with give-cell == #f task = ~S~%" (-> self name) - (game-task->string (the-as game-task (current-task (-> self tasks)))) + (game-task->string (current-task (-> self tasks))) ) ) ) @@ -461,10 +465,7 @@ :virtual #t :enter (behavior () - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) (none) ) :trans @@ -508,7 +509,7 @@ ;; definition for function process-taskable-play-anim-enter (defbehavior process-taskable-play-anim-enter process-taskable () - (init! (-> self query) #f 40 150 25 #t #f) + (init! (-> self query) (the-as string #f) 40 150 25 #t (the-as string #f)) (logior! (-> self skel status) 8) (let ((gp-0 (get-process *default-dead-pool* othercam #x4000))) (set! (-> self camera) (ppointer->handle (when gp-0 @@ -678,7 +679,7 @@ arg0 (the-as art-joint-anim (-> self blend-on-exit)) (lambda ((arg0 process-taskable)) - (= (dummy-10 (-> arg0 query)) 'no) + (= (get-response (-> arg0 query)) 'no) ) ) (ja-play-spooled-anim @@ -770,7 +771,7 @@ ) ) (until (ja-done? 0) - (when (and *debug-segment* (= (dummy-10 (-> self query)) 'no)) + (when (and *debug-segment* (= (get-response (-> self query)) 'no)) (let ((v1-106 (-> self skel root-channel 0))) (set! (-> v1-106 num-func) num-func-identity) (set! @@ -818,7 +819,7 @@ (behavior () (process-taskable-play-anim-code (the-as art-joint-anim (get-art-elem self)) - (TODO-RENAME-34 self #t) + (get-accept-anim self #t) ) (while (not (process-release? *target*)) (suspend) @@ -850,7 +851,7 @@ (behavior () (process-taskable-play-anim-code (the-as art-joint-anim (get-art-elem self)) - (get-spool-anim-or-?? self #t) + (get-reject-anim self #t) ) (go-virtual release) (none) @@ -866,12 +867,12 @@ (behavior () (init! (-> self query) - (the-as symbol (lookup-text! *common-text* (game-text-id confirm-play) #f)) + (lookup-text! *common-text* (game-text-id confirm-play) #f) 40 150 25 #f - (the-as symbol (lookup-text! *common-text* (game-text-id quit) #f)) + (lookup-text! *common-text* (game-text-id quit) #f) ) (none) ) @@ -880,8 +881,8 @@ :trans (behavior () (case (current-status (-> self tasks)) - ((4) - (case (dummy-10 (-> self query)) + (((task-status need-reminder-a)) + (case (get-response (-> self query)) (('yes) (go-virtual play-accept) ) @@ -889,10 +890,10 @@ (go-virtual play-reject) ) ) - (dummy-35 self) + (push-accept-anim self) ) (else - (let ((gp-0 (dummy-10 (-> self query)))) + (let ((gp-0 (get-response (-> self query)))) (cond ((and (= gp-0 'yes) (process-release? *target*)) (go-virtual enter-playing) @@ -904,7 +905,7 @@ ) ) ) - (spool-push-anim self) + (push-reject-anim self) (set! *camera-look-through-other* 2) ((-> self cur-trans-hook)) (none) @@ -1018,7 +1019,7 @@ ;; definition for function process-taskable-hide-enter ;; INFO: Return type mismatch none vs int. (defbehavior process-taskable-hide-enter process-taskable () - (set! (-> self state-time) (the-as seconds (-> *display* base-frame-counter))) + (set! (-> self state-time) (-> *display* base-frame-counter)) (let ((v1-3 (-> self draw shadow-ctrl))) (logior! (-> v1-3 settings flags) 32) ) @@ -1324,10 +1325,7 @@ ) :enter (behavior () - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) (process-taskable-clean-up-after-talking) (none) ) @@ -1415,7 +1413,12 @@ (first-any (-> self tasks) #t) (when (target-above-threshold? self) (case (current-status (-> self tasks)) - ((2 3 5 4 6) + (((task-status need-hint) + (task-status need-introduction) + (task-status need-reminder) + (task-status need-reminder-a) + (task-status need-reward-speech) + ) (kill-current-level-hint '() '(sidekick voicebox ambient) 'exit) (level-hint-surpress!) (hide-hud) @@ -1639,7 +1642,7 @@ ((not (should-display? obj)) (go (method-of-object obj hidden)) ) - ((= (current-status (-> obj tasks)) 7) + ((= (current-status (-> obj tasks)) (task-status need-resolution)) (go (method-of-object obj give-cell)) ) (else @@ -1666,10 +1669,7 @@ (arg2 float) (arg3 process-drawable) ) - (set! - (-> obj last-ambient-time) - (the-as uint (-> *display* game-frame-counter)) - ) + (set! (-> obj last-ambient-time) (-> *display* game-frame-counter)) 0 (none) ) @@ -1685,13 +1685,7 @@ (arg3 process-drawable) ) (when - (< - (- - (-> *display* game-frame-counter) - (the-as int (-> obj last-ambient-time)) - ) - arg1 - ) + (< (- (-> *display* game-frame-counter) (-> obj last-ambient-time)) arg1) (set! arg0 (the-as vector #f)) (goto cfg-6) ) @@ -1706,20 +1700,17 @@ ;; definition for method 11 of type ambient-control (defmethod - dummy-11 + play-ambient ambient-control ((obj ambient-control) (arg0 string) (arg1 symbol) (arg2 vector)) (when (and - (not (string= arg0 (the-as string (-> obj last-ambient)))) + (not (string= arg0 (-> obj last-ambient))) (or arg1 (can-hint-be-played? 1 (the-as entity #f) (the-as string #f))) (= (-> *level* loading-level) (-> *level* level-default)) (ambient-hint-spawn arg0 arg2 *entity-pool* 'ambient) ) - (set! - (-> obj last-ambient-time) - (the-as uint (-> *display* game-frame-counter)) - ) + (set! (-> obj last-ambient-time) (-> *display* game-frame-counter)) (set! (-> obj last-ambient) arg0) (return #t) ) diff --git a/goal_src/engine/game/task/task-control-h.gc b/goal_src/engine/game/task/task-control-h.gc index 425c217e13..8e58529368 100644 --- a/goal_src/engine/game/task/task-control-h.gc +++ b/goal_src/engine/game/task/task-control-h.gc @@ -78,8 +78,8 @@ :size-assert #xc :flag-assert #x130000000c (:methods - (current-task (_type_) int 9) - (current-status (_type_) int 10) + (current-task (_type_) game-task 9) + (current-status (_type_) task-status 10) (close-current! (_type_) none 11) (close-status! (_type_ task-status) int 12) (first-any (_type_ symbol) int 13) @@ -92,9 +92,9 @@ ) (deftype ambient-control (structure) - ((last-ambient-time uint64 :offset-assert 0) - (last-ambient basic :offset-assert 8) - (last-ambient-id uint32 :offset-assert 12) + ((last-ambient-time int64 :offset-assert 0) + (last-ambient string :offset-assert 8) + (last-ambient-id sound-id :offset-assert 12) ) :method-count-assert 12 :size-assert #x10 @@ -102,7 +102,7 @@ (:methods (dummy-9 (_type_ vector int float process-drawable) none 9) (TODO-RENAME-10 (_type_ vector int float process-drawable) vector 10) - (dummy-11 (_type_ string symbol vector) symbol 11) + (play-ambient (_type_ string symbol vector) symbol 11) ) ) @@ -153,10 +153,10 @@ (get-art-elem (_type_) art-element 31) (play-anim! (_type_ symbol) basic 32) ;; ret - spool-anim | .. (dummy-33 (_type_) none 33) - (TODO-RENAME-34 (_type_ symbol) symbol 34) - (dummy-35 (_type_) none 35) - (get-spool-anim-or-?? (_type_ symbol) basic 36) ;; ret - spool-anim | .. - (spool-push-anim (_type_) none 37) + (get-accept-anim (_type_ symbol) spool-anim 34) + (push-accept-anim (_type_) none 35) + (get-reject-anim (_type_ symbol) spool-anim 36) ;; ret - spool-anim | .. + (push-reject-anim (_type_) none 37) (dummy-38 (_type_) none 38) (should-display? (_type_) symbol 39) (dummy-40 (_type_ object skeleton-group int int vector int) none 40) diff --git a/goal_src/engine/game/task/task-control.gc b/goal_src/engine/game/task/task-control.gc index 48af99c5d9..cebd7b101e 100644 --- a/goal_src/engine/game/task/task-control.gc +++ b/goal_src/engine/game/task/task-control.gc @@ -114,7 +114,7 @@ ) (else ;; look up the current cstage's task - (the-as int (-> obj stage (-> obj current-stage) game-task)) + (-> obj stage (-> obj current-stage) game-task) ) ) ) @@ -131,7 +131,7 @@ (task-status invalid) ) (else - (the-as int (-> obj stage (-> obj current-stage) status)) + (-> obj stage (-> obj current-stage) status) ) ) diff --git a/goal_src/engine/sound/gsound-h.gc b/goal_src/engine/sound/gsound-h.gc index 9a66c20897..f5c325c481 100644 --- a/goal_src/engine/sound/gsound-h.gc +++ b/goal_src/engine/sound/gsound-h.gc @@ -366,8 +366,8 @@ ((mask uint16 :offset-assert 4) (num float :offset-assert 8) (group uint8 :offset-assert 12) - (sound-name-char uint8 16 :offset 16) - (sound-name sound-name :offset 16) + (sound-name sound-name :score 20 :offset 16) + (sound-name-char uint8 16 :offset 16) ;; moved to after sound-name (trans float 4 :offset-assert 32) ;; guess (volume int32 :offset-assert 48) (pitch-mod int32 :offset-assert 52) diff --git a/goal_src/engine/ui/text-h.gc b/goal_src/engine/ui/text-h.gc index cb316ae9dc..87f1a9fe16 100644 --- a/goal_src/engine/ui/text-h.gc +++ b/goal_src/engine/ui/text-h.gc @@ -16,6 +16,7 @@ (confirm #x103) (press-to-use #x105) (confirm-play #x106) + (play-again? #x107) (quit #x108) (pause #x109) (sfx-volume #x10a) @@ -155,13 +156,20 @@ (beach-seagulls-avalanche #x273) + (sidekick-hint-fish-powerup #x278) + + (yakow-owed-powercell #x297) + (misty-teetertotter-bonk-dax-tutorial #x2a4) (daxter-blue-eco-plat-tutorial #x2a7) - (firecanyon-collect-cells-text #x2b3) + (fish? #x2a9) - (yakow-owed-powercell #x297) + (firecanyon-collect-cells-text #x2b3) + (caught #x2b4) + (missed #x2b5) + (lose! #x2b6) (village2-gambler-money #x300) (village2-geologist-money #x301) @@ -272,7 +280,7 @@ (ogre-end #x600) (ogre-buzzer #x601) (ogre-boss #x603) - + (assistant-voicebox-intro-ogre-race #x605) (sidekick-speech-hint-ogre-race #x61c) diff --git a/goal_src/kernel-defs.gc b/goal_src/kernel-defs.gc index b8ce0181a9..4980833514 100644 --- a/goal_src/kernel-defs.gc +++ b/goal_src/kernel-defs.gc @@ -208,7 +208,7 @@ (define-extern scf-get-inactive-timeout (function int)) ;; dma-to-iop (define-extern kernel-shutdown (function none)) -;; aybabtu +(define-extern aybabtu (function int int)) ;; *stack-top* ;; *stack-base* ;; *stack-size* diff --git a/goal_src/levels/beach/bird-lady.gc b/goal_src/levels/beach/bird-lady.gc index 65a68df505..5f482e68ea 100644 --- a/goal_src/levels/beach/bird-lady.gc +++ b/goal_src/levels/beach/bird-lady.gc @@ -81,7 +81,7 @@ (defmethod play-anim! bird-lady ((obj bird-lady) (arg0 symbol)) (case (current-status (-> obj tasks)) - ((2 3) + (((task-status need-hint) (task-status need-introduction)) (if arg0 (close-status! (-> obj tasks) (task-status need-introduction)) ) @@ -176,7 +176,7 @@ ) ) ) - ((5) + (((task-status need-reminder)) (set! (-> obj skippable) #t) (cond ((zero? (get-reminder (-> obj tasks) 0)) @@ -209,7 +209,7 @@ 0 "ERROR: : ~S playing anim for task status ~S~%" (-> obj name) - (task-status->string (the-as task-status (current-status (-> obj tasks)))) + (task-status->string (current-status (-> obj tasks))) ) ) (-> obj draw art-group data 3) @@ -236,13 +236,13 @@ ) (cond ((< 0.66 f0-2) - (dummy-11 (-> obj ambient) "BIR-LO02" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "BIR-LO02" #f (-> obj root-override trans)) ) ((< 0.33 f0-2) - (dummy-11 (-> obj ambient) "BIR-LO03" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "BIR-LO03" #f (-> obj root-override trans)) ) (else - (dummy-11 (-> obj ambient) "BIR-am08" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "BIR-am08" #f (-> obj root-override trans)) ) ) ) diff --git a/goal_src/levels/beach/lurkercrab.gc b/goal_src/levels/beach/lurkercrab.gc index 11ba934ce3..e55383bcf4 100644 --- a/goal_src/levels/beach/lurkercrab.gc +++ b/goal_src/levels/beach/lurkercrab.gc @@ -6,8 +6,6 @@ ;; dgos: BEA, L1 (define-extern *lurkercrab-sg* skeleton-group) -(declare-type lurkercrab nav-enemy) -(define-extern lurkercrab-pushed (state lurkercrab)) ;; DECOMP BEGINS @@ -87,6 +85,9 @@ :method-count-assert 76 :size-assert #x194 :flag-assert #x4c01300194 + (:states + lurkercrab-pushed + ) ) @@ -1008,11 +1009,7 @@ nav-enemy-default-event-handler ) ) ) - (until - (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 300 - ) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 300) (let ((v1-7 (-> self skel root-channel 0))) (set! (-> v1-7 num-func) num-func-identity) (set! (-> v1-7 frame-num) 0.0) @@ -1109,11 +1106,11 @@ nav-enemy-default-event-handler :run-travel-speed (meters 5.0) :run-rotate-speed (degrees 999.99994) :run-acceleration (meters 12.0) - :run-turn-time #x1e + :run-turn-time (seconds 0.1) :walk-travel-speed (meters 2.0) :walk-rotate-speed (degrees 999.99994) :walk-acceleration (meters 12.0) - :walk-turn-time #x1e + :walk-turn-time (seconds 0.1) :attack-shove-back (meters 1.2) :attack-shove-up (meters 1.5) :shadow-size (meters 2.0) diff --git a/goal_src/levels/beach/mayor.gc b/goal_src/levels/beach/mayor.gc index 8f1151af44..856cf47cf5 100644 --- a/goal_src/levels/beach/mayor.gc +++ b/goal_src/levels/beach/mayor.gc @@ -99,7 +99,7 @@ (with-pp (set! (-> obj talk-message) (the-as uint 260)) (case (current-status (-> obj tasks)) - ((2 3) + (((task-status need-hint) (task-status need-introduction)) (when arg0 (close-specific-task! (game-task jungle-lurkerm) @@ -446,7 +446,7 @@ ) ) ) - ((4 5) + (((task-status need-reminder-a) (task-status need-reminder)) (set! (-> obj skippable) #t) (cond ((closed? @@ -1677,21 +1677,18 @@ ) ) ) - ((6) + (((task-status need-reward-speech)) (if (not arg0) (set! (-> obj will-talk) #t) ) (case (current-task (-> obj tasks)) - ((3) + (((game-task jungle-lurkerm)) (mayor-lurkerm-reward-speech obj arg0) ) (else (cond (arg0 - (set! - (-> obj cell-for-task) - (the-as game-task (current-task (-> obj tasks))) - ) + (set! (-> obj cell-for-task) (current-task (-> obj tasks))) (close-current! (-> obj tasks)) (let ((a1-15 (new 'stack-no-clear 'event-message-block))) (set! (-> a1-15 from) pp) @@ -2019,9 +2016,7 @@ 0 "ERROR: : ~S playing anim for task status ~S~%" (-> obj name) - (task-status->string - (the-as task-status (current-status (-> obj tasks))) - ) + (task-status->string (current-status (-> obj tasks))) ) ) (-> obj draw art-group data 3) @@ -2064,7 +2059,12 @@ (task-status need-reminder) ) ) - (dummy-11 (-> obj ambient) "CHI-LO01" #f (-> obj root-override trans)) + (play-ambient + (-> obj ambient) + "CHI-LO01" + #f + (-> obj root-override trans) + ) ) ) ((< 0.7777778 f0-2) @@ -2076,7 +2076,12 @@ (task-status need-reminder) ) ) - (dummy-11 (-> obj ambient) "CHI-LO02" #f (-> obj root-override trans)) + (play-ambient + (-> obj ambient) + "CHI-LO02" + #f + (-> obj root-override trans) + ) ) ) ((< 0.6666667 f0-2) @@ -2088,17 +2093,22 @@ (task-status need-reminder) ) ) - (dummy-11 (-> obj ambient) "CHI-AM07" #f (-> obj root-override trans)) + (play-ambient + (-> obj ambient) + "CHI-AM07" + #f + (-> obj root-override trans) + ) ) ) ((< 0.5555556 f0-2) - (dummy-11 (-> obj ambient) "CHI-AM06" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "CHI-AM06" #f (-> obj root-override trans)) ) ((< 0.44444445 f0-2) - (dummy-11 (-> obj ambient) "CHI-AM05" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "CHI-AM05" #f (-> obj root-override trans)) ) ((< 0.33333334 f0-2) - (dummy-11 (-> obj ambient) "CHI-AM04" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "CHI-AM04" #f (-> obj root-override trans)) ) ((< 0.22222222 f0-2) (if @@ -2109,7 +2119,12 @@ (task-status need-reminder) ) ) - (dummy-11 (-> obj ambient) "CHI-AM03" #f (-> obj root-override trans)) + (play-ambient + (-> obj ambient) + "CHI-AM03" + #f + (-> obj root-override trans) + ) ) ) ((< 0.11111111 f0-2) @@ -2121,7 +2136,12 @@ (task-status need-reminder) ) ) - (dummy-11 (-> obj ambient) "CHI-AM02" #f (-> obj root-override trans)) + (play-ambient + (-> obj ambient) + "CHI-AM02" + #f + (-> obj root-override trans) + ) ) ) (else @@ -2133,7 +2153,12 @@ (task-status need-reminder) ) ) - (dummy-11 (-> obj ambient) "CHI-AM01" #f (-> obj root-override trans)) + (play-ambient + (-> obj ambient) + "CHI-AM01" + #f + (-> obj root-override trans) + ) ) ) ) diff --git a/goal_src/levels/beach/sculptor.gc b/goal_src/levels/beach/sculptor.gc index 6ab1f944c6..7964e6eef8 100644 --- a/goal_src/levels/beach/sculptor.gc +++ b/goal_src/levels/beach/sculptor.gc @@ -185,7 +185,7 @@ (defmethod play-anim! sculptor ((obj sculptor) (arg0 symbol)) (with-pp (case (current-status (-> obj tasks)) - ((2 3) + (((task-status need-hint) (task-status need-introduction)) (if arg0 (close-status! (-> obj tasks) (task-status need-introduction)) ) @@ -264,7 +264,7 @@ ) ) ) - ((5) + (((task-status need-reminder)) (set! (-> obj skippable) #t) (new 'static 'spool-anim :name "sculptor-reminder-1" @@ -273,12 +273,9 @@ :command-list '() ) ) - ((6) + (((task-status need-reward-speech)) (when arg0 - (set! - (-> obj cell-for-task) - (the-as game-task (current-task (-> obj tasks))) - ) + (set! (-> obj cell-for-task) (current-task (-> obj tasks))) (close-current! (-> obj tasks)) (let ((s5-1 (get-process *default-dead-pool* manipy #x4000))) (set! (-> obj muse) (ppointer->handle (when s5-1 @@ -346,9 +343,7 @@ 0 "ERROR: : ~S playing anim for task status ~S~%" (-> obj name) - (task-status->string - (the-as task-status (current-status (-> obj tasks))) - ) + (task-status->string (current-status (-> obj tasks))) ) ) (-> obj draw art-group data 4) @@ -358,9 +353,11 @@ ) (defmethod get-art-elem sculptor ((obj sculptor)) - (let ((v1-1 (current-status (-> obj tasks)))) - (if (or (zero? v1-1) (= v1-1 7)) - (-> obj draw art-group data 11) + (case (current-status (-> obj tasks)) + (((task-status invalid) (task-status need-resolution)) + (-> obj draw art-group data 11) + ) + (else (-> obj draw art-group data 3) ) ) @@ -381,25 +378,25 @@ ) (cond ((< 0.85714287 f0-2) - (dummy-11 (-> obj ambient) "SCU-LO01" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "SCU-LO01" #f (-> obj root-override trans)) ) ((< 0.71428573 f0-2) - (dummy-11 (-> obj ambient) "SCU-AM05" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "SCU-AM05" #f (-> obj root-override trans)) ) ((< 0.5714286 f0-2) - (dummy-11 (-> obj ambient) "SCU-AM06" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "SCU-AM06" #f (-> obj root-override trans)) ) ((< 0.42857143 f0-2) - (dummy-11 (-> obj ambient) "SCU-AM03" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "SCU-AM03" #f (-> obj root-override trans)) ) ((< 0.2857143 f0-2) - (dummy-11 (-> obj ambient) "SCU-AM04" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "SCU-AM04" #f (-> obj root-override trans)) ) ((< 0.14285715 f0-2) - (dummy-11 (-> obj ambient) "SCU-AM01" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "SCU-AM01" #f (-> obj root-override trans)) ) (else - (dummy-11 (-> obj ambient) "SCU-AM02" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "SCU-AM02" #f (-> obj root-override trans)) ) ) ) @@ -436,58 +433,61 @@ (suspend) (ja-eval) ) - (let ((v1-16 (current-status (-> self tasks)))) - (when (or (zero? v1-16) (= v1-16 7)) - (let ((a0-12 (-> self skel root-channel 0))) - (set! - (-> a0-12 frame-group) - (the-as art-joint-anim (-> self draw art-group data 12)) - ) - (set! - (-> a0-12 param 0) - (the - float - (+ - (-> - (the-as art-joint-anim (-> self draw art-group data 12)) - data - 0 - length + (case (current-status (-> self tasks)) + (((task-status invalid) (task-status need-resolution)) + (let ((a0-12 (-> self skel root-channel 0))) + (set! + (-> a0-12 frame-group) + (the-as art-joint-anim (-> self draw art-group data 12)) + ) + (set! + (-> a0-12 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 12)) + data + 0 + length + ) + -1 ) - -1 ) ) - ) - (set! (-> a0-12 param 1) 1.0) - (set! (-> a0-12 frame-num) 0.0) - (joint-control-channel-group! - a0-12 - (the-as art-joint-anim (-> self draw art-group data 12)) - num-func-seek! - ) - ) - (until (ja-done? 0) - (suspend) - (let ((a0-13 (-> self skel root-channel 0))) - (set! - (-> a0-13 param 0) - (the float (+ (-> a0-13 frame-group data 0 length) -1)) - ) - (set! (-> a0-13 param 1) 1.0) - (joint-control-channel-group-eval! - a0-13 - (the-as art-joint-anim #f) + (set! (-> a0-12 param 1) 1.0) + (set! (-> a0-12 frame-num) 0.0) + (joint-control-channel-group! + a0-12 + (the-as art-joint-anim (-> self draw art-group data 12)) num-func-seek! ) ) + (until (ja-done? 0) + (suspend) + (let ((a0-13 (-> self skel root-channel 0))) + (set! + (-> a0-13 param 0) + (the float (+ (-> a0-13 frame-group data 0 length) -1)) + ) + (set! (-> a0-13 param 1) 1.0) + (joint-control-channel-group-eval! + a0-13 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (muse-to-idle (the-as muse self)) ) - (muse-to-idle (the-as muse self)) - ) ) (while #t (let ((v1-43 (current-status (-> self tasks)))) (cond - ((or (zero? v1-43) (= v1-43 7)) + ((or + (= v1-43 (task-status invalid)) + (= v1-43 (task-status need-resolution)) + ) (let ((a0-18 (-> self skel root-channel 0))) (set! (-> a0-18 frame-group) diff --git a/goal_src/levels/citadel/citb-drop-plat-CIT.gc b/goal_src/levels/citadel/citb-drop-plat-CIT.gc index 1ff73e7cce..70786c2015 100644 --- a/goal_src/levels/citadel/citb-drop-plat-CIT.gc +++ b/goal_src/levels/citadel/citb-drop-plat-CIT.gc @@ -21,10 +21,8 @@ (define-extern citb-drop-plat-active (state citb-drop-plat)) ;; unknown type (define-extern drop-plat-spawn (state drop-plat)) ;; unknown type -;;-*-Lisp-*- -(in-package goal) +;; DECOMP BEGINS -;; failed to figure out what this is: (let ((v1-0 (new 'static 'skeleton-group @@ -44,7 +42,6 @@ (set! *citb-drop-plat-sg* v1-0) ) -;; failed to figure out what this is: (let ((v1-1 (new 'static 'skeleton-group @@ -64,7 +61,6 @@ (set! *citb-drop-plat-red-sg* v1-1) ) -;; failed to figure out what this is: (let ((v1-2 (new 'static 'skeleton-group @@ -84,7 +80,6 @@ (set! *citb-drop-plat-green-sg* v1-2) ) -;; failed to figure out what this is: (let ((v1-3 (new 'static 'skeleton-group @@ -104,7 +99,6 @@ (set! *citb-drop-plat-blue-sg* v1-3) ) -;; failed to figure out what this is: (let ((v1-4 (new 'static 'skeleton-group @@ -124,7 +118,6 @@ (set! *citb-drop-plat-yellow-sg* v1-4) ) -;; definition of type drop-plat (deftype drop-plat (process-drawable) ((root-override collide-shape-moving :offset 112) (spin-axis vector :inline :offset-assert 176) @@ -145,7 +138,7 @@ ) ) -;; 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)) @@ -183,15 +176,12 @@ (behavior () (suspend) (dummy-47 (-> self root-override)) - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) (logior! (-> self mask) (process-mask actor-pause)) (while #t (if (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + (- (-> *display* base-frame-counter) (-> self state-time)) (the-as int (-> self duration)) ) (go drop-plat-drop) @@ -204,8 +194,6 @@ (the-as (function none :behavior drop-plat) ja-post) ) -;; definition for function drop-plat-set-fade -;; INFO: Return type mismatch int vs none. (defbehavior drop-plat-set-fade drop-plat () (let ((f0-1 @@ -230,7 +218,6 @@ (none) ) -;; 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)) @@ -249,14 +236,11 @@ ) (logior! (-> self draw status) 2) (ja-post) - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) (while #t (when (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + (- (-> *display* base-frame-counter) (-> self state-time)) (the-as int (-> self delay)) ) (let ((v1-14 (logand -3 (-> self draw status))) @@ -272,7 +256,6 @@ ) ) -;; 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)) @@ -286,10 +269,7 @@ :code (behavior ((arg0 draw-control)) (set! (-> self interp) 1.0) - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) (set! (-> self spin-angle) 0.0) (set! (-> self root-override trans y) @@ -314,10 +294,7 @@ 0.0033333334 (the float - (- - (-> *display* base-frame-counter) - (the-as int (-> self state-time)) - ) + (- (-> *display* base-frame-counter) (-> self state-time)) ) ) ) @@ -374,7 +351,6 @@ ) ) -;; failed to figure out what this is: (defstate drop-plat-drop (drop-plat) :code (behavior () @@ -383,10 +359,7 @@ (-> (the-as process-drawable (-> self parent 0)) root trans y) (-> self root-override trans y) ) - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) (sound-play-by-name (static-sound-name "bridge-piece-dn") (new-sound-id) @@ -397,18 +370,11 @@ (the-as vector #t) ) (let ((gp-1 (the int (* 300.0 (rand-vu-float-range 0.2 0.3))))) - (while - (< - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - gp-1 - ) + (while (< (- (-> *display* base-frame-counter) (-> self state-time)) gp-1) (set! (-> self interp) (/ - (the - float - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - ) + (the float (- (-> *display* base-frame-counter) (-> self state-time))) (the float gp-1) ) ) @@ -460,7 +426,6 @@ ) ) -;; failed to figure out what this is: (defstate drop-plat-die (drop-plat) :code (behavior () @@ -469,8 +434,6 @@ ) ) -;; definition for method 20 of type drop-plat -;; INFO: Return type mismatch int vs none. (defmethod TODO-RENAME-20 drop-plat ((obj drop-plat)) (let ((s5-0 @@ -508,8 +471,6 @@ (none) ) -;; definition for method 21 of type drop-plat -;; INFO: Return type mismatch int vs none. (defmethod dummy-21 drop-plat ((obj drop-plat)) (case (-> obj color) ((1) @@ -551,8 +512,6 @@ (none) ) -;; definition for function drop-plat-init-by-other -;; Used lq/sq (defbehavior drop-plat-init-by-other drop-plat ((arg0 vector) (arg1 uint) (arg2 uint) (arg3 int)) @@ -571,7 +530,6 @@ (none) ) -;; definition of type handle-inline-array (deftype handle-inline-array (inline-array-class) ((data handle :dynamic :offset-assert 16) ) @@ -580,10 +538,9 @@ :flag-assert #x900000010 ) -;; failed to figure out what this is: + (set! (-> handle-inline-array heap-base) (the-as uint 8)) -;; definition of type citb-drop-plat (deftype citb-drop-plat (process-drawable) ((x-count int32 :offset-assert 176) (z-count int32 :offset-assert 180) @@ -605,8 +562,7 @@ :flag-assert #x1400b00120 ) -;; definition for method 7 of type citb-drop-plat -;; INFO: Return type mismatch process-drawable vs citb-drop-plat. + (defmethod relocate citb-drop-plat ((obj citb-drop-plat) (arg0 int)) (if (nonzero? (-> obj child-array)) (&+! (-> obj child-array) arg0) @@ -614,9 +570,6 @@ (the-as citb-drop-plat ((method-of-type process-drawable relocate) obj arg0)) ) -;; definition for function citb-drop-plat-spawn-children -;; INFO: Return type mismatch int vs none. -;; Used lq/sq (defbehavior citb-drop-plat-spawn-children citb-drop-plat () (local-vars (s0-0 int) (sv-48 process) (sv-64 int)) (let ((gp-0 (new 'stack-no-clear 'vector))) @@ -739,7 +692,6 @@ (none) ) -;; definition for function citb-drop-plat-drop-all-children (defbehavior citb-drop-plat-drop-all-children citb-drop-plat () (dotimes (gp-0 (-> self child-count)) (let ((a1-0 (new 'stack-no-clear 'event-message-block))) @@ -753,8 +705,6 @@ #f ) -;; definition for function citb-drop-plat-drop-children -;; INFO: Return type mismatch int vs none. (defbehavior citb-drop-plat-drop-children citb-drop-plat ((arg0 int)) (cond ((= arg0 6) @@ -784,7 +734,6 @@ (none) ) -;; 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)) @@ -805,7 +754,6 @@ ) ) -;; 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)) @@ -838,16 +786,13 @@ ) :code (behavior () - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) (citb-drop-plat-spawn-children) (while #t (if (or (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + (- (-> *display* base-frame-counter) (-> self state-time)) (the-as int (+ (-> self duration) 600)) ) (or @@ -870,8 +815,6 @@ ) ) -;; definition for method 11 of type citb-drop-plat -;; Used lq/sq (defmethod copy-defaults! citb-drop-plat ((obj citb-drop-plat) (arg0 res-lump)) (set! (-> obj root) (new 'process 'trsqv)) (process-drawable-from-entity! obj arg0) @@ -920,3 +863,7 @@ (go citb-drop-plat-idle) (none) ) + + + + diff --git a/goal_src/levels/common/babak-with-cannon.gc b/goal_src/levels/common/babak-with-cannon.gc index 65b10f0f6d..0396e9620e 100644 --- a/goal_src/levels/common/babak-with-cannon.gc +++ b/goal_src/levels/common/babak-with-cannon.gc @@ -48,7 +48,7 @@ nav-enemy-default-event-handler ) ) (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + (- (-> *display* base-frame-counter) (-> self state-time)) (-> self state-timeout) ) ) @@ -128,18 +128,11 @@ nav-enemy-default-event-handler ) :trans (behavior () - (when - (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 30 - ) + (when (>= (- (-> *display* base-frame-counter) (-> self state-time)) 30) (let ((f30-0 (- (-> (target-pos 0) y) (-> self collide-info trans y)))) (if (and - (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 900 - ) + (>= (- (-> *display* base-frame-counter) (-> self state-time)) 900) (or (or (not *target*) @@ -159,7 +152,7 @@ nav-enemy-default-event-handler ) (when (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + (- (-> *display* base-frame-counter) (-> self state-time)) (-> self state-timeout) ) (if @@ -194,10 +187,7 @@ nav-enemy-default-event-handler ) :enter (behavior () - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) (set! (-> self nav destination-pos quad) (-> self entity extra trans quad)) (set! (-> self nav target-pos quad) (-> self entity extra trans quad)) (none) @@ -333,10 +323,7 @@ nav-enemy-default-event-handler ) :code (behavior () - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) (set! (-> self rotate-speed) (-> self nav-info run-rotate-speed)) (set! (-> self turn-time) (the-as int (-> self nav-info run-turn-time))) (set! (-> self nav-enemy-flags) (logand -25 (-> self nav-enemy-flags))) @@ -466,10 +453,7 @@ nav-enemy-default-event-handler ) :code (behavior () - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) (nav-enemy-initialize-jump (-> self entity extra trans)) (nav-enemy-neck-control-look-at) (set! (-> self nav-enemy-flags) (logand -25 (-> self nav-enemy-flags))) @@ -537,10 +521,7 @@ nav-enemy-default-event-handler ) :enter (behavior () - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) (let ((v1-2 (entity-actor-lookup (-> self entity) 'alt-actor 0))) (if v1-2 (logior! (-> v1-2 extra perm status) (entity-perm-status complete)) @@ -574,10 +555,7 @@ nav-enemy-default-event-handler ) ) ) - (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 900 - ) + (>= (- (-> *display* base-frame-counter) (-> self state-time)) 900) ) ) (go babak-with-cannon-jump-off-cannon) diff --git a/goal_src/levels/common/babak.gc b/goal_src/levels/common/babak.gc index 2eb9460587..7a0d56aeda 100644 --- a/goal_src/levels/common/babak.gc +++ b/goal_src/levels/common/babak.gc @@ -578,11 +578,11 @@ :run-travel-speed (meters 6.0) :run-rotate-speed (degrees 2880.0) :run-acceleration (meters 1.0) - :run-turn-time #x1e + :run-turn-time (seconds 0.1) :walk-travel-speed (meters 3.0) :walk-rotate-speed (degrees 720.0) :walk-acceleration (meters 1.0) - :walk-turn-time #x96 + :walk-turn-time (seconds 0.5) :attack-shove-back (meters 3.0) :attack-shove-up (meters 2.0) :shadow-size (meters 2.0) diff --git a/goal_src/levels/common/basebutton.gc b/goal_src/levels/common/basebutton.gc index 9369d66851..57c7d9232d 100644 --- a/goal_src/levels/common/basebutton.gc +++ b/goal_src/levels/common/basebutton.gc @@ -295,10 +295,7 @@ ) :code (behavior () - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) (cond ((= (-> self timeout) 0.0) (anim-loop) @@ -490,7 +487,6 @@ ) ;; definition for method 26 of type basebutton -;; INFO: Return type mismatch int vs none. (defmethod TODO-RENAME-26 basebutton ((obj basebutton)) (dummy-14 obj *generic-button-sg* '()) (logior! (-> obj skel status) 1) @@ -748,10 +744,7 @@ ) :code (behavior ((arg0 int) (arg1 level)) - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) (when (not arg1) (process-release? *target*) (go-virtual unknown-state00) @@ -844,10 +837,7 @@ ) :enter (behavior ((arg0 vector) (arg1 vector)) - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) (set! (-> self control status) (logand -8 (-> self control status))) (set! (-> self control unknown-surface00) *warp-jump-mods*) (set! (-> self control unknown-vector102 quad) (-> arg0 quad)) @@ -856,7 +846,7 @@ (-> self control unknown-vector102 y) (+ -4096.0 (-> self control unknown-vector102 y)) ) - (set! (-> self control unknown-int11) (the-as int #f)) + (set! (-> self control unknown-symbol20) #f) (vector-reset! (-> self control transv)) (logior! (-> self state-flags) 1024) (set! (-> self alt-cam-pos quad) (-> arg1 quad)) @@ -932,7 +922,8 @@ (- (sqrtf (* - (* 2.0 (-> self control dynam gravity-length)) + 2.0 + (-> self control dynam gravity-length) (vector-dot (-> self control dynam gravity-normal) (vector-! @@ -959,10 +950,7 @@ ) ) (dummy-48 (-> self control)) - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) (set! (-> self trans-hook) (lambda :behavior target () (let ((gp-0 (new-stack-vector0)) @@ -1021,7 +1009,7 @@ (and (or (< (vector-dot gp-2 (-> self control transv)) 0.0) - (-> self control unknown-int11) + (-> self control unknown-symbol20) ) (>= (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) @@ -1035,7 +1023,7 @@ ) (set! (-> self control transv x) (* 0.95 (-> self control transv x))) (set! (-> self control transv z) (* 0.95 (-> self control transv z))) - (when (not (-> self control unknown-int11)) + (when (not (-> self control unknown-symbol20)) (let ((a1-9 (new 'stack-no-clear 'event-message-block))) (set! (-> a1-9 from) self) (set! (-> a1-9 num-params) 2) @@ -1045,7 +1033,7 @@ (send-event-function self a1-9) ) (let ((v0-2 #t)) - (set! (-> self control unknown-int11) (the-as int v0-2)) + (set! (-> self control unknown-symbol20) v0-2) v0-2 ) ) diff --git a/goal_src/levels/common/baseplat.gc b/goal_src/levels/common/baseplat.gc index 99e7fcef00..129c61f980 100644 --- a/goal_src/levels/common/baseplat.gc +++ b/goal_src/levels/common/baseplat.gc @@ -21,7 +21,7 @@ (dummy-20 (_type_) none 20) (dummy-21 (_type_) none 21) (dummy-22 (_type_) none 22) - (TODO-RENAME-23 (_type_) skeleton-group 23) + (get-unlit-skel (_type_) skeleton-group 23) (dummy-24 (_type_) none 24) (TODO-RENAME-25 (_type_) sparticle-launch-group 25) (dummy-26 (_type_) none 26) @@ -331,10 +331,7 @@ eco-door-event-handler eco-door-event-handler :code (behavior () - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) (process-entity-status! self (entity-perm-status complete) #t) (dummy-48 (-> self root-override)) (let ((v1-6 (-> self skel root-channel 0))) diff --git a/goal_src/levels/common/battlecontroller.gc b/goal_src/levels/common/battlecontroller.gc index f393474bbd..1802de193c 100644 --- a/goal_src/levels/common/battlecontroller.gc +++ b/goal_src/levels/common/battlecontroller.gc @@ -511,11 +511,7 @@ battlecontroller-default-event-handler (battlecontroller-fill-all-spawners) ) (while #t - (when - (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 30 - ) + (when (>= (- (-> *display* base-frame-counter) (-> self state-time)) 30) (set! (-> self state-time) (-> *display* base-frame-counter)) (when (and @@ -606,11 +602,7 @@ battlecontroller-default-event-handler (set! (-> self state-time) (-> *display* base-frame-counter)) (battlecontroller-camera-on) (while #t - (when - (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 30 - ) + (when (>= (- (-> *display* base-frame-counter) (-> self state-time)) 30) (set! (-> self state-time) (-> *display* base-frame-counter)) (let ((gp-0 0)) (let ((v1-8 (-> self child))) diff --git a/goal_src/levels/common/nav-enemy-h.gc b/goal_src/levels/common/nav-enemy-h.gc index ebd12eca57..04a1bdfc38 100644 --- a/goal_src/levels/common/nav-enemy-h.gc +++ b/goal_src/levels/common/nav-enemy-h.gc @@ -133,11 +133,11 @@ (TODO-RENAME-45 (_type_ nav-enemy-info) none 45) (TODO-RENAME-46 (_type_ float) basic 46) (initialize-collision (_type_) none 47) - (TODO-RENAME-48 (_type_) none 48) ;; - Stubbed + (TODO-RENAME-48 (_type_) none 48) (TODO-RENAME-49 (_type_ nav-enemy-info) float 49) (TODO-RENAME-50 (_type_ vector) symbol 50) - (dummy-51 (_type_) float 51) - (dummy-52 (_type_ vector) vector 52) + (dummy-51 (_type_ vector) object 51) + (dummy-52 (_type_ vector) symbol 52) (dummy-53 (_type_) symbol 53) (dummy-54 (_type_) none 54) (dummy-55 (_type_) none 55) @@ -157,8 +157,8 @@ (dummy-69 (_type_) none 69) (dummy-70 (_type_) none 70) (dummy-71 (_type_) none 71) - (dummy-72 (_type_ process event-message-block) object 72) - (TODO-RENAME-73 (_type_ process) symbol 73) + (nav-enemy-touch-handler (_type_ process event-message-block) object 72) + (nav-enemy-attack-handler (_type_ process event-message-block) object 73) (nav-enemy-jump-blocked () _type_ :state 74) (dummy-75 (_type_) none 75) ) diff --git a/goal_src/levels/common/nav-enemy.gc b/goal_src/levels/common/nav-enemy.gc index 805ef69b65..8cf9548560 100644 --- a/goal_src/levels/common/nav-enemy.gc +++ b/goal_src/levels/common/nav-enemy.gc @@ -162,7 +162,7 @@ ) (defmethod - dummy-72 + nav-enemy-touch-handler nav-enemy ((obj nav-enemy) (arg0 process) (arg1 event-message-block)) (if @@ -182,7 +182,10 @@ ) ) -(defmethod TODO-RENAME-73 nav-enemy ((obj nav-enemy) (arg0 process)) +(defmethod + nav-enemy-attack-handler + nav-enemy + ((obj nav-enemy) (arg0 process) (arg1 event-message-block)) (with-pp (let ((v1-0 (new 'stack-no-clear 'event-message-block))) (set! (-> v1-0 from) pp) @@ -193,7 +196,7 @@ ) (logclear! (-> obj mask) (process-mask actor-pause attackable)) (go (method-of-object obj nav-enemy-die)) - 'die + (the-as object 'die) ) ) @@ -309,11 +312,11 @@ (case arg2 (('touch) (set! (-> self touch-time) (-> *display* base-frame-counter)) - (dummy-72 self arg0 arg3) + (nav-enemy-touch-handler self arg0 arg3) ) (('attack) (nav-enemy-set-hit-from-direction arg0) - (TODO-RENAME-73 self arg0) + (nav-enemy-attack-handler self arg0 arg3) ) ) ) @@ -754,38 +757,32 @@ nav-enemy-default-event-handler s5-0 ) ) - (s5-1 (the-as object #f)) + (s5-1 (the-as collide-shape-prim #f)) ) (when s4-0 (dotimes (s3-0 (-> (the-as collide-shape-prim-group s4-0) num-prims)) (let* ((s2-0 - (the-as - object - (-> - (the-as collide-shape-prim-group (+ (* s3-0 4) (the-as int s4-0))) - prim - 0 - ) + (-> + (the-as collide-shape-prim-group (+ (* s3-0 4) (the-as int s4-0))) + prims + 0 ) ) (v1-6 (if (and - (nonzero? (the-as uint s2-0)) - (type-type? - (-> (the-as collide-shape-prim s2-0) type) - collide-shape-prim-sphere - ) + (nonzero? s2-0) + (type-type? (-> s2-0 type) collide-shape-prim-sphere) ) - (the-as uint s2-0) + s2-0 ) ) ) - (when (the-as uint v1-6) + (when v1-6 (if (or - (not (the-as uint s5-1)) + (not s5-1) (< (-> (the-as collide-shape-prim-sphere v1-6) transform-index) (-> (the-as collide-shape-prim-group s5-1) transform-index) @@ -801,13 +798,13 @@ nav-enemy-default-event-handler ) ) ) - (set! s5-1 (the-as uint v1-6)) + (set! s5-1 v1-6) ) ) ) ) - (if (the-as collide-shape-prim s5-1) - (set! (-> (the-as collide-shape-prim s5-1) collide-with) arg0) + (if s5-1 + (set! (-> s5-1 collide-with) arg0) ) ) ) @@ -864,10 +861,7 @@ nav-enemy-default-event-handler (set! (-> v1-14 num-func) num-func-identity) (set! (-> v1-14 frame-num) 0.0) ) - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) (set! (-> self collide-info status) (logand -8 (-> self collide-info status)) @@ -1027,10 +1021,7 @@ nav-enemy-default-event-handler :enter (behavior () (nav-enemy-neck-control-inactive) - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) (if (-> self nav-info move-to-ground) (dummy-60 (-> self collide-info) @@ -1059,7 +1050,7 @@ nav-enemy-default-event-handler ) ) (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + (- (-> *display* base-frame-counter) (-> self state-time)) (-> self state-timeout) ) (nonzero? (-> self draw)) @@ -1113,10 +1104,7 @@ nav-enemy-default-event-handler ) :enter (behavior () - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) (set! (-> self nav flags) (the-as @@ -1140,14 +1128,10 @@ nav-enemy-default-event-handler ) :trans (behavior () - (when - (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 30 - ) + (when (>= (- (-> *display* base-frame-counter) (-> self state-time)) 30) (when (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + (- (-> *display* base-frame-counter) (-> self state-time)) (-> self state-timeout) ) (if (and (nonzero? (-> self draw)) (logtest? (-> self draw status) 8)) @@ -1561,17 +1545,14 @@ nav-enemy-default-event-handler ) :enter (behavior () - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) (none) ) :trans (behavior () (when (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + (- (-> *display* base-frame-counter) (-> self state-time)) (-> self reaction-time) ) (if @@ -1758,10 +1739,7 @@ nav-enemy-default-event-handler :enter (behavior () (nav-enemy-neck-control-look-at) - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) (set! (-> self free-time) (-> *display* base-frame-counter)) (logior! (-> self nav-enemy-flags) 4) (set! (-> self target-speed) (-> self nav-info run-travel-speed)) @@ -1791,7 +1769,7 @@ nav-enemy-default-event-handler ) (when (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + (- (-> *display* base-frame-counter) (-> self state-time)) (-> self reaction-time) ) (if @@ -1865,10 +1843,7 @@ nav-enemy-default-event-handler ) :enter (behavior () - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) (let* ((f30-0 (vector-vector-distance (-> self collide-info trans) (target-pos 0)) @@ -1896,11 +1871,7 @@ nav-enemy-default-event-handler ) :trans (behavior () - (when - (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 30 - ) + (when (>= (- (-> *display* base-frame-counter) (-> self state-time)) 30) (if (logtest? (-> *target* state-flags) 128) (go-virtual nav-enemy-patrol) ) @@ -1925,7 +1896,7 @@ nav-enemy-default-event-handler ) (logtest? (nav-control-flags bit17) (-> self nav flags)) (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + (- (-> *display* base-frame-counter) (-> self state-time)) (-> self state-timeout) ) ) @@ -1978,10 +1949,7 @@ nav-enemy-default-event-handler ) :enter (behavior () - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) (set! (-> self nav-enemy-flags) (logand -17 (-> self nav-enemy-flags))) (let ((f0-0 (vector-vector-distance (-> self collide-info trans) (target-pos 0))) @@ -2009,11 +1977,7 @@ nav-enemy-default-event-handler ) :trans (behavior () - (when - (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 30 - ) + (when (>= (- (-> *display* base-frame-counter) (-> self state-time)) 30) (if (logtest? (-> *target* state-flags) 128) (go-virtual nav-enemy-patrol) ) @@ -2063,7 +2027,7 @@ nav-enemy-default-event-handler (set! (-> self nav-enemy-flags) (logand -5 (-> self nav-enemy-flags))) (if (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + (- (-> *display* base-frame-counter) (-> self state-time)) (-> self state-timeout) ) (go-virtual nav-enemy-give-up) @@ -2106,21 +2070,14 @@ nav-enemy-default-event-handler ) :enter (behavior () - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) (nav-enemy-neck-control-inactive) (set! (-> self nav-enemy-flags) (logand -5 (-> self nav-enemy-flags))) (none) ) :trans (behavior () - (when - (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 30 - ) + (when (>= (- (-> *display* base-frame-counter) (-> self state-time)) 30) (if (TODO-RENAME-46 self (-> self nav-info notice-distance)) (go-virtual nav-enemy-chase) ) @@ -2643,10 +2600,7 @@ nav-enemy-default-event-handler nav-enemy-jump-event-handler :enter (behavior () - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) (if (and (-> self nav-info use-jump-blocked) @@ -2750,10 +2704,7 @@ nav-enemy-default-event-handler ) :enter (behavior () - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) (logclear! (-> self nav flags) (nav-control-flags bit19)) (let ((gp-0 (new 'stack-no-clear 'vector))) (set! (-> gp-0 quad) (-> self collide-info transv quad)) @@ -2769,10 +2720,7 @@ nav-enemy-default-event-handler (behavior () (if (or - (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 150 - ) + (>= (- (-> *display* base-frame-counter) (-> self state-time)) 150) (logtest? (nav-control-flags bit19) (-> self nav flags)) ) (go-virtual nav-enemy-chase) @@ -2798,19 +2746,12 @@ nav-enemy-default-event-handler ) :enter (behavior () - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) (none) ) :trans (behavior () - (if - (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 150 - ) + (if (>= (- (-> *display* base-frame-counter) (-> self state-time)) 150) (go (-> self jump-return-state)) ) (none) @@ -2879,10 +2820,7 @@ nav-enemy-default-event-handler ) :code (behavior () - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) (logior! (-> self nav-enemy-flags) 2048) (ja-channel-push! 1 30) (let ((f30-0 (nav-enemy-rnd-float-range 0.8 1.2))) @@ -2951,10 +2889,7 @@ nav-enemy-default-event-handler ) :code (behavior () - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) (nav-enemy-initialize-jump (-> self event-param-point)) (nav-enemy-neck-control-look-at) (logior! (-> self nav-enemy-flags) 16) diff --git a/goal_src/levels/common/plat-button.gc b/goal_src/levels/common/plat-button.gc index b32b9915f3..6500bd6e25 100644 --- a/goal_src/levels/common/plat-button.gc +++ b/goal_src/levels/common/plat-button.gc @@ -7,7 +7,8 @@ (define-extern *plat-button-sg* skeleton-group) -;; definition of type plat-button +;; DECOMP BEGINS + (deftype plat-button (process-drawable) ((root-override collide-shape-moving :offset 112) (go-back-if-lost-player? symbol :offset-assert 176) @@ -41,7 +42,7 @@ ) ) -;; failed to figure out what this is: + (let ((v1-1 (new 'static 'skeleton-group @@ -59,12 +60,10 @@ (set! *plat-button-sg* v1-1) ) -;; definition for method 30 of type plat-button (defmethod should-teleport? plat-button ((obj plat-button)) #f ) -;; definition for method 26 of type plat-button (defmethod can-activate? plat-button ((obj plat-button)) (or (= (-> obj path-pos) 0.0) @@ -72,7 +71,6 @@ ) ) -;; failed to figure out what this is: (defstate plat-button-idle (plat-button) :virtual #t :event @@ -206,7 +204,6 @@ ) ) -;; failed to figure out what this is: (defstate plat-button-teleport-to-other-end (plat-button) :virtual #t :code @@ -228,7 +225,6 @@ ) ) -;; failed to figure out what this is: (defstate plat-button-pressed (plat-button) :virtual #t :trans @@ -274,8 +270,6 @@ (the-as (function none :behavior plat-button) rider-post) ) -;; definition for function plat-button-camera-on -;; INFO: Return type mismatch int vs none. (defbehavior plat-button-camera-on plat-button () (let ((v1-1 (res-lump-struct (-> self entity) 'camera-name structure))) (when v1-1 @@ -292,8 +286,6 @@ (none) ) -;; definition for function plat-button-camera-off -;; INFO: Return type mismatch int vs none. (defbehavior plat-button-camera-off plat-button () (let ((a1-0 (new 'stack-no-clear 'event-message-block))) (set! (-> a1-0 from) self) @@ -305,26 +297,19 @@ (none) ) -;; 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)) - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) #f ) ) ) :enter (behavior () - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) (process-entity-status! self (entity-perm-status bit-3) #t) (plat-button-camera-on) (set-setting! *setting-control* self 'allow-look-around #f 0.0 0) @@ -351,10 +336,7 @@ (or (not *target*) (and - (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 1200 - ) + (>= (- (-> *display* base-frame-counter) (-> self state-time)) 1200) (not (and (logtest? (-> *target* control unknown-surface00 flags) 2048) @@ -427,26 +409,19 @@ (the-as (function none :behavior plat-button) rider-post) ) -;; 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)) - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) #f ) ) ) :enter (behavior () - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) (process-entity-status! self (entity-perm-status bit-3) #t) (plat-button-camera-on) (set-setting! *setting-control* self 'allow-look-around #f 0.0 0) @@ -473,10 +448,7 @@ (or (not *target*) (and - (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 1200 - ) + (>= (- (-> *display* base-frame-counter) (-> self state-time)) 1200) (not (and (logtest? (-> *target* control unknown-surface00 flags) 2048) @@ -549,7 +521,6 @@ (the-as (function none :behavior plat-button) rider-post) ) -;; failed to figure out what this is: (defstate plat-button-at-end (plat-button) :virtual #t :code @@ -587,7 +558,6 @@ ) ) -;; definition for method 28 of type plat-button (defmethod TODO-RENAME-28 plat-button ((obj plat-button)) (let ((s5-0 @@ -651,13 +621,10 @@ ) ) -;; definition for method 29 of type plat-button -;; INFO: Return type mismatch int vs symbol. (defmethod can-target-move? plat-button ((obj plat-button)) (the-as symbol 0) ) -;; definition for method 27 of type plat-button (defmethod TODO-RENAME-27 plat-button ((obj plat-button)) (ja-channel-set! 1) (cond @@ -701,24 +668,18 @@ (none) ) -;; definition for method 31 of type plat-button -;; INFO: Return type mismatch int vs none. (defmethod TODO-RENAME-31 plat-button ((obj plat-button)) (dummy-14 obj *plat-button-sg* '()) 0 (none) ) -;; definition for method 32 of type plat-button -;; INFO: Return type mismatch int vs none. (defmethod TODO-RENAME-32 plat-button ((obj plat-button)) (go (method-of-object obj plat-button-idle)) 0 (none) ) -;; definition for method 11 of type plat-button -;; Used lq/sq (defmethod copy-defaults! plat-button ((obj plat-button) (arg0 res-lump)) (set! (-> obj go-back-if-lost-player?) #f) (set! (-> obj grab-player?) #f) @@ -768,3 +729,7 @@ (TODO-RENAME-32 obj) (none) ) + + + + diff --git a/goal_src/levels/common/plat.gc b/goal_src/levels/common/plat.gc index 6c85bcc12f..a200fd03a3 100644 --- a/goal_src/levels/common/plat.gc +++ b/goal_src/levels/common/plat.gc @@ -9,7 +9,8 @@ (define-extern *plat-sunken-sg* skeleton-group) (define-extern *plat-sg* skeleton-group) -;; failed to figure out what this is: +;; DECOMP BEGINS + (set! (-> *part-group-id-table* 107) (new 'static 'sparticle-launch-group @@ -27,7 +28,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-id-table* 363) (new 'static 'sparticle-launcher @@ -51,7 +51,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-id-table* 364) (new 'static 'sparticle-launcher @@ -80,7 +79,6 @@ ) ) -;; definition of type plat (deftype plat (baseplat) ((path-pos float :offset-assert 228) (sync sync-info-eased :inline :offset-assert 232) @@ -91,27 +89,16 @@ :size-assert #x108 :flag-assert #x2100a00108 (:methods - (dummy-27 () none 27) + (get-lit-skel (_type_) skeleton-group 27) (dummy-28 () none 28) (wad () _type_ :state 29) - (plat-startup () _type_ :state 30) + (plat-startup (plat) _type_ :state 30) (plat-idle () _type_ :state 31) - (plat-path-active () _type_ :state 32) + (plat-path-active (plat) _type_ :state 32) ) ) -;; definition for method 3 of type plat -(defmethod inspect plat ((obj plat)) - (let ((t9-0 (method-of-type baseplat inspect))) - (t9-0 obj) - ) - (format #t "~T~Tpath-pos: ~f~%" (-> obj path-pos)) - (format #t "~T~Tsync: #~%" (-> obj sync)) - (format #t "~T~Tsound-id: ~D~%" (-> obj sound-id)) - obj - ) -;; failed to figure out what this is: (let ((v1-4 (new 'static 'skeleton-group @@ -134,7 +121,6 @@ (set! *plat-sg* v1-4) ) -;; failed to figure out what this is: (let ((v1-5 (new 'static 'skeleton-group @@ -152,7 +138,6 @@ (set! *plat-jungleb-sg* v1-5) ) -;; failed to figure out what this is: (let ((v1-6 (new 'static 'skeleton-group @@ -170,8 +155,7 @@ (set! *plat-sunken-sg* v1-6) ) -;; definition for method 23 of type plat -(defmethod TODO-RENAME-23 plat ((obj plat)) +(defmethod get-unlit-skel plat ((obj plat)) (cond ((= (-> (if (-> obj entity) (-> obj entity extra level) @@ -208,8 +192,6 @@ ) ) -;; definition for method 24 of type plat -;; INFO: Return type mismatch int vs none. (defmethod dummy-24 plat ((obj plat)) (let ((s5-0 @@ -247,15 +229,11 @@ (none) ) -;; definition for method 26 of type plat -;; INFO: Return type mismatch int vs none. (defmethod dummy-26 plat ((obj plat)) 0 (none) ) -;; definition for method 25 of type plat -;; INFO: Return type mismatch sparticle-launch-control vs sparticle-launch-group. (defmethod TODO-RENAME-25 plat ((obj plat)) (the-as sparticle-launch-group (when (!= (-> (if (-> obj entity) (-> obj entity extra level) @@ -280,17 +258,16 @@ ) ) -;; failed to figure out what this is: (defstate plat-startup (plat) :virtual #t :code - (behavior () + (behavior ((arg0 plat)) (cond ((logtest? (-> self path flags) (path-control-flag not-found)) (go-virtual plat-idle) ) ((> (-> self sync period) 0) - (go-virtual plat-path-active) + (go-virtual plat-path-active arg0) ) (else (go-virtual plat-idle) @@ -300,7 +277,6 @@ ) ) -;; failed to figure out what this is: (defstate plat-idle (plat) :virtual #t :event @@ -336,7 +312,6 @@ ) ) -;; failed to figure out what this is: (defstate plat-path-active (plat) :virtual #t :event @@ -381,17 +356,16 @@ (none) ) :code - (the-as (function none :behavior plat) anim-loop) + (the-as (function plat none :behavior plat) anim-loop) :post (the-as (function none :behavior plat) plat-post) ) -;; definition for method 11 of type plat (defmethod copy-defaults! plat ((obj plat) (arg0 res-lump)) (set! (-> obj mask) (logior (process-mask platform) (-> obj mask))) (dummy-24 obj) (process-drawable-from-entity! obj arg0) - (dummy-14 obj (TODO-RENAME-23 obj) '()) + (dummy-14 obj (get-unlit-skel obj) '()) (logior! (-> obj skel status) 1) (dummy-47 (-> obj root-override)) (dummy-21 obj) @@ -416,8 +390,10 @@ (cond ((logtest? (-> obj path flags) (path-control-flag not-found)) (set! (-> obj path-pos) 0.0) - (dummy-26 obj) - (go (method-of-object obj plat-startup)) + (let ((a0-14 obj)) + (dummy-26 a0-14) + (go (method-of-object obj plat-startup) a0-14) + ) ) ((> (-> obj sync period) 0) (set! (-> obj path-pos) (if (logtest? (-> obj fact options) 8) @@ -431,8 +407,10 @@ (-> obj path-pos) 'interp ) - (dummy-26 obj) - (go (method-of-object obj plat-startup)) + (let ((a0-18 obj)) + (dummy-26 a0-18) + (go (method-of-object obj plat-startup) a0-18) + ) ) (else (set! (-> obj path-pos) 0.0) @@ -442,8 +420,10 @@ (-> obj path-pos) 'interp ) - (dummy-26 obj) - (go (method-of-object obj plat-startup)) + (let ((a0-20 obj)) + (dummy-26 a0-20) + (go (method-of-object obj plat-startup) a0-20) + ) ) ) (none) diff --git a/goal_src/levels/common/sharkey.gc b/goal_src/levels/common/sharkey.gc index c3038415e3..1177287f1a 100644 --- a/goal_src/levels/common/sharkey.gc +++ b/goal_src/levels/common/sharkey.gc @@ -7,7 +7,8 @@ (define-extern *sharkey-sg* skeleton-group) -;; failed to figure out what this is: +;; DECOMP BEGINS + (set! (-> *part-group-id-table* 106) (new 'static 'sparticle-launch-group @@ -40,7 +41,6 @@ ) ) -;; definition of type sharkey (deftype sharkey (nav-enemy) ((dir vector :inline :offset-assert 400) (spawn-point vector :inline :offset-assert 416) @@ -64,7 +64,7 @@ :flag-assert #x4c018001ec ) -;; failed to figure out what this is: + (let ((v1-2 (new 'static 'skeleton-group @@ -81,8 +81,6 @@ (set! *sharkey-sg* v1-2) ) -;; definition for method 44 of type sharkey -;; INFO: Return type mismatch symbol vs object. (defmethod dummy-44 sharkey @@ -90,8 +88,6 @@ (the-as object #t) ) -;; definition for method 43 of type sharkey -;; INFO: Return type mismatch symbol vs object. (defmethod dummy-43 sharkey @@ -99,10 +95,8 @@ (the-as object #t) ) -;; failed to figure out what this is: 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))) @@ -123,8 +117,6 @@ nav-enemy-default-event-handler ) ) -;; definition for method 40 of type sharkey -;; INFO: Return type mismatch int vs none. (defmethod dummy-40 sharkey ((obj sharkey)) (dummy-11 (-> obj nav) (-> obj nav target-pos)) (let* @@ -153,8 +145,6 @@ nav-enemy-default-event-handler (none) ) -;; definition for method 37 of type sharkey -;; INFO: Return type mismatch int vs none. (defmethod TODO-RENAME-37 sharkey ((obj sharkey)) (let ((s5-0 (new 'stack-no-clear 'vector))) (when (< 8192.0 (vector-length (-> obj nav travel))) @@ -173,8 +163,6 @@ nav-enemy-default-event-handler (none) ) -;; definition for method 41 of type sharkey -;; INFO: Return type mismatch int vs none. (defmethod dummy-41 sharkey ((obj sharkey)) (let* ((f0-1 (- (-> obj target-speed) (-> obj momentum-speed))) (f1-3 @@ -207,9 +195,6 @@ nav-enemy-default-event-handler (none) ) -;; definition for method 39 of type sharkey -;; INFO: Return type mismatch int vs none. -;; Used lq/sq (defmethod common-post sharkey ((obj sharkey)) (let ((f30-0 (-> obj water height)) (s5-0 (new 'stack-no-clear 'vector)) @@ -238,7 +223,6 @@ nav-enemy-default-event-handler (none) ) -;; definition for function sharkey-notice-player? (defbehavior sharkey-notice-player? sharkey () (if *target* (and @@ -257,26 +241,18 @@ nav-enemy-default-event-handler ) ) -;; definition for function sharkey-get-player-position -;; INFO: Return type mismatch int vs none. -;; Used lq/sq (defun sharkey-get-player-position ((arg0 vector)) (set! (-> arg0 quad) (-> (target-pos 5) quad)) 0 (none) ) -;; definition for function sharkey-reset-position -;; INFO: Return type mismatch int vs none. -;; Used lq/sq (defbehavior sharkey-reset-position sharkey () (set! (-> self collide-info trans quad) (-> self entity extra trans quad)) 0 (none) ) -;; definition for function sharkey-move-to-attack-position -;; Used lq/sq (defbehavior sharkey-move-to-attack-position sharkey () (let ((s5-0 (new 'stack-no-clear 'vector)) (s3-0 (new 'stack-no-clear 'vector)) @@ -312,7 +288,6 @@ nav-enemy-default-event-handler ) ) -;; failed to figure out what this is: (defstate nav-enemy-idle (sharkey) :virtual #t :event @@ -322,10 +297,7 @@ nav-enemy-default-event-handler ) :enter (behavior () - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) (set! (-> self nav-enemy-flags) (logand -2 (-> self nav-enemy-flags))) (none) ) @@ -351,7 +323,7 @@ nav-enemy-default-event-handler ) ) (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + (- (-> *display* base-frame-counter) (-> self state-time)) (-> self state-timeout) ) ) @@ -435,7 +407,6 @@ nav-enemy-default-event-handler (the-as (function none :behavior sharkey) #f) ) -;; failed to figure out what this is: (defstate nav-enemy-patrol (sharkey) :virtual #t :event @@ -535,7 +506,6 @@ nav-enemy-default-event-handler ) ) -;; failed to figure out what this is: (defstate nav-enemy-notice (sharkey) :virtual #t :event @@ -555,7 +525,6 @@ nav-enemy-default-event-handler ) ) -;; definition for function sharkey-follow-trajectory (defbehavior sharkey-follow-trajectory sharkey ((arg0 float)) (let ((gp-0 (-> self jump-trajectory))) (eval-position! gp-0 arg0 (-> self collide-info trans)) @@ -565,7 +534,6 @@ nav-enemy-default-event-handler (forward-up->quaternion (-> self collide-info quat) (-> self dir) *up-vector*) ) -;; failed to figure out what this is: (defstate nav-enemy-attack (sharkey) :virtual #t :event @@ -588,10 +556,7 @@ nav-enemy-default-event-handler (the-as uint 1) (the-as vector #t) ) - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) (set! (-> gp-0 quad) (-> self collide-info trans quad)) (ja-channel-push! 1 30) (let ((s4-1 (-> self skel root-channel 0))) @@ -647,19 +612,12 @@ nav-enemy-default-event-handler (-> self collide-info transv) 8.0 ) - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) (let ((f30-0 -409600.0) (f28-0 (-> self collide-info transv y)) (f26-0 (-> self collide-info trans y)) ) - (until - (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 900 - ) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 900) (let ((gp-1 (-> self skel root-channel 0))) (set! (-> gp-1 frame-group) @@ -753,7 +711,6 @@ nav-enemy-default-event-handler ) ) -;; failed to figure out what this is: (defstate nav-enemy-chase (sharkey) :virtual #t :event @@ -953,7 +910,6 @@ nav-enemy-default-event-handler ) ) -;; failed to figure out what this is: (defstate nav-enemy-stop-chase (sharkey) :virtual #t :event @@ -1031,7 +987,6 @@ nav-enemy-default-event-handler ) ) -;; failed to figure out what this is: (defstate nav-enemy-stare (sharkey) :virtual #t :event @@ -1046,7 +1001,7 @@ nav-enemy-default-event-handler ) (if (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + (- (-> *display* base-frame-counter) (-> self state-time)) (-> self state-timeout) ) (go-virtual nav-enemy-patrol) @@ -1093,7 +1048,6 @@ nav-enemy-default-event-handler ) ) -;; failed to figure out what this is: (defstate nav-enemy-victory (sharkey) :virtual #t :event @@ -1163,7 +1117,6 @@ nav-enemy-default-event-handler ) ) -;; definition for symbol *sharkey-nav-enemy-info*, type nav-enemy-info (define *sharkey-nav-enemy-info* (new 'static 'nav-enemy-info @@ -1182,11 +1135,11 @@ nav-enemy-default-event-handler :run-travel-speed (meters 12.0) :run-rotate-speed (degrees 1999.9999) :run-acceleration (meters 6.0) - :run-turn-time #x96 + :run-turn-time (seconds 0.5) :walk-travel-speed (meters 6.0) :walk-rotate-speed (degrees 1999.9999) :walk-acceleration (meters 6.0) - :walk-turn-time #x96 + :walk-turn-time (seconds 0.5) :attack-shove-back (meters 1.0) :attack-shove-up (meters 0.5) :shadow-size (meters 2.0) @@ -1219,8 +1172,6 @@ nav-enemy-default-event-handler ) ) -;; definition for method 11 of type sharkey -;; Used lq/sq (defmethod copy-defaults! sharkey ((obj sharkey) (arg0 res-lump)) (set! (-> obj scale) (res-lump-float arg0 'scale :default 1.0)) (let @@ -1286,3 +1237,7 @@ nav-enemy-default-event-handler (go (method-of-object obj nav-enemy-idle)) (none) ) + + + + diff --git a/goal_src/levels/finalboss/final-door.gc b/goal_src/levels/finalboss/final-door.gc index 3c02f586a8..86b3793249 100644 --- a/goal_src/levels/finalboss/final-door.gc +++ b/goal_src/levels/finalboss/final-door.gc @@ -12,7 +12,8 @@ (define-extern *power-right-sg* skeleton-group) (define-extern *power-left-sg* skeleton-group) -;; definition of type fin-door +;; DECOMP BEGINS + (deftype fin-door (process-hidden) () :method-count-assert 15 @@ -20,7 +21,7 @@ :flag-assert #xf00000070 ) -;; definition of type final-door + (deftype final-door (process-drawable) () :heap-base #x40 @@ -34,7 +35,7 @@ ) ) -;; failed to figure out what this is: + (let ((v1-2 (new 'static 'skeleton-group @@ -52,7 +53,6 @@ (set! *power-left-sg* v1-2) ) -;; failed to figure out what this is: (let ((v1-3 (new 'static 'skeleton-group @@ -70,7 +70,6 @@ (set! *power-right-sg* v1-3) ) -;; failed to figure out what this is: (let ((v1-4 (new 'static 'skeleton-group @@ -87,7 +86,6 @@ (set! *powercellalt-sg* v1-4) ) -;; failed to figure out what this is: (defstate idle (final-door) :virtual #t :event @@ -110,7 +108,6 @@ ) ) -;; failed to figure out what this is: (defstate open (final-door) :virtual #t :event @@ -237,7 +234,6 @@ ) ) -;; definition for method 11 of type final-door (defmethod copy-defaults! final-door ((obj final-door) (arg0 res-lump)) (let ((s4-0 @@ -276,7 +272,6 @@ (none) ) -;; definition of type power-left (deftype power-left (final-door) () :heap-base #x40 @@ -285,7 +280,7 @@ :flag-assert #x17004000b0 ) -;; definition of type power-right + (deftype power-right (final-door) () :heap-base #x40 @@ -294,7 +289,7 @@ :flag-assert #x17004000b0 ) -;; failed to figure out what this is: + (defstate idle (power-left) :virtual #t :code @@ -368,23 +363,18 @@ ) ) -;; definition for method 21 of type power-left -;; INFO: Return type mismatch int vs none. (defmethod dummy-21 power-left ((obj power-left)) (dummy-14 obj *power-left-sg* '()) 0 (none) ) -;; definition for method 21 of type power-right -;; INFO: Return type mismatch int vs none. (defmethod dummy-21 power-right ((obj power-right)) (dummy-14 obj *power-right-sg* '()) 0 (none) ) -;; definition of type powercellalt (deftype powercellalt (process-drawable) ((root-override collide-shape-moving :offset 112) (jump-pos vector :inline :offset-assert 176) @@ -402,7 +392,7 @@ ) ) -;; failed to figure out what this is: + (defstate jump (powercellalt) :virtual #t :code @@ -425,21 +415,11 @@ 300.0 -2.2755556 ) - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) - (until - (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 300 - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 300) (let ((f0-2 - (the - float - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - ) + (the float (- (-> *display* base-frame-counter) (-> self state-time))) ) ) (eval-position! gp-1 f0-2 (-> self root-override trans)) @@ -502,7 +482,6 @@ ) ) -;; failed to figure out what this is: (defstate idle (powercellalt) :virtual #t :code @@ -524,8 +503,6 @@ ) ) -;; definition for function powercellalt-init-by-other -;; Used lq/sq (defbehavior powercellalt-init-by-other powercellalt ((arg0 entity) (arg1 vector) (arg2 vector) (arg3 int)) @@ -564,7 +541,6 @@ (none) ) -;; failed to figure out what this is: (defstate target-final-door (target) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) @@ -764,3 +740,7 @@ :post target-no-stick-post ) + + + + diff --git a/goal_src/levels/finalboss/green-eco-lurker.gc b/goal_src/levels/finalboss/green-eco-lurker.gc index 5a4eda7540..6674208e91 100644 --- a/goal_src/levels/finalboss/green-eco-lurker.gc +++ b/goal_src/levels/finalboss/green-eco-lurker.gc @@ -5,3 +5,1356 @@ ;; name in dgo: green-eco-lurker ;; dgos: FIN, L1 +(define-extern *green-eco-lurker-sg* skeleton-group) + +;; DECOMP BEGINS + +(deftype green-eco-lurker (nav-enemy) + ((played-sound? symbol :offset-assert 400) + (sound-delay int32 :offset-assert 404) + (appear-dest vector :inline :offset-assert 416) + (traj trajectory :inline :offset-assert 432) + ) + :heap-base #x170 + :method-count-assert 76 + :size-assert #x1d8 + :flag-assert #x4c017001d8 + (:states + green-eco-lurker-appear + green-eco-lurker-appear-land + ) + ) + + +(deftype green-eco-lurker-gen (process-drawable) + ((num-to-spawn int32 :offset-assert 176) + (num-spawned int32 :offset-assert 180) + (num-alive int32 :offset-assert 184) + ) + :heap-base #x50 + :method-count-assert 20 + :size-assert #xbc + :flag-assert #x14005000bc + ) + + +(let + ((v1-2 + (new 'static 'skeleton-group + :art-group-name "green-eco-lurker" + :bounds (new 'static 'vector :w 24371.2) + :version #x6 + :shadow 2 + ) + ) + ) + (set! (-> v1-2 jgeo) 0) + (set! (-> v1-2 janim) -1) + (set! (-> v1-2 mgeo 0) (the-as uint 1)) + (set! (-> v1-2 lod-dist 0) 4095996000.0) + (set! *green-eco-lurker-sg* v1-2) + ) + +(define + *green-eco-lurker-nav-enemy-info* + (new 'static 'nav-enemy-info + :idle-anim 3 + :walk-anim 4 + :turn-anim 10 + :notice-anim 9 + :run-anim 4 + :jump-anim 7 + :jump-land-anim 8 + :victory-anim 5 + :taunt-anim 5 + :die-anim 6 + :neck-joint 5 + :player-look-at-joint 5 + :run-travel-speed (meters 6.0) + :run-rotate-speed (degrees 360.0) + :run-acceleration (meters 1.0) + :run-turn-time (seconds 0.1) + :walk-travel-speed (meters 3.0) + :walk-rotate-speed (degrees 360.0) + :walk-acceleration (meters 1.0) + :walk-turn-time (seconds 0.5) + :attack-shove-back (meters 3.0) + :attack-shove-up (meters 2.0) + :shadow-size (meters 2.0) + :notice-nav-radius (meters 2.5) + :nav-nearest-y-threshold (meters 400.0) + :notice-distance (meters 300.0) + :stop-chase-distance (meters 400.0) + :frustration-distance (meters 8.0) + :frustration-time #x4b0 + :die-anim-hold-frame 24.0 + :jump-anim-start-frame 10.0 + :jump-land-anim-end-frame 10000000000.0 + :jump-height-min (meters 3.0) + :jump-height-factor 0.5 + :jump-start-anim-speed 1.0 + :shadow-max-y (meters 0.5) + :shadow-min-y (meters -1.75) + :shadow-locus-dist (meters 150.0) + :use-align #f + :draw-shadow #t + :move-to-ground #t + :hover-if-no-ground #f + :use-momentum #f + :use-flee #t + :use-proximity-notice #f + :use-jump-blocked #t + :use-jump-patrol #f + :gnd-collide-with #x805 + :debug-draw-neck #f + :debug-draw-jump #f + ) + ) + +(set! + (-> *part-group-id-table* 643) + (new 'static 'sparticle-launch-group + :length 37 + :duration #x258 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-green-eco-lurker-death" + :launcher + (new 'static 'inline-array sparticle-group-item 37 + (sp-item 2585 :fade-after (meters 100.0) :period 600 :length 5 :binding 2583) + (sp-item 2583 :flags (start-dead launch-asap) :binding 2584) + (sp-item 2584 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 2583 :flags (start-dead launch-asap) :binding 2584) + (sp-item 2584 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 2583 :flags (start-dead launch-asap) :binding 2584) + (sp-item 2584 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 2583 :flags (start-dead launch-asap) :binding 2584) + (sp-item 2584 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 2583 :flags (start-dead launch-asap) :binding 2584) + (sp-item 2584 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 2583 :flags (start-dead launch-asap) :binding 2584) + (sp-item 2584 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 2583 :flags (start-dead launch-asap) :binding 2584) + (sp-item 2584 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 2583 :flags (start-dead launch-asap) :binding 2584) + (sp-item 2584 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 2583 :flags (start-dead launch-asap) :binding 2584) + (sp-item 2584 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 2583 :flags (start-dead launch-asap) :binding 2584) + (sp-item 2584 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 2583 :flags (start-dead launch-asap) :binding 2584) + (sp-item 2584 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 2583 :flags (start-dead launch-asap) :binding 2584) + (sp-item 2584 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 2583 :flags (start-dead launch-asap) :binding 2584) + (sp-item 2584 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 2583 :flags (start-dead launch-asap) :binding 2584) + (sp-item 2584 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 2583 :flags (start-dead launch-asap) :binding 2584) + (sp-item 2584 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 2583 :flags (start-dead launch-asap) :binding 2584) + (sp-item 2584 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 2586 :period 600 :length 5) + (sp-item 2587 :fade-after (meters 80.0) :falloff-to (meters 80.0) :period 600 :length 40) + (sp-item 2588 :period 600 :length 20) + (sp-item 2589 :fade-after (meters 120.0) :falloff-to (meters 120.0) :period 600 :length 20) + ) + :bounds (new 'static 'sphere :w 49152.0) + ) + ) + +(set! + (-> *part-id-table* 2587) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 21 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 6.0) + (sp-rnd-flt spt-scale-x (meters 0.2) (meters 0.4) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 64.0 128.0 1.0) + (sp-rnd-flt spt-g 0.0 32.0 1.0) + (sp-rnd-flt spt-b 96.0 64.0 1.0) + (sp-rnd-flt spt-a 32.0 96.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.026666667) (meters 0.10666667) 1.0) + (sp-flt spt-scalevel-x (meters -0.0016666667)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-rnd-flt spt-accel-y -0.68266666 -0.68266666 1.0) + (sp-flt spt-friction 0.9) + (sp-int spt-timer 300) + (sp-cpuinfo-flags bit2 bit14) + (sp-int-plain-rnd spt-next-time 30 29 1) + (sp-launcher-by-id spt-next-launcher 2590) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 140.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 2.0) (meters 4.0) 1.0) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 2590) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 5 + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g 0.0) + (sp-flt spt-fade-b 0.0) + (sp-flt spt-fade-a -1.4222223) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 2589) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 14 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 3.0) + (sp-flt spt-scale-x (meters 0.2)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 180.0) 1.0) + (sp-flt spt-scale-y (meters 8.0)) + (sp-rnd-flt spt-r 64.0 192.0 1.0) + (sp-rnd-flt spt-g 0.0 32.0 1.0) + (sp-rnd-flt spt-b 128.0 64.0 1.0) + (sp-rnd-flt spt-a 32.0 64.0 1.0) + (sp-flt spt-scalevel-y (meters 0.42666668)) + (sp-flt spt-fade-a -1.6) + (sp-int spt-timer 60) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 2586) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 12 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 16.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 64.0 192.0 1.0) + (sp-rnd-flt spt-g 0.0 32.0 1.0) + (sp-rnd-flt spt-b 128.0 64.0 1.0) + (sp-flt spt-a 96.0) + (sp-flt spt-fade-a -1.7454545) + (sp-int spt-timer 54) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 2588) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 21 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-flt spt-num 4.0) + (sp-rnd-flt spt-scale-x (meters 2.5) (meters 1.5) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 0.0 96.0 1.0) + (sp-rnd-flt spt-g 0.0 32.0 1.0) + (sp-rnd-flt spt-b 64.0 32.0 1.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.053333335) (meters 0.013333334) 1.0) + (sp-flt spt-scalevel-x (meters 0.013333334)) + (sp-rnd-flt spt-rotvel-z (degrees -0.3) (degrees 0.6) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.42666668) + (sp-rnd-flt spt-accel-y 0.68266666 0.68266666 1.0) + (sp-flt spt-friction 0.8) + (sp-int spt-timer 510) + (sp-cpuinfo-flags bit2 bit14) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 110.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 2585) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 14 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 16.0) + (sp-flt spt-y (meters 1.0)) + (sp-flt spt-scale-x (meters 0.1)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-vel-y (meters 0.053333335) (meters 0.026666667) 1.0) + (sp-flt spt-accel-y -1.3653333) + (sp-flt spt-friction 0.94) + (sp-int spt-timer 240) + (sp-cpuinfo-flags bit3) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 140.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 2583) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 21 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-y (meters 0.0) (meters 16.0) 1.0) + (sp-rnd-flt spt-z 1228.8 1228.8 1.0) + (sp-rnd-flt spt-scale-x (meters 0.3) (meters 0.3) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 0.0 96.0 1.0) + (sp-rnd-flt spt-g 0.0 32.0 1.0) + (sp-rnd-flt spt-b 64.0 32.0 1.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-rnd-flt spt-omega 0.0 65536.0 1.0) + (sp-rnd-flt spt-vel-x (meters 0.026666667) (meters 0.10666667) 1.0) + (sp-flt spt-scalevel-x (meters -0.000909091)) + (sp-rnd-int-flt spt-rotvel-z (degrees -0.3) 1 109.22667) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-g -0.26666668) + (sp-flt spt-fade-a -0.19393939) + (sp-int-plain-rnd spt-timer 90 149 1) + (sp-cpuinfo-flags bit2 bit3 bit7) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 2584) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 17 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 0.3) (meters 0.1) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 32.0 96.0 1.0) + (sp-rnd-flt spt-g 0.0 32.0 1.0) + (sp-rnd-flt spt-b 64.0 32.0 1.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-flt spt-scalevel-x (meters -0.0006190476)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.01904762) + (sp-rnd-flt spt-accel-y -0.40960002 -0.6144 1.0) + (sp-int-plain-rnd spt-timer 30 299 1) + (sp-cpuinfo-flags bit2 bit3) + (sp-int spt-next-time 240) + (sp-launcher-by-id spt-next-launcher 198) + (sp-end) + ) + ) + ) + +(defmethod + dummy-43 + green-eco-lurker + ((obj green-eco-lurker) (arg0 process) (arg1 event-message-block)) + (with-pp + (cond + ((= (-> arg0 type) target) + (when + (nav-enemy-send-attack + arg0 + (the-as touching-shapes-entry (-> arg1 param 0)) + 'generic + ) + (let ((a1-2 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-2 from) pp) + (set! (-> a1-2 num-params) 0) + (set! (-> a1-2 message) 'blob-hit-jak) + (send-event-function (ppointer->process (-> obj parent)) a1-2) + ) + ) + #f + ) + (else + (nav-enemy-set-hit-from-direction arg0) + ((method-of-type nav-enemy dummy-43) obj arg0 arg1) + ) + ) + ) + ) + +(defmethod + nav-enemy-attack-handler + green-eco-lurker + ((obj green-eco-lurker) (arg0 process) (arg1 event-message-block)) + (with-pp + (cond + ((= (-> arg0 type) target) + (when + (nav-enemy-send-attack + arg0 + (the-as touching-shapes-entry (-> arg1 param 0)) + 'generic + ) + (let ((a1-2 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-2 from) pp) + (set! (-> a1-2 num-params) 0) + (set! (-> a1-2 message) 'blob-hit-jak) + (send-event-function (ppointer->process (-> obj parent)) a1-2) + ) + ) + #f + ) + (else + ((method-of-type nav-enemy nav-enemy-attack-handler) obj arg0 arg1) + ) + ) + ) + ) + +(defmethod + dummy-44 + green-eco-lurker + ((obj green-eco-lurker) (arg0 process) (arg1 event-message-block)) + (with-pp + (when + (and + (logtest? (-> obj nav-enemy-flags) 64) + ((method-of-type touching-shapes-entry prims-touching?) + (the-as touching-shapes-entry (-> arg1 param 0)) + (-> obj collide-info) + (the-as uint 1) + ) + ) + (when + (nav-enemy-send-attack + arg0 + (the-as touching-shapes-entry (-> arg1 param 0)) + 'generic + ) + (let ((a1-3 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-3 from) pp) + (set! (-> a1-3 num-params) 0) + (set! (-> a1-3 message) 'blob-hit-jak) + (send-event-function (ppointer->process (-> obj parent)) a1-3) + ) + ) + ) + ) + ) + +(defmethod + nav-enemy-touch-handler + green-eco-lurker + ((obj green-eco-lurker) (arg0 process) (arg1 event-message-block)) + (with-pp + (when + (and + (logtest? (-> obj nav-enemy-flags) 64) + ((method-of-type touching-shapes-entry prims-touching?) + (the-as touching-shapes-entry (-> arg1 param 0)) + (-> obj collide-info) + (the-as uint 1) + ) + ) + (when + (nav-enemy-send-attack + arg0 + (the-as touching-shapes-entry (-> arg1 param 0)) + 'generic + ) + (let ((a1-3 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-3 from) pp) + (set! (-> a1-3 num-params) 0) + (set! (-> a1-3 message) 'blob-hit-jak) + (send-event-function (ppointer->process (-> obj parent)) a1-3) + ) + ) + ) + ) + ) + +(defmethod dummy-51 green-eco-lurker ((obj green-eco-lurker) (arg0 vector)) + (when + (or + (not *target*) + (>= (vector-vector-xz-distance arg0 (target-pos 0)) 36864.0) + ) + (let ((v1-3 (new 'stack-no-clear 'vector))) + (set! (-> v1-3 quad) (-> arg0 quad)) + (set! (-> v1-3 w) (-> obj collide-info root-prim local-sphere w)) + ) + (if (not (TODO-RENAME-50 obj arg0)) + (return (the-as object #t)) + ) + ) + #f + ) + +(defmethod dummy-52 green-eco-lurker ((obj green-eco-lurker) (arg0 vector)) + (let ((s4-0 (-> obj path curve num-cverts))) + (when (> s4-0 0) + (let ((s2-0 (nav-enemy-rnd-int-count s4-0)) + (s3-0 s4-0) + ) + (while (> s3-0 0) + (eval-path-curve-div! (-> obj path) arg0 (the float s2-0) 'interp) + (if (dummy-51 obj arg0) + (return #t) + ) + (set! s2-0 (mod (+ s2-0 1) s4-0)) + (+! s3-0 -1) + ) + ) + ) + ) + #f + ) + +(defstate green-eco-lurker-tune-spheres (green-eco-lurker) + :trans + (behavior () + 0 + (none) + ) + :code + (behavior () + 0 + (none) + ) + :post + (the-as (function none :behavior green-eco-lurker) transform-post) + ) + +(defstate green-eco-lurker-wait-to-appear (green-eco-lurker) + :enter + (behavior () + (logior! (-> self draw status) 2) + (dummy-48 (-> self collide-info)) + (none) + ) + :exit + (behavior () + (set! (-> self draw status) (logand -3 (-> self draw status))) + (dummy-49 (-> self collide-info)) + (none) + ) + :trans + (behavior () + (if (dummy-52 self (-> self appear-dest)) + (go green-eco-lurker-appear) + ) + (none) + ) + :code + (behavior () + (while #t + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + ) + (none) + ) + ) + +(defmethod dummy-53 green-eco-lurker ((obj green-eco-lurker)) + (the-as symbol (cond + ((and + (-> obj draw shadow) + (zero? (-> obj draw cur-lod)) + (logtest? (-> obj draw status) 8) + ) + (let ((f0-0 (-> obj appear-dest y)) + (v1-7 (-> obj draw shadow-ctrl)) + ) + (let ((a0-1 v1-7)) + (set! + (-> a0-1 settings flags) + (logand -33 (-> a0-1 settings flags)) + ) + ) + 0 + (let ((a0-3 v1-7)) + (set! (-> a0-3 settings bot-plane w) (- (+ -6144.0 f0-0))) + ) + 0 + (set! (-> v1-7 settings top-plane w) (- (+ 6144.0 f0-0))) + ) + 0 + ) + (else + (let ((v1-9 (-> obj draw shadow-ctrl))) + (logior! (-> v1-9 settings flags) 32) + ) + 0 + ) + ) + ) + ) + +(defstate green-eco-lurker-appear (green-eco-lurker) + :enter + (behavior () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (set! (-> self played-sound?) #f) + (set! (-> self sound-delay) (nav-enemy-rnd-int-range 30 150)) + (let + ((f0-1 + (- + (-> self appear-dest x) + (-> (the-as robotboss (-> self parent 0)) root-override trans x) + ) + ) + ) + (set! + (-> self collide-info trans x) + (+ + (-> (the-as robotboss (-> self parent 0)) root-override trans x) + (fmax -32768.0 (fmin 32768.0 f0-1)) + ) + ) + ) + (logior! (-> self collide-info nav-flags) 2) + (set! (-> self nav extra-nav-sphere quad) (-> self appear-dest quad)) + (set! (-> self nav extra-nav-sphere w) 8192.0) + (setup-from-to-duration! + (-> self traj) + (-> self collide-info trans) + (-> self appear-dest) + 225.0 + -9.102222 + ) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (set! (-> gp-0 quad) (-> self collide-info trans quad)) + (set! (-> gp-0 y) (+ 8192.0 (-> gp-0 y))) + (let ((s5-0 (get-process *default-dead-pool* part-tracker #x4000))) + (when s5-0 + (let ((t9-3 (method-of-type part-tracker activate))) + (t9-3 + (the-as part-tracker s5-0) + *entity-pool* + 'part-tracker + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + s5-0 + part-tracker-init + (-> *part-group-id-table* 643) + -1 + #f + #f + #f + gp-0 + ) + (-> s5-0 ppointer) + ) + ) + ) + (let ((gp-1 (new 'stack-no-clear 'vector))) + (vector-! gp-1 (-> self appear-dest) (-> self collide-info trans)) + (set! (-> gp-1 y) 0.0) + (vector-normalize! gp-1 1.0) + (forward-up->quaternion (-> self collide-info quat) gp-1 *up-vector*) + ) + (none) + ) + :trans + (behavior () + (let + ((f30-0 + (fmin + (the float (- (-> *display* base-frame-counter) (-> self state-time))) + (-> self traj time) + ) + ) + ) + (eval-position! (-> self traj) f30-0 (-> self collide-info trans)) + (when (= f30-0 (-> self traj time)) + (logior! (-> self collide-info nav-flags) 1) + (set! + (-> self collide-info nav-flags) + (logand -3 (-> self collide-info nav-flags)) + ) + (go green-eco-lurker-appear-land) + ) + ) + (when + (and + (not (-> self played-sound?)) + (>= + (- (-> *display* base-frame-counter) (-> self state-time)) + (-> self sound-delay) + ) + ) + (set! (-> self played-sound?) #t) + (sound-play-by-name + (static-sound-name "blob-jump") + (new-sound-id) + 1024 + (the int (* 1524.0 (nav-enemy-rnd-float-range -0.5 0.5))) + 0 + (the-as uint 1) + (the-as vector #t) + ) + ) + (dummy-53 self) + 0 + (none) + ) + :code + (behavior () + (ja-channel-push! 1 60) + (sound-play-by-name + (static-sound-name "blob-out") + (new-sound-id) + 1024 + (the int (* 1524.0 (nav-enemy-rnd-float-range -1.0 1.0))) + 0 + (the-as uint 1) + (the-as vector #t) + ) + (cond + ((zero? (nav-enemy-rnd-int-count 2)) + (let ((a0-4 (-> self skel root-channel 0))) + (set! + (-> a0-4 frame-group) + (the-as art-joint-anim (-> self draw art-group data 11)) + ) + (set! + (-> a0-4 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 11)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-4 param 1) 1.0) + (set! (-> a0-4 frame-num) 0.0) + (joint-control-channel-group! + a0-4 + (the-as art-joint-anim (-> self draw art-group data 11)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-5 (-> self skel root-channel 0))) + (set! + (-> a0-5 param 0) + (the float (+ (-> a0-5 frame-group data 0 length) -1)) + ) + (set! (-> a0-5 param 1) 1.0) + (joint-control-channel-group-eval! + a0-5 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (else + (let ((a0-7 (-> self skel root-channel 0))) + (set! + (-> a0-7 frame-group) + (the-as art-joint-anim (-> self draw art-group data 7)) + ) + (set! + (-> a0-7 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 7)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-7 param 1) 1.0) + (set! (-> a0-7 frame-num) 0.0) + (joint-control-channel-group! + a0-7 + (the-as art-joint-anim (-> self draw art-group data 7)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-8 (-> self skel root-channel 0))) + (set! + (-> a0-8 param 0) + (the float (+ (-> a0-8 frame-group data 0 length) -1)) + ) + (set! (-> a0-8 param 1) 1.0) + (joint-control-channel-group-eval! + a0-8 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + ) + (while #t + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior green-eco-lurker) transform-post) + ) + +(defstate green-eco-lurker-appear-land (green-eco-lurker) + :event + (the-as + (function process int symbol event-message-block object :behavior green-eco-lurker) + nav-enemy-default-event-handler + ) + :code + (behavior () + (activate! *camera-smush-control* 409.6 37 150 1.0 0.99) + (sound-play-by-name + (static-sound-name "blob-land") + (new-sound-id) + 1024 + (the int (* 1524.0 (nav-enemy-rnd-float-range -1.0 1.0))) + 0 + (the-as uint 1) + (the-as vector #t) + ) + (let ((v1-4 (-> self draw shadow-ctrl))) + (let ((a0-4 v1-4)) + (set! (-> a0-4 settings bot-plane w) (- -7168.0)) + ) + 0 + (let ((a0-6 v1-4)) + (set! (-> a0-6 settings top-plane w) (- 2048.0)) + ) + 0 + (set! (-> v1-4 settings flags) (logand -9 (-> v1-4 settings flags))) + (set! (-> v1-4 settings flags) (logand -5 (-> v1-4 settings flags))) + (set! (-> v1-4 settings flags) (logand -33 (-> v1-4 settings flags))) + ) + 0 + (ja-channel-push! 1 60) + (let ((a0-15 (-> self skel root-channel 0))) + (set! + (-> a0-15 frame-group) + (the-as art-joint-anim (-> self draw art-group data 8)) + ) + (set! + (-> a0-15 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 8)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-15 param 1) 1.0) + (set! (-> a0-15 frame-num) 0.0) + (joint-control-channel-group! + a0-15 + (the-as art-joint-anim (-> self draw art-group data 8)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-16 (-> self skel root-channel 0))) + (set! + (-> a0-16 param 0) + (the float (+ (-> a0-16 frame-group data 0 length) -1)) + ) + (set! (-> a0-16 param 1) 1.0) + (joint-control-channel-group-eval! + a0-16 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (logior! (-> self nav-enemy-flags) 2) + (go-virtual nav-enemy-chase) + (none) + ) + :post + (the-as (function none :behavior green-eco-lurker) transform-post) + ) + +(defstate nav-enemy-patrol (green-eco-lurker) + :virtual #t + :code + (behavior () + (ja-channel-push! 1 60) + (let ((t9-1 (-> (method-of-type nav-enemy nav-enemy-patrol) code))) + (if t9-1 + ((the-as (function none) t9-1)) + ) + ) + (none) + ) + ) + +(defstate nav-enemy-chase (green-eco-lurker) + :virtual #t + :code + (behavior () + (let ((f30-0 (nav-enemy-rnd-float-range 0.9 1.1))) + (cond + ((= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 8) + ) + (let ((a0-5 (-> self skel root-channel 0))) + (set! + (-> a0-5 param 0) + (the float (+ (-> a0-5 frame-group data 0 length) -1)) + ) + (set! (-> a0-5 param 1) 1.0) + (joint-control-channel-group! + a0-5 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (ja-channel-push! 1 60) + (let ((a0-7 (-> self skel root-channel 0))) + (set! + (-> a0-7 frame-group) + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info run-anim)) + ) + ) + (set! + (-> a0-7 param 0) + (the + float + (+ + (-> + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info run-anim)) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-7 param 1) f30-0) + (set! (-> a0-7 frame-num) 0.0) + (joint-control-channel-group! + a0-7 + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info run-anim)) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (ja-blend-eval) + (suspend) + (let ((a0-8 (-> self skel root-channel 0))) + (set! + (-> a0-8 param 0) + (the float (+ (-> a0-8 frame-group data 0 length) -1)) + ) + (set! (-> a0-8 param 1) f30-0) + (joint-control-channel-group-eval! + a0-8 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (else + (ja-channel-push! 1 60) + (let ((v1-42 (-> self skel root-channel 0))) + (set! + (-> v1-42 frame-group) + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info run-anim)) + ) + ) + ) + (let ((v1-45 (-> self skel root-channel 0))) + (set! (-> v1-45 num-func) num-func-identity) + (set! (-> v1-45 frame-num) 0.0) + ) + ) + ) + (while #t + (suspend) + (let ((a0-17 (-> self skel root-channel 0))) + (set! (-> a0-17 param 0) f30-0) + (joint-control-channel-group-eval! + a0-17 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + ) + ) + (none) + ) + ) + +(defstate nav-enemy-jump-land (green-eco-lurker) + :virtual #t + :code + (behavior () + (let ((a0-0 (-> self skel root-channel 0))) + (set! + (-> a0-0 param 0) + (the float (+ (-> a0-0 frame-group data 0 length) -1)) + ) + (set! (-> a0-0 param 1) 1.0) + (joint-control-channel-group! + a0-0 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (ja-channel-push! 1 22) + (let ((gp-0 (-> self skel root-channel 0))) + (set! + (-> gp-0 frame-group) + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info jump-land-anim)) + ) + ) + (set! (-> gp-0 param 0) (ja-aframe 32.0 0)) + (set! (-> gp-0 param 1) 0.5) + (set! (-> gp-0 frame-num) 0.0) + (joint-control-channel-group! + gp-0 + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info jump-land-anim)) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (ja-blend-eval) + (suspend) + (let ((gp-1 (-> self skel root-channel 0))) + (set! (-> gp-1 param 0) (ja-aframe 32.0 0)) + (set! (-> gp-1 param 1) 0.5) + (joint-control-channel-group-eval! + gp-1 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (go-virtual nav-enemy-chase) + (none) + ) + ) + +(defstate nav-enemy-die (green-eco-lurker) + :virtual #t + :enter + (behavior () + (let ((a1-0 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-0 from) self) + (set! (-> a1-0 num-params) 0) + (set! (-> a1-0 message) 'blob-died) + (send-event-function (ppointer->process (-> self parent)) a1-0) + ) + (let ((gp-0 (get-process *default-dead-pool* part-tracker #x4000))) + (when gp-0 + (let ((t9-2 (method-of-type part-tracker activate))) + (t9-2 + (the-as part-tracker gp-0) + *entity-pool* + 'part-tracker + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + gp-0 + part-tracker-init + (-> *part-group-id-table* 643) + -1 + #f + #f + #f + (-> self collide-info trans) + ) + (-> gp-0 ppointer) + ) + ) + (sound-play-by-name + (static-sound-name "blob-explode") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + (activate! *camera-smush-control* 409.6 37 150 1.0 0.99) + (let ((v1-14 (-> self draw shadow-ctrl))) + (logior! (-> v1-14 settings flags) 32) + ) + 0 + (let ((t9-7 (-> (method-of-type nav-enemy nav-enemy-die) enter))) + (if t9-7 + (t9-7) + ) + ) + (none) + ) + ) + +(defmethod initialize-collision green-eco-lurker ((obj green-eco-lurker)) + (let + ((s5-0 + (new + 'process + 'collide-shape-moving + obj + (collide-list-enum usually-hit-by-player) + ) + ) + ) + (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s5-0 reaction) default-collision-reaction) + (set! (-> s5-0 no-reaction) nothing) + (let ((s4-0 (new 'process 'collide-shape-prim-group s5-0 (the-as uint 7) 0))) + (set! (-> s4-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s4-0 collide-with) (the-as uint 16)) + (set! (-> s4-0 prim-core action) (the-as uint 1)) + (set! (-> s4-0 transform-index) 4) + (set-vector! (-> s4-0 local-sphere) 0.0 0.0 -4096.0 20480.0) + (dummy-46 s5-0) + (let ((s3-0 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 3)))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 1)) + (set! (-> s3-0 prim-core offense) 1) + (set-vector! (-> s3-0 local-sphere) 0.0 2785.28 0.0 3276.8) + ) + (dummy-28 s4-0) + (let ((s3-1 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 3)))) + (set! (-> s3-1 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-1 collide-with) (the-as uint 16)) + (set! (-> s3-1 prim-core action) (the-as uint 1)) + (set! (-> s3-1 prim-core offense) 1) + (set-vector! (-> s3-1 local-sphere) 0.0 6615.04 0.0 3276.8) + ) + (dummy-28 s4-0) + (let ((s3-2 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 3)))) + (set! (-> s3-2 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-2 collide-with) (the-as uint 16)) + (set! (-> s3-2 prim-core action) (the-as uint 1)) + (set! (-> s3-2 prim-core offense) 1) + (set-vector! (-> s3-2 local-sphere) 0.0 10444.8 0.0 3276.8) + ) + (dummy-28 s4-0) + (let ((s3-3 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 1)))) + (set! (-> s3-3 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-3 collide-with) (the-as uint 16)) + (set! (-> s3-3 prim-core offense) 2) + (set! (-> s3-3 transform-index) 6) + (set-vector! (-> s3-3 local-sphere) 0.0 0.0 0.0 3276.8) + ) + (dummy-28 s4-0) + (let ((s3-4 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 1)))) + (set! (-> s3-4 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-4 collide-with) (the-as uint 16)) + (set! (-> s3-4 prim-core offense) 2) + (set! (-> s3-4 transform-index) 4) + (set-vector! (-> s3-4 local-sphere) 0.0 -3276.8 -2048.0 5734.4) + ) + (dummy-28 s4-0) + (let ((s3-5 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 1)))) + (set! (-> s3-5 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-5 collide-with) (the-as uint 16)) + (set! (-> s3-5 prim-core offense) 2) + (set! (-> s3-5 transform-index) 12) + (set-vector! (-> s3-5 local-sphere) 0.0 0.0 0.0 2457.6) + ) + (dummy-28 s4-0) + (let ((s3-6 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 1)))) + (set! (-> s3-6 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-6 collide-with) (the-as uint 16)) + (set! (-> s3-6 prim-core offense) 2) + (set! (-> s3-6 transform-index) 16) + (set-vector! (-> s3-6 local-sphere) 0.0 0.0 0.0 2457.6) + ) + (dummy-28 s4-0) + ) + (set! (-> s5-0 nav-radius) 8192.0) + (dummy-50 s5-0) + (set! (-> s5-0 max-iteration-count) (the-as uint 2)) + (set! (-> obj collide-info) s5-0) + ) + 0 + (none) + ) + +(defmethod TODO-RENAME-48 green-eco-lurker ((obj green-eco-lurker)) + (dummy-14 obj *green-eco-lurker-sg* '()) + (set! (-> obj draw origin-joint-index) (the-as uint 3)) + (set! + (-> obj collide-info nav-flags) + (logand -2 (-> obj collide-info nav-flags)) + ) + (TODO-RENAME-45 obj *green-eco-lurker-nav-enemy-info*) + (logior! (-> obj draw shadow-ctrl settings flags) 4) + (set! (-> obj neck up) (the-as uint 0)) + (set! (-> obj neck nose) (the-as uint 1)) + (set! (-> obj neck ear) (the-as uint 2)) + 0 + (none) + ) + +(defbehavior + green-eco-lurker-init-by-other green-eco-lurker + ((arg0 entity) (arg1 green-eco-lurker-gen) (arg2 vector)) + (initialize-collision self) + (set! (-> self collide-info trans quad) (-> arg2 quad)) + (vector-identity! (-> self collide-info scale)) + (quaternion-identity! (-> self collide-info quat)) + (set! (-> self entity) (-> arg1 entity)) + (TODO-RENAME-48 self) + (logclear! (-> self mask) (process-mask actor-pause)) + (go green-eco-lurker-wait-to-appear) + (none) + ) + +(defstate spawn-minions (green-eco-lurker-gen) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('blob-died) + (set! (-> self num-alive) (max 0 (+ (-> self num-alive) -1))) + (let ((a1-1 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-1 from) self) + (set! (-> a1-1 num-params) 0) + (set! (-> a1-1 message) 'blob-died) + (send-event-function (ppointer->process (-> self parent)) a1-1) + ) + ) + (('blob-hit-jak) + (let ((a1-2 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-2 from) self) + (set! (-> a1-2 num-params) 0) + (set! (-> a1-2 message) 'blob-hit-jak) + (send-event-function (ppointer->process (-> self parent)) a1-2) + ) + ) + ) + ) + :code + (behavior () + (while (< (-> self num-spawned) (-> self num-to-spawn)) + (when (< (-> self num-alive) 3) + (when (nonzero? (-> self num-spawned)) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 300) + (suspend) + ) + ) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (set! (-> gp-0 quad) (-> self root trans quad)) + (set! (-> gp-0 y) (+ -16384.0 (-> gp-0 y))) + (let ((s5-0 (get-process *default-dead-pool* green-eco-lurker #x4000))) + (when s5-0 + (let ((t9-1 (method-of-type green-eco-lurker activate))) + (t9-1 + (the-as green-eco-lurker s5-0) + self + 'green-eco-lurker + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + s5-0 + green-eco-lurker-init-by-other + (-> self entity) + self + gp-0 + ) + (-> s5-0 ppointer) + ) + ) + ) + (+! (-> self num-spawned) 1) + (+! (-> self num-alive) 1) + ) + (suspend) + ) + (while (> (-> self num-alive) 0) + (suspend) + ) + (let ((a1-3 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-3 from) self) + (set! (-> a1-3 num-params) 0) + (set! (-> a1-3 message) 'trigger) + (send-event-function (ppointer->process (-> self parent)) a1-3) + ) + (until (not (-> self child)) + (suspend) + ) + (suspend) + 0 + (none) + ) + ) + +(defbehavior + green-eco-lurker-gen-init-by-other green-eco-lurker-gen + ((arg0 entity) (arg1 vector) (arg2 int)) + (set! (-> self num-to-spawn) arg2) + (set! (-> self num-spawned) 0) + (set! (-> self num-alive) 0) + (set! (-> self entity) arg0) + (set! (-> self root) (new 'process 'trsqv)) + (set! (-> self root trans quad) (-> arg1 quad)) + (vector-identity! (-> self root scale)) + (quaternion-identity! (-> self root quat)) + (logclear! (-> self mask) (process-mask actor-pause)) + (go spawn-minions) + (none) + ) + + + + diff --git a/goal_src/levels/finalboss/light-eco.gc b/goal_src/levels/finalboss/light-eco.gc index 731dfb27a8..68bc3d4f2a 100644 --- a/goal_src/levels/finalboss/light-eco.gc +++ b/goal_src/levels/finalboss/light-eco.gc @@ -5,3 +5,1216 @@ ;; name in dgo: light-eco ;; dgos: FIN, L1 +(define-extern *light-eco-big-sg* skeleton-group) +(define-extern *light-eco-small-sg* skeleton-group) + +;; DECOMP BEGINS + +(deftype light-eco-child (process-drawable) + ((root-override collide-shape :offset 112) + (angle-bit int32 :offset-assert 176) + (ground-y float :offset-assert 180) + (falling-start-time int64 :offset-assert 184) + (last-update-time int64 :offset-assert 192) + (rot vector :inline :offset-assert 208) + (rotv vector :inline :offset-assert 224) + (traj trajectory :inline :offset-assert 240) + ) + :heap-base #xb0 + :method-count-assert 21 + :size-assert #x118 + :flag-assert #x1500b00118 + (:methods + (common-trans (_type_) none 20) + ) + (:states + light-eco-child-grabbed + light-eco-child-hit-ground + light-eco-child-idle + light-eco-child-die + ) + ) + + +(deftype light-eco-mother (process-drawable) + ((player-got-eco? symbol :offset-assert 176) + (angle-mask int64 :offset-assert 184) + (delay-til-spawn int32 :offset-assert 192) + (part2 sparticle-launch-control :offset-assert 196) + (last-update-time int64 :offset-assert 200) + (last-spawned-time int64 :offset-assert 208) + ) + :heap-base #x70 + :method-count-assert 22 + :size-assert #xd8 + :flag-assert #x16007000d8 + (:methods + (spawn-child-eco (_type_) symbol 20) + (common-trans (_type_) none 21) + ) + (:states + light-eco-mother-discipate + light-eco-mother-active + ) + ) + + +(let + ((v1-2 + (new 'static 'skeleton-group + :art-group-name "light-eco" + :bounds (new 'static 'vector :w 36864.0) + :version #x6 + ) + ) + ) + (set! (-> v1-2 jgeo) 0) + (set! (-> v1-2 janim) -1) + (set! (-> v1-2 mgeo 0) (the-as uint 1)) + (set! (-> v1-2 lod-dist 0) 4095996000.0) + (set! *light-eco-big-sg* v1-2) + ) + +(let + ((v1-3 + (new 'static 'skeleton-group + :art-group-name "light-eco" + :bounds (new 'static 'vector :w 6144.0) + :version #x6 + ) + ) + ) + (set! (-> v1-3 jgeo) 3) + (set! (-> v1-3 janim) -1) + (set! (-> v1-3 mgeo 0) (the-as uint 4)) + (set! (-> v1-3 lod-dist 0) 4095996000.0) + (set! *light-eco-small-sg* v1-3) + ) + +(set! + (-> *part-group-id-table* 690) + (new 'static 'sparticle-launch-group + :length 4 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-light-eco-mother-growing" + :launcher + (new 'static 'inline-array sparticle-group-item 4 + (sp-item 2902) + (sp-item 2900) + (sp-item 2897) + (sp-item 2898) + ) + :bounds (new 'static 'sphere :w 131072.0) + ) + ) + +(set! + (-> *part-id-table* 2897) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 19 + (sp-tex spt-texture (new 'static 'texture-id :index #x2 :page #x2)) + (sp-flt spt-num 0.5) + (sp-rnd-flt spt-scale-x (meters 10.5) (meters 4.5) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 2.1) (meters 1.8) 1.0) + (sp-rnd-int spt-r 0 1 255.0) + (sp-rnd-int spt-g 0 1 255.0) + (sp-rnd-int spt-b 0 1 255.0) + (sp-flt spt-a 0.0) + (sp-flt spt-scalevel-x (meters 0.009765625)) + (sp-rnd-flt spt-rotvel-z (degrees -0.15) (degrees 0.3) 1.0) + (sp-flt spt-scalevel-y (meters 0.009765625)) + (sp-flt spt-fade-a 0.35555556) + (sp-int spt-timer 300) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-int spt-next-time 90) + (sp-launcher-by-id spt-next-launcher 2899) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 2899) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 + (sp-flt spt-fade-a -0.53333336) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 2898) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 18 + (sp-tex spt-texture (new 'static 'texture-id :index #x2 :page #x2)) + (sp-flt spt-num 0.06) + (sp-rnd-flt spt-scale-x (meters 20.0) (meters 4.5) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-scale-y (meters 1.2)) + (sp-rnd-int spt-r 0 1 255.0) + (sp-rnd-int spt-g 0 1 255.0) + (sp-rnd-int spt-b 0 1 255.0) + (sp-flt spt-a 0.0) + (sp-flt spt-scalevel-x (meters 0.009765625)) + (sp-rnd-flt spt-rotvel-z (degrees -0.15) (degrees 0.3) 1.0) + (sp-flt spt-fade-a 0.32) + (sp-int spt-timer 300) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-int spt-next-time 75) + (sp-launcher-by-id spt-next-launcher 232) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 2900) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 22 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-rnd-flt spt-num 0.05 0.05 1.0) + (sp-rnd-flt spt-x (meters -0.001) (meters 0.002) 1.0) + (sp-rnd-flt spt-y (meters -0.001) (meters 0.002) 1.0) + (sp-rnd-flt spt-z -4.096 8.192 1.0) + (sp-rnd-flt spt-scale-x (meters 10.0) (meters 5.0) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 192.0 64.0 1.0) + (sp-rnd-flt spt-g 192.0 64.0 1.0) + (sp-rnd-flt spt-b 192.0 64.0 1.0) + (sp-flt spt-a 0.0) + (sp-flt spt-vel-y (meters 0.0)) + (sp-flt spt-scalevel-x (meters 0.016666668)) + (sp-rnd-flt spt-rotvel-z (degrees -0.3) (degrees 0.6) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a 0.21333334) + (sp-int spt-timer 600) + (sp-cpuinfo-flags bit2 bit3) + (sp-int-plain-rnd spt-next-time 240 59 1) + (sp-launcher-by-id spt-next-launcher 2901) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 2901) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 + (sp-flt spt-fade-a -0.21333334) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 2902) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 23 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-rnd-flt spt-num 1.0 8.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.5) (meters 0.2) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 192.0 64.0 1.0) + (sp-rnd-flt spt-g 192.0 64.0 1.0) + (sp-rnd-flt spt-b 192.0 64.0 1.0) + (sp-rnd-flt spt-a 32.0 64.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.10666667) (meters 0.21333334) 1.0) + (sp-flt spt-scalevel-x (meters -0.00083333335)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-rnd-flt spt-accel-y -6.826667 -2.7306666 1.0) + (sp-flt spt-friction 0.9) + (sp-int-plain-rnd spt-timer 30 149 1) + (sp-cpuinfo-flags bit0 bit2 bit3) + (sp-flt spt-userdata 1638400.0) + (sp-func spt-func 'check-drop-level-lighteco-big-pops) + (sp-int-plain-rnd spt-next-time 45 299 1) + (sp-launcher-by-id spt-next-launcher 2903) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 180.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees -1440.0) (degrees 2880.0) 1.0) + (sp-flt spt-conerot-radius (meters 4.0)) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 2903) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 + (sp-flt spt-userdata 2252800.0) + (sp-end) + ) + ) + ) + +(defun + check-drop-level-lighteco-big-pops + ((arg0 sparticle-system) (arg1 sparticle-cpuinfo) (arg2 vector)) + (when (< (-> arg2 y) (-> arg1 user-float)) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (sp-kill-particle arg0 arg1) + (set-vector! gp-0 (-> arg2 x) (-> arg2 y) (-> arg2 z) 1.0) + (sp-launch-particles-var + *sp-particle-system-2d* + (-> *part-id-table* 2904) + gp-0 + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.0 + ) + (sp-launch-particles-var + *sp-particle-system-2d* + (-> *part-id-table* 2905) + gp-0 + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.0 + ) + ) + ) + (none) + ) + +(set! + (-> *part-id-table* 2905) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 13 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 0.4) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 16.0 32.0 1.0) + (sp-flt spt-fade-a -1.92) + (sp-int spt-timer 20) + (sp-cpuinfo-flags bit2 bit3) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 2904) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 16 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-rnd-flt spt-num 4.0 4.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.3) (meters 0.2) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 192.0 64.0 1.0) + (sp-rnd-flt spt-g 192.0 64.0 1.0) + (sp-rnd-flt spt-b 192.0 64.0 1.0) + (sp-rnd-flt spt-a 32.0 64.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.053333335) (meters 0.053333335) 1.0) + (sp-rnd-flt spt-accel-y -6.826667 -2.7306666 1.0) + (sp-flt spt-friction 0.85) + (sp-int-plain-rnd spt-timer 15 119 1) + (sp-cpuinfo-flags bit2 bit3) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +(set! + (-> *part-group-id-table* 691) + (new 'static 'sparticle-launch-group + :length 4 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-light-eco-mother" + :launcher + (new 'static 'inline-array sparticle-group-item 4 + (sp-item 2902) + (sp-item 2900) + (sp-item 2897) + (sp-item 2898) + ) + :bounds (new 'static 'sphere :w 131072.0) + ) + ) + +(set! + (-> *part-group-id-table* 692) + (new 'static 'sparticle-launch-group + :length 2 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-light-eco-child" + :launcher + (new 'static 'inline-array sparticle-group-item 2 + (sp-item 2906) + (sp-item 2907) + ) + :bounds (new 'static 'sphere :w 16384.0) + ) + ) + +(set! + (-> *part-id-table* 2907) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 22 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-rnd-flt spt-num 0.025 0.025 1.0) + (sp-rnd-flt spt-x (meters -0.001) (meters 0.002) 1.0) + (sp-rnd-flt spt-y (meters -0.001) (meters 0.002) 1.0) + (sp-rnd-flt spt-z -4.096 8.192 1.0) + (sp-rnd-flt spt-scale-x (meters 2.0) (meters 0.5) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 192.0 64.0 1.0) + (sp-rnd-flt spt-g 192.0 64.0 1.0) + (sp-rnd-flt spt-b 192.0 64.0 1.0) + (sp-flt spt-a 0.0) + (sp-flt spt-vel-y (meters 0.0)) + (sp-flt spt-scalevel-x (meters 0.006666667)) + (sp-rnd-flt spt-rotvel-z (degrees -0.3) (degrees 0.6) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a 0.85333335) + (sp-int spt-timer 300) + (sp-cpuinfo-flags bit2 bit3) + (sp-int-plain-rnd spt-next-time 120 29 1) + (sp-launcher-by-id spt-next-launcher 2908) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 2908) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 + (sp-flt spt-fade-a -0.85333335) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 2906) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 22 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-rnd-flt spt-num 1.0 2.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.15) (meters 0.3) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 192.0 64.0 1.0) + (sp-rnd-flt spt-g 192.0 64.0 1.0) + (sp-rnd-flt spt-b 192.0 64.0 1.0) + (sp-rnd-flt spt-a 32.0 64.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.10666667) (meters 0.21333334) 1.0) + (sp-flt spt-scalevel-x (meters -0.00083333335)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-rnd-flt spt-accel-y -6.826667 -2.7306666 1.0) + (sp-flt spt-friction 0.5) + (sp-int-plain-rnd spt-timer 30 149 1) + (sp-cpuinfo-flags bit0 bit2 bit3) + (sp-flt spt-userdata 1638400.0) + (sp-func spt-func 'check-drop-level-lighteco-pops) + (sp-int-plain-rnd spt-next-time 45 299 1) + (sp-launcher-by-id spt-next-launcher 2909) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 180.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees -1440.0) (degrees 2880.0) 1.0) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 2909) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 + (sp-flt spt-userdata 2048000.0) + (sp-end) + ) + ) + ) + +(defun + check-drop-level-lighteco-pops + ((arg0 sparticle-system) (arg1 sparticle-cpuinfo) (arg2 vector)) + (when (< (-> arg2 y) (-> arg1 user-float)) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (sp-kill-particle arg0 arg1) + (set-vector! gp-0 (-> arg2 x) (-> arg2 y) (-> arg2 z) 1.0) + (sp-launch-particles-var + *sp-particle-system-2d* + (-> *part-id-table* 2910) + gp-0 + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.0 + ) + (sp-launch-particles-var + *sp-particle-system-2d* + (-> *part-id-table* 2911) + gp-0 + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.0 + ) + ) + ) + (none) + ) + +(set! + (-> *part-id-table* 2911) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 13 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 0.4) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 16.0 32.0 1.0) + (sp-flt spt-fade-a -1.92) + (sp-int spt-timer 20) + (sp-cpuinfo-flags bit2 bit3) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 2910) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 16 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-rnd-flt spt-num 4.0 4.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.2) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 192.0 64.0 1.0) + (sp-rnd-flt spt-g 192.0 64.0 1.0) + (sp-rnd-flt spt-b 192.0 64.0 1.0) + (sp-rnd-flt spt-a 32.0 64.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.053333335) (meters 0.053333335) 1.0) + (sp-rnd-flt spt-accel-y -6.826667 -2.7306666 1.0) + (sp-flt spt-friction 0.85) + (sp-int-plain-rnd spt-timer 15 119 1) + (sp-cpuinfo-flags bit2 bit3) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +(defbehavior + light-eco-child-default-event-handler light-eco-child + ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (when (or (= v1-0 'touch) (= v1-0 'attack)) + (when (= (-> arg0 type) target) + (let ((a1-3 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-3 from) self) + (set! (-> a1-3 num-params) 1) + (set! (-> a1-3 message) 'trigger) + (set! (-> a1-3 param 0) (the-as uint (-> self angle-bit))) + (send-event-function + (ppointer->process (-> self parent)) + a1-3 + ) + ) + (go light-eco-child-grabbed) + ) + ) + ) + ) + ) + +(defmethod common-trans light-eco-child ((obj light-eco-child)) + (let ((v1-1 (-> *display* base-frame-counter))) + (when (!= v1-1 (-> obj last-update-time)) + (set! (-> obj last-update-time) v1-1) + (let* ((s5-0 (new 'stack-no-clear 'vector)) + (s4-0 (-> obj rot)) + (f30-0 (-> s4-0 w)) + ) + (vector-v++! s4-0 (-> obj rotv)) + (set! + (-> s4-0 w) + (+ f30-0 (* (-> obj rotv w) (-> *display* seconds-per-frame))) + ) + (set-vector! + s5-0 + (cos (-> s4-0 x)) + (cos (-> s4-0 y)) + (cos (-> s4-0 z)) + 1.0 + ) + (vector-normalize! s5-0 1.0) + (quaternion-vector-angle! (-> obj root-override quat) s5-0 f30-0) + ) + (spawn (-> obj part) (-> obj root-override trans)) + ) + ) + (none) + ) + +(defstate light-eco-child-appear (light-eco-child) + :event + light-eco-child-default-event-handler + :enter + (behavior () + (set! (-> self falling-start-time) (-> *display* base-frame-counter)) + (none) + ) + :trans + (behavior () + (let + ((f30-0 + (fmin + (the + float + (- (-> *display* base-frame-counter) (-> self falling-start-time)) + ) + (-> self traj time) + ) + ) + ) + (eval-position! (-> self traj) f30-0 (-> self root-override trans)) + (if (= f30-0 (-> self traj time)) + (go light-eco-child-hit-ground) + ) + ) + (common-trans self) + (none) + ) + :code + (behavior () + (while #t + (suspend) + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 param 0) 1.0) + (joint-control-channel-group-eval! + a0-0 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior light-eco-child) transform-post) + ) + +(defstate light-eco-child-hit-ground (light-eco-child) + :event + light-eco-child-default-event-handler + :enter + (behavior () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (none) + ) + :trans + (behavior () + (let + ((f30-0 + (+ + (-> self root-override transv y) + (* -544768.0 (-> *display* seconds-per-frame)) + ) + ) + ) + (when + (and (< f30-0 0.0) (>= (-> self ground-y) (-> self root-override trans y))) + (if (>= 4096.0 (fabs f30-0)) + (go light-eco-child-idle) + ) + (set! (-> self root-override transv y) 0.0) + (vector-normalize! + (-> self root-override transv) + (* 0.25 (vector-xz-length (-> self root-override transv))) + ) + (set! f30-0 (* 0.35 (- f30-0))) + ) + (set! (-> self root-override transv y) f30-0) + ) + (vector-v+! + (-> self root-override trans) + (-> self root-override trans) + (-> self root-override transv) + ) + (let + ((f0-8 + (vector-vector-xz-distance + (-> self root-override trans) + (-> (the-as light-eco-mother (-> self parent 0)) root trans) + ) + ) + ) + (when (< 92610.56 f0-8) + (let ((gp-1 (new 'stack-no-clear 'vector))) + (vector-! + gp-1 + (-> self root-override trans) + (-> (the-as light-eco-mother (-> self parent 0)) root trans) + ) + (set! (-> gp-1 y) 0.0) + (vector-normalize! gp-1 92610.56) + (vector+! + gp-1 + gp-1 + (-> (the-as light-eco-mother (-> self parent 0)) root trans) + ) + (set! (-> gp-1 y) (-> self root-override trans y)) + (set! (-> self root-override trans quad) (-> gp-1 quad)) + ) + ) + ) + (common-trans self) + (none) + ) + :code + (behavior () + (while #t + (suspend) + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 param 0) 1.0) + (joint-control-channel-group-eval! + a0-0 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior light-eco-child) transform-post) + ) + +(defstate light-eco-child-idle (light-eco-child) + :event + light-eco-child-default-event-handler + :enter + (behavior () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (none) + ) + :trans + (behavior () + (if (>= (- (-> *display* base-frame-counter) (-> self state-time)) 1200) + (go light-eco-child-die) + ) + (common-trans self) + (none) + ) + :code + (behavior () + (while #t + (suspend) + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 param 0) 1.0) + (joint-control-channel-group-eval! + a0-0 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior light-eco-child) transform-post) + ) + +(defstate light-eco-child-die (light-eco-child) + :code + (behavior () + (let ((a1-0 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-0 from) self) + (set! (-> a1-0 num-params) 1) + (set! (-> a1-0 message) 'untrigger) + (set! (-> a1-0 param 0) (the-as uint (-> self angle-bit))) + (send-event-function (ppointer->process (-> self parent)) a1-0) + ) + (dummy-48 (-> self root-override)) + (logior! (-> self draw status) 2) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 30) + (suspend) + ) + (none) + ) + ) + +(defstate light-eco-child-grabbed (light-eco-child) + :code + (behavior () + (suspend) + 0 + (none) + ) + ) + +(defbehavior + light-eco-child-init-by-other light-eco-child + ((arg0 entity) (arg1 vector) (arg2 vector) (arg3 int)) + (set! (-> self entity) arg0) + (set! (-> self angle-bit) arg3) + (set! (-> self ground-y) (-> arg2 y)) + (set! (-> self last-update-time) 0) + (set-vector! + (-> self rotv) + (rand-vu-float-range 5898.24 9539.129) + (rand-vu-float-range 5552.3555 9193.244) + (rand-vu-float-range 6007.467 9648.355) + (rand-vu-float-range 11013.688 18295.467) + ) + (set-vector! + (-> self rot) + (rand-vu-float-range 0.0 65536.0) + (rand-vu-float-range 0.0 65536.0) + (rand-vu-float-range 0.0 65536.0) + (rand-vu-float-range 0.0 65536.0) + ) + (let + ((s4-2 (new 'process 'collide-shape self (collide-list-enum hit-by-player)))) + (let ((s3-0 (new 'process 'collide-shape-prim-sphere s4-2 (the-as uint 0)))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 512)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core offense) 0) + (set-vector! (-> s3-0 local-sphere) 0.0 0.0 0.0 4096.0) + ) + (dummy-46 s4-2) + (set! (-> s4-2 nav-radius) (* 0.75 (-> s4-2 root-prim local-sphere w))) + (dummy-50 s4-2) + (set! (-> self root-override) s4-2) + ) + (set! (-> self root-override trans quad) (-> arg1 quad)) + (set-vector! (-> self root-override scale) 2.0 2.0 2.0 1.0) + (quaternion-identity! (-> self root-override quat)) + (setup-from-to-height! + (-> self traj) + (-> self root-override trans) + arg2 + 4096.0 + -4.551111 + ) + (let ((s4-3 (-> self root-override transv))) + (vector-! s4-3 arg2 arg1) + (set! (-> s4-3 y) 0.0) + (vector-normalize! s4-3 163840.0) + (set! (-> s4-3 y) -122880.0) + ) + (logclear! (-> self mask) (process-mask actor-pause)) + (dummy-14 self *light-eco-small-sg* '()) + (ja-channel-set! 1) + (let ((a0-21 (-> self skel root-channel 0))) + (set! + (-> a0-21 param 0) + (the float (+ (-> a0-21 frame-group data 0 length) -1)) + ) + (set! (-> a0-21 param 1) 1.0) + (joint-control-channel-group! + a0-21 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (let ((gp-1 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-1 + (the-as art-joint-anim (-> self draw art-group data 5)) + num-func-identity + ) + (set! (-> gp-1 frame-num) 0.0) + ) + (set! + (-> self part) + (create-launch-control (-> *part-group-id-table* 692) self) + ) + (transform-post) + (go light-eco-child-appear) + (none) + ) + +(defmethod common-trans light-eco-mother ((obj light-eco-mother)) + (let ((v1-1 (-> *display* base-frame-counter))) + (when (!= v1-1 (-> obj last-update-time)) + (set! (-> obj last-update-time) v1-1) + (let ((s5-0 (new 'stack-no-clear 'vector))) + (set-vector! + s5-0 + (cos + (* 25.700392 (the float (mod (-> *display* base-frame-counter) 2550))) + ) + (cos + (* 24.59229 (the float (mod (-> *display* base-frame-counter) 2664))) + ) + (cos + (* 26.121408 (the float (mod (-> *display* base-frame-counter) 2508))) + ) + 1.0 + ) + (vector-normalize! s5-0 1.0) + (quaternion-vector-angle! + (-> obj root quat) + s5-0 + (* 48.860058 (the float (mod (-> *display* base-frame-counter) 1341))) + ) + ) + (cond + ((and *target* (logtest? (-> *target* state-flags) 256)) + (set! (-> obj last-spawned-time) (-> *display* base-frame-counter)) + (set! (-> obj delay-til-spawn) 2400) + ) + (else + (when + (>= + (- (-> *display* base-frame-counter) (-> obj last-spawned-time)) + (-> obj delay-til-spawn) + ) + (when (spawn-child-eco obj) + (set! (-> obj last-spawned-time) (-> *display* base-frame-counter)) + (set! (-> obj delay-til-spawn) (rand-vu-int-range 300 600)) + ) + ) + ) + ) + (update! (-> obj sound)) + 0 + ) + ) + (none) + ) + +(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))) + (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)) + ) + (set-vector! s4-0 (* (sin f28-0) f30-0) 0.0 (* (cos f28-0) f30-0) 1.0) + (vector+! s4-0 s4-0 (-> obj root trans)) + (set! (-> s4-0 y) 1974272.0) + (when + (or + (not *target*) + (>= (vector-vector-xz-distance s4-0 (target-pos 0)) 49152.0) + ) + (logior! (-> obj angle-mask) (ash 1 gp-0)) + (let ((s3-1 (get-process *default-dead-pool* light-eco-child #x4000))) + (when s3-1 + (let ((t9-7 (method-of-type light-eco-child activate))) + (t9-7 + (the-as light-eco-child s3-1) + obj + 'light-eco-child + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + s3-1 + light-eco-child-init-by-other + (-> obj entity) + (-> obj root trans) + s4-0 + gp-0 + ) + (-> s3-1 ppointer) + ) + ) + (return #t) + ) + ) + ) + ) + ) + #f + ) + +(defbehavior + light-eco-mother-default-event-handler light-eco-mother + ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (cond + ((= v1-0 'untrigger) + (the-as int (when (= (-> arg0 type) light-eco-child) + (let* ((a1-3 (-> arg3 param 0)) + (v0-0 + (logxor + (-> self angle-mask) + (ash 1 a1-3) + ) + ) + ) + (set! (-> self angle-mask) v0-0) + v0-0 + ) + ) + ) + ) + ((= v1-0 'trigger) + (the-as int (when (not (-> self player-got-eco?)) + (set! (-> self player-got-eco?) #t) + (let + ((a1-5 + (new 'stack-no-clear 'event-message-block) + ) + ) + (set! (-> a1-5 from) self) + (set! (-> a1-5 num-params) 0) + (set! (-> a1-5 message) 'white-eco-picked-up) + (the-as + int + (send-event-function + (ppointer->process (-> self parent)) + a1-5 + ) + ) + ) + ) + ) + ) + ((= v1-0 'beam-off) + (the-as int (go light-eco-mother-discipate)) + ) + ) + ) + ) + ) + +(defstate light-eco-mother-appear (light-eco-mother) + :event + light-eco-mother-default-event-handler + :trans + (behavior () + (common-trans self) + (spawn (-> self part2) (-> self root trans)) + (none) + ) + :code + (behavior () + (while (!= (-> self root scale x) 12.0) + (let + ((f0-3 + (seek-with-smooth + (-> self root scale x) + 12.0 + (* 6.0 (-> *display* seconds-per-frame)) + 0.25 + 0.001 + ) + ) + ) + (set-vector! (-> self root scale) f0-3 f0-3 f0-3 1.0) + ) + (suspend) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 param 0) 1.0) + (joint-control-channel-group-eval! + a0-1 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + ) + (go light-eco-mother-active) + (none) + ) + :post + (the-as (function none :behavior light-eco-mother) ja-post) + ) + +(defstate light-eco-mother-active (light-eco-mother) + :event + light-eco-mother-default-event-handler + :trans + (behavior () + (common-trans self) + (spawn (-> self part) (-> self root trans)) + 0 + (none) + ) + :code + (behavior () + (while #t + (suspend) + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 param 0) 1.0) + (joint-control-channel-group-eval! + a0-0 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior light-eco-mother) ja-post) + ) + +(defstate light-eco-mother-discipate (light-eco-mother) + :event + light-eco-mother-default-event-handler + :trans + (behavior () + (common-trans self) + (none) + ) + :code + (behavior () + (while (!= (-> self root scale x) 0.0) + (let + ((f0-3 + (seek-with-smooth + (-> self root scale x) + 0.0 + (* 12.0 (-> *display* seconds-per-frame)) + 0.5 + 0.001 + ) + ) + ) + (set-vector! (-> self root scale) f0-3 f0-3 f0-3 1.0) + ) + (suspend) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 param 0) 1.0) + (joint-control-channel-group-eval! + a0-1 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + ) + (logior! (-> self draw status) 2) + (until (not (-> self child)) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior light-eco-mother) ja-post) + ) + +(defmethod deactivate light-eco-mother ((obj light-eco-mother)) + (if (nonzero? (-> obj part2)) + (kill-and-free-particles (-> obj part2)) + ) + ((method-of-type projectile deactivate) (the-as projectile obj)) + (none) + ) + +(defmethod relocate light-eco-mother ((obj light-eco-mother) (arg0 int)) + (if (nonzero? (-> obj part2)) + (&+! (-> obj part2) arg0) + ) + (the-as + light-eco-mother + ((method-of-type projectile relocate) (the-as projectile obj) arg0) + ) + ) + +(defbehavior + light-eco-mother-init-by-other light-eco-mother + ((arg0 entity) (arg1 vector)) + (set! (-> self entity) arg0) + (set! (-> self last-update-time) 0) + (set! (-> self last-spawned-time) (-> *display* base-frame-counter)) + (set! (-> self delay-til-spawn) 2400) + (set! (-> self angle-mask) 0) + (set! (-> self player-got-eco?) #f) + (set! (-> self root) (new 'process 'trsqv)) + (set! (-> self root trans quad) (-> arg1 quad)) + (vector-reset! (-> self root scale)) + (quaternion-identity! (-> self root quat)) + (logclear! (-> self mask) (process-mask actor-pause)) + (dummy-14 self *light-eco-big-sg* '()) + (ja-channel-set! 1) + (let ((a0-7 (-> self skel root-channel 0))) + (set! + (-> a0-7 param 0) + (the float (+ (-> a0-7 frame-group data 0 length) -1)) + ) + (set! (-> a0-7 param 1) 1.0) + (joint-control-channel-group! a0-7 (the-as art-joint-anim #f) num-func-seek!) + ) + (let ((gp-1 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-1 + (the-as art-joint-anim (-> self draw art-group data 2)) + num-func-identity + ) + (set! (-> gp-1 frame-num) 0.0) + ) + (set! + (-> self part) + (create-launch-control (-> *part-group-id-table* 691) self) + ) + (set! + (-> self part2) + (create-launch-control (-> *part-group-id-table* 690) self) + ) + (set! + (-> self sound) + (new + 'process + 'ambient-sound + (new 'static 'sound-spec + :mask #xc0 + :num 1.0 + :group #x1 + :sound-name + (new 'static 'sound-name :lo #x63652d6574696877) + :volume #x400 + :fo-min #x12c + :fo-max #x190 + ) + (-> self root trans) + ) + ) + (ja-post) + (let ((f0-4 0.0)) + (countdown (v1-33 4) + (let ((a2-4 (the int (* 0.00048828125 f0-4)))) + (logior! (-> self angle-mask) (ash 1 a2-4)) + ) + (set! f0-4 (+ 16384.0 f0-4)) + ) + ) + (go light-eco-mother-appear) + (none) + ) + + + + diff --git a/goal_src/levels/finalboss/robotboss-h.gc b/goal_src/levels/finalboss/robotboss-h.gc index 31e8dd7b35..1142afa236 100644 --- a/goal_src/levels/finalboss/robotboss-h.gc +++ b/goal_src/levels/finalboss/robotboss-h.gc @@ -7,7 +7,8 @@ (define-extern *robotboss-sg* skeleton-group) -;; definition of type robotboss-dda +;; DECOMP BEGINS + (deftype robotboss-dda (structure) ((blue-bomb-time float :offset-assert 0) (num-blobs int32 :offset-assert 4) @@ -27,27 +28,28 @@ :flag-assert #x900000030 ) -;; definition of type robotboss + (deftype robotboss (process-drawable) - ((alts entity-actor 13 :offset-assert 176) + ((root-override collide-shape-moving :offset 112) + (alts entity-actor 13 :offset-assert 176) (desired-loc vector :inline :offset-assert 240) (old-loc vector :inline :offset-assert 256) (loc-t float :offset-assert 272) - (loc-t-start seconds :offset-assert 280) - (loc-t-duration seconds :offset-assert 288) + (loc-t-start int64 :offset-assert 280) + (loc-t-duration int64 :offset-assert 288) (hits-to-go int32 :offset-assert 296) (took-hit symbol :offset-assert 300) (children-spawned int32 :offset-assert 304) - (vulnerable seconds :offset-assert 312) - (till-next-shot seconds :offset-assert 320) - (shot-attractor uint64 :offset-assert 328) + (vulnerable int64 :offset-assert 312) + (till-next-shot int64 :offset-assert 320) + (shot-attractor handle :offset-assert 328) (desired-pool-y float :offset-assert 336) (particle sparticle-launch-control 7 :offset-assert 340) - (blue-smoke basic :offset-assert 368) - (red-smoke basic :offset-assert 372) - (yellow-smoke basic :offset-assert 376) + (blue-smoke symbol :offset-assert 368) + (red-smoke symbol :offset-assert 372) + (yellow-smoke symbol :offset-assert 376) (white-eco handle :offset-assert 384) - (des-cam-entity basic :offset-assert 392) + (des-cam-entity string :offset-assert 392) (use-interesting symbol :offset-assert 396) (ignore-camera symbol :offset-assert 400) (ambient ambient-control :offset 408) @@ -64,12 +66,11 @@ :size-assert #x1d0 :flag-assert #x15001601d0 (:methods - (dummy-20 () none 20) + (ease-loc-t (_type_) float 20) ) ) -;; definition for method 7 of type robotboss -;; INFO: Return type mismatch process-drawable vs robotboss. + (defmethod relocate robotboss ((obj robotboss) (arg0 int)) (dotimes (v1-0 7) (if (nonzero? (-> obj particle v1-0)) @@ -87,7 +88,6 @@ (the-as robotboss ((method-of-type process-drawable relocate) obj arg0)) ) -;; definition for method 10 of type robotboss (defmethod deactivate robotboss ((obj robotboss)) (dotimes (s5-0 7) (let ((a0-1 (-> obj particle s5-0))) @@ -107,8 +107,6 @@ (none) ) -;; definition for function target-has-all-the-cells? -;; INFO: Return type mismatch basic vs symbol. (defun target-has-all-the-cells? () (with-pp (the-as @@ -129,7 +127,6 @@ ) ) -;; failed to figure out what this is: (let ((v0-6 (new 'static 'skeleton-group @@ -147,3 +144,7 @@ (set! (-> v0-6 lod-dist 0) 4095996000.0) (set! *robotboss-sg* v0-6) ) + + + + diff --git a/goal_src/levels/finalboss/robotboss-misc.gc b/goal_src/levels/finalboss/robotboss-misc.gc index 9036d08098..57072c1416 100644 --- a/goal_src/levels/finalboss/robotboss-misc.gc +++ b/goal_src/levels/finalboss/robotboss-misc.gc @@ -5,3 +5,893 @@ ;; name in dgo: robotboss-misc ;; dgos: FIN, L1 +(define-extern *med-res-snow1-sg* skeleton-group) +(define-extern *ecoclaw-sg* skeleton-group) +(define-extern *silodoor-sg* skeleton-group) +(define-extern *finalbosscam-sg* skeleton-group) + +(declare-type ecoclaw process-drawable) +(define-extern *ecoclaw* (pointer ecoclaw)) + +;; DECOMP BEGINS + +(let + ((v1-0 + (new 'static 'skeleton-group + :art-group-name "medres-snowback" + :bounds + (new 'static 'vector :x -1474560.0 :y 409600.0 :z 409600.0 :w 1556480.0) + :longest-edge (meters 0.01) + :version #x6 + ) + ) + ) + (set! (-> v1-0 jgeo) 0) + (set! (-> v1-0 janim) 2) + (set! (-> v1-0 mgeo 0) (the-as uint 1)) + (set! (-> v1-0 lod-dist 0) 4095996000.0) + (set! *med-res-snow1-sg* v1-0) + ) + +(defstate cam-robotboss (camera-slave) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('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) + ) + v0-0 + ) + ) + (('teleport) + #f + ) + (else + (cam-standard-event-handler arg0 arg1 arg2 arg3) + ) + ) + ) + :enter + (behavior () + (cond + ((-> self enter-has-run) + ) + (else + (set! *camera-base-mode* cam-robotboss) + (set! (-> self circular-follow quad) (-> *camera* tpos-curr-adj quad)) + (set! (-> self pivot-rad) 73728.0) + (set! (-> self blend-from-type) (the-as uint 2)) + (set! (-> self blend-to-type) (the-as uint 2)) + ) + ) + (none) + ) + :trans + (behavior () + (when (zero? (logand (-> *camera* master-options) 2)) + (set! *camera-base-mode* cam-string) + (cam-slave-go cam-free-floating) + ) + (none) + ) + :code + (behavior () + (while #t + (when #t + (let ((a2-0 (new-stack-vector0))) + (vector-! a2-0 (-> *camera* tpos-curr-adj) (-> self pivot-pt)) + (vector-! + (-> self circular-follow) + (-> self circular-follow) + (-> self pivot-pt) + ) + (v-slrp3! + (-> self circular-follow) + (-> self circular-follow) + a2-0 + (-> *camera* local-down) + (* 182.04445 (-> *display* time-adjust-ratio)) + ) + ) + (vector+! + (-> self circular-follow) + (-> self circular-follow) + (-> self pivot-pt) + ) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (vector-! gp-0 (-> self circular-follow) (-> self pivot-pt)) + (vector-flatten! gp-0 gp-0 (-> *camera* local-down)) + (let ((f0-3 (- (vector-length gp-0) (-> self pivot-rad)))) + (if (>= 0.0 f0-3) + (vector-reset! gp-0) + (vector-normalize! gp-0 f0-3) + ) + ) + (vector+! (-> self trans) gp-0 (-> self pivot-pt)) + ) + ) + (suspend) + ) + (none) + ) + ) + +(deftype ecoclaw-part-info (structure) + ((tracker handle :offset-assert 0) + (kind basic :offset-assert 8) + (trans vector :inline :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) + + +(deftype ecoclaw (process-drawable) + ((particles ecoclaw-part-info 3 :inline :offset-assert 176) + ) + :heap-base #xa0 + :method-count-assert 20 + :size-assert #x110 + :flag-assert #x1400a00110 + ) + + +(let + ((v1-4 + (new 'static 'skeleton-group + :art-group-name "ecoclaw" + :bounds + (new 'static 'vector :y 8192.0 :w 36864.0) + :version #x6 + ) + ) + ) + (set! (-> v1-4 jgeo) 0) + (set! (-> v1-4 janim) 2) + (set! (-> v1-4 mgeo 0) (the-as uint 1)) + (set! (-> v1-4 lod-dist 0) 4095996000.0) + (set! *ecoclaw-sg* v1-4) + ) + +(defun ecoclaw-beam-particle-callback ((arg0 part-tracker)) + (let* ((a0-1 (the-as (pointer projectile) (-> arg0 userdata))) + (v1-1 (-> a0-1 0 parent-base)) + (a0-3 (-> a0-1 0 base-vector)) + (gp-1 (vector-! (new 'stack-no-clear 'vector) a0-3 v1-1)) + (f30-0 (vector-y-angle gp-1)) + (f0-1 (- 16384.0 (vector-x-angle gp-1))) + ) + (set! (-> *part-id-table* 2727 init-specs 14 initial-valuef) f30-0) + (set! (-> *part-id-table* 2727 init-specs 13 initial-valuef) f0-1) + (set! (-> *part-id-table* 2729 init-specs 14 initial-valuef) f30-0) + (set! (-> *part-id-table* 2729 init-specs 13 initial-valuef) f0-1) + (set! (-> *part-id-table* 2726 init-specs 14 initial-valuef) f30-0) + (set! (-> *part-id-table* 2726 init-specs 13 initial-valuef) f0-1) + (set! (-> *part-id-table* 2720 init-specs 14 initial-valuef) f30-0) + (set! (-> *part-id-table* 2720 init-specs 13 initial-valuef) f0-1) + (set! (-> *part-id-table* 2722 init-specs 14 initial-valuef) f30-0) + (set! (-> *part-id-table* 2722 init-specs 13 initial-valuef) f0-1) + (set! (-> *part-id-table* 2719 init-specs 14 initial-valuef) f30-0) + (set! (-> *part-id-table* 2719 init-specs 13 initial-valuef) f0-1) + (set! (-> *part-id-table* 2734 init-specs 14 initial-valuef) f30-0) + (set! (-> *part-id-table* 2734 init-specs 13 initial-valuef) f0-1) + (set! (-> *part-id-table* 2736 init-specs 14 initial-valuef) f30-0) + (set! (-> *part-id-table* 2736 init-specs 13 initial-valuef) f0-1) + (set! (-> *part-id-table* 2733 init-specs 14 initial-valuef) f30-0) + (set! (-> *part-id-table* 2733 init-specs 13 initial-valuef) f0-1) + (set! (-> *part-id-table* 2741 init-specs 14 initial-valuef) f30-0) + (set! (-> *part-id-table* 2741 init-specs 13 initial-valuef) f0-1) + (set! (-> *part-id-table* 2743 init-specs 14 initial-valuef) f30-0) + (set! (-> *part-id-table* 2743 init-specs 13 initial-valuef) f0-1) + (set! (-> *part-id-table* 2740 init-specs 14 initial-valuef) f30-0) + (set! (-> *part-id-table* 2740 init-specs 13 initial-valuef) f0-1) + ) + 0 + (none) + ) + +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? +(defbehavior + ecoclaw-handler ecoclaw + ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (cond + ((= v1-0 'open) + (let ((gp-1 (-> arg3 param 0))) + (set! + (-> self particles 0 kind) + (the-as + basic + (if + (and + (nonzero? gp-1) + (type-type? (rtype-of gp-1) sparticle-launch-group) + ) + gp-1 + ) + ) + ) + ) + (set! + (-> self particles 0 trans quad) + (-> self root trans quad) + ) + (let ((f0-1 (+ 12288.0 (-> self particles 0 trans y)))) + (set! (-> self particles 0 trans y) f0-1) + f0-1 + ) + ) + ((= v1-0 'beam-on) + (let ((s5-0 (-> arg3 param 0))) + (set! + (-> self particles 1 kind) + (the-as + basic + (if + (and + (nonzero? s5-0) + (type-type? (rtype-of s5-0) sparticle-launch-group) + ) + s5-0 + ) + ) + ) + ) + (set! + (-> self particles 1 trans quad) + (-> self root trans quad) + ) + (set! + (-> self particles 1 trans y) + (+ 24576.0 (-> self particles 1 trans y)) + ) + (let ((s5-1 (-> arg3 param 1))) + (set! + (-> self particles 2 kind) + (the-as + basic + (if + (and + (nonzero? s5-1) + (type-type? (rtype-of s5-1) sparticle-launch-group) + ) + s5-1 + ) + ) + ) + ) + (set! + (-> self particles 2 trans quad) + (-> (the-as vector (-> arg3 param 2)) quad) + ) + (let ((f0-5 (+ 81920.0 (-> self particles 2 trans y)))) + (set! (-> self particles 2 trans y) f0-5) + f0-5 + ) + ) + ((= v1-0 'beam-off) + (set! (-> self particles 1 kind) #f) + (set! (-> self particles 2 kind) #f) + (let + ((a0-10 (handle->process (-> self particles 1 tracker)))) + (if a0-10 + (deactivate a0-10) + ) + ) + (let + ((a0-14 (handle->process (-> self particles 2 tracker)))) + (if a0-14 + (deactivate a0-14) + ) + ) + ) + ) + ) + ) + ) + +(defstate ecoclaw-activate (ecoclaw) + :event + ecoclaw-handler + :trans + (behavior () + (if (-> self particles 1 kind) + (draw-eco-beam + (the-as vector (&-> self stack 112)) + (the-as vector (&-> self stack 144)) + ) + ) + (dotimes (gp-0 2) + (cond + ((handle->process (-> self particles gp-0 tracker)) + (set! + (-> + (the-as part-tracker (-> self particles gp-0 tracker process 0)) + start-time + ) + (the-as uint (-> *display* base-frame-counter)) + ) + ) + ((-> self particles gp-0 kind) + (let ((s5-0 (get-process *default-dead-pool* part-tracker #x4000))) + (set! (-> self particles gp-0 tracker) (ppointer->handle (when s5-0 + (let + ((t9-2 + (method-of-type + part-tracker + activate + ) + ) + ) + (t9-2 + (the-as + part-tracker + s5-0 + ) + self + 'part-tracker + (the-as + pointer + #x70004000 + ) + ) + ) + (run-now-in-process + s5-0 + part-tracker-init + (-> + self + particles + gp-0 + kind + ) + -1 + ecoclaw-beam-particle-callback + (-> + self + ppointer + ) + #f + (&+ + (&-> + self + stack + 80 + ) + (* gp-0 32) + ) + ) + (-> + s5-0 + ppointer + ) + ) + ) + ) + ) + ) + ) + ) + (none) + ) + :code + (behavior () + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-0 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-0 param 1) 1.0) + (set! (-> a0-0 frame-num) 0.0) + (joint-control-channel-group! a0-0 (if (> (-> self skel active-channels) 0) + (-> + self + skel + root-channel + 0 + frame-group + ) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-1 (-> self skel root-channel 0))) + (set! + (-> a0-1 param 0) + (the float (+ (-> a0-1 frame-group data 0 length) -1)) + ) + (set! (-> a0-1 param 1) 1.0) + (joint-control-channel-group-eval! + a0-1 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (while #t + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior ecoclaw) ja-post) + ) + +(defstate ecoclaw-idle (ecoclaw) + :event + ecoclaw-handler + :code + (behavior () + (while #t + (if (-> self particles 0 kind) + (go ecoclaw-activate) + ) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior ecoclaw) ja-post) + ) + +(defmethod copy-defaults! ecoclaw ((obj ecoclaw) (arg0 res-lump)) + (set! (-> obj root) (new 'process 'trsqv)) + (process-drawable-from-entity! obj arg0) + (dummy-14 obj *ecoclaw-sg* '()) + (dotimes (v1-3 3) + (set! (-> obj particles v1-3 kind) #f) + (set! (-> obj particles v1-3 tracker) (the-as handle #f)) + ) + (set! *ecoclaw* (the-as (pointer ecoclaw) (process->ppointer obj))) + (go ecoclaw-idle) + (none) + ) + +(deftype silodoor (process-drawable) + ((part-opened float :offset-assert 176) + ) + :heap-base #x50 + :method-count-assert 22 + :size-assert #xb4 + :flag-assert #x16005000b4 + (:methods + (idle () _type_ :state 20) + (hidden () _type_ :state 21) + ) + ) + + +(let + ((v1-10 + (new 'static 'skeleton-group + :art-group-name "silodoor" + :bounds (new 'static 'vector :w 102400.0) + :version #x6 + ) + ) + ) + (set! (-> v1-10 jgeo) 0) + (set! (-> v1-10 janim) 2) + (set! (-> v1-10 mgeo 0) (the-as uint 1)) + (set! (-> v1-10 lod-dist 0) 4095996000.0) + (set! *silodoor-sg* v1-10) + ) + +(defstate idle (silodoor) + :virtual #t + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (cond + ((= v1-0 'open) + (let ((f0-0 (the-as float (-> arg3 param 0)))) + (set! (-> self part-opened) f0-0) + f0-0 + ) + ) + ((= v1-0 'hide) + (go-virtual hidden) + ) + ) + ) + ) + ) + :trans + (the-as (function none :behavior silodoor) rider-trans) + :code + (behavior () + (while #t + (when (not (movie?)) + (let ((gp-0 (-> self skel root-channel 0))) + (set! + (-> gp-0 param 0) + (* (-> self part-opened) (the float (ja-num-frames 0))) + ) + (set! (-> gp-0 param 1) 0.01) + (joint-control-channel-group-eval! + gp-0 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (cond + ((< + 0.01 + (fabs + (- + (* (-> self part-opened) (the float (ja-num-frames 0))) + (ja-aframe-num 0) + ) + ) + ) + (if (nonzero? (-> self sound)) + (update! (-> self sound)) + ) + ) + ((nonzero? (-> self sound)) + (stop! (-> self sound)) + ) + ) + ) + (suspend) + ) + (none) + ) + :post + (behavior () + (if + (and + (< (vector-vector-xz-distance (target-pos 0) (-> self root trans)) 57344.0) + (not (ja-min? 0)) + ) + (rider-post) + (transform-post) + ) + (none) + ) + ) + +(defstate hidden (silodoor) + :virtual #t + :code + (behavior () + (if (nonzero? (-> self sound)) + (stop! (-> self sound)) + ) + (logior! (-> self draw status) 2) + (ja-post) + (while + (not + (task-closed? (game-task finalboss-movies) (task-status need-reminder-a)) + ) + (suspend) + ) + (set! (-> self draw status) (logand -3 (-> self draw status))) + (let ((v1-12 (-> self skel root-channel 0))) + (set! (-> v1-12 num-func) num-func-identity) + (set! (-> v1-12 frame-num) 0.0) + ) + (set! (-> self part-opened) 0.0) + (go-virtual idle) + (none) + ) + ) + +(defmethod copy-defaults! silodoor ((obj silodoor) (arg0 res-lump)) + (let + ((s4-0 + (new + 'process + 'collide-shape-moving + obj + (collide-list-enum usually-hit-by-player) + ) + ) + ) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) default-collision-reaction) + (set! (-> s4-0 no-reaction) nothing) + (dummy-29 s4-0 1) + (let ((s3-0 (new 'process 'collide-shape-prim-group s4-0 (the-as uint 4) 0))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 2048)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 3)) + (set! (-> s3-0 transform-index) 0) + (set-vector! (-> s3-0 local-sphere) 0.0 0.0 0.0 102400.0) + (dummy-46 s4-0) + (let + ((s2-0 + (new + 'process + 'collide-shape-prim-mesh + s4-0 + (the-as uint 0) + (the-as uint 0) + ) + ) + ) + (set! (-> s2-0 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-0 collide-with) (the-as uint 16)) + (set! (-> s2-0 prim-core action) (the-as uint 19)) + (set! (-> s2-0 prim-core offense) 4) + (set! (-> s2-0 transform-index) 5) + (set-vector! (-> s2-0 local-sphere) 0.0 0.0 0.0 102400.0) + ) + (dummy-28 s3-0) + (let + ((s2-1 + (new + 'process + 'collide-shape-prim-mesh + s4-0 + (the-as uint 1) + (the-as uint 0) + ) + ) + ) + (set! (-> s2-1 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-1 collide-with) (the-as uint 16)) + (set! (-> s2-1 prim-core action) (the-as uint 19)) + (set! (-> s2-1 prim-core offense) 4) + (set! (-> s2-1 transform-index) 4) + (set-vector! (-> s2-1 local-sphere) 0.0 0.0 0.0 102400.0) + ) + (dummy-28 s3-0) + (let + ((s2-2 + (new + 'process + 'collide-shape-prim-mesh + s4-0 + (the-as uint 2) + (the-as uint 0) + ) + ) + ) + (set! (-> s2-2 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-2 collide-with) (the-as uint 16)) + (set! (-> s2-2 prim-core action) (the-as uint 19)) + (set! (-> s2-2 prim-core offense) 4) + (set! (-> s2-2 transform-index) 7) + (set-vector! (-> s2-2 local-sphere) 0.0 0.0 0.0 102400.0) + ) + (dummy-28 s3-0) + (let + ((s2-3 + (new + 'process + 'collide-shape-prim-mesh + s4-0 + (the-as uint 3) + (the-as uint 0) + ) + ) + ) + (set! (-> s2-3 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-3 collide-with) (the-as uint 16)) + (set! (-> s2-3 prim-core action) (the-as uint 19)) + (set! (-> s2-3 prim-core offense) 4) + (set! (-> s2-3 transform-index) 6) + (set-vector! (-> s2-3 local-sphere) 0.0 0.0 0.0 102400.0) + ) + (dummy-28 s3-0) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (dummy-50 s4-0) + (set! (-> obj root) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (dummy-14 obj *silodoor-sg* '()) + (logior! (-> obj skel status) 1) + (set! (-> obj root pause-adjust-distance) 1228800.0) + (set! + (-> obj sound) + (new + 'process + 'ambient-sound + (new 'static 'sound-spec + :mask #x80 + :num 1.0 + :group #x1 + :sound-name + (new 'static 'sound-name :lo #x766f6d2d6f6c6973) + :volume #x400 + :fo-max 80 + ) + (-> obj root trans) + ) + ) + (logclear! (-> obj mask) (process-mask actor-pause crate enemy attackable)) + (set! (-> obj part-opened) 0.0) + (go (method-of-object obj idle)) + (none) + ) + +(deftype finalbosscam (process-taskable) + ((robotboss handle :offset-assert 384) + ) + :heap-base #x120 + :method-count-assert 53 + :size-assert #x188 + :flag-assert #x3501200188 + ) + + +(let + ((v1-17 + (new 'static 'skeleton-group + :art-group-name "finalbosscam" + :bounds (new 'static 'vector :w 16384.0) + :version #x6 + ) + ) + ) + (set! (-> v1-17 jgeo) 0) + (set! (-> v1-17 janim) 2) + (set! (-> v1-17 mgeo 0) (the-as uint 1)) + (set! (-> v1-17 lod-dist 0) 4095996000.0) + (set! *finalbosscam-sg* v1-17) + ) + +(defbehavior robotboss-manipy-trans-hook robotboss () + (let ((gp-0 (new 'stack-no-clear 'vector))) + (vector<-cspace! gp-0 (-> self node-list data 7)) + (spawn (-> self part) gp-0) + ) + 0 + (none) + ) + +(defmethod play-anim! finalbosscam ((obj finalbosscam) (arg0 symbol)) + (with-pp + (when arg0 + (let ((s5-0 (get-process *default-dead-pool* manipy #x4000))) + (set! (-> obj robotboss) (ppointer->handle (when s5-0 + (let + ((t9-1 + (method-of-type + manipy + activate + ) + ) + ) + (t9-1 + (the-as manipy s5-0) + obj + 'manipy + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + s5-0 + manipy-init + (-> obj root-override trans) + (-> obj entity) + *robotboss-sg* + #f + ) + (-> s5-0 ppointer) + ) + ) + ) + ) + (let ((a1-4 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-4 from) pp) + (set! (-> a1-4 num-params) 1) + (set! (-> a1-4 message) 'anim-mode) + (set! (-> a1-4 param 0) (the-as uint 'clone-anim)) + (send-event-function (handle->process (-> obj robotboss)) a1-4) + ) + (let ((a1-5 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-5 from) pp) + (set! (-> a1-5 num-params) 1) + (set! (-> a1-5 message) 'center-joint) + (set! (-> a1-5 param 0) (the-as uint 3)) + (send-event-function (handle->process (-> obj robotboss)) a1-5) + ) + (let ((a1-6 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-6 from) pp) + (set! (-> a1-6 num-params) 1) + (set! (-> a1-6 message) 'origin-joint-index) + (set! (-> a1-6 param 0) (the-as uint 3)) + (send-event-function (handle->process (-> obj robotboss)) a1-6) + ) + (let ((a1-7 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-7 from) pp) + (set! (-> a1-7 num-params) 1) + (set! (-> a1-7 message) 'trans-hook) + (set! (-> a1-7 param 0) (the-as uint robotboss-manipy-trans-hook)) + (send-event-function (handle->process (-> obj robotboss)) a1-7) + ) + (let ((a1-8 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-8 from) pp) + (set! (-> a1-8 num-params) 1) + (set! (-> a1-8 message) 'eval) + (set! + (-> a1-8 param 0) + (the-as + uint + (lambda :behavior finalbosscam + () + (let + ((v0-0 (create-launch-control (-> *part-group-id-table* 645) self))) + (set! (-> self part) v0-0) + v0-0 + ) + ) + ) + ) + (send-event-function (handle->process (-> obj robotboss)) a1-8) + ) + (let ((v1-43 (handle->process (-> obj robotboss)))) + (if v1-43 + (set! (-> (the-as robotboss v1-43) draw bounds w) 327680.0) + ) + ) + ) + (the-as + basic + (new 'static 'spool-anim + :name "finalbosscam-white-eco" + :index 3 + :parts 3 + :command-list '() + ) + ) + ) + ) + +(defmethod get-art-elem finalbosscam ((obj finalbosscam)) + (-> obj draw art-group data 2) + ) + +(defmethod should-display? finalbosscam ((obj finalbosscam)) + #f + ) + +(defstate play-anim (finalbosscam) + :virtual #t + :exit + (behavior () + (let ((a0-1 (handle->process (-> self robotboss)))) + (if a0-1 + (deactivate a0-1) + ) + ) + ((-> (method-of-type process-taskable play-anim) exit)) + (none) + ) + ) + +(defbehavior finalbosscam-init-by-other finalbosscam ((arg0 entity)) + (set! (-> self entity) arg0) + (dummy-40 self arg0 *finalbosscam-sg* 4 4 (new 'static 'vector :w 4096.0) 4) + (set! (-> self tasks) (get-task-control (game-task finalboss-movies))) + (set! (-> self robotboss) (the-as handle #f)) + (go-virtual hidden) + (none) + ) + + + + diff --git a/goal_src/levels/finalboss/robotboss-weapon.gc b/goal_src/levels/finalboss/robotboss-weapon.gc index 6762f1b49a..d1ddfda902 100644 --- a/goal_src/levels/finalboss/robotboss-weapon.gc +++ b/goal_src/levels/finalboss/robotboss-weapon.gc @@ -5,3 +5,1543 @@ ;; name in dgo: robotboss-weapon ;; dgos: FIN, L1 +(define-extern *darkecobomb-sg* skeleton-group) +(define-extern *greenshot-sg* skeleton-group) +(define-extern *redring-sg* skeleton-group) + +;; DECOMP BEGINS + +(deftype torus (structure) + ((origin vector :inline :offset-assert 0) + (axis vector :inline :offset-assert 16) + (radius-primary float :offset-assert 32) + (radius-secondary float :offset-assert 36) + ) + :method-count-assert 13 + :size-assert #x28 + :flag-assert #xd00000028 + (:methods + (dummy-9 (_type_ vector) none 9) + (dummy-10 (_type_ vector vector) symbol 10) + (dummy-11 (_type_ vector) symbol 11) + (dummy-12 (_type_ vector) none 12) + ) + ) + + +(defmethod dummy-10 torus ((obj torus) (arg0 vector) (arg1 vector)) + (let ((gp-0 (new 'stack-no-clear 'vector)) + (s5-0 (new 'stack-no-clear 'vector)) + (f30-0 (+ (-> obj radius-secondary) (-> arg0 w))) + ) + (vector-! gp-0 arg0 (-> obj origin)) + (vector-flatten! s5-0 gp-0 (-> obj axis)) + (vector-normalize! s5-0 (-> obj radius-primary)) + (vector-! arg1 gp-0 s5-0) + (< (vector-length-squared arg1) (* f30-0 f30-0)) + ) + ) + +(defmethod dummy-11 torus ((obj torus) (arg0 vector)) + (let + ((s4-0 (the-as collide-shape-prim-group (-> *target* control root-prim)))) + (when + (and + (logtest? (-> s4-0 prim-core collide-as) 16) + (dummy-10 obj (the-as vector (-> s4-0 prim-core)) arg0) + ) + (countdown (s3-0 (-> s4-0 num-prims)) + (let ((v1-9 (-> s4-0 prims s3-0))) + (if + (and + (logtest? (-> v1-9 prim-core action) 1) + (logtest? (-> v1-9 prim-core collide-as) 16) + (dummy-10 obj (the-as vector (-> v1-9 prim-core)) arg0) + ) + (return #t) + ) + ) + ) + ) + ) + #f + ) + +(deftype torus-verts (structure) + ((vert vector 8 :inline :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #x80 + :flag-assert #x900000080 + ) + + +(defmethod dummy-9 torus ((obj torus) (arg0 vector)) + (local-vars (sv-256 int) (sv-272 int) (sv-288 int)) + (let ((s0-0 (new 'stack-no-clear 'vector)) + (s4-0 (new 'stack-no-clear 'vector)) + (s3-0 (new 'stack-no-clear 'vector)) + (s2-0 (new 'stack-no-clear 'matrix)) + (s1-0 (new 'stack-no-clear 'inline-array 'vector 8)) + ) + (set-vector! s0-0 0.0 0.0 1.0 1.0) + (vector-flatten! s0-0 s0-0 (-> obj axis)) + (if (= (vector-normalize-ret-len! s0-0 1.0) 0.0) + (set-vector! s0-0 0.0 1.0 0.0 1.0) + ) + (vector-cross! s4-0 s0-0 (-> obj axis)) + (matrix-axis-angle! s2-0 s4-0 8192.0) + (vector-float*! (-> s1-0 0) s0-0 (-> obj radius-secondary)) + (set! sv-256 0) + (while (< sv-256 7) + (vector-matrix*! (-> s1-0 (+ sv-256 1)) (-> s1-0 sv-256) s2-0) + (set! sv-256 (+ sv-256 1)) + ) + (vector-float*! s0-0 s0-0 (-> obj radius-primary)) + (dotimes (v1-21 8) + (vector+! (-> s1-0 v1-21) (-> s1-0 v1-21) s0-0) + ) + (matrix-axis-angle! s2-0 (-> obj axis) 4096.0) + (dotimes (s0-1 16) + (set! sv-272 0) + (while (< sv-272 7) + (vector+! s4-0 (-> s1-0 sv-272) (-> obj origin)) + (vector+! s3-0 (-> s1-0 (+ sv-272 1)) (-> obj origin)) + (camera-line s4-0 s3-0 arg0) + (set! sv-272 (+ sv-272 1)) + ) + (vector+! s4-0 (-> s1-0 0) (-> obj origin)) + (camera-line s4-0 s3-0 arg0) + (set! sv-288 0) + (while (< sv-288 8) + (vector+! s4-0 (-> s1-0 sv-288) (-> obj origin)) + (vector-matrix*! (-> s1-0 sv-288) (-> s1-0 sv-288) s2-0) + (vector+! s3-0 (-> s1-0 sv-288) (-> obj origin)) + (camera-line s4-0 s3-0 arg0) + (set! sv-288 (+ sv-288 1)) + ) + ) + ) + 0 + (none) + ) + +(defmethod dummy-12 torus ((obj torus) (arg0 vector)) + (let* ((f30-0 65536.0) + (v1-1 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-2 (the-as number (logior #x3f800000 v1-1))) + (f30-1 (* f30-0 (+ -1.0 (the-as float v1-2)))) + ) + (set! (-> arg0 x) 0.0) + (set! (-> arg0 y) (* (-> obj radius-secondary) (sin f30-1))) + (set! (-> arg0 z) (* (-> obj radius-secondary) (cos f30-1))) + ) + (+! (-> arg0 z) (-> obj radius-primary)) + (set! (-> arg0 w) 0.0) + (let ((s2-0 (new 'stack-no-clear 'matrix))) + (let* ((s4-0 matrix-rotate-y!) + (s3-0 s2-0) + (f30-2 65536.0) + (v1-6 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-7 (the-as number (logior #x3f800000 v1-6))) + ) + (s4-0 s3-0 (* f30-2 (+ -1.0 (the-as float v1-7)))) + ) + (vector-matrix*! arg0 arg0 s2-0) + (matrix-from-two-vectors! + s2-0 + (new 'static 'vector :y 1.0 :w 1.0) + (-> obj axis) + ) + (vector-matrix*! arg0 arg0 s2-0) + ) + (vector+! arg0 arg0 (-> obj origin)) + (none) + ) + +(deftype arcing-shot (process-drawable) + ((y-vel float :offset-assert 176) + (grav float :offset-assert 180) + (from vector :inline :offset-assert 192) + (to vector :inline :offset-assert 208) + ) + :heap-base #x70 + :method-count-assert 20 + :size-assert #xe0 + :flag-assert #x14007000e0 + ) + + +(defbehavior + arcing-shot-setup arcing-shot + ((arg0 vector) (arg1 vector) (arg2 float)) + (set! (-> self from quad) (-> arg0 quad)) + (set! (-> self to quad) (-> arg1 quad)) + (let ((v1-2 (fmax 1.0 arg2))) + (if (< (-> arg0 y) (-> arg1 y)) + (set! v1-2 (+ v1-2 (- (-> arg1 y) (-> arg0 y)))) + ) + (let ((f0-6 (* -4.0 v1-2)) + (f3-1 (* 4.0 v1-2 (- (-> arg1 y) (-> arg0 y)))) + ) + (set! + (-> self y-vel) + (* 0.5 (- (sqrtf (- (* f0-6 f0-6) (* 4.0 f3-1))) f0-6)) + ) + ) + (set! + (-> self grav) + (/ (- (* (-> self y-vel) (-> self y-vel))) (* 2.0 v1-2)) + ) + ) + (none) + ) + +(defbehavior arcing-shot-calculate arcing-shot ((arg0 vector) (arg1 float)) + (let ((s5-0 (fmin 1.0 (fmax 0.0 arg1)))) + (vector-lerp! arg0 (-> self from) (-> self to) s5-0) + (set! (-> arg0 y) (-> self from y)) + (+! (-> arg0 y) (* (-> self y-vel) s5-0)) + (+! (-> arg0 y) (* 0.5 s5-0 s5-0 (-> self grav))) + ) + (none) + ) + +(defbehavior arcing-shot-draw arcing-shot () + (let ((gp-0 (new 'stack-no-clear 'vector)) + (s5-0 (new 'stack-no-clear 'vector)) + ) + (set! (-> s5-0 quad) (-> self from quad)) + (dotimes (s4-0 30) + (arcing-shot-calculate gp-0 (* 0.033333335 (the float (+ s4-0 1)))) + (camera-line + gp-0 + s5-0 + (the-as + vector + (new 'static 'vector4w + :data + (new 'static 'array int32 4 #xff #xff 0 #x80) + ) + ) + ) + (set! (-> s5-0 quad) (-> gp-0 quad)) + ) + ) + #f + ) + +(defstate arcing-shot-debug-trajectory (arcing-shot) + :trans + (behavior () + (arcing-shot-setup (camera-pos) (-> self entity extra trans) 40960.0) + (arcing-shot-draw) + (none) + ) + :code + (behavior () + (while #t + (format *stdcon* "debug trajectory~%") + (suspend) + ) + (none) + ) + ) + +(deftype darkecobomb (arcing-shot) + ((flight-time int64 :offset-assert 224) + (countdown-time float :offset-assert 232) + (anim-speed float :offset-assert 236) + (next-tick float :offset-assert 240) + ) + :heap-base #x90 + :method-count-assert 20 + :size-assert #xf4 + :flag-assert #x14009000f4 + ) + + +(let + ((v1-8 + (new 'static 'skeleton-group + :art-group-name "darkecobomb" + :bounds + (new 'static 'vector :y 14336.0 :w 24576.0) + :version #x6 + ) + ) + ) + (set! (-> v1-8 jgeo) 0) + (set! (-> v1-8 janim) 2) + (set! (-> v1-8 mgeo 0) (the-as uint 1)) + (set! (-> v1-8 lod-dist 0) 4095996000.0) + (set! *darkecobomb-sg* v1-8) + ) + +(defstate darkecobomb-explode (darkecobomb) + :code + (behavior ((arg0 symbol)) + (let ((a1-0 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-0 from) self) + (set! (-> a1-0 num-params) 1) + (set! (-> a1-0 message) 'reset-pickup) + (set! (-> a1-0 param 0) (the-as uint 'eco)) + (send-event-function *target* a1-0) + ) + (sound-play-by-name + (static-sound-name "explod-bomb") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #f) + ) + (activate! *camera-smush-control* 819.2 37 600 1.0 0.995) + (let ((a1-3 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-3 from) self) + (set! (-> a1-3 num-params) 1) + (set! (-> a1-3 message) 'flash) + (set! (-> a1-3 param 0) (the-as uint 255.0)) + (send-event-function (ppointer->process (-> self parent)) a1-3) + ) + (let ((s5-1 (get-process *default-dead-pool* part-tracker #x4000))) + (when s5-1 + (let ((t9-6 (method-of-type part-tracker activate))) + (t9-6 + (the-as part-tracker s5-1) + *entity-pool* + 'part-tracker + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + s5-1 + part-tracker-init + (-> *part-group-id-table* 619) + 900 + #f + #f + #f + (-> self root trans) + ) + (-> s5-1 ppointer) + ) + ) + (logior! (-> self draw status) 2) + (cond + ((or + arg0 + (and + *target* + (< (-> (target-pos 0) y) (+ 40960.0 (-> self entity extra trans y))) + ) + ) + (if *target* + (logior! (-> *target* mask) (process-mask sleep)) + ) + (let ((a1-7 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-7 from) self) + (set! (-> a1-7 num-params) 0) + (set! (-> a1-7 message) 'bomb-going) + (send-event-function (ppointer->process (-> self parent)) a1-7) + ) + (let ((a1-8 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-8 from) self) + (set! (-> a1-8 num-params) 1) + (set! (-> a1-8 message) 'change-to-entity-by-name) + (set! (-> a1-8 param 0) (the-as uint "camera-402")) + (send-event-function *camera* a1-8) + ) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 600) + (suspend) + ) + (let ((a1-9 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-9 from) self) + (set! (-> a1-9 num-params) 1) + (set! (-> a1-9 message) 'force-blend) + (set! (-> a1-9 param 0) (the-as uint 0)) + (send-event-function *camera* a1-9) + ) + (let ((a1-10 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-10 from) self) + (set! (-> a1-10 num-params) 1) + (set! (-> a1-10 message) 'change-state) + (set! (-> a1-10 param 0) (the-as uint *camera-base-mode*)) + (send-event-function *camera* a1-10) + ) + (let ((a1-11 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-11 from) self) + (set! (-> a1-11 num-params) 0) + (set! (-> a1-11 message) 'clear-entity) + (send-event-function *camera* a1-11) + ) + (if *target* + (logclear! (-> *target* mask) (process-mask sleep)) + ) + (let ((a1-12 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-12 from) self) + (set! (-> a1-12 num-params) 2) + (set! (-> a1-12 message) 'attack-invinc) + (set! (-> a1-12 param 0) (the-as uint #f)) + (let ((a0-21 (new 'static 'attack-info :mask #x20))) + (set! (-> a0-21 mode) 'instant-death) + (set! (-> a1-12 param 1) (the-as uint a0-21)) + ) + (send-event-function *target* a1-12) + ) + ) + (else + (let ((a1-13 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-13 from) self) + (set! (-> a1-13 num-params) 0) + (set! (-> a1-13 message) 'bomb-done) + (send-event-function (ppointer->process (-> self parent)) a1-13) + ) + ) + ) + (deactivate self) + (none) + ) + :post + (the-as (function none :behavior darkecobomb) ja-post) + ) + +(defbehavior + darkecobomb-handler darkecobomb + ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (if (or (= v1-0 'touch) (= v1-0 'attack)) + (go darkecobomb-explode #t) + ) + ) + ) + ) + +(defbehavior darkecobomb-explode-if-player-high-enough darkecobomb () + (if + (and + (not (movie?)) + *target* + (< (+ 409600.0 (-> self entity extra trans y)) (-> (target-pos 0) y)) + ) + (go darkecobomb-explode #f) + ) + (none) + ) + +(defstate darkecobomb-countdown (darkecobomb) + :event + darkecobomb-handler + :enter + (behavior () + (set! (-> self state-time) (-> *display* game-frame-counter)) + (set! (-> self next-tick) 0.9) + (none) + ) + :exit + (behavior () + (stop! (-> self sound)) + (none) + ) + :trans + (behavior () + (darkecobomb-explode-if-player-high-enough) + (let + ((f0-1 + (fmax + 0.0 + (/ + (- + (-> self countdown-time) + (the float (- (-> *display* game-frame-counter) (-> self state-time))) + ) + (-> self countdown-time) + ) + ) + ) + ) + (let ((f1-5 (* (- 1.0 f0-1) (- 1.0 f0-1)))) + (set! (-> self anim-speed) (+ 1.0 f1-5)) + ) + (when (< (cos (* 16384.0 (- 1.0 f0-1))) (-> self next-tick)) + (let ((gp-0 (get-process *default-dead-pool* part-tracker #x4000))) + (when gp-0 + (let ((t9-3 (method-of-type part-tracker activate))) + (t9-3 + (the-as part-tracker gp-0) + *entity-pool* + 'part-tracker + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + gp-0 + part-tracker-init + (-> *part-group-id-table* 663) + 150 + #f + #f + #f + (-> self root trans) + ) + (-> gp-0 ppointer) + ) + ) + (set! (-> self next-tick) (+ -0.06 (-> self next-tick))) + (sound-play-by-name + (static-sound-name "robo-warning") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + ) + ) + (if + (>= + (- (-> *display* game-frame-counter) (-> self state-time)) + (the int (-> self countdown-time)) + ) + (go darkecobomb-explode #f) + ) + (when (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 5) + ) + (let ((gp-2 (new 'stack-no-clear 'vector))) + (vector<-cspace! gp-2 (-> self node-list data 5)) + (spawn (-> self part) gp-2) + ) + ) + (none) + ) + :code + (behavior () + (sound-play-by-name + (static-sound-name "bomb-open") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + (let ((a0-2 (-> self skel root-channel 0))) + (set! + (-> a0-2 frame-group) + (the-as art-joint-anim (-> self draw art-group data 4)) + ) + (set! + (-> a0-2 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 4)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-2 param 1) 1.0) + (set! (-> a0-2 frame-num) 0.0) + (joint-control-channel-group! + a0-2 + (the-as art-joint-anim (-> self draw art-group data 4)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-3 (-> self skel root-channel 0))) + (set! + (-> a0-3 param 0) + (the float (+ (-> a0-3 frame-group data 0 length) -1)) + ) + (set! (-> a0-3 param 1) 1.0) + (joint-control-channel-group-eval! + a0-3 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (while #t + (let ((a0-5 (-> self skel root-channel 0))) + (set! + (-> a0-5 frame-group) + (the-as art-joint-anim (-> self draw art-group data 5)) + ) + (set! + (-> a0-5 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 5)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-5 param 1) (-> self anim-speed)) + (set! (-> a0-5 frame-num) 0.0) + (joint-control-channel-group! + a0-5 + (the-as art-joint-anim (-> self draw art-group data 5)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (update! (-> self sound)) + (suspend) + (let ((a0-7 (-> self skel root-channel 0))) + (set! + (-> a0-7 param 0) + (the float (+ (-> a0-7 frame-group data 0 length) -1)) + ) + (set! (-> a0-7 param 1) (-> self anim-speed)) + (joint-control-channel-group-eval! + a0-7 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior darkecobomb) transform-post) + ) + +(defstate darkecobomb-land (darkecobomb) + :event + darkecobomb-handler + :enter + (behavior () + (set! (-> self state-time) (-> *display* game-frame-counter)) + 0 + (none) + ) + :trans + (behavior () + (darkecobomb-explode-if-player-high-enough) + (if (>= (- (-> *display* game-frame-counter) (-> self state-time)) 150) + (go darkecobomb-countdown) + ) + (none) + ) + :code + (behavior () + (let ((a0-0 (-> self skel root-channel 0))) + (set! + (-> a0-0 param 0) + (the float (+ (-> a0-0 frame-group data 0 length) -1)) + ) + (set! (-> a0-0 param 1) 1.0) + (joint-control-channel-group! + a0-0 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (while (not (ja-done? 0)) + (suspend) + (ja-eval) + ) + (while #t + (let ((a0-2 (-> self skel root-channel 0))) + (set! + (-> a0-2 frame-group) + (the-as art-joint-anim (-> self draw art-group data 2)) + ) + (set! + (-> a0-2 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 2)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-2 param 1) 1.0) + (set! (-> a0-2 frame-num) 0.0) + (joint-control-channel-group! + a0-2 + (the-as art-joint-anim (-> self draw art-group data 2)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-3 (-> self skel root-channel 0))) + (set! + (-> a0-3 param 0) + (the float (+ (-> a0-3 frame-group data 0 length) -1)) + ) + (set! (-> a0-3 param 1) 1.0) + (joint-control-channel-group-eval! + a0-3 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior darkecobomb) transform-post) + ) + +(defstate darkecobomb-idle (darkecobomb) + :enter + (behavior () + (set! (-> self state-time) (-> *display* game-frame-counter)) + (none) + ) + :trans + (behavior () + (arcing-shot-calculate + (-> self root trans) + (/ + (the float (- (-> *display* game-frame-counter) (-> self state-time))) + (the float (-> self flight-time)) + ) + ) + (if + (>= + (- (-> *display* game-frame-counter) (-> self state-time)) + (-> self flight-time) + ) + (go darkecobomb-land) + ) + (none) + ) + :code + (behavior () + (let ((a0-0 (-> self skel root-channel 0))) + (set! + (-> a0-0 frame-group) + (the-as art-joint-anim (-> self draw art-group data 3)) + ) + (set! + (-> a0-0 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 3)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-0 param 1) 1.0) + (set! (-> a0-0 frame-num) 0.0) + (joint-control-channel-group! + a0-0 + (the-as art-joint-anim (-> self draw art-group data 3)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-1 (-> self skel root-channel 0))) + (set! + (-> a0-1 param 0) + (the float (+ (-> a0-1 frame-group data 0 length) -1)) + ) + (set! (-> a0-1 param 1) 1.0) + (joint-control-channel-group-eval! + a0-1 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (while #t + (let ((a0-3 (-> self skel root-channel 0))) + (set! + (-> a0-3 frame-group) + (the-as art-joint-anim (-> self draw art-group data 2)) + ) + (set! + (-> a0-3 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 2)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-3 param 1) 1.0) + (set! (-> a0-3 frame-num) 0.0) + (joint-control-channel-group! + a0-3 + (the-as art-joint-anim (-> self draw art-group data 2)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-4 (-> self skel root-channel 0))) + (set! + (-> a0-4 param 0) + (the float (+ (-> a0-4 frame-group data 0 length) -1)) + ) + (set! (-> a0-4 param 1) 1.0) + (joint-control-channel-group-eval! + a0-4 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior darkecobomb) transform-post) + ) + +(defbehavior + darkecobomb-init-by-other darkecobomb + ((arg0 vector) (arg1 vector) (arg2 float) (arg3 int) (arg4 float)) + (let + ((s1-0 + (new + 'process + 'collide-shape-moving + self + (collide-list-enum usually-hit-by-player) + ) + ) + ) + (set! (-> s1-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s1-0 reaction) default-collision-reaction) + (set! (-> s1-0 no-reaction) nothing) + (let ((s0-0 (new 'process 'collide-shape-prim-sphere s1-0 (the-as uint 0)))) + (set! (-> s0-0 prim-core collide-as) (the-as uint 512)) + (set! (-> s0-0 collide-with) (the-as uint 16)) + (set! (-> s0-0 prim-core action) (the-as uint 1)) + (set! (-> s0-0 prim-core offense) 4) + (set! (-> s0-0 transform-index) 3) + (set-vector! (-> s0-0 local-sphere) 0.0 0.0 0.0 16384.0) + ) + (dummy-46 s1-0) + (set! (-> s1-0 nav-radius) (* 0.75 (-> s1-0 root-prim local-sphere w))) + (dummy-50 s1-0) + (set! (-> self root) s1-0) + ) + (set! (-> self root trans quad) (-> arg0 quad)) + (dummy-14 self *darkecobomb-sg* '()) + (logclear! (-> self mask) (process-mask actor-pause)) + (set! + (-> self part) + (create-launch-control (-> *part-group-id-table* 639) self) + ) + (arcing-shot-setup arg0 arg1 arg2) + (set! (-> self countdown-time) arg4) + (set! (-> self flight-time) arg3) + (set! + (-> self sound) + (new + 'process + 'ambient-sound + (new 'static 'sound-spec + :mask #x80 + :num 1.0 + :group #x1 + :sound-name + (new 'static 'sound-name :lo #x6970732d626d6f62) + :volume #x400 + :fo-max 80 + ) + (-> self to) + ) + ) + (go darkecobomb-idle) + (none) + ) + +(deftype greenshot (arcing-shot) + ((flight-time int64 :offset-assert 224) + ) + :heap-base #x80 + :method-count-assert 20 + :size-assert #xe8 + :flag-assert #x14008000e8 + ) + + +(let + ((v1-17 + (new 'static 'skeleton-group + :art-group-name "greenshot" + :bounds (new 'static 'vector :w 16384.0) + :version #x6 + ) + ) + ) + (set! (-> v1-17 jgeo) 0) + (set! (-> v1-17 janim) 2) + (set! (-> v1-17 mgeo 0) (the-as uint 1)) + (set! (-> v1-17 lod-dist 0) 4095996000.0) + (set! *greenshot-sg* v1-17) + ) + +(defstate greenshot-idle (greenshot) + :enter + (behavior () + (set! (-> self state-time) (-> *display* game-frame-counter)) + (none) + ) + :trans + (behavior () + (arcing-shot-calculate + (-> self root trans) + (/ + (the float (- (-> *display* game-frame-counter) (-> self state-time))) + (the float (-> self flight-time)) + ) + ) + (if + (>= + (- (-> *display* game-frame-counter) (-> self state-time)) + (-> self flight-time) + ) + (deactivate self) + ) + (spawn (-> self part) (-> self root trans)) + (none) + ) + :code + (behavior () + (while #t + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-0 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-0 param 1) 1.0) + (set! (-> a0-0 frame-num) 0.0) + (joint-control-channel-group! a0-0 (if (> (-> self skel active-channels) 0) + (-> + self + skel + root-channel + 0 + frame-group + ) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-1 (-> self skel root-channel 0))) + (set! + (-> a0-1 param 0) + (the float (+ (-> a0-1 frame-group data 0 length) -1)) + ) + (set! (-> a0-1 param 1) 1.0) + (joint-control-channel-group-eval! + a0-1 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior greenshot) transform-post) + ) + +(defbehavior + greenshot-init-by-other greenshot + ((arg0 vector) (arg1 vector) (arg2 float) (arg3 uint)) + (let + ((s2-0 + (new + 'process + 'collide-shape-moving + self + (collide-list-enum usually-hit-by-player) + ) + ) + ) + (set! (-> s2-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s2-0 reaction) default-collision-reaction) + (set! (-> s2-0 no-reaction) nothing) + (let ((s1-0 (new 'process 'collide-shape-prim-sphere s2-0 (the-as uint 0)))) + (set! (-> s1-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s1-0 collide-with) (the-as uint 16)) + (set! (-> s1-0 prim-core offense) 4) + (set-vector! (-> s1-0 local-sphere) 0.0 8192.0 0.0 8192.0) + ) + (dummy-46 s2-0) + (set! (-> s2-0 nav-radius) (* 0.75 (-> s2-0 root-prim local-sphere w))) + (dummy-50 s2-0) + (set! (-> self root) s2-0) + ) + (set! (-> self root trans quad) (-> arg0 quad)) + (dummy-14 self *greenshot-sg* '()) + (logclear! (-> self mask) (process-mask actor-pause)) + (arcing-shot-setup arg0 arg1 arg2) + (set! (-> self flight-time) (the-as int arg3)) + (set! + (-> self part) + (create-launch-control (-> *part-group-id-table* 664) self) + ) + (logior! (-> self draw status) 2) + (go greenshot-idle) + (none) + ) + +(deftype redshot (arcing-shot) + ((flight-time int64 :offset-assert 224) + (stall-time int64 :offset-assert 232) + (ring torus :inline :offset-assert 240) + (rotation-offset int64 :offset-assert 280) + (part-track handle :offset-assert 288) + (shot-particle sparticle-launch-control :offset-assert 296) + (test-particle sparticle-launch-control :offset-assert 300) + ) + :heap-base #xc0 + :method-count-assert 20 + :size-assert #x130 + :flag-assert #x1400c00130 + ) + + +(defmethod relocate redshot ((obj redshot) (arg0 int)) + (if (nonzero? (-> obj shot-particle)) + (&+! (-> obj shot-particle) arg0) + ) + (if (nonzero? (-> obj test-particle)) + (&+! (-> obj test-particle) arg0) + ) + (the-as redshot ((method-of-type arcing-shot relocate) obj arg0)) + ) + +(defmethod deactivate redshot ((obj redshot)) + (if (nonzero? (-> obj shot-particle)) + (kill-and-free-particles (-> obj shot-particle)) + ) + (if (nonzero? (-> obj test-particle)) + (kill-and-free-particles (-> obj test-particle)) + ) + ((method-of-type arcing-shot deactivate) obj) + (none) + ) + +(defun redshot-particle-callback ((arg0 part-tracker)) + (let ((v1-0 (the-as object (-> arg0 userdata)))) + (set! + (-> *part-id-table* 2626 init-specs 2 initial-valuef) + (* 2.25 (-> (the-as (pointer redshot) v1-0) 0 ring radius-primary)) + ) + ) + 0 + (none) + ) + +(let + ((v1-22 + (new 'static 'skeleton-group + :art-group-name "redring" + :bounds (new 'static 'vector :w 163840.0) + :version #x6 + ) + ) + ) + (set! (-> v1-22 jgeo) 0) + (set! (-> v1-22 janim) 2) + (set! (-> v1-22 mgeo 0) (the-as uint 1)) + (set! (-> v1-22 lod-dist 0) 4095996000.0) + (set! *redring-sg* v1-22) + ) + +(defbehavior redshot-trans redshot ((arg0 int)) + (let ((s5-0 (new 'stack-no-clear 'matrix))) + 0.0 + (matrix-rotate-yx! + s5-0 + (* + 436.90668 + (the float (+ (-> self rotation-offset) (-> *display* game-frame-counter))) + ) + (* + 291.27112 + (the float (+ (-> self rotation-offset) (-> *display* game-frame-counter))) + ) + ) + (matrix->quaternion (-> self root quat) s5-0) + ) + (if (< (* 0.006666667 (the float (min 150 arg0))) 1.0) + (spawn (-> self part) (-> self root trans)) + ) + ) + +(defstate redshot-explode (redshot) + :enter + (behavior () + (set! (-> self state-time) (-> *display* game-frame-counter)) + (sound-play-by-name + (static-sound-name "red-explode") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + (set! (-> self draw status) (logand -3 (-> self draw status))) + (quaternion-identity! (-> self root quat)) + (set! (-> self ring radius-secondary) 3072.0) + (set! (-> self ring origin quad) (-> self root trans quad)) + (+! (-> self ring origin y) (-> self ring radius-secondary)) + (set-vector! (-> self ring axis) 0.0 1.0 0.0 1.0) + (let ((gp-1 (get-process *default-dead-pool* part-tracker #x4000))) + (set! (-> self part-track) (ppointer->handle (when gp-1 + (let + ((t9-4 + (method-of-type + part-tracker + activate + ) + ) + ) + (t9-4 + (the-as part-tracker gp-1) + self + 'part-tracker + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + gp-1 + part-tracker-init + (-> + *part-group-id-table* + 648 + ) + -1 + redshot-particle-callback + (-> self ppointer) + #f + (-> self root trans) + ) + (-> gp-1 ppointer) + ) + ) + ) + ) + (none) + ) + :trans + (behavior () + (set! + (-> self ring radius-primary) + (* + 204.8 + (the float (- (-> *display* game-frame-counter) (-> self state-time))) + ) + ) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (when (dummy-11 (-> self ring) gp-0) + (vector-normalize! gp-0 16384.0) + (let ((a1-2 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-2 from) self) + (set! (-> a1-2 num-params) 2) + (set! (-> a1-2 message) 'attack) + (set! (-> a1-2 param 0) (the-as uint #f)) + (let ((v1-8 (new 'static 'attack-info :mask #x2))) + (set! (-> v1-8 vector quad) (-> gp-0 quad)) + (set! (-> a1-2 param 1) (the-as uint v1-8)) + ) + (send-event-function *target* a1-2) + ) + (let ((a1-3 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-3 from) self) + (set! (-> a1-3 num-params) 0) + (set! (-> a1-3 message) 'hit-jak) + (send-event-function (ppointer->process (-> self parent)) a1-3) + ) + ) + ) + (dotimes (gp-1 5) + (let ((s5-0 (new 'stack-no-clear 'vector))) + (dummy-12 (-> self ring) s5-0) + (spawn (-> self test-particle) s5-0) + ) + ) + (let + ((f0-3 + (fmin + 1.0 + (* + 0.006666667 + (the + float + (- 600 (- (-> *display* game-frame-counter) (-> self state-time))) + ) + ) + ) + ) + ) + (set-vector! (-> self draw color-mult) f0-3 f0-3 f0-3 0.75) + ) + (when (>= (- (-> *display* game-frame-counter) (-> self state-time)) 600) + (let ((a1-7 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-7 from) self) + (set! (-> a1-7 num-params) 0) + (set! (-> a1-7 message) 'missed-jak) + (send-event-function (ppointer->process (-> self parent)) a1-7) + ) + (deactivate self) + ) + (none) + ) + :code + (behavior () + (while #t + (let ((v1-2 (-> self skel root-channel 0))) + (set! (-> v1-2 num-func) num-func-identity) + (set! (-> v1-2 frame-num) (* 0.000016276043 (-> self ring radius-primary))) + ) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior redshot) transform-post) + ) + +(defbehavior + redshot-handler redshot + ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (if (or (= v1-0 'attack) (= v1-0 'touch)) + (go redshot-explode) + ) + ) + ) + ) + +(defstate redshot-wait (redshot) + :event + redshot-handler + :enter + (behavior () + (set! (-> self state-time) (-> *display* game-frame-counter)) + (none) + ) + :trans + (behavior () + (redshot-trans + (- + (-> self stall-time) + (- (-> *display* game-frame-counter) (-> self state-time)) + ) + ) + (if + (>= + (- (-> *display* game-frame-counter) (-> self state-time)) + (-> self stall-time) + ) + (go redshot-explode) + ) + (spawn (-> self shot-particle) (-> self root trans)) + (none) + ) + :code + (behavior () + (while #t + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior redshot) transform-post) + ) + +(defstate redshot-idle (redshot) + :event + redshot-handler + :enter + (behavior () + (set! (-> self state-time) (-> *display* game-frame-counter)) + (none) + ) + :trans + (behavior () + (redshot-trans 1500) + (arcing-shot-calculate + (-> self root trans) + (/ + (the float (- (-> *display* game-frame-counter) (-> self state-time))) + (the float (-> self flight-time)) + ) + ) + (if + (>= + (- (-> *display* game-frame-counter) (-> self state-time)) + (-> self flight-time) + ) + (go redshot-wait) + ) + (spawn (-> self shot-particle) (-> self root trans)) + (none) + ) + :code + (behavior () + (while #t + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior redshot) transform-post) + ) + +(defbehavior + redshot-init-by-other redshot + ((arg0 vector) (arg1 vector) (arg2 float) (arg3 int) (arg4 int) (arg5 int)) + (local-vars (sv-16 collide-shape-prim-sphere)) + (let + ((s0-0 + (new + 'process + 'collide-shape-moving + self + (collide-list-enum usually-hit-by-player) + ) + ) + ) + (set! (-> s0-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s0-0 reaction) default-collision-reaction) + (set! (-> s0-0 no-reaction) nothing) + (set! sv-16 (new 'process 'collide-shape-prim-sphere s0-0 (the-as uint 0))) + (set! (-> sv-16 prim-core collide-as) (the-as uint 512)) + (set! (-> sv-16 collide-with) (the-as uint 16)) + (set! (-> sv-16 prim-core action) (the-as uint 1)) + (set! (-> sv-16 prim-core offense) 4) + (set! (-> sv-16 transform-index) 4) + (set-vector! (-> sv-16 local-sphere) 0.0 0.0 0.0 12288.0) + (let* ((a0-9 s0-0) + (t9-3 (method-of-object a0-9 dummy-46)) + ) + sv-16 + (t9-3 a0-9) + ) + (set! (-> s0-0 nav-radius) (* 0.75 (-> s0-0 root-prim local-sphere w))) + (dummy-50 s0-0) + (set! (-> self root) s0-0) + ) + (set! (-> self root trans quad) (-> arg0 quad)) + (dummy-14 self *redring-sg* '()) + (logclear! (-> self mask) (process-mask actor-pause)) + (arcing-shot-setup arg0 arg1 arg2) + (set! (-> self flight-time) arg3) + (set! (-> self stall-time) arg4) + (set! (-> self rotation-offset) arg5) + (set! + (-> self part) + (create-launch-control (-> *part-group-id-table* 647) self) + ) + (set! + (-> self shot-particle) + (create-launch-control (-> *part-group-id-table* 665) self) + ) + (set! + (-> self test-particle) + (create-launch-control (-> *part-group-id-table* 679) self) + ) + (logior! (-> self draw status) 2) + (set! + (-> self sound) + (new + 'process + 'ambient-sound + (new 'static 'sound-spec + :mask #x80 + :num 1.0 + :group #x1 + :sound-name + (new 'static 'sound-name :lo #x657269662d646572) + :volume #x400 + :fo-max 80 + ) + (-> self root trans) + ) + ) + (go redshot-idle) + (none) + ) + +(deftype yellowshot (arcing-shot) + ((flight-time int64 :offset-assert 224) + ) + :heap-base #x80 + :method-count-assert 20 + :size-assert #xe8 + :flag-assert #x14008000e8 + ) + + +(defstate yellowshot-idle (yellowshot) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('touch 'attack) + (when (= (-> arg0 type) target) + (let ((a1-3 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-3 from) self) + (set! (-> a1-3 num-params) 2) + (set! (-> a1-3 message) 'attack) + (set! (-> a1-3 param 0) (-> arg3 param 0)) + (let ((a0-2 (new 'static 'attack-info :mask #x20))) + (set! (-> a0-2 mode) 'generic) + (set! (-> a1-3 param 1) (the-as uint a0-2)) + ) + (send-event-function *target* a1-3) + ) + (let ((a1-4 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-4 from) self) + (set! (-> a1-4 num-params) 0) + (set! (-> a1-4 message) 'hit-jak) + (send-event-function (ppointer->process (-> self parent)) a1-4) + ) + ) + ) + ) + ) + :enter + (behavior () + (set! (-> self state-time) (-> *display* game-frame-counter)) + (none) + ) + :trans + (behavior () + (arcing-shot-calculate + (-> self root trans) + (/ + (the float (- (-> *display* game-frame-counter) (-> self state-time))) + (the float (-> self flight-time)) + ) + ) + (spawn (-> self part) (-> self root trans)) + (when + (>= + (- (-> *display* game-frame-counter) (-> self state-time)) + (-> self flight-time) + ) + (let ((a1-3 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-3 from) self) + (set! (-> a1-3 num-params) 0) + (set! (-> a1-3 message) 'missed-jak) + (send-event-function (ppointer->process (-> self parent)) a1-3) + ) + (deactivate self) + ) + (none) + ) + :code + (behavior () + (while #t + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior yellowshot) transform-post) + ) + +(defbehavior + yellowshot-init-by-other yellowshot + ((arg0 vector) (arg1 vector) (arg2 float) (arg3 uint)) + (let + ((s2-0 + (new + 'process + 'collide-shape-moving + self + (collide-list-enum usually-hit-by-player) + ) + ) + ) + (set! (-> s2-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s2-0 reaction) default-collision-reaction) + (set! (-> s2-0 no-reaction) nothing) + (let ((s1-0 (new 'process 'collide-shape-prim-sphere s2-0 (the-as uint 0)))) + (set! (-> s1-0 prim-core collide-as) (the-as uint 512)) + (set! (-> s1-0 collide-with) (the-as uint 16)) + (set! (-> s1-0 prim-core action) (the-as uint 1)) + (set! (-> s1-0 prim-core offense) 4) + (set-vector! (-> s1-0 local-sphere) 0.0 0.0 0.0 12288.0) + ) + (dummy-46 s2-0) + (set! (-> s2-0 nav-radius) (* 0.75 (-> s2-0 root-prim local-sphere w))) + (dummy-50 s2-0) + (set! (-> self root) s2-0) + ) + (set! (-> self root trans quad) (-> arg0 quad)) + (dummy-14 self *redring-sg* '()) + (logior! (-> self draw status) 2) + (arcing-shot-setup arg0 arg1 arg2) + (set! (-> self flight-time) (the-as int arg3)) + (set! + (-> self part) + (create-launch-control (-> *part-group-id-table* 652) self) + ) + (go yellowshot-idle) + (none) + ) + + + + diff --git a/goal_src/levels/finalboss/robotboss.gc b/goal_src/levels/finalboss/robotboss.gc index f3e130a2da..33511a695f 100644 --- a/goal_src/levels/finalboss/robotboss.gc +++ b/goal_src/levels/finalboss/robotboss.gc @@ -5,3 +5,6331 @@ ;; name in dgo: robotboss ;; dgos: FIN, L1 +(define-extern *robotboss-blueeco-sg* skeleton-group) +(define-extern *robotboss-redeco-sg* skeleton-group) +(define-extern *robotboss-yelloweco-sg* skeleton-group) + +(define-extern robotboss-always-trans (function state none :behavior robotboss)) ;; CFG problems TODO + +;; DECOMP BEGINS + +(defmethod ease-loc-t robotboss ((obj robotboss)) + (parameter-ease-sin-clamp (-> obj loc-t)) + ) + +(let + ((v1-0 + (new 'static 'skeleton-group + :art-group-name "robotboss-blueeco" + :bounds (new 'static 'vector :w 819200.0) + :version #x6 + ) + ) + ) + (set! (-> v1-0 jgeo) 0) + (set! (-> v1-0 janim) 2) + (set! (-> v1-0 mgeo 0) (the-as uint 1)) + (set! (-> v1-0 lod-dist 0) 4095996000.0) + (set! *robotboss-blueeco-sg* v1-0) + ) + +(let + ((v1-1 + (new 'static 'skeleton-group + :art-group-name "robotboss-redeco" + :bounds (new 'static 'vector :w 819200.0) + :version #x6 + ) + ) + ) + (set! (-> v1-1 jgeo) 0) + (set! (-> v1-1 janim) 2) + (set! (-> v1-1 mgeo 0) (the-as uint 1)) + (set! (-> v1-1 lod-dist 0) 4095996000.0) + (set! *robotboss-redeco-sg* v1-1) + ) + +(let + ((v1-2 + (new 'static 'skeleton-group + :art-group-name "robotboss-yelloweco" + :bounds (new 'static 'vector :w 819200.0) + :version #x6 + ) + ) + ) + (set! (-> v1-2 jgeo) 0) + (set! (-> v1-2 janim) 2) + (set! (-> v1-2 mgeo 0) (the-as uint 1)) + (set! (-> v1-2 lod-dist 0) 4095996000.0) + (set! *robotboss-yelloweco-sg* v1-2) + ) + +(defbehavior robotboss-cut-cam-exit robotboss () + (set! (-> self valid-frames) 0) + (if (and *target* (logtest? (-> *target* state-flags) 256)) + (process-release? *target*) + ) + (set! (-> self skel status) (logand -2 (-> self skel status))) + (set! (-> self skip-cut) #f) + (none) + ) + +(defbehavior robotboss-cut-cam robotboss ((arg0 float) (arg1 float) (arg2 int)) + (let ((f0-0 (ja-aframe-num 0))) + (cond + ((or (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + arg2 + ) + ) + (< f0-0 arg0) (< arg1 f0-0) + ) + (robotboss-cut-cam-exit) + ) + ((or + (and + (logtest? (-> *target* control unknown-surface00 flags) 2048) + (zero? (logand (-> *target* control status) 1)) + ) + (-> self skip-cut) + ) + (set! (-> self skip-cut) #t) + ) + (else + (logior! (-> self skel status) 1) + (process-grab? *target*) + (set! (-> *camera-other-root* quad) (-> self root-override trans quad)) + (let ((s5-1 (-> self node-list data 88 bone transform)) + (gp-1 (-> self node-list data 88 bone scale)) + ) + (let ((s4-1 (new 'stack-no-clear 'vector))) + (vector<-cspace! s4-1 (-> self node-list data 88)) + (set! (-> *camera-other-trans* quad) (-> s4-1 quad)) + ) + (vector-normalize-copy! + (the-as vector (-> *camera-other-matrix* vector)) + (the-as vector (-> s5-1 vector)) + (the-as float -1.0) + ) + (set! (-> *camera-other-matrix* vector 0 w) 0.0) + (vector-normalize-copy! + (-> *camera-other-matrix* vector 1) + (-> s5-1 vector 1) + (the-as float 1.0) + ) + (set! (-> *camera-other-matrix* vector 1 w) 0.0) + (vector-normalize-copy! + (-> *camera-other-matrix* vector 2) + (-> s5-1 vector 2) + (the-as float -1.0) + ) + (set! (-> *camera-other-matrix* vector 2 w) 0.0) + (vector-reset! (-> *camera-other-matrix* vector 3)) + (othercam-calc (-> gp-1 x)) + ) + (hide-hud-quick) + (set! *camera-look-through-other* 2) + (when (< (-> self valid-frames) 2) + (set-blackout-frames 10) + (+! (-> self valid-frames) 1) + ) + ) + ) + ) + (none) + ) + +;; ERROR: function was not converted to expressions. Cannot decompile. + +(defbehavior robotboss-shooting-trans robotboss ((arg0 int)) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (vector<-cspace! gp-0 (-> self node-list data arg0)) + (let ((a1-2 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-2 from) self) + (set! (-> a1-2 num-params) 1) + (set! (-> a1-2 message) 'trans) + (set! (-> a1-2 param 0) (the-as uint gp-0)) + (send-event-function (handle->process (-> self shot-attractor)) a1-2) + ) + ) + (none) + ) + +(defbehavior robotboss-setup-for-hits robotboss ((arg0 int) (arg1 int)) + (set! (-> self took-hit) #f) + (set! (-> self hits-to-go) arg1) + (set! (-> self vulnerable) arg0) + (let ((gp-0 (new 'stack 'sphere))) + (set! (-> gp-0 w) 4096.0) + (let ((s5-0 (get-process *default-dead-pool* manipy #x4000))) + (set! (-> self shot-attractor) (ppointer->handle (when s5-0 + (let + ((t9-2 + (method-of-type + manipy + activate + ) + ) + ) + (t9-2 + (the-as manipy s5-0) + self + 'manipy + (the-as + pointer + #x70004000 + ) + ) + ) + (run-now-in-process + s5-0 + manipy-init + (-> + self + root-override + trans + ) + (-> self entity) + *redring-sg* + gp-0 + ) + (-> s5-0 ppointer) + ) + ) + ) + ) + ) + (let ((a1-5 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-5 from) self) + (set! (-> a1-5 num-params) 1) + (set! (-> a1-5 message) 'attackable) + (set! (-> a1-5 param 0) (the-as uint #t)) + (send-event-function (handle->process (-> self shot-attractor)) a1-5) + ) + (let ((a1-6 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-6 from) self) + (set! (-> a1-6 num-params) 1) + (set! (-> a1-6 message) 'draw) + (set! (-> a1-6 param 0) (the-as uint #f)) + (send-event-function (handle->process (-> self shot-attractor)) a1-6) + ) + ) + +(defbehavior robotboss-yellow-eco-off robotboss () + (logior! (-> self alts 7 extra perm status) (entity-perm-status bit-9)) + (logior! (-> self alts 8 extra perm status) (entity-perm-status bit-9)) + (logior! (-> self alts 9 extra perm status) (entity-perm-status bit-9)) + (let + ((v0-0 + (logior (-> self alts 10 extra perm status) (entity-perm-status bit-9)) + ) + ) + (set! (-> self alts 10 extra perm status) v0-0) + v0-0 + ) + ) + +(defbehavior robotboss-yellow-eco-on robotboss () + (logclear! (-> self alts 7 extra perm status) (entity-perm-status bit-9)) + (logclear! (-> self alts 8 extra perm status) (entity-perm-status bit-9)) + (logclear! (-> self alts 9 extra perm status) (entity-perm-status bit-9)) + (let + ((v0-0 + (logclear (-> self alts 10 extra perm status) (entity-perm-status bit-9)) + ) + ) + (set! (-> self alts 10 extra perm status) v0-0) + v0-0 + ) + ) + +(defbehavior robotboss-anim-blend-loop robotboss ((arg0 art-joint-anim)) + (let ((s5-0 (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + ) + (ja-channel-push! 2 0) + (let ((s4-0 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! s4-0 arg0 num-func-identity) + (set! (-> s4-0 frame-num) 0.0) + ) + (let ((gp-1 (-> self skel root-channel 1))) + (joint-control-channel-group-eval! gp-1 s5-0 num-func-identity) + (set! (-> gp-1 frame-num) 0.0) + ) + ) + (while #t + (let ((a0-4 (-> self skel root-channel 0))) + (set! (-> a0-4 param 0) 1.0) + (joint-control-channel-group-eval! + a0-4 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + (let ((gp-2 (-> self skel root-channel 1))) + (set! (-> gp-2 frame-interp) (- 1.0 (ease-loc-t self))) + (set! (-> gp-2 param 0) 0.0) + (joint-control-channel-group-eval! + gp-2 + (the-as art-joint-anim #f) + num-func-chan + ) + ) + (suspend) + ) + (none) + ) + +(defbehavior robotboss-position robotboss () + (let ((s5-0 (-> self entity extra trans)) + (gp-0 (new 'stack-no-clear 'vector)) + ) + (let ((s4-0 (new 'stack-no-clear 'matrix))) + (set! + (-> self loc-t) + (/ + (the float (- (-> *display* game-frame-counter) (-> self loc-t-start))) + (the float (-> self loc-t-duration)) + ) + ) + (set! (-> self loc-t) (fmin 1.0 (-> self loc-t))) + (vector-lerp! + gp-0 + (-> self old-loc) + (-> self desired-loc) + (ease-loc-t self) + ) + (matrix-rotate-y! s4-0 (-> gp-0 x)) + (set! (-> gp-0 x) 0.0) + (vector-matrix*! gp-0 gp-0 s4-0) + (vector+! (-> self root-override trans) gp-0 (-> self entity extra trans)) + (vector-negate! + (the-as vector (-> s4-0 vector)) + (the-as vector (-> s4-0 vector)) + ) + (vector-negate! (-> s4-0 vector 2) (-> s4-0 vector 2)) + (matrix->quaternion (-> self root-override quat) s4-0) + ) + (vector-! gp-0 s5-0 (-> self root-override trans)) + (set! (-> gp-0 y) 0.0) + (vector-normalize! gp-0 (the-as float 204800.0)) + (set! (-> gp-0 y) 32768.0) + (vector+! gp-0 gp-0 s5-0) + (let ((a1-12 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-12 from) self) + (set! (-> a1-12 num-params) 1) + (set! (-> a1-12 message) 'set-pivot) + (set! (-> a1-12 param 0) (the-as uint gp-0)) + (send-event-function *camera* a1-12) + ) + ) + (when (-> self alts 6) + (let ((a0-16 (-> self alts 6 extra process)) + (f0-10 (+ (-> self entity extra trans y) (-> self desired-pool-y))) + ) + (when a0-16 + (let ((v1-23 (new 'stack-no-clear 'vector))) + (set! + (-> v1-23 quad) + (-> (the-as process-drawable a0-16) root trans quad) + ) + (cond + ((< (-> v1-23 y) (+ -204.8 f0-10)) + (set! (-> v1-23 y) (+ 20.48 (-> v1-23 y))) + ) + ((< (+ 204.8 f0-10) (-> v1-23 y)) + (set! (-> v1-23 y) (+ -20.48 (-> v1-23 y))) + ) + ) + (let ((a1-22 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-22 from) self) + (set! (-> a1-22 num-params) 1) + (set! (-> a1-22 message) 'move-to) + (set! (-> a1-22 param 0) (the-as uint v1-23)) + (send-event-function a0-16 a1-22) + ) + ) + ) + ) + ) + ) + +(defbehavior robotboss-darkecobomb robotboss ((arg0 vector) (arg1 float)) + (+! (-> self children-spawned) 1) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (let ((s4-0 (new 'stack-no-clear 'vector))) + (vector<-cspace! gp-0 (-> self node-list data 60)) + (set! (-> s4-0 quad) (-> self entity extra trans quad)) + (vector+! s4-0 s4-0 arg0) + (let ((s3-1 (get-process *default-dead-pool* darkecobomb #x4000))) + (when s3-1 + (let ((t9-2 (method-of-type darkecobomb activate))) + (t9-2 + (the-as darkecobomb s3-1) + self + 'darkecobomb + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + s3-1 + darkecobomb-init-by-other + gp-0 + s4-0 + 61440.0 + 300 + arg1 + ) + (-> s3-1 ppointer) + ) + ) + ) + (let ((s5-1 (get-process *default-dead-pool* part-tracker #x4000))) + (when s5-1 + (let ((t9-5 (method-of-type part-tracker activate))) + (t9-5 + (the-as part-tracker s5-1) + *entity-pool* + 'part-tracker + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + s5-1 + part-tracker-init + (-> *part-group-id-table* 638) + 300 + #f + #f + #f + gp-0 + ) + (-> s5-1 ppointer) + ) + ) + ) + ) + +(defbehavior + robotboss-bomb-handler robotboss + ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (local-vars (v0-0 object)) + (case arg2 + (('flash) + (let ((f0-1 (* 0.0078125 (the-as float (-> arg3 param 0))))) + (set! (-> self palette-val) f0-1) + f0-1 + ) + ) + (('bomb-done) + (set! (-> self des-cam-entity) #f) + (let ((a1-1 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-1 from) self) + (set! (-> a1-1 num-params) 0) + (set! (-> a1-1 message) 'hide) + (let ((t9-0 send-event-function) + (v1-4 (-> self alts 11)) + ) + (t9-0 (if v1-4 + (-> v1-4 extra process) + ) + a1-1 + ) + ) + ) + (set! v0-0 (+ (-> self children-spawned) -2)) + (set! (-> self children-spawned) (the-as int v0-0)) + v0-0 + ) + (('bomb-going) + (set! (-> self des-cam-entity) #f) + (set! v0-0 #t) + (set! (-> self ignore-camera) (the-as symbol v0-0)) + v0-0 + ) + ) + ) + +(defbehavior + robotboss-handler robotboss + ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (cond + ((= v1-0 'flash) + (let ((f0-1 (* 0.0078125 (the-as float (-> arg3 param 0))))) + (set! (-> self palette-val) f0-1) + f0-1 + ) + ) + ((= v1-0 'attack) + (when (>= arg1 2) + (case (-> arg3 param 1) + (('eco-yellow) + (let ((a0-5 (-> arg3 param 0))) + (when + (and + a0-5 + ((method-of-type + touching-shapes-entry + prims-touching? + ) + (the-as touching-shapes-entry a0-5) + (-> self root-override) + (the-as uint (-> self vulnerable)) + ) + ) + (when (> (-> self hits-to-go) 0) + (set! (-> self took-hit) #t) + (let + ((v0-0 (the-as number (+ (-> self hits-to-go) -1)))) + (set! (-> self hits-to-go) (the-as int v0-0)) + v0-0 + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + +(defstate robotboss-yellow-dark-bomb-wait (robotboss) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (cond + ((= v1-0 'white-eco-picked-up) + (close-specific-task! + (game-task finalboss-movies) + (task-status unknown) + ) + (entity-birth-no-kill (-> self alts 5)) + (let ((a1-2 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-2 from) self) + (set! (-> a1-2 num-params) 0) + (set! (-> a1-2 message) 'play-anim) + (let ((t9-2 send-event-function) + (v1-2 (-> self alts 5)) + ) + (t9-2 (if v1-2 + (-> v1-2 extra process) + ) + a1-2 + ) + ) + ) + (dummy-18 self) + (deactivate self) + ) + (else + (robotboss-bomb-handler arg0 arg1 arg2 arg3) + ) + ) + ) + ) + ) + :enter + (behavior () + (set! (-> self state-time) (-> *display* game-frame-counter)) + (set! (-> self children-spawned) 0) + 0 + (none) + ) + :exit + (behavior () + (set! (-> self des-cam-entity) #f) + (let ((a1-0 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-0 from) self) + (set! (-> a1-0 num-params) 0) + (set! (-> a1-0 message) 'beam-off) + (let ((t9-0 send-event-function) + (v1-1 (-> self alts 3)) + ) + (t9-0 (if v1-1 + (-> v1-1 extra process) + ) + a1-0 + ) + ) + ) + (let ((a1-1 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-1 from) self) + (set! (-> a1-1 num-params) 0) + (set! (-> a1-1 message) 'beam-off) + (let ((t9-1 send-event-function) + (v1-5 (-> self alts 2)) + ) + (t9-1 (if v1-5 + (-> v1-5 extra process) + ) + a1-1 + ) + ) + ) + (let ((a1-2 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-2 from) self) + (set! (-> a1-2 num-params) 0) + (set! (-> a1-2 message) 'beam-off) + (let ((t9-2 send-event-function) + (v1-9 (-> self alts 1)) + ) + (t9-2 (if v1-9 + (-> v1-9 extra process) + ) + a1-2 + ) + ) + ) + (let ((a1-3 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-3 from) self) + (set! (-> a1-3 num-params) 0) + (set! (-> a1-3 message) 'beam-off) + (let ((t9-3 send-event-function) + (v1-13 (-> self alts 4)) + ) + (t9-3 (if v1-13 + (-> v1-13 extra process) + ) + a1-3 + ) + ) + ) + (let ((a1-4 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-4 from) self) + (set! (-> a1-4 num-params) 0) + (set! (-> a1-4 message) 'beam-off) + (send-event-function (handle->process (-> self white-eco)) a1-4) + ) + (none) + ) + :trans + (behavior () + (robotboss-always-trans (the-as state #f)) + (spool-push + *art-control* + "green-sagecage-outro-beat-boss-a" + 0 + self + (the-as float -1.0) + ) + (robotboss-position) + (none) + ) + :code + (behavior () + (let ((a0-0 (-> self skel root-channel 0))) + (set! + (-> a0-0 param 0) + (the float (+ (-> a0-0 frame-group data 0 length) -1)) + ) + (set! (-> a0-0 param 1) 1.0) + (joint-control-channel-group! + a0-0 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (while (not (ja-done? 0)) + (suspend) + (ja-eval) + ) + (ja-channel-push! 1 30) + (let ((v1-11 (-> self skel root-channel 0))) + (set! + (-> v1-11 frame-group) + (the-as art-joint-anim (-> self draw art-group data 32)) + ) + ) + (let ((a0-6 (-> self skel root-channel 0))) + (set! (-> a0-6 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-6 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-6 param 1) 1.0) + (set! (-> a0-6 frame-num) 0.0) + (joint-control-channel-group! a0-6 (if (> (-> self skel active-channels) 0) + (-> + self + skel + root-channel + 0 + frame-group + ) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (when (and (>= (ja-frame-num 0) 15.0) (< (-> self children-spawned) 1)) + (robotboss-darkecobomb + (new 'static 'vector :y 40960.0 :z 81920.0) + (-> self dda yellow-bomb-time) + ) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM20" + #t + (the-as vector #f) + ) + ) + (suspend) + (let ((a0-10 (-> self skel root-channel 0))) + (set! + (-> a0-10 param 0) + (the float (+ (-> a0-10 frame-group data 0 length) -1)) + ) + (set! (-> a0-10 param 1) 1.0) + (joint-control-channel-group-eval! + a0-10 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (ja-channel-push! 1 30) + (let ((v1-52 (-> self skel root-channel 0))) + (set! + (-> v1-52 frame-group) + (the-as art-joint-anim (-> self draw art-group data 32)) + ) + ) + (let ((a0-16 (-> self skel root-channel 0))) + (set! (-> a0-16 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-16 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-16 param 1) 1.0) + (set! (-> a0-16 frame-num) 0.0) + (joint-control-channel-group! a0-16 (if (> (-> self skel active-channels) 0) + (-> + self + skel + root-channel + 0 + frame-group + ) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (if (and (>= (ja-frame-num 0) 15.0) (< (-> self children-spawned) 2)) + (robotboss-darkecobomb + (new 'static 'vector :y 40960.0 :z -81920.0) + (+ -150.0 (-> self dda yellow-bomb-time)) + ) + ) + (suspend) + (let ((a0-19 (-> self skel root-channel 0))) + (set! + (-> a0-19 param 0) + (the float (+ (-> a0-19 frame-group data 0 length) -1)) + ) + (set! (-> a0-19 param 1) 1.0) + (joint-control-channel-group-eval! + a0-19 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (ja-channel-push! 1 30) + (let ((v1-93 (-> self skel root-channel 0))) + (set! + (-> v1-93 frame-group) + (the-as art-joint-anim (-> self draw art-group data 32)) + ) + ) + (let ((a0-25 (-> self skel root-channel 0))) + (set! (-> a0-25 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-25 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-25 param 1) 1.0) + (set! (-> a0-25 frame-num) 0.0) + (joint-control-channel-group! a0-25 (if (> (-> self skel active-channels) 0) + (-> + self + skel + root-channel + 0 + frame-group + ) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (if (and (>= (ja-frame-num 0) 15.0) (< (-> self children-spawned) 3)) + (robotboss-darkecobomb + (new 'static 'vector :x 81920.0 :y 40960.0) + (+ -300.0 (-> self dda yellow-bomb-time)) + ) + ) + (suspend) + (let ((a0-28 (-> self skel root-channel 0))) + (set! + (-> a0-28 param 0) + (the float (+ (-> a0-28 frame-group data 0 length) -1)) + ) + (set! (-> a0-28 param 1) 1.0) + (joint-control-channel-group-eval! + a0-28 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (ja-channel-push! 1 30) + (let ((v1-134 (-> self skel root-channel 0))) + (set! + (-> v1-134 frame-group) + (the-as art-joint-anim (-> self draw art-group data 32)) + ) + ) + (let ((a0-34 (-> self skel root-channel 0))) + (set! (-> a0-34 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-34 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-34 param 1) 1.0) + (set! (-> a0-34 frame-num) 0.0) + (joint-control-channel-group! a0-34 (if (> (-> self skel active-channels) 0) + (-> + self + skel + root-channel + 0 + frame-group + ) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (when (and (>= (ja-frame-num 0) 15.0) (< (-> self children-spawned) 4)) + (robotboss-darkecobomb + (new 'static 'vector :x -81920.0 :y 40960.0) + (+ -450.0 (-> self dda yellow-bomb-time)) + ) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "MAI-AM03" + #t + (the-as vector #f) + ) + (set! (-> self des-cam-entity) "camera-365") + ) + (suspend) + (let ((a0-38 (-> self skel root-channel 0))) + (set! + (-> a0-38 param 0) + (the float (+ (-> a0-38 frame-group data 0 length) -1)) + ) + (set! (-> a0-38 param 1) 1.0) + (joint-control-channel-group-eval! + a0-38 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (while #t + (when (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 30) + ) + ) + (ja-channel-push! 1 60) + (let ((v1-183 (-> self skel root-channel 0))) + (set! + (-> v1-183 frame-group) + (the-as art-joint-anim (-> self draw art-group data 30)) + ) + ) + ) + (let ((a0-48 (-> self skel root-channel 0))) + (set! (-> a0-48 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-48 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-48 param 1) 1.0) + (set! (-> a0-48 frame-num) 0.0) + (joint-control-channel-group! + a0-48 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-49 (-> self skel root-channel 0))) + (set! + (-> a0-49 param 0) + (the float (+ (-> a0-49 frame-group data 0 length) -1)) + ) + (set! (-> a0-49 param 1) 1.0) + (joint-control-channel-group-eval! + a0-49 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior robotboss) transform-post) + ) + +(defstate robotboss-daxter-sacrifice-movie (robotboss) + :code + (behavior () + (set-blackout-frames #x7530) + (entity-birth-no-kill (-> self alts 5)) + (let ((a1-0 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-0 from) self) + (set! (-> a1-0 num-params) 0) + (set! (-> a1-0 message) 'play-anim) + (let ((t9-2 send-event-function) + (v1-1 (-> self alts 5)) + ) + (t9-2 (if v1-1 + (-> v1-1 extra process) + ) + a1-0 + ) + ) + ) + (suspend) + (while (movie?) + (suspend) + ) + (set-blackout-frames 0) + (go robotboss-yellow-dark-bomb-wait) + (none) + ) + ) + +(defstate robotboss-white-eco-movie (robotboss) + :enter + (behavior () + (logior! (-> self draw status) 2) + (set! (-> self children-spawned) 0) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (ja-post) + (none) + ) + :exit + (behavior () + (set! (-> self draw status) (logand -3 (-> self draw status))) + (none) + ) + :trans + (behavior () + (spool-push + *art-control* + "green-sagecage-daxter-sacrifice" + 0 + self + (the-as float -1.0) + ) + (when + (and + (< (-> self children-spawned) 1) + (>= (- (-> *display* base-frame-counter) (-> self state-time)) 285) + ) + (+! (-> self children-spawned) 1) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (set! (-> gp-0 quad) (-> self entity extra trans quad)) + (set! (-> gp-0 y) (+ 81920.0 (-> gp-0 y))) + (let ((s5-0 (get-process *default-dead-pool* light-eco-mother #x4000))) + (set! (-> self white-eco) (ppointer->handle (when s5-0 + (let + ((t9-2 + (method-of-type + light-eco-mother + activate + ) + ) + ) + (t9-2 + (the-as + light-eco-mother + s5-0 + ) + self + 'light-eco-mother + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + s5-0 + light-eco-mother-init-by-other + (-> self entity) + gp-0 + ) + (-> s5-0 ppointer) + ) + ) + ) + ) + ) + ) + (none) + ) + :code + (behavior () + (let ((a1-0 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-0 from) self) + (set! (-> a1-0 num-params) 1) + (set! (-> a1-0 message) 'open) + (set! (-> a1-0 param 0) (the-as uint (-> *part-group-id-table* 674))) + (let ((t9-0 send-event-function) + (v1-4 (-> self alts 3)) + ) + (t9-0 (if v1-4 + (-> v1-4 extra process) + ) + a1-0 + ) + ) + ) + (let ((a1-1 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-1 from) self) + (set! (-> a1-1 num-params) 1) + (set! (-> a1-1 message) 'open) + (set! (-> a1-1 param 0) (the-as uint (-> *part-group-id-table* 675))) + (let ((t9-1 send-event-function) + (v1-11 (-> self alts 2)) + ) + (t9-1 (if v1-11 + (-> v1-11 extra process) + ) + a1-1 + ) + ) + ) + (let ((a1-2 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-2 from) self) + (set! (-> a1-2 num-params) 1) + (set! (-> a1-2 message) 'open) + (set! (-> a1-2 param 0) (the-as uint (-> *part-group-id-table* 676))) + (let ((t9-2 send-event-function) + (v1-18 (-> self alts 1)) + ) + (t9-2 (if v1-18 + (-> v1-18 extra process) + ) + a1-2 + ) + ) + ) + (let ((a1-3 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-3 from) self) + (set! (-> a1-3 num-params) 1) + (set! (-> a1-3 message) 'open) + (set! (-> a1-3 param 0) (the-as uint (-> *part-group-id-table* 677))) + (let ((t9-3 send-event-function) + (v1-25 (-> self alts 4)) + ) + (t9-3 (if v1-25 + (-> v1-25 extra process) + ) + a1-3 + ) + ) + ) + (let ((a1-4 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-4 from) self) + (set! (-> a1-4 num-params) 3) + (set! (-> a1-4 message) 'beam-on) + (set! (-> a1-4 param 0) (the-as uint (-> *part-group-id-table* 666))) + (set! (-> a1-4 param 1) (the-as uint (-> *part-group-id-table* 666))) + (set! (-> a1-4 param 2) (the-as uint (-> self entity extra trans))) + (let ((t9-4 send-event-function) + (v1-37 (-> self alts 3)) + ) + (t9-4 (if v1-37 + (-> v1-37 extra process) + ) + a1-4 + ) + ) + ) + (let ((a1-5 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-5 from) self) + (set! (-> a1-5 num-params) 3) + (set! (-> a1-5 message) 'beam-on) + (set! (-> a1-5 param 0) (the-as uint (-> *part-group-id-table* 672))) + (set! (-> a1-5 param 1) (the-as uint (-> *part-group-id-table* 672))) + (set! (-> a1-5 param 2) (the-as uint (-> self entity extra trans))) + (let ((t9-5 send-event-function) + (v1-49 (-> self alts 2)) + ) + (t9-5 (if v1-49 + (-> v1-49 extra process) + ) + a1-5 + ) + ) + ) + (let ((a1-6 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-6 from) self) + (set! (-> a1-6 num-params) 3) + (set! (-> a1-6 message) 'beam-on) + (set! (-> a1-6 param 0) (the-as uint (-> *part-group-id-table* 668))) + (set! (-> a1-6 param 1) (the-as uint (-> *part-group-id-table* 668))) + (set! (-> a1-6 param 2) (the-as uint (-> self entity extra trans))) + (let ((t9-6 send-event-function) + (v1-61 (-> self alts 1)) + ) + (t9-6 (if v1-61 + (-> v1-61 extra process) + ) + a1-6 + ) + ) + ) + (let ((a1-7 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-7 from) self) + (set! (-> a1-7 num-params) 3) + (set! (-> a1-7 message) 'beam-on) + (set! (-> a1-7 param 0) (the-as uint (-> *part-group-id-table* 670))) + (set! (-> a1-7 param 1) (the-as uint (-> *part-group-id-table* 670))) + (set! (-> a1-7 param 2) (the-as uint (-> self entity extra trans))) + (let ((t9-7 send-event-function) + (v1-73 (-> self alts 4)) + ) + (t9-7 (if v1-73 + (-> v1-73 extra process) + ) + a1-7 + ) + ) + ) + (let* ((gp-0 (get-process *default-dead-pool* finalbosscam #x4000)) + (gp-1 (ppointer->handle (when gp-0 + (let + ((t9-9 + (method-of-type finalbosscam activate) + ) + ) + (t9-9 + (the-as finalbosscam gp-0) + self + 'finalbosscam + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + gp-0 + finalbosscam-init-by-other + (-> self entity) + ) + (-> gp-0 ppointer) + ) + ) + ) + ) + (let ((a1-11 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-11 from) self) + (set! (-> a1-11 num-params) 0) + (set! (-> a1-11 message) 'play-anim) + (send-event-function (handle->process gp-1) a1-11) + ) + (suspend) + (while (movie?) + (suspend) + ) + (let ((a0-18 (handle->process gp-1))) + (if a0-18 + (deactivate a0-18) + ) + ) + ) + (case (get-task-status (game-task finalboss-movies)) + (((task-status unknown)) + (go robotboss-daxter-sacrifice-movie) + ) + (else + (go robotboss-yellow-dark-bomb-wait) + ) + ) + (none) + ) + ) + +(defstate robotboss-yellow-dark-bomb (robotboss) + :enter + (behavior () + (set! (-> self old-loc quad) (-> self desired-loc quad)) + (set-vector! (-> self desired-loc) 16384.0 -81920.0 716800.0 1.0) + (set! (-> self loc-t) 0.0) + (set! (-> self loc-t-start) (-> *display* game-frame-counter)) + (set! (-> self loc-t-duration) 1200) + (set! (-> self desired-pool-y) -16384.0) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM01" + #t + (the-as vector #f) + ) + (none) + ) + :trans + (behavior () + (robotboss-always-trans (the-as state #f)) + (spool-push + *art-control* + "finalbosscam-white-eco" + 0 + self + (the-as float -1.0) + ) + (if (>= (-> self loc-t) 1.0) + (go robotboss-white-eco-movie) + ) + (robotboss-position) + (none) + ) + :code + (behavior () + (ja-channel-push! 1 60) + (let ((v1-2 (-> self skel root-channel 0))) + (set! + (-> v1-2 frame-group) + (the-as art-joint-anim (-> self draw art-group data 31)) + ) + ) + (let ((a0-4 (-> self skel root-channel 0))) + (set! (-> a0-4 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-4 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-4 param 1) 1.0) + (set! (-> a0-4 frame-num) 0.0) + (joint-control-channel-group! a0-4 (if (> (-> self skel active-channels) 0) + (-> + self + skel + root-channel + 0 + frame-group + ) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-5 (-> self skel root-channel 0))) + (set! + (-> a0-5 param 0) + (the float (+ (-> a0-5 frame-group data 0 length) -1)) + ) + (set! (-> a0-5 param 1) 1.0) + (joint-control-channel-group-eval! + a0-5 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (when (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 30) + ) + ) + (ja-channel-push! 1 60) + (let ((v1-41 (-> self skel root-channel 0))) + (set! + (-> v1-41 frame-group) + (the-as art-joint-anim (-> self draw art-group data 30)) + ) + ) + ) + (while #t + (let ((a0-15 (-> self skel root-channel 0))) + (set! (-> a0-15 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-15 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-15 param 1) 1.0) + (set! (-> a0-15 frame-num) 0.0) + (joint-control-channel-group! + a0-15 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-16 (-> self skel root-channel 0))) + (set! + (-> a0-16 param 0) + (the float (+ (-> a0-16 frame-group data 0 length) -1)) + ) + (set! (-> a0-16 param 1) 1.0) + (joint-control-channel-group-eval! + a0-16 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior robotboss) transform-post) + ) + +(defbehavior robotboss-yellowshot robotboss () + (+! (-> self children-spawned) 1) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (let ((s5-0 (new 'stack-no-clear 'vector))) + (vector<-cspace! gp-0 (-> self node-list data 21)) + (set! (-> gp-0 y) 1972633.6) + (if *target* + (set! (-> s5-0 quad) (-> (target-pos 0) quad)) + (set! (-> s5-0 quad) (-> self entity extra trans quad)) + ) + (set! (-> s5-0 y) (+ 8192.0 (-> self entity extra trans y))) + (vector-! s5-0 s5-0 gp-0) + (vector-normalize! s5-0 (the-as float 819200.0)) + (vector+! s5-0 s5-0 gp-0) + (let ((s4-1 (get-process *default-dead-pool* yellowshot #x4000))) + (when s4-1 + (let ((t9-4 (method-of-type yellowshot activate))) + (t9-4 + (the-as yellowshot s4-1) + self + 'yellowshot + (the-as pointer #x70004000) + ) + ) + (run-now-in-process s4-1 yellowshot-init-by-other gp-0 s5-0 0.0 750) + (-> s4-1 ppointer) + ) + ) + ) + (let ((a1-9 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-9 from) self) + (set! (-> a1-9 num-params) 1) + (set! (-> a1-9 message) 'flash) + (set! (-> a1-9 param 0) (the-as uint 255.0)) + (send-event-function self a1-9) + ) + (let ((s5-1 (get-process *default-dead-pool* part-tracker #x4000))) + (when s5-1 + (let ((t9-8 (method-of-type part-tracker activate))) + (t9-8 + (the-as part-tracker s5-1) + *entity-pool* + 'part-tracker + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + s5-1 + part-tracker-init + (-> *part-group-id-table* 642) + 300 + #f + #f + #f + gp-0 + ) + (-> s5-1 ppointer) + ) + ) + ) + (sound-play-by-name + (static-sound-name "bfg-fire") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + (none) + ) + +(defbehavior robotboss-is-yellow-hit robotboss () + (or (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 28) + ) + (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 35) + ) + ) + ) + +(defbehavior robotboss-time-to-shoot-yellow robotboss () + (>= + (- (-> *display* game-frame-counter) (-> self state-time)) + (+ (-> self till-next-shot) 750) + ) + ) + +(defstate robotboss-yellow-wait (robotboss) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('hit-jak) + (let* ((v1-2 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-3 (the-as number (logior #x3f800000 v1-2))) + (f0-2 (+ -1.0 (the-as float v1-3))) + ) + (cond + ((< 0.75 f0-2) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM10" + #t + (the-as vector #f) + ) + ) + ((< 0.5 f0-2) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM12" + #t + (the-as vector #f) + ) + ) + ((< 0.25 f0-2) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM15" + #t + (the-as vector #f) + ) + ) + (else + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "MAI-AM03" + #t + (the-as vector #f) + ) + ) + ) + ) + ) + (('missed-jak) + (let* ((v1-13 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-14 (the-as number (logior #x3f800000 v1-13))) + (f0-5 (+ -1.0 (the-as float v1-14))) + ) + (if (< 0.5 f0-5) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM14" + #t + (the-as vector #f) + ) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "MAI-AM02" + #t + (the-as vector #f) + ) + ) + ) + ) + (else + (robotboss-handler arg0 arg1 arg2 arg3) + ) + ) + ) + :enter + (behavior () + (set! (-> self hits-to-go) -1) + (set! (-> self state-time) (-> *display* game-frame-counter)) + (set! (-> self till-next-shot) 300) + (set! (-> self use-interesting) #t) + (set! (-> self keep-charging) #f) + (none) + ) + :exit + (behavior () + (let ((a0-1 (handle->process (-> self shot-attractor)))) + (if a0-1 + (deactivate a0-1) + ) + ) + (let ((a1-1 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-1 from) self) + (set! (-> a1-1 num-params) 1) + (set! (-> a1-1 message) 'open) + (set! (-> a1-1 param 0) (the-as uint (-> *part-group-id-table* 677))) + (let ((t9-1 send-event-function) + (v1-10 (-> self alts 4)) + ) + (t9-1 (if v1-10 + (-> v1-10 extra process) + ) + a1-1 + ) + ) + ) + (let ((a1-2 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-2 from) self) + (set! (-> a1-2 num-params) 1) + (set! (-> a1-2 message) 'open) + (set! (-> a1-2 param 0) (the-as uint 0.4)) + (let ((t9-2 send-event-function) + (v1-17 (-> self alts 0)) + ) + (t9-2 (if v1-17 + (-> v1-17 extra process) + ) + a1-2 + ) + ) + ) + (set! + (-> + (the-as collide-shape-prim-group (-> self root-override root-prim)) + prims + 3 + collide-with + ) + (the-as uint 0) + ) + (set! + (-> + (the-as collide-shape-prim-group (-> self root-override root-prim)) + prims + 3 + prim-core + collide-as + ) + (the-as uint 0) + ) + (set! (-> self use-interesting) #f) + (let ((a1-3 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-3 from) self) + (set! (-> a1-3 num-params) 1) + (set! (-> a1-3 message) 'point-of-interest) + (set! (-> a1-3 param 0) (the-as uint #f)) + (send-event-function *camera* a1-3) + ) + (if (nonzero? (-> self yellow-gun)) + (set-mode! (-> self yellow-gun) (joint-mod-handler-mode flex-blend)) + ) + (robotboss-yellow-eco-off) + (robotboss-cut-cam-exit) + (stop! (-> self looping-sound 3)) + (none) + ) + :trans + (behavior () + (robotboss-always-trans robotboss-yellow-dark-bomb) + (robotboss-shooting-trans 21) + (cond + ((zero? (-> self hits-to-go)) + (set! (-> self keep-charging) #f) + (stop! (-> self looping-sound 3)) + (robotboss-yellow-eco-off) + (set! (-> self took-hit) #f) + (+! (-> self hits-to-go) -1) + (ja-channel-push! 1 30) + (let ((v1-8 (-> self skel root-channel 0))) + (set! + (-> v1-8 frame-group) + (the-as art-joint-anim (-> self draw art-group data 35)) + ) + ) + (set! (-> self yellow-smoke) #t) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (vector<-cspace! gp-0 (-> self node-list data 27)) + (let ((s5-0 (get-process *default-dead-pool* part-tracker #x4000))) + (when s5-0 + (let ((t9-7 (method-of-type part-tracker activate))) + (t9-7 + (the-as part-tracker s5-0) + *entity-pool* + 'part-tracker + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + s5-0 + part-tracker-init + (-> *part-group-id-table* 653) + 300 + #f + #f + #f + gp-0 + ) + (-> s5-0 ppointer) + ) + ) + ) + (let* ((s5-1 (get-process *default-dead-pool* manipy #x4000)) + (gp-1 (when s5-1 + (let ((t9-10 (method-of-type manipy activate))) + (t9-10 + (the-as manipy s5-1) + self + 'manipy + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + s5-1 + manipy-init + (-> self root-override trans) + (-> self entity) + *robotboss-yelloweco-sg* + #f + ) + (-> s5-1 ppointer) + ) + ) + ) + (let ((a1-8 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-8 from) self) + (set! (-> a1-8 num-params) 1) + (set! (-> a1-8 message) 'flash) + (set! (-> a1-8 param 0) (the-as uint 255.0)) + (send-event-function (ppointer->process (-> self parent)) a1-8) + ) + (let ((a1-9 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-9 from) self) + (set! (-> a1-9 num-params) 1) + (set! (-> a1-9 message) 'anim-mode) + (set! (-> a1-9 param 0) (the-as uint 'play1)) + (send-event-function (ppointer->process gp-1) a1-9) + ) + (let ((a1-10 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-10 from) self) + (set! (-> a1-10 num-params) 1) + (set! (-> a1-10 message) 'rot-quat) + (set! (-> a1-10 param 0) (the-as uint (-> self root-override quat))) + (send-event-function (ppointer->process gp-1) a1-10) + ) + (let ((a1-11 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-11 from) self) + (set! (-> a1-11 num-params) 1) + (set! (-> a1-11 message) 'art-joint-anim) + (set! + (-> a1-11 param 0) + (the-as uint "robotboss-yelloweco-yellow-last-hit") + ) + (send-event-function (ppointer->process gp-1) a1-11) + ) + ) + ) + ((and (> (-> self hits-to-go) 0) (-> self took-hit)) + (if + (not + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM17" + #t + (the-as vector #f) + ) + ) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "MAI-AM06" + #t + (the-as vector #f) + ) + ) + (set! (-> self took-hit) #f) + (ja-channel-push! 1 30) + (let ((v1-54 (-> self skel root-channel 0))) + (set! + (-> v1-54 frame-group) + (the-as art-joint-anim (-> self draw art-group data 28)) + ) + ) + ) + ) + (robotboss-position) + (robotboss-cut-cam + (the-as float 5.0) + (the-as float 50.0) + (the-as int (-> self draw art-group data 29)) + ) + (when + (and + (-> self keep-charging) + (>= + (- (-> *display* game-frame-counter) (-> self state-time)) + (-> self till-next-shot) + ) + ) + (let ((gp-2 (new 'stack-no-clear 'vector))) + (update! (-> self looping-sound 3)) + (vector<-cspace! gp-2 (-> self node-list data 21)) + (spawn (-> self particle 6) gp-2) + ) + ) + (none) + ) + :code + (behavior () + (let ((a0-0 (-> self skel root-channel 0))) + (set! + (-> a0-0 param 0) + (the float (+ (-> a0-0 frame-group data 0 length) -1)) + ) + (set! (-> a0-0 param 1) 1.0) + (joint-control-channel-group! + a0-0 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (while (not (ja-done? 0)) + (suspend) + (ja-eval) + ) + (robotboss-setup-for-hits 8 (-> self dda yellow-gun-hits)) + (if (nonzero? (-> self yellow-gun)) + (set-mode! (-> self yellow-gun) (joint-mod-handler-mode look-at)) + ) + (while #t + (when (not (robotboss-time-to-shoot-yellow)) + (when (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 26) + ) + ) + (ja-channel-push! 1 60) + (let ((v1-23 (-> self skel root-channel 0))) + (set! + (-> v1-23 frame-group) + (the-as art-joint-anim (-> self draw art-group data 26)) + ) + ) + ) + (when + (>= + (- (-> *display* game-frame-counter) (-> self state-time)) + (-> self till-next-shot) + ) + (let ((v1-30 (-> self skel root-channel 0))) + (set! (-> v1-30 num-func) num-func-identity) + (set! (-> v1-30 frame-num) 15.0) + ) + ) + (while + (not + (or + (>= + (- (-> *display* game-frame-counter) (-> self state-time)) + (-> self till-next-shot) + ) + (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 35) + ) + ) + ) + (when (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 26) + ) + ) + (ja-channel-push! 1 60) + (let ((v1-40 (-> self skel root-channel 0))) + (set! + (-> v1-40 frame-group) + (the-as art-joint-anim (-> self draw art-group data 26)) + ) + ) + ) + (let ((a0-24 (-> self skel root-channel 0))) + (set! (-> a0-24 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-24 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-24 param 1) 1.0) + (set! (-> a0-24 frame-num) 0.0) + (joint-control-channel-group! + a0-24 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (if (robotboss-is-yellow-hit) + (goto cfg-36) + ) + (suspend) + (let ((a0-25 (-> self skel root-channel 0))) + (set! + (-> a0-25 param 0) + (the float (+ (-> a0-25 frame-group data 0 length) -1)) + ) + (set! (-> a0-25 param 1) 1.0) + (joint-control-channel-group-eval! + a0-25 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (label cfg-36) + (when (not (robotboss-is-yellow-hit)) + (when (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 26) + ) + ) + (ja-channel-push! 1 60) + (let ((v1-93 (-> self skel root-channel 0))) + (set! + (-> v1-93 frame-group) + (the-as art-joint-anim (-> self draw art-group data 26)) + ) + ) + ) + (let ((a0-41 (-> self skel root-channel 0))) + (set! (-> a0-41 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-41 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-41 param 1) 1.0) + (set! (-> a0-41 frame-num) 0.0) + (joint-control-channel-group! + a0-41 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (if (robotboss-is-yellow-hit) + (goto cfg-55) + ) + (if (< 15.0 (ja-aframe-num 0)) + (set! (-> self keep-charging) #t) + ) + (suspend) + (let ((a0-43 (-> self skel root-channel 0))) + (set! + (-> a0-43 param 0) + (the float (+ (-> a0-43 frame-group data 0 length) -1)) + ) + (set! (-> a0-43 param 1) 1.0) + (joint-control-channel-group-eval! + a0-43 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + ) + (label cfg-55) + (when (and (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 35) + ) + ) + (or + (robotboss-time-to-shoot-yellow) + (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 28) + ) + ) + ) + ) + (set! (-> self state-time) (-> *display* game-frame-counter)) + (let* ((f30-1 (-> self dda yellow-shot-time-min)) + (f28-0 (-> self dda yellow-shot-time-rnd)) + (v1-147 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-148 (the-as number (logior #x3f800000 v1-147))) + ) + (set! + (-> self till-next-shot) + (the + int + (+ f30-1 (the float (the int (* f28-0 (+ -1.0 (the-as float v1-148)))))) + ) + ) + ) + (stop! (-> self looping-sound 3)) + (robotboss-yellowshot) + (robotboss-yellow-eco-on) + (let* ((v1-154 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-155 (the-as number (logior #x3f800000 v1-154))) + (f0-29 (+ -1.0 (the-as float v1-155))) + ) + (cond + ((< 0.8333333 f0-29) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM04" + #t + (the-as vector #f) + ) + ) + ((< 0.6666667 f0-29) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM09" + #t + (the-as vector #f) + ) + ) + ((< 0.5 f0-29) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM08" + #t + (the-as vector #f) + ) + ) + ((< 0.33333334 f0-29) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM10" + #t + (the-as vector #f) + ) + ) + ((< 0.16666667 f0-29) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "MAI-AM03" + #t + (the-as vector #f) + ) + ) + (else + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "MAI-AM02" + #t + (the-as vector #f) + ) + ) + ) + ) + (ja-channel-push! 1 15) + (let ((v1-176 (-> self skel root-channel 0))) + (set! + (-> v1-176 frame-group) + (the-as art-joint-anim (-> self draw art-group data 27)) + ) + ) + ) + (let ((a0-70 (-> self skel root-channel 0))) + (set! (-> a0-70 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-70 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-70 param 1) 1.0) + (set! (-> a0-70 frame-num) 0.0) + (joint-control-channel-group! + a0-70 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-71 (-> self skel root-channel 0))) + (set! + (-> a0-71 param 0) + (the float (+ (-> a0-71 frame-group data 0 length) -1)) + ) + (set! (-> a0-71 param 1) 1.0) + (joint-control-channel-group-eval! + a0-71 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (when (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 35) + ) + (let ((a0-77 (-> self skel root-channel 0))) + (set! + (-> a0-77 frame-group) + (the-as art-joint-anim (-> self draw art-group data 29)) + ) + (set! + (-> a0-77 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 29)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-77 param 1) 1.0) + (set! (-> a0-77 frame-num) 0.0) + (joint-control-channel-group! + a0-77 + (the-as art-joint-anim (-> self draw art-group data 29)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-78 (-> self skel root-channel 0))) + (set! + (-> a0-78 param 0) + (the float (+ (-> a0-78 frame-group data 0 length) -1)) + ) + (set! (-> a0-78 param 1) 1.0) + (joint-control-channel-group-eval! + a0-78 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (go robotboss-yellow-dark-bomb) + ) + ) + (none) + ) + :post + (behavior () + (when *target* + (if (nonzero? (-> self yellow-gun)) + (set-target! (-> self yellow-gun) (target-pos 5)) + ) + ) + (transform-post) + (none) + ) + ) + +(defstate robotboss-yellow (robotboss) + :event + robotboss-handler + :enter + (behavior () + (set! (-> self old-loc quad) (-> self desired-loc quad)) + (set-vector! (-> self desired-loc) 13653.333 77824.0 491520.0 1.0) + (set! (-> self loc-t) 0.0) + (set! (-> self loc-t-start) (-> *display* game-frame-counter)) + (set! (-> self loc-t-duration) 900) + (set! (-> self desired-pool-y) -18432.0) + (none) + ) + :trans + (behavior () + (robotboss-always-trans robotboss-yellow-wait) + (if (>= (-> self loc-t) 1.0) + (go robotboss-yellow-wait) + ) + (robotboss-position) + (none) + ) + :code + (behavior () + (let ((a0-0 (-> self skel root-channel 0))) + (set! + (-> a0-0 param 0) + (the float (+ (-> a0-0 frame-group data 0 length) -1)) + ) + (set! (-> a0-0 param 1) 1.0) + (joint-control-channel-group! + a0-0 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (while (not (ja-done? 0)) + (suspend) + (ja-eval) + ) + (ja-channel-push! 1 60) + (let ((v1-11 (-> self skel root-channel 0))) + (set! + (-> v1-11 frame-group) + (the-as art-joint-anim (-> self draw art-group data 25)) + ) + ) + (let ((a0-6 (-> self skel root-channel 0))) + (set! (-> a0-6 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-6 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-6 param 1) 1.0) + (set! (-> a0-6 frame-num) 0.0) + (joint-control-channel-group! a0-6 (if (> (-> self skel active-channels) 0) + (-> + self + skel + root-channel + 0 + frame-group + ) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-7 (-> self skel root-channel 0))) + (set! + (-> a0-7 param 0) + (the float (+ (-> a0-7 frame-group data 0 length) -1)) + ) + (set! (-> a0-7 param 1) 1.0) + (joint-control-channel-group-eval! + a0-7 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (while #t + (cond + ((and + *target* + (< (+ 81920.0 (-> self entity extra trans y)) (-> (target-pos 0) y)) + ) + (when (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 23) + ) + ) + (ja-channel-push! 1 240) + (let ((v1-55 (-> self skel root-channel 0))) + (set! + (-> v1-55 frame-group) + (the-as art-joint-anim (-> self draw art-group data 23)) + ) + ) + ) + ) + ((not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 21) + ) + ) + (ja-channel-push! 1 60) + (let ((v1-64 (-> self skel root-channel 0))) + (set! + (-> v1-64 frame-group) + (the-as art-joint-anim (-> self draw art-group data 21)) + ) + ) + ) + ) + (let ((a0-27 (-> self skel root-channel 0))) + (set! (-> a0-27 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-27 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-27 param 1) 1.0) + (set! (-> a0-27 frame-num) 0.0) + (joint-control-channel-group! + a0-27 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-28 (-> self skel root-channel 0))) + (set! + (-> a0-28 param 0) + (the float (+ (-> a0-28 frame-group data 0 length) -1)) + ) + (set! (-> a0-28 param 1) 1.0) + (joint-control-channel-group-eval! + a0-28 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior robotboss) transform-post) + ) + +(defstate robotboss-red-dark-bomb-wait (robotboss) + :event + robotboss-bomb-handler + :enter + (behavior () + (set! (-> self children-spawned) 0) + (logior! (-> self alts 11 extra perm status) (entity-perm-status bit-3)) + (none) + ) + :exit + (behavior () + (set! (-> self ignore-camera) #f) + (set! (-> self des-cam-entity) #f) + (logclear! (-> self alts 11 extra perm status) (entity-perm-status bit-3)) + (none) + ) + :trans + (behavior () + (robotboss-always-trans robotboss-yellow) + (if + (and + (< (-> self children-spawned) 0) + (or + (not *target*) + (!= (-> *target* control unknown-surface00 name) 'launch-jump) + ) + ) + (go robotboss-yellow) + ) + (robotboss-position) + (none) + ) + :code + (behavior () + (let ((a0-0 (-> self skel root-channel 0))) + (set! + (-> a0-0 param 0) + (the float (+ (-> a0-0 frame-group data 0 length) -1)) + ) + (set! (-> a0-0 param 1) 1.0) + (joint-control-channel-group! + a0-0 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (while (not (ja-done? 0)) + (suspend) + (ja-eval) + ) + (ja-channel-push! 1 30) + (let ((v1-11 (-> self skel root-channel 0))) + (set! + (-> v1-11 frame-group) + (the-as art-joint-anim (-> self draw art-group data 24)) + ) + ) + (let ((a0-6 (-> self skel root-channel 0))) + (set! (-> a0-6 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-6 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-6 param 1) 1.0) + (set! (-> a0-6 frame-num) 0.0) + (joint-control-channel-group! a0-6 (if (> (-> self skel active-channels) 0) + (-> + self + skel + root-channel + 0 + frame-group + ) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (when (and (>= (ja-frame-num 0) 15.0) (< (-> self children-spawned) 1)) + (robotboss-darkecobomb + (new 'static 'vector :y 32768.0) + (-> self dda red-bomb-time) + ) + (set! (-> self des-cam-entity) "camera-365") + ) + (suspend) + (let ((a0-9 (-> self skel root-channel 0))) + (set! + (-> a0-9 param 0) + (the float (+ (-> a0-9 frame-group data 0 length) -1)) + ) + (set! (-> a0-9 param 1) 1.0) + (joint-control-channel-group-eval! + a0-9 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (while #t + (when (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 21) + ) + ) + (ja-channel-push! 1 60) + (let ((v1-57 (-> self skel root-channel 0))) + (set! + (-> v1-57 frame-group) + (the-as art-joint-anim (-> self draw art-group data 21)) + ) + ) + ) + (let ((a0-19 (-> self skel root-channel 0))) + (set! (-> a0-19 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-19 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-19 param 1) 1.0) + (set! (-> a0-19 frame-num) 0.0) + (joint-control-channel-group! + a0-19 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-20 (-> self skel root-channel 0))) + (set! + (-> a0-20 param 0) + (the float (+ (-> a0-20 frame-group data 0 length) -1)) + ) + (set! (-> a0-20 param 1) 1.0) + (joint-control-channel-group-eval! + a0-20 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior robotboss) transform-post) + ) + +(defstate robotboss-red-dark-bomb (robotboss) + :enter + (behavior () + (set! (-> self old-loc quad) (-> self desired-loc quad)) + (set-vector! (-> self desired-loc) 0.0 -81920.0 716800.0 1.0) + (set! (-> self loc-t) 0.0) + (set! (-> self loc-t-start) (-> *display* game-frame-counter)) + (set! (-> self loc-t-duration) 900) + (set! (-> self desired-pool-y) -20480.0) + (none) + ) + :trans + (behavior () + (robotboss-always-trans robotboss-red-dark-bomb-wait) + (robotboss-position) + (if (>= (-> self loc-t) 1.0) + (go robotboss-red-dark-bomb-wait) + ) + (none) + ) + :code + (behavior () + (ja-channel-push! 1 60) + (let ((v1-2 (-> self skel root-channel 0))) + (set! + (-> v1-2 frame-group) + (the-as art-joint-anim (-> self draw art-group data 22)) + ) + ) + (let ((a0-4 (-> self skel root-channel 0))) + (set! (-> a0-4 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-4 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-4 param 1) 1.0) + (set! (-> a0-4 frame-num) 0.0) + (joint-control-channel-group! a0-4 (if (> (-> self skel active-channels) 0) + (-> + self + skel + root-channel + 0 + frame-group + ) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-5 (-> self skel root-channel 0))) + (set! + (-> a0-5 param 0) + (the float (+ (-> a0-5 frame-group data 0 length) -1)) + ) + (set! (-> a0-5 param 1) 1.0) + (joint-control-channel-group-eval! + a0-5 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (when (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 21) + ) + ) + (ja-channel-push! 1 60) + (let ((v1-41 (-> self skel root-channel 0))) + (set! + (-> v1-41 frame-group) + (the-as art-joint-anim (-> self draw art-group data 21)) + ) + ) + ) + (while #t + (let ((a0-15 (-> self skel root-channel 0))) + (set! (-> a0-15 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-15 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-15 param 1) 1.0) + (set! (-> a0-15 frame-num) 0.0) + (joint-control-channel-group! + a0-15 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-16 (-> self skel root-channel 0))) + (set! + (-> a0-16 param 0) + (the float (+ (-> a0-16 frame-group data 0 length) -1)) + ) + (set! (-> a0-16 param 1) 1.0) + (joint-control-channel-group-eval! + a0-16 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior robotboss) transform-post) + ) + +(deftype redshot-launch-info (structure) + ((dest vector :inline :offset-assert 0) + (flight-time int64 :offset-assert 16) + (stall-time int64 :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) + + +(deftype redshot-launch-array (structure) + ((info redshot-launch-info 6 :inline :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #xc0 + :flag-assert #x9000000c0 + ) + + +(defbehavior robotboss-redshot-fill-array robotboss ((arg0 redshot-launch-array)) + (let ((s2-0 0) + (s4-0 (new 'stack-no-clear 'vector)) + (s5-0 (new-stack-vector0)) + ) + 0.0 + (dotimes (s3-0 6) + (let ((s1-0 (-> arg0 info s3-0))) + (let* ((f30-0 -40960.0) + (f28-0 81920.0) + (v1-4 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-5 (the-as number (logior #x3f800000 v1-4))) + ) + (set! (-> s1-0 dest x) (+ f30-0 (* f28-0 (+ -1.0 (the-as float v1-5))))) + ) + (set! (-> s1-0 dest y) 0.0) + (let* ((f30-1 -40960.0) + (f28-1 81920.0) + (v1-10 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-11 (the-as number (logior #x3f800000 v1-10))) + ) + (set! (-> s1-0 dest z) (+ f30-1 (* f28-1 (+ -1.0 (the-as float v1-11))))) + ) + (set! (-> s1-0 dest w) 1.0) + ) + (dotimes (s1-1 s3-0) + (vector-! + s4-0 + (the-as vector (-> arg0 info s3-0)) + (the-as vector (-> arg0 info s1-1)) + ) + (let ((f0-13 (vector-length-squared s4-0))) + (if (< f0-13 1073741800.0) + (vector+float*! + (the-as vector (-> arg0 info s3-0)) + (the-as vector (-> arg0 info s1-1)) + s4-0 + (/ 32768.0 (sqrtf f0-13)) + ) + ) + ) + ) + (vector+! s5-0 s5-0 (the-as vector (-> arg0 info s3-0))) + (let* ((f30-2 60.0) + (v1-27 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-28 (the-as number (logior #x3f800000 v1-27))) + ) + (set! + (-> arg0 info s3-0 flight-time) + (+ (the int (* f30-2 (+ -1.0 (the-as float v1-28)))) 180) + ) + ) + (let* ((s1-3 (max 150 (- s2-0 (-> arg0 info s3-0 flight-time)))) + (f30-3 60.0) + (v1-38 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-39 (the-as number (logior #x3f800000 v1-38))) + ) + (set! + (-> arg0 info s3-0 stall-time) + (+ (the int (* f30-3 (+ -1.0 (the-as float v1-39)))) 300 s1-3) + ) + ) + (set! + s2-0 + (+ (-> arg0 info s3-0 flight-time) (-> arg0 info s3-0 stall-time)) + ) + ) + (vector-float*! s5-0 s5-0 0.16666667) + (vector-! s5-0 (-> self entity extra trans) s5-0) + (dotimes (v1-53 6) + (vector+! + (the-as vector (-> arg0 info v1-53)) + (the-as vector (-> arg0 info v1-53)) + s5-0 + ) + (set! + (-> arg0 info v1-53 dest y) + (+ (-> (new 'static 'array float 1 2048.0) 0) (-> arg0 info v1-53 dest y)) + ) + ) + ) + (none) + ) + +;; WARN: Stack slot load at 64 mismatch: defined as size 4, got size 16 +(defbehavior + robotboss-redshot robotboss + ((arg0 redshot-launch-info) (arg1 symbol)) + (local-vars + (sv-32 redshot-launch-info) + (sv-48 vector) + (sv-64 float) + (sv-80 int) + (sv-96 int) + ) + (set! sv-32 arg0) + (let ((s5-0 arg1)) + (+! (-> self children-spawned) 1) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (vector<-cspace! gp-0 (-> self node-list data 40)) + (let ((s4-0 (get-process *default-dead-pool* redshot #x4000))) + (when s4-0 + (let ((t9-2 (method-of-type redshot activate))) + (t9-2 (the-as redshot s4-0) self 'redshot (the-as pointer #x70004000)) + ) + (let ((s3-0 run-function-in-process) + (s2-0 s4-0) + (s1-0 redshot-init-by-other) + (s0-0 gp-0) + ) + (set! sv-48 (-> sv-32 dest)) + (let* ((f30-0 20480.0) + (f28-0 12288.0) + (v1-10 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-11 (the-as number (logior #x3f800000 v1-10))) + ) + (set! sv-64 (+ f30-0 (* f28-0 (+ -1.0 (the-as float v1-11))))) + ) + (set! sv-80 (-> sv-32 flight-time)) + (set! sv-96 (-> sv-32 stall-time)) + (let* ((f30-1 300.0) + (v1-19 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-20 (the-as number (logior #x3f800000 v1-19))) + (t3-0 (the int (* f30-1 (+ -1.0 (the-as float v1-20))))) + ) + ((the-as + (function object object object object object object object object none) + s3-0 + ) + s2-0 + s1-0 + s0-0 + sv-48 + sv-64 + sv-80 + sv-96 + t3-0 + ) + ) + ) + (-> s4-0 ppointer) + ) + ) + (when s5-0 + (let ((s5-1 (get-process *default-dead-pool* part-tracker #x4000))) + (when s5-1 + (let ((t9-7 (method-of-type part-tracker activate))) + (t9-7 + (the-as part-tracker s5-1) + *entity-pool* + 'part-tracker + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + s5-1 + part-tracker-init + (-> *part-group-id-table* 641) + 300 + #f + #f + #f + gp-0 + ) + (-> s5-1 ppointer) + ) + ) + (sound-play-by-name + (static-sound-name "red-fire") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + ) + ) + ) + ) + +(defbehavior robotboss-is-red-hit robotboss () + (or (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 19) + ) + (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 34) + ) + ) + ) + +(defstate robotboss-red-wait (robotboss) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('hit-jak) + (let* ((v1-2 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-3 (the-as number (logior #x3f800000 v1-2))) + (f0-2 (+ -1.0 (the-as float v1-3))) + ) + (cond + ((< 0.75 f0-2) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM10" + #t + (the-as vector #f) + ) + ) + ((< 0.5 f0-2) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM12" + #t + (the-as vector #f) + ) + ) + ((< 0.25 f0-2) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM15" + #t + (the-as vector #f) + ) + ) + (else + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "MAI-AM03" + #t + (the-as vector #f) + ) + ) + ) + ) + ) + (('missed-jak) + (let* ((v1-13 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-14 (the-as number (logior #x3f800000 v1-13))) + (f0-5 (+ -1.0 (the-as float v1-14))) + ) + (if (< 0.5 f0-5) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM14" + #t + (the-as vector #f) + ) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "MAI-AM01" + #t + (the-as vector #f) + ) + ) + ) + ) + (else + (robotboss-handler arg0 arg1 arg2 arg3) + ) + ) + ) + :enter + (behavior () + (set! (-> self hits-to-go) -1) + (set! (-> self des-cam-entity) "camera-390") + (set! (-> self use-interesting) #t) + (set! (-> self state-time) (-> *display* game-frame-counter)) + (set! (-> self till-next-shot) 0) + 0 + (none) + ) + :exit + (behavior () + (let ((a0-1 (handle->process (-> self shot-attractor)))) + (if a0-1 + (deactivate a0-1) + ) + ) + (let ((a1-1 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-1 from) self) + (set! (-> a1-1 num-params) 1) + (set! (-> a1-1 message) 'open) + (set! (-> a1-1 param 0) (the-as uint (-> *part-group-id-table* 676))) + (let ((t9-1 send-event-function) + (v1-10 (-> self alts 1)) + ) + (t9-1 (if v1-10 + (-> v1-10 extra process) + ) + a1-1 + ) + ) + ) + (let ((a1-2 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-2 from) self) + (set! (-> a1-2 num-params) 1) + (set! (-> a1-2 message) 'open) + (set! (-> a1-2 param 0) (the-as uint 0.3)) + (let ((t9-2 send-event-function) + (v1-17 (-> self alts 0)) + ) + (t9-2 (if v1-17 + (-> v1-17 extra process) + ) + a1-2 + ) + ) + ) + (set! + (-> + (the-as collide-shape-prim-group (-> self root-override root-prim)) + prims + 5 + collide-with + ) + (the-as uint 0) + ) + (set! + (-> + (the-as collide-shape-prim-group (-> self root-override root-prim)) + prims + 5 + prim-core + collide-as + ) + (the-as uint 0) + ) + (set! (-> self use-interesting) #f) + (set! (-> self des-cam-entity) #f) + (robotboss-yellow-eco-off) + (let ((a1-3 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-3 from) self) + (set! (-> a1-3 num-params) 0) + (set! (-> a1-3 message) 'show) + (let ((t9-4 send-event-function) + (v1-27 (-> self alts 11)) + ) + (t9-4 (if v1-27 + (-> v1-27 extra process) + ) + a1-3 + ) + ) + ) + (none) + ) + :trans + (behavior () + (robotboss-always-trans robotboss-red-dark-bomb) + (robotboss-shooting-trans 40) + (cond + ((zero? (-> self hits-to-go)) + (robotboss-yellow-eco-off) + (let ((a1-0 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-0 from) self) + (set! (-> a1-0 num-params) 0) + (set! (-> a1-0 message) 'show) + (let ((t9-3 send-event-function) + (v1-3 (-> self alts 11)) + ) + (t9-3 (if v1-3 + (-> v1-3 extra process) + ) + a1-0 + ) + ) + ) + (set! (-> self took-hit) #f) + (+! (-> self hits-to-go) -1) + (ja-channel-push! 1 30) + (let ((v1-10 (-> self skel root-channel 0))) + (set! + (-> v1-10 frame-group) + (the-as art-joint-anim (-> self draw art-group data 34)) + ) + ) + (set! (-> self red-smoke) #t) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (vector<-cspace! gp-0 (-> self node-list data 51)) + (let ((s5-0 (get-process *default-dead-pool* part-tracker #x4000))) + (when s5-0 + (let ((t9-7 (method-of-type part-tracker activate))) + (t9-7 + (the-as part-tracker s5-0) + *entity-pool* + 'part-tracker + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + s5-0 + part-tracker-init + (-> *part-group-id-table* 649) + 300 + #f + #f + #f + gp-0 + ) + (-> s5-0 ppointer) + ) + ) + ) + (let* ((s5-1 (get-process *default-dead-pool* manipy #x4000)) + (gp-1 (when s5-1 + (let ((t9-10 (method-of-type manipy activate))) + (t9-10 + (the-as manipy s5-1) + self + 'manipy + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + s5-1 + manipy-init + (-> self root-override trans) + (-> self entity) + *robotboss-redeco-sg* + #f + ) + (-> s5-1 ppointer) + ) + ) + ) + (let ((a1-9 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-9 from) self) + (set! (-> a1-9 num-params) 1) + (set! (-> a1-9 message) 'flash) + (set! (-> a1-9 param 0) (the-as uint 255.0)) + (send-event-function (ppointer->process (-> self parent)) a1-9) + ) + (let ((a1-10 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-10 from) self) + (set! (-> a1-10 num-params) 1) + (set! (-> a1-10 message) 'anim-mode) + (set! (-> a1-10 param 0) (the-as uint 'play1)) + (send-event-function (ppointer->process gp-1) a1-10) + ) + (let ((a1-11 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-11 from) self) + (set! (-> a1-11 num-params) 1) + (set! (-> a1-11 message) 'rot-quat) + (set! (-> a1-11 param 0) (the-as uint (-> self root-override quat))) + (send-event-function (ppointer->process gp-1) a1-11) + ) + (let ((a1-12 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-12 from) self) + (set! (-> a1-12 num-params) 1) + (set! (-> a1-12 message) 'art-joint-anim) + (set! (-> a1-12 param 0) (the-as uint "robotboss-redeco-red-last-hit")) + (send-event-function (ppointer->process gp-1) a1-12) + ) + ) + ) + ((and (> (-> self hits-to-go) 0) (-> self took-hit)) + (if + (not + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM17" + #t + (the-as vector #f) + ) + ) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "MAI-AM06" + #t + (the-as vector #f) + ) + ) + (set! (-> self took-hit) #f) + (ja-channel-push! 1 30) + (let ((v1-56 (-> self skel root-channel 0))) + (set! + (-> v1-56 frame-group) + (the-as art-joint-anim (-> self draw art-group data 19)) + ) + ) + ) + ) + (robotboss-position) + (none) + ) + :code + (behavior () + (let ((a0-0 (-> self skel root-channel 0))) + (set! + (-> a0-0 param 0) + (the float (+ (-> a0-0 frame-group data 0 length) -1)) + ) + (set! (-> a0-0 param 1) 1.0) + (joint-control-channel-group! + a0-0 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (while (not (ja-done? 0)) + (suspend) + (ja-eval) + ) + (robotboss-setup-for-hits 1 5) + (while #t + (until + (or + (>= + (- (-> *display* game-frame-counter) (-> self state-time)) + (-> self till-next-shot) + ) + (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 34) + ) + ) + (ja-channel-push! 1 60) + (let ((v1-11 (-> self skel root-channel 0))) + (set! + (-> v1-11 frame-group) + (the-as art-joint-anim (-> self draw art-group data 16)) + ) + ) + (let ((a0-7 (-> self skel root-channel 0))) + (set! (-> a0-7 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-7 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-7 param 1) 1.0) + (set! (-> a0-7 frame-num) 0.0) + (joint-control-channel-group! + a0-7 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (if (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 34) + ) + (goto cfg-24) + ) + (suspend) + (let ((a0-12 (-> self skel root-channel 0))) + (set! + (-> a0-12 param 0) + (the float (+ (-> a0-12 frame-group data 0 length) -1)) + ) + (set! (-> a0-12 param 1) 1.0) + (joint-control-channel-group-eval! + a0-12 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (label cfg-24) + (set! (-> self state-time) (-> *display* game-frame-counter)) + (let* ((f30-0 (-> self dda red-shot-time-min)) + (f28-0 (-> self dda red-shot-time-rnd)) + (v1-65 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-66 (the-as number (logior #x3f800000 v1-65))) + ) + (set! + (-> self till-next-shot) + (the + int + (+ f30-0 (the float (the int (* f28-0 (+ -1.0 (the-as float v1-66)))))) + ) + ) + ) + (when (not (robotboss-is-red-hit)) + (ja-channel-push! 1 60) + (let ((v1-72 (-> self skel root-channel 0))) + (set! + (-> v1-72 frame-group) + (the-as art-joint-anim (-> self draw art-group data 17)) + ) + ) + (let ((a0-27 (-> self skel root-channel 0))) + (set! (-> a0-27 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-27 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-27 param 1) 1.0) + (set! (-> a0-27 frame-num) 0.0) + (joint-control-channel-group! + a0-27 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (update! (-> self looping-sound 2)) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (vector<-cspace! gp-0 (-> self node-list data 40)) + (spawn (-> self particle 5) gp-0) + ) + (if (robotboss-is-red-hit) + (goto cfg-37) + ) + (suspend) + (let ((a0-31 (-> self skel root-channel 0))) + (set! + (-> a0-31 param 0) + (the float (+ (-> a0-31 frame-group data 0 length) -1)) + ) + (set! (-> a0-31 param 1) 1.0) + (joint-control-channel-group-eval! + a0-31 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (label cfg-37) + (stop! (-> self looping-sound 2)) + ) + (when (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 34) + ) + ) + (let* ((v1-120 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-121 (the-as number (logior #x3f800000 v1-120))) + (f30-1 (+ -1.0 (the-as float v1-121))) + (gp-1 (new 'stack-no-clear 'redshot-launch-array)) + (s5-0 (-> self dda red-shots-min)) + ) + (robotboss-yellow-eco-on) + (robotboss-redshot-fill-array gp-1) + (robotboss-redshot (the-as redshot-launch-info (-> gp-1 info)) #t) + (let* + ((v1-127 + (+ s5-0 (the int (* f30-1 (the float (-> self dda red-shots-rnd))))) + ) + (s5-1 (+ (min 6 v1-127) -1)) + ) + (dotimes (s4-0 s5-1) + (robotboss-redshot (-> gp-1 info (+ s4-0 1)) #f) + ) + ) + ) + ) + (when (not (robotboss-is-red-hit)) + (let* ((v1-135 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-136 (the-as number (logior #x3f800000 v1-135))) + (f0-33 (+ -1.0 (the-as float v1-136))) + ) + (cond + ((< 0.8333333 f0-33) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM04" + #t + (the-as vector #f) + ) + ) + ((< 0.6666667 f0-33) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM05" + #t + (the-as vector #f) + ) + ) + ((< 0.5 f0-33) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM08" + #t + (the-as vector #f) + ) + ) + ((< 0.33333334 f0-33) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM10" + #t + (the-as vector #f) + ) + ) + ((< 0.16666667 f0-33) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "MAI-AM03" + #t + (the-as vector #f) + ) + ) + (else + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "MAI-AM02" + #t + (the-as vector #f) + ) + ) + ) + ) + (let ((v1-157 (-> self skel root-channel 0))) + (set! + (-> v1-157 frame-group) + (the-as art-joint-anim (-> self draw art-group data 18)) + ) + ) + ) + (let ((a0-56 (-> self skel root-channel 0))) + (set! (-> a0-56 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-56 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-56 param 1) 1.0) + (set! (-> a0-56 frame-num) 0.0) + (joint-control-channel-group! + a0-56 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-57 (-> self skel root-channel 0))) + (set! + (-> a0-57 param 0) + (the float (+ (-> a0-57 frame-group data 0 length) -1)) + ) + (set! (-> a0-57 param 1) 1.0) + (joint-control-channel-group-eval! + a0-57 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (when (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 34) + ) + (let ((a0-63 (-> self skel root-channel 0))) + (set! + (-> a0-63 frame-group) + (the-as art-joint-anim (-> self draw art-group data 20)) + ) + (set! + (-> a0-63 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 20)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-63 param 1) 1.0) + (set! (-> a0-63 frame-num) 0.0) + (joint-control-channel-group! + a0-63 + (the-as art-joint-anim (-> self draw art-group data 20)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-64 (-> self skel root-channel 0))) + (set! + (-> a0-64 param 0) + (the float (+ (-> a0-64 frame-group data 0 length) -1)) + ) + (set! (-> a0-64 param 1) 1.0) + (joint-control-channel-group-eval! + a0-64 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (go robotboss-red-dark-bomb) + ) + ) + (none) + ) + :post + (the-as (function none :behavior robotboss) transform-post) + ) + +(defstate robotboss-red (robotboss) + :event + robotboss-handler + :enter + (behavior () + (set! (-> self old-loc quad) (-> self desired-loc quad)) + (set-vector! (-> self desired-loc) 8192.0 -40960.0 327680.0 1.0) + (set! (-> self loc-t) 0.0) + (set! (-> self loc-t-start) (-> *display* game-frame-counter)) + (set! (-> self loc-t-duration) 900) + (set! (-> self desired-pool-y) -22528.0) + (set-setting! *setting-control* self 'sound-flava #f (the-as float 40.0) 48) + (none) + ) + :trans + (behavior () + (robotboss-always-trans robotboss-red-wait) + (if (>= (-> self loc-t) 1.0) + (go robotboss-red-wait) + ) + (robotboss-position) + (none) + ) + :code + (behavior () + (let ((a0-0 (-> self skel root-channel 0))) + (set! + (-> a0-0 param 0) + (the float (+ (-> a0-0 frame-group data 0 length) -1)) + ) + (set! (-> a0-0 param 1) 1.0) + (joint-control-channel-group! + a0-0 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (while (not (ja-done? 0)) + (suspend) + (ja-eval) + ) + (ja-channel-push! 1 60) + (let ((v1-11 (-> self skel root-channel 0))) + (set! + (-> v1-11 frame-group) + (the-as art-joint-anim (-> self draw art-group data 15)) + ) + ) + (let ((a0-6 (-> self skel root-channel 0))) + (set! (-> a0-6 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-6 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-6 param 1) 1.0) + (set! (-> a0-6 frame-num) 0.0) + (joint-control-channel-group! a0-6 (if (> (-> self skel active-channels) 0) + (-> + self + skel + root-channel + 0 + frame-group + ) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-7 (-> self skel root-channel 0))) + (set! + (-> a0-7 param 0) + (the float (+ (-> a0-7 frame-group data 0 length) -1)) + ) + (set! (-> a0-7 param 1) 1.0) + (joint-control-channel-group-eval! + a0-7 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (while #t + (when (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 6) + ) + ) + (ja-channel-push! 1 60) + (let ((v1-50 (-> self skel root-channel 0))) + (set! + (-> v1-50 frame-group) + (the-as art-joint-anim (-> self draw art-group data 6)) + ) + ) + ) + (let ((a0-17 (-> self skel root-channel 0))) + (set! (-> a0-17 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-17 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-17 param 1) 1.0) + (set! (-> a0-17 frame-num) 0.0) + (joint-control-channel-group! + a0-17 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-18 (-> self skel root-channel 0))) + (set! + (-> a0-18 param 0) + (the float (+ (-> a0-18 frame-group data 0 length) -1)) + ) + (set! (-> a0-18 param 1) 1.0) + (joint-control-channel-group-eval! + a0-18 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior robotboss) transform-post) + ) + +(defstate robotboss-green-dark-bomb-wait (robotboss) + :event + robotboss-bomb-handler + :enter + (behavior () + (set! (-> self children-spawned) 0) + 0 + (none) + ) + :exit + (behavior () + (set! (-> self ignore-camera) #f) + (set! (-> self des-cam-entity) #f) + (none) + ) + :trans + (behavior () + (robotboss-always-trans robotboss-red) + (if + (and + (< (-> self children-spawned) 0) + (or + (not *target*) + (!= (-> *target* control unknown-surface00 name) 'launch-jump) + ) + ) + (go robotboss-red) + ) + (robotboss-position) + (none) + ) + :code + (behavior () + (let ((a0-0 (-> self skel root-channel 0))) + (set! + (-> a0-0 param 0) + (the float (+ (-> a0-0 frame-group data 0 length) -1)) + ) + (set! (-> a0-0 param 1) 1.0) + (joint-control-channel-group! + a0-0 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (while (not (ja-done? 0)) + (suspend) + (ja-eval) + ) + (ja-channel-push! 1 30) + (let ((v1-11 (-> self skel root-channel 0))) + (set! + (-> v1-11 frame-group) + (the-as art-joint-anim (-> self draw art-group data 9)) + ) + ) + (let ((a0-6 (-> self skel root-channel 0))) + (set! (-> a0-6 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-6 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-6 param 1) 1.0) + (set! (-> a0-6 frame-num) 0.0) + (joint-control-channel-group! a0-6 (if (> (-> self skel active-channels) 0) + (-> + self + skel + root-channel + 0 + frame-group + ) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (when (and (>= (ja-frame-num 0) 15.0) (< (-> self children-spawned) 1)) + (robotboss-darkecobomb + (new 'static 'vector :y 32768.0) + (-> self dda green-bomb-time) + ) + (set! (-> self des-cam-entity) "camera-365") + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM11" + #t + (the-as vector #f) + ) + ) + (suspend) + (let ((a0-10 (-> self skel root-channel 0))) + (set! + (-> a0-10 param 0) + (the float (+ (-> a0-10 frame-group data 0 length) -1)) + ) + (set! (-> a0-10 param 1) 1.0) + (joint-control-channel-group-eval! + a0-10 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (while #t + (when (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 6) + ) + ) + (ja-channel-push! 1 60) + (let ((v1-59 (-> self skel root-channel 0))) + (set! + (-> v1-59 frame-group) + (the-as art-joint-anim (-> self draw art-group data 6)) + ) + ) + ) + (let ((a0-20 (-> self skel root-channel 0))) + (set! (-> a0-20 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-20 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-20 param 1) 1.0) + (set! (-> a0-20 frame-num) 0.0) + (joint-control-channel-group! + a0-20 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-21 (-> self skel root-channel 0))) + (set! + (-> a0-21 param 0) + (the float (+ (-> a0-21 frame-group data 0 length) -1)) + ) + (set! (-> a0-21 param 1) 1.0) + (joint-control-channel-group-eval! + a0-21 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior robotboss) transform-post) + ) + +(defstate robotboss-green-dark-bomb (robotboss) + :enter + (behavior () + (set! (-> self old-loc quad) (-> self desired-loc quad)) + (set-vector! (-> self desired-loc) 16384.0 -81920.0 716800.0 1.0) + (set! (-> self loc-t) 0.0) + (set! (-> self loc-t-start) (-> *display* game-frame-counter)) + (set! (-> self loc-t-duration) 900) + (set! (-> self desired-pool-y) -24576.0) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "MAI-AM01" + #t + (the-as vector #f) + ) + (none) + ) + :trans + (behavior () + (robotboss-always-trans robotboss-green-dark-bomb-wait) + (robotboss-position) + (if (>= (-> self loc-t) 1.0) + (go robotboss-green-dark-bomb-wait) + ) + (none) + ) + :code + (behavior () + (ja-channel-push! 1 60) + (let ((v1-2 (-> self skel root-channel 0))) + (set! + (-> v1-2 frame-group) + (the-as art-joint-anim (-> self draw art-group data 14)) + ) + ) + (let ((a0-4 (-> self skel root-channel 0))) + (set! (-> a0-4 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-4 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-4 param 1) 1.0) + (set! (-> a0-4 frame-num) 0.0) + (joint-control-channel-group! a0-4 (if (> (-> self skel active-channels) 0) + (-> + self + skel + root-channel + 0 + frame-group + ) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-5 (-> self skel root-channel 0))) + (set! + (-> a0-5 param 0) + (the float (+ (-> a0-5 frame-group data 0 length) -1)) + ) + (set! (-> a0-5 param 1) 1.0) + (joint-control-channel-group-eval! + a0-5 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (when (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 6) + ) + ) + (ja-channel-push! 1 60) + (let ((v1-41 (-> self skel root-channel 0))) + (set! + (-> v1-41 frame-group) + (the-as art-joint-anim (-> self draw art-group data 6)) + ) + ) + ) + (while #t + (let ((a0-15 (-> self skel root-channel 0))) + (set! (-> a0-15 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-15 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-15 param 1) 1.0) + (set! (-> a0-15 frame-num) 0.0) + (joint-control-channel-group! + a0-15 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-16 (-> self skel root-channel 0))) + (set! + (-> a0-16 param 0) + (the float (+ (-> a0-16 frame-group data 0 length) -1)) + ) + (set! (-> a0-16 param 1) 1.0) + (joint-control-channel-group-eval! + a0-16 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior robotboss) transform-post) + ) + +(defbehavior + robotboss-greenshot robotboss + ((arg0 vector) (arg1 basic) (arg2 basic) (arg3 symbol)) + (+! (-> self children-spawned) 1) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (let ((s2-0 (new 'stack-no-clear 'vector))) + (vector<-cspace! gp-0 (-> self node-list data 68)) + (set! (-> s2-0 quad) (-> self entity extra trans quad)) + (set! (-> s2-0 y) (+ -40960.0 (-> s2-0 y))) + (vector+! s2-0 s2-0 arg0) + (let ((s1-1 (get-process *default-dead-pool* greenshot #x4000))) + (when s1-1 + (let ((t9-2 (method-of-type greenshot activate))) + (t9-2 + (the-as greenshot s1-1) + self + 'greenshot + (the-as pointer #x70004000) + ) + ) + (run-now-in-process s1-1 greenshot-init-by-other gp-0 s2-0 arg1 arg2) + (-> s1-1 ppointer) + ) + ) + ) + (when arg3 + (let ((s5-1 (get-process *default-dead-pool* part-tracker #x4000))) + (when s5-1 + (let ((t9-5 (method-of-type part-tracker activate))) + (t9-5 + (the-as part-tracker s5-1) + *entity-pool* + 'part-tracker + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + s5-1 + part-tracker-init + (-> *part-group-id-table* 640) + 300 + #f + #f + #f + gp-0 + ) + (-> s5-1 ppointer) + ) + ) + (sound-play-by-name + (static-sound-name "green-fire") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + ) + ) + (none) + ) + +(defstate robotboss-green-wait (robotboss) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('trigger) + (ja-channel-push! 1 60) + (let ((v1-3 (-> self skel root-channel 0))) + (set! + (-> v1-3 frame-group) + (the-as art-joint-anim (-> self draw art-group data 13)) + ) + ) + (robotboss-yellow-eco-off) + (let ((a1-2 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-2 from) self) + (set! (-> a1-2 num-params) 0) + (set! (-> a1-2 message) 'show) + (let ((t9-2 send-event-function) + (v1-5 (-> self alts 11)) + ) + (t9-2 (if v1-5 + (-> v1-5 extra process) + ) + a1-2 + ) + ) + ) + ) + (('hit-jak) + (let* ((v1-8 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-9 (the-as number (logior #x3f800000 v1-8))) + (f0-2 (+ -1.0 (the-as float v1-9))) + ) + (cond + ((< 0.75 f0-2) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM10" + #t + (the-as vector #f) + ) + ) + ((< 0.5 f0-2) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM12" + #t + (the-as vector #f) + ) + ) + ((< 0.25 f0-2) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM15" + #t + (the-as vector #f) + ) + ) + (else + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "MAI-AM03" + #t + (the-as vector #f) + ) + ) + ) + ) + ) + (('blob-died) + (let* ((v1-19 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-20 (the-as number (logior #x3f800000 v1-19))) + (f0-5 (+ -1.0 (the-as float v1-20))) + ) + (cond + ((< 0.75 f0-5) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "MAI-AM02" + #t + (the-as vector #f) + ) + ) + ((< 0.5 f0-5) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM03" + #t + (the-as vector #f) + ) + ) + ((< 0.25 f0-5) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM14" + #t + (the-as vector #f) + ) + ) + (else + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM02" + #t + (the-as vector #f) + ) + ) + ) + ) + ) + (else + (robotboss-handler arg0 arg1 arg2 arg3) + ) + ) + ) + :enter + (behavior () + (set! (-> self state-time) (-> *display* game-frame-counter)) + (set! (-> self children-spawned) 0) + (robotboss-setup-for-hits 2 5) + (set! (-> self des-cam-entity) "camera-385") + (none) + ) + :exit + (behavior () + (let ((a0-1 (handle->process (-> self shot-attractor)))) + (if a0-1 + (deactivate a0-1) + ) + ) + (let ((a1-1 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-1 from) self) + (set! (-> a1-1 num-params) 1) + (set! (-> a1-1 message) 'open) + (set! (-> a1-1 param 0) (the-as uint (-> *part-group-id-table* 675))) + (let ((t9-1 send-event-function) + (v1-10 (-> self alts 2)) + ) + (t9-1 (if v1-10 + (-> v1-10 extra process) + ) + a1-1 + ) + ) + ) + (let ((a1-2 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-2 from) self) + (set! (-> a1-2 num-params) 1) + (set! (-> a1-2 message) 'open) + (set! (-> a1-2 param 0) (the-as uint 0.2)) + (let ((t9-2 send-event-function) + (v1-17 (-> self alts 0)) + ) + (t9-2 (if v1-17 + (-> v1-17 extra process) + ) + a1-2 + ) + ) + ) + (set! + (-> + (the-as collide-shape-prim-group (-> self root-override root-prim)) + prims + 9 + collide-with + ) + (the-as uint 0) + ) + (set! + (-> + (the-as collide-shape-prim-group (-> self root-override root-prim)) + prims + 9 + prim-core + collide-as + ) + (the-as uint 0) + ) + (set! (-> self des-cam-entity) #f) + (robotboss-yellow-eco-off) + (let ((a1-3 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-3 from) self) + (set! (-> a1-3 num-params) 0) + (set! (-> a1-3 message) 'show) + (let ((t9-4 send-event-function) + (v1-27 (-> self alts 11)) + ) + (t9-4 (if v1-27 + (-> v1-27 extra process) + ) + a1-3 + ) + ) + ) + (none) + ) + :trans + (behavior () + (robotboss-always-trans robotboss-green-dark-bomb) + (cond + ((and + (>= (- (-> *display* game-frame-counter) (-> self state-time)) 120) + (< (-> self children-spawned) 1) + ) + (robotboss-greenshot + (new 'static 'vector) + (the-as basic 24576.0) + (the-as basic 600) + #t + ) + (ja-channel-push! 1 60) + (let ((v1-9 (-> self skel root-channel 0))) + (set! + (-> v1-9 frame-group) + (the-as art-joint-anim (-> self draw art-group data 11)) + ) + ) + ) + ((and + (>= (- (-> *display* game-frame-counter) (-> self state-time)) 360) + (< (-> self children-spawned) 3) + ) + (robotboss-greenshot + (new 'static 'vector :x 8192.0) + (the-as basic 16384.0) + (the-as basic 600) + #t + ) + (robotboss-greenshot + (new 'static 'vector :z 8192.0) + (the-as basic 32768.0) + (the-as basic 660) + #f + ) + (ja-channel-push! 1 60) + (let ((v1-20 (-> self skel root-channel 0))) + (set! + (-> v1-20 frame-group) + (the-as art-joint-anim (-> self draw art-group data 11)) + ) + ) + ) + ((and + (>= (- (-> *display* game-frame-counter) (-> self state-time)) 780) + (< (-> self children-spawned) 6) + ) + (robotboss-greenshot + (new 'static 'vector :z 12288.0) + (the-as basic 20480.0) + (the-as basic 600) + #t + ) + (robotboss-greenshot + (new 'static 'vector :x 8192.0) + (the-as basic 8192.0) + (the-as basic 660) + #f + ) + (robotboss-greenshot + (new 'static 'vector) + (the-as basic 36864.0) + (the-as basic 720) + #f + ) + (ja-channel-push! 1 60) + (let ((v1-32 (-> self skel root-channel 0))) + (set! + (-> v1-32 frame-group) + (the-as art-joint-anim (-> self draw art-group data 11)) + ) + ) + ) + ((and + (>= (- (-> *display* game-frame-counter) (-> self state-time)) 1200) + (< (-> self children-spawned) 7) + ) + (robotboss-greenshot + (new 'static 'vector) + (the-as basic 24576.0) + (the-as basic 600) + #t + ) + (ja-channel-push! 1 60) + (let ((v1-42 (-> self skel root-channel 0))) + (set! + (-> v1-42 frame-group) + (the-as art-joint-anim (-> self draw art-group data 11)) + ) + ) + ) + ((and + (>= (- (-> *display* game-frame-counter) (-> self state-time)) 1650) + (< (-> self children-spawned) 9) + ) + (robotboss-greenshot + (new 'static 'vector) + (the-as basic 12288.0) + (the-as basic 600) + #t + ) + (robotboss-greenshot + (new 'static 'vector :x 4096.0 :z 12288.0) + (the-as basic 32768.0) + (the-as basic 600) + #f + ) + (ja-channel-push! 1 60) + (let ((v1-53 (-> self skel root-channel 0))) + (set! + (-> v1-53 frame-group) + (the-as art-joint-anim (-> self draw art-group data 11)) + ) + ) + ) + ((and + (>= (- (-> *display* game-frame-counter) (-> self state-time)) 2400) + (< (-> self children-spawned) 10) + ) + (+! (-> self children-spawned) 1) + (let ((gp-0 (get-process *default-dead-pool* green-eco-lurker-gen #x4000))) + (when gp-0 + (let ((t9-16 (method-of-type green-eco-lurker-gen activate))) + (t9-16 + (the-as green-eco-lurker-gen gp-0) + self + 'green-eco-lurker-gen + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + gp-0 + green-eco-lurker-gen-init-by-other + (-> self entity) + (-> self entity extra trans) + (-> self dda num-blobs) + ) + (-> gp-0 ppointer) + ) + ) + (set! (-> self old-loc quad) (-> self desired-loc quad)) + (set-vector! (-> self desired-loc) 24576.0 0.0 655360.0 1.0) + (set! (-> self loc-t) 0.0) + (set! (-> self loc-t-start) (-> *display* game-frame-counter)) + (set! (-> self loc-t-duration) 900) + (set! (-> self desired-pool-y) -26624.0) + ) + ((and + (>= (- (-> *display* game-frame-counter) (-> self state-time)) 2460) + (< (-> self children-spawned) 11) + ) + (+! (-> self children-spawned) 1) + (robotboss-yellow-eco-on) + ) + ) + (robotboss-position) + (none) + ) + :code + (behavior () + (let ((a0-0 (-> self skel root-channel 0))) + (set! + (-> a0-0 param 0) + (the float (+ (-> a0-0 frame-group data 0 length) -1)) + ) + (set! (-> a0-0 param 1) 1.0) + (joint-control-channel-group! + a0-0 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (while (not (ja-done? 0)) + (suspend) + (ja-eval) + ) + (while #t + (cond + ((= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 13) + ) + (go robotboss-green-dark-bomb) + ) + ((not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 6) + ) + ) + (ja-channel-push! 1 60) + (let ((v1-25 (-> self skel root-channel 0))) + (set! + (-> v1-25 frame-group) + (the-as art-joint-anim (-> self draw art-group data 6)) + ) + ) + ) + ) + (let ((a0-14 (-> self skel root-channel 0))) + (set! (-> a0-14 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-14 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-14 param 1) 1.0) + (set! (-> a0-14 frame-num) 0.0) + (joint-control-channel-group! + a0-14 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-15 (-> self skel root-channel 0))) + (set! + (-> a0-15 param 0) + (the float (+ (-> a0-15 frame-group data 0 length) -1)) + ) + (set! (-> a0-15 param 1) 1.0) + (joint-control-channel-group-eval! + a0-15 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior robotboss) transform-post) + ) + +(defstate robotboss-green (robotboss) + :event + robotboss-handler + :enter + (behavior () + (set! (-> self old-loc quad) (-> self desired-loc quad)) + (set-vector! (-> self desired-loc) 24576.0 0.0 245760.0 1.0) + (set! (-> self loc-t) 0.0) + (set! (-> self loc-t-start) (-> *display* game-frame-counter)) + (set! (-> self loc-t-duration) 900) + (set! (-> self desired-pool-y) -26624.0) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM01" + #t + (the-as vector #f) + ) + (set-setting! *setting-control* self 'sound-flava #f (the-as float 40.0) 47) + (none) + ) + :trans + (behavior () + (robotboss-always-trans robotboss-green-wait) + (if (>= (-> self loc-t) 1.0) + (go robotboss-green-wait) + ) + (robotboss-position) + (none) + ) + :code + (behavior () + (let ((a0-0 (-> self skel root-channel 0))) + (set! + (-> a0-0 param 0) + (the float (+ (-> a0-0 frame-group data 0 length) -1)) + ) + (set! (-> a0-0 param 1) 1.0) + (joint-control-channel-group! + a0-0 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (while (not (ja-done? 0)) + (suspend) + (ja-eval) + ) + (ja-channel-push! 1 60) + (let ((v1-11 (-> self skel root-channel 0))) + (set! + (-> v1-11 frame-group) + (the-as art-joint-anim (-> self draw art-group data 10)) + ) + ) + (let ((a0-6 (-> self skel root-channel 0))) + (set! (-> a0-6 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-6 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-6 param 1) 1.0) + (set! (-> a0-6 frame-num) 0.0) + (joint-control-channel-group! a0-6 (if (> (-> self skel active-channels) 0) + (-> + self + skel + root-channel + 0 + frame-group + ) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-7 (-> self skel root-channel 0))) + (set! + (-> a0-7 param 0) + (the float (+ (-> a0-7 frame-group data 0 length) -1)) + ) + (set! (-> a0-7 param 1) 1.0) + (joint-control-channel-group-eval! + a0-7 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (while #t + (when (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 6) + ) + ) + (ja-channel-push! 1 60) + (let ((v1-50 (-> self skel root-channel 0))) + (set! + (-> v1-50 frame-group) + (the-as art-joint-anim (-> self draw art-group data 6)) + ) + ) + ) + (let ((a0-17 (-> self skel root-channel 0))) + (set! (-> a0-17 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-17 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-17 param 1) 1.0) + (set! (-> a0-17 frame-num) 0.0) + (joint-control-channel-group! + a0-17 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-18 (-> self skel root-channel 0))) + (set! + (-> a0-18 param 0) + (the float (+ (-> a0-18 frame-group data 0 length) -1)) + ) + (set! (-> a0-18 param 1) 1.0) + (joint-control-channel-group-eval! + a0-18 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior robotboss) transform-post) + ) + +(defstate robotboss-blue-dark-bomb-wait (robotboss) + :event + robotboss-bomb-handler + :enter + (behavior () + (set! (-> self children-spawned) 0) + 0 + (none) + ) + :exit + (behavior () + (set! (-> self ignore-camera) #f) + (set! (-> self des-cam-entity) #f) + (none) + ) + :trans + (behavior () + (robotboss-always-trans robotboss-green) + (if + (and + (< (-> self children-spawned) 0) + (or + (not *target*) + (!= (-> *target* control unknown-surface00 name) 'launch-jump) + ) + ) + (go robotboss-green) + ) + (robotboss-position) + (none) + ) + :code + (behavior () + (let ((a0-0 (-> self skel root-channel 0))) + (set! + (-> a0-0 param 0) + (the float (+ (-> a0-0 frame-group data 0 length) -1)) + ) + (set! (-> a0-0 param 1) 1.0) + (joint-control-channel-group! + a0-0 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (while (not (ja-done? 0)) + (suspend) + (ja-eval) + ) + (ja-channel-push! 1 30) + (let ((v1-11 (-> self skel root-channel 0))) + (set! + (-> v1-11 frame-group) + (the-as art-joint-anim (-> self draw art-group data 9)) + ) + ) + (let ((a0-6 (-> self skel root-channel 0))) + (set! (-> a0-6 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-6 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-6 param 1) 1.0) + (set! (-> a0-6 frame-num) 0.0) + (joint-control-channel-group! a0-6 (if (> (-> self skel active-channels) 0) + (-> + self + skel + root-channel + 0 + frame-group + ) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (when (and (>= (ja-frame-num 0) 15.0) (< (-> self children-spawned) 1)) + (robotboss-darkecobomb + (new 'static 'vector :y 32768.0) + (the-as float 3600.0) + ) + (set! (-> self des-cam-entity) "camera-365") + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "MAI-AM04" + #t + (the-as vector #f) + ) + ) + (suspend) + (let ((a0-10 (-> self skel root-channel 0))) + (set! + (-> a0-10 param 0) + (the float (+ (-> a0-10 frame-group data 0 length) -1)) + ) + (set! (-> a0-10 param 1) 1.0) + (joint-control-channel-group-eval! + a0-10 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (while #t + (cond + ((and + *target* + (< (+ 81920.0 (-> self entity extra trans y)) (-> (target-pos 0) y)) + ) + (when (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 7) + ) + ) + (ja-channel-push! 1 240) + (let ((v1-64 (-> self skel root-channel 0))) + (set! + (-> v1-64 frame-group) + (the-as art-joint-anim (-> self draw art-group data 7)) + ) + ) + ) + ) + ((not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 6) + ) + ) + (ja-channel-push! 1 60) + (let ((v1-73 (-> self skel root-channel 0))) + (set! + (-> v1-73 frame-group) + (the-as art-joint-anim (-> self draw art-group data 6)) + ) + ) + ) + ) + (let ((a0-30 (-> self skel root-channel 0))) + (set! (-> a0-30 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-30 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-30 param 1) 1.0) + (set! (-> a0-30 frame-num) 0.0) + (joint-control-channel-group! + a0-30 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-31 (-> self skel root-channel 0))) + (set! + (-> a0-31 param 0) + (the float (+ (-> a0-31 frame-group data 0 length) -1)) + ) + (set! (-> a0-31 param 1) 1.0) + (joint-control-channel-group-eval! + a0-31 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior robotboss) transform-post) + ) + +(defstate robotboss-blue-dark-bomb (robotboss) + :enter + (behavior () + (set! (-> self old-loc quad) (-> self desired-loc quad)) + (set-vector! (-> self desired-loc) 16384.0 -118784.0 614400.0 1.0) + (set! (-> self loc-t) 0.0) + (set! (-> self loc-t-start) (-> *display* game-frame-counter)) + (set! (-> self loc-t-duration) 900) + (set! (-> self desired-pool-y) -28672.0) + (none) + ) + :trans + (behavior () + (robotboss-always-trans robotboss-blue-dark-bomb-wait) + (robotboss-position) + (if (>= (-> self loc-t) 1.0) + (go robotboss-blue-dark-bomb-wait) + ) + (none) + ) + :code + (behavior () + (ja-channel-push! 1 60) + (let ((v1-2 (-> self skel root-channel 0))) + (set! + (-> v1-2 frame-group) + (the-as art-joint-anim (-> self draw art-group data 8)) + ) + ) + (let ((a0-4 (-> self skel root-channel 0))) + (set! (-> a0-4 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-4 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-4 param 1) 1.0) + (set! (-> a0-4 frame-num) 0.0) + (joint-control-channel-group! a0-4 (if (> (-> self skel active-channels) 0) + (-> + self + skel + root-channel + 0 + frame-group + ) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-5 (-> self skel root-channel 0))) + (set! + (-> a0-5 param 0) + (the float (+ (-> a0-5 frame-group data 0 length) -1)) + ) + (set! (-> a0-5 param 1) 1.0) + (joint-control-channel-group-eval! + a0-5 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (when (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 6) + ) + ) + (ja-channel-push! 1 60) + (let ((v1-41 (-> self skel root-channel 0))) + (set! + (-> v1-41 frame-group) + (the-as art-joint-anim (-> self draw art-group data 6)) + ) + ) + ) + (while #t + (let ((a0-15 (-> self skel root-channel 0))) + (set! (-> a0-15 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-15 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-15 param 1) 1.0) + (set! (-> a0-15 frame-num) 0.0) + (joint-control-channel-group! + a0-15 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-16 (-> self skel root-channel 0))) + (set! + (-> a0-16 param 0) + (the float (+ (-> a0-16 frame-group data 0 length) -1)) + ) + (set! (-> a0-16 param 1) 1.0) + (joint-control-channel-group-eval! + a0-16 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior robotboss) transform-post) + ) + +(defbehavior robotboss-blue-beam robotboss ((arg0 int) (arg1 symbol)) + (let ((s4-0 (new 'stack-no-clear 'vector)) + (gp-0 (new 'stack-no-clear 'vector)) + ) + (let ((s3-0 (new 'stack-no-clear 'vector))) + (set! (-> gp-0 quad) (-> self entity extra trans quad)) + (vector<-cspace! s4-0 (-> self node-list data arg0)) + (vector-! s3-0 gp-0 s4-0) + (let ((f30-0 (vector-y-angle s3-0)) + (f0-1 (- 16384.0 (vector-x-angle s3-0))) + ) + (set! (-> *part-id-table* 2546 init-specs 14 initial-valuef) f30-0) + (set! (-> *part-id-table* 2546 init-specs 13 initial-valuef) f0-1) + (set! (-> *part-id-table* 2548 init-specs 14 initial-valuef) f30-0) + (set! (-> *part-id-table* 2548 init-specs 13 initial-valuef) f0-1) + (set! (-> *part-id-table* 2545 init-specs 14 initial-valuef) f30-0) + (set! (-> *part-id-table* 2545 init-specs 13 initial-valuef) f0-1) + ) + ) + (cond + ((and + (>= (- (-> *display* game-frame-counter) (-> self state-time)) 120) + (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 3) + ) + ) + (spawn (-> self particle 0) s4-0) + (when (and arg1 (nonzero? (-> self looping-sound 0))) + (update! (-> self looping-sound 0)) + (when (and *target* (zero? (logand (-> *target* state-flags) #x80f8))) + (let ((t2-0 (new 'stack-no-clear 'collide-mesh-cache-tri)) + (a2-0 (new 'stack-no-clear 'vector)) + ) + (vector-! a2-0 gp-0 s4-0) + (when + (>= + (dummy-10 + *collide-cache* + s4-0 + a2-0 + (the-as float 4096.0) + 16 + self + t2-0 + 1 + ) + 0.0 + ) + (let ((a1-13 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-13 from) self) + (set! (-> a1-13 num-params) 2) + (set! (-> a1-13 message) 'attack) + (set! (-> a1-13 param 0) (the-as uint #f)) + (let ((v1-50 (new 'static 'attack-info :mask #xc0))) + (set! (-> v1-50 shove-up) 10240.0) + (set! (-> v1-50 shove-back) 30720.0) + (set! (-> a1-13 param 1) (the-as uint v1-50)) + ) + (send-event-function *target* a1-13) + ) + ) + ) + ) + ) + ) + ((nonzero? (-> self looping-sound 0)) + (stop! (-> self looping-sound 0)) + ) + ) + (cond + ((and + (>= (- (-> *display* game-frame-counter) (-> self state-time)) 420) + (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 5) + ) + ) + ) + (spawn (-> self particle 1) gp-0) + (when (and arg1 (nonzero? (-> self looping-sound 1))) + (update! (-> self looping-sound 1)) + (when + (and + *target* + (zero? (logand (-> *target* state-flags) #x80f8)) + (>= 8192.0 (vector-vector-distance gp-0 (target-pos 0))) + ) + (let ((a1-16 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-16 from) self) + (set! (-> a1-16 num-params) 2) + (set! (-> a1-16 message) 'attack) + (set! (-> a1-16 param 0) (the-as uint #f)) + (let ((v1-80 (new 'static 'attack-info :mask #xc0))) + (set! (-> v1-80 shove-up) 10240.0) + (set! (-> v1-80 shove-back) 30720.0) + (set! (-> a1-16 param 1) (the-as uint v1-80)) + ) + (send-event-function *target* a1-16) + ) + ) + ) + ) + ((nonzero? (-> self looping-sound 1)) + (stop! (-> self looping-sound 1)) + ) + ) + ) + (none) + ) + +(defbehavior robotboss-set-dda robotboss () + 0 + (let ((gp-0 (-> self entity extra perm))) + (logior! (-> gp-0 status) (entity-perm-status user-set-from-cstage)) + (set! (-> gp-0 user-int8 0) (seekl (-> gp-0 user-int8 0) 255 1)) + (let ((v1-5 (-> gp-0 user-int8 0))) + (set! (-> self dda) (cond + ((< 15 v1-5) + (new 'static 'robotboss-dda + :blue-bomb-time 4800.0 + :num-blobs 8 + :green-bomb-time 4200.0 + :red-shots-min 3 + :red-shot-time-min 5400.0 + :red-shot-time-rnd 600.0 + :red-bomb-time 3600.0 + :yellow-shot-time-min 1800.0 + :yellow-gun-hits 7 + :yellow-bomb-time 4800.0 + ) + ) + ((< 10 v1-5) + (new 'static 'robotboss-dda + :blue-bomb-time 4800.0 + :num-blobs 10 + :green-bomb-time 4200.0 + :red-shots-min 4 + :red-shot-time-min 4800.0 + :red-shot-time-rnd 600.0 + :red-bomb-time 3600.0 + :yellow-shot-time-min 1500.0 + :yellow-gun-hits 10 + :yellow-bomb-time 4800.0 + ) + ) + ((< 5 v1-5) + (new 'static 'robotboss-dda + :blue-bomb-time 4800.0 + :num-blobs 11 + :green-bomb-time 4200.0 + :red-shots-min 4 + :red-shot-time-min 4200.0 + :red-shot-time-rnd 600.0 + :red-bomb-time 3600.0 + :yellow-shot-time-min 1200.0 + :yellow-gun-hits 13 + :yellow-bomb-time 4800.0 + ) + ) + (else + (new 'static 'robotboss-dda + :blue-bomb-time 4800.0 + :num-blobs 12 + :green-bomb-time 4200.0 + :red-shots-min 5 + :red-shot-time-min 3600.0 + :red-shot-time-rnd 600.0 + :red-bomb-time 3600.0 + :yellow-shot-time-min 900.0 + :yellow-gun-hits 16 + :yellow-bomb-time 4800.0 + ) + ) + ) + ) + ) + ) + (none) + ) + +(defbehavior robotboss-blue-done robotboss () + (robotboss-yellow-eco-off) + (let ((a1-0 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-0 from) self) + (set! (-> a1-0 num-params) 0) + (set! (-> a1-0 message) 'show) + (let ((t9-1 send-event-function) + (v1-1 (-> self alts 11)) + ) + (t9-1 (if v1-1 + (-> v1-1 extra process) + ) + a1-0 + ) + ) + ) + ) + +(defstate robotboss-blue-wait (robotboss) + :event + robotboss-handler + :enter + (behavior () + (set! (-> self state-time) (-> *display* game-frame-counter)) + (robotboss-setup-for-hits 4 5) + (let ((a1-1 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-1 from) self) + (set! (-> a1-1 num-params) 0) + (set! (-> a1-1 message) 'hide) + (let ((t9-1 send-event-function) + (v1-3 (-> self alts 11)) + ) + (t9-1 (if v1-3 + (-> v1-3 extra process) + ) + a1-1 + ) + ) + ) + (process-entity-status! self (entity-perm-status bit-3) #t) + (set! (-> self use-interesting) #t) + (robotboss-yellow-eco-on) + (none) + ) + :exit + (behavior () + (let ((a0-1 (handle->process (-> self shot-attractor)))) + (if a0-1 + (deactivate a0-1) + ) + ) + (let ((a1-1 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-1 from) self) + (set! (-> a1-1 num-params) 1) + (set! (-> a1-1 message) 'open) + (set! (-> a1-1 param 0) (the-as uint (-> *part-group-id-table* 674))) + (let ((t9-1 send-event-function) + (v1-10 (-> self alts 3)) + ) + (t9-1 (if v1-10 + (-> v1-10 extra process) + ) + a1-1 + ) + ) + ) + (let ((a1-2 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-2 from) self) + (set! (-> a1-2 num-params) 1) + (set! (-> a1-2 message) 'open) + (set! (-> a1-2 param 0) (the-as uint 0.1)) + (let ((t9-2 send-event-function) + (v1-17 (-> self alts 0)) + ) + (t9-2 (if v1-17 + (-> v1-17 extra process) + ) + a1-2 + ) + ) + ) + (set! + (-> + (the-as collide-shape-prim-group (-> self root-override root-prim)) + prims + 0 + collide-with + ) + (the-as uint 0) + ) + (set! + (-> + (the-as collide-shape-prim-group (-> self root-override root-prim)) + prims + 0 + prim-core + collide-as + ) + (the-as uint 0) + ) + (set! (-> self use-interesting) #f) + (let ((a1-3 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-3 from) self) + (set! (-> a1-3 num-params) 1) + (set! (-> a1-3 message) 'point-of-interest) + (set! (-> a1-3 param 0) (the-as uint #f)) + (send-event-function *camera* a1-3) + ) + (robotboss-blue-done) + (if (nonzero? (-> self looping-sound 0)) + (stop! (-> self looping-sound 0)) + ) + (if (nonzero? (-> self looping-sound 1)) + (stop! (-> self looping-sound 1)) + ) + (robotboss-set-dda) + (robotboss-cut-cam-exit) + (none) + ) + :trans + (behavior () + (robotboss-always-trans robotboss-blue-dark-bomb) + (robotboss-shooting-trans 9) + (cond + ((zero? (-> self hits-to-go)) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM06" + #t + (the-as vector #f) + ) + (robotboss-blue-done) + (set! (-> self took-hit) #f) + (+! (-> self hits-to-go) -1) + (ja-channel-push! 1 30) + (let ((v1-8 (-> self skel root-channel 0))) + (set! + (-> v1-8 frame-group) + (the-as art-joint-anim (-> self draw art-group data 33)) + ) + ) + (sound-play-by-name + (static-sound-name "explod-eye") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + (set! (-> self blue-smoke) #t) + (let ((gp-1 (new 'stack-no-clear 'vector))) + (vector<-cspace! gp-1 (-> self node-list data 7)) + (let ((s5-1 (get-process *default-dead-pool* part-tracker #x4000))) + (when s5-1 + (let ((t9-9 (method-of-type part-tracker activate))) + (t9-9 + (the-as part-tracker s5-1) + *entity-pool* + 'part-tracker + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + s5-1 + part-tracker-init + (-> *part-group-id-table* 644) + 300 + #f + #f + #f + gp-1 + ) + (-> s5-1 ppointer) + ) + ) + ) + (let* ((s5-2 (get-process *default-dead-pool* manipy #x4000)) + (gp-2 (when s5-2 + (let ((t9-12 (method-of-type manipy activate))) + (t9-12 + (the-as manipy s5-2) + self + 'manipy + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + s5-2 + manipy-init + (-> self root-override trans) + (-> self entity) + *robotboss-blueeco-sg* + #f + ) + (-> s5-2 ppointer) + ) + ) + ) + (let ((a1-10 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-10 from) self) + (set! (-> a1-10 num-params) 1) + (set! (-> a1-10 message) 'flash) + (set! (-> a1-10 param 0) (the-as uint 255.0)) + (send-event-function (ppointer->process (-> self parent)) a1-10) + ) + (let ((a1-11 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-11 from) self) + (set! (-> a1-11 num-params) 1) + (set! (-> a1-11 message) 'anim-mode) + (set! (-> a1-11 param 0) (the-as uint 'play1)) + (send-event-function (ppointer->process gp-2) a1-11) + ) + (let ((a1-12 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-12 from) self) + (set! (-> a1-12 num-params) 1) + (set! (-> a1-12 message) 'rot-quat) + (set! (-> a1-12 param 0) (the-as uint (-> self root-override quat))) + (send-event-function (ppointer->process gp-2) a1-12) + ) + (let ((a1-13 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-13 from) self) + (set! (-> a1-13 num-params) 1) + (set! (-> a1-13 message) 'art-joint-anim) + (set! (-> a1-13 param 0) (the-as uint "robotboss-blueeco-blue-last-hit")) + (send-event-function (ppointer->process gp-2) a1-13) + ) + ) + ) + ((-> self took-hit) + (if + (not + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM17" + #t + (the-as vector #f) + ) + ) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "MAI-AM06" + #t + (the-as vector #f) + ) + ) + (set! (-> self took-hit) #f) + (ja-channel-push! 1 30) + (let ((v1-54 (-> self skel root-channel 0))) + (set! + (-> v1-54 frame-group) + (the-as art-joint-anim (-> self draw art-group data 4)) + ) + ) + ) + ) + (when (not (or (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 5) + ) + (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 33) + ) + ) + ) + ) + (robotboss-blue-beam 8 #t) + (robotboss-blue-beam 9 #f) + (when + ((method-of-type ambient-control TODO-RENAME-10) + (the-as ambient-control (&-> self ambient)) + (new 'stack-no-clear 'vector) + 3000 + (the-as float 327680.0) + self + ) + (let* ((v1-73 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-74 (the-as number (logior #x3f800000 v1-73))) + (f0-2 (+ -1.0 (the-as float v1-74))) + ) + (cond + ((< 0.8 f0-2) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM02" + #t + (the-as vector #f) + ) + ) + ((< 0.6 f0-2) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM10" + #t + (the-as vector #f) + ) + ) + ((< 0.4 f0-2) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "MAI-AM08" + #t + (the-as vector #f) + ) + ) + ((< 0.2 f0-2) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "MAI-AM03" + #t + (the-as vector #f) + ) + ) + (else + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM07" + #t + (the-as vector #f) + ) + ) + ) + ) + ) + (robotboss-position) + (robotboss-cut-cam + (the-as float 5.0) + (the-as float 50.0) + (the-as int (-> self draw art-group data 5)) + ) + (none) + ) + :code + (behavior () + (ja-channel-push! 1 120) + (let ((a0-1 (-> self skel root-channel 0))) + (set! + (-> a0-1 frame-group) + (the-as art-joint-anim (-> self draw art-group data 3)) + ) + (set! + (-> a0-1 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 3)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-1 param 1) 1.0) + (set! (-> a0-1 frame-num) 0.0) + (joint-control-channel-group! + a0-1 + (the-as art-joint-anim (-> self draw art-group data 3)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-2 (-> self skel root-channel 0))) + (set! + (-> a0-2 param 0) + (the float (+ (-> a0-2 frame-group data 0 length) -1)) + ) + (set! (-> a0-2 param 1) 1.0) + (joint-control-channel-group-eval! + a0-2 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (while #t + (when (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 3) + ) + ) + (ja-channel-push! 1 60) + (let ((v1-32 (-> self skel root-channel 0))) + (set! + (-> v1-32 frame-group) + (the-as art-joint-anim (-> self draw art-group data 3)) + ) + ) + ) + (let ((a0-12 (-> self skel root-channel 0))) + (set! (-> a0-12 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-12 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-12 param 1) 1.0) + (set! (-> a0-12 frame-num) 0.0) + (joint-control-channel-group! + a0-12 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-13 (-> self skel root-channel 0))) + (set! + (-> a0-13 param 0) + (the float (+ (-> a0-13 frame-group data 0 length) -1)) + ) + (set! (-> a0-13 param 1) 1.0) + (joint-control-channel-group-eval! + a0-13 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (when (<= (-> self hits-to-go) 0) + (let ((a1-6 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-6 from) self) + (set! (-> a1-6 num-params) 1) + (set! (-> a1-6 message) 'target) + (set! (-> a1-6 param 0) (the-as uint 0.0)) + (let ((t9-8 send-event-function) + (v1-69 (-> self alts 12)) + ) + (t9-8 (if v1-69 + (-> v1-69 extra process) + ) + a1-6 + ) + ) + ) + (ja-channel-push! 1 30) + (let ((v1-74 (-> self skel root-channel 0))) + (set! + (-> v1-74 frame-group) + (the-as art-joint-anim (-> self draw art-group data 5)) + ) + ) + (let ((a0-20 (-> self skel root-channel 0))) + (set! (-> a0-20 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-20 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-20 param 1) 1.0) + (set! (-> a0-20 frame-num) 0.0) + (joint-control-channel-group! + a0-20 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-21 (-> self skel root-channel 0))) + (set! + (-> a0-21 param 0) + (the float (+ (-> a0-21 frame-group data 0 length) -1)) + ) + (set! (-> a0-21 param 1) 1.0) + (joint-control-channel-group-eval! + a0-21 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (go robotboss-blue-dark-bomb) + ) + ) + (none) + ) + :post + (the-as (function none :behavior robotboss) transform-post) + ) + +(defmethod copy-defaults! robotboss ((obj robotboss) (arg0 res-lump)) + (stack-size-set! (-> obj main-thread) 512) + (let + ((s4-0 + (new + 'process + 'collide-shape-moving + obj + (collide-list-enum usually-hit-by-player) + ) + ) + ) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) default-collision-reaction) + (set! (-> s4-0 no-reaction) nothing) + (let + ((s3-0 (new 'process 'collide-shape-prim-group s4-0 (the-as uint 19) 0))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 2048)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 1)) + (set! (-> s3-0 transform-index) 0) + (set-vector! (-> s3-0 local-sphere) 0.0 0.0 0.0 368640.0) + (dummy-46 s4-0) + (let + ((s2-0 + (new + 'process + 'collide-shape-prim-mesh + s4-0 + (the-as uint 0) + (the-as uint 4) + ) + ) + ) + (set! (-> s2-0 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-0 collide-with) (the-as uint 16)) + (set! (-> s2-0 prim-core action) (the-as uint 1)) + (set! (-> s2-0 prim-core offense) 4) + (set! (-> s2-0 transform-index) 7) + (set-vector! (-> s2-0 local-sphere) 0.0 0.0 0.0 32768.0) + ) + (dummy-28 s3-0) + (let + ((s2-1 + (new + 'process + 'collide-shape-prim-mesh + s4-0 + (the-as uint 1) + (the-as uint 0) + ) + ) + ) + (set! (-> s2-1 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-1 collide-with) (the-as uint 16)) + (set! (-> s2-1 prim-core action) (the-as uint 1)) + (set! (-> s2-1 prim-core offense) 4) + (set! (-> s2-1 transform-index) 6) + (set-vector! (-> s2-1 local-sphere) 0.0 0.0 0.0 57344.0) + ) + (dummy-28 s3-0) + (let + ((s2-2 + (new + 'process + 'collide-shape-prim-mesh + s4-0 + (the-as uint 2) + (the-as uint 0) + ) + ) + ) + (set! (-> s2-2 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-2 collide-with) (the-as uint 16)) + (set! (-> s2-2 prim-core action) (the-as uint 1)) + (set! (-> s2-2 prim-core offense) 4) + (set! (-> s2-2 transform-index) 6) + (set-vector! (-> s2-2 local-sphere) 0.0 -57344.0 61440.0 73728.0) + ) + (dummy-28 s3-0) + (let + ((s2-3 + (new + 'process + 'collide-shape-prim-mesh + s4-0 + (the-as uint 3) + (the-as uint 8) + ) + ) + ) + (set! (-> s2-3 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-3 collide-with) (the-as uint 16)) + (set! (-> s2-3 prim-core action) (the-as uint 1)) + (set! (-> s2-3 prim-core offense) 4) + (set! (-> s2-3 transform-index) 16) + (set-vector! (-> s2-3 local-sphere) 0.0 -20480.0 69632.0 237568.0) + ) + (dummy-28 s3-0) + (let + ((s2-4 + (new + 'process + 'collide-shape-prim-mesh + s4-0 + (the-as uint 4) + (the-as uint 0) + ) + ) + ) + (set! (-> s2-4 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-4 collide-with) (the-as uint 16)) + (set! (-> s2-4 prim-core action) (the-as uint 1)) + (set! (-> s2-4 prim-core offense) 4) + (set! (-> s2-4 transform-index) 14) + (set-vector! (-> s2-4 local-sphere) 0.0 0.0 0.0 81920.0) + ) + (dummy-28 s3-0) + (let + ((s2-5 + (new + 'process + 'collide-shape-prim-mesh + s4-0 + (the-as uint 5) + (the-as uint 1) + ) + ) + ) + (set! (-> s2-5 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-5 collide-with) (the-as uint 16)) + (set! (-> s2-5 prim-core action) (the-as uint 1)) + (set! (-> s2-5 prim-core offense) 4) + (set! (-> s2-5 transform-index) 39) + (set-vector! (-> s2-5 local-sphere) 0.0 0.0 0.0 69632.0) + ) + (dummy-28 s3-0) + (let + ((s2-6 + (new + 'process + 'collide-shape-prim-mesh + s4-0 + (the-as uint 6) + (the-as uint 0) + ) + ) + ) + (set! (-> s2-6 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-6 collide-with) (the-as uint 16)) + (set! (-> s2-6 prim-core action) (the-as uint 1)) + (set! (-> s2-6 prim-core offense) 4) + (set! (-> s2-6 transform-index) 31) + (set-vector! (-> s2-6 local-sphere) 0.0 -57344.0 0.0 90112.0) + ) + (dummy-28 s3-0) + (let + ((s2-7 + (new + 'process + 'collide-shape-prim-mesh + s4-0 + (the-as uint 7) + (the-as uint 0) + ) + ) + ) + (set! (-> s2-7 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-7 collide-with) (the-as uint 16)) + (set! (-> s2-7 prim-core action) (the-as uint 1)) + (set! (-> s2-7 prim-core offense) 4) + (set! (-> s2-7 transform-index) 30) + (set-vector! (-> s2-7 local-sphere) 0.0 24576.0 0.0 81920.0) + ) + (dummy-28 s3-0) + (let + ((s2-8 + (new + 'process + 'collide-shape-prim-mesh + s4-0 + (the-as uint 8) + (the-as uint 0) + ) + ) + ) + (set! (-> s2-8 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-8 collide-with) (the-as uint 16)) + (set! (-> s2-8 prim-core action) (the-as uint 1)) + (set! (-> s2-8 prim-core offense) 4) + (set! (-> s2-8 transform-index) 57) + (set-vector! (-> s2-8 local-sphere) 0.0 0.0 0.0 81920.0) + ) + (dummy-28 s3-0) + (let + ((s2-9 + (new + 'process + 'collide-shape-prim-mesh + s4-0 + (the-as uint 9) + (the-as uint 2) + ) + ) + ) + (set! (-> s2-9 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-9 collide-with) (the-as uint 16)) + (set! (-> s2-9 prim-core action) (the-as uint 1)) + (set! (-> s2-9 prim-core offense) 4) + (set! (-> s2-9 transform-index) 68) + (set-vector! (-> s2-9 local-sphere) 0.0 0.0 0.0 49152.0) + ) + (dummy-28 s3-0) + (let + ((s2-10 + (new + 'process + 'collide-shape-prim-mesh + s4-0 + (the-as uint 10) + (the-as uint 0) + ) + ) + ) + (set! (-> s2-10 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-10 collide-with) (the-as uint 16)) + (set! (-> s2-10 prim-core action) (the-as uint 1)) + (set! (-> s2-10 prim-core offense) 4) + (set! (-> s2-10 transform-index) 4) + (set-vector! (-> s2-10 local-sphere) 0.0 24576.0 0.0 102400.0) + ) + (dummy-28 s3-0) + (let + ((s2-11 + (new + 'process + 'collide-shape-prim-mesh + s4-0 + (the-as uint 11) + (the-as uint 0) + ) + ) + ) + (set! (-> s2-11 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-11 collide-with) (the-as uint 16)) + (set! (-> s2-11 prim-core action) (the-as uint 1)) + (set! (-> s2-11 prim-core offense) 4) + (set! (-> s2-11 transform-index) 77) + (set-vector! (-> s2-11 local-sphere) 0.0 0.0 0.0 73728.0) + ) + (dummy-28 s3-0) + (let + ((s2-12 + (new + 'process + 'collide-shape-prim-mesh + s4-0 + (the-as uint 12) + (the-as uint 0) + ) + ) + ) + (set! (-> s2-12 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-12 collide-with) (the-as uint 16)) + (set! (-> s2-12 prim-core action) (the-as uint 1)) + (set! (-> s2-12 prim-core offense) 4) + (set! (-> s2-12 transform-index) 75) + (set-vector! (-> s2-12 local-sphere) 0.0 24576.0 0.0 81920.0) + ) + (dummy-28 s3-0) + (let + ((s2-13 + (new + 'process + 'collide-shape-prim-mesh + s4-0 + (the-as uint 13) + (the-as uint 0) + ) + ) + ) + (set! (-> s2-13 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-13 collide-with) (the-as uint 16)) + (set! (-> s2-13 prim-core action) (the-as uint 1)) + (set! (-> s2-13 prim-core offense) 4) + (set! (-> s2-13 transform-index) 74) + (set-vector! (-> s2-13 local-sphere) 0.0 40960.0 0.0 73728.0) + ) + (dummy-28 s3-0) + (let + ((s2-14 + (new + 'process + 'collide-shape-prim-mesh + s4-0 + (the-as uint 14) + (the-as uint 0) + ) + ) + ) + (set! (-> s2-14 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-14 collide-with) (the-as uint 16)) + (set! (-> s2-14 prim-core action) (the-as uint 1)) + (set! (-> s2-14 prim-core offense) 4) + (set! (-> s2-14 transform-index) 73) + (set-vector! (-> s2-14 local-sphere) 0.0 32768.0 0.0 61440.0) + ) + (dummy-28 s3-0) + (let + ((s2-15 + (new + 'process + 'collide-shape-prim-mesh + s4-0 + (the-as uint 15) + (the-as uint 0) + ) + ) + ) + (set! (-> s2-15 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-15 collide-with) (the-as uint 16)) + (set! (-> s2-15 prim-core action) (the-as uint 1)) + (set! (-> s2-15 prim-core offense) 4) + (set! (-> s2-15 transform-index) 84) + (set-vector! (-> s2-15 local-sphere) 0.0 40960.0 -8192.0 98304.0) + ) + (dummy-28 s3-0) + (let + ((s2-16 + (new + 'process + 'collide-shape-prim-mesh + s4-0 + (the-as uint 16) + (the-as uint 0) + ) + ) + ) + (set! (-> s2-16 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-16 collide-with) (the-as uint 16)) + (set! (-> s2-16 prim-core action) (the-as uint 1)) + (set! (-> s2-16 prim-core offense) 4) + (set! (-> s2-16 transform-index) 83) + (set-vector! (-> s2-16 local-sphere) 0.0 65536.0 0.0 73728.0) + ) + (dummy-28 s3-0) + (let + ((s2-17 + (new + 'process + 'collide-shape-prim-mesh + s4-0 + (the-as uint 17) + (the-as uint 0) + ) + ) + ) + (set! (-> s2-17 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-17 collide-with) (the-as uint 16)) + (set! (-> s2-17 prim-core action) (the-as uint 1)) + (set! (-> s2-17 prim-core offense) 4) + (set! (-> s2-17 transform-index) 82) + (set-vector! (-> s2-17 local-sphere) 0.0 32768.0 0.0 61440.0) + ) + (dummy-28 s3-0) + (let + ((s2-18 + (new + 'process + 'collide-shape-prim-mesh + s4-0 + (the-as uint 18) + (the-as uint 0) + ) + ) + ) + (set! (-> s2-18 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-18 collide-with) (the-as uint 16)) + (set! (-> s2-18 prim-core action) (the-as uint 1)) + (set! (-> s2-18 prim-core offense) 4) + (set! (-> s2-18 transform-index) 3) + (set-vector! (-> s2-18 local-sphere) 0.0 0.0 0.0 61440.0) + ) + (dummy-28 s3-0) + ) + (set! (-> s4-0 nav-radius) 4096.0) + (dummy-50 s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (dummy-14 obj *robotboss-sg* '()) + (aybabtu 2) + (set! + (-> obj nav) + (new 'process 'nav-control (-> obj root-override) 16 (the-as float 40960.0)) + ) + (logior! + (-> obj nav flags) + (nav-control-flags display-marks bit3 bit5 bit6 bit7) + ) + (set! + (-> obj root-override nav-flags) + (logand -2 (-> obj root-override nav-flags)) + ) + (let ((t9-48 (method-of-type path-control new)) + (a0-87 'process) + (a1-47 path-control) + (a2-23 obj) + (a3-22 'path) + (t0-21 0.0) + ) + (set! (-> obj path) (t9-48 a0-87 a1-47 a2-23 a3-22 (the-as float t0-21))) + (logior! + (-> obj path flags) + (path-control-flag display draw-line draw-point draw-text) + ) + (logclear! (-> obj mask) (process-mask actor-pause)) + (set! (-> obj root-override pause-adjust-distance) 1228800.0) + (set-vector! (-> obj old-loc) 8192.0 0.0 245760.0 1.0) + (set! (-> obj desired-loc quad) (-> obj old-loc quad)) + (set! (-> obj loc-t) 1.0) + (set! (-> obj loc-t-duration) 1) + (set! (-> obj loc-t-start) 0) + (set! (-> obj shot-attractor) (the-as handle #f)) + (set! (-> obj white-eco) (the-as handle #f)) + (set! (-> obj desired-pool-y) -30720.0) + (set! (-> obj des-cam-entity) #f) + (set! (-> obj use-interesting) #f) + (set! (-> obj ignore-camera) #f) + (dotimes (v1-211 13) + (set! (-> obj alts v1-211) #f) + ) + (let ((s5-1 (entity-actor-count (-> obj entity) 'alt-actor))) + (dotimes (s4-1 (min 13 s5-1)) + (set! + (-> obj alts s4-1) + (entity-actor-lookup (-> obj entity) 'alt-actor s4-1) + ) + ) + ) + (set! + (-> obj particle 0) + (create-launch-control (-> *part-group-id-table* 636) obj) + ) + (set! + (-> obj particle 1) + (create-launch-control (-> *part-group-id-table* 637) obj) + ) + (set! + (-> obj particle 2) + (create-launch-control (-> *part-group-id-table* 645) obj) + ) + (set! + (-> obj particle 3) + (create-launch-control (-> *part-group-id-table* 650) obj) + ) + (set! + (-> obj particle 4) + (create-launch-control (-> *part-group-id-table* 654) obj) + ) + (set! + (-> obj particle 5) + (create-launch-control (-> *part-group-id-table* 646) obj) + ) + (set! + (-> obj particle 6) + (create-launch-control (-> *part-group-id-table* 651) obj) + ) + (set! + (-> obj looping-sound 0) + (new + 'process + 'ambient-sound + (new 'static 'sound-spec + :mask #x80 + :num 1.0 + :group #x1 + :sound-name + (new 'static 'sound-name :lo #x756c622d6f626f72) + :volume #x400 + :fo-max 80 + ) + (-> obj root-override trans) + ) + ) + (set! + (-> obj looping-sound 1) + (new + 'process + 'ambient-sound + (new 'static 'sound-spec + :mask #x80 + :num 1.0 + :group #x1 + :sound-name + (new 'static 'sound-name :lo #x63726f742d6f6365) + :volume #x400 + :fo-max 80 + ) + (-> obj root-override trans) + ) + ) + (set! + (-> obj looping-sound 2) + (new + 'process + 'ambient-sound + (new 'static 'sound-spec + :mask #x80 + :num 1.0 + :group #x1 + :sound-name + (new 'static 'sound-name :lo #x7a7a75622d646572) + :volume #x400 + :fo-max 80 + ) + (-> obj root-override trans) + ) + ) + (let ((t9-61 (method-of-type ambient-sound new)) + (a0-110 'process) + (a1-60 ambient-sound) + (a2-28 + (new 'static 'sound-spec + :mask #x80 + :num 1.0 + :group #x1 + :sound-name + (new 'static 'sound-name :lo #x7a7a75622d676662) + :volume #x400 + :fo-max 80 + ) + ) + (a3-26 (-> obj root-override trans)) + ) + (set! (-> obj looping-sound 3) (t9-61 a0-110 a1-60 a2-28 a3-26)) + (set! (-> obj blue-smoke) #f) + (set! (-> obj red-smoke) #f) + (set! (-> obj yellow-smoke) #f) + ((method-of-type ambient-control dummy-9) + (the-as ambient-control (&-> obj ambient)) + (the-as vector a1-60) + (the-as int a2-28) + (the-as float a3-26) + (the-as process-drawable t0-21) + ) + ) + ) + (set! + (-> obj yellow-gun) + (new 'process 'joint-mod (joint-mod-handler-mode flex-blend) obj 16) + ) + (set-vector! (-> obj yellow-gun twist-max) 8192.0 8192.0 0.0 1.0) + (set! (-> obj yellow-gun up) (the-as uint 1)) + (set! (-> obj yellow-gun nose) (the-as uint 2)) + (set! (-> obj yellow-gun ear) (the-as uint 0)) + (set! (-> obj yellow-gun max-dist) 819200.0) + (set! (-> obj yellow-gun ignore-angle) 16384.0) + (set! (-> obj palette-val) 0.0) + (set! + (-> obj dda) + (new 'static 'robotboss-dda + :blue-bomb-time 4200.0 + :num-blobs 12 + :green-bomb-time 4200.0 + :red-shots-min 5 + :red-shot-time-min 3600.0 + :red-shot-time-rnd 600.0 + :red-bomb-time 3600.0 + :yellow-shot-time-min 900.0 + :yellow-shot-time-rnd 600.0 + :yellow-gun-hits 5 + :yellow-bomb-time 3600.0 + ) + ) + (go robotboss-blue-wait) + (none) + ) + + + + diff --git a/goal_src/levels/finalboss/sage-finalboss-FIN.gc b/goal_src/levels/finalboss/sage-finalboss-FIN.gc index 9b11b1479b..491fd5dcbd 100644 --- a/goal_src/levels/finalboss/sage-finalboss-FIN.gc +++ b/goal_src/levels/finalboss/sage-finalboss-FIN.gc @@ -5,3 +5,10 @@ ;; name in dgo: sage-finalboss ;; dgos: FIN +(define-extern *robotboss-cinematic-sg* skeleton-group) +(define-extern *jak-white-sg* skeleton-group) +(define-extern *plat-eco-finalboss-unlit-sg* skeleton-group) +(define-extern *plat-eco-finalboss-lit-sg* skeleton-group) + +;; DECOMP BEGINS + diff --git a/goal_src/levels/firecanyon/assistant-firecanyon.gc b/goal_src/levels/firecanyon/assistant-firecanyon.gc index 54101cd167..8f46e07fb1 100644 --- a/goal_src/levels/firecanyon/assistant-firecanyon.gc +++ b/goal_src/levels/firecanyon/assistant-firecanyon.gc @@ -40,7 +40,7 @@ assistant-firecanyon ((obj assistant-firecanyon) (arg0 symbol)) (case (current-status (-> obj tasks)) - ((6) + (((task-status need-reward-speech)) (if arg0 (close-current! (-> obj tasks)) ) @@ -106,7 +106,7 @@ 0 "ERROR: : ~S playing anim for task status ~S~%" (-> obj name) - (task-status->string (the-as task-status (current-status (-> obj tasks)))) + (task-status->string (current-status (-> obj tasks))) ) ) (-> obj draw art-group data 3) @@ -115,7 +115,7 @@ ) (defmethod get-art-elem assistant-firecanyon ((obj assistant-firecanyon)) - (if (zero? (current-status (-> obj tasks))) + (if (= (current-status (-> obj tasks)) (task-status invalid)) (-> obj draw art-group data 8) (-> obj draw art-group data 3) ) @@ -140,10 +140,7 @@ #t ) (else - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) #f ) ) @@ -163,13 +160,7 @@ (logtest? (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons l3)) ) ) - (< - (- - (-> *display* base-frame-counter) - (the-as int (-> self state-time)) - ) - 3000 - ) + (< (- (-> *display* base-frame-counter) (-> self state-time)) 3000) ) ) (hide-hud) @@ -244,7 +235,7 @@ (while #t (let ((gp-0 #t)) (cond - ((zero? (current-status (-> self tasks))) + ((= (current-status (-> self tasks)) (task-status invalid)) (let* ((v1-8 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) (v1-9 (the-as number (logior #x3f800000 v1-8))) ) @@ -843,7 +834,7 @@ (defmethod should-display? assistant-firecanyon ((obj assistant-firecanyon)) (first-any (-> obj tasks) #t) - (= (current-status (-> obj tasks)) 6) + (= (current-status (-> obj tasks)) (task-status need-reward-speech)) ) (defmethod diff --git a/goal_src/levels/jungle/bouncer.gc b/goal_src/levels/jungle/bouncer.gc index 3e0443cf75..1b6ddbb070 100644 --- a/goal_src/levels/jungle/bouncer.gc +++ b/goal_src/levels/jungle/bouncer.gc @@ -11,7 +11,8 @@ (define-extern bouncer-fire (state springbox)) ;; unknown type (define-extern bouncer-smush (state springbox)) ;; unknown type -;; definition of type springbox +;; DECOMP BEGINS + (deftype springbox (process-drawable) ((spring-height meters :offset-assert 176) (smush float :offset-assert 180) @@ -22,10 +23,9 @@ :flag-assert #x14005000b8 ) -;; failed to figure out what this is: + (method-set! springbox 12 (method-of-type process run-logic?)) -;; failed to figure out what this is: (let ((v1-2 (new 'static 'skeleton-group @@ -42,7 +42,6 @@ (set! *bouncer-sg* v1-2) ) -;; failed to figure out what this is: (defstate bouncer-wait (springbox) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) @@ -134,16 +133,12 @@ ) ) -;; 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 (('touch) - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) #f ) (else @@ -153,17 +148,11 @@ ) :code (behavior () - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) (set! (-> self smush) 0.0) (while #t (cond - ((>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 60 - ) + ((>= (- (-> *display* base-frame-counter) (-> self state-time)) 60) (let ((a0-1 (-> self skel root-channel 0))) (set! (-> a0-1 param 0) 0.0) (set! (-> a0-1 param 1) 0.1) @@ -206,7 +195,6 @@ (the-as (function none :behavior springbox) transform-post) ) -;; failed to figure out what this is: (defstate bouncer-fire (springbox) :code (behavior () @@ -261,7 +249,6 @@ (the-as (function none :behavior springbox) transform-post) ) -;; definition for method 11 of type springbox (defmethod copy-defaults! springbox ((obj springbox) (arg0 res-lump)) (let ((s4-0 @@ -304,3 +291,7 @@ (go bouncer-wait) (none) ) + + + + diff --git a/goal_src/levels/jungle/hopper.gc b/goal_src/levels/jungle/hopper.gc index 60a6844632..d40ad6101a 100644 --- a/goal_src/levels/jungle/hopper.gc +++ b/goal_src/levels/jungle/hopper.gc @@ -7,7 +7,8 @@ (define-extern *hopper-sg* skeleton-group) -;; definition of type hopper +;; DECOMP BEGINS + (deftype hopper (nav-enemy) ((jump-length float :offset-assert 400) (shadow-min-y float :offset-assert 404) @@ -18,17 +19,7 @@ :flag-assert #x4c01300198 ) -;; definition for method 3 of type hopper -(defmethod inspect hopper ((obj hopper)) - (let ((t9-0 (method-of-type nav-enemy inspect))) - (t9-0 obj) - ) - (format #t "~T~Tjump-length: ~f~%" (-> obj jump-length)) - (format #t "~T~Tshadow-min-y: ~f~%" (-> obj shadow-min-y)) - obj - ) -;; failed to figure out what this is: (let ((v1-1 (new 'static 'skeleton-group @@ -52,11 +43,8 @@ (set! *hopper-sg* v1-1) ) -;; failed to figure out what this is: nav-enemy-default-event-handler -;; definition for method 39 of type hopper -;; INFO: Return type mismatch int vs none. (defmethod common-post hopper ((obj hopper)) (let ((v1-1 (-> obj draw shadow-ctrl))) (set! @@ -70,9 +58,6 @@ nav-enemy-default-event-handler (none) ) -;; definition for function hopper-find-ground -;; INFO: Return type mismatch int vs object. -;; Used lq/sq (defbehavior hopper-find-ground hopper ((arg0 vector)) (let ((s5-0 (new 'stack-no-clear 'vector))) (let ((t1-0 (new 'stack-no-clear 'collide-tri-result)) @@ -104,9 +89,6 @@ nav-enemy-default-event-handler 0 ) -;; definition for function hopper-jump-to -;; INFO: Return type mismatch int vs none. -;; Used lq/sq (defbehavior hopper-jump-to hopper ((arg0 vector)) (set! (-> self jump-dest quad) (-> arg0 quad)) (hopper-find-ground (-> self jump-dest)) @@ -144,8 +126,6 @@ nav-enemy-default-event-handler (none) ) -;; definition for function hopper-do-jump -;; INFO: Return type mismatch int vs none. (defbehavior hopper-do-jump hopper () (dummy-11 (-> self nav) (-> self nav target-pos)) (if (< (-> self jump-length) (vector-length (-> self nav travel))) @@ -161,7 +141,6 @@ nav-enemy-default-event-handler (none) ) -;; failed to figure out what this is: (defstate nav-enemy-idle (hopper) :virtual #t :event @@ -266,7 +245,6 @@ nav-enemy-default-event-handler ) ) -;; failed to figure out what this is: (defstate nav-enemy-patrol (hopper) :virtual #t :event @@ -394,10 +372,7 @@ nav-enemy-default-event-handler (ja-channel-push! 1 22) ) ) - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) (let ((gp-0 (-> self skel root-channel 0))) (joint-control-channel-group-eval! gp-0 @@ -406,11 +381,7 @@ nav-enemy-default-event-handler ) (set! (-> gp-0 frame-num) 0.0) ) - (until - (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 150 - ) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 150) (suspend) (let ((a0-21 (-> self skel root-channel 0))) (set! (-> a0-21 param 0) 1.0) @@ -439,7 +410,6 @@ nav-enemy-default-event-handler (the-as (function none :behavior hopper) nav-enemy-jump-post) ) -;; failed to figure out what this is: (defstate nav-enemy-notice (hopper) :virtual #t :event @@ -454,7 +424,6 @@ nav-enemy-default-event-handler ) ) -;; failed to figure out what this is: (defstate nav-enemy-chase (hopper) :virtual #t :event @@ -582,10 +551,7 @@ nav-enemy-default-event-handler (ja-channel-push! 1 22) ) ) - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) (let ((gp-0 (-> self skel root-channel 0))) (joint-control-channel-group-eval! gp-0 @@ -594,11 +560,7 @@ nav-enemy-default-event-handler ) (set! (-> gp-0 frame-num) 0.0) ) - (until - (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 60 - ) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 60) (suspend) (let ((a0-21 (-> self skel root-channel 0))) (set! (-> a0-21 param 0) 1.0) @@ -618,7 +580,6 @@ nav-enemy-default-event-handler (the-as (function none :behavior hopper) nav-enemy-jump-post) ) -;; failed to figure out what this is: (defstate nav-enemy-stop-chase (hopper) :virtual #t :event @@ -633,7 +594,6 @@ nav-enemy-default-event-handler ) ) -;; definition for symbol *hopper-nav-enemy-info*, type nav-enemy-info (define *hopper-nav-enemy-info* (new 'static 'nav-enemy-info @@ -652,11 +612,11 @@ nav-enemy-default-event-handler :run-travel-speed (meters 10.0) :run-rotate-speed (degrees 7999.9995) :run-acceleration (meters 1.0) - :run-turn-time #x1e + :run-turn-time (seconds 0.1) :walk-travel-speed (meters 6.0) :walk-rotate-speed (degrees 7999.9995) :walk-acceleration (meters 1.0) - :walk-turn-time #x1e + :walk-turn-time (seconds 0.1) :attack-shove-back (meters 3.0) :attack-shove-up (meters 2.0) :shadow-size (meters 2.0) @@ -690,8 +650,6 @@ nav-enemy-default-event-handler ) ) -;; definition for method 47 of type hopper -;; INFO: Return type mismatch int vs none. (defmethod initialize-collision hopper ((obj hopper)) (let ((s5-0 @@ -738,8 +696,6 @@ nav-enemy-default-event-handler (none) ) -;; definition for method 48 of type hopper -;; INFO: Return type mismatch int vs none. (defmethod TODO-RENAME-48 hopper ((obj hopper)) (dummy-14 obj *hopper-sg* '()) (TODO-RENAME-45 obj *hopper-nav-enemy-info*) diff --git a/goal_src/levels/lavatube/assistant-lavatube.gc b/goal_src/levels/lavatube/assistant-lavatube.gc index ee07988781..e838a94d50 100644 --- a/goal_src/levels/lavatube/assistant-lavatube.gc +++ b/goal_src/levels/lavatube/assistant-lavatube.gc @@ -40,7 +40,7 @@ assistant-lavatube-start ((obj assistant-lavatube-start) (arg0 symbol)) (case (current-status (-> obj tasks)) - ((6) + (((task-status need-reward-speech)) (if arg0 (close-current! (-> obj tasks)) ) @@ -72,7 +72,7 @@ 0 "ERROR: : ~S playing anim for task status ~S~%" (-> obj name) - (task-status->string (the-as task-status (current-status (-> obj tasks)))) + (task-status->string (current-status (-> obj tasks))) ) ) (get-art-elem obj) @@ -103,10 +103,7 @@ #t ) (else - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) #f ) ) @@ -126,13 +123,7 @@ (logtest? (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons l3)) ) ) - (< - (- - (-> *display* base-frame-counter) - (the-as int (-> self state-time)) - ) - 3000 - ) + (< (- (-> *display* base-frame-counter) (-> self state-time)) 3000) ) ) (hide-hud) @@ -315,7 +306,7 @@ assistant-lavatube-start ((obj assistant-lavatube-start)) (first-any (-> obj tasks) #t) - (= (current-status (-> obj tasks)) 6) + (= (current-status (-> obj tasks)) (task-status need-reward-speech)) ) (defmethod diff --git a/goal_src/levels/maincave/baby-spider.gc b/goal_src/levels/maincave/baby-spider.gc index cabf401ca2..e0066d9ba4 100644 --- a/goal_src/levels/maincave/baby-spider.gc +++ b/goal_src/levels/maincave/baby-spider.gc @@ -7,11 +7,6 @@ (define-extern *baby-spider-sg* skeleton-group) -(declare-type baby-spider nav-enemy) -(define-extern baby-spider-hatching (state baby-spider)) ;; unknown type -(define-extern baby-spider-resume (state baby-spider)) ;; unknown type -(define-extern baby-spider-die-fast (state baby-spider)) ;; unknown type - (declare-type cave-trap process-drawable) ;; DECOMP BEGINS @@ -24,14 +19,14 @@ (pickup int32 :offset-assert 16) (pickup-amount int32 :offset-assert 20) (event-death symbol :offset-assert 24) - (delay-before-dying-if-not-visible uint64 :offset-assert 32) + (delay-before-dying-if-not-visible int64 :offset-assert 32) ) :method-count-assert 11 :size-assert #x28 :flag-assert #xb00000028 (:methods (init! (_type_ symbol symbol symbol symbol int int symbol) int 9) - (set-delay! (_type_ uint) uint 10) + (set-delay! (_type_ int) int 10) ) ) @@ -44,13 +39,13 @@ (delta-wiggle-angle float :offset-assert 416) (wiggle-factor float :offset-assert 420) (event-death symbol :offset-assert 424) - (delay-before-dying-if-not-visible uint64 :offset-assert 432) - (chase-rest-time uint64 :offset-assert 440) - (target-nav-time uint64 :offset-assert 448) + (delay-before-dying-if-not-visible int64 :offset-assert 432) + (chase-rest-time int64 :offset-assert 440) + (target-nav-time int64 :offset-assert 448) (unknown00 basic :offset-assert 456) (unknown01 basic :offset-assert 460) - (wiggle-time uint64 :offset-assert 464) - (last-visible-time uint64 :offset-assert 472) + (wiggle-time int64 :offset-assert 464) + (last-visible-time int64 :offset-assert 472) (up-vector vector :inline :offset-assert 480) (state-vector vector :inline :offset-assert 496) ) @@ -58,6 +53,11 @@ :method-count-assert 76 :size-assert #x200 :flag-assert #x4c01900200 + (:states + baby-spider-hatching + baby-spider-resume + baby-spider-die-fast + ) ) @@ -101,11 +101,11 @@ :run-travel-speed (meters 7.0) :run-rotate-speed (degrees 7999.9995) :run-acceleration (meters 1.0) - :run-turn-time #x16 + :run-turn-time (seconds 0.07333333) :walk-travel-speed (meters 2.0) :walk-rotate-speed (degrees 7999.9995) :walk-acceleration (meters 1.0) - :walk-turn-time #x16 + :walk-turn-time (seconds 0.07333333) :attack-shove-back (meters 3.0) :attack-shove-up (meters 2.0) :shadow-size (meters 1.0) @@ -156,11 +156,11 @@ :run-travel-speed (meters 7.0) :run-rotate-speed (degrees 7999.9995) :run-acceleration (meters 1.0) - :run-turn-time #x16 + :run-turn-time (seconds 0.07333333) :walk-travel-speed (meters 2.0) :walk-rotate-speed (degrees 7999.9995) :walk-acceleration (meters 1.0) - :walk-turn-time #x16 + :walk-turn-time (seconds 0.07333333) :attack-shove-back (meters 3.0) :attack-shove-up (meters 2.0) :shadow-size (meters 1.0) @@ -214,7 +214,7 @@ (set! (-> obj pickup-amount) arg5) (set! (-> obj event-death) arg6) (let ((v0-0 600)) - (set! (-> obj delay-before-dying-if-not-visible) (the-as uint v0-0)) + (set! (-> obj delay-before-dying-if-not-visible) v0-0) v0-0 ) ) @@ -222,7 +222,7 @@ (defmethod set-delay! baby-spider-spawn-params - ((obj baby-spider-spawn-params) (arg0 uint)) + ((obj baby-spider-spawn-params) (arg0 int)) (set! (-> obj delay-before-dying-if-not-visible) arg0) arg0 ) @@ -297,7 +297,7 @@ baby-spider-default-event-handler (none) ) -(defmethod dummy-51 baby-spider ((obj baby-spider)) +(defmethod dummy-51 baby-spider ((obj baby-spider) (arg0 vector)) (let* ((f0-0 (rand-vu-float-range 0.0 1.0)) (f1-1 (+ 1.0 (* 2.0 f0-0))) (f2-2 f1-1) @@ -308,7 +308,7 @@ baby-spider-default-event-handler (set! (-> obj wiggle-factor) (* 1.5 f2-4)) (let ((f0-3 (* 28672.0 f0-2))) (set! (-> obj target-speed) f0-3) - f0-3 + (the-as object f0-3) ) ) ) @@ -334,28 +334,22 @@ baby-spider-default-event-handler (v0-3 (-> obj nav target-pos)) ) (set! (-> v0-3 quad) (-> v1-4 quad)) - v0-3 + (the-as symbol v0-3) ) ) (defmethod dummy-53 baby-spider ((obj baby-spider)) (cond ((logtest? (-> obj draw status) 8) - (set! - (-> obj last-visible-time) - (the-as uint (-> *display* base-frame-counter)) - ) + (set! (-> obj last-visible-time) (-> *display* base-frame-counter)) (return #f) ) (else (if (-> obj die-if-not-visible?) (return (>= - (- - (-> *display* base-frame-counter) - (the-as int (-> obj last-visible-time)) - ) - (the-as int (-> obj delay-before-dying-if-not-visible)) + (- (-> *display* base-frame-counter) (-> obj last-visible-time)) + (-> obj delay-before-dying-if-not-visible) ) ) ) @@ -447,7 +441,7 @@ baby-spider-default-event-handler ) ) (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + (- (-> *display* base-frame-counter) (-> self state-time)) (-> self state-timeout) ) (nonzero? (-> self draw)) @@ -676,8 +670,8 @@ baby-spider-default-event-handler ) (if (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - (the-as int (-> self chase-rest-time)) + (- (-> *display* base-frame-counter) (-> self state-time)) + (-> self chase-rest-time) ) (go-virtual nav-enemy-victory) ) @@ -690,44 +684,30 @@ baby-spider-default-event-handler ) :code (behavior () - (set! - (-> self target-nav-time) - (the-as uint (-> *display* base-frame-counter)) - ) - (set! - (-> self wiggle-time) - (the-as uint (+ (-> *display* base-frame-counter) -3000)) - ) + (set! (-> self target-nav-time) (-> *display* base-frame-counter)) + (set! (-> self wiggle-time) (+ (-> *display* base-frame-counter) -3000)) (set! (-> self wiggle-angle) 0.0) - (set! (-> self chase-rest-time) (the-as uint (rand-vu-int-range 300 1200))) + (set! (-> self chase-rest-time) (rand-vu-int-range 300 1200)) (ja-channel-push! 1 51) - (let ((gp-0 (-> self skel root-channel 0))) - (joint-control-channel-group-eval! - gp-0 - (the-as art-joint-anim (-> self draw art-group data 7)) - num-func-identity - ) + (let* ((gp-0 (-> self skel root-channel 0)) + (t9-2 joint-control-channel-group-eval!) + (a0-2 gp-0) + (a1-2 (-> self draw art-group data 7)) + ) + (t9-2 a0-2 (the-as art-joint-anim a1-2) num-func-identity) (set! (-> gp-0 frame-num) 0.0) - ) - (while #t - (when - (>= - (- (-> *display* base-frame-counter) (the-as int (-> self wiggle-time))) - 300 + (while #t + (when (>= (- (-> *display* base-frame-counter) (-> self wiggle-time)) 300) + (set! (-> self wiggle-time) (-> *display* base-frame-counter)) + (dummy-51 self (the-as vector a1-2)) ) - (set! - (-> self wiggle-time) - (the-as uint (-> *display* base-frame-counter)) - ) - (dummy-51 self) - ) - (suspend) - (let ((a0-5 (-> self skel root-channel 0))) - (set! (-> a0-5 param 0) 1.0) - (joint-control-channel-group-eval! - a0-5 - (the-as art-joint-anim #f) - num-func-loop! + (suspend) + (let ((a0-5 (-> self skel root-channel 0))) + (set! (-> a0-5 param 0) 1.0) + (let ((t9-4 joint-control-channel-group-eval!)) + (set! a1-2 (the-as art-element #f)) + (t9-4 a0-5 (the-as art-joint-anim a1-2) num-func-loop!) + ) ) ) ) @@ -1142,10 +1122,7 @@ baby-spider-default-event-handler ) (defmethod TODO-RENAME-48 baby-spider ((obj baby-spider)) - (set! - (-> obj last-visible-time) - (the-as uint (-> *display* base-frame-counter)) - ) + (set! (-> obj last-visible-time) (-> *display* base-frame-counter)) (dummy-14 obj *baby-spider-sg* '()) (if (= (-> obj parent 0 type) cave-trap) (TODO-RENAME-45 obj *baby-spider-nav-enemy-info-for-cave-trap*) @@ -1163,7 +1140,7 @@ baby-spider-default-event-handler (set! (-> obj delta-wiggle-angle) 910.2222) (set! (-> obj wiggle-factor) 1.5) (set! (-> obj reaction-time) (rand-vu-int-range 30 240)) - (set! (-> obj chase-rest-time) (the-as uint 300)) + (set! (-> obj chase-rest-time) 300) (set! (-> obj up-vector quad) (-> *y-vector* quad)) 0 (none) @@ -1220,7 +1197,7 @@ baby-spider-default-event-handler (defmethod copy-defaults! baby-spider ((obj baby-spider) (arg0 res-lump)) (set! (-> obj die-if-not-visible?) #f) - (set! (-> obj delay-before-dying-if-not-visible) (the-as uint 600)) + (set! (-> obj delay-before-dying-if-not-visible) 600) (set! (-> obj hack-move-above-ground?) #f) (set! (-> obj event-death) #f) (initialize-collision obj) diff --git a/goal_src/levels/maincave/spiderwebs.gc b/goal_src/levels/maincave/spiderwebs.gc index c4b84002ed..51deb57270 100644 --- a/goal_src/levels/maincave/spiderwebs.gc +++ b/goal_src/levels/maincave/spiderwebs.gc @@ -7,10 +7,6 @@ (define-extern *spiderwebs-sg* skeleton-group) -(declare-type spiderwebs process-drawable) -(define-extern spiderwebs-bounce (state spiderwebs)) ;; unknown type -(define-extern spiderwebs-idle (state spiderwebs)) ;; unknown type - ;; DECOMP BEGINS (define @@ -51,6 +47,10 @@ :method-count-assert 20 :size-assert #xb4 :flag-assert #x14005000b4 + (:states + spiderwebs-idle + spiderwebs-bounce + ) ) diff --git a/goal_src/levels/misty/bonelurker.gc b/goal_src/levels/misty/bonelurker.gc index 78b45353a8..f3439c8dc8 100644 --- a/goal_src/levels/misty/bonelurker.gc +++ b/goal_src/levels/misty/bonelurker.gc @@ -90,7 +90,7 @@ bonelurker ((obj bonelurker) (arg0 process) (arg1 event-message-block)) (with-pp - (set! (-> obj state-time) (the-as seconds (-> *display* base-frame-counter))) + (set! (-> obj state-time) (-> *display* base-frame-counter)) (let ((a1-1 (new 'stack-no-clear 'event-message-block))) (set! (-> a1-1 from) pp) (set! (-> a1-1 num-params) 2) @@ -1106,11 +1106,11 @@ nav-enemy-default-event-handler :run-travel-speed (meters 6.0) :run-rotate-speed (degrees 2880.0) :run-acceleration (meters 1.0) - :run-turn-time #x1e + :run-turn-time (seconds 0.1) :walk-travel-speed (meters 3.0) :walk-rotate-speed (degrees 2880.0) :walk-acceleration (meters 1.0) - :walk-turn-time #x1e + :walk-turn-time (seconds 0.1) :attack-shove-back (meters 3.0) :attack-shove-up (meters 2.0) :shadow-size (meters 2.0) diff --git a/goal_src/levels/misty/misty-conveyor.gc b/goal_src/levels/misty/misty-conveyor.gc index 39100e80ca..9aff8769ea 100644 --- a/goal_src/levels/misty/misty-conveyor.gc +++ b/goal_src/levels/misty/misty-conveyor.gc @@ -296,10 +296,7 @@ (vector<-cspace! (-> self root-override trans) gp-0) ) (set! (-> self path-position quad) (-> self root-override trans quad)) - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) (suspend) ) (none) @@ -347,10 +344,7 @@ (while #t (if (>= - (the - float - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - ) + (the float (- (-> *display* base-frame-counter) (-> self state-time))) f30-0 ) (go keg-on-path) @@ -358,13 +352,7 @@ (let ((f28-0 (/ - (the - float - (- - (-> *display* base-frame-counter) - (the-as int (-> self state-time)) - ) - ) + (the float (- (-> *display* base-frame-counter) (-> self state-time))) f30-0 ) ) @@ -624,16 +612,9 @@ 0 (dummy-48 (-> self root-override)) (vector-normalize! gp-0 1.0) - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) (while #t - (if - (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 300 - ) + (if (>= (- (-> *display* base-frame-counter) (-> self state-time)) 300) (go keg-die) ) (let ((v1-23 (-> self root-override trans))) diff --git a/goal_src/levels/misty/misty-warehouse.gc b/goal_src/levels/misty/misty-warehouse.gc index 2cbd780414..f6374ff4c2 100644 --- a/goal_src/levels/misty/misty-warehouse.gc +++ b/goal_src/levels/misty/misty-warehouse.gc @@ -8,8 +8,13 @@ (define-extern *rounddoor-sg* skeleton-group) (define-extern *silostep-sg* skeleton-group) +(declare-type silostep process-drawable) +(define-extern silostep-rise (state symbol silostep)) +(define-extern silostep-idle (state silostep)) +(define-extern silostep-camera (state silostep)) + +;; DECOMP BEGINS -;; definition of type silostep (deftype silostep (process-drawable) ((anim-limit float :offset-assert 176) (cam-tracker uint64 :offset-assert 184) @@ -20,11 +25,7 @@ :flag-assert #x14005000c0 ) -(define-extern silostep-rise (state symbol silostep)) -(define-extern silostep-idle (state silostep)) -(define-extern silostep-camera (state silostep)) -;; failed to figure out what this is: (let ((v1-1 (new 'static 'skeleton-group @@ -42,7 +43,6 @@ (set! *silostep-sg* v1-1) ) -;; failed to figure out what this is: (defstate silostep-idle (silostep) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) @@ -78,8 +78,6 @@ (the-as (function none :behavior silostep) ja-post) ) -;; definition for function misty-camera-view -;; INFO: Return type mismatch int vs handle. (defbehavior misty-camera-view silostep () (let* ((gp-0 (get-process *default-dead-pool* camera-tracker #x4000)) (v1-1 (when gp-0 @@ -130,7 +128,6 @@ ) ) -;; failed to figure out what this is: (defstate silostep-camera (silostep) :code (behavior () @@ -140,10 +137,7 @@ ) (save-reminder gp-0 (logior v1-1 2) 0) ) - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) (let ((gp-1 (-> *display* base-frame-counter))) (until (>= (- (-> *display* base-frame-counter) gp-1) 300) (suspend) @@ -166,7 +160,6 @@ (the-as (function none :behavior silostep) ja-post) ) -;; failed to figure out what this is: (defstate silostep-rise (silostep) :code (behavior ((arg0 symbol)) @@ -220,7 +213,6 @@ (the-as (function none :behavior silostep) #f) ) -;; definition for method 11 of type silostep (defmethod copy-defaults! silostep ((obj silostep) (arg0 res-lump)) (logior! (-> obj mask) (process-mask movie-subject)) (let @@ -282,7 +274,6 @@ (none) ) -;; failed to figure out what this is: (let ((v1-6 (new 'static 'skeleton-group @@ -302,7 +293,6 @@ (set! *rounddoor-sg* v1-6) ) -;; definition of type rounddoor (deftype rounddoor (eco-door) () :heap-base #xa0 @@ -311,16 +301,7 @@ :flag-assert #x1b00a00104 ) -;; definition for method 3 of type rounddoor -(defmethod inspect rounddoor ((obj rounddoor)) - (let ((t9-0 (method-of-type eco-door inspect))) - (t9-0 obj) - ) - obj - ) -;; definition for method 24 of type rounddoor -;; INFO: Return type mismatch int vs none. (defmethod TODO-RENAME-24 rounddoor ((obj rounddoor)) (let ((s5-0 (new 'process 'collide-shape obj (collide-list-enum hit-by-others)))) @@ -351,9 +332,6 @@ (none) ) -;; definition for method 25 of type rounddoor -;; INFO: Return type mismatch int vs none. -;; Used lq/sq (defmethod TODO-RENAME-25 rounddoor ((obj rounddoor)) (dummy-14 obj *rounddoor-sg* '()) (set! (-> obj open-distance) 69632.0) @@ -372,3 +350,7 @@ 0 (none) ) + + + + diff --git a/goal_src/levels/misty/muse.gc b/goal_src/levels/misty/muse.gc index 84b7e965e1..6b8247456f 100644 --- a/goal_src/levels/misty/muse.gc +++ b/goal_src/levels/misty/muse.gc @@ -89,17 +89,12 @@ ) ) -;; definition for function muse-get-path-point -;; INFO: Return type mismatch int vs none. (defbehavior muse-get-path-point muse ((arg0 vector) (arg1 int)) (eval-path-curve-div! (-> self path) arg0 (the float arg1) 'interp) 0 (none) ) -;; definition for function muse-check-dest-point -;; INFO: Return type mismatch int vs none. -;; Used lq/sq (defbehavior muse-check-dest-point muse () (let ((gp-0 (new 'stack-no-clear 'point-on-path-segment-info)) (f26-0 4096000.0) @@ -177,9 +172,7 @@ (none) ) -;; definition for method 51 of type muse -;; INFO: Return type mismatch int vs float. -(defmethod dummy-51 muse ((obj muse)) +(defmethod dummy-51 muse ((obj muse) (arg0 vector)) (dotimes (s5-0 2) (let ((v1-2 (rand-vu-int-range 3 (+ (-> obj node-list length) -1)))) (sp-launch-particles-var @@ -195,18 +188,21 @@ ) ) ) - (the-as float 0) + (the-as object 0) ) -;; definition for method 39 of type muse (defmethod common-post muse ((obj muse)) - (spool-push *art-control* (-> obj anim name) 0 obj -99.0) - (dummy-51 obj) + (let* ((a0-1 *art-control*) + (t9-0 (method-of-object a0-1 spool-push)) + (a1-0 (-> obj anim name)) + ) + (t9-0 a0-1 a1-0 0 obj -99.0) + (dummy-51 obj (the-as vector a1-0)) + ) ((method-of-type nav-enemy common-post) obj) (none) ) -;; failed to figure out what this is: (let ((v1-5 (new 'static 'skeleton-group @@ -225,22 +221,16 @@ (set! *muse-sg* v1-5) ) -;; definition for method 44 of type muse -;; INFO: Return type mismatch none vs object. (defmethod dummy-44 muse ((obj muse) (arg0 process) (arg1 event-message-block)) (the-as object (go muse-caught)) ) -;; definition for method 43 of type muse -;; INFO: Return type mismatch none vs object. (defmethod dummy-43 muse ((obj muse) (arg0 process) (arg1 event-message-block)) (the-as object (go muse-caught)) ) -;; failed to figure out what this is: nav-enemy-default-event-handler -;; failed to figure out what this is: (defstate muse-idle (muse) :event (the-as @@ -382,8 +372,13 @@ nav-enemy-default-event-handler ) ) (until (ja-done? 0) - (spool-push *art-control* (-> self anim name) 0 self -99.0) - (dummy-51 self) + (let* ((a0-10 *art-control*) + (t9-7 (method-of-object a0-10 spool-push)) + (a1-5 (-> self anim name)) + ) + (t9-7 a0-10 a1-5 0 self -99.0) + (dummy-51 self (the-as vector a1-5)) + ) (suspend) (let ((a0-12 (-> self skel root-channel 0))) (set! @@ -405,7 +400,6 @@ nav-enemy-default-event-handler (the-as (function none :behavior muse) ja-post) ) -;; failed to figure out what this is: (defstate nav-enemy-chase (muse) :virtual #t :event @@ -415,10 +409,7 @@ nav-enemy-default-event-handler ) :enter (behavior () - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) (none) ) :trans @@ -571,7 +562,6 @@ nav-enemy-default-event-handler ) ) -;; failed to figure out what this is: (defstate nav-enemy-jump (muse) :virtual #t :event @@ -589,7 +579,6 @@ nav-enemy-default-event-handler (-> (method-of-type nav-enemy nav-enemy-jump) code) ) -;; failed to figure out what this is: (defstate nav-enemy-jump-land (muse) :virtual #t :event @@ -661,7 +650,6 @@ nav-enemy-default-event-handler ) ) -;; failed to figure out what this is: (defstate muse-caught (muse) :event (the-as @@ -742,9 +730,30 @@ nav-enemy-default-event-handler ) ) ) - (push-setting! *setting-control* self 'music-volume 'rel (-> *setting-control* current music-volume-movie) 0) - (push-setting! *setting-control* self 'sfx-volume 'rel (-> *setting-control* current sfx-volume-movie) 0) - (push-setting! *setting-control* self 'ambient-volume 'rel (-> *setting-control* current ambient-volume-movie) 0) + (push-setting! + *setting-control* + self + 'music-volume + 'rel + (-> *setting-control* current music-volume-movie) + 0 + ) + (push-setting! + *setting-control* + self + 'sfx-volume + 'rel + (-> *setting-control* current sfx-volume-movie) + 0 + ) + (push-setting! + *setting-control* + self + 'ambient-volume + 'rel + (-> *setting-control* current ambient-volume-movie) + 0 + ) (logclear! (-> self mask) (process-mask enemy)) (let ((gp-2 (get-process *default-dead-pool* othercam #x4000))) (when gp-2 @@ -838,7 +847,8 @@ nav-enemy-default-event-handler ) :post (behavior () - (dummy-51 self) + (local-vars (a1-0 none)) + (dummy-51 self (the-as vector a1-0)) (level-hint-surpress!) (kill-current-level-hint '() '() 'exit) (ja-post) @@ -846,7 +856,6 @@ nav-enemy-default-event-handler ) ) -;; definition for symbol *muse-nav-enemy-info*, type nav-enemy-info (define *muse-nav-enemy-info* (new 'static 'nav-enemy-info @@ -865,11 +874,11 @@ nav-enemy-default-event-handler :run-travel-speed (meters 10.0) :run-rotate-speed (degrees 999.99994) :run-acceleration (meters 5.0) - :run-turn-time #x2d + :run-turn-time (seconds 0.15) :walk-travel-speed (meters 10.0) :walk-rotate-speed (degrees 999.99994) :walk-acceleration (meters 1.0) - :walk-turn-time #x2d + :walk-turn-time (seconds 0.15) :attack-shove-back (meters 3.0) :attack-shove-up (meters 2.0) :shadow-size (meters 2.0) @@ -903,8 +912,6 @@ nav-enemy-default-event-handler ) ) -;; definition for method 11 of type muse -;; Used lq/sq (defmethod copy-defaults! muse ((obj muse) (arg0 res-lump)) (stack-size-set! (-> obj main-thread) 512) (set! (-> obj mask) (logior (process-mask enemy) (-> obj mask))) @@ -977,3 +984,7 @@ nav-enemy-default-event-handler (go muse-idle) (none) ) + + + + diff --git a/goal_src/levels/misty/sidekick-human.gc b/goal_src/levels/misty/sidekick-human.gc index ed76207135..8258c74bde 100644 --- a/goal_src/levels/misty/sidekick-human.gc +++ b/goal_src/levels/misty/sidekick-human.gc @@ -11,7 +11,8 @@ (define-extern *evilsis-sg* skeleton-group) (define-extern *sidekick-human-sg* skeleton-group) -;; definition of type sequenceA +;; DECOMP BEGINS + (deftype sequenceA (process-hidden) () :method-count-assert 15 @@ -19,7 +20,7 @@ :flag-assert #xf00000070 ) -;; failed to figure out what this is: + (set! (-> *part-group-id-table* 657) (new 'static 'sparticle-launch-group @@ -43,7 +44,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-id-table* 2665) (new 'static 'sparticle-launcher @@ -66,7 +66,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-id-table* 2663) (new 'static 'sparticle-launcher @@ -96,7 +95,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-id-table* 2664) (new 'static 'sparticle-launcher @@ -122,7 +120,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-id-table* 2667) (new 'static 'sparticle-launcher @@ -144,7 +141,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-id-table* 2666) (new 'static 'sparticle-launcher @@ -175,7 +171,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-id-table* 2668) (new 'static 'sparticle-launcher @@ -189,7 +184,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-id-table* 2669) (new 'static 'sparticle-launcher @@ -201,7 +195,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-group-id-table* 557) (new 'static 'sparticle-launch-group @@ -474,7 +467,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-id-table* 2349) (new 'static 'sparticle-launcher @@ -502,7 +494,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-id-table* 2353) (new 'static 'sparticle-launcher @@ -514,7 +505,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-id-table* 2350) (new 'static 'sparticle-launcher @@ -545,7 +535,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-id-table* 2351) (new 'static 'sparticle-launcher @@ -576,7 +565,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-id-table* 2352) (new 'static 'sparticle-launcher @@ -607,7 +595,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-id-table* 2344) (new 'static 'sparticle-launcher @@ -641,7 +628,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-id-table* 2354) (new 'static 'sparticle-launcher @@ -653,7 +639,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-id-table* 2345) (new 'static 'sparticle-launcher @@ -688,7 +673,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-id-table* 2355) (new 'static 'sparticle-launcher @@ -701,7 +685,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-id-table* 2346) (new 'static 'sparticle-launcher @@ -736,7 +719,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-id-table* 2347) (new 'static 'sparticle-launcher @@ -760,7 +742,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-id-table* 2348) (new 'static 'sparticle-launcher @@ -787,7 +768,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-group-id-table* 558) (new 'static 'sparticle-launch-group @@ -882,7 +862,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-id-table* 2386) (new 'static 'sparticle-launcher @@ -903,7 +882,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-id-table* 2385) (new 'static 'sparticle-launcher @@ -938,7 +916,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-id-table* 2388) (new 'static 'sparticle-launcher @@ -952,7 +929,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-id-table* 2389) (new 'static 'sparticle-launcher @@ -967,7 +943,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-id-table* 2384) (new 'static 'sparticle-launcher @@ -994,7 +969,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-group-id-table* 560) (new 'static 'sparticle-launch-group @@ -1009,7 +983,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-id-table* 2298) (new 'static 'sparticle-launcher @@ -1037,7 +1010,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-group-id-table* 561) (new 'static 'sparticle-launch-group @@ -1122,7 +1094,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-id-table* 2830) (new 'static 'sparticle-launcher @@ -1148,7 +1119,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-id-table* 2786) (new 'static 'sparticle-launcher @@ -1180,7 +1150,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-id-table* 2789) (new 'static 'sparticle-launcher @@ -1192,7 +1161,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-id-table* 2788) (new 'static 'sparticle-launcher @@ -1216,7 +1184,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-id-table* 2785) (new 'static 'sparticle-launcher @@ -1238,7 +1205,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-id-table* 2787) (new 'static 'sparticle-launcher @@ -1271,7 +1237,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-group-id-table* 562) (new 'static 'sparticle-launch-group @@ -1323,7 +1288,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-group-id-table* 681) (new 'static 'sparticle-launch-group @@ -1338,7 +1302,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-id-table* 2790) (new 'static 'sparticle-launcher @@ -1372,7 +1335,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-id-table* 2822) (new 'static 'sparticle-launcher @@ -1384,7 +1346,6 @@ ) ) -;; definition of type sequenceB (deftype sequenceB (process-taskable) ((bonelurker handle :offset-assert 384) (evilbro handle :offset-assert 392) @@ -1397,19 +1358,7 @@ :flag-assert #x35017001e0 ) -;; definition for method 3 of type sequenceB -(defmethod inspect sequenceB ((obj sequenceB)) - (let ((t9-0 (method-of-type process-taskable inspect))) - (t9-0 obj) - ) - (format #t "~T~Tbonelurker: ~D~%" (-> obj bonelurker)) - (format #t "~T~Tevilbro: ~D~%" (-> obj evilbro)) - (format #t "~T~Tevilsis: ~D~%" (-> obj evilsis)) - (format #t "~T~Tlurker-army[9] @ #x~X~%" (-> obj lurker-army)) - obj - ) -;; definition of type sequenceC (deftype sequenceC (process-taskable) ((bonelurker handle :offset-assert 384) (darkecocan handle :offset-assert 392) @@ -1421,22 +1370,7 @@ :flag-assert #x35015001b1 ) -;; definition for method 3 of type sequenceC -(defmethod inspect sequenceC ((obj sequenceC)) - (let ((t9-0 (method-of-type process-taskable inspect))) - (t9-0 obj) - ) - (format #t "~T~Tbonelurker: ~D~%" (-> obj bonelurker)) - (format #t "~T~Tdarkecocan: ~D~%" (-> obj darkecocan)) - (format - #t - "~T~Tdarkecocan-glowing-look: #~%" - (-> obj darkecocan-glowing-look) - ) - obj - ) -;; failed to figure out what this is: (let ((v1-46 (new 'static 'skeleton-group @@ -1454,7 +1388,6 @@ (set! *sidekick-human-sg* v1-46) ) -;; failed to figure out what this is: (let ((v1-47 (new 'static 'skeleton-group @@ -1471,7 +1404,6 @@ (set! *darkecocan-sg* v1-47) ) -;; failed to figure out what this is: (let ((v1-48 (new 'static 'skeleton-group @@ -1488,7 +1420,6 @@ (set! *darkecocan-glow-sg* v1-48) ) -;; failed to figure out what this is: (let ((v1-49 (new 'static 'skeleton-group @@ -1505,7 +1436,6 @@ (set! *evilbro-sg* v1-49) ) -;; failed to figure out what this is: (let ((v1-50 (new 'static 'skeleton-group @@ -1522,7 +1452,6 @@ (set! *evilsis-sg* v1-50) ) -;; definition of type army-info (deftype army-info (structure) ((pos vector :offset-assert 0) (rot float :offset-assert 4) @@ -1534,17 +1463,7 @@ :flag-assert #x900000010 ) -;; definition for method 3 of type army-info -(defmethod inspect army-info ((obj army-info)) - (format #t "[~8x] ~A~%" obj 'army-info) - (format #t "~Tpos: #~%" (-> obj pos)) - (format #t "~Trot: ~f~%" (-> obj rot)) - (format #t "~Tstart-frame: ~f~%" (-> obj start-frame)) - (format #t "~Tskel: ~A~%" (-> obj skel)) - obj - ) -;; definition for symbol *lurker-army*, type (array army-info) (define *lurker-army* (the-as (array army-info) @@ -1617,15 +1536,11 @@ ) ) -;; definition for function evilsib-trans-hook-hover -;; INFO: Return type mismatch int vs none. (defbehavior evilsib-trans-hook-hover evilbro () 0 (none) ) -;; definition for function evilsib-trans-hook-wait -;; INFO: Return type mismatch int vs none. (defbehavior evilsib-trans-hook-wait evilbro () (when (>= (ja-aframe-num 0) 425.0) (let ((gp-0 (get-process *default-dead-pool* part-tracker #x4000))) @@ -1663,7 +1578,6 @@ (none) ) -;; definition for method 32 of type sequenceB (defmethod play-anim! sequenceB ((obj sequenceB) (arg0 symbol)) (with-pp (cond @@ -1695,7 +1609,7 @@ (run-now-in-process s5-0 manipy-init - (-> obj root trans) + (-> obj root-override trans) (-> obj entity) *bonelurker-sg* #f @@ -2269,12 +2183,10 @@ ) ) -;; definition for method 31 of type sequenceB (defmethod get-art-elem sequenceB ((obj sequenceB)) (-> obj draw art-group data 3) ) -;; failed to figure out what this is: (defstate play-anim (sequenceB) :virtual #t :event @@ -2321,7 +2233,11 @@ (run-now-in-process s5-0 manipy-init - (-> self root trans) + (-> + self + root-override + trans + ) gp-2 *evilbro-sg* #f @@ -2423,7 +2339,11 @@ (run-now-in-process s5-1 manipy-init - (-> self root trans) + (-> + self + root-override + trans + ) gp-4 *evilsis-sg* #f @@ -2572,12 +2492,10 @@ ) ) -;; definition for method 39 of type sequenceB (defmethod should-display? sequenceB ((obj sequenceB)) #f ) -;; definition for method 11 of type sequenceB (defmethod copy-defaults! sequenceB ((obj sequenceB) (arg0 res-lump)) (dummy-40 obj @@ -2599,8 +2517,6 @@ (none) ) -;; definition for function sequenceC-can-trans-hook-2 -;; INFO: Return type mismatch int vs none. (defbehavior sequenceC-can-trans-hook-2 sequenceC () (let ((gp-0 (new 'stack-no-clear 'vector))) (vector<-cspace! gp-0 (-> self node-list data 4)) @@ -2642,13 +2558,14 @@ (none) ) -;; definition for function sequenceC-can-trans-hook -;; INFO: Return type mismatch int vs none. (defbehavior sequenceC-can-trans-hook sequenceC () (when (>= (ja-aframe-num 0) 1055.0) (dummy-11 (-> self draw) - (&-> (the-as process-taskable (-> self parent 0)) stack 288) + (the-as + lod-set + (&-> (the-as process-taskable (-> self parent 0)) stack 288) + ) ) (let ((a1-1 (new 'stack-no-clear 'event-message-block))) (set! (-> a1-1 from) self) @@ -2663,8 +2580,6 @@ (none) ) -;; definition for method 32 of type sequenceC -;; INFO: Return type mismatch spool-anim vs basic. (defmethod play-anim! sequenceC ((obj sequenceC) (arg0 symbol)) (with-pp (when arg0 @@ -2712,7 +2627,7 @@ (run-now-in-process s5-0 manipy-init - (-> obj root trans) + (-> obj root-override trans) (-> obj entity) *bonelurker-sg* #f @@ -2756,7 +2671,7 @@ (run-now-in-process s5-1 manipy-init - (-> obj root trans) + (-> obj root-override trans) (-> obj entity) *darkecocan-sg* #f @@ -3031,12 +2946,10 @@ ) ) -;; definition for method 31 of type sequenceC (defmethod get-art-elem sequenceC ((obj sequenceC)) (-> obj draw art-group data 3) ) -;; failed to figure out what this is: (defstate play-anim (sequenceC) :virtual #t :exit @@ -3069,13 +2982,10 @@ ) ) -;; definition for method 39 of type sequenceC (defmethod should-display? sequenceC ((obj sequenceC)) #f ) -;; definition for function sequenceC-trans-hook -;; INFO: Return type mismatch int vs none. (defbehavior sequenceC-trans-hook sequenceC () (when (>= (ja-aframe-num 0) 1655.0) (let ((gp-0 (new 'stack-no-clear 'vector))) @@ -3110,7 +3020,6 @@ (none) ) -;; definition for method 11 of type sequenceC (defmethod copy-defaults! sequenceC ((obj sequenceC) (arg0 res-lump)) (dummy-40 obj diff --git a/goal_src/levels/snow/yeti.gc b/goal_src/levels/snow/yeti.gc index 6caf1451fc..19f1dfb3f4 100644 --- a/goal_src/levels/snow/yeti.gc +++ b/goal_src/levels/snow/yeti.gc @@ -85,11 +85,11 @@ :run-travel-speed (meters 6.0) :run-rotate-speed (degrees 2880.0) :run-acceleration (meters 1.0) - :run-turn-time #x1e + :run-turn-time (seconds 0.1) :walk-travel-speed (meters 3.0) :walk-rotate-speed (degrees 720.0) :walk-acceleration (meters 1.0) - :walk-turn-time #x96 + :walk-turn-time (seconds 0.5) :attack-shove-back (meters 3.0) :attack-shove-up (meters 2.0) :shadow-size (meters 2.0) @@ -275,10 +275,7 @@ :enter (behavior () (nav-enemy-neck-control-inactive) - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) (if (-> self nav-info move-to-ground) (dummy-60 (-> self collide-info) 40960.0 40960.0 #t (the-as uint 1)) ) @@ -1380,17 +1377,14 @@ ) (when (< v1-1 (-> self desired-num-children)) (set! (-> self spawn-delay) (rand-vu-int-range 150 1200)) - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) ) ) ) (else (when (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + (- (-> *display* base-frame-counter) (-> self state-time)) (-> self spawn-delay) ) (let ((gp-0 (new 'stack-no-clear 'vector)) diff --git a/goal_src/levels/sunken/qbert-plat.gc b/goal_src/levels/sunken/qbert-plat.gc index 1f945de69b..59199fa21f 100644 --- a/goal_src/levels/sunken/qbert-plat.gc +++ b/goal_src/levels/sunken/qbert-plat.gc @@ -765,10 +765,7 @@ ) (go qbert-plat-master-idle) ) - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) (cond (arg0 (ambient-hint-spawn "gamcam08" (the-as vector #f) *entity-pool* 'camera) @@ -795,11 +792,7 @@ (-> s5-0 ppointer) ) ) - (until - (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 420 - ) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 420) (suspend) ) ) @@ -828,11 +821,7 @@ (-> s5-1 ppointer) ) ) - (until - (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 300 - ) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 300) (suspend) ) ) diff --git a/goal_src/levels/sunken/square-platform.gc b/goal_src/levels/sunken/square-platform.gc index f441d50c68..970fc86930 100644 --- a/goal_src/levels/sunken/square-platform.gc +++ b/goal_src/levels/sunken/square-platform.gc @@ -709,10 +709,7 @@ (defstate square-platform-master-activate (square-platform-master) :enter (behavior () - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) (set! (-> self wiggled?) #f) (sleep (-> self ticker) (-> self timeout)) (set! (-> self plat-id) -1) diff --git a/goal_src/levels/sunken/wall-plat.gc b/goal_src/levels/sunken/wall-plat.gc index ef30f4b514..a4cba160c5 100644 --- a/goal_src/levels/sunken/wall-plat.gc +++ b/goal_src/levels/sunken/wall-plat.gc @@ -107,10 +107,7 @@ :code (behavior () (dummy-49 (-> self root-override)) - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) (while #t (set! (-> self extended-amount) @@ -197,10 +194,7 @@ (the-as (function none :behavior wall-plat) rider-trans) :code (behavior () - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) (while #t (set! (-> self extended-amount) diff --git a/goal_src/levels/sunken/wedge-plats.gc b/goal_src/levels/sunken/wedge-plats.gc index 12a2e7a0c2..cf97e09bf1 100644 --- a/goal_src/levels/sunken/wedge-plats.gc +++ b/goal_src/levels/sunken/wedge-plats.gc @@ -17,7 +17,8 @@ (define-extern wedge-plat-master-idle (state wedge-plat-master)) ;; unknown type (define-extern *wedge-plat-outer-sg* skeleton-group) -;; definition of type wedge-plat-master +;; DECOMP BEGINS + (deftype wedge-plat-master (process) ((center vector :inline :offset-assert 112) (rotspeed float :offset-assert 128) @@ -30,7 +31,7 @@ :flag-assert #xe0020008c ) -;; failed to figure out what this is: + (defstate wedge-plat-master-idle (wedge-plat-master) :code (behavior () @@ -79,8 +80,6 @@ ) ) -;; definition for method 11 of type wedge-plat-master -;; Used lq/sq (defmethod copy-defaults! wedge-plat-master @@ -96,7 +95,6 @@ (none) ) -;; definition of type wedge-plat (deftype wedge-plat (baseplat) ((master wedge-plat-master :offset-assert 228) (distance float :offset-assert 232) @@ -111,7 +109,7 @@ ) ) -;; failed to figure out what this is: + (let ((v1-3 (new 'static 'skeleton-group @@ -128,7 +126,6 @@ (set! *wedge-plat-sg* v1-3) ) -;; definition for method 27 of type wedge-plat (defmethod dummy-27 wedge-plat ((obj wedge-plat)) (let* ((a0-1 (-> obj master)) (v1-0 (if a0-1 @@ -177,7 +174,6 @@ ) ) -;; 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)) @@ -208,7 +204,6 @@ (the-as (function none :behavior wedge-plat) plat-post) ) -;; 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)) @@ -289,15 +284,8 @@ ) ) ) - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) - (until - (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 300 - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 300) (let ((gp-4 (-> self skel root-channel 0))) (set! (-> gp-4 num-func) num-func-identity) (set! (-> gp-4 frame-num) (ja-aframe 100.0 0)) @@ -339,7 +327,6 @@ (the-as (function none :behavior wedge-plat) plat-post) ) -;; definition for method 11 of type wedge-plat (defmethod copy-defaults! wedge-plat ((obj wedge-plat) (arg0 res-lump)) (set! (-> obj mask) (logior (process-mask platform) (-> obj mask))) (let @@ -390,7 +377,6 @@ (none) ) -;; definition of type wedge-plat-outer (deftype wedge-plat-outer (wedge-plat) () :heap-base #x80 @@ -399,7 +385,7 @@ :flag-assert #x1c008000f0 ) -;; failed to figure out what this is: + (let ((v1-7 (new 'static 'skeleton-group @@ -416,7 +402,6 @@ (set! *wedge-plat-outer-sg* v1-7) ) -;; definition for method 27 of type wedge-plat-outer (defmethod dummy-27 wedge-plat-outer ((obj wedge-plat-outer)) (let* ((a0-1 (-> obj master)) (v1-0 (if a0-1 @@ -465,7 +450,6 @@ ) ) -;; 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)) @@ -496,7 +480,6 @@ (the-as (function none :behavior wedge-plat-outer) plat-post) ) -;; 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)) @@ -576,15 +559,8 @@ ) ) ) - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) - (until - (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 300 - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 300) (let ((gp-4 (-> self skel root-channel 0))) (set! (-> gp-4 num-func) num-func-identity) (set! (-> gp-4 frame-num) (ja-aframe 100.0 0)) @@ -626,7 +602,6 @@ (the-as (function none :behavior wedge-plat-outer) plat-post) ) -;; definition for method 11 of type wedge-plat-outer (defmethod copy-defaults! wedge-plat-outer @@ -679,3 +654,7 @@ (go wedge-plat-outer-idle) (none) ) + + + + diff --git a/goal_src/levels/swamp/swamp-bat.gc b/goal_src/levels/swamp/swamp-bat.gc index 8d1219f0e4..0e089a9777 100644 --- a/goal_src/levels/swamp/swamp-bat.gc +++ b/goal_src/levels/swamp/swamp-bat.gc @@ -282,10 +282,7 @@ swamp-bat-slave-event-handler swamp-bat-slave-event-handler :code (behavior () - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) (set! (-> self launch-ready) #f) (ja-channel-push! 1 49) (let ((v1-4 (-> self skel root-channel 0))) @@ -331,13 +328,7 @@ swamp-bat-slave-event-handler (forward-up->quaternion gp-0 s2-0 (new 'static 'vector :y 1.0 :w 1.0)) (while #t (let - ((v1-17 - (- - (-> *display* base-frame-counter) - (the-as int (-> self state-time)) - ) - ) - ) + ((v1-17 (- (-> *display* base-frame-counter) (-> self state-time)))) (when (>= v1-17 s3-0) 0 (goto cfg-10) @@ -426,10 +417,7 @@ swamp-bat-slave-event-handler swamp-bat-slave-event-handler :code (behavior () - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) (set! (-> self launch-ready) #f) (ja-channel-push! 1 30) (let ((gp-0 (new-stack-vector0))) @@ -448,11 +436,7 @@ swamp-bat-slave-event-handler ) ) (while #t - (let - ((s4-0 - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - ) - ) + (let ((s4-0 (- (-> *display* base-frame-counter) (-> self state-time)))) (if (>= s4-0 90) (go swamp-bat-slave-swoop) ) @@ -852,10 +836,7 @@ swamp-bat-slave-event-handler (while #t (when (and - (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 60 - ) + (>= (- (-> *display* base-frame-counter) (-> self state-time)) 60) *target* (>= (-> self fact-override idle-distance) @@ -915,21 +896,11 @@ swamp-bat-slave-event-handler swamp-bat-debug :code (behavior () - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) (while #t (swamp-bat-update-path) - (when - (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 150 - ) - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) + (when (>= (- (-> *display* base-frame-counter) (-> self state-time)) 150) + (set! (-> self state-time) (-> *display* base-frame-counter)) (if (not (swamp-bat-launch-slave)) (go swamp-bat-idle) ) diff --git a/goal_src/levels/swamp/swamp-rat-nest.gc b/goal_src/levels/swamp/swamp-rat-nest.gc index 22114f5395..2984049f37 100644 --- a/goal_src/levels/swamp/swamp-rat-nest.gc +++ b/goal_src/levels/swamp/swamp-rat-nest.gc @@ -971,10 +971,7 @@ swamp-rat-nest-dummy-event-handler :enter (behavior () - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) (if (<= (-> self parent-process 0 hit-points) 0) (go swamp-rat-nest-dummy-die) ) @@ -1118,10 +1115,7 @@ ) :code (behavior () - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) (set! (-> self parent-process 0 dummy) (the-as (pointer swamp-rat-nest-dummy) #f) @@ -1158,11 +1152,7 @@ (-> gp-0 ppointer) ) ) - (until - (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 30 - ) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 30) (suspend) ) (ja-channel-set! 0) @@ -1276,7 +1266,9 @@ swamp-rat-nest-default-event-handler ) ) +;; WARN: Function may read a register that is not set: t2 (defbehavior swamp-rat-nest-spawn-rat swamp-rat-nest () + (local-vars (t2-0 none)) (when (and (-> self dummy) (> (-> self dummy 0 spawn-joint-count) 0)) (let* ((v1-5 (swamp-rat-nest-pick-spawn-joint)) (v1-8 (-> self dummy 0 node-list data v1-5 bone)) @@ -1307,7 +1299,7 @@ swamp-rat-nest-default-event-handler (the-as pointer #x70004000) ) ) - (run-now-in-process s3-0 swamp-rat-init-by-other self gp-0 s5-0 s4-0) + (run-now-in-process s3-0 swamp-rat-init-by-other self gp-0 s5-0 s4-0 t2-0) (-> s3-0 ppointer) ) ) @@ -1459,10 +1451,7 @@ swamp-rat-nest-default-event-handler ) :enter (behavior () - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) (none) ) :trans @@ -1496,10 +1485,7 @@ swamp-rat-nest-default-event-handler swamp-rat-nest-default-event-handler :enter (behavior () - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) (none) ) :trans @@ -1507,13 +1493,10 @@ swamp-rat-nest-default-event-handler (swamp-rat-nest-check-dummy) (when (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + (- (-> *display* base-frame-counter) (-> self state-time)) (the-as int (-> self test-interval)) ) - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) (set! (-> self test-interval) (the-as uint 60)) (let ((v1-6 0)) (let ((a0-2 (the-as (pointer process-tree) (-> self child-process)))) @@ -1547,10 +1530,7 @@ swamp-rat-nest-default-event-handler swamp-rat-nest-default-event-handler :enter (behavior () - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) (none) ) :trans @@ -1558,7 +1538,7 @@ swamp-rat-nest-default-event-handler (swamp-rat-nest-check-dummy) (when (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + (- (-> *display* base-frame-counter) (-> self state-time)) (the int (* (-> self spawn-period-scale) (-> self spawn-period))) ) (let ((a1-0 (new 'stack-no-clear 'event-message-block))) diff --git a/goal_src/levels/swamp/swamp-rat.gc b/goal_src/levels/swamp/swamp-rat.gc index 9b70171f82..cf9dd6bced 100644 --- a/goal_src/levels/swamp/swamp-rat.gc +++ b/goal_src/levels/swamp/swamp-rat.gc @@ -344,7 +344,7 @@ swamp-rat-default-event-handler (behavior () (if (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + (- (-> *display* base-frame-counter) (-> self state-time)) (the-as int (-> self chase-rest-time)) ) (go-virtual nav-enemy-victory) @@ -676,10 +676,7 @@ swamp-rat-default-event-handler (set! (-> gp-0 z) 0.0) (set! (-> gp-0 w) 1.0) (let ((f30-0 0.125)) - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) (let ((s5-0 (-> self skel root-channel 0))) (joint-control-channel-group-eval! s5-0 @@ -705,13 +702,7 @@ swamp-rat-default-event-handler (logtest? (-> self collide-info status) 4) (or (< (-> self collide-info trans y) (-> self min-height)) - (>= - (- - (-> *display* base-frame-counter) - (the-as int (-> self state-time)) - ) - 300 - ) + (>= (- (-> *display* base-frame-counter) (-> self state-time)) 300) ) ) 0 @@ -806,11 +797,11 @@ swamp-rat-default-event-handler :run-travel-speed (meters 7.0) :run-rotate-speed (degrees 7999.9995) :run-acceleration (meters 1.0) - :run-turn-time #x16 + :run-turn-time (seconds 0.07333333) :walk-travel-speed (meters 2.0) :walk-rotate-speed (degrees 7999.9995) :walk-acceleration (meters 1.0) - :walk-turn-time #x16 + :walk-turn-time (seconds 0.07333333) :attack-shove-back (meters 3.0) :attack-shove-up (meters 2.0) :shadow-size (meters 1.0) diff --git a/goal_src/levels/village1/assistant.gc b/goal_src/levels/village1/assistant.gc index 3cb338f052..467e68ecba 100644 --- a/goal_src/levels/village1/assistant.gc +++ b/goal_src/levels/village1/assistant.gc @@ -82,9 +82,9 @@ (defmethod play-anim! assistant ((obj assistant) (arg0 symbol)) (with-pp (case (current-status (-> obj tasks)) - ((2 3) + (((task-status need-hint) (task-status need-introduction)) (case (current-task (-> obj tasks)) - ((2) + (((game-task jungle-eggtop)) (when arg0 (let* ((s5-1 (-> obj tasks)) (s4-0 (method-of-object s5-1 save-reminder)) @@ -247,10 +247,10 @@ ) ) ) - ((5 4) + (((task-status need-reminder) (task-status need-reminder-a)) (set! (-> obj skippable) #t) (cond - ((zero? (current-task (-> obj tasks))) + ((= (current-task (-> obj tasks)) (game-task none)) (new 'static 'spool-anim :name "assistant-reminder-1-generic" :index 14 @@ -321,9 +321,7 @@ 0 "ERROR: : ~S playing anim for task status ~S~%" (-> obj name) - (task-status->string - (the-as task-status (current-status (-> obj tasks))) - ) + (task-status->string (current-status (-> obj tasks))) ) ) (-> obj draw art-group data 3) @@ -358,19 +356,44 @@ #f ) ((< 0.8 f0-2) - (dummy-11 (-> obj ambient) "ASSTLP01" #f (-> obj root-override trans)) + (play-ambient + (-> obj ambient) + "ASSTLP01" + #f + (-> obj root-override trans) + ) ) ((< 0.6 f0-2) - (dummy-11 (-> obj ambient) "ASSTLP04" #f (-> obj root-override trans)) + (play-ambient + (-> obj ambient) + "ASSTLP04" + #f + (-> obj root-override trans) + ) ) ((< 0.4 f0-2) - (dummy-11 (-> obj ambient) "ASSTLP05" #f (-> obj root-override trans)) + (play-ambient + (-> obj ambient) + "ASSTLP05" + #f + (-> obj root-override trans) + ) ) ((< 0.2 f0-2) - (dummy-11 (-> obj ambient) "ASSTLP02" #f (-> obj root-override trans)) + (play-ambient + (-> obj ambient) + "ASSTLP02" + #f + (-> obj root-override trans) + ) ) (else - (dummy-11 (-> obj ambient) "ASSTLP03" #f (-> obj root-override trans)) + (play-ambient + (-> obj ambient) + "ASSTLP03" + #f + (-> obj root-override trans) + ) ) ) ) diff --git a/goal_src/levels/village1/explorer.gc b/goal_src/levels/village1/explorer.gc index 32946df604..a2ca42ff0b 100644 --- a/goal_src/levels/village1/explorer.gc +++ b/goal_src/levels/village1/explorer.gc @@ -82,7 +82,7 @@ (with-pp (set! (-> obj talk-message) (the-as uint 260)) (case (current-status (-> obj tasks)) - ((2 3) + (((task-status need-hint) (task-status need-introduction)) (if arg0 (close-status! (-> obj tasks) (task-status need-introduction)) ) @@ -114,7 +114,7 @@ ) ) ) - ((5) + (((task-status need-reminder)) (set! (-> obj skippable) #t) (cond ((zero? (get-reminder (-> obj tasks) 0)) @@ -170,13 +170,10 @@ ) ) ) - ((6) + (((task-status need-reward-speech)) (cond (arg0 - (set! - (-> obj cell-for-task) - (the-as game-task (current-task (-> obj tasks))) - ) + (set! (-> obj cell-for-task) (current-task (-> obj tasks))) (close-current! (-> obj tasks)) (let ((a1-7 (new 'stack-no-clear 'event-message-block))) (set! (-> a1-7 from) pp) @@ -211,9 +208,7 @@ 0 "ERROR: : ~S playing anim for task status ~S~%" (-> obj name) - (task-status->string - (the-as task-status (current-status (-> obj tasks))) - ) + (task-status->string (current-status (-> obj tasks))) ) ) (-> obj draw art-group data 3) @@ -241,7 +236,7 @@ ) (cond ((< 0.85714287 f0-2) - (dummy-11 (-> obj ambient) "EXP-AM05" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "EXP-AM05" #f (-> obj root-override trans)) ) ((< 0.71428573 f0-2) (if @@ -252,17 +247,22 @@ (task-status need-reminder) ) ) - (dummy-11 (-> obj ambient) "EXP-LO02" #f (-> obj root-override trans)) + (play-ambient + (-> obj ambient) + "EXP-LO02" + #f + (-> obj root-override trans) + ) ) ) ((< 0.5714286 f0-2) - (dummy-11 (-> obj ambient) "EXP-AM04" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "EXP-AM04" #f (-> obj root-override trans)) ) ((< 0.42857143 f0-2) - (dummy-11 (-> obj ambient) "EXP-AM03" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "EXP-AM03" #f (-> obj root-override trans)) ) ((< 0.2857143 f0-2) - (dummy-11 (-> obj ambient) "EXP-AM02" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "EXP-AM02" #f (-> obj root-override trans)) ) ((< 0.14285715 f0-2) (if @@ -273,11 +273,16 @@ (task-status need-reminder) ) ) - (dummy-11 (-> obj ambient) "EXP-AM01" #f (-> obj root-override trans)) + (play-ambient + (-> obj ambient) + "EXP-AM01" + #f + (-> obj root-override trans) + ) ) ) (else - (dummy-11 (-> obj ambient) "EXP-LO1A" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "EXP-LO1A" #f (-> obj root-override trans)) ) ) ) diff --git a/goal_src/levels/village1/farmer.gc b/goal_src/levels/village1/farmer.gc index f919a229ba..cd77535a55 100644 --- a/goal_src/levels/village1/farmer.gc +++ b/goal_src/levels/village1/farmer.gc @@ -40,7 +40,7 @@ (defmethod play-anim! farmer ((obj farmer) (arg0 symbol)) (case (current-status (-> obj tasks)) - ((2 3) + (((task-status need-hint) (task-status need-introduction)) (if arg0 (close-status! (-> obj tasks) (task-status need-introduction)) ) @@ -51,7 +51,7 @@ :command-list '() ) ) - ((5) + (((task-status need-reminder)) (set! (-> obj skippable) #t) (cond ((zero? (get-reminder (-> obj tasks) 0)) @@ -78,12 +78,9 @@ ) ) ) - ((6) + (((task-status need-reward-speech)) (when arg0 - (set! - (-> obj cell-for-task) - (the-as game-task (current-task (-> obj tasks))) - ) + (set! (-> obj cell-for-task) (current-task (-> obj tasks))) (close-current! (-> obj tasks)) ) (new 'static 'spool-anim @@ -99,7 +96,7 @@ 0 "ERROR: : ~S playing anim for task status ~S~%" (-> obj name) - (task-status->string (the-as task-status (current-status (-> obj tasks)))) + (task-status->string (current-status (-> obj tasks))) ) ) (-> obj draw art-group data 4) @@ -108,9 +105,15 @@ ) (defmethod get-art-elem farmer ((obj farmer)) - (let ((v1-1 (current-status (-> obj tasks)))) - (if (or (= v1-1 2) (= v1-1 3) (= v1-1 7) (zero? v1-1)) - (-> obj draw art-group data 4) + (case (current-status (-> obj tasks)) + (((task-status need-hint) + (task-status need-introduction) + (task-status need-resolution) + (task-status invalid) + ) + (-> obj draw art-group data 4) + ) + (else (-> obj draw art-group data 5) ) ) @@ -131,19 +134,19 @@ ) (cond ((< 0.8333333 f0-2) - (dummy-11 (-> obj ambient) "FAR-LO1A" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "FAR-LO1A" #f (-> obj root-override trans)) ) ((< 0.6666667 f0-2) - (dummy-11 (-> obj ambient) "FAR-AM01" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "FAR-AM01" #f (-> obj root-override trans)) ) ((< 0.5 f0-2) #f ) ((< 0.33333334 f0-2) - (dummy-11 (-> obj ambient) "FAR-AM2A" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "FAR-AM2A" #f (-> obj root-override trans)) ) ((< 0.16666667 f0-2) - (dummy-11 (-> obj ambient) "FAR-AM02" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "FAR-AM02" #f (-> obj root-override trans)) ) (else #f diff --git a/goal_src/levels/village1/fishermans-boat.gc b/goal_src/levels/village1/fishermans-boat.gc index d33a2c671d..7ab4601d6d 100644 --- a/goal_src/levels/village1/fishermans-boat.gc +++ b/goal_src/levels/village1/fishermans-boat.gc @@ -1093,10 +1093,7 @@ ) ) (not (level-hint-displayed?)) - (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 900 - ) + (>= (- (-> *display* base-frame-counter) (-> self state-time)) 900) (file-status *art-control* (-> self anim name) 0) ) (hide-hud) @@ -1194,10 +1191,7 @@ ) :enter (behavior () - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) (none) ) :trans @@ -1433,10 +1427,7 @@ ) :enter (behavior () - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) (none) ) :trans @@ -1863,15 +1854,8 @@ (let ((f30-0 (* (the float s5-0) (-> self controller table-step)))) (set! (-> self measure-parameters) #t) (set! (-> self controller steering) 1.0) - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) - (until - (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 300 - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 300) (let ((f0-6 (/ @@ -1881,10 +1865,7 @@ ) ) (if (< 0.05 f0-6) - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) ) ) (fishermans-boat-set-throttle-by-speed f30-0) diff --git a/goal_src/levels/village1/sage.gc b/goal_src/levels/village1/sage.gc index 6b760f8144..be620ccbed 100644 --- a/goal_src/levels/village1/sage.gc +++ b/goal_src/levels/village1/sage.gc @@ -90,9 +90,9 @@ ) ) (case (current-status (-> obj tasks)) - ((2 3) + (((task-status need-hint) (task-status need-introduction)) (case (current-task (-> obj tasks)) - ((109) + (((game-task intro)) (when arg0 (close-status! (-> obj tasks) (task-status need-introduction)) (set-setting! *setting-control* pp 'music-volume-movie 'abs 0.0 0) @@ -303,7 +303,7 @@ ) ) ) - ((15) + (((game-task beach-ecorocks)) (when arg0 (let* ((s5-1 (-> obj tasks)) (s4-0 (method-of-object s5-1 save-reminder)) @@ -506,7 +506,7 @@ ) ) ) - ((5) + (((task-status need-reminder)) (set! (-> obj skippable) #t) (if arg0 (set! (-> obj reminder-played) #t) @@ -621,7 +621,7 @@ ) ) ) - ((6) + (((task-status need-reward-speech)) (when arg0 (set-setting! *setting-control* pp 'music-volume-movie 'abs 0.0 0) (copy-settings-from-target! *setting-control*) @@ -981,9 +981,7 @@ 0 "ERROR: : ~S playing anim for task status ~S~%" (-> obj name) - (task-status->string - (the-as task-status (current-status (-> obj tasks))) - ) + (task-status->string (current-status (-> obj tasks))) ) ) (get-art-elem obj) @@ -1032,19 +1030,19 @@ (defmethod get-art-elem sage ((obj sage)) (cond ((and - (= (current-task (-> obj tasks)) 15) + (= (current-task (-> obj tasks)) (game-task beach-ecorocks)) (or - (= (current-status (-> obj tasks)) 2) - (= (current-status (-> obj tasks)) 3) + (= (current-status (-> obj tasks)) (task-status need-hint)) + (= (current-status (-> obj tasks)) (task-status need-introduction)) ) ) (save-reminder (-> obj tasks) 0 0) ) ((and - (= (current-task (-> obj tasks)) 26) + (= (current-task (-> obj tasks)) (game-task misty-cannon)) (or - (= (current-status (-> obj tasks)) 2) - (= (current-status (-> obj tasks)) 3) + (= (current-status (-> obj tasks)) (task-status need-hint)) + (= (current-status (-> obj tasks)) (task-status need-introduction)) ) ) (save-reminder (-> obj tasks) 1 0) @@ -1052,7 +1050,7 @@ ((dummy-45 obj) (set! (-> obj reminder-played) #f) (cond - ((zero? (current-task (-> obj tasks))) + ((= (current-task (-> obj tasks)) (game-task none)) (case (get-reminder (-> obj tasks) 0) ((2) (save-reminder (-> obj tasks) 3 0) @@ -1132,19 +1130,44 @@ #f ) ((< 0.8 f0-2) - (dummy-11 (-> obj ambient) "SAGELP03" #f (-> obj root-override trans)) + (play-ambient + (-> obj ambient) + "SAGELP03" + #f + (-> obj root-override trans) + ) ) ((< 0.6 f0-2) - (dummy-11 (-> obj ambient) "SAGELP04" #f (-> obj root-override trans)) + (play-ambient + (-> obj ambient) + "SAGELP04" + #f + (-> obj root-override trans) + ) ) ((< 0.4 f0-2) - (dummy-11 (-> obj ambient) "SAGELP05" #f (-> obj root-override trans)) + (play-ambient + (-> obj ambient) + "SAGELP05" + #f + (-> obj root-override trans) + ) ) ((< 0.2 f0-2) - (dummy-11 (-> obj ambient) "SAGELP06" #f (-> obj root-override trans)) + (play-ambient + (-> obj ambient) + "SAGELP06" + #f + (-> obj root-override trans) + ) ) (else - (dummy-11 (-> obj ambient) "SAGELP11" #f (-> obj root-override trans)) + (play-ambient + (-> obj ambient) + "SAGELP11" + #f + (-> obj root-override trans) + ) ) ) ) diff --git a/goal_src/levels/village1/yakow.gc b/goal_src/levels/village1/yakow.gc index e65f837ca6..dfec5648d8 100644 --- a/goal_src/levels/village1/yakow.gc +++ b/goal_src/levels/village1/yakow.gc @@ -706,7 +706,7 @@ yakow-default-event-handler (if (and (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + (- (-> *display* base-frame-counter) (-> self state-time)) (the-as int (-> *YAKOW-bank* default-patrol-time)) ) (and @@ -871,7 +871,7 @@ yakow-default-event-handler (if (and (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + (- (-> *display* base-frame-counter) (-> self state-time)) (the-as int (-> *YAKOW-bank* default-patrol-time)) ) (not (-> self in-pen)) @@ -889,11 +889,7 @@ yakow-default-event-handler ) (go yakow-notice) ) - (when - (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 15 - ) + (when (>= (- (-> *display* base-frame-counter) (-> self state-time)) 15) (when (or (logtest? (nav-control-flags bit19) (-> self nav flags)) @@ -1255,11 +1251,7 @@ yakow-default-event-handler ) :trans (behavior () - (if - (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 60 - ) + (if (>= (- (-> *display* base-frame-counter) (-> self state-time)) 60) (set! (-> self travel-speed) (seek diff --git a/goal_src/levels/village2/assistant-village2.gc b/goal_src/levels/village2/assistant-village2.gc index 2cc938b784..76d99c34d5 100644 --- a/goal_src/levels/village2/assistant-village2.gc +++ b/goal_src/levels/village2/assistant-village2.gc @@ -130,12 +130,15 @@ (with-pp (set! (-> obj talk-message) (the-as uint 292)) (case (current-status (-> obj tasks)) - ((1 2 3) + (((task-status unknown) + (task-status need-hint) + (task-status need-introduction) + ) (if (not arg0) (set! (-> obj will-talk) #t) ) (case (current-task (-> obj tasks)) - ((103) + (((game-task village2-levitator)) (when arg0 (close-status! (-> obj tasks) (task-status need-introduction)) (let ((a1-5 (new 'stack-no-clear 'event-message-block))) @@ -783,7 +786,7 @@ ) ) ) - ((47) + (((game-task sunken-room)) (when arg0 (let* ((s5-2 (-> obj tasks)) (s4-0 (method-of-object s5-2 save-reminder)) @@ -899,7 +902,7 @@ ) ) ) - ((53) + (((game-task rolling-robbers)) (when arg0 (let* ((s5-5 (-> obj tasks)) (s4-1 (method-of-object s5-5 save-reminder)) @@ -984,7 +987,7 @@ ) ) ) - ((5) + (((task-status need-reminder)) (set! (-> obj skippable) #t) (let ((s4-2 (+ (get-reminder (-> obj tasks) 0) 1))) (if (< (the-as uint 2) (the-as uint s4-2)) @@ -1061,9 +1064,7 @@ 0 "ERROR: : ~S playing anim for task status ~S~%" (-> obj name) - (task-status->string - (the-as task-status (current-status (-> obj tasks))) - ) + (task-status->string (current-status (-> obj tasks))) ) ) (-> obj draw art-group data 5) @@ -1176,10 +1177,10 @@ #f ) ((< 0.5 f30-0) - (dummy-11 (-> obj ambient) "ASSTLP23" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "ASSTLP23" #f (-> obj root-override trans)) ) (else - (dummy-11 (-> obj ambient) "ASSTLP24" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "ASSTLP24" #f (-> obj root-override trans)) ) ) ) @@ -2521,7 +2522,7 @@ ((obj assistant-levitator) (arg0 symbol)) (with-pp (case (current-status (-> obj tasks)) - ((6) + (((task-status need-reward-speech)) (when arg0 (close-current! (-> obj tasks)) (let ((a1-1 (new 'stack-no-clear 'event-message-block))) @@ -2584,9 +2585,7 @@ 0 "ERROR: : ~S playing anim for task status ~S~%" (-> obj name) - (task-status->string - (the-as task-status (current-status (-> obj tasks))) - ) + (task-status->string (current-status (-> obj tasks))) ) ) (-> obj draw art-group data 5) @@ -2653,10 +2652,7 @@ #t ) (else - (set! - (-> self state-time) - (the-as seconds (-> *display* base-frame-counter)) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) #f ) ) @@ -2681,13 +2677,7 @@ (logtest? (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons l3)) ) ) - (< - (- - (-> *display* base-frame-counter) - (the-as int (-> self state-time)) - ) - 3000 - ) + (< (- (-> *display* base-frame-counter) (-> self state-time)) 3000) ) ) (hide-hud) @@ -3103,25 +3093,8 @@ :mask #x80 :num 1.0 :group #x1 - :sound-name-char - (new 'static 'array uint8 16 - #x6c - #x65 - #x76 - #x2d - #x6d - #x61 - #x63 - #x68 - #x2d - #x69 - #x64 - #x6c - #x65 - #x0 - #x0 - #x0 - ) + :sound-name + (new 'static 'sound-name :lo #x6863616d2d76656c) :volume #x400 :fo-max 30 ) diff --git a/goal_src/levels/village2/gambler.gc b/goal_src/levels/village2/gambler.gc index 0aaec4d2df..557899b081 100644 --- a/goal_src/levels/village2/gambler.gc +++ b/goal_src/levels/village2/gambler.gc @@ -44,7 +44,7 @@ (with-pp (set! (-> obj talk-message) (the-as uint 260)) (case (current-status (-> obj tasks)) - ((2 3) + (((task-status need-hint) (task-status need-introduction)) (when arg0 (close-status! (-> obj tasks) (task-status need-introduction)) (close-specific-task! @@ -131,7 +131,7 @@ ) ) ) - ((5) + (((task-status need-reminder)) (set! (-> obj skippable) #t) (cond ((closed? @@ -182,17 +182,14 @@ ) ) ) - ((6) + (((task-status need-reward-speech)) (if (not arg0) (set! (-> obj will-talk) #t) ) (case (current-task (-> obj tasks)) - ((52) + (((game-task rolling-race)) (when arg0 - (set! - (-> obj cell-for-task) - (the-as game-task (current-task (-> obj tasks))) - ) + (set! (-> obj cell-for-task) (current-task (-> obj tasks))) (close-current! (-> obj tasks)) ) (new 'static 'spool-anim @@ -205,10 +202,7 @@ (else (cond (arg0 - (set! - (-> obj cell-for-task) - (the-as game-task (current-task (-> obj tasks))) - ) + (set! (-> obj cell-for-task) (current-task (-> obj tasks))) (close-current! (-> obj tasks)) (let ((a1-10 (new 'stack-no-clear 'event-message-block))) (set! (-> a1-10 from) pp) @@ -241,9 +235,7 @@ 0 "ERROR: : ~S playing anim for task status ~S~%" (-> obj name) - (task-status->string - (the-as task-status (current-status (-> obj tasks))) - ) + (task-status->string (current-status (-> obj tasks))) ) ) (-> obj draw art-group data 7) @@ -271,45 +263,50 @@ ) (cond ((< 0.9230769 f0-2) - (dummy-11 (-> obj ambient) "GAM-AM01" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "GAM-AM01" #f (-> obj root-override trans)) ) ((< 0.84615386 f0-2) - (dummy-11 (-> obj ambient) "GAM-AM02" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "GAM-AM02" #f (-> obj root-override trans)) ) ((< 0.7692308 f0-2) - (dummy-11 (-> obj ambient) "GAM-AM03" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "GAM-AM03" #f (-> obj root-override trans)) ) ((< 0.6923077 f0-2) - (dummy-11 (-> obj ambient) "GAM-AM04" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "GAM-AM04" #f (-> obj root-override trans)) ) ((< 0.61538464 f0-2) - (dummy-11 (-> obj ambient) "GAM-AM05" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "GAM-AM05" #f (-> obj root-override trans)) ) ((< 0.53846157 f0-2) - (dummy-11 (-> obj ambient) "GAM-AM06" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "GAM-AM06" #f (-> obj root-override trans)) ) ((< 0.46153846 f0-2) - (dummy-11 (-> obj ambient) "GAM-AM07" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "GAM-AM07" #f (-> obj root-override trans)) ) ((< 0.3846154 f0-2) - (dummy-11 (-> obj ambient) "GAM-AM08" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "GAM-AM08" #f (-> obj root-override trans)) ) ((< 0.30769232 f0-2) - (dummy-11 (-> obj ambient) "GAM-AM09" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "GAM-AM09" #f (-> obj root-override trans)) ) ((< 0.23076923 f0-2) (if (not (task-closed? (game-task ogre-boss) (task-status need-reminder))) - (dummy-11 (-> obj ambient) "GAM-AM10" #f (-> obj root-override trans)) + (play-ambient + (-> obj ambient) + "GAM-AM10" + #f + (-> obj root-override trans) + ) ) ) ((< 0.15384616 f0-2) - (dummy-11 (-> obj ambient) "GAM-AM11" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "GAM-AM11" #f (-> obj root-override trans)) ) ((< 0.07692308 f0-2) - (dummy-11 (-> obj ambient) "GAM-AM12" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "GAM-AM12" #f (-> obj root-override trans)) ) (else - (dummy-11 (-> obj ambient) "GAM-AM13" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "GAM-AM13" #f (-> obj root-override trans)) ) ) ) diff --git a/goal_src/levels/village2/geologist.gc b/goal_src/levels/village2/geologist.gc index 1c876a6055..73e9a6a293 100644 --- a/goal_src/levels/village2/geologist.gc +++ b/goal_src/levels/village2/geologist.gc @@ -44,7 +44,7 @@ (with-pp (set! (-> obj talk-message) (the-as uint 260)) (case (current-status (-> obj tasks)) - ((2 3) + (((task-status need-hint) (task-status need-introduction)) (when arg0 (close-status! (-> obj tasks) (task-status need-introduction)) (close-specific-task! @@ -95,7 +95,7 @@ ) ) ) - ((5) + (((task-status need-reminder)) (set! (-> obj skippable) #t) (cond ((closed? @@ -146,17 +146,14 @@ ) ) ) - ((6) + (((task-status need-reward-speech)) (if (not arg0) (set! (-> obj will-talk) #t) ) (case (current-task (-> obj tasks)) - ((54) + (((game-task rolling-moles)) (when arg0 - (set! - (-> obj cell-for-task) - (the-as game-task (current-task (-> obj tasks))) - ) + (set! (-> obj cell-for-task) (current-task (-> obj tasks))) (close-current! (-> obj tasks)) ) (new 'static 'spool-anim @@ -169,10 +166,7 @@ (else (cond (arg0 - (set! - (-> obj cell-for-task) - (the-as game-task (current-task (-> obj tasks))) - ) + (set! (-> obj cell-for-task) (current-task (-> obj tasks))) (close-current! (-> obj tasks)) (let ((a1-10 (new 'stack-no-clear 'event-message-block))) (set! (-> a1-10 from) pp) @@ -205,9 +199,7 @@ 0 "ERROR: : ~S playing anim for task status ~S~%" (-> obj name) - (task-status->string - (the-as task-status (current-status (-> obj tasks))) - ) + (task-status->string (current-status (-> obj tasks))) ) ) (-> obj draw art-group data 5) @@ -235,7 +227,7 @@ ) (cond ((< 0.8888889 f0-2) - (dummy-11 (-> obj ambient) "GEO-AM01" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "GEO-AM01" #f (-> obj root-override trans)) ) ((< 0.7777778 f0-2) (if @@ -246,11 +238,16 @@ (task-status need-reminder) ) ) - (dummy-11 (-> obj ambient) "GEO-AM02" #f (-> obj root-override trans)) + (play-ambient + (-> obj ambient) + "GEO-AM02" + #f + (-> obj root-override trans) + ) ) ) ((< 0.6666667 f0-2) - (dummy-11 (-> obj ambient) "GEO-AM03" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "GEO-AM03" #f (-> obj root-override trans)) ) ((< 0.5555556 f0-2) (if @@ -259,14 +256,19 @@ (game-task village2-geologist-money) (task-status need-introduction) ) - (dummy-11 (-> obj ambient) "GEO-AM04" #f (-> obj root-override trans)) + (play-ambient + (-> obj ambient) + "GEO-AM04" + #f + (-> obj root-override trans) + ) ) ) ((< 0.44444445 f0-2) - (dummy-11 (-> obj ambient) "GEO-AM05" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "GEO-AM05" #f (-> obj root-override trans)) ) ((< 0.33333334 f0-2) - (dummy-11 (-> obj ambient) "GEO-AM06" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "GEO-AM06" #f (-> obj root-override trans)) ) ((< 0.22222222 f0-2) (if @@ -277,21 +279,26 @@ (task-status need-reminder) ) ) - (dummy-11 (-> obj ambient) "GEO-AM07" #f (-> obj root-override trans)) + (play-ambient + (-> obj ambient) + "GEO-AM07" + #f + (-> obj root-override trans) + ) ) ) ((< 0.11111111 f0-2) - (dummy-11 (-> obj ambient) "GEO-LO02" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "GEO-LO02" #f (-> obj root-override trans)) ) ((closed? (-> obj tasks) (game-task village2-geologist-money) (task-status need-resolution) ) - (dummy-11 (-> obj ambient) "GEO-AM08" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "GEO-AM08" #f (-> obj root-override trans)) ) (else - (dummy-11 (-> obj ambient) "GEO-LO01" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "GEO-LO01" #f (-> obj root-override trans)) ) ) ) diff --git a/goal_src/levels/village2/sage-bluehut.gc b/goal_src/levels/village2/sage-bluehut.gc index 02a4ec040c..d51b2c335a 100644 --- a/goal_src/levels/village2/sage-bluehut.gc +++ b/goal_src/levels/village2/sage-bluehut.gc @@ -54,12 +54,12 @@ (with-pp (set! (-> obj talk-message) (the-as uint 291)) (case (current-status (-> obj tasks)) - ((2 3) + (((task-status need-hint) (task-status need-introduction)) (if (not arg0) (set! (-> obj will-talk) #t) ) (case (current-task (-> obj tasks)) - ((55) + (((game-task rolling-plants)) (when arg0 (let* ((s5-1 (-> obj tasks)) (s4-0 (method-of-object s5-1 save-reminder)) @@ -161,7 +161,7 @@ ) ) ) - ((5) + (((task-status need-reminder)) (set! (-> obj skippable) #t) (if arg0 (set! (-> obj reminder-played) #t) @@ -205,9 +205,7 @@ 0 "ERROR: : ~S playing anim for task status ~S~%" (-> obj name) - (task-status->string - (the-as task-status (current-status (-> obj tasks))) - ) + (task-status->string (current-status (-> obj tasks))) ) ) (get-art-elem obj) @@ -218,9 +216,9 @@ (defmethod dummy-45 sage-bluehut ((obj sage-bluehut)) (cond - ((= (current-status (-> obj tasks)) 1) + ((= (current-status (-> obj tasks)) (task-status unknown)) ) - ((zero? (current-status (-> obj tasks))) + ((= (current-status (-> obj tasks)) (task-status invalid)) ) ((and (closed? @@ -256,19 +254,19 @@ (defmethod get-art-elem sage-bluehut ((obj sage-bluehut)) (cond ((and - (= (current-task (-> obj tasks)) 55) + (= (current-task (-> obj tasks)) (game-task rolling-plants)) (or - (= (current-status (-> obj tasks)) 2) - (= (current-status (-> obj tasks)) 3) + (= (current-status (-> obj tasks)) (task-status need-hint)) + (= (current-status (-> obj tasks)) (task-status need-introduction)) ) ) (save-reminder (-> obj tasks) 0 0) ) ((and - (= (current-task (-> obj tasks)) 104) + (= (current-task (-> obj tasks)) (game-task swamp-arm)) (or - (= (current-status (-> obj tasks)) 2) - (= (current-status (-> obj tasks)) 3) + (= (current-status (-> obj tasks)) (task-status need-hint)) + (= (current-status (-> obj tasks)) (task-status need-introduction)) ) ) (save-reminder (-> obj tasks) 1 0) @@ -379,19 +377,19 @@ ) (cond ((< 0.8 f0-2) - (dummy-11 (-> obj ambient) "SAGELP20" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "SAGELP20" #f (-> obj root-override trans)) ) ((< 0.6 f0-2) - (dummy-11 (-> obj ambient) "SAGELP21" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "SAGELP21" #f (-> obj root-override trans)) ) ((< 0.4 f0-2) - (dummy-11 (-> obj ambient) "SAGELP22" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "SAGELP22" #f (-> obj root-override trans)) ) ((< 0.2 f0-2) - (dummy-11 (-> obj ambient) "SAGELP23" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "SAGELP23" #f (-> obj root-override trans)) ) ((nonzero? (get-task-status (game-task citadel-sage-blue))) - (dummy-11 (-> obj ambient) "SAGELP24" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "SAGELP24" #f (-> obj root-override trans)) ) ) ) diff --git a/goal_src/levels/village2/warrior.gc b/goal_src/levels/village2/warrior.gc index e184fd30b9..85ec2d7833 100644 --- a/goal_src/levels/village2/warrior.gc +++ b/goal_src/levels/village2/warrior.gc @@ -84,7 +84,7 @@ (with-pp (set! (-> obj talk-message) (the-as uint 260)) (case (current-status (-> obj tasks)) - ((2 3) + (((task-status need-hint) (task-status need-introduction)) (if arg0 (close-status! (-> obj tasks) (task-status need-introduction)) ) @@ -140,7 +140,7 @@ ) ) ) - ((5) + (((task-status need-reminder)) (set! (-> obj skippable) #t) (new 'static 'spool-anim :name "warrior-reminder-1" @@ -149,13 +149,10 @@ :command-list '() ) ) - ((6) + (((task-status need-reward-speech)) (cond (arg0 - (set! - (-> obj cell-for-task) - (the-as game-task (current-task (-> obj tasks))) - ) + (set! (-> obj cell-for-task) (current-task (-> obj tasks))) (close-current! (-> obj tasks)) (let ((a1-4 (new 'stack-no-clear 'event-message-block))) (set! (-> a1-4 from) pp) @@ -223,9 +220,7 @@ 0 "ERROR: : ~S playing anim for task status ~S~%" (-> obj name) - (task-status->string - (the-as task-status (current-status (-> obj tasks))) - ) + (task-status->string (current-status (-> obj tasks))) ) ) (-> obj draw art-group data 5) @@ -268,13 +263,13 @@ ) (cond ((< 0.66 f0-2) - (dummy-11 (-> obj ambient) "WAR-LO1A" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "WAR-LO1A" #f (-> obj root-override trans)) ) ((< 0.33 f0-2) - (dummy-11 (-> obj ambient) "WAR-LO1B" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "WAR-LO1B" #f (-> obj root-override trans)) ) (else - (dummy-11 (-> obj ambient) "WAR-LO1C" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "WAR-LO1C" #f (-> obj root-override trans)) ) ) ) diff --git a/goal_src/levels/village3/assistant-village3.gc b/goal_src/levels/village3/assistant-village3.gc index f8ce6590e4..0dc0638e00 100644 --- a/goal_src/levels/village3/assistant-village3.gc +++ b/goal_src/levels/village3/assistant-village3.gc @@ -87,7 +87,7 @@ 0 "ERROR: : ~S playing anim for task status ~S~%" (-> obj name) - (task-status->string (the-as task-status (current-status (-> obj tasks)))) + (task-status->string (current-status (-> obj tasks))) ) ) (get-art-elem obj) @@ -133,13 +133,13 @@ ) (cond ((< 0.85714287 f0-2) - (dummy-11 (-> obj ambient) "ASSTLP31" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "ASSTLP31" #f (-> obj root-override trans)) ) ((< 0.71428573 f0-2) - (dummy-11 (-> obj ambient) "ASSTLP32" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "ASSTLP32" #f (-> obj root-override trans)) ) ((< 0.5714286 f0-2) - (dummy-11 (-> obj ambient) "ASSTLP33" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "ASSTLP33" #f (-> obj root-override trans)) ) ((< 0.42857143 f0-2) (let ((v1-16 (get-task-status (game-task lavatube-end)))) @@ -150,7 +150,12 @@ (= v1-16 (task-status invalid)) ) ) - (dummy-11 (-> obj ambient) "ASSTLP34" #f (-> obj root-override trans)) + (play-ambient + (-> obj ambient) + "ASSTLP34" + #f + (-> obj root-override trans) + ) ) ) ) @@ -163,7 +168,12 @@ (= v1-21 (task-status invalid)) ) ) - (dummy-11 (-> obj ambient) "ASSTLP35" #f (-> obj root-override trans)) + (play-ambient + (-> obj ambient) + "ASSTLP35" + #f + (-> obj root-override trans) + ) ) ) ) @@ -176,12 +186,17 @@ (= v1-26 (task-status invalid)) ) ) - (dummy-11 (-> obj ambient) "ASSTLP36" #f (-> obj root-override trans)) + (play-ambient + (-> obj ambient) + "ASSTLP36" + #f + (-> obj root-override trans) + ) ) ) ) ((nonzero? (get-task-status (game-task citadel-sage-green))) - (dummy-11 (-> obj ambient) "ASSTLP37" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "ASSTLP37" #f (-> obj root-override trans)) ) ) ) diff --git a/goal_src/levels/village3/miners.gc b/goal_src/levels/village3/miners.gc index 056ad50130..d8d3f0a580 100644 --- a/goal_src/levels/village3/miners.gc +++ b/goal_src/levels/village3/miners.gc @@ -118,7 +118,7 @@ 0 "ERROR: : ~S playing anim for task status ~S~%" (-> obj name) - (task-status->string (the-as task-status (current-status (-> obj tasks)))) + (task-status->string (current-status (-> obj tasks))) ) ) (the-as basic (-> obj draw art-group data 3)) @@ -337,12 +337,12 @@ (with-pp (set! (-> obj talk-message) (the-as uint 260)) (case (current-status (-> obj tasks)) - ((2 3) + (((task-status need-hint) (task-status need-introduction)) (if (not arg0) (set! (-> obj will-talk) #t) ) (case (current-task (-> obj tasks)) - ((96) + (((game-task village3-miner-money1)) (when arg0 (let* ((s5-1 (-> obj tasks)) (s4-0 (method-of-object s5-1 save-reminder)) @@ -430,7 +430,7 @@ ) ) ) - ((78) + (((game-task cave-gnawers)) (when arg0 (let* ((s5-2 (-> obj tasks)) (s4-1 (method-of-object s5-2 save-reminder)) @@ -526,7 +526,7 @@ ) ) ) - ((5) + (((task-status need-reminder)) (set! (-> obj skippable) #t) (let ((s4-2 (+ (get-reminder (-> obj tasks) 0) 1))) (if (< (the-as uint 3) (the-as uint s4-2)) @@ -680,7 +680,7 @@ ) ) ) - ((6) + (((task-status need-reward-speech)) (let ((s4-3 (get-reminder (-> obj tasks) 2))) (cond (arg0 @@ -691,10 +691,7 @@ (set! (-> a1-22 param 0) (the-as uint (process->handle obj))) (send-event-function (-> obj other-miner ppointer 3) a1-22) ) - (set! - (-> obj cell-for-task) - (the-as game-task (current-task (-> obj tasks))) - ) + (set! (-> obj cell-for-task) (current-task (-> obj tasks))) (close-current! (-> obj tasks)) (let ((a1-23 (new 'stack-no-clear 'event-message-block))) (set! (-> a1-23 from) pp) @@ -743,9 +740,7 @@ 0 "ERROR: : ~S playing anim for task status ~S~%" (-> obj name) - (task-status->string - (the-as task-status (current-status (-> obj tasks))) - ) + (task-status->string (current-status (-> obj tasks))) ) ) (-> obj draw art-group data 3) @@ -788,91 +783,91 @@ ) (cond ((< 0.9655172 f0-2) - (dummy-11 (-> obj ambient) "MIN-LO01" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "MIN-LO01" #f (-> obj root-override trans)) ) ((< 0.9310345 f0-2) - (dummy-11 (-> obj ambient) "MIN-LO03" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "MIN-LO03" #f (-> obj root-override trans)) ) ((< 0.8965517 f0-2) - (dummy-11 (-> obj ambient) "MIN-LO04" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "MIN-LO04" #f (-> obj root-override trans)) ) ((< 0.86206895 f0-2) - (dummy-11 (-> obj ambient) "MIN-LO05" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "MIN-LO05" #f (-> obj root-override trans)) ) ((< 0.82758623 f0-2) - (dummy-11 (-> obj ambient) "MIN-LO06" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "MIN-LO06" #f (-> obj root-override trans)) ) ((< 0.79310346 f0-2) - (dummy-11 (-> obj ambient) "MSH-AM01" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "MSH-AM01" #f (-> obj root-override trans)) ) ((< 0.7586207 f0-2) - (dummy-11 (-> obj ambient) "MSH-AM02" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "MSH-AM02" #f (-> obj root-override trans)) ) ((< 0.7241379 f0-2) - (dummy-11 (-> obj ambient) "MSH-AM03" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "MSH-AM03" #f (-> obj root-override trans)) ) ((< 0.6896552 f0-2) - (dummy-11 (-> obj ambient) "MSH-AM04" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "MSH-AM04" #f (-> obj root-override trans)) ) ((< 0.6551724 f0-2) - (dummy-11 (-> obj ambient) "MSH-AM05" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "MSH-AM05" #f (-> obj root-override trans)) ) ((< 0.62068963 f0-2) - (dummy-11 (-> obj ambient) "MSH-AM06" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "MSH-AM06" #f (-> obj root-override trans)) ) ((< 0.5862069 f0-2) - (dummy-11 (-> obj ambient) "MSH-AM07" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "MSH-AM07" #f (-> obj root-override trans)) ) ((< 0.55172414 f0-2) - (dummy-11 (-> obj ambient) "MSH-AM08" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "MSH-AM08" #f (-> obj root-override trans)) ) ((< 0.51724136 f0-2) - (dummy-11 (-> obj ambient) "MSH-AM09" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "MSH-AM09" #f (-> obj root-override trans)) ) ((< 0.4827586 f0-2) - (dummy-11 (-> obj ambient) "MSH-AM10" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "MSH-AM10" #f (-> obj root-override trans)) ) ((< 0.44827586 f0-2) - (dummy-11 (-> obj ambient) "MSH-AM11" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "MSH-AM11" #f (-> obj root-override trans)) ) ((< 0.41379312 f0-2) - (dummy-11 (-> obj ambient) "MSH-AM12" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "MSH-AM12" #f (-> obj root-override trans)) ) ((< 0.37931034 f0-2) - (dummy-11 (-> obj ambient) "MSH-AM1A" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "MSH-AM1A" #f (-> obj root-override trans)) ) ((< 0.3448276 f0-2) - (dummy-11 (-> obj ambient) "MSH-AM2A" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "MSH-AM2A" #f (-> obj root-override trans)) ) ((< 0.31034482 f0-2) - (dummy-11 (-> obj ambient) "MSH-AM3A" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "MSH-AM3A" #f (-> obj root-override trans)) ) ((< 0.27586207 f0-2) - (dummy-11 (-> obj ambient) "MTA-AM01" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "MTA-AM01" #f (-> obj root-override trans)) ) ((< 0.2413793 f0-2) - (dummy-11 (-> obj ambient) "MTA-AM02" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "MTA-AM02" #f (-> obj root-override trans)) ) ((< 0.20689656 f0-2) - (dummy-11 (-> obj ambient) "MTA-AM03" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "MTA-AM03" #f (-> obj root-override trans)) ) ((< 0.1724138 f0-2) - (dummy-11 (-> obj ambient) "MTA-AM04" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "MTA-AM04" #f (-> obj root-override trans)) ) ((< 0.13793103 f0-2) - (dummy-11 (-> obj ambient) "MTA-AM05" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "MTA-AM05" #f (-> obj root-override trans)) ) ((< 0.10344828 f0-2) - (dummy-11 (-> obj ambient) "MTA-AM06" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "MTA-AM06" #f (-> obj root-override trans)) ) ((< 0.06896552 f0-2) - (dummy-11 (-> obj ambient) "MTA-AM07" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "MTA-AM07" #f (-> obj root-override trans)) ) ((< 0.03448276 f0-2) - (dummy-11 (-> obj ambient) "MTA-AM08" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "MTA-AM08" #f (-> obj root-override trans)) ) (else - (dummy-11 (-> obj ambient) "MTA-AM09" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "MTA-AM09" #f (-> obj root-override trans)) ) ) ) diff --git a/goal_src/levels/village3/sage-village3.gc b/goal_src/levels/village3/sage-village3.gc index 2d3f20d698..88acf748b6 100644 --- a/goal_src/levels/village3/sage-village3.gc +++ b/goal_src/levels/village3/sage-village3.gc @@ -78,12 +78,15 @@ (with-pp (set! (-> obj talk-message) (the-as uint 291)) (case (current-status (-> obj tasks)) - ((1 2 3) + (((task-status unknown) + (task-status need-hint) + (task-status need-introduction) + ) (if (not arg0) (set! (-> obj will-talk) #t) ) (case (current-task (-> obj tasks)) - ((105) + (((game-task village3-button)) (when arg0 (close-status! (-> obj tasks) (task-status need-introduction)) (let ((a1-5 (new 'stack-no-clear 'event-message-block))) @@ -337,7 +340,7 @@ ) ) ) - ((79) + (((game-task cave-dark-crystals)) (when arg0 (let* ((s5-3 (-> obj tasks)) (s4-0 (method-of-object s5-3 save-reminder)) @@ -405,7 +408,7 @@ ) ) ) - ((4 5) + (((task-status need-reminder-a) (task-status need-reminder)) (set! (-> obj skippable) #t) (let ((s4-1 (+ (get-reminder (-> obj tasks) 0) 1))) (if (< (the-as uint 1) (the-as uint s4-1)) @@ -466,9 +469,7 @@ 0 "ERROR: : ~S playing anim for task status ~S~%" (-> obj name) - (task-status->string - (the-as task-status (current-status (-> obj tasks))) - ) + (task-status->string (current-status (-> obj tasks))) ) ) (get-art-elem obj) @@ -507,7 +508,7 @@ ) (cond ((< 0.875 f0-2) - (dummy-11 (-> obj ambient) "SAGELP31" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "SAGELP31" #f (-> obj root-override trans)) ) ((< 0.75 f0-2) (if @@ -518,33 +519,48 @@ (task-status need-reminder) ) ) - (dummy-11 (-> obj ambient) "SAGELP32" #f (-> obj root-override trans)) + (play-ambient + (-> obj ambient) + "SAGELP32" + #f + (-> obj root-override trans) + ) ) ) ((< 0.625 f0-2) (if (nonzero? (get-task-status (game-task citadel-sage-green))) - (dummy-11 (-> obj ambient) "SAGELP33" #f (-> obj root-override trans)) + (play-ambient + (-> obj ambient) + "SAGELP33" + #f + (-> obj root-override trans) + ) ) ) ((< 0.5 f0-2) - (dummy-11 (-> obj ambient) "SAGELP34" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "SAGELP34" #f (-> obj root-override trans)) ) ((< 0.375 f0-2) - (dummy-11 (-> obj ambient) "SAGELP35" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "SAGELP35" #f (-> obj root-override trans)) ) ((< 0.25 f0-2) - (dummy-11 (-> obj ambient) "SAGELP36" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "SAGELP36" #f (-> obj root-override trans)) ) ((< 0.125 f0-2) (if (nonzero? (get-task-status (game-task citadel-sage-green))) - (dummy-11 (-> obj ambient) "SAGELP37" #f (-> obj root-override trans)) + (play-ambient + (-> obj ambient) + "SAGELP37" + #f + (-> obj root-override trans) + ) ) ) ((!= (get-task-status (game-task citadel-sage-green)) (task-status need-resolution) ) - (dummy-11 (-> obj ambient) "SAGELP38" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "SAGELP38" #f (-> obj root-override trans)) ) ) ) diff --git a/goalc/compiler/compilation/Type.cpp b/goalc/compiler/compilation/Type.cpp index e5f5f8861a..f8f8d0e1ca 100644 --- a/goalc/compiler/compilation/Type.cpp +++ b/goalc/compiler/compilation/Type.cpp @@ -374,6 +374,25 @@ Val* Compiler::compile_deftype(const goos::Object& form, const goos::Object& res // remember that this is a type m_symbol_types[result.type.base_type()] = m_ts.make_typespec("type"); + // add declared states + for (auto& state : result.type_info->get_states_declared_for_type()) { + auto existing_type = m_symbol_types.find(state.name); + if (existing_type != m_symbol_types.end() && existing_type->second != state.type) { + if (m_throw_on_define_extern_redefinition) { + throw_compiler_error(form, "deftype would redefine the type of state {} from {} to {}.", + state.name, existing_type->second.print(), state.type.print()); + } else { + print_compiler_warning( + "[Warning] deftype has redefined the type of state {}\npreviously: {}\nnow: " + "{}\n", + state.name.c_str(), existing_type->second.print().c_str(), state.type.print().c_str()); + } + } + + m_symbol_types[state.name] = state.type; + m_symbol_info.add_fwd_dec(state.name, form); + } + if (result.create_runtime_type) { // get the new method of type object. this is new_type in kscheme.cpp auto new_type_method = compile_get_method_of_type(form, m_ts.make_typespec("type"), "new", env); diff --git a/scripts/batch/gc-no-lt.bat b/scripts/batch/gc-no-lt.bat new file mode 100644 index 0000000000..6425289d14 --- /dev/null +++ b/scripts/batch/gc-no-lt.bat @@ -0,0 +1,4 @@ +@echo off +cd ..\.. +out\build\Release\bin\goalc -v +pause diff --git a/test/decompiler/reference/engine/camera/camera_REF.gc b/test/decompiler/reference/engine/camera/camera_REF.gc index 0d9967e7f2..daf0d1f910 100644 --- a/test/decompiler/reference/engine/camera/camera_REF.gc +++ b/test/decompiler/reference/engine/camera/camera_REF.gc @@ -1209,11 +1209,11 @@ ;; definition for function cam-slave-go ;; INFO: Return type mismatch int vs none. -(defun cam-slave-go ((arg0 camera-slave)) +(defun cam-slave-go ((arg0 state)) (with-pp (cam-slave-init-vars) (let ((t9-1 (the-as (function object) enter-state))) - (set! (-> pp next-state) (the-as state arg0)) + (set! (-> pp next-state) arg0) (t9-1) ) 0 diff --git a/test/decompiler/reference/engine/collide/collide-shape-h_REF.gc b/test/decompiler/reference/engine/collide/collide-shape-h_REF.gc index bf67a26303..bba6e446f6 100644 --- a/test/decompiler/reference/engine/collide/collide-shape-h_REF.gc +++ b/test/decompiler/reference/engine/collide/collide-shape-h_REF.gc @@ -352,9 +352,10 @@ ;; definition of type collide-shape-prim-group (deftype collide-shape-prim-group (collide-shape-prim) - ((num-prims int32 :offset-assert 72) - (allocated-prims int32 :offset-assert 76) - (prim uint32 1 :offset-assert 80) + ((num-prims int32 :offset-assert 72) + (allocated-prims int32 :offset-assert 76) + (prim collide-shape-prim 1 :offset-assert 80) + (prims collide-shape-prim :dynamic :offset 80) ) :method-count-assert 30 :size-assert #x54 @@ -383,7 +384,7 @@ (format #t "~Tradius: (meters ~m)~%" (-> obj local-sphere w)) (format #t "~Tnum-prims: ~D~%" (-> obj num-prims)) (format #t "~Tallocated-prims: ~D~%" (-> obj allocated-prims)) - (format #t "~Tprim[1] @ #x~X~%" (-> obj prim)) + (format #t "~Tprim[1] @ #x~X~%" (-> obj prims)) obj ) @@ -684,7 +685,7 @@ (set! (-> obj prim-core prim-type) 0) (while (nonzero? elt-count) (+! elt-count -1) - (set! (-> obj prim elt-count) (the-as uint #f)) + (set! (-> obj prims elt-count) #f) (nop!) ) (the-as collide-shape-prim-group obj) diff --git a/test/decompiler/reference/engine/collide/collide-target-h_REF.gc b/test/decompiler/reference/engine/collide/collide-target-h_REF.gc index d648ef281c..9c85da2fdb 100644 --- a/test/decompiler/reference/engine/collide/collide-target-h_REF.gc +++ b/test/decompiler/reference/engine/collide/collide-target-h_REF.gc @@ -128,10 +128,11 @@ (unknown-dword40 int64 :offset 2160) (unknown-dword41 int64 :offset 2168) (unknown-handle10 handle :offset 2176) - (unknown-int11 int32 :offset 2184) + (unknown-symbol20 symbol :offset 2184) (unknown-int20 int32 :offset 2188) (unknown-vector102 vector :inline :offset 2224) (unknown-vector103 vector :inline :offset 2240) + (unknown-smush00 smush-control :inline :offset 2288) (unknown-vector110 vector :inline :offset 2320) (unknown-vector111 vector :inline :offset 2336) (unknown-int30 int32 :offset 2384) diff --git a/test/decompiler/reference/engine/data/art-h_REF.gc b/test/decompiler/reference/engine/data/art-h_REF.gc index b89888ce01..bec132a8af 100644 --- a/test/decompiler/reference/engine/data/art-h_REF.gc +++ b/test/decompiler/reference/engine/data/art-h_REF.gc @@ -452,7 +452,7 @@ (new (symbol type process art-joint-geo) _type_ 0) (dummy-9 (_type_) (pointer int8) 9) (dummy-10 (_type_ int) int 10) - (dummy-11 (_type_ pointer) int 11) + (dummy-11 (_type_ lod-set) none 11) ) ) diff --git a/test/decompiler/reference/engine/debug/debug_REF.gc b/test/decompiler/reference/engine/debug/debug_REF.gc index 4b6a121467..32f4992edf 100644 --- a/test/decompiler/reference/engine/debug/debug_REF.gc +++ b/test/decompiler/reference/engine/debug/debug_REF.gc @@ -1314,7 +1314,7 @@ ;; definition (debug) for function add-debug-yrot-vector ;; WARN: Stack slot offset 32 signed mismatch -;; WARN: Stack slot load mismatch: defined as size 4, got size 16 +;; WARN: Stack slot load at 32 mismatch: defined as size 4, got size 16 ;; Used lq/sq (defun-debug add-debug-yrot-vector diff --git a/test/decompiler/reference/engine/debug/menu_REF.gc b/test/decompiler/reference/engine/debug/menu_REF.gc index 57bc408536..0e166b0a33 100644 --- a/test/decompiler/reference/engine/debug/menu_REF.gc +++ b/test/decompiler/reference/engine/debug/menu_REF.gc @@ -805,14 +805,14 @@ ) ;; definition for function debug-menu-make-from-template -;; WARN: Stack slot load mismatch: defined as size 4, got size 16 -;; WARN: Stack slot load mismatch: defined as size 4, got size 16 -;; WARN: Stack slot load mismatch: defined as size 4, got size 16 -;; WARN: Stack slot load mismatch: defined as size 4, got size 16 -;; WARN: Stack slot load mismatch: defined as size 4, got size 16 -;; WARN: Stack slot load mismatch: defined as size 4, got size 16 -;; WARN: Stack slot load mismatch: defined as size 4, got size 16 -;; WARN: Stack slot load mismatch: defined as size 4, got size 16 +;; WARN: Stack slot load at 48 mismatch: defined as size 4, got size 16 +;; WARN: Stack slot load at 64 mismatch: defined as size 4, got size 16 +;; WARN: Stack slot load at 80 mismatch: defined as size 4, got size 16 +;; WARN: Stack slot load at 96 mismatch: defined as size 4, got size 16 +;; WARN: Stack slot load at 48 mismatch: defined as size 4, got size 16 +;; WARN: Stack slot load at 64 mismatch: defined as size 4, got size 16 +;; WARN: Stack slot load at 80 mismatch: defined as size 4, got size 16 +;; WARN: Stack slot load at 96 mismatch: defined as size 4, got size 16 ;; Used lq/sq (defun debug-menu-make-from-template ((arg0 debug-menu-context) (arg1 pair)) (local-vars diff --git a/test/decompiler/reference/engine/entity/relocate_REF.gc b/test/decompiler/reference/engine/entity/relocate_REF.gc index c68fc65764..b64d544cdc 100644 --- a/test/decompiler/reference/engine/entity/relocate_REF.gc +++ b/test/decompiler/reference/engine/entity/relocate_REF.gc @@ -223,7 +223,7 @@ ((obj collide-shape-prim-group) (arg0 int)) (&+! (-> obj cshape) arg0) (countdown (v1-2 (-> obj num-prims)) - (+! (-> obj prim v1-2) arg0) + (&+! (-> obj prims v1-2) arg0) ) obj ) @@ -469,7 +469,3 @@ ) (the-as manipy ((method-of-type process-drawable relocate) obj arg0)) ) - - - - diff --git a/test/decompiler/reference/engine/game/game-h_REF.gc b/test/decompiler/reference/engine/game/game-h_REF.gc index 7928ff13b7..fa15a46f53 100644 --- a/test/decompiler/reference/engine/game/game-h_REF.gc +++ b/test/decompiler/reference/engine/game/game-h_REF.gc @@ -17,7 +17,7 @@ (water water-control :offset-assert 156) (sound ambient-sound :offset-assert 160) (state-flags uint32 :offset-assert 164) - (state-time seconds :offset-assert 168) + (state-time int64 :offset-assert 168) ) :heap-base #x40 :method-count-assert 20 diff --git a/test/decompiler/reference/engine/game/generic-obs-h_REF.gc b/test/decompiler/reference/engine/game/generic-obs-h_REF.gc index 256fa425ee..5c1dc89d39 100644 --- a/test/decompiler/reference/engine/game/generic-obs-h_REF.gc +++ b/test/decompiler/reference/engine/game/generic-obs-h_REF.gc @@ -3,21 +3,21 @@ ;; definition of type manipy (deftype manipy (process-drawable) - ((new-trans-hook function :offset-assert 176) - (cur-trans-hook function :offset-assert 180) - (cur-event-hook function :offset-assert 184) - (new-joint-anim art-joint-anim :offset-assert 188) - (new-joint-anim-blend uint64 :offset-assert 192) - (anim-mode symbol :offset-assert 200) - (cur-grab-handle handle :offset-assert 208) - (cur-target-handle handle :offset-assert 216) - (old-grab-pos vector :inline :offset-assert 224) - (joint joint 4 :offset-assert 240) - (new-post-hook function :offset-assert 256) - (cur-post-hook function :offset-assert 260) - (clone-copy-trans basic :offset-assert 264) - (shadow-backup basic :offset-assert 268) - (draw? symbol :offset-assert 272) + ((new-trans-hook function :offset-assert 176) + (cur-trans-hook function :offset-assert 180) + (cur-event-hook function :offset-assert 184) + (new-joint-anim art-joint-anim :offset-assert 188) + (new-joint-anim-blend uint64 :offset-assert 192) + (anim-mode symbol :offset-assert 200) + (cur-grab-handle handle :offset-assert 208) + (cur-target-handle handle :offset-assert 216) + (old-grab-pos vector :inline :offset-assert 224) + (joint process-drawable 4 :offset-assert 240) + (new-post-hook function :offset-assert 256) + (cur-post-hook function :offset-assert 260) + (clone-copy-trans basic :offset-assert 264) + (shadow-backup basic :offset-assert 268) + (draw? symbol :offset-assert 272) ) :heap-base #xb0 :method-count-assert 20 @@ -236,10 +236,10 @@ (deftype gui-query (structure) ((x-position int32 :offset-assert 0) (y-position int32 :offset-assert 4) - (message symbol :offset-assert 8) + (message string :offset-assert 8) (decision symbol :offset-assert 12) (only-allow-cancel symbol :offset-assert 16) - (no-msg symbol :offset-assert 20) + (no-msg string :offset-assert 20) (message-space int32 :offset-assert 24) ) :pack-me @@ -247,8 +247,8 @@ :size-assert #x1c :flag-assert #xb0000001c (:methods - (init! (_type_ symbol int int int symbol symbol) none 9) - (dummy-10 (_type_) symbol 10) + (init! (_type_ string int int int symbol string) none 9) + (get-response (_type_) symbol 10) ) ) diff --git a/test/decompiler/reference/engine/game/projectiles_REF.gc b/test/decompiler/reference/engine/game/projectiles_REF.gc index 73d587bfe8..212d0de207 100644 --- a/test/decompiler/reference/engine/game/projectiles_REF.gc +++ b/test/decompiler/reference/engine/game/projectiles_REF.gc @@ -1017,7 +1017,7 @@ (let ((gp-0 #f)) (while (< - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + (- (-> *display* base-frame-counter) (-> self state-time)) (the-as int (-> self timeout)) ) (let ((s5-0 (the int (-> *display* time-ratio)))) @@ -1568,16 +1568,8 @@ ) (cond ((logtest? (-> obj options) 32) - (when - (>= - (- (-> *display* base-frame-counter) (the-as int (-> obj state-time))) - 15 - ) - (when - (< - (- (-> *display* base-frame-counter) (the-as int (-> obj state-time))) - 150 - ) + (when (>= (- (-> *display* base-frame-counter) (-> obj state-time)) 15) + (when (< (- (-> *display* base-frame-counter) (-> obj state-time)) 150) (set! (-> *part-id-table* 353 init-specs 16 initial-valuef) (the-as float 0) diff --git a/test/decompiler/reference/engine/game/task/process-taskable_REF.gc b/test/decompiler/reference/engine/game/task/process-taskable_REF.gc index 3ffee2fa2c..37d644c04e 100644 --- a/test/decompiler/reference/engine/game/task/process-taskable_REF.gc +++ b/test/decompiler/reference/engine/game/task/process-taskable_REF.gc @@ -23,12 +23,12 @@ init! gui-query ((obj gui-query) - (arg0 symbol) + (arg0 string) (arg1 int) (arg2 int) (arg3 int) (arg4 symbol) - (arg5 symbol) + (arg5 string) ) (set! (-> obj x-position) arg1) (set! (-> obj y-position) arg2) @@ -42,7 +42,7 @@ ) ;; definition for method 10 of type gui-query -(defmethod dummy-10 gui-query ((obj gui-query)) +(defmethod get-response gui-query ((obj gui-query)) (kill-current-level-hint '() '(sidekick voicebox stinger) 'exit) (level-hint-surpress!) (hide-hud) @@ -72,7 +72,7 @@ (set! (-> v1-6 scale) 0.9) ) (set! (-> a1-2 flags) (font-flags shadow kerning left large)) - (print-game-text (the-as string (-> obj message)) a1-2 #f 128 22) + (print-game-text (-> obj message) a1-2 #f 128 22) ) ) (cond @@ -290,16 +290,20 @@ ) ;; definition for method 34 of type process-taskable -(defmethod TODO-RENAME-34 process-taskable ((obj process-taskable) (arg0 symbol)) - #f +;; INFO: Return type mismatch symbol vs spool-anim. +(defmethod + get-accept-anim + process-taskable + ((obj process-taskable) (arg0 symbol)) + (the-as spool-anim #f) ) ;; definition for method 35 of type process-taskable ;; INFO: Return type mismatch int vs none. -(defmethod dummy-35 process-taskable ((obj process-taskable)) - (let ((s5-0 (the-as basic (TODO-RENAME-34 obj #f)))) - (if (type-type? (-> (the-as symbol s5-0) type) spool-anim) - (spool-push *art-control* (-> (the-as spool-anim s5-0) name) 0 obj -99.0) +(defmethod push-accept-anim process-taskable ((obj process-taskable)) + (let ((s5-0 (get-accept-anim obj #f))) + (if (type-type? (-> s5-0 type) spool-anim) + (spool-push *art-control* (-> s5-0 name) 0 obj -99.0) ) ) 0 @@ -307,20 +311,20 @@ ) ;; definition for method 36 of type process-taskable -;; INFO: Return type mismatch symbol vs basic. +;; INFO: Return type mismatch symbol vs spool-anim. (defmethod - get-spool-anim-or-?? + get-reject-anim process-taskable ((obj process-taskable) (arg0 symbol)) - (the-as basic #f) + (the-as spool-anim #f) ) ;; definition for method 37 of type process-taskable ;; INFO: Return type mismatch int vs none. -(defmethod spool-push-anim process-taskable ((obj process-taskable)) - (let ((s5-0 (get-spool-anim-or-?? obj #f))) +(defmethod push-reject-anim process-taskable ((obj process-taskable)) + (let ((s5-0 (get-reject-anim obj #f))) (if (type-type? (-> s5-0 type) spool-anim) - (spool-push *art-control* (-> (the-as spool-anim s5-0) name) 0 obj -99.0) + (spool-push *art-control* (-> s5-0 name) 0 obj -99.0) ) ) 0 @@ -436,7 +440,7 @@ #t "ERROR: ~S got into give-cell with give-cell == #f task = ~S~%" (-> self name) - (game-task->string (the-as game-task (current-task (-> self tasks)))) + (game-task->string (current-task (-> self tasks))) ) ) ) @@ -463,10 +467,7 @@ (behavior () (if (and - (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 1500 - ) + (>= (- (-> *display* base-frame-counter) (-> self state-time)) 1500) (or (not *target*) (< @@ -500,7 +501,7 @@ ;; definition for function process-taskable-play-anim-enter (defbehavior process-taskable-play-anim-enter process-taskable () - (init! (-> self query) #f 40 150 25 #t #f) + (init! (-> self query) (the-as string #f) 40 150 25 #t (the-as string #f)) (logior! (-> self skel status) 8) (let ((gp-0 (get-process *default-dead-pool* othercam #x4000))) (set! (-> self camera) (ppointer->handle (when gp-0 @@ -670,7 +671,7 @@ arg0 (the-as art-joint-anim (-> self blend-on-exit)) (lambda ((arg0 process-taskable)) - (= (dummy-10 (-> arg0 query)) 'no) + (= (get-response (-> arg0 query)) 'no) ) ) (ja-play-spooled-anim @@ -762,7 +763,7 @@ ) ) (until (ja-done? 0) - (when (and *debug-segment* (= (dummy-10 (-> self query)) 'no)) + (when (and *debug-segment* (= (get-response (-> self query)) 'no)) (let ((v1-106 (-> self skel root-channel 0))) (set! (-> v1-106 num-func) num-func-identity) (set! @@ -810,7 +811,7 @@ (behavior () (process-taskable-play-anim-code (the-as art-joint-anim (get-art-elem self)) - (TODO-RENAME-34 self #t) + (get-accept-anim self #t) ) (while (not (process-release? *target*)) (suspend) @@ -842,7 +843,7 @@ (behavior () (process-taskable-play-anim-code (the-as art-joint-anim (get-art-elem self)) - (get-spool-anim-or-?? self #t) + (get-reject-anim self #t) ) (go-virtual release) (none) @@ -858,12 +859,12 @@ (behavior () (init! (-> self query) - (the-as symbol (lookup-text! *common-text* (game-text-id confirm-play) #f)) + (lookup-text! *common-text* (game-text-id confirm-play) #f) 40 150 25 #f - (the-as symbol (lookup-text! *common-text* (game-text-id quit) #f)) + (lookup-text! *common-text* (game-text-id quit) #f) ) (none) ) @@ -872,8 +873,8 @@ :trans (behavior () (case (current-status (-> self tasks)) - ((4) - (case (dummy-10 (-> self query)) + (((task-status need-reminder-a)) + (case (get-response (-> self query)) (('yes) (go-virtual play-accept) ) @@ -881,10 +882,10 @@ (go-virtual play-reject) ) ) - (dummy-35 self) + (push-accept-anim self) ) (else - (let ((gp-0 (dummy-10 (-> self query)))) + (let ((gp-0 (get-response (-> self query)))) (cond ((and (= gp-0 'yes) (process-release? *target*)) (go-virtual enter-playing) @@ -896,7 +897,7 @@ ) ) ) - (spool-push-anim self) + (push-reject-anim self) (set! *camera-look-through-other* 2) ((-> self cur-trans-hook)) (none) @@ -1064,11 +1065,7 @@ ) :trans (behavior () - (if - (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 300 - ) + (if (>= (- (-> *display* base-frame-counter) (-> self state-time)) 300) (process-entity-status! self (entity-perm-status bit-3) #f) ) (if (or (-> self been-kicked) (should-display? self)) @@ -1124,11 +1121,7 @@ ) :trans (behavior () - (if - (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 300 - ) + (if (>= (- (-> *display* base-frame-counter) (-> self state-time)) 300) (process-entity-status! self (entity-perm-status bit-3) #f) ) (cond @@ -1350,11 +1343,7 @@ ) :trans (behavior () - (when - (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 60 - ) + (when (>= (- (-> *display* base-frame-counter) (-> self state-time)) 60) (logior! (-> self mask) (process-mask actor-pause)) (process-entity-status! self (entity-perm-status bit-3) #f) ) @@ -1404,7 +1393,12 @@ (first-any (-> self tasks) #t) (when (target-above-threshold? self) (case (current-status (-> self tasks)) - ((2 3 5 4 6) + (((task-status need-hint) + (task-status need-introduction) + (task-status need-reminder) + (task-status need-reminder-a) + (task-status need-reward-speech) + ) (kill-current-level-hint '() '(sidekick voicebox ambient) 'exit) (level-hint-surpress!) (hide-hud) @@ -1628,7 +1622,7 @@ ((not (should-display? obj)) (go (method-of-object obj hidden)) ) - ((= (current-status (-> obj tasks)) 7) + ((= (current-status (-> obj tasks)) (task-status need-resolution)) (go (method-of-object obj give-cell)) ) (else @@ -1655,10 +1649,7 @@ (arg2 float) (arg3 process-drawable) ) - (set! - (-> obj last-ambient-time) - (the-as uint (-> *display* game-frame-counter)) - ) + (set! (-> obj last-ambient-time) (-> *display* game-frame-counter)) 0 (none) ) @@ -1674,13 +1665,7 @@ (arg3 process-drawable) ) (when - (< - (- - (-> *display* game-frame-counter) - (the-as int (-> obj last-ambient-time)) - ) - arg1 - ) + (< (- (-> *display* game-frame-counter) (-> obj last-ambient-time)) arg1) (set! arg0 (the-as vector #f)) (goto cfg-6) ) @@ -1695,20 +1680,17 @@ ;; definition for method 11 of type ambient-control (defmethod - dummy-11 + play-ambient ambient-control ((obj ambient-control) (arg0 string) (arg1 symbol) (arg2 vector)) (when (and - (not (string= arg0 (the-as string (-> obj last-ambient)))) + (not (string= arg0 (-> obj last-ambient))) (or arg1 (can-hint-be-played? 1 (the-as entity #f) (the-as string #f))) (= (-> *level* loading-level) (-> *level* level-default)) (ambient-hint-spawn arg0 arg2 *entity-pool* 'ambient) ) - (set! - (-> obj last-ambient-time) - (the-as uint (-> *display* game-frame-counter)) - ) + (set! (-> obj last-ambient-time) (-> *display* game-frame-counter)) (set! (-> obj last-ambient) arg0) (return #t) ) diff --git a/test/decompiler/reference/engine/game/task/task-control-h_REF.gc b/test/decompiler/reference/engine/game/task/task-control-h_REF.gc index 75531007bf..1d6ed2fe52 100644 --- a/test/decompiler/reference/engine/game/task/task-control-h_REF.gc +++ b/test/decompiler/reference/engine/game/task/task-control-h_REF.gc @@ -41,8 +41,8 @@ :size-assert #xc :flag-assert #x130000000c (:methods - (current-task (_type_) int 9) - (current-status (_type_) int 10) + (current-task (_type_) game-task 9) + (current-status (_type_) task-status 10) (close-current! (_type_) none 11) (close-status! (_type_ task-status) int 12) (first-any (_type_ symbol) int 13) @@ -64,9 +64,9 @@ ;; definition of type ambient-control (deftype ambient-control (structure) - ((last-ambient-time uint64 :offset-assert 0) - (last-ambient basic :offset-assert 8) - (last-ambient-id uint32 :offset-assert 12) + ((last-ambient-time int64 :offset-assert 0) + (last-ambient string :offset-assert 8) + (last-ambient-id sound-id :offset-assert 12) ) :method-count-assert 12 :size-assert #x10 @@ -74,7 +74,7 @@ (:methods (dummy-9 (_type_ vector int float process-drawable) none 9) (TODO-RENAME-10 (_type_ vector int float process-drawable) vector 10) - (dummy-11 (_type_ string symbol vector) symbol 11) + (play-ambient (_type_ string symbol vector) symbol 11) ) ) @@ -135,10 +135,10 @@ (get-art-elem (_type_) art-element 31) (play-anim! (_type_ symbol) basic 32) (dummy-33 (_type_) none 33) - (TODO-RENAME-34 (_type_ symbol) symbol 34) - (dummy-35 (_type_) none 35) - (get-spool-anim-or-?? (_type_ symbol) basic 36) - (spool-push-anim (_type_) none 37) + (get-accept-anim (_type_ symbol) spool-anim 34) + (push-accept-anim (_type_) none 35) + (get-reject-anim (_type_ symbol) spool-anim 36) + (push-reject-anim (_type_) none 37) (dummy-38 (_type_) none 38) (should-display? (_type_) symbol 39) (dummy-40 (_type_ object skeleton-group int int vector int) none 40) diff --git a/test/decompiler/reference/engine/game/task/task-control_REF.gc b/test/decompiler/reference/engine/game/task/task-control_REF.gc index 93e95b3255..f2ea1917bd 100644 --- a/test/decompiler/reference/engine/game/task/task-control_REF.gc +++ b/test/decompiler/reference/engine/game/task/task-control_REF.gc @@ -116,37 +116,50 @@ ) ;; definition for method 9 of type task-control +;; INFO: Return type mismatch int vs game-task. (defmethod current-task task-control ((obj task-control)) - (cond - ((= obj *null-task-control*) - (format 0 "ERROR: current-task received *null-task-control*~%") - 0 - ) - ((= (-> obj current-stage) -1) - 0 - ) - (else - (the-as int (-> obj stage (-> obj current-stage) game-task)) - ) + (the-as game-task (cond + ((= obj *null-task-control*) + (format + 0 + "ERROR: current-task received *null-task-control*~%" + ) + 0 + ) + ((= (-> obj current-stage) -1) + 0 + ) + (else + (the-as + int + (-> obj stage (-> obj current-stage) game-task) + ) + ) + ) ) ) ;; definition for method 10 of type task-control +;; INFO: Return type mismatch int vs task-status. (defmethod current-status task-control ((obj task-control)) - (cond - ((= obj *null-task-control*) - (format - 0 - "ERROR: current-status received self of *null-task-control*~%~%" - ) - 0 - ) - ((= (-> obj current-stage) -1) - 0 - ) - (else - (the-as int (-> obj stage (-> obj current-stage) status)) - ) + (the-as task-status (cond + ((= obj *null-task-control*) + (format + 0 + "ERROR: current-status received self of *null-task-control*~%~%" + ) + 0 + ) + ((= (-> obj current-stage) -1) + 0 + ) + (else + (the-as + int + (-> obj stage (-> obj current-stage) status) + ) + ) + ) ) ) @@ -186,7 +199,7 @@ (format 0 "ERROR: close-status! received non-existent task-cstage(~S ~S)--returning #t.~%" - (game-task->string (the-as game-task a0-2)) + (game-task->string a0-2) (task-status->string arg0) ) ) diff --git a/test/decompiler/reference/engine/sound/gsound-h_REF.gc b/test/decompiler/reference/engine/sound/gsound-h_REF.gc index 1e10b75b16..0e0eeed2eb 100644 --- a/test/decompiler/reference/engine/sound/gsound-h_REF.gc +++ b/test/decompiler/reference/engine/sound/gsound-h_REF.gc @@ -716,8 +716,8 @@ ((mask uint16 :offset-assert 4) (num float :offset-assert 8) (group uint8 :offset-assert 12) - (sound-name-char uint8 16 :offset 16) (sound-name sound-name :offset 16) + (sound-name-char uint8 16 :offset 16) (trans float 4 :offset-assert 32) (volume int32 :offset-assert 48) (pitch-mod int32 :offset-assert 52) @@ -741,7 +741,7 @@ (format #t "~Tmask: ~D~%" (-> obj mask)) (format #t "~Tnum: ~f~%" (-> obj num)) (format #t "~Tgroup: ~D~%" (-> obj group)) - (format #t "~Tsound-name-char[16] @ #x~X~%" (-> obj sound-name-char)) + (format #t "~Tsound-name-char[16] @ #x~X~%" (&-> obj sound-name)) (format #t "~Tsound-name: ~D~%" (-> obj sound-name)) (format #t "~Ttrans[4] @ #x~X~%" (-> obj trans)) (format #t "~Tvolume: ~D~%" (-> obj volume)) diff --git a/test/decompiler/reference/engine/sound/gsound_REF.gc b/test/decompiler/reference/engine/sound/gsound_REF.gc index de30ff9704..ecd79828bc 100644 --- a/test/decompiler/reference/engine/sound/gsound_REF.gc +++ b/test/decompiler/reference/engine/sound/gsound_REF.gc @@ -861,7 +861,7 @@ "(~5D) effect sound ~A ~G " (-> *display* base-frame-counter) (-> pp name) - (-> spec sound-name-char) + (&-> spec sound-name) ) (format #t diff --git a/test/decompiler/reference/engine/target/logic-target_REF.gc b/test/decompiler/reference/engine/target/logic-target_REF.gc index 9fcde58536..4b017544aa 100644 --- a/test/decompiler/reference/engine/target/logic-target_REF.gc +++ b/test/decompiler/reference/engine/target/logic-target_REF.gc @@ -329,10 +329,10 @@ ) ;; definition (debug) for function target-print-stats -;; WARN: Stack slot load mismatch: defined as size 4, got size 16 -;; WARN: Stack slot load mismatch: defined as size 4, got size 16 -;; WARN: Stack slot load mismatch: defined as size 4, got size 16 -;; WARN: Stack slot load mismatch: defined as size 4, got size 16 +;; WARN: Stack slot load at 160 mismatch: defined as size 4, got size 16 +;; WARN: Stack slot load at 176 mismatch: defined as size 4, got size 16 +;; WARN: Stack slot load at 160 mismatch: defined as size 4, got size 16 +;; WARN: Stack slot load at 176 mismatch: defined as size 4, got size 16 ;; Used lq/sq (defun-debug target-print-stats ((arg0 target) (arg1 symbol)) (local-vars @@ -1245,10 +1245,7 @@ 150 ) (!= (-> self next-state name) 'target-walk) - (< - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 150 - ) + (< (- (-> *display* base-frame-counter) (-> self state-time)) 150) (< (- (-> *display* base-frame-counter) (-> self control unknown-dword21)) 150 diff --git a/test/decompiler/reference/engine/target/target-util_REF.gc b/test/decompiler/reference/engine/target/target-util_REF.gc index 5db86d5edb..7af5be7f59 100644 --- a/test/decompiler/reference/engine/target/target-util_REF.gc +++ b/test/decompiler/reference/engine/target/target-util_REF.gc @@ -424,7 +424,7 @@ :flop-radius (meters 1.4) :flop0-offset (new 'static 'vector :y 3276.8 :w 1.0) :flop1-offset (new 'static 'vector :y 9011.2 :w 1.0) - :stuck-time #x5a + :stuck-time (seconds 0.3) :stuck-timeout (seconds 2) :stuck-distance (meters 0.05) :tongue-pull-speed-min 0.15 @@ -1045,10 +1045,7 @@ ;; definition for function can-play-stance-amibent? (defbehavior can-play-stance-amibent? target () (and - (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 9000 - ) + (>= (- (-> *display* base-frame-counter) (-> self state-time)) 9000) (not (-> *setting-control* current talking)) (not (-> *setting-control* current spooling)) (not (-> *setting-control* current movie)) diff --git a/test/decompiler/reference/levels/beach/beach-part_REF.gc b/test/decompiler/reference/levels/beach/beach-part_REF.gc index 21cf7c130e..b59cf98023 100644 --- a/test/decompiler/reference/levels/beach/beach-part_REF.gc +++ b/test/decompiler/reference/levels/beach/beach-part_REF.gc @@ -904,25 +904,8 @@ (new 'static 'sound-spec :num 1.0 :group #x1 - :sound-name-char - (new 'static 'array uint8 16 - #x77 - #x61 - #x74 - #x65 - #x72 - #x66 - #x61 - #x6c - #x6c - #x0 - #x0 - #x0 - #x0 - #x0 - #x0 - #x0 - ) + :sound-name + (new 'static 'sound-name :lo #x6c61667265746177) :volume #x400 ) ) diff --git a/test/decompiler/reference/levels/beach/bird-lady-beach_REF.gc b/test/decompiler/reference/levels/beach/bird-lady-beach_REF.gc index c76f07e978..d0fb9c4e2b 100644 --- a/test/decompiler/reference/levels/beach/bird-lady-beach_REF.gc +++ b/test/decompiler/reference/levels/beach/bird-lady-beach_REF.gc @@ -67,12 +67,9 @@ (defmethod play-anim! bird-lady-beach ((obj bird-lady-beach) (arg0 symbol)) (with-pp (case (current-status (-> obj tasks)) - ((6) + (((task-status need-reward-speech)) (when arg0 - (set! - (-> obj cell-for-task) - (the-as game-task (current-task (-> obj tasks))) - ) + (set! (-> obj cell-for-task) (current-task (-> obj tasks))) (close-current! (-> obj tasks)) (let ((s5-1 (get-process *default-dead-pool* manipy #x4000))) (set! (-> obj flutflut) (ppointer->handle (when s5-1 @@ -188,9 +185,7 @@ 0 "ERROR: : ~S playing anim for task status ~S~%" (-> obj name) - (task-status->string - (the-as task-status (current-status (-> obj tasks))) - ) + (task-status->string (current-status (-> obj tasks))) ) ) (-> obj draw art-group data 3) @@ -206,7 +201,7 @@ ;; definition for method 39 of type bird-lady-beach (defmethod should-display? bird-lady-beach ((obj bird-lady-beach)) - (= (current-status (-> obj tasks)) 6) + (= (current-status (-> obj tasks)) (task-status need-reward-speech)) ) ;; definition for method 11 of type bird-lady-beach diff --git a/test/decompiler/reference/levels/beach/bird-lady_REF.gc b/test/decompiler/reference/levels/beach/bird-lady_REF.gc index 360eef5181..9284a522c2 100644 --- a/test/decompiler/reference/levels/beach/bird-lady_REF.gc +++ b/test/decompiler/reference/levels/beach/bird-lady_REF.gc @@ -86,7 +86,7 @@ ;; definition for method 32 of type bird-lady (defmethod play-anim! bird-lady ((obj bird-lady) (arg0 symbol)) (case (current-status (-> obj tasks)) - ((2 3) + (((task-status need-hint) (task-status need-introduction)) (if arg0 (close-status! (-> obj tasks) (task-status need-introduction)) ) @@ -181,7 +181,7 @@ ) ) ) - ((5) + (((task-status need-reminder)) (set! (-> obj skippable) #t) (cond ((zero? (get-reminder (-> obj tasks) 0)) @@ -214,7 +214,7 @@ 0 "ERROR: : ~S playing anim for task status ~S~%" (-> obj name) - (task-status->string (the-as task-status (current-status (-> obj tasks)))) + (task-status->string (current-status (-> obj tasks))) ) ) (-> obj draw art-group data 3) @@ -243,13 +243,13 @@ ) (cond ((< 0.66 f0-2) - (dummy-11 (-> obj ambient) "BIR-LO02" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "BIR-LO02" #f (-> obj root-override trans)) ) ((< 0.33 f0-2) - (dummy-11 (-> obj ambient) "BIR-LO03" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "BIR-LO03" #f (-> obj root-override trans)) ) (else - (dummy-11 (-> obj ambient) "BIR-am08" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "BIR-am08" #f (-> obj root-override trans)) ) ) ) diff --git a/test/decompiler/reference/levels/beach/lurkercrab_REF.gc b/test/decompiler/reference/levels/beach/lurkercrab_REF.gc index a2ed89ae9d..a21001431f 100644 --- a/test/decompiler/reference/levels/beach/lurkercrab_REF.gc +++ b/test/decompiler/reference/levels/beach/lurkercrab_REF.gc @@ -81,6 +81,9 @@ :method-count-assert 76 :size-assert #x194 :flag-assert #x4c01300194 + (:states + lurkercrab-pushed + ) ) ;; definition for method 3 of type lurkercrab @@ -1030,11 +1033,7 @@ nav-enemy-default-event-handler ) ) ) - (until - (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 300 - ) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 300) (let ((v1-7 (-> self skel root-channel 0))) (set! (-> v1-7 num-func) num-func-identity) (set! (-> v1-7 frame-num) 0.0) @@ -1133,11 +1132,11 @@ nav-enemy-default-event-handler :run-travel-speed (meters 5.0) :run-rotate-speed (degrees 999.99994) :run-acceleration (meters 12.0) - :run-turn-time #x1e + :run-turn-time (seconds 0.1) :walk-travel-speed (meters 2.0) :walk-rotate-speed (degrees 999.99994) :walk-acceleration (meters 12.0) - :walk-turn-time #x1e + :walk-turn-time (seconds 0.1) :attack-shove-back (meters 1.2) :attack-shove-up (meters 1.5) :shadow-size (meters 2.0) diff --git a/test/decompiler/reference/levels/beach/lurkerpuppy_REF.gc b/test/decompiler/reference/levels/beach/lurkerpuppy_REF.gc index a6c082e8f1..7752590c13 100644 --- a/test/decompiler/reference/levels/beach/lurkerpuppy_REF.gc +++ b/test/decompiler/reference/levels/beach/lurkerpuppy_REF.gc @@ -563,11 +563,11 @@ nav-enemy-default-event-handler :run-travel-speed (meters 5.0) :run-rotate-speed (degrees 3999.9998) :run-acceleration (meters 1.0) - :run-turn-time #x2d + :run-turn-time (seconds 0.15) :walk-travel-speed (meters 2.0) :walk-rotate-speed (degrees 1999.9999) :walk-acceleration (meters 1.0) - :walk-turn-time #x1e + :walk-turn-time (seconds 0.1) :attack-shove-back (meters 3.0) :attack-shove-up (meters 2.0) :shadow-size (meters 2.0) diff --git a/test/decompiler/reference/levels/beach/mayor_REF.gc b/test/decompiler/reference/levels/beach/mayor_REF.gc index 106d7a29ee..5048ded060 100644 --- a/test/decompiler/reference/levels/beach/mayor_REF.gc +++ b/test/decompiler/reference/levels/beach/mayor_REF.gc @@ -105,7 +105,7 @@ (with-pp (set! (-> obj talk-message) (the-as uint 260)) (case (current-status (-> obj tasks)) - ((2 3) + (((task-status need-hint) (task-status need-introduction)) (when arg0 (close-specific-task! (game-task jungle-lurkerm) @@ -452,7 +452,7 @@ ) ) ) - ((4 5) + (((task-status need-reminder-a) (task-status need-reminder)) (set! (-> obj skippable) #t) (cond ((closed? @@ -1683,21 +1683,18 @@ ) ) ) - ((6) + (((task-status need-reward-speech)) (if (not arg0) (set! (-> obj will-talk) #t) ) (case (current-task (-> obj tasks)) - ((3) + (((game-task jungle-lurkerm)) (mayor-lurkerm-reward-speech obj arg0) ) (else (cond (arg0 - (set! - (-> obj cell-for-task) - (the-as game-task (current-task (-> obj tasks))) - ) + (set! (-> obj cell-for-task) (current-task (-> obj tasks))) (close-current! (-> obj tasks)) (let ((a1-15 (new 'stack-no-clear 'event-message-block))) (set! (-> a1-15 from) pp) @@ -2025,9 +2022,7 @@ 0 "ERROR: : ~S playing anim for task status ~S~%" (-> obj name) - (task-status->string - (the-as task-status (current-status (-> obj tasks))) - ) + (task-status->string (current-status (-> obj tasks))) ) ) (-> obj draw art-group data 3) @@ -2073,7 +2068,12 @@ (task-status need-reminder) ) ) - (dummy-11 (-> obj ambient) "CHI-LO01" #f (-> obj root-override trans)) + (play-ambient + (-> obj ambient) + "CHI-LO01" + #f + (-> obj root-override trans) + ) ) ) ((< 0.7777778 f0-2) @@ -2085,7 +2085,12 @@ (task-status need-reminder) ) ) - (dummy-11 (-> obj ambient) "CHI-LO02" #f (-> obj root-override trans)) + (play-ambient + (-> obj ambient) + "CHI-LO02" + #f + (-> obj root-override trans) + ) ) ) ((< 0.6666667 f0-2) @@ -2097,17 +2102,22 @@ (task-status need-reminder) ) ) - (dummy-11 (-> obj ambient) "CHI-AM07" #f (-> obj root-override trans)) + (play-ambient + (-> obj ambient) + "CHI-AM07" + #f + (-> obj root-override trans) + ) ) ) ((< 0.5555556 f0-2) - (dummy-11 (-> obj ambient) "CHI-AM06" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "CHI-AM06" #f (-> obj root-override trans)) ) ((< 0.44444445 f0-2) - (dummy-11 (-> obj ambient) "CHI-AM05" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "CHI-AM05" #f (-> obj root-override trans)) ) ((< 0.33333334 f0-2) - (dummy-11 (-> obj ambient) "CHI-AM04" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "CHI-AM04" #f (-> obj root-override trans)) ) ((< 0.22222222 f0-2) (if @@ -2118,7 +2128,12 @@ (task-status need-reminder) ) ) - (dummy-11 (-> obj ambient) "CHI-AM03" #f (-> obj root-override trans)) + (play-ambient + (-> obj ambient) + "CHI-AM03" + #f + (-> obj root-override trans) + ) ) ) ((< 0.11111111 f0-2) @@ -2130,7 +2145,12 @@ (task-status need-reminder) ) ) - (dummy-11 (-> obj ambient) "CHI-AM02" #f (-> obj root-override trans)) + (play-ambient + (-> obj ambient) + "CHI-AM02" + #f + (-> obj root-override trans) + ) ) ) (else @@ -2142,7 +2162,12 @@ (task-status need-reminder) ) ) - (dummy-11 (-> obj ambient) "CHI-AM01" #f (-> obj root-override trans)) + (play-ambient + (-> obj ambient) + "CHI-AM01" + #f + (-> obj root-override trans) + ) ) ) ) diff --git a/test/decompiler/reference/levels/beach/sculptor_REF.gc b/test/decompiler/reference/levels/beach/sculptor_REF.gc index 176fd8cad4..3bec253936 100644 --- a/test/decompiler/reference/levels/beach/sculptor_REF.gc +++ b/test/decompiler/reference/levels/beach/sculptor_REF.gc @@ -192,7 +192,7 @@ (defmethod play-anim! sculptor ((obj sculptor) (arg0 symbol)) (with-pp (case (current-status (-> obj tasks)) - ((2 3) + (((task-status need-hint) (task-status need-introduction)) (if arg0 (close-status! (-> obj tasks) (task-status need-introduction)) ) @@ -271,7 +271,7 @@ ) ) ) - ((5) + (((task-status need-reminder)) (set! (-> obj skippable) #t) (new 'static 'spool-anim :name "sculptor-reminder-1" @@ -280,12 +280,9 @@ :command-list '() ) ) - ((6) + (((task-status need-reward-speech)) (when arg0 - (set! - (-> obj cell-for-task) - (the-as game-task (current-task (-> obj tasks))) - ) + (set! (-> obj cell-for-task) (current-task (-> obj tasks))) (close-current! (-> obj tasks)) (let ((s5-1 (get-process *default-dead-pool* manipy #x4000))) (set! (-> obj muse) (ppointer->handle (when s5-1 @@ -353,9 +350,7 @@ 0 "ERROR: : ~S playing anim for task status ~S~%" (-> obj name) - (task-status->string - (the-as task-status (current-status (-> obj tasks))) - ) + (task-status->string (current-status (-> obj tasks))) ) ) (-> obj draw art-group data 4) @@ -366,9 +361,11 @@ ;; definition for method 31 of type sculptor (defmethod get-art-elem sculptor ((obj sculptor)) - (let ((v1-1 (current-status (-> obj tasks)))) - (if (or (zero? v1-1) (= v1-1 7)) - (-> obj draw art-group data 11) + (case (current-status (-> obj tasks)) + (((task-status invalid) (task-status need-resolution)) + (-> obj draw art-group data 11) + ) + (else (-> obj draw art-group data 3) ) ) @@ -390,25 +387,25 @@ ) (cond ((< 0.85714287 f0-2) - (dummy-11 (-> obj ambient) "SCU-LO01" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "SCU-LO01" #f (-> obj root-override trans)) ) ((< 0.71428573 f0-2) - (dummy-11 (-> obj ambient) "SCU-AM05" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "SCU-AM05" #f (-> obj root-override trans)) ) ((< 0.5714286 f0-2) - (dummy-11 (-> obj ambient) "SCU-AM06" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "SCU-AM06" #f (-> obj root-override trans)) ) ((< 0.42857143 f0-2) - (dummy-11 (-> obj ambient) "SCU-AM03" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "SCU-AM03" #f (-> obj root-override trans)) ) ((< 0.2857143 f0-2) - (dummy-11 (-> obj ambient) "SCU-AM04" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "SCU-AM04" #f (-> obj root-override trans)) ) ((< 0.14285715 f0-2) - (dummy-11 (-> obj ambient) "SCU-AM01" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "SCU-AM01" #f (-> obj root-override trans)) ) (else - (dummy-11 (-> obj ambient) "SCU-AM02" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "SCU-AM02" #f (-> obj root-override trans)) ) ) ) @@ -446,58 +443,61 @@ (suspend) (ja-eval) ) - (let ((v1-16 (current-status (-> self tasks)))) - (when (or (zero? v1-16) (= v1-16 7)) - (let ((a0-12 (-> self skel root-channel 0))) - (set! - (-> a0-12 frame-group) - (the-as art-joint-anim (-> self draw art-group data 12)) - ) - (set! - (-> a0-12 param 0) - (the - float - (+ - (-> - (the-as art-joint-anim (-> self draw art-group data 12)) - data - 0 - length + (case (current-status (-> self tasks)) + (((task-status invalid) (task-status need-resolution)) + (let ((a0-12 (-> self skel root-channel 0))) + (set! + (-> a0-12 frame-group) + (the-as art-joint-anim (-> self draw art-group data 12)) + ) + (set! + (-> a0-12 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 12)) + data + 0 + length + ) + -1 ) - -1 ) ) - ) - (set! (-> a0-12 param 1) 1.0) - (set! (-> a0-12 frame-num) 0.0) - (joint-control-channel-group! - a0-12 - (the-as art-joint-anim (-> self draw art-group data 12)) - num-func-seek! - ) - ) - (until (ja-done? 0) - (suspend) - (let ((a0-13 (-> self skel root-channel 0))) - (set! - (-> a0-13 param 0) - (the float (+ (-> a0-13 frame-group data 0 length) -1)) - ) - (set! (-> a0-13 param 1) 1.0) - (joint-control-channel-group-eval! - a0-13 - (the-as art-joint-anim #f) + (set! (-> a0-12 param 1) 1.0) + (set! (-> a0-12 frame-num) 0.0) + (joint-control-channel-group! + a0-12 + (the-as art-joint-anim (-> self draw art-group data 12)) num-func-seek! ) ) + (until (ja-done? 0) + (suspend) + (let ((a0-13 (-> self skel root-channel 0))) + (set! + (-> a0-13 param 0) + (the float (+ (-> a0-13 frame-group data 0 length) -1)) + ) + (set! (-> a0-13 param 1) 1.0) + (joint-control-channel-group-eval! + a0-13 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (muse-to-idle (the-as muse self)) ) - (muse-to-idle (the-as muse self)) - ) ) (while #t (let ((v1-43 (current-status (-> self tasks)))) (cond - ((or (zero? v1-43) (= v1-43 7)) + ((or + (= v1-43 (task-status invalid)) + (= v1-43 (task-status need-resolution)) + ) (let ((a0-18 (-> self skel root-channel 0))) (set! (-> a0-18 frame-group) diff --git a/test/decompiler/reference/levels/citadel/assistant-citadel_REF.gc b/test/decompiler/reference/levels/citadel/assistant-citadel_REF.gc index 12484cb981..e7b73d2e3d 100644 --- a/test/decompiler/reference/levels/citadel/assistant-citadel_REF.gc +++ b/test/decompiler/reference/levels/citadel/assistant-citadel_REF.gc @@ -42,7 +42,7 @@ assistant-lavatube-end ((obj assistant-lavatube-end) (arg0 symbol)) (case (current-status (-> obj tasks)) - ((1 2) + (((task-status unknown) (task-status need-hint)) (new 'static 'spool-anim :name "assistant-lavatube-end-resolution" :index 4 @@ -50,7 +50,7 @@ :command-list '() ) ) - ((6) + (((task-status need-reward-speech)) (if arg0 (close-current! (-> obj tasks)) ) @@ -120,7 +120,7 @@ 0 "ERROR: : ~S playing anim for task status ~S~%" (-> obj name) - (task-status->string (the-as task-status (current-status (-> obj tasks)))) + (task-status->string (current-status (-> obj tasks))) ) ) (get-art-elem obj) @@ -252,7 +252,10 @@ (first-any (-> obj tasks) #t) (let ((v1-3 (current-status (-> obj tasks)))) (and - (or (= v1-3 6) (= v1-3 0)) + (or + (= v1-3 (task-status need-reward-speech)) + (= v1-3 (task-status invalid)) + ) (not (task-closed? (game-task citadel-sage-green) (task-status need-hint))) ) ) diff --git a/test/decompiler/reference/levels/citadel/citb-drop-plat-CIT_REF.gc b/test/decompiler/reference/levels/citadel/citb-drop-plat-CIT_REF.gc index 6a2978eb30..c753d2b456 100644 --- a/test/decompiler/reference/levels/citadel/citb-drop-plat-CIT_REF.gc +++ b/test/decompiler/reference/levels/citadel/citb-drop-plat-CIT_REF.gc @@ -180,7 +180,7 @@ (while #t (if (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + (- (-> *display* base-frame-counter) (-> self state-time)) (the-as int (-> self duration)) ) (go drop-plat-drop) @@ -242,7 +242,7 @@ (while #t (when (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + (- (-> *display* base-frame-counter) (-> self state-time)) (the-as int (-> self delay)) ) (let ((v1-14 (logand -3 (-> self draw status))) @@ -297,10 +297,7 @@ 0.0033333334 (the float - (- - (-> *display* base-frame-counter) - (the-as int (-> self state-time)) - ) + (- (-> *display* base-frame-counter) (-> self state-time)) ) ) ) @@ -377,18 +374,11 @@ (the-as vector #t) ) (let ((gp-1 (the int (* 300.0 (rand-vu-float-range 0.2 0.3))))) - (while - (< - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - gp-1 - ) + (while (< (- (-> *display* base-frame-counter) (-> self state-time)) gp-1) (set! (-> self interp) (/ - (the - float - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - ) + (the float (- (-> *display* base-frame-counter) (-> self state-time))) (the float gp-1) ) ) @@ -854,7 +844,7 @@ (if (or (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + (- (-> *display* base-frame-counter) (-> self state-time)) (the-as int (+ (-> self duration) 600)) ) (or diff --git a/test/decompiler/reference/levels/common/babak-with-cannon_REF.gc b/test/decompiler/reference/levels/common/babak-with-cannon_REF.gc index 3f10458b3e..ee9ce6aab3 100644 --- a/test/decompiler/reference/levels/common/babak-with-cannon_REF.gc +++ b/test/decompiler/reference/levels/common/babak-with-cannon_REF.gc @@ -48,7 +48,7 @@ nav-enemy-default-event-handler ) ) (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + (- (-> *display* base-frame-counter) (-> self state-time)) (-> self state-timeout) ) ) @@ -129,18 +129,11 @@ nav-enemy-default-event-handler ) :trans (behavior () - (when - (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 30 - ) + (when (>= (- (-> *display* base-frame-counter) (-> self state-time)) 30) (let ((f30-0 (- (-> (target-pos 0) y) (-> self collide-info trans y)))) (if (and - (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 900 - ) + (>= (- (-> *display* base-frame-counter) (-> self state-time)) 900) (or (or (not *target*) @@ -160,7 +153,7 @@ nav-enemy-default-event-handler ) (when (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + (- (-> *display* base-frame-counter) (-> self state-time)) (-> self state-timeout) ) (if @@ -573,10 +566,7 @@ nav-enemy-default-event-handler ) ) ) - (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 900 - ) + (>= (- (-> *display* base-frame-counter) (-> self state-time)) 900) ) ) (go babak-with-cannon-jump-off-cannon) diff --git a/test/decompiler/reference/levels/common/babak_REF.gc b/test/decompiler/reference/levels/common/babak_REF.gc index e1af1d0b25..9d630b86a6 100644 --- a/test/decompiler/reference/levels/common/babak_REF.gc +++ b/test/decompiler/reference/levels/common/babak_REF.gc @@ -585,11 +585,11 @@ :run-travel-speed (meters 6.0) :run-rotate-speed (degrees 2880.0) :run-acceleration (meters 1.0) - :run-turn-time #x1e + :run-turn-time (seconds 0.1) :walk-travel-speed (meters 3.0) :walk-rotate-speed (degrees 720.0) :walk-acceleration (meters 1.0) - :walk-turn-time #x96 + :walk-turn-time (seconds 0.5) :attack-shove-back (meters 3.0) :attack-shove-up (meters 2.0) :shadow-size (meters 2.0) diff --git a/test/decompiler/reference/levels/common/basebutton_REF.gc b/test/decompiler/reference/levels/common/basebutton_REF.gc index 19847e4ba2..2402c216f6 100644 --- a/test/decompiler/reference/levels/common/basebutton_REF.gc +++ b/test/decompiler/reference/levels/common/basebutton_REF.gc @@ -317,7 +317,7 @@ (else (until (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + (- (-> *display* base-frame-counter) (-> self state-time)) (the int (* 300.0 (-> self timeout))) ) (suspend) @@ -788,10 +788,7 @@ (not (member (level-status *level* (-> arg1 load-name)) '(loaded active)) ) - (< - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 600 - ) + (< (- (-> *display* base-frame-counter) (-> self state-time)) 600) ) (suspend) ) @@ -860,7 +857,7 @@ (-> self control unknown-vector102 y) (+ -4096.0 (-> self control unknown-vector102 y)) ) - (set! (-> self control unknown-int11) (the-as int #f)) + (set! (-> self control unknown-symbol20) #f) (vector-reset! (-> self control transv)) (logior! (-> self state-flags) 1024) (set! (-> self alt-cam-pos quad) (-> arg1 quad)) @@ -1023,12 +1020,9 @@ (and (or (< (vector-dot gp-2 (-> self control transv)) 0.0) - (-> self control unknown-int11) - ) - (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 15 + (-> self control unknown-symbol20) ) + (>= (- (-> *display* base-frame-counter) (-> self state-time)) 15) ) (vector-seek! (-> self draw color-mult) @@ -1037,7 +1031,7 @@ ) (set! (-> self control transv x) (* 0.95 (-> self control transv x))) (set! (-> self control transv z) (* 0.95 (-> self control transv z))) - (when (not (-> self control unknown-int11)) + (when (not (-> self control unknown-symbol20)) (let ((a1-9 (new 'stack-no-clear 'event-message-block))) (set! (-> a1-9 from) self) (set! (-> a1-9 num-params) 2) @@ -1047,7 +1041,7 @@ (send-event-function self a1-9) ) (let ((v0-2 #t)) - (set! (-> self control unknown-int11) (the-as int v0-2)) + (set! (-> self control unknown-symbol20) v0-2) v0-2 ) ) diff --git a/test/decompiler/reference/levels/common/baseplat_REF.gc b/test/decompiler/reference/levels/common/baseplat_REF.gc index 869895c5c8..582ea99d1f 100644 --- a/test/decompiler/reference/levels/common/baseplat_REF.gc +++ b/test/decompiler/reference/levels/common/baseplat_REF.gc @@ -16,7 +16,7 @@ (dummy-20 (_type_) none 20) (dummy-21 (_type_) none 21) (dummy-22 (_type_) none 22) - (TODO-RENAME-23 (_type_) skeleton-group 23) + (get-unlit-skel (_type_) skeleton-group 23) (dummy-24 (_type_) none 24) (TODO-RENAME-25 (_type_) sparticle-launch-group 25) (dummy-26 (_type_) none 26) diff --git a/test/decompiler/reference/levels/common/battlecontroller_REF.gc b/test/decompiler/reference/levels/common/battlecontroller_REF.gc index 5a67d4603b..1366ff7335 100644 --- a/test/decompiler/reference/levels/common/battlecontroller_REF.gc +++ b/test/decompiler/reference/levels/common/battlecontroller_REF.gc @@ -595,11 +595,7 @@ battlecontroller-default-event-handler (battlecontroller-fill-all-spawners) ) (while #t - (when - (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 30 - ) + (when (>= (- (-> *display* base-frame-counter) (-> self state-time)) 30) (set! (-> self state-time) (-> *display* base-frame-counter)) (when (and @@ -694,11 +690,7 @@ battlecontroller-default-event-handler (set! (-> self state-time) (-> *display* base-frame-counter)) (battlecontroller-camera-on) (while #t - (when - (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 30 - ) + (when (>= (- (-> *display* base-frame-counter) (-> self state-time)) 30) (set! (-> self state-time) (-> *display* base-frame-counter)) (let ((gp-0 0)) (let ((v1-8 (-> self child))) diff --git a/test/decompiler/reference/levels/common/nav-enemy-h_REF.gc b/test/decompiler/reference/levels/common/nav-enemy-h_REF.gc index 62ddfdbd54..50d476a5b7 100644 --- a/test/decompiler/reference/levels/common/nav-enemy-h_REF.gc +++ b/test/decompiler/reference/levels/common/nav-enemy-h_REF.gc @@ -202,8 +202,8 @@ (TODO-RENAME-48 (_type_) none 48) (TODO-RENAME-49 (_type_ nav-enemy-info) float 49) (TODO-RENAME-50 (_type_ vector) symbol 50) - (dummy-51 (_type_) float 51) - (dummy-52 (_type_ vector) vector 52) + (dummy-51 (_type_ vector) object 51) + (dummy-52 (_type_ vector) symbol 52) (dummy-53 (_type_) symbol 53) (dummy-54 (_type_) none 54) (dummy-55 (_type_) none 55) @@ -223,8 +223,8 @@ (dummy-69 (_type_) none 69) (dummy-70 (_type_) none 70) (dummy-71 (_type_) none 71) - (dummy-72 (_type_ process event-message-block) object 72) - (TODO-RENAME-73 (_type_ process) symbol 73) + (nav-enemy-touch-handler (_type_ process event-message-block) object 72) + (nav-enemy-attack-handler (_type_ process event-message-block) object 73) (nav-enemy-jump-blocked () _type_ :state 74) (dummy-75 (_type_) none 75) ) diff --git a/test/decompiler/reference/levels/common/nav-enemy_REF.gc b/test/decompiler/reference/levels/common/nav-enemy_REF.gc index 0aa58435af..b8e69f72ed 100644 --- a/test/decompiler/reference/levels/common/nav-enemy_REF.gc +++ b/test/decompiler/reference/levels/common/nav-enemy_REF.gc @@ -169,7 +169,7 @@ ;; definition for method 72 of type nav-enemy (defmethod - dummy-72 + nav-enemy-touch-handler nav-enemy ((obj nav-enemy) (arg0 process) (arg1 event-message-block)) (if @@ -190,7 +190,11 @@ ) ;; definition for method 73 of type nav-enemy -(defmethod TODO-RENAME-73 nav-enemy ((obj nav-enemy) (arg0 process)) +;; INFO: Return type mismatch symbol vs object. +(defmethod + nav-enemy-attack-handler + nav-enemy + ((obj nav-enemy) (arg0 process) (arg1 event-message-block)) (with-pp (let ((v1-0 (new 'stack-no-clear 'event-message-block))) (set! (-> v1-0 from) pp) @@ -201,7 +205,7 @@ ) (logclear! (-> obj mask) (process-mask actor-pause attackable)) (go (method-of-object obj nav-enemy-die)) - 'die + (the-as object 'die) ) ) @@ -324,11 +328,11 @@ (case arg2 (('touch) (set! (-> self touch-time) (-> *display* base-frame-counter)) - (dummy-72 self arg0 arg3) + (nav-enemy-touch-handler self arg0 arg3) ) (('attack) (nav-enemy-set-hit-from-direction arg0) - (TODO-RENAME-73 self arg0) + (nav-enemy-attack-handler self arg0 arg3) ) ) ) @@ -821,38 +825,32 @@ nav-enemy-default-event-handler s5-0 ) ) - (s5-1 (the-as object #f)) + (s5-1 (the-as collide-shape-prim #f)) ) (when s4-0 (dotimes (s3-0 (-> (the-as collide-shape-prim-group s4-0) num-prims)) (let* ((s2-0 - (the-as - object - (-> - (the-as collide-shape-prim-group (+ (* s3-0 4) (the-as int s4-0))) - prim - 0 - ) + (-> + (the-as collide-shape-prim-group (+ (* s3-0 4) (the-as int s4-0))) + prims + 0 ) ) (v1-6 (if (and - (nonzero? (the-as uint s2-0)) - (type-type? - (-> (the-as collide-shape-prim s2-0) type) - collide-shape-prim-sphere - ) + (nonzero? s2-0) + (type-type? (-> s2-0 type) collide-shape-prim-sphere) ) - (the-as uint s2-0) + s2-0 ) ) ) - (when (the-as uint v1-6) + (when v1-6 (if (or - (not (the-as uint s5-1)) + (not s5-1) (< (-> (the-as collide-shape-prim-sphere v1-6) transform-index) (-> (the-as collide-shape-prim-group s5-1) transform-index) @@ -868,13 +866,13 @@ nav-enemy-default-event-handler ) ) ) - (set! s5-1 (the-as uint v1-6)) + (set! s5-1 v1-6) ) ) ) ) - (if (the-as collide-shape-prim s5-1) - (set! (-> (the-as collide-shape-prim s5-1) collide-with) arg0) + (if s5-1 + (set! (-> s5-1 collide-with) arg0) ) ) ) @@ -1131,7 +1129,7 @@ nav-enemy-default-event-handler ) ) (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + (- (-> *display* base-frame-counter) (-> self state-time)) (-> self state-timeout) ) (nonzero? (-> self draw)) @@ -1210,14 +1208,10 @@ nav-enemy-default-event-handler ) :trans (behavior () - (when - (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 30 - ) + (when (>= (- (-> *display* base-frame-counter) (-> self state-time)) 30) (when (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + (- (-> *display* base-frame-counter) (-> self state-time)) (-> self state-timeout) ) (if (and (nonzero? (-> self draw)) (logtest? (-> self draw status) 8)) @@ -1641,7 +1635,7 @@ nav-enemy-default-event-handler (behavior () (when (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + (- (-> *display* base-frame-counter) (-> self state-time)) (-> self reaction-time) ) (if @@ -1864,7 +1858,7 @@ nav-enemy-default-event-handler ) (when (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + (- (-> *display* base-frame-counter) (-> self state-time)) (-> self reaction-time) ) (if @@ -1967,11 +1961,7 @@ nav-enemy-default-event-handler ) :trans (behavior () - (when - (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 30 - ) + (when (>= (- (-> *display* base-frame-counter) (-> self state-time)) 30) (if (logtest? (-> *target* state-flags) 128) (go-virtual nav-enemy-patrol) ) @@ -1996,7 +1986,7 @@ nav-enemy-default-event-handler ) (logtest? (nav-control-flags bit17) (-> self nav flags)) (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + (- (-> *display* base-frame-counter) (-> self state-time)) (-> self state-timeout) ) ) @@ -2078,11 +2068,7 @@ nav-enemy-default-event-handler ) :trans (behavior () - (when - (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 30 - ) + (when (>= (- (-> *display* base-frame-counter) (-> self state-time)) 30) (if (logtest? (-> *target* state-flags) 128) (go-virtual nav-enemy-patrol) ) @@ -2132,7 +2118,7 @@ nav-enemy-default-event-handler (set! (-> self nav-enemy-flags) (logand -5 (-> self nav-enemy-flags))) (if (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + (- (-> *display* base-frame-counter) (-> self state-time)) (-> self state-timeout) ) (go-virtual nav-enemy-give-up) @@ -2183,11 +2169,7 @@ nav-enemy-default-event-handler ) :trans (behavior () - (when - (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 30 - ) + (when (>= (- (-> *display* base-frame-counter) (-> self state-time)) 30) (if (TODO-RENAME-46 self (-> self nav-info notice-distance)) (go-virtual nav-enemy-chase) ) @@ -2853,10 +2835,7 @@ nav-enemy-default-event-handler (behavior () (if (or - (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 150 - ) + (>= (- (-> *display* base-frame-counter) (-> self state-time)) 150) (logtest? (nav-control-flags bit19) (-> self nav flags)) ) (go-virtual nav-enemy-chase) @@ -2888,11 +2867,7 @@ nav-enemy-default-event-handler ) :trans (behavior () - (if - (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 150 - ) + (if (>= (- (-> *display* base-frame-counter) (-> self state-time)) 150) (go (-> self jump-return-state)) ) (none) diff --git a/test/decompiler/reference/levels/common/plat-button_REF.gc b/test/decompiler/reference/levels/common/plat-button_REF.gc index bf6156bb70..75131203b3 100644 --- a/test/decompiler/reference/levels/common/plat-button_REF.gc +++ b/test/decompiler/reference/levels/common/plat-button_REF.gc @@ -360,10 +360,7 @@ (or (not *target*) (and - (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 1200 - ) + (>= (- (-> *display* base-frame-counter) (-> self state-time)) 1200) (not (and (logtest? (-> *target* control unknown-surface00 flags) 2048) @@ -476,10 +473,7 @@ (or (not *target*) (and - (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 1200 - ) + (>= (- (-> *display* base-frame-counter) (-> self state-time)) 1200) (not (and (logtest? (-> *target* control unknown-surface00 flags) 2048) diff --git a/test/decompiler/reference/levels/common/plat_REF.gc b/test/decompiler/reference/levels/common/plat_REF.gc index 8024f838b8..6684013e41 100644 --- a/test/decompiler/reference/levels/common/plat_REF.gc +++ b/test/decompiler/reference/levels/common/plat_REF.gc @@ -83,12 +83,12 @@ :size-assert #x108 :flag-assert #x2100a00108 (:methods - (dummy-27 () none 27) + (get-lit-skel (_type_) skeleton-group 27) (dummy-28 () none 28) (wad () _type_ :state 29) - (plat-startup () _type_ :state 30) + (plat-startup (plat) _type_ :state 30) (plat-idle () _type_ :state 31) - (plat-path-active () _type_ :state 32) + (plat-path-active (plat) _type_ :state 32) ) ) @@ -163,7 +163,7 @@ ) ;; definition for method 23 of type plat -(defmethod TODO-RENAME-23 plat ((obj plat)) +(defmethod get-unlit-skel plat ((obj plat)) (cond ((= (-> (if (-> obj entity) (-> obj entity extra level) @@ -276,13 +276,13 @@ (defstate plat-startup (plat) :virtual #t :code - (behavior () + (behavior ((arg0 plat)) (cond ((logtest? (-> self path flags) (path-control-flag not-found)) (go-virtual plat-idle) ) ((> (-> self sync period) 0) - (go-virtual plat-path-active) + (go-virtual plat-path-active arg0) ) (else (go-virtual plat-idle) @@ -373,7 +373,7 @@ (none) ) :code - (the-as (function none :behavior plat) anim-loop) + (the-as (function plat none :behavior plat) anim-loop) :post (the-as (function none :behavior plat) plat-post) ) @@ -383,7 +383,7 @@ (set! (-> obj mask) (logior (process-mask platform) (-> obj mask))) (dummy-24 obj) (process-drawable-from-entity! obj arg0) - (dummy-14 obj (TODO-RENAME-23 obj) '()) + (dummy-14 obj (get-unlit-skel obj) '()) (logior! (-> obj skel status) 1) (dummy-47 (-> obj root-override)) (dummy-21 obj) @@ -408,8 +408,10 @@ (cond ((logtest? (-> obj path flags) (path-control-flag not-found)) (set! (-> obj path-pos) 0.0) - (dummy-26 obj) - (go (method-of-object obj plat-startup)) + (let ((a0-14 obj)) + (dummy-26 a0-14) + (go (method-of-object obj plat-startup) a0-14) + ) ) ((> (-> obj sync period) 0) (set! (-> obj path-pos) (if (logtest? (-> obj fact options) 8) @@ -423,8 +425,10 @@ (-> obj path-pos) 'interp ) - (dummy-26 obj) - (go (method-of-object obj plat-startup)) + (let ((a0-18 obj)) + (dummy-26 a0-18) + (go (method-of-object obj plat-startup) a0-18) + ) ) (else (set! (-> obj path-pos) 0.0) @@ -434,13 +438,11 @@ (-> obj path-pos) 'interp ) - (dummy-26 obj) - (go (method-of-object obj plat-startup)) + (let ((a0-20 obj)) + (dummy-26 a0-20) + (go (method-of-object obj plat-startup) a0-20) + ) ) ) (none) ) - - - - diff --git a/test/decompiler/reference/levels/common/sharkey_REF.gc b/test/decompiler/reference/levels/common/sharkey_REF.gc index 40c2eef2fe..37dee7fc03 100644 --- a/test/decompiler/reference/levels/common/sharkey_REF.gc +++ b/test/decompiler/reference/levels/common/sharkey_REF.gc @@ -365,7 +365,7 @@ nav-enemy-default-event-handler ) ) (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + (- (-> *display* base-frame-counter) (-> self state-time)) (-> self state-timeout) ) ) @@ -663,11 +663,7 @@ nav-enemy-default-event-handler (f28-0 (-> self collide-info transv y)) (f26-0 (-> self collide-info trans y)) ) - (until - (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 900 - ) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 900) (let ((gp-1 (-> self skel root-channel 0))) (set! (-> gp-1 frame-group) @@ -1054,7 +1050,7 @@ nav-enemy-default-event-handler ) (if (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + (- (-> *display* base-frame-counter) (-> self state-time)) (-> self state-timeout) ) (go-virtual nav-enemy-patrol) @@ -1190,11 +1186,11 @@ nav-enemy-default-event-handler :run-travel-speed (meters 12.0) :run-rotate-speed (degrees 1999.9999) :run-acceleration (meters 6.0) - :run-turn-time #x96 + :run-turn-time (seconds 0.5) :walk-travel-speed (meters 6.0) :walk-rotate-speed (degrees 1999.9999) :walk-acceleration (meters 6.0) - :walk-turn-time #x96 + :walk-turn-time (seconds 0.5) :attack-shove-back (meters 1.0) :attack-shove-up (meters 0.5) :shadow-size (meters 2.0) diff --git a/test/decompiler/reference/levels/common/water-anim_REF.gc b/test/decompiler/reference/levels/common/water-anim_REF.gc index 989970c394..a23187946a 100644 --- a/test/decompiler/reference/levels/common/water-anim_REF.gc +++ b/test/decompiler/reference/levels/common/water-anim_REF.gc @@ -898,25 +898,8 @@ :mask #xc0 :num 1.0 :group #x1 - :sound-name-char - (new 'static 'array uint8 16 - #x77 - #x61 - #x74 - #x65 - #x72 - #x2d - #x6c - #x6f - #x6f - #x70 - #x0 - #x0 - #x0 - #x0 - #x0 - #x0 - ) + :sound-name + (new 'static 'sound-name :lo #x6f6c2d7265746177) :volume #x400 :fo-min 70 :fo-max 80 @@ -931,25 +914,8 @@ :mask #xc0 :num 1.0 :group #x1 - :sound-name-char - (new 'static 'array uint8 16 - #x77 - #x61 - #x74 - #x65 - #x72 - #x2d - #x6c - #x6f - #x6f - #x70 - #x0 - #x0 - #x0 - #x0 - #x0 - #x0 - ) + :sound-name + (new 'static 'sound-name :lo #x6f6c2d7265746177) :volume #x400 :fo-min 50 :fo-max 60 @@ -963,25 +929,8 @@ :mask #xc0 :num 1.0 :group #x1 - :sound-name-char - (new 'static 'array uint8 16 - #x77 - #x61 - #x74 - #x65 - #x72 - #x2d - #x6c - #x6f - #x6f - #x70 - #x0 - #x0 - #x0 - #x0 - #x0 - #x0 - ) + :sound-name + (new 'static 'sound-name :lo #x6f6c2d7265746177) :volume #x400 :fo-min 48 :fo-max 58 @@ -996,25 +945,8 @@ :mask #xc0 :num 1.0 :group #x1 - :sound-name-char - (new 'static 'array uint8 16 - #x77 - #x61 - #x74 - #x65 - #x72 - #x2d - #x6c - #x6f - #x6f - #x70 - #x0 - #x0 - #x0 - #x0 - #x0 - #x0 - ) + :sound-name + (new 'static 'sound-name :lo #x6f6c2d7265746177) :volume #x400 :fo-min 30 :fo-max 40 @@ -1029,25 +961,8 @@ :mask #xc0 :num 1.0 :group #x1 - :sound-name-char - (new 'static 'array uint8 16 - #x77 - #x61 - #x74 - #x65 - #x72 - #x2d - #x6c - #x6f - #x6f - #x70 - #x0 - #x0 - #x0 - #x0 - #x0 - #x0 - ) + :sound-name + (new 'static 'sound-name :lo #x6f6c2d7265746177) :volume #x400 :fo-min 15 :fo-max 25 @@ -1062,25 +977,8 @@ :mask #xc0 :num 1.0 :group #x1 - :sound-name-char - (new 'static 'array uint8 16 - #x77 - #x61 - #x74 - #x65 - #x72 - #x2d - #x6c - #x6f - #x6f - #x70 - #x0 - #x0 - #x0 - #x0 - #x0 - #x0 - ) + :sound-name + (new 'static 'sound-name :lo #x6f6c2d7265746177) :volume #x400 :fo-min 27 :fo-max 37 @@ -1095,25 +993,8 @@ :mask #xc0 :num 1.0 :group #x1 - :sound-name-char - (new 'static 'array uint8 16 - #x77 - #x61 - #x74 - #x65 - #x72 - #x2d - #x6c - #x6f - #x6f - #x70 - #x0 - #x0 - #x0 - #x0 - #x0 - #x0 - ) + :sound-name + (new 'static 'sound-name :lo #x6f6c2d7265746177) :volume #x400 :fo-min 26 :fo-max 36 @@ -1128,25 +1009,8 @@ :mask #xc0 :num 1.0 :group #x1 - :sound-name-char - (new 'static 'array uint8 16 - #x77 - #x61 - #x74 - #x65 - #x72 - #x2d - #x6c - #x6f - #x6f - #x70 - #x0 - #x0 - #x0 - #x0 - #x0 - #x0 - ) + :sound-name + (new 'static 'sound-name :lo #x6f6c2d7265746177) :volume #x400 :fo-min 25 :fo-max 35 @@ -1161,25 +1025,8 @@ :mask #xc0 :num 1.0 :group #x1 - :sound-name-char - (new 'static 'array uint8 16 - #x77 - #x61 - #x74 - #x65 - #x72 - #x2d - #x6c - #x6f - #x6f - #x70 - #x0 - #x0 - #x0 - #x0 - #x0 - #x0 - ) + :sound-name + (new 'static 'sound-name :lo #x6f6c2d7265746177) :volume #x400 :fo-min 45 :fo-max 55 @@ -1194,25 +1041,8 @@ :mask #xc0 :num 1.0 :group #x1 - :sound-name-char - (new 'static 'array uint8 16 - #x77 - #x61 - #x74 - #x65 - #x72 - #x2d - #x6c - #x6f - #x6f - #x70 - #x0 - #x0 - #x0 - #x0 - #x0 - #x0 - ) + :sound-name + (new 'static 'sound-name :lo #x6f6c2d7265746177) :volume #x400 :fo-min 20 :fo-max 30 @@ -1226,25 +1056,8 @@ :mask #xc0 :num 1.0 :group #x1 - :sound-name-char - (new 'static 'array uint8 16 - #x64 - #x61 - #x72 - #x6b - #x65 - #x63 - #x6f - #x2d - #x70 - #x6f - #x6f - #x6c - #x0 - #x0 - #x0 - #x0 - ) + :sound-name + (new 'static 'sound-name :lo #x2d6f63656b726164) :volume #x400 :fo-min 40 :fo-max 50 @@ -1258,25 +1071,8 @@ :mask #xc0 :num 1.0 :group #x1 - :sound-name-char - (new 'static 'array uint8 16 - #x77 - #x61 - #x74 - #x65 - #x72 - #x2d - #x6c - #x6f - #x6f - #x70 - #x0 - #x0 - #x0 - #x0 - #x0 - #x0 - ) + :sound-name + (new 'static 'sound-name :lo #x6f6c2d7265746177) :volume #x400 :fo-min 20 :fo-max 30 @@ -1291,25 +1087,8 @@ :mask #xc0 :num 1.0 :group #x1 - :sound-name-char - (new 'static 'array uint8 16 - #x77 - #x61 - #x74 - #x65 - #x72 - #x2d - #x6c - #x6f - #x6f - #x70 - #x0 - #x0 - #x0 - #x0 - #x0 - #x0 - ) + :sound-name + (new 'static 'sound-name :lo #x6f6c2d7265746177) :volume #x400 :fo-min 27 :fo-max 37 @@ -1324,25 +1103,8 @@ :mask #xc0 :num 1.0 :group #x1 - :sound-name-char - (new 'static 'array uint8 16 - #x64 - #x61 - #x72 - #x6b - #x65 - #x63 - #x6f - #x2d - #x70 - #x6f - #x6f - #x6c - #x0 - #x0 - #x0 - #x0 - ) + :sound-name + (new 'static 'sound-name :lo #x2d6f63656b726164) :volume #x400 :fo-min 22 :fo-max 32 @@ -1362,25 +1124,8 @@ :mask #xc0 :num 1.0 :group #x1 - :sound-name-char - (new 'static 'array uint8 16 - #x64 - #x61 - #x72 - #x6b - #x65 - #x63 - #x6f - #x2d - #x70 - #x6f - #x6f - #x6c - #x0 - #x0 - #x0 - #x0 - ) + :sound-name + (new 'static 'sound-name :lo #x2d6f63656b726164) :volume #x400 :fo-min 70 :fo-max 80 @@ -1395,25 +1140,8 @@ :mask #xc0 :num 1.0 :group #x1 - :sound-name-char - (new 'static 'array uint8 16 - #x64 - #x61 - #x72 - #x6b - #x65 - #x63 - #x6f - #x2d - #x70 - #x6f - #x6f - #x6c - #x0 - #x0 - #x0 - #x0 - ) + :sound-name + (new 'static 'sound-name :lo #x2d6f63656b726164) :volume #x400 :fo-min 40 :fo-max 50 @@ -1428,25 +1156,8 @@ :mask #xc0 :num 1.0 :group #x1 - :sound-name-char - (new 'static 'array uint8 16 - #x64 - #x61 - #x72 - #x6b - #x65 - #x63 - #x6f - #x2d - #x70 - #x6f - #x6f - #x6c - #x0 - #x0 - #x0 - #x0 - ) + :sound-name + (new 'static 'sound-name :lo #x2d6f63656b726164) :volume #x400 :fo-min 37 :fo-max 47 @@ -1461,25 +1172,8 @@ :mask #xc0 :num 1.0 :group #x1 - :sound-name-char - (new 'static 'array uint8 16 - #x64 - #x61 - #x72 - #x6b - #x65 - #x63 - #x6f - #x2d - #x70 - #x6f - #x6f - #x6c - #x0 - #x0 - #x0 - #x0 - ) + :sound-name + (new 'static 'sound-name :lo #x2d6f63656b726164) :volume #x400 :fo-min 20 :fo-max 30 @@ -1493,25 +1187,8 @@ :mask #xc0 :num 1.0 :group #x1 - :sound-name-char - (new 'static 'array uint8 16 - #x64 - #x61 - #x72 - #x6b - #x65 - #x63 - #x6f - #x2d - #x70 - #x6f - #x6f - #x6c - #x0 - #x0 - #x0 - #x0 - ) + :sound-name + (new 'static 'sound-name :lo #x2d6f63656b726164) :volume #x400 :fo-min 51 :fo-max 61 @@ -1525,25 +1202,8 @@ :mask #xc0 :num 1.0 :group #x1 - :sound-name-char - (new 'static 'array uint8 16 - #x64 - #x61 - #x72 - #x6b - #x65 - #x63 - #x6f - #x2d - #x70 - #x6f - #x6f - #x6c - #x0 - #x0 - #x0 - #x0 - ) + :sound-name + (new 'static 'sound-name :lo #x2d6f63656b726164) :volume #x400 :fo-min 54 :fo-max 64 @@ -1619,25 +1279,8 @@ :mask #xc0 :num 1.0 :group #x1 - :sound-name-char - (new 'static 'array uint8 16 - #x64 - #x61 - #x72 - #x6b - #x65 - #x63 - #x6f - #x2d - #x70 - #x6f - #x6f - #x6c - #x0 - #x0 - #x0 - #x0 - ) + :sound-name + (new 'static 'sound-name :lo #x2d6f63656b726164) :volume #x400 :fo-min 17 :fo-max 27 @@ -1688,25 +1331,8 @@ :mask #xc0 :num 1.0 :group #x1 - :sound-name-char - (new 'static 'array uint8 16 - #x68 - #x65 - #x6c - #x69 - #x78 - #x2d - #x64 - #x61 - #x72 - #x6b - #x2d - #x65 - #x63 - #x6f - #x0 - #x0 - ) + :sound-name + (new 'static 'sound-name :lo #x61642d78696c6568) :volume #x400 :fo-min #x78 :fo-max #x82 @@ -1721,25 +1347,8 @@ :mask #xc0 :num 1.0 :group #x1 - :sound-name-char - (new 'static 'array uint8 16 - #x64 - #x61 - #x72 - #x6b - #x65 - #x63 - #x6f - #x2d - #x70 - #x6f - #x6f - #x6c - #x0 - #x0 - #x0 - #x0 - ) + :sound-name + (new 'static 'sound-name :lo #x2d6f63656b726164) :volume #x400 :fo-min 19 :fo-max 29 diff --git a/test/decompiler/reference/levels/finalboss/final-door_REF.gc b/test/decompiler/reference/levels/finalboss/final-door_REF.gc index f4eed26f63..18be3fd06a 100644 --- a/test/decompiler/reference/levels/finalboss/final-door_REF.gc +++ b/test/decompiler/reference/levels/finalboss/final-door_REF.gc @@ -482,17 +482,10 @@ -2.2755556 ) (set! (-> self state-time) (-> *display* base-frame-counter)) - (until - (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 300 - ) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 300) (let ((f0-2 - (the - float - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - ) + (the float (- (-> *display* base-frame-counter) (-> self state-time))) ) ) (eval-position! gp-1 f0-2 (-> self root-override trans)) diff --git a/test/decompiler/reference/levels/finalboss/green-eco-lurker_REF.gc b/test/decompiler/reference/levels/finalboss/green-eco-lurker_REF.gc new file mode 100644 index 0000000000..7ad32a933d --- /dev/null +++ b/test/decompiler/reference/levels/finalboss/green-eco-lurker_REF.gc @@ -0,0 +1,1409 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type green-eco-lurker +(deftype green-eco-lurker (nav-enemy) + ((played-sound? symbol :offset-assert 400) + (sound-delay int32 :offset-assert 404) + (appear-dest vector :inline :offset-assert 416) + (traj trajectory :inline :offset-assert 432) + ) + :heap-base #x170 + :method-count-assert 76 + :size-assert #x1d8 + :flag-assert #x4c017001d8 + (:states + green-eco-lurker-appear + green-eco-lurker-appear-land + ) + ) + +;; definition for method 3 of type green-eco-lurker +(defmethod inspect green-eco-lurker ((obj green-eco-lurker)) + (let ((t9-0 (method-of-type nav-enemy inspect))) + (t9-0 obj) + ) + (format #t "~T~Tplayed-sound?: ~A~%" (-> obj played-sound?)) + (format #t "~T~Tsound-delay: ~D~%" (-> obj sound-delay)) + (format #t "~T~Tappear-dest: #~%" (-> obj appear-dest)) + (format #t "~T~Ttraj: #~%" (-> obj traj)) + obj + ) + +;; definition of type green-eco-lurker-gen +(deftype green-eco-lurker-gen (process-drawable) + ((num-to-spawn int32 :offset-assert 176) + (num-spawned int32 :offset-assert 180) + (num-alive int32 :offset-assert 184) + ) + :heap-base #x50 + :method-count-assert 20 + :size-assert #xbc + :flag-assert #x14005000bc + ) + +;; definition for method 3 of type green-eco-lurker-gen +(defmethod inspect green-eco-lurker-gen ((obj green-eco-lurker-gen)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tnum-to-spawn: ~D~%" (-> obj num-to-spawn)) + (format #t "~T~Tnum-spawned: ~D~%" (-> obj num-spawned)) + (format #t "~T~Tnum-alive: ~D~%" (-> obj num-alive)) + obj + ) + +;; failed to figure out what this is: +(let + ((v1-2 + (new 'static 'skeleton-group + :art-group-name "green-eco-lurker" + :bounds (new 'static 'vector :w 24371.2) + :version #x6 + :shadow 2 + ) + ) + ) + (set! (-> v1-2 jgeo) 0) + (set! (-> v1-2 janim) -1) + (set! (-> v1-2 mgeo 0) (the-as uint 1)) + (set! (-> v1-2 lod-dist 0) 4095996000.0) + (set! *green-eco-lurker-sg* v1-2) + ) + +;; definition for symbol *green-eco-lurker-nav-enemy-info*, type nav-enemy-info +(define + *green-eco-lurker-nav-enemy-info* + (new 'static 'nav-enemy-info + :idle-anim 3 + :walk-anim 4 + :turn-anim 10 + :notice-anim 9 + :run-anim 4 + :jump-anim 7 + :jump-land-anim 8 + :victory-anim 5 + :taunt-anim 5 + :die-anim 6 + :neck-joint 5 + :player-look-at-joint 5 + :run-travel-speed (meters 6.0) + :run-rotate-speed (degrees 360.0) + :run-acceleration (meters 1.0) + :run-turn-time (seconds 0.1) + :walk-travel-speed (meters 3.0) + :walk-rotate-speed (degrees 360.0) + :walk-acceleration (meters 1.0) + :walk-turn-time (seconds 0.5) + :attack-shove-back (meters 3.0) + :attack-shove-up (meters 2.0) + :shadow-size (meters 2.0) + :notice-nav-radius (meters 2.5) + :nav-nearest-y-threshold (meters 400.0) + :notice-distance (meters 300.0) + :stop-chase-distance (meters 400.0) + :frustration-distance (meters 8.0) + :frustration-time #x4b0 + :die-anim-hold-frame 24.0 + :jump-anim-start-frame 10.0 + :jump-land-anim-end-frame 10000000000.0 + :jump-height-min (meters 3.0) + :jump-height-factor 0.5 + :jump-start-anim-speed 1.0 + :shadow-max-y (meters 0.5) + :shadow-min-y (meters -1.75) + :shadow-locus-dist (meters 150.0) + :use-align #f + :draw-shadow #t + :move-to-ground #t + :hover-if-no-ground #f + :use-momentum #f + :use-flee #t + :use-proximity-notice #f + :use-jump-blocked #t + :use-jump-patrol #f + :gnd-collide-with #x805 + :debug-draw-neck #f + :debug-draw-jump #f + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-group-id-table* 643) + (new 'static 'sparticle-launch-group + :length 37 + :duration #x258 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-green-eco-lurker-death" + :launcher + (new 'static 'inline-array sparticle-group-item 37 + (sp-item 2585 :fade-after (meters 100.0) :period 600 :length 5 :binding 2583) + (sp-item 2583 :flags (start-dead launch-asap) :binding 2584) + (sp-item 2584 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 2583 :flags (start-dead launch-asap) :binding 2584) + (sp-item 2584 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 2583 :flags (start-dead launch-asap) :binding 2584) + (sp-item 2584 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 2583 :flags (start-dead launch-asap) :binding 2584) + (sp-item 2584 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 2583 :flags (start-dead launch-asap) :binding 2584) + (sp-item 2584 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 2583 :flags (start-dead launch-asap) :binding 2584) + (sp-item 2584 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 2583 :flags (start-dead launch-asap) :binding 2584) + (sp-item 2584 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 2583 :flags (start-dead launch-asap) :binding 2584) + (sp-item 2584 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 2583 :flags (start-dead launch-asap) :binding 2584) + (sp-item 2584 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 2583 :flags (start-dead launch-asap) :binding 2584) + (sp-item 2584 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 2583 :flags (start-dead launch-asap) :binding 2584) + (sp-item 2584 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 2583 :flags (start-dead launch-asap) :binding 2584) + (sp-item 2584 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 2583 :flags (start-dead launch-asap) :binding 2584) + (sp-item 2584 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 2583 :flags (start-dead launch-asap) :binding 2584) + (sp-item 2584 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 2583 :flags (start-dead launch-asap) :binding 2584) + (sp-item 2584 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 2583 :flags (start-dead launch-asap) :binding 2584) + (sp-item 2584 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 2586 :period 600 :length 5) + (sp-item 2587 :fade-after (meters 80.0) :falloff-to (meters 80.0) :period 600 :length 40) + (sp-item 2588 :period 600 :length 20) + (sp-item 2589 :fade-after (meters 120.0) :falloff-to (meters 120.0) :period 600 :length 20) + ) + :bounds (new 'static 'sphere :w 49152.0) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 2587) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 21 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 6.0) + (sp-rnd-flt spt-scale-x (meters 0.2) (meters 0.4) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 64.0 128.0 1.0) + (sp-rnd-flt spt-g 0.0 32.0 1.0) + (sp-rnd-flt spt-b 96.0 64.0 1.0) + (sp-rnd-flt spt-a 32.0 96.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.026666667) (meters 0.10666667) 1.0) + (sp-flt spt-scalevel-x (meters -0.0016666667)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-rnd-flt spt-accel-y -0.68266666 -0.68266666 1.0) + (sp-flt spt-friction 0.9) + (sp-int spt-timer 300) + (sp-cpuinfo-flags bit2 bit14) + (sp-int-plain-rnd spt-next-time 30 29 1) + (sp-launcher-by-id spt-next-launcher 2590) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 140.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 2.0) (meters 4.0) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 2590) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 5 + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g 0.0) + (sp-flt spt-fade-b 0.0) + (sp-flt spt-fade-a -1.4222223) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 2589) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 14 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 3.0) + (sp-flt spt-scale-x (meters 0.2)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 180.0) 1.0) + (sp-flt spt-scale-y (meters 8.0)) + (sp-rnd-flt spt-r 64.0 192.0 1.0) + (sp-rnd-flt spt-g 0.0 32.0 1.0) + (sp-rnd-flt spt-b 128.0 64.0 1.0) + (sp-rnd-flt spt-a 32.0 64.0 1.0) + (sp-flt spt-scalevel-y (meters 0.42666668)) + (sp-flt spt-fade-a -1.6) + (sp-int spt-timer 60) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 2586) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 12 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 16.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 64.0 192.0 1.0) + (sp-rnd-flt spt-g 0.0 32.0 1.0) + (sp-rnd-flt spt-b 128.0 64.0 1.0) + (sp-flt spt-a 96.0) + (sp-flt spt-fade-a -1.7454545) + (sp-int spt-timer 54) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 2588) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 21 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-flt spt-num 4.0) + (sp-rnd-flt spt-scale-x (meters 2.5) (meters 1.5) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 0.0 96.0 1.0) + (sp-rnd-flt spt-g 0.0 32.0 1.0) + (sp-rnd-flt spt-b 64.0 32.0 1.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.053333335) (meters 0.013333334) 1.0) + (sp-flt spt-scalevel-x (meters 0.013333334)) + (sp-rnd-flt spt-rotvel-z (degrees -0.3) (degrees 0.6) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.42666668) + (sp-rnd-flt spt-accel-y 0.68266666 0.68266666 1.0) + (sp-flt spt-friction 0.8) + (sp-int spt-timer 510) + (sp-cpuinfo-flags bit2 bit14) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 110.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 2585) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 14 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 16.0) + (sp-flt spt-y (meters 1.0)) + (sp-flt spt-scale-x (meters 0.1)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-vel-y (meters 0.053333335) (meters 0.026666667) 1.0) + (sp-flt spt-accel-y -1.3653333) + (sp-flt spt-friction 0.94) + (sp-int spt-timer 240) + (sp-cpuinfo-flags bit3) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 140.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 2583) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 21 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-y (meters 0.0) (meters 16.0) 1.0) + (sp-rnd-flt spt-z 1228.8 1228.8 1.0) + (sp-rnd-flt spt-scale-x (meters 0.3) (meters 0.3) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 0.0 96.0 1.0) + (sp-rnd-flt spt-g 0.0 32.0 1.0) + (sp-rnd-flt spt-b 64.0 32.0 1.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-rnd-flt spt-omega 0.0 65536.0 1.0) + (sp-rnd-flt spt-vel-x (meters 0.026666667) (meters 0.10666667) 1.0) + (sp-flt spt-scalevel-x (meters -0.000909091)) + (sp-rnd-int-flt spt-rotvel-z (degrees -0.3) 1 109.22667) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-g -0.26666668) + (sp-flt spt-fade-a -0.19393939) + (sp-int-plain-rnd spt-timer 90 149 1) + (sp-cpuinfo-flags bit2 bit3 bit7) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 2584) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 17 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 0.3) (meters 0.1) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 32.0 96.0 1.0) + (sp-rnd-flt spt-g 0.0 32.0 1.0) + (sp-rnd-flt spt-b 64.0 32.0 1.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-flt spt-scalevel-x (meters -0.0006190476)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.01904762) + (sp-rnd-flt spt-accel-y -0.40960002 -0.6144 1.0) + (sp-int-plain-rnd spt-timer 30 299 1) + (sp-cpuinfo-flags bit2 bit3) + (sp-int spt-next-time 240) + (sp-launcher-by-id spt-next-launcher 198) + (sp-end) + ) + ) + ) + +;; definition for method 43 of type green-eco-lurker +(defmethod + dummy-43 + green-eco-lurker + ((obj green-eco-lurker) (arg0 process) (arg1 event-message-block)) + (with-pp + (cond + ((= (-> arg0 type) target) + (when + (nav-enemy-send-attack + arg0 + (the-as touching-shapes-entry (-> arg1 param 0)) + 'generic + ) + (let ((a1-2 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-2 from) pp) + (set! (-> a1-2 num-params) 0) + (set! (-> a1-2 message) 'blob-hit-jak) + (send-event-function (ppointer->process (-> obj parent)) a1-2) + ) + ) + #f + ) + (else + (nav-enemy-set-hit-from-direction arg0) + ((method-of-type nav-enemy dummy-43) obj arg0 arg1) + ) + ) + ) + ) + +;; definition for method 73 of type green-eco-lurker +(defmethod + nav-enemy-attack-handler + green-eco-lurker + ((obj green-eco-lurker) (arg0 process) (arg1 event-message-block)) + (with-pp + (cond + ((= (-> arg0 type) target) + (when + (nav-enemy-send-attack + arg0 + (the-as touching-shapes-entry (-> arg1 param 0)) + 'generic + ) + (let ((a1-2 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-2 from) pp) + (set! (-> a1-2 num-params) 0) + (set! (-> a1-2 message) 'blob-hit-jak) + (send-event-function (ppointer->process (-> obj parent)) a1-2) + ) + ) + #f + ) + (else + ((method-of-type nav-enemy nav-enemy-attack-handler) obj arg0 arg1) + ) + ) + ) + ) + +;; definition for method 44 of type green-eco-lurker +(defmethod + dummy-44 + green-eco-lurker + ((obj green-eco-lurker) (arg0 process) (arg1 event-message-block)) + (with-pp + (when + (and + (logtest? (-> obj nav-enemy-flags) 64) + ((method-of-type touching-shapes-entry prims-touching?) + (the-as touching-shapes-entry (-> arg1 param 0)) + (-> obj collide-info) + (the-as uint 1) + ) + ) + (when + (nav-enemy-send-attack + arg0 + (the-as touching-shapes-entry (-> arg1 param 0)) + 'generic + ) + (let ((a1-3 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-3 from) pp) + (set! (-> a1-3 num-params) 0) + (set! (-> a1-3 message) 'blob-hit-jak) + (send-event-function (ppointer->process (-> obj parent)) a1-3) + ) + ) + ) + ) + ) + +;; definition for method 72 of type green-eco-lurker +(defmethod + nav-enemy-touch-handler + green-eco-lurker + ((obj green-eco-lurker) (arg0 process) (arg1 event-message-block)) + (with-pp + (when + (and + (logtest? (-> obj nav-enemy-flags) 64) + ((method-of-type touching-shapes-entry prims-touching?) + (the-as touching-shapes-entry (-> arg1 param 0)) + (-> obj collide-info) + (the-as uint 1) + ) + ) + (when + (nav-enemy-send-attack + arg0 + (the-as touching-shapes-entry (-> arg1 param 0)) + 'generic + ) + (let ((a1-3 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-3 from) pp) + (set! (-> a1-3 num-params) 0) + (set! (-> a1-3 message) 'blob-hit-jak) + (send-event-function (ppointer->process (-> obj parent)) a1-3) + ) + ) + ) + ) + ) + +;; definition for method 51 of type green-eco-lurker +;; INFO: Return type mismatch symbol vs object. +;; Used lq/sq +(defmethod dummy-51 green-eco-lurker ((obj green-eco-lurker) (arg0 vector)) + (when + (or + (not *target*) + (>= (vector-vector-xz-distance arg0 (target-pos 0)) 36864.0) + ) + (let ((v1-3 (new 'stack-no-clear 'vector))) + (set! (-> v1-3 quad) (-> arg0 quad)) + (set! (-> v1-3 w) (-> obj collide-info root-prim local-sphere w)) + ) + (if (not (TODO-RENAME-50 obj arg0)) + (return (the-as object #t)) + ) + ) + #f + ) + +;; definition for method 52 of type green-eco-lurker +(defmethod dummy-52 green-eco-lurker ((obj green-eco-lurker) (arg0 vector)) + (let ((s4-0 (-> obj path curve num-cverts))) + (when (> s4-0 0) + (let ((s2-0 (nav-enemy-rnd-int-count s4-0)) + (s3-0 s4-0) + ) + (while (> s3-0 0) + (eval-path-curve-div! (-> obj path) arg0 (the float s2-0) 'interp) + (if (dummy-51 obj arg0) + (return #t) + ) + (set! s2-0 (mod (+ s2-0 1) s4-0)) + (+! s3-0 -1) + ) + ) + ) + ) + #f + ) + +;; failed to figure out what this is: +(defstate green-eco-lurker-tune-spheres (green-eco-lurker) + :trans + (behavior () + 0 + (none) + ) + :code + (behavior () + 0 + (none) + ) + :post + (the-as (function none :behavior green-eco-lurker) transform-post) + ) + +;; failed to figure out what this is: +(defstate green-eco-lurker-wait-to-appear (green-eco-lurker) + :enter + (behavior () + (logior! (-> self draw status) 2) + (dummy-48 (-> self collide-info)) + (none) + ) + :exit + (behavior () + (set! (-> self draw status) (logand -3 (-> self draw status))) + (dummy-49 (-> self collide-info)) + (none) + ) + :trans + (behavior () + (if (dummy-52 self (-> self appear-dest)) + (go green-eco-lurker-appear) + ) + (none) + ) + :code + (behavior () + (while #t + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + ) + (none) + ) + ) + +;; definition for method 53 of type green-eco-lurker +;; INFO: Return type mismatch int vs symbol. +(defmethod dummy-53 green-eco-lurker ((obj green-eco-lurker)) + (the-as symbol (cond + ((and + (-> obj draw shadow) + (zero? (-> obj draw cur-lod)) + (logtest? (-> obj draw status) 8) + ) + (let ((f0-0 (-> obj appear-dest y)) + (v1-7 (-> obj draw shadow-ctrl)) + ) + (let ((a0-1 v1-7)) + (set! + (-> a0-1 settings flags) + (logand -33 (-> a0-1 settings flags)) + ) + ) + 0 + (let ((a0-3 v1-7)) + (set! (-> a0-3 settings bot-plane w) (- (+ -6144.0 f0-0))) + ) + 0 + (set! (-> v1-7 settings top-plane w) (- (+ 6144.0 f0-0))) + ) + 0 + ) + (else + (let ((v1-9 (-> obj draw shadow-ctrl))) + (logior! (-> v1-9 settings flags) 32) + ) + 0 + ) + ) + ) + ) + +;; failed to figure out what this is: +(defstate green-eco-lurker-appear (green-eco-lurker) + :enter + (behavior () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (set! (-> self played-sound?) #f) + (set! (-> self sound-delay) (nav-enemy-rnd-int-range 30 150)) + (let + ((f0-1 + (- + (-> self appear-dest x) + (-> (the-as robotboss (-> self parent 0)) root-override trans x) + ) + ) + ) + (set! + (-> self collide-info trans x) + (+ + (-> (the-as robotboss (-> self parent 0)) root-override trans x) + (fmax -32768.0 (fmin 32768.0 f0-1)) + ) + ) + ) + (logior! (-> self collide-info nav-flags) 2) + (set! (-> self nav extra-nav-sphere quad) (-> self appear-dest quad)) + (set! (-> self nav extra-nav-sphere w) 8192.0) + (setup-from-to-duration! + (-> self traj) + (-> self collide-info trans) + (-> self appear-dest) + 225.0 + -9.102222 + ) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (set! (-> gp-0 quad) (-> self collide-info trans quad)) + (set! (-> gp-0 y) (+ 8192.0 (-> gp-0 y))) + (let ((s5-0 (get-process *default-dead-pool* part-tracker #x4000))) + (when s5-0 + (let ((t9-3 (method-of-type part-tracker activate))) + (t9-3 + (the-as part-tracker s5-0) + *entity-pool* + 'part-tracker + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + s5-0 + part-tracker-init + (-> *part-group-id-table* 643) + -1 + #f + #f + #f + gp-0 + ) + (-> s5-0 ppointer) + ) + ) + ) + (let ((gp-1 (new 'stack-no-clear 'vector))) + (vector-! gp-1 (-> self appear-dest) (-> self collide-info trans)) + (set! (-> gp-1 y) 0.0) + (vector-normalize! gp-1 1.0) + (forward-up->quaternion (-> self collide-info quat) gp-1 *up-vector*) + ) + (none) + ) + :trans + (behavior () + (let + ((f30-0 + (fmin + (the float (- (-> *display* base-frame-counter) (-> self state-time))) + (-> self traj time) + ) + ) + ) + (eval-position! (-> self traj) f30-0 (-> self collide-info trans)) + (when (= f30-0 (-> self traj time)) + (logior! (-> self collide-info nav-flags) 1) + (set! + (-> self collide-info nav-flags) + (logand -3 (-> self collide-info nav-flags)) + ) + (go green-eco-lurker-appear-land) + ) + ) + (when + (and + (not (-> self played-sound?)) + (>= + (- (-> *display* base-frame-counter) (-> self state-time)) + (-> self sound-delay) + ) + ) + (set! (-> self played-sound?) #t) + (sound-play-by-name + (static-sound-name "blob-jump") + (new-sound-id) + 1024 + (the int (* 1524.0 (nav-enemy-rnd-float-range -0.5 0.5))) + 0 + (the-as uint 1) + (the-as vector #t) + ) + ) + (dummy-53 self) + 0 + (none) + ) + :code + (behavior () + (ja-channel-push! 1 60) + (sound-play-by-name + (static-sound-name "blob-out") + (new-sound-id) + 1024 + (the int (* 1524.0 (nav-enemy-rnd-float-range -1.0 1.0))) + 0 + (the-as uint 1) + (the-as vector #t) + ) + (cond + ((zero? (nav-enemy-rnd-int-count 2)) + (let ((a0-4 (-> self skel root-channel 0))) + (set! + (-> a0-4 frame-group) + (the-as art-joint-anim (-> self draw art-group data 11)) + ) + (set! + (-> a0-4 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 11)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-4 param 1) 1.0) + (set! (-> a0-4 frame-num) 0.0) + (joint-control-channel-group! + a0-4 + (the-as art-joint-anim (-> self draw art-group data 11)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-5 (-> self skel root-channel 0))) + (set! + (-> a0-5 param 0) + (the float (+ (-> a0-5 frame-group data 0 length) -1)) + ) + (set! (-> a0-5 param 1) 1.0) + (joint-control-channel-group-eval! + a0-5 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (else + (let ((a0-7 (-> self skel root-channel 0))) + (set! + (-> a0-7 frame-group) + (the-as art-joint-anim (-> self draw art-group data 7)) + ) + (set! + (-> a0-7 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 7)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-7 param 1) 1.0) + (set! (-> a0-7 frame-num) 0.0) + (joint-control-channel-group! + a0-7 + (the-as art-joint-anim (-> self draw art-group data 7)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-8 (-> self skel root-channel 0))) + (set! + (-> a0-8 param 0) + (the float (+ (-> a0-8 frame-group data 0 length) -1)) + ) + (set! (-> a0-8 param 1) 1.0) + (joint-control-channel-group-eval! + a0-8 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + ) + (while #t + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior green-eco-lurker) transform-post) + ) + +;; failed to figure out what this is: +(defstate green-eco-lurker-appear-land (green-eco-lurker) + :event + (the-as + (function process int symbol event-message-block object :behavior green-eco-lurker) + nav-enemy-default-event-handler + ) + :code + (behavior () + (activate! *camera-smush-control* 409.6 37 150 1.0 0.99) + (sound-play-by-name + (static-sound-name "blob-land") + (new-sound-id) + 1024 + (the int (* 1524.0 (nav-enemy-rnd-float-range -1.0 1.0))) + 0 + (the-as uint 1) + (the-as vector #t) + ) + (let ((v1-4 (-> self draw shadow-ctrl))) + (let ((a0-4 v1-4)) + (set! (-> a0-4 settings bot-plane w) (- -7168.0)) + ) + 0 + (let ((a0-6 v1-4)) + (set! (-> a0-6 settings top-plane w) (- 2048.0)) + ) + 0 + (set! (-> v1-4 settings flags) (logand -9 (-> v1-4 settings flags))) + (set! (-> v1-4 settings flags) (logand -5 (-> v1-4 settings flags))) + (set! (-> v1-4 settings flags) (logand -33 (-> v1-4 settings flags))) + ) + 0 + (ja-channel-push! 1 60) + (let ((a0-15 (-> self skel root-channel 0))) + (set! + (-> a0-15 frame-group) + (the-as art-joint-anim (-> self draw art-group data 8)) + ) + (set! + (-> a0-15 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 8)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-15 param 1) 1.0) + (set! (-> a0-15 frame-num) 0.0) + (joint-control-channel-group! + a0-15 + (the-as art-joint-anim (-> self draw art-group data 8)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-16 (-> self skel root-channel 0))) + (set! + (-> a0-16 param 0) + (the float (+ (-> a0-16 frame-group data 0 length) -1)) + ) + (set! (-> a0-16 param 1) 1.0) + (joint-control-channel-group-eval! + a0-16 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (logior! (-> self nav-enemy-flags) 2) + (go-virtual nav-enemy-chase) + (none) + ) + :post + (the-as (function none :behavior green-eco-lurker) transform-post) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-patrol (green-eco-lurker) + :virtual #t + :code + (behavior () + (ja-channel-push! 1 60) + (let ((t9-1 (-> (method-of-type nav-enemy nav-enemy-patrol) code))) + (if t9-1 + ((the-as (function none) t9-1)) + ) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-chase (green-eco-lurker) + :virtual #t + :code + (behavior () + (let ((f30-0 (nav-enemy-rnd-float-range 0.9 1.1))) + (cond + ((= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 8) + ) + (let ((a0-5 (-> self skel root-channel 0))) + (set! + (-> a0-5 param 0) + (the float (+ (-> a0-5 frame-group data 0 length) -1)) + ) + (set! (-> a0-5 param 1) 1.0) + (joint-control-channel-group! + a0-5 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (ja-channel-push! 1 60) + (let ((a0-7 (-> self skel root-channel 0))) + (set! + (-> a0-7 frame-group) + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info run-anim)) + ) + ) + (set! + (-> a0-7 param 0) + (the + float + (+ + (-> + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info run-anim)) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-7 param 1) f30-0) + (set! (-> a0-7 frame-num) 0.0) + (joint-control-channel-group! + a0-7 + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info run-anim)) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (ja-blend-eval) + (suspend) + (let ((a0-8 (-> self skel root-channel 0))) + (set! + (-> a0-8 param 0) + (the float (+ (-> a0-8 frame-group data 0 length) -1)) + ) + (set! (-> a0-8 param 1) f30-0) + (joint-control-channel-group-eval! + a0-8 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (else + (ja-channel-push! 1 60) + (let ((v1-42 (-> self skel root-channel 0))) + (set! + (-> v1-42 frame-group) + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info run-anim)) + ) + ) + ) + (let ((v1-45 (-> self skel root-channel 0))) + (set! (-> v1-45 num-func) num-func-identity) + (set! (-> v1-45 frame-num) 0.0) + ) + ) + ) + (while #t + (suspend) + (let ((a0-17 (-> self skel root-channel 0))) + (set! (-> a0-17 param 0) f30-0) + (joint-control-channel-group-eval! + a0-17 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + ) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-jump-land (green-eco-lurker) + :virtual #t + :code + (behavior () + (let ((a0-0 (-> self skel root-channel 0))) + (set! + (-> a0-0 param 0) + (the float (+ (-> a0-0 frame-group data 0 length) -1)) + ) + (set! (-> a0-0 param 1) 1.0) + (joint-control-channel-group! + a0-0 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (ja-channel-push! 1 22) + (let ((gp-0 (-> self skel root-channel 0))) + (set! + (-> gp-0 frame-group) + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info jump-land-anim)) + ) + ) + (set! (-> gp-0 param 0) (ja-aframe 32.0 0)) + (set! (-> gp-0 param 1) 0.5) + (set! (-> gp-0 frame-num) 0.0) + (joint-control-channel-group! + gp-0 + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info jump-land-anim)) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (ja-blend-eval) + (suspend) + (let ((gp-1 (-> self skel root-channel 0))) + (set! (-> gp-1 param 0) (ja-aframe 32.0 0)) + (set! (-> gp-1 param 1) 0.5) + (joint-control-channel-group-eval! + gp-1 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (go-virtual nav-enemy-chase) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-die (green-eco-lurker) + :virtual #t + :enter + (behavior () + (let ((a1-0 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-0 from) self) + (set! (-> a1-0 num-params) 0) + (set! (-> a1-0 message) 'blob-died) + (send-event-function (ppointer->process (-> self parent)) a1-0) + ) + (let ((gp-0 (get-process *default-dead-pool* part-tracker #x4000))) + (when gp-0 + (let ((t9-2 (method-of-type part-tracker activate))) + (t9-2 + (the-as part-tracker gp-0) + *entity-pool* + 'part-tracker + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + gp-0 + part-tracker-init + (-> *part-group-id-table* 643) + -1 + #f + #f + #f + (-> self collide-info trans) + ) + (-> gp-0 ppointer) + ) + ) + (sound-play-by-name + (static-sound-name "blob-explode") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + (activate! *camera-smush-control* 409.6 37 150 1.0 0.99) + (let ((v1-14 (-> self draw shadow-ctrl))) + (logior! (-> v1-14 settings flags) 32) + ) + 0 + (let ((t9-7 (-> (method-of-type nav-enemy nav-enemy-die) enter))) + (if t9-7 + (t9-7) + ) + ) + (none) + ) + ) + +;; definition for method 47 of type green-eco-lurker +;; INFO: Return type mismatch int vs none. +(defmethod initialize-collision green-eco-lurker ((obj green-eco-lurker)) + (let + ((s5-0 + (new + 'process + 'collide-shape-moving + obj + (collide-list-enum usually-hit-by-player) + ) + ) + ) + (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s5-0 reaction) default-collision-reaction) + (set! (-> s5-0 no-reaction) nothing) + (let ((s4-0 (new 'process 'collide-shape-prim-group s5-0 (the-as uint 7) 0))) + (set! (-> s4-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s4-0 collide-with) (the-as uint 16)) + (set! (-> s4-0 prim-core action) (the-as uint 1)) + (set! (-> s4-0 transform-index) 4) + (set-vector! (-> s4-0 local-sphere) 0.0 0.0 -4096.0 20480.0) + (dummy-46 s5-0) + (let ((s3-0 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 3)))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 1)) + (set! (-> s3-0 prim-core offense) 1) + (set-vector! (-> s3-0 local-sphere) 0.0 2785.28 0.0 3276.8) + ) + (dummy-28 s4-0) + (let ((s3-1 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 3)))) + (set! (-> s3-1 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-1 collide-with) (the-as uint 16)) + (set! (-> s3-1 prim-core action) (the-as uint 1)) + (set! (-> s3-1 prim-core offense) 1) + (set-vector! (-> s3-1 local-sphere) 0.0 6615.04 0.0 3276.8) + ) + (dummy-28 s4-0) + (let ((s3-2 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 3)))) + (set! (-> s3-2 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-2 collide-with) (the-as uint 16)) + (set! (-> s3-2 prim-core action) (the-as uint 1)) + (set! (-> s3-2 prim-core offense) 1) + (set-vector! (-> s3-2 local-sphere) 0.0 10444.8 0.0 3276.8) + ) + (dummy-28 s4-0) + (let ((s3-3 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 1)))) + (set! (-> s3-3 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-3 collide-with) (the-as uint 16)) + (set! (-> s3-3 prim-core offense) 2) + (set! (-> s3-3 transform-index) 6) + (set-vector! (-> s3-3 local-sphere) 0.0 0.0 0.0 3276.8) + ) + (dummy-28 s4-0) + (let ((s3-4 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 1)))) + (set! (-> s3-4 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-4 collide-with) (the-as uint 16)) + (set! (-> s3-4 prim-core offense) 2) + (set! (-> s3-4 transform-index) 4) + (set-vector! (-> s3-4 local-sphere) 0.0 -3276.8 -2048.0 5734.4) + ) + (dummy-28 s4-0) + (let ((s3-5 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 1)))) + (set! (-> s3-5 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-5 collide-with) (the-as uint 16)) + (set! (-> s3-5 prim-core offense) 2) + (set! (-> s3-5 transform-index) 12) + (set-vector! (-> s3-5 local-sphere) 0.0 0.0 0.0 2457.6) + ) + (dummy-28 s4-0) + (let ((s3-6 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 1)))) + (set! (-> s3-6 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-6 collide-with) (the-as uint 16)) + (set! (-> s3-6 prim-core offense) 2) + (set! (-> s3-6 transform-index) 16) + (set-vector! (-> s3-6 local-sphere) 0.0 0.0 0.0 2457.6) + ) + (dummy-28 s4-0) + ) + (set! (-> s5-0 nav-radius) 8192.0) + (dummy-50 s5-0) + (set! (-> s5-0 max-iteration-count) (the-as uint 2)) + (set! (-> obj collide-info) s5-0) + ) + 0 + (none) + ) + +;; definition for method 48 of type green-eco-lurker +;; INFO: Return type mismatch int vs none. +(defmethod TODO-RENAME-48 green-eco-lurker ((obj green-eco-lurker)) + (dummy-14 obj *green-eco-lurker-sg* '()) + (set! (-> obj draw origin-joint-index) (the-as uint 3)) + (set! + (-> obj collide-info nav-flags) + (logand -2 (-> obj collide-info nav-flags)) + ) + (TODO-RENAME-45 obj *green-eco-lurker-nav-enemy-info*) + (logior! (-> obj draw shadow-ctrl settings flags) 4) + (set! (-> obj neck up) (the-as uint 0)) + (set! (-> obj neck nose) (the-as uint 1)) + (set! (-> obj neck ear) (the-as uint 2)) + 0 + (none) + ) + +;; definition for function green-eco-lurker-init-by-other +;; Used lq/sq +(defbehavior + green-eco-lurker-init-by-other green-eco-lurker + ((arg0 entity) (arg1 green-eco-lurker-gen) (arg2 vector)) + (initialize-collision self) + (set! (-> self collide-info trans quad) (-> arg2 quad)) + (vector-identity! (-> self collide-info scale)) + (quaternion-identity! (-> self collide-info quat)) + (set! (-> self entity) (-> arg1 entity)) + (TODO-RENAME-48 self) + (logclear! (-> self mask) (process-mask actor-pause)) + (go green-eco-lurker-wait-to-appear) + (none) + ) + +;; 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 + (('blob-died) + (set! (-> self num-alive) (max 0 (+ (-> self num-alive) -1))) + (let ((a1-1 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-1 from) self) + (set! (-> a1-1 num-params) 0) + (set! (-> a1-1 message) 'blob-died) + (send-event-function (ppointer->process (-> self parent)) a1-1) + ) + ) + (('blob-hit-jak) + (let ((a1-2 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-2 from) self) + (set! (-> a1-2 num-params) 0) + (set! (-> a1-2 message) 'blob-hit-jak) + (send-event-function (ppointer->process (-> self parent)) a1-2) + ) + ) + ) + ) + :code + (behavior () + (while (< (-> self num-spawned) (-> self num-to-spawn)) + (when (< (-> self num-alive) 3) + (when (nonzero? (-> self num-spawned)) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 300) + (suspend) + ) + ) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (set! (-> gp-0 quad) (-> self root trans quad)) + (set! (-> gp-0 y) (+ -16384.0 (-> gp-0 y))) + (let ((s5-0 (get-process *default-dead-pool* green-eco-lurker #x4000))) + (when s5-0 + (let ((t9-1 (method-of-type green-eco-lurker activate))) + (t9-1 + (the-as green-eco-lurker s5-0) + self + 'green-eco-lurker + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + s5-0 + green-eco-lurker-init-by-other + (-> self entity) + self + gp-0 + ) + (-> s5-0 ppointer) + ) + ) + ) + (+! (-> self num-spawned) 1) + (+! (-> self num-alive) 1) + ) + (suspend) + ) + (while (> (-> self num-alive) 0) + (suspend) + ) + (let ((a1-3 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-3 from) self) + (set! (-> a1-3 num-params) 0) + (set! (-> a1-3 message) 'trigger) + (send-event-function (ppointer->process (-> self parent)) a1-3) + ) + (until (not (-> self child)) + (suspend) + ) + (suspend) + 0 + (none) + ) + ) + +;; definition for function green-eco-lurker-gen-init-by-other +;; Used lq/sq +(defbehavior + green-eco-lurker-gen-init-by-other green-eco-lurker-gen + ((arg0 entity) (arg1 vector) (arg2 int)) + (set! (-> self num-to-spawn) arg2) + (set! (-> self num-spawned) 0) + (set! (-> self num-alive) 0) + (set! (-> self entity) arg0) + (set! (-> self root) (new 'process 'trsqv)) + (set! (-> self root trans quad) (-> arg1 quad)) + (vector-identity! (-> self root scale)) + (quaternion-identity! (-> self root quat)) + (logclear! (-> self mask) (process-mask actor-pause)) + (go spawn-minions) + (none) + ) diff --git a/test/decompiler/reference/levels/finalboss/light-eco_REF.gc b/test/decompiler/reference/levels/finalboss/light-eco_REF.gc new file mode 100644 index 0000000000..459ac3aec5 --- /dev/null +++ b/test/decompiler/reference/levels/finalboss/light-eco_REF.gc @@ -0,0 +1,1282 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type light-eco-child +(deftype light-eco-child (process-drawable) + ((root-override collide-shape :offset 112) + (angle-bit int32 :offset-assert 176) + (ground-y float :offset-assert 180) + (falling-start-time int64 :offset-assert 184) + (last-update-time int64 :offset-assert 192) + (rot vector :inline :offset-assert 208) + (rotv vector :inline :offset-assert 224) + (traj trajectory :inline :offset-assert 240) + ) + :heap-base #xb0 + :method-count-assert 21 + :size-assert #x118 + :flag-assert #x1500b00118 + (:methods + (common-trans (_type_) none 20) + ) + (:states + light-eco-child-grabbed + light-eco-child-hit-ground + light-eco-child-idle + light-eco-child-die + ) + ) + +;; definition for method 3 of type light-eco-child +(defmethod inspect light-eco-child ((obj light-eco-child)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tangle-bit: ~D~%" (-> obj angle-bit)) + (format #t "~T~Tground-y: ~f~%" (-> obj ground-y)) + (format #t "~T~Tfalling-start-time: ~D~%" (-> obj falling-start-time)) + (format #t "~T~Tlast-update-time: ~D~%" (-> obj last-update-time)) + (format #t "~T~Trot: #~%" (-> obj rot)) + (format #t "~T~Trotv: #~%" (-> obj rotv)) + (format #t "~T~Ttraj: #~%" (-> obj traj)) + obj + ) + +;; definition of type light-eco-mother +(deftype light-eco-mother (process-drawable) + ((player-got-eco? symbol :offset-assert 176) + (angle-mask int64 :offset-assert 184) + (delay-til-spawn int32 :offset-assert 192) + (part2 sparticle-launch-control :offset-assert 196) + (last-update-time int64 :offset-assert 200) + (last-spawned-time int64 :offset-assert 208) + ) + :heap-base #x70 + :method-count-assert 22 + :size-assert #xd8 + :flag-assert #x16007000d8 + (:methods + (spawn-child-eco (_type_) symbol 20) + (common-trans (_type_) none 21) + ) + (:states + light-eco-mother-discipate + light-eco-mother-active + ) + ) + +;; definition for method 3 of type light-eco-mother +(defmethod inspect light-eco-mother ((obj light-eco-mother)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tplayer-got-eco?: ~A~%" (-> obj player-got-eco?)) + (format #t "~T~Tangle-mask: ~D~%" (-> obj angle-mask)) + (format #t "~T~Tdelay-til-spawn: ~D~%" (-> obj delay-til-spawn)) + (format #t "~T~Tpart2: ~A~%" (-> obj part2)) + (format #t "~T~Tlast-update-time: ~D~%" (-> obj last-update-time)) + (format #t "~T~Tlast-spawned-time: ~D~%" (-> obj last-spawned-time)) + obj + ) + +;; failed to figure out what this is: +(let + ((v1-2 + (new 'static 'skeleton-group + :art-group-name "light-eco" + :bounds (new 'static 'vector :w 36864.0) + :version #x6 + ) + ) + ) + (set! (-> v1-2 jgeo) 0) + (set! (-> v1-2 janim) -1) + (set! (-> v1-2 mgeo 0) (the-as uint 1)) + (set! (-> v1-2 lod-dist 0) 4095996000.0) + (set! *light-eco-big-sg* v1-2) + ) + +;; failed to figure out what this is: +(let + ((v1-3 + (new 'static 'skeleton-group + :art-group-name "light-eco" + :bounds (new 'static 'vector :w 6144.0) + :version #x6 + ) + ) + ) + (set! (-> v1-3 jgeo) 3) + (set! (-> v1-3 janim) -1) + (set! (-> v1-3 mgeo 0) (the-as uint 4)) + (set! (-> v1-3 lod-dist 0) 4095996000.0) + (set! *light-eco-small-sg* v1-3) + ) + +;; failed to figure out what this is: +(set! + (-> *part-group-id-table* 690) + (new 'static 'sparticle-launch-group + :length 4 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-light-eco-mother-growing" + :launcher + (new 'static 'inline-array sparticle-group-item 4 + (sp-item 2902) + (sp-item 2900) + (sp-item 2897) + (sp-item 2898) + ) + :bounds (new 'static 'sphere :w 131072.0) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 2897) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 19 + (sp-tex spt-texture (new 'static 'texture-id :index #x2 :page #x2)) + (sp-flt spt-num 0.5) + (sp-rnd-flt spt-scale-x (meters 10.5) (meters 4.5) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 2.1) (meters 1.8) 1.0) + (sp-rnd-int spt-r 0 1 255.0) + (sp-rnd-int spt-g 0 1 255.0) + (sp-rnd-int spt-b 0 1 255.0) + (sp-flt spt-a 0.0) + (sp-flt spt-scalevel-x (meters 0.009765625)) + (sp-rnd-flt spt-rotvel-z (degrees -0.15) (degrees 0.3) 1.0) + (sp-flt spt-scalevel-y (meters 0.009765625)) + (sp-flt spt-fade-a 0.35555556) + (sp-int spt-timer 300) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-int spt-next-time 90) + (sp-launcher-by-id spt-next-launcher 2899) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 2899) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 + (sp-flt spt-fade-a -0.53333336) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 2898) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 18 + (sp-tex spt-texture (new 'static 'texture-id :index #x2 :page #x2)) + (sp-flt spt-num 0.06) + (sp-rnd-flt spt-scale-x (meters 20.0) (meters 4.5) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-scale-y (meters 1.2)) + (sp-rnd-int spt-r 0 1 255.0) + (sp-rnd-int spt-g 0 1 255.0) + (sp-rnd-int spt-b 0 1 255.0) + (sp-flt spt-a 0.0) + (sp-flt spt-scalevel-x (meters 0.009765625)) + (sp-rnd-flt spt-rotvel-z (degrees -0.15) (degrees 0.3) 1.0) + (sp-flt spt-fade-a 0.32) + (sp-int spt-timer 300) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-int spt-next-time 75) + (sp-launcher-by-id spt-next-launcher 232) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 2900) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 22 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-rnd-flt spt-num 0.05 0.05 1.0) + (sp-rnd-flt spt-x (meters -0.001) (meters 0.002) 1.0) + (sp-rnd-flt spt-y (meters -0.001) (meters 0.002) 1.0) + (sp-rnd-flt spt-z -4.096 8.192 1.0) + (sp-rnd-flt spt-scale-x (meters 10.0) (meters 5.0) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 192.0 64.0 1.0) + (sp-rnd-flt spt-g 192.0 64.0 1.0) + (sp-rnd-flt spt-b 192.0 64.0 1.0) + (sp-flt spt-a 0.0) + (sp-flt spt-vel-y (meters 0.0)) + (sp-flt spt-scalevel-x (meters 0.016666668)) + (sp-rnd-flt spt-rotvel-z (degrees -0.3) (degrees 0.6) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a 0.21333334) + (sp-int spt-timer 600) + (sp-cpuinfo-flags bit2 bit3) + (sp-int-plain-rnd spt-next-time 240 59 1) + (sp-launcher-by-id spt-next-launcher 2901) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 2901) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 + (sp-flt spt-fade-a -0.21333334) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 2902) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 23 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-rnd-flt spt-num 1.0 8.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.5) (meters 0.2) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 192.0 64.0 1.0) + (sp-rnd-flt spt-g 192.0 64.0 1.0) + (sp-rnd-flt spt-b 192.0 64.0 1.0) + (sp-rnd-flt spt-a 32.0 64.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.10666667) (meters 0.21333334) 1.0) + (sp-flt spt-scalevel-x (meters -0.00083333335)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-rnd-flt spt-accel-y -6.826667 -2.7306666 1.0) + (sp-flt spt-friction 0.9) + (sp-int-plain-rnd spt-timer 30 149 1) + (sp-cpuinfo-flags bit0 bit2 bit3) + (sp-flt spt-userdata 1638400.0) + (sp-func spt-func 'check-drop-level-lighteco-big-pops) + (sp-int-plain-rnd spt-next-time 45 299 1) + (sp-launcher-by-id spt-next-launcher 2903) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 180.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees -1440.0) (degrees 2880.0) 1.0) + (sp-flt spt-conerot-radius (meters 4.0)) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 2903) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 + (sp-flt spt-userdata 2252800.0) + (sp-end) + ) + ) + ) + +;; definition for function check-drop-level-lighteco-big-pops +(defun + check-drop-level-lighteco-big-pops + ((arg0 sparticle-system) (arg1 sparticle-cpuinfo) (arg2 vector)) + (when (< (-> arg2 y) (-> arg1 user-float)) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (sp-kill-particle arg0 arg1) + (set-vector! gp-0 (-> arg2 x) (-> arg2 y) (-> arg2 z) 1.0) + (sp-launch-particles-var + *sp-particle-system-2d* + (-> *part-id-table* 2904) + gp-0 + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.0 + ) + (sp-launch-particles-var + *sp-particle-system-2d* + (-> *part-id-table* 2905) + gp-0 + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.0 + ) + ) + ) + (none) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 2905) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 13 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 0.4) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 16.0 32.0 1.0) + (sp-flt spt-fade-a -1.92) + (sp-int spt-timer 20) + (sp-cpuinfo-flags bit2 bit3) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 2904) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 16 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-rnd-flt spt-num 4.0 4.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.3) (meters 0.2) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 192.0 64.0 1.0) + (sp-rnd-flt spt-g 192.0 64.0 1.0) + (sp-rnd-flt spt-b 192.0 64.0 1.0) + (sp-rnd-flt spt-a 32.0 64.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.053333335) (meters 0.053333335) 1.0) + (sp-rnd-flt spt-accel-y -6.826667 -2.7306666 1.0) + (sp-flt spt-friction 0.85) + (sp-int-plain-rnd spt-timer 15 119 1) + (sp-cpuinfo-flags bit2 bit3) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-group-id-table* 691) + (new 'static 'sparticle-launch-group + :length 4 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-light-eco-mother" + :launcher + (new 'static 'inline-array sparticle-group-item 4 + (sp-item 2902) + (sp-item 2900) + (sp-item 2897) + (sp-item 2898) + ) + :bounds (new 'static 'sphere :w 131072.0) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-group-id-table* 692) + (new 'static 'sparticle-launch-group + :length 2 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-light-eco-child" + :launcher + (new 'static 'inline-array sparticle-group-item 2 + (sp-item 2906) + (sp-item 2907) + ) + :bounds (new 'static 'sphere :w 16384.0) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 2907) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 22 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-rnd-flt spt-num 0.025 0.025 1.0) + (sp-rnd-flt spt-x (meters -0.001) (meters 0.002) 1.0) + (sp-rnd-flt spt-y (meters -0.001) (meters 0.002) 1.0) + (sp-rnd-flt spt-z -4.096 8.192 1.0) + (sp-rnd-flt spt-scale-x (meters 2.0) (meters 0.5) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 192.0 64.0 1.0) + (sp-rnd-flt spt-g 192.0 64.0 1.0) + (sp-rnd-flt spt-b 192.0 64.0 1.0) + (sp-flt spt-a 0.0) + (sp-flt spt-vel-y (meters 0.0)) + (sp-flt spt-scalevel-x (meters 0.006666667)) + (sp-rnd-flt spt-rotvel-z (degrees -0.3) (degrees 0.6) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a 0.85333335) + (sp-int spt-timer 300) + (sp-cpuinfo-flags bit2 bit3) + (sp-int-plain-rnd spt-next-time 120 29 1) + (sp-launcher-by-id spt-next-launcher 2908) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 2908) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 + (sp-flt spt-fade-a -0.85333335) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 2906) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 22 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-rnd-flt spt-num 1.0 2.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.15) (meters 0.3) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 192.0 64.0 1.0) + (sp-rnd-flt spt-g 192.0 64.0 1.0) + (sp-rnd-flt spt-b 192.0 64.0 1.0) + (sp-rnd-flt spt-a 32.0 64.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.10666667) (meters 0.21333334) 1.0) + (sp-flt spt-scalevel-x (meters -0.00083333335)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-rnd-flt spt-accel-y -6.826667 -2.7306666 1.0) + (sp-flt spt-friction 0.5) + (sp-int-plain-rnd spt-timer 30 149 1) + (sp-cpuinfo-flags bit0 bit2 bit3) + (sp-flt spt-userdata 1638400.0) + (sp-func spt-func 'check-drop-level-lighteco-pops) + (sp-int-plain-rnd spt-next-time 45 299 1) + (sp-launcher-by-id spt-next-launcher 2909) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 180.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees -1440.0) (degrees 2880.0) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 2909) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 + (sp-flt spt-userdata 2048000.0) + (sp-end) + ) + ) + ) + +;; definition for function check-drop-level-lighteco-pops +(defun + check-drop-level-lighteco-pops + ((arg0 sparticle-system) (arg1 sparticle-cpuinfo) (arg2 vector)) + (when (< (-> arg2 y) (-> arg1 user-float)) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (sp-kill-particle arg0 arg1) + (set-vector! gp-0 (-> arg2 x) (-> arg2 y) (-> arg2 z) 1.0) + (sp-launch-particles-var + *sp-particle-system-2d* + (-> *part-id-table* 2910) + gp-0 + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.0 + ) + (sp-launch-particles-var + *sp-particle-system-2d* + (-> *part-id-table* 2911) + gp-0 + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.0 + ) + ) + ) + (none) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 2911) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 13 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 0.4) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 16.0 32.0 1.0) + (sp-flt spt-fade-a -1.92) + (sp-int spt-timer 20) + (sp-cpuinfo-flags bit2 bit3) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 2910) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 16 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-rnd-flt spt-num 4.0 4.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.2) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 192.0 64.0 1.0) + (sp-rnd-flt spt-g 192.0 64.0 1.0) + (sp-rnd-flt spt-b 192.0 64.0 1.0) + (sp-rnd-flt spt-a 32.0 64.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.053333335) (meters 0.053333335) 1.0) + (sp-rnd-flt spt-accel-y -6.826667 -2.7306666 1.0) + (sp-flt spt-friction 0.85) + (sp-int-plain-rnd spt-timer 15 119 1) + (sp-cpuinfo-flags bit2 bit3) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +;; definition for function light-eco-child-default-event-handler +;; INFO: Return type mismatch none vs object. +(defbehavior + light-eco-child-default-event-handler light-eco-child + ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (when (or (= v1-0 'touch) (= v1-0 'attack)) + (when (= (-> arg0 type) target) + (let ((a1-3 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-3 from) self) + (set! (-> a1-3 num-params) 1) + (set! (-> a1-3 message) 'trigger) + (set! (-> a1-3 param 0) (the-as uint (-> self angle-bit))) + (send-event-function + (ppointer->process (-> self parent)) + a1-3 + ) + ) + (go light-eco-child-grabbed) + ) + ) + ) + ) + ) + +;; definition for method 20 of type light-eco-child +;; INFO: Return type mismatch object vs none. +(defmethod common-trans light-eco-child ((obj light-eco-child)) + (let ((v1-1 (-> *display* base-frame-counter))) + (when (!= v1-1 (-> obj last-update-time)) + (set! (-> obj last-update-time) v1-1) + (let* ((s5-0 (new 'stack-no-clear 'vector)) + (s4-0 (-> obj rot)) + (f30-0 (-> s4-0 w)) + ) + (vector-v++! s4-0 (-> obj rotv)) + (set! + (-> s4-0 w) + (+ f30-0 (* (-> obj rotv w) (-> *display* seconds-per-frame))) + ) + (set-vector! + s5-0 + (cos (-> s4-0 x)) + (cos (-> s4-0 y)) + (cos (-> s4-0 z)) + 1.0 + ) + (vector-normalize! s5-0 1.0) + (quaternion-vector-angle! (-> obj root-override quat) s5-0 f30-0) + ) + (spawn (-> obj part) (-> obj root-override trans)) + ) + ) + (none) + ) + +;; failed to figure out what this is: +(defstate light-eco-child-appear (light-eco-child) + :event + light-eco-child-default-event-handler + :enter + (behavior () + (set! (-> self falling-start-time) (-> *display* base-frame-counter)) + (none) + ) + :trans + (behavior () + (let + ((f30-0 + (fmin + (the + float + (- (-> *display* base-frame-counter) (-> self falling-start-time)) + ) + (-> self traj time) + ) + ) + ) + (eval-position! (-> self traj) f30-0 (-> self root-override trans)) + (if (= f30-0 (-> self traj time)) + (go light-eco-child-hit-ground) + ) + ) + (common-trans self) + (none) + ) + :code + (behavior () + (while #t + (suspend) + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 param 0) 1.0) + (joint-control-channel-group-eval! + a0-0 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior light-eco-child) transform-post) + ) + +;; failed to figure out what this is: +(defstate light-eco-child-hit-ground (light-eco-child) + :event + light-eco-child-default-event-handler + :enter + (behavior () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (none) + ) + :trans + (behavior () + (let + ((f30-0 + (+ + (-> self root-override transv y) + (* -544768.0 (-> *display* seconds-per-frame)) + ) + ) + ) + (when + (and (< f30-0 0.0) (>= (-> self ground-y) (-> self root-override trans y))) + (if (>= 4096.0 (fabs f30-0)) + (go light-eco-child-idle) + ) + (set! (-> self root-override transv y) 0.0) + (vector-normalize! + (-> self root-override transv) + (* 0.25 (vector-xz-length (-> self root-override transv))) + ) + (set! f30-0 (* 0.35 (- f30-0))) + ) + (set! (-> self root-override transv y) f30-0) + ) + (vector-v+! + (-> self root-override trans) + (-> self root-override trans) + (-> self root-override transv) + ) + (let + ((f0-8 + (vector-vector-xz-distance + (-> self root-override trans) + (-> (the-as light-eco-mother (-> self parent 0)) root trans) + ) + ) + ) + (when (< 92610.56 f0-8) + (let ((gp-1 (new 'stack-no-clear 'vector))) + (vector-! + gp-1 + (-> self root-override trans) + (-> (the-as light-eco-mother (-> self parent 0)) root trans) + ) + (set! (-> gp-1 y) 0.0) + (vector-normalize! gp-1 92610.56) + (vector+! + gp-1 + gp-1 + (-> (the-as light-eco-mother (-> self parent 0)) root trans) + ) + (set! (-> gp-1 y) (-> self root-override trans y)) + (set! (-> self root-override trans quad) (-> gp-1 quad)) + ) + ) + ) + (common-trans self) + (none) + ) + :code + (behavior () + (while #t + (suspend) + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 param 0) 1.0) + (joint-control-channel-group-eval! + a0-0 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior light-eco-child) transform-post) + ) + +;; failed to figure out what this is: +(defstate light-eco-child-idle (light-eco-child) + :event + light-eco-child-default-event-handler + :enter + (behavior () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (none) + ) + :trans + (behavior () + (if (>= (- (-> *display* base-frame-counter) (-> self state-time)) 1200) + (go light-eco-child-die) + ) + (common-trans self) + (none) + ) + :code + (behavior () + (while #t + (suspend) + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 param 0) 1.0) + (joint-control-channel-group-eval! + a0-0 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior light-eco-child) transform-post) + ) + +;; failed to figure out what this is: +(defstate light-eco-child-die (light-eco-child) + :code + (behavior () + (let ((a1-0 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-0 from) self) + (set! (-> a1-0 num-params) 1) + (set! (-> a1-0 message) 'untrigger) + (set! (-> a1-0 param 0) (the-as uint (-> self angle-bit))) + (send-event-function (ppointer->process (-> self parent)) a1-0) + ) + (dummy-48 (-> self root-override)) + (logior! (-> self draw status) 2) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 30) + (suspend) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate light-eco-child-grabbed (light-eco-child) + :code + (behavior () + (suspend) + 0 + (none) + ) + ) + +;; definition for function light-eco-child-init-by-other +;; Used lq/sq +(defbehavior + light-eco-child-init-by-other light-eco-child + ((arg0 entity) (arg1 vector) (arg2 vector) (arg3 int)) + (set! (-> self entity) arg0) + (set! (-> self angle-bit) arg3) + (set! (-> self ground-y) (-> arg2 y)) + (set! (-> self last-update-time) 0) + (set-vector! + (-> self rotv) + (rand-vu-float-range 5898.24 9539.129) + (rand-vu-float-range 5552.3555 9193.244) + (rand-vu-float-range 6007.467 9648.355) + (rand-vu-float-range 11013.688 18295.467) + ) + (set-vector! + (-> self rot) + (rand-vu-float-range 0.0 65536.0) + (rand-vu-float-range 0.0 65536.0) + (rand-vu-float-range 0.0 65536.0) + (rand-vu-float-range 0.0 65536.0) + ) + (let + ((s4-2 (new 'process 'collide-shape self (collide-list-enum hit-by-player)))) + (let ((s3-0 (new 'process 'collide-shape-prim-sphere s4-2 (the-as uint 0)))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 512)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core offense) 0) + (set-vector! (-> s3-0 local-sphere) 0.0 0.0 0.0 4096.0) + ) + (dummy-46 s4-2) + (set! (-> s4-2 nav-radius) (* 0.75 (-> s4-2 root-prim local-sphere w))) + (dummy-50 s4-2) + (set! (-> self root-override) s4-2) + ) + (set! (-> self root-override trans quad) (-> arg1 quad)) + (set-vector! (-> self root-override scale) 2.0 2.0 2.0 1.0) + (quaternion-identity! (-> self root-override quat)) + (setup-from-to-height! + (-> self traj) + (-> self root-override trans) + arg2 + 4096.0 + -4.551111 + ) + (let ((s4-3 (-> self root-override transv))) + (vector-! s4-3 arg2 arg1) + (set! (-> s4-3 y) 0.0) + (vector-normalize! s4-3 163840.0) + (set! (-> s4-3 y) -122880.0) + ) + (logclear! (-> self mask) (process-mask actor-pause)) + (dummy-14 self *light-eco-small-sg* '()) + (ja-channel-set! 1) + (let ((a0-21 (-> self skel root-channel 0))) + (set! + (-> a0-21 param 0) + (the float (+ (-> a0-21 frame-group data 0 length) -1)) + ) + (set! (-> a0-21 param 1) 1.0) + (joint-control-channel-group! + a0-21 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (let ((gp-1 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-1 + (the-as art-joint-anim (-> self draw art-group data 5)) + num-func-identity + ) + (set! (-> gp-1 frame-num) 0.0) + ) + (set! + (-> self part) + (create-launch-control (-> *part-group-id-table* 692) self) + ) + (transform-post) + (go light-eco-child-appear) + (none) + ) + +;; definition for method 21 of type light-eco-mother +;; INFO: Return type mismatch int vs none. +(defmethod common-trans light-eco-mother ((obj light-eco-mother)) + (let ((v1-1 (-> *display* base-frame-counter))) + (when (!= v1-1 (-> obj last-update-time)) + (set! (-> obj last-update-time) v1-1) + (let ((s5-0 (new 'stack-no-clear 'vector))) + (set-vector! + s5-0 + (cos + (* 25.700392 (the float (mod (-> *display* base-frame-counter) 2550))) + ) + (cos + (* 24.59229 (the float (mod (-> *display* base-frame-counter) 2664))) + ) + (cos + (* 26.121408 (the float (mod (-> *display* base-frame-counter) 2508))) + ) + 1.0 + ) + (vector-normalize! s5-0 1.0) + (quaternion-vector-angle! + (-> obj root quat) + s5-0 + (* 48.860058 (the float (mod (-> *display* base-frame-counter) 1341))) + ) + ) + (cond + ((and *target* (logtest? (-> *target* state-flags) 256)) + (set! (-> obj last-spawned-time) (-> *display* base-frame-counter)) + (set! (-> obj delay-til-spawn) 2400) + ) + (else + (when + (>= + (- (-> *display* base-frame-counter) (-> obj last-spawned-time)) + (-> obj delay-til-spawn) + ) + (when (spawn-child-eco obj) + (set! (-> obj last-spawned-time) (-> *display* base-frame-counter)) + (set! (-> obj delay-til-spawn) (rand-vu-int-range 300 600)) + ) + ) + ) + ) + (update! (-> obj sound)) + 0 + ) + ) + (none) + ) + +;; definition for method 20 of type light-eco-mother +(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))) + (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)) + ) + (set-vector! s4-0 (* (sin f28-0) f30-0) 0.0 (* (cos f28-0) f30-0) 1.0) + (vector+! s4-0 s4-0 (-> obj root trans)) + (set! (-> s4-0 y) 1974272.0) + (when + (or + (not *target*) + (>= (vector-vector-xz-distance s4-0 (target-pos 0)) 49152.0) + ) + (logior! (-> obj angle-mask) (ash 1 gp-0)) + (let ((s3-1 (get-process *default-dead-pool* light-eco-child #x4000))) + (when s3-1 + (let ((t9-7 (method-of-type light-eco-child activate))) + (t9-7 + (the-as light-eco-child s3-1) + obj + 'light-eco-child + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + s3-1 + light-eco-child-init-by-other + (-> obj entity) + (-> obj root trans) + s4-0 + gp-0 + ) + (-> s3-1 ppointer) + ) + ) + (return #t) + ) + ) + ) + ) + ) + #f + ) + +;; definition for function light-eco-mother-default-event-handler +;; INFO: Return type mismatch none vs object. +(defbehavior + light-eco-mother-default-event-handler light-eco-mother + ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (cond + ((= v1-0 'untrigger) + (the-as int (when (= (-> arg0 type) light-eco-child) + (let* ((a1-3 (-> arg3 param 0)) + (v0-0 + (logxor + (-> self angle-mask) + (ash 1 a1-3) + ) + ) + ) + (set! (-> self angle-mask) v0-0) + v0-0 + ) + ) + ) + ) + ((= v1-0 'trigger) + (the-as int (when (not (-> self player-got-eco?)) + (set! (-> self player-got-eco?) #t) + (let + ((a1-5 + (new 'stack-no-clear 'event-message-block) + ) + ) + (set! (-> a1-5 from) self) + (set! (-> a1-5 num-params) 0) + (set! (-> a1-5 message) 'white-eco-picked-up) + (the-as + int + (send-event-function + (ppointer->process (-> self parent)) + a1-5 + ) + ) + ) + ) + ) + ) + ((= v1-0 'beam-off) + (the-as int (go light-eco-mother-discipate)) + ) + ) + ) + ) + ) + +;; failed to figure out what this is: +(defstate light-eco-mother-appear (light-eco-mother) + :event + light-eco-mother-default-event-handler + :trans + (behavior () + (common-trans self) + (spawn (-> self part2) (-> self root trans)) + (none) + ) + :code + (behavior () + (while (!= (-> self root scale x) 12.0) + (let + ((f0-3 + (seek-with-smooth + (-> self root scale x) + 12.0 + (* 6.0 (-> *display* seconds-per-frame)) + 0.25 + 0.001 + ) + ) + ) + (set-vector! (-> self root scale) f0-3 f0-3 f0-3 1.0) + ) + (suspend) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 param 0) 1.0) + (joint-control-channel-group-eval! + a0-1 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + ) + (go light-eco-mother-active) + (none) + ) + :post + (the-as (function none :behavior light-eco-mother) ja-post) + ) + +;; failed to figure out what this is: +(defstate light-eco-mother-active (light-eco-mother) + :event + light-eco-mother-default-event-handler + :trans + (behavior () + (common-trans self) + (spawn (-> self part) (-> self root trans)) + 0 + (none) + ) + :code + (behavior () + (while #t + (suspend) + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 param 0) 1.0) + (joint-control-channel-group-eval! + a0-0 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior light-eco-mother) ja-post) + ) + +;; failed to figure out what this is: +(defstate light-eco-mother-discipate (light-eco-mother) + :event + light-eco-mother-default-event-handler + :trans + (behavior () + (common-trans self) + (none) + ) + :code + (behavior () + (while (!= (-> self root scale x) 0.0) + (let + ((f0-3 + (seek-with-smooth + (-> self root scale x) + 0.0 + (* 12.0 (-> *display* seconds-per-frame)) + 0.5 + 0.001 + ) + ) + ) + (set-vector! (-> self root scale) f0-3 f0-3 f0-3 1.0) + ) + (suspend) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 param 0) 1.0) + (joint-control-channel-group-eval! + a0-1 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + ) + (logior! (-> self draw status) 2) + (until (not (-> self child)) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior light-eco-mother) ja-post) + ) + +;; definition for method 10 of type light-eco-mother +(defmethod deactivate light-eco-mother ((obj light-eco-mother)) + (if (nonzero? (-> obj part2)) + (kill-and-free-particles (-> obj part2)) + ) + ((method-of-type projectile deactivate) (the-as projectile obj)) + (none) + ) + +;; definition for method 7 of type light-eco-mother +;; INFO: Return type mismatch projectile vs light-eco-mother. +(defmethod relocate light-eco-mother ((obj light-eco-mother) (arg0 int)) + (if (nonzero? (-> obj part2)) + (&+! (-> obj part2) arg0) + ) + (the-as + light-eco-mother + ((method-of-type projectile relocate) (the-as projectile obj) arg0) + ) + ) + +;; definition for function light-eco-mother-init-by-other +;; Used lq/sq +(defbehavior + light-eco-mother-init-by-other light-eco-mother + ((arg0 entity) (arg1 vector)) + (set! (-> self entity) arg0) + (set! (-> self last-update-time) 0) + (set! (-> self last-spawned-time) (-> *display* base-frame-counter)) + (set! (-> self delay-til-spawn) 2400) + (set! (-> self angle-mask) 0) + (set! (-> self player-got-eco?) #f) + (set! (-> self root) (new 'process 'trsqv)) + (set! (-> self root trans quad) (-> arg1 quad)) + (vector-reset! (-> self root scale)) + (quaternion-identity! (-> self root quat)) + (logclear! (-> self mask) (process-mask actor-pause)) + (dummy-14 self *light-eco-big-sg* '()) + (ja-channel-set! 1) + (let ((a0-7 (-> self skel root-channel 0))) + (set! + (-> a0-7 param 0) + (the float (+ (-> a0-7 frame-group data 0 length) -1)) + ) + (set! (-> a0-7 param 1) 1.0) + (joint-control-channel-group! a0-7 (the-as art-joint-anim #f) num-func-seek!) + ) + (let ((gp-1 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-1 + (the-as art-joint-anim (-> self draw art-group data 2)) + num-func-identity + ) + (set! (-> gp-1 frame-num) 0.0) + ) + (set! + (-> self part) + (create-launch-control (-> *part-group-id-table* 691) self) + ) + (set! + (-> self part2) + (create-launch-control (-> *part-group-id-table* 690) self) + ) + (set! + (-> self sound) + (new + 'process + 'ambient-sound + (new 'static 'sound-spec + :mask #xc0 + :num 1.0 + :group #x1 + :sound-name + (new 'static 'sound-name :lo #x63652d6574696877) + :volume #x400 + :fo-min #x12c + :fo-max #x190 + ) + (-> self root trans) + ) + ) + (ja-post) + (let ((f0-4 0.0)) + (countdown (v1-33 4) + (let ((a2-4 (the int (* 0.00048828125 f0-4)))) + (logior! (-> self angle-mask) (ash 1 a2-4)) + ) + (set! f0-4 (+ 16384.0 f0-4)) + ) + ) + (go light-eco-mother-appear) + (none) + ) diff --git a/test/decompiler/reference/levels/finalboss/robotboss-h_REF.gc b/test/decompiler/reference/levels/finalboss/robotboss-h_REF.gc index 36c48eb2ec..549e45a6ba 100644 --- a/test/decompiler/reference/levels/finalboss/robotboss-h_REF.gc +++ b/test/decompiler/reference/levels/finalboss/robotboss-h_REF.gc @@ -41,25 +41,26 @@ ;; definition of type robotboss (deftype robotboss (process-drawable) - ((alts entity-actor 13 :offset-assert 176) + ((root-override collide-shape-moving :offset 112) + (alts entity-actor 13 :offset-assert 176) (desired-loc vector :inline :offset-assert 240) (old-loc vector :inline :offset-assert 256) (loc-t float :offset-assert 272) - (loc-t-start seconds :offset-assert 280) - (loc-t-duration seconds :offset-assert 288) + (loc-t-start int64 :offset-assert 280) + (loc-t-duration int64 :offset-assert 288) (hits-to-go int32 :offset-assert 296) (took-hit symbol :offset-assert 300) (children-spawned int32 :offset-assert 304) - (vulnerable seconds :offset-assert 312) - (till-next-shot seconds :offset-assert 320) - (shot-attractor uint64 :offset-assert 328) + (vulnerable int64 :offset-assert 312) + (till-next-shot int64 :offset-assert 320) + (shot-attractor handle :offset-assert 328) (desired-pool-y float :offset-assert 336) (particle sparticle-launch-control 7 :offset-assert 340) - (blue-smoke basic :offset-assert 368) - (red-smoke basic :offset-assert 372) - (yellow-smoke basic :offset-assert 376) + (blue-smoke symbol :offset-assert 368) + (red-smoke symbol :offset-assert 372) + (yellow-smoke symbol :offset-assert 376) (white-eco handle :offset-assert 384) - (des-cam-entity basic :offset-assert 392) + (des-cam-entity string :offset-assert 392) (use-interesting symbol :offset-assert 396) (ignore-camera symbol :offset-assert 400) (ambient ambient-control :offset 408) @@ -76,7 +77,7 @@ :size-assert #x1d0 :flag-assert #x15001601d0 (:methods - (dummy-20 () none 20) + (ease-loc-t (_type_) float 20) ) ) diff --git a/test/decompiler/reference/levels/finalboss/robotboss-misc_REF.gc b/test/decompiler/reference/levels/finalboss/robotboss-misc_REF.gc new file mode 100644 index 0000000000..6a75bbceda --- /dev/null +++ b/test/decompiler/reference/levels/finalboss/robotboss-misc_REF.gc @@ -0,0 +1,939 @@ +;;-*-Lisp-*- +(in-package goal) + +;; failed to figure out what this is: +(let + ((v1-0 + (new 'static 'skeleton-group + :art-group-name "medres-snowback" + :bounds + (new 'static 'vector :x -1474560.0 :y 409600.0 :z 409600.0 :w 1556480.0) + :longest-edge (meters 0.01) + :version #x6 + ) + ) + ) + (set! (-> v1-0 jgeo) 0) + (set! (-> v1-0 janim) 2) + (set! (-> v1-0 mgeo 0) (the-as uint 1)) + (set! (-> v1-0 lod-dist 0) 4095996000.0) + (set! *med-res-snow1-sg* v1-0) + ) + +;; 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 + (('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) + ) + v0-0 + ) + ) + (('teleport) + #f + ) + (else + (cam-standard-event-handler arg0 arg1 arg2 arg3) + ) + ) + ) + :enter + (behavior () + (cond + ((-> self enter-has-run) + ) + (else + (set! *camera-base-mode* cam-robotboss) + (set! (-> self circular-follow quad) (-> *camera* tpos-curr-adj quad)) + (set! (-> self pivot-rad) 73728.0) + (set! (-> self blend-from-type) (the-as uint 2)) + (set! (-> self blend-to-type) (the-as uint 2)) + ) + ) + (none) + ) + :trans + (behavior () + (when (zero? (logand (-> *camera* master-options) 2)) + (set! *camera-base-mode* cam-string) + (cam-slave-go cam-free-floating) + ) + (none) + ) + :code + (behavior () + (while #t + (when #t + (let ((a2-0 (new-stack-vector0))) + (vector-! a2-0 (-> *camera* tpos-curr-adj) (-> self pivot-pt)) + (vector-! + (-> self circular-follow) + (-> self circular-follow) + (-> self pivot-pt) + ) + (v-slrp3! + (-> self circular-follow) + (-> self circular-follow) + a2-0 + (-> *camera* local-down) + (* 182.04445 (-> *display* time-adjust-ratio)) + ) + ) + (vector+! + (-> self circular-follow) + (-> self circular-follow) + (-> self pivot-pt) + ) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (vector-! gp-0 (-> self circular-follow) (-> self pivot-pt)) + (vector-flatten! gp-0 gp-0 (-> *camera* local-down)) + (let ((f0-3 (- (vector-length gp-0) (-> self pivot-rad)))) + (if (>= 0.0 f0-3) + (vector-reset! gp-0) + (vector-normalize! gp-0 f0-3) + ) + ) + (vector+! (-> self trans) gp-0 (-> self pivot-pt)) + ) + ) + (suspend) + ) + (none) + ) + ) + +;; definition of type ecoclaw-part-info +(deftype ecoclaw-part-info (structure) + ((tracker handle :offset-assert 0) + (kind basic :offset-assert 8) + (trans vector :inline :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) + +;; definition for method 3 of type ecoclaw-part-info +(defmethod inspect ecoclaw-part-info ((obj ecoclaw-part-info)) + (format #t "[~8x] ~A~%" obj 'ecoclaw-part-info) + (format #t "~Ttracker: ~D~%" (-> obj tracker)) + (format #t "~Tkind: ~A~%" (-> obj kind)) + (format #t "~Ttrans: #~%" (-> obj trans)) + obj + ) + +;; definition of type ecoclaw +(deftype ecoclaw (process-drawable) + ((particles ecoclaw-part-info 3 :inline :offset-assert 176) + ) + :heap-base #xa0 + :method-count-assert 20 + :size-assert #x110 + :flag-assert #x1400a00110 + ) + +;; definition for method 3 of type ecoclaw +(defmethod inspect ecoclaw ((obj ecoclaw)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tparticles[3] @ #x~X~%" (-> obj particles)) + obj + ) + +;; failed to figure out what this is: +(let + ((v1-4 + (new 'static 'skeleton-group + :art-group-name "ecoclaw" + :bounds + (new 'static 'vector :y 8192.0 :w 36864.0) + :version #x6 + ) + ) + ) + (set! (-> v1-4 jgeo) 0) + (set! (-> v1-4 janim) 2) + (set! (-> v1-4 mgeo 0) (the-as uint 1)) + (set! (-> v1-4 lod-dist 0) 4095996000.0) + (set! *ecoclaw-sg* v1-4) + ) + +;; definition for function ecoclaw-beam-particle-callback +;; INFO: Return type mismatch int vs none. +(defun ecoclaw-beam-particle-callback ((arg0 part-tracker)) + (let* ((a0-1 (the-as (pointer projectile) (-> arg0 userdata))) + (v1-1 (-> a0-1 0 parent-base)) + (a0-3 (-> a0-1 0 base-vector)) + (gp-1 (vector-! (new 'stack-no-clear 'vector) a0-3 v1-1)) + (f30-0 (vector-y-angle gp-1)) + (f0-1 (- 16384.0 (vector-x-angle gp-1))) + ) + (set! (-> *part-id-table* 2727 init-specs 14 initial-valuef) f30-0) + (set! (-> *part-id-table* 2727 init-specs 13 initial-valuef) f0-1) + (set! (-> *part-id-table* 2729 init-specs 14 initial-valuef) f30-0) + (set! (-> *part-id-table* 2729 init-specs 13 initial-valuef) f0-1) + (set! (-> *part-id-table* 2726 init-specs 14 initial-valuef) f30-0) + (set! (-> *part-id-table* 2726 init-specs 13 initial-valuef) f0-1) + (set! (-> *part-id-table* 2720 init-specs 14 initial-valuef) f30-0) + (set! (-> *part-id-table* 2720 init-specs 13 initial-valuef) f0-1) + (set! (-> *part-id-table* 2722 init-specs 14 initial-valuef) f30-0) + (set! (-> *part-id-table* 2722 init-specs 13 initial-valuef) f0-1) + (set! (-> *part-id-table* 2719 init-specs 14 initial-valuef) f30-0) + (set! (-> *part-id-table* 2719 init-specs 13 initial-valuef) f0-1) + (set! (-> *part-id-table* 2734 init-specs 14 initial-valuef) f30-0) + (set! (-> *part-id-table* 2734 init-specs 13 initial-valuef) f0-1) + (set! (-> *part-id-table* 2736 init-specs 14 initial-valuef) f30-0) + (set! (-> *part-id-table* 2736 init-specs 13 initial-valuef) f0-1) + (set! (-> *part-id-table* 2733 init-specs 14 initial-valuef) f30-0) + (set! (-> *part-id-table* 2733 init-specs 13 initial-valuef) f0-1) + (set! (-> *part-id-table* 2741 init-specs 14 initial-valuef) f30-0) + (set! (-> *part-id-table* 2741 init-specs 13 initial-valuef) f0-1) + (set! (-> *part-id-table* 2743 init-specs 14 initial-valuef) f30-0) + (set! (-> *part-id-table* 2743 init-specs 13 initial-valuef) f0-1) + (set! (-> *part-id-table* 2740 init-specs 14 initial-valuef) f30-0) + (set! (-> *part-id-table* 2740 init-specs 13 initial-valuef) f0-1) + ) + 0 + (none) + ) + +;; definition for function ecoclaw-handler +;; INFO: Return type mismatch none vs object. +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? +;; Used lq/sq +(defbehavior + ecoclaw-handler ecoclaw + ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (cond + ((= v1-0 'open) + (let ((gp-1 (-> arg3 param 0))) + (set! + (-> self particles 0 kind) + (the-as + basic + (if + (and + (nonzero? gp-1) + (type-type? (rtype-of gp-1) sparticle-launch-group) + ) + gp-1 + ) + ) + ) + ) + (set! + (-> self particles 0 trans quad) + (-> self root trans quad) + ) + (let ((f0-1 (+ 12288.0 (-> self particles 0 trans y)))) + (set! (-> self particles 0 trans y) f0-1) + f0-1 + ) + ) + ((= v1-0 'beam-on) + (let ((s5-0 (-> arg3 param 0))) + (set! + (-> self particles 1 kind) + (the-as + basic + (if + (and + (nonzero? s5-0) + (type-type? (rtype-of s5-0) sparticle-launch-group) + ) + s5-0 + ) + ) + ) + ) + (set! + (-> self particles 1 trans quad) + (-> self root trans quad) + ) + (set! + (-> self particles 1 trans y) + (+ 24576.0 (-> self particles 1 trans y)) + ) + (let ((s5-1 (-> arg3 param 1))) + (set! + (-> self particles 2 kind) + (the-as + basic + (if + (and + (nonzero? s5-1) + (type-type? (rtype-of s5-1) sparticle-launch-group) + ) + s5-1 + ) + ) + ) + ) + (set! + (-> self particles 2 trans quad) + (-> (the-as vector (-> arg3 param 2)) quad) + ) + (let ((f0-5 (+ 81920.0 (-> self particles 2 trans y)))) + (set! (-> self particles 2 trans y) f0-5) + f0-5 + ) + ) + ((= v1-0 'beam-off) + (set! (-> self particles 1 kind) #f) + (set! (-> self particles 2 kind) #f) + (let + ((a0-10 (handle->process (-> self particles 1 tracker)))) + (if a0-10 + (deactivate a0-10) + ) + ) + (let + ((a0-14 (handle->process (-> self particles 2 tracker)))) + (if a0-14 + (deactivate a0-14) + ) + ) + ) + ) + ) + ) + ) + +;; failed to figure out what this is: +(defstate ecoclaw-activate (ecoclaw) + :event + ecoclaw-handler + :trans + (behavior () + (if (-> self particles 1 kind) + (draw-eco-beam + (the-as vector (&-> self stack 112)) + (the-as vector (&-> self stack 144)) + ) + ) + (dotimes (gp-0 2) + (cond + ((handle->process (-> self particles gp-0 tracker)) + (set! + (-> + (the-as part-tracker (-> self particles gp-0 tracker process 0)) + start-time + ) + (the-as uint (-> *display* base-frame-counter)) + ) + ) + ((-> self particles gp-0 kind) + (let ((s5-0 (get-process *default-dead-pool* part-tracker #x4000))) + (set! (-> self particles gp-0 tracker) (ppointer->handle (when s5-0 + (let + ((t9-2 + (method-of-type + part-tracker + activate + ) + ) + ) + (t9-2 + (the-as + part-tracker + s5-0 + ) + self + 'part-tracker + (the-as + pointer + #x70004000 + ) + ) + ) + (run-now-in-process + s5-0 + part-tracker-init + (-> + self + particles + gp-0 + kind + ) + -1 + ecoclaw-beam-particle-callback + (-> + self + ppointer + ) + #f + (&+ + (&-> + self + stack + 80 + ) + (* gp-0 32) + ) + ) + (-> + s5-0 + ppointer + ) + ) + ) + ) + ) + ) + ) + ) + (none) + ) + :code + (behavior () + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-0 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-0 param 1) 1.0) + (set! (-> a0-0 frame-num) 0.0) + (joint-control-channel-group! a0-0 (if (> (-> self skel active-channels) 0) + (-> + self + skel + root-channel + 0 + frame-group + ) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-1 (-> self skel root-channel 0))) + (set! + (-> a0-1 param 0) + (the float (+ (-> a0-1 frame-group data 0 length) -1)) + ) + (set! (-> a0-1 param 1) 1.0) + (joint-control-channel-group-eval! + a0-1 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (while #t + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior ecoclaw) ja-post) + ) + +;; failed to figure out what this is: +(defstate ecoclaw-idle (ecoclaw) + :event + ecoclaw-handler + :code + (behavior () + (while #t + (if (-> self particles 0 kind) + (go ecoclaw-activate) + ) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior ecoclaw) ja-post) + ) + +;; definition for method 11 of type ecoclaw +(defmethod copy-defaults! ecoclaw ((obj ecoclaw) (arg0 res-lump)) + (set! (-> obj root) (new 'process 'trsqv)) + (process-drawable-from-entity! obj arg0) + (dummy-14 obj *ecoclaw-sg* '()) + (dotimes (v1-3 3) + (set! (-> obj particles v1-3 kind) #f) + (set! (-> obj particles v1-3 tracker) (the-as handle #f)) + ) + (set! *ecoclaw* (the-as (pointer ecoclaw) (process->ppointer obj))) + (go ecoclaw-idle) + (none) + ) + +;; definition of type silodoor +(deftype silodoor (process-drawable) + ((part-opened float :offset-assert 176) + ) + :heap-base #x50 + :method-count-assert 22 + :size-assert #xb4 + :flag-assert #x16005000b4 + (:methods + (idle () _type_ :state 20) + (hidden () _type_ :state 21) + ) + ) + +;; definition for method 3 of type silodoor +(defmethod inspect silodoor ((obj silodoor)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tpart-opened: ~f~%" (-> obj part-opened)) + obj + ) + +;; failed to figure out what this is: +(let + ((v1-10 + (new 'static 'skeleton-group + :art-group-name "silodoor" + :bounds (new 'static 'vector :w 102400.0) + :version #x6 + ) + ) + ) + (set! (-> v1-10 jgeo) 0) + (set! (-> v1-10 janim) 2) + (set! (-> v1-10 mgeo 0) (the-as uint 1)) + (set! (-> v1-10 lod-dist 0) 4095996000.0) + (set! *silodoor-sg* v1-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)) + (let ((v1-0 arg2)) + (the-as object (cond + ((= v1-0 'open) + (let ((f0-0 (the-as float (-> arg3 param 0)))) + (set! (-> self part-opened) f0-0) + f0-0 + ) + ) + ((= v1-0 'hide) + (go-virtual hidden) + ) + ) + ) + ) + ) + :trans + (the-as (function none :behavior silodoor) rider-trans) + :code + (behavior () + (while #t + (when (not (movie?)) + (let ((gp-0 (-> self skel root-channel 0))) + (set! + (-> gp-0 param 0) + (* (-> self part-opened) (the float (ja-num-frames 0))) + ) + (set! (-> gp-0 param 1) 0.01) + (joint-control-channel-group-eval! + gp-0 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (cond + ((< + 0.01 + (fabs + (- + (* (-> self part-opened) (the float (ja-num-frames 0))) + (ja-aframe-num 0) + ) + ) + ) + (if (nonzero? (-> self sound)) + (update! (-> self sound)) + ) + ) + ((nonzero? (-> self sound)) + (stop! (-> self sound)) + ) + ) + ) + (suspend) + ) + (none) + ) + :post + (behavior () + (if + (and + (< (vector-vector-xz-distance (target-pos 0) (-> self root trans)) 57344.0) + (not (ja-min? 0)) + ) + (rider-post) + (transform-post) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate hidden (silodoor) + :virtual #t + :code + (behavior () + (if (nonzero? (-> self sound)) + (stop! (-> self sound)) + ) + (logior! (-> self draw status) 2) + (ja-post) + (while + (not + (task-closed? (game-task finalboss-movies) (task-status need-reminder-a)) + ) + (suspend) + ) + (set! (-> self draw status) (logand -3 (-> self draw status))) + (let ((v1-12 (-> self skel root-channel 0))) + (set! (-> v1-12 num-func) num-func-identity) + (set! (-> v1-12 frame-num) 0.0) + ) + (set! (-> self part-opened) 0.0) + (go-virtual idle) + (none) + ) + ) + +;; definition for method 11 of type silodoor +(defmethod copy-defaults! silodoor ((obj silodoor) (arg0 res-lump)) + (let + ((s4-0 + (new + 'process + 'collide-shape-moving + obj + (collide-list-enum usually-hit-by-player) + ) + ) + ) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) default-collision-reaction) + (set! (-> s4-0 no-reaction) nothing) + (dummy-29 s4-0 1) + (let ((s3-0 (new 'process 'collide-shape-prim-group s4-0 (the-as uint 4) 0))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 2048)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 3)) + (set! (-> s3-0 transform-index) 0) + (set-vector! (-> s3-0 local-sphere) 0.0 0.0 0.0 102400.0) + (dummy-46 s4-0) + (let + ((s2-0 + (new + 'process + 'collide-shape-prim-mesh + s4-0 + (the-as uint 0) + (the-as uint 0) + ) + ) + ) + (set! (-> s2-0 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-0 collide-with) (the-as uint 16)) + (set! (-> s2-0 prim-core action) (the-as uint 19)) + (set! (-> s2-0 prim-core offense) 4) + (set! (-> s2-0 transform-index) 5) + (set-vector! (-> s2-0 local-sphere) 0.0 0.0 0.0 102400.0) + ) + (dummy-28 s3-0) + (let + ((s2-1 + (new + 'process + 'collide-shape-prim-mesh + s4-0 + (the-as uint 1) + (the-as uint 0) + ) + ) + ) + (set! (-> s2-1 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-1 collide-with) (the-as uint 16)) + (set! (-> s2-1 prim-core action) (the-as uint 19)) + (set! (-> s2-1 prim-core offense) 4) + (set! (-> s2-1 transform-index) 4) + (set-vector! (-> s2-1 local-sphere) 0.0 0.0 0.0 102400.0) + ) + (dummy-28 s3-0) + (let + ((s2-2 + (new + 'process + 'collide-shape-prim-mesh + s4-0 + (the-as uint 2) + (the-as uint 0) + ) + ) + ) + (set! (-> s2-2 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-2 collide-with) (the-as uint 16)) + (set! (-> s2-2 prim-core action) (the-as uint 19)) + (set! (-> s2-2 prim-core offense) 4) + (set! (-> s2-2 transform-index) 7) + (set-vector! (-> s2-2 local-sphere) 0.0 0.0 0.0 102400.0) + ) + (dummy-28 s3-0) + (let + ((s2-3 + (new + 'process + 'collide-shape-prim-mesh + s4-0 + (the-as uint 3) + (the-as uint 0) + ) + ) + ) + (set! (-> s2-3 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-3 collide-with) (the-as uint 16)) + (set! (-> s2-3 prim-core action) (the-as uint 19)) + (set! (-> s2-3 prim-core offense) 4) + (set! (-> s2-3 transform-index) 6) + (set-vector! (-> s2-3 local-sphere) 0.0 0.0 0.0 102400.0) + ) + (dummy-28 s3-0) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (dummy-50 s4-0) + (set! (-> obj root) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (dummy-14 obj *silodoor-sg* '()) + (logior! (-> obj skel status) 1) + (set! (-> obj root pause-adjust-distance) 1228800.0) + (set! + (-> obj sound) + (new + 'process + 'ambient-sound + (new 'static 'sound-spec + :mask #x80 + :num 1.0 + :group #x1 + :sound-name + (new 'static 'sound-name :lo #x766f6d2d6f6c6973) + :volume #x400 + :fo-max 80 + ) + (-> obj root trans) + ) + ) + (logclear! (-> obj mask) (process-mask actor-pause crate enemy attackable)) + (set! (-> obj part-opened) 0.0) + (go (method-of-object obj idle)) + (none) + ) + +;; definition of type finalbosscam +(deftype finalbosscam (process-taskable) + ((robotboss handle :offset-assert 384) + ) + :heap-base #x120 + :method-count-assert 53 + :size-assert #x188 + :flag-assert #x3501200188 + ) + +;; definition for method 3 of type finalbosscam +(defmethod inspect finalbosscam ((obj finalbosscam)) + (let ((t9-0 (method-of-type process-taskable inspect))) + (t9-0 obj) + ) + (format #t "~T~Trobotboss: ~D~%" (-> obj robotboss)) + obj + ) + +;; failed to figure out what this is: +(let + ((v1-17 + (new 'static 'skeleton-group + :art-group-name "finalbosscam" + :bounds (new 'static 'vector :w 16384.0) + :version #x6 + ) + ) + ) + (set! (-> v1-17 jgeo) 0) + (set! (-> v1-17 janim) 2) + (set! (-> v1-17 mgeo 0) (the-as uint 1)) + (set! (-> v1-17 lod-dist 0) 4095996000.0) + (set! *finalbosscam-sg* v1-17) + ) + +;; definition for function robotboss-manipy-trans-hook +;; INFO: Return type mismatch int vs none. +(defbehavior robotboss-manipy-trans-hook robotboss () + (let ((gp-0 (new 'stack-no-clear 'vector))) + (vector<-cspace! gp-0 (-> self node-list data 7)) + (spawn (-> self part) gp-0) + ) + 0 + (none) + ) + +;; definition for method 32 of type finalbosscam +;; INFO: Return type mismatch spool-anim vs basic. +(defmethod play-anim! finalbosscam ((obj finalbosscam) (arg0 symbol)) + (with-pp + (when arg0 + (let ((s5-0 (get-process *default-dead-pool* manipy #x4000))) + (set! (-> obj robotboss) (ppointer->handle (when s5-0 + (let + ((t9-1 + (method-of-type + manipy + activate + ) + ) + ) + (t9-1 + (the-as manipy s5-0) + obj + 'manipy + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + s5-0 + manipy-init + (-> obj root-override trans) + (-> obj entity) + *robotboss-sg* + #f + ) + (-> s5-0 ppointer) + ) + ) + ) + ) + (let ((a1-4 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-4 from) pp) + (set! (-> a1-4 num-params) 1) + (set! (-> a1-4 message) 'anim-mode) + (set! (-> a1-4 param 0) (the-as uint 'clone-anim)) + (send-event-function (handle->process (-> obj robotboss)) a1-4) + ) + (let ((a1-5 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-5 from) pp) + (set! (-> a1-5 num-params) 1) + (set! (-> a1-5 message) 'center-joint) + (set! (-> a1-5 param 0) (the-as uint 3)) + (send-event-function (handle->process (-> obj robotboss)) a1-5) + ) + (let ((a1-6 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-6 from) pp) + (set! (-> a1-6 num-params) 1) + (set! (-> a1-6 message) 'origin-joint-index) + (set! (-> a1-6 param 0) (the-as uint 3)) + (send-event-function (handle->process (-> obj robotboss)) a1-6) + ) + (let ((a1-7 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-7 from) pp) + (set! (-> a1-7 num-params) 1) + (set! (-> a1-7 message) 'trans-hook) + (set! (-> a1-7 param 0) (the-as uint robotboss-manipy-trans-hook)) + (send-event-function (handle->process (-> obj robotboss)) a1-7) + ) + (let ((a1-8 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-8 from) pp) + (set! (-> a1-8 num-params) 1) + (set! (-> a1-8 message) 'eval) + (set! + (-> a1-8 param 0) + (the-as + uint + (lambda :behavior finalbosscam + () + (let + ((v0-0 (create-launch-control (-> *part-group-id-table* 645) self))) + (set! (-> self part) v0-0) + v0-0 + ) + ) + ) + ) + (send-event-function (handle->process (-> obj robotboss)) a1-8) + ) + (let ((v1-43 (handle->process (-> obj robotboss)))) + (if v1-43 + (set! (-> (the-as robotboss v1-43) draw bounds w) 327680.0) + ) + ) + ) + (the-as + basic + (new 'static 'spool-anim + :name "finalbosscam-white-eco" + :index 3 + :parts 3 + :command-list '() + ) + ) + ) + ) + +;; definition for method 31 of type finalbosscam +(defmethod get-art-elem finalbosscam ((obj finalbosscam)) + (-> obj draw art-group data 2) + ) + +;; definition for method 39 of type finalbosscam +(defmethod should-display? finalbosscam ((obj finalbosscam)) + #f + ) + +;; failed to figure out what this is: +(defstate play-anim (finalbosscam) + :virtual #t + :exit + (behavior () + (let ((a0-1 (handle->process (-> self robotboss)))) + (if a0-1 + (deactivate a0-1) + ) + ) + ((-> (method-of-type process-taskable play-anim) exit)) + (none) + ) + ) + +;; definition for function finalbosscam-init-by-other +(defbehavior finalbosscam-init-by-other finalbosscam ((arg0 entity)) + (set! (-> self entity) arg0) + (dummy-40 self arg0 *finalbosscam-sg* 4 4 (new 'static 'vector :w 4096.0) 4) + (set! (-> self tasks) (get-task-control (game-task finalboss-movies))) + (set! (-> self robotboss) (the-as handle #f)) + (go-virtual hidden) + (none) + ) diff --git a/test/decompiler/reference/levels/finalboss/robotboss-weapon_REF.gc b/test/decompiler/reference/levels/finalboss/robotboss-weapon_REF.gc new file mode 100644 index 0000000000..e092b6596b --- /dev/null +++ b/test/decompiler/reference/levels/finalboss/robotboss-weapon_REF.gc @@ -0,0 +1,1653 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type torus +(deftype torus (structure) + ((origin vector :inline :offset-assert 0) + (axis vector :inline :offset-assert 16) + (radius-primary float :offset-assert 32) + (radius-secondary float :offset-assert 36) + ) + :method-count-assert 13 + :size-assert #x28 + :flag-assert #xd00000028 + (:methods + (dummy-9 (_type_ vector) none 9) + (dummy-10 (_type_ vector vector) symbol 10) + (dummy-11 (_type_ vector) symbol 11) + (dummy-12 (_type_ vector) none 12) + ) + ) + +;; definition for method 3 of type torus +(defmethod inspect torus ((obj torus)) + (format #t "[~8x] ~A~%" obj 'torus) + (format #t "~Torigin: #~%" (-> obj origin)) + (format #t "~Taxis: #~%" (-> obj axis)) + (format #t "~Tradius-primary: ~f~%" (-> obj radius-primary)) + (format #t "~Tradius-secondary: ~f~%" (-> obj radius-secondary)) + obj + ) + +;; definition for method 10 of type torus +(defmethod dummy-10 torus ((obj torus) (arg0 vector) (arg1 vector)) + (let ((gp-0 (new 'stack-no-clear 'vector)) + (s5-0 (new 'stack-no-clear 'vector)) + (f30-0 (+ (-> obj radius-secondary) (-> arg0 w))) + ) + (vector-! gp-0 arg0 (-> obj origin)) + (vector-flatten! s5-0 gp-0 (-> obj axis)) + (vector-normalize! s5-0 (-> obj radius-primary)) + (vector-! arg1 gp-0 s5-0) + (< (vector-length-squared arg1) (* f30-0 f30-0)) + ) + ) + +;; definition for method 11 of type torus +(defmethod dummy-11 torus ((obj torus) (arg0 vector)) + (let + ((s4-0 (the-as collide-shape-prim-group (-> *target* control root-prim)))) + (when + (and + (logtest? (-> s4-0 prim-core collide-as) 16) + (dummy-10 obj (the-as vector (-> s4-0 prim-core)) arg0) + ) + (countdown (s3-0 (-> s4-0 num-prims)) + (let ((v1-9 (-> s4-0 prims s3-0))) + (if + (and + (logtest? (-> v1-9 prim-core action) 1) + (logtest? (-> v1-9 prim-core collide-as) 16) + (dummy-10 obj (the-as vector (-> v1-9 prim-core)) arg0) + ) + (return #t) + ) + ) + ) + ) + ) + #f + ) + +;; definition of type torus-verts +(deftype torus-verts (structure) + ((vert vector 8 :inline :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #x80 + :flag-assert #x900000080 + ) + +;; definition for method 3 of type torus-verts +(defmethod inspect torus-verts ((obj torus-verts)) + (format #t "[~8x] ~A~%" obj 'torus-verts) + (format #t "~Tvert[8] @ #x~X~%" (-> obj vert)) + obj + ) + +;; definition for method 9 of type torus +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defmethod dummy-9 torus ((obj torus) (arg0 vector)) + (local-vars (sv-256 int) (sv-272 int) (sv-288 int)) + (let ((s0-0 (new 'stack-no-clear 'vector)) + (s4-0 (new 'stack-no-clear 'vector)) + (s3-0 (new 'stack-no-clear 'vector)) + (s2-0 (new 'stack-no-clear 'matrix)) + (s1-0 (new 'stack-no-clear 'inline-array 'vector 8)) + ) + (set-vector! s0-0 0.0 0.0 1.0 1.0) + (vector-flatten! s0-0 s0-0 (-> obj axis)) + (if (= (vector-normalize-ret-len! s0-0 1.0) 0.0) + (set-vector! s0-0 0.0 1.0 0.0 1.0) + ) + (vector-cross! s4-0 s0-0 (-> obj axis)) + (matrix-axis-angle! s2-0 s4-0 8192.0) + (vector-float*! (-> s1-0 0) s0-0 (-> obj radius-secondary)) + (set! sv-256 0) + (while (< sv-256 7) + (vector-matrix*! (-> s1-0 (+ sv-256 1)) (-> s1-0 sv-256) s2-0) + (set! sv-256 (+ sv-256 1)) + ) + (vector-float*! s0-0 s0-0 (-> obj radius-primary)) + (dotimes (v1-21 8) + (vector+! (-> s1-0 v1-21) (-> s1-0 v1-21) s0-0) + ) + (matrix-axis-angle! s2-0 (-> obj axis) 4096.0) + (dotimes (s0-1 16) + (set! sv-272 0) + (while (< sv-272 7) + (vector+! s4-0 (-> s1-0 sv-272) (-> obj origin)) + (vector+! s3-0 (-> s1-0 (+ sv-272 1)) (-> obj origin)) + (camera-line s4-0 s3-0 arg0) + (set! sv-272 (+ sv-272 1)) + ) + (vector+! s4-0 (-> s1-0 0) (-> obj origin)) + (camera-line s4-0 s3-0 arg0) + (set! sv-288 0) + (while (< sv-288 8) + (vector+! s4-0 (-> s1-0 sv-288) (-> obj origin)) + (vector-matrix*! (-> s1-0 sv-288) (-> s1-0 sv-288) s2-0) + (vector+! s3-0 (-> s1-0 sv-288) (-> obj origin)) + (camera-line s4-0 s3-0 arg0) + (set! sv-288 (+ sv-288 1)) + ) + ) + ) + 0 + (none) + ) + +;; definition for method 12 of type torus +;; INFO: Return type mismatch vector vs none. +(defmethod dummy-12 torus ((obj torus) (arg0 vector)) + (let* ((f30-0 65536.0) + (v1-1 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-2 (the-as number (logior #x3f800000 v1-1))) + (f30-1 (* f30-0 (+ -1.0 (the-as float v1-2)))) + ) + (set! (-> arg0 x) 0.0) + (set! (-> arg0 y) (* (-> obj radius-secondary) (sin f30-1))) + (set! (-> arg0 z) (* (-> obj radius-secondary) (cos f30-1))) + ) + (+! (-> arg0 z) (-> obj radius-primary)) + (set! (-> arg0 w) 0.0) + (let ((s2-0 (new 'stack-no-clear 'matrix))) + (let* ((s4-0 matrix-rotate-y!) + (s3-0 s2-0) + (f30-2 65536.0) + (v1-6 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-7 (the-as number (logior #x3f800000 v1-6))) + ) + (s4-0 s3-0 (* f30-2 (+ -1.0 (the-as float v1-7)))) + ) + (vector-matrix*! arg0 arg0 s2-0) + (matrix-from-two-vectors! + s2-0 + (new 'static 'vector :y 1.0 :w 1.0) + (-> obj axis) + ) + (vector-matrix*! arg0 arg0 s2-0) + ) + (vector+! arg0 arg0 (-> obj origin)) + (none) + ) + +;; definition of type arcing-shot +(deftype arcing-shot (process-drawable) + ((y-vel float :offset-assert 176) + (grav float :offset-assert 180) + (from vector :inline :offset-assert 192) + (to vector :inline :offset-assert 208) + ) + :heap-base #x70 + :method-count-assert 20 + :size-assert #xe0 + :flag-assert #x14007000e0 + ) + +;; definition for method 3 of type arcing-shot +(defmethod inspect arcing-shot ((obj arcing-shot)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Ty-vel: ~f~%" (-> obj y-vel)) + (format #t "~T~Tgrav: ~f~%" (-> obj grav)) + (format #t "~T~Tfrom: #~%" (-> obj from)) + (format #t "~T~Tto: #~%" (-> obj to)) + obj + ) + +;; definition for function arcing-shot-setup +;; INFO: Return type mismatch float vs none. +;; Used lq/sq +(defbehavior + arcing-shot-setup arcing-shot + ((arg0 vector) (arg1 vector) (arg2 float)) + (set! (-> self from quad) (-> arg0 quad)) + (set! (-> self to quad) (-> arg1 quad)) + (let ((v1-2 (fmax 1.0 arg2))) + (if (< (-> arg0 y) (-> arg1 y)) + (set! v1-2 (+ v1-2 (- (-> arg1 y) (-> arg0 y)))) + ) + (let ((f0-6 (* -4.0 v1-2)) + (f3-1 (* 4.0 v1-2 (- (-> arg1 y) (-> arg0 y)))) + ) + (set! + (-> self y-vel) + (* 0.5 (- (sqrtf (- (* f0-6 f0-6) (* 4.0 f3-1))) f0-6)) + ) + ) + (set! + (-> self grav) + (/ (- (* (-> self y-vel) (-> self y-vel))) (* 2.0 v1-2)) + ) + ) + (none) + ) + +;; definition for function arcing-shot-calculate +;; INFO: Return type mismatch float vs none. +(defbehavior arcing-shot-calculate arcing-shot ((arg0 vector) (arg1 float)) + (let ((s5-0 (fmin 1.0 (fmax 0.0 arg1)))) + (vector-lerp! arg0 (-> self from) (-> self to) s5-0) + (set! (-> arg0 y) (-> self from y)) + (+! (-> arg0 y) (* (-> self y-vel) s5-0)) + (+! (-> arg0 y) (* 0.5 s5-0 s5-0 (-> self grav))) + ) + (none) + ) + +;; definition for function arcing-shot-draw +;; Used lq/sq +(defbehavior arcing-shot-draw arcing-shot () + (let ((gp-0 (new 'stack-no-clear 'vector)) + (s5-0 (new 'stack-no-clear 'vector)) + ) + (set! (-> s5-0 quad) (-> self from quad)) + (dotimes (s4-0 30) + (arcing-shot-calculate gp-0 (* 0.033333335 (the float (+ s4-0 1)))) + (camera-line + gp-0 + s5-0 + (the-as + vector + (new 'static 'vector4w + :data + (new 'static 'array int32 4 #xff #xff 0 #x80) + ) + ) + ) + (set! (-> s5-0 quad) (-> gp-0 quad)) + ) + ) + #f + ) + +;; failed to figure out what this is: +(defstate arcing-shot-debug-trajectory (arcing-shot) + :trans + (behavior () + (arcing-shot-setup (camera-pos) (-> self entity extra trans) 40960.0) + (arcing-shot-draw) + (none) + ) + :code + (behavior () + (while #t + (format *stdcon* "debug trajectory~%") + (suspend) + ) + (none) + ) + ) + +;; definition of type darkecobomb +(deftype darkecobomb (arcing-shot) + ((flight-time int64 :offset-assert 224) + (countdown-time float :offset-assert 232) + (anim-speed float :offset-assert 236) + (next-tick float :offset-assert 240) + ) + :heap-base #x90 + :method-count-assert 20 + :size-assert #xf4 + :flag-assert #x14009000f4 + ) + +;; definition for method 3 of type darkecobomb +(defmethod inspect darkecobomb ((obj darkecobomb)) + (let ((t9-0 (method-of-type arcing-shot inspect))) + (t9-0 obj) + ) + (format #t "~T~Tflight-time: ~D~%" (-> obj flight-time)) + (format #t "~T~Tcountdown-time: ~f~%" (-> obj countdown-time)) + (format #t "~T~Tanim-speed: ~f~%" (-> obj anim-speed)) + (format #t "~T~Tnext-tick: ~f~%" (-> obj next-tick)) + obj + ) + +;; failed to figure out what this is: +(let + ((v1-8 + (new 'static 'skeleton-group + :art-group-name "darkecobomb" + :bounds + (new 'static 'vector :y 14336.0 :w 24576.0) + :version #x6 + ) + ) + ) + (set! (-> v1-8 jgeo) 0) + (set! (-> v1-8 janim) 2) + (set! (-> v1-8 mgeo 0) (the-as uint 1)) + (set! (-> v1-8 lod-dist 0) 4095996000.0) + (set! *darkecobomb-sg* v1-8) + ) + +;; failed to figure out what this is: +(defstate darkecobomb-explode (darkecobomb) + :code + (behavior ((arg0 symbol)) + (let ((a1-0 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-0 from) self) + (set! (-> a1-0 num-params) 1) + (set! (-> a1-0 message) 'reset-pickup) + (set! (-> a1-0 param 0) (the-as uint 'eco)) + (send-event-function *target* a1-0) + ) + (sound-play-by-name + (static-sound-name "explod-bomb") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #f) + ) + (activate! *camera-smush-control* 819.2 37 600 1.0 0.995) + (let ((a1-3 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-3 from) self) + (set! (-> a1-3 num-params) 1) + (set! (-> a1-3 message) 'flash) + (set! (-> a1-3 param 0) (the-as uint 255.0)) + (send-event-function (ppointer->process (-> self parent)) a1-3) + ) + (let ((s5-1 (get-process *default-dead-pool* part-tracker #x4000))) + (when s5-1 + (let ((t9-6 (method-of-type part-tracker activate))) + (t9-6 + (the-as part-tracker s5-1) + *entity-pool* + 'part-tracker + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + s5-1 + part-tracker-init + (-> *part-group-id-table* 619) + 900 + #f + #f + #f + (-> self root trans) + ) + (-> s5-1 ppointer) + ) + ) + (logior! (-> self draw status) 2) + (cond + ((or + arg0 + (and + *target* + (< (-> (target-pos 0) y) (+ 40960.0 (-> self entity extra trans y))) + ) + ) + (if *target* + (logior! (-> *target* mask) (process-mask sleep)) + ) + (let ((a1-7 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-7 from) self) + (set! (-> a1-7 num-params) 0) + (set! (-> a1-7 message) 'bomb-going) + (send-event-function (ppointer->process (-> self parent)) a1-7) + ) + (let ((a1-8 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-8 from) self) + (set! (-> a1-8 num-params) 1) + (set! (-> a1-8 message) 'change-to-entity-by-name) + (set! (-> a1-8 param 0) (the-as uint "camera-402")) + (send-event-function *camera* a1-8) + ) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 600) + (suspend) + ) + (let ((a1-9 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-9 from) self) + (set! (-> a1-9 num-params) 1) + (set! (-> a1-9 message) 'force-blend) + (set! (-> a1-9 param 0) (the-as uint 0)) + (send-event-function *camera* a1-9) + ) + (let ((a1-10 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-10 from) self) + (set! (-> a1-10 num-params) 1) + (set! (-> a1-10 message) 'change-state) + (set! (-> a1-10 param 0) (the-as uint *camera-base-mode*)) + (send-event-function *camera* a1-10) + ) + (let ((a1-11 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-11 from) self) + (set! (-> a1-11 num-params) 0) + (set! (-> a1-11 message) 'clear-entity) + (send-event-function *camera* a1-11) + ) + (if *target* + (logclear! (-> *target* mask) (process-mask sleep)) + ) + (let ((a1-12 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-12 from) self) + (set! (-> a1-12 num-params) 2) + (set! (-> a1-12 message) 'attack-invinc) + (set! (-> a1-12 param 0) (the-as uint #f)) + (let ((a0-21 (new 'static 'attack-info :mask #x20))) + (set! (-> a0-21 mode) 'instant-death) + (set! (-> a1-12 param 1) (the-as uint a0-21)) + ) + (send-event-function *target* a1-12) + ) + ) + (else + (let ((a1-13 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-13 from) self) + (set! (-> a1-13 num-params) 0) + (set! (-> a1-13 message) 'bomb-done) + (send-event-function (ppointer->process (-> self parent)) a1-13) + ) + ) + ) + (deactivate self) + (none) + ) + :post + (the-as (function none :behavior darkecobomb) ja-post) + ) + +;; definition for function darkecobomb-handler +;; INFO: Return type mismatch none vs object. +(defbehavior + darkecobomb-handler darkecobomb + ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (if (or (= v1-0 'touch) (= v1-0 'attack)) + (go darkecobomb-explode #t) + ) + ) + ) + ) + +;; definition for function darkecobomb-explode-if-player-high-enough +(defbehavior darkecobomb-explode-if-player-high-enough darkecobomb () + (if + (and + (not (movie?)) + *target* + (< (+ 409600.0 (-> self entity extra trans y)) (-> (target-pos 0) y)) + ) + (go darkecobomb-explode #f) + ) + (none) + ) + +;; failed to figure out what this is: +(defstate darkecobomb-countdown (darkecobomb) + :event + darkecobomb-handler + :enter + (behavior () + (set! (-> self state-time) (-> *display* game-frame-counter)) + (set! (-> self next-tick) 0.9) + (none) + ) + :exit + (behavior () + (stop! (-> self sound)) + (none) + ) + :trans + (behavior () + (darkecobomb-explode-if-player-high-enough) + (let + ((f0-1 + (fmax + 0.0 + (/ + (- + (-> self countdown-time) + (the float (- (-> *display* game-frame-counter) (-> self state-time))) + ) + (-> self countdown-time) + ) + ) + ) + ) + (let ((f1-5 (* (- 1.0 f0-1) (- 1.0 f0-1)))) + (set! (-> self anim-speed) (+ 1.0 f1-5)) + ) + (when (< (cos (* 16384.0 (- 1.0 f0-1))) (-> self next-tick)) + (let ((gp-0 (get-process *default-dead-pool* part-tracker #x4000))) + (when gp-0 + (let ((t9-3 (method-of-type part-tracker activate))) + (t9-3 + (the-as part-tracker gp-0) + *entity-pool* + 'part-tracker + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + gp-0 + part-tracker-init + (-> *part-group-id-table* 663) + 150 + #f + #f + #f + (-> self root trans) + ) + (-> gp-0 ppointer) + ) + ) + (set! (-> self next-tick) (+ -0.06 (-> self next-tick))) + (sound-play-by-name + (static-sound-name "robo-warning") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + ) + ) + (if + (>= + (- (-> *display* game-frame-counter) (-> self state-time)) + (the int (-> self countdown-time)) + ) + (go darkecobomb-explode #f) + ) + (when (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 5) + ) + (let ((gp-2 (new 'stack-no-clear 'vector))) + (vector<-cspace! gp-2 (-> self node-list data 5)) + (spawn (-> self part) gp-2) + ) + ) + (none) + ) + :code + (behavior () + (sound-play-by-name + (static-sound-name "bomb-open") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + (let ((a0-2 (-> self skel root-channel 0))) + (set! + (-> a0-2 frame-group) + (the-as art-joint-anim (-> self draw art-group data 4)) + ) + (set! + (-> a0-2 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 4)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-2 param 1) 1.0) + (set! (-> a0-2 frame-num) 0.0) + (joint-control-channel-group! + a0-2 + (the-as art-joint-anim (-> self draw art-group data 4)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-3 (-> self skel root-channel 0))) + (set! + (-> a0-3 param 0) + (the float (+ (-> a0-3 frame-group data 0 length) -1)) + ) + (set! (-> a0-3 param 1) 1.0) + (joint-control-channel-group-eval! + a0-3 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (while #t + (let ((a0-5 (-> self skel root-channel 0))) + (set! + (-> a0-5 frame-group) + (the-as art-joint-anim (-> self draw art-group data 5)) + ) + (set! + (-> a0-5 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 5)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-5 param 1) (-> self anim-speed)) + (set! (-> a0-5 frame-num) 0.0) + (joint-control-channel-group! + a0-5 + (the-as art-joint-anim (-> self draw art-group data 5)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (update! (-> self sound)) + (suspend) + (let ((a0-7 (-> self skel root-channel 0))) + (set! + (-> a0-7 param 0) + (the float (+ (-> a0-7 frame-group data 0 length) -1)) + ) + (set! (-> a0-7 param 1) (-> self anim-speed)) + (joint-control-channel-group-eval! + a0-7 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior darkecobomb) transform-post) + ) + +;; failed to figure out what this is: +(defstate darkecobomb-land (darkecobomb) + :event + darkecobomb-handler + :enter + (behavior () + (set! (-> self state-time) (-> *display* game-frame-counter)) + 0 + (none) + ) + :trans + (behavior () + (darkecobomb-explode-if-player-high-enough) + (if (>= (- (-> *display* game-frame-counter) (-> self state-time)) 150) + (go darkecobomb-countdown) + ) + (none) + ) + :code + (behavior () + (let ((a0-0 (-> self skel root-channel 0))) + (set! + (-> a0-0 param 0) + (the float (+ (-> a0-0 frame-group data 0 length) -1)) + ) + (set! (-> a0-0 param 1) 1.0) + (joint-control-channel-group! + a0-0 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (while (not (ja-done? 0)) + (suspend) + (ja-eval) + ) + (while #t + (let ((a0-2 (-> self skel root-channel 0))) + (set! + (-> a0-2 frame-group) + (the-as art-joint-anim (-> self draw art-group data 2)) + ) + (set! + (-> a0-2 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 2)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-2 param 1) 1.0) + (set! (-> a0-2 frame-num) 0.0) + (joint-control-channel-group! + a0-2 + (the-as art-joint-anim (-> self draw art-group data 2)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-3 (-> self skel root-channel 0))) + (set! + (-> a0-3 param 0) + (the float (+ (-> a0-3 frame-group data 0 length) -1)) + ) + (set! (-> a0-3 param 1) 1.0) + (joint-control-channel-group-eval! + a0-3 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior darkecobomb) transform-post) + ) + +;; failed to figure out what this is: +(defstate darkecobomb-idle (darkecobomb) + :enter + (behavior () + (set! (-> self state-time) (-> *display* game-frame-counter)) + (none) + ) + :trans + (behavior () + (arcing-shot-calculate + (-> self root trans) + (/ + (the float (- (-> *display* game-frame-counter) (-> self state-time))) + (the float (-> self flight-time)) + ) + ) + (if + (>= + (- (-> *display* game-frame-counter) (-> self state-time)) + (-> self flight-time) + ) + (go darkecobomb-land) + ) + (none) + ) + :code + (behavior () + (let ((a0-0 (-> self skel root-channel 0))) + (set! + (-> a0-0 frame-group) + (the-as art-joint-anim (-> self draw art-group data 3)) + ) + (set! + (-> a0-0 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 3)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-0 param 1) 1.0) + (set! (-> a0-0 frame-num) 0.0) + (joint-control-channel-group! + a0-0 + (the-as art-joint-anim (-> self draw art-group data 3)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-1 (-> self skel root-channel 0))) + (set! + (-> a0-1 param 0) + (the float (+ (-> a0-1 frame-group data 0 length) -1)) + ) + (set! (-> a0-1 param 1) 1.0) + (joint-control-channel-group-eval! + a0-1 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (while #t + (let ((a0-3 (-> self skel root-channel 0))) + (set! + (-> a0-3 frame-group) + (the-as art-joint-anim (-> self draw art-group data 2)) + ) + (set! + (-> a0-3 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 2)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-3 param 1) 1.0) + (set! (-> a0-3 frame-num) 0.0) + (joint-control-channel-group! + a0-3 + (the-as art-joint-anim (-> self draw art-group data 2)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-4 (-> self skel root-channel 0))) + (set! + (-> a0-4 param 0) + (the float (+ (-> a0-4 frame-group data 0 length) -1)) + ) + (set! (-> a0-4 param 1) 1.0) + (joint-control-channel-group-eval! + a0-4 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior darkecobomb) transform-post) + ) + +;; definition for function darkecobomb-init-by-other +;; Used lq/sq +(defbehavior + darkecobomb-init-by-other darkecobomb + ((arg0 vector) (arg1 vector) (arg2 float) (arg3 int) (arg4 float)) + (let + ((s1-0 + (new + 'process + 'collide-shape-moving + self + (collide-list-enum usually-hit-by-player) + ) + ) + ) + (set! (-> s1-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s1-0 reaction) default-collision-reaction) + (set! (-> s1-0 no-reaction) nothing) + (let ((s0-0 (new 'process 'collide-shape-prim-sphere s1-0 (the-as uint 0)))) + (set! (-> s0-0 prim-core collide-as) (the-as uint 512)) + (set! (-> s0-0 collide-with) (the-as uint 16)) + (set! (-> s0-0 prim-core action) (the-as uint 1)) + (set! (-> s0-0 prim-core offense) 4) + (set! (-> s0-0 transform-index) 3) + (set-vector! (-> s0-0 local-sphere) 0.0 0.0 0.0 16384.0) + ) + (dummy-46 s1-0) + (set! (-> s1-0 nav-radius) (* 0.75 (-> s1-0 root-prim local-sphere w))) + (dummy-50 s1-0) + (set! (-> self root) s1-0) + ) + (set! (-> self root trans quad) (-> arg0 quad)) + (dummy-14 self *darkecobomb-sg* '()) + (logclear! (-> self mask) (process-mask actor-pause)) + (set! + (-> self part) + (create-launch-control (-> *part-group-id-table* 639) self) + ) + (arcing-shot-setup arg0 arg1 arg2) + (set! (-> self countdown-time) arg4) + (set! (-> self flight-time) arg3) + (set! + (-> self sound) + (new + 'process + 'ambient-sound + (new 'static 'sound-spec + :mask #x80 + :num 1.0 + :group #x1 + :sound-name + (new 'static 'sound-name :lo #x6970732d626d6f62) + :volume #x400 + :fo-max 80 + ) + (-> self to) + ) + ) + (go darkecobomb-idle) + (none) + ) + +;; definition of type greenshot +(deftype greenshot (arcing-shot) + ((flight-time int64 :offset-assert 224) + ) + :heap-base #x80 + :method-count-assert 20 + :size-assert #xe8 + :flag-assert #x14008000e8 + ) + +;; definition for method 3 of type greenshot +(defmethod inspect greenshot ((obj greenshot)) + (let ((t9-0 (method-of-type arcing-shot inspect))) + (t9-0 obj) + ) + (format #t "~T~Tflight-time: ~D~%" (-> obj flight-time)) + obj + ) + +;; failed to figure out what this is: +(let + ((v1-17 + (new 'static 'skeleton-group + :art-group-name "greenshot" + :bounds (new 'static 'vector :w 16384.0) + :version #x6 + ) + ) + ) + (set! (-> v1-17 jgeo) 0) + (set! (-> v1-17 janim) 2) + (set! (-> v1-17 mgeo 0) (the-as uint 1)) + (set! (-> v1-17 lod-dist 0) 4095996000.0) + (set! *greenshot-sg* v1-17) + ) + +;; failed to figure out what this is: +(defstate greenshot-idle (greenshot) + :enter + (behavior () + (set! (-> self state-time) (-> *display* game-frame-counter)) + (none) + ) + :trans + (behavior () + (arcing-shot-calculate + (-> self root trans) + (/ + (the float (- (-> *display* game-frame-counter) (-> self state-time))) + (the float (-> self flight-time)) + ) + ) + (if + (>= + (- (-> *display* game-frame-counter) (-> self state-time)) + (-> self flight-time) + ) + (deactivate self) + ) + (spawn (-> self part) (-> self root trans)) + (none) + ) + :code + (behavior () + (while #t + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-0 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-0 param 1) 1.0) + (set! (-> a0-0 frame-num) 0.0) + (joint-control-channel-group! a0-0 (if (> (-> self skel active-channels) 0) + (-> + self + skel + root-channel + 0 + frame-group + ) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-1 (-> self skel root-channel 0))) + (set! + (-> a0-1 param 0) + (the float (+ (-> a0-1 frame-group data 0 length) -1)) + ) + (set! (-> a0-1 param 1) 1.0) + (joint-control-channel-group-eval! + a0-1 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior greenshot) transform-post) + ) + +;; definition for function greenshot-init-by-other +;; Used lq/sq +(defbehavior + greenshot-init-by-other greenshot + ((arg0 vector) (arg1 vector) (arg2 float) (arg3 uint)) + (let + ((s2-0 + (new + 'process + 'collide-shape-moving + self + (collide-list-enum usually-hit-by-player) + ) + ) + ) + (set! (-> s2-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s2-0 reaction) default-collision-reaction) + (set! (-> s2-0 no-reaction) nothing) + (let ((s1-0 (new 'process 'collide-shape-prim-sphere s2-0 (the-as uint 0)))) + (set! (-> s1-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s1-0 collide-with) (the-as uint 16)) + (set! (-> s1-0 prim-core offense) 4) + (set-vector! (-> s1-0 local-sphere) 0.0 8192.0 0.0 8192.0) + ) + (dummy-46 s2-0) + (set! (-> s2-0 nav-radius) (* 0.75 (-> s2-0 root-prim local-sphere w))) + (dummy-50 s2-0) + (set! (-> self root) s2-0) + ) + (set! (-> self root trans quad) (-> arg0 quad)) + (dummy-14 self *greenshot-sg* '()) + (logclear! (-> self mask) (process-mask actor-pause)) + (arcing-shot-setup arg0 arg1 arg2) + (set! (-> self flight-time) (the-as int arg3)) + (set! + (-> self part) + (create-launch-control (-> *part-group-id-table* 664) self) + ) + (logior! (-> self draw status) 2) + (go greenshot-idle) + (none) + ) + +;; definition of type redshot +(deftype redshot (arcing-shot) + ((flight-time int64 :offset-assert 224) + (stall-time int64 :offset-assert 232) + (ring torus :inline :offset-assert 240) + (rotation-offset int64 :offset-assert 280) + (part-track handle :offset-assert 288) + (shot-particle sparticle-launch-control :offset-assert 296) + (test-particle sparticle-launch-control :offset-assert 300) + ) + :heap-base #xc0 + :method-count-assert 20 + :size-assert #x130 + :flag-assert #x1400c00130 + ) + +;; definition for method 3 of type redshot +(defmethod inspect redshot ((obj redshot)) + (let ((t9-0 (method-of-type arcing-shot inspect))) + (t9-0 obj) + ) + (format #t "~T~Tflight-time: ~D~%" (-> obj flight-time)) + (format #t "~T~Tstall-time: ~D~%" (-> obj stall-time)) + (format #t "~T~Tring: #~%" (-> obj ring)) + (format #t "~T~Trotation-offset: ~D~%" (-> obj rotation-offset)) + (format #t "~T~Tpart-track: ~D~%" (-> obj part-track)) + (format #t "~T~Tshot-particle: ~A~%" (-> obj shot-particle)) + (format #t "~T~Ttest-particle: ~A~%" (-> obj test-particle)) + obj + ) + +;; definition for method 7 of type redshot +;; INFO: Return type mismatch arcing-shot vs redshot. +(defmethod relocate redshot ((obj redshot) (arg0 int)) + (if (nonzero? (-> obj shot-particle)) + (&+! (-> obj shot-particle) arg0) + ) + (if (nonzero? (-> obj test-particle)) + (&+! (-> obj test-particle) arg0) + ) + (the-as redshot ((method-of-type arcing-shot relocate) obj arg0)) + ) + +;; definition for method 10 of type redshot +(defmethod deactivate redshot ((obj redshot)) + (if (nonzero? (-> obj shot-particle)) + (kill-and-free-particles (-> obj shot-particle)) + ) + (if (nonzero? (-> obj test-particle)) + (kill-and-free-particles (-> obj test-particle)) + ) + ((method-of-type arcing-shot deactivate) obj) + (none) + ) + +;; definition for function redshot-particle-callback +;; INFO: Return type mismatch int vs none. +(defun redshot-particle-callback ((arg0 part-tracker)) + (let ((v1-0 (the-as object (-> arg0 userdata)))) + (set! + (-> *part-id-table* 2626 init-specs 2 initial-valuef) + (* 2.25 (-> (the-as (pointer redshot) v1-0) 0 ring radius-primary)) + ) + ) + 0 + (none) + ) + +;; failed to figure out what this is: +(let + ((v1-22 + (new 'static 'skeleton-group + :art-group-name "redring" + :bounds (new 'static 'vector :w 163840.0) + :version #x6 + ) + ) + ) + (set! (-> v1-22 jgeo) 0) + (set! (-> v1-22 janim) 2) + (set! (-> v1-22 mgeo 0) (the-as uint 1)) + (set! (-> v1-22 lod-dist 0) 4095996000.0) + (set! *redring-sg* v1-22) + ) + +;; definition for function redshot-trans +(defbehavior redshot-trans redshot ((arg0 int)) + (let ((s5-0 (new 'stack-no-clear 'matrix))) + 0.0 + (matrix-rotate-yx! + s5-0 + (* + 436.90668 + (the float (+ (-> self rotation-offset) (-> *display* game-frame-counter))) + ) + (* + 291.27112 + (the float (+ (-> self rotation-offset) (-> *display* game-frame-counter))) + ) + ) + (matrix->quaternion (-> self root quat) s5-0) + ) + (if (< (* 0.006666667 (the float (min 150 arg0))) 1.0) + (spawn (-> self part) (-> self root trans)) + ) + ) + +;; failed to figure out what this is: +(defstate redshot-explode (redshot) + :enter + (behavior () + (set! (-> self state-time) (-> *display* game-frame-counter)) + (sound-play-by-name + (static-sound-name "red-explode") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + (set! (-> self draw status) (logand -3 (-> self draw status))) + (quaternion-identity! (-> self root quat)) + (set! (-> self ring radius-secondary) 3072.0) + (set! (-> self ring origin quad) (-> self root trans quad)) + (+! (-> self ring origin y) (-> self ring radius-secondary)) + (set-vector! (-> self ring axis) 0.0 1.0 0.0 1.0) + (let ((gp-1 (get-process *default-dead-pool* part-tracker #x4000))) + (set! (-> self part-track) (ppointer->handle (when gp-1 + (let + ((t9-4 + (method-of-type + part-tracker + activate + ) + ) + ) + (t9-4 + (the-as part-tracker gp-1) + self + 'part-tracker + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + gp-1 + part-tracker-init + (-> + *part-group-id-table* + 648 + ) + -1 + redshot-particle-callback + (-> self ppointer) + #f + (-> self root trans) + ) + (-> gp-1 ppointer) + ) + ) + ) + ) + (none) + ) + :trans + (behavior () + (set! + (-> self ring radius-primary) + (* + 204.8 + (the float (- (-> *display* game-frame-counter) (-> self state-time))) + ) + ) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (when (dummy-11 (-> self ring) gp-0) + (vector-normalize! gp-0 16384.0) + (let ((a1-2 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-2 from) self) + (set! (-> a1-2 num-params) 2) + (set! (-> a1-2 message) 'attack) + (set! (-> a1-2 param 0) (the-as uint #f)) + (let ((v1-8 (new 'static 'attack-info :mask #x2))) + (set! (-> v1-8 vector quad) (-> gp-0 quad)) + (set! (-> a1-2 param 1) (the-as uint v1-8)) + ) + (send-event-function *target* a1-2) + ) + (let ((a1-3 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-3 from) self) + (set! (-> a1-3 num-params) 0) + (set! (-> a1-3 message) 'hit-jak) + (send-event-function (ppointer->process (-> self parent)) a1-3) + ) + ) + ) + (dotimes (gp-1 5) + (let ((s5-0 (new 'stack-no-clear 'vector))) + (dummy-12 (-> self ring) s5-0) + (spawn (-> self test-particle) s5-0) + ) + ) + (let + ((f0-3 + (fmin + 1.0 + (* + 0.006666667 + (the + float + (- 600 (- (-> *display* game-frame-counter) (-> self state-time))) + ) + ) + ) + ) + ) + (set-vector! (-> self draw color-mult) f0-3 f0-3 f0-3 0.75) + ) + (when (>= (- (-> *display* game-frame-counter) (-> self state-time)) 600) + (let ((a1-7 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-7 from) self) + (set! (-> a1-7 num-params) 0) + (set! (-> a1-7 message) 'missed-jak) + (send-event-function (ppointer->process (-> self parent)) a1-7) + ) + (deactivate self) + ) + (none) + ) + :code + (behavior () + (while #t + (let ((v1-2 (-> self skel root-channel 0))) + (set! (-> v1-2 num-func) num-func-identity) + (set! (-> v1-2 frame-num) (* 0.000016276043 (-> self ring radius-primary))) + ) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior redshot) transform-post) + ) + +;; definition for function redshot-handler +;; INFO: Return type mismatch none vs object. +(defbehavior + redshot-handler redshot + ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (if (or (= v1-0 'attack) (= v1-0 'touch)) + (go redshot-explode) + ) + ) + ) + ) + +;; failed to figure out what this is: +(defstate redshot-wait (redshot) + :event + redshot-handler + :enter + (behavior () + (set! (-> self state-time) (-> *display* game-frame-counter)) + (none) + ) + :trans + (behavior () + (redshot-trans + (- + (-> self stall-time) + (- (-> *display* game-frame-counter) (-> self state-time)) + ) + ) + (if + (>= + (- (-> *display* game-frame-counter) (-> self state-time)) + (-> self stall-time) + ) + (go redshot-explode) + ) + (spawn (-> self shot-particle) (-> self root trans)) + (none) + ) + :code + (behavior () + (while #t + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior redshot) transform-post) + ) + +;; failed to figure out what this is: +(defstate redshot-idle (redshot) + :event + redshot-handler + :enter + (behavior () + (set! (-> self state-time) (-> *display* game-frame-counter)) + (none) + ) + :trans + (behavior () + (redshot-trans 1500) + (arcing-shot-calculate + (-> self root trans) + (/ + (the float (- (-> *display* game-frame-counter) (-> self state-time))) + (the float (-> self flight-time)) + ) + ) + (if + (>= + (- (-> *display* game-frame-counter) (-> self state-time)) + (-> self flight-time) + ) + (go redshot-wait) + ) + (spawn (-> self shot-particle) (-> self root trans)) + (none) + ) + :code + (behavior () + (while #t + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior redshot) transform-post) + ) + +;; definition for function redshot-init-by-other +;; Used lq/sq +(defbehavior + redshot-init-by-other redshot + ((arg0 vector) (arg1 vector) (arg2 float) (arg3 int) (arg4 int) (arg5 int)) + (local-vars (sv-16 collide-shape-prim-sphere)) + (let + ((s0-0 + (new + 'process + 'collide-shape-moving + self + (collide-list-enum usually-hit-by-player) + ) + ) + ) + (set! (-> s0-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s0-0 reaction) default-collision-reaction) + (set! (-> s0-0 no-reaction) nothing) + (set! sv-16 (new 'process 'collide-shape-prim-sphere s0-0 (the-as uint 0))) + (set! (-> sv-16 prim-core collide-as) (the-as uint 512)) + (set! (-> sv-16 collide-with) (the-as uint 16)) + (set! (-> sv-16 prim-core action) (the-as uint 1)) + (set! (-> sv-16 prim-core offense) 4) + (set! (-> sv-16 transform-index) 4) + (set-vector! (-> sv-16 local-sphere) 0.0 0.0 0.0 12288.0) + (let* ((a0-9 s0-0) + (t9-3 (method-of-object a0-9 dummy-46)) + ) + sv-16 + (t9-3 a0-9) + ) + (set! (-> s0-0 nav-radius) (* 0.75 (-> s0-0 root-prim local-sphere w))) + (dummy-50 s0-0) + (set! (-> self root) s0-0) + ) + (set! (-> self root trans quad) (-> arg0 quad)) + (dummy-14 self *redring-sg* '()) + (logclear! (-> self mask) (process-mask actor-pause)) + (arcing-shot-setup arg0 arg1 arg2) + (set! (-> self flight-time) arg3) + (set! (-> self stall-time) arg4) + (set! (-> self rotation-offset) arg5) + (set! + (-> self part) + (create-launch-control (-> *part-group-id-table* 647) self) + ) + (set! + (-> self shot-particle) + (create-launch-control (-> *part-group-id-table* 665) self) + ) + (set! + (-> self test-particle) + (create-launch-control (-> *part-group-id-table* 679) self) + ) + (logior! (-> self draw status) 2) + (set! + (-> self sound) + (new + 'process + 'ambient-sound + (new 'static 'sound-spec + :mask #x80 + :num 1.0 + :group #x1 + :sound-name + (new 'static 'sound-name :lo #x657269662d646572) + :volume #x400 + :fo-max 80 + ) + (-> self root trans) + ) + ) + (go redshot-idle) + (none) + ) + +;; definition of type yellowshot +(deftype yellowshot (arcing-shot) + ((flight-time int64 :offset-assert 224) + ) + :heap-base #x80 + :method-count-assert 20 + :size-assert #xe8 + :flag-assert #x14008000e8 + ) + +;; definition for method 3 of type yellowshot +(defmethod inspect yellowshot ((obj yellowshot)) + (let ((t9-0 (method-of-type arcing-shot inspect))) + (t9-0 obj) + ) + (format #t "~T~Tflight-time: ~D~%" (-> obj flight-time)) + obj + ) + +;; 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 + (('touch 'attack) + (when (= (-> arg0 type) target) + (let ((a1-3 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-3 from) self) + (set! (-> a1-3 num-params) 2) + (set! (-> a1-3 message) 'attack) + (set! (-> a1-3 param 0) (-> arg3 param 0)) + (let ((a0-2 (new 'static 'attack-info :mask #x20))) + (set! (-> a0-2 mode) 'generic) + (set! (-> a1-3 param 1) (the-as uint a0-2)) + ) + (send-event-function *target* a1-3) + ) + (let ((a1-4 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-4 from) self) + (set! (-> a1-4 num-params) 0) + (set! (-> a1-4 message) 'hit-jak) + (send-event-function (ppointer->process (-> self parent)) a1-4) + ) + ) + ) + ) + ) + :enter + (behavior () + (set! (-> self state-time) (-> *display* game-frame-counter)) + (none) + ) + :trans + (behavior () + (arcing-shot-calculate + (-> self root trans) + (/ + (the float (- (-> *display* game-frame-counter) (-> self state-time))) + (the float (-> self flight-time)) + ) + ) + (spawn (-> self part) (-> self root trans)) + (when + (>= + (- (-> *display* game-frame-counter) (-> self state-time)) + (-> self flight-time) + ) + (let ((a1-3 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-3 from) self) + (set! (-> a1-3 num-params) 0) + (set! (-> a1-3 message) 'missed-jak) + (send-event-function (ppointer->process (-> self parent)) a1-3) + ) + (deactivate self) + ) + (none) + ) + :code + (behavior () + (while #t + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior yellowshot) transform-post) + ) + +;; definition for function yellowshot-init-by-other +;; Used lq/sq +(defbehavior + yellowshot-init-by-other yellowshot + ((arg0 vector) (arg1 vector) (arg2 float) (arg3 uint)) + (let + ((s2-0 + (new + 'process + 'collide-shape-moving + self + (collide-list-enum usually-hit-by-player) + ) + ) + ) + (set! (-> s2-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s2-0 reaction) default-collision-reaction) + (set! (-> s2-0 no-reaction) nothing) + (let ((s1-0 (new 'process 'collide-shape-prim-sphere s2-0 (the-as uint 0)))) + (set! (-> s1-0 prim-core collide-as) (the-as uint 512)) + (set! (-> s1-0 collide-with) (the-as uint 16)) + (set! (-> s1-0 prim-core action) (the-as uint 1)) + (set! (-> s1-0 prim-core offense) 4) + (set-vector! (-> s1-0 local-sphere) 0.0 0.0 0.0 12288.0) + ) + (dummy-46 s2-0) + (set! (-> s2-0 nav-radius) (* 0.75 (-> s2-0 root-prim local-sphere w))) + (dummy-50 s2-0) + (set! (-> self root) s2-0) + ) + (set! (-> self root trans quad) (-> arg0 quad)) + (dummy-14 self *redring-sg* '()) + (logior! (-> self draw status) 2) + (arcing-shot-setup arg0 arg1 arg2) + (set! (-> self flight-time) (the-as int arg3)) + (set! + (-> self part) + (create-launch-control (-> *part-group-id-table* 652) self) + ) + (go yellowshot-idle) + (none) + ) diff --git a/test/decompiler/reference/levels/finalboss/robotboss_REF.gc b/test/decompiler/reference/levels/finalboss/robotboss_REF.gc new file mode 100644 index 0000000000..6da25fea44 --- /dev/null +++ b/test/decompiler/reference/levels/finalboss/robotboss_REF.gc @@ -0,0 +1,6396 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition for method 20 of type robotboss +(defmethod ease-loc-t robotboss ((obj robotboss)) + (parameter-ease-sin-clamp (-> obj loc-t)) + ) + +;; failed to figure out what this is: +(let + ((v1-0 + (new 'static 'skeleton-group + :art-group-name "robotboss-blueeco" + :bounds (new 'static 'vector :w 819200.0) + :version #x6 + ) + ) + ) + (set! (-> v1-0 jgeo) 0) + (set! (-> v1-0 janim) 2) + (set! (-> v1-0 mgeo 0) (the-as uint 1)) + (set! (-> v1-0 lod-dist 0) 4095996000.0) + (set! *robotboss-blueeco-sg* v1-0) + ) + +;; failed to figure out what this is: +(let + ((v1-1 + (new 'static 'skeleton-group + :art-group-name "robotboss-redeco" + :bounds (new 'static 'vector :w 819200.0) + :version #x6 + ) + ) + ) + (set! (-> v1-1 jgeo) 0) + (set! (-> v1-1 janim) 2) + (set! (-> v1-1 mgeo 0) (the-as uint 1)) + (set! (-> v1-1 lod-dist 0) 4095996000.0) + (set! *robotboss-redeco-sg* v1-1) + ) + +;; failed to figure out what this is: +(let + ((v1-2 + (new 'static 'skeleton-group + :art-group-name "robotboss-yelloweco" + :bounds (new 'static 'vector :w 819200.0) + :version #x6 + ) + ) + ) + (set! (-> v1-2 jgeo) 0) + (set! (-> v1-2 janim) 2) + (set! (-> v1-2 mgeo 0) (the-as uint 1)) + (set! (-> v1-2 lod-dist 0) 4095996000.0) + (set! *robotboss-yelloweco-sg* v1-2) + ) + +;; definition for function robotboss-cut-cam-exit +;; INFO: Return type mismatch symbol vs none. +(defbehavior robotboss-cut-cam-exit robotboss () + (set! (-> self valid-frames) 0) + (if (and *target* (logtest? (-> *target* state-flags) 256)) + (process-release? *target*) + ) + (set! (-> self skel status) (logand -2 (-> self skel status))) + (set! (-> self skip-cut) #f) + (none) + ) + +;; definition for function robotboss-cut-cam +;; Used lq/sq +(defbehavior robotboss-cut-cam robotboss ((arg0 float) (arg1 float) (arg2 int)) + (let ((f0-0 (ja-aframe-num 0))) + (cond + ((or (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + arg2 + ) + ) + (< f0-0 arg0) (< arg1 f0-0) + ) + (robotboss-cut-cam-exit) + ) + ((or + (and + (logtest? (-> *target* control unknown-surface00 flags) 2048) + (zero? (logand (-> *target* control status) 1)) + ) + (-> self skip-cut) + ) + (set! (-> self skip-cut) #t) + ) + (else + (logior! (-> self skel status) 1) + (process-grab? *target*) + (set! (-> *camera-other-root* quad) (-> self root-override trans quad)) + (let ((s5-1 (-> self node-list data 88 bone transform)) + (gp-1 (-> self node-list data 88 bone scale)) + ) + (let ((s4-1 (new 'stack-no-clear 'vector))) + (vector<-cspace! s4-1 (-> self node-list data 88)) + (set! (-> *camera-other-trans* quad) (-> s4-1 quad)) + ) + (vector-normalize-copy! + (the-as vector (-> *camera-other-matrix* vector)) + (the-as vector (-> s5-1 vector)) + (the-as float -1.0) + ) + (set! (-> *camera-other-matrix* vector 0 w) 0.0) + (vector-normalize-copy! + (-> *camera-other-matrix* vector 1) + (-> s5-1 vector 1) + (the-as float 1.0) + ) + (set! (-> *camera-other-matrix* vector 1 w) 0.0) + (vector-normalize-copy! + (-> *camera-other-matrix* vector 2) + (-> s5-1 vector 2) + (the-as float -1.0) + ) + (set! (-> *camera-other-matrix* vector 2 w) 0.0) + (vector-reset! (-> *camera-other-matrix* vector 3)) + (othercam-calc (-> gp-1 x)) + ) + (hide-hud-quick) + (set! *camera-look-through-other* 2) + (when (< (-> self valid-frames) 2) + (set-blackout-frames 10) + (+! (-> self valid-frames) 1) + ) + ) + ) + ) + (none) + ) + +;; definition for function robotboss-always-trans +;; ERROR: function was not converted to expressions. Cannot decompile. + +;; definition for function robotboss-shooting-trans +;; INFO: Return type mismatch object vs none. +(defbehavior robotboss-shooting-trans robotboss ((arg0 int)) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (vector<-cspace! gp-0 (-> self node-list data arg0)) + (let ((a1-2 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-2 from) self) + (set! (-> a1-2 num-params) 1) + (set! (-> a1-2 message) 'trans) + (set! (-> a1-2 param 0) (the-as uint gp-0)) + (send-event-function (handle->process (-> self shot-attractor)) a1-2) + ) + ) + (none) + ) + +;; definition for function robotboss-setup-for-hits +(defbehavior robotboss-setup-for-hits robotboss ((arg0 int) (arg1 int)) + (set! (-> self took-hit) #f) + (set! (-> self hits-to-go) arg1) + (set! (-> self vulnerable) arg0) + (let ((gp-0 (new 'stack 'sphere))) + (set! (-> gp-0 w) 4096.0) + (let ((s5-0 (get-process *default-dead-pool* manipy #x4000))) + (set! (-> self shot-attractor) (ppointer->handle (when s5-0 + (let + ((t9-2 + (method-of-type + manipy + activate + ) + ) + ) + (t9-2 + (the-as manipy s5-0) + self + 'manipy + (the-as + pointer + #x70004000 + ) + ) + ) + (run-now-in-process + s5-0 + manipy-init + (-> + self + root-override + trans + ) + (-> self entity) + *redring-sg* + gp-0 + ) + (-> s5-0 ppointer) + ) + ) + ) + ) + ) + (let ((a1-5 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-5 from) self) + (set! (-> a1-5 num-params) 1) + (set! (-> a1-5 message) 'attackable) + (set! (-> a1-5 param 0) (the-as uint #t)) + (send-event-function (handle->process (-> self shot-attractor)) a1-5) + ) + (let ((a1-6 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-6 from) self) + (set! (-> a1-6 num-params) 1) + (set! (-> a1-6 message) 'draw) + (set! (-> a1-6 param 0) (the-as uint #f)) + (send-event-function (handle->process (-> self shot-attractor)) a1-6) + ) + ) + +;; definition for function robotboss-yellow-eco-off +(defbehavior robotboss-yellow-eco-off robotboss () + (logior! (-> self alts 7 extra perm status) (entity-perm-status bit-9)) + (logior! (-> self alts 8 extra perm status) (entity-perm-status bit-9)) + (logior! (-> self alts 9 extra perm status) (entity-perm-status bit-9)) + (let + ((v0-0 + (logior (-> self alts 10 extra perm status) (entity-perm-status bit-9)) + ) + ) + (set! (-> self alts 10 extra perm status) v0-0) + v0-0 + ) + ) + +;; definition for function robotboss-yellow-eco-on +(defbehavior robotboss-yellow-eco-on robotboss () + (logclear! (-> self alts 7 extra perm status) (entity-perm-status bit-9)) + (logclear! (-> self alts 8 extra perm status) (entity-perm-status bit-9)) + (logclear! (-> self alts 9 extra perm status) (entity-perm-status bit-9)) + (let + ((v0-0 + (logclear (-> self alts 10 extra perm status) (entity-perm-status bit-9)) + ) + ) + (set! (-> self alts 10 extra perm status) v0-0) + v0-0 + ) + ) + +;; definition for function robotboss-anim-blend-loop +(defbehavior robotboss-anim-blend-loop robotboss ((arg0 art-joint-anim)) + (let ((s5-0 (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + ) + (ja-channel-push! 2 0) + (let ((s4-0 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! s4-0 arg0 num-func-identity) + (set! (-> s4-0 frame-num) 0.0) + ) + (let ((gp-1 (-> self skel root-channel 1))) + (joint-control-channel-group-eval! gp-1 s5-0 num-func-identity) + (set! (-> gp-1 frame-num) 0.0) + ) + ) + (while #t + (let ((a0-4 (-> self skel root-channel 0))) + (set! (-> a0-4 param 0) 1.0) + (joint-control-channel-group-eval! + a0-4 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + (let ((gp-2 (-> self skel root-channel 1))) + (set! (-> gp-2 frame-interp) (- 1.0 (ease-loc-t self))) + (set! (-> gp-2 param 0) 0.0) + (joint-control-channel-group-eval! + gp-2 + (the-as art-joint-anim #f) + num-func-chan + ) + ) + (suspend) + ) + (none) + ) + +;; definition for function robotboss-position +;; Used lq/sq +(defbehavior robotboss-position robotboss () + (let ((s5-0 (-> self entity extra trans)) + (gp-0 (new 'stack-no-clear 'vector)) + ) + (let ((s4-0 (new 'stack-no-clear 'matrix))) + (set! + (-> self loc-t) + (/ + (the float (- (-> *display* game-frame-counter) (-> self loc-t-start))) + (the float (-> self loc-t-duration)) + ) + ) + (set! (-> self loc-t) (fmin 1.0 (-> self loc-t))) + (vector-lerp! + gp-0 + (-> self old-loc) + (-> self desired-loc) + (ease-loc-t self) + ) + (matrix-rotate-y! s4-0 (-> gp-0 x)) + (set! (-> gp-0 x) 0.0) + (vector-matrix*! gp-0 gp-0 s4-0) + (vector+! (-> self root-override trans) gp-0 (-> self entity extra trans)) + (vector-negate! + (the-as vector (-> s4-0 vector)) + (the-as vector (-> s4-0 vector)) + ) + (vector-negate! (-> s4-0 vector 2) (-> s4-0 vector 2)) + (matrix->quaternion (-> self root-override quat) s4-0) + ) + (vector-! gp-0 s5-0 (-> self root-override trans)) + (set! (-> gp-0 y) 0.0) + (vector-normalize! gp-0 (the-as float 204800.0)) + (set! (-> gp-0 y) 32768.0) + (vector+! gp-0 gp-0 s5-0) + (let ((a1-12 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-12 from) self) + (set! (-> a1-12 num-params) 1) + (set! (-> a1-12 message) 'set-pivot) + (set! (-> a1-12 param 0) (the-as uint gp-0)) + (send-event-function *camera* a1-12) + ) + ) + (when (-> self alts 6) + (let ((a0-16 (-> self alts 6 extra process)) + (f0-10 (+ (-> self entity extra trans y) (-> self desired-pool-y))) + ) + (when a0-16 + (let ((v1-23 (new 'stack-no-clear 'vector))) + (set! + (-> v1-23 quad) + (-> (the-as process-drawable a0-16) root trans quad) + ) + (cond + ((< (-> v1-23 y) (+ -204.8 f0-10)) + (set! (-> v1-23 y) (+ 20.48 (-> v1-23 y))) + ) + ((< (+ 204.8 f0-10) (-> v1-23 y)) + (set! (-> v1-23 y) (+ -20.48 (-> v1-23 y))) + ) + ) + (let ((a1-22 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-22 from) self) + (set! (-> a1-22 num-params) 1) + (set! (-> a1-22 message) 'move-to) + (set! (-> a1-22 param 0) (the-as uint v1-23)) + (send-event-function a0-16 a1-22) + ) + ) + ) + ) + ) + ) + +;; definition for function robotboss-darkecobomb +;; Used lq/sq +(defbehavior robotboss-darkecobomb robotboss ((arg0 vector) (arg1 float)) + (+! (-> self children-spawned) 1) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (let ((s4-0 (new 'stack-no-clear 'vector))) + (vector<-cspace! gp-0 (-> self node-list data 60)) + (set! (-> s4-0 quad) (-> self entity extra trans quad)) + (vector+! s4-0 s4-0 arg0) + (let ((s3-1 (get-process *default-dead-pool* darkecobomb #x4000))) + (when s3-1 + (let ((t9-2 (method-of-type darkecobomb activate))) + (t9-2 + (the-as darkecobomb s3-1) + self + 'darkecobomb + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + s3-1 + darkecobomb-init-by-other + gp-0 + s4-0 + 61440.0 + 300 + arg1 + ) + (-> s3-1 ppointer) + ) + ) + ) + (let ((s5-1 (get-process *default-dead-pool* part-tracker #x4000))) + (when s5-1 + (let ((t9-5 (method-of-type part-tracker activate))) + (t9-5 + (the-as part-tracker s5-1) + *entity-pool* + 'part-tracker + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + s5-1 + part-tracker-init + (-> *part-group-id-table* 638) + 300 + #f + #f + #f + gp-0 + ) + (-> s5-1 ppointer) + ) + ) + ) + ) + +;; definition for function robotboss-bomb-handler +(defbehavior + robotboss-bomb-handler robotboss + ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (local-vars (v0-0 object)) + (case arg2 + (('flash) + (let ((f0-1 (* 0.0078125 (the-as float (-> arg3 param 0))))) + (set! (-> self palette-val) f0-1) + f0-1 + ) + ) + (('bomb-done) + (set! (-> self des-cam-entity) #f) + (let ((a1-1 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-1 from) self) + (set! (-> a1-1 num-params) 0) + (set! (-> a1-1 message) 'hide) + (let ((t9-0 send-event-function) + (v1-4 (-> self alts 11)) + ) + (t9-0 (if v1-4 + (-> v1-4 extra process) + ) + a1-1 + ) + ) + ) + (set! v0-0 (+ (-> self children-spawned) -2)) + (set! (-> self children-spawned) (the-as int v0-0)) + v0-0 + ) + (('bomb-going) + (set! (-> self des-cam-entity) #f) + (set! v0-0 #t) + (set! (-> self ignore-camera) (the-as symbol v0-0)) + v0-0 + ) + ) + ) + +;; definition for function robotboss-handler +;; INFO: Return type mismatch number vs object. +(defbehavior + robotboss-handler robotboss + ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (cond + ((= v1-0 'flash) + (let ((f0-1 (* 0.0078125 (the-as float (-> arg3 param 0))))) + (set! (-> self palette-val) f0-1) + f0-1 + ) + ) + ((= v1-0 'attack) + (when (>= arg1 2) + (case (-> arg3 param 1) + (('eco-yellow) + (let ((a0-5 (-> arg3 param 0))) + (when + (and + a0-5 + ((method-of-type + touching-shapes-entry + prims-touching? + ) + (the-as touching-shapes-entry a0-5) + (-> self root-override) + (the-as uint (-> self vulnerable)) + ) + ) + (when (> (-> self hits-to-go) 0) + (set! (-> self took-hit) #t) + (let + ((v0-0 (the-as number (+ (-> self hits-to-go) -1)))) + (set! (-> self hits-to-go) (the-as int v0-0)) + v0-0 + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + +;; 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)) + (the-as object (cond + ((= v1-0 'white-eco-picked-up) + (close-specific-task! + (game-task finalboss-movies) + (task-status unknown) + ) + (entity-birth-no-kill (-> self alts 5)) + (let ((a1-2 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-2 from) self) + (set! (-> a1-2 num-params) 0) + (set! (-> a1-2 message) 'play-anim) + (let ((t9-2 send-event-function) + (v1-2 (-> self alts 5)) + ) + (t9-2 (if v1-2 + (-> v1-2 extra process) + ) + a1-2 + ) + ) + ) + (dummy-18 self) + (deactivate self) + ) + (else + (robotboss-bomb-handler arg0 arg1 arg2 arg3) + ) + ) + ) + ) + ) + :enter + (behavior () + (set! (-> self state-time) (-> *display* game-frame-counter)) + (set! (-> self children-spawned) 0) + 0 + (none) + ) + :exit + (behavior () + (set! (-> self des-cam-entity) #f) + (let ((a1-0 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-0 from) self) + (set! (-> a1-0 num-params) 0) + (set! (-> a1-0 message) 'beam-off) + (let ((t9-0 send-event-function) + (v1-1 (-> self alts 3)) + ) + (t9-0 (if v1-1 + (-> v1-1 extra process) + ) + a1-0 + ) + ) + ) + (let ((a1-1 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-1 from) self) + (set! (-> a1-1 num-params) 0) + (set! (-> a1-1 message) 'beam-off) + (let ((t9-1 send-event-function) + (v1-5 (-> self alts 2)) + ) + (t9-1 (if v1-5 + (-> v1-5 extra process) + ) + a1-1 + ) + ) + ) + (let ((a1-2 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-2 from) self) + (set! (-> a1-2 num-params) 0) + (set! (-> a1-2 message) 'beam-off) + (let ((t9-2 send-event-function) + (v1-9 (-> self alts 1)) + ) + (t9-2 (if v1-9 + (-> v1-9 extra process) + ) + a1-2 + ) + ) + ) + (let ((a1-3 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-3 from) self) + (set! (-> a1-3 num-params) 0) + (set! (-> a1-3 message) 'beam-off) + (let ((t9-3 send-event-function) + (v1-13 (-> self alts 4)) + ) + (t9-3 (if v1-13 + (-> v1-13 extra process) + ) + a1-3 + ) + ) + ) + (let ((a1-4 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-4 from) self) + (set! (-> a1-4 num-params) 0) + (set! (-> a1-4 message) 'beam-off) + (send-event-function (handle->process (-> self white-eco)) a1-4) + ) + (none) + ) + :trans + (behavior () + (robotboss-always-trans (the-as state #f)) + (spool-push + *art-control* + "green-sagecage-outro-beat-boss-a" + 0 + self + (the-as float -1.0) + ) + (robotboss-position) + (none) + ) + :code + (behavior () + (let ((a0-0 (-> self skel root-channel 0))) + (set! + (-> a0-0 param 0) + (the float (+ (-> a0-0 frame-group data 0 length) -1)) + ) + (set! (-> a0-0 param 1) 1.0) + (joint-control-channel-group! + a0-0 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (while (not (ja-done? 0)) + (suspend) + (ja-eval) + ) + (ja-channel-push! 1 30) + (let ((v1-11 (-> self skel root-channel 0))) + (set! + (-> v1-11 frame-group) + (the-as art-joint-anim (-> self draw art-group data 32)) + ) + ) + (let ((a0-6 (-> self skel root-channel 0))) + (set! (-> a0-6 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-6 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-6 param 1) 1.0) + (set! (-> a0-6 frame-num) 0.0) + (joint-control-channel-group! a0-6 (if (> (-> self skel active-channels) 0) + (-> + self + skel + root-channel + 0 + frame-group + ) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (when (and (>= (ja-frame-num 0) 15.0) (< (-> self children-spawned) 1)) + (robotboss-darkecobomb + (new 'static 'vector :y 40960.0 :z 81920.0) + (-> self dda yellow-bomb-time) + ) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM20" + #t + (the-as vector #f) + ) + ) + (suspend) + (let ((a0-10 (-> self skel root-channel 0))) + (set! + (-> a0-10 param 0) + (the float (+ (-> a0-10 frame-group data 0 length) -1)) + ) + (set! (-> a0-10 param 1) 1.0) + (joint-control-channel-group-eval! + a0-10 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (ja-channel-push! 1 30) + (let ((v1-52 (-> self skel root-channel 0))) + (set! + (-> v1-52 frame-group) + (the-as art-joint-anim (-> self draw art-group data 32)) + ) + ) + (let ((a0-16 (-> self skel root-channel 0))) + (set! (-> a0-16 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-16 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-16 param 1) 1.0) + (set! (-> a0-16 frame-num) 0.0) + (joint-control-channel-group! a0-16 (if (> (-> self skel active-channels) 0) + (-> + self + skel + root-channel + 0 + frame-group + ) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (if (and (>= (ja-frame-num 0) 15.0) (< (-> self children-spawned) 2)) + (robotboss-darkecobomb + (new 'static 'vector :y 40960.0 :z -81920.0) + (+ -150.0 (-> self dda yellow-bomb-time)) + ) + ) + (suspend) + (let ((a0-19 (-> self skel root-channel 0))) + (set! + (-> a0-19 param 0) + (the float (+ (-> a0-19 frame-group data 0 length) -1)) + ) + (set! (-> a0-19 param 1) 1.0) + (joint-control-channel-group-eval! + a0-19 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (ja-channel-push! 1 30) + (let ((v1-93 (-> self skel root-channel 0))) + (set! + (-> v1-93 frame-group) + (the-as art-joint-anim (-> self draw art-group data 32)) + ) + ) + (let ((a0-25 (-> self skel root-channel 0))) + (set! (-> a0-25 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-25 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-25 param 1) 1.0) + (set! (-> a0-25 frame-num) 0.0) + (joint-control-channel-group! a0-25 (if (> (-> self skel active-channels) 0) + (-> + self + skel + root-channel + 0 + frame-group + ) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (if (and (>= (ja-frame-num 0) 15.0) (< (-> self children-spawned) 3)) + (robotboss-darkecobomb + (new 'static 'vector :x 81920.0 :y 40960.0) + (+ -300.0 (-> self dda yellow-bomb-time)) + ) + ) + (suspend) + (let ((a0-28 (-> self skel root-channel 0))) + (set! + (-> a0-28 param 0) + (the float (+ (-> a0-28 frame-group data 0 length) -1)) + ) + (set! (-> a0-28 param 1) 1.0) + (joint-control-channel-group-eval! + a0-28 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (ja-channel-push! 1 30) + (let ((v1-134 (-> self skel root-channel 0))) + (set! + (-> v1-134 frame-group) + (the-as art-joint-anim (-> self draw art-group data 32)) + ) + ) + (let ((a0-34 (-> self skel root-channel 0))) + (set! (-> a0-34 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-34 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-34 param 1) 1.0) + (set! (-> a0-34 frame-num) 0.0) + (joint-control-channel-group! a0-34 (if (> (-> self skel active-channels) 0) + (-> + self + skel + root-channel + 0 + frame-group + ) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (when (and (>= (ja-frame-num 0) 15.0) (< (-> self children-spawned) 4)) + (robotboss-darkecobomb + (new 'static 'vector :x -81920.0 :y 40960.0) + (+ -450.0 (-> self dda yellow-bomb-time)) + ) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "MAI-AM03" + #t + (the-as vector #f) + ) + (set! (-> self des-cam-entity) "camera-365") + ) + (suspend) + (let ((a0-38 (-> self skel root-channel 0))) + (set! + (-> a0-38 param 0) + (the float (+ (-> a0-38 frame-group data 0 length) -1)) + ) + (set! (-> a0-38 param 1) 1.0) + (joint-control-channel-group-eval! + a0-38 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (while #t + (when (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 30) + ) + ) + (ja-channel-push! 1 60) + (let ((v1-183 (-> self skel root-channel 0))) + (set! + (-> v1-183 frame-group) + (the-as art-joint-anim (-> self draw art-group data 30)) + ) + ) + ) + (let ((a0-48 (-> self skel root-channel 0))) + (set! (-> a0-48 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-48 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-48 param 1) 1.0) + (set! (-> a0-48 frame-num) 0.0) + (joint-control-channel-group! + a0-48 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-49 (-> self skel root-channel 0))) + (set! + (-> a0-49 param 0) + (the float (+ (-> a0-49 frame-group data 0 length) -1)) + ) + (set! (-> a0-49 param 1) 1.0) + (joint-control-channel-group-eval! + a0-49 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior robotboss) transform-post) + ) + +;; failed to figure out what this is: +(defstate robotboss-daxter-sacrifice-movie (robotboss) + :code + (behavior () + (set-blackout-frames #x7530) + (entity-birth-no-kill (-> self alts 5)) + (let ((a1-0 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-0 from) self) + (set! (-> a1-0 num-params) 0) + (set! (-> a1-0 message) 'play-anim) + (let ((t9-2 send-event-function) + (v1-1 (-> self alts 5)) + ) + (t9-2 (if v1-1 + (-> v1-1 extra process) + ) + a1-0 + ) + ) + ) + (suspend) + (while (movie?) + (suspend) + ) + (set-blackout-frames 0) + (go robotboss-yellow-dark-bomb-wait) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate robotboss-white-eco-movie (robotboss) + :enter + (behavior () + (logior! (-> self draw status) 2) + (set! (-> self children-spawned) 0) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (ja-post) + (none) + ) + :exit + (behavior () + (set! (-> self draw status) (logand -3 (-> self draw status))) + (none) + ) + :trans + (behavior () + (spool-push + *art-control* + "green-sagecage-daxter-sacrifice" + 0 + self + (the-as float -1.0) + ) + (when + (and + (< (-> self children-spawned) 1) + (>= (- (-> *display* base-frame-counter) (-> self state-time)) 285) + ) + (+! (-> self children-spawned) 1) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (set! (-> gp-0 quad) (-> self entity extra trans quad)) + (set! (-> gp-0 y) (+ 81920.0 (-> gp-0 y))) + (let ((s5-0 (get-process *default-dead-pool* light-eco-mother #x4000))) + (set! (-> self white-eco) (ppointer->handle (when s5-0 + (let + ((t9-2 + (method-of-type + light-eco-mother + activate + ) + ) + ) + (t9-2 + (the-as + light-eco-mother + s5-0 + ) + self + 'light-eco-mother + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + s5-0 + light-eco-mother-init-by-other + (-> self entity) + gp-0 + ) + (-> s5-0 ppointer) + ) + ) + ) + ) + ) + ) + (none) + ) + :code + (behavior () + (let ((a1-0 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-0 from) self) + (set! (-> a1-0 num-params) 1) + (set! (-> a1-0 message) 'open) + (set! (-> a1-0 param 0) (the-as uint (-> *part-group-id-table* 674))) + (let ((t9-0 send-event-function) + (v1-4 (-> self alts 3)) + ) + (t9-0 (if v1-4 + (-> v1-4 extra process) + ) + a1-0 + ) + ) + ) + (let ((a1-1 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-1 from) self) + (set! (-> a1-1 num-params) 1) + (set! (-> a1-1 message) 'open) + (set! (-> a1-1 param 0) (the-as uint (-> *part-group-id-table* 675))) + (let ((t9-1 send-event-function) + (v1-11 (-> self alts 2)) + ) + (t9-1 (if v1-11 + (-> v1-11 extra process) + ) + a1-1 + ) + ) + ) + (let ((a1-2 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-2 from) self) + (set! (-> a1-2 num-params) 1) + (set! (-> a1-2 message) 'open) + (set! (-> a1-2 param 0) (the-as uint (-> *part-group-id-table* 676))) + (let ((t9-2 send-event-function) + (v1-18 (-> self alts 1)) + ) + (t9-2 (if v1-18 + (-> v1-18 extra process) + ) + a1-2 + ) + ) + ) + (let ((a1-3 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-3 from) self) + (set! (-> a1-3 num-params) 1) + (set! (-> a1-3 message) 'open) + (set! (-> a1-3 param 0) (the-as uint (-> *part-group-id-table* 677))) + (let ((t9-3 send-event-function) + (v1-25 (-> self alts 4)) + ) + (t9-3 (if v1-25 + (-> v1-25 extra process) + ) + a1-3 + ) + ) + ) + (let ((a1-4 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-4 from) self) + (set! (-> a1-4 num-params) 3) + (set! (-> a1-4 message) 'beam-on) + (set! (-> a1-4 param 0) (the-as uint (-> *part-group-id-table* 666))) + (set! (-> a1-4 param 1) (the-as uint (-> *part-group-id-table* 666))) + (set! (-> a1-4 param 2) (the-as uint (-> self entity extra trans))) + (let ((t9-4 send-event-function) + (v1-37 (-> self alts 3)) + ) + (t9-4 (if v1-37 + (-> v1-37 extra process) + ) + a1-4 + ) + ) + ) + (let ((a1-5 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-5 from) self) + (set! (-> a1-5 num-params) 3) + (set! (-> a1-5 message) 'beam-on) + (set! (-> a1-5 param 0) (the-as uint (-> *part-group-id-table* 672))) + (set! (-> a1-5 param 1) (the-as uint (-> *part-group-id-table* 672))) + (set! (-> a1-5 param 2) (the-as uint (-> self entity extra trans))) + (let ((t9-5 send-event-function) + (v1-49 (-> self alts 2)) + ) + (t9-5 (if v1-49 + (-> v1-49 extra process) + ) + a1-5 + ) + ) + ) + (let ((a1-6 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-6 from) self) + (set! (-> a1-6 num-params) 3) + (set! (-> a1-6 message) 'beam-on) + (set! (-> a1-6 param 0) (the-as uint (-> *part-group-id-table* 668))) + (set! (-> a1-6 param 1) (the-as uint (-> *part-group-id-table* 668))) + (set! (-> a1-6 param 2) (the-as uint (-> self entity extra trans))) + (let ((t9-6 send-event-function) + (v1-61 (-> self alts 1)) + ) + (t9-6 (if v1-61 + (-> v1-61 extra process) + ) + a1-6 + ) + ) + ) + (let ((a1-7 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-7 from) self) + (set! (-> a1-7 num-params) 3) + (set! (-> a1-7 message) 'beam-on) + (set! (-> a1-7 param 0) (the-as uint (-> *part-group-id-table* 670))) + (set! (-> a1-7 param 1) (the-as uint (-> *part-group-id-table* 670))) + (set! (-> a1-7 param 2) (the-as uint (-> self entity extra trans))) + (let ((t9-7 send-event-function) + (v1-73 (-> self alts 4)) + ) + (t9-7 (if v1-73 + (-> v1-73 extra process) + ) + a1-7 + ) + ) + ) + (let* ((gp-0 (get-process *default-dead-pool* finalbosscam #x4000)) + (gp-1 (ppointer->handle (when gp-0 + (let + ((t9-9 + (method-of-type finalbosscam activate) + ) + ) + (t9-9 + (the-as finalbosscam gp-0) + self + 'finalbosscam + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + gp-0 + finalbosscam-init-by-other + (-> self entity) + ) + (-> gp-0 ppointer) + ) + ) + ) + ) + (let ((a1-11 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-11 from) self) + (set! (-> a1-11 num-params) 0) + (set! (-> a1-11 message) 'play-anim) + (send-event-function (handle->process gp-1) a1-11) + ) + (suspend) + (while (movie?) + (suspend) + ) + (let ((a0-18 (handle->process gp-1))) + (if a0-18 + (deactivate a0-18) + ) + ) + ) + (case (get-task-status (game-task finalboss-movies)) + (((task-status unknown)) + (go robotboss-daxter-sacrifice-movie) + ) + (else + (go robotboss-yellow-dark-bomb-wait) + ) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate robotboss-yellow-dark-bomb (robotboss) + :enter + (behavior () + (set! (-> self old-loc quad) (-> self desired-loc quad)) + (set-vector! (-> self desired-loc) 16384.0 -81920.0 716800.0 1.0) + (set! (-> self loc-t) 0.0) + (set! (-> self loc-t-start) (-> *display* game-frame-counter)) + (set! (-> self loc-t-duration) 1200) + (set! (-> self desired-pool-y) -16384.0) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM01" + #t + (the-as vector #f) + ) + (none) + ) + :trans + (behavior () + (robotboss-always-trans (the-as state #f)) + (spool-push + *art-control* + "finalbosscam-white-eco" + 0 + self + (the-as float -1.0) + ) + (if (>= (-> self loc-t) 1.0) + (go robotboss-white-eco-movie) + ) + (robotboss-position) + (none) + ) + :code + (behavior () + (ja-channel-push! 1 60) + (let ((v1-2 (-> self skel root-channel 0))) + (set! + (-> v1-2 frame-group) + (the-as art-joint-anim (-> self draw art-group data 31)) + ) + ) + (let ((a0-4 (-> self skel root-channel 0))) + (set! (-> a0-4 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-4 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-4 param 1) 1.0) + (set! (-> a0-4 frame-num) 0.0) + (joint-control-channel-group! a0-4 (if (> (-> self skel active-channels) 0) + (-> + self + skel + root-channel + 0 + frame-group + ) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-5 (-> self skel root-channel 0))) + (set! + (-> a0-5 param 0) + (the float (+ (-> a0-5 frame-group data 0 length) -1)) + ) + (set! (-> a0-5 param 1) 1.0) + (joint-control-channel-group-eval! + a0-5 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (when (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 30) + ) + ) + (ja-channel-push! 1 60) + (let ((v1-41 (-> self skel root-channel 0))) + (set! + (-> v1-41 frame-group) + (the-as art-joint-anim (-> self draw art-group data 30)) + ) + ) + ) + (while #t + (let ((a0-15 (-> self skel root-channel 0))) + (set! (-> a0-15 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-15 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-15 param 1) 1.0) + (set! (-> a0-15 frame-num) 0.0) + (joint-control-channel-group! + a0-15 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-16 (-> self skel root-channel 0))) + (set! + (-> a0-16 param 0) + (the float (+ (-> a0-16 frame-group data 0 length) -1)) + ) + (set! (-> a0-16 param 1) 1.0) + (joint-control-channel-group-eval! + a0-16 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior robotboss) transform-post) + ) + +;; definition for function robotboss-yellowshot +;; INFO: Return type mismatch sound-id vs none. +;; Used lq/sq +(defbehavior robotboss-yellowshot robotboss () + (+! (-> self children-spawned) 1) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (let ((s5-0 (new 'stack-no-clear 'vector))) + (vector<-cspace! gp-0 (-> self node-list data 21)) + (set! (-> gp-0 y) 1972633.6) + (if *target* + (set! (-> s5-0 quad) (-> (target-pos 0) quad)) + (set! (-> s5-0 quad) (-> self entity extra trans quad)) + ) + (set! (-> s5-0 y) (+ 8192.0 (-> self entity extra trans y))) + (vector-! s5-0 s5-0 gp-0) + (vector-normalize! s5-0 (the-as float 819200.0)) + (vector+! s5-0 s5-0 gp-0) + (let ((s4-1 (get-process *default-dead-pool* yellowshot #x4000))) + (when s4-1 + (let ((t9-4 (method-of-type yellowshot activate))) + (t9-4 + (the-as yellowshot s4-1) + self + 'yellowshot + (the-as pointer #x70004000) + ) + ) + (run-now-in-process s4-1 yellowshot-init-by-other gp-0 s5-0 0.0 750) + (-> s4-1 ppointer) + ) + ) + ) + (let ((a1-9 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-9 from) self) + (set! (-> a1-9 num-params) 1) + (set! (-> a1-9 message) 'flash) + (set! (-> a1-9 param 0) (the-as uint 255.0)) + (send-event-function self a1-9) + ) + (let ((s5-1 (get-process *default-dead-pool* part-tracker #x4000))) + (when s5-1 + (let ((t9-8 (method-of-type part-tracker activate))) + (t9-8 + (the-as part-tracker s5-1) + *entity-pool* + 'part-tracker + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + s5-1 + part-tracker-init + (-> *part-group-id-table* 642) + 300 + #f + #f + #f + gp-0 + ) + (-> s5-1 ppointer) + ) + ) + ) + (sound-play-by-name + (static-sound-name "bfg-fire") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + (none) + ) + +;; definition for function robotboss-is-yellow-hit +(defbehavior robotboss-is-yellow-hit robotboss () + (or (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 28) + ) + (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 35) + ) + ) + ) + +;; definition for function robotboss-time-to-shoot-yellow +(defbehavior robotboss-time-to-shoot-yellow robotboss () + (>= + (- (-> *display* game-frame-counter) (-> self state-time)) + (+ (-> self till-next-shot) 750) + ) + ) + +;; 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 + (('hit-jak) + (let* ((v1-2 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-3 (the-as number (logior #x3f800000 v1-2))) + (f0-2 (+ -1.0 (the-as float v1-3))) + ) + (cond + ((< 0.75 f0-2) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM10" + #t + (the-as vector #f) + ) + ) + ((< 0.5 f0-2) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM12" + #t + (the-as vector #f) + ) + ) + ((< 0.25 f0-2) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM15" + #t + (the-as vector #f) + ) + ) + (else + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "MAI-AM03" + #t + (the-as vector #f) + ) + ) + ) + ) + ) + (('missed-jak) + (let* ((v1-13 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-14 (the-as number (logior #x3f800000 v1-13))) + (f0-5 (+ -1.0 (the-as float v1-14))) + ) + (if (< 0.5 f0-5) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM14" + #t + (the-as vector #f) + ) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "MAI-AM02" + #t + (the-as vector #f) + ) + ) + ) + ) + (else + (robotboss-handler arg0 arg1 arg2 arg3) + ) + ) + ) + :enter + (behavior () + (set! (-> self hits-to-go) -1) + (set! (-> self state-time) (-> *display* game-frame-counter)) + (set! (-> self till-next-shot) 300) + (set! (-> self use-interesting) #t) + (set! (-> self keep-charging) #f) + (none) + ) + :exit + (behavior () + (let ((a0-1 (handle->process (-> self shot-attractor)))) + (if a0-1 + (deactivate a0-1) + ) + ) + (let ((a1-1 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-1 from) self) + (set! (-> a1-1 num-params) 1) + (set! (-> a1-1 message) 'open) + (set! (-> a1-1 param 0) (the-as uint (-> *part-group-id-table* 677))) + (let ((t9-1 send-event-function) + (v1-10 (-> self alts 4)) + ) + (t9-1 (if v1-10 + (-> v1-10 extra process) + ) + a1-1 + ) + ) + ) + (let ((a1-2 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-2 from) self) + (set! (-> a1-2 num-params) 1) + (set! (-> a1-2 message) 'open) + (set! (-> a1-2 param 0) (the-as uint 0.4)) + (let ((t9-2 send-event-function) + (v1-17 (-> self alts 0)) + ) + (t9-2 (if v1-17 + (-> v1-17 extra process) + ) + a1-2 + ) + ) + ) + (set! + (-> + (the-as collide-shape-prim-group (-> self root-override root-prim)) + prims + 3 + collide-with + ) + (the-as uint 0) + ) + (set! + (-> + (the-as collide-shape-prim-group (-> self root-override root-prim)) + prims + 3 + prim-core + collide-as + ) + (the-as uint 0) + ) + (set! (-> self use-interesting) #f) + (let ((a1-3 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-3 from) self) + (set! (-> a1-3 num-params) 1) + (set! (-> a1-3 message) 'point-of-interest) + (set! (-> a1-3 param 0) (the-as uint #f)) + (send-event-function *camera* a1-3) + ) + (if (nonzero? (-> self yellow-gun)) + (set-mode! (-> self yellow-gun) (joint-mod-handler-mode flex-blend)) + ) + (robotboss-yellow-eco-off) + (robotboss-cut-cam-exit) + (stop! (-> self looping-sound 3)) + (none) + ) + :trans + (behavior () + (robotboss-always-trans robotboss-yellow-dark-bomb) + (robotboss-shooting-trans 21) + (cond + ((zero? (-> self hits-to-go)) + (set! (-> self keep-charging) #f) + (stop! (-> self looping-sound 3)) + (robotboss-yellow-eco-off) + (set! (-> self took-hit) #f) + (+! (-> self hits-to-go) -1) + (ja-channel-push! 1 30) + (let ((v1-8 (-> self skel root-channel 0))) + (set! + (-> v1-8 frame-group) + (the-as art-joint-anim (-> self draw art-group data 35)) + ) + ) + (set! (-> self yellow-smoke) #t) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (vector<-cspace! gp-0 (-> self node-list data 27)) + (let ((s5-0 (get-process *default-dead-pool* part-tracker #x4000))) + (when s5-0 + (let ((t9-7 (method-of-type part-tracker activate))) + (t9-7 + (the-as part-tracker s5-0) + *entity-pool* + 'part-tracker + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + s5-0 + part-tracker-init + (-> *part-group-id-table* 653) + 300 + #f + #f + #f + gp-0 + ) + (-> s5-0 ppointer) + ) + ) + ) + (let* ((s5-1 (get-process *default-dead-pool* manipy #x4000)) + (gp-1 (when s5-1 + (let ((t9-10 (method-of-type manipy activate))) + (t9-10 + (the-as manipy s5-1) + self + 'manipy + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + s5-1 + manipy-init + (-> self root-override trans) + (-> self entity) + *robotboss-yelloweco-sg* + #f + ) + (-> s5-1 ppointer) + ) + ) + ) + (let ((a1-8 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-8 from) self) + (set! (-> a1-8 num-params) 1) + (set! (-> a1-8 message) 'flash) + (set! (-> a1-8 param 0) (the-as uint 255.0)) + (send-event-function (ppointer->process (-> self parent)) a1-8) + ) + (let ((a1-9 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-9 from) self) + (set! (-> a1-9 num-params) 1) + (set! (-> a1-9 message) 'anim-mode) + (set! (-> a1-9 param 0) (the-as uint 'play1)) + (send-event-function (ppointer->process gp-1) a1-9) + ) + (let ((a1-10 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-10 from) self) + (set! (-> a1-10 num-params) 1) + (set! (-> a1-10 message) 'rot-quat) + (set! (-> a1-10 param 0) (the-as uint (-> self root-override quat))) + (send-event-function (ppointer->process gp-1) a1-10) + ) + (let ((a1-11 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-11 from) self) + (set! (-> a1-11 num-params) 1) + (set! (-> a1-11 message) 'art-joint-anim) + (set! + (-> a1-11 param 0) + (the-as uint "robotboss-yelloweco-yellow-last-hit") + ) + (send-event-function (ppointer->process gp-1) a1-11) + ) + ) + ) + ((and (> (-> self hits-to-go) 0) (-> self took-hit)) + (if + (not + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM17" + #t + (the-as vector #f) + ) + ) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "MAI-AM06" + #t + (the-as vector #f) + ) + ) + (set! (-> self took-hit) #f) + (ja-channel-push! 1 30) + (let ((v1-54 (-> self skel root-channel 0))) + (set! + (-> v1-54 frame-group) + (the-as art-joint-anim (-> self draw art-group data 28)) + ) + ) + ) + ) + (robotboss-position) + (robotboss-cut-cam + (the-as float 5.0) + (the-as float 50.0) + (the-as int (-> self draw art-group data 29)) + ) + (when + (and + (-> self keep-charging) + (>= + (- (-> *display* game-frame-counter) (-> self state-time)) + (-> self till-next-shot) + ) + ) + (let ((gp-2 (new 'stack-no-clear 'vector))) + (update! (-> self looping-sound 3)) + (vector<-cspace! gp-2 (-> self node-list data 21)) + (spawn (-> self particle 6) gp-2) + ) + ) + (none) + ) + :code + (behavior () + (let ((a0-0 (-> self skel root-channel 0))) + (set! + (-> a0-0 param 0) + (the float (+ (-> a0-0 frame-group data 0 length) -1)) + ) + (set! (-> a0-0 param 1) 1.0) + (joint-control-channel-group! + a0-0 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (while (not (ja-done? 0)) + (suspend) + (ja-eval) + ) + (robotboss-setup-for-hits 8 (-> self dda yellow-gun-hits)) + (if (nonzero? (-> self yellow-gun)) + (set-mode! (-> self yellow-gun) (joint-mod-handler-mode look-at)) + ) + (while #t + (when (not (robotboss-time-to-shoot-yellow)) + (when (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 26) + ) + ) + (ja-channel-push! 1 60) + (let ((v1-23 (-> self skel root-channel 0))) + (set! + (-> v1-23 frame-group) + (the-as art-joint-anim (-> self draw art-group data 26)) + ) + ) + ) + (when + (>= + (- (-> *display* game-frame-counter) (-> self state-time)) + (-> self till-next-shot) + ) + (let ((v1-30 (-> self skel root-channel 0))) + (set! (-> v1-30 num-func) num-func-identity) + (set! (-> v1-30 frame-num) 15.0) + ) + ) + (while + (not + (or + (>= + (- (-> *display* game-frame-counter) (-> self state-time)) + (-> self till-next-shot) + ) + (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 35) + ) + ) + ) + (when (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 26) + ) + ) + (ja-channel-push! 1 60) + (let ((v1-40 (-> self skel root-channel 0))) + (set! + (-> v1-40 frame-group) + (the-as art-joint-anim (-> self draw art-group data 26)) + ) + ) + ) + (let ((a0-24 (-> self skel root-channel 0))) + (set! (-> a0-24 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-24 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-24 param 1) 1.0) + (set! (-> a0-24 frame-num) 0.0) + (joint-control-channel-group! + a0-24 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (if (robotboss-is-yellow-hit) + (goto cfg-36) + ) + (suspend) + (let ((a0-25 (-> self skel root-channel 0))) + (set! + (-> a0-25 param 0) + (the float (+ (-> a0-25 frame-group data 0 length) -1)) + ) + (set! (-> a0-25 param 1) 1.0) + (joint-control-channel-group-eval! + a0-25 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (label cfg-36) + (when (not (robotboss-is-yellow-hit)) + (when (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 26) + ) + ) + (ja-channel-push! 1 60) + (let ((v1-93 (-> self skel root-channel 0))) + (set! + (-> v1-93 frame-group) + (the-as art-joint-anim (-> self draw art-group data 26)) + ) + ) + ) + (let ((a0-41 (-> self skel root-channel 0))) + (set! (-> a0-41 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-41 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-41 param 1) 1.0) + (set! (-> a0-41 frame-num) 0.0) + (joint-control-channel-group! + a0-41 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (if (robotboss-is-yellow-hit) + (goto cfg-55) + ) + (if (< 15.0 (ja-aframe-num 0)) + (set! (-> self keep-charging) #t) + ) + (suspend) + (let ((a0-43 (-> self skel root-channel 0))) + (set! + (-> a0-43 param 0) + (the float (+ (-> a0-43 frame-group data 0 length) -1)) + ) + (set! (-> a0-43 param 1) 1.0) + (joint-control-channel-group-eval! + a0-43 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + ) + (label cfg-55) + (when (and (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 35) + ) + ) + (or + (robotboss-time-to-shoot-yellow) + (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 28) + ) + ) + ) + ) + (set! (-> self state-time) (-> *display* game-frame-counter)) + (let* ((f30-1 (-> self dda yellow-shot-time-min)) + (f28-0 (-> self dda yellow-shot-time-rnd)) + (v1-147 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-148 (the-as number (logior #x3f800000 v1-147))) + ) + (set! + (-> self till-next-shot) + (the + int + (+ f30-1 (the float (the int (* f28-0 (+ -1.0 (the-as float v1-148)))))) + ) + ) + ) + (stop! (-> self looping-sound 3)) + (robotboss-yellowshot) + (robotboss-yellow-eco-on) + (let* ((v1-154 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-155 (the-as number (logior #x3f800000 v1-154))) + (f0-29 (+ -1.0 (the-as float v1-155))) + ) + (cond + ((< 0.8333333 f0-29) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM04" + #t + (the-as vector #f) + ) + ) + ((< 0.6666667 f0-29) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM09" + #t + (the-as vector #f) + ) + ) + ((< 0.5 f0-29) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM08" + #t + (the-as vector #f) + ) + ) + ((< 0.33333334 f0-29) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM10" + #t + (the-as vector #f) + ) + ) + ((< 0.16666667 f0-29) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "MAI-AM03" + #t + (the-as vector #f) + ) + ) + (else + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "MAI-AM02" + #t + (the-as vector #f) + ) + ) + ) + ) + (ja-channel-push! 1 15) + (let ((v1-176 (-> self skel root-channel 0))) + (set! + (-> v1-176 frame-group) + (the-as art-joint-anim (-> self draw art-group data 27)) + ) + ) + ) + (let ((a0-70 (-> self skel root-channel 0))) + (set! (-> a0-70 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-70 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-70 param 1) 1.0) + (set! (-> a0-70 frame-num) 0.0) + (joint-control-channel-group! + a0-70 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-71 (-> self skel root-channel 0))) + (set! + (-> a0-71 param 0) + (the float (+ (-> a0-71 frame-group data 0 length) -1)) + ) + (set! (-> a0-71 param 1) 1.0) + (joint-control-channel-group-eval! + a0-71 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (when (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 35) + ) + (let ((a0-77 (-> self skel root-channel 0))) + (set! + (-> a0-77 frame-group) + (the-as art-joint-anim (-> self draw art-group data 29)) + ) + (set! + (-> a0-77 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 29)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-77 param 1) 1.0) + (set! (-> a0-77 frame-num) 0.0) + (joint-control-channel-group! + a0-77 + (the-as art-joint-anim (-> self draw art-group data 29)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-78 (-> self skel root-channel 0))) + (set! + (-> a0-78 param 0) + (the float (+ (-> a0-78 frame-group data 0 length) -1)) + ) + (set! (-> a0-78 param 1) 1.0) + (joint-control-channel-group-eval! + a0-78 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (go robotboss-yellow-dark-bomb) + ) + ) + (none) + ) + :post + (behavior () + (when *target* + (if (nonzero? (-> self yellow-gun)) + (set-target! (-> self yellow-gun) (target-pos 5)) + ) + ) + (transform-post) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate robotboss-yellow (robotboss) + :event + robotboss-handler + :enter + (behavior () + (set! (-> self old-loc quad) (-> self desired-loc quad)) + (set-vector! (-> self desired-loc) 13653.333 77824.0 491520.0 1.0) + (set! (-> self loc-t) 0.0) + (set! (-> self loc-t-start) (-> *display* game-frame-counter)) + (set! (-> self loc-t-duration) 900) + (set! (-> self desired-pool-y) -18432.0) + (none) + ) + :trans + (behavior () + (robotboss-always-trans robotboss-yellow-wait) + (if (>= (-> self loc-t) 1.0) + (go robotboss-yellow-wait) + ) + (robotboss-position) + (none) + ) + :code + (behavior () + (let ((a0-0 (-> self skel root-channel 0))) + (set! + (-> a0-0 param 0) + (the float (+ (-> a0-0 frame-group data 0 length) -1)) + ) + (set! (-> a0-0 param 1) 1.0) + (joint-control-channel-group! + a0-0 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (while (not (ja-done? 0)) + (suspend) + (ja-eval) + ) + (ja-channel-push! 1 60) + (let ((v1-11 (-> self skel root-channel 0))) + (set! + (-> v1-11 frame-group) + (the-as art-joint-anim (-> self draw art-group data 25)) + ) + ) + (let ((a0-6 (-> self skel root-channel 0))) + (set! (-> a0-6 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-6 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-6 param 1) 1.0) + (set! (-> a0-6 frame-num) 0.0) + (joint-control-channel-group! a0-6 (if (> (-> self skel active-channels) 0) + (-> + self + skel + root-channel + 0 + frame-group + ) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-7 (-> self skel root-channel 0))) + (set! + (-> a0-7 param 0) + (the float (+ (-> a0-7 frame-group data 0 length) -1)) + ) + (set! (-> a0-7 param 1) 1.0) + (joint-control-channel-group-eval! + a0-7 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (while #t + (cond + ((and + *target* + (< (+ 81920.0 (-> self entity extra trans y)) (-> (target-pos 0) y)) + ) + (when (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 23) + ) + ) + (ja-channel-push! 1 240) + (let ((v1-55 (-> self skel root-channel 0))) + (set! + (-> v1-55 frame-group) + (the-as art-joint-anim (-> self draw art-group data 23)) + ) + ) + ) + ) + ((not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 21) + ) + ) + (ja-channel-push! 1 60) + (let ((v1-64 (-> self skel root-channel 0))) + (set! + (-> v1-64 frame-group) + (the-as art-joint-anim (-> self draw art-group data 21)) + ) + ) + ) + ) + (let ((a0-27 (-> self skel root-channel 0))) + (set! (-> a0-27 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-27 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-27 param 1) 1.0) + (set! (-> a0-27 frame-num) 0.0) + (joint-control-channel-group! + a0-27 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-28 (-> self skel root-channel 0))) + (set! + (-> a0-28 param 0) + (the float (+ (-> a0-28 frame-group data 0 length) -1)) + ) + (set! (-> a0-28 param 1) 1.0) + (joint-control-channel-group-eval! + a0-28 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior robotboss) transform-post) + ) + +;; failed to figure out what this is: +(defstate robotboss-red-dark-bomb-wait (robotboss) + :event + robotboss-bomb-handler + :enter + (behavior () + (set! (-> self children-spawned) 0) + (logior! (-> self alts 11 extra perm status) (entity-perm-status bit-3)) + (none) + ) + :exit + (behavior () + (set! (-> self ignore-camera) #f) + (set! (-> self des-cam-entity) #f) + (logclear! (-> self alts 11 extra perm status) (entity-perm-status bit-3)) + (none) + ) + :trans + (behavior () + (robotboss-always-trans robotboss-yellow) + (if + (and + (< (-> self children-spawned) 0) + (or + (not *target*) + (!= (-> *target* control unknown-surface00 name) 'launch-jump) + ) + ) + (go robotboss-yellow) + ) + (robotboss-position) + (none) + ) + :code + (behavior () + (let ((a0-0 (-> self skel root-channel 0))) + (set! + (-> a0-0 param 0) + (the float (+ (-> a0-0 frame-group data 0 length) -1)) + ) + (set! (-> a0-0 param 1) 1.0) + (joint-control-channel-group! + a0-0 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (while (not (ja-done? 0)) + (suspend) + (ja-eval) + ) + (ja-channel-push! 1 30) + (let ((v1-11 (-> self skel root-channel 0))) + (set! + (-> v1-11 frame-group) + (the-as art-joint-anim (-> self draw art-group data 24)) + ) + ) + (let ((a0-6 (-> self skel root-channel 0))) + (set! (-> a0-6 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-6 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-6 param 1) 1.0) + (set! (-> a0-6 frame-num) 0.0) + (joint-control-channel-group! a0-6 (if (> (-> self skel active-channels) 0) + (-> + self + skel + root-channel + 0 + frame-group + ) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (when (and (>= (ja-frame-num 0) 15.0) (< (-> self children-spawned) 1)) + (robotboss-darkecobomb + (new 'static 'vector :y 32768.0) + (-> self dda red-bomb-time) + ) + (set! (-> self des-cam-entity) "camera-365") + ) + (suspend) + (let ((a0-9 (-> self skel root-channel 0))) + (set! + (-> a0-9 param 0) + (the float (+ (-> a0-9 frame-group data 0 length) -1)) + ) + (set! (-> a0-9 param 1) 1.0) + (joint-control-channel-group-eval! + a0-9 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (while #t + (when (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 21) + ) + ) + (ja-channel-push! 1 60) + (let ((v1-57 (-> self skel root-channel 0))) + (set! + (-> v1-57 frame-group) + (the-as art-joint-anim (-> self draw art-group data 21)) + ) + ) + ) + (let ((a0-19 (-> self skel root-channel 0))) + (set! (-> a0-19 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-19 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-19 param 1) 1.0) + (set! (-> a0-19 frame-num) 0.0) + (joint-control-channel-group! + a0-19 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-20 (-> self skel root-channel 0))) + (set! + (-> a0-20 param 0) + (the float (+ (-> a0-20 frame-group data 0 length) -1)) + ) + (set! (-> a0-20 param 1) 1.0) + (joint-control-channel-group-eval! + a0-20 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior robotboss) transform-post) + ) + +;; failed to figure out what this is: +(defstate robotboss-red-dark-bomb (robotboss) + :enter + (behavior () + (set! (-> self old-loc quad) (-> self desired-loc quad)) + (set-vector! (-> self desired-loc) 0.0 -81920.0 716800.0 1.0) + (set! (-> self loc-t) 0.0) + (set! (-> self loc-t-start) (-> *display* game-frame-counter)) + (set! (-> self loc-t-duration) 900) + (set! (-> self desired-pool-y) -20480.0) + (none) + ) + :trans + (behavior () + (robotboss-always-trans robotboss-red-dark-bomb-wait) + (robotboss-position) + (if (>= (-> self loc-t) 1.0) + (go robotboss-red-dark-bomb-wait) + ) + (none) + ) + :code + (behavior () + (ja-channel-push! 1 60) + (let ((v1-2 (-> self skel root-channel 0))) + (set! + (-> v1-2 frame-group) + (the-as art-joint-anim (-> self draw art-group data 22)) + ) + ) + (let ((a0-4 (-> self skel root-channel 0))) + (set! (-> a0-4 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-4 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-4 param 1) 1.0) + (set! (-> a0-4 frame-num) 0.0) + (joint-control-channel-group! a0-4 (if (> (-> self skel active-channels) 0) + (-> + self + skel + root-channel + 0 + frame-group + ) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-5 (-> self skel root-channel 0))) + (set! + (-> a0-5 param 0) + (the float (+ (-> a0-5 frame-group data 0 length) -1)) + ) + (set! (-> a0-5 param 1) 1.0) + (joint-control-channel-group-eval! + a0-5 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (when (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 21) + ) + ) + (ja-channel-push! 1 60) + (let ((v1-41 (-> self skel root-channel 0))) + (set! + (-> v1-41 frame-group) + (the-as art-joint-anim (-> self draw art-group data 21)) + ) + ) + ) + (while #t + (let ((a0-15 (-> self skel root-channel 0))) + (set! (-> a0-15 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-15 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-15 param 1) 1.0) + (set! (-> a0-15 frame-num) 0.0) + (joint-control-channel-group! + a0-15 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-16 (-> self skel root-channel 0))) + (set! + (-> a0-16 param 0) + (the float (+ (-> a0-16 frame-group data 0 length) -1)) + ) + (set! (-> a0-16 param 1) 1.0) + (joint-control-channel-group-eval! + a0-16 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior robotboss) transform-post) + ) + +;; definition of type redshot-launch-info +(deftype redshot-launch-info (structure) + ((dest vector :inline :offset-assert 0) + (flight-time int64 :offset-assert 16) + (stall-time int64 :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) + +;; definition for method 3 of type redshot-launch-info +(defmethod inspect redshot-launch-info ((obj redshot-launch-info)) + (format #t "[~8x] ~A~%" obj 'redshot-launch-info) + (format #t "~Tdest: #~%" (-> obj dest)) + (format #t "~Tflight-time: ~D~%" (-> obj flight-time)) + (format #t "~Tstall-time: ~D~%" (-> obj stall-time)) + obj + ) + +;; definition of type redshot-launch-array +(deftype redshot-launch-array (structure) + ((info redshot-launch-info 6 :inline :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #xc0 + :flag-assert #x9000000c0 + ) + +;; definition for method 3 of type redshot-launch-array +(defmethod inspect redshot-launch-array ((obj redshot-launch-array)) + (format #t "[~8x] ~A~%" obj 'redshot-launch-array) + (format #t "~Tinfo[6] @ #x~X~%" (-> obj info)) + obj + ) + +;; definition for function robotboss-redshot-fill-array +;; INFO: Return type mismatch symbol vs none. +;; Used lq/sq +(defbehavior robotboss-redshot-fill-array robotboss ((arg0 redshot-launch-array)) + (let ((s2-0 0) + (s4-0 (new 'stack-no-clear 'vector)) + (s5-0 (new-stack-vector0)) + ) + 0.0 + (dotimes (s3-0 6) + (let ((s1-0 (-> arg0 info s3-0))) + (let* ((f30-0 -40960.0) + (f28-0 81920.0) + (v1-4 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-5 (the-as number (logior #x3f800000 v1-4))) + ) + (set! (-> s1-0 dest x) (+ f30-0 (* f28-0 (+ -1.0 (the-as float v1-5))))) + ) + (set! (-> s1-0 dest y) 0.0) + (let* ((f30-1 -40960.0) + (f28-1 81920.0) + (v1-10 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-11 (the-as number (logior #x3f800000 v1-10))) + ) + (set! (-> s1-0 dest z) (+ f30-1 (* f28-1 (+ -1.0 (the-as float v1-11))))) + ) + (set! (-> s1-0 dest w) 1.0) + ) + (dotimes (s1-1 s3-0) + (vector-! + s4-0 + (the-as vector (-> arg0 info s3-0)) + (the-as vector (-> arg0 info s1-1)) + ) + (let ((f0-13 (vector-length-squared s4-0))) + (if (< f0-13 1073741800.0) + (vector+float*! + (the-as vector (-> arg0 info s3-0)) + (the-as vector (-> arg0 info s1-1)) + s4-0 + (/ 32768.0 (sqrtf f0-13)) + ) + ) + ) + ) + (vector+! s5-0 s5-0 (the-as vector (-> arg0 info s3-0))) + (let* ((f30-2 60.0) + (v1-27 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-28 (the-as number (logior #x3f800000 v1-27))) + ) + (set! + (-> arg0 info s3-0 flight-time) + (+ (the int (* f30-2 (+ -1.0 (the-as float v1-28)))) 180) + ) + ) + (let* ((s1-3 (max 150 (- s2-0 (-> arg0 info s3-0 flight-time)))) + (f30-3 60.0) + (v1-38 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-39 (the-as number (logior #x3f800000 v1-38))) + ) + (set! + (-> arg0 info s3-0 stall-time) + (+ (the int (* f30-3 (+ -1.0 (the-as float v1-39)))) 300 s1-3) + ) + ) + (set! + s2-0 + (+ (-> arg0 info s3-0 flight-time) (-> arg0 info s3-0 stall-time)) + ) + ) + (vector-float*! s5-0 s5-0 0.16666667) + (vector-! s5-0 (-> self entity extra trans) s5-0) + (dotimes (v1-53 6) + (vector+! + (the-as vector (-> arg0 info v1-53)) + (the-as vector (-> arg0 info v1-53)) + s5-0 + ) + (set! + (-> arg0 info v1-53 dest y) + (+ (-> (new 'static 'array float 1 2048.0) 0) (-> arg0 info v1-53 dest y)) + ) + ) + ) + (none) + ) + +;; definition for function robotboss-redshot +;; WARN: Stack slot load at 64 mismatch: defined as size 4, got size 16 +;; Used lq/sq +(defbehavior + robotboss-redshot robotboss + ((arg0 redshot-launch-info) (arg1 symbol)) + (local-vars + (sv-32 redshot-launch-info) + (sv-48 vector) + (sv-64 float) + (sv-80 int) + (sv-96 int) + ) + (set! sv-32 arg0) + (let ((s5-0 arg1)) + (+! (-> self children-spawned) 1) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (vector<-cspace! gp-0 (-> self node-list data 40)) + (let ((s4-0 (get-process *default-dead-pool* redshot #x4000))) + (when s4-0 + (let ((t9-2 (method-of-type redshot activate))) + (t9-2 (the-as redshot s4-0) self 'redshot (the-as pointer #x70004000)) + ) + (let ((s3-0 run-function-in-process) + (s2-0 s4-0) + (s1-0 redshot-init-by-other) + (s0-0 gp-0) + ) + (set! sv-48 (-> sv-32 dest)) + (let* ((f30-0 20480.0) + (f28-0 12288.0) + (v1-10 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-11 (the-as number (logior #x3f800000 v1-10))) + ) + (set! sv-64 (+ f30-0 (* f28-0 (+ -1.0 (the-as float v1-11))))) + ) + (set! sv-80 (-> sv-32 flight-time)) + (set! sv-96 (-> sv-32 stall-time)) + (let* ((f30-1 300.0) + (v1-19 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-20 (the-as number (logior #x3f800000 v1-19))) + (t3-0 (the int (* f30-1 (+ -1.0 (the-as float v1-20))))) + ) + ((the-as + (function object object object object object object object object none) + s3-0 + ) + s2-0 + s1-0 + s0-0 + sv-48 + sv-64 + sv-80 + sv-96 + t3-0 + ) + ) + ) + (-> s4-0 ppointer) + ) + ) + (when s5-0 + (let ((s5-1 (get-process *default-dead-pool* part-tracker #x4000))) + (when s5-1 + (let ((t9-7 (method-of-type part-tracker activate))) + (t9-7 + (the-as part-tracker s5-1) + *entity-pool* + 'part-tracker + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + s5-1 + part-tracker-init + (-> *part-group-id-table* 641) + 300 + #f + #f + #f + gp-0 + ) + (-> s5-1 ppointer) + ) + ) + (sound-play-by-name + (static-sound-name "red-fire") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + ) + ) + ) + ) + +;; definition for function robotboss-is-red-hit +(defbehavior robotboss-is-red-hit robotboss () + (or (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 19) + ) + (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 34) + ) + ) + ) + +;; 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 + (('hit-jak) + (let* ((v1-2 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-3 (the-as number (logior #x3f800000 v1-2))) + (f0-2 (+ -1.0 (the-as float v1-3))) + ) + (cond + ((< 0.75 f0-2) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM10" + #t + (the-as vector #f) + ) + ) + ((< 0.5 f0-2) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM12" + #t + (the-as vector #f) + ) + ) + ((< 0.25 f0-2) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM15" + #t + (the-as vector #f) + ) + ) + (else + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "MAI-AM03" + #t + (the-as vector #f) + ) + ) + ) + ) + ) + (('missed-jak) + (let* ((v1-13 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-14 (the-as number (logior #x3f800000 v1-13))) + (f0-5 (+ -1.0 (the-as float v1-14))) + ) + (if (< 0.5 f0-5) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM14" + #t + (the-as vector #f) + ) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "MAI-AM01" + #t + (the-as vector #f) + ) + ) + ) + ) + (else + (robotboss-handler arg0 arg1 arg2 arg3) + ) + ) + ) + :enter + (behavior () + (set! (-> self hits-to-go) -1) + (set! (-> self des-cam-entity) "camera-390") + (set! (-> self use-interesting) #t) + (set! (-> self state-time) (-> *display* game-frame-counter)) + (set! (-> self till-next-shot) 0) + 0 + (none) + ) + :exit + (behavior () + (let ((a0-1 (handle->process (-> self shot-attractor)))) + (if a0-1 + (deactivate a0-1) + ) + ) + (let ((a1-1 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-1 from) self) + (set! (-> a1-1 num-params) 1) + (set! (-> a1-1 message) 'open) + (set! (-> a1-1 param 0) (the-as uint (-> *part-group-id-table* 676))) + (let ((t9-1 send-event-function) + (v1-10 (-> self alts 1)) + ) + (t9-1 (if v1-10 + (-> v1-10 extra process) + ) + a1-1 + ) + ) + ) + (let ((a1-2 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-2 from) self) + (set! (-> a1-2 num-params) 1) + (set! (-> a1-2 message) 'open) + (set! (-> a1-2 param 0) (the-as uint 0.3)) + (let ((t9-2 send-event-function) + (v1-17 (-> self alts 0)) + ) + (t9-2 (if v1-17 + (-> v1-17 extra process) + ) + a1-2 + ) + ) + ) + (set! + (-> + (the-as collide-shape-prim-group (-> self root-override root-prim)) + prims + 5 + collide-with + ) + (the-as uint 0) + ) + (set! + (-> + (the-as collide-shape-prim-group (-> self root-override root-prim)) + prims + 5 + prim-core + collide-as + ) + (the-as uint 0) + ) + (set! (-> self use-interesting) #f) + (set! (-> self des-cam-entity) #f) + (robotboss-yellow-eco-off) + (let ((a1-3 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-3 from) self) + (set! (-> a1-3 num-params) 0) + (set! (-> a1-3 message) 'show) + (let ((t9-4 send-event-function) + (v1-27 (-> self alts 11)) + ) + (t9-4 (if v1-27 + (-> v1-27 extra process) + ) + a1-3 + ) + ) + ) + (none) + ) + :trans + (behavior () + (robotboss-always-trans robotboss-red-dark-bomb) + (robotboss-shooting-trans 40) + (cond + ((zero? (-> self hits-to-go)) + (robotboss-yellow-eco-off) + (let ((a1-0 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-0 from) self) + (set! (-> a1-0 num-params) 0) + (set! (-> a1-0 message) 'show) + (let ((t9-3 send-event-function) + (v1-3 (-> self alts 11)) + ) + (t9-3 (if v1-3 + (-> v1-3 extra process) + ) + a1-0 + ) + ) + ) + (set! (-> self took-hit) #f) + (+! (-> self hits-to-go) -1) + (ja-channel-push! 1 30) + (let ((v1-10 (-> self skel root-channel 0))) + (set! + (-> v1-10 frame-group) + (the-as art-joint-anim (-> self draw art-group data 34)) + ) + ) + (set! (-> self red-smoke) #t) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (vector<-cspace! gp-0 (-> self node-list data 51)) + (let ((s5-0 (get-process *default-dead-pool* part-tracker #x4000))) + (when s5-0 + (let ((t9-7 (method-of-type part-tracker activate))) + (t9-7 + (the-as part-tracker s5-0) + *entity-pool* + 'part-tracker + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + s5-0 + part-tracker-init + (-> *part-group-id-table* 649) + 300 + #f + #f + #f + gp-0 + ) + (-> s5-0 ppointer) + ) + ) + ) + (let* ((s5-1 (get-process *default-dead-pool* manipy #x4000)) + (gp-1 (when s5-1 + (let ((t9-10 (method-of-type manipy activate))) + (t9-10 + (the-as manipy s5-1) + self + 'manipy + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + s5-1 + manipy-init + (-> self root-override trans) + (-> self entity) + *robotboss-redeco-sg* + #f + ) + (-> s5-1 ppointer) + ) + ) + ) + (let ((a1-9 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-9 from) self) + (set! (-> a1-9 num-params) 1) + (set! (-> a1-9 message) 'flash) + (set! (-> a1-9 param 0) (the-as uint 255.0)) + (send-event-function (ppointer->process (-> self parent)) a1-9) + ) + (let ((a1-10 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-10 from) self) + (set! (-> a1-10 num-params) 1) + (set! (-> a1-10 message) 'anim-mode) + (set! (-> a1-10 param 0) (the-as uint 'play1)) + (send-event-function (ppointer->process gp-1) a1-10) + ) + (let ((a1-11 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-11 from) self) + (set! (-> a1-11 num-params) 1) + (set! (-> a1-11 message) 'rot-quat) + (set! (-> a1-11 param 0) (the-as uint (-> self root-override quat))) + (send-event-function (ppointer->process gp-1) a1-11) + ) + (let ((a1-12 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-12 from) self) + (set! (-> a1-12 num-params) 1) + (set! (-> a1-12 message) 'art-joint-anim) + (set! (-> a1-12 param 0) (the-as uint "robotboss-redeco-red-last-hit")) + (send-event-function (ppointer->process gp-1) a1-12) + ) + ) + ) + ((and (> (-> self hits-to-go) 0) (-> self took-hit)) + (if + (not + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM17" + #t + (the-as vector #f) + ) + ) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "MAI-AM06" + #t + (the-as vector #f) + ) + ) + (set! (-> self took-hit) #f) + (ja-channel-push! 1 30) + (let ((v1-56 (-> self skel root-channel 0))) + (set! + (-> v1-56 frame-group) + (the-as art-joint-anim (-> self draw art-group data 19)) + ) + ) + ) + ) + (robotboss-position) + (none) + ) + :code + (behavior () + (let ((a0-0 (-> self skel root-channel 0))) + (set! + (-> a0-0 param 0) + (the float (+ (-> a0-0 frame-group data 0 length) -1)) + ) + (set! (-> a0-0 param 1) 1.0) + (joint-control-channel-group! + a0-0 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (while (not (ja-done? 0)) + (suspend) + (ja-eval) + ) + (robotboss-setup-for-hits 1 5) + (while #t + (until + (or + (>= + (- (-> *display* game-frame-counter) (-> self state-time)) + (-> self till-next-shot) + ) + (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 34) + ) + ) + (ja-channel-push! 1 60) + (let ((v1-11 (-> self skel root-channel 0))) + (set! + (-> v1-11 frame-group) + (the-as art-joint-anim (-> self draw art-group data 16)) + ) + ) + (let ((a0-7 (-> self skel root-channel 0))) + (set! (-> a0-7 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-7 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-7 param 1) 1.0) + (set! (-> a0-7 frame-num) 0.0) + (joint-control-channel-group! + a0-7 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (if (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 34) + ) + (goto cfg-24) + ) + (suspend) + (let ((a0-12 (-> self skel root-channel 0))) + (set! + (-> a0-12 param 0) + (the float (+ (-> a0-12 frame-group data 0 length) -1)) + ) + (set! (-> a0-12 param 1) 1.0) + (joint-control-channel-group-eval! + a0-12 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (label cfg-24) + (set! (-> self state-time) (-> *display* game-frame-counter)) + (let* ((f30-0 (-> self dda red-shot-time-min)) + (f28-0 (-> self dda red-shot-time-rnd)) + (v1-65 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-66 (the-as number (logior #x3f800000 v1-65))) + ) + (set! + (-> self till-next-shot) + (the + int + (+ f30-0 (the float (the int (* f28-0 (+ -1.0 (the-as float v1-66)))))) + ) + ) + ) + (when (not (robotboss-is-red-hit)) + (ja-channel-push! 1 60) + (let ((v1-72 (-> self skel root-channel 0))) + (set! + (-> v1-72 frame-group) + (the-as art-joint-anim (-> self draw art-group data 17)) + ) + ) + (let ((a0-27 (-> self skel root-channel 0))) + (set! (-> a0-27 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-27 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-27 param 1) 1.0) + (set! (-> a0-27 frame-num) 0.0) + (joint-control-channel-group! + a0-27 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (update! (-> self looping-sound 2)) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (vector<-cspace! gp-0 (-> self node-list data 40)) + (spawn (-> self particle 5) gp-0) + ) + (if (robotboss-is-red-hit) + (goto cfg-37) + ) + (suspend) + (let ((a0-31 (-> self skel root-channel 0))) + (set! + (-> a0-31 param 0) + (the float (+ (-> a0-31 frame-group data 0 length) -1)) + ) + (set! (-> a0-31 param 1) 1.0) + (joint-control-channel-group-eval! + a0-31 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (label cfg-37) + (stop! (-> self looping-sound 2)) + ) + (when (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 34) + ) + ) + (let* ((v1-120 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-121 (the-as number (logior #x3f800000 v1-120))) + (f30-1 (+ -1.0 (the-as float v1-121))) + (gp-1 (new 'stack-no-clear 'redshot-launch-array)) + (s5-0 (-> self dda red-shots-min)) + ) + (robotboss-yellow-eco-on) + (robotboss-redshot-fill-array gp-1) + (robotboss-redshot (the-as redshot-launch-info (-> gp-1 info)) #t) + (let* + ((v1-127 + (+ s5-0 (the int (* f30-1 (the float (-> self dda red-shots-rnd))))) + ) + (s5-1 (+ (min 6 v1-127) -1)) + ) + (dotimes (s4-0 s5-1) + (robotboss-redshot (-> gp-1 info (+ s4-0 1)) #f) + ) + ) + ) + ) + (when (not (robotboss-is-red-hit)) + (let* ((v1-135 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-136 (the-as number (logior #x3f800000 v1-135))) + (f0-33 (+ -1.0 (the-as float v1-136))) + ) + (cond + ((< 0.8333333 f0-33) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM04" + #t + (the-as vector #f) + ) + ) + ((< 0.6666667 f0-33) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM05" + #t + (the-as vector #f) + ) + ) + ((< 0.5 f0-33) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM08" + #t + (the-as vector #f) + ) + ) + ((< 0.33333334 f0-33) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM10" + #t + (the-as vector #f) + ) + ) + ((< 0.16666667 f0-33) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "MAI-AM03" + #t + (the-as vector #f) + ) + ) + (else + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "MAI-AM02" + #t + (the-as vector #f) + ) + ) + ) + ) + (let ((v1-157 (-> self skel root-channel 0))) + (set! + (-> v1-157 frame-group) + (the-as art-joint-anim (-> self draw art-group data 18)) + ) + ) + ) + (let ((a0-56 (-> self skel root-channel 0))) + (set! (-> a0-56 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-56 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-56 param 1) 1.0) + (set! (-> a0-56 frame-num) 0.0) + (joint-control-channel-group! + a0-56 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-57 (-> self skel root-channel 0))) + (set! + (-> a0-57 param 0) + (the float (+ (-> a0-57 frame-group data 0 length) -1)) + ) + (set! (-> a0-57 param 1) 1.0) + (joint-control-channel-group-eval! + a0-57 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (when (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 34) + ) + (let ((a0-63 (-> self skel root-channel 0))) + (set! + (-> a0-63 frame-group) + (the-as art-joint-anim (-> self draw art-group data 20)) + ) + (set! + (-> a0-63 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 20)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-63 param 1) 1.0) + (set! (-> a0-63 frame-num) 0.0) + (joint-control-channel-group! + a0-63 + (the-as art-joint-anim (-> self draw art-group data 20)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-64 (-> self skel root-channel 0))) + (set! + (-> a0-64 param 0) + (the float (+ (-> a0-64 frame-group data 0 length) -1)) + ) + (set! (-> a0-64 param 1) 1.0) + (joint-control-channel-group-eval! + a0-64 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (go robotboss-red-dark-bomb) + ) + ) + (none) + ) + :post + (the-as (function none :behavior robotboss) transform-post) + ) + +;; failed to figure out what this is: +(defstate robotboss-red (robotboss) + :event + robotboss-handler + :enter + (behavior () + (set! (-> self old-loc quad) (-> self desired-loc quad)) + (set-vector! (-> self desired-loc) 8192.0 -40960.0 327680.0 1.0) + (set! (-> self loc-t) 0.0) + (set! (-> self loc-t-start) (-> *display* game-frame-counter)) + (set! (-> self loc-t-duration) 900) + (set! (-> self desired-pool-y) -22528.0) + (set-setting! *setting-control* self 'sound-flava #f (the-as float 40.0) 48) + (none) + ) + :trans + (behavior () + (robotboss-always-trans robotboss-red-wait) + (if (>= (-> self loc-t) 1.0) + (go robotboss-red-wait) + ) + (robotboss-position) + (none) + ) + :code + (behavior () + (let ((a0-0 (-> self skel root-channel 0))) + (set! + (-> a0-0 param 0) + (the float (+ (-> a0-0 frame-group data 0 length) -1)) + ) + (set! (-> a0-0 param 1) 1.0) + (joint-control-channel-group! + a0-0 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (while (not (ja-done? 0)) + (suspend) + (ja-eval) + ) + (ja-channel-push! 1 60) + (let ((v1-11 (-> self skel root-channel 0))) + (set! + (-> v1-11 frame-group) + (the-as art-joint-anim (-> self draw art-group data 15)) + ) + ) + (let ((a0-6 (-> self skel root-channel 0))) + (set! (-> a0-6 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-6 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-6 param 1) 1.0) + (set! (-> a0-6 frame-num) 0.0) + (joint-control-channel-group! a0-6 (if (> (-> self skel active-channels) 0) + (-> + self + skel + root-channel + 0 + frame-group + ) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-7 (-> self skel root-channel 0))) + (set! + (-> a0-7 param 0) + (the float (+ (-> a0-7 frame-group data 0 length) -1)) + ) + (set! (-> a0-7 param 1) 1.0) + (joint-control-channel-group-eval! + a0-7 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (while #t + (when (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 6) + ) + ) + (ja-channel-push! 1 60) + (let ((v1-50 (-> self skel root-channel 0))) + (set! + (-> v1-50 frame-group) + (the-as art-joint-anim (-> self draw art-group data 6)) + ) + ) + ) + (let ((a0-17 (-> self skel root-channel 0))) + (set! (-> a0-17 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-17 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-17 param 1) 1.0) + (set! (-> a0-17 frame-num) 0.0) + (joint-control-channel-group! + a0-17 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-18 (-> self skel root-channel 0))) + (set! + (-> a0-18 param 0) + (the float (+ (-> a0-18 frame-group data 0 length) -1)) + ) + (set! (-> a0-18 param 1) 1.0) + (joint-control-channel-group-eval! + a0-18 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior robotboss) transform-post) + ) + +;; failed to figure out what this is: +(defstate robotboss-green-dark-bomb-wait (robotboss) + :event + robotboss-bomb-handler + :enter + (behavior () + (set! (-> self children-spawned) 0) + 0 + (none) + ) + :exit + (behavior () + (set! (-> self ignore-camera) #f) + (set! (-> self des-cam-entity) #f) + (none) + ) + :trans + (behavior () + (robotboss-always-trans robotboss-red) + (if + (and + (< (-> self children-spawned) 0) + (or + (not *target*) + (!= (-> *target* control unknown-surface00 name) 'launch-jump) + ) + ) + (go robotboss-red) + ) + (robotboss-position) + (none) + ) + :code + (behavior () + (let ((a0-0 (-> self skel root-channel 0))) + (set! + (-> a0-0 param 0) + (the float (+ (-> a0-0 frame-group data 0 length) -1)) + ) + (set! (-> a0-0 param 1) 1.0) + (joint-control-channel-group! + a0-0 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (while (not (ja-done? 0)) + (suspend) + (ja-eval) + ) + (ja-channel-push! 1 30) + (let ((v1-11 (-> self skel root-channel 0))) + (set! + (-> v1-11 frame-group) + (the-as art-joint-anim (-> self draw art-group data 9)) + ) + ) + (let ((a0-6 (-> self skel root-channel 0))) + (set! (-> a0-6 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-6 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-6 param 1) 1.0) + (set! (-> a0-6 frame-num) 0.0) + (joint-control-channel-group! a0-6 (if (> (-> self skel active-channels) 0) + (-> + self + skel + root-channel + 0 + frame-group + ) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (when (and (>= (ja-frame-num 0) 15.0) (< (-> self children-spawned) 1)) + (robotboss-darkecobomb + (new 'static 'vector :y 32768.0) + (-> self dda green-bomb-time) + ) + (set! (-> self des-cam-entity) "camera-365") + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM11" + #t + (the-as vector #f) + ) + ) + (suspend) + (let ((a0-10 (-> self skel root-channel 0))) + (set! + (-> a0-10 param 0) + (the float (+ (-> a0-10 frame-group data 0 length) -1)) + ) + (set! (-> a0-10 param 1) 1.0) + (joint-control-channel-group-eval! + a0-10 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (while #t + (when (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 6) + ) + ) + (ja-channel-push! 1 60) + (let ((v1-59 (-> self skel root-channel 0))) + (set! + (-> v1-59 frame-group) + (the-as art-joint-anim (-> self draw art-group data 6)) + ) + ) + ) + (let ((a0-20 (-> self skel root-channel 0))) + (set! (-> a0-20 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-20 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-20 param 1) 1.0) + (set! (-> a0-20 frame-num) 0.0) + (joint-control-channel-group! + a0-20 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-21 (-> self skel root-channel 0))) + (set! + (-> a0-21 param 0) + (the float (+ (-> a0-21 frame-group data 0 length) -1)) + ) + (set! (-> a0-21 param 1) 1.0) + (joint-control-channel-group-eval! + a0-21 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior robotboss) transform-post) + ) + +;; failed to figure out what this is: +(defstate robotboss-green-dark-bomb (robotboss) + :enter + (behavior () + (set! (-> self old-loc quad) (-> self desired-loc quad)) + (set-vector! (-> self desired-loc) 16384.0 -81920.0 716800.0 1.0) + (set! (-> self loc-t) 0.0) + (set! (-> self loc-t-start) (-> *display* game-frame-counter)) + (set! (-> self loc-t-duration) 900) + (set! (-> self desired-pool-y) -24576.0) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "MAI-AM01" + #t + (the-as vector #f) + ) + (none) + ) + :trans + (behavior () + (robotboss-always-trans robotboss-green-dark-bomb-wait) + (robotboss-position) + (if (>= (-> self loc-t) 1.0) + (go robotboss-green-dark-bomb-wait) + ) + (none) + ) + :code + (behavior () + (ja-channel-push! 1 60) + (let ((v1-2 (-> self skel root-channel 0))) + (set! + (-> v1-2 frame-group) + (the-as art-joint-anim (-> self draw art-group data 14)) + ) + ) + (let ((a0-4 (-> self skel root-channel 0))) + (set! (-> a0-4 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-4 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-4 param 1) 1.0) + (set! (-> a0-4 frame-num) 0.0) + (joint-control-channel-group! a0-4 (if (> (-> self skel active-channels) 0) + (-> + self + skel + root-channel + 0 + frame-group + ) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-5 (-> self skel root-channel 0))) + (set! + (-> a0-5 param 0) + (the float (+ (-> a0-5 frame-group data 0 length) -1)) + ) + (set! (-> a0-5 param 1) 1.0) + (joint-control-channel-group-eval! + a0-5 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (when (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 6) + ) + ) + (ja-channel-push! 1 60) + (let ((v1-41 (-> self skel root-channel 0))) + (set! + (-> v1-41 frame-group) + (the-as art-joint-anim (-> self draw art-group data 6)) + ) + ) + ) + (while #t + (let ((a0-15 (-> self skel root-channel 0))) + (set! (-> a0-15 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-15 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-15 param 1) 1.0) + (set! (-> a0-15 frame-num) 0.0) + (joint-control-channel-group! + a0-15 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-16 (-> self skel root-channel 0))) + (set! + (-> a0-16 param 0) + (the float (+ (-> a0-16 frame-group data 0 length) -1)) + ) + (set! (-> a0-16 param 1) 1.0) + (joint-control-channel-group-eval! + a0-16 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior robotboss) transform-post) + ) + +;; definition for function robotboss-greenshot +;; INFO: Return type mismatch sound-id vs none. +;; Used lq/sq +(defbehavior + robotboss-greenshot robotboss + ((arg0 vector) (arg1 basic) (arg2 basic) (arg3 symbol)) + (+! (-> self children-spawned) 1) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (let ((s2-0 (new 'stack-no-clear 'vector))) + (vector<-cspace! gp-0 (-> self node-list data 68)) + (set! (-> s2-0 quad) (-> self entity extra trans quad)) + (set! (-> s2-0 y) (+ -40960.0 (-> s2-0 y))) + (vector+! s2-0 s2-0 arg0) + (let ((s1-1 (get-process *default-dead-pool* greenshot #x4000))) + (when s1-1 + (let ((t9-2 (method-of-type greenshot activate))) + (t9-2 + (the-as greenshot s1-1) + self + 'greenshot + (the-as pointer #x70004000) + ) + ) + (run-now-in-process s1-1 greenshot-init-by-other gp-0 s2-0 arg1 arg2) + (-> s1-1 ppointer) + ) + ) + ) + (when arg3 + (let ((s5-1 (get-process *default-dead-pool* part-tracker #x4000))) + (when s5-1 + (let ((t9-5 (method-of-type part-tracker activate))) + (t9-5 + (the-as part-tracker s5-1) + *entity-pool* + 'part-tracker + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + s5-1 + part-tracker-init + (-> *part-group-id-table* 640) + 300 + #f + #f + #f + gp-0 + ) + (-> s5-1 ppointer) + ) + ) + (sound-play-by-name + (static-sound-name "green-fire") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + ) + ) + (none) + ) + +;; 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 + (('trigger) + (ja-channel-push! 1 60) + (let ((v1-3 (-> self skel root-channel 0))) + (set! + (-> v1-3 frame-group) + (the-as art-joint-anim (-> self draw art-group data 13)) + ) + ) + (robotboss-yellow-eco-off) + (let ((a1-2 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-2 from) self) + (set! (-> a1-2 num-params) 0) + (set! (-> a1-2 message) 'show) + (let ((t9-2 send-event-function) + (v1-5 (-> self alts 11)) + ) + (t9-2 (if v1-5 + (-> v1-5 extra process) + ) + a1-2 + ) + ) + ) + ) + (('hit-jak) + (let* ((v1-8 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-9 (the-as number (logior #x3f800000 v1-8))) + (f0-2 (+ -1.0 (the-as float v1-9))) + ) + (cond + ((< 0.75 f0-2) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM10" + #t + (the-as vector #f) + ) + ) + ((< 0.5 f0-2) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM12" + #t + (the-as vector #f) + ) + ) + ((< 0.25 f0-2) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM15" + #t + (the-as vector #f) + ) + ) + (else + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "MAI-AM03" + #t + (the-as vector #f) + ) + ) + ) + ) + ) + (('blob-died) + (let* ((v1-19 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-20 (the-as number (logior #x3f800000 v1-19))) + (f0-5 (+ -1.0 (the-as float v1-20))) + ) + (cond + ((< 0.75 f0-5) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "MAI-AM02" + #t + (the-as vector #f) + ) + ) + ((< 0.5 f0-5) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM03" + #t + (the-as vector #f) + ) + ) + ((< 0.25 f0-5) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM14" + #t + (the-as vector #f) + ) + ) + (else + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM02" + #t + (the-as vector #f) + ) + ) + ) + ) + ) + (else + (robotboss-handler arg0 arg1 arg2 arg3) + ) + ) + ) + :enter + (behavior () + (set! (-> self state-time) (-> *display* game-frame-counter)) + (set! (-> self children-spawned) 0) + (robotboss-setup-for-hits 2 5) + (set! (-> self des-cam-entity) "camera-385") + (none) + ) + :exit + (behavior () + (let ((a0-1 (handle->process (-> self shot-attractor)))) + (if a0-1 + (deactivate a0-1) + ) + ) + (let ((a1-1 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-1 from) self) + (set! (-> a1-1 num-params) 1) + (set! (-> a1-1 message) 'open) + (set! (-> a1-1 param 0) (the-as uint (-> *part-group-id-table* 675))) + (let ((t9-1 send-event-function) + (v1-10 (-> self alts 2)) + ) + (t9-1 (if v1-10 + (-> v1-10 extra process) + ) + a1-1 + ) + ) + ) + (let ((a1-2 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-2 from) self) + (set! (-> a1-2 num-params) 1) + (set! (-> a1-2 message) 'open) + (set! (-> a1-2 param 0) (the-as uint 0.2)) + (let ((t9-2 send-event-function) + (v1-17 (-> self alts 0)) + ) + (t9-2 (if v1-17 + (-> v1-17 extra process) + ) + a1-2 + ) + ) + ) + (set! + (-> + (the-as collide-shape-prim-group (-> self root-override root-prim)) + prims + 9 + collide-with + ) + (the-as uint 0) + ) + (set! + (-> + (the-as collide-shape-prim-group (-> self root-override root-prim)) + prims + 9 + prim-core + collide-as + ) + (the-as uint 0) + ) + (set! (-> self des-cam-entity) #f) + (robotboss-yellow-eco-off) + (let ((a1-3 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-3 from) self) + (set! (-> a1-3 num-params) 0) + (set! (-> a1-3 message) 'show) + (let ((t9-4 send-event-function) + (v1-27 (-> self alts 11)) + ) + (t9-4 (if v1-27 + (-> v1-27 extra process) + ) + a1-3 + ) + ) + ) + (none) + ) + :trans + (behavior () + (robotboss-always-trans robotboss-green-dark-bomb) + (cond + ((and + (>= (- (-> *display* game-frame-counter) (-> self state-time)) 120) + (< (-> self children-spawned) 1) + ) + (robotboss-greenshot + (new 'static 'vector) + (the-as basic 24576.0) + (the-as basic 600) + #t + ) + (ja-channel-push! 1 60) + (let ((v1-9 (-> self skel root-channel 0))) + (set! + (-> v1-9 frame-group) + (the-as art-joint-anim (-> self draw art-group data 11)) + ) + ) + ) + ((and + (>= (- (-> *display* game-frame-counter) (-> self state-time)) 360) + (< (-> self children-spawned) 3) + ) + (robotboss-greenshot + (new 'static 'vector :x 8192.0) + (the-as basic 16384.0) + (the-as basic 600) + #t + ) + (robotboss-greenshot + (new 'static 'vector :z 8192.0) + (the-as basic 32768.0) + (the-as basic 660) + #f + ) + (ja-channel-push! 1 60) + (let ((v1-20 (-> self skel root-channel 0))) + (set! + (-> v1-20 frame-group) + (the-as art-joint-anim (-> self draw art-group data 11)) + ) + ) + ) + ((and + (>= (- (-> *display* game-frame-counter) (-> self state-time)) 780) + (< (-> self children-spawned) 6) + ) + (robotboss-greenshot + (new 'static 'vector :z 12288.0) + (the-as basic 20480.0) + (the-as basic 600) + #t + ) + (robotboss-greenshot + (new 'static 'vector :x 8192.0) + (the-as basic 8192.0) + (the-as basic 660) + #f + ) + (robotboss-greenshot + (new 'static 'vector) + (the-as basic 36864.0) + (the-as basic 720) + #f + ) + (ja-channel-push! 1 60) + (let ((v1-32 (-> self skel root-channel 0))) + (set! + (-> v1-32 frame-group) + (the-as art-joint-anim (-> self draw art-group data 11)) + ) + ) + ) + ((and + (>= (- (-> *display* game-frame-counter) (-> self state-time)) 1200) + (< (-> self children-spawned) 7) + ) + (robotboss-greenshot + (new 'static 'vector) + (the-as basic 24576.0) + (the-as basic 600) + #t + ) + (ja-channel-push! 1 60) + (let ((v1-42 (-> self skel root-channel 0))) + (set! + (-> v1-42 frame-group) + (the-as art-joint-anim (-> self draw art-group data 11)) + ) + ) + ) + ((and + (>= (- (-> *display* game-frame-counter) (-> self state-time)) 1650) + (< (-> self children-spawned) 9) + ) + (robotboss-greenshot + (new 'static 'vector) + (the-as basic 12288.0) + (the-as basic 600) + #t + ) + (robotboss-greenshot + (new 'static 'vector :x 4096.0 :z 12288.0) + (the-as basic 32768.0) + (the-as basic 600) + #f + ) + (ja-channel-push! 1 60) + (let ((v1-53 (-> self skel root-channel 0))) + (set! + (-> v1-53 frame-group) + (the-as art-joint-anim (-> self draw art-group data 11)) + ) + ) + ) + ((and + (>= (- (-> *display* game-frame-counter) (-> self state-time)) 2400) + (< (-> self children-spawned) 10) + ) + (+! (-> self children-spawned) 1) + (let ((gp-0 (get-process *default-dead-pool* green-eco-lurker-gen #x4000))) + (when gp-0 + (let ((t9-16 (method-of-type green-eco-lurker-gen activate))) + (t9-16 + (the-as green-eco-lurker-gen gp-0) + self + 'green-eco-lurker-gen + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + gp-0 + green-eco-lurker-gen-init-by-other + (-> self entity) + (-> self entity extra trans) + (-> self dda num-blobs) + ) + (-> gp-0 ppointer) + ) + ) + (set! (-> self old-loc quad) (-> self desired-loc quad)) + (set-vector! (-> self desired-loc) 24576.0 0.0 655360.0 1.0) + (set! (-> self loc-t) 0.0) + (set! (-> self loc-t-start) (-> *display* game-frame-counter)) + (set! (-> self loc-t-duration) 900) + (set! (-> self desired-pool-y) -26624.0) + ) + ((and + (>= (- (-> *display* game-frame-counter) (-> self state-time)) 2460) + (< (-> self children-spawned) 11) + ) + (+! (-> self children-spawned) 1) + (robotboss-yellow-eco-on) + ) + ) + (robotboss-position) + (none) + ) + :code + (behavior () + (let ((a0-0 (-> self skel root-channel 0))) + (set! + (-> a0-0 param 0) + (the float (+ (-> a0-0 frame-group data 0 length) -1)) + ) + (set! (-> a0-0 param 1) 1.0) + (joint-control-channel-group! + a0-0 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (while (not (ja-done? 0)) + (suspend) + (ja-eval) + ) + (while #t + (cond + ((= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 13) + ) + (go robotboss-green-dark-bomb) + ) + ((not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 6) + ) + ) + (ja-channel-push! 1 60) + (let ((v1-25 (-> self skel root-channel 0))) + (set! + (-> v1-25 frame-group) + (the-as art-joint-anim (-> self draw art-group data 6)) + ) + ) + ) + ) + (let ((a0-14 (-> self skel root-channel 0))) + (set! (-> a0-14 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-14 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-14 param 1) 1.0) + (set! (-> a0-14 frame-num) 0.0) + (joint-control-channel-group! + a0-14 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-15 (-> self skel root-channel 0))) + (set! + (-> a0-15 param 0) + (the float (+ (-> a0-15 frame-group data 0 length) -1)) + ) + (set! (-> a0-15 param 1) 1.0) + (joint-control-channel-group-eval! + a0-15 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior robotboss) transform-post) + ) + +;; failed to figure out what this is: +(defstate robotboss-green (robotboss) + :event + robotboss-handler + :enter + (behavior () + (set! (-> self old-loc quad) (-> self desired-loc quad)) + (set-vector! (-> self desired-loc) 24576.0 0.0 245760.0 1.0) + (set! (-> self loc-t) 0.0) + (set! (-> self loc-t-start) (-> *display* game-frame-counter)) + (set! (-> self loc-t-duration) 900) + (set! (-> self desired-pool-y) -26624.0) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM01" + #t + (the-as vector #f) + ) + (set-setting! *setting-control* self 'sound-flava #f (the-as float 40.0) 47) + (none) + ) + :trans + (behavior () + (robotboss-always-trans robotboss-green-wait) + (if (>= (-> self loc-t) 1.0) + (go robotboss-green-wait) + ) + (robotboss-position) + (none) + ) + :code + (behavior () + (let ((a0-0 (-> self skel root-channel 0))) + (set! + (-> a0-0 param 0) + (the float (+ (-> a0-0 frame-group data 0 length) -1)) + ) + (set! (-> a0-0 param 1) 1.0) + (joint-control-channel-group! + a0-0 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (while (not (ja-done? 0)) + (suspend) + (ja-eval) + ) + (ja-channel-push! 1 60) + (let ((v1-11 (-> self skel root-channel 0))) + (set! + (-> v1-11 frame-group) + (the-as art-joint-anim (-> self draw art-group data 10)) + ) + ) + (let ((a0-6 (-> self skel root-channel 0))) + (set! (-> a0-6 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-6 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-6 param 1) 1.0) + (set! (-> a0-6 frame-num) 0.0) + (joint-control-channel-group! a0-6 (if (> (-> self skel active-channels) 0) + (-> + self + skel + root-channel + 0 + frame-group + ) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-7 (-> self skel root-channel 0))) + (set! + (-> a0-7 param 0) + (the float (+ (-> a0-7 frame-group data 0 length) -1)) + ) + (set! (-> a0-7 param 1) 1.0) + (joint-control-channel-group-eval! + a0-7 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (while #t + (when (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 6) + ) + ) + (ja-channel-push! 1 60) + (let ((v1-50 (-> self skel root-channel 0))) + (set! + (-> v1-50 frame-group) + (the-as art-joint-anim (-> self draw art-group data 6)) + ) + ) + ) + (let ((a0-17 (-> self skel root-channel 0))) + (set! (-> a0-17 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-17 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-17 param 1) 1.0) + (set! (-> a0-17 frame-num) 0.0) + (joint-control-channel-group! + a0-17 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-18 (-> self skel root-channel 0))) + (set! + (-> a0-18 param 0) + (the float (+ (-> a0-18 frame-group data 0 length) -1)) + ) + (set! (-> a0-18 param 1) 1.0) + (joint-control-channel-group-eval! + a0-18 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior robotboss) transform-post) + ) + +;; failed to figure out what this is: +(defstate robotboss-blue-dark-bomb-wait (robotboss) + :event + robotboss-bomb-handler + :enter + (behavior () + (set! (-> self children-spawned) 0) + 0 + (none) + ) + :exit + (behavior () + (set! (-> self ignore-camera) #f) + (set! (-> self des-cam-entity) #f) + (none) + ) + :trans + (behavior () + (robotboss-always-trans robotboss-green) + (if + (and + (< (-> self children-spawned) 0) + (or + (not *target*) + (!= (-> *target* control unknown-surface00 name) 'launch-jump) + ) + ) + (go robotboss-green) + ) + (robotboss-position) + (none) + ) + :code + (behavior () + (let ((a0-0 (-> self skel root-channel 0))) + (set! + (-> a0-0 param 0) + (the float (+ (-> a0-0 frame-group data 0 length) -1)) + ) + (set! (-> a0-0 param 1) 1.0) + (joint-control-channel-group! + a0-0 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (while (not (ja-done? 0)) + (suspend) + (ja-eval) + ) + (ja-channel-push! 1 30) + (let ((v1-11 (-> self skel root-channel 0))) + (set! + (-> v1-11 frame-group) + (the-as art-joint-anim (-> self draw art-group data 9)) + ) + ) + (let ((a0-6 (-> self skel root-channel 0))) + (set! (-> a0-6 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-6 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-6 param 1) 1.0) + (set! (-> a0-6 frame-num) 0.0) + (joint-control-channel-group! a0-6 (if (> (-> self skel active-channels) 0) + (-> + self + skel + root-channel + 0 + frame-group + ) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (when (and (>= (ja-frame-num 0) 15.0) (< (-> self children-spawned) 1)) + (robotboss-darkecobomb + (new 'static 'vector :y 32768.0) + (the-as float 3600.0) + ) + (set! (-> self des-cam-entity) "camera-365") + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "MAI-AM04" + #t + (the-as vector #f) + ) + ) + (suspend) + (let ((a0-10 (-> self skel root-channel 0))) + (set! + (-> a0-10 param 0) + (the float (+ (-> a0-10 frame-group data 0 length) -1)) + ) + (set! (-> a0-10 param 1) 1.0) + (joint-control-channel-group-eval! + a0-10 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (while #t + (cond + ((and + *target* + (< (+ 81920.0 (-> self entity extra trans y)) (-> (target-pos 0) y)) + ) + (when (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 7) + ) + ) + (ja-channel-push! 1 240) + (let ((v1-64 (-> self skel root-channel 0))) + (set! + (-> v1-64 frame-group) + (the-as art-joint-anim (-> self draw art-group data 7)) + ) + ) + ) + ) + ((not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 6) + ) + ) + (ja-channel-push! 1 60) + (let ((v1-73 (-> self skel root-channel 0))) + (set! + (-> v1-73 frame-group) + (the-as art-joint-anim (-> self draw art-group data 6)) + ) + ) + ) + ) + (let ((a0-30 (-> self skel root-channel 0))) + (set! (-> a0-30 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-30 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-30 param 1) 1.0) + (set! (-> a0-30 frame-num) 0.0) + (joint-control-channel-group! + a0-30 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-31 (-> self skel root-channel 0))) + (set! + (-> a0-31 param 0) + (the float (+ (-> a0-31 frame-group data 0 length) -1)) + ) + (set! (-> a0-31 param 1) 1.0) + (joint-control-channel-group-eval! + a0-31 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior robotboss) transform-post) + ) + +;; failed to figure out what this is: +(defstate robotboss-blue-dark-bomb (robotboss) + :enter + (behavior () + (set! (-> self old-loc quad) (-> self desired-loc quad)) + (set-vector! (-> self desired-loc) 16384.0 -118784.0 614400.0 1.0) + (set! (-> self loc-t) 0.0) + (set! (-> self loc-t-start) (-> *display* game-frame-counter)) + (set! (-> self loc-t-duration) 900) + (set! (-> self desired-pool-y) -28672.0) + (none) + ) + :trans + (behavior () + (robotboss-always-trans robotboss-blue-dark-bomb-wait) + (robotboss-position) + (if (>= (-> self loc-t) 1.0) + (go robotboss-blue-dark-bomb-wait) + ) + (none) + ) + :code + (behavior () + (ja-channel-push! 1 60) + (let ((v1-2 (-> self skel root-channel 0))) + (set! + (-> v1-2 frame-group) + (the-as art-joint-anim (-> self draw art-group data 8)) + ) + ) + (let ((a0-4 (-> self skel root-channel 0))) + (set! (-> a0-4 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-4 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-4 param 1) 1.0) + (set! (-> a0-4 frame-num) 0.0) + (joint-control-channel-group! a0-4 (if (> (-> self skel active-channels) 0) + (-> + self + skel + root-channel + 0 + frame-group + ) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-5 (-> self skel root-channel 0))) + (set! + (-> a0-5 param 0) + (the float (+ (-> a0-5 frame-group data 0 length) -1)) + ) + (set! (-> a0-5 param 1) 1.0) + (joint-control-channel-group-eval! + a0-5 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (when (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 6) + ) + ) + (ja-channel-push! 1 60) + (let ((v1-41 (-> self skel root-channel 0))) + (set! + (-> v1-41 frame-group) + (the-as art-joint-anim (-> self draw art-group data 6)) + ) + ) + ) + (while #t + (let ((a0-15 (-> self skel root-channel 0))) + (set! (-> a0-15 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-15 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-15 param 1) 1.0) + (set! (-> a0-15 frame-num) 0.0) + (joint-control-channel-group! + a0-15 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-16 (-> self skel root-channel 0))) + (set! + (-> a0-16 param 0) + (the float (+ (-> a0-16 frame-group data 0 length) -1)) + ) + (set! (-> a0-16 param 1) 1.0) + (joint-control-channel-group-eval! + a0-16 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior robotboss) transform-post) + ) + +;; definition for function robotboss-blue-beam +;; INFO: Return type mismatch object vs none. +;; Used lq/sq +(defbehavior robotboss-blue-beam robotboss ((arg0 int) (arg1 symbol)) + (let ((s4-0 (new 'stack-no-clear 'vector)) + (gp-0 (new 'stack-no-clear 'vector)) + ) + (let ((s3-0 (new 'stack-no-clear 'vector))) + (set! (-> gp-0 quad) (-> self entity extra trans quad)) + (vector<-cspace! s4-0 (-> self node-list data arg0)) + (vector-! s3-0 gp-0 s4-0) + (let ((f30-0 (vector-y-angle s3-0)) + (f0-1 (- 16384.0 (vector-x-angle s3-0))) + ) + (set! (-> *part-id-table* 2546 init-specs 14 initial-valuef) f30-0) + (set! (-> *part-id-table* 2546 init-specs 13 initial-valuef) f0-1) + (set! (-> *part-id-table* 2548 init-specs 14 initial-valuef) f30-0) + (set! (-> *part-id-table* 2548 init-specs 13 initial-valuef) f0-1) + (set! (-> *part-id-table* 2545 init-specs 14 initial-valuef) f30-0) + (set! (-> *part-id-table* 2545 init-specs 13 initial-valuef) f0-1) + ) + ) + (cond + ((and + (>= (- (-> *display* game-frame-counter) (-> self state-time)) 120) + (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 3) + ) + ) + (spawn (-> self particle 0) s4-0) + (when (and arg1 (nonzero? (-> self looping-sound 0))) + (update! (-> self looping-sound 0)) + (when (and *target* (zero? (logand (-> *target* state-flags) #x80f8))) + (let ((t2-0 (new 'stack-no-clear 'collide-mesh-cache-tri)) + (a2-0 (new 'stack-no-clear 'vector)) + ) + (vector-! a2-0 gp-0 s4-0) + (when + (>= + (dummy-10 + *collide-cache* + s4-0 + a2-0 + (the-as float 4096.0) + 16 + self + t2-0 + 1 + ) + 0.0 + ) + (let ((a1-13 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-13 from) self) + (set! (-> a1-13 num-params) 2) + (set! (-> a1-13 message) 'attack) + (set! (-> a1-13 param 0) (the-as uint #f)) + (let ((v1-50 (new 'static 'attack-info :mask #xc0))) + (set! (-> v1-50 shove-up) 10240.0) + (set! (-> v1-50 shove-back) 30720.0) + (set! (-> a1-13 param 1) (the-as uint v1-50)) + ) + (send-event-function *target* a1-13) + ) + ) + ) + ) + ) + ) + ((nonzero? (-> self looping-sound 0)) + (stop! (-> self looping-sound 0)) + ) + ) + (cond + ((and + (>= (- (-> *display* game-frame-counter) (-> self state-time)) 420) + (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 5) + ) + ) + ) + (spawn (-> self particle 1) gp-0) + (when (and arg1 (nonzero? (-> self looping-sound 1))) + (update! (-> self looping-sound 1)) + (when + (and + *target* + (zero? (logand (-> *target* state-flags) #x80f8)) + (>= 8192.0 (vector-vector-distance gp-0 (target-pos 0))) + ) + (let ((a1-16 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-16 from) self) + (set! (-> a1-16 num-params) 2) + (set! (-> a1-16 message) 'attack) + (set! (-> a1-16 param 0) (the-as uint #f)) + (let ((v1-80 (new 'static 'attack-info :mask #xc0))) + (set! (-> v1-80 shove-up) 10240.0) + (set! (-> v1-80 shove-back) 30720.0) + (set! (-> a1-16 param 1) (the-as uint v1-80)) + ) + (send-event-function *target* a1-16) + ) + ) + ) + ) + ((nonzero? (-> self looping-sound 1)) + (stop! (-> self looping-sound 1)) + ) + ) + ) + (none) + ) + +;; definition for function robotboss-set-dda +;; INFO: Return type mismatch robotboss-dda vs none. +(defbehavior robotboss-set-dda robotboss () + 0 + (let ((gp-0 (-> self entity extra perm))) + (logior! (-> gp-0 status) (entity-perm-status user-set-from-cstage)) + (set! (-> gp-0 user-int8 0) (seekl (-> gp-0 user-int8 0) 255 1)) + (let ((v1-5 (-> gp-0 user-int8 0))) + (set! (-> self dda) (cond + ((< 15 v1-5) + (new 'static 'robotboss-dda + :blue-bomb-time 4800.0 + :num-blobs 8 + :green-bomb-time 4200.0 + :red-shots-min 3 + :red-shot-time-min 5400.0 + :red-shot-time-rnd 600.0 + :red-bomb-time 3600.0 + :yellow-shot-time-min 1800.0 + :yellow-gun-hits 7 + :yellow-bomb-time 4800.0 + ) + ) + ((< 10 v1-5) + (new 'static 'robotboss-dda + :blue-bomb-time 4800.0 + :num-blobs 10 + :green-bomb-time 4200.0 + :red-shots-min 4 + :red-shot-time-min 4800.0 + :red-shot-time-rnd 600.0 + :red-bomb-time 3600.0 + :yellow-shot-time-min 1500.0 + :yellow-gun-hits 10 + :yellow-bomb-time 4800.0 + ) + ) + ((< 5 v1-5) + (new 'static 'robotboss-dda + :blue-bomb-time 4800.0 + :num-blobs 11 + :green-bomb-time 4200.0 + :red-shots-min 4 + :red-shot-time-min 4200.0 + :red-shot-time-rnd 600.0 + :red-bomb-time 3600.0 + :yellow-shot-time-min 1200.0 + :yellow-gun-hits 13 + :yellow-bomb-time 4800.0 + ) + ) + (else + (new 'static 'robotboss-dda + :blue-bomb-time 4800.0 + :num-blobs 12 + :green-bomb-time 4200.0 + :red-shots-min 5 + :red-shot-time-min 3600.0 + :red-shot-time-rnd 600.0 + :red-bomb-time 3600.0 + :yellow-shot-time-min 900.0 + :yellow-gun-hits 16 + :yellow-bomb-time 4800.0 + ) + ) + ) + ) + ) + ) + (none) + ) + +;; definition for function robotboss-blue-done +(defbehavior robotboss-blue-done robotboss () + (robotboss-yellow-eco-off) + (let ((a1-0 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-0 from) self) + (set! (-> a1-0 num-params) 0) + (set! (-> a1-0 message) 'show) + (let ((t9-1 send-event-function) + (v1-1 (-> self alts 11)) + ) + (t9-1 (if v1-1 + (-> v1-1 extra process) + ) + a1-0 + ) + ) + ) + ) + +;; failed to figure out what this is: +(defstate robotboss-blue-wait (robotboss) + :event + robotboss-handler + :enter + (behavior () + (set! (-> self state-time) (-> *display* game-frame-counter)) + (robotboss-setup-for-hits 4 5) + (let ((a1-1 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-1 from) self) + (set! (-> a1-1 num-params) 0) + (set! (-> a1-1 message) 'hide) + (let ((t9-1 send-event-function) + (v1-3 (-> self alts 11)) + ) + (t9-1 (if v1-3 + (-> v1-3 extra process) + ) + a1-1 + ) + ) + ) + (process-entity-status! self (entity-perm-status bit-3) #t) + (set! (-> self use-interesting) #t) + (robotboss-yellow-eco-on) + (none) + ) + :exit + (behavior () + (let ((a0-1 (handle->process (-> self shot-attractor)))) + (if a0-1 + (deactivate a0-1) + ) + ) + (let ((a1-1 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-1 from) self) + (set! (-> a1-1 num-params) 1) + (set! (-> a1-1 message) 'open) + (set! (-> a1-1 param 0) (the-as uint (-> *part-group-id-table* 674))) + (let ((t9-1 send-event-function) + (v1-10 (-> self alts 3)) + ) + (t9-1 (if v1-10 + (-> v1-10 extra process) + ) + a1-1 + ) + ) + ) + (let ((a1-2 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-2 from) self) + (set! (-> a1-2 num-params) 1) + (set! (-> a1-2 message) 'open) + (set! (-> a1-2 param 0) (the-as uint 0.1)) + (let ((t9-2 send-event-function) + (v1-17 (-> self alts 0)) + ) + (t9-2 (if v1-17 + (-> v1-17 extra process) + ) + a1-2 + ) + ) + ) + (set! + (-> + (the-as collide-shape-prim-group (-> self root-override root-prim)) + prims + 0 + collide-with + ) + (the-as uint 0) + ) + (set! + (-> + (the-as collide-shape-prim-group (-> self root-override root-prim)) + prims + 0 + prim-core + collide-as + ) + (the-as uint 0) + ) + (set! (-> self use-interesting) #f) + (let ((a1-3 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-3 from) self) + (set! (-> a1-3 num-params) 1) + (set! (-> a1-3 message) 'point-of-interest) + (set! (-> a1-3 param 0) (the-as uint #f)) + (send-event-function *camera* a1-3) + ) + (robotboss-blue-done) + (if (nonzero? (-> self looping-sound 0)) + (stop! (-> self looping-sound 0)) + ) + (if (nonzero? (-> self looping-sound 1)) + (stop! (-> self looping-sound 1)) + ) + (robotboss-set-dda) + (robotboss-cut-cam-exit) + (none) + ) + :trans + (behavior () + (robotboss-always-trans robotboss-blue-dark-bomb) + (robotboss-shooting-trans 9) + (cond + ((zero? (-> self hits-to-go)) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM06" + #t + (the-as vector #f) + ) + (robotboss-blue-done) + (set! (-> self took-hit) #f) + (+! (-> self hits-to-go) -1) + (ja-channel-push! 1 30) + (let ((v1-8 (-> self skel root-channel 0))) + (set! + (-> v1-8 frame-group) + (the-as art-joint-anim (-> self draw art-group data 33)) + ) + ) + (sound-play-by-name + (static-sound-name "explod-eye") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + (set! (-> self blue-smoke) #t) + (let ((gp-1 (new 'stack-no-clear 'vector))) + (vector<-cspace! gp-1 (-> self node-list data 7)) + (let ((s5-1 (get-process *default-dead-pool* part-tracker #x4000))) + (when s5-1 + (let ((t9-9 (method-of-type part-tracker activate))) + (t9-9 + (the-as part-tracker s5-1) + *entity-pool* + 'part-tracker + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + s5-1 + part-tracker-init + (-> *part-group-id-table* 644) + 300 + #f + #f + #f + gp-1 + ) + (-> s5-1 ppointer) + ) + ) + ) + (let* ((s5-2 (get-process *default-dead-pool* manipy #x4000)) + (gp-2 (when s5-2 + (let ((t9-12 (method-of-type manipy activate))) + (t9-12 + (the-as manipy s5-2) + self + 'manipy + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + s5-2 + manipy-init + (-> self root-override trans) + (-> self entity) + *robotboss-blueeco-sg* + #f + ) + (-> s5-2 ppointer) + ) + ) + ) + (let ((a1-10 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-10 from) self) + (set! (-> a1-10 num-params) 1) + (set! (-> a1-10 message) 'flash) + (set! (-> a1-10 param 0) (the-as uint 255.0)) + (send-event-function (ppointer->process (-> self parent)) a1-10) + ) + (let ((a1-11 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-11 from) self) + (set! (-> a1-11 num-params) 1) + (set! (-> a1-11 message) 'anim-mode) + (set! (-> a1-11 param 0) (the-as uint 'play1)) + (send-event-function (ppointer->process gp-2) a1-11) + ) + (let ((a1-12 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-12 from) self) + (set! (-> a1-12 num-params) 1) + (set! (-> a1-12 message) 'rot-quat) + (set! (-> a1-12 param 0) (the-as uint (-> self root-override quat))) + (send-event-function (ppointer->process gp-2) a1-12) + ) + (let ((a1-13 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-13 from) self) + (set! (-> a1-13 num-params) 1) + (set! (-> a1-13 message) 'art-joint-anim) + (set! (-> a1-13 param 0) (the-as uint "robotboss-blueeco-blue-last-hit")) + (send-event-function (ppointer->process gp-2) a1-13) + ) + ) + ) + ((-> self took-hit) + (if + (not + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM17" + #t + (the-as vector #f) + ) + ) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "MAI-AM06" + #t + (the-as vector #f) + ) + ) + (set! (-> self took-hit) #f) + (ja-channel-push! 1 30) + (let ((v1-54 (-> self skel root-channel 0))) + (set! + (-> v1-54 frame-group) + (the-as art-joint-anim (-> self draw art-group data 4)) + ) + ) + ) + ) + (when (not (or (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 5) + ) + (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 33) + ) + ) + ) + ) + (robotboss-blue-beam 8 #t) + (robotboss-blue-beam 9 #f) + (when + ((method-of-type ambient-control TODO-RENAME-10) + (the-as ambient-control (&-> self ambient)) + (new 'stack-no-clear 'vector) + 3000 + (the-as float 327680.0) + self + ) + (let* ((v1-73 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-74 (the-as number (logior #x3f800000 v1-73))) + (f0-2 (+ -1.0 (the-as float v1-74))) + ) + (cond + ((< 0.8 f0-2) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM02" + #t + (the-as vector #f) + ) + ) + ((< 0.6 f0-2) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM10" + #t + (the-as vector #f) + ) + ) + ((< 0.4 f0-2) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "MAI-AM08" + #t + (the-as vector #f) + ) + ) + ((< 0.2 f0-2) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "MAI-AM03" + #t + (the-as vector #f) + ) + ) + (else + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM07" + #t + (the-as vector #f) + ) + ) + ) + ) + ) + (robotboss-position) + (robotboss-cut-cam + (the-as float 5.0) + (the-as float 50.0) + (the-as int (-> self draw art-group data 5)) + ) + (none) + ) + :code + (behavior () + (ja-channel-push! 1 120) + (let ((a0-1 (-> self skel root-channel 0))) + (set! + (-> a0-1 frame-group) + (the-as art-joint-anim (-> self draw art-group data 3)) + ) + (set! + (-> a0-1 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 3)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-1 param 1) 1.0) + (set! (-> a0-1 frame-num) 0.0) + (joint-control-channel-group! + a0-1 + (the-as art-joint-anim (-> self draw art-group data 3)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-2 (-> self skel root-channel 0))) + (set! + (-> a0-2 param 0) + (the float (+ (-> a0-2 frame-group data 0 length) -1)) + ) + (set! (-> a0-2 param 1) 1.0) + (joint-control-channel-group-eval! + a0-2 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (while #t + (when (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 3) + ) + ) + (ja-channel-push! 1 60) + (let ((v1-32 (-> self skel root-channel 0))) + (set! + (-> v1-32 frame-group) + (the-as art-joint-anim (-> self draw art-group data 3)) + ) + ) + ) + (let ((a0-12 (-> self skel root-channel 0))) + (set! (-> a0-12 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-12 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-12 param 1) 1.0) + (set! (-> a0-12 frame-num) 0.0) + (joint-control-channel-group! + a0-12 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-13 (-> self skel root-channel 0))) + (set! + (-> a0-13 param 0) + (the float (+ (-> a0-13 frame-group data 0 length) -1)) + ) + (set! (-> a0-13 param 1) 1.0) + (joint-control-channel-group-eval! + a0-13 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (when (<= (-> self hits-to-go) 0) + (let ((a1-6 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-6 from) self) + (set! (-> a1-6 num-params) 1) + (set! (-> a1-6 message) 'target) + (set! (-> a1-6 param 0) (the-as uint 0.0)) + (let ((t9-8 send-event-function) + (v1-69 (-> self alts 12)) + ) + (t9-8 (if v1-69 + (-> v1-69 extra process) + ) + a1-6 + ) + ) + ) + (ja-channel-push! 1 30) + (let ((v1-74 (-> self skel root-channel 0))) + (set! + (-> v1-74 frame-group) + (the-as art-joint-anim (-> self draw art-group data 5)) + ) + ) + (let ((a0-20 (-> self skel root-channel 0))) + (set! (-> a0-20 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-20 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-20 param 1) 1.0) + (set! (-> a0-20 frame-num) 0.0) + (joint-control-channel-group! + a0-20 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-21 (-> self skel root-channel 0))) + (set! + (-> a0-21 param 0) + (the float (+ (-> a0-21 frame-group data 0 length) -1)) + ) + (set! (-> a0-21 param 1) 1.0) + (joint-control-channel-group-eval! + a0-21 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (go robotboss-blue-dark-bomb) + ) + ) + (none) + ) + :post + (the-as (function none :behavior robotboss) transform-post) + ) + +;; definition for method 11 of type robotboss +;; Used lq/sq +(defmethod copy-defaults! robotboss ((obj robotboss) (arg0 res-lump)) + (stack-size-set! (-> obj main-thread) 512) + (let + ((s4-0 + (new + 'process + 'collide-shape-moving + obj + (collide-list-enum usually-hit-by-player) + ) + ) + ) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) default-collision-reaction) + (set! (-> s4-0 no-reaction) nothing) + (let + ((s3-0 (new 'process 'collide-shape-prim-group s4-0 (the-as uint 19) 0))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 2048)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 1)) + (set! (-> s3-0 transform-index) 0) + (set-vector! (-> s3-0 local-sphere) 0.0 0.0 0.0 368640.0) + (dummy-46 s4-0) + (let + ((s2-0 + (new + 'process + 'collide-shape-prim-mesh + s4-0 + (the-as uint 0) + (the-as uint 4) + ) + ) + ) + (set! (-> s2-0 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-0 collide-with) (the-as uint 16)) + (set! (-> s2-0 prim-core action) (the-as uint 1)) + (set! (-> s2-0 prim-core offense) 4) + (set! (-> s2-0 transform-index) 7) + (set-vector! (-> s2-0 local-sphere) 0.0 0.0 0.0 32768.0) + ) + (dummy-28 s3-0) + (let + ((s2-1 + (new + 'process + 'collide-shape-prim-mesh + s4-0 + (the-as uint 1) + (the-as uint 0) + ) + ) + ) + (set! (-> s2-1 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-1 collide-with) (the-as uint 16)) + (set! (-> s2-1 prim-core action) (the-as uint 1)) + (set! (-> s2-1 prim-core offense) 4) + (set! (-> s2-1 transform-index) 6) + (set-vector! (-> s2-1 local-sphere) 0.0 0.0 0.0 57344.0) + ) + (dummy-28 s3-0) + (let + ((s2-2 + (new + 'process + 'collide-shape-prim-mesh + s4-0 + (the-as uint 2) + (the-as uint 0) + ) + ) + ) + (set! (-> s2-2 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-2 collide-with) (the-as uint 16)) + (set! (-> s2-2 prim-core action) (the-as uint 1)) + (set! (-> s2-2 prim-core offense) 4) + (set! (-> s2-2 transform-index) 6) + (set-vector! (-> s2-2 local-sphere) 0.0 -57344.0 61440.0 73728.0) + ) + (dummy-28 s3-0) + (let + ((s2-3 + (new + 'process + 'collide-shape-prim-mesh + s4-0 + (the-as uint 3) + (the-as uint 8) + ) + ) + ) + (set! (-> s2-3 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-3 collide-with) (the-as uint 16)) + (set! (-> s2-3 prim-core action) (the-as uint 1)) + (set! (-> s2-3 prim-core offense) 4) + (set! (-> s2-3 transform-index) 16) + (set-vector! (-> s2-3 local-sphere) 0.0 -20480.0 69632.0 237568.0) + ) + (dummy-28 s3-0) + (let + ((s2-4 + (new + 'process + 'collide-shape-prim-mesh + s4-0 + (the-as uint 4) + (the-as uint 0) + ) + ) + ) + (set! (-> s2-4 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-4 collide-with) (the-as uint 16)) + (set! (-> s2-4 prim-core action) (the-as uint 1)) + (set! (-> s2-4 prim-core offense) 4) + (set! (-> s2-4 transform-index) 14) + (set-vector! (-> s2-4 local-sphere) 0.0 0.0 0.0 81920.0) + ) + (dummy-28 s3-0) + (let + ((s2-5 + (new + 'process + 'collide-shape-prim-mesh + s4-0 + (the-as uint 5) + (the-as uint 1) + ) + ) + ) + (set! (-> s2-5 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-5 collide-with) (the-as uint 16)) + (set! (-> s2-5 prim-core action) (the-as uint 1)) + (set! (-> s2-5 prim-core offense) 4) + (set! (-> s2-5 transform-index) 39) + (set-vector! (-> s2-5 local-sphere) 0.0 0.0 0.0 69632.0) + ) + (dummy-28 s3-0) + (let + ((s2-6 + (new + 'process + 'collide-shape-prim-mesh + s4-0 + (the-as uint 6) + (the-as uint 0) + ) + ) + ) + (set! (-> s2-6 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-6 collide-with) (the-as uint 16)) + (set! (-> s2-6 prim-core action) (the-as uint 1)) + (set! (-> s2-6 prim-core offense) 4) + (set! (-> s2-6 transform-index) 31) + (set-vector! (-> s2-6 local-sphere) 0.0 -57344.0 0.0 90112.0) + ) + (dummy-28 s3-0) + (let + ((s2-7 + (new + 'process + 'collide-shape-prim-mesh + s4-0 + (the-as uint 7) + (the-as uint 0) + ) + ) + ) + (set! (-> s2-7 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-7 collide-with) (the-as uint 16)) + (set! (-> s2-7 prim-core action) (the-as uint 1)) + (set! (-> s2-7 prim-core offense) 4) + (set! (-> s2-7 transform-index) 30) + (set-vector! (-> s2-7 local-sphere) 0.0 24576.0 0.0 81920.0) + ) + (dummy-28 s3-0) + (let + ((s2-8 + (new + 'process + 'collide-shape-prim-mesh + s4-0 + (the-as uint 8) + (the-as uint 0) + ) + ) + ) + (set! (-> s2-8 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-8 collide-with) (the-as uint 16)) + (set! (-> s2-8 prim-core action) (the-as uint 1)) + (set! (-> s2-8 prim-core offense) 4) + (set! (-> s2-8 transform-index) 57) + (set-vector! (-> s2-8 local-sphere) 0.0 0.0 0.0 81920.0) + ) + (dummy-28 s3-0) + (let + ((s2-9 + (new + 'process + 'collide-shape-prim-mesh + s4-0 + (the-as uint 9) + (the-as uint 2) + ) + ) + ) + (set! (-> s2-9 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-9 collide-with) (the-as uint 16)) + (set! (-> s2-9 prim-core action) (the-as uint 1)) + (set! (-> s2-9 prim-core offense) 4) + (set! (-> s2-9 transform-index) 68) + (set-vector! (-> s2-9 local-sphere) 0.0 0.0 0.0 49152.0) + ) + (dummy-28 s3-0) + (let + ((s2-10 + (new + 'process + 'collide-shape-prim-mesh + s4-0 + (the-as uint 10) + (the-as uint 0) + ) + ) + ) + (set! (-> s2-10 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-10 collide-with) (the-as uint 16)) + (set! (-> s2-10 prim-core action) (the-as uint 1)) + (set! (-> s2-10 prim-core offense) 4) + (set! (-> s2-10 transform-index) 4) + (set-vector! (-> s2-10 local-sphere) 0.0 24576.0 0.0 102400.0) + ) + (dummy-28 s3-0) + (let + ((s2-11 + (new + 'process + 'collide-shape-prim-mesh + s4-0 + (the-as uint 11) + (the-as uint 0) + ) + ) + ) + (set! (-> s2-11 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-11 collide-with) (the-as uint 16)) + (set! (-> s2-11 prim-core action) (the-as uint 1)) + (set! (-> s2-11 prim-core offense) 4) + (set! (-> s2-11 transform-index) 77) + (set-vector! (-> s2-11 local-sphere) 0.0 0.0 0.0 73728.0) + ) + (dummy-28 s3-0) + (let + ((s2-12 + (new + 'process + 'collide-shape-prim-mesh + s4-0 + (the-as uint 12) + (the-as uint 0) + ) + ) + ) + (set! (-> s2-12 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-12 collide-with) (the-as uint 16)) + (set! (-> s2-12 prim-core action) (the-as uint 1)) + (set! (-> s2-12 prim-core offense) 4) + (set! (-> s2-12 transform-index) 75) + (set-vector! (-> s2-12 local-sphere) 0.0 24576.0 0.0 81920.0) + ) + (dummy-28 s3-0) + (let + ((s2-13 + (new + 'process + 'collide-shape-prim-mesh + s4-0 + (the-as uint 13) + (the-as uint 0) + ) + ) + ) + (set! (-> s2-13 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-13 collide-with) (the-as uint 16)) + (set! (-> s2-13 prim-core action) (the-as uint 1)) + (set! (-> s2-13 prim-core offense) 4) + (set! (-> s2-13 transform-index) 74) + (set-vector! (-> s2-13 local-sphere) 0.0 40960.0 0.0 73728.0) + ) + (dummy-28 s3-0) + (let + ((s2-14 + (new + 'process + 'collide-shape-prim-mesh + s4-0 + (the-as uint 14) + (the-as uint 0) + ) + ) + ) + (set! (-> s2-14 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-14 collide-with) (the-as uint 16)) + (set! (-> s2-14 prim-core action) (the-as uint 1)) + (set! (-> s2-14 prim-core offense) 4) + (set! (-> s2-14 transform-index) 73) + (set-vector! (-> s2-14 local-sphere) 0.0 32768.0 0.0 61440.0) + ) + (dummy-28 s3-0) + (let + ((s2-15 + (new + 'process + 'collide-shape-prim-mesh + s4-0 + (the-as uint 15) + (the-as uint 0) + ) + ) + ) + (set! (-> s2-15 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-15 collide-with) (the-as uint 16)) + (set! (-> s2-15 prim-core action) (the-as uint 1)) + (set! (-> s2-15 prim-core offense) 4) + (set! (-> s2-15 transform-index) 84) + (set-vector! (-> s2-15 local-sphere) 0.0 40960.0 -8192.0 98304.0) + ) + (dummy-28 s3-0) + (let + ((s2-16 + (new + 'process + 'collide-shape-prim-mesh + s4-0 + (the-as uint 16) + (the-as uint 0) + ) + ) + ) + (set! (-> s2-16 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-16 collide-with) (the-as uint 16)) + (set! (-> s2-16 prim-core action) (the-as uint 1)) + (set! (-> s2-16 prim-core offense) 4) + (set! (-> s2-16 transform-index) 83) + (set-vector! (-> s2-16 local-sphere) 0.0 65536.0 0.0 73728.0) + ) + (dummy-28 s3-0) + (let + ((s2-17 + (new + 'process + 'collide-shape-prim-mesh + s4-0 + (the-as uint 17) + (the-as uint 0) + ) + ) + ) + (set! (-> s2-17 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-17 collide-with) (the-as uint 16)) + (set! (-> s2-17 prim-core action) (the-as uint 1)) + (set! (-> s2-17 prim-core offense) 4) + (set! (-> s2-17 transform-index) 82) + (set-vector! (-> s2-17 local-sphere) 0.0 32768.0 0.0 61440.0) + ) + (dummy-28 s3-0) + (let + ((s2-18 + (new + 'process + 'collide-shape-prim-mesh + s4-0 + (the-as uint 18) + (the-as uint 0) + ) + ) + ) + (set! (-> s2-18 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-18 collide-with) (the-as uint 16)) + (set! (-> s2-18 prim-core action) (the-as uint 1)) + (set! (-> s2-18 prim-core offense) 4) + (set! (-> s2-18 transform-index) 3) + (set-vector! (-> s2-18 local-sphere) 0.0 0.0 0.0 61440.0) + ) + (dummy-28 s3-0) + ) + (set! (-> s4-0 nav-radius) 4096.0) + (dummy-50 s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (dummy-14 obj *robotboss-sg* '()) + (aybabtu 2) + (set! + (-> obj nav) + (new 'process 'nav-control (-> obj root-override) 16 (the-as float 40960.0)) + ) + (logior! + (-> obj nav flags) + (nav-control-flags display-marks bit3 bit5 bit6 bit7) + ) + (set! + (-> obj root-override nav-flags) + (logand -2 (-> obj root-override nav-flags)) + ) + (let ((t9-48 (method-of-type path-control new)) + (a0-87 'process) + (a1-47 path-control) + (a2-23 obj) + (a3-22 'path) + (t0-21 0.0) + ) + (set! (-> obj path) (t9-48 a0-87 a1-47 a2-23 a3-22 (the-as float t0-21))) + (logior! + (-> obj path flags) + (path-control-flag display draw-line draw-point draw-text) + ) + (logclear! (-> obj mask) (process-mask actor-pause)) + (set! (-> obj root-override pause-adjust-distance) 1228800.0) + (set-vector! (-> obj old-loc) 8192.0 0.0 245760.0 1.0) + (set! (-> obj desired-loc quad) (-> obj old-loc quad)) + (set! (-> obj loc-t) 1.0) + (set! (-> obj loc-t-duration) 1) + (set! (-> obj loc-t-start) 0) + (set! (-> obj shot-attractor) (the-as handle #f)) + (set! (-> obj white-eco) (the-as handle #f)) + (set! (-> obj desired-pool-y) -30720.0) + (set! (-> obj des-cam-entity) #f) + (set! (-> obj use-interesting) #f) + (set! (-> obj ignore-camera) #f) + (dotimes (v1-211 13) + (set! (-> obj alts v1-211) #f) + ) + (let ((s5-1 (entity-actor-count (-> obj entity) 'alt-actor))) + (dotimes (s4-1 (min 13 s5-1)) + (set! + (-> obj alts s4-1) + (entity-actor-lookup (-> obj entity) 'alt-actor s4-1) + ) + ) + ) + (set! + (-> obj particle 0) + (create-launch-control (-> *part-group-id-table* 636) obj) + ) + (set! + (-> obj particle 1) + (create-launch-control (-> *part-group-id-table* 637) obj) + ) + (set! + (-> obj particle 2) + (create-launch-control (-> *part-group-id-table* 645) obj) + ) + (set! + (-> obj particle 3) + (create-launch-control (-> *part-group-id-table* 650) obj) + ) + (set! + (-> obj particle 4) + (create-launch-control (-> *part-group-id-table* 654) obj) + ) + (set! + (-> obj particle 5) + (create-launch-control (-> *part-group-id-table* 646) obj) + ) + (set! + (-> obj particle 6) + (create-launch-control (-> *part-group-id-table* 651) obj) + ) + (set! + (-> obj looping-sound 0) + (new + 'process + 'ambient-sound + (new 'static 'sound-spec + :mask #x80 + :num 1.0 + :group #x1 + :sound-name + (new 'static 'sound-name :lo #x756c622d6f626f72) + :volume #x400 + :fo-max 80 + ) + (-> obj root-override trans) + ) + ) + (set! + (-> obj looping-sound 1) + (new + 'process + 'ambient-sound + (new 'static 'sound-spec + :mask #x80 + :num 1.0 + :group #x1 + :sound-name + (new 'static 'sound-name :lo #x63726f742d6f6365) + :volume #x400 + :fo-max 80 + ) + (-> obj root-override trans) + ) + ) + (set! + (-> obj looping-sound 2) + (new + 'process + 'ambient-sound + (new 'static 'sound-spec + :mask #x80 + :num 1.0 + :group #x1 + :sound-name + (new 'static 'sound-name :lo #x7a7a75622d646572) + :volume #x400 + :fo-max 80 + ) + (-> obj root-override trans) + ) + ) + (let ((t9-61 (method-of-type ambient-sound new)) + (a0-110 'process) + (a1-60 ambient-sound) + (a2-28 + (new 'static 'sound-spec + :mask #x80 + :num 1.0 + :group #x1 + :sound-name + (new 'static 'sound-name :lo #x7a7a75622d676662) + :volume #x400 + :fo-max 80 + ) + ) + (a3-26 (-> obj root-override trans)) + ) + (set! (-> obj looping-sound 3) (t9-61 a0-110 a1-60 a2-28 a3-26)) + (set! (-> obj blue-smoke) #f) + (set! (-> obj red-smoke) #f) + (set! (-> obj yellow-smoke) #f) + ((method-of-type ambient-control dummy-9) + (the-as ambient-control (&-> obj ambient)) + (the-as vector a1-60) + (the-as int a2-28) + (the-as float a3-26) + (the-as process-drawable t0-21) + ) + ) + ) + (set! + (-> obj yellow-gun) + (new 'process 'joint-mod (joint-mod-handler-mode flex-blend) obj 16) + ) + (set-vector! (-> obj yellow-gun twist-max) 8192.0 8192.0 0.0 1.0) + (set! (-> obj yellow-gun up) (the-as uint 1)) + (set! (-> obj yellow-gun nose) (the-as uint 2)) + (set! (-> obj yellow-gun ear) (the-as uint 0)) + (set! (-> obj yellow-gun max-dist) 819200.0) + (set! (-> obj yellow-gun ignore-angle) 16384.0) + (set! (-> obj palette-val) 0.0) + (set! + (-> obj dda) + (new 'static 'robotboss-dda + :blue-bomb-time 4200.0 + :num-blobs 12 + :green-bomb-time 4200.0 + :red-shots-min 5 + :red-shot-time-min 3600.0 + :red-shot-time-rnd 600.0 + :red-bomb-time 3600.0 + :yellow-shot-time-min 900.0 + :yellow-shot-time-rnd 600.0 + :yellow-gun-hits 5 + :yellow-bomb-time 3600.0 + ) + ) + (go robotboss-blue-wait) + (none) + ) diff --git a/test/decompiler/reference/levels/firecanyon/assistant-firecanyon_REF.gc b/test/decompiler/reference/levels/firecanyon/assistant-firecanyon_REF.gc index 5ba2022bb6..942585f699 100644 --- a/test/decompiler/reference/levels/firecanyon/assistant-firecanyon_REF.gc +++ b/test/decompiler/reference/levels/firecanyon/assistant-firecanyon_REF.gc @@ -42,7 +42,7 @@ assistant-firecanyon ((obj assistant-firecanyon) (arg0 symbol)) (case (current-status (-> obj tasks)) - ((6) + (((task-status need-reward-speech)) (if arg0 (close-current! (-> obj tasks)) ) @@ -108,7 +108,7 @@ 0 "ERROR: : ~S playing anim for task status ~S~%" (-> obj name) - (task-status->string (the-as task-status (current-status (-> obj tasks)))) + (task-status->string (current-status (-> obj tasks))) ) ) (-> obj draw art-group data 3) @@ -118,7 +118,7 @@ ;; definition for method 31 of type assistant-firecanyon (defmethod get-art-elem assistant-firecanyon ((obj assistant-firecanyon)) - (if (zero? (current-status (-> obj tasks))) + (if (= (current-status (-> obj tasks)) (task-status invalid)) (-> obj draw art-group data 8) (-> obj draw art-group data 3) ) @@ -164,13 +164,7 @@ (logtest? (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons l3)) ) ) - (< - (- - (-> *display* base-frame-counter) - (the-as int (-> self state-time)) - ) - 3000 - ) + (< (- (-> *display* base-frame-counter) (-> self state-time)) 3000) ) ) (hide-hud) @@ -246,7 +240,7 @@ (while #t (let ((gp-0 #t)) (cond - ((zero? (current-status (-> self tasks))) + ((= (current-status (-> self tasks)) (task-status invalid)) (let* ((v1-8 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) (v1-9 (the-as number (logior #x3f800000 v1-8))) ) @@ -846,7 +840,7 @@ ;; definition for method 39 of type assistant-firecanyon (defmethod should-display? assistant-firecanyon ((obj assistant-firecanyon)) (first-any (-> obj tasks) #t) - (= (current-status (-> obj tasks)) 6) + (= (current-status (-> obj tasks)) (task-status need-reward-speech)) ) ;; definition for method 11 of type assistant-firecanyon diff --git a/test/decompiler/reference/levels/flut_common/flutflut_REF.gc b/test/decompiler/reference/levels/flut_common/flutflut_REF.gc index 14dace4e3a..1451ae47af 100644 --- a/test/decompiler/reference/levels/flut_common/flutflut_REF.gc +++ b/test/decompiler/reference/levels/flut_common/flutflut_REF.gc @@ -616,25 +616,8 @@ :mask #x80 :num 1.0 :group #x1 - :sound-name-char - (new 'static 'array uint8 16 - #x7a - #x6f - #x6f - #x6d - #x2d - #x74 - #x65 - #x6c - #x65 - #x70 - #x6f - #x72 - #x74 - #x0 - #x0 - #x0 - ) + :sound-name + (new 'static 'sound-name :lo #x6c65742d6d6f6f7a) :volume #x400 :fo-max 30 ) diff --git a/test/decompiler/reference/levels/intro/evilbro_REF.gc b/test/decompiler/reference/levels/intro/evilbro_REF.gc index e6990cf27b..037ad2c127 100644 --- a/test/decompiler/reference/levels/intro/evilbro_REF.gc +++ b/test/decompiler/reference/levels/intro/evilbro_REF.gc @@ -286,7 +286,7 @@ 0 "ERROR: : ~S playing anim for task status ~S~%" (-> obj name) - (task-status->string (the-as task-status (current-status (-> obj tasks)))) + (task-status->string (current-status (-> obj tasks))) ) ) (the-as basic (get-art-elem obj)) @@ -315,7 +315,3 @@ (dummy-42 obj) (none) ) - - - - diff --git a/test/decompiler/reference/levels/jungle/bouncer_REF.gc b/test/decompiler/reference/levels/jungle/bouncer_REF.gc index 75f98b7abb..c345045d04 100644 --- a/test/decompiler/reference/levels/jungle/bouncer_REF.gc +++ b/test/decompiler/reference/levels/jungle/bouncer_REF.gc @@ -154,10 +154,7 @@ (set! (-> self smush) 0.0) (while #t (cond - ((>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 60 - ) + ((>= (- (-> *display* base-frame-counter) (-> self state-time)) 60) (let ((a0-1 (-> self skel root-channel 0))) (set! (-> a0-1 param 0) 0.0) (set! (-> a0-1 param 1) 0.1) diff --git a/test/decompiler/reference/levels/jungle/fisher-JUN_REF.gc b/test/decompiler/reference/levels/jungle/fisher-JUN_REF.gc new file mode 100644 index 0000000000..8e8de16e23 --- /dev/null +++ b/test/decompiler/reference/levels/jungle/fisher-JUN_REF.gc @@ -0,0 +1,3348 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type fisher-bank +(deftype fisher-bank (basic) + ((width meters :offset-assert 4) + (net-radius meters :offset-assert 8) + (max-caught int32 :offset-assert 12) + (max-missed int32 :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x14 + :flag-assert #x900000014 + ) + +;; definition for method 3 of type fisher-bank +(defmethod inspect fisher-bank ((obj fisher-bank)) + (format #t "[~8x] ~A~%" obj (-> obj type)) + (format #t "~Twidth: (meters ~m)~%" (-> obj width)) + (format #t "~Tnet-radius: (meters ~m)~%" (-> obj net-radius)) + (format #t "~Tmax-caught: ~D~%" (-> obj max-caught)) + (format #t "~Tmax-missed: ~D~%" (-> obj max-missed)) + obj + ) + +;; definition for symbol *FISHER-bank*, type fisher-bank +(define + *FISHER-bank* + (new 'static 'fisher-bank + :width (meters 3.3) + :net-radius (meters 0.7) + :max-caught #xc8 + :max-missed 20 + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-group-id-table* 177) + (new 'static 'sparticle-launch-group + :length 2 + :duration #x5 + :linger-duration #x1c2 + :flags (sp-group-flag use-local-clock) + :name "group-bad-fish" + :launcher + (new 'static 'inline-array sparticle-group-item 2 + (sp-item 828) + (sp-item 2013) + ) + :bounds (new 'static 'sphere :w 8192.0) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 828) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 17 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-rnd-flt spt-num 0.5 0.5 1.0) + (sp-flt spt-y (meters 0.2)) + (sp-rnd-flt spt-scale-x (meters 0.5) (meters 0.5) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-rnd-flt spt-b 128.0 128.0 1.0) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-vel-x (meters -0.0033333334) (meters 0.006666667) 1.0) + (sp-flt spt-scalevel-x (meters 0.0033333334)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a 0.53333336) + (sp-int spt-timer 600) + (sp-cpuinfo-flags bit2 bit14) + (sp-int-plain-rnd spt-next-time 10 53 1) + (sp-launcher-by-id spt-next-launcher 829) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 829) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 + (sp-flt spt-fade-a -0.21333334) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 2013) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 15 + (sp-tex spt-texture (new 'static 'texture-id :index #x9 :page #x2)) + (sp-rnd-flt spt-num 0.1 1.0 1.0) + (sp-rnd-flt spt-x (meters -0.7) (meters 0.5) 1.0) + (sp-rnd-flt spt-z -409.6 819.2 1.0) + (sp-rnd-flt spt-scale-x (meters 0.05) (meters 0.1) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-flt spt-fade-a -0.42666668) + (sp-flt spt-accel-y 1.3653333) + (sp-int spt-timer 150) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-group-id-table* 178) + (new 'static 'sparticle-launch-group + :length 1 + :duration #x5 + :linger-duration #x1c2 + :flags (sp-group-flag use-local-clock) + :name "group-normal-fish" + :launcher + (new 'static 'inline-array sparticle-group-item 1 (sp-item 2001)) + :bounds (new 'static 'sphere :w 8192.0) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 2001) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 15 + (sp-tex spt-texture (new 'static 'texture-id :index #x9 :page #x2)) + (sp-rnd-flt spt-num 0.1 1.0 1.0) + (sp-rnd-flt spt-x (meters -0.4) (meters 0.5) 1.0) + (sp-rnd-flt spt-z -1024.0 2048.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.05) (meters 0.1) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-flt spt-fade-a -0.42666668) + (sp-flt spt-accel-y 1.3653333) + (sp-int spt-timer 150) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-group-id-table* 179) + (new 'static 'sparticle-launch-group + :length 2 + :duration #x5 + :linger-duration #x4b0 + :flags (sp-group-flag use-local-clock) + :name "group-fish-collect" + :launcher + (new 'static 'inline-array sparticle-group-item 2 + (sp-item 830) + (sp-item 831) + ) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 831) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 11 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 2.0) + (sp-rnd-flt spt-scale-x (meters 5.0) (meters 1.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 32.0 64.0 1.0) + (sp-rnd-flt spt-g 128.0 128.0 1.0) + (sp-flt spt-a 16.0) + (sp-flt spt-fade-a -1.6) + (sp-int spt-timer 25) + (sp-cpuinfo-flags bit2 bit3) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 830) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 20 + (sp-tex spt-texture (new 'static 'texture-id :index #x2 :page #x2)) + (sp-flt spt-num 16.0) + (sp-rnd-flt spt-scale-x (meters 2.0) (meters 2.0) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.25) (meters 0.5) 1.0) + (sp-rnd-flt spt-r 32.0 64.0 1.0) + (sp-rnd-flt spt-g 128.0 128.0 1.0) + (sp-flt spt-b 0.0) + (sp-flt spt-a 0.0) + (sp-flt spt-scalevel-x (meters 0.009765625)) + (sp-rnd-flt spt-rotvel-z (degrees -0.3) (degrees 0.6) 1.0) + (sp-flt spt-scalevel-y (meters 0.009765625)) + (sp-flt spt-fade-a 1.2) + (sp-int spt-timer 150) + (sp-cpuinfo-flags bit2 bit3) + (sp-func spt-func 'sparticle-track-root) + (sp-int-plain-rnd spt-next-time 10 9 1) + (sp-launcher-by-id spt-next-launcher 832) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 832) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 + (sp-flt spt-fade-a -0.8) + (sp-end) + ) + ) + ) + +;; definition of type fisher-params +(deftype fisher-params (structure) + ((timeout seconds :offset-assert 0) + (vel float :offset-assert 8) + (swing-min seconds :offset-assert 16) + (swing-max seconds :offset-assert 24) + (period seconds :offset-assert 32) + (fish-vel float :offset-assert 40) + (bad-percent float :offset-assert 44) + (deadly-percent float :offset-assert 48) + (powerup-percent float :offset-assert 52) + ) + :allow-misaligned :method-count-assert 9 + :size-assert #x38 + :flag-assert #x900000038 + ) + +;; definition for method 3 of type fisher-params +(defmethod inspect fisher-params ((obj fisher-params)) + (format #t "[~8x] ~A~%" obj 'fisher-params) + (format #t "~Ttimeout: ~D~%" (-> obj timeout)) + (format #t "~Tvel: ~f~%" (-> obj vel)) + (format #t "~Tswing-min: ~D~%" (-> obj swing-min)) + (format #t "~Tswing-max: ~D~%" (-> obj swing-max)) + (format #t "~Tperiod: ~D~%" (-> obj period)) + (format #t "~Tfish-vel: ~f~%" (-> obj fish-vel)) + (format #t "~Tbad-percent: ~f~%" (-> obj bad-percent)) + (format #t "~Tdeadly-percent: ~f~%" (-> obj deadly-percent)) + (format #t "~Tpowerup-percent: ~f~%" (-> obj powerup-percent)) + obj + ) + +;; definition for symbol *fisher-params*, type (array (inline-array fisher-params)) +(define + *fisher-params* + (new + 'static + 'boxed-array + :type (inline-array fisher-params) :length 6 :allocated-length 6 + (new 'static 'inline-array fisher-params 16 + (new 'static 'fisher-params :timeout (seconds 2)) + (new 'static 'fisher-params + :timeout (seconds 0.5) + :vel 0.6 + :swing-max (seconds 0.1) + :period (seconds 0.5) + :fish-vel 1.5 + ) + (new 'static 'fisher-params :timeout (seconds 2)) + (new 'static 'fisher-params + :timeout (seconds 10) + :vel 0.6 + :swing-min (seconds 0.5) + :swing-max (seconds 2) + :period (seconds 0.6) + :fish-vel 1.5 + :powerup-percent 0.1 + ) + (new 'static 'fisher-params :timeout (seconds 2)) + (new 'static 'fisher-params + :timeout (seconds 8) + :vel 3.0 + :swing-min (seconds 0.5) + :swing-max (seconds 2) + :period (seconds 0.6) + :fish-vel 1.6 + :bad-percent 0.5 + :powerup-percent 0.25 + ) + (new 'static 'fisher-params :timeout (seconds 2)) + (new 'static 'fisher-params + :timeout (seconds 15) + :vel 0.6 + :swing-min (seconds 0.5) + :swing-max (seconds 2) + :period (seconds 0.45) + :fish-vel 1.7 + :bad-percent 0.1 + :powerup-percent 0.1 + ) + (new 'static 'fisher-params :timeout (seconds 2)) + (new 'static 'fisher-params + :timeout (seconds 15) + :vel 3.0 + :swing-min (seconds 0.5) + :swing-max (seconds 2) + :period (seconds 0.4) + :fish-vel 1.8 + :bad-percent 0.1 + :powerup-percent 0.1 + ) + (new 'static 'fisher-params :timeout (seconds 2)) + (new 'static 'fisher-params + :timeout (seconds 15) + :vel 3.0 + :swing-min (seconds 0.5) + :swing-max (seconds 2) + :period (seconds 0.5) + :fish-vel 1.9 + :bad-percent 0.9 + :powerup-percent 0.1 + ) + (new 'static 'fisher-params :timeout (seconds 2)) + (new 'static 'fisher-params + :timeout (seconds 2000) + :vel 0.8 + :swing-min (seconds 0.5) + :swing-max (seconds 2) + :period (seconds 0.35) + :fish-vel 2.0 + :bad-percent 0.1 + :powerup-percent 0.1 + ) + (new 'static 'fisher-params :timeout (seconds 2)) + (new 'static 'fisher-params) + ) + (new 'static 'inline-array fisher-params 16 + (new 'static 'fisher-params :timeout (seconds 2)) + (new 'static 'fisher-params + :timeout (seconds 1) + :vel 0.6 + :swing-max (seconds 0.1) + :period (seconds 0.5) + :fish-vel 1.5 + ) + (new 'static 'fisher-params :timeout (seconds 2)) + (new 'static 'fisher-params + :timeout (seconds 11) + :vel 0.6 + :swing-min (seconds 0.5) + :swing-max (seconds 2) + :period (seconds 0.7) + :fish-vel 1.4 + :powerup-percent 0.1 + ) + (new 'static 'fisher-params :timeout (seconds 2)) + (new 'static 'fisher-params + :timeout (seconds 9) + :vel 3.0 + :swing-min (seconds 0.5) + :swing-max (seconds 2) + :period (seconds 0.7) + :fish-vel 1.5 + :bad-percent 0.4 + :powerup-percent 0.25 + ) + (new 'static 'fisher-params :timeout (seconds 2)) + (new 'static 'fisher-params + :timeout (seconds 18) + :vel 0.6 + :swing-min (seconds 0.5) + :swing-max (seconds 2) + :period #x9e + :fish-vel 1.6 + :bad-percent 0.083 + :powerup-percent 0.1 + ) + (new 'static 'fisher-params :timeout (seconds 2)) + (new 'static 'fisher-params + :timeout (seconds 18) + :vel 2.41 + :swing-min (seconds 0.5) + :swing-max (seconds 2) + :period (seconds 0.48) + :fish-vel 1.7 + :bad-percent 0.083 + :powerup-percent 0.1 + ) + (new 'static 'fisher-params :timeout (seconds 2)) + (new 'static 'fisher-params + :timeout (seconds 14) + :vel 3.0 + :swing-min (seconds 0.5) + :swing-max (seconds 2) + :period (seconds 0.58) + :fish-vel 1.8 + :bad-percent 0.8 + :powerup-percent 0.1 + ) + (new 'static 'fisher-params :timeout (seconds 2)) + (new 'static 'fisher-params + :timeout (seconds 2000) + :vel 0.8 + :swing-min (seconds 0.5) + :swing-max (seconds 2) + :period (seconds 0.43) + :fish-vel 1.8 + :bad-percent 0.083 + :powerup-percent 0.1 + ) + (new 'static 'fisher-params :timeout (seconds 2)) + (new 'static 'fisher-params) + ) + (new 'static 'inline-array fisher-params 16 + (new 'static 'fisher-params :timeout (seconds 2)) + (new 'static 'fisher-params + :timeout (seconds 1.5) + :vel 0.6 + :swing-max (seconds 0.1) + :period (seconds 0.5) + :fish-vel 1.5 + ) + (new 'static 'fisher-params :timeout (seconds 2)) + (new 'static 'fisher-params + :timeout (seconds 12) + :vel 0.6 + :swing-min (seconds 0.5) + :swing-max (seconds 2) + :period (seconds 0.8) + :fish-vel 1.4 + :powerup-percent 0.1 + ) + (new 'static 'fisher-params :timeout (seconds 2)) + (new 'static 'fisher-params + :timeout (seconds 10) + :vel 3.0 + :swing-min (seconds 0.5) + :swing-max (seconds 2) + :period (seconds 0.8) + :fish-vel 1.5 + :bad-percent 0.3 + :powerup-percent 0.25 + ) + (new 'static 'fisher-params :timeout (seconds 2)) + (new 'static 'fisher-params + :timeout (seconds 21) + :vel 0.6 + :swing-min (seconds 0.5) + :swing-max (seconds 2) + :period (seconds 0.61) + :fish-vel 1.5 + :bad-percent 0.066 + :powerup-percent 0.1 + ) + (new 'static 'fisher-params :timeout (seconds 2)) + (new 'static 'fisher-params + :timeout (seconds 21) + :vel 1.83 + :swing-min (seconds 0.5) + :swing-max (seconds 2) + :period #xa8 + :fish-vel 1.6 + :bad-percent 0.066 + :powerup-percent 0.1 + ) + (new 'static 'fisher-params :timeout (seconds 2)) + (new 'static 'fisher-params + :timeout (seconds 14) + :vel 3.0 + :swing-min (seconds 0.5) + :swing-max (seconds 2) + :period (seconds 0.66) + :fish-vel 1.6 + :bad-percent 0.6 + :powerup-percent 0.1 + ) + (new 'static 'fisher-params :timeout (seconds 2)) + (new 'static 'fisher-params + :timeout (seconds 2000) + :vel 0.8 + :swing-min (seconds 0.5) + :swing-max (seconds 2) + :period (seconds 0.5133333) + :fish-vel 1.7 + :bad-percent 0.066 + :powerup-percent 0.1 + ) + (new 'static 'fisher-params :timeout (seconds 2)) + (new 'static 'fisher-params) + ) + (new 'static 'inline-array fisher-params 16 + (new 'static 'fisher-params :timeout (seconds 2)) + (new 'static 'fisher-params + :timeout (seconds 2) + :vel 0.6 + :swing-max (seconds 0.1) + :period (seconds 0.5) + :fish-vel 1.5 + ) + (new 'static 'fisher-params :timeout (seconds 2)) + (new 'static 'fisher-params + :timeout (seconds 13) + :vel 0.6 + :swing-min (seconds 0.5) + :swing-max (seconds 2) + :period (seconds 0.9) + :fish-vel 1.3 + :powerup-percent 0.1 + ) + (new 'static 'fisher-params :timeout (seconds 2)) + (new 'static 'fisher-params + :timeout (seconds 11) + :vel 3.0 + :swing-min (seconds 0.5) + :swing-max (seconds 2) + :period (seconds 0.9) + :fish-vel 1.4 + :bad-percent 0.2 + :powerup-percent 0.25 + ) + (new 'static 'fisher-params :timeout (seconds 2)) + (new 'static 'fisher-params + :timeout (seconds 23) + :vel 0.6 + :swing-min (seconds 0.5) + :swing-max (seconds 2) + :period (seconds 0.7) + :fish-vel 1.4 + :bad-percent 0.05 + :powerup-percent 0.1 + ) + (new 'static 'fisher-params :timeout (seconds 2)) + (new 'static 'fisher-params + :timeout (seconds 23) + :vel 1.25 + :swing-min (seconds 0.5) + :swing-max (seconds 2) + :period (seconds 0.65) + :fish-vel 1.5 + :bad-percent 0.05 + :powerup-percent 0.1 + ) + (new 'static 'fisher-params :timeout (seconds 2)) + (new 'static 'fisher-params + :timeout (seconds 13) + :vel 3.0 + :swing-min (seconds 0.5) + :swing-max (seconds 2) + :period (seconds 0.75) + :fish-vel 1.5 + :bad-percent 0.5 + :powerup-percent 0.1 + ) + (new 'static 'fisher-params :timeout (seconds 2)) + (new 'static 'fisher-params + :timeout (seconds 2000) + :vel 0.8 + :swing-min (seconds 0.5) + :swing-max (seconds 2) + :period (seconds 0.6) + :fish-vel 1.6 + :bad-percent 0.05 + :powerup-percent 0.1 + ) + (new 'static 'fisher-params :timeout (seconds 2)) + (new 'static 'fisher-params) + ) + (new 'static 'inline-array fisher-params 26 + (new 'static 'fisher-params :timeout (seconds 2)) + (new 'static 'fisher-params + :timeout (seconds 2.5) + :vel 0.6 + :swing-max (seconds 0.1) + :period (seconds 0.5) + :fish-vel 1.5 + ) + (new 'static 'fisher-params :timeout (seconds 2)) + (new 'static 'fisher-params + :timeout (seconds 13) + :vel 0.6 + :swing-min (seconds 0.5) + :swing-max (seconds 2) + :period (seconds 0.9) + :fish-vel 1.3 + :powerup-percent 0.1 + ) + (new 'static 'fisher-params :timeout (seconds 2)) + (new 'static 'fisher-params + :timeout (seconds 11) + :vel 3.0 + :swing-min (seconds 0.5) + :swing-max (seconds 2) + :period (seconds 0.9) + :fish-vel 1.3 + :bad-percent 0.2 + :powerup-percent 0.25 + ) + (new 'static 'fisher-params :timeout (seconds 2)) + (new 'static 'fisher-params + :timeout (seconds 3) + :vel 0.6 + :swing-min (seconds 333.33) + :swing-max (seconds 0.33333334) + :period (seconds 0.5) + :fish-vel 1.3 + :powerup-percent 0.5 + ) + (new 'static 'fisher-params :timeout (seconds 2)) + (new 'static 'fisher-params + :timeout (seconds 3) + :vel 0.6 + :swing-min (seconds 333.33) + :period (seconds 0.5) + :fish-vel 1.3 + :powerup-percent 0.5 + ) + (new 'static 'fisher-params :timeout (seconds 2)) + (new 'static 'fisher-params + :timeout (seconds 3) + :vel 0.6 + :swing-min (seconds 333.33) + :swing-max (seconds 0.33333334) + :period (seconds 0.5) + :fish-vel 1.3 + :powerup-percent 0.5 + ) + (new 'static 'fisher-params :timeout (seconds 2)) + (new 'static 'fisher-params + :timeout (seconds 3) + :vel 0.6 + :swing-min (seconds 333.33) + :period (seconds 0.5) + :fish-vel 1.3 + :powerup-percent 0.5 + ) + (new 'static 'fisher-params :timeout (seconds 2)) + (new 'static 'fisher-params + :timeout (seconds 11) + :vel 0.6 + :swing-min (seconds 0.5) + :swing-max (seconds 2) + :period (seconds 0.9) + :fish-vel 1.3 + :bad-percent 0.05 + :powerup-percent 0.1 + ) + (new 'static 'fisher-params :timeout (seconds 2)) + (new 'static 'fisher-params + :timeout (seconds 3) + :vel 0.6 + :swing-min (seconds 333.33) + :swing-max (seconds 0.33333334) + :period (seconds 0.5) + :fish-vel 1.3 + :powerup-percent 0.5 + ) + (new 'static 'fisher-params :timeout (seconds 2)) + (new 'static 'fisher-params + :timeout (seconds 3) + :vel 0.6 + :swing-min (seconds 333.33) + :period (seconds 0.5) + :fish-vel 1.3 + :powerup-percent 0.5 + ) + (new 'static 'fisher-params :timeout (seconds 2)) + (new 'static 'fisher-params + :timeout (seconds 3) + :vel 0.6 + :swing-min (seconds 333.33) + :swing-max (seconds 0.33333334) + :period (seconds 0.5) + :fish-vel 1.3 + :powerup-percent 0.5 + ) + (new 'static 'fisher-params :timeout (seconds 2)) + (new 'static 'fisher-params + :timeout (seconds 2000) + :vel 0.7 + :swing-min (seconds 0.5) + :swing-max (seconds 2) + :period (seconds 0.9) + :fish-vel 1.3 + :bad-percent 0.05 + :powerup-percent 0.1 + ) + (new 'static 'fisher-params :timeout (seconds 2)) + (new 'static 'fisher-params) + ) + (new 'static 'inline-array fisher-params 22 + (new 'static 'fisher-params :timeout (seconds 2)) + (new 'static 'fisher-params + :timeout (seconds 3) + :vel 0.6 + :swing-max (seconds 0.1) + :period (seconds 0.5) + :fish-vel 1.5 + ) + (new 'static 'fisher-params :timeout (seconds 2)) + (new 'static 'fisher-params + :timeout (seconds 10) + :vel 0.6 + :swing-min (seconds 0.5) + :swing-max (seconds 2) + :period (seconds 0.6) + :fish-vel 2.0 + :powerup-percent 0.1 + ) + (new 'static 'fisher-params :timeout (seconds 2)) + (new 'static 'fisher-params + :timeout (seconds 5) + :vel 3.0 + :swing-min (seconds 0.5) + :swing-max (seconds 2) + :period (seconds 0.6) + :fish-vel 2.0 + :bad-percent 0.75 + :powerup-percent 0.25 + ) + (new 'static 'fisher-params :timeout (seconds 2)) + (new 'static 'fisher-params + :timeout (seconds 15) + :vel 0.6 + :swing-min (seconds 0.5) + :swing-max (seconds 2) + :period (seconds 0.3) + :fish-vel 2.0 + :bad-percent 0.1 + :powerup-percent 0.1 + ) + (new 'static 'fisher-params :timeout (seconds 2)) + (new 'static 'fisher-params + :timeout (seconds 15) + :vel 3.0 + :swing-min (seconds 0.5) + :swing-max (seconds 2) + :period (seconds 0.4) + :fish-vel 2.0 + :bad-percent 0.1 + :powerup-percent 0.1 + ) + (new 'static 'fisher-params :timeout (seconds 2)) + (new 'static 'fisher-params + :timeout (seconds 15) + :vel 3.0 + :swing-min (seconds 0.5) + :swing-max (seconds 2) + :period (seconds 0.4) + :fish-vel 2.0 + :bad-percent 0.9 + :powerup-percent 0.1 + ) + (new 'static 'fisher-params :timeout (seconds 2)) + (new 'static 'fisher-params + :timeout (seconds 30) + :vel 1.4 + :swing-min (seconds 0.5) + :swing-max (seconds 2) + :period (seconds 0.25) + :fish-vel 2.0 + :bad-percent 0.1 + :powerup-percent 0.1 + ) + (new 'static 'fisher-params :timeout (seconds 2)) + (new 'static 'fisher-params + :timeout (seconds 30) + :vel 1.6 + :swing-min (seconds 0.5) + :swing-max (seconds 2) + :period (seconds 0.15) + :fish-vel 2.2 + :powerup-percent 0.1 + ) + (new 'static 'fisher-params :timeout (seconds 2)) + (new 'static 'fisher-params + :timeout (seconds 30) + :vel 1.4 + :swing-min (seconds 0.5) + :swing-max (seconds 2) + :period (seconds 0.25) + :fish-vel 2.0 + :bad-percent 0.2 + :powerup-percent 0.1 + ) + (new 'static 'fisher-params :timeout (seconds 2)) + (new 'static 'fisher-params + :timeout (seconds 31535998.0) + :vel 1.6 + :swing-min (seconds 0.5) + :swing-max (seconds 2) + :period (seconds 0.15) + :fish-vel 2.2 + :bad-percent 0.1 + :powerup-percent 0.1 + ) + (new 'static 'fisher-params :timeout (seconds 2)) + (new 'static 'fisher-params) + ) + ) + ) + +;; definition of type fisher +(deftype fisher (process-taskable) + ((paddle-end vector 2 :inline :offset-assert 384) + (paddle-pos vector :inline :offset-assert 416) + (paddle float :offset-assert 432) + (paddle-vel float :offset-assert 436) + (spawner float :offset-assert 440) + (spawner-last float :offset-assert 444) + (spawn-time int64 :offset-assert 448) + (turn-time int64 :offset-assert 456) + (swing-time int64 :offset-assert 464) + (block-time int64 :offset-assert 472) + (block int32 :offset-assert 480) + (caught int32 :offset-assert 484) + (missed int32 :offset-assert 488) + (difficulty int32 :offset-assert 492) + (start-time int64 :offset-assert 496) + (ambient-big-one int64 :offset-assert 504) + (ambient-steady int64 :offset-assert 512) + (ambient-sagging int64 :offset-assert 520) + (ambient-almost int64 :offset-assert 528) + (cheat-temp int32 :offset-assert 536) + (hard symbol :offset-assert 540) + (training symbol :offset-assert 544) + (params fisher-params :inline :offset-assert 552) + ) + :heap-base #x1f0 + :method-count-assert 53 + :size-assert #x260 + :flag-assert #x3501f00260 + ) + +;; definition for method 3 of type fisher +(defmethod inspect fisher ((obj fisher)) + (let ((t9-0 (method-of-type process-taskable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tpaddle-end[2] @ #x~X~%" (-> obj paddle-end)) + (format #t "~T~Tpaddle-pos: ~`vector`P~%" (-> obj paddle-pos)) + (format #t "~T~Tpaddle: ~f~%" (-> obj paddle)) + (format #t "~T~Tpaddle-vel: ~f~%" (-> obj paddle-vel)) + (format #t "~T~Tspawner: ~f~%" (-> obj spawner)) + (format #t "~T~Tspawner-last: ~f~%" (-> obj spawner-last)) + (format #t "~T~Tspawn-time: ~D~%" (-> obj spawn-time)) + (format #t "~T~Tturn-time: ~D~%" (-> obj turn-time)) + (format #t "~T~Tswing-time: ~D~%" (-> obj swing-time)) + (format #t "~T~Tblock-time: ~D~%" (-> obj block-time)) + (format #t "~T~Tblock: ~D~%" (-> obj block)) + (format #t "~T~Tcaught: ~D~%" (-> obj caught)) + (format #t "~T~Tmissed: ~D~%" (-> obj missed)) + (format #t "~T~Tdifficulty: ~D~%" (-> obj difficulty)) + (format #t "~T~Tstart-time: ~D~%" (-> obj start-time)) + (format #t "~T~Tambient-big-one: ~D~%" (-> obj ambient-big-one)) + (format #t "~T~Tambient-steady: ~D~%" (-> obj ambient-steady)) + (format #t "~T~Tambient-sagging: ~D~%" (-> obj ambient-sagging)) + (format #t "~T~Tambient-almost: ~D~%" (-> obj ambient-almost)) + (format #t "~T~Tcheat-temp: ~D~%" (-> obj cheat-temp)) + (format #t "~T~Thard: ~A~%" (-> obj hard)) + (format #t "~T~Ttraining: ~A~%" (-> obj training)) + (format #t "~T~Tparams: #~%" (-> obj params)) + obj + ) + +;; definition of type fisher-fish +(deftype fisher-fish (process-drawable) + ((dir vector :inline :offset-assert 176) + (offset float :offset-assert 192) + (pos float :offset-assert 196) + (vel float :offset-assert 200) + (mode basic :offset-assert 204) + (size meters :offset-assert 208) + ) + :heap-base #x70 + :method-count-assert 20 + :size-assert #xd4 + :flag-assert #x14007000d4 + ) + +;; definition for method 3 of type fisher-fish +(defmethod inspect fisher-fish ((obj fisher-fish)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tdir: #~%" (-> obj dir)) + (format #t "~T~Toffset: ~f~%" (-> obj offset)) + (format #t "~T~Tpos: ~f~%" (-> obj pos)) + (format #t "~T~Tvel: ~f~%" (-> obj vel)) + (format #t "~T~Tmode: ~A~%" (-> obj mode)) + (format #t "~T~Tsize: (meters ~m)~%" (-> obj size)) + obj + ) + +;; failed to figure out what this is: +(let + ((v1-16 + (new 'static 'skeleton-group + :art-group-name "catch-fisha" + :bounds (new 'static 'vector :w 16384.0) + :version #x6 + ) + ) + ) + (set! (-> v1-16 jgeo) 0) + (set! (-> v1-16 janim) 2) + (set! (-> v1-16 mgeo 0) (the-as uint 1)) + (set! (-> v1-16 lod-dist 0) 4095996000.0) + (set! *catch-fisha-sg* v1-16) + ) + +;; failed to figure out what this is: +(let + ((v1-17 + (new 'static 'skeleton-group + :art-group-name "catch-fishb" + :bounds (new 'static 'vector :w 16384.0) + :version #x6 + ) + ) + ) + (set! (-> v1-17 jgeo) 0) + (set! (-> v1-17 janim) 2) + (set! (-> v1-17 mgeo 0) (the-as uint 1)) + (set! (-> v1-17 lod-dist 0) 4095996000.0) + (set! *catch-fishb-sg* v1-17) + ) + +;; failed to figure out what this is: +(let + ((v1-18 + (new 'static 'skeleton-group + :art-group-name "catch-fishc" + :bounds (new 'static 'vector :w 16384.0) + :version #x6 + ) + ) + ) + (set! (-> v1-18 jgeo) 0) + (set! (-> v1-18 janim) 2) + (set! (-> v1-18 mgeo 0) (the-as uint 1)) + (set! (-> v1-18 lod-dist 0) 4095996000.0) + (set! *catch-fishc-sg* v1-18) + ) + +;; failed to figure out what this is: +(let + ((v1-19 + (new 'static 'skeleton-group + :art-group-name "fish-net" + :bounds (new 'static 'vector :w 16384.0) + :version #x6 + ) + ) + ) + (set! (-> v1-19 jgeo) 0) + (set! (-> v1-19 janim) 2) + (set! (-> v1-19 mgeo 0) (the-as uint 1)) + (set! (-> v1-19 lod-dist 0) 4095996000.0) + (set! *fish-net-sg* v1-19) + ) + +;; failed to figure out what this is: +(let + ((v1-20 + (new 'static 'skeleton-group + :art-group-name "fisher" + :bounds + (new 'static 'vector :y -24576.0 :w 57344.0) + :max-lod 2 + :version #x6 + :shadow 4 + ) + ) + ) + (set! (-> v1-20 jgeo) 0) + (set! (-> v1-20 janim) 6) + (set! (-> v1-20 mgeo 0) (the-as uint 1)) + (set! (-> v1-20 lod-dist 0) 81920.0) + (set! (-> v1-20 mgeo 1) (the-as uint 2)) + (set! (-> v1-20 lod-dist 1) 163840.0) + (set! (-> v1-20 mgeo 2) (the-as uint 3)) + (set! (-> v1-20 lod-dist 2) 4095996000.0) + (set! *fisher-sg* v1-20) + ) + +;; definition for method 52 of type fisher +;; INFO: Return type mismatch int vs none. +(defmethod dummy-52 fisher ((obj fisher)) + (let ((v1-1 (-> obj draw shadow-ctrl))) + (when v1-1 + (let ((f0-0 (-> obj root-override trans y))) + (let ((a0-2 v1-1)) + (set! (-> a0-2 settings bot-plane w) (- (+ -1024.0 f0-0))) + ) + 0 + (let ((a0-4 v1-1)) + (set! (-> a0-4 settings top-plane w) (- (+ 4096.0 f0-0))) + ) + ) + 0 + (set! (-> v1-1 settings flags) (logand -9 (-> v1-1 settings flags))) + ) + ) + (none) + ) + +;; definition for method 48 of type fisher +(defmethod draw-npc-shadow fisher ((obj fisher)) + (-> obj draw shadow-ctrl) + (cond + ((and + (-> obj draw shadow) + (zero? (-> obj draw cur-lod)) + (logtest? (-> obj draw status) 8) + ) + (let ((v1-9 (-> obj draw shadow-ctrl))) + (set! (-> v1-9 settings flags) (logand -33 (-> v1-9 settings flags))) + ) + 0 + (dummy-14 (-> obj draw shadow-ctrl)) + ) + (else + (let ((v1-14 (-> obj draw shadow-ctrl))) + (logior! (-> v1-14 settings flags) 32) + ) + 0 + ) + ) + (none) + ) + +;; definition for function fisher-fish-water +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defbehavior fisher-fish-water fisher-fish ((arg0 vector) (arg1 float)) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (set! (-> gp-0 quad) (-> arg0 quad)) + (set! (-> gp-0 y) (ocean-get-height gp-0)) + (set! (-> *part-id-table* 118 init-specs 4 initial-valuef) (+ 24576.0 arg1)) + (set! (-> *part-id-table* 118 init-specs 19 initial-valuef) (+ 49152.0 arg1)) + (set! (-> *part-id-table* 118 init-specs 1 initial-valuef) 0.05) + (set! (-> *part-id-table* 118 init-specs 2 initial-valuef) 0.0) + (set! (-> *part-id-table* 118 init-specs 13 initial-valuef) 0.35555556) + (sp-launch-particles-var + *sp-particle-system-3d* + (-> *part-id-table* 118) + gp-0 + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.0 + ) + ) + 0 + (none) + ) + +;; definition for function fisher-fish-move +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defbehavior fisher-fish-move fisher-fish () + (+! (-> self pos) (* (-> self vel) (-> *display* seconds-per-frame))) + (eval-path-curve-div! + (-> (the-as fisher (-> self parent 0)) path) + (-> self root trans) + (-> self pos) + 'interp + ) + (TODO-RENAME-12 + (-> (the-as fisher (-> self parent 0)) path) + (-> self dir) + (-> self pos) + ) + (seek-toward-heading-vec! (-> self root) (-> self dir) 291271.12 60) + (let ((f30-1 (+ 16384.0 (y-angle (-> self root)))) + (gp-0 (new-stack-vector0)) + ) + (set! (-> gp-0 x) (sin f30-1)) + (set! (-> gp-0 y) 0.0) + (set! (-> gp-0 z) (cos f30-1)) + (set! (-> gp-0 w) 1.0) + (vector-normalize! + gp-0 + (* 2.0 (+ -0.5 (-> self offset)) (-> *FISHER-bank* width)) + ) + (vector+! (-> self root trans) (-> self root trans) gp-0) + ) + (fisher-fish-water (-> self root trans) (y-angle (-> self root))) + (if (nonzero? (-> self part)) + (spawn (-> self part) (-> self root trans)) + ) + 0 + (none) + ) + +;; failed to figure out what this is: +(defstate fisher-fish-fall (fisher-fish) + :code + (behavior () + (set-heading-vec! + (-> self root) + (TODO-RENAME-12 + (-> (the-as fisher (-> self parent 0)) path) + (-> self dir) + (-> self pos) + ) + ) + (while #t + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-2 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-2 param 1) 1.0) + (set! (-> a0-2 frame-num) 0.0) + (joint-control-channel-group! a0-2 (if (> (-> self skel active-channels) 0) + (-> + self + skel + root-channel + 0 + frame-group + ) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (fisher-fish-move) + (if + (< + (vector-vector-xz-distance + (-> self root trans) + (-> (the-as fisher (-> self parent 0)) paddle-pos) + ) + (+ + (-> *FISHER-bank* net-radius) + (* (-> self size) (-> self root scale x)) + ) + ) + (go fisher-fish-caught) + ) + (if + (or + (>= + (-> self pos) + (the + float + (+ (-> (the-as fisher (-> self parent 0)) path curve num-cverts) -1) + ) + ) + (>= (-> self pos) 7.2) + ) + (go fisher-fish-die) + ) + (suspend) + (let ((a0-4 (-> self skel root-channel 0))) + (set! + (-> a0-4 param 0) + (the float (+ (-> a0-4 frame-group data 0 length) -1)) + ) + (set! (-> a0-4 param 1) 1.0) + (joint-control-channel-group-eval! + a0-4 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior fisher-fish) ja-post) + ) + +;; failed to figure out what this is: +(defstate fisher-fish-caught (fisher-fish) + :code + (behavior () + (case (-> self mode) + (('deadly 'bad) + (sound-play-by-name + (static-sound-name "caught-eel") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + (ambient-hint-spawn + "sksp0a42" + (-> self root trans) + *entity-pool* + 'ambient + ) + (let ((a1-3 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-3 from) self) + (set! (-> a1-3 num-params) 0) + (set! (-> a1-3 message) 'deadly) + (send-event-function (ppointer->process (-> self parent)) a1-3) + ) + ) + (('powerup) + (let ((gp-1 (get-process *default-dead-pool* part-tracker #x4000))) + (when gp-1 + (let ((t9-5 (method-of-type part-tracker activate))) + (t9-5 + (the-as part-tracker gp-1) + *entity-pool* + 'part-tracker + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + gp-1 + part-tracker-init + (-> *part-group-id-table* 179) + -1 + #f + #f + #f + (-> self root trans) + ) + (-> gp-1 ppointer) + ) + ) + (sound-play-by-name + (static-sound-name "get-big-fish") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + (let ((a1-8 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-8 from) self) + (set! (-> a1-8 num-params) 1) + (set! (-> a1-8 message) 'fisher-fish-caught) + (set! (-> a1-8 param 0) (the-as uint 5)) + (send-event-function (ppointer->process (-> self parent)) a1-8) + ) + ) + (else + (let ((gp-3 (get-process *default-dead-pool* part-tracker #x4000))) + (when gp-3 + (let ((t9-11 (method-of-type part-tracker activate))) + (t9-11 + (the-as part-tracker gp-3) + *entity-pool* + 'part-tracker + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + gp-3 + part-tracker-init + (-> *part-group-id-table* 179) + -1 + #f + #f + #f + (-> self root trans) + ) + (-> gp-3 ppointer) + ) + ) + (sound-play-by-name + (static-sound-name "get-small-fish") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + (let ((a1-13 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-13 from) self) + (set! (-> a1-13 num-params) 1) + (set! (-> a1-13 message) 'fisher-fish-caught) + (set! (-> a1-13 param 0) (the-as uint 1)) + (send-event-function (ppointer->process (-> self parent)) a1-13) + ) + ) + ) + (set! (-> self vel) (* 0.25 (-> self vel))) + (while (< 0.1 (-> self root scale x)) + (set! (-> self offset) (-> (the-as fisher (-> self parent 0)) paddle)) + (fisher-fish-move) + (vector-float*! (-> self root scale) (-> self root scale) 0.93) + (ja-post) + (suspend) + (let ((a0-22 (-> self skel root-channel 0))) + (set! (-> a0-22 param 0) 1.0) + (joint-control-channel-group-eval! + a0-22 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate fisher-fish-die (fisher-fish) + :code + (behavior () + (case (-> self mode) + (('deadly 'bad) + ) + (('powerup) + (level-hint-spawn + (game-text-id sidekick-hint-fish-powerup) + "sksp0b42" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (let* ((v1-2 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-3 (the-as number (logior #x3f800000 v1-2))) + (f0-2 (+ -1.0 (the-as float v1-3))) + ) + (if (< 0.5 f0-2) + (play-ambient + (-> (the-as fisher (-> self parent 0)) ambient) + "FIS-TA04" + #t + (-> self root trans) + ) + (play-ambient + (-> (the-as fisher (-> self parent 0)) ambient) + "FIS-TA05" + #t + (-> self root trans) + ) + ) + ) + (let ((a1-4 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-4 from) self) + (set! (-> a1-4 num-params) 1) + (set! (-> a1-4 message) 'fisher-fish-die) + (set! (-> a1-4 param 0) (the-as uint 5)) + (send-event-function (ppointer->process (-> self parent)) a1-4) + ) + ) + (else + (let* ((v1-21 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-22 (the-as number (logior #x3f800000 v1-21))) + (f0-5 (+ -1.0 (the-as float v1-22))) + ) + (cond + ((and + (< 0.8333 f0-5) + (< + (-> (the-as fisher (-> self parent 0)) paddle-pos z) + (-> self root trans z) + ) + ) + (play-ambient + (-> (the-as fisher (-> self parent 0)) ambient) + "FIS-TA01" + #t + (-> self root trans) + ) + ) + ((< 0.8333 f0-5) + (play-ambient + (-> (the-as fisher (-> self parent 0)) ambient) + "FIS-TA02" + #t + (-> self root trans) + ) + ) + ((and + (< 0.6666 f0-5) + (< + (-> (the-as fisher (-> self parent 0)) paddle-pos z) + (-> self root trans z) + ) + ) + (play-ambient + (-> (the-as fisher (-> self parent 0)) ambient) + "FIS-TA1A" + #t + (-> self root trans) + ) + ) + ((< 0.6666 f0-5) + (play-ambient + (-> (the-as fisher (-> self parent 0)) ambient) + "FIS-TA2A" + #t + (-> self root trans) + ) + ) + ((< 0.5 f0-5) + (play-ambient + (-> (the-as fisher (-> self parent 0)) ambient) + "FIS-TA06" + #t + (-> self root trans) + ) + ) + ((< 0.3333 f0-5) + (play-ambient + (-> (the-as fisher (-> self parent 0)) ambient) + "FIS-TA08" + #t + (-> self root trans) + ) + ) + ((< 0.1666 f0-5) + (play-ambient + (-> (the-as fisher (-> self parent 0)) ambient) + "FIS-TA09" + #t + (-> self root trans) + ) + ) + ((> (-> (the-as fisher (-> self parent 0)) missed) 0) + (play-ambient + (-> (the-as fisher (-> self parent 0)) ambient) + "FIS-TA10" + #t + (-> self root trans) + ) + ) + ) + ) + (let ((a1-13 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-13 from) self) + (set! (-> a1-13 num-params) 1) + (set! (-> a1-13 message) 'fisher-fish-die) + (set! (-> a1-13 param 0) (the-as uint 1)) + (send-event-function (ppointer->process (-> self parent)) a1-13) + ) + ) + ) + (none) + ) + ) + +;; definition for function fisher-fish-init-by-other +(defbehavior + fisher-fish-init-by-other fisher-fish + ((arg0 symbol) (arg1 float) (arg2 float)) + (set! (-> self mode) arg0) + (logclear! (-> self mask) (process-mask actor-pause)) + (set! (-> self root) (new 'process 'trsqv)) + (set! (-> self size) 3276.8) + (dummy-14 self (cond + ((or (= arg0 'deadly) (= arg0 'bad)) + (set! (-> self size) 409.6) + (set-vector! (-> self root scale) 0.9 0.9 0.7 1.0) + (set! + (-> self part) + (create-launch-control (-> *part-group-id-table* 177) self) + ) + *catch-fishc-sg* + ) + ((= arg0 'powerup) + (set-vector! (-> self root scale) 0.4 0.4 0.4 1.0) + (set! + (-> self part) + (create-launch-control (-> *part-group-id-table* 178) self) + ) + *catch-fishb-sg* + ) + (else + (set-vector! (-> self root scale) 0.3 0.3 0.3 1.0) + (set! + (-> self part) + (create-launch-control (-> *part-group-id-table* 178) self) + ) + *catch-fisha-sg* + ) + ) + '() + ) + (set! (-> self pos) 1.0) + (set! (-> self offset) arg1) + (set! (-> self vel) arg2) + (set! (-> self draw force-lod) 0) + (set! (-> self root transv z) 40960.0) + (set-vector! (-> self draw color-mult) 0.6 0.6 0.6 1.0) + (set-vector! (-> self draw color-emissive) 0.6 0.6 0.6 0.0) + (go fisher-fish-fall) + (none) + ) + +;; definition for function fisher-draw-display +;; INFO: Return type mismatch float vs none. +(defbehavior fisher-draw-display fisher ((arg0 fisher)) + (let + ((s5-0 + (new + 'stack + 'font-context + *font-default-matrix* + 435 + 10 + 0.0 + (font-color orange-red) + (font-flags shadow kerning) + ) + ) + ) + (let ((v1-1 s5-0)) + (set! (-> v1-1 width) (the float 200)) + ) + (let ((v1-2 s5-0)) + (set! (-> v1-2 height) (the float 30)) + ) + (let ((v1-3 s5-0)) + (set! (-> v1-3 scale) 0.7) + ) + (set! (-> s5-0 flags) (font-flags shadow kerning right large)) + (print-game-text + (lookup-text! *common-text* (game-text-id caught) #f) + s5-0 + #f + 128 + 22 + ) + (set! (-> s5-0 origin x) 488.0) + (let ((s4-1 print-game-text)) + (format (clear *temp-string*) "~3D" (-> arg0 caught)) + (s4-1 *temp-string* s5-0 #f 128 22) + ) + (set! (-> s5-0 origin x) 435.0) + (set! (-> s5-0 origin y) 25.0) + (print-game-text + (lookup-text! *common-text* (game-text-id missed) #f) + s5-0 + #f + 128 + 22 + ) + (set! (-> s5-0 origin x) 488.0) + (let ((s4-3 print-game-text)) + (format (clear *temp-string*) "~3D" (-> arg0 missed)) + (s4-3 *temp-string* s5-0 #f 128 22) + ) + ) + (none) + ) + +;; definition for method 32 of type fisher +(defmethod play-anim! fisher ((obj fisher) (arg0 symbol)) + (if arg0 + (set! (-> obj training) #f) + ) + (case (current-status (-> obj tasks)) + (((task-status need-hint) (task-status need-introduction)) + (when arg0 + (set! (-> obj blend-on-exit) #t) + (close-status! (-> obj tasks) (task-status need-introduction)) + (set! (-> obj training) #t) + ) + (new 'static 'spool-anim + :name "fisher-introduction" + :index 8 + :parts 9 + :command-list + '( + (0 + want-levels + village1 + jungle + ) + (0 + alive + "jungle-part-1" + ) + ((the binteger 130) + blackout + (the binteger 10) + ) + ((the binteger 130) + display-level + village1 + movie + ) + ((the binteger 130) + want-force-vis + village1 + #t + ) + ((the binteger 134) + blackout + 0 + ) + ((the binteger 229) + blackout + (the binteger 10) + ) + ((the binteger 232) + blackout + 0 + ) + ((the binteger 235) + display-level + village1 + #f + ) + ((the binteger 235) + want-force-vis + village1 + #f + ) + ((the binteger 419) + blackout + (the binteger 10) + ) + ((the binteger 422) + blackout + 0 + ) + ((the binteger 518) + blackout + (the binteger 10) + ) + ((the binteger 521) + blackout + 0 + ) + ((the binteger 585) + blackout + (the binteger 10) + ) + ((the binteger 588) + blackout + 0 + ) + ((the binteger 668) + blackout + (the binteger 10) + ) + ((the binteger 671) + blackout + 0 + ) + ((the binteger 848) + display-level + village1 + movie + ) + ((the binteger 848) + want-force-vis + village1 + #t + ) + ((the binteger 849) + alive + "fishermans-boat-2" + ) + ((the binteger 878) + blackout + (the binteger 10) + ) + ((the binteger 881) + blackout + 0 + ) + ((the binteger 958) + blackout + (the binteger 10) + ) + ((the binteger 961) + blackout + 0 + ) + ((the binteger 965) + dead + "fishermans-boat-2" + ) + ((the binteger 965) + display-level + village1 + display + ) + ((the binteger 965) want-force-vis village1 #f) + ) + ) + ) + (((task-status need-reminder-a) (task-status need-reminder)) + (set! (-> obj skippable) #t) + (set! (-> obj blend-on-exit) #t) + (new 'static 'spool-anim + :name "fisher-reminder-1" + :index 10 + :parts 1 + :command-list '() + ) + ) + (((task-status need-reward-speech)) + (when arg0 + (set! (-> obj cell-for-task) (current-task (-> obj tasks))) + (close-current! (-> obj tasks)) + ) + (new 'static 'spool-anim + :name "fisher-resolution" + :index 9 + :parts 4 + :command-list + '( + ((the binteger 188) + blackout + (the binteger 10) + ) + ((the binteger 199) blackout 0) + ) + ) + ) + (else + (if arg0 + (format + 0 + "ERROR: : ~S playing anim for task status ~S~%" + (-> obj name) + (task-status->string (current-status (-> obj tasks))) + ) + ) + (get-art-elem obj) + ) + ) + ) + +;; definition for method 31 of type fisher +(defmethod get-art-elem fisher ((obj fisher)) + (if + (closed? + (-> obj tasks) + (game-task jungle-fishgame) + (task-status need-reminder) + ) + (-> obj draw art-group data 7) + (-> obj draw art-group data 6) + ) + ) + +;; definition for method 38 of type fisher +(defmethod dummy-38 fisher ((obj fisher)) + (case (current-status (-> obj tasks)) + (((task-status need-reminder-a) (task-status need-reminder)) + (go (method-of-object obj query)) + ) + (((task-status need-reward-speech)) + (go (method-of-object obj play-anim)) + ) + (else + ((the-as (function fisher none) (find-parent-method fisher 38)) obj) + ) + ) + (none) + ) + +;; definition for method 34 of type fisher +(defmethod get-accept-anim fisher ((obj fisher) (arg0 symbol)) + (when arg0 + (close-current! (-> obj tasks)) + (aybabtu 2) + ) + (new 'static 'spool-anim + :name "fisher-accept" + :index 12 + :parts 6 + :command-list + '( + (0 + send-event + self + emissive-on + ) + ((the binteger 700) send-event self emissive-off) + ) + ) + ) + +;; definition for method 36 of type fisher +(defmethod get-reject-anim fisher ((obj fisher) (arg0 symbol)) + (new 'static 'spool-anim + :name "fisher-reject" + :index 11 + :parts 2 + :command-list '() + ) + ) + +;; failed to figure out what this is: +(defstate fisher-done (fisher) + :enter + (behavior () + (init! + (-> self query) + (lookup-text! *common-text* (game-text-id play-again?) #f) + 40 + 150 + 30 + #f + (lookup-text! *common-text* (game-text-id quit) #f) + ) + (ja-channel-set! 1) + (let ((gp-1 (-> self skel root-channel 0))) + (set! (-> gp-1 frame-group) (the-as art-joint-anim (get-art-elem self))) + ) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (while (-> self child) + (deactivate (-> self child 0)) + ) + (set! *camera-look-through-other* 2) + (cond + ((>= (-> self caught) (-> *FISHER-bank* max-caught)) + (let ((a1-3 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-3 from) self) + (set! (-> a1-3 num-params) 0) + (set! (-> a1-3 message) 'end-mode) + (send-event-function *target* a1-3) + ) + (set! + (-> self trans-hook) + (lambda :behavior fisher + () + (set! *camera-look-through-other* 2) + (when (process-grab? *target*) + (close-current! (-> self tasks)) + (go-virtual play-anim) + ) + (none) + ) + ) + ) + ((< (-> self caught) 0) + (let ((a1-4 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-4 from) self) + (set! (-> a1-4 num-params) 0) + (set! (-> a1-4 message) 'end-mode) + (send-event-function *target* a1-4) + ) + (go-virtual idle) + ) + (else + (let ((gp-2 (-> self entity extra perm))) + (logior! (-> gp-2 status) (entity-perm-status user-set-from-cstage)) + (cond + ((-> self hard) + ) + ((and (< (-> self caught) 40) (< (-> self missed) 5)) + ) + ((and (< (-> self caught) 80) (< (-> self missed) 10)) + ) + (else + (set! (-> gp-2 user-int8 4) (the-as int (+ (-> gp-2 user-uint8 4) 1))) + (let ((v1-40 (-> self caught))) + (if (>= v1-40 90) + (set! v1-40 (+ v1-40 -90 v1-40)) + ) + (set! + (-> gp-2 user-object 0) + (+ + (the-as float (-> gp-2 user-object 0)) + (* + 12.903226 + (/ (the float v1-40) (fmax 5.0 (the float (-> self missed)))) + ) + ) + ) + ) + ) + ) + (let ((f0-4 (if (zero? (-> gp-2 user-uint8 4)) + 200.0 + (/ + (the-as float (-> gp-2 user-object 0)) + (the float (-> gp-2 user-uint8 4)) + ) + ) + ) + ) + (when (zero? (mod (+ (-> gp-2 user-uint8 5) 1) (the-as uint 5))) + (cond + ((-> self hard) + ) + ((= (-> gp-2 user-uint8 5) 4) + (if (< f0-4 60.0) + (set! + (-> gp-2 user-int8 6) + (seekl (the-as int (-> gp-2 user-uint8 6)) 4 1) + ) + ) + (set! (-> gp-2 user-object 0) 0.0) + (set! (-> gp-2 user-int8 4) 0) + 0 + ) + ((= (-> gp-2 user-uint8 5) 9) + (if (< f0-4 120.0) + (set! + (-> gp-2 user-int8 6) + (seekl (the-as int (-> gp-2 user-uint8 6)) 4 1) + ) + ) + ) + (else + (set! + (-> gp-2 user-int8 6) + (seekl (the-as int (-> gp-2 user-uint8 6)) 4 1) + ) + ) + ) + ) + ) + (set! + (-> gp-2 user-int8 5) + (seekl (the-as int (-> gp-2 user-uint8 5)) 255 1) + ) + (set! (-> self difficulty) (the-as int (-> gp-2 user-uint8 6))) + (if (-> self hard) + (set! (-> self difficulty) 5) + ) + (format + #t + "fisher: accum ~f div ~d tries ~d diff ~d~%" + (the-as float (-> gp-2 user-object 0)) + (-> gp-2 user-uint8 4) + (-> gp-2 user-uint8 5) + (-> gp-2 user-uint8 6) + ) + ) + (let ((gp-3 (get-process *default-dead-pool* process #x4000))) + (when gp-3 + (let ((t9-15 (method-of-type process activate))) + (t9-15 gp-3 *default-pool* 'process (the-as pointer #x70004000)) + ) + (run-next-time-in-process + gp-3 + (lambda :behavior process + () + (let ((gp-0 (-> *display* base-frame-counter))) + (until (>= (- (-> *display* base-frame-counter) gp-0) 30) + (suspend) + ) + ) + (ambient-hint-spawn + "st-lose" + (the-as vector #f) + *entity-pool* + 'stinger + ) + (none) + ) + ) + (-> gp-3 ppointer) + ) + ) + (let ((a1-13 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-13 from) self) + (set! (-> a1-13 num-params) 0) + (set! (-> a1-13 message) 'lose) + (send-event-function *target* a1-13) + ) + ) + ) + (none) + ) + :exit + (behavior () + (when (and *target* (the-as target #f)) + (let ((a1-0 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-0 from) self) + (set! (-> a1-0 num-params) 0) + (set! (-> a1-0 message) 'end-mode) + (send-event-function *target* a1-0) + ) + (process-grab? *target*) + ) + (none) + ) + :trans + (behavior () + (set! *camera-look-through-other* 2) + (cond + ((>= (-> self caught) (-> *FISHER-bank* max-caught)) + ) + ((< (-> self caught) 0) + ) + (else + (when (< (mod (-> *display* base-frame-counter) 300) 150) + (let* + ((s5-0 (-> *display* frames (-> *display* on-screen) frame global-buf)) + (gp-0 (-> s5-0 base)) + ) + (draw-string-xy + (lookup-text! *common-text* (game-text-id lose!) #f) + s5-0 + 256 + 100 + (font-color orange-red) + (font-flags shadow kerning middle large) + ) + (let ((a3-1 (-> s5-0 base))) + (let ((v1-13 (the-as dma-packet (-> s5-0 base)))) + (set! (-> v1-13 dma) (new 'static 'dma-tag :id (dma-tag-id next))) + (set! (-> v1-13 vif0) (new 'static 'vif-tag)) + (set! (-> v1-13 vif1) (new 'static 'vif-tag)) + (set! (-> s5-0 base) (&+ (the-as pointer v1-13) 16)) + ) + (dma-bucket-insert-tag + (-> *display* frames (-> *display* on-screen) frame bucket-group) + (bucket-id debug-draw0) + gp-0 + (the-as (pointer dma-tag) a3-1) + ) + ) + ) + ) + (fisher-draw-display self) + (let ((gp-1 (get-response (-> self query)))) + (cond + ((and (= gp-1 'yes) (process-release? *target*)) + (go-virtual enter-playing) + ) + ((= gp-1 'no) + (go-virtual play-reject) + ) + ) + ) + ) + ) + (spool-push *art-control* "fisher-reject" 0 self -99.0) + (none) + ) + :code + (the-as (function none :behavior fisher) process-taskable-anim-loop) + :post + (the-as (function none :behavior fisher) ja-post) + ) + +;; definition for function fisher-spawn-ambient +;; INFO: Return type mismatch int vs none. +(defbehavior fisher-spawn-ambient fisher () + (let* ((v1-1 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-2 (the-as number (logior #x3f800000 v1-1))) + (f0-2 (+ -1.0 (the-as float v1-2))) + ) + (cond + ((and + (< 0.3 f0-2) + (< (+ (-> *FISHER-bank* max-caught) -30) (-> self caught)) + ) + (if + (and + (>= (- (-> *display* base-frame-counter) (-> self ambient-almost)) 3000) + (play-ambient + (-> self ambient) + "FIS-TA11" + #t + (-> self root-override trans) + ) + ) + (set! (-> self ambient-almost) (-> *display* base-frame-counter)) + ) + ) + ((< 0.125 f0-2) + ) + ((< 0.1 f0-2) + (if + (and + (>= (- (-> *display* base-frame-counter) (-> self ambient-steady)) 3000) + (play-ambient + (-> self ambient) + "FIS-TA06" + #t + (-> self root-override trans) + ) + ) + (set! (-> self ambient-steady) (-> *display* base-frame-counter)) + ) + ) + ((< (+ (-> *FISHER-bank* max-missed) -6) (-> self missed)) + (if + (and + (>= (- (-> *display* base-frame-counter) (-> self ambient-sagging)) 3000) + (play-ambient + (-> self ambient) + "FIS-TA07" + #t + (-> self root-override trans) + ) + ) + (set! (-> self ambient-sagging) (-> *display* base-frame-counter)) + ) + ) + ) + ) + (none) + ) + +;; definition for function fisher-game-update +;; INFO: Return type mismatch int vs none. +(defbehavior fisher-game-update fisher () + (when + (>= + (- (-> *display* base-frame-counter) (-> self block-time)) + (the-as int (-> self params timeout)) + ) + (set! (-> self block-time) (-> *display* base-frame-counter)) + (+! (-> self block) 1) + (mem-copy! + (the-as pointer (-> self params)) + (the-as pointer (-> *fisher-params* (-> self difficulty) (-> self block))) + 56 + ) + ) + (when + (>= + (- (-> *display* base-frame-counter) (-> self turn-time)) + (-> self swing-time) + ) + (set! (-> self turn-time) (-> *display* base-frame-counter)) + (set! + (-> self swing-time) + (rand-vu-int-range + (the-as int (-> self params swing-min)) + (the-as int (-> self params swing-max)) + ) + ) + (set! (-> self params vel) (- (-> self params vel))) + ) + (+! + (-> self spawner) + (* (-> self params vel) (-> *display* seconds-per-frame)) + ) + (if (= (-> self params swing-min) #x1869f) + (set! (-> self spawner) (* 0.01 (the float (-> self params swing-max)))) + ) + (cond + ((and (< 0.0 (-> self params vel)) (>= (-> self spawner) 1.0)) + (set! (-> self params vel) (- (-> self params vel))) + (set! (-> self spawner) 1.0) + ) + ((and (< (-> self params vel) 0.0) (>= 0.0 (-> self spawner))) + (set! (-> self params vel) (- (-> self params vel))) + (set! (-> self spawner) 0.0) + ) + ) + (when + (and + (nonzero? (-> self params period)) + (>= + (- (-> *display* base-frame-counter) (-> self spawn-time)) + (the-as int (-> self params period)) + ) + ) + (let ((gp-0 (cond + ((rand-vu-percent? (-> self params powerup-percent)) + (if + (and + (>= + (- + (-> *display* base-frame-counter) + (-> self ambient-big-one) + ) + 9000 + ) + (play-ambient + (-> self ambient) + "FIS-TA03" + #t + (-> self root-override trans) + ) + ) + (set! + (-> self ambient-big-one) + (-> *display* base-frame-counter) + ) + ) + 'powerup + ) + ((rand-vu-percent? (-> self params bad-percent)) + 'bad + ) + ((rand-vu-percent? (-> self params deadly-percent)) + 'deadly + ) + (else + 'normal + ) + ) + ) + ) + (if + (and + (!= gp-0 'bad) + (< 0.8 (fabs (- (-> self spawner-last) (-> self spawner)))) + ) + (set! + (-> self spawner) + (* 0.5 (+ (-> self spawner-last) (-> self spawner))) + ) + ) + (set! (-> self spawner-last) (-> self spawner)) + (set! (-> self spawn-time) (-> *display* base-frame-counter)) + (sound-play-by-name + (static-sound-name "fish-spawn") + (new-sound-id) + 716 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + (fisher-spawn-ambient) + (let ((s5-1 (get-process *default-dead-pool* fisher-fish #x4000))) + (when s5-1 + (let ((t9-10 (method-of-type fisher-fish activate))) + (t9-10 + (the-as fisher-fish s5-1) + self + 'fisher-fish + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + s5-1 + fisher-fish-init-by-other + gp-0 + (-> self spawner) + (* 1.85 (-> self params fish-vel)) + ) + (-> s5-1 ppointer) + ) + ) + ) + ) + (let + ((f1-14 + (analog-input + (the-as int (-> *cpad-list* cpads 0 leftx)) + 128.0 + 32.0 + 110.0 + 28.0 + ) + ) + ) + (+! (-> self paddle-vel) (* f1-14 (-> *display* seconds-per-frame))) + ) + (set! + (-> self paddle-vel) + (seek (-> self paddle-vel) 0.0 (* 15.0 (-> *display* seconds-per-frame))) + ) + (set! (-> self paddle-vel) (fmax -2.0 (fmin 2.0 (-> self paddle-vel)))) + (+! + (-> self paddle) + (* (-> self paddle-vel) (-> *display* seconds-per-frame)) + ) + (set! (-> self paddle) (fmax 0.0 (fmin 1.0 (-> self paddle)))) + (vector-lerp! + (-> self paddle-pos) + (the-as vector (-> self paddle-end)) + (the-as vector (&-> self stack 288)) + (-> self paddle) + ) + 0 + (none) + ) + +;; failed to figure out what this is: +(defstate fisher-playing (fisher) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (local-vars (v0-2 none)) + (let ((v1-0 arg2)) + (the-as object (cond + ((= v1-0 'fisher-fish-die) + (sound-play-by-name + (static-sound-name "fish-miss") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + (set! + v0-2 + (the-as none (+ (-> self missed) (-> arg3 param 0))) + ) + (set! (-> self missed) (the-as int v0-2)) + v0-2 + ) + ((= v1-0 'fisher-fish-caught) + (let ((a1-2 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-2 from) self) + (set! (-> a1-2 num-params) 0) + (set! (-> a1-2 message) 'bounce) + (send-event-function *target* a1-2) + ) + (set! + v0-2 + (the-as none (+ (-> self caught) (-> arg3 param 0))) + ) + (set! (-> self caught) (the-as int v0-2)) + v0-2 + ) + ((= v1-0 'deadly) + (go fisher-done) + ) + ((= v1-0 'bad) + (set! v0-2 (the-as none (seekl (-> self caught) 0 10))) + (set! (-> self caught) (the-as int v0-2)) + v0-2 + ) + ) + ) + ) + ) + :enter + (behavior () + (set-setting! *setting-control* self 'ambient-volume 'rel 50.0 0) + (let ((a1-1 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-1 from) self) + (set! (-> a1-1 num-params) 1) + (set! (-> a1-1 message) 'reset-pickup) + (set! (-> a1-1 param 0) (the-as uint 'eco)) + (send-event-function *target* a1-1) + ) + (ja-channel-set! 0) + (dummy-48 (-> self root-override)) + (let ((gp-0 (get-process *default-dead-pool* process #x4000))) + (when gp-0 + (let ((t9-5 (method-of-type process activate))) + (t9-5 gp-0 self 'process (the-as pointer #x70004000)) + ) + (run-next-time-in-process + gp-0 + (lambda :behavior fisher-fish + () + (logclear! (-> self mask) (process-mask pause)) + (while #t + (fisher-draw-display + (the-as fisher (ppointer->process (-> self parent))) + ) + (suspend) + ) + (none) + ) + ) + (-> gp-0 ppointer) + ) + ) + (let ((a1-5 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-5 from) self) + (set! (-> a1-5 num-params) 1) + (set! (-> a1-5 message) 'change-to-entity-by-name) + (set! (-> a1-5 param 0) (the-as uint "camera-152")) + (send-event-function *camera* a1-5) + ) + (init! + (-> self query) + (the-as string #f) + 40 + 150 + 25 + #t + (lookup-text! *common-text* (game-text-id quit) #f) + ) + (none) + ) + :exit + (behavior () + (clear-pending-settings-from-process *setting-control* self 'ambient-volume) + (let* ((v1-2 *camera-other-matrix*) + (a3-0 (-> *camera-combiner* inv-camera-rot)) + (a0-2 (-> a3-0 vector 0 quad)) + (a1-1 (-> a3-0 vector 1 quad)) + (a2-1 (-> a3-0 vector 2 quad)) + (a3-1 (-> a3-0 vector 3 quad)) + ) + (set! (-> v1-2 vector 0 quad) a0-2) + (set! (-> v1-2 vector 1 quad) a1-1) + (set! (-> v1-2 vector 2 quad) a2-1) + (set! (-> v1-2 vector 3 quad) a3-1) + ) + (set! (-> *camera-other-fov* data) (-> *camera-combiner* fov)) + (set! (-> *camera-other-trans* quad) (-> *camera-combiner* trans quad)) + (set! (-> *camera-other-root* quad) (-> self root-override trans quad)) + (dummy-49 (-> self root-override)) + (let ((a1-2 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-2 from) self) + (set! (-> a1-2 num-params) 0) + (set! (-> a1-2 message) 'blend-from-as-fixed) + (send-event-function *camera* a1-2) + ) + (let ((a1-3 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-3 from) self) + (set! (-> a1-3 num-params) 2) + (set! (-> a1-3 message) 'change-state) + (set! (-> a1-3 param 0) (the-as uint *camera-base-mode*)) + (set! (-> a1-3 param 1) (the-as uint 0)) + (send-event-function *camera* a1-3) + ) + (let ((a1-4 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-4 from) self) + (set! (-> a1-4 num-params) 0) + (set! (-> a1-4 message) 'clear-entity) + (send-event-function *camera* a1-4) + ) + 0 + (none) + ) + :trans + (behavior () + (spool-push *art-control* "fisher-resolution" 0 self -99.0) + (spool-push *art-control* "fisher-reject" 0 self -99.0) + (none) + ) + :code + (behavior () + (set! *display-profile* #f) + (set! (-> self paddle) 0.5) + (set! (-> self paddle-vel) 0.0) + (set! (-> self start-time) (-> *display* base-frame-counter)) + (set! (-> self caught) 0) + (set! (-> self missed) 0) + (set! (-> self spawner) 0.5) + (set! (-> self spawner-last) 0.5) + (set! (-> self swing-time) 0) + (set! (-> self block) -1) + (set! (-> self block-time) (-> *display* base-frame-counter)) + (+! (-> self block) 1) + (mem-copy! + (the-as pointer (-> self params)) + (the-as pointer (-> *fisher-params* (-> self difficulty) (-> self block))) + 56 + ) + (set! (-> self ambient-big-one) 0) + (set! (-> self ambient-steady) 0) + (set! (-> self ambient-sagging) 0) + (set! (-> self ambient-almost) 0) + (while #t + (hide-hud-quick) + (fisher-game-update) + (if + (or + (zero? (-> self params timeout)) + (>= (-> self missed) (-> *FISHER-bank* max-missed)) + (>= (-> self caught) (-> *FISHER-bank* max-caught)) + ) + (go fisher-done) + ) + (suspend) + ) + (none) + ) + :post + (behavior () + (ja-post) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate enter-playing (fisher) + :virtual #t + :trans + (behavior () + (set-blackout-frames 5) + (let ((a1-0 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-0 from) self) + (set! (-> a1-0 num-params) 2) + (set! (-> a1-0 message) 'change-mode) + (set! (-> a1-0 param 0) (the-as uint 'fishing)) + (set! (-> a1-0 param 1) (the-as uint self)) + (if (send-event-function *target* a1-0) + (go fisher-playing) + ) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate query (fisher) + :virtual #t + :enter + (behavior () + (init! + (-> self query) + (lookup-text! *common-text* (game-text-id fish?) #f) + 40 + 150 + 25 + #f + (lookup-text! *common-text* (game-text-id quit) #f) + ) + (none) + ) + ) + +;; definition for method 43 of type fisher +(defmethod TODO-RENAME-43 fisher ((obj fisher)) + (cond + ((closed? + (-> obj tasks) + (game-task jungle-fishgame) + (task-status need-reminder) + ) + (when + (TODO-RENAME-10 + (-> obj ambient) + (new 'stack-no-clear 'vector) + 300 + 122880.0 + obj + ) + (let* ((v1-5 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-6 (the-as number (logior #x3f800000 v1-5))) + (f0-2 (+ -1.0 (the-as float v1-6))) + ) + (if (< 0.5 f0-2) + (play-ambient + (-> obj ambient) + "FIS-LO03" + #f + (-> obj root-override trans) + ) + (play-ambient + (-> obj ambient) + "FIS-LO05" + #f + (-> obj root-override trans) + ) + ) + ) + ) + ) + (else + (when + (TODO-RENAME-10 + (-> obj ambient) + (new 'stack-no-clear 'vector) + 9000 + 122880.0 + obj + ) + (let* ((v1-15 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-16 (the-as number (logior #x3f800000 v1-15))) + (f0-5 (+ -1.0 (the-as float v1-16))) + ) + (cond + ((< 0.875 f0-5) + (play-ambient + (-> obj ambient) + "FIS-LO01" + #f + (-> obj root-override trans) + ) + ) + ((< 0.75 f0-5) + (play-ambient + (-> obj ambient) + "FIS-LO04" + #f + (-> obj root-override trans) + ) + ) + ((< 0.625 f0-5) + (play-ambient + (-> obj ambient) + "FIS-AM01" + #f + (-> obj root-override trans) + ) + ) + ((< 0.5 f0-5) + (play-ambient + (-> obj ambient) + "FIS-AM02" + #f + (-> obj root-override trans) + ) + ) + ((< 0.375 f0-5) + (play-ambient + (-> obj ambient) + "FIS-AM03" + #f + (-> obj root-override trans) + ) + ) + ((< 0.25 f0-5) + (play-ambient + (-> obj ambient) + "FIS-AM04" + #f + (-> obj root-override trans) + ) + ) + ((< 0.125 f0-5) + (play-ambient + (-> obj ambient) + "FIS-AM05" + #f + (-> obj root-override trans) + ) + ) + (else + (play-ambient + (-> obj ambient) + "FIS-AM06" + #f + (-> obj root-override trans) + ) + ) + ) + ) + ) + ) + ) + ) + +;; 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)) + (local-vars (v0-0 rgbaf)) + (let ((v1-0 arg2)) + (the-as object (cond + ((= v1-0 'emissive-on) + (set-vector! (-> self draw color-mult) 0.6 0.6 0.6 1.0) + (set! v0-0 (-> self draw color-emissive)) + (set! (-> v0-0 x) 0.6) + (set! (-> v0-0 y) 0.6) + (set! (-> v0-0 z) 0.6) + (set! (-> v0-0 w) 0.0) + v0-0 + ) + ((= v1-0 'emissive-off) + (set-vector! (-> self draw color-mult) 1.0 1.0 1.0 1.0) + (set! v0-0 (-> self draw color-emissive)) + (set! (-> v0-0 x) 0.0) + (set! (-> v0-0 y) 0.0) + (set! (-> v0-0 z) 0.0) + (set! (-> v0-0 w) 0.0) + v0-0 + ) + ) + ) + ) + ) + :trans + (behavior () + (when (-> self training) + (let ((gp-0 (new-stack-vector0))) + (vector<-cspace! gp-0 (-> self node-list data 74)) + (sp-launch-particles-var + *sp-particle-system-2d* + (-> *part-id-table* 2001) + gp-0 + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.0 + ) + (fisher-fish-water + gp-0 + (+ + 32768.0 + (vector-y-angle (-> self node-list data 75 bone transform vector 1)) + ) + ) + (vector<-cspace! gp-0 (-> self node-list data 77)) + (sp-launch-particles-var + *sp-particle-system-2d* + (-> *part-id-table* 2001) + gp-0 + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.0 + ) + (fisher-fish-water + gp-0 + (+ + 32768.0 + (vector-y-angle (-> self node-list data 78 bone transform vector 1)) + ) + ) + (vector<-cspace! gp-0 (-> self node-list data 80)) + (sp-launch-particles-var + *sp-particle-system-2d* + (-> *part-id-table* 828) + gp-0 + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.0 + ) + (sp-launch-particles-var + *sp-particle-system-2d* + (-> *part-id-table* 2013) + gp-0 + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.0 + ) + (fisher-fish-water + gp-0 + (+ + 32768.0 + (vector-y-angle (-> self node-list data 80 bone transform vector 1)) + ) + ) + ) + ) + (let ((t9-14 (-> (the-as state (find-parent-method fisher 24)) trans))) + (if t9-14 + (t9-14) + ) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate idle (fisher) + :virtual #t + :trans + (behavior () + (let ((t9-1 (-> (the-as state (find-parent-method fisher 30)) trans))) + (if t9-1 + (t9-1) + ) + ) + (when (task-complete? *game-info* (-> self entity extra perm task)) + (when (nonzero? (-> *cpad-list* cpads 0 button0-rel 0)) + (let ((v1-9 (-> self cheat-temp))) + (cond + ((zero? v1-9) + (cond + ((logtest? (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons left)) + (+! (-> self cheat-temp) 1) + ) + (else + (set! (-> self cheat-temp) 0) + 0 + ) + ) + ) + ((= v1-9 1) + (cond + ((logtest? (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons left)) + (+! (-> self cheat-temp) 1) + ) + (else + (set! (-> self cheat-temp) 0) + 0 + ) + ) + ) + ((= v1-9 2) + (cond + ((logtest? (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons right)) + (+! (-> self cheat-temp) 1) + ) + (else + (set! (-> self cheat-temp) 0) + 0 + ) + ) + ) + ((= v1-9 3) + (cond + ((logtest? (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons right)) + (+! (-> self cheat-temp) 1) + ) + (else + (set! (-> self cheat-temp) 0) + 0 + ) + ) + ) + ((= v1-9 4) + (cond + ((logtest? (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons left)) + (+! (-> self cheat-temp) 1) + ) + (else + (set! (-> self cheat-temp) 0) + 0 + ) + ) + ) + ((= v1-9 5) + (cond + ((logtest? (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons left)) + (+! (-> self cheat-temp) 1) + ) + (else + (set! (-> self cheat-temp) 0) + 0 + ) + ) + ) + ((= v1-9 6) + (cond + ((logtest? (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons right)) + (+! (-> self cheat-temp) 1) + ) + (else + (set! (-> self cheat-temp) 0) + 0 + ) + ) + ) + ((= v1-9 7) + (cond + ((logtest? (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons right)) + (+! (-> self cheat-temp) 1) + ) + (else + (set! (-> self cheat-temp) 0) + 0 + ) + ) + ) + ((= v1-9 8) + (cond + ((logtest? (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons x)) + (set! (-> self hard) #t) + (set! (-> self difficulty) 5) + (set! (-> *FISHER-bank* max-caught) #x70000000) + (ambient-hint-spawn + "FIS-LO03" + (the-as vector #f) + *entity-pool* + 'stinger + ) + (set! (-> self cheat-temp) 0) + 0 + ) + (else + (set! (-> self cheat-temp) 0) + 0 + ) + ) + ) + ) + ) + ) + ) + (none) + ) + :code + (behavior () + (if (!= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (get-art-elem self) + ) + (ja-channel-push! 1 60) + ) + (while #t + (let ((gp-0 (-> self skel root-channel 0))) + (set! (-> gp-0 frame-group) (the-as art-joint-anim (get-art-elem self))) + ) + (let* ((f30-0 5.0) + (v1-9 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-10 (the-as number (logior #x3f800000 v1-9))) + ) + (countdown (gp-1 (+ (the int (* f30-0 (+ -1.0 (the-as float v1-10)))) 5)) + (let ((a0-10 (-> self skel root-channel 0))) + (set! (-> a0-10 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-10 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-10 param 1) 1.0) + (set! (-> a0-10 frame-num) 0.0) + (joint-control-channel-group! + a0-10 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (TODO-RENAME-43 self) + (suspend) + (let ((a0-12 (-> self skel root-channel 0))) + (set! + (-> a0-12 param 0) + (the float (+ (-> a0-12 frame-group data 0 length) -1)) + ) + (set! (-> a0-12 param 1) 1.0) + (joint-control-channel-group-eval! + a0-12 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + ) + (when (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 6) + ) + (let ((a0-19 (-> self skel root-channel 0))) + (set! + (-> a0-19 frame-group) + (the-as art-joint-anim (-> self draw art-group data 5)) + ) + (set! + (-> a0-19 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 5)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-19 param 1) 1.0) + (set! (-> a0-19 frame-num) 0.0) + (joint-control-channel-group! + a0-19 + (the-as art-joint-anim (-> self draw art-group data 5)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (TODO-RENAME-43 self) + (suspend) + (let ((a0-21 (-> self skel root-channel 0))) + (set! + (-> a0-21 param 0) + (the float (+ (-> a0-21 frame-group data 0 length) -1)) + ) + (set! (-> a0-21 param 1) 1.0) + (joint-control-channel-group-eval! + a0-21 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + ) + (none) + ) + ) + +;; definition for method 41 of type fisher +;; INFO: Return type mismatch int vs none. +(defmethod initialize-collision fisher ((obj fisher) (arg0 int) (arg1 vector)) + (let + ((s5-0 (new 'process 'collide-shape obj (collide-list-enum hit-by-player)))) + (let ((s4-0 (new 'process 'collide-shape-prim-group s5-0 (the-as uint 2) 0))) + (set! (-> s4-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s4-0 collide-with) (the-as uint 16)) + (set! (-> s4-0 prim-core action) (the-as uint 1)) + (set! (-> s4-0 prim-core offense) 4) + (set-vector! (-> s4-0 local-sphere) 6144.0 0.0 4096.0 14336.0) + (dummy-46 s5-0) + (let ((s2-0 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 0)))) + (set! (-> s2-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-0 collide-with) (the-as uint 16)) + (set! (-> s2-0 prim-core action) (the-as uint 1)) + (set! (-> s2-0 prim-core offense) 4) + (set! (-> s2-0 transform-index) arg0) + (set-vector! (-> s2-0 local-sphere) 0.0 0.0 0.0 6553.6) + ) + (dummy-28 s4-0) + (let ((s3-1 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 0)))) + (set! (-> s3-1 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-1 collide-with) (the-as uint 16)) + (set! (-> s3-1 prim-core action) (the-as uint 1)) + (set! (-> s3-1 prim-core offense) 4) + (set! (-> s3-1 transform-index) 57) + (set-vector! (-> s3-1 local-sphere) 0.0 4096.0 0.0 4096.0) + ) + (dummy-28 s4-0) + ) + (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) + (dummy-50 s5-0) + (set! (-> obj root-override) s5-0) + ) + 0 + (none) + ) + +;; definition for method 47 of type fisher +(defmethod target-above-threshold? fisher ((obj fisher)) + (or + (= (current-task (-> obj tasks)) (game-task jungle-fishgame)) + (-> obj hard) + ) + ) + +;; definition for method 11 of type fisher +;; Used lq/sq +(defmethod copy-defaults! fisher ((obj fisher) (arg0 res-lump)) + (dummy-40 obj arg0 *fisher-sg* 3 49 (new 'static 'vector :w 4096.0) 33) + (set! (-> obj tasks) (get-task-control (game-task jungle-fishgame))) + (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) + ) + (let + ((s5-0 (eval-path-curve-div! (-> obj path) (-> obj paddle-pos) 6.5 'interp)) + (s4-0 (TODO-RENAME-12 (-> obj path) (new-stack-vector0) 6.5)) + ) + (set! (-> s5-0 y) (+ 2457.6 (-> s5-0 y))) + (vector-normalize! + (vector-rotate-y! s4-0 s4-0 16384.0) + (-> *FISHER-bank* width) + ) + (vector-! (the-as vector (-> obj paddle-end)) s5-0 s4-0) + (vector+! (the-as vector (&-> obj stack 288)) s5-0 s4-0) + ) + (set! (-> obj music) 'fishgame) + (set! + (-> obj difficulty) + (the-as int (-> obj entity extra perm user-uint8 6)) + ) + (set! (-> obj hard) #f) + (set! (-> *FISHER-bank* max-caught) 200) + (set! (-> obj training) #f) + (dummy-42 obj) + (none) + ) + +;; failed to figure out what this is: +(defstate target-fishing (target) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (cond + ((= arg2 '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-symbol20) arg2) + arg2 + ) + (else + ((-> target-grab event) arg0 arg1 arg2 arg3) + ) + ) + ) + :enter + (behavior ((arg0 handle)) + (set! (-> self control unknown-surface00) *empty-mods*) + (logior! (-> self state-flags) 16) + (set-zero! (-> self control unknown-smush00)) + (set! (-> self control unknown-symbol20) #f) + (none) + ) + :exit + (behavior () + (set! (-> self state-flags) (logand -17 (-> self state-flags))) + (let ((v1-2 (-> self manipy))) + (when v1-2 + (deactivate (-> v1-2 0)) + (set! (-> self manipy) (the-as (pointer manipy) #f)) + ) + ) + (-> target-periscope exit) + (none) + ) + :code + (behavior ((arg0 handle)) + (let ((v1-1 (handle->process arg0))) + (when (and v1-1 (type-type? (-> v1-1 type) fisher)) + (set-vector! (-> self control trans) 1067827.2 9420.8 -955596.8 1.0) + (set-yaw-angle-clear-roll-pitch! (-> self control) -20024.889) + (rot->dir-targ! (-> self control)) + ) + ) + (ja-channel-set! 1) + (let ((s5-0 (get-process *default-dead-pool* manipy #x4000))) + (set! (-> self manipy) (the-as (pointer manipy) (when s5-0 + (let + ((t9-5 + (method-of-type + manipy + activate + ) + ) + ) + (t9-5 + (the-as manipy s5-0) + self + 'manipy + (the-as + pointer + #x70004000 + ) + ) + ) + (let + ((t9-6 + run-function-in-process + ) + (a0-11 s5-0) + (a1-5 manipy-init) + (a2-2 + (-> self control trans) + ) + (v1-16 + (handle->process arg0) + ) + ) + ((the-as + (function object object object object object object none) + t9-6 + ) + a0-11 + a1-5 + a2-2 + (if v1-16 + (-> v1-16 entity) + (the-as entity #f) + ) + *fish-net-sg* + #f + ) + ) + (-> s5-0 ppointer) + ) + ) + ) + ) + (when (-> self manipy) + (let ((a1-6 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-6 from) self) + (set! (-> a1-6 num-params) 1) + (set! (-> a1-6 message) 'anim-mode) + (set! (-> a1-6 param 0) (the-as uint 'copy-parent)) + (send-event-function (ppointer->process (-> self manipy)) a1-6) + ) + (let ((a1-7 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-7 from) self) + (set! (-> a1-7 num-params) 1) + (set! (-> a1-7 message) 'eval) + (set! + (-> a1-7 param 0) + (the-as + uint + (lambda :behavior target + () + (set! + (-> self attack-info vector x) + (the-as + float + (new 'process 'joint-mod (joint-mod-handler-mode joint-set*) self 6) + ) + ) + (set! + (-> self attack-info vector y) + (the-as + float + (new 'process 'joint-mod (joint-mod-handler-mode joint-set*) self 5) + ) + ) + (none) + ) + ) + ) + (send-event-function (ppointer->process (-> self manipy)) a1-7) + ) + (let ((v1-35 (-> self manipy 0 node-list data))) + (set! (-> v1-35 0 param0) cspace<-cspace+quaternion!) + (set! (-> v1-35 0 param1) (the-as basic (-> self node-list data 23))) + (set! (-> v1-35 0 param2) (the-as basic (-> self control quat))) + ) + ) + (let ((s5-1 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + s5-1 + (the-as art-joint-anim (-> self draw art-group data 99)) + num-func-identity + ) + (set! (-> s5-1 frame-num) (ja-aframe 15.0 0)) + ) + (let ((s5-2 (new 'stack-no-clear 'vector))) + (until (-> self control unknown-symbol20) + (let ((v1-42 (handle->process arg0))) + (when v1-42 + (let ((a0-28 (-> self skel root-channel 0))) + (set! + (-> a0-28 param 0) + (* + (fmax 0.0 (- 1.0 (-> (the-as fisher v1-42) paddle))) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + ) + (set! (-> a0-28 param 1) 1.0) + (joint-control-channel-group-eval! + a0-28 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (when (-> self manipy) + (let ((s2-0 (new-stack-quaternion0)) + (s4-0 (new-stack-quaternion0)) + (s3-0 (quaternion-identity! (new-stack-quaternion0))) + (f30-0 (update! (-> self control unknown-smush00))) + ) + (quaternion-rotate-y! s3-0 s3-0 (* 5461.3335 f30-0)) + (set-vector! s2-0 1.0 1.0 1.0 1.0) + (set-vector! s4-0 0.0 (* 2048.0 (-> s5-2 y)) (* 819.2 (-> s5-2 y)) 1.0) + (dummy-14 (-> self manipy 0 joint 0) (the-as skeleton-group s4-0) s3-0) + (set-vector! s4-0 0.0 (* -614.4 f30-0) 0.0 1.0) + (let* ((a0-34 (-> self manipy 0 joint 1)) + (t9-16 (method-of-object a0-34 dummy-14)) + (a2-7 #f) + ) + (t9-16 a0-34 (the-as skeleton-group s4-0) a2-7) + ) + (set! (-> s5-2 y) (-> s5-2 x)) + (set! (-> s5-2 x) f30-0) + ) + ) + ) + ) + (suspend) + ) + ) + (case (-> self control unknown-symbol20) + (('lose) + (ja-channel-push! 1 30) + (let ((a0-38 (-> self skel root-channel 0))) + (set! + (-> a0-38 frame-group) + (the-as art-joint-anim (-> self draw art-group data 100)) + ) + (set! + (-> a0-38 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 100)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-38 param 1) 1.0) + (set! (-> a0-38 frame-num) 0.0) + (joint-control-channel-group! + a0-38 + (the-as art-joint-anim (-> self draw art-group data 100)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-39 (-> self skel root-channel 0))) + (set! + (-> a0-39 param 0) + (the float (+ (-> a0-39 frame-group data 0 length) -1)) + ) + (set! (-> a0-39 param 1) 1.0) + (joint-control-channel-group-eval! + a0-39 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (anim-loop) + ) + ) + (none) + ) + :post + (the-as (function none :behavior target) target-post) + ) diff --git a/test/decompiler/reference/levels/jungle/hopper_REF.gc b/test/decompiler/reference/levels/jungle/hopper_REF.gc index 3d6e9b5296..6220661b61 100644 --- a/test/decompiler/reference/levels/jungle/hopper_REF.gc +++ b/test/decompiler/reference/levels/jungle/hopper_REF.gc @@ -397,11 +397,7 @@ nav-enemy-default-event-handler ) (set! (-> gp-0 frame-num) 0.0) ) - (until - (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 150 - ) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 150) (suspend) (let ((a0-21 (-> self skel root-channel 0))) (set! (-> a0-21 param 0) 1.0) @@ -582,11 +578,7 @@ nav-enemy-default-event-handler ) (set! (-> gp-0 frame-num) 0.0) ) - (until - (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 60 - ) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 60) (suspend) (let ((a0-21 (-> self skel root-channel 0))) (set! (-> a0-21 param 0) 1.0) @@ -640,11 +632,11 @@ nav-enemy-default-event-handler :run-travel-speed (meters 10.0) :run-rotate-speed (degrees 7999.9995) :run-acceleration (meters 1.0) - :run-turn-time #x1e + :run-turn-time (seconds 0.1) :walk-travel-speed (meters 6.0) :walk-rotate-speed (degrees 7999.9995) :walk-acceleration (meters 1.0) - :walk-turn-time #x1e + :walk-turn-time (seconds 0.1) :attack-shove-back (meters 3.0) :attack-shove-up (meters 2.0) :shadow-size (meters 2.0) diff --git a/test/decompiler/reference/levels/jungle/jungle-elevator_REF.gc b/test/decompiler/reference/levels/jungle/jungle-elevator_REF.gc index 0b3076b3ee..d46610da1b 100644 --- a/test/decompiler/reference/levels/jungle/jungle-elevator_REF.gc +++ b/test/decompiler/reference/levels/jungle/jungle-elevator_REF.gc @@ -98,10 +98,7 @@ (if (and (>= (-> self path-pos) 0.2) - (< - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 60 - ) + (< (- (-> *display* base-frame-counter) (-> self state-time)) 60) ) (load-commands-set! *level* (load-command-get-index *level* 'jungle 0)) ) @@ -145,10 +142,7 @@ (if (and (< (-> self path-pos) 0.8) - (< - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 60 - ) + (< (- (-> *display* base-frame-counter) (-> self state-time)) 60) ) (load-commands-set! *level* (load-command-get-index *level* 'jungle 1)) ) diff --git a/test/decompiler/reference/levels/jungle/junglefish_REF.gc b/test/decompiler/reference/levels/jungle/junglefish_REF.gc index dbce115e7b..9d1798918f 100644 --- a/test/decompiler/reference/levels/jungle/junglefish_REF.gc +++ b/test/decompiler/reference/levels/jungle/junglefish_REF.gc @@ -581,11 +581,11 @@ nav-enemy-default-event-handler :run-travel-speed (meters 5.5) :run-rotate-speed (degrees 720.0) :run-acceleration (meters 6.0) - :run-turn-time #x2d + :run-turn-time (seconds 0.15) :walk-travel-speed (meters 4.0) :walk-rotate-speed (degrees 720.0) :walk-acceleration (meters 6.0) - :walk-turn-time #x2d + :walk-turn-time (seconds 0.15) :attack-shove-back (meters 1.0) :attack-shove-up (meters 0.5) :shadow-size (meters 2.0) diff --git a/test/decompiler/reference/levels/jungleb/aphid_REF.gc b/test/decompiler/reference/levels/jungleb/aphid_REF.gc index d313e74ef9..7c0a8c24ef 100644 --- a/test/decompiler/reference/levels/jungleb/aphid_REF.gc +++ b/test/decompiler/reference/levels/jungleb/aphid_REF.gc @@ -571,11 +571,11 @@ :run-travel-speed (meters 5.0) :run-rotate-speed (degrees 2880.0) :run-acceleration (meters 1.0) - :run-turn-time #x1e + :run-turn-time (seconds 0.1) :walk-travel-speed (meters 3.0) :walk-rotate-speed (degrees 720.0) :walk-acceleration (meters 1.0) - :walk-turn-time #x96 + :walk-turn-time (seconds 0.5) :attack-shove-back (meters 3.0) :attack-shove-up (meters 2.0) :shadow-size (meters 2.0) diff --git a/test/decompiler/reference/levels/lavatube/assistant-lavatube_REF.gc b/test/decompiler/reference/levels/lavatube/assistant-lavatube_REF.gc index 8fe24497ed..5884c663a7 100644 --- a/test/decompiler/reference/levels/lavatube/assistant-lavatube_REF.gc +++ b/test/decompiler/reference/levels/lavatube/assistant-lavatube_REF.gc @@ -42,7 +42,7 @@ assistant-lavatube-start ((obj assistant-lavatube-start) (arg0 symbol)) (case (current-status (-> obj tasks)) - ((6) + (((task-status need-reward-speech)) (if arg0 (close-current! (-> obj tasks)) ) @@ -74,7 +74,7 @@ 0 "ERROR: : ~S playing anim for task status ~S~%" (-> obj name) - (task-status->string (the-as task-status (current-status (-> obj tasks)))) + (task-status->string (current-status (-> obj tasks))) ) ) (get-art-elem obj) @@ -127,13 +127,7 @@ (logtest? (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons l3)) ) ) - (< - (- - (-> *display* base-frame-counter) - (the-as int (-> self state-time)) - ) - 3000 - ) + (< (- (-> *display* base-frame-counter) (-> self state-time)) 3000) ) ) (hide-hud) @@ -318,7 +312,7 @@ assistant-lavatube-start ((obj assistant-lavatube-start)) (first-any (-> obj tasks) #t) - (= (current-status (-> obj tasks)) 6) + (= (current-status (-> obj tasks)) (task-status need-reward-speech)) ) ;; definition for method 11 of type assistant-lavatube-start diff --git a/test/decompiler/reference/levels/lavatube/lavatube-part_REF.gc b/test/decompiler/reference/levels/lavatube/lavatube-part_REF.gc index d39eba006b..6b3b9434bb 100644 --- a/test/decompiler/reference/levels/lavatube/lavatube-part_REF.gc +++ b/test/decompiler/reference/levels/lavatube/lavatube-part_REF.gc @@ -427,25 +427,8 @@ :mask #x1 :num 0.05 :group #x1 - :sound-name-char - (new 'static 'array uint8 16 - #x73 - #x74 - #x65 - #x61 - #x6d - #x2d - #x72 - #x65 - #x6c - #x65 - #x61 - #x73 - #x65 - #x0 - #x0 - #x0 - ) + :sound-name + (new 'static 'sound-name :lo #x65722d6d61657473) :volume #x400 ) ) @@ -587,25 +570,8 @@ :mask #x1 :num 0.05 :group #x1 - :sound-name-char - (new 'static 'array uint8 16 - #x73 - #x74 - #x65 - #x61 - #x6d - #x2d - #x72 - #x65 - #x6c - #x65 - #x61 - #x73 - #x65 - #x0 - #x0 - #x0 - ) + :sound-name + (new 'static 'sound-name :lo #x65722d6d61657473) :volume #x400 ) ) @@ -1072,7 +1038,3 @@ ) ) ) - - - - diff --git a/test/decompiler/reference/levels/maincave/baby-spider_REF.gc b/test/decompiler/reference/levels/maincave/baby-spider_REF.gc index 0e2acf6ed3..e446b84dc4 100644 --- a/test/decompiler/reference/levels/maincave/baby-spider_REF.gc +++ b/test/decompiler/reference/levels/maincave/baby-spider_REF.gc @@ -10,14 +10,14 @@ (pickup int32 :offset-assert 16) (pickup-amount int32 :offset-assert 20) (event-death symbol :offset-assert 24) - (delay-before-dying-if-not-visible uint64 :offset-assert 32) + (delay-before-dying-if-not-visible int64 :offset-assert 32) ) :method-count-assert 11 :size-assert #x28 :flag-assert #xb00000028 (:methods (init! (_type_ symbol symbol symbol symbol int int symbol) int 9) - (set-delay! (_type_ uint) uint 10) + (set-delay! (_type_ int) int 10) ) ) @@ -48,13 +48,13 @@ (delta-wiggle-angle float :offset-assert 416) (wiggle-factor float :offset-assert 420) (event-death symbol :offset-assert 424) - (delay-before-dying-if-not-visible uint64 :offset-assert 432) - (chase-rest-time uint64 :offset-assert 440) - (target-nav-time uint64 :offset-assert 448) + (delay-before-dying-if-not-visible int64 :offset-assert 432) + (chase-rest-time int64 :offset-assert 440) + (target-nav-time int64 :offset-assert 448) (unknown00 basic :offset-assert 456) (unknown01 basic :offset-assert 460) - (wiggle-time uint64 :offset-assert 464) - (last-visible-time uint64 :offset-assert 472) + (wiggle-time int64 :offset-assert 464) + (last-visible-time int64 :offset-assert 472) (up-vector vector :inline :offset-assert 480) (state-vector vector :inline :offset-assert 496) ) @@ -62,6 +62,11 @@ :method-count-assert 76 :size-assert #x200 :flag-assert #x4c01900200 + (:states + baby-spider-hatching + baby-spider-resume + baby-spider-die-fast + ) ) ;; definition for method 3 of type baby-spider @@ -137,11 +142,11 @@ :run-travel-speed (meters 7.0) :run-rotate-speed (degrees 7999.9995) :run-acceleration (meters 1.0) - :run-turn-time #x16 + :run-turn-time (seconds 0.07333333) :walk-travel-speed (meters 2.0) :walk-rotate-speed (degrees 7999.9995) :walk-acceleration (meters 1.0) - :walk-turn-time #x16 + :walk-turn-time (seconds 0.07333333) :attack-shove-back (meters 3.0) :attack-shove-up (meters 2.0) :shadow-size (meters 1.0) @@ -193,11 +198,11 @@ :run-travel-speed (meters 7.0) :run-rotate-speed (degrees 7999.9995) :run-acceleration (meters 1.0) - :run-turn-time #x16 + :run-turn-time (seconds 0.07333333) :walk-travel-speed (meters 2.0) :walk-rotate-speed (degrees 7999.9995) :walk-acceleration (meters 1.0) - :walk-turn-time #x16 + :walk-turn-time (seconds 0.07333333) :attack-shove-back (meters 3.0) :attack-shove-up (meters 2.0) :shadow-size (meters 1.0) @@ -252,7 +257,7 @@ (set! (-> obj pickup-amount) arg5) (set! (-> obj event-death) arg6) (let ((v0-0 600)) - (set! (-> obj delay-before-dying-if-not-visible) (the-as uint v0-0)) + (set! (-> obj delay-before-dying-if-not-visible) v0-0) v0-0 ) ) @@ -261,7 +266,7 @@ (defmethod set-delay! baby-spider-spawn-params - ((obj baby-spider-spawn-params) (arg0 uint)) + ((obj baby-spider-spawn-params) (arg0 int)) (set! (-> obj delay-before-dying-if-not-visible) arg0) arg0 ) @@ -345,7 +350,8 @@ baby-spider-default-event-handler ) ;; definition for method 51 of type baby-spider -(defmethod dummy-51 baby-spider ((obj baby-spider)) +;; INFO: Return type mismatch float vs object. +(defmethod dummy-51 baby-spider ((obj baby-spider) (arg0 vector)) (let* ((f0-0 (rand-vu-float-range 0.0 1.0)) (f1-1 (+ 1.0 (* 2.0 f0-0))) (f2-2 f1-1) @@ -356,12 +362,13 @@ baby-spider-default-event-handler (set! (-> obj wiggle-factor) (* 1.5 f2-4)) (let ((f0-3 (* 28672.0 f0-2))) (set! (-> obj target-speed) f0-3) - f0-3 + (the-as object f0-3) ) ) ) ;; definition for method 52 of type baby-spider +;; INFO: Return type mismatch vector vs symbol. ;; Used lq/sq (defmethod dummy-52 baby-spider ((obj baby-spider) (arg0 vector)) (+! (-> obj wiggle-angle) (-> obj delta-wiggle-angle)) @@ -384,7 +391,7 @@ baby-spider-default-event-handler (v0-3 (-> obj nav target-pos)) ) (set! (-> v0-3 quad) (-> v1-4 quad)) - v0-3 + (the-as symbol v0-3) ) ) @@ -392,21 +399,15 @@ baby-spider-default-event-handler (defmethod dummy-53 baby-spider ((obj baby-spider)) (cond ((logtest? (-> obj draw status) 8) - (set! - (-> obj last-visible-time) - (the-as uint (-> *display* base-frame-counter)) - ) + (set! (-> obj last-visible-time) (-> *display* base-frame-counter)) (return #f) ) (else (if (-> obj die-if-not-visible?) (return (>= - (- - (-> *display* base-frame-counter) - (the-as int (-> obj last-visible-time)) - ) - (the-as int (-> obj delay-before-dying-if-not-visible)) + (- (-> *display* base-frame-counter) (-> obj last-visible-time)) + (-> obj delay-before-dying-if-not-visible) ) ) ) @@ -500,7 +501,7 @@ baby-spider-default-event-handler ) ) (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + (- (-> *display* base-frame-counter) (-> self state-time)) (-> self state-timeout) ) (nonzero? (-> self draw)) @@ -733,8 +734,8 @@ baby-spider-default-event-handler ) (if (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - (the-as int (-> self chase-rest-time)) + (- (-> *display* base-frame-counter) (-> self state-time)) + (-> self chase-rest-time) ) (go-virtual nav-enemy-victory) ) @@ -747,44 +748,30 @@ baby-spider-default-event-handler ) :code (behavior () - (set! - (-> self target-nav-time) - (the-as uint (-> *display* base-frame-counter)) - ) - (set! - (-> self wiggle-time) - (the-as uint (+ (-> *display* base-frame-counter) -3000)) - ) + (set! (-> self target-nav-time) (-> *display* base-frame-counter)) + (set! (-> self wiggle-time) (+ (-> *display* base-frame-counter) -3000)) (set! (-> self wiggle-angle) 0.0) - (set! (-> self chase-rest-time) (the-as uint (rand-vu-int-range 300 1200))) + (set! (-> self chase-rest-time) (rand-vu-int-range 300 1200)) (ja-channel-push! 1 51) - (let ((gp-0 (-> self skel root-channel 0))) - (joint-control-channel-group-eval! - gp-0 - (the-as art-joint-anim (-> self draw art-group data 7)) - num-func-identity - ) + (let* ((gp-0 (-> self skel root-channel 0)) + (t9-2 joint-control-channel-group-eval!) + (a0-2 gp-0) + (a1-2 (-> self draw art-group data 7)) + ) + (t9-2 a0-2 (the-as art-joint-anim a1-2) num-func-identity) (set! (-> gp-0 frame-num) 0.0) - ) - (while #t - (when - (>= - (- (-> *display* base-frame-counter) (the-as int (-> self wiggle-time))) - 300 + (while #t + (when (>= (- (-> *display* base-frame-counter) (-> self wiggle-time)) 300) + (set! (-> self wiggle-time) (-> *display* base-frame-counter)) + (dummy-51 self (the-as vector a1-2)) ) - (set! - (-> self wiggle-time) - (the-as uint (-> *display* base-frame-counter)) - ) - (dummy-51 self) - ) - (suspend) - (let ((a0-5 (-> self skel root-channel 0))) - (set! (-> a0-5 param 0) 1.0) - (joint-control-channel-group-eval! - a0-5 - (the-as art-joint-anim #f) - num-func-loop! + (suspend) + (let ((a0-5 (-> self skel root-channel 0))) + (set! (-> a0-5 param 0) 1.0) + (let ((t9-4 joint-control-channel-group-eval!)) + (set! a1-2 (the-as art-element #f)) + (t9-4 a0-5 (the-as art-joint-anim a1-2) num-func-loop!) + ) ) ) ) @@ -1211,10 +1198,7 @@ baby-spider-default-event-handler ;; INFO: Return type mismatch int vs none. ;; Used lq/sq (defmethod TODO-RENAME-48 baby-spider ((obj baby-spider)) - (set! - (-> obj last-visible-time) - (the-as uint (-> *display* base-frame-counter)) - ) + (set! (-> obj last-visible-time) (-> *display* base-frame-counter)) (dummy-14 obj *baby-spider-sg* '()) (if (= (-> obj parent 0 type) cave-trap) (TODO-RENAME-45 obj *baby-spider-nav-enemy-info-for-cave-trap*) @@ -1232,7 +1216,7 @@ baby-spider-default-event-handler (set! (-> obj delta-wiggle-angle) 910.2222) (set! (-> obj wiggle-factor) 1.5) (set! (-> obj reaction-time) (rand-vu-int-range 30 240)) - (set! (-> obj chase-rest-time) (the-as uint 300)) + (set! (-> obj chase-rest-time) 300) (set! (-> obj up-vector quad) (-> *y-vector* quad)) 0 (none) @@ -1292,7 +1276,7 @@ baby-spider-default-event-handler ;; definition for method 11 of type baby-spider (defmethod copy-defaults! baby-spider ((obj baby-spider) (arg0 res-lump)) (set! (-> obj die-if-not-visible?) #f) - (set! (-> obj delay-before-dying-if-not-visible) (the-as uint 600)) + (set! (-> obj delay-before-dying-if-not-visible) 600) (set! (-> obj hack-move-above-ground?) #f) (set! (-> obj event-death) #f) (initialize-collision obj) diff --git a/test/decompiler/reference/levels/maincave/spiderwebs_REF.gc b/test/decompiler/reference/levels/maincave/spiderwebs_REF.gc index 858ecedc85..cb9ea9cea9 100644 --- a/test/decompiler/reference/levels/maincave/spiderwebs_REF.gc +++ b/test/decompiler/reference/levels/maincave/spiderwebs_REF.gc @@ -41,6 +41,10 @@ :method-count-assert 20 :size-assert #xb4 :flag-assert #x14005000b4 + (:states + spiderwebs-idle + spiderwebs-bounce + ) ) ;; definition for method 3 of type spiderwebs @@ -345,7 +349,3 @@ (go spiderwebs-idle) (none) ) - - - - diff --git a/test/decompiler/reference/levels/misty/bonelurker_REF.gc b/test/decompiler/reference/levels/misty/bonelurker_REF.gc index 404ee58a9a..85364f6b53 100644 --- a/test/decompiler/reference/levels/misty/bonelurker_REF.gc +++ b/test/decompiler/reference/levels/misty/bonelurker_REF.gc @@ -190,10 +190,7 @@ (the-as object (when (= v1-0 'attack) (when (>= - (- - (-> *display* base-frame-counter) - (the-as int (-> self state-time)) - ) + (- (-> *display* base-frame-counter) (-> self state-time)) 150 ) (nav-enemy-set-hit-from-direction arg0) @@ -1128,11 +1125,11 @@ nav-enemy-default-event-handler :run-travel-speed (meters 6.0) :run-rotate-speed (degrees 2880.0) :run-acceleration (meters 1.0) - :run-turn-time #x1e + :run-turn-time (seconds 0.1) :walk-travel-speed (meters 3.0) :walk-rotate-speed (degrees 2880.0) :walk-acceleration (meters 1.0) - :walk-turn-time #x1e + :walk-turn-time (seconds 0.1) :attack-shove-back (meters 3.0) :attack-shove-up (meters 2.0) :shadow-size (meters 2.0) diff --git a/test/decompiler/reference/levels/misty/misty-conveyor_REF.gc b/test/decompiler/reference/levels/misty/misty-conveyor_REF.gc index bf0f79ae2b..6f9f68fe50 100644 --- a/test/decompiler/reference/levels/misty/misty-conveyor_REF.gc +++ b/test/decompiler/reference/levels/misty/misty-conveyor_REF.gc @@ -374,10 +374,7 @@ (while #t (if (>= - (the - float - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - ) + (the float (- (-> *display* base-frame-counter) (-> self state-time))) f30-0 ) (go keg-on-path) @@ -385,13 +382,7 @@ (let ((f28-0 (/ - (the - float - (- - (-> *display* base-frame-counter) - (the-as int (-> self state-time)) - ) - ) + (the float (- (-> *display* base-frame-counter) (-> self state-time))) f30-0 ) ) @@ -655,11 +646,7 @@ (vector-normalize! gp-0 1.0) (set! (-> self state-time) (-> *display* base-frame-counter)) (while #t - (if - (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 300 - ) + (if (>= (- (-> *display* base-frame-counter) (-> self state-time)) 300) (go keg-die) ) (let ((v1-23 (-> self root-override trans))) diff --git a/test/decompiler/reference/levels/misty/misty-part_REF.gc b/test/decompiler/reference/levels/misty/misty-part_REF.gc index 71db923a8f..749ca4d2d1 100644 --- a/test/decompiler/reference/levels/misty/misty-part_REF.gc +++ b/test/decompiler/reference/levels/misty/misty-part_REF.gc @@ -1202,25 +1202,8 @@ :mask #x1 :num 0.05 :group #x1 - :sound-name-char - (new 'static 'array uint8 16 - #x73 - #x74 - #x65 - #x61 - #x6d - #x2d - #x72 - #x65 - #x6c - #x65 - #x61 - #x73 - #x65 - #x0 - #x0 - #x0 - ) + :sound-name + (new 'static 'sound-name :lo #x65722d6d61657473) :volume #x400 ) ) @@ -1310,25 +1293,8 @@ :mask #x1 :num 0.05 :group #x1 - :sound-name-char - (new 'static 'array uint8 16 - #x73 - #x74 - #x65 - #x61 - #x6d - #x2d - #x72 - #x65 - #x6c - #x65 - #x61 - #x73 - #x65 - #x0 - #x0 - #x0 - ) + :sound-name + (new 'static 'sound-name :lo #x65722d6d61657473) :volume #x400 ) ) @@ -1419,25 +1385,8 @@ :mask #x1 :num 0.05 :group #x1 - :sound-name-char - (new 'static 'array uint8 16 - #x73 - #x74 - #x65 - #x61 - #x6d - #x2d - #x72 - #x65 - #x6c - #x65 - #x61 - #x73 - #x65 - #x0 - #x0 - #x0 - ) + :sound-name + (new 'static 'sound-name :lo #x65722d6d61657473) :volume #x400 ) ) @@ -1528,25 +1477,8 @@ :mask #x1 :num 0.05 :group #x1 - :sound-name-char - (new 'static 'array uint8 16 - #x73 - #x74 - #x65 - #x61 - #x6d - #x2d - #x72 - #x65 - #x6c - #x65 - #x61 - #x73 - #x65 - #x0 - #x0 - #x0 - ) + :sound-name + (new 'static 'sound-name :lo #x65722d6d61657473) :volume #x400 ) ) @@ -1572,7 +1504,3 @@ ) ) ) - - - - diff --git a/test/decompiler/reference/levels/misty/muse_REF.gc b/test/decompiler/reference/levels/misty/muse_REF.gc index 0c84c3abe8..ccb575a141 100644 --- a/test/decompiler/reference/levels/misty/muse_REF.gc +++ b/test/decompiler/reference/levels/misty/muse_REF.gc @@ -205,8 +205,8 @@ ) ;; definition for method 51 of type muse -;; INFO: Return type mismatch int vs float. -(defmethod dummy-51 muse ((obj muse)) +;; INFO: Return type mismatch int vs object. +(defmethod dummy-51 muse ((obj muse) (arg0 vector)) (dotimes (s5-0 2) (let ((v1-2 (rand-vu-int-range 3 (+ (-> obj node-list length) -1)))) (sp-launch-particles-var @@ -222,13 +222,18 @@ ) ) ) - (the-as float 0) + (the-as object 0) ) ;; definition for method 39 of type muse (defmethod common-post muse ((obj muse)) - (spool-push *art-control* (-> obj anim name) 0 obj -99.0) - (dummy-51 obj) + (let* ((a0-1 *art-control*) + (t9-0 (method-of-object a0-1 spool-push)) + (a1-0 (-> obj anim name)) + ) + (t9-0 a0-1 a1-0 0 obj -99.0) + (dummy-51 obj (the-as vector a1-0)) + ) ((method-of-type nav-enemy common-post) obj) (none) ) @@ -409,8 +414,13 @@ nav-enemy-default-event-handler ) ) (until (ja-done? 0) - (spool-push *art-control* (-> self anim name) 0 self -99.0) - (dummy-51 self) + (let* ((a0-10 *art-control*) + (t9-7 (method-of-object a0-10 spool-push)) + (a1-5 (-> self anim name)) + ) + (t9-7 a0-10 a1-5 0 self -99.0) + (dummy-51 self (the-as vector a1-5)) + ) (suspend) (let ((a0-12 (-> self skel root-channel 0))) (set! @@ -883,7 +893,8 @@ nav-enemy-default-event-handler ) :post (behavior () - (dummy-51 self) + (local-vars (a1-0 none)) + (dummy-51 self (the-as vector a1-0)) (level-hint-surpress!) (kill-current-level-hint '() '() 'exit) (ja-post) @@ -910,11 +921,11 @@ nav-enemy-default-event-handler :run-travel-speed (meters 10.0) :run-rotate-speed (degrees 999.99994) :run-acceleration (meters 5.0) - :run-turn-time #x2d + :run-turn-time (seconds 0.15) :walk-travel-speed (meters 10.0) :walk-rotate-speed (degrees 999.99994) :walk-acceleration (meters 1.0) - :walk-turn-time #x2d + :walk-turn-time (seconds 0.15) :attack-shove-back (meters 3.0) :attack-shove-up (meters 2.0) :shadow-size (meters 2.0) diff --git a/test/decompiler/reference/levels/misty/sidekick-human_REF.gc b/test/decompiler/reference/levels/misty/sidekick-human_REF.gc index 9f99d04f99..a29b2829a3 100644 --- a/test/decompiler/reference/levels/misty/sidekick-human_REF.gc +++ b/test/decompiler/reference/levels/misty/sidekick-human_REF.gc @@ -2678,7 +2678,10 @@ (when (>= (ja-aframe-num 0) 1055.0) (dummy-11 (-> self draw) - (&-> (the-as process-taskable (-> self parent 0)) stack 288) + (the-as + lod-set + (&-> (the-as process-taskable (-> self parent 0)) stack 288) + ) ) (let ((a1-1 (new 'stack-no-clear 'event-message-block))) (set! (-> a1-1 from) self) @@ -3158,7 +3161,3 @@ (dummy-42 obj) (none) ) - - - - diff --git a/test/decompiler/reference/levels/racer_common/target-racer-h-FIC-LAV-MIS-OGR-ROL_REF.gc b/test/decompiler/reference/levels/racer_common/target-racer-h-FIC-LAV-MIS-OGR-ROL_REF.gc index eb85d4cc98..6f020bf2e4 100644 --- a/test/decompiler/reference/levels/racer_common/target-racer-h-FIC-LAV-MIS-OGR-ROL_REF.gc +++ b/test/decompiler/reference/levels/racer_common/target-racer-h-FIC-LAV-MIS-OGR-ROL_REF.gc @@ -263,7 +263,7 @@ (define *RACER-bank* (new 'static 'racer-bank - :slide-hold-time #x3c + :slide-hold-time (seconds 0.2) :heat-max 100.0 :hotcoals-heat-inc 3.0 :lava-heat-inc 20.0 @@ -278,7 +278,7 @@ :boost-curve-max (meters 5.0) :boost-level-max (meters 12.5) :boost-level-inc (meters 2.0) - :boost-duration #x2ee + :boost-duration (seconds 2.5) :yellow-projectile-speed (meters 80.0) ) ) diff --git a/test/decompiler/reference/levels/snow/yeti_REF.gc b/test/decompiler/reference/levels/snow/yeti_REF.gc index 9a048fdaa7..8f34ec6701 100644 --- a/test/decompiler/reference/levels/snow/yeti_REF.gc +++ b/test/decompiler/reference/levels/snow/yeti_REF.gc @@ -92,11 +92,11 @@ :run-travel-speed (meters 6.0) :run-rotate-speed (degrees 2880.0) :run-acceleration (meters 1.0) - :run-turn-time #x1e + :run-turn-time (seconds 0.1) :walk-travel-speed (meters 3.0) :walk-rotate-speed (degrees 720.0) :walk-acceleration (meters 1.0) - :walk-turn-time #x96 + :walk-turn-time (seconds 0.5) :attack-shove-back (meters 3.0) :attack-shove-up (meters 2.0) :shadow-size (meters 2.0) @@ -1420,7 +1420,7 @@ (else (when (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + (- (-> *display* base-frame-counter) (-> self state-time)) (-> self spawn-delay) ) (let ((gp-0 (new 'stack-no-clear 'vector)) diff --git a/test/decompiler/reference/levels/sunken/qbert-plat_REF.gc b/test/decompiler/reference/levels/sunken/qbert-plat_REF.gc index ac1c684be5..8ed20efb83 100644 --- a/test/decompiler/reference/levels/sunken/qbert-plat_REF.gc +++ b/test/decompiler/reference/levels/sunken/qbert-plat_REF.gc @@ -843,11 +843,7 @@ (-> s5-0 ppointer) ) ) - (until - (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 420 - ) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 420) (suspend) ) ) @@ -876,11 +872,7 @@ (-> s5-1 ppointer) ) ) - (until - (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 300 - ) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 300) (suspend) ) ) diff --git a/test/decompiler/reference/levels/sunken/wedge-plats_REF.gc b/test/decompiler/reference/levels/sunken/wedge-plats_REF.gc index 0c3ab06a36..4f8a8c19fb 100644 --- a/test/decompiler/reference/levels/sunken/wedge-plats_REF.gc +++ b/test/decompiler/reference/levels/sunken/wedge-plats_REF.gc @@ -297,11 +297,7 @@ ) ) (set! (-> self state-time) (-> *display* base-frame-counter)) - (until - (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 300 - ) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 300) (let ((gp-4 (-> self skel root-channel 0))) (set! (-> gp-4 num-func) num-func-identity) (set! (-> gp-4 frame-num) (ja-aframe 100.0 0)) @@ -589,11 +585,7 @@ ) ) (set! (-> self state-time) (-> *display* base-frame-counter)) - (until - (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 300 - ) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 300) (let ((gp-4 (-> self skel root-channel 0))) (set! (-> gp-4 num-func) num-func-identity) (set! (-> gp-4 frame-num) (ja-aframe 100.0 0)) diff --git a/test/decompiler/reference/levels/swamp/swamp-bat_REF.gc b/test/decompiler/reference/levels/swamp/swamp-bat_REF.gc index c52e0d6873..05f38abb06 100644 --- a/test/decompiler/reference/levels/swamp/swamp-bat_REF.gc +++ b/test/decompiler/reference/levels/swamp/swamp-bat_REF.gc @@ -370,13 +370,7 @@ swamp-bat-slave-event-handler (forward-up->quaternion gp-0 s2-0 (new 'static 'vector :y 1.0 :w 1.0)) (while #t (let - ((v1-17 - (- - (-> *display* base-frame-counter) - (the-as int (-> self state-time)) - ) - ) - ) + ((v1-17 (- (-> *display* base-frame-counter) (-> self state-time)))) (when (>= v1-17 s3-0) 0 (goto cfg-10) @@ -485,11 +479,7 @@ swamp-bat-slave-event-handler ) ) (while #t - (let - ((s4-0 - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - ) - ) + (let ((s4-0 (- (-> *display* base-frame-counter) (-> self state-time)))) (if (>= s4-0 90) (go swamp-bat-slave-swoop) ) @@ -903,10 +893,7 @@ swamp-bat-slave-event-handler (while #t (when (and - (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 60 - ) + (>= (- (-> *display* base-frame-counter) (-> self state-time)) 60) *target* (>= (-> self fact-override idle-distance) @@ -971,11 +958,7 @@ swamp-bat-slave-event-handler (set! (-> self state-time) (-> *display* base-frame-counter)) (while #t (swamp-bat-update-path) - (when - (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 150 - ) + (when (>= (- (-> *display* base-frame-counter) (-> self state-time)) 150) (set! (-> self state-time) (-> *display* base-frame-counter)) (if (not (swamp-bat-launch-slave)) (go swamp-bat-idle) diff --git a/test/decompiler/reference/levels/swamp/swamp-rat-nest_REF.gc b/test/decompiler/reference/levels/swamp/swamp-rat-nest_REF.gc index 8c0c29339b..5b4bd5c20e 100644 --- a/test/decompiler/reference/levels/swamp/swamp-rat-nest_REF.gc +++ b/test/decompiler/reference/levels/swamp/swamp-rat-nest_REF.gc @@ -1221,11 +1221,7 @@ (-> gp-0 ppointer) ) ) - (until - (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 30 - ) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 30) (suspend) ) (ja-channel-set! 0) @@ -1579,7 +1575,7 @@ swamp-rat-nest-default-event-handler (swamp-rat-nest-check-dummy) (when (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + (- (-> *display* base-frame-counter) (-> self state-time)) (the-as int (-> self test-interval)) ) (set! (-> self state-time) (-> *display* base-frame-counter)) @@ -1625,7 +1621,7 @@ swamp-rat-nest-default-event-handler (swamp-rat-nest-check-dummy) (when (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + (- (-> *display* base-frame-counter) (-> self state-time)) (the int (* (-> self spawn-period-scale) (-> self spawn-period))) ) (let ((a1-0 (new 'stack-no-clear 'event-message-block))) diff --git a/test/decompiler/reference/levels/swamp/swamp-rat_REF.gc b/test/decompiler/reference/levels/swamp/swamp-rat_REF.gc index a1bbc2e9c5..56704afb10 100644 --- a/test/decompiler/reference/levels/swamp/swamp-rat_REF.gc +++ b/test/decompiler/reference/levels/swamp/swamp-rat_REF.gc @@ -372,7 +372,7 @@ swamp-rat-default-event-handler (behavior () (if (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + (- (-> *display* base-frame-counter) (-> self state-time)) (the-as int (-> self chase-rest-time)) ) (go-virtual nav-enemy-victory) @@ -736,13 +736,7 @@ swamp-rat-default-event-handler (logtest? (-> self collide-info status) 4) (or (< (-> self collide-info trans y) (-> self min-height)) - (>= - (- - (-> *display* base-frame-counter) - (the-as int (-> self state-time)) - ) - 300 - ) + (>= (- (-> *display* base-frame-counter) (-> self state-time)) 300) ) ) 0 @@ -838,11 +832,11 @@ swamp-rat-default-event-handler :run-travel-speed (meters 7.0) :run-rotate-speed (degrees 7999.9995) :run-acceleration (meters 1.0) - :run-turn-time #x16 + :run-turn-time (seconds 0.07333333) :walk-travel-speed (meters 2.0) :walk-rotate-speed (degrees 7999.9995) :walk-acceleration (meters 1.0) - :walk-turn-time #x16 + :walk-turn-time (seconds 0.07333333) :attack-shove-back (meters 3.0) :attack-shove-up (meters 2.0) :shadow-size (meters 1.0) diff --git a/test/decompiler/reference/levels/training/training-part_REF.gc b/test/decompiler/reference/levels/training/training-part_REF.gc index 2bad03474e..a3a029ad75 100644 --- a/test/decompiler/reference/levels/training/training-part_REF.gc +++ b/test/decompiler/reference/levels/training/training-part_REF.gc @@ -198,25 +198,8 @@ :mask #xc0 :num 0.1 :group #x1 - :sound-name-char - (new 'static 'array uint8 16 - #x67 - #x65 - #x79 - #x73 - #x65 - #x72 - #x0 - #x0 - #x0 - #x0 - #x0 - #x0 - #x0 - #x0 - #x0 - #x0 - ) + :sound-name + (new 'static 'sound-name :lo #x726573796567) :volume #x400 :fo-min 50 :fo-max #xc8 diff --git a/test/decompiler/reference/levels/village1/assistant_REF.gc b/test/decompiler/reference/levels/village1/assistant_REF.gc index a6bdd96df6..db214c10f1 100644 --- a/test/decompiler/reference/levels/village1/assistant_REF.gc +++ b/test/decompiler/reference/levels/village1/assistant_REF.gc @@ -88,9 +88,9 @@ (defmethod play-anim! assistant ((obj assistant) (arg0 symbol)) (with-pp (case (current-status (-> obj tasks)) - ((2 3) + (((task-status need-hint) (task-status need-introduction)) (case (current-task (-> obj tasks)) - ((2) + (((game-task jungle-eggtop)) (when arg0 (let* ((s5-1 (-> obj tasks)) (s4-0 (method-of-object s5-1 save-reminder)) @@ -253,10 +253,10 @@ ) ) ) - ((5 4) + (((task-status need-reminder) (task-status need-reminder-a)) (set! (-> obj skippable) #t) (cond - ((zero? (current-task (-> obj tasks))) + ((= (current-task (-> obj tasks)) (game-task none)) (new 'static 'spool-anim :name "assistant-reminder-1-generic" :index 14 @@ -327,9 +327,7 @@ 0 "ERROR: : ~S playing anim for task status ~S~%" (-> obj name) - (task-status->string - (the-as task-status (current-status (-> obj tasks))) - ) + (task-status->string (current-status (-> obj tasks))) ) ) (-> obj draw art-group data 3) @@ -366,19 +364,44 @@ #f ) ((< 0.8 f0-2) - (dummy-11 (-> obj ambient) "ASSTLP01" #f (-> obj root-override trans)) + (play-ambient + (-> obj ambient) + "ASSTLP01" + #f + (-> obj root-override trans) + ) ) ((< 0.6 f0-2) - (dummy-11 (-> obj ambient) "ASSTLP04" #f (-> obj root-override trans)) + (play-ambient + (-> obj ambient) + "ASSTLP04" + #f + (-> obj root-override trans) + ) ) ((< 0.4 f0-2) - (dummy-11 (-> obj ambient) "ASSTLP05" #f (-> obj root-override trans)) + (play-ambient + (-> obj ambient) + "ASSTLP05" + #f + (-> obj root-override trans) + ) ) ((< 0.2 f0-2) - (dummy-11 (-> obj ambient) "ASSTLP02" #f (-> obj root-override trans)) + (play-ambient + (-> obj ambient) + "ASSTLP02" + #f + (-> obj root-override trans) + ) ) (else - (dummy-11 (-> obj ambient) "ASSTLP03" #f (-> obj root-override trans)) + (play-ambient + (-> obj ambient) + "ASSTLP03" + #f + (-> obj root-override trans) + ) ) ) ) diff --git a/test/decompiler/reference/levels/village1/explorer_REF.gc b/test/decompiler/reference/levels/village1/explorer_REF.gc index cc39f3d711..6fb8aa0ba6 100644 --- a/test/decompiler/reference/levels/village1/explorer_REF.gc +++ b/test/decompiler/reference/levels/village1/explorer_REF.gc @@ -87,7 +87,7 @@ (with-pp (set! (-> obj talk-message) (the-as uint 260)) (case (current-status (-> obj tasks)) - ((2 3) + (((task-status need-hint) (task-status need-introduction)) (if arg0 (close-status! (-> obj tasks) (task-status need-introduction)) ) @@ -119,7 +119,7 @@ ) ) ) - ((5) + (((task-status need-reminder)) (set! (-> obj skippable) #t) (cond ((zero? (get-reminder (-> obj tasks) 0)) @@ -175,13 +175,10 @@ ) ) ) - ((6) + (((task-status need-reward-speech)) (cond (arg0 - (set! - (-> obj cell-for-task) - (the-as game-task (current-task (-> obj tasks))) - ) + (set! (-> obj cell-for-task) (current-task (-> obj tasks))) (close-current! (-> obj tasks)) (let ((a1-7 (new 'stack-no-clear 'event-message-block))) (set! (-> a1-7 from) pp) @@ -216,9 +213,7 @@ 0 "ERROR: : ~S playing anim for task status ~S~%" (-> obj name) - (task-status->string - (the-as task-status (current-status (-> obj tasks))) - ) + (task-status->string (current-status (-> obj tasks))) ) ) (-> obj draw art-group data 3) @@ -248,7 +243,7 @@ ) (cond ((< 0.85714287 f0-2) - (dummy-11 (-> obj ambient) "EXP-AM05" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "EXP-AM05" #f (-> obj root-override trans)) ) ((< 0.71428573 f0-2) (if @@ -259,17 +254,22 @@ (task-status need-reminder) ) ) - (dummy-11 (-> obj ambient) "EXP-LO02" #f (-> obj root-override trans)) + (play-ambient + (-> obj ambient) + "EXP-LO02" + #f + (-> obj root-override trans) + ) ) ) ((< 0.5714286 f0-2) - (dummy-11 (-> obj ambient) "EXP-AM04" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "EXP-AM04" #f (-> obj root-override trans)) ) ((< 0.42857143 f0-2) - (dummy-11 (-> obj ambient) "EXP-AM03" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "EXP-AM03" #f (-> obj root-override trans)) ) ((< 0.2857143 f0-2) - (dummy-11 (-> obj ambient) "EXP-AM02" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "EXP-AM02" #f (-> obj root-override trans)) ) ((< 0.14285715 f0-2) (if @@ -280,11 +280,16 @@ (task-status need-reminder) ) ) - (dummy-11 (-> obj ambient) "EXP-AM01" #f (-> obj root-override trans)) + (play-ambient + (-> obj ambient) + "EXP-AM01" + #f + (-> obj root-override trans) + ) ) ) (else - (dummy-11 (-> obj ambient) "EXP-LO1A" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "EXP-LO1A" #f (-> obj root-override trans)) ) ) ) diff --git a/test/decompiler/reference/levels/village1/farmer_REF.gc b/test/decompiler/reference/levels/village1/farmer_REF.gc index 79b1eb3a5f..b18af8183c 100644 --- a/test/decompiler/reference/levels/village1/farmer_REF.gc +++ b/test/decompiler/reference/levels/village1/farmer_REF.gc @@ -42,7 +42,7 @@ ;; definition for method 32 of type farmer (defmethod play-anim! farmer ((obj farmer) (arg0 symbol)) (case (current-status (-> obj tasks)) - ((2 3) + (((task-status need-hint) (task-status need-introduction)) (if arg0 (close-status! (-> obj tasks) (task-status need-introduction)) ) @@ -53,7 +53,7 @@ :command-list '() ) ) - ((5) + (((task-status need-reminder)) (set! (-> obj skippable) #t) (cond ((zero? (get-reminder (-> obj tasks) 0)) @@ -80,12 +80,9 @@ ) ) ) - ((6) + (((task-status need-reward-speech)) (when arg0 - (set! - (-> obj cell-for-task) - (the-as game-task (current-task (-> obj tasks))) - ) + (set! (-> obj cell-for-task) (current-task (-> obj tasks))) (close-current! (-> obj tasks)) ) (new 'static 'spool-anim @@ -101,7 +98,7 @@ 0 "ERROR: : ~S playing anim for task status ~S~%" (-> obj name) - (task-status->string (the-as task-status (current-status (-> obj tasks)))) + (task-status->string (current-status (-> obj tasks))) ) ) (-> obj draw art-group data 4) @@ -111,9 +108,15 @@ ;; definition for method 31 of type farmer (defmethod get-art-elem farmer ((obj farmer)) - (let ((v1-1 (current-status (-> obj tasks)))) - (if (or (= v1-1 2) (= v1-1 3) (= v1-1 7) (zero? v1-1)) - (-> obj draw art-group data 4) + (case (current-status (-> obj tasks)) + (((task-status need-hint) + (task-status need-introduction) + (task-status need-resolution) + (task-status invalid) + ) + (-> obj draw art-group data 4) + ) + (else (-> obj draw art-group data 5) ) ) @@ -135,19 +138,19 @@ ) (cond ((< 0.8333333 f0-2) - (dummy-11 (-> obj ambient) "FAR-LO1A" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "FAR-LO1A" #f (-> obj root-override trans)) ) ((< 0.6666667 f0-2) - (dummy-11 (-> obj ambient) "FAR-AM01" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "FAR-AM01" #f (-> obj root-override trans)) ) ((< 0.5 f0-2) #f ) ((< 0.33333334 f0-2) - (dummy-11 (-> obj ambient) "FAR-AM2A" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "FAR-AM2A" #f (-> obj root-override trans)) ) ((< 0.16666667 f0-2) - (dummy-11 (-> obj ambient) "FAR-AM02" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "FAR-AM02" #f (-> obj root-override trans)) ) (else #f diff --git a/test/decompiler/reference/levels/village1/fishermans-boat_REF.gc b/test/decompiler/reference/levels/village1/fishermans-boat_REF.gc index 060ccc80d2..95d2dca3e2 100644 --- a/test/decompiler/reference/levels/village1/fishermans-boat_REF.gc +++ b/test/decompiler/reference/levels/village1/fishermans-boat_REF.gc @@ -1219,10 +1219,7 @@ ) ) (not (level-hint-displayed?)) - (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 900 - ) + (>= (- (-> *display* base-frame-counter) (-> self state-time)) 900) (file-status *art-control* (-> self anim name) 0) ) (hide-hud) @@ -1995,11 +1992,7 @@ (set! (-> self measure-parameters) #t) (set! (-> self controller steering) 1.0) (set! (-> self state-time) (-> *display* base-frame-counter)) - (until - (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 300 - ) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 300) (let ((f0-6 (/ diff --git a/test/decompiler/reference/levels/village1/sage_REF.gc b/test/decompiler/reference/levels/village1/sage_REF.gc index a68a5491a1..94b9132868 100644 --- a/test/decompiler/reference/levels/village1/sage_REF.gc +++ b/test/decompiler/reference/levels/village1/sage_REF.gc @@ -94,9 +94,9 @@ ) ) (case (current-status (-> obj tasks)) - ((2 3) + (((task-status need-hint) (task-status need-introduction)) (case (current-task (-> obj tasks)) - ((109) + (((game-task intro)) (when arg0 (close-status! (-> obj tasks) (task-status need-introduction)) (set-setting! *setting-control* pp 'music-volume-movie 'abs 0.0 0) @@ -307,7 +307,7 @@ ) ) ) - ((15) + (((game-task beach-ecorocks)) (when arg0 (let* ((s5-1 (-> obj tasks)) (s4-0 (method-of-object s5-1 save-reminder)) @@ -510,7 +510,7 @@ ) ) ) - ((5) + (((task-status need-reminder)) (set! (-> obj skippable) #t) (if arg0 (set! (-> obj reminder-played) #t) @@ -625,7 +625,7 @@ ) ) ) - ((6) + (((task-status need-reward-speech)) (when arg0 (set-setting! *setting-control* pp 'music-volume-movie 'abs 0.0 0) (copy-settings-from-target! *setting-control*) @@ -985,9 +985,7 @@ 0 "ERROR: : ~S playing anim for task status ~S~%" (-> obj name) - (task-status->string - (the-as task-status (current-status (-> obj tasks))) - ) + (task-status->string (current-status (-> obj tasks))) ) ) (get-art-elem obj) @@ -1039,19 +1037,19 @@ (defmethod get-art-elem sage ((obj sage)) (cond ((and - (= (current-task (-> obj tasks)) 15) + (= (current-task (-> obj tasks)) (game-task beach-ecorocks)) (or - (= (current-status (-> obj tasks)) 2) - (= (current-status (-> obj tasks)) 3) + (= (current-status (-> obj tasks)) (task-status need-hint)) + (= (current-status (-> obj tasks)) (task-status need-introduction)) ) ) (save-reminder (-> obj tasks) 0 0) ) ((and - (= (current-task (-> obj tasks)) 26) + (= (current-task (-> obj tasks)) (game-task misty-cannon)) (or - (= (current-status (-> obj tasks)) 2) - (= (current-status (-> obj tasks)) 3) + (= (current-status (-> obj tasks)) (task-status need-hint)) + (= (current-status (-> obj tasks)) (task-status need-introduction)) ) ) (save-reminder (-> obj tasks) 1 0) @@ -1059,7 +1057,7 @@ ((dummy-45 obj) (set! (-> obj reminder-played) #f) (cond - ((zero? (current-task (-> obj tasks))) + ((= (current-task (-> obj tasks)) (game-task none)) (case (get-reminder (-> obj tasks) 0) ((2) (save-reminder (-> obj tasks) 3 0) @@ -1140,19 +1138,44 @@ #f ) ((< 0.8 f0-2) - (dummy-11 (-> obj ambient) "SAGELP03" #f (-> obj root-override trans)) + (play-ambient + (-> obj ambient) + "SAGELP03" + #f + (-> obj root-override trans) + ) ) ((< 0.6 f0-2) - (dummy-11 (-> obj ambient) "SAGELP04" #f (-> obj root-override trans)) + (play-ambient + (-> obj ambient) + "SAGELP04" + #f + (-> obj root-override trans) + ) ) ((< 0.4 f0-2) - (dummy-11 (-> obj ambient) "SAGELP05" #f (-> obj root-override trans)) + (play-ambient + (-> obj ambient) + "SAGELP05" + #f + (-> obj root-override trans) + ) ) ((< 0.2 f0-2) - (dummy-11 (-> obj ambient) "SAGELP06" #f (-> obj root-override trans)) + (play-ambient + (-> obj ambient) + "SAGELP06" + #f + (-> obj root-override trans) + ) ) (else - (dummy-11 (-> obj ambient) "SAGELP11" #f (-> obj root-override trans)) + (play-ambient + (-> obj ambient) + "SAGELP11" + #f + (-> obj root-override trans) + ) ) ) ) diff --git a/test/decompiler/reference/levels/village1/village1-part2_REF.gc b/test/decompiler/reference/levels/village1/village1-part2_REF.gc index 53e27f6a2c..b820fd436c 100644 --- a/test/decompiler/reference/levels/village1/village1-part2_REF.gc +++ b/test/decompiler/reference/levels/village1/village1-part2_REF.gc @@ -1702,25 +1702,8 @@ :mask #x1 :num 1.0 :group #x1 - :sound-name-char - (new 'static 'array uint8 16 - #x64 - #x72 - #x69 - #x70 - #x2d - #x6f - #x6e - #x2d - #x77 - #x6f - #x6f - #x64 - #x0 - #x0 - #x0 - #x0 - ) + :sound-name + (new 'static 'sound-name :lo #x2d6e6f2d70697264) :volume #x200 ) ) diff --git a/test/decompiler/reference/levels/village1/village1-part_REF.gc b/test/decompiler/reference/levels/village1/village1-part_REF.gc index bb4956c84a..7ff6f1c5ee 100644 --- a/test/decompiler/reference/levels/village1/village1-part_REF.gc +++ b/test/decompiler/reference/levels/village1/village1-part_REF.gc @@ -871,25 +871,8 @@ :mask #x1 :num 1.0 :group #x1 - :sound-name-char - (new 'static 'array uint8 16 - #x66 - #x69 - #x72 - #x65 - #x2d - #x70 - #x6f - #x70 - #x0 - #x0 - #x0 - #x0 - #x0 - #x0 - #x0 - #x0 - ) + :sound-name + (new 'static 'sound-name :lo #x706f702d65726966) :volume #x400 ) ) diff --git a/test/decompiler/reference/levels/village1/yakow_REF.gc b/test/decompiler/reference/levels/village1/yakow_REF.gc index 508f13367f..2b42803849 100644 --- a/test/decompiler/reference/levels/village1/yakow_REF.gc +++ b/test/decompiler/reference/levels/village1/yakow_REF.gc @@ -773,7 +773,7 @@ yakow-default-event-handler (if (and (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + (- (-> *display* base-frame-counter) (-> self state-time)) (the-as int (-> *YAKOW-bank* default-patrol-time)) ) (and @@ -940,7 +940,7 @@ yakow-default-event-handler (if (and (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + (- (-> *display* base-frame-counter) (-> self state-time)) (the-as int (-> *YAKOW-bank* default-patrol-time)) ) (not (-> self in-pen)) @@ -958,11 +958,7 @@ yakow-default-event-handler ) (go yakow-notice) ) - (when - (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 15 - ) + (when (>= (- (-> *display* base-frame-counter) (-> self state-time)) 15) (when (or (logtest? (nav-control-flags bit19) (-> self nav flags)) @@ -1328,11 +1324,7 @@ yakow-default-event-handler ) :trans (behavior () - (if - (>= - (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) - 60 - ) + (if (>= (- (-> *display* base-frame-counter) (-> self state-time)) 60) (set! (-> self travel-speed) (seek diff --git a/test/decompiler/reference/levels/village2/assistant-village2_REF.gc b/test/decompiler/reference/levels/village2/assistant-village2_REF.gc index 83193556cd..778647bdd8 100644 --- a/test/decompiler/reference/levels/village2/assistant-village2_REF.gc +++ b/test/decompiler/reference/levels/village2/assistant-village2_REF.gc @@ -140,12 +140,15 @@ (with-pp (set! (-> obj talk-message) (the-as uint 292)) (case (current-status (-> obj tasks)) - ((1 2 3) + (((task-status unknown) + (task-status need-hint) + (task-status need-introduction) + ) (if (not arg0) (set! (-> obj will-talk) #t) ) (case (current-task (-> obj tasks)) - ((103) + (((game-task village2-levitator)) (when arg0 (close-status! (-> obj tasks) (task-status need-introduction)) (let ((a1-5 (new 'stack-no-clear 'event-message-block))) @@ -793,7 +796,7 @@ ) ) ) - ((47) + (((game-task sunken-room)) (when arg0 (let* ((s5-2 (-> obj tasks)) (s4-0 (method-of-object s5-2 save-reminder)) @@ -909,7 +912,7 @@ ) ) ) - ((53) + (((game-task rolling-robbers)) (when arg0 (let* ((s5-5 (-> obj tasks)) (s4-1 (method-of-object s5-5 save-reminder)) @@ -994,7 +997,7 @@ ) ) ) - ((5) + (((task-status need-reminder)) (set! (-> obj skippable) #t) (let ((s4-2 (+ (get-reminder (-> obj tasks) 0) 1))) (if (< (the-as uint 2) (the-as uint s4-2)) @@ -1071,9 +1074,7 @@ 0 "ERROR: : ~S playing anim for task status ~S~%" (-> obj name) - (task-status->string - (the-as task-status (current-status (-> obj tasks))) - ) + (task-status->string (current-status (-> obj tasks))) ) ) (-> obj draw art-group data 5) @@ -1190,10 +1191,10 @@ #f ) ((< 0.5 f30-0) - (dummy-11 (-> obj ambient) "ASSTLP23" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "ASSTLP23" #f (-> obj root-override trans)) ) (else - (dummy-11 (-> obj ambient) "ASSTLP24" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "ASSTLP24" #f (-> obj root-override trans)) ) ) ) @@ -2572,7 +2573,7 @@ ((obj assistant-levitator) (arg0 symbol)) (with-pp (case (current-status (-> obj tasks)) - ((6) + (((task-status need-reward-speech)) (when arg0 (close-current! (-> obj tasks)) (let ((a1-1 (new 'stack-no-clear 'event-message-block))) @@ -2635,9 +2636,7 @@ 0 "ERROR: : ~S playing anim for task status ~S~%" (-> obj name) - (task-status->string - (the-as task-status (current-status (-> obj tasks))) - ) + (task-status->string (current-status (-> obj tasks))) ) ) (-> obj draw art-group data 5) @@ -2732,13 +2731,7 @@ (logtest? (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons l3)) ) ) - (< - (- - (-> *display* base-frame-counter) - (the-as int (-> self state-time)) - ) - 3000 - ) + (< (- (-> *display* base-frame-counter) (-> self state-time)) 3000) ) ) (hide-hud) @@ -3159,25 +3152,8 @@ :mask #x80 :num 1.0 :group #x1 - :sound-name-char - (new 'static 'array uint8 16 - #x6c - #x65 - #x76 - #x2d - #x6d - #x61 - #x63 - #x68 - #x2d - #x69 - #x64 - #x6c - #x65 - #x0 - #x0 - #x0 - ) + :sound-name + (new 'static 'sound-name :lo #x6863616d2d76656c) :volume #x400 :fo-max 30 ) diff --git a/test/decompiler/reference/levels/village2/flutflut-bluehut_REF.gc b/test/decompiler/reference/levels/village2/flutflut-bluehut_REF.gc index 03477dec2e..4098881d52 100644 --- a/test/decompiler/reference/levels/village2/flutflut-bluehut_REF.gc +++ b/test/decompiler/reference/levels/village2/flutflut-bluehut_REF.gc @@ -44,7 +44,7 @@ 0 "ERROR: : ~S playing anim for task status ~S~%" (-> obj name) - (task-status->string (the-as task-status (current-status (-> obj tasks)))) + (task-status->string (current-status (-> obj tasks))) ) ) (the-as basic (get-art-elem obj)) @@ -355,7 +355,3 @@ (dummy-42 obj) (none) ) - - - - diff --git a/test/decompiler/reference/levels/village2/gambler_REF.gc b/test/decompiler/reference/levels/village2/gambler_REF.gc index 053170ff54..b0e80c8a3e 100644 --- a/test/decompiler/reference/levels/village2/gambler_REF.gc +++ b/test/decompiler/reference/levels/village2/gambler_REF.gc @@ -46,7 +46,7 @@ (with-pp (set! (-> obj talk-message) (the-as uint 260)) (case (current-status (-> obj tasks)) - ((2 3) + (((task-status need-hint) (task-status need-introduction)) (when arg0 (close-status! (-> obj tasks) (task-status need-introduction)) (close-specific-task! @@ -133,7 +133,7 @@ ) ) ) - ((5) + (((task-status need-reminder)) (set! (-> obj skippable) #t) (cond ((closed? @@ -184,17 +184,14 @@ ) ) ) - ((6) + (((task-status need-reward-speech)) (if (not arg0) (set! (-> obj will-talk) #t) ) (case (current-task (-> obj tasks)) - ((52) + (((game-task rolling-race)) (when arg0 - (set! - (-> obj cell-for-task) - (the-as game-task (current-task (-> obj tasks))) - ) + (set! (-> obj cell-for-task) (current-task (-> obj tasks))) (close-current! (-> obj tasks)) ) (new 'static 'spool-anim @@ -207,10 +204,7 @@ (else (cond (arg0 - (set! - (-> obj cell-for-task) - (the-as game-task (current-task (-> obj tasks))) - ) + (set! (-> obj cell-for-task) (current-task (-> obj tasks))) (close-current! (-> obj tasks)) (let ((a1-10 (new 'stack-no-clear 'event-message-block))) (set! (-> a1-10 from) pp) @@ -243,9 +237,7 @@ 0 "ERROR: : ~S playing anim for task status ~S~%" (-> obj name) - (task-status->string - (the-as task-status (current-status (-> obj tasks))) - ) + (task-status->string (current-status (-> obj tasks))) ) ) (-> obj draw art-group data 7) @@ -275,45 +267,50 @@ ) (cond ((< 0.9230769 f0-2) - (dummy-11 (-> obj ambient) "GAM-AM01" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "GAM-AM01" #f (-> obj root-override trans)) ) ((< 0.84615386 f0-2) - (dummy-11 (-> obj ambient) "GAM-AM02" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "GAM-AM02" #f (-> obj root-override trans)) ) ((< 0.7692308 f0-2) - (dummy-11 (-> obj ambient) "GAM-AM03" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "GAM-AM03" #f (-> obj root-override trans)) ) ((< 0.6923077 f0-2) - (dummy-11 (-> obj ambient) "GAM-AM04" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "GAM-AM04" #f (-> obj root-override trans)) ) ((< 0.61538464 f0-2) - (dummy-11 (-> obj ambient) "GAM-AM05" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "GAM-AM05" #f (-> obj root-override trans)) ) ((< 0.53846157 f0-2) - (dummy-11 (-> obj ambient) "GAM-AM06" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "GAM-AM06" #f (-> obj root-override trans)) ) ((< 0.46153846 f0-2) - (dummy-11 (-> obj ambient) "GAM-AM07" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "GAM-AM07" #f (-> obj root-override trans)) ) ((< 0.3846154 f0-2) - (dummy-11 (-> obj ambient) "GAM-AM08" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "GAM-AM08" #f (-> obj root-override trans)) ) ((< 0.30769232 f0-2) - (dummy-11 (-> obj ambient) "GAM-AM09" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "GAM-AM09" #f (-> obj root-override trans)) ) ((< 0.23076923 f0-2) (if (not (task-closed? (game-task ogre-boss) (task-status need-reminder))) - (dummy-11 (-> obj ambient) "GAM-AM10" #f (-> obj root-override trans)) + (play-ambient + (-> obj ambient) + "GAM-AM10" + #f + (-> obj root-override trans) + ) ) ) ((< 0.15384616 f0-2) - (dummy-11 (-> obj ambient) "GAM-AM11" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "GAM-AM11" #f (-> obj root-override trans)) ) ((< 0.07692308 f0-2) - (dummy-11 (-> obj ambient) "GAM-AM12" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "GAM-AM12" #f (-> obj root-override trans)) ) (else - (dummy-11 (-> obj ambient) "GAM-AM13" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "GAM-AM13" #f (-> obj root-override trans)) ) ) ) diff --git a/test/decompiler/reference/levels/village2/geologist_REF.gc b/test/decompiler/reference/levels/village2/geologist_REF.gc index e90374383b..43ff9abb88 100644 --- a/test/decompiler/reference/levels/village2/geologist_REF.gc +++ b/test/decompiler/reference/levels/village2/geologist_REF.gc @@ -46,7 +46,7 @@ (with-pp (set! (-> obj talk-message) (the-as uint 260)) (case (current-status (-> obj tasks)) - ((2 3) + (((task-status need-hint) (task-status need-introduction)) (when arg0 (close-status! (-> obj tasks) (task-status need-introduction)) (close-specific-task! @@ -97,7 +97,7 @@ ) ) ) - ((5) + (((task-status need-reminder)) (set! (-> obj skippable) #t) (cond ((closed? @@ -148,17 +148,14 @@ ) ) ) - ((6) + (((task-status need-reward-speech)) (if (not arg0) (set! (-> obj will-talk) #t) ) (case (current-task (-> obj tasks)) - ((54) + (((game-task rolling-moles)) (when arg0 - (set! - (-> obj cell-for-task) - (the-as game-task (current-task (-> obj tasks))) - ) + (set! (-> obj cell-for-task) (current-task (-> obj tasks))) (close-current! (-> obj tasks)) ) (new 'static 'spool-anim @@ -171,10 +168,7 @@ (else (cond (arg0 - (set! - (-> obj cell-for-task) - (the-as game-task (current-task (-> obj tasks))) - ) + (set! (-> obj cell-for-task) (current-task (-> obj tasks))) (close-current! (-> obj tasks)) (let ((a1-10 (new 'stack-no-clear 'event-message-block))) (set! (-> a1-10 from) pp) @@ -207,9 +201,7 @@ 0 "ERROR: : ~S playing anim for task status ~S~%" (-> obj name) - (task-status->string - (the-as task-status (current-status (-> obj tasks))) - ) + (task-status->string (current-status (-> obj tasks))) ) ) (-> obj draw art-group data 5) @@ -239,7 +231,7 @@ ) (cond ((< 0.8888889 f0-2) - (dummy-11 (-> obj ambient) "GEO-AM01" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "GEO-AM01" #f (-> obj root-override trans)) ) ((< 0.7777778 f0-2) (if @@ -250,11 +242,16 @@ (task-status need-reminder) ) ) - (dummy-11 (-> obj ambient) "GEO-AM02" #f (-> obj root-override trans)) + (play-ambient + (-> obj ambient) + "GEO-AM02" + #f + (-> obj root-override trans) + ) ) ) ((< 0.6666667 f0-2) - (dummy-11 (-> obj ambient) "GEO-AM03" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "GEO-AM03" #f (-> obj root-override trans)) ) ((< 0.5555556 f0-2) (if @@ -263,14 +260,19 @@ (game-task village2-geologist-money) (task-status need-introduction) ) - (dummy-11 (-> obj ambient) "GEO-AM04" #f (-> obj root-override trans)) + (play-ambient + (-> obj ambient) + "GEO-AM04" + #f + (-> obj root-override trans) + ) ) ) ((< 0.44444445 f0-2) - (dummy-11 (-> obj ambient) "GEO-AM05" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "GEO-AM05" #f (-> obj root-override trans)) ) ((< 0.33333334 f0-2) - (dummy-11 (-> obj ambient) "GEO-AM06" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "GEO-AM06" #f (-> obj root-override trans)) ) ((< 0.22222222 f0-2) (if @@ -281,21 +283,26 @@ (task-status need-reminder) ) ) - (dummy-11 (-> obj ambient) "GEO-AM07" #f (-> obj root-override trans)) + (play-ambient + (-> obj ambient) + "GEO-AM07" + #f + (-> obj root-override trans) + ) ) ) ((< 0.11111111 f0-2) - (dummy-11 (-> obj ambient) "GEO-LO02" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "GEO-LO02" #f (-> obj root-override trans)) ) ((closed? (-> obj tasks) (game-task village2-geologist-money) (task-status need-resolution) ) - (dummy-11 (-> obj ambient) "GEO-AM08" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "GEO-AM08" #f (-> obj root-override trans)) ) (else - (dummy-11 (-> obj ambient) "GEO-LO01" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "GEO-LO01" #f (-> obj root-override trans)) ) ) ) diff --git a/test/decompiler/reference/levels/village2/sage-bluehut_REF.gc b/test/decompiler/reference/levels/village2/sage-bluehut_REF.gc index 10a9f1773f..a0bae74e61 100644 --- a/test/decompiler/reference/levels/village2/sage-bluehut_REF.gc +++ b/test/decompiler/reference/levels/village2/sage-bluehut_REF.gc @@ -70,12 +70,12 @@ (with-pp (set! (-> obj talk-message) (the-as uint 291)) (case (current-status (-> obj tasks)) - ((2 3) + (((task-status need-hint) (task-status need-introduction)) (if (not arg0) (set! (-> obj will-talk) #t) ) (case (current-task (-> obj tasks)) - ((55) + (((game-task rolling-plants)) (when arg0 (let* ((s5-1 (-> obj tasks)) (s4-0 (method-of-object s5-1 save-reminder)) @@ -177,7 +177,7 @@ ) ) ) - ((5) + (((task-status need-reminder)) (set! (-> obj skippable) #t) (if arg0 (set! (-> obj reminder-played) #t) @@ -221,9 +221,7 @@ 0 "ERROR: : ~S playing anim for task status ~S~%" (-> obj name) - (task-status->string - (the-as task-status (current-status (-> obj tasks))) - ) + (task-status->string (current-status (-> obj tasks))) ) ) (get-art-elem obj) @@ -236,9 +234,9 @@ ;; INFO: Return type mismatch symbol vs none. (defmethod dummy-45 sage-bluehut ((obj sage-bluehut)) (cond - ((= (current-status (-> obj tasks)) 1) + ((= (current-status (-> obj tasks)) (task-status unknown)) ) - ((zero? (current-status (-> obj tasks))) + ((= (current-status (-> obj tasks)) (task-status invalid)) ) ((and (closed? @@ -275,19 +273,19 @@ (defmethod get-art-elem sage-bluehut ((obj sage-bluehut)) (cond ((and - (= (current-task (-> obj tasks)) 55) + (= (current-task (-> obj tasks)) (game-task rolling-plants)) (or - (= (current-status (-> obj tasks)) 2) - (= (current-status (-> obj tasks)) 3) + (= (current-status (-> obj tasks)) (task-status need-hint)) + (= (current-status (-> obj tasks)) (task-status need-introduction)) ) ) (save-reminder (-> obj tasks) 0 0) ) ((and - (= (current-task (-> obj tasks)) 104) + (= (current-task (-> obj tasks)) (game-task swamp-arm)) (or - (= (current-status (-> obj tasks)) 2) - (= (current-status (-> obj tasks)) 3) + (= (current-status (-> obj tasks)) (task-status need-hint)) + (= (current-status (-> obj tasks)) (task-status need-introduction)) ) ) (save-reminder (-> obj tasks) 1 0) @@ -404,19 +402,19 @@ ) (cond ((< 0.8 f0-2) - (dummy-11 (-> obj ambient) "SAGELP20" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "SAGELP20" #f (-> obj root-override trans)) ) ((< 0.6 f0-2) - (dummy-11 (-> obj ambient) "SAGELP21" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "SAGELP21" #f (-> obj root-override trans)) ) ((< 0.4 f0-2) - (dummy-11 (-> obj ambient) "SAGELP22" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "SAGELP22" #f (-> obj root-override trans)) ) ((< 0.2 f0-2) - (dummy-11 (-> obj ambient) "SAGELP23" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "SAGELP23" #f (-> obj root-override trans)) ) ((nonzero? (get-task-status (game-task citadel-sage-blue))) - (dummy-11 (-> obj ambient) "SAGELP24" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "SAGELP24" #f (-> obj root-override trans)) ) ) ) diff --git a/test/decompiler/reference/levels/village2/village2-part_REF.gc b/test/decompiler/reference/levels/village2/village2-part_REF.gc index 96f5911295..67ccb9e1c2 100644 --- a/test/decompiler/reference/levels/village2/village2-part_REF.gc +++ b/test/decompiler/reference/levels/village2/village2-part_REF.gc @@ -2185,25 +2185,8 @@ :mask #x1 :num 0.1 :group #x1 - :sound-name-char - (new 'static 'array uint8 16 - #x73 - #x70 - #x61 - #x72 - #x6b - #x0 - #x0 - #x0 - #x0 - #x0 - #x0 - #x0 - #x0 - #x0 - #x0 - #x0 - ) + :sound-name + (new 'static 'sound-name :lo #x6b72617073) :volume #x400 ) ) @@ -2249,25 +2232,8 @@ :mask #x1 :num 0.1 :group #x1 - :sound-name-char - (new 'static 'array uint8 16 - #x73 - #x70 - #x61 - #x72 - #x6b - #x0 - #x0 - #x0 - #x0 - #x0 - #x0 - #x0 - #x0 - #x0 - #x0 - #x0 - ) + :sound-name + (new 'static 'sound-name :lo #x6b72617073) :volume #x400 ) ) @@ -2557,25 +2523,8 @@ :mask #x1 :num 0.1 :group #x1 - :sound-name-char - (new 'static 'array uint8 16 - #x73 - #x70 - #x61 - #x72 - #x6b - #x0 - #x0 - #x0 - #x0 - #x0 - #x0 - #x0 - #x0 - #x0 - #x0 - #x0 - ) + :sound-name + (new 'static 'sound-name :lo #x6b72617073) :volume #x400 ) ) @@ -2618,25 +2567,8 @@ :mask #x1 :num 0.1 :group #x1 - :sound-name-char - (new 'static 'array uint8 16 - #x73 - #x70 - #x61 - #x72 - #x6b - #x0 - #x0 - #x0 - #x0 - #x0 - #x0 - #x0 - #x0 - #x0 - #x0 - #x0 - ) + :sound-name + (new 'static 'sound-name :lo #x6b72617073) :volume #x400 ) ) diff --git a/test/decompiler/reference/levels/village2/warrior_REF.gc b/test/decompiler/reference/levels/village2/warrior_REF.gc index 1162a77878..22f5adc865 100644 --- a/test/decompiler/reference/levels/village2/warrior_REF.gc +++ b/test/decompiler/reference/levels/village2/warrior_REF.gc @@ -89,7 +89,7 @@ (with-pp (set! (-> obj talk-message) (the-as uint 260)) (case (current-status (-> obj tasks)) - ((2 3) + (((task-status need-hint) (task-status need-introduction)) (if arg0 (close-status! (-> obj tasks) (task-status need-introduction)) ) @@ -145,7 +145,7 @@ ) ) ) - ((5) + (((task-status need-reminder)) (set! (-> obj skippable) #t) (new 'static 'spool-anim :name "warrior-reminder-1" @@ -154,13 +154,10 @@ :command-list '() ) ) - ((6) + (((task-status need-reward-speech)) (cond (arg0 - (set! - (-> obj cell-for-task) - (the-as game-task (current-task (-> obj tasks))) - ) + (set! (-> obj cell-for-task) (current-task (-> obj tasks))) (close-current! (-> obj tasks)) (let ((a1-4 (new 'stack-no-clear 'event-message-block))) (set! (-> a1-4 from) pp) @@ -228,9 +225,7 @@ 0 "ERROR: : ~S playing anim for task status ~S~%" (-> obj name) - (task-status->string - (the-as task-status (current-status (-> obj tasks))) - ) + (task-status->string (current-status (-> obj tasks))) ) ) (-> obj draw art-group data 5) @@ -276,13 +271,13 @@ ) (cond ((< 0.66 f0-2) - (dummy-11 (-> obj ambient) "WAR-LO1A" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "WAR-LO1A" #f (-> obj root-override trans)) ) ((< 0.33 f0-2) - (dummy-11 (-> obj ambient) "WAR-LO1B" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "WAR-LO1B" #f (-> obj root-override trans)) ) (else - (dummy-11 (-> obj ambient) "WAR-LO1C" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "WAR-LO1C" #f (-> obj root-override trans)) ) ) ) diff --git a/test/decompiler/reference/levels/village3/assistant-village3_REF.gc b/test/decompiler/reference/levels/village3/assistant-village3_REF.gc index ea2e4a4cb5..c9ccca0646 100644 --- a/test/decompiler/reference/levels/village3/assistant-village3_REF.gc +++ b/test/decompiler/reference/levels/village3/assistant-village3_REF.gc @@ -92,7 +92,7 @@ 0 "ERROR: : ~S playing anim for task status ~S~%" (-> obj name) - (task-status->string (the-as task-status (current-status (-> obj tasks)))) + (task-status->string (current-status (-> obj tasks))) ) ) (get-art-elem obj) @@ -143,13 +143,13 @@ ) (cond ((< 0.85714287 f0-2) - (dummy-11 (-> obj ambient) "ASSTLP31" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "ASSTLP31" #f (-> obj root-override trans)) ) ((< 0.71428573 f0-2) - (dummy-11 (-> obj ambient) "ASSTLP32" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "ASSTLP32" #f (-> obj root-override trans)) ) ((< 0.5714286 f0-2) - (dummy-11 (-> obj ambient) "ASSTLP33" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "ASSTLP33" #f (-> obj root-override trans)) ) ((< 0.42857143 f0-2) (let ((v1-16 (get-task-status (game-task lavatube-end)))) @@ -160,7 +160,12 @@ (= v1-16 (task-status invalid)) ) ) - (dummy-11 (-> obj ambient) "ASSTLP34" #f (-> obj root-override trans)) + (play-ambient + (-> obj ambient) + "ASSTLP34" + #f + (-> obj root-override trans) + ) ) ) ) @@ -173,7 +178,12 @@ (= v1-21 (task-status invalid)) ) ) - (dummy-11 (-> obj ambient) "ASSTLP35" #f (-> obj root-override trans)) + (play-ambient + (-> obj ambient) + "ASSTLP35" + #f + (-> obj root-override trans) + ) ) ) ) @@ -186,12 +196,17 @@ (= v1-26 (task-status invalid)) ) ) - (dummy-11 (-> obj ambient) "ASSTLP36" #f (-> obj root-override trans)) + (play-ambient + (-> obj ambient) + "ASSTLP36" + #f + (-> obj root-override trans) + ) ) ) ) ((nonzero? (get-task-status (game-task citadel-sage-green))) - (dummy-11 (-> obj ambient) "ASSTLP37" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "ASSTLP37" #f (-> obj root-override trans)) ) ) ) diff --git a/test/decompiler/reference/levels/village3/miners_REF.gc b/test/decompiler/reference/levels/village3/miners_REF.gc index 9353a0d0e5..30cb6c783f 100644 --- a/test/decompiler/reference/levels/village3/miners_REF.gc +++ b/test/decompiler/reference/levels/village3/miners_REF.gc @@ -122,7 +122,7 @@ 0 "ERROR: : ~S playing anim for task status ~S~%" (-> obj name) - (task-status->string (the-as task-status (current-status (-> obj tasks)))) + (task-status->string (current-status (-> obj tasks))) ) ) (the-as basic (-> obj draw art-group data 3)) @@ -364,12 +364,12 @@ (with-pp (set! (-> obj talk-message) (the-as uint 260)) (case (current-status (-> obj tasks)) - ((2 3) + (((task-status need-hint) (task-status need-introduction)) (if (not arg0) (set! (-> obj will-talk) #t) ) (case (current-task (-> obj tasks)) - ((96) + (((game-task village3-miner-money1)) (when arg0 (let* ((s5-1 (-> obj tasks)) (s4-0 (method-of-object s5-1 save-reminder)) @@ -457,7 +457,7 @@ ) ) ) - ((78) + (((game-task cave-gnawers)) (when arg0 (let* ((s5-2 (-> obj tasks)) (s4-1 (method-of-object s5-2 save-reminder)) @@ -553,7 +553,7 @@ ) ) ) - ((5) + (((task-status need-reminder)) (set! (-> obj skippable) #t) (let ((s4-2 (+ (get-reminder (-> obj tasks) 0) 1))) (if (< (the-as uint 3) (the-as uint s4-2)) @@ -707,7 +707,7 @@ ) ) ) - ((6) + (((task-status need-reward-speech)) (let ((s4-3 (get-reminder (-> obj tasks) 2))) (cond (arg0 @@ -718,10 +718,7 @@ (set! (-> a1-22 param 0) (the-as uint (process->handle obj))) (send-event-function (-> obj other-miner ppointer 3) a1-22) ) - (set! - (-> obj cell-for-task) - (the-as game-task (current-task (-> obj tasks))) - ) + (set! (-> obj cell-for-task) (current-task (-> obj tasks))) (close-current! (-> obj tasks)) (let ((a1-23 (new 'stack-no-clear 'event-message-block))) (set! (-> a1-23 from) pp) @@ -770,9 +767,7 @@ 0 "ERROR: : ~S playing anim for task status ~S~%" (-> obj name) - (task-status->string - (the-as task-status (current-status (-> obj tasks))) - ) + (task-status->string (current-status (-> obj tasks))) ) ) (-> obj draw art-group data 3) @@ -818,91 +813,91 @@ ) (cond ((< 0.9655172 f0-2) - (dummy-11 (-> obj ambient) "MIN-LO01" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "MIN-LO01" #f (-> obj root-override trans)) ) ((< 0.9310345 f0-2) - (dummy-11 (-> obj ambient) "MIN-LO03" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "MIN-LO03" #f (-> obj root-override trans)) ) ((< 0.8965517 f0-2) - (dummy-11 (-> obj ambient) "MIN-LO04" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "MIN-LO04" #f (-> obj root-override trans)) ) ((< 0.86206895 f0-2) - (dummy-11 (-> obj ambient) "MIN-LO05" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "MIN-LO05" #f (-> obj root-override trans)) ) ((< 0.82758623 f0-2) - (dummy-11 (-> obj ambient) "MIN-LO06" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "MIN-LO06" #f (-> obj root-override trans)) ) ((< 0.79310346 f0-2) - (dummy-11 (-> obj ambient) "MSH-AM01" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "MSH-AM01" #f (-> obj root-override trans)) ) ((< 0.7586207 f0-2) - (dummy-11 (-> obj ambient) "MSH-AM02" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "MSH-AM02" #f (-> obj root-override trans)) ) ((< 0.7241379 f0-2) - (dummy-11 (-> obj ambient) "MSH-AM03" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "MSH-AM03" #f (-> obj root-override trans)) ) ((< 0.6896552 f0-2) - (dummy-11 (-> obj ambient) "MSH-AM04" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "MSH-AM04" #f (-> obj root-override trans)) ) ((< 0.6551724 f0-2) - (dummy-11 (-> obj ambient) "MSH-AM05" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "MSH-AM05" #f (-> obj root-override trans)) ) ((< 0.62068963 f0-2) - (dummy-11 (-> obj ambient) "MSH-AM06" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "MSH-AM06" #f (-> obj root-override trans)) ) ((< 0.5862069 f0-2) - (dummy-11 (-> obj ambient) "MSH-AM07" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "MSH-AM07" #f (-> obj root-override trans)) ) ((< 0.55172414 f0-2) - (dummy-11 (-> obj ambient) "MSH-AM08" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "MSH-AM08" #f (-> obj root-override trans)) ) ((< 0.51724136 f0-2) - (dummy-11 (-> obj ambient) "MSH-AM09" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "MSH-AM09" #f (-> obj root-override trans)) ) ((< 0.4827586 f0-2) - (dummy-11 (-> obj ambient) "MSH-AM10" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "MSH-AM10" #f (-> obj root-override trans)) ) ((< 0.44827586 f0-2) - (dummy-11 (-> obj ambient) "MSH-AM11" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "MSH-AM11" #f (-> obj root-override trans)) ) ((< 0.41379312 f0-2) - (dummy-11 (-> obj ambient) "MSH-AM12" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "MSH-AM12" #f (-> obj root-override trans)) ) ((< 0.37931034 f0-2) - (dummy-11 (-> obj ambient) "MSH-AM1A" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "MSH-AM1A" #f (-> obj root-override trans)) ) ((< 0.3448276 f0-2) - (dummy-11 (-> obj ambient) "MSH-AM2A" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "MSH-AM2A" #f (-> obj root-override trans)) ) ((< 0.31034482 f0-2) - (dummy-11 (-> obj ambient) "MSH-AM3A" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "MSH-AM3A" #f (-> obj root-override trans)) ) ((< 0.27586207 f0-2) - (dummy-11 (-> obj ambient) "MTA-AM01" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "MTA-AM01" #f (-> obj root-override trans)) ) ((< 0.2413793 f0-2) - (dummy-11 (-> obj ambient) "MTA-AM02" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "MTA-AM02" #f (-> obj root-override trans)) ) ((< 0.20689656 f0-2) - (dummy-11 (-> obj ambient) "MTA-AM03" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "MTA-AM03" #f (-> obj root-override trans)) ) ((< 0.1724138 f0-2) - (dummy-11 (-> obj ambient) "MTA-AM04" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "MTA-AM04" #f (-> obj root-override trans)) ) ((< 0.13793103 f0-2) - (dummy-11 (-> obj ambient) "MTA-AM05" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "MTA-AM05" #f (-> obj root-override trans)) ) ((< 0.10344828 f0-2) - (dummy-11 (-> obj ambient) "MTA-AM06" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "MTA-AM06" #f (-> obj root-override trans)) ) ((< 0.06896552 f0-2) - (dummy-11 (-> obj ambient) "MTA-AM07" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "MTA-AM07" #f (-> obj root-override trans)) ) ((< 0.03448276 f0-2) - (dummy-11 (-> obj ambient) "MTA-AM08" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "MTA-AM08" #f (-> obj root-override trans)) ) (else - (dummy-11 (-> obj ambient) "MTA-AM09" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "MTA-AM09" #f (-> obj root-override trans)) ) ) ) diff --git a/test/decompiler/reference/levels/village3/sage-village3_REF.gc b/test/decompiler/reference/levels/village3/sage-village3_REF.gc index 2b6d05fc62..267f3470a9 100644 --- a/test/decompiler/reference/levels/village3/sage-village3_REF.gc +++ b/test/decompiler/reference/levels/village3/sage-village3_REF.gc @@ -83,12 +83,15 @@ (with-pp (set! (-> obj talk-message) (the-as uint 291)) (case (current-status (-> obj tasks)) - ((1 2 3) + (((task-status unknown) + (task-status need-hint) + (task-status need-introduction) + ) (if (not arg0) (set! (-> obj will-talk) #t) ) (case (current-task (-> obj tasks)) - ((105) + (((game-task village3-button)) (when arg0 (close-status! (-> obj tasks) (task-status need-introduction)) (let ((a1-5 (new 'stack-no-clear 'event-message-block))) @@ -342,7 +345,7 @@ ) ) ) - ((79) + (((game-task cave-dark-crystals)) (when arg0 (let* ((s5-3 (-> obj tasks)) (s4-0 (method-of-object s5-3 save-reminder)) @@ -410,7 +413,7 @@ ) ) ) - ((4 5) + (((task-status need-reminder-a) (task-status need-reminder)) (set! (-> obj skippable) #t) (let ((s4-1 (+ (get-reminder (-> obj tasks) 0) 1))) (if (< (the-as uint 1) (the-as uint s4-1)) @@ -471,9 +474,7 @@ 0 "ERROR: : ~S playing anim for task status ~S~%" (-> obj name) - (task-status->string - (the-as task-status (current-status (-> obj tasks))) - ) + (task-status->string (current-status (-> obj tasks))) ) ) (get-art-elem obj) @@ -516,7 +517,7 @@ ) (cond ((< 0.875 f0-2) - (dummy-11 (-> obj ambient) "SAGELP31" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "SAGELP31" #f (-> obj root-override trans)) ) ((< 0.75 f0-2) (if @@ -527,33 +528,48 @@ (task-status need-reminder) ) ) - (dummy-11 (-> obj ambient) "SAGELP32" #f (-> obj root-override trans)) + (play-ambient + (-> obj ambient) + "SAGELP32" + #f + (-> obj root-override trans) + ) ) ) ((< 0.625 f0-2) (if (nonzero? (get-task-status (game-task citadel-sage-green))) - (dummy-11 (-> obj ambient) "SAGELP33" #f (-> obj root-override trans)) + (play-ambient + (-> obj ambient) + "SAGELP33" + #f + (-> obj root-override trans) + ) ) ) ((< 0.5 f0-2) - (dummy-11 (-> obj ambient) "SAGELP34" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "SAGELP34" #f (-> obj root-override trans)) ) ((< 0.375 f0-2) - (dummy-11 (-> obj ambient) "SAGELP35" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "SAGELP35" #f (-> obj root-override trans)) ) ((< 0.25 f0-2) - (dummy-11 (-> obj ambient) "SAGELP36" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "SAGELP36" #f (-> obj root-override trans)) ) ((< 0.125 f0-2) (if (nonzero? (get-task-status (game-task citadel-sage-green))) - (dummy-11 (-> obj ambient) "SAGELP37" #f (-> obj root-override trans)) + (play-ambient + (-> obj ambient) + "SAGELP37" + #f + (-> obj root-override trans) + ) ) ) ((!= (get-task-status (game-task citadel-sage-green)) (task-status need-resolution) ) - (dummy-11 (-> obj ambient) "SAGELP38" #f (-> obj root-override trans)) + (play-ambient (-> obj ambient) "SAGELP38" #f (-> obj root-override trans)) ) ) ) diff --git a/test/decompiler/reference/levels/village3/village3-part_REF.gc b/test/decompiler/reference/levels/village3/village3-part_REF.gc index 373cf32a45..da063b2860 100644 --- a/test/decompiler/reference/levels/village3/village3-part_REF.gc +++ b/test/decompiler/reference/levels/village3/village3-part_REF.gc @@ -871,25 +871,8 @@ :mask #x1 :num 1.0 :group #x1 - :sound-name-char - (new 'static 'array uint8 16 - #x66 - #x69 - #x72 - #x65 - #x2d - #x70 - #x6f - #x70 - #x0 - #x0 - #x0 - #x0 - #x0 - #x0 - #x0 - #x0 - ) + :sound-name + (new 'static 'sound-name :lo #x706f702d65726966) :volume #x400 ) ) @@ -1824,25 +1807,8 @@ (new 'static 'sound-spec :num 0.02 :group #x1 - :sound-name-char - (new 'static 'array uint8 16 - #x73 - #x74 - #x65 - #x61 - #x6d - #x2d - #x73 - #x68 - #x6f - #x72 - #x74 - #x0 - #x0 - #x0 - #x0 - #x0 - ) + :sound-name + (new 'static 'sound-name :lo #x68732d6d61657473) :volume #x400 ) ) @@ -1885,25 +1851,8 @@ (new 'static 'sound-spec :num 0.02 :group #x1 - :sound-name-char - (new 'static 'array uint8 16 - #x73 - #x74 - #x65 - #x61 - #x6d - #x2d - #x73 - #x68 - #x6f - #x72 - #x74 - #x0 - #x0 - #x0 - #x0 - #x0 - ) + :sound-name + (new 'static 'sound-name :lo #x68732d6d61657473) :volume #x400 ) ) @@ -1946,25 +1895,8 @@ (new 'static 'sound-spec :num 0.02 :group #x1 - :sound-name-char - (new 'static 'array uint8 16 - #x73 - #x74 - #x65 - #x61 - #x6d - #x2d - #x73 - #x68 - #x6f - #x72 - #x74 - #x0 - #x0 - #x0 - #x0 - #x0 - ) + :sound-name + (new 'static 'sound-name :lo #x68732d6d61657473) :volume #x400 ) ) @@ -2007,25 +1939,8 @@ (new 'static 'sound-spec :num 0.02 :group #x1 - :sound-name-char - (new 'static 'array uint8 16 - #x73 - #x74 - #x65 - #x61 - #x6d - #x2d - #x73 - #x68 - #x6f - #x72 - #x74 - #x0 - #x0 - #x0 - #x0 - #x0 - ) + :sound-name + (new 'static 'sound-name :lo #x68732d6d61657473) :volume #x400 ) ) @@ -2068,25 +1983,8 @@ (new 'static 'sound-spec :num 0.02 :group #x1 - :sound-name-char - (new 'static 'array uint8 16 - #x73 - #x74 - #x65 - #x61 - #x6d - #x2d - #x73 - #x68 - #x6f - #x72 - #x74 - #x0 - #x0 - #x0 - #x0 - #x0 - ) + :sound-name + (new 'static 'sound-name :lo #x68732d6d61657473) :volume #x400 ) ) @@ -2229,25 +2127,8 @@ (new 'static 'sound-spec :num 0.02 :group #x1 - :sound-name-char - (new 'static 'array uint8 16 - #x73 - #x74 - #x65 - #x61 - #x6d - #x2d - #x73 - #x68 - #x6f - #x72 - #x74 - #x0 - #x0 - #x0 - #x0 - #x0 - ) + :sound-name + (new 'static 'sound-name :lo #x68732d6d61657473) :volume #x400 ) ) @@ -2969,25 +2850,8 @@ (new 'static 'sound-spec :num 0.02 :group #x1 - :sound-name-char - (new 'static 'array uint8 16 - #x73 - #x74 - #x65 - #x61 - #x6d - #x2d - #x73 - #x68 - #x6f - #x72 - #x74 - #x0 - #x0 - #x0 - #x0 - #x0 - ) + :sound-name + (new 'static 'sound-name :lo #x68732d6d61657473) :volume #x400 ) ) @@ -3051,25 +2915,8 @@ (new 'static 'sound-spec :num 0.02 :group #x1 - :sound-name-char - (new 'static 'array uint8 16 - #x73 - #x74 - #x65 - #x61 - #x6d - #x2d - #x73 - #x68 - #x6f - #x72 - #x74 - #x0 - #x0 - #x0 - #x0 - #x0 - ) + :sound-name + (new 'static 'sound-name :lo #x68732d6d61657473) :volume #x400 ) ) diff --git a/test/decompiler/reference/levels/village_common/oracle_REF.gc b/test/decompiler/reference/levels/village_common/oracle_REF.gc index ec9ac95e15..9fda81afe1 100644 --- a/test/decompiler/reference/levels/village_common/oracle_REF.gc +++ b/test/decompiler/reference/levels/village_common/oracle_REF.gc @@ -48,7 +48,7 @@ (with-pp (set! (-> obj talk-message) (the-as uint 260)) (case (current-status (-> obj tasks)) - ((2 3) + (((task-status need-hint) (task-status need-introduction)) (when arg0 (close-specific-task! (the-as game-task (-> obj first-task)) @@ -414,7 +414,7 @@ ) ) ) - ((5) + (((task-status need-reminder)) (set! (-> obj skippable) #t) (case (-> (level-get-target-inside *level*) name) (('village1) @@ -443,13 +443,10 @@ ) ) ) - ((6) + (((task-status need-reward-speech)) (cond (arg0 - (set! - (-> obj cell-for-task) - (the-as game-task (current-task (-> obj tasks))) - ) + (set! (-> obj cell-for-task) (current-task (-> obj tasks))) (close-current! (-> obj tasks)) (let ((a1-5 (new 'stack-no-clear 'event-message-block))) (set! (-> a1-5 from) pp) @@ -549,9 +546,7 @@ 0 "ERROR: : ~S playing anim for task status ~S~%" (-> obj name) - (task-status->string - (the-as task-status (current-status (-> obj tasks))) - ) + (task-status->string (current-status (-> obj tasks))) ) ) (-> obj draw art-group data 2) @@ -603,25 +598,8 @@ :mask #x80 :num 1.0 :group #x1 - :sound-name-char - (new 'static 'array uint8 16 - #x6f - #x72 - #x61 - #x63 - #x6c - #x65 - #x2d - #x73 - #x6c - #x65 - #x65 - #x70 - #x0 - #x0 - #x0 - #x0 - ) + :sound-name + (new 'static 'sound-name :lo #x732d656c6361726f) :volume #x400 :fo-max 50 ) diff --git a/test/offline/config.json b/test/offline/config.json index 097d914cde..3790fbd28a 100644 --- a/test/offline/config.json +++ b/test/offline/config.json @@ -106,7 +106,10 @@ // anim-tester "(method 3 anim-tester)", - "anim-tester-save-object-seqs" // anim-tester -- new basic on the stack + "anim-tester-save-object-seqs", // anim-tester -- new basic on the stack + + // sage-finalboss + "(method 7 sage-finalboss)" // inline-array stuff ], "skip_compile_states": {