From b7fe8447e259decdb39d6027411b9924b3018e55 Mon Sep 17 00:00:00 2001 From: water111 <48171810+water111@users.noreply.github.com> Date: Wed, 20 Oct 2021 20:55:25 -0400 Subject: [PATCH] [decomp] improve types around `enter-state` (#923) * clean up * restore hack --- common/type_system/state.cpp | 8 +- common/type_system/state.h | 2 +- decompiler/IR2/AtomicOpTypeAnalysis.cpp | 4 +- decompiler/IR2/FormExpressionAnalysis.cpp | 19 +- decompiler/config/all-types.gc | 123 +- .../stack_structures.jsonc | 4 + .../jak1_ntsc_black_label/type_casts.jsonc | 10 + game/graphics/texture/TextureConverter.cpp | 4 +- game/mips2c/functions/sky_tng.cpp | 2 - goal_src/engine/camera/cam-layout.gc | 196 +- goal_src/engine/camera/pov-camera.gc | 19 +- goal_src/engine/debug/anim-tester.gc | 82 +- goal_src/engine/game/projectiles.gc | 113 +- goal_src/engine/game/task/process-taskable.gc | 85 +- goal_src/engine/target/logic-target.gc | 13 +- goal_src/engine/target/target-h.gc | 1 + goal_src/engine/target/target-util.gc | 192 +- goal_src/engine/target/target.gc | 2 +- goal_src/levels/beach/beach-rocks.gc | 17 +- goal_src/levels/beach/lurkercrab.gc | 117 +- goal_src/levels/citadel/citb-drop-plat-CIT.gc | 56 +- goal_src/levels/common/basebutton.gc | 202 +- goal_src/levels/common/battlecontroller.gc | 63 +- goal_src/levels/common/blocking-plane.gc | 16 +- goal_src/levels/common/nav-enemy.gc | 23 +- goal_src/levels/common/plat-button.gc | 45 +- goal_src/levels/finalboss/final-door.gc | 11 +- goal_src/levels/finalboss/light-eco.gc | 102 +- goal_src/levels/finalboss/robotboss-misc.gc | 21 +- goal_src/levels/finalboss/robotboss-weapon.gc | 18 +- goal_src/levels/jungle/bouncer.gc | 107 +- goal_src/levels/jungle/fisher-JUN.gc | 3132 +++++++++++++++++ goal_src/levels/jungle/junglefish.gc | 26 +- goal_src/levels/jungleb/aphid.gc | 33 +- goal_src/levels/maincave/baby-spider.gc | 26 +- goal_src/levels/maincave/spiderwebs.gc | 119 +- goal_src/levels/misty/misty-conveyor.gc | 9 +- goal_src/levels/misty/misty-teetertotter.gc | 83 +- goal_src/levels/misty/misty-warehouse.gc | 15 +- goal_src/levels/misty/muse.gc | 4 +- goal_src/levels/ogre/flying-lurker.gc | 320 +- goal_src/levels/snow/target-snowball.gc | 34 +- goal_src/levels/snow/yeti.gc | 26 +- goal_src/levels/sunken/qbert-plat.gc | 108 +- goal_src/levels/sunken/square-platform.gc | 49 +- goal_src/levels/sunken/wall-plat.gc | 18 +- goal_src/levels/swamp/swamp-bat.gc | 47 +- goal_src/levels/swamp/swamp-rat-nest.gc | 104 +- goal_src/levels/swamp/swamp-rat.gc | 40 +- goal_src/levels/village1/yakow.gc | 1 + goalc/compiler/compilation/State.cpp | 2 +- goalc/compiler/compilation/Type.cpp | 2 +- .../reference/engine/camera/cam-layout_REF.gc | 1 + .../reference/engine/camera/pov-camera_REF.gc | 20 +- .../reference/engine/debug/anim-tester_REF.gc | 84 +- .../reference/engine/game/projectiles_REF.gc | 109 +- .../engine/game/task/process-taskable_REF.gc | 88 +- .../engine/target/logic-target_REF.gc | 1 + .../engine/target/target-util_REF.gc | 106 +- .../reference/levels/beach/beach-rocks_REF.gc | 18 +- .../reference/levels/beach/bird-lady_REF.gc | 1 + .../reference/levels/beach/lurkercrab_REF.gc | 119 +- .../levels/citadel/citb-drop-plat-CIT_REF.gc | 58 +- .../levels/common/babak-with-cannon_REF.gc | 1 + .../reference/levels/common/basebutton_REF.gc | 204 +- .../reference/levels/common/baseplat_REF.gc | 1 + .../levels/common/battlecontroller_REF.gc | 64 +- .../levels/common/blocking-plane_REF.gc | 5 +- .../reference/levels/common/nav-enemy_REF.gc | 26 +- .../levels/common/plat-button_REF.gc | 45 +- .../reference/levels/common/plat_REF.gc | 1 + .../reference/levels/common/sharkey_REF.gc | 1 + .../levels/finalboss/final-door_REF.gc | 13 +- .../levels/finalboss/green-eco-lurker_REF.gc | 2 + .../levels/finalboss/light-eco_REF.gc | 107 +- .../levels/finalboss/robotboss-misc_REF.gc | 24 +- .../levels/finalboss/robotboss-weapon_REF.gc | 25 +- .../levels/finalboss/robotboss_REF.gc | 1 + .../levels/flut_common/flutflut_REF.gc | 1 + .../reference/levels/jungle/bouncer_REF.gc | 108 +- .../reference/levels/jungle/fisher-JUN_REF.gc | 68 +- .../reference/levels/jungle/junglefish_REF.gc | 1 + .../reference/levels/jungleb/aphid_REF.gc | 31 +- .../reference/levels/jungleb/plat-flip_REF.gc | 1 + .../levels/maincave/baby-spider_REF.gc | 29 +- .../levels/maincave/spiderwebs_REF.gc | 121 +- .../levels/misty/misty-conveyor_REF.gc | 12 +- .../levels/misty/misty-teetertotter_REF.gc | 52 +- .../levels/misty/misty-warehouse_REF.gc | 16 +- .../reference/levels/misty/muse_REF.gc | 7 +- .../levels/ogre/flying-lurker_REF.gc | 323 +- .../levels/snow/target-snowball_REF.gc | 33 +- .../reference/levels/snow/yeti_REF.gc | 29 +- .../reference/levels/sunken/qbert-plat_REF.gc | 111 +- .../levels/sunken/square-platform_REF.gc | 51 +- .../levels/sunken/sunken-fish_REF.gc | 6 +- .../reference/levels/sunken/wall-plat_REF.gc | 19 +- .../levels/sunken/wedge-plats_REF.gc | 3 + .../reference/levels/swamp/swamp-bat_REF.gc | 50 +- .../levels/swamp/swamp-rat-nest_REF.gc | 108 +- .../reference/levels/swamp/swamp-rat_REF.gc | 42 +- .../levels/village1/fishermans-boat_REF.gc | 1 + .../reference/levels/village1/yakow_REF.gc | 2 + .../reference/levels/village3/miners_REF.gc | 1 + 104 files changed, 5493 insertions(+), 2733 deletions(-) diff --git a/common/type_system/state.cpp b/common/type_system/state.cpp index e96e43eb88..f8925dee37 100644 --- a/common/type_system/state.cpp +++ b/common/type_system/state.cpp @@ -4,14 +4,14 @@ /*! * Convert a (state ...) to the function required to go. Must be state. */ -TypeSpec state_to_go_function(const TypeSpec& state_type) { +TypeSpec state_to_go_function(const TypeSpec& state_type, const TypeSpec& return_type) { assert(state_type.base_type() == "state"); std::vector arg_types; for (int i = 0; i < (int)state_type.arg_count() - 1; i++) { arg_types.push_back(state_type.get_arg(i)); } - arg_types.push_back(TypeSpec("none")); // none for the return. + arg_types.push_back(return_type); // for the return. auto result = TypeSpec("function", arg_types); result.add_new_tag("behavior", state_type.last_arg().base_type()); return result; @@ -62,8 +62,10 @@ TypeSpec get_state_handler_type(StateHandler kind, const TypeSpec& state_type) { TypeSpec result; switch (kind) { case StateHandler::CODE: + result = state_to_go_function(state_type, TypeSpec("none")); + break; case StateHandler::ENTER: - result = state_to_go_function(state_type); + result = state_to_go_function(state_type, TypeSpec("none")); break; case StateHandler::TRANS: diff --git a/common/type_system/state.h b/common/type_system/state.h index 6803aa5f1d..0cd279c33d 100644 --- a/common/type_system/state.h +++ b/common/type_system/state.h @@ -11,7 +11,7 @@ enum class StateHandler { ENTER, EXIT, CODE, TRANS, POST, EVENT }; class TypeSystem; -TypeSpec state_to_go_function(const TypeSpec& state_type); +TypeSpec state_to_go_function(const TypeSpec& state_type, const TypeSpec& return_type); StateHandler handler_name_to_kind(const std::string& name); std::string handler_kind_to_name(StateHandler kind); TypeSpec get_state_handler_type(const std::string& handler_name, const TypeSpec& state_type); diff --git a/decompiler/IR2/AtomicOpTypeAnalysis.cpp b/decompiler/IR2/AtomicOpTypeAnalysis.cpp index 8257777fe2..233cc61a57 100644 --- a/decompiler/IR2/AtomicOpTypeAnalysis.cpp +++ b/decompiler/IR2/AtomicOpTypeAnalysis.cpp @@ -1051,7 +1051,7 @@ TP_Type LoadVarOp::get_src_type(const TypeState& input, rd.tokens.front().kind == FieldReverseLookupOutput::Token::Kind::FIELD && rd.tokens.front().name == "enter" && rd_in.base_type.arg_count() > 0) { // special case for accessing the enter field of state - return TP_Type::make_from_ts(state_to_go_function(rd_in.base_type)); + return TP_Type::make_from_ts(state_to_go_function(rd_in.base_type, TypeSpec("none"))); } else { return TP_Type::make_from_ts(coerce_to_reg_type(rd.result_type)); } @@ -1219,7 +1219,7 @@ TypeState CallOp::propagate_types_internal(const TypeState& input, "state. The decompiler must know the specific state type.", m_my_idx)); } - in_type = state_to_go_function(state_type); + in_type = state_to_go_function(state_type, TypeSpec("object")); } if (in_tp.kind == TP_Type::Kind::RUN_FUNCTION_IN_PROCESS_FUNCTION || diff --git a/decompiler/IR2/FormExpressionAnalysis.cpp b/decompiler/IR2/FormExpressionAnalysis.cpp index a730ca99bb..dd33c9bb3f 100644 --- a/decompiler/IR2/FormExpressionAnalysis.cpp +++ b/decompiler/IR2/FormExpressionAnalysis.cpp @@ -2665,7 +2665,7 @@ void FunctionCallElement::update_from_stack(const Env& env, } // modify our type for the go. - function_type = state_to_go_function(next_state_type.typespec()); + function_type = state_to_go_function(next_state_type.typespec(), TypeSpec("object")); // up next, we need to deal with the // (set! (-> pp next-state) process-drawable-art-error) @@ -3512,24 +3512,25 @@ void CondWithElseElement::push_to_stack(const Env& env, FormPool& pool, FormStac // (set! x (if y z (expr))) and z requires a cast, but the move from z to x is // eliminated by GOAL's register allocator. - // fmt::print("func: {}\n", env.func->name()); - - // fmt::print("checking:\n"); - // for (auto& t : source_types) { - // fmt::print(" {}\n", t.print()); - // } + // fmt::print("func: {}\n", env.func->name()); + // + // fmt::print("checking:\n"); + // for (auto& t : source_types) { + // fmt::print(" {}\n", t.print()); + // } auto expected_type = env.get_variable_type(*last_var, true); - // fmt::print("The expected type is {}\n", expected_type.print()); + // fmt::print("The expected type is {}\n", expected_type.print()); auto result_type = source_types.empty() ? expected_type : env.dts->ts.lowest_common_ancestor(source_types); - // fmt::print("but we actually got {}\n", result_type.print()); + // fmt::print("but we actually got {}\n", result_type.print()); Form* result_value = pool.alloc_single_form(nullptr, this); if (!env.dts->ts.tc(expected_type, result_type)) { result_value = pool.alloc_single_element_form(nullptr, expected_type, result_value); } + // fmt::print("{}\n", result_value->to_string(env)); stack.push_value_to_reg(*last_var, result_value, true, env.get_variable_type(*last_var, false)); diff --git a/decompiler/config/all-types.gc b/decompiler/config/all-types.gc index 107163da3a..f3782b7031 100644 --- a/decompiler/config/all-types.gc +++ b/decompiler/config/all-types.gc @@ -19636,7 +19636,7 @@ (define-extern target-bonk-event-handler function) (define-extern target-standard-event-handler function) (define-extern target-send-attack function) -(define-extern target-attacked (function symbol uint uint process (state target) none :behavior target)) ;; unconfirmed, target-tube::(event target-tube-start) +(define-extern target-attacked (function symbol uint uint process (state target) object :behavior target)) ;; unconfirmed, target-tube::(event target-tube-start) (define-extern target-apply-tongue function) (define-extern get-intersect-point function) (define-extern target-powerup-effect function) @@ -19649,26 +19649,26 @@ ;; - Unknowns -(define-extern target-jump (state target)) ;; unknown type -;;(define-extern target-hit object) ;; unknown type -;;(define-extern target-eco-powerup object) ;; unknown type -;;(define-extern target-load-wait object) ;; unknown type +(define-extern target-jump (state float float symbol target)) ;; unknown type +(define-extern target-hit (state target)) ;; unknown type +(define-extern target-eco-powerup (state target)) ;; unknown type +(define-extern target-load-wait (state target)) ;; unknown type (define-extern target-grab (state target)) ;; unknown type -;;(define-extern target-look-around object) ;; unknown type -;;(define-extern target-billy-game object) ;; unknown type -;;(define-extern target-racing-start object) ;; unknown type -;;(define-extern target-flut-start object) ;; unknown type +(define-extern target-look-around (state target)) ;; unknown type +(define-extern target-billy-game (state target)) ;; unknown type +(define-extern target-racing-start (state handle target)) ;; unknown type +(define-extern target-flut-start (state handle target)) ;; 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 (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 -;;(define-extern target-edge-grab object) ;; unknown type -;;(define-extern target-pole-cycle object) ;; unknown type -;;(define-extern target-swim-stance object) ;; unknown type -;;(define-extern target-wade-stance object) ;; unknown type +(define-extern target-play-anim (state target)) ;; unknown type +(define-extern target-clone-anim (state target)) ;; unknown type +(define-extern target-edge-grab (state target)) ;; unknown type +(define-extern target-pole-cycle (state target)) ;; unknown type +(define-extern target-swim-stance (state target)) ;; unknown type +(define-extern target-wade-stance (state target)) ;; unknown type ;; ---------------------- @@ -19680,46 +19680,45 @@ ;; - Functions (define-extern target-land-effect (function none :behavior target)) -(define-extern target-hit-ground-anim function) -(define-extern mod-var-jump function) -(define-extern init-var-jump function) -(define-extern target-falling-anim function) -(define-extern target-falling-trans function) +(define-extern target-hit-ground-anim (function symbol symbol :behavior target)) +(define-extern mod-var-jump (function symbol symbol symbol vector vector :behavior target)) +(define-extern init-var-jump (function float float vector vector vector vector :behavior target)) ;; 1st and 2nd vectors may be symbols instead? +(define-extern target-falling-anim (function int int symbol :behavior target)) +(define-extern target-falling-trans (function basic cpad-list none :behavior target)) ;; todo - power of 2 array access issue (fixed in another PR?) (define-extern target-falling-anim-trans function) ;; - Unknowns -;;(define-extern target-hit-ground object) ;; unknown type +(define-extern target-hit-ground (state symbol target)) ;; unknown type (define-extern target-stance (state target)) ;; unknown type -;;(define-extern target-high-jump object) ;; unknown type -;;(define-extern target-attack-air object) ;; unknown type -;;(define-extern target-wheel-flip object) ;; unknown type +(define-extern target-high-jump (state float float symbol target)) ;; unknown type +(define-extern target-attack-air (state symbol target)) ;; unknown type +(define-extern target-wheel-flip (state float float target)) ;; unknown type (define-extern target-duck-stance (state target)) ;; unknown type -;;(define-extern target-hit-ground-hard object) ;; unknown type -;;(define-extern target-flop-hit-ground object) ;; unknown type -;;(define-extern target-yellow-jump-blast object) ;; unknown type -;;(define-extern target-swim-down object) ;; unknown type -;;(define-extern target-flop object) ;; unknown type -;;(define-extern target-attack-uppercut-jump object) ;; unknown type +(define-extern target-hit-ground-hard (state target)) ;; unknown type +(define-extern target-flop-hit-ground (state symbol target)) ;; unknown type +(define-extern target-yellow-jump-blast (state target)) ;; unknown type +(define-extern target-swim-down (state target)) ;; unknown type +(define-extern target-flop (state float float float target)) ;; unknown type +(define-extern target-attack-uppercut-jump (state float float target)) ;; unknown type (define-extern target-attack (state target)) ;; unknown type -;;(define-extern target-attack-uppercut object) ;; unknown type -;;(define-extern target-yellow-blast object) ;; unknown type -;;(define-extern target-wade-walk object) ;; unknown type -;;(define-extern target-walk object) ;; unknown type +(define-extern target-attack-uppercut (state float float target)) ;; unknown type +(define-extern target-yellow-blast (state target)) ;; unknown type +(define-extern target-wade-walk (state target)) ;; unknown type +(define-extern target-walk (state target)) ;; unknown type (define-extern target-running-attack (state target)) ;; unknown type -;;(define-extern target-duck-high-jump-jump object) ;; unknown type -;;(define-extern target-launch object) ;; unknown type -;;(define-extern target-duck-high-jump object) ;; unknown type -;;(define-extern target-double-jump object) ;; unknown type -;;(define-extern target-duck-walk object) ;; unknown type +(define-extern target-duck-high-jump-jump (state float float symbol target)) ;; unknown type +(define-extern target-launch (state target)) ;; unknown type +(define-extern target-duck-high-jump (state float float symbol target)) ;; unknown type +(define-extern target-double-jump (state float float target)) ;; unknown type +(define-extern target-duck-walk (state target)) ;; unknown type (define-extern target-ice-walk (state target)) ;; unknown type -;;(define-extern target-wheel object) ;; unknown type -;;(define-extern target-turn-around object) ;; unknown type -;;(define-extern target-stance-ambient object) ;; unknown type +(define-extern target-wheel (state target)) ;; unknown type +(define-extern target-turn-around (state target)) ;; unknown type +(define-extern target-stance-ambient (state target)) ;; unknown type (define-extern target-ice-stance (state target)) ;; unknown type -;;(define-extern target-startup object) ;; unknown type -;;(define-extern target-jump-forward object) ;; unknown type - +(define-extern target-startup (state target)) ;; unknown type +(define-extern target-jump-forward (state float float target)) ;; unknown type ;; ---------------------- ;; File - target2 @@ -27024,7 +27023,7 @@ (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-default-event-handler (function process int symbol event-message-block int :behavior light-eco-mother)) (define-extern light-eco-mother-init-by-other (function entity vector none :behavior light-eco-mother)) ;; - Unknowns @@ -29658,9 +29657,9 @@ ;; - Unknowns -;;(define-extern target-racing-smack object) ;; unknown type -;;(define-extern *racer-mods* object) ;; unknown type -;;(define-extern *racer-air-mods* object) ;; unknown type +(define-extern target-racing-smack (state float symbol target)) ;; unknown type +(define-extern *racer-mods* surface) ;; unknown type +(define-extern *racer-air-mods* surface) ;; unknown type ;; ---------------------- @@ -29680,22 +29679,22 @@ ;; - Functions -(define-extern target-racing-smack-check function) +(define-extern target-racing-smack-check (function none :behavior target)) ;; - Unknowns -;;(define-extern target-racing object) ;; unknown type -;;(define-extern target-racing-grab object) ;; unknown type -;;(define-extern target-racing-clone-anim object) ;; unknown type -;;(define-extern target-racing-get-off-hit-ground object) ;; unknown type -;;(define-extern target-racing-get-off-jump object) ;; unknown type -;;(define-extern target-racing-death object) ;; unknown type -;;(define-extern target-racing-jump object) ;; unknown type -;;(define-extern target-racing-bounce object) ;; unknown type -;;(define-extern target-racing-falling object) ;; unknown type -;;(define-extern target-racing-get-on object) ;; unknown type -;;(define-extern target-racing-get-off object) ;; unknown type -;;(define-extern target-racing-hit object) ;; unknown type +(define-extern target-racing (state target)) ;; unknown type +(define-extern target-racing-grab (state target)) ;; unknown type +(define-extern target-racing-clone-anim (state handle target)) ;; unknown type +(define-extern target-racing-get-off-hit-ground (state target)) ;; unknown type +(define-extern target-racing-get-off-jump (state handle target)) ;; unknown type +(define-extern target-racing-death (state target)) ;; unknown type +(define-extern target-racing-jump (state float float symbol target)) ;; unknown type +(define-extern target-racing-bounce (state float float symbol target)) ;; unknown type +(define-extern target-racing-falling (state target)) ;; unknown type +(define-extern target-racing-get-on (state handle target)) ;; unknown type +(define-extern target-racing-get-off (state handle target)) ;; unknown type +(define-extern target-racing-hit (state handle attack-info target)) ;; unknown type ;; ---------------------- diff --git a/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc b/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc index 2382fae035..1fca2dff27 100644 --- a/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc @@ -2668,5 +2668,9 @@ [16, "vector"] ], + "(event target-racing-start)": [ + [16, "event-message-block"] + ], + "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 b47d95efd7..05f133b147 100644 --- a/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc @@ -4032,5 +4032,15 @@ [[270, 273], "v1", "dma-packet"] ], + "(event target-racing-start)": [ + [35, "v1", "float"], + [121, "v1", "attack-info"], + [125, "v1", "attack-info"], + [130, "v1", "attack-info"], + [148, "v1", "float"], + [206, "v1", "float"], + [251, "a0", "process-drawable"] + ], + "placeholder-do-not-add-below": [] } diff --git a/game/graphics/texture/TextureConverter.cpp b/game/graphics/texture/TextureConverter.cpp index 4e42f8f6af..4dd389e84a 100644 --- a/game/graphics/texture/TextureConverter.cpp +++ b/game/graphics/texture/TextureConverter.cpp @@ -179,8 +179,8 @@ void TextureConverter::download_rgba8888(u8* result, int read_width = 64 * goal_tex_width; // loop over pixels in output texture image - for (int y = 0; y < h; y++) { - for (int x = 0; x < w; x++) { + for (u32 y = 0; y < h; y++) { + for (u32 x = 0; x < w; x++) { // read as the PSMT8 type. The dest field tells us a block offset. auto addr8 = psmct16_addr(x, y, read_width) + vram_addr * 256; u16 value = *(u16*)(m_vram.data() + addr8); diff --git a/game/mips2c/functions/sky_tng.cpp b/game/mips2c/functions/sky_tng.cpp index e3174d89ba..51556660f7 100644 --- a/game/mips2c/functions/sky_tng.cpp +++ b/game/mips2c/functions/sky_tng.cpp @@ -1318,7 +1318,6 @@ u64 execute(void* ctxt) { auto* c = (ExecutionContext*)ctxt; bool bc = false; c->copy_vfs_from_other(&sky_regs_vfs); - u32 call_addr = 0; c->mov64(v1, a0); // or v1, a0, r0 c->load_symbol(v1, cache.math_camera); // lw v1, *math-camera*(s7) c->lqc2(vf14, 700, v1); // lqc2 vf14, 700(v1) @@ -1451,7 +1450,6 @@ struct Cache { u64 execute(void* ctxt) { auto* c = (ExecutionContext*)ctxt; bool bc = false; - u32 call_addr = 0; c->copy_vfs_from_other(&sky_regs_vfs); c->mov64(v1, a0); // or v1, a0, r0 // c->lui(t4, 28672); // lui t4, 28672 diff --git a/goal_src/engine/camera/cam-layout.gc b/goal_src/engine/camera/cam-layout.gc index 35664398de..7da856315c 100644 --- a/goal_src/engine/camera/cam-layout.gc +++ b/goal_src/engine/camera/cam-layout.gc @@ -1659,99 +1659,98 @@ ) ) -; TODO - fix me! -; (defun -; cam-layout-save-cam-trans -; ((arg0 symbol) (arg1 string) (arg2 entity-actor)) -; (let ((s1-0 (-> arg2 trans)) -; (s5-0 (method-of-type res-lump get-property-struct)) -; (s2-0 arg2) -; ) -; (format (clear *res-key-string*) "~S~S" 'trans '-offset) -; (let -; ((s5-1 -; (s5-0 -; s2-0 -; (string->symbol *res-key-string*) -; 'interp -; (-> (new 'static 'array float 1 -1000000000.0) 0) -; #f -; (the-as (pointer res-tag) #f) -; *res-static-buf* -; ) -; ) -; ) -; (let -; ((s2-1 -; (res-lump-struct -; arg2 -; 'translation_info -; structure -; :time -; (-> (new 'static 'array float 1 -1000000000.0) 0) -; ) -; ) -; (s3-1 (new-stack-vector0)) -; ) -; (if arg0 -; (format -; #t -; "setup trans ~M ~M ~M (maya)~%" -; (-> s1-0 x) -; (-> s1-0 y) -; (-> s1-0 z) -; ) -; ) -; (set! (-> s3-1 quad) (-> s1-0 quad)) -; (when s5-1 -; (if arg0 -; (format -; #t -; "offset ~M ~M ~M (added)~%" -; (-> (the-as vector s5-1) x) -; (-> (the-as vector s5-1) y) -; (-> (the-as vector s5-1) z) -; ) -; ) -; (vector+! s3-1 s3-1 (the-as vector s5-1)) -; ) -; (when (the-as vector s2-1) -; (if arg0 -; (format -; #t -; "level-trans ~M ~M ~M (subtracted)~%" -; (-> (the-as vector s2-1) x) -; (-> (the-as vector s2-1) y) -; (-> (the-as vector s2-1) z) -; ) -; ) -; (vector-! s3-1 s3-1 (the-as vector s2-1)) -; ) -; (set! s2-1 (or (the-as vector s5-1) s2-1)) -; (set! arg0 (and (the-as vector s2-1) arg0)) -; (if (the-as structure arg0) -; (format -; #t -; "final trans ~M ~M ~M (maya)~%" -; (-> s3-1 x) -; (-> s3-1 y) -; (-> s3-1 z) -; ) -; ) -; ) -; (the-as string (if (the-as vector s5-1) -; (format -; arg1 -; " tag trans-offset METERS(~M) METERS(~M) METERS(~M) 1.0 // vector~%" -; (-> (the-as vector s5-1) x) -; (-> (the-as vector s5-1) y) -; (-> (the-as vector s5-1) z) -; ) -; ) -; ) -; ) -; ) -; ) +(defun + cam-layout-save-cam-trans + ((arg0 symbol) (arg1 string) (arg2 entity-actor)) + (let ((s1-0 (-> arg2 trans)) + (s5-0 (method-of-type res-lump get-property-struct)) + (s2-0 arg2) + ) + (format (clear *res-key-string*) "~S~S" 'trans '-offset) + (let + ((s5-1 + (s5-0 + s2-0 + (string->symbol *res-key-string*) + 'interp + (-> (new 'static 'array float 1 -1000000000.0) 0) + #f + (the-as (pointer res-tag) #f) + *res-static-buf* + ) + ) + ) + (let + ((s2-1 + (res-lump-struct + arg2 + 'translation_info + structure + :time + (-> (new 'static 'array float 1 -1000000000.0) 0) + ) + ) + (s3-1 (new-stack-vector0)) + ) + (if arg0 + (format + #t + "setup trans ~M ~M ~M (maya)~%" + (-> s1-0 x) + (-> s1-0 y) + (-> s1-0 z) + ) + ) + (set! (-> s3-1 quad) (-> s1-0 quad)) + (when s5-1 + (if arg0 + (format + #t + "offset ~M ~M ~M (added)~%" + (-> (the-as vector s5-1) x) + (-> (the-as vector s5-1) y) + (-> (the-as vector s5-1) z) + ) + ) + (vector+! s3-1 s3-1 (the-as vector s5-1)) + ) + (when (the-as vector s2-1) + (if arg0 + (format + #t + "level-trans ~M ~M ~M (subtracted)~%" + (-> (the-as vector s2-1) x) + (-> (the-as vector s2-1) y) + (-> (the-as vector s2-1) z) + ) + ) + (vector-! s3-1 s3-1 (the-as vector s2-1)) + ) + (set! s2-1 (or (the-as vector s5-1) s2-1)) + (set! arg0 (and (the-as symbol s2-1) arg0)) + (if (the-as structure arg0) + (format + #t + "final trans ~M ~M ~M (maya)~%" + (-> s3-1 x) + (-> s3-1 y) + (-> s3-1 z) + ) + ) + ) + (the-as string (if (the-as vector s5-1) + (format + arg1 + " tag trans-offset METERS(~M) METERS(~M) METERS(~M) 1.0 // vector~%" + (-> (the-as vector s5-1) x) + (-> (the-as vector s5-1) y) + (-> (the-as vector s5-1) z) + ) + ) + ) + ) + ) + ) (defun cam-layout-save-pivot ((arg0 symbol) (arg1 string) (arg2 entity-actor)) (let @@ -3040,12 +3039,11 @@ (the-as string s4-2) (the-as entity-actor arg0) ) - ; TODO - fix me! - ; (cam-layout-save-cam-trans - ; arg1 - ; (the-as string s4-2) - ; (the-as entity-actor arg0) - ; ) + (cam-layout-save-cam-trans + arg1 + (the-as string s4-2) + (the-as entity-actor arg0) + ) (cam-layout-save-pivot arg1 (the-as string s4-2) (the-as entity-actor arg0)) (cam-layout-save-align arg1 (the-as string s4-2) (the-as entity-actor arg0)) (cam-layout-save-interesting diff --git a/goal_src/engine/camera/pov-camera.gc b/goal_src/engine/camera/pov-camera.gc index af0c13afc1..222e40d069 100644 --- a/goal_src/engine/camera/pov-camera.gc +++ b/goal_src/engine/camera/pov-camera.gc @@ -155,16 +155,15 @@ :virtual #t :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (when (= v1-0 'abort) - (when (logtest? (-> self flags) 1) - (logior! (-> self flags) 2) - (if (= (-> self anim-name type) string) - (go-virtual pov-camera-abort) - ) - ) - ) - ) + (case arg2 + (('abort) + (when (logtest? (-> self flags) 1) + (logior! (-> self flags) 2) + (if (= (-> self anim-name type) string) + (go-virtual pov-camera-abort) + ) + ) + ) ) ) :enter diff --git a/goal_src/engine/debug/anim-tester.gc b/goal_src/engine/debug/anim-tester.gc index 1dd33485a1..bd84e5f578 100644 --- a/goal_src/engine/debug/anim-tester.gc +++ b/goal_src/engine/debug/anim-tester.gc @@ -987,54 +987,46 @@ ) ) -;; 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? -;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? (defbehavior anim-tester-standard-event-handler anim-tester ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (cond - ((= v1-0 'reset) - (process-disconnect self) - (set! (-> self flags) (logand -2 (-> self flags))) - (when (!= (-> *anim-tester* 0 edit-mode) 1) - (set! (-> *debug-menu-context* is-hidden) #f) - (set! (-> *anim-tester* 0 edit-mode) 0) - (set! *camera-read-buttons* #t) - ) - (anim-tester-reset) - (go anim-tester-process) - ) - ((= v1-0 'change-anim) - (go anim-tester-process) - ) - ((= v1-0 'pick-object) - (set! (-> self edit-mode) 1) - (set! *camera-read-buttons* #f) - #f - ) - ((= v1-0 'pick-joint-anim) - (set! (-> self edit-mode) 2) - (set! *camera-read-buttons* #f) - #f - ) - ((= v1-0 'pick-sequence) - (set! (-> self edit-mode) 3) - (set! *camera-read-buttons* #f) - #f - ) - ((= v1-0 'edit-sequence) - (set! (-> self edit-mode) 4) - (set! *camera-read-buttons* #f) - #f - ) - ((= v1-0 'save-sequences) - (anim-tester-save-all-objects self) - ) - ) + (case arg2 + (('reset) + (process-disconnect self) + (set! (-> self flags) (logand -2 (-> self flags))) + (when (!= (-> *anim-tester* 0 edit-mode) 1) + (set! (-> *debug-menu-context* is-hidden) #f) + (set! (-> *anim-tester* 0 edit-mode) 0) + (set! *camera-read-buttons* #t) + ) + (anim-tester-reset) + (go anim-tester-process) + ) + (('change-anim) + (go anim-tester-process) + ) + (('pick-object) + (set! (-> self edit-mode) 1) + (set! *camera-read-buttons* #f) + #f + ) + (('pick-joint-anim) + (set! (-> self edit-mode) 2) + (set! *camera-read-buttons* #f) + #f + ) + (('pick-sequence) + (set! (-> self edit-mode) 3) + (set! *camera-read-buttons* #f) + #f + ) + (('edit-sequence) + (set! (-> self edit-mode) 4) + (set! *camera-read-buttons* #f) + #f + ) + (('save-sequences) + (anim-tester-save-all-objects self) ) ) ) diff --git a/goal_src/engine/game/projectiles.gc b/goal_src/engine/game/projectiles.gc index 0248026931..429f0caf66 100644 --- a/goal_src/engine/game/projectiles.gc +++ b/goal_src/engine/game/projectiles.gc @@ -883,68 +883,53 @@ :virtual #t :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (cond - ((= v1-0 'touched) - (when (-> self attack-mode) - (when (cond - ((= (-> arg0 type) target) - (let - ((a1-1 - (new 'stack-no-clear 'event-message-block) - ) - ) - (set! (-> a1-1 from) self) - (set! (-> a1-1 num-params) 2) - (set! (-> a1-1 message) 'attack) - (set! (-> a1-1 param 0) (-> arg3 param 0)) - (let - ((a0-4 (new 'static 'attack-info :mask #x20))) - (set! (-> a0-4 mode) (-> self attack-mode)) - (set! (-> a1-1 param 1) (the-as uint a0-4)) - ) - (send-event-function arg0 a1-1) - ) - ) - (else - (let - ((a1-2 - (new 'stack-no-clear 'event-message-block) - ) - ) - (set! (-> a1-2 from) self) - (set! (-> a1-2 num-params) 4) - (set! (-> a1-2 message) 'attack) - (set! (-> a1-2 param 0) (-> arg3 param 0)) - (set! - (-> a1-2 param 1) - (the-as uint (-> self attack-mode)) - ) - (let ((v1-13 (+ *global-attack-id* 1))) - (set! *global-attack-id* v1-13) - (set! (-> a1-2 param 2) (the-as uint v1-13)) - ) - (set! (-> a1-2 param 3) (the-as uint 0)) - (send-event-function arg0 a1-2) - ) - ) - ) - (let ((v1-14 (-> self notify-handle))) - (if (handle->process v1-14) - (send-event (-> v1-14 process 0) 'notify 'attack arg0) - ) - ) - (+! (-> self hits) 1) - (if (>= (-> self hits) (-> self max-hits)) - (go-virtual projectile-impact) - ) - ) - ) - ) - ((= v1-0 'die) - (go-virtual projectile-impact) - ) - ) + (case arg2 + (('touched) + (when (-> self attack-mode) + (when (cond + ((= (-> arg0 type) target) + (let ((a1-1 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-1 from) self) + (set! (-> a1-1 num-params) 2) + (set! (-> a1-1 message) 'attack) + (set! (-> a1-1 param 0) (-> arg3 param 0)) + (let ((a0-4 (new 'static 'attack-info :mask #x20))) + (set! (-> a0-4 mode) (-> self attack-mode)) + (set! (-> a1-1 param 1) (the-as uint a0-4)) + ) + (send-event-function arg0 a1-1) + ) + ) + (else + (let ((a1-2 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-2 from) self) + (set! (-> a1-2 num-params) 4) + (set! (-> a1-2 message) 'attack) + (set! (-> a1-2 param 0) (-> arg3 param 0)) + (set! (-> a1-2 param 1) (the-as uint (-> self attack-mode))) + (let ((v1-13 (+ *global-attack-id* 1))) + (set! *global-attack-id* v1-13) + (set! (-> a1-2 param 2) (the-as uint v1-13)) + ) + (set! (-> a1-2 param 3) (the-as uint 0)) + (send-event-function arg0 a1-2) + ) + ) + ) + (let ((v1-14 (-> self notify-handle))) + (if (handle->process v1-14) + (send-event (-> v1-14 process 0) 'notify 'attack arg0) + ) + ) + (+! (-> self hits) 1) + (if (>= (-> self hits) (-> self max-hits)) + (go-virtual projectile-impact) + ) + ) + ) + ) + (('die) + (go-virtual projectile-impact) ) ) ) @@ -1832,3 +1817,7 @@ (none) ) ) + + + + diff --git a/goal_src/engine/game/task/process-taskable.gc b/goal_src/engine/game/task/process-taskable.gc index cea1c46b35..cb63466365 100644 --- a/goal_src/engine/game/task/process-taskable.gc +++ b/goal_src/engine/game/task/process-taskable.gc @@ -1060,46 +1060,53 @@ :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) (let ((v1-0 arg2)) - (the-as object (cond - ((= v1-0 'shadow) - (the-as shadow-geo (cond - ((-> arg3 param 0) - (let ((v0-0 (-> self shadow-backup))) - (set! (-> self draw shadow) v0-0) - v0-0 - ) - ) - (else - (set! (-> self draw shadow) #f) - (the-as shadow-geo #f) - ) - ) - ) - ) - ((= v1-0 'shadow-min-max) - (let ((v1-5 (-> self draw shadow-ctrl))) - (let ((a0-5 v1-5)) - (set! - (-> a0-5 settings bot-plane w) - (- (the-as float (-> arg3 param 0))) + (the-as shadow-geo (cond + ((= v1-0 'shadow) + (the-as shadow-geo (cond + ((-> arg3 param 0) + (let + ((v0-0 (-> self shadow-backup))) + (set! (-> self draw shadow) v0-0) + v0-0 + ) + ) + (else + (set! (-> self draw shadow) #f) + (the-as shadow-geo #f) + ) + ) + ) + ) + ((= v1-0 'shadow-min-max) + (let ((v1-5 (-> self draw shadow-ctrl))) + (let ((a0-5 v1-5)) + (set! + (-> a0-5 settings bot-plane w) + (- (the-as float (-> arg3 param 0))) + ) + ) + 0 + (set! + (-> v1-5 settings top-plane w) + (- (the-as float (-> arg3 param 1))) + ) + ) + (the-as shadow-geo 0) + ) + ((= v1-0 'end-mode) + (the-as shadow-geo (if (should-display? self) + (the-as + shadow-geo + (go-virtual idle) + ) + (the-as + shadow-geo + (go-virtual hidden) + ) + ) + ) + ) ) - ) - 0 - (set! - (-> v1-5 settings top-plane w) - (- (the-as float (-> arg3 param 1))) - ) - ) - (the-as shadow-geo 0) - ) - ((= v1-0 'end-mode) - (the-as shadow-geo (if (should-display? self) - (the-as shadow-geo (go-virtual idle)) - (the-as shadow-geo (go-virtual hidden)) - ) - ) - ) - ) ) ) ) diff --git a/goal_src/engine/target/logic-target.gc b/goal_src/engine/target/logic-target.gc index bb27ff560c..67b428488a 100644 --- a/goal_src/engine/target/logic-target.gc +++ b/goal_src/engine/target/logic-target.gc @@ -326,10 +326,10 @@ (none) ) -;; 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 (defun-debug target-print-stats ((arg0 target) (arg1 symbol)) (local-vars (sv-64 string) @@ -1218,10 +1218,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/goal_src/engine/target/target-h.gc b/goal_src/engine/target/target-h.gc index 30825ebfef..e3fd23f21a 100644 --- a/goal_src/engine/target/target-h.gc +++ b/goal_src/engine/target/target-h.gc @@ -25,6 +25,7 @@ (define-extern init-sidekick (function none)) ;; TODO - not finished ;; TODO - for logic-target - defined in target-death (define-extern target-continue (state continue-point none)) +(define-extern target-periscope (state target)) (declare-type sidekick basic) (declare-type collide-cache basic) diff --git a/goal_src/engine/target/target-util.gc b/goal_src/engine/target/target-util.gc index d3a26a7686..4b3912f311 100644 --- a/goal_src/engine/target/target-util.gc +++ b/goal_src/engine/target/target-util.gc @@ -8,7 +8,9 @@ (define-extern *jchar-sg* skeleton-group) (define-extern target-collide-set! (function symbol float int :behavior target)) -;; failed to figure out what this is: +;; note: this file has a modification to let us run with an incompletely constructed target. +;; if you update the decompilation, you will need to restore this hack. + (let ((v1-0 (new 'static 'skeleton-group @@ -30,14 +32,13 @@ (set! *jchar-sg* v1-0) ) -;; definition for symbol *target-shadow-control*, type shadow-control (define *target-shadow-control* (new 'static 'shadow-control :settings (new 'static 'shadow-settings :center - (new 'static 'vector :w 0.000000000000000000000000000000000000000000003) + (new 'static 'vector :w (the-as float #x2)) :shadow-dir (new 'static 'vector :x -0.4226 :y -0.9063 :w 409600.0) :bot-plane (new 'static 'plane :y 1.0 :w 37683.2) @@ -46,7 +47,6 @@ ) ) -;; definition of type target-bank (deftype target-bank (basic) ((jump-collide-offset meters :offset-assert 4) (jump-height-min meters :offset-assert 8) @@ -136,7 +136,7 @@ :flag-assert #x900000258 ) -;; definition for symbol *TARGET-bank*, type target-bank + (define *TARGET-bank* (new 'static 'target-bank @@ -215,7 +215,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 @@ -224,8 +224,6 @@ ) ) -;; definition for function target-start-attack -;; INFO: Return type mismatch int vs none. (defbehavior target-start-attack target () (+! (-> self control unknown-dword50) 1) (set! (-> self control unknown-dword51) 0) @@ -233,7 +231,6 @@ (none) ) -;; definition for function target-danger-set! (defbehavior target-danger-set! target ((arg0 symbol) (arg1 symbol)) (let ((s4-0 (-> self control unknown-sphere00)) (s5-0 (-> self control unknown-sphere01)) @@ -514,7 +511,6 @@ ) ) -;; definition for function target-collide-set! (defbehavior target-collide-set! target ((arg0 symbol) (arg1 float)) (let ((gp-0 (-> self control))) (set! (-> self control unknown-symbol00) arg0) @@ -712,12 +708,10 @@ 0 ) -;; definition for method 27 of type control-info (defmethod get-quaternion control-info ((obj control-info)) (-> obj unknown-quaternion00) ) -;; definition for function target-align-vel-z-adjust (defbehavior target-align-vel-z-adjust target ((arg0 float)) (let ((f1-0 (-> self control unknown-float61))) (* arg0 (if (< 0.0 f1-0) @@ -728,9 +722,6 @@ ) ) -;; definition for method 16 of type target -;; INFO: Return type mismatch control-info vs collide-shape. -;; Used lq/sq (defmethod dummy-16 target @@ -812,7 +803,6 @@ (the-as collide-shape (-> obj control)) ) -;; definition for function average-turn-angle (defun average-turn-angle ((arg0 target)) (let ((f30-0 0.0)) (dotimes (s5-0 8) @@ -833,13 +823,9 @@ ) ) -;; 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)) @@ -849,7 +835,6 @@ ) ) -;; definition for function can-jump? (defbehavior can-jump? target ((arg0 symbol)) (and (or @@ -878,7 +863,6 @@ ) ) -;; definition for function move-legs? (defbehavior move-legs? target () (!= (-> @@ -891,87 +875,75 @@ ) ) -;; definition for function target-height-above-ground (defbehavior target-height-above-ground target () (- (-> self control trans y) (-> self control shadow-pos y)) ) -;; definition for function fall-test -;; INFO: Return type mismatch none vs object. (defbehavior fall-test target ((arg0 symbol) (arg1 symbol)) - (the-as - object + (when + (and + (zero? (logand (-> self control status) 1)) + (>= + (- (-> *display* base-frame-counter) (-> self control unknown-dword10)) + (the-as int (-> *TARGET-bank* ground-timeout)) + ) + (>= + 0.0 + (vector-dot + (-> self control dynam gravity-normal) + (-> self control transv) + ) + ) + (let ((v1-15 (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + ) + (or + (not + (or + (= v1-15 (-> self draw art-group data 59)) + (= v1-15 (-> self draw art-group data 60)) + (= v1-15 (-> self draw art-group data 61)) + ) + ) + (< 4096.0 (target-height-above-ground)) + ) + ) + ) (when (and - (zero? (logand (-> self control status) 1)) - (>= - (- (-> *display* base-frame-counter) (-> self control unknown-dword10)) + (< + (- + (-> *display* base-frame-counter) + (the-as int (-> self control rider-time)) + ) (the-as int (-> *TARGET-bank* ground-timeout)) ) - (>= - 0.0 - (vector-dot - (-> self control dynam gravity-normal) - (-> self control transv) - ) - ) - (let ((v1-15 (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - ) - ) - (or - (not - (or - (= v1-15 (-> self draw art-group data 59)) - (= v1-15 (-> self draw art-group data 60)) - (= v1-15 (-> self draw art-group data 61)) - ) - ) - (< 4096.0 (target-height-above-ground)) - ) - ) + (logtest? (-> self control unknown-surface01 flags) #x4000) ) - (when - (and - (< - (- - (-> *display* base-frame-counter) - (the-as int (-> self control rider-time)) - ) - (the-as int (-> *TARGET-bank* ground-timeout)) - ) - (logtest? (-> self control unknown-surface01 flags) #x4000) - ) - (+! (-> self control transv x) (-> self control rider-last-move x)) - (+! (-> self control transv z) (-> self control rider-last-move z)) - ) - (go target-falling #f) + (+! (-> self control transv x) (-> self control rider-last-move x)) + (+! (-> self control transv z) (-> self control rider-last-move z)) ) + (go target-falling #f) ) ) -;; definition for function slide-down-test -;; INFO: Return type mismatch none vs object. (defbehavior slide-down-test target ((arg0 symbol) (arg1 symbol)) - (the-as - object - (if - (and - (zero? (logand (-> self control status) 129)) - (>= - (- (-> *display* base-frame-counter) (-> self control unknown-dword10)) - (the-as int (-> *TARGET-bank* ground-timeout)) - ) - (logtest? (-> self control status) 4) - (< 0.5 (-> self control surface-angle)) + (if + (and + (zero? (logand (-> self control status) 129)) + (>= + (- (-> *display* base-frame-counter) (-> self control unknown-dword10)) + (the-as int (-> *TARGET-bank* ground-timeout)) ) - (go target-slide-down) + (logtest? (-> self control status) 4) + (< 0.5 (-> self control surface-angle)) ) + (go target-slide-down) ) ) -;; definition for function smack-surface? (defbehavior smack-surface? target ((arg0 symbol)) (and (< 0.7 (-> self control touch-angle)) @@ -983,7 +955,6 @@ ) ) -;; definition for function can-wheel? (defbehavior can-wheel? target () (and (logtest? (-> self control status) 1) @@ -998,7 +969,6 @@ ) ) -;; definition for function can-duck? (defbehavior can-duck? target () (and (logtest? (-> self control status) 1) @@ -1020,8 +990,6 @@ ) ) -;; definition for function can-exit-duck? -;; Used lq/sq (defbehavior can-exit-duck? target () (let ((gp-0 (new 'stack-no-clear 'collide-using-spheres-params))) (let ((s5-0 (new 'stack-no-clear 'inline-array 'sphere 2))) @@ -1048,7 +1016,6 @@ ) ) -;; definition for function can-hands? (defbehavior can-hands? target ((arg0 symbol)) (cond ((or @@ -1120,7 +1087,6 @@ ) ) -;; definition for function can-feet? (defbehavior can-feet? target () (cond ((or @@ -1145,8 +1111,6 @@ ) ) -;; definition for function vector-local+! -;; Used lq/sq (defbehavior vector-local+! target ((arg0 vector) (arg1 vector)) (let ((s5-0 (new-stack-vector0))) (vector-matrix*! s5-0 arg1 (-> self control unknown-matrix01)) @@ -1154,8 +1118,6 @@ ) ) -;; definition for function move-forward -;; Used lq/sq (defbehavior move-forward target ((arg0 float)) (let ((a1-0 (new-stack-vector0)) (gp-0 (new-stack-vector0)) @@ -1166,8 +1128,6 @@ ) ) -;; definition for function set-forward-vel -;; Used lq/sq (defbehavior set-forward-vel target ((arg0 float)) (let ((gp-0 (new-stack-vector0))) (vector-matrix*! @@ -1185,9 +1145,6 @@ ) ) -;; definition for function delete-back-vel -;; INFO: Return type mismatch int vs none. -;; Used lq/sq (defbehavior delete-back-vel target ((arg0 float)) (let ((s5-0 (new-stack-vector0))) (vector-z-quaternion! s5-0 (-> self control dir-targ)) @@ -1214,8 +1171,6 @@ (none) ) -;; definition for function set-side-vel -;; Used lq/sq (defbehavior set-side-vel target ((arg0 float)) (let ((gp-0 (new-stack-vector0))) (vector-matrix*! @@ -1233,8 +1188,6 @@ ) ) -;; definition for function target-timed-invulnerable -;; INFO: Return type mismatch int vs none. (defun target-timed-invulnerable ((arg0 uint64) (arg1 target)) (logior! (-> arg1 state-flags) 32) (set! (-> arg1 control unknown-dword70) (-> *display* base-frame-counter)) @@ -1244,8 +1197,6 @@ (none) ) -;; definition for function target-timed-invulnerable-off -;; INFO: Return type mismatch int vs none. (defun target-timed-invulnerable-off ((arg0 target)) (set! (-> arg0 draw status) (logand -3 (-> arg0 draw status))) (set! (-> arg0 state-flags) (logand -33 (-> arg0 state-flags))) @@ -1254,9 +1205,6 @@ (none) ) -;; definition for method 9 of type attack-info -;; INFO: Return type mismatch attack-info vs none. -;; Used lq/sq (defmethod dummy-9 attack-info ((obj attack-info) (arg0 attack-info)) (with-pp (let ((s4-0 (-> arg0 mask))) @@ -1361,7 +1309,6 @@ ) ) -;; definition for function ground-tween-initialize (defbehavior ground-tween-initialize target ((arg0 ground-tween-info) @@ -1392,8 +1339,6 @@ arg0 ) -;; definition for function ground-tween-update -;; INFO: Return type mismatch int vs none. (defbehavior ground-tween-update target ((arg0 ground-tween-info) (arg1 float) (arg2 float)) @@ -1453,7 +1398,6 @@ (none) ) -;; definition for function target-pos (defun target-pos ((arg0 int)) (let ((a1-0 *target*)) (cond @@ -1470,9 +1414,6 @@ ) ) -;; definition for function target-cam-pos -;; INFO: Return type mismatch object vs vector. -;; Used lq/sq (defun target-cam-pos () (let ((gp-0 *target*)) (the-as vector (cond @@ -1534,26 +1475,23 @@ ) ) -;; definition for function target-joint-pos (defun target-joint-pos () ;; added hack (when (and *target* (zero? (-> *target* draw))) ;; just return 0, we have the fake target (return (new 'static 'vector)) ) - (let ((v1-0 *target*)) - (if v1-0 - (vector<-cspace! - (new 'static 'vector) - (-> v1-0 node-list data (-> v1-0 draw origin-joint-index)) - ) - (camera-pos) + (if v1-0 + (vector<-cspace! + (new 'static 'vector) + (-> v1-0 node-list data (-> v1-0 draw origin-joint-index)) + ) + (camera-pos) + ) ) - ) ) -;; definition for function target-rot (defun target-rot () (let ((v1-0 *target*)) (if v1-0 @@ -1562,3 +1500,7 @@ ) ) ) + + + + diff --git a/goal_src/engine/target/target.gc b/goal_src/engine/target/target.gc index 4edc3a3df9..ffc28b8603 100644 --- a/goal_src/engine/target/target.gc +++ b/goal_src/engine/target/target.gc @@ -9,4 +9,4 @@ (define-extern target-stance (state target)) ;; TODO - for target-snowball -(define-extern target-jump (state target)) +(define-extern target-jump (state float float symbol target)) diff --git a/goal_src/levels/beach/beach-rocks.gc b/goal_src/levels/beach/beach-rocks.gc index 0d7f625182..cb1d85743c 100644 --- a/goal_src/levels/beach/beach-rocks.gc +++ b/goal_src/levels/beach/beach-rocks.gc @@ -374,16 +374,13 @@ :virtual #t :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (cond - ((= v1-0 'trigger) - (set! (-> self trigger) #t) - (go-virtual falling) - ) - ((= v1-0 'loading) - (go-virtual loading) - ) - ) + (case arg2 + (('trigger) + (set! (-> self trigger) #t) + (go-virtual falling) + ) + (('loading) + (go-virtual loading) ) ) ) diff --git a/goal_src/levels/beach/lurkercrab.gc b/goal_src/levels/beach/lurkercrab.gc index e55383bcf4..1930bbf82c 100644 --- a/goal_src/levels/beach/lurkercrab.gc +++ b/goal_src/levels/beach/lurkercrab.gc @@ -138,10 +138,6 @@ ) ) -;; 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? (defmethod dummy-43 lurkercrab @@ -149,65 +145,60 @@ (let ((s5-0 (-> obj incomming-attack-id))) (set! (-> obj incomming-attack-id) (the-as handle (-> arg1 param 2))) (let ((v1-1 (-> arg1 param 1))) - (the-as object (cond - ((or (= v1-1 'flop) (= v1-1 'explode) (= v1-1 'darkeco)) - (logclear! (-> obj mask) (process-mask actor-pause)) - (go (method-of-object obj nav-enemy-die)) - ) - ((= v1-1 'punch) - (cond - ((logtest? (-> obj nav-enemy-flags) 32) - (logclear! (-> obj mask) (process-mask actor-pause)) - (go (method-of-object obj nav-enemy-die)) - ) - ((begin - (let ((s4-0 (new 'stack-no-clear 'vector))) - (let ((f30-0 (quaternion-xz-angle (target-rot)))) - (set-vector! - s4-0 - (* 24576.0 (sin f30-0)) - 0.0 - (* 24576.0 (cos f30-0)) - 1.0 - ) - ) - (vector+! s4-0 (-> obj collide-info trans) s4-0) - (set! (-> obj nav target-pos quad) (-> s4-0 quad)) - ) - (go lurkercrab-pushed) - (= s5-0 (-> obj incomming-attack-id)) - ) - 'push - ) - (else - #t - ) - ) - ) - ((logtest? (-> obj nav-enemy-flags) 32) - (logclear! (-> obj mask) (process-mask actor-pause)) - (go (method-of-object obj nav-enemy-die)) - ) - ((begin - (let ((s4-1 (new 'stack-no-clear 'vector))) - (vector-! - s4-1 - (-> obj collide-info trans) - (target-pos 0) - ) - (vector-normalize! s4-1 24576.0) - (vector+! s4-1 (-> obj collide-info trans) s4-1) - (set! (-> obj nav target-pos quad) (-> s4-1 quad)) - ) - (go lurkercrab-pushed) - (= s5-0 (-> obj incomming-attack-id)) - ) - 'push - ) - (else - #t - ) - ) + (cond + ((or (= v1-1 'flop) (= v1-1 'explode) (= v1-1 'darkeco)) + (logclear! (-> obj mask) (process-mask actor-pause)) + (go (method-of-object obj nav-enemy-die)) + ) + ((= v1-1 'punch) + (cond + ((logtest? (-> obj nav-enemy-flags) 32) + (logclear! (-> obj mask) (process-mask actor-pause)) + (go (method-of-object obj nav-enemy-die)) + ) + ((begin + (let ((s4-0 (new 'stack-no-clear 'vector))) + (let ((f30-0 (quaternion-xz-angle (target-rot)))) + (set-vector! + s4-0 + (* 24576.0 (sin f30-0)) + 0.0 + (* 24576.0 (cos f30-0)) + 1.0 + ) + ) + (vector+! s4-0 (-> obj collide-info trans) s4-0) + (set! (-> obj nav target-pos quad) (-> s4-0 quad)) + ) + (go lurkercrab-pushed) + (= s5-0 (-> obj incomming-attack-id)) + ) + 'push + ) + (else + #t + ) + ) + ) + ((logtest? (-> obj nav-enemy-flags) 32) + (logclear! (-> obj mask) (process-mask actor-pause)) + (go (method-of-object obj nav-enemy-die)) + ) + ((begin + (let ((s4-1 (new 'stack-no-clear 'vector))) + (vector-! s4-1 (-> obj collide-info trans) (target-pos 0)) + (vector-normalize! s4-1 24576.0) + (vector+! s4-1 (-> obj collide-info trans) s4-1) + (set! (-> obj nav target-pos quad) (-> s4-1 quad)) + ) + (go lurkercrab-pushed) + (= s5-0 (-> obj incomming-attack-id)) + ) + 'push + ) + (else + #t + ) ) ) ) diff --git a/goal_src/levels/citadel/citb-drop-plat-CIT.gc b/goal_src/levels/citadel/citb-drop-plat-CIT.gc index 76d815c3f6..e41599fed1 100644 --- a/goal_src/levels/citadel/citb-drop-plat-CIT.gc +++ b/goal_src/levels/citadel/citb-drop-plat-CIT.gc @@ -142,22 +142,19 @@ (defstate drop-plat-idle (drop-plat) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (cond - ((= v1-0 'drop) - (logclear! (-> self mask) (process-mask actor-pause)) - (go drop-plat-drop) - ) - ((or (= v1-0 'touch) (= v1-0 'attack)) - (send-event *target* 'no-look-around 300) - (send-event - (ppointer->process (-> self parent)) - 'player-stepped - (-> self color) - ) - #f - ) - ) + (case arg2 + (('drop) + (logclear! (-> self mask) (process-mask actor-pause)) + (go drop-plat-drop) + ) + (('touch 'attack) + (send-event *target* 'no-look-around 300) + (send-event + (ppointer->process (-> self parent)) + 'player-stepped + (-> self color) + ) + #f ) ) ) @@ -210,11 +207,10 @@ (defstate drop-plat-spawn (drop-plat) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (if (= v1-0 'drop) - (go drop-plat-die) - ) - ) + (case arg2 + (('drop) + (go drop-plat-die) + ) ) ) :code @@ -248,11 +244,10 @@ (defstate drop-plat-rise (drop-plat) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (if (= v1-0 'drop) - (go drop-plat-drop) - ) - ) + (case arg2 + (('drop) + (go drop-plat-drop) + ) ) ) :code @@ -719,11 +714,10 @@ (defstate citb-drop-plat-idle (citb-drop-plat) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (if (= v1-0 'trigger) - (go citb-drop-plat-active) - ) - ) + (case arg2 + (('trigger) + (go citb-drop-plat-active) + ) ) ) :code diff --git a/goal_src/levels/common/basebutton.gc b/goal_src/levels/common/basebutton.gc index 6fca010f5a..ca525f6cbf 100644 --- a/goal_src/levels/common/basebutton.gc +++ b/goal_src/levels/common/basebutton.gc @@ -94,49 +94,42 @@ :virtual #t :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (cond - ((= v1-0 'attack) - (case (-> arg3 param 1) - (('flop) - (TODO-RENAME-29 - self - (-> self event-going-down) - (-> self notify-actor) - ) - (sound-play-by-name - (static-sound-name "silo-button") - (new-sound-id) - 1024 - 0 - 0 - (the-as uint 1) - (the-as vector #t) - ) - (go-virtual basebutton-going-down) - ) - ) - ) - ((= v1-0 'trigger) - (sound-play-by-name - (static-sound-name "silo-button") - (new-sound-id) - 1024 - 0 - 0 - (the-as uint 1) - (the-as vector #t) - ) - (go-virtual basebutton-going-down) - ) - ((= v1-0 'move-to) - (move-to-vec-or-quat! - self - (the-as vector (-> arg3 param 0)) - (the-as quaternion (-> arg3 param 1)) - ) - ) - ) + (case arg2 + (('attack) + (case (-> arg3 param 1) + (('flop) + (TODO-RENAME-29 self (-> self event-going-down) (-> self notify-actor)) + (sound-play-by-name + (static-sound-name "silo-button") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + (go-virtual basebutton-going-down) + ) + ) + ) + (('trigger) + (sound-play-by-name + (static-sound-name "silo-button") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + (go-virtual basebutton-going-down) + ) + (('move-to) + (move-to-vec-or-quat! + self + (the-as vector (-> arg3 param 0)) + (the-as quaternion (-> arg3 param 1)) + ) ) ) ) @@ -170,28 +163,25 @@ :virtual #t :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (cond - ((= v1-0 'untrigger) - (sound-play-by-name - (static-sound-name "silo-button") - (new-sound-id) - 1024 - 0 - 0 - (the-as uint 1) - (the-as vector #t) - ) - (go-virtual basebutton-going-up) - ) - ((= v1-0 'move-to) - (move-to-vec-or-quat! - self - (the-as vector (-> arg3 param 0)) - (the-as quaternion (-> arg3 param 1)) - ) - ) - ) + (case arg2 + (('untrigger) + (sound-play-by-name + (static-sound-name "silo-button") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + (go-virtual basebutton-going-up) + ) + (('move-to) + (move-to-vec-or-quat! + self + (the-as vector (-> arg3 param 0)) + (the-as quaternion (-> arg3 param 1)) + ) ) ) ) @@ -251,28 +241,25 @@ :virtual #t :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (cond - ((= v1-0 'untrigger) - (sound-play-by-name - (static-sound-name "silo-button") - (new-sound-id) - 1024 - 0 - 0 - (the-as uint 1) - (the-as vector #t) - ) - (go-virtual basebutton-going-up) - ) - ((= v1-0 'move-to) - (move-to-vec-or-quat! - self - (the-as vector (-> arg3 param 0)) - (the-as quaternion (-> arg3 param 1)) - ) - ) - ) + (case arg2 + (('untrigger) + (sound-play-by-name + (static-sound-name "silo-button") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + (go-virtual basebutton-going-up) + ) + (('move-to) + (move-to-vec-or-quat! + self + (the-as vector (-> arg3 param 0)) + (the-as quaternion (-> arg3 param 1)) + ) ) ) ) @@ -334,28 +321,25 @@ :virtual #t :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (cond - ((= v1-0 'move-to) - (move-to-vec-or-quat! - self - (the-as vector (-> arg3 param 0)) - (the-as quaternion (-> arg3 param 1)) - ) - ) - ((= v1-0 'trigger) - (sound-play-by-name - (static-sound-name "silo-button") - (new-sound-id) - 1024 - 0 - 0 - (the-as uint 1) - (the-as vector #t) - ) - (go-virtual basebutton-going-down) - ) - ) + (case arg2 + (('move-to) + (move-to-vec-or-quat! + self + (the-as vector (-> arg3 param 0)) + (the-as quaternion (-> arg3 param 1)) + ) + ) + (('trigger) + (sound-play-by-name + (static-sound-name "silo-button") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + (go-virtual basebutton-going-down) ) ) ) diff --git a/goal_src/levels/common/battlecontroller.gc b/goal_src/levels/common/battlecontroller.gc index a63d44d119..b60aacb0ae 100644 --- a/goal_src/levels/common/battlecontroller.gc +++ b/goal_src/levels/common/battlecontroller.gc @@ -84,46 +84,35 @@ #t ) -;; 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 battlecontroller-default-event-handler battlecontroller ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (cond - ((= v1-0 'child-die) - (+! (-> self die-count) 1) - (when (= (-> self die-count) (-> self max-spawn-count)) - (let ((v1-4 (the-as process-drawable arg0))) - (when v1-4 - (set! - (-> self final-pickup-spawn-point quad) - (-> v1-4 root trans quad) - ) - (case (-> self final-pickup-type) - (((pickup-type fuel-cell)) - #f - ) - (else - (set! - (-> v1-4 fact pickup-type) - (-> self final-pickup-type) - ) - (set! (-> v1-4 fact pickup-amount) 1.0) - (let ((f0-1 0.0)) - (set! (-> v1-4 fact pickup-spawn-amount) f0-1) - f0-1 - ) - ) - ) - ) - ) - ) - ) - ((= v1-0 'trigger) - (go-virtual battlecontroller-die) - ) - ) + (case arg2 + (('child-die) + (+! (-> self die-count) 1) + (when (= (-> self die-count) (-> self max-spawn-count)) + (let ((v1-4 (the-as process-drawable arg0))) + (when v1-4 + (set! (-> self final-pickup-spawn-point quad) (-> v1-4 root trans quad)) + (case (-> self final-pickup-type) + (((pickup-type fuel-cell)) + #f + ) + (else + (set! (-> v1-4 fact pickup-type) (-> self final-pickup-type)) + (set! (-> v1-4 fact pickup-amount) 1.0) + (let ((f0-1 0.0)) + (set! (-> v1-4 fact pickup-spawn-amount) f0-1) + f0-1 + ) + ) + ) + ) + ) + ) + ) + (('trigger) + (go-virtual battlecontroller-die) ) ) ) diff --git a/goal_src/levels/common/blocking-plane.gc b/goal_src/levels/common/blocking-plane.gc index fb45380e66..0b3069f500 100644 --- a/goal_src/levels/common/blocking-plane.gc +++ b/goal_src/levels/common/blocking-plane.gc @@ -7,7 +7,8 @@ (define-extern *ef-plane-sg* skeleton-group) -;; definition of type blocking-plane +;; DECOMP BEGINS + (deftype blocking-plane (process-drawable) () :heap-base #x40 @@ -16,7 +17,7 @@ :flag-assert #x14004000b0 ) -;; failed to figure out what this is: + (let ((v1-1 (new 'static 'skeleton-group @@ -33,7 +34,6 @@ (set! *ef-plane-sg* v1-1) ) -;; failed to figure out what this is: (defstate blocking-plane-idle (blocking-plane) :code (behavior () @@ -46,8 +46,6 @@ ) ) -;; definition for function blocking-plane-init-by-other -;; Used lq/sq (defbehavior blocking-plane-init-by-other blocking-plane ((arg0 curve-control) (arg1 int)) @@ -123,8 +121,6 @@ (none) ) -;; definition for function blocking-plane-spawn -;; INFO: Return type mismatch int vs none. (defun blocking-plane-spawn ((arg0 curve-control)) (with-pp (cond @@ -159,8 +155,6 @@ ) ) -;; definition for function blocking-plane-destroy -;; INFO: Return type mismatch int vs none. (defun blocking-plane-destroy () (with-pp (let ((gp-0 (-> pp child))) @@ -177,3 +171,7 @@ (none) ) ) + + + + diff --git a/goal_src/levels/common/nav-enemy.gc b/goal_src/levels/common/nav-enemy.gc index d8c9590c51..680e83bacf 100644 --- a/goal_src/levels/common/nav-enemy.gc +++ b/goal_src/levels/common/nav-enemy.gc @@ -192,24 +192,19 @@ (the-as object 'die) ) -;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? (defmethod dummy-43 nav-enemy ((obj nav-enemy) (arg0 process) (arg1 event-message-block)) - (the-as object (cond - ((logtest? (-> obj nav-enemy-flags) 32) - (send-event arg0 'get-attack-count 1) - (logclear! - (-> obj mask) - (process-mask actor-pause attackable) - ) - (go (method-of-object obj nav-enemy-die)) - ) - (else - (dummy-44 obj arg0 arg1) - ) - ) + (cond + ((logtest? (-> obj nav-enemy-flags) 32) + (send-event arg0 'get-attack-count 1) + (logclear! (-> obj mask) (process-mask actor-pause attackable)) + (go (method-of-object obj nav-enemy-die)) + ) + (else + (dummy-44 obj arg0 arg1) + ) ) ) diff --git a/goal_src/levels/common/plat-button.gc b/goal_src/levels/common/plat-button.gc index 56a0f7758c..a8b5f27d32 100644 --- a/goal_src/levels/common/plat-button.gc +++ b/goal_src/levels/common/plat-button.gc @@ -75,29 +75,28 @@ :virtual #t :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (when (= v1-0 'touch) - (when (can-activate? self) - (if - (and - ((method-of-type touching-shapes-entry prims-touching?) - (the-as touching-shapes-entry (-> arg3 param 0)) - (-> self root-override) - (the-as uint 1) - ) - (or - (not (-> self should-grab-player?)) - (let ((v0-3 (process-grab? *target*))) - (set! (-> self grab-player?) v0-3) - v0-3 - ) - ) - ) - (go-virtual plat-button-pressed) - ) - ) - ) - ) + (case arg2 + (('touch) + (when (can-activate? self) + (if + (and + ((method-of-type touching-shapes-entry prims-touching?) + (the-as touching-shapes-entry (-> arg3 param 0)) + (-> self root-override) + (the-as uint 1) + ) + (or + (not (-> self should-grab-player?)) + (let ((v0-3 (process-grab? *target*))) + (set! (-> self grab-player?) v0-3) + v0-3 + ) + ) + ) + (go-virtual plat-button-pressed) + ) + ) + ) ) ) :code diff --git a/goal_src/levels/finalboss/final-door.gc b/goal_src/levels/finalboss/final-door.gc index cc66a94b9b..923ff3efa5 100644 --- a/goal_src/levels/finalboss/final-door.gc +++ b/goal_src/levels/finalboss/final-door.gc @@ -90,12 +90,11 @@ :virtual #t :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (when (= v1-0 'open) - enter-state - (go-virtual open) - ) - ) + (case arg2 + (('open) + enter-state + (go-virtual open) + ) ) ) :code diff --git a/goal_src/levels/finalboss/light-eco.gc b/goal_src/levels/finalboss/light-eco.gc index 6ad887e620..e9031e95b4 100644 --- a/goal_src/levels/finalboss/light-eco.gc +++ b/goal_src/levels/finalboss/light-eco.gc @@ -534,18 +534,17 @@ (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) - (send-event - (ppointer->process (-> self parent)) - 'trigger - (-> self angle-bit) - ) - (go light-eco-child-grabbed) - ) - ) - ) + (case arg2 + (('touch 'attack) + (when (= (-> arg0 type) target) + (send-event + (ppointer->process (-> self parent)) + 'trigger + (-> self angle-bit) + ) + (go light-eco-child-grabbed) + ) + ) ) ) @@ -957,49 +956,46 @@ 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 - ) + (the-as int (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) ) - ) - ) - ((= 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 - ) - ) - ) + ) + (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)) - ) - ) + ) + ) + ) + ) + ) + ((= v1-0 'beam-off) + (the-as int (go light-eco-mother-discipate)) + ) + ) ) ) ) diff --git a/goal_src/levels/finalboss/robotboss-misc.gc b/goal_src/levels/finalboss/robotboss-misc.gc index ab864f3abf..728420749c 100644 --- a/goal_src/levels/finalboss/robotboss-misc.gc +++ b/goal_src/levels/finalboss/robotboss-misc.gc @@ -501,18 +501,15 @@ :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) - ) - ) + (case arg2 + (('open) + (let ((f0-0 (the-as float (-> arg3 param 0)))) + (set! (-> self part-opened) f0-0) + f0-0 + ) + ) + (('hide) + (go-virtual hidden) ) ) ) diff --git a/goal_src/levels/finalboss/robotboss-weapon.gc b/goal_src/levels/finalboss/robotboss-weapon.gc index 944b68bfc5..a8563f89c3 100644 --- a/goal_src/levels/finalboss/robotboss-weapon.gc +++ b/goal_src/levels/finalboss/robotboss-weapon.gc @@ -360,11 +360,10 @@ (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) - ) - ) + (case arg2 + (('touch 'attack) + (go darkecobomb-explode #t) + ) ) ) @@ -1202,11 +1201,10 @@ (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) - ) - ) + (case arg2 + (('attack 'touch) + (go redshot-explode) + ) ) ) diff --git a/goal_src/levels/jungle/bouncer.gc b/goal_src/levels/jungle/bouncer.gc index 25dde471cd..3c138e242c 100644 --- a/goal_src/levels/jungle/bouncer.gc +++ b/goal_src/levels/jungle/bouncer.gc @@ -45,64 +45,55 @@ (defstate bouncer-wait (springbox) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (cond - ((= v1-0 'bonk) - (let ((a1-3 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-3 from) self) - (set! (-> a1-3 num-params) 3) - (set! (-> a1-3 message) 'jump) - (set! - (-> a1-3 param 0) - (the-as uint (-> self spring-height)) - ) - (set! - (-> a1-3 param 1) - (the-as uint (-> self spring-height)) - ) - (set! (-> a1-3 param 2) (the-as uint #f)) - (when (send-event-function arg0 a1-3) - (sound-play-by-name - (static-sound-name "trampoline") - (new-sound-id) - 1024 - 0 - 0 - (the-as uint 1) - (the-as vector #t) - ) - (go bouncer-fire) - ) - ) - ) - ((= v1-0 'touch) - (if - (not - (or - (= (-> self next-state name) 'bouncer-smush) - (= (-> self next-state name) 'bouncer-fire) - ) - ) - (go bouncer-smush) - ) - ) - ((= v1-0 'attack) - (when - (and - (= (-> arg3 param 1) 'flop) - (send-event - arg0 - 'jump - (-> self spring-height) - (-> self spring-height) - #f - ) - ) - (go bouncer-fire) - #f - ) - ) - ) + (case arg2 + (('bonk) + (let ((a1-3 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-3 from) self) + (set! (-> a1-3 num-params) 3) + (set! (-> a1-3 message) 'jump) + (set! (-> a1-3 param 0) (the-as uint (-> self spring-height))) + (set! (-> a1-3 param 1) (the-as uint (-> self spring-height))) + (set! (-> a1-3 param 2) (the-as uint #f)) + (when (send-event-function arg0 a1-3) + (sound-play-by-name + (static-sound-name "trampoline") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + (go bouncer-fire) + ) + ) + ) + (('touch) + (if + (not + (or + (= (-> self next-state name) 'bouncer-smush) + (= (-> self next-state name) 'bouncer-fire) + ) + ) + (go bouncer-smush) + ) + ) + (('attack) + (when + (and + (= (-> arg3 param 1) 'flop) + (send-event + arg0 + 'jump + (-> self spring-height) + (-> self spring-height) + #f + ) + ) + (go bouncer-fire) + #f + ) ) ) ) diff --git a/goal_src/levels/jungle/fisher-JUN.gc b/goal_src/levels/jungle/fisher-JUN.gc index 03e12c7b68..90cff540a6 100644 --- a/goal_src/levels/jungle/fisher-JUN.gc +++ b/goal_src/levels/jungle/fisher-JUN.gc @@ -5,3 +5,3135 @@ ;; name in dgo: fisher ;; dgos: JUN +(define-extern *catch-fisha-sg* skeleton-group) +(define-extern *catch-fishb-sg* skeleton-group) +(define-extern *catch-fishc-sg* skeleton-group) +(define-extern *fish-net-sg* skeleton-group) +(define-extern *fisher-sg* skeleton-group) + +(declare-type fisher-fish process-drawable) +(define-extern fisher-fish-caught (state fisher-fish)) +(define-extern fisher-fish-die (state fisher-fish)) +(define-extern cspace<-cspace+quaternion! (function cspace quaternion cspace)) + +;; DECOMP BEGINS + +(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 + ) + + +(define + *FISHER-bank* + (new 'static 'fisher-bank + :width (meters 3.3) + :net-radius (meters 0.7) + :max-caught #xc8 + :max-missed 20 + ) + ) + +(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) + ) + ) + +(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) + ) + ) + ) + +(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) + ) + ) + ) + +(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) + ) + ) + ) + +(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) + ) + ) + +(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) + ) + ) + ) + +(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) + ) + ) + +(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) + ) + ) + ) + +(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) + ) + ) + ) + +(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) + ) + ) + ) + +(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 + ) + + +(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) + ) + ) + ) + +(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 + ) + + +(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 + ) + + +(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) + ) + +(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) + ) + +(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) + ) + +(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) + ) + +(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) + ) + +(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) + ) + +(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) + ) + +(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) + ) + +(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) + ) + +(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) + ) + +(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 + ) + (send-event (ppointer->process (-> self parent)) 'deadly) + ) + (('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) + ) + (send-event (ppointer->process (-> self parent)) 'fisher-fish-caught 5) + ) + (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) + ) + (send-event (ppointer->process (-> self parent)) 'fisher-fish-caught 1) + ) + ) + (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) + ) + ) + +(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) + ) + ) + ) + (send-event (ppointer->process (-> self parent)) 'fisher-fish-die 5) + ) + (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) + ) + ) + ) + ) + (send-event (ppointer->process (-> self parent)) 'fisher-fish-die 1) + ) + ) + (none) + ) + ) + +(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) + ) + +(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) + ) + +(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) + ) + ) + ) + +(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) + ) + ) + +(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) + ) + +(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) + ) + ) + ) + +(defmethod get-reject-anim fisher ((obj fisher) (arg0 symbol)) + (new 'static 'spool-anim + :name "fisher-reject" + :index 11 + :parts 2 + :command-list '() + ) + ) + +(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)) + (send-event *target* 'end-mode) + (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) + (send-event *target* 'end-mode) + (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) + ) + ) + (send-event *target* 'lose) + ) + ) + (none) + ) + :exit + (behavior () + (when (and *target* (the-as target #f)) + (send-event *target* 'end-mode) + (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) + ) + +(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) + ) + +(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) + ) + +(defstate fisher-playing (fisher) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (local-vars (v0-2 object)) + (case arg2 + (('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 (+ (-> self missed) (-> arg3 param 0))) + (set! (-> self missed) (the-as int v0-2)) + v0-2 + ) + (('fisher-fish-caught) + (send-event *target* 'bounce) + (set! v0-2 (+ (-> self caught) (-> arg3 param 0))) + (set! (-> self caught) (the-as int v0-2)) + v0-2 + ) + (('deadly) + (go fisher-done) + ) + (('bad) + (set! v0-2 (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) + (send-event *target* 'reset-pickup 'eco) + (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) + ) + ) + (send-event *camera* 'change-to-entity-by-name "camera-152") + (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)) + (send-event *camera* 'blend-from-as-fixed) + (send-event *camera* 'change-state *camera-base-mode* 0) + (send-event *camera* 'clear-entity) + 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) + ) + ) + +(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) + ) + ) + +(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) + ) + ) + +(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) + ) + ) + ) + ) + ) + ) + ) + ) + +(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) + ) + ) + +(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) + ) + ) + +(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) + ) + +(defmethod target-above-threshold? fisher ((obj fisher)) + (or + (= (current-task (-> obj tasks)) (game-task jungle-fishgame)) + (-> obj hard) + ) + ) + +(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) + ) + +(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) + (send-event (ppointer->process (-> self manipy)) 'anim-mode 'copy-parent) + (send-event + (ppointer->process (-> self manipy)) + 'eval + (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) + ) + ) + (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/goal_src/levels/jungle/junglefish.gc b/goal_src/levels/jungle/junglefish.gc index 978e2ff2ba..a7a49d9d87 100644 --- a/goal_src/levels/jungle/junglefish.gc +++ b/goal_src/levels/jungle/junglefish.gc @@ -7,7 +7,8 @@ (define-extern *junglefish-sg* skeleton-group) -;; definition of type junglefish +;; DECOMP BEGINS + (deftype junglefish (nav-enemy) () :heap-base #x120 @@ -16,7 +17,7 @@ :flag-assert #x4c01200190 ) -;; failed to figure out what this is: + (let ((v1-1 (new 'static 'skeleton-group @@ -39,11 +40,8 @@ (set! *junglefish-sg* v1-1) ) -;; failed to figure out what this is: nav-enemy-default-event-handler -;; definition for method 39 of type junglefish -;; INFO: Return type mismatch int vs none. (defmethod common-post junglefish ((obj junglefish)) (dummy-10 (-> obj water)) ((the-as (function nav-enemy none) (find-parent-method junglefish 39)) obj) @@ -51,7 +49,6 @@ nav-enemy-default-event-handler (none) ) -;; failed to figure out what this is: (defstate nav-enemy-patrol (junglefish) :virtual #t :event @@ -309,7 +306,6 @@ nav-enemy-default-event-handler ) ) -;; failed to figure out what this is: (defstate nav-enemy-notice (junglefish) :virtual #t :event @@ -324,7 +320,6 @@ nav-enemy-default-event-handler ) ) -;; failed to figure out what this is: (defstate nav-enemy-chase (junglefish) :virtual #t :event @@ -352,7 +347,6 @@ nav-enemy-default-event-handler ) ) -;; failed to figure out what this is: (defstate nav-enemy-stop-chase (junglefish) :virtual #t :event @@ -367,7 +361,6 @@ nav-enemy-default-event-handler ) ) -;; failed to figure out what this is: (defstate nav-enemy-stare (junglefish) :virtual #t :event @@ -382,7 +375,6 @@ nav-enemy-default-event-handler ) ) -;; failed to figure out what this is: (defstate nav-enemy-give-up (junglefish) :virtual #t :event @@ -397,7 +389,6 @@ nav-enemy-default-event-handler ) ) -;; failed to figure out what this is: (defstate nav-enemy-attack (junglefish) :virtual #t :event @@ -458,7 +449,6 @@ nav-enemy-default-event-handler (the-as (function none :behavior junglefish) nav-enemy-chase-post) ) -;; failed to figure out what this is: (defstate nav-enemy-victory (junglefish) :virtual #t :event @@ -560,7 +550,6 @@ nav-enemy-default-event-handler ) ) -;; definition for symbol *junglefish-nav-enemy-info*, type nav-enemy-info (define *junglefish-nav-enemy-info* (new 'static 'nav-enemy-info @@ -579,11 +568,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) @@ -616,7 +605,6 @@ nav-enemy-default-event-handler ) ) -;; definition for method 11 of type junglefish (defmethod copy-defaults! junglefish ((obj junglefish) (arg0 res-lump)) (let ((s4-0 @@ -649,3 +637,7 @@ nav-enemy-default-event-handler (go (method-of-object obj nav-enemy-idle)) (none) ) + + + + diff --git a/goal_src/levels/jungleb/aphid.gc b/goal_src/levels/jungleb/aphid.gc index 899840aecd..370ea2a857 100644 --- a/goal_src/levels/jungleb/aphid.gc +++ b/goal_src/levels/jungleb/aphid.gc @@ -49,24 +49,19 @@ (none) ) -;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? (defmethod dummy-43 aphid ((obj aphid) (arg0 process) (arg1 event-message-block)) - (the-as object (cond - ((or - (logtest? (-> obj nav-enemy-flags) 32) - (= arg0 (ppointer->process (-> obj parent))) - ) - (send-event arg0 'get-attack-count 1) - (logclear! - (-> obj mask) - (process-mask actor-pause attackable) - ) - (go (method-of-object obj nav-enemy-die)) - ) - (else - (dummy-44 obj arg0 arg1) - ) - ) + (cond + ((or + (logtest? (-> obj nav-enemy-flags) 32) + (= arg0 (ppointer->process (-> obj parent))) + ) + (send-event arg0 'get-attack-count 1) + (logclear! (-> obj mask) (process-mask actor-pause attackable)) + (go (method-of-object obj nav-enemy-die)) + ) + (else + (dummy-44 obj arg0 arg1) + ) ) ) @@ -553,11 +548,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/goal_src/levels/maincave/baby-spider.gc b/goal_src/levels/maincave/baby-spider.gc index 2f23434489..0a1bf19676 100644 --- a/goal_src/levels/maincave/baby-spider.gc +++ b/goal_src/levels/maincave/baby-spider.gc @@ -231,26 +231,24 @@ dummy-44 baby-spider ((obj baby-spider) (arg0 process) (arg1 event-message-block)) - (the-as - object - (when - ((method-of-type touching-shapes-entry prims-touching?) + (when + ((method-of-type touching-shapes-entry prims-touching?) + (the-as touching-shapes-entry (-> arg1 param 0)) + (-> obj collide-info) + (the-as uint 1) + ) + (if + (nav-enemy-send-attack + arg0 (the-as touching-shapes-entry (-> arg1 param 0)) - (-> obj collide-info) - (the-as uint 1) - ) - (if - (nav-enemy-send-attack - arg0 - (the-as touching-shapes-entry (-> arg1 param 0)) - 'generic - ) - (go (method-of-object obj nav-enemy-victory)) + 'generic ) + (go (method-of-object obj nav-enemy-victory)) ) ) ) +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? (defbehavior baby-spider-default-event-handler baby-spider ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) diff --git a/goal_src/levels/maincave/spiderwebs.gc b/goal_src/levels/maincave/spiderwebs.gc index 767d61f94f..fea33d5d34 100644 --- a/goal_src/levels/maincave/spiderwebs.gc +++ b/goal_src/levels/maincave/spiderwebs.gc @@ -70,75 +70,62 @@ (set! *spiderwebs-sg* v1-2) ) -;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? (defbehavior spiderwebs-default-event-handler spiderwebs ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (cond - ((= v1-0 'bonk) - (let ((a1-1 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-1 from) self) - (set! (-> a1-1 num-params) 3) - (set! (-> a1-1 message) 'jump) - (set! - (-> a1-1 param 0) - (the-as uint (-> self spring-height)) - ) - (set! - (-> a1-1 param 1) - (the-as uint (-> self spring-height)) - ) - (set! (-> a1-1 param 2) (the-as uint *spider-jump-mods*)) - (if (send-event-function arg0 a1-1) - (go spiderwebs-bounce) - ) - ) - ) - ((= v1-0 'touch) - (when (= (-> arg0 type) target) - (let* ((a0-8 (target-pos 0)) - (f1-1 (- (-> a0-8 y) (-> self root trans y))) - ) - (if - (and - (>= 2048.0 (fabs f1-1)) - (and - (>= - 13516.8 - (vector-vector-distance a0-8 (-> self root trans)) - ) - (send-event - arg0 - 'jump - (-> self spring-height) - (-> self spring-height) - *spider-jump-mods* - ) - ) - ) - (go spiderwebs-bounce) - ) - ) - ) - ) - ((= v1-0 'attack) - (if - (and - (= (-> arg3 param 1) 'flop) - (send-event - arg0 - 'jump - (-> self spring-height) - (-> self spring-height) - *spider-jump-mods* - ) - ) - (go spiderwebs-bounce) - ) - #f - ) - ) + (case arg2 + (('bonk) + (let ((a1-1 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-1 from) self) + (set! (-> a1-1 num-params) 3) + (set! (-> a1-1 message) 'jump) + (set! (-> a1-1 param 0) (the-as uint (-> self spring-height))) + (set! (-> a1-1 param 1) (the-as uint (-> self spring-height))) + (set! (-> a1-1 param 2) (the-as uint *spider-jump-mods*)) + (if (send-event-function arg0 a1-1) + (go spiderwebs-bounce) + ) + ) + ) + (('touch) + (when (= (-> arg0 type) target) + (let* ((a0-8 (target-pos 0)) + (f1-1 (- (-> a0-8 y) (-> self root trans y))) + ) + (if + (and + (>= 2048.0 (fabs f1-1)) + (and + (>= 13516.8 (vector-vector-distance a0-8 (-> self root trans))) + (send-event + arg0 + 'jump + (-> self spring-height) + (-> self spring-height) + *spider-jump-mods* + ) + ) + ) + (go spiderwebs-bounce) + ) + ) + ) + ) + (('attack) + (if + (and + (= (-> arg3 param 1) 'flop) + (send-event + arg0 + 'jump + (-> self spring-height) + (-> self spring-height) + *spider-jump-mods* + ) + ) + (go spiderwebs-bounce) + ) + #f ) ) ) diff --git a/goal_src/levels/misty/misty-conveyor.gc b/goal_src/levels/misty/misty-conveyor.gc index 9aff8769ea..c5ebda0dcf 100644 --- a/goal_src/levels/misty/misty-conveyor.gc +++ b/goal_src/levels/misty/misty-conveyor.gc @@ -272,11 +272,10 @@ (defstate keg-on-paddle (keg) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (if (= v1-0 'detach) - (go keg-paddle-to-path) - ) - ) + (case arg2 + (('detach) + (go keg-paddle-to-path) + ) ) ) :code diff --git a/goal_src/levels/misty/misty-teetertotter.gc b/goal_src/levels/misty/misty-teetertotter.gc index 7b436613e9..0ff384e77e 100644 --- a/goal_src/levels/misty/misty-teetertotter.gc +++ b/goal_src/levels/misty/misty-teetertotter.gc @@ -5,7 +5,14 @@ ;; name in dgo: misty-teetertotter ;; dgos: L1, MIS -;; definition of type teetertotter +(declare-type teetertotter process-drawable) +(define-extern teetertotter-idle (state teetertotter)) +(define-extern teetertotter-launch (state teetertotter)) +(define-extern teetertotter-bend (state teetertotter)) +(define-extern *teetertotter-sg* skeleton-group) + +;; DECOMP BEGINS + (deftype teetertotter (process-drawable) ((launched-player basic :offset-assert 176) (in-launch-window basic :offset-assert 180) @@ -17,22 +24,7 @@ :flag-assert #x14005000bc ) -(define-extern teetertotter-idle (state teetertotter)) -(define-extern teetertotter-launch (state teetertotter)) -(define-extern teetertotter-bend (state teetertotter)) -;; definition for method 3 of type teetertotter -(defmethod inspect teetertotter ((obj teetertotter)) - (let ((t9-0 (method-of-type process-drawable inspect))) - (t9-0 obj) - ) - (format #t "~T~Tlaunched-player: ~A~%" (-> obj launched-player)) - (format #t "~T~Tin-launch-window: ~A~%" (-> obj in-launch-window)) - (format #t "~T~Trock-is-dangerous: ~A~%" (-> obj rock-is-dangerous)) - obj - ) - -;; failed to figure out what this is: (let ((v1-1 (new 'static 'skeleton-group @@ -51,11 +43,9 @@ (set! (-> v1-1 lod-dist 1) 163840.0) (set! (-> v1-1 mgeo 2) (the-as uint 3)) (set! (-> v1-1 lod-dist 2) 4095996000.0) - (define *teetertotter-sg* v1-1) + (set! *teetertotter-sg* v1-1) ) -;; definition for function target-on-end-of-teetertotter? -;; Used lq/sq (defun target-on-end-of-teetertotter? ((arg0 teetertotter)) (let ((gp-1 @@ -79,38 +69,32 @@ ) ) -;; failed to figure out what this is: (defstate teetertotter-idle (teetertotter) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (cond - ((= v1-0 'attack) - (case (-> arg3 param 1) - (('flop) - (when (target-on-end-of-teetertotter? self) - (set! (-> self in-launch-window) #f) - (increment-success-for-hint - (the-as level-hint-control 676) - ) - (go teetertotter-launch) - ) - ) - ) - ) - ((= v1-0 'bonk) - (when (target-on-end-of-teetertotter? self) - (level-hint-spawn - (game-text-id misty-teetertotter-bonk-dax-tutorial) - "sksp0070" - (the-as entity #f) - *entity-pool* - (game-task none) - ) - (go teetertotter-bend) - ) - ) - ) + (case arg2 + (('attack) + (case (-> arg3 param 1) + (('flop) + (when (target-on-end-of-teetertotter? self) + (set! (-> self in-launch-window) #f) + (increment-success-for-hint (the-as level-hint-control 676)) + (go teetertotter-launch) + ) + ) + ) + ) + (('bonk) + (when (target-on-end-of-teetertotter? self) + (level-hint-spawn + (game-text-id misty-teetertotter-bonk-dax-tutorial) + "sksp0070" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (go teetertotter-bend) + ) ) ) ) @@ -133,7 +117,6 @@ (the-as (function none :behavior teetertotter) transform-post) ) -;; failed to figure out what this is: (defstate teetertotter-launch (teetertotter) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) @@ -252,7 +235,6 @@ (the-as (function none :behavior teetertotter) rider-post) ) -;; failed to figure out what this is: (defstate teetertotter-bend (teetertotter) :code (behavior () @@ -306,7 +288,6 @@ (the-as (function none :behavior teetertotter) rider-post) ) -;; definition for method 11 of type teetertotter (defmethod copy-defaults! teetertotter ((obj teetertotter) (arg0 res-lump)) (let ((s4-0 diff --git a/goal_src/levels/misty/misty-warehouse.gc b/goal_src/levels/misty/misty-warehouse.gc index f6374ff4c2..3147f3e3b9 100644 --- a/goal_src/levels/misty/misty-warehouse.gc +++ b/goal_src/levels/misty/misty-warehouse.gc @@ -46,15 +46,12 @@ (defstate silostep-idle (silostep) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (cond - ((= v1-0 'trigger) - (go silostep-camera) - ) - ((= v1-0 'trigger-rise) - (go silostep-rise #f) - ) - ) + (case arg2 + (('trigger) + (go silostep-camera) + ) + (('trigger-rise) + (go silostep-rise #f) ) ) ) diff --git a/goal_src/levels/misty/muse.gc b/goal_src/levels/misty/muse.gc index f8ca12944e..eb191e83ff 100644 --- a/goal_src/levels/misty/muse.gc +++ b/goal_src/levels/misty/muse.gc @@ -222,11 +222,11 @@ ) (defmethod dummy-44 muse ((obj muse) (arg0 process) (arg1 event-message-block)) - (the-as object (go muse-caught)) + (go muse-caught) ) (defmethod dummy-43 muse ((obj muse) (arg0 process) (arg1 event-message-block)) - (the-as object (go muse-caught)) + (go muse-caught) ) nav-enemy-default-event-handler diff --git a/goal_src/levels/ogre/flying-lurker.gc b/goal_src/levels/ogre/flying-lurker.gc index 295c5c0647..cfe754017a 100644 --- a/goal_src/levels/ogre/flying-lurker.gc +++ b/goal_src/levels/ogre/flying-lurker.gc @@ -503,12 +503,11 @@ (defstate plunger-lurker-idle (plunger-lurker) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (when (= v1-0 'plunge) - (logclear! (-> self mask) (process-mask actor-pause)) - (go plunger-lurker-plunge) - ) - ) + (case arg2 + (('plunge) + (logclear! (-> self mask) (process-mask actor-pause)) + (go plunger-lurker-plunge) + ) ) ) :trans @@ -1239,94 +1238,90 @@ (defbehavior flying-lurker-handler flying-lurker ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (when (= v1-0 'fly-away) - (when (-> self link next) - (entity-birth-no-kill (-> self link next)) - (let ((a1-1 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-1 from) self) - (set! (-> a1-1 num-params) 2) - (set! (-> a1-1 message) 'fly-away) - (set! - (-> a1-1 param 0) - (the-as uint (/ (the-as int (-> arg3 param 0)) 16)) - ) - (set! (-> a1-1 param 1) (-> arg3 param 1)) - (let ((t9-1 send-event-function) - (v1-11 (-> self link next)) - ) - (t9-1 (if v1-11 - (-> v1-11 extra process) - ) - a1-1 - ) - ) - ) - ) - (let* ((v1-14 (-> arg3 param 0)) - (a0-4 (-> arg3 param 1)) - (v1-15 (logand v1-14 3)) - ) - (set! (-> self rank) (the-as int v1-15)) - (cond - ((< 15 (the-as int a0-4)) - (cond - ((zero? v1-15) - (set! (-> self race-seconds) 33000.0) - ) - ((= v1-15 1) - (set! (-> self race-seconds) 34500.0) - ) - (else - (set! (-> self race-seconds) 36000.0) - ) - ) - ) - ((< 10 (the-as int a0-4)) - (cond - ((zero? v1-15) - (set! (-> self race-seconds) 31800.0) - ) - ((= v1-15 1) - (set! (-> self race-seconds) 33300.0) - ) - (else - (set! (-> self race-seconds) 34800.0) - ) - ) - ) - ((< 5 (the-as int a0-4)) - (cond - ((zero? v1-15) - (set! (-> self race-seconds) 30600.0) - ) - ((= v1-15 1) - (set! (-> self race-seconds) 32100.0) - ) - (else - (set! (-> self race-seconds) 33600.0) - ) - ) - ) - ((zero? v1-15) - (set! (-> self race-seconds) 30000.0) - ) - ((= v1-15 1) - (set! (-> self race-seconds) 31500.0) - ) - (else - (set! (-> self race-seconds) 33000.0) - ) - ) - ) - (logclear! (-> self mask) (process-mask actor-pause)) - (set! - (-> self race-start-time) - (-> *display* game-frame-counter) - ) - (go flying-lurker-fly) - ) - ) + (case arg2 + (('fly-away) + (when (-> self link next) + (entity-birth-no-kill (-> self link next)) + (let ((a1-1 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-1 from) self) + (set! (-> a1-1 num-params) 2) + (set! (-> a1-1 message) 'fly-away) + (set! + (-> a1-1 param 0) + (the-as uint (/ (the-as int (-> arg3 param 0)) 16)) + ) + (set! (-> a1-1 param 1) (-> arg3 param 1)) + (let ((t9-1 send-event-function) + (v1-11 (-> self link next)) + ) + (t9-1 (if v1-11 + (-> v1-11 extra process) + ) + a1-1 + ) + ) + ) + ) + (let* ((v1-14 (-> arg3 param 0)) + (a0-4 (-> arg3 param 1)) + (v1-15 (logand v1-14 3)) + ) + (set! (-> self rank) (the-as int v1-15)) + (cond + ((< 15 (the-as int a0-4)) + (cond + ((zero? v1-15) + (set! (-> self race-seconds) 33000.0) + ) + ((= v1-15 1) + (set! (-> self race-seconds) 34500.0) + ) + (else + (set! (-> self race-seconds) 36000.0) + ) + ) + ) + ((< 10 (the-as int a0-4)) + (cond + ((zero? v1-15) + (set! (-> self race-seconds) 31800.0) + ) + ((= v1-15 1) + (set! (-> self race-seconds) 33300.0) + ) + (else + (set! (-> self race-seconds) 34800.0) + ) + ) + ) + ((< 5 (the-as int a0-4)) + (cond + ((zero? v1-15) + (set! (-> self race-seconds) 30600.0) + ) + ((= v1-15 1) + (set! (-> self race-seconds) 32100.0) + ) + (else + (set! (-> self race-seconds) 33600.0) + ) + ) + ) + ((zero? v1-15) + (set! (-> self race-seconds) 30000.0) + ) + ((= v1-15 1) + (set! (-> self race-seconds) 31500.0) + ) + (else + (set! (-> self race-seconds) 33000.0) + ) + ) + ) + (logclear! (-> self mask) (process-mask actor-pause)) + (set! (-> self race-start-time) (-> *display* game-frame-counter)) + (go flying-lurker-fly) + ) ) ) @@ -1629,76 +1624,73 @@ (defstate flying-lurker-idle (flying-lurker) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (cond - ((= v1-0 'saw-player) - (set! (-> self take-off) #t) - (when (-> self link prev) - (entity-birth-no-kill (-> self link prev)) - (let ((a1-1 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-1 from) arg0) - (set! (-> a1-1 num-params) arg1) - (set! (-> a1-1 message) arg2) - (set! (-> a1-1 param 0) (-> arg3 param 0)) - (set! (-> a1-1 param 1) (-> arg3 param 1)) - (set! (-> a1-1 param 2) (-> arg3 param 2)) - (set! (-> a1-1 param 3) (-> arg3 param 3)) - (set! (-> a1-1 param 4) (-> arg3 param 4)) - (set! (-> a1-1 param 5) (-> arg3 param 5)) - (set! (-> a1-1 param 6) (-> arg3 param 6)) - (let ((t9-1 send-event-function) - (v1-13 (-> self link prev)) - ) - (t9-1 (if v1-13 - (-> v1-13 extra process) - ) - a1-1 - ) - ) - ) - ) - ) - ((= v1-0 'clone) - (when (-> self link next) - (entity-birth-no-kill (-> self link next)) - (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) 'clone) - (set! (-> a1-2 param 0) (-> arg3 param 0)) - (set! (-> a1-2 param 1) (+ (-> arg3 param 1) -1)) - (let ((t9-3 send-event-function) - (v1-25 (-> self link next)) - ) - (t9-3 (if v1-25 - (-> v1-25 extra process) - ) - a1-2 - ) - ) - ) - ) - (case (-> arg3 param 1) - ((2) - (go - flying-lurker-clone - (the-as handle (-> arg3 param 0)) - "flying-lurker-b-" - ) - ) - ((1) - (go - flying-lurker-clone - (the-as handle (-> arg3 param 0)) - "flying-lurker-c-" - ) - ) - ) - ) - (else - (flying-lurker-handler arg0 arg1 arg2 arg3) - ) - ) + (case arg2 + (('saw-player) + (set! (-> self take-off) #t) + (when (-> self link prev) + (entity-birth-no-kill (-> self link prev)) + (let ((a1-1 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-1 from) arg0) + (set! (-> a1-1 num-params) arg1) + (set! (-> a1-1 message) arg2) + (set! (-> a1-1 param 0) (-> arg3 param 0)) + (set! (-> a1-1 param 1) (-> arg3 param 1)) + (set! (-> a1-1 param 2) (-> arg3 param 2)) + (set! (-> a1-1 param 3) (-> arg3 param 3)) + (set! (-> a1-1 param 4) (-> arg3 param 4)) + (set! (-> a1-1 param 5) (-> arg3 param 5)) + (set! (-> a1-1 param 6) (-> arg3 param 6)) + (let ((t9-1 send-event-function) + (v1-13 (-> self link prev)) + ) + (t9-1 (if v1-13 + (-> v1-13 extra process) + ) + a1-1 + ) + ) + ) + ) + ) + (('clone) + (when (-> self link next) + (entity-birth-no-kill (-> self link next)) + (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) 'clone) + (set! (-> a1-2 param 0) (-> arg3 param 0)) + (set! (-> a1-2 param 1) (+ (-> arg3 param 1) -1)) + (let ((t9-3 send-event-function) + (v1-25 (-> self link next)) + ) + (t9-3 (if v1-25 + (-> v1-25 extra process) + ) + a1-2 + ) + ) + ) + ) + (case (-> arg3 param 1) + ((2) + (go + flying-lurker-clone + (the-as handle (-> arg3 param 0)) + "flying-lurker-b-" + ) + ) + ((1) + (go + flying-lurker-clone + (the-as handle (-> arg3 param 0)) + "flying-lurker-c-" + ) + ) + ) + ) + (else + (flying-lurker-handler arg0 arg1 arg2 arg3) ) ) ) diff --git a/goal_src/levels/snow/target-snowball.gc b/goal_src/levels/snow/target-snowball.gc index 3927c85c0a..9fe922c4a2 100644 --- a/goal_src/levels/snow/target-snowball.gc +++ b/goal_src/levels/snow/target-snowball.gc @@ -25,6 +25,7 @@ :flag-assert #x900000004 ) + (define *SNOWBALL-bank* (new 'static 'snowball-bank)) (defbehavior target-snowball-post target () @@ -51,22 +52,23 @@ (defstate target-snowball-start (target) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (the-as object (cond - ((and (= arg2 'query) (= (-> arg3 param 0) 'mode)) - 'snowball - ) - ((let ((v1-3 arg2)) - (= v1-3 'end-mode) - ) - enter-state - (-> *TARGET-bank* duck-jump-height-min) - (-> *TARGET-bank* duck-jump-height-max) - (go target-jump) - ) - (else - (target-generic-event-handler arg0 arg1 arg2 arg3) - ) - ) + (cond + ((and (= arg2 'query) (= (-> arg3 param 0) 'mode)) + 'snowball + ) + ((let ((v1-3 arg2)) + (= v1-3 'end-mode) + ) + (go + target-jump + (-> *TARGET-bank* duck-jump-height-min) + (-> *TARGET-bank* duck-jump-height-max) + #f + ) + ) + (else + (target-generic-event-handler arg0 arg1 arg2 arg3) + ) ) ) :exit diff --git a/goal_src/levels/snow/yeti.gc b/goal_src/levels/snow/yeti.gc index 19f1dfb3f4..7e95f7fdf1 100644 --- a/goal_src/levels/snow/yeti.gc +++ b/goal_src/levels/snow/yeti.gc @@ -247,24 +247,20 @@ ) ) -;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? (defbehavior yeti-slave-default-event-handler yeti-slave ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (cond - ((= v1-0 'attack) - (nav-enemy-set-hit-from-direction arg0) - (go-virtual nav-enemy-die) - ) - ((= v1-0 'touch) - (nav-enemy-send-attack - arg0 - (the-as touching-shapes-entry (-> arg3 param 0)) - 'generic - ) - ) - ) + (case arg2 + (('attack) + (nav-enemy-set-hit-from-direction arg0) + (go-virtual nav-enemy-die) + ) + (('touch) + (nav-enemy-send-attack + arg0 + (the-as touching-shapes-entry (-> arg3 param 0)) + 'generic + ) ) ) ) diff --git a/goal_src/levels/sunken/qbert-plat.gc b/goal_src/levels/sunken/qbert-plat.gc index 31dda48571..32c8250e6f 100644 --- a/goal_src/levels/sunken/qbert-plat.gc +++ b/goal_src/levels/sunken/qbert-plat.gc @@ -130,11 +130,10 @@ (defstate qbert-plat-on-mimic (qbert-plat) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (if (= v1-0 'die) - (go qbert-plat-on-die) - ) - ) + (case arg2 + (('die) + (go qbert-plat-on-die) + ) ) ) :code @@ -500,59 +499,52 @@ (defstate qbert-plat-master-idle (qbert-plat-master) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (when (= v1-0 'trigger) - (start-hint-timer (the-as level-hint-control 842)) - (close-specific-task! - (game-task sunken-platforms) - (task-status need-hint) - ) - (when (not (-> self puzzle-beaten?)) - (let ((v1-2 (-> arg3 param 0))) - (when (!= v1-2 (-> self last-plat-triggered)) - (set! (-> self last-plat-triggered) (the-as int v1-2)) - (let - ((s5-1 - (= - (-> self plat-states-needed-to-open-door) - (-> self plat-states) - ) - ) - ) - (let ((v1-3 (ash 1 v1-2))) - (set! - (-> self plat-states) - (logxor (-> self plat-states) (the-as uint v1-3)) - ) - (if (zero? (logand v1-3 (-> self plat-states))) - (level-hint-spawn - (game-text-id sunken-qbert-hint) - "sksp0130" - (the-as entity #f) - *entity-pool* - (game-task none) - ) - ) - ) - (send-event arg0 'notify) - (let - ((a0-13 - (= - (-> self plat-states-needed-to-open-door) - (-> self plat-states) - ) - ) - ) - (if (!= s5-1 a0-13) - (go qbert-plat-master-do-door a0-13) - ) - ) - ) - ) - ) - ) - ) - ) + (case arg2 + (('trigger) + (start-hint-timer (the-as level-hint-control 842)) + (close-specific-task! + (game-task sunken-platforms) + (task-status need-hint) + ) + (when (not (-> self puzzle-beaten?)) + (let ((v1-2 (-> arg3 param 0))) + (when (!= v1-2 (-> self last-plat-triggered)) + (set! (-> self last-plat-triggered) (the-as int v1-2)) + (let + ((s5-1 + (= (-> self plat-states-needed-to-open-door) (-> self plat-states)) + ) + ) + (let ((v1-3 (ash 1 v1-2))) + (set! + (-> self plat-states) + (logxor (-> self plat-states) (the-as uint v1-3)) + ) + (if (zero? (logand v1-3 (-> self plat-states))) + (level-hint-spawn + (game-text-id sunken-qbert-hint) + "sksp0130" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ) + (send-event arg0 'notify) + (let + ((a0-13 + (= (-> self plat-states-needed-to-open-door) (-> self plat-states)) + ) + ) + (if (!= s5-1 a0-13) + (go qbert-plat-master-do-door a0-13) + ) + ) + ) + ) + ) + ) + ) ) ) :code diff --git a/goal_src/levels/sunken/square-platform.gc b/goal_src/levels/sunken/square-platform.gc index a726f9d6ef..dffb038906 100644 --- a/goal_src/levels/sunken/square-platform.gc +++ b/goal_src/levels/sunken/square-platform.gc @@ -360,20 +360,16 @@ (defstate square-platform-lowered (square-platform) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (when (= v1-0 'trigger) - (if - (and - (= (-> arg0 type) square-platform-master) - (= - (-> (the-as square-platform-master arg0) plat-id) - (-> self plat-id) - ) - ) - (go square-platform-rising) - ) - ) - ) + (case arg2 + (('trigger) + (if + (and + (= (-> arg0 type) square-platform-master) + (= (-> (the-as square-platform-master arg0) plat-id) (-> self plat-id)) + ) + (go square-platform-rising) + ) + ) ) ) :code @@ -676,19 +672,18 @@ (defstate square-platform-master-idle (square-platform-master) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (when (= v1-0 'trigger) - (when (= (-> arg0 type) square-platform-button) - (set! - (-> self button-id) - (-> (the-as square-platform-button arg0) button-id) - ) - (logclear! (-> self mask) (process-mask actor-pause)) - (process-entity-status! self (entity-perm-status bit-3) #t) - (go square-platform-master-activate) - ) - ) - ) + (case arg2 + (('trigger) + (when (= (-> arg0 type) square-platform-button) + (set! + (-> self button-id) + (-> (the-as square-platform-button arg0) button-id) + ) + (logclear! (-> self mask) (process-mask actor-pause)) + (process-entity-status! self (entity-perm-status bit-3) #t) + (go square-platform-master-activate) + ) + ) ) ) :code diff --git a/goal_src/levels/sunken/wall-plat.gc b/goal_src/levels/sunken/wall-plat.gc index 2409c51248..1ddb23654b 100644 --- a/goal_src/levels/sunken/wall-plat.gc +++ b/goal_src/levels/sunken/wall-plat.gc @@ -51,11 +51,10 @@ (defstate wall-plat-retracted (wall-plat) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (if (= v1-0 'trigger) - (go wall-plat-extending) - ) - ) + (case arg2 + (('trigger) + (go wall-plat-extending) + ) ) ) :code @@ -134,11 +133,10 @@ (defstate wall-plat-extended (wall-plat) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (if (= v1-0 'untrigger) - (go wall-plat-retracting) - ) - ) + (case arg2 + (('untrigger) + (go wall-plat-retracting) + ) ) ) :code diff --git a/goal_src/levels/swamp/swamp-bat.gc b/goal_src/levels/swamp/swamp-bat.gc index a4038d5aa9..391aa9fa9a 100644 --- a/goal_src/levels/swamp/swamp-bat.gc +++ b/goal_src/levels/swamp/swamp-bat.gc @@ -107,37 +107,28 @@ ) -;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? (defbehavior swamp-bat-slave-event-handler swamp-bat-slave ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (cond - ((= v1-0 'attack) - (logclear! (-> self mask) (process-mask actor-pause)) - (go swamp-bat-slave-die (process->handle arg0)) - ) - ((= v1-0 'touch) - (level-hint-spawn - (game-text-id swamp-bats-hint) - "sksp0156" - (the-as entity #f) - *entity-pool* - (game-task none) - ) - (send-event - arg0 - 'attack - (-> arg3 param 0) - (new 'static 'attack-info) - ) - ) - ((= v1-0 'launch) - (if (-> self launch-ready) - (go swamp-bat-slave-launch) - ) - ) - ) + (case arg2 + (('attack) + (logclear! (-> self mask) (process-mask actor-pause)) + (go swamp-bat-slave-die (process->handle arg0)) + ) + (('touch) + (level-hint-spawn + (game-text-id swamp-bats-hint) + "sksp0156" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (send-event arg0 'attack (-> arg3 param 0) (new 'static 'attack-info)) + ) + (('launch) + (if (-> self launch-ready) + (go swamp-bat-slave-launch) + ) ) ) ) diff --git a/goal_src/levels/swamp/swamp-rat-nest.gc b/goal_src/levels/swamp/swamp-rat-nest.gc index 21db05118c..261326ae90 100644 --- a/goal_src/levels/swamp/swamp-rat-nest.gc +++ b/goal_src/levels/swamp/swamp-rat-nest.gc @@ -880,55 +880,43 @@ (defbehavior swamp-rat-nest-dummy-event-handler swamp-rat-nest-dummy ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (cond - ((= v1-0 'shake) - (if (= (-> self next-state name) 'swamp-rat-nest-dummy-idle) - (go swamp-rat-nest-dummy-shake) - ) - ) - ((= v1-0 'attack) - (send-event - (ppointer->process (-> self parent-process)) - 'hit - ) - (let ((v1-7 (-> arg3 param 2))) - (when (!= v1-7 (-> self parent-process 0 player-attack-id)) - (set! - (-> self parent-process 0 player-attack-id) - (the-as int v1-7) - ) - (cond - ((and (>= arg1 2) (= (-> arg3 param 1) 'eco-yellow)) - (swamp-rat-nest-dummy-take-damage 3) - (if - (< - (vector-vector-distance - (target-pos 0) - (-> self top-sphere) - ) - (-> self top-sphere w) - ) - (send-event *target* 'no-look-around 75) - ) - (go swamp-rat-nest-dummy-hit) - ) - (else - (level-hint-spawn - (game-text-id swamp-rats-nest-hint) - "sksp0144" - (the-as entity #f) - *entity-pool* - (game-task none) - ) - (swamp-rat-nest-dummy-take-damage 0) - (go swamp-rat-nest-dummy-hit) - ) - ) - ) - ) - ) - ) + (case arg2 + (('shake) + (if (= (-> self next-state name) 'swamp-rat-nest-dummy-idle) + (go swamp-rat-nest-dummy-shake) + ) + ) + (('attack) + (send-event (ppointer->process (-> self parent-process)) 'hit) + (let ((v1-7 (-> arg3 param 2))) + (when (!= v1-7 (-> self parent-process 0 player-attack-id)) + (set! (-> self parent-process 0 player-attack-id) (the-as int v1-7)) + (cond + ((and (>= arg1 2) (= (-> arg3 param 1) 'eco-yellow)) + (swamp-rat-nest-dummy-take-damage 3) + (if + (< + (vector-vector-distance (target-pos 0) (-> self top-sphere)) + (-> self top-sphere w) + ) + (send-event *target* 'no-look-around 75) + ) + (go swamp-rat-nest-dummy-hit) + ) + (else + (level-hint-spawn + (game-text-id swamp-rats-nest-hint) + "sksp0144" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (swamp-rat-nest-dummy-take-damage 0) + (go swamp-rat-nest-dummy-hit) + ) + ) + ) + ) ) ) ) @@ -1192,11 +1180,10 @@ (defbehavior swamp-rat-nest-default-event-handler swamp-rat-nest ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (if (= v1-0 'victory) - (go swamp-rat-nest-victory) - ) - ) + (case arg2 + (('victory) + (go swamp-rat-nest-victory) + ) ) ) @@ -1430,11 +1417,10 @@ swamp-rat-nest-default-event-handler (defstate swamp-rat-nest-idle (swamp-rat-nest) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (if (= v1-0 'hit) - (go swamp-rat-nest-active) - ) - ) + (case arg2 + (('hit) + (go swamp-rat-nest-active) + ) ) ) :enter diff --git a/goal_src/levels/swamp/swamp-rat.gc b/goal_src/levels/swamp/swamp-rat.gc index cc26069062..1eb7c7c416 100644 --- a/goal_src/levels/swamp/swamp-rat.gc +++ b/goal_src/levels/swamp/swamp-rat.gc @@ -53,42 +53,38 @@ (set! *swamp-rat-sg* v1-1) ) -;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? (defmethod dummy-44 swamp-rat ((obj swamp-rat) (arg0 process) (arg1 event-message-block)) - (the-as - object + (when + ((method-of-type touching-shapes-entry prims-touching?) + (the-as touching-shapes-entry (-> arg1 param 0)) + (-> obj collide-info) + (the-as uint 1) + ) (when - ((method-of-type touching-shapes-entry prims-touching?) + (nav-enemy-send-attack + arg0 (the-as touching-shapes-entry (-> arg1 param 0)) - (-> obj collide-info) - (the-as uint 1) + 'generic ) - (when - (nav-enemy-send-attack - arg0 - (the-as touching-shapes-entry (-> arg1 param 0)) - 'generic - ) - (let* ((s5-1 (-> obj parent)) - (a0-4 - (if (and (nonzero? s5-1) (type-type? pointer process-drawable)) - s5-1 - ) - ) + (let* ((s5-1 (-> obj parent)) + (a0-4 (if (and (nonzero? s5-1) (type-type? pointer process-drawable)) + s5-1 + ) ) - (if a0-4 - (send-event (the-as process a0-4) 'victory) - (go (method-of-object obj nav-enemy-victory)) - ) + ) + (if a0-4 + (send-event (the-as process a0-4) 'victory) + (go (method-of-object obj nav-enemy-victory)) ) ) ) ) ) +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? (defbehavior swamp-rat-default-event-handler swamp-rat ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) diff --git a/goal_src/levels/village1/yakow.gc b/goal_src/levels/village1/yakow.gc index 2fa316d407..915023a59c 100644 --- a/goal_src/levels/village1/yakow.gc +++ b/goal_src/levels/village1/yakow.gc @@ -183,6 +183,7 @@ (set! *yakow-sg* v1-5) ) +;; 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 yakow-default-event-handler yakow diff --git a/goalc/compiler/compilation/State.cpp b/goalc/compiler/compilation/State.cpp index 84472fd5a3..2bdfd95a2d 100644 --- a/goalc/compiler/compilation/State.cpp +++ b/goalc/compiler/compilation/State.cpp @@ -244,7 +244,7 @@ Val* Compiler::compile_go_hook(const goos::Object& form, const goos::Object& res // now we have to call the function. auto enter_state_func = compile_get_symbol_value(form, "enter-state", env); - enter_state_func->set_type(state_to_go_function(state->type())); + enter_state_func->set_type(state_to_go_function(state->type(), TypeSpec("object"))); std::vector function_arguments; for (size_t i = 2; i < args.unnamed.size(); i++) { diff --git a/goalc/compiler/compilation/Type.cpp b/goalc/compiler/compilation/Type.cpp index f8f8d0e1ca..5500f88723 100644 --- a/goalc/compiler/compilation/Type.cpp +++ b/goalc/compiler/compilation/Type.cpp @@ -731,7 +731,7 @@ Val* Compiler::compile_deref(const goos::Object& form, const goos::Object& _rest // special case (-> enter) should return the appropriate function type. if (in_type.arg_count() > 0 && in_type.base_type() == "state") { if (field_name == "enter") { - result->set_type(state_to_go_function(in_type)); + result->set_type(state_to_go_function(in_type, TypeSpec("none"))); } } diff --git a/test/decompiler/reference/engine/camera/cam-layout_REF.gc b/test/decompiler/reference/engine/camera/cam-layout_REF.gc index d8cc6d2920..3c12cd3256 100644 --- a/test/decompiler/reference/engine/camera/cam-layout_REF.gc +++ b/test/decompiler/reference/engine/camera/cam-layout_REF.gc @@ -5301,6 +5301,7 @@ ) ;; definition for function cam-layout-init +;; INFO: Return type mismatch object vs none. (defbehavior cam-layout-init cam-layout () (set! (-> self res-key) (-> (new 'static 'array float 1 -1000000000.0) 0)) (set! (-> self num-entities) 0) diff --git a/test/decompiler/reference/engine/camera/pov-camera_REF.gc b/test/decompiler/reference/engine/camera/pov-camera_REF.gc index a779b39c55..f5fc4440cd 100644 --- a/test/decompiler/reference/engine/camera/pov-camera_REF.gc +++ b/test/decompiler/reference/engine/camera/pov-camera_REF.gc @@ -157,16 +157,15 @@ :virtual #t :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (when (= v1-0 'abort) - (when (logtest? (-> self flags) 1) - (logior! (-> self flags) 2) - (if (= (-> self anim-name type) string) - (go-virtual pov-camera-abort) - ) - ) - ) - ) + (case arg2 + (('abort) + (when (logtest? (-> self flags) 1) + (logior! (-> self flags) 2) + (if (= (-> self anim-name type) string) + (go-virtual pov-camera-abort) + ) + ) + ) ) ) :enter @@ -328,6 +327,7 @@ ) ;; definition for function pov-camera-init-by-other +;; INFO: Return type mismatch object vs none. ;; Used lq/sq (defbehavior pov-camera-init-by-other pov-camera diff --git a/test/decompiler/reference/engine/debug/anim-tester_REF.gc b/test/decompiler/reference/engine/debug/anim-tester_REF.gc index 70ce19a7a2..ba9ed98e96 100644 --- a/test/decompiler/reference/engine/debug/anim-tester_REF.gc +++ b/test/decompiler/reference/engine/debug/anim-tester_REF.gc @@ -1249,55 +1249,46 @@ ) ;; definition for function anim-tester-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? -;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? (defbehavior anim-tester-standard-event-handler anim-tester ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (cond - ((= v1-0 'reset) - (process-disconnect self) - (set! (-> self flags) (logand -2 (-> self flags))) - (when (!= (-> *anim-tester* 0 edit-mode) 1) - (set! (-> *debug-menu-context* is-hidden) #f) - (set! (-> *anim-tester* 0 edit-mode) 0) - (set! *camera-read-buttons* #t) - ) - (anim-tester-reset) - (go anim-tester-process) - ) - ((= v1-0 'change-anim) - (go anim-tester-process) - ) - ((= v1-0 'pick-object) - (set! (-> self edit-mode) 1) - (set! *camera-read-buttons* #f) - #f - ) - ((= v1-0 'pick-joint-anim) - (set! (-> self edit-mode) 2) - (set! *camera-read-buttons* #f) - #f - ) - ((= v1-0 'pick-sequence) - (set! (-> self edit-mode) 3) - (set! *camera-read-buttons* #f) - #f - ) - ((= v1-0 'edit-sequence) - (set! (-> self edit-mode) 4) - (set! *camera-read-buttons* #f) - #f - ) - ((= v1-0 'save-sequences) - (anim-tester-save-all-objects self) - ) - ) + (case arg2 + (('reset) + (process-disconnect self) + (set! (-> self flags) (logand -2 (-> self flags))) + (when (!= (-> *anim-tester* 0 edit-mode) 1) + (set! (-> *debug-menu-context* is-hidden) #f) + (set! (-> *anim-tester* 0 edit-mode) 0) + (set! *camera-read-buttons* #t) + ) + (anim-tester-reset) + (go anim-tester-process) + ) + (('change-anim) + (go anim-tester-process) + ) + (('pick-object) + (set! (-> self edit-mode) 1) + (set! *camera-read-buttons* #f) + #f + ) + (('pick-joint-anim) + (set! (-> self edit-mode) 2) + (set! *camera-read-buttons* #f) + #f + ) + (('pick-sequence) + (set! (-> self edit-mode) 3) + (set! *camera-read-buttons* #f) + #f + ) + (('edit-sequence) + (set! (-> self edit-mode) 4) + (set! *camera-read-buttons* #f) + #f + ) + (('save-sequences) + (anim-tester-save-all-objects self) ) ) ) @@ -3259,6 +3250,7 @@ ) ;; definition for function initialize-anim-tester +;; INFO: Return type mismatch object vs none. (defbehavior initialize-anim-tester anim-tester () (glst-init-list! (-> self obj-list)) (logclear! (-> self mask) (process-mask menu)) diff --git a/test/decompiler/reference/engine/game/projectiles_REF.gc b/test/decompiler/reference/engine/game/projectiles_REF.gc index b5b62fa744..3f5b42935d 100644 --- a/test/decompiler/reference/engine/game/projectiles_REF.gc +++ b/test/decompiler/reference/engine/game/projectiles_REF.gc @@ -927,68 +927,53 @@ :virtual #t :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (cond - ((= v1-0 'touched) - (when (-> self attack-mode) - (when (cond - ((= (-> arg0 type) target) - (let - ((a1-1 - (new 'stack-no-clear 'event-message-block) - ) - ) - (set! (-> a1-1 from) self) - (set! (-> a1-1 num-params) 2) - (set! (-> a1-1 message) 'attack) - (set! (-> a1-1 param 0) (-> arg3 param 0)) - (let - ((a0-4 (new 'static 'attack-info :mask #x20))) - (set! (-> a0-4 mode) (-> self attack-mode)) - (set! (-> a1-1 param 1) (the-as uint a0-4)) - ) - (send-event-function arg0 a1-1) - ) - ) - (else - (let - ((a1-2 - (new 'stack-no-clear 'event-message-block) - ) - ) - (set! (-> a1-2 from) self) - (set! (-> a1-2 num-params) 4) - (set! (-> a1-2 message) 'attack) - (set! (-> a1-2 param 0) (-> arg3 param 0)) - (set! - (-> a1-2 param 1) - (the-as uint (-> self attack-mode)) - ) - (let ((v1-13 (+ *global-attack-id* 1))) - (set! *global-attack-id* v1-13) - (set! (-> a1-2 param 2) (the-as uint v1-13)) - ) - (set! (-> a1-2 param 3) (the-as uint 0)) - (send-event-function arg0 a1-2) - ) - ) - ) - (let ((v1-14 (-> self notify-handle))) - (if (handle->process v1-14) - (send-event (-> v1-14 process 0) 'notify 'attack arg0) - ) - ) - (+! (-> self hits) 1) - (if (>= (-> self hits) (-> self max-hits)) - (go-virtual projectile-impact) - ) - ) - ) - ) - ((= v1-0 'die) - (go-virtual projectile-impact) - ) - ) + (case arg2 + (('touched) + (when (-> self attack-mode) + (when (cond + ((= (-> arg0 type) target) + (let ((a1-1 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-1 from) self) + (set! (-> a1-1 num-params) 2) + (set! (-> a1-1 message) 'attack) + (set! (-> a1-1 param 0) (-> arg3 param 0)) + (let ((a0-4 (new 'static 'attack-info :mask #x20))) + (set! (-> a0-4 mode) (-> self attack-mode)) + (set! (-> a1-1 param 1) (the-as uint a0-4)) + ) + (send-event-function arg0 a1-1) + ) + ) + (else + (let ((a1-2 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-2 from) self) + (set! (-> a1-2 num-params) 4) + (set! (-> a1-2 message) 'attack) + (set! (-> a1-2 param 0) (-> arg3 param 0)) + (set! (-> a1-2 param 1) (the-as uint (-> self attack-mode))) + (let ((v1-13 (+ *global-attack-id* 1))) + (set! *global-attack-id* v1-13) + (set! (-> a1-2 param 2) (the-as uint v1-13)) + ) + (set! (-> a1-2 param 3) (the-as uint 0)) + (send-event-function arg0 a1-2) + ) + ) + ) + (let ((v1-14 (-> self notify-handle))) + (if (handle->process v1-14) + (send-event (-> v1-14 process 0) 'notify 'attack arg0) + ) + ) + (+! (-> self hits) 1) + (if (>= (-> self hits) (-> self max-hits)) + (go-virtual projectile-impact) + ) + ) + ) + ) + (('die) + (go-virtual projectile-impact) ) ) ) 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 1a970c955a..bf810f361d 100644 --- a/test/decompiler/reference/engine/game/task/process-taskable_REF.gc +++ b/test/decompiler/reference/engine/game/task/process-taskable_REF.gc @@ -332,6 +332,7 @@ ) ;; definition for method 38 of type process-taskable +;; INFO: Return type mismatch object vs none. (defmethod dummy-38 process-taskable ((obj process-taskable)) (if (nonzero? (-> obj cell-for-task)) (go (method-of-object obj give-cell)) @@ -945,6 +946,7 @@ ) ;; definition for function process-taskable-hide-handler +;; INFO: Return type mismatch object vs none. (defbehavior process-taskable-hide-handler process-taskable ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) @@ -1103,46 +1105,53 @@ :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) (let ((v1-0 arg2)) - (the-as object (cond - ((= v1-0 'shadow) - (the-as shadow-geo (cond - ((-> arg3 param 0) - (let ((v0-0 (-> self shadow-backup))) - (set! (-> self draw shadow) v0-0) - v0-0 - ) - ) - (else - (set! (-> self draw shadow) #f) - (the-as shadow-geo #f) - ) - ) - ) - ) - ((= v1-0 'shadow-min-max) - (let ((v1-5 (-> self draw shadow-ctrl))) - (let ((a0-5 v1-5)) - (set! - (-> a0-5 settings bot-plane w) - (- (the-as float (-> arg3 param 0))) + (the-as shadow-geo (cond + ((= v1-0 'shadow) + (the-as shadow-geo (cond + ((-> arg3 param 0) + (let + ((v0-0 (-> self shadow-backup))) + (set! (-> self draw shadow) v0-0) + v0-0 + ) + ) + (else + (set! (-> self draw shadow) #f) + (the-as shadow-geo #f) + ) + ) + ) + ) + ((= v1-0 'shadow-min-max) + (let ((v1-5 (-> self draw shadow-ctrl))) + (let ((a0-5 v1-5)) + (set! + (-> a0-5 settings bot-plane w) + (- (the-as float (-> arg3 param 0))) + ) + ) + 0 + (set! + (-> v1-5 settings top-plane w) + (- (the-as float (-> arg3 param 1))) + ) + ) + (the-as shadow-geo 0) + ) + ((= v1-0 'end-mode) + (the-as shadow-geo (if (should-display? self) + (the-as + shadow-geo + (go-virtual idle) + ) + (the-as + shadow-geo + (go-virtual hidden) + ) + ) + ) + ) ) - ) - 0 - (set! - (-> v1-5 settings top-plane w) - (- (the-as float (-> arg3 param 1))) - ) - ) - (the-as shadow-geo 0) - ) - ((= v1-0 'end-mode) - (the-as shadow-geo (if (should-display? self) - (the-as shadow-geo (go-virtual idle)) - (the-as shadow-geo (go-virtual hidden)) - ) - ) - ) - ) ) ) ) @@ -1559,6 +1568,7 @@ ) ;; definition for method 42 of type process-taskable +;; INFO: Return type mismatch object vs none. (defmethod dummy-42 process-taskable ((obj process-taskable)) (cond ((not (should-display? obj)) diff --git a/test/decompiler/reference/engine/target/logic-target_REF.gc b/test/decompiler/reference/engine/target/logic-target_REF.gc index e92decddf8..9321d1836e 100644 --- a/test/decompiler/reference/engine/target/logic-target_REF.gc +++ b/test/decompiler/reference/engine/target/logic-target_REF.gc @@ -2722,6 +2722,7 @@ ) ;; definition for function init-target +;; INFO: Return type mismatch object vs none. ;; Used lq/sq (defbehavior init-target target ((arg0 continue-point)) (set-setting! *setting-control* self 'allow-pause #f 0.0 0) diff --git a/test/decompiler/reference/engine/target/target-util_REF.gc b/test/decompiler/reference/engine/target/target-util_REF.gc index 7b12f76bdb..d8178d9697 100644 --- a/test/decompiler/reference/engine/target/target-util_REF.gc +++ b/test/decompiler/reference/engine/target/target-util_REF.gc @@ -1103,77 +1103,69 @@ ) ;; definition for function fall-test -;; INFO: Return type mismatch none vs object. (defbehavior fall-test target ((arg0 symbol) (arg1 symbol)) - (the-as - object + (when + (and + (zero? (logand (-> self control status) 1)) + (>= + (- (-> *display* base-frame-counter) (-> self control unknown-dword10)) + (the-as int (-> *TARGET-bank* ground-timeout)) + ) + (>= + 0.0 + (vector-dot + (-> self control dynam gravity-normal) + (-> self control transv) + ) + ) + (let ((v1-15 (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + ) + (or + (not + (or + (= v1-15 (-> self draw art-group data 59)) + (= v1-15 (-> self draw art-group data 60)) + (= v1-15 (-> self draw art-group data 61)) + ) + ) + (< 4096.0 (target-height-above-ground)) + ) + ) + ) (when (and - (zero? (logand (-> self control status) 1)) - (>= - (- (-> *display* base-frame-counter) (-> self control unknown-dword10)) + (< + (- + (-> *display* base-frame-counter) + (the-as int (-> self control rider-time)) + ) (the-as int (-> *TARGET-bank* ground-timeout)) ) - (>= - 0.0 - (vector-dot - (-> self control dynam gravity-normal) - (-> self control transv) - ) - ) - (let ((v1-15 (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - ) - ) - (or - (not - (or - (= v1-15 (-> self draw art-group data 59)) - (= v1-15 (-> self draw art-group data 60)) - (= v1-15 (-> self draw art-group data 61)) - ) - ) - (< 4096.0 (target-height-above-ground)) - ) - ) + (logtest? (-> self control unknown-surface01 flags) #x4000) ) - (when - (and - (< - (- - (-> *display* base-frame-counter) - (the-as int (-> self control rider-time)) - ) - (the-as int (-> *TARGET-bank* ground-timeout)) - ) - (logtest? (-> self control unknown-surface01 flags) #x4000) - ) - (+! (-> self control transv x) (-> self control rider-last-move x)) - (+! (-> self control transv z) (-> self control rider-last-move z)) - ) - (go target-falling #f) + (+! (-> self control transv x) (-> self control rider-last-move x)) + (+! (-> self control transv z) (-> self control rider-last-move z)) ) + (go target-falling #f) ) ) ;; definition for function slide-down-test -;; INFO: Return type mismatch none vs object. (defbehavior slide-down-test target ((arg0 symbol) (arg1 symbol)) - (the-as - object - (if - (and - (zero? (logand (-> self control status) 129)) - (>= - (- (-> *display* base-frame-counter) (-> self control unknown-dword10)) - (the-as int (-> *TARGET-bank* ground-timeout)) - ) - (logtest? (-> self control status) 4) - (< 0.5 (-> self control surface-angle)) + (if + (and + (zero? (logand (-> self control status) 129)) + (>= + (- (-> *display* base-frame-counter) (-> self control unknown-dword10)) + (the-as int (-> *TARGET-bank* ground-timeout)) ) - (go target-slide-down) + (logtest? (-> self control status) 4) + (< 0.5 (-> self control surface-angle)) ) + (go target-slide-down) ) ) diff --git a/test/decompiler/reference/levels/beach/beach-rocks_REF.gc b/test/decompiler/reference/levels/beach/beach-rocks_REF.gc index 495ba912d3..a3129bc7f6 100644 --- a/test/decompiler/reference/levels/beach/beach-rocks_REF.gc +++ b/test/decompiler/reference/levels/beach/beach-rocks_REF.gc @@ -394,16 +394,13 @@ :virtual #t :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (cond - ((= v1-0 'trigger) - (set! (-> self trigger) #t) - (go-virtual falling) - ) - ((= v1-0 'loading) - (go-virtual loading) - ) - ) + (case arg2 + (('trigger) + (set! (-> self trigger) #t) + (go-virtual falling) + ) + (('loading) + (go-virtual loading) ) ) ) @@ -635,6 +632,7 @@ ) ;; definition for method 11 of type beach-rock +;; INFO: Return type mismatch object vs none. (defmethod copy-defaults! beach-rock ((obj beach-rock) (arg0 res-lump)) (set! (-> obj link) (new 'process 'actor-link-info obj)) (set! (-> obj align) (new 'process 'align-control obj)) diff --git a/test/decompiler/reference/levels/beach/bird-lady_REF.gc b/test/decompiler/reference/levels/beach/bird-lady_REF.gc index 9284a522c2..29f8a3d54d 100644 --- a/test/decompiler/reference/levels/beach/bird-lady_REF.gc +++ b/test/decompiler/reference/levels/beach/bird-lady_REF.gc @@ -263,6 +263,7 @@ ) ;; definition for method 11 of type bird-lady +;; INFO: Return type mismatch object vs none. (defmethod copy-defaults! bird-lady ((obj bird-lady) (arg0 res-lump)) (dummy-40 obj diff --git a/test/decompiler/reference/levels/beach/lurkercrab_REF.gc b/test/decompiler/reference/levels/beach/lurkercrab_REF.gc index a21001431f..f16c7e87d8 100644 --- a/test/decompiler/reference/levels/beach/lurkercrab_REF.gc +++ b/test/decompiler/reference/levels/beach/lurkercrab_REF.gc @@ -146,11 +146,6 @@ ) ;; definition for method 43 of type lurkercrab -;; 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 (defmethod dummy-43 @@ -159,65 +154,60 @@ (let ((s5-0 (-> obj incomming-attack-id))) (set! (-> obj incomming-attack-id) (the-as handle (-> arg1 param 2))) (let ((v1-1 (-> arg1 param 1))) - (the-as object (cond - ((or (= v1-1 'flop) (= v1-1 'explode) (= v1-1 'darkeco)) - (logclear! (-> obj mask) (process-mask actor-pause)) - (go (method-of-object obj nav-enemy-die)) - ) - ((= v1-1 'punch) - (cond - ((logtest? (-> obj nav-enemy-flags) 32) - (logclear! (-> obj mask) (process-mask actor-pause)) - (go (method-of-object obj nav-enemy-die)) - ) - ((begin - (let ((s4-0 (new 'stack-no-clear 'vector))) - (let ((f30-0 (quaternion-xz-angle (target-rot)))) - (set-vector! - s4-0 - (* 24576.0 (sin f30-0)) - 0.0 - (* 24576.0 (cos f30-0)) - 1.0 - ) - ) - (vector+! s4-0 (-> obj collide-info trans) s4-0) - (set! (-> obj nav target-pos quad) (-> s4-0 quad)) - ) - (go lurkercrab-pushed) - (= s5-0 (-> obj incomming-attack-id)) - ) - 'push - ) - (else - #t - ) - ) - ) - ((logtest? (-> obj nav-enemy-flags) 32) - (logclear! (-> obj mask) (process-mask actor-pause)) - (go (method-of-object obj nav-enemy-die)) - ) - ((begin - (let ((s4-1 (new 'stack-no-clear 'vector))) - (vector-! - s4-1 - (-> obj collide-info trans) - (target-pos 0) - ) - (vector-normalize! s4-1 24576.0) - (vector+! s4-1 (-> obj collide-info trans) s4-1) - (set! (-> obj nav target-pos quad) (-> s4-1 quad)) - ) - (go lurkercrab-pushed) - (= s5-0 (-> obj incomming-attack-id)) - ) - 'push - ) - (else - #t - ) - ) + (cond + ((or (= v1-1 'flop) (= v1-1 'explode) (= v1-1 'darkeco)) + (logclear! (-> obj mask) (process-mask actor-pause)) + (go (method-of-object obj nav-enemy-die)) + ) + ((= v1-1 'punch) + (cond + ((logtest? (-> obj nav-enemy-flags) 32) + (logclear! (-> obj mask) (process-mask actor-pause)) + (go (method-of-object obj nav-enemy-die)) + ) + ((begin + (let ((s4-0 (new 'stack-no-clear 'vector))) + (let ((f30-0 (quaternion-xz-angle (target-rot)))) + (set-vector! + s4-0 + (* 24576.0 (sin f30-0)) + 0.0 + (* 24576.0 (cos f30-0)) + 1.0 + ) + ) + (vector+! s4-0 (-> obj collide-info trans) s4-0) + (set! (-> obj nav target-pos quad) (-> s4-0 quad)) + ) + (go lurkercrab-pushed) + (= s5-0 (-> obj incomming-attack-id)) + ) + 'push + ) + (else + #t + ) + ) + ) + ((logtest? (-> obj nav-enemy-flags) 32) + (logclear! (-> obj mask) (process-mask actor-pause)) + (go (method-of-object obj nav-enemy-die)) + ) + ((begin + (let ((s4-1 (new 'stack-no-clear 'vector))) + (vector-! s4-1 (-> obj collide-info trans) (target-pos 0)) + (vector-normalize! s4-1 24576.0) + (vector+! s4-1 (-> obj collide-info trans) s4-1) + (set! (-> obj nav target-pos quad) (-> s4-1 quad)) + ) + (go lurkercrab-pushed) + (= s5-0 (-> obj incomming-attack-id)) + ) + 'push + ) + (else + #t + ) ) ) ) @@ -1170,6 +1160,7 @@ nav-enemy-default-event-handler ) ;; definition for method 11 of type lurkercrab +;; INFO: Return type mismatch object vs none. (defmethod copy-defaults! lurkercrab ((obj lurkercrab) (arg0 res-lump)) (let ((s4-0 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 d22655f4cd..c538792a3a 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 @@ -141,22 +141,19 @@ (defstate drop-plat-idle (drop-plat) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (cond - ((= v1-0 'drop) - (logclear! (-> self mask) (process-mask actor-pause)) - (go drop-plat-drop) - ) - ((or (= v1-0 'touch) (= v1-0 'attack)) - (send-event *target* 'no-look-around 300) - (send-event - (ppointer->process (-> self parent)) - 'player-stepped - (-> self color) - ) - #f - ) - ) + (case arg2 + (('drop) + (logclear! (-> self mask) (process-mask actor-pause)) + (go drop-plat-drop) + ) + (('touch 'attack) + (send-event *target* 'no-look-around 300) + (send-event + (ppointer->process (-> self parent)) + 'player-stepped + (-> self color) + ) + #f ) ) ) @@ -212,11 +209,10 @@ (defstate drop-plat-spawn (drop-plat) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (if (= v1-0 'drop) - (go drop-plat-die) - ) - ) + (case arg2 + (('drop) + (go drop-plat-die) + ) ) ) :code @@ -251,11 +247,10 @@ (defstate drop-plat-rise (drop-plat) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (if (= v1-0 'drop) - (go drop-plat-drop) - ) - ) + (case arg2 + (('drop) + (go drop-plat-drop) + ) ) ) :code @@ -511,6 +506,7 @@ ) ;; definition for function drop-plat-init-by-other +;; INFO: Return type mismatch object vs none. ;; Used lq/sq (defbehavior drop-plat-init-by-other drop-plat @@ -770,11 +766,10 @@ (defstate citb-drop-plat-idle (citb-drop-plat) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (if (= v1-0 'trigger) - (go citb-drop-plat-active) - ) - ) + (case arg2 + (('trigger) + (go citb-drop-plat-active) + ) ) ) :code @@ -847,6 +842,7 @@ ) ;; definition for method 11 of type citb-drop-plat +;; INFO: Return type mismatch object vs none. ;; Used lq/sq (defmethod copy-defaults! citb-drop-plat ((obj citb-drop-plat) (arg0 res-lump)) (set! (-> obj root) (new 'process 'trsqv)) 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 ee9ce6aab3..6d5b7bd182 100644 --- a/test/decompiler/reference/levels/common/babak-with-cannon_REF.gc +++ b/test/decompiler/reference/levels/common/babak-with-cannon_REF.gc @@ -683,6 +683,7 @@ nav-enemy-default-event-handler ) ;; definition for method 11 of type babak-with-cannon +;; INFO: Return type mismatch object vs none. (defmethod copy-defaults! babak-with-cannon diff --git a/test/decompiler/reference/levels/common/basebutton_REF.gc b/test/decompiler/reference/levels/common/basebutton_REF.gc index ab87fb1c40..41966512da 100644 --- a/test/decompiler/reference/levels/common/basebutton_REF.gc +++ b/test/decompiler/reference/levels/common/basebutton_REF.gc @@ -111,49 +111,42 @@ :virtual #t :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (cond - ((= v1-0 'attack) - (case (-> arg3 param 1) - (('flop) - (TODO-RENAME-29 - self - (-> self event-going-down) - (-> self notify-actor) - ) - (sound-play-by-name - (static-sound-name "silo-button") - (new-sound-id) - 1024 - 0 - 0 - (the-as uint 1) - (the-as vector #t) - ) - (go-virtual basebutton-going-down) - ) - ) - ) - ((= v1-0 'trigger) - (sound-play-by-name - (static-sound-name "silo-button") - (new-sound-id) - 1024 - 0 - 0 - (the-as uint 1) - (the-as vector #t) - ) - (go-virtual basebutton-going-down) - ) - ((= v1-0 'move-to) - (move-to-vec-or-quat! - self - (the-as vector (-> arg3 param 0)) - (the-as quaternion (-> arg3 param 1)) - ) - ) - ) + (case arg2 + (('attack) + (case (-> arg3 param 1) + (('flop) + (TODO-RENAME-29 self (-> self event-going-down) (-> self notify-actor)) + (sound-play-by-name + (static-sound-name "silo-button") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + (go-virtual basebutton-going-down) + ) + ) + ) + (('trigger) + (sound-play-by-name + (static-sound-name "silo-button") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + (go-virtual basebutton-going-down) + ) + (('move-to) + (move-to-vec-or-quat! + self + (the-as vector (-> arg3 param 0)) + (the-as quaternion (-> arg3 param 1)) + ) ) ) ) @@ -188,28 +181,25 @@ :virtual #t :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (cond - ((= v1-0 'untrigger) - (sound-play-by-name - (static-sound-name "silo-button") - (new-sound-id) - 1024 - 0 - 0 - (the-as uint 1) - (the-as vector #t) - ) - (go-virtual basebutton-going-up) - ) - ((= v1-0 'move-to) - (move-to-vec-or-quat! - self - (the-as vector (-> arg3 param 0)) - (the-as quaternion (-> arg3 param 1)) - ) - ) - ) + (case arg2 + (('untrigger) + (sound-play-by-name + (static-sound-name "silo-button") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + (go-virtual basebutton-going-up) + ) + (('move-to) + (move-to-vec-or-quat! + self + (the-as vector (-> arg3 param 0)) + (the-as quaternion (-> arg3 param 1)) + ) ) ) ) @@ -270,28 +260,25 @@ :virtual #t :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (cond - ((= v1-0 'untrigger) - (sound-play-by-name - (static-sound-name "silo-button") - (new-sound-id) - 1024 - 0 - 0 - (the-as uint 1) - (the-as vector #t) - ) - (go-virtual basebutton-going-up) - ) - ((= v1-0 'move-to) - (move-to-vec-or-quat! - self - (the-as vector (-> arg3 param 0)) - (the-as quaternion (-> arg3 param 1)) - ) - ) - ) + (case arg2 + (('untrigger) + (sound-play-by-name + (static-sound-name "silo-button") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + (go-virtual basebutton-going-up) + ) + (('move-to) + (move-to-vec-or-quat! + self + (the-as vector (-> arg3 param 0)) + (the-as quaternion (-> arg3 param 1)) + ) ) ) ) @@ -354,28 +341,25 @@ :virtual #t :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (cond - ((= v1-0 'move-to) - (move-to-vec-or-quat! - self - (the-as vector (-> arg3 param 0)) - (the-as quaternion (-> arg3 param 1)) - ) - ) - ((= v1-0 'trigger) - (sound-play-by-name - (static-sound-name "silo-button") - (new-sound-id) - 1024 - 0 - 0 - (the-as uint 1) - (the-as vector #t) - ) - (go-virtual basebutton-going-down) - ) - ) + (case arg2 + (('move-to) + (move-to-vec-or-quat! + self + (the-as vector (-> arg3 param 0)) + (the-as quaternion (-> arg3 param 1)) + ) + ) + (('trigger) + (sound-play-by-name + (static-sound-name "silo-button") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + (go-virtual basebutton-going-down) ) ) ) @@ -611,6 +595,7 @@ ) ;; definition for method 11 of type basebutton +;; INFO: Return type mismatch object vs none. (defmethod copy-defaults! basebutton ((obj basebutton) (arg0 res-lump)) (reset! obj) (set! (-> obj spawned-by-other?) #f) @@ -664,6 +649,7 @@ ) ;; definition for function basebutton-init-by-other +;; INFO: Return type mismatch object vs none. ;; Used lq/sq (defbehavior basebutton-init-by-other basebutton diff --git a/test/decompiler/reference/levels/common/baseplat_REF.gc b/test/decompiler/reference/levels/common/baseplat_REF.gc index 67b988cb83..f7f38a8814 100644 --- a/test/decompiler/reference/levels/common/baseplat_REF.gc +++ b/test/decompiler/reference/levels/common/baseplat_REF.gc @@ -526,6 +526,7 @@ eco-door-event-handler ) ;; definition for method 11 of type eco-door +;; INFO: Return type mismatch object vs none. (defmethod copy-defaults! eco-door ((obj eco-door) (arg0 res-lump)) (TODO-RENAME-24 obj) (process-drawable-from-entity! obj arg0) diff --git a/test/decompiler/reference/levels/common/battlecontroller_REF.gc b/test/decompiler/reference/levels/common/battlecontroller_REF.gc index 23d3725a0b..9a390c7dc5 100644 --- a/test/decompiler/reference/levels/common/battlecontroller_REF.gc +++ b/test/decompiler/reference/levels/common/battlecontroller_REF.gc @@ -143,48 +143,36 @@ ) ;; definition for function battlecontroller-default-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? ;; Used lq/sq (defbehavior battlecontroller-default-event-handler battlecontroller ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (cond - ((= v1-0 'child-die) - (+! (-> self die-count) 1) - (when (= (-> self die-count) (-> self max-spawn-count)) - (let ((v1-4 (the-as process-drawable arg0))) - (when v1-4 - (set! - (-> self final-pickup-spawn-point quad) - (-> v1-4 root trans quad) - ) - (case (-> self final-pickup-type) - (((pickup-type fuel-cell)) - #f - ) - (else - (set! - (-> v1-4 fact pickup-type) - (-> self final-pickup-type) - ) - (set! (-> v1-4 fact pickup-amount) 1.0) - (let ((f0-1 0.0)) - (set! (-> v1-4 fact pickup-spawn-amount) f0-1) - f0-1 - ) - ) - ) - ) - ) - ) - ) - ((= v1-0 'trigger) - (go-virtual battlecontroller-die) - ) - ) + (case arg2 + (('child-die) + (+! (-> self die-count) 1) + (when (= (-> self die-count) (-> self max-spawn-count)) + (let ((v1-4 (the-as process-drawable arg0))) + (when v1-4 + (set! (-> self final-pickup-spawn-point quad) (-> v1-4 root trans quad)) + (case (-> self final-pickup-type) + (((pickup-type fuel-cell)) + #f + ) + (else + (set! (-> v1-4 fact pickup-type) (-> self final-pickup-type)) + (set! (-> v1-4 fact pickup-amount) 1.0) + (let ((f0-1 0.0)) + (set! (-> v1-4 fact pickup-spawn-amount) f0-1) + f0-1 + ) + ) + ) + ) + ) + ) + ) + (('trigger) + (go-virtual battlecontroller-die) ) ) ) diff --git a/test/decompiler/reference/levels/common/blocking-plane_REF.gc b/test/decompiler/reference/levels/common/blocking-plane_REF.gc index d4a68471b3..163285621c 100644 --- a/test/decompiler/reference/levels/common/blocking-plane_REF.gc +++ b/test/decompiler/reference/levels/common/blocking-plane_REF.gc @@ -49,6 +49,7 @@ ) ;; definition for function blocking-plane-init-by-other +;; INFO: Return type mismatch object vs none. ;; Used lq/sq (defbehavior blocking-plane-init-by-other blocking-plane @@ -179,7 +180,3 @@ (none) ) ) - - - - diff --git a/test/decompiler/reference/levels/common/nav-enemy_REF.gc b/test/decompiler/reference/levels/common/nav-enemy_REF.gc index 79a1b56a40..1a3a6f802e 100644 --- a/test/decompiler/reference/levels/common/nav-enemy_REF.gc +++ b/test/decompiler/reference/levels/common/nav-enemy_REF.gc @@ -202,25 +202,19 @@ ) ;; definition for method 43 of type nav-enemy -;; INFO: Return type mismatch none vs object. -;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? (defmethod dummy-43 nav-enemy ((obj nav-enemy) (arg0 process) (arg1 event-message-block)) - (the-as object (cond - ((logtest? (-> obj nav-enemy-flags) 32) - (send-event arg0 'get-attack-count 1) - (logclear! - (-> obj mask) - (process-mask actor-pause attackable) - ) - (go (method-of-object obj nav-enemy-die)) - ) - (else - (dummy-44 obj arg0 arg1) - ) - ) + (cond + ((logtest? (-> obj nav-enemy-flags) 32) + (send-event arg0 'get-attack-count 1) + (logclear! (-> obj mask) (process-mask actor-pause attackable)) + (go (method-of-object obj nav-enemy-die)) + ) + (else + (dummy-44 obj arg0 arg1) + ) ) ) @@ -250,6 +244,7 @@ ) ;; definition for function nav-enemy-default-event-handler +;; INFO: Return type mismatch object vs none. ;; Used lq/sq (defbehavior nav-enemy-default-event-handler nav-enemy @@ -3110,6 +3105,7 @@ nav-enemy-default-event-handler ) ;; definition for function nav-enemy-init-by-other +;; INFO: Return type mismatch object vs none. ;; Used lq/sq (defbehavior nav-enemy-init-by-other nav-enemy diff --git a/test/decompiler/reference/levels/common/plat-button_REF.gc b/test/decompiler/reference/levels/common/plat-button_REF.gc index 1119c7e6dc..6e9fc2ffad 100644 --- a/test/decompiler/reference/levels/common/plat-button_REF.gc +++ b/test/decompiler/reference/levels/common/plat-button_REF.gc @@ -92,29 +92,28 @@ :virtual #t :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (when (= v1-0 'touch) - (when (can-activate? self) - (if - (and - ((method-of-type touching-shapes-entry prims-touching?) - (the-as touching-shapes-entry (-> arg3 param 0)) - (-> self root-override) - (the-as uint 1) - ) - (or - (not (-> self should-grab-player?)) - (let ((v0-3 (process-grab? *target*))) - (set! (-> self grab-player?) v0-3) - v0-3 - ) - ) - ) - (go-virtual plat-button-pressed) - ) - ) - ) - ) + (case arg2 + (('touch) + (when (can-activate? self) + (if + (and + ((method-of-type touching-shapes-entry prims-touching?) + (the-as touching-shapes-entry (-> arg3 param 0)) + (-> self root-override) + (the-as uint 1) + ) + (or + (not (-> self should-grab-player?)) + (let ((v0-3 (process-grab? *target*))) + (set! (-> self grab-player?) v0-3) + v0-3 + ) + ) + ) + (go-virtual plat-button-pressed) + ) + ) + ) ) ) :code diff --git a/test/decompiler/reference/levels/common/plat_REF.gc b/test/decompiler/reference/levels/common/plat_REF.gc index 6684013e41..cde7aa0f6e 100644 --- a/test/decompiler/reference/levels/common/plat_REF.gc +++ b/test/decompiler/reference/levels/common/plat_REF.gc @@ -379,6 +379,7 @@ ) ;; definition for method 11 of type plat +;; INFO: Return type mismatch object vs none. (defmethod copy-defaults! plat ((obj plat) (arg0 res-lump)) (set! (-> obj mask) (logior (process-mask platform) (-> obj mask))) (dummy-24 obj) diff --git a/test/decompiler/reference/levels/common/sharkey_REF.gc b/test/decompiler/reference/levels/common/sharkey_REF.gc index 23222cf012..6c3495931b 100644 --- a/test/decompiler/reference/levels/common/sharkey_REF.gc +++ b/test/decompiler/reference/levels/common/sharkey_REF.gc @@ -1219,6 +1219,7 @@ nav-enemy-default-event-handler ) ;; definition for method 11 of type sharkey +;; INFO: Return type mismatch object vs none. ;; Used lq/sq (defmethod copy-defaults! sharkey ((obj sharkey) (arg0 res-lump)) (set! (-> obj scale) (res-lump-float arg0 'scale :default 1.0)) diff --git a/test/decompiler/reference/levels/finalboss/final-door_REF.gc b/test/decompiler/reference/levels/finalboss/final-door_REF.gc index f3539732d8..2f2ba320ce 100644 --- a/test/decompiler/reference/levels/finalboss/final-door_REF.gc +++ b/test/decompiler/reference/levels/finalboss/final-door_REF.gc @@ -121,12 +121,11 @@ :virtual #t :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (when (= v1-0 'open) - enter-state - (go-virtual open) - ) - ) + (case arg2 + (('open) + enter-state + (go-virtual open) + ) ) ) :code @@ -267,6 +266,7 @@ ) ;; definition for method 11 of type final-door +;; INFO: Return type mismatch object vs none. (defmethod copy-defaults! final-door ((obj final-door) (arg0 res-lump)) (let ((s4-0 @@ -557,6 +557,7 @@ ) ;; definition for function powercellalt-init-by-other +;; INFO: Return type mismatch object vs none. ;; Used lq/sq (defbehavior powercellalt-init-by-other powercellalt diff --git a/test/decompiler/reference/levels/finalboss/green-eco-lurker_REF.gc b/test/decompiler/reference/levels/finalboss/green-eco-lurker_REF.gc index 436a49b7c7..077bcacb66 100644 --- a/test/decompiler/reference/levels/finalboss/green-eco-lurker_REF.gc +++ b/test/decompiler/reference/levels/finalboss/green-eco-lurker_REF.gc @@ -1261,6 +1261,7 @@ ) ;; definition for function green-eco-lurker-init-by-other +;; INFO: Return type mismatch object vs none. ;; Used lq/sq (defbehavior green-eco-lurker-init-by-other green-eco-lurker @@ -1343,6 +1344,7 @@ ) ;; definition for function green-eco-lurker-gen-init-by-other +;; INFO: Return type mismatch object vs none. ;; Used lq/sq (defbehavior green-eco-lurker-gen-init-by-other green-eco-lurker-gen diff --git a/test/decompiler/reference/levels/finalboss/light-eco_REF.gc b/test/decompiler/reference/levels/finalboss/light-eco_REF.gc index 9c096c5f68..2f3357f33b 100644 --- a/test/decompiler/reference/levels/finalboss/light-eco_REF.gc +++ b/test/decompiler/reference/levels/finalboss/light-eco_REF.gc @@ -574,22 +574,20 @@ ) ;; 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) - (send-event - (ppointer->process (-> self parent)) - 'trigger - (-> self angle-bit) - ) - (go light-eco-child-grabbed) - ) - ) - ) + (case arg2 + (('touch 'attack) + (when (= (-> arg0 type) target) + (send-event + (ppointer->process (-> self parent)) + 'trigger + (-> self angle-bit) + ) + (go light-eco-child-grabbed) + ) + ) ) ) @@ -826,6 +824,7 @@ ) ;; definition for function light-eco-child-init-by-other +;; INFO: Return type mismatch object vs none. ;; Used lq/sq (defbehavior light-eco-child-init-by-other light-eco-child @@ -1010,54 +1009,51 @@ ) ;; definition for function light-eco-mother-default-event-handler -;; INFO: Return type mismatch none vs object. +;; INFO: Return type mismatch object vs int. (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 - ) + (the-as int (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) ) - ) - ) - ((= 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 - ) - ) - ) + ) + (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)) - ) - ) + ) + ) + ) + ) + ) + ((= v1-0 'beam-off) + (the-as int (go light-eco-mother-discipate)) + ) + ) ) ) ) @@ -1202,6 +1198,7 @@ ) ;; definition for function light-eco-mother-init-by-other +;; INFO: Return type mismatch object vs none. ;; Used lq/sq (defbehavior light-eco-mother-init-by-other light-eco-mother diff --git a/test/decompiler/reference/levels/finalboss/robotboss-misc_REF.gc b/test/decompiler/reference/levels/finalboss/robotboss-misc_REF.gc index 5aba79d817..d3fa8e7bdb 100644 --- a/test/decompiler/reference/levels/finalboss/robotboss-misc_REF.gc +++ b/test/decompiler/reference/levels/finalboss/robotboss-misc_REF.gc @@ -469,6 +469,7 @@ ) ;; definition for method 11 of type ecoclaw +;; INFO: Return type mismatch object vs none. (defmethod copy-defaults! ecoclaw ((obj ecoclaw) (arg0 res-lump)) (set! (-> obj root) (new 'process 'trsqv)) (process-drawable-from-entity! obj arg0) @@ -527,18 +528,15 @@ :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) - ) - ) + (case arg2 + (('open) + (let ((f0-0 (the-as float (-> arg3 param 0)))) + (set! (-> self part-opened) f0-0) + f0-0 + ) + ) + (('hide) + (go-virtual hidden) ) ) ) @@ -625,6 +623,7 @@ ) ;; definition for method 11 of type silodoor +;; INFO: Return type mismatch object vs none. (defmethod copy-defaults! silodoor ((obj silodoor) (arg0 res-lump)) (let ((s4-0 @@ -897,6 +896,7 @@ ) ;; definition for function finalbosscam-init-by-other +;; INFO: Return type mismatch object vs 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) diff --git a/test/decompiler/reference/levels/finalboss/robotboss-weapon_REF.gc b/test/decompiler/reference/levels/finalboss/robotboss-weapon_REF.gc index 1eefa5f868..f37a467494 100644 --- a/test/decompiler/reference/levels/finalboss/robotboss-weapon_REF.gc +++ b/test/decompiler/reference/levels/finalboss/robotboss-weapon_REF.gc @@ -406,19 +406,18 @@ ) ;; 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) - ) - ) + (case arg2 + (('touch 'attack) + (go darkecobomb-explode #t) + ) ) ) ;; definition for function darkecobomb-explode-if-player-high-enough +;; INFO: Return type mismatch object vs none. (defbehavior darkecobomb-explode-if-player-high-enough darkecobomb () (if (and @@ -836,6 +835,7 @@ ) ;; definition for function darkecobomb-init-by-other +;; INFO: Return type mismatch object vs none. ;; Used lq/sq (defbehavior darkecobomb-init-by-other darkecobomb @@ -1016,6 +1016,7 @@ ) ;; definition for function greenshot-init-by-other +;; INFO: Return type mismatch object vs none. ;; Used lq/sq (defbehavior greenshot-init-by-other greenshot @@ -1292,15 +1293,13 @@ ) ;; 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) - ) - ) + (case arg2 + (('attack 'touch) + (go redshot-explode) + ) ) ) @@ -1383,6 +1382,7 @@ ) ;; definition for function redshot-init-by-other +;; INFO: Return type mismatch object vs none. ;; Used lq/sq (defbehavior redshot-init-by-other redshot @@ -1537,6 +1537,7 @@ ) ;; definition for function yellowshot-init-by-other +;; INFO: Return type mismatch object vs none. ;; Used lq/sq (defbehavior yellowshot-init-by-other yellowshot diff --git a/test/decompiler/reference/levels/finalboss/robotboss_REF.gc b/test/decompiler/reference/levels/finalboss/robotboss_REF.gc index 98c614c053..77290ecc27 100644 --- a/test/decompiler/reference/levels/finalboss/robotboss_REF.gc +++ b/test/decompiler/reference/levels/finalboss/robotboss_REF.gc @@ -5706,6 +5706,7 @@ ) ;; definition for method 11 of type robotboss +;; INFO: Return type mismatch object vs none. ;; Used lq/sq (defmethod copy-defaults! robotboss ((obj robotboss) (arg0 res-lump)) (stack-size-set! (-> obj main-thread) 512) diff --git a/test/decompiler/reference/levels/flut_common/flutflut_REF.gc b/test/decompiler/reference/levels/flut_common/flutflut_REF.gc index 4c214808a2..9abb7e3cfc 100644 --- a/test/decompiler/reference/levels/flut_common/flutflut_REF.gc +++ b/test/decompiler/reference/levels/flut_common/flutflut_REF.gc @@ -509,6 +509,7 @@ ) ;; definition for method 11 of type flutflut +;; INFO: Return type mismatch object vs none. (defmethod copy-defaults! flutflut ((obj flutflut) (arg0 res-lump)) (let ((s4-0 diff --git a/test/decompiler/reference/levels/jungle/bouncer_REF.gc b/test/decompiler/reference/levels/jungle/bouncer_REF.gc index 7271529545..ddb80445b1 100644 --- a/test/decompiler/reference/levels/jungle/bouncer_REF.gc +++ b/test/decompiler/reference/levels/jungle/bouncer_REF.gc @@ -46,64 +46,55 @@ (defstate bouncer-wait (springbox) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (cond - ((= v1-0 'bonk) - (let ((a1-3 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-3 from) self) - (set! (-> a1-3 num-params) 3) - (set! (-> a1-3 message) 'jump) - (set! - (-> a1-3 param 0) - (the-as uint (-> self spring-height)) - ) - (set! - (-> a1-3 param 1) - (the-as uint (-> self spring-height)) - ) - (set! (-> a1-3 param 2) (the-as uint #f)) - (when (send-event-function arg0 a1-3) - (sound-play-by-name - (static-sound-name "trampoline") - (new-sound-id) - 1024 - 0 - 0 - (the-as uint 1) - (the-as vector #t) - ) - (go bouncer-fire) - ) - ) - ) - ((= v1-0 'touch) - (if - (not - (or - (= (-> self next-state name) 'bouncer-smush) - (= (-> self next-state name) 'bouncer-fire) - ) - ) - (go bouncer-smush) - ) - ) - ((= v1-0 'attack) - (when - (and - (= (-> arg3 param 1) 'flop) - (send-event - arg0 - 'jump - (-> self spring-height) - (-> self spring-height) - #f - ) - ) - (go bouncer-fire) - #f - ) - ) - ) + (case arg2 + (('bonk) + (let ((a1-3 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-3 from) self) + (set! (-> a1-3 num-params) 3) + (set! (-> a1-3 message) 'jump) + (set! (-> a1-3 param 0) (the-as uint (-> self spring-height))) + (set! (-> a1-3 param 1) (the-as uint (-> self spring-height))) + (set! (-> a1-3 param 2) (the-as uint #f)) + (when (send-event-function arg0 a1-3) + (sound-play-by-name + (static-sound-name "trampoline") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + (go bouncer-fire) + ) + ) + ) + (('touch) + (if + (not + (or + (= (-> self next-state name) 'bouncer-smush) + (= (-> self next-state name) 'bouncer-fire) + ) + ) + (go bouncer-smush) + ) + ) + (('attack) + (when + (and + (= (-> arg3 param 1) 'flop) + (send-event + arg0 + 'jump + (-> self spring-height) + (-> self spring-height) + #f + ) + ) + (go bouncer-fire) + #f + ) ) ) ) @@ -245,6 +236,7 @@ ) ;; definition for method 11 of type springbox +;; INFO: Return type mismatch object vs none. (defmethod copy-defaults! springbox ((obj springbox) (arg0 res-lump)) (let ((s4-0 diff --git a/test/decompiler/reference/levels/jungle/fisher-JUN_REF.gc b/test/decompiler/reference/levels/jungle/fisher-JUN_REF.gc index 4d380e6574..eeadaf9b06 100644 --- a/test/decompiler/reference/levels/jungle/fisher-JUN_REF.gc +++ b/test/decompiler/reference/levels/jungle/fisher-JUN_REF.gc @@ -1447,6 +1447,7 @@ ) ;; definition for function fisher-fish-init-by-other +;; INFO: Return type mismatch object vs none. (defbehavior fisher-fish-init-by-other fisher-fish ((arg0 symbol) (arg1 float) (arg2 float)) @@ -2255,44 +2256,35 @@ (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) - (send-event *target* 'bounce) - (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 - ) - ) + (local-vars (v0-2 object)) + (case arg2 + (('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 (+ (-> self missed) (-> arg3 param 0))) + (set! (-> self missed) (the-as int v0-2)) + v0-2 + ) + (('fisher-fish-caught) + (send-event *target* 'bounce) + (set! v0-2 (+ (-> self caught) (-> arg3 param 0))) + (set! (-> self caught) (the-as int v0-2)) + v0-2 + ) + (('deadly) + (go fisher-done) + ) + (('bad) + (set! v0-2 (seekl (-> self caught) 0 10)) + (set! (-> self caught) (the-as int v0-2)) + v0-2 ) ) ) diff --git a/test/decompiler/reference/levels/jungle/junglefish_REF.gc b/test/decompiler/reference/levels/jungle/junglefish_REF.gc index 9d1798918f..d05a02110a 100644 --- a/test/decompiler/reference/levels/jungle/junglefish_REF.gc +++ b/test/decompiler/reference/levels/jungle/junglefish_REF.gc @@ -619,6 +619,7 @@ nav-enemy-default-event-handler ) ;; definition for method 11 of type junglefish +;; INFO: Return type mismatch object vs none. (defmethod copy-defaults! junglefish ((obj junglefish) (arg0 res-lump)) (let ((s4-0 diff --git a/test/decompiler/reference/levels/jungleb/aphid_REF.gc b/test/decompiler/reference/levels/jungleb/aphid_REF.gc index c4a6851088..947ea28d82 100644 --- a/test/decompiler/reference/levels/jungleb/aphid_REF.gc +++ b/test/decompiler/reference/levels/jungleb/aphid_REF.gc @@ -54,25 +54,19 @@ ) ;; definition for method 43 of type aphid -;; INFO: Return type mismatch none vs object. -;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? (defmethod dummy-43 aphid ((obj aphid) (arg0 process) (arg1 event-message-block)) - (the-as object (cond - ((or - (logtest? (-> obj nav-enemy-flags) 32) - (= arg0 (ppointer->process (-> obj parent))) - ) - (send-event arg0 'get-attack-count 1) - (logclear! - (-> obj mask) - (process-mask actor-pause attackable) - ) - (go (method-of-object obj nav-enemy-die)) - ) - (else - (dummy-44 obj arg0 arg1) - ) - ) + (cond + ((or + (logtest? (-> obj nav-enemy-flags) 32) + (= arg0 (ppointer->process (-> obj parent))) + ) + (send-event arg0 'get-attack-count 1) + (logclear! (-> obj mask) (process-mask actor-pause attackable)) + (go (method-of-object obj nav-enemy-die)) + ) + (else + (dummy-44 obj arg0 arg1) + ) ) ) @@ -647,6 +641,7 @@ ) ;; definition for function aphid-init-by-other +;; INFO: Return type mismatch object vs none. ;; Used lq/sq (defbehavior aphid-init-by-other aphid diff --git a/test/decompiler/reference/levels/jungleb/plat-flip_REF.gc b/test/decompiler/reference/levels/jungleb/plat-flip_REF.gc index c462b4f23a..bee24f8d15 100644 --- a/test/decompiler/reference/levels/jungleb/plat-flip_REF.gc +++ b/test/decompiler/reference/levels/jungleb/plat-flip_REF.gc @@ -225,6 +225,7 @@ ) ;; definition for method 11 of type plat-flip +;; INFO: Return type mismatch object vs none. ;; Used lq/sq (defmethod copy-defaults! plat-flip ((obj plat-flip) (arg0 res-lump)) (local-vars (sv-16 res-tag) (sv-32 res-tag) (sv-48 res-tag)) diff --git a/test/decompiler/reference/levels/maincave/baby-spider_REF.gc b/test/decompiler/reference/levels/maincave/baby-spider_REF.gc index b56744490b..ade8aeac9c 100644 --- a/test/decompiler/reference/levels/maincave/baby-spider_REF.gc +++ b/test/decompiler/reference/levels/maincave/baby-spider_REF.gc @@ -272,33 +272,30 @@ ) ;; definition for method 44 of type baby-spider -;; INFO: Return type mismatch none vs object. (defmethod dummy-44 baby-spider ((obj baby-spider) (arg0 process) (arg1 event-message-block)) - (the-as - object - (when - ((method-of-type touching-shapes-entry prims-touching?) + (when + ((method-of-type touching-shapes-entry prims-touching?) + (the-as touching-shapes-entry (-> arg1 param 0)) + (-> obj collide-info) + (the-as uint 1) + ) + (if + (nav-enemy-send-attack + arg0 (the-as touching-shapes-entry (-> arg1 param 0)) - (-> obj collide-info) - (the-as uint 1) - ) - (if - (nav-enemy-send-attack - arg0 - (the-as touching-shapes-entry (-> arg1 param 0)) - 'generic - ) - (go (method-of-object obj nav-enemy-victory)) + 'generic ) + (go (method-of-object obj nav-enemy-victory)) ) ) ) ;; definition for function baby-spider-default-event-handler ;; INFO: Return type mismatch none vs object. +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? (defbehavior baby-spider-default-event-handler baby-spider ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) @@ -1213,6 +1210,7 @@ baby-spider-default-event-handler ) ;; definition for function baby-spider-init-by-other +;; INFO: Return type mismatch object vs none. ;; Used lq/sq (defbehavior baby-spider-init-by-other baby-spider @@ -1264,6 +1262,7 @@ baby-spider-default-event-handler ) ;; definition for method 11 of type baby-spider +;; INFO: Return type mismatch object vs none. (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) 600) diff --git a/test/decompiler/reference/levels/maincave/spiderwebs_REF.gc b/test/decompiler/reference/levels/maincave/spiderwebs_REF.gc index e05347aa79..5c532a9b78 100644 --- a/test/decompiler/reference/levels/maincave/spiderwebs_REF.gc +++ b/test/decompiler/reference/levels/maincave/spiderwebs_REF.gc @@ -74,76 +74,62 @@ ) ;; definition for function spiderwebs-default-event-handler -;; INFO: Return type mismatch none vs object. -;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? (defbehavior spiderwebs-default-event-handler spiderwebs ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (cond - ((= v1-0 'bonk) - (let ((a1-1 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-1 from) self) - (set! (-> a1-1 num-params) 3) - (set! (-> a1-1 message) 'jump) - (set! - (-> a1-1 param 0) - (the-as uint (-> self spring-height)) - ) - (set! - (-> a1-1 param 1) - (the-as uint (-> self spring-height)) - ) - (set! (-> a1-1 param 2) (the-as uint *spider-jump-mods*)) - (if (send-event-function arg0 a1-1) - (go spiderwebs-bounce) - ) - ) - ) - ((= v1-0 'touch) - (when (= (-> arg0 type) target) - (let* ((a0-8 (target-pos 0)) - (f1-1 (- (-> a0-8 y) (-> self root trans y))) - ) - (if - (and - (>= 2048.0 (fabs f1-1)) - (and - (>= - 13516.8 - (vector-vector-distance a0-8 (-> self root trans)) - ) - (send-event - arg0 - 'jump - (-> self spring-height) - (-> self spring-height) - *spider-jump-mods* - ) - ) - ) - (go spiderwebs-bounce) - ) - ) - ) - ) - ((= v1-0 'attack) - (if - (and - (= (-> arg3 param 1) 'flop) - (send-event - arg0 - 'jump - (-> self spring-height) - (-> self spring-height) - *spider-jump-mods* - ) - ) - (go spiderwebs-bounce) - ) - #f - ) - ) + (case arg2 + (('bonk) + (let ((a1-1 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-1 from) self) + (set! (-> a1-1 num-params) 3) + (set! (-> a1-1 message) 'jump) + (set! (-> a1-1 param 0) (the-as uint (-> self spring-height))) + (set! (-> a1-1 param 1) (the-as uint (-> self spring-height))) + (set! (-> a1-1 param 2) (the-as uint *spider-jump-mods*)) + (if (send-event-function arg0 a1-1) + (go spiderwebs-bounce) + ) + ) + ) + (('touch) + (when (= (-> arg0 type) target) + (let* ((a0-8 (target-pos 0)) + (f1-1 (- (-> a0-8 y) (-> self root trans y))) + ) + (if + (and + (>= 2048.0 (fabs f1-1)) + (and + (>= 13516.8 (vector-vector-distance a0-8 (-> self root trans))) + (send-event + arg0 + 'jump + (-> self spring-height) + (-> self spring-height) + *spider-jump-mods* + ) + ) + ) + (go spiderwebs-bounce) + ) + ) + ) + ) + (('attack) + (if + (and + (= (-> arg3 param 1) 'flop) + (send-event + arg0 + 'jump + (-> self spring-height) + (-> self spring-height) + *spider-jump-mods* + ) + ) + (go spiderwebs-bounce) + ) + #f ) ) ) @@ -264,6 +250,7 @@ ) ;; definition for method 11 of type spiderwebs +;; INFO: Return type mismatch object vs none. (defmethod copy-defaults! spiderwebs ((obj spiderwebs) (arg0 res-lump)) (set! (-> obj mask) (logior (process-mask platform) (-> obj mask))) (let diff --git a/test/decompiler/reference/levels/misty/misty-conveyor_REF.gc b/test/decompiler/reference/levels/misty/misty-conveyor_REF.gc index 6f9f68fe50..c22e6975ff 100644 --- a/test/decompiler/reference/levels/misty/misty-conveyor_REF.gc +++ b/test/decompiler/reference/levels/misty/misty-conveyor_REF.gc @@ -301,11 +301,10 @@ (defstate keg-on-paddle (keg) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (if (= v1-0 'detach) - (go keg-paddle-to-path) - ) - ) + (case arg2 + (('detach) + (go keg-paddle-to-path) + ) ) ) :code @@ -690,6 +689,7 @@ ) ;; definition for function keg-init-by-other +;; INFO: Return type mismatch object vs none. ;; Used lq/sq (defbehavior keg-init-by-other keg ((arg0 keg) (arg1 int)) (stack-size-set! (-> self main-thread) 512) @@ -944,6 +944,7 @@ ) ;; definition for function keg-conveyor-paddle-init-by-other +;; INFO: Return type mismatch object vs none. ;; Used lq/sq (defbehavior keg-conveyor-paddle-init-by-other keg-conveyor-paddle @@ -1017,6 +1018,7 @@ ) ;; definition for method 11 of type keg-conveyor +;; INFO: Return type mismatch object vs none. ;; WARN: Expression building failed: Function (method 11 keg-conveyor) has a return type of none, but the expression builder found a return statement. ;; Used lq/sq (defmethod copy-defaults! keg-conveyor ((obj keg-conveyor) (arg0 res-lump)) diff --git a/test/decompiler/reference/levels/misty/misty-teetertotter_REF.gc b/test/decompiler/reference/levels/misty/misty-teetertotter_REF.gc index b943459b38..93b3fd1c80 100644 --- a/test/decompiler/reference/levels/misty/misty-teetertotter_REF.gc +++ b/test/decompiler/reference/levels/misty/misty-teetertotter_REF.gc @@ -75,34 +75,29 @@ (defstate teetertotter-idle (teetertotter) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (cond - ((= v1-0 'attack) - (case (-> arg3 param 1) - (('flop) - (when (target-on-end-of-teetertotter? self) - (set! (-> self in-launch-window) #f) - (increment-success-for-hint - (the-as level-hint-control 676) - ) - (go teetertotter-launch) - ) - ) - ) - ) - ((= v1-0 'bonk) - (when (target-on-end-of-teetertotter? self) - (level-hint-spawn - (game-text-id misty-teetertotter-bonk-dax-tutorial) - "sksp0070" - (the-as entity #f) - *entity-pool* - (game-task none) - ) - (go teetertotter-bend) - ) - ) - ) + (case arg2 + (('attack) + (case (-> arg3 param 1) + (('flop) + (when (target-on-end-of-teetertotter? self) + (set! (-> self in-launch-window) #f) + (increment-success-for-hint (the-as level-hint-control 676)) + (go teetertotter-launch) + ) + ) + ) + ) + (('bonk) + (when (target-on-end-of-teetertotter? self) + (level-hint-spawn + (game-text-id misty-teetertotter-bonk-dax-tutorial) + "sksp0070" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (go teetertotter-bend) + ) ) ) ) @@ -299,6 +294,7 @@ ) ;; definition for method 11 of type teetertotter +;; INFO: Return type mismatch object vs none. (defmethod copy-defaults! teetertotter ((obj teetertotter) (arg0 res-lump)) (let ((s4-0 diff --git a/test/decompiler/reference/levels/misty/misty-warehouse_REF.gc b/test/decompiler/reference/levels/misty/misty-warehouse_REF.gc index 9da630f0f0..d8d98723e9 100644 --- a/test/decompiler/reference/levels/misty/misty-warehouse_REF.gc +++ b/test/decompiler/reference/levels/misty/misty-warehouse_REF.gc @@ -44,15 +44,12 @@ (defstate silostep-idle (silostep) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (cond - ((= v1-0 'trigger) - (go silostep-camera) - ) - ((= v1-0 'trigger-rise) - (go silostep-rise #f) - ) - ) + (case arg2 + (('trigger) + (go silostep-camera) + ) + (('trigger-rise) + (go silostep-rise #f) ) ) ) @@ -216,6 +213,7 @@ ) ;; definition for method 11 of type silostep +;; INFO: Return type mismatch object vs none. (defmethod copy-defaults! silostep ((obj silostep) (arg0 res-lump)) (logior! (-> obj mask) (process-mask movie-subject)) (let diff --git a/test/decompiler/reference/levels/misty/muse_REF.gc b/test/decompiler/reference/levels/misty/muse_REF.gc index ae86023f3d..b0a4850845 100644 --- a/test/decompiler/reference/levels/misty/muse_REF.gc +++ b/test/decompiler/reference/levels/misty/muse_REF.gc @@ -258,15 +258,13 @@ ) ;; 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)) + (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)) + (go muse-caught) ) ;; failed to figure out what this is: @@ -917,6 +915,7 @@ nav-enemy-default-event-handler ) ;; definition for method 11 of type muse +;; INFO: Return type mismatch object vs none. ;; Used lq/sq (defmethod copy-defaults! muse ((obj muse) (arg0 res-lump)) (stack-size-set! (-> obj main-thread) 512) diff --git a/test/decompiler/reference/levels/ogre/flying-lurker_REF.gc b/test/decompiler/reference/levels/ogre/flying-lurker_REF.gc index 5b5bff45d9..5de8f4b0a4 100644 --- a/test/decompiler/reference/levels/ogre/flying-lurker_REF.gc +++ b/test/decompiler/reference/levels/ogre/flying-lurker_REF.gc @@ -506,12 +506,11 @@ (defstate plunger-lurker-idle (plunger-lurker) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (when (= v1-0 'plunge) - (logclear! (-> self mask) (process-mask actor-pause)) - (go plunger-lurker-plunge) - ) - ) + (case arg2 + (('plunge) + (logclear! (-> self mask) (process-mask actor-pause)) + (go plunger-lurker-plunge) + ) ) ) :trans @@ -596,6 +595,7 @@ ) ;; definition for method 11 of type plunger-lurker +;; INFO: Return type mismatch object vs none. (defmethod copy-defaults! plunger-lurker ((obj plunger-lurker) (arg0 res-lump)) (stack-size-set! (-> obj main-thread) 512) (let @@ -1287,98 +1287,93 @@ ) ;; definition for function flying-lurker-handler -;; INFO: Return type mismatch none vs object. (defbehavior flying-lurker-handler flying-lurker ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (when (= v1-0 'fly-away) - (when (-> self link next) - (entity-birth-no-kill (-> self link next)) - (let ((a1-1 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-1 from) self) - (set! (-> a1-1 num-params) 2) - (set! (-> a1-1 message) 'fly-away) - (set! - (-> a1-1 param 0) - (the-as uint (/ (the-as int (-> arg3 param 0)) 16)) - ) - (set! (-> a1-1 param 1) (-> arg3 param 1)) - (let ((t9-1 send-event-function) - (v1-11 (-> self link next)) - ) - (t9-1 (if v1-11 - (-> v1-11 extra process) - ) - a1-1 - ) - ) - ) - ) - (let* ((v1-14 (-> arg3 param 0)) - (a0-4 (-> arg3 param 1)) - (v1-15 (logand v1-14 3)) - ) - (set! (-> self rank) (the-as int v1-15)) - (cond - ((< 15 (the-as int a0-4)) - (cond - ((zero? v1-15) - (set! (-> self race-seconds) 33000.0) - ) - ((= v1-15 1) - (set! (-> self race-seconds) 34500.0) - ) - (else - (set! (-> self race-seconds) 36000.0) - ) - ) - ) - ((< 10 (the-as int a0-4)) - (cond - ((zero? v1-15) - (set! (-> self race-seconds) 31800.0) - ) - ((= v1-15 1) - (set! (-> self race-seconds) 33300.0) - ) - (else - (set! (-> self race-seconds) 34800.0) - ) - ) - ) - ((< 5 (the-as int a0-4)) - (cond - ((zero? v1-15) - (set! (-> self race-seconds) 30600.0) - ) - ((= v1-15 1) - (set! (-> self race-seconds) 32100.0) - ) - (else - (set! (-> self race-seconds) 33600.0) - ) - ) - ) - ((zero? v1-15) - (set! (-> self race-seconds) 30000.0) - ) - ((= v1-15 1) - (set! (-> self race-seconds) 31500.0) - ) - (else - (set! (-> self race-seconds) 33000.0) - ) - ) - ) - (logclear! (-> self mask) (process-mask actor-pause)) - (set! - (-> self race-start-time) - (-> *display* game-frame-counter) - ) - (go flying-lurker-fly) - ) - ) + (case arg2 + (('fly-away) + (when (-> self link next) + (entity-birth-no-kill (-> self link next)) + (let ((a1-1 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-1 from) self) + (set! (-> a1-1 num-params) 2) + (set! (-> a1-1 message) 'fly-away) + (set! + (-> a1-1 param 0) + (the-as uint (/ (the-as int (-> arg3 param 0)) 16)) + ) + (set! (-> a1-1 param 1) (-> arg3 param 1)) + (let ((t9-1 send-event-function) + (v1-11 (-> self link next)) + ) + (t9-1 (if v1-11 + (-> v1-11 extra process) + ) + a1-1 + ) + ) + ) + ) + (let* ((v1-14 (-> arg3 param 0)) + (a0-4 (-> arg3 param 1)) + (v1-15 (logand v1-14 3)) + ) + (set! (-> self rank) (the-as int v1-15)) + (cond + ((< 15 (the-as int a0-4)) + (cond + ((zero? v1-15) + (set! (-> self race-seconds) 33000.0) + ) + ((= v1-15 1) + (set! (-> self race-seconds) 34500.0) + ) + (else + (set! (-> self race-seconds) 36000.0) + ) + ) + ) + ((< 10 (the-as int a0-4)) + (cond + ((zero? v1-15) + (set! (-> self race-seconds) 31800.0) + ) + ((= v1-15 1) + (set! (-> self race-seconds) 33300.0) + ) + (else + (set! (-> self race-seconds) 34800.0) + ) + ) + ) + ((< 5 (the-as int a0-4)) + (cond + ((zero? v1-15) + (set! (-> self race-seconds) 30600.0) + ) + ((= v1-15 1) + (set! (-> self race-seconds) 32100.0) + ) + (else + (set! (-> self race-seconds) 33600.0) + ) + ) + ) + ((zero? v1-15) + (set! (-> self race-seconds) 30000.0) + ) + ((= v1-15 1) + (set! (-> self race-seconds) 31500.0) + ) + (else + (set! (-> self race-seconds) 33000.0) + ) + ) + ) + (logclear! (-> self mask) (process-mask actor-pause)) + (set! (-> self race-start-time) (-> *display* game-frame-counter)) + (go flying-lurker-fly) + ) ) ) @@ -1686,76 +1681,73 @@ (defstate flying-lurker-idle (flying-lurker) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (cond - ((= v1-0 'saw-player) - (set! (-> self take-off) #t) - (when (-> self link prev) - (entity-birth-no-kill (-> self link prev)) - (let ((a1-1 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-1 from) arg0) - (set! (-> a1-1 num-params) arg1) - (set! (-> a1-1 message) arg2) - (set! (-> a1-1 param 0) (-> arg3 param 0)) - (set! (-> a1-1 param 1) (-> arg3 param 1)) - (set! (-> a1-1 param 2) (-> arg3 param 2)) - (set! (-> a1-1 param 3) (-> arg3 param 3)) - (set! (-> a1-1 param 4) (-> arg3 param 4)) - (set! (-> a1-1 param 5) (-> arg3 param 5)) - (set! (-> a1-1 param 6) (-> arg3 param 6)) - (let ((t9-1 send-event-function) - (v1-13 (-> self link prev)) - ) - (t9-1 (if v1-13 - (-> v1-13 extra process) - ) - a1-1 - ) - ) - ) - ) - ) - ((= v1-0 'clone) - (when (-> self link next) - (entity-birth-no-kill (-> self link next)) - (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) 'clone) - (set! (-> a1-2 param 0) (-> arg3 param 0)) - (set! (-> a1-2 param 1) (+ (-> arg3 param 1) -1)) - (let ((t9-3 send-event-function) - (v1-25 (-> self link next)) - ) - (t9-3 (if v1-25 - (-> v1-25 extra process) - ) - a1-2 - ) - ) - ) - ) - (case (-> arg3 param 1) - ((2) - (go - flying-lurker-clone - (the-as handle (-> arg3 param 0)) - "flying-lurker-b-" - ) - ) - ((1) - (go - flying-lurker-clone - (the-as handle (-> arg3 param 0)) - "flying-lurker-c-" - ) - ) - ) - ) - (else - (flying-lurker-handler arg0 arg1 arg2 arg3) - ) - ) + (case arg2 + (('saw-player) + (set! (-> self take-off) #t) + (when (-> self link prev) + (entity-birth-no-kill (-> self link prev)) + (let ((a1-1 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-1 from) arg0) + (set! (-> a1-1 num-params) arg1) + (set! (-> a1-1 message) arg2) + (set! (-> a1-1 param 0) (-> arg3 param 0)) + (set! (-> a1-1 param 1) (-> arg3 param 1)) + (set! (-> a1-1 param 2) (-> arg3 param 2)) + (set! (-> a1-1 param 3) (-> arg3 param 3)) + (set! (-> a1-1 param 4) (-> arg3 param 4)) + (set! (-> a1-1 param 5) (-> arg3 param 5)) + (set! (-> a1-1 param 6) (-> arg3 param 6)) + (let ((t9-1 send-event-function) + (v1-13 (-> self link prev)) + ) + (t9-1 (if v1-13 + (-> v1-13 extra process) + ) + a1-1 + ) + ) + ) + ) + ) + (('clone) + (when (-> self link next) + (entity-birth-no-kill (-> self link next)) + (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) 'clone) + (set! (-> a1-2 param 0) (-> arg3 param 0)) + (set! (-> a1-2 param 1) (+ (-> arg3 param 1) -1)) + (let ((t9-3 send-event-function) + (v1-25 (-> self link next)) + ) + (t9-3 (if v1-25 + (-> v1-25 extra process) + ) + a1-2 + ) + ) + ) + ) + (case (-> arg3 param 1) + ((2) + (go + flying-lurker-clone + (the-as handle (-> arg3 param 0)) + "flying-lurker-b-" + ) + ) + ((1) + (go + flying-lurker-clone + (the-as handle (-> arg3 param 0)) + "flying-lurker-c-" + ) + ) + ) + ) + (else + (flying-lurker-handler arg0 arg1 arg2 arg3) ) ) ) @@ -1899,6 +1891,7 @@ ) ;; definition for method 11 of type flying-lurker +;; INFO: Return type mismatch object vs none. ;; Used lq/sq (defmethod copy-defaults! flying-lurker ((obj flying-lurker) (arg0 res-lump)) (stack-size-set! (-> obj main-thread) 512) diff --git a/test/decompiler/reference/levels/snow/target-snowball_REF.gc b/test/decompiler/reference/levels/snow/target-snowball_REF.gc index 89e2820b7e..8d4e3eec89 100644 --- a/test/decompiler/reference/levels/snow/target-snowball_REF.gc +++ b/test/decompiler/reference/levels/snow/target-snowball_REF.gc @@ -61,22 +61,23 @@ (defstate target-snowball-start (target) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (the-as object (cond - ((and (= arg2 'query) (= (-> arg3 param 0) 'mode)) - 'snowball - ) - ((let ((v1-3 arg2)) - (= v1-3 'end-mode) - ) - enter-state - (-> *TARGET-bank* duck-jump-height-min) - (-> *TARGET-bank* duck-jump-height-max) - (go target-jump) - ) - (else - (target-generic-event-handler arg0 arg1 arg2 arg3) - ) - ) + (cond + ((and (= arg2 'query) (= (-> arg3 param 0) 'mode)) + 'snowball + ) + ((let ((v1-3 arg2)) + (= v1-3 'end-mode) + ) + (go + target-jump + (-> *TARGET-bank* duck-jump-height-min) + (-> *TARGET-bank* duck-jump-height-max) + #f + ) + ) + (else + (target-generic-event-handler arg0 arg1 arg2 arg3) + ) ) ) :exit diff --git a/test/decompiler/reference/levels/snow/yeti_REF.gc b/test/decompiler/reference/levels/snow/yeti_REF.gc index 8f34ec6701..ed2fc8dfbd 100644 --- a/test/decompiler/reference/levels/snow/yeti_REF.gc +++ b/test/decompiler/reference/levels/snow/yeti_REF.gc @@ -260,25 +260,20 @@ ) ;; definition for function yeti-slave-default-event-handler -;; INFO: Return type mismatch none vs object. -;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? (defbehavior yeti-slave-default-event-handler yeti-slave ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (cond - ((= v1-0 'attack) - (nav-enemy-set-hit-from-direction arg0) - (go-virtual nav-enemy-die) - ) - ((= v1-0 'touch) - (nav-enemy-send-attack - arg0 - (the-as touching-shapes-entry (-> arg3 param 0)) - 'generic - ) - ) - ) + (case arg2 + (('attack) + (nav-enemy-set-hit-from-direction arg0) + (go-virtual nav-enemy-die) + ) + (('touch) + (nav-enemy-send-attack + arg0 + (the-as touching-shapes-entry (-> arg3 param 0)) + 'generic + ) ) ) ) @@ -1234,6 +1229,7 @@ ) ;; definition for function yeti-slave-init-by-other +;; INFO: Return type mismatch object vs none. ;; Used lq/sq (defbehavior yeti-slave-init-by-other yeti-slave @@ -1463,6 +1459,7 @@ ) ;; definition for method 11 of type yeti +;; INFO: Return type mismatch object vs none. (defmethod copy-defaults! yeti ((obj yeti) (arg0 res-lump)) (set! (-> obj spawn-delay) 0) (set! (-> obj root) (new 'process 'trsqv)) diff --git a/test/decompiler/reference/levels/sunken/qbert-plat_REF.gc b/test/decompiler/reference/levels/sunken/qbert-plat_REF.gc index 08cd0513a9..0c3330b835 100644 --- a/test/decompiler/reference/levels/sunken/qbert-plat_REF.gc +++ b/test/decompiler/reference/levels/sunken/qbert-plat_REF.gc @@ -160,11 +160,10 @@ (defstate qbert-plat-on-mimic (qbert-plat) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (if (= v1-0 'die) - (go qbert-plat-on-die) - ) - ) + (case arg2 + (('die) + (go qbert-plat-on-die) + ) ) ) :code @@ -203,6 +202,7 @@ ) ;; definition for function qbert-plat-on-init-by-other +;; INFO: Return type mismatch object vs none. ;; Used lq/sq (defbehavior qbert-plat-on-init-by-other qbert-plat @@ -529,6 +529,7 @@ ) ;; definition for method 11 of type qbert-plat +;; INFO: Return type mismatch object vs none. (defmethod copy-defaults! qbert-plat ((obj qbert-plat) (arg0 res-lump)) (set! (-> obj mask) (logior (process-mask platform) (-> obj mask))) (TODO-RENAME-30 obj) @@ -550,59 +551,52 @@ (defstate qbert-plat-master-idle (qbert-plat-master) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (when (= v1-0 'trigger) - (start-hint-timer (the-as level-hint-control 842)) - (close-specific-task! - (game-task sunken-platforms) - (task-status need-hint) - ) - (when (not (-> self puzzle-beaten?)) - (let ((v1-2 (-> arg3 param 0))) - (when (!= v1-2 (-> self last-plat-triggered)) - (set! (-> self last-plat-triggered) (the-as int v1-2)) - (let - ((s5-1 - (= - (-> self plat-states-needed-to-open-door) - (-> self plat-states) - ) - ) - ) - (let ((v1-3 (ash 1 v1-2))) - (set! - (-> self plat-states) - (logxor (-> self plat-states) (the-as uint v1-3)) - ) - (if (zero? (logand v1-3 (-> self plat-states))) - (level-hint-spawn - (game-text-id sunken-qbert-hint) - "sksp0130" - (the-as entity #f) - *entity-pool* - (game-task none) - ) - ) - ) - (send-event arg0 'notify) - (let - ((a0-13 - (= - (-> self plat-states-needed-to-open-door) - (-> self plat-states) - ) - ) - ) - (if (!= s5-1 a0-13) - (go qbert-plat-master-do-door a0-13) - ) - ) - ) - ) - ) - ) - ) - ) + (case arg2 + (('trigger) + (start-hint-timer (the-as level-hint-control 842)) + (close-specific-task! + (game-task sunken-platforms) + (task-status need-hint) + ) + (when (not (-> self puzzle-beaten?)) + (let ((v1-2 (-> arg3 param 0))) + (when (!= v1-2 (-> self last-plat-triggered)) + (set! (-> self last-plat-triggered) (the-as int v1-2)) + (let + ((s5-1 + (= (-> self plat-states-needed-to-open-door) (-> self plat-states)) + ) + ) + (let ((v1-3 (ash 1 v1-2))) + (set! + (-> self plat-states) + (logxor (-> self plat-states) (the-as uint v1-3)) + ) + (if (zero? (logand v1-3 (-> self plat-states))) + (level-hint-spawn + (game-text-id sunken-qbert-hint) + "sksp0130" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ) + (send-event arg0 'notify) + (let + ((a0-13 + (= (-> self plat-states-needed-to-open-door) (-> self plat-states)) + ) + ) + (if (!= s5-1 a0-13) + (go qbert-plat-master-do-door a0-13) + ) + ) + ) + ) + ) + ) + ) ) ) :code @@ -958,6 +952,7 @@ ) ;; definition for method 11 of type qbert-plat-master +;; INFO: Return type mismatch object vs none. (defmethod copy-defaults! qbert-plat-master diff --git a/test/decompiler/reference/levels/sunken/square-platform_REF.gc b/test/decompiler/reference/levels/sunken/square-platform_REF.gc index f96516a685..7ce2a7e20e 100644 --- a/test/decompiler/reference/levels/sunken/square-platform_REF.gc +++ b/test/decompiler/reference/levels/sunken/square-platform_REF.gc @@ -403,20 +403,16 @@ (defstate square-platform-lowered (square-platform) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (when (= v1-0 'trigger) - (if - (and - (= (-> arg0 type) square-platform-master) - (= - (-> (the-as square-platform-master arg0) plat-id) - (-> self plat-id) - ) - ) - (go square-platform-rising) - ) - ) - ) + (case arg2 + (('trigger) + (if + (and + (= (-> arg0 type) square-platform-master) + (= (-> (the-as square-platform-master arg0) plat-id) (-> self plat-id)) + ) + (go square-platform-rising) + ) + ) ) ) :code @@ -627,6 +623,7 @@ ) ;; definition for method 11 of type square-platform +;; INFO: Return type mismatch object vs none. ;; Used lq/sq (defmethod copy-defaults! square-platform ((obj square-platform) (arg0 res-lump)) (local-vars (sv-16 res-tag) (sv-32 res-tag)) @@ -728,19 +725,18 @@ (defstate square-platform-master-idle (square-platform-master) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (when (= v1-0 'trigger) - (when (= (-> arg0 type) square-platform-button) - (set! - (-> self button-id) - (-> (the-as square-platform-button arg0) button-id) - ) - (logclear! (-> self mask) (process-mask actor-pause)) - (process-entity-status! self (entity-perm-status bit-3) #t) - (go square-platform-master-activate) - ) - ) - ) + (case arg2 + (('trigger) + (when (= (-> arg0 type) square-platform-button) + (set! + (-> self button-id) + (-> (the-as square-platform-button arg0) button-id) + ) + (logclear! (-> self mask) (process-mask actor-pause)) + (process-entity-status! self (entity-perm-status bit-3) #t) + (go square-platform-master-activate) + ) + ) ) ) :code @@ -956,6 +952,7 @@ ) ;; definition for method 11 of type square-platform-master +;; INFO: Return type mismatch object vs none. (defmethod copy-defaults! square-platform-master diff --git a/test/decompiler/reference/levels/sunken/sunken-fish_REF.gc b/test/decompiler/reference/levels/sunken/sunken-fish_REF.gc index c09482874e..0af43949e4 100644 --- a/test/decompiler/reference/levels/sunken/sunken-fish_REF.gc +++ b/test/decompiler/reference/levels/sunken/sunken-fish_REF.gc @@ -587,6 +587,7 @@ ) ;; definition for function sunkenfisha-init-by-other +;; INFO: Return type mismatch object vs none. (defbehavior sunkenfisha-init-by-other sunkenfisha ((arg0 entity)) (set! (-> self entity) arg0) (TODO-RENAME-26 self) @@ -596,6 +597,7 @@ ) ;; definition for method 11 of type sunkenfisha +;; INFO: Return type mismatch object vs none. (defmethod copy-defaults! sunkenfisha ((obj sunkenfisha) (arg0 res-lump)) (TODO-RENAME-26 obj) (TODO-RENAME-27 obj) @@ -634,7 +636,3 @@ (go sunkenfisha-idle) (none) ) - - - - diff --git a/test/decompiler/reference/levels/sunken/wall-plat_REF.gc b/test/decompiler/reference/levels/sunken/wall-plat_REF.gc index cc04abf984..883edd7e21 100644 --- a/test/decompiler/reference/levels/sunken/wall-plat_REF.gc +++ b/test/decompiler/reference/levels/sunken/wall-plat_REF.gc @@ -51,11 +51,10 @@ (defstate wall-plat-retracted (wall-plat) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (if (= v1-0 'trigger) - (go wall-plat-extending) - ) - ) + (case arg2 + (('trigger) + (go wall-plat-extending) + ) ) ) :code @@ -136,11 +135,10 @@ (defstate wall-plat-extended (wall-plat) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (if (= v1-0 'untrigger) - (go wall-plat-retracting) - ) - ) + (case arg2 + (('untrigger) + (go wall-plat-retracting) + ) ) ) :code @@ -284,6 +282,7 @@ ) ;; definition for method 11 of type wall-plat +;; INFO: Return type mismatch object vs none. (defmethod copy-defaults! wall-plat ((obj wall-plat) (arg0 res-lump)) (set! (-> obj extended-amount) 0.0) (set! (-> obj mask) (logior (process-mask platform) (-> obj mask))) diff --git a/test/decompiler/reference/levels/sunken/wedge-plats_REF.gc b/test/decompiler/reference/levels/sunken/wedge-plats_REF.gc index 185287fd40..c73e3ac5b4 100644 --- a/test/decompiler/reference/levels/sunken/wedge-plats_REF.gc +++ b/test/decompiler/reference/levels/sunken/wedge-plats_REF.gc @@ -76,6 +76,7 @@ ) ;; definition for method 11 of type wedge-plat-master +;; INFO: Return type mismatch object vs none. ;; Used lq/sq (defmethod copy-defaults! @@ -334,6 +335,7 @@ ) ;; definition for method 11 of type wedge-plat +;; INFO: Return type mismatch object vs none. (defmethod copy-defaults! wedge-plat ((obj wedge-plat) (arg0 res-lump)) (set! (-> obj mask) (logior (process-mask platform) (-> obj mask))) (let @@ -616,6 +618,7 @@ ) ;; definition for method 11 of type wedge-plat-outer +;; INFO: Return type mismatch object vs none. (defmethod copy-defaults! wedge-plat-outer diff --git a/test/decompiler/reference/levels/swamp/swamp-bat_REF.gc b/test/decompiler/reference/levels/swamp/swamp-bat_REF.gc index c812773491..2db10f3807 100644 --- a/test/decompiler/reference/levels/swamp/swamp-bat_REF.gc +++ b/test/decompiler/reference/levels/swamp/swamp-bat_REF.gc @@ -139,38 +139,28 @@ ) ;; definition for function swamp-bat-slave-event-handler -;; INFO: Return type mismatch none vs object. -;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? (defbehavior swamp-bat-slave-event-handler swamp-bat-slave ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (cond - ((= v1-0 'attack) - (logclear! (-> self mask) (process-mask actor-pause)) - (go swamp-bat-slave-die (process->handle arg0)) - ) - ((= v1-0 'touch) - (level-hint-spawn - (game-text-id swamp-bats-hint) - "sksp0156" - (the-as entity #f) - *entity-pool* - (game-task none) - ) - (send-event - arg0 - 'attack - (-> arg3 param 0) - (new 'static 'attack-info) - ) - ) - ((= v1-0 'launch) - (if (-> self launch-ready) - (go swamp-bat-slave-launch) - ) - ) - ) + (case arg2 + (('attack) + (logclear! (-> self mask) (process-mask actor-pause)) + (go swamp-bat-slave-die (process->handle arg0)) + ) + (('touch) + (level-hint-spawn + (game-text-id swamp-bats-hint) + "sksp0156" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (send-event arg0 'attack (-> arg3 param 0) (new 'static 'attack-info)) + ) + (('launch) + (if (-> self launch-ready) + (go swamp-bat-slave-launch) + ) ) ) ) @@ -697,6 +687,7 @@ swamp-bat-slave-event-handler ) ;; definition for function swamp-bat-slave-init-by-other +;; INFO: Return type mismatch object vs none. ;; Used lq/sq (defbehavior swamp-bat-slave-init-by-other swamp-bat-slave @@ -968,6 +959,7 @@ swamp-bat-slave-event-handler ) ;; definition for method 11 of type swamp-bat +;; INFO: Return type mismatch object vs none. (defmethod copy-defaults! swamp-bat ((obj swamp-bat) (arg0 res-lump)) (let ((s4-0 (new 'process 'collide-shape obj (collide-list-enum hit-by-player)))) 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 6a1f59d7fa..05dd8c408b 100644 --- a/test/decompiler/reference/levels/swamp/swamp-rat-nest_REF.gc +++ b/test/decompiler/reference/levels/swamp/swamp-rat-nest_REF.gc @@ -941,59 +941,46 @@ ) ;; definition for function swamp-rat-nest-dummy-event-handler -;; INFO: Return type mismatch none vs object. (defbehavior swamp-rat-nest-dummy-event-handler swamp-rat-nest-dummy ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (cond - ((= v1-0 'shake) - (if (= (-> self next-state name) 'swamp-rat-nest-dummy-idle) - (go swamp-rat-nest-dummy-shake) - ) - ) - ((= v1-0 'attack) - (send-event - (ppointer->process (-> self parent-process)) - 'hit - ) - (let ((v1-7 (-> arg3 param 2))) - (when (!= v1-7 (-> self parent-process 0 player-attack-id)) - (set! - (-> self parent-process 0 player-attack-id) - (the-as int v1-7) - ) - (cond - ((and (>= arg1 2) (= (-> arg3 param 1) 'eco-yellow)) - (swamp-rat-nest-dummy-take-damage 3) - (if - (< - (vector-vector-distance - (target-pos 0) - (-> self top-sphere) - ) - (-> self top-sphere w) - ) - (send-event *target* 'no-look-around 75) - ) - (go swamp-rat-nest-dummy-hit) - ) - (else - (level-hint-spawn - (game-text-id swamp-rats-nest-hint) - "sksp0144" - (the-as entity #f) - *entity-pool* - (game-task none) - ) - (swamp-rat-nest-dummy-take-damage 0) - (go swamp-rat-nest-dummy-hit) - ) - ) - ) - ) - ) - ) + (case arg2 + (('shake) + (if (= (-> self next-state name) 'swamp-rat-nest-dummy-idle) + (go swamp-rat-nest-dummy-shake) + ) + ) + (('attack) + (send-event (ppointer->process (-> self parent-process)) 'hit) + (let ((v1-7 (-> arg3 param 2))) + (when (!= v1-7 (-> self parent-process 0 player-attack-id)) + (set! (-> self parent-process 0 player-attack-id) (the-as int v1-7)) + (cond + ((and (>= arg1 2) (= (-> arg3 param 1) 'eco-yellow)) + (swamp-rat-nest-dummy-take-damage 3) + (if + (< + (vector-vector-distance (target-pos 0) (-> self top-sphere)) + (-> self top-sphere w) + ) + (send-event *target* 'no-look-around 75) + ) + (go swamp-rat-nest-dummy-hit) + ) + (else + (level-hint-spawn + (game-text-id swamp-rats-nest-hint) + "sksp0144" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (swamp-rat-nest-dummy-take-damage 0) + (go swamp-rat-nest-dummy-hit) + ) + ) + ) + ) ) ) ) @@ -1222,6 +1209,7 @@ ) ;; definition for function swamp-rat-nest-dummy-init-by-other +;; INFO: Return type mismatch object vs none. ;; Used lq/sq (defbehavior swamp-rat-nest-dummy-init-by-other swamp-rat-nest-dummy @@ -1261,15 +1249,13 @@ ) ;; definition for function swamp-rat-nest-default-event-handler -;; INFO: Return type mismatch none vs object. (defbehavior swamp-rat-nest-default-event-handler swamp-rat-nest ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (if (= v1-0 'victory) - (go swamp-rat-nest-victory) - ) - ) + (case arg2 + (('victory) + (go swamp-rat-nest-victory) + ) ) ) @@ -1511,11 +1497,10 @@ swamp-rat-nest-default-event-handler (defstate swamp-rat-nest-idle (swamp-rat-nest) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (if (= v1-0 'hit) - (go swamp-rat-nest-active) - ) - ) + (case arg2 + (('hit) + (go swamp-rat-nest-active) + ) ) ) :enter @@ -1686,6 +1671,7 @@ swamp-rat-nest-default-event-handler ) ;; definition for method 11 of type swamp-rat-nest +;; INFO: Return type mismatch object vs none. (defmethod copy-defaults! swamp-rat-nest ((obj swamp-rat-nest) (arg0 res-lump)) (set! (-> obj mask) (logior (process-mask enemy) (-> obj mask))) (set! (-> obj root) (new 'process 'trsqv)) diff --git a/test/decompiler/reference/levels/swamp/swamp-rat_REF.gc b/test/decompiler/reference/levels/swamp/swamp-rat_REF.gc index ca227eb4dd..a183eac389 100644 --- a/test/decompiler/reference/levels/swamp/swamp-rat_REF.gc +++ b/test/decompiler/reference/levels/swamp/swamp-rat_REF.gc @@ -65,37 +65,31 @@ ) ;; definition for method 44 of type swamp-rat -;; INFO: Return type mismatch none vs object. -;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? (defmethod dummy-44 swamp-rat ((obj swamp-rat) (arg0 process) (arg1 event-message-block)) - (the-as - object + (when + ((method-of-type touching-shapes-entry prims-touching?) + (the-as touching-shapes-entry (-> arg1 param 0)) + (-> obj collide-info) + (the-as uint 1) + ) (when - ((method-of-type touching-shapes-entry prims-touching?) + (nav-enemy-send-attack + arg0 (the-as touching-shapes-entry (-> arg1 param 0)) - (-> obj collide-info) - (the-as uint 1) + 'generic ) - (when - (nav-enemy-send-attack - arg0 - (the-as touching-shapes-entry (-> arg1 param 0)) - 'generic - ) - (let* ((s5-1 (-> obj parent)) - (a0-4 - (if (and (nonzero? s5-1) (type-type? pointer process-drawable)) - s5-1 - ) - ) + (let* ((s5-1 (-> obj parent)) + (a0-4 (if (and (nonzero? s5-1) (type-type? pointer process-drawable)) + s5-1 + ) ) - (if a0-4 - (send-event (the-as process a0-4) 'victory) - (go (method-of-object obj nav-enemy-victory)) - ) + ) + (if a0-4 + (send-event (the-as process a0-4) 'victory) + (go (method-of-object obj nav-enemy-victory)) ) ) ) @@ -104,6 +98,7 @@ ;; definition for function swamp-rat-default-event-handler ;; INFO: Return type mismatch none vs object. +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? (defbehavior swamp-rat-default-event-handler swamp-rat ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) @@ -917,6 +912,7 @@ swamp-rat-default-event-handler ) ;; definition for function swamp-rat-init-by-other +;; INFO: Return type mismatch object vs none. ;; Used lq/sq (defbehavior swamp-rat-init-by-other swamp-rat diff --git a/test/decompiler/reference/levels/village1/fishermans-boat_REF.gc b/test/decompiler/reference/levels/village1/fishermans-boat_REF.gc index 3ae0c86e87..2feaae38b4 100644 --- a/test/decompiler/reference/levels/village1/fishermans-boat_REF.gc +++ b/test/decompiler/reference/levels/village1/fishermans-boat_REF.gc @@ -2188,6 +2188,7 @@ ) ;; definition for method 11 of type fishermans-boat +;; INFO: Return type mismatch object vs none. (defmethod copy-defaults! fishermans-boat ((obj fishermans-boat) (arg0 res-lump)) (stack-size-set! (-> obj main-thread) 512) (set! (-> obj mask) (logior (process-mask platform) (-> obj mask))) diff --git a/test/decompiler/reference/levels/village1/yakow_REF.gc b/test/decompiler/reference/levels/village1/yakow_REF.gc index 44cdd9e940..426a9284cc 100644 --- a/test/decompiler/reference/levels/village1/yakow_REF.gc +++ b/test/decompiler/reference/levels/village1/yakow_REF.gc @@ -236,6 +236,7 @@ ;; definition for function yakow-default-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? (defbehavior yakow-default-event-handler yakow ((arg0 process-drawable) (arg1 int) (arg2 symbol) (arg3 event-message-block)) @@ -1467,6 +1468,7 @@ yakow-default-event-handler ) ;; definition for method 11 of type yakow +;; INFO: Return type mismatch object vs none. ;; Used lq/sq (defmethod copy-defaults! yakow ((obj yakow) (arg0 res-lump)) (stack-size-set! (-> obj main-thread) 512) diff --git a/test/decompiler/reference/levels/village3/miners_REF.gc b/test/decompiler/reference/levels/village3/miners_REF.gc index 6b495fcb80..e965bdfe23 100644 --- a/test/decompiler/reference/levels/village3/miners_REF.gc +++ b/test/decompiler/reference/levels/village3/miners_REF.gc @@ -999,6 +999,7 @@ ) ;; definition for method 11 of type cavegem +;; INFO: Return type mismatch object vs none. (defmethod copy-defaults! cavegem ((obj cavegem) (arg0 res-lump)) (set! (-> obj root) (new 'process 'trsqv)) (process-drawable-from-entity! obj arg0)