diff --git a/README.md b/README.md
index 04acb53d07..4c50465411 100644
--- a/README.md
+++ b/README.md
@@ -8,7 +8,7 @@
-
+
@@ -50,7 +50,7 @@ Our objectives are:
We support both Linux and Windows on x86-64.
-We have a Discord server where we discuss development. https://discord.gg/BVEHQmm8
+We have a Discord server where we discuss development. https://discord.gg/V82sTJGEAs
## Current Status
So far, we've decompiled around 341,233 lines of GOAL code, out of an estimated 500,000 total lines and we've started work on an OpenGL renderer. Currently, the main display process (`*dproc*`) runs and sends data to our renderer. We can load textures, text files, and level files. Using keyboard controls, we can open the debug menu and turn on some simple debug visualizations.
diff --git a/common/type_system/TypeSystem.cpp b/common/type_system/TypeSystem.cpp
index 53bb35429f..bdb8a5fc0d 100644
--- a/common/type_system/TypeSystem.cpp
+++ b/common/type_system/TypeSystem.cpp
@@ -500,7 +500,8 @@ MethodInfo TypeSystem::declare_method(Type* type,
const std::string& method_name,
bool no_virtual,
const TypeSpec& ts,
- bool override_type) {
+ bool override_type,
+ int id) {
if (method_name == "new") {
if (override_type) {
throw_typesystem_error("Cannot use :replace option with a new method.");
@@ -514,10 +515,13 @@ MethodInfo TypeSystem::declare_method(Type* type,
if (override_type) {
if (!got_existing) {
- throw_typesystem_error(
- "Cannot use :replace on method {} of {} because this method was not previously declared "
- "in a parent.",
- method_name, type->get_name());
+ if (id != -1 && try_lookup_method(type->get_parent(), id, &existing_info)) {
+ } else {
+ throw_typesystem_error(
+ "Cannot use :replace on method {} of {} because this method was not previously "
+ "declared in a parent.",
+ method_name, type->get_name());
+ }
}
// use the existing ID.
diff --git a/common/type_system/TypeSystem.h b/common/type_system/TypeSystem.h
index 101ff0637a..6f10e5c595 100644
--- a/common/type_system/TypeSystem.h
+++ b/common/type_system/TypeSystem.h
@@ -167,7 +167,8 @@ class TypeSystem {
const std::string& method_name,
bool no_virtual,
const TypeSpec& ts,
- bool override_type);
+ bool override_type,
+ int id = -1);
MethodInfo define_method(const std::string& type_name,
const std::string& method_name,
const TypeSpec& ts);
diff --git a/common/type_system/deftype.cpp b/common/type_system/deftype.cpp
index ddb7e50f0e..6b19d30d41 100644
--- a/common/type_system/deftype.cpp
+++ b/common/type_system/deftype.cpp
@@ -229,7 +229,7 @@ void declare_method(Type* type, TypeSystem* type_system, const goos::Object& def
function_typespec.add_arg(parse_typespec(type_system, return_type));
auto info = type_system->declare_method(type, method_name, no_virtual, function_typespec,
- replace_method);
+ replace_method, id);
// check the method assert
if (id != -1) {
diff --git a/decompiler/IR2/Form.cpp b/decompiler/IR2/Form.cpp
index adf61071d5..904609bef6 100644
--- a/decompiler/IR2/Form.cpp
+++ b/decompiler/IR2/Form.cpp
@@ -2866,11 +2866,13 @@ void GetSymbolStringPointer::get_modified_regs(RegSet& regs) const {
DefstateElement::DefstateElement(const std::string& process_type,
const std::string& state_name,
const std::vector& entries,
- bool is_virtual)
+ bool is_virtual,
+ bool is_override)
: m_process_type(process_type),
m_state_name(state_name),
m_entries(entries),
- m_is_virtual(is_virtual) {
+ m_is_virtual(is_virtual),
+ m_is_override(is_override) {
for (auto& e : m_entries) {
e.val->parent_element = this;
}
@@ -2910,7 +2912,11 @@ goos::Object DefstateElement::to_form_internal(const Env& env) const {
forms.push_back(pretty_print::build_list(m_process_type));
if (m_is_virtual) {
- forms.push_back(pretty_print::to_symbol(":virtual #t"));
+ if (!m_is_override) {
+ forms.push_back(pretty_print::to_symbol(":virtual #t"));
+ } else {
+ forms.push_back(pretty_print::to_symbol(":virtual override"));
+ }
}
for (const auto& e : m_entries) {
diff --git a/decompiler/IR2/Form.h b/decompiler/IR2/Form.h
index 15908907a0..308153ef33 100644
--- a/decompiler/IR2/Form.h
+++ b/decompiler/IR2/Form.h
@@ -1618,7 +1618,8 @@ class DefstateElement : public FormElement {
DefstateElement(const std::string& process_type,
const std::string& state_name,
const std::vector& entries,
- bool is_virtual);
+ bool is_virtual,
+ bool is_override);
goos::Object to_form_internal(const Env& env) const override;
void apply(const std::function& f) override;
@@ -1637,6 +1638,7 @@ class DefstateElement : public FormElement {
std::string m_state_name;
std::vector m_entries;
bool m_is_virtual = false;
+ bool m_is_override = false;
};
class DefskelgroupElement : public FormElement {
diff --git a/decompiler/analysis/find_defstates.cpp b/decompiler/analysis/find_defstates.cpp
index 78827da6f5..76c03d39b7 100644
--- a/decompiler/analysis/find_defstates.cpp
+++ b/decompiler/analysis/find_defstates.cpp
@@ -194,7 +194,7 @@ FormElement* rewrite_nonvirtual_defstate(
info.second, pool, {}, skip_states);
return pool.alloc_element(info.second.last_arg().base_type(), info.first,
- entries, false);
+ entries, false, false);
}
struct VirtualStateInfo {
@@ -362,15 +362,18 @@ FormElement* rewrite_virtual_defstate(
method_info.name, type_name, method_info.type.print());
}
+ bool state_override = false;
{
MethodInfo parent_method_info;
auto parent_type_name = env.dts->ts.lookup_type(type_name)->get_parent();
- if (env.dts->ts.try_lookup_method(parent_type_name, method_info.name, &parent_method_info)) {
+ if (env.dts->ts.try_lookup_method(parent_type_name, method_id, &parent_method_info)) {
if (!inherit_info) {
- env.func->warnings.warn_and_throw(
- "Virtual defstate for state {} in type {}: the state was defined in the "
- "parent but wasn't inherited.",
- expected_state_name, type_name);
+ // did NOT inherit parent state, this is an override!
+ state_override = true;
+ // env.func->warnings.warn_and_throw(
+ // "Virtual defstate for state {} in type {}: the state was defined in the "
+ // "parent but wasn't inherited.",
+ // expected_state_name, type_name);
}
} else {
if (inherit_info) {
@@ -415,7 +418,8 @@ FormElement* rewrite_virtual_defstate(
elt->body(), body_idx + 1, env, expected_state_name, elt->entries().at(0).dest,
method_info.type.substitute_for_method_call(type_name), pool, type_name, skip_states);
- return pool.alloc_element(type_name, expected_state_name, entries, true);
+ return pool.alloc_element(type_name, expected_state_name, entries, true,
+ state_override);
}
bool is_nonvirtual_state(LetElement* elt) {
diff --git a/decompiler/config/all-types.gc b/decompiler/config/all-types.gc
index 6fcc50dff2..8add6a2d94 100644
--- a/decompiler/config/all-types.gc
+++ b/decompiler/config/all-types.gc
@@ -81,7 +81,7 @@
(define-extern append! (function object object object))
(define-extern delete! (function object object pair))
(define-extern insert-cons! (function object object pair))
-(define-extern sort (function object (function object object object) object))
+(define-extern sort (function pair (function object object object) pair))
(define-extern mem-copy! (function pointer pointer int pointer))
(define-extern qmem-copy<-! (function pointer pointer int pointer))
(define-extern qmem-copy->! (function pointer pointer int pointer))
@@ -596,6 +596,60 @@
(set-fps)
)
+;; flavors for music
+(defenum music-flava
+ :type uint8
+ (racer 1)
+ (flutflut 2)
+ (to-maincave 3)
+ (to-snow 4)
+ (sage 5)
+ (assistant 6)
+ (birdlady 7)
+ (mayor 8)
+ (sculptor 9)
+ (explorer 10)
+ (sage-yellow 11)
+ (sage-red 12)
+ (sage-blue 13)
+ (miners 14)
+ (warrior 15)
+ (geologist 16)
+ (gambler 17)
+ (sage-hut 18)
+ (dock 19)
+ (farmer 20)
+ (jungleb-eggtop 21)
+ (misty-boat 22)
+ (misty-battle 23)
+ (beach-sentinel 24)
+ (beach-cannon 25)
+ (beach-grotto 26)
+ (citadel-center 27)
+ (robocave 28)
+ (robocave-top 29)
+ (maincave 30)
+ (darkcave 31)
+ (snow-battle 32)
+ (snow-cave 33)
+ (snow-fort 34)
+ (snow-balls 35)
+ (levitator 36)
+ (swamp-launcher 37)
+ (swamp-battle 38)
+ (jungle-temple-exit 39)
+ (jungle-lurkerm 40)
+ (jungle-temple-top 41)
+ (rolling-gorge 42)
+ (ogre-middle 43)
+ (ogre-end 44)
+ (lavatube-middle 45)
+ (lavatube-end 46)
+ (finalboss-middle 47)
+ (finalboss-end 48)
+ (default 49)
+ )
+
;; - Enums
(defenum joint-mod-handler-mode
:bitfield #t
@@ -807,6 +861,7 @@
(zero 0)
(one 1)
(confirm #x103)
+ (press-to-talk #x104)
(press-to-use #x105)
(confirm-play #x106)
(play-again? #x107)
@@ -828,8 +883,12 @@
(spanish #x117)
(italian #x118)
(japanese #x119)
+ (press-to-trade-money #x11a)
+ (press-to-trade-money-oracle #x11b)
(press-to-warp #x11c)
(press-to-exit #x11d)
+ (press-to-talk-to-sage #x123)
+ (press-to-talk-to-assistant #x124)
(aspect-ratio #x125)
(video-mode #x126)
(game-options #x127)
@@ -5519,6 +5578,7 @@
(left 3)
(right 4)
(large 5)
+ (pc-hack 6)
)
(deftype font-context (basic)
@@ -5697,9 +5757,9 @@
(declare-type engine basic)
(deftype connection (connectable)
((param0 basic :offset-assert 16) ;; often (function object object object object object), but can be other things.
- (param1 basic :offset-assert 20)
- (param2 basic :offset-assert 24)
- (param3 basic :offset-assert 28)
+ (param1 int32 :offset-assert 20)
+ (param2 int32 :offset-assert 24)
+ (param3 int32 :offset-assert 28)
(quad uint128 2 :offset 0)
)
:method-count-assert 14
@@ -6150,7 +6210,7 @@
(define-extern *display-path-marks* symbol)
(define-extern *display-vol-marks* symbol)
(define-extern *display-water-marks* symbol)
-(define-extern *display-actor-anim* symbol)
+(define-extern *display-actor-anim* string)
(define-extern *display-process-anim* (pointer process))
(define-extern *display-actor-vis* symbol)
(define-extern *display-actor-graph* symbol)
@@ -10376,6 +10436,7 @@
;; - Types
;; NOTE - root can also be a collide-shape
+(declare-type joint-mod basic)
(deftype manipy (process-drawable)
((new-trans-hook (function none) :offset-assert 176) ;; TODO - no idea on these types
(cur-trans-hook (function none) :offset-assert 180) ;; TODO - no idea on these types
@@ -10386,7 +10447,7 @@
(cur-grab-handle handle :offset-assert 208)
(cur-target-handle handle :offset-assert 216)
(old-grab-pos vector :inline :offset-assert 224)
- (joint process-drawable 4 :offset-assert 240)
+ (joint joint-mod 4 :offset-assert 240)
(new-post-hook (function none) :offset-assert 256) ;; TODO - no idea on these types
(cur-post-hook (function none) :offset-assert 260) ;; TODO - no idea on these types
(clone-copy-trans basic :offset-assert 264)
@@ -15802,7 +15863,7 @@
(define-extern show-iop-info (function dma-buffer int))
(define-extern show-iop-memory (function dma-buffer int))
(define-extern make-sqrt-table (function int))
-(define-extern flava-lookup (function symbol int int))
+(define-extern flava-lookup (function symbol music-flava int))
;; - Symbols
@@ -17443,21 +17504,21 @@
(cell-for-task game-task :offset-assert 256)
(cell-x handle :offset-assert 264)
(cam-joint-index int32 :offset-assert 272)
- (skippable basic :offset-assert 276) ;; probably a symbol
- (blend-on-exit basic :offset-assert 280) ;; probably a symbol?
+ (skippable symbol :offset-assert 276) ;; probably a symbol
+ (blend-on-exit art-joint-anim :offset-assert 280)
(camera handle :offset-assert 288)
(will-talk symbol :offset-assert 296)
- (talk-message uint32 :offset-assert 300)
- (last-talk uint64 :offset-assert 304)
+ (talk-message game-text-id :offset-assert 300)
+ (last-talk int64 :offset-assert 304)
(bounce-away symbol :offset-assert 312)
(ambient ambient-control :inline :offset-assert 320)
(center-joint-index int32 :offset-assert 336)
(draw-bounds-y-offset float :offset-assert 340)
(neck-joint-index int32 :offset-assert 344)
(fuel-cell-anim spool-anim :offset-assert 348)
- (sound-flava uint8 :offset-assert 352)
+ (sound-flava music-flava :offset-assert 352)
(have-flava symbol :offset-assert 356) ;; probably
- (music basic :offset-assert 360)
+ (music symbol :offset-assert 360)
(have-music symbol :offset-assert 364) ;; probably
(been-kicked symbol :offset-assert 368) ;; probably
(cur-trans-hook (function none) :offset-assert 372)
@@ -18862,7 +18923,7 @@
(define-extern cam-slave-init-vars (function none :behavior camera-slave))
(define-extern cam-calc-follow! (function cam-rotation-tracker vector symbol vector))
(define-extern slave-set-rotation! (function cam-rotation-tracker vector float float symbol none))
-(define-extern camera-slave-debug (function camera-slave object)) ;; passed to engine::method-15
+(define-extern camera-slave-debug (function camera-slave none))
(define-extern camera-line-rel-len (function vector vector float vector4w none))
(define-extern cam-slave-get-flags (function entity symbol uint128))
(define-extern cam-slave-get-vector-with-offset (function entity-actor vector symbol symbol))
@@ -19749,7 +19810,7 @@
(define-extern ambient-hint-init-by-other (function string vector symbol none :behavior level-hint))
(define-extern level-hint-process-cmd (function (pointer int32) int int int))
(define-extern task-known? (function game-task symbol))
-(define-extern can-grab-display? (function process-taskable symbol)) ;; unconfirmed, see assistant-firecanyon
+(define-extern can-grab-display? (function process symbol))
(define-extern level-hint-displayed? (function symbol))
(define-extern ambient-inspect function)
@@ -22579,7 +22640,7 @@
(frustration-point vector :inline :offset-assert 208)
(jump-dest vector :inline :offset-assert 224)
(jump-trajectory trajectory :inline :offset-assert 240)
- (jump-time uint64 :offset-assert 280)
+ (jump-time int64 :offset-assert 280)
(nav-info nav-enemy-info :offset-assert 288)
(target-speed float :offset-assert 292)
(momentum-speed float :offset-assert 296)
@@ -22588,7 +22649,7 @@
(turn-time int64 :offset-assert 312)
(frustration-time int64 :offset-assert 320)
(speed-scale float :offset-assert 328)
- (neck joint-mod :offset-assert 332) ; this is what `neck` is on the pelican
+ (neck joint-mod :offset-assert 332)
(reaction-time int64 :offset-assert 336)
(notice-time int64 :offset-assert 344)
(state-timeout int64 :offset-assert 352)
@@ -22635,31 +22696,31 @@
(TODO-RENAME-48 (_type_) none 48) ;; object past to method 60 -- see citb-bunny
(TODO-RENAME-49 (_type_ nav-enemy-info) float 49)
(TODO-RENAME-50 (_type_ vector) symbol 50)
- (dummy-51 (_type_) object 51) ;; ret - float | symbol
+ (dummy-51 (_type_) none 51) ;; ret - float | symbol
(dummy-52 (_type_ vector) symbol 52) ;; ret - symbol | vector
(dummy-53 (_type_) symbol 53) ;; ret - symbol | none
- (dummy-54 (_type_) none 54)
- (dummy-55 (_type_) none 55)
- (set-jump-height-factor! (_type_ int) float 56)
- (dummy-57 (_type_) vector 57)
- (dummy-58 (_type_) vector 58)
+ (dummy-54 (_type_ vector) symbol 54)
+ (dummy-55 (_type_) symbol 55)
+ (set-jump-height-factor! (_type_ int) none 56)
+ (dummy-57 (_type_) none 57)
+ (dummy-58 (_type_) none 58)
(TODO-RENAME-59 (_type_) none 59)
- (dummy-60 (_type_ object) symbol 60)
- (dummy-61 (_type_) none 61)
- (dummy-62 (_type_) none 62)
- (dummy-63 (_type_) none 63)
- (dummy-64 (_type_) none 64)
- (dummy-65 (_type_) none 65)
- (dummy-66 (_type_) none 66)
- (dummy-67 (_type_) symbol 67)
- (dummy-68 (_type_) none 68)
- (dummy-69 (_type_) none 69)
- (dummy-70 (_type_) none 70)
- (dummy-71 () _type_ :state 71)
+ (dummy-60 (_type_ symbol) symbol 60)
+ (snow-bunny-attack () _type_ :state 61)
+ (snow-bunny-chase-hop () _type_ :state 62)
+ (snow-bunny-defend () _type_ :state 63)
+ (dummy-64 () _type_ :state 64)
+ (snow-bunny-lunge () _type_ :state 65)
+ (snow-bunny-nav-resume () _type_ :state 66)
+ (snow-bunny-patrol-hop () _type_ :state 67)
+ (snow-bunny-patrol-idle () _type_ :state 68)
+ (dummy-69 () _type_ :state 69)
+ (snow-bunny-retreat-hop () _type_ :state 70)
+ (snow-bunny-tune-spheres () _type_ :state 71)
(nav-enemy-touch-handler (_type_ process event-message-block) object 72)
(nav-enemy-attack-handler (_type_ process event-message-block) object 73)
(nav-enemy-jump-blocked () _type_ :state 74)
- (dummy-75 (_type_) none 75)
+ (dummy-75 () _type_ :state 75)
)
)
@@ -23235,6 +23296,9 @@
:size-assert #x165
:heap-base #x100
:flag-assert #x2101000165
+ (:methods
+ (notice-blue (handle) _type_ :replace :state 29)
+ )
)
;; - Unknowns
@@ -23360,8 +23424,8 @@
:size-assert #x20
:flag-assert #xc00000020
(:methods
- (sleep (_type_ uint) none 9)
- (reached-delay? (_type_ uint) symbol 10)
+ (sleep (_type_ int) none 9)
+ (reached-delay? (_type_ int) symbol 10)
(completed? (_type_) symbol 11)
)
)
@@ -24999,11 +25063,11 @@
(jump-height-factor float :offset-assert 424)
(jump-anim-start-frame float :offset-assert 428)
(defense uint64 :offset-assert 432)
- (retreat-timeout-time uint64 :offset-assert 440)
- (last-nondangerous-time uint64 :offset-assert 448)
+ (retreat-timeout-time int64 :offset-assert 440)
+ (last-nondangerous-time int64 :offset-assert 448)
(patrol-hop-failed? basic :offset-assert 456)
(should-retreat? basic :offset-assert 460)
- (got-jump-event? basic :offset-assert 464)
+ (got-jump-event? symbol :offset-assert 464)
(using-jump-event? basic :offset-assert 468)
(jump-anim int8 :offset-assert 472)
(notice-land-anim int8 :offset-assert 473)
@@ -25016,7 +25080,13 @@
:heap-base #x190
:flag-assert #x4d01900200
(:methods
- (dummy-76 () none 76))
+ (dummy-51 (_type_ vector vector) symbol :replace 51)
+ (dummy-52 (_type_) symbol :replace 52)
+ (dummy-54 (_type_) symbol :replace 54)
+ (dummy-57 (_type_) symbol :replace 57)
+ (dummy-60 (_type_) none :replace 60)
+ (dummy-76 (_type_ symbol) none 76)
+ )
)
(deftype snow-bunny-retreat-work (structure)
@@ -25033,13 +25103,13 @@
;; - Functions
-(define-extern snow-bunny-execute-jump function)
-(define-extern snow-bunny-initialize-jump function)
-(define-extern snow-bunny-default-event-handler function)
+(define-extern snow-bunny-execute-jump (function none :behavior snow-bunny))
+(define-extern snow-bunny-initialize-jump (function vector none :behavior snow-bunny))
+(define-extern snow-bunny-default-event-handler (function process int symbol event-message-block object :behavior snow-bunny))
;; - Unknowns
-(define-extern *snow-bunny* snow-bunny) ;; unknown type
+(define-extern *snow-bunny* (pointer snow-bunny))
(define-extern *snow-bunny-nav-enemy-info* nav-enemy-info)
(define-extern *snow-bunny-sg* skeleton-group)
@@ -25187,11 +25257,11 @@
(glow-u float :offset-assert 184)
(glow-wf-period int32 :offset-assert 188)
(glow-wf-offset int32 :offset-assert 192)
- (prev-compute-glow-time uint64 :offset-assert 200)
- (start-fade-time uint64 :offset-assert 208)
- (end-fade-time uint64 :offset-assert 216)
- (activated-time uint64 :offset-assert 224)
- (last-updated-user-lighting uint64 :offset-assert 232)
+ (prev-compute-glow-time int64 :offset-assert 200)
+ (start-fade-time int64 :offset-assert 208)
+ (end-fade-time int64 :offset-assert 216)
+ (activated-time int64 :offset-assert 224)
+ (last-updated-user-lighting int64 :offset-assert 232)
(player-attack-id uint64 :offset-assert 240)
(on-color-mult vector :inline :offset-assert 256)
(on-color-emissive vector :inline :offset-assert 272)
@@ -26590,20 +26660,20 @@
;; - Functions
-(define-extern peri-beamcam-init-by-other (function string (pointer process) :behavior process))
+(define-extern peri-beamcam-init-by-other (function string (pointer pov-camera) :behavior process))
(define-extern draw-power-beam (function vector vector none))
(define-extern reflector-origin-update (function entity-actor none :behavior reflector-origin))
(define-extern reflector-init-by-other (function vector none :behavior reflector))
-(define-extern periscope-find-next (function object :behavior periscope))
-(define-extern periscope-find-reflection-angles (function float :behavior periscope))
-(define-extern periscope-update-joints (function float :behavior periscope))
+(define-extern periscope-find-next (function none :behavior periscope))
+(define-extern periscope-find-reflection-angles (function none :behavior periscope))
+(define-extern periscope-update-joints (function none :behavior periscope))
(define-extern periscope-has-power-input? (function symbol :behavior periscope))
(define-extern periscope-draw-beam (function none :behavior periscope))
-(define-extern periscope-find-aim-at-angles (function float :behavior periscope))
+(define-extern periscope-find-aim-at-angles (function none :behavior periscope))
(define-extern periscope-crosshair (function symbol :behavior periscope))
(define-extern periscope-test-task-complete? (function symbol :behavior periscope))
(define-extern periscope-draw-beam-impact (function none :behavior periscope))
-(define-extern periscope-set-target-direction (function vector float :behavior periscope))
+(define-extern periscope-set-target-direction (function vector none :behavior periscope))
(define-extern periscope-post (function none :behavior periscope))
(define-extern periscope-debug-trans (function none :behavior periscope))
(define-extern target-close-to-point? (function vector float symbol))
@@ -29742,18 +29812,18 @@
(deftype cavecrystal-light-control (basic)
((active-count int32 :offset-assert 4)
(head cavecrystal-light :offset-assert 8)
- (last-known-valid-time uint64 :offset-assert 16)
+ (last-known-valid-time int64 :offset-assert 16)
(crystal cavecrystal-light 7 :inline :offset-assert 32)
)
:method-count-assert 15
:size-assert #x170
:flag-assert #xf00000170
(:methods
- (TODO-RENAME-9 (_type_ int float process-drawable) object 9) ;; last arg is a cavecrystal
+ (TODO-RENAME-9 (_type_ int float process-drawable) none 9)
(TODO-RENAME-10 (_type_ vector) float 10)
- (inc-intensites! (_type_) int 11)
- (TODO-RENAME-12 (_type_) symbol 12)
- (create-connection! (_type_ process-drawable res-lump (function object object object object object) object object) connection 13) ;; TODO - process-drawable is often a cavecrystal
+ (inc-intensities! (_type_) none 11)
+ (TODO-RENAME-12 (_type_) none 12)
+ (create-connection! (_type_ process-drawable res-lump (function object object object object object) int float) connection 13) ;; TODO - process-drawable is often a cavecrystal
(execute-connections (_type_) int 14)
)
)
@@ -30709,9 +30779,9 @@
(plat-mask uint32 :offset-assert 184)
(plat-id-dir int32 :offset-assert 188)
(wiggled? symbol :offset-assert 192)
- (timeout uint64 :offset-assert 200)
- (last-plat-activated-time uint64 :offset-assert 208)
- (delay-til-wiggle uint64 :offset-assert 216)
+ (timeout int64 :offset-assert 200)
+ (last-plat-activated-time int64 :offset-assert 208)
+ (delay-til-wiggle int64 :offset-assert 216)
(ticker ticky :inline :offset-assert 224)
)
:method-count-assert 20
@@ -31266,9 +31336,9 @@
)
(deftype sunken-pipegame-prize (structure)
- ((puzzle-delay uint64 :offset-assert 0)
- (pipe-travel-time-to-far uint64 :offset-assert 8)
- (pipe-travel-time-to-jar uint64 :offset-assert 16)
+ ((puzzle-delay int64 :offset-assert 0)
+ (pipe-travel-time-to-far int64 :offset-assert 8)
+ (pipe-travel-time-to-jar int64 :offset-assert 16)
(actor-handle handle :offset-assert 24)
(jar-pos vector :inline :offset-assert 32)
(far-pos vector :inline :offset-assert 48)
@@ -31297,7 +31367,7 @@
:heap-base #x230
:flag-assert #x17023002a0
(:methods
- (dummy-20 (_type_) none 20)
+ (dummy-20 (_type_) uint 20)
(dummy-21 (_type_ symbol) symbol 21)
(dummy-22 (_type_ symbol) none 22)
)
@@ -31413,7 +31483,8 @@
)
(:methods
(initialize-collision (_type_) collide-shape-moving :replace 47)
- (dummy-53 (_type_ vector) symbol :replace 53))
+ (dummy-53 (_type_ vector) symbol :replace 53)
+ )
:method-count-assert 76
:size-assert #x1a8
:heap-base #x140
@@ -32961,7 +33032,7 @@
:heap-base #x180
:flag-assert #x4c018001f0
(:methods
- (dummy-51 (_type_ vector vector) object :replace 51)
+ (dummy-51 (_type_ vector vector) symbol :replace 51)
(dummy-53 (_type_ vector vector) symbol :replace 53)
)
(:states
@@ -32997,9 +33068,8 @@
;; - Types
-(declare-type snow-ball-roller process-drawable)
(deftype snow-ball-shadow (process-drawable)
- ((parent-override (pointer snow-ball-roller) :score 100 :offset 12))
+ ()
:method-count-assert 20
:size-assert #xb0
:heap-base #x40
@@ -33009,8 +33079,8 @@
)
(deftype snow-ball-junction (structure)
- ((enter-time uint64 :offset-assert 0)
- (exit-time uint64 :offset-assert 8)
+ ((enter-time int64 :offset-assert 0)
+ (exit-time int64 :offset-assert 8)
)
:method-count-assert 9
:size-assert #x10
@@ -33038,8 +33108,8 @@
(delay-til-bounce int32 :offset-assert 204)
(rolling-sound-id sound-id :offset-assert 208)
(rolling-sound-enabled? symbol :offset-assert 212)
- (last-bounce-time uint64 :offset-assert 216)
- (hit-player-time uint64 :offset-assert 224)
+ (last-bounce-time int64 :offset-assert 216)
+ (hit-player-time int64 :offset-assert 224)
(path-info snow-ball-path-info :inline :offset-assert 240)
(junctions snow-ball-junction 4 :inline :offset-assert 272)
)
@@ -33048,7 +33118,7 @@
:heap-base #xe0
:flag-assert #x1700e00150
(:methods
- (follow-path (_type_) float 20)
+ (follow-path (_type_) none 20)
(play-landing-sound (_type_ float) sound-id 21)
(dummy-22 (_type_ process-drawable) none 22)
)
@@ -33058,7 +33128,7 @@
(deftype snow-ball (process)
((child-override (pointer snow-ball-roller) :score 100 :offset 20)
- (state-time uint64 :offset-assert 112)
+ (state-time int64 :offset-assert 112)
(last-path-picked int32 :offset-assert 120)
(same-path-picked-count int32 :offset-assert 124)
(delay-til-next int32 :offset-assert 128)
@@ -33070,7 +33140,7 @@
:flag-assert #x100020008c
(:methods
(dummy-14 (_type_ (inline-array snow-ball-junction) float int) symbol 14)
- (dummy-15 (_type_ (inline-array snow-ball-junction) int) none 15) ;; TODO - same type as above
+ (dummy-15 (_type_ (inline-array snow-ball-junction) int) symbol 15)
)
(:states
snow-ball-idle)
@@ -33078,10 +33148,10 @@
;; - Functions
-(define-extern snow-ball-roller-init-by-other (function entity snow-ball float int vector none :behavior snow-ball-roller))
+(define-extern snow-ball-roller-init-by-other (function entity-actor snow-ball float int (inline-array snow-ball-junction) none :behavior snow-ball-roller))
(define-extern snow-ball-shadow-init-by-other (function none :behavior snow-ball-shadow))
(define-extern snow-ball-roller-path-update (function none :behavior snow-ball-roller))
-(define-extern snow-ball-roller-path-init (function float :behavior snow-ball-roller))
+(define-extern snow-ball-roller-path-init (function none :behavior snow-ball-roller))
;; - Unknowns
@@ -33284,8 +33354,8 @@
(deftype snow-button (process-drawable)
((root-override collide-shape-moving :score 100 :offset 112)
(wiggled? symbol :offset-assert 176)
- (timeout uint64 :offset-assert 184)
- (delay-til-wiggle uint64 :offset-assert 192)
+ (timeout int64 :offset-assert 184)
+ (delay-til-wiggle int64 :offset-assert 192)
(prev-button entity-actor :offset-assert 200)
(ticker ticky :inline :offset-assert 208)
)
@@ -33448,14 +33518,19 @@
:size-assert #x1f4
:heap-base #x190
:flag-assert #x4c019001f4
+ (:methods
+ (dummy-51 (_type_ vector) symbol :replace 51)
+ (dummy-52 (_type_) symbol :replace 52)
+ (dummy-57 (_type_ float) float :replace 57)
+ )
(:states
ram-boss-tracking
ram-boss-nav-resume
ram-boss-throw
ram-boss-nav-start
ram-boss-jump-down-hit-ground
- (ram-boss-jump-down basic vector)
- (ram-boss-already-down basic vector)
+ (ram-boss-jump-down basic)
+ (ram-boss-already-down basic)
ram-boss-idle
ram-boss-lose-shield
ram-boss-up-defend-block
diff --git a/decompiler/config/jak1_ntsc_black_label/anonymous_function_types.jsonc b/decompiler/config/jak1_ntsc_black_label/anonymous_function_types.jsonc
index 610815e4e4..871f58b03c 100644
--- a/decompiler/config/jak1_ntsc_black_label/anonymous_function_types.jsonc
+++ b/decompiler/config/jak1_ntsc_black_label/anonymous_function_types.jsonc
@@ -772,13 +772,13 @@
[27, "(function none :behavior process)"],
[28, "(function none :behavior fisher)"],
[20, "(function none :behavior fisher-fish)"],
- [1, "(function none :behavior target)"]
+ [1, "(function none :behavior manipy)"]
],
"fisher-JUNGLE-L1": [
[27, "(function none :behavior process)"],
[28, "(function none :behavior fisher)"],
[20, "(function none :behavior fisher-fish)"],
- [1, "(function none :behavior target)"]
+ [1, "(function none :behavior manipy)"]
],
"robotboss-misc": [
diff --git a/decompiler/config/jak1_ntsc_black_label/hacks.jsonc b/decompiler/config/jak1_ntsc_black_label/hacks.jsonc
index 08e9fa7706..f4ec297a64 100644
--- a/decompiler/config/jak1_ntsc_black_label/hacks.jsonc
+++ b/decompiler/config/jak1_ntsc_black_label/hacks.jsonc
@@ -280,12 +280,7 @@
// ocean-vu0
"ocean-generate-verts", // crash
- "ocean-interp-wave",
-
- // all unchecked and in level DGO code
- "(anon-function 21 plant-boss)", // CFG
- //"target-flut-falling-anim-trans", // CFG failure
- "(anon-function 5 orbit-plat)" // CFG
+ "ocean-interp-wave"
],
// these functions use pairs and the decompiler
@@ -499,7 +494,12 @@
"end-collect-nav": [0],
"robotboss-always-trans": [9, 10, 11, 12, 13, 14, 15, 18, 29, 36, 45, 48],
"target-flut-falling-anim-trans" : [5, 6],
- "(method 27 ropebridge)" : [5, 7]
+ "(method 27 ropebridge)" : [5, 7],
+ "(anon-function 5 orbit-plat)": [4, 5, 11],
+ "(anon-function 21 plant-boss)": [0, 1, 3, 4],
+ "(method 55 ram-boss)": [5],
+ "(method 60 ice-cube)": [8],
+ "(anon-function 2 snow-ball)": [22]
},
// Sometimes the game might use format strings that are fetched dynamically,
diff --git a/decompiler/config/jak1_ntsc_black_label/label_types.jsonc b/decompiler/config/jak1_ntsc_black_label/label_types.jsonc
index 07ff8d2250..c74760bef1 100644
--- a/decompiler/config/jak1_ntsc_black_label/label_types.jsonc
+++ b/decompiler/config/jak1_ntsc_black_label/label_types.jsonc
@@ -332,7 +332,10 @@
"eye": [["L36", "eye-work"]],
- "shadow-cpu": [["L122", "shadow-data"]],
+ "shadow-cpu": [
+ ["L122", "shadow-data"],
+ ["L121", "vu-function"]
+ ],
"load-boundary": [
["L327", "(inline-array lbvtx)", 12],
@@ -1996,8 +1999,8 @@
],
"snow-ball": [
- ["L86", "(inline-array vector)", 2], // likely wrong, but its 8 floats -- maybe its timing related, like a ticky? but those are int64s
- ["L87", "(inline-array vector)", 2], // likely wrong, but its 8 floats -- maybe its timing related, like a ticky? but those are int64s
+ ["L86", "(pointer float)", 8],
+ ["L87", "(pointer float)", 8],
["L89", "attack-info"]
],
@@ -2111,6 +2114,10 @@
["L523", "float", true] // TODO - meters
],
+ "snow-bunny": [
+ ["L190", "attack-info"]
+ ],
+
// please do not add things after this entry! git is dumb.
"object-file-that-doesnt-actually-exist-and-i-just-put-this-here-to-prevent-merge-conflicts-with-this-file": []
}
diff --git a/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc b/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc
index 0dc7c6bbc8..6ea971a1be 100644
--- a/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc
+++ b/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc
@@ -1691,7 +1691,7 @@
"cam-collision-record-draw": [
[16, "vector4w"],
[32, "vector4w"],
- [48, "collide-mesh-cache-tri"],
+ [48, "collide-tri-result"],
[144, "vector"]
],
@@ -2994,7 +2994,7 @@
"citb-sagecage-draw-bars": [
[16, "vector"],
- [32, "vector"],
+ [32, "quaternion"],
[48, "vector"]
],
@@ -3031,8 +3031,8 @@
"(code target-fishing)": [
[16, "event-message-block"],
[96, "vector"],
- [112, "quaternion"],
- [128, "quaternion"],
+ [112, "vector"],
+ [128, "vector"],
[144, "quaternion"]
],
"(method 43 fisher)": [
@@ -3732,7 +3732,7 @@
"(method 53 ice-cube)": [
[16, "vector"],
- [32, "collide-mesh-cache-tri"]
+ [32, "collide-tri-result"]
],
"(event double-lurker-top-knocked-down)": [
@@ -5118,7 +5118,7 @@
"(method 55 ram-boss)": [
[16, "vector"],
[32, "vector"],
- [48, "collide-mesh-cache-tri"]
+ [48, "collide-tri-result"]
],
"(enter ram-boss-jump-down)": [
@@ -5172,7 +5172,7 @@
],
"(code snow-ball-idle)": [
- [16, "vector"]
+ [16, ["inline-array", "snow-ball-junction", 4]]
],
"(method 11 spider-egg)": [
@@ -5458,7 +5458,7 @@
"(event mistycannon-missile-explode)": [
[16, "vector"],
- [32, "collide-mesh-cache-tri"],
+ [32, "collide-tri-result"],
[128, "event-message-block"]
],
@@ -6378,5 +6378,70 @@
[16, "vector"]
],
+ "(code orbit-plat-rotating)": [
+ [16, "vector"],
+ [32, "vector"],
+ [48, "vector"]
+ ],
+
+ "(code plant-boss-intro)": [
+ [16, "event-message-block"]
+ ],
+
+ "(event notice-blue plat-eco)": [
+ [16, "event-message-block"]
+ ],
+
+ "(trans notice-blue plat-eco)": [
+ [16, "event-message-block"]
+ ],
+
+ "(trans plat-idle plat-eco)": [
+ [16, "event-message-block"]
+ ],
+
+ "snow-bunny-default-event-handler": [
+ [16, "event-message-block"]
+ ],
+
+ "(code notice-blue plat-eco)": [
+ [16, "vector"]
+ ],
+
+ "(method 51 snow-bunny)": [
+ [16, "vector"],
+ [32, "collide-tri-result"]
+ ],
+
+ "(method 53 snow-bunny)": [
+ [16, "vector"]
+ ],
+
+ "(method 54 snow-bunny)": [
+ [16, "vector"],
+ [32, "vector"]
+ ],
+
+ "(method 52 snow-bunny)": [
+ [16, "vector"],
+ [32, "vector"]
+ ],
+
+ "(code nav-enemy-notice snow-bunny)": [
+ [16, "vector"]
+ ],
+
+ "(trans snow-bunny-attack snow-bunny)": [
+ [16, "vector"]
+ ],
+
+ "(method 55 snow-bunny)": [
+ [16, "snow-bunny-retreat-work"],
+ [64, "vector"],
+ [80, "vector"],
+ [96, "vector"],
+ [112, "nav-gap-info"]
+ ],
+
"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 a2b53670a5..c60ba39025 100644
--- a/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc
+++ b/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc
@@ -2630,7 +2630,7 @@
"citb-drop-plat-drop-children": [[[23, 29], "a0", "drop-plat"]],
"citb-drop-plat-spawn-children": [
- [98, "t9", "(function process function vector uint uint int)"]
+ [98, "t9", "(function process function vector int int int none)"]
],
"(method 11 citb-drop-plat)": [
@@ -3944,8 +3944,8 @@
"(code robotboss-blue-wait)": [[14, "v1", "art-joint-anim"]],
"(enter green-eco-lurker-appear)": [
- [12, "v1", "robotboss"],
- [17, "v1", "robotboss"]
+ [12, "v1", "green-eco-lurker-gen"],
+ [17, "v1", "green-eco-lurker-gen"]
],
"(code green-eco-lurker-appear)": [
@@ -4653,8 +4653,7 @@
],
"dark-plants-all-done": [
- [6, "a0", "dark-plant"],
- [12, "a0", "dark-plant"]
+ [25, "v1", "dark-plant"]
],
"(code happy-plant-opening)": [
@@ -5464,7 +5463,7 @@
],
"(event play-anim green-sagecage)": [
- [128, "s5", "robotboss"]
+ [128, "s5", "process-drawable"]
],
"(method 21 citb-sagecage)": [
@@ -7101,12 +7100,6 @@
[[3, 99], "s4", "joint-mod-tracker"]
],
- "(method 14 snow-ball)": [
- [16, "v1", "vector"],
- [23, "v1", "vector"],
- [30, "v1", "vector"]
- ],
-
"(method 7 snow-ball)": [
[26, "t9", "(function process-drawable int process-drawable)"]
],
@@ -7261,7 +7254,7 @@
[189, "a1", "collectable"],
[280, "s0", "collectable"],
[371, "s0", "collectable"],
- [[407, 410], "v1", "sunken-pipegame-button"]
+ [[407, 409], "v1", "(pointer sunken-pipegame-button)"]
],
"(method 7 sunken-pipegame)": [
@@ -7751,6 +7744,18 @@
[130, "v1", "art-joint-anim"]
],
+ "(code nav-enemy-notice snow-bunny)": [
+ [145, "v1", "art-joint-anim"]
+ ],
+
+ "(code snow-bunny-lunge snow-bunny)": [
+ [22, "v1", "art-joint-anim"]
+ ],
+
+ "(code snow-bunny-attack snow-bunny)": [
+ [20, "v1", "art-joint-anim"]
+ ],
+
"ogreboss-pick-target": [
[31, "s3", "process-drawable"]
],
@@ -7860,5 +7865,37 @@
[[23, 24], "s3", "ropebridge-spring-point"]
],
+ "(code orbit-plat-rotating)": [
+ [12, "a2", "orbit-plat"]
+ ],
+
+ "(code notice-blue plat-eco)": [
+ [22, "v1", "process-drawable"],
+ [36, "v1", "collide-shape"]
+ ],
+
+ "snow-bunny-default-event-handler": [
+ [52, "v1", "vector"]
+ ],
+
+ "(method 15 snow-ball)": [
+ [3, "v1", "(pointer snow-ball-roller)"],
+ [25, "v1", "(pointer snow-ball-roller)"],
+ [34, "v1", "(pointer snow-ball-roller)"],
+ [36, "v1", "(pointer snow-ball-roller)"],
+ [28, "a3", "(inline-array snow-ball-junction)"],
+ [7, "a3", "(inline-array snow-ball-junction)"],
+ [13, "a3", "(inline-array snow-ball-junction)"],
+ [20, "a3", "(inline-array snow-ball-junction)"]
+ ],
+
+ "(trans snow-ball-shadow-idle)": [
+ [4, "a0", "process-drawable"]
+ ],
+
+ "snow-ball-shadow-init-by-other": [
+ [20, "a0", "process-drawable"]
+ ],
+
"placeholder-do-not-add-below": []
}
diff --git a/decompiler/config/jak1_ntsc_black_label/var_names.jsonc b/decompiler/config/jak1_ntsc_black_label/var_names.jsonc
index fa2f5e6ced..9e502ab56c 100644
--- a/decompiler/config/jak1_ntsc_black_label/var_names.jsonc
+++ b/decompiler/config/jak1_ntsc_black_label/var_names.jsonc
@@ -3972,5 +3972,12 @@
}
},
+ "(method 15 snow-ball)": {
+ "vars": {
+ "v1-0": ["v1-0", "(pointer snow-ball-roller)"],
+ "a3-1": ["a3-1", "(inline-array snow-ball-junction)"]
+ }
+ },
+
"aaaaaaaaaaaaaaaaaaaaaaa": {}
}
diff --git a/game/graphics/opengl_renderer/DirectRenderer.cpp b/game/graphics/opengl_renderer/DirectRenderer.cpp
index 225ceefe55..374299455e 100644
--- a/game/graphics/opengl_renderer/DirectRenderer.cpp
+++ b/game/graphics/opengl_renderer/DirectRenderer.cpp
@@ -353,25 +353,34 @@ void DirectRenderer::update_gl_blend() {
if (!state.alpha_blend_enable) {
glDisable(GL_BLEND);
} else {
+ glEnable(GL_BLEND);
if (state.a == GsAlpha::BlendMode::SOURCE && state.b == GsAlpha::BlendMode::DEST &&
state.c == GsAlpha::BlendMode::SOURCE && state.d == GsAlpha::BlendMode::DEST) {
// (Cs - Cd) * As + Cd
// Cs * As + (1 - As) * Cd
- glEnable(GL_BLEND);
// s, d
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ glBlendEquation(GL_FUNC_ADD);
} else if (state.a == GsAlpha::BlendMode::SOURCE &&
state.b == GsAlpha::BlendMode::ZERO_OR_FIXED &&
state.c == GsAlpha::BlendMode::SOURCE && state.d == GsAlpha::BlendMode::DEST) {
// (Cs - 0) * As + Cd
- // Cs * As + (1) * CD
- glEnable(GL_BLEND);
+ // Cs * As + (1) * Cd
// s, d
glBlendFunc(GL_SRC_ALPHA, GL_ONE);
+ glBlendEquation(GL_FUNC_ADD);
+ } else if (state.a == GsAlpha::BlendMode::ZERO_OR_FIXED &&
+ state.b == GsAlpha::BlendMode::SOURCE && state.c == GsAlpha::BlendMode::SOURCE &&
+ state.d == GsAlpha::BlendMode::DEST) {
+ // (0 - Cs) * As + Cd
+ // Cd - Cs * As
+ // s, d
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE);
+ glBlendEquation(GL_FUNC_REVERSE_SUBTRACT);
} else {
// unsupported blend: a 0 b 2 c 2 d 1
- lg::error("unsupported blend: a {} b {} c {} d {}", (int)state.a, (int)state.b, (int)state.c,
- (int)state.d);
+ lg::error("unsupported blend: a {} b {} c {} d {} NOTE THIS DOWN IMMEDIATELY!!", (int)state.a,
+ (int)state.b, (int)state.c, (int)state.d);
assert(false);
}
}
diff --git a/game/graphics/opengl_renderer/Sprite3.cpp b/game/graphics/opengl_renderer/Sprite3.cpp
index e9e272c292..59a58d25a1 100644
--- a/game/graphics/opengl_renderer/Sprite3.cpp
+++ b/game/graphics/opengl_renderer/Sprite3.cpp
@@ -417,6 +417,10 @@ void Sprite3::render(DmaFollower& dma, SharedRenderState* render_state, ScopedPr
// fmt::print(" vif: {}\n", VifCode(data.vif1()).print());
}
}
+
+ glEnable(GL_BLEND);
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ glBlendEquation(GL_FUNC_ADD);
}
void Sprite3::draw_debug_window() {
diff --git a/game/graphics/opengl_renderer/SpriteRenderer.cpp b/game/graphics/opengl_renderer/SpriteRenderer.cpp
index f64f202512..779368341b 100644
--- a/game/graphics/opengl_renderer/SpriteRenderer.cpp
+++ b/game/graphics/opengl_renderer/SpriteRenderer.cpp
@@ -406,6 +406,10 @@ void SpriteRenderer::render(DmaFollower& dma,
// fmt::print(" vif: {}\n", VifCode(data.vif1()).print());
}
}
+
+ glEnable(GL_BLEND);
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ glBlendEquation(GL_FUNC_ADD);
}
void SpriteRenderer::draw_debug_window() {
@@ -531,26 +535,35 @@ void SpriteRenderer::update_gl_blend(AdGifState& state) {
if (!m_prim_gl_state.alpha_blend_enable) {
glDisable(GL_BLEND);
} else {
+ glEnable(GL_BLEND);
if (state.a == GsAlpha::BlendMode::SOURCE && state.b == GsAlpha::BlendMode::DEST &&
state.c == GsAlpha::BlendMode::SOURCE && state.d == GsAlpha::BlendMode::DEST) {
// (Cs - Cd) * As + Cd
// Cs * As + (1 - As) * Cd
- glEnable(GL_BLEND);
// s, d
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ glBlendEquation(GL_FUNC_ADD);
} else if (state.a == GsAlpha::BlendMode::SOURCE &&
state.b == GsAlpha::BlendMode::ZERO_OR_FIXED &&
state.c == GsAlpha::BlendMode::SOURCE && state.d == GsAlpha::BlendMode::DEST) {
// (Cs - 0) * As + Cd
- // Cs * As + (1) * CD
- glEnable(GL_BLEND);
+ // Cs * As + (1) * Cd
// s, d
glBlendFunc(GL_SRC_ALPHA, GL_ONE);
+ glBlendEquation(GL_FUNC_ADD);
+ } else if (state.a == GsAlpha::BlendMode::ZERO_OR_FIXED &&
+ state.b == GsAlpha::BlendMode::SOURCE && state.c == GsAlpha::BlendMode::SOURCE &&
+ state.d == GsAlpha::BlendMode::DEST) {
+ // (0 - Cs) * As + Cd
+ // Cd - Cs * As
+ // s, d
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE);
+ glBlendEquation(GL_FUNC_REVERSE_SUBTRACT);
} else {
// unsupported blend: a 0 b 2 c 2 d 1
- lg::error("unsupported blend: a {} b {} c {} d {}", (int)state.a, (int)state.b, (int)state.c,
- (int)state.d);
- // assert(false);
+ lg::error("unsupported blend: a {} b {} c {} d {} NOTE THIS DOWN IMMEDIATELY!!", (int)state.a,
+ (int)state.b, (int)state.c, (int)state.d);
+ assert(false);
}
}
}
diff --git a/goal_src/build/all_files.gc b/goal_src/build/all_files.gc
index d3c9d8fd8e..225d102024 100644
--- a/goal_src/build/all_files.gc
+++ b/goal_src/build/all_files.gc
@@ -346,7 +346,7 @@
"goal_src/levels/citadel/citadel-obs.gc"
"goal_src/levels/citadel/citb-plat.gc"
"goal_src/levels/citadel/citadel-sages.gc"
- "goal_src/levels/common/snow-bunny.gc"
+ "goal_src/levels/snow/snow-bunny.gc"
"goal_src/levels/citadel/citb-bunny.gc"
"goal_src/levels/citadel/citb-drop-plat-CIT.gc"
"goal_src/levels/l1_only/citb-drop-plat-L1.gc"
diff --git a/goal_src/build/all_objs.json b/goal_src/build/all_objs.json
index 3674f0fff5..222d16836c 100644
--- a/goal_src/build/all_objs.json
+++ b/goal_src/build/all_objs.json
@@ -390,7 +390,7 @@
["citadel-obs", "citadel-obs", 3, ["CIT", "L1"], "levels/citadel"],
["citb-plat", "citb-plat", 3, ["CIT", "L1"], "levels/citadel"],
["citadel-sages", "citadel-sages", 3, ["CIT", "L1"], "levels/citadel"],
-["snow-bunny", "snow-bunny", 3, ["CIT", "L1", "SNO"], "levels/common"],
+["snow-bunny", "snow-bunny", 3, ["CIT", "L1", "SNO"], "levels/snow"],
["citb-bunny", "citb-bunny", 3, ["CIT", "L1"], "levels/citadel"],
["citb-drop-plat-CIT", "citb-drop-plat", 3, ["CIT"], "levels/citadel"],
["citb-drop-plat-L1", "citb-drop-plat", 3, ["L1"], "levels/l1_only"],
diff --git a/goal_src/engine/ambient/ambient.gc b/goal_src/engine/ambient/ambient.gc
index 260c652fd8..fbd77593d5 100644
--- a/goal_src/engine/ambient/ambient.gc
+++ b/goal_src/engine/ambient/ambient.gc
@@ -221,7 +221,7 @@
(none)
)
-(defun can-grab-display? ((arg0 process-taskable))
+(defun can-grab-display? ((arg0 process))
(let ((v1-2 (handle->process (-> *game-info* display-text-handle))))
(when (and (or (not v1-2) (= v1-2 arg0) (>= (- (-> *display* base-frame-counter) (-> *game-info* display-text-time)) 30))
(and *target*
diff --git a/goal_src/engine/anim/bones.gc b/goal_src/engine/anim/bones.gc
index 00864150b8..38eccf9bdb 100644
--- a/goal_src/engine/anim/bones.gc
+++ b/goal_src/engine/anim/bones.gc
@@ -647,6 +647,15 @@
(none)
)
+(define *default-shadow-settings* (new 'static 'shadow-settings
+ :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)
+ :top-plane (new 'static 'plane :y 1.0 :w 4096.0)
+ :fade-dist 409600.0
+ )
+ )
+
(define-extern draw-bones (function draw-control dma-buffer float none))
;; HACK incomplete:
diff --git a/goal_src/engine/camera/cam-debug-h.gc b/goal_src/engine/camera/cam-debug-h.gc
index 438e383885..fbc8c8e3aa 100644
--- a/goal_src/engine/camera/cam-debug-h.gc
+++ b/goal_src/engine/camera/cam-debug-h.gc
@@ -22,7 +22,7 @@
(define-extern cam-slave-options->string (function cam-slave-options object string))
(define-extern cam-index-options->string (function cam-index-options object string))
(define-extern debug-set-camera-pos-rot! (function vector matrix vector))
-(define-extern camera-slave-debug (function camera-slave object)) ;; passed to engine::method-15
+(define-extern camera-slave-debug (function camera-slave none))
;; TODO - for cam-states
(define-extern cam-debug-add-los-tri (function (inline-array collide-cache-tri) vector vector none))
(define-extern cam-collision-record-save (function vector vector int symbol camera-slave none))
diff --git a/goal_src/engine/camera/cam-debug.gc b/goal_src/engine/camera/cam-debug.gc
index f081f3b2fa..90db257fef 100644
--- a/goal_src/engine/camera/cam-debug.gc
+++ b/goal_src/engine/camera/cam-debug.gc
@@ -5,88 +5,709 @@
;; name in dgo: cam-debug
;; dgos: GAME, ENGINE
+;; this file is debug only
+(declare-file (debug))
(when *debug-segment*
+(when (or (not *camera-old-cpu*) (zero? *camera-old-cpu*))
+ (set! *camera-old-cpu* 0)
+ 0
+ )
-(defun external-cam-reset! ()
- (vector-reset! (-> *math-camera* trans))
- (matrix-identity! (-> *math-camera* inv-camera-rot))
- (when *camera-combiner*
- (let* ((v1-6 (-> *math-camera* inv-camera-rot))
- (a3-0 (-> *camera-combiner* inv-camera-rot))
- (a0-2 (-> a3-0 vector 0 quad))
- (a1-0 (-> a3-0 vector 1 quad))
- (a2-0 (-> a3-0 vector 2 quad))
- (a3-1 (-> a3-0 vector 3 quad))
- )
- (set! (-> v1-6 vector 0 quad) a0-2)
- (set! (-> v1-6 vector 1 quad) a1-0)
- (set! (-> v1-6 vector 2 quad) a2-0)
- (set! (-> v1-6 vector 3 quad) a3-1)
- )
- (set! (-> *math-camera* trans quad) (-> *camera-combiner* trans quad))
+(when (or (not *camera-old-vu*) (zero? *camera-old-vu*))
+ (set! *camera-old-vu* 0)
+ 0
+ )
+
+(when (or (not *camera-old-tfrag-bytes*) (zero? *camera-old-tfrag-bytes*))
+ (set! *camera-old-tfrag-bytes* 0)
+ 0
+ )
+
+(define-perm *camera-old-level* string (new 'global 'string 128 (the-as string #f)))
+
+(define-perm *camera-old-stat-string-tfrag* string (new 'global 'string 128 (the-as string #f)))
+
+(define-perm *camera-old-stat-string-tfrag-near* string (new 'global 'string 128 (the-as string #f)))
+
+(define-perm *camera-old-stat-string-total* string (new 'global 'string 128 (the-as string #f)))
+
+(deftype cam-dbg-scratch (structure)
+ ((linevec4w vector4w 2 :inline :offset-assert 0)
+ (color vector :inline :offset-assert 32)
+ (plotvec vector 2 :inline :offset-assert 48)
+ (linevec vector 2 :inline :offset-assert 80)
+ (rel-vec vector :inline :offset-assert 112)
+ (sphere-v-start vector :inline :offset-assert 128)
+ (sphere-v-end vector :inline :offset-assert 144)
+ (sphere-v-down vector :inline :offset-assert 160)
+ (sphere-vec vector :inline :offset-assert 176)
+ (crossvec vector 3 :inline :offset-assert 192)
+ (bboxvec vector 6 :inline :offset-assert 240)
+ (fov-vv vector 4 :inline :offset-assert 336)
+ (fov-src vector :inline :offset-assert 400)
+ (fov-dest vector :inline :offset-assert 416)
+ (fov-vert vector :inline :offset-assert 432)
+ (fov-horz vector :inline :offset-assert 448)
)
+ :method-count-assert 9
+ :size-assert #x1d0
+ :flag-assert #x9000001d0
+ )
+
+
+(defun cam-slave-options->string ((arg0 cam-slave-options) (arg1 object))
+ (if (= (logand (cam-slave-options AIR_EXIT) arg0) (cam-slave-options AIR_EXIT))
+ (format arg1 "AIR_EXIT ")
+ )
+ (if (= (logand (cam-slave-options STICKY_ANGLE) arg0) (cam-slave-options STICKY_ANGLE))
+ (format arg1 "STICKY_ANGLE ")
+ )
+ (if (= (logand arg0 (cam-slave-options NO_ROTATE)) (cam-slave-options NO_ROTATE))
+ (format arg1 "NO_ROTATE ")
+ )
+ (if (= (logand arg0 (cam-slave-options BIKE_MODE)) (cam-slave-options BIKE_MODE))
+ (format arg1 "BIKE_MODE ")
+ )
+ (if (= (logand arg0 (cam-slave-options BLOCK_SHIFT_BUTTONS)) (cam-slave-options BLOCK_SHIFT_BUTTONS))
+ (format arg1 "BLOCK_SHIFT_BUTTONS ")
+ )
+ (if (= (logand arg0 (cam-slave-options GOTO_GOOD_POINT)) (cam-slave-options GOTO_GOOD_POINT))
+ (format arg1 "GOTO_GOOD_POINT ")
+ )
+ (if (= (logand arg0 (cam-slave-options SHRINK_MAX_ANGLE)) (cam-slave-options SHRINK_MAX_ANGLE))
+ (format arg1 "SHRINK_MAX_ANGLE ")
+ )
+ (if (= (logand arg0 (cam-slave-options MOVEMENT_BLOCKED)) (cam-slave-options MOVEMENT_BLOCKED))
+ (format arg1 "MOVEMENT_BLOCKED ")
+ )
+ (if (= (logand arg0 (cam-slave-options LINE_OF_SIGHT)) (cam-slave-options LINE_OF_SIGHT))
+ (format arg1 "LINE_OF_SIGHT ")
+ )
+ (if (= (logand arg0 (cam-slave-options PLAYER_MOVING_CAMERA)) (cam-slave-options PLAYER_MOVING_CAMERA))
+ (format arg1 "PLAYER_MOVING_CAMERA ")
+ )
+ (if (= (logand arg0 (cam-slave-options DRAG)) (cam-slave-options DRAG))
+ (format arg1 "DRAG ")
+ )
+ (if (= (logand arg0 (cam-slave-options FIND_HIDDEN_TARGET)) (cam-slave-options FIND_HIDDEN_TARGET))
+ (format arg1 "FIND_HIDDEN_TARGET ")
+ )
+ (if (= (logand arg0 (cam-slave-options COLLIDE)) (cam-slave-options COLLIDE))
+ (format arg1 "COLLIDE ")
+ )
+ (if (= (logand arg0 (cam-slave-options JUMP_PITCHES)) (cam-slave-options JUMP_PITCHES))
+ (format arg1 "JUMP_PITCHES ")
+ )
+ (if (= (logand arg0 (cam-slave-options ALLOW_Z_ROT)) (cam-slave-options ALLOW_Z_ROT))
+ (format arg1 "ALLOW_Z_ROT ")
+ )
+ (if (= (logand arg0 (cam-slave-options MOVE_SPHERICAL)) (cam-slave-options MOVE_SPHERICAL))
+ (format arg1 "MOVE_SPHERICAL ")
+ )
+ (if (= (logand arg0 (cam-slave-options SAME_SIDE)) (cam-slave-options SAME_SIDE))
+ (format arg1 "SAME_SIDE ")
+ )
+ (if (= (logand arg0 (cam-slave-options BUTT_CAM)) (cam-slave-options BUTT_CAM))
+ (format arg1 "BUTT_CAM ")
+ )
+ (the-as string arg1)
+ )
+
+(defun cam-index-options->string ((arg0 cam-index-options) (arg1 object))
+ (if (= (logand arg0 (cam-index-options SPHERICAL)) (cam-index-options SPHERICAL))
+ (format arg1 "RADIAL ")
+ )
+ (if (= (logand arg0 (cam-index-options RADIAL)) (cam-index-options RADIAL))
+ (format arg1 "SPHERICAL ")
+ )
+ (the-as string arg1)
+ )
+
+(defun slave-los-state->string ((arg0 slave-los-state))
+ (case arg0
+ (((slave-los-state between))
+ "between"
+ )
+ (((slave-los-state ccw))
+ "ccw"
+ )
+ (((slave-los-state cw))
+ "cw"
+ )
+ (((slave-los-state none))
+ "none"
+ )
+ (else
+ "*unknown*"
+ )
+ )
+ )
+
+(deftype cam-debug-tri (structure)
+ ((vertex vector 3 :inline :offset-assert 0)
+ (intersect vector :inline :offset-assert 48)
+ (color vector4w :offset-assert 64)
+ )
+ :method-count-assert 9
+ :size-assert #x44
+ :flag-assert #x900000044
+ )
+
+
+(define *cam-debug-los-tri-current* 0)
+
+(define *cam-debug-los-tri* (the-as (inline-array cam-debug-tri) (malloc 'debug #x8fc0)))
+
+(define *cam-debug-coll-tri-current* 0)
+
+(define *cam-debug-coll-tri* (the-as (inline-array cam-debug-tri) (malloc 'debug #x8fc0)))
+
+(defun cam-debug-reset-coll-tri ()
+ (set! *cam-debug-los-tri-current* 0)
+ (set! *cam-debug-coll-tri-current* 0)
+ 0
+ (none)
+ )
+
+(defun cam-debug-add-los-tri ((arg0 (inline-array collide-cache-tri)) (arg1 vector) (arg2 vector))
+ (cond
+ ((>= *cam-debug-los-tri-current* 460)
+ )
+ (else
+ (let ((v1-3 (-> *cam-debug-los-tri* *cam-debug-los-tri-current*)))
+ (set! (-> v1-3 vertex 0 quad) (-> arg0 0 vertex 0 quad))
+ (set! (-> v1-3 vertex 1 quad) (-> arg0 0 vertex 1 quad))
+ (set! (-> v1-3 vertex 2 quad) (-> arg0 0 vertex 2 quad))
+ (set! (-> v1-3 intersect quad) (-> arg1 quad))
+ (set! (-> v1-3 color) (the-as vector4w arg2))
+ )
+ (set! *cam-debug-los-tri-current* (+ *cam-debug-los-tri-current* 1))
+ (if (= *cam-debug-los-tri-current* 460)
+ (format 0 "ERROR : cam-debug-add-los-tri overflow~%")
+ )
+ )
+ )
+ 0
+ (none)
+ )
+
+(defun cam-debug-add-coll-tri ((arg0 cam-debug-tri) (arg1 vector) (arg2 cam-debug-tri))
+ (cond
+ ((>= *cam-debug-coll-tri-current* 460)
+ )
+ (else
+ (let ((v1-3 (-> *cam-debug-coll-tri* *cam-debug-coll-tri-current*)))
+ (set! (-> v1-3 vertex 0 quad) (-> arg0 vertex 0 quad))
+ (set! (-> v1-3 vertex 1 quad) (-> arg0 vertex 1 quad))
+ (set! (-> v1-3 vertex 2 quad) (-> arg0 vertex 2 quad))
+ (set! (-> v1-3 intersect quad) (-> arg1 quad))
+ (set! (-> v1-3 color) (the-as vector4w arg2))
+ )
+ (set! *cam-debug-coll-tri-current* (+ *cam-debug-coll-tri-current* 1))
+ (if (>= *cam-debug-coll-tri-current* 460)
+ (format 0 "ERROR : cam-debug-add-coll-tri overflow~%")
+ )
+ )
+ )
+ 0
+ (none)
+ )
+
+(defmethod print-nth-point tracking-spline ((obj tracking-spline) (arg0 int))
+ (if (= arg0 (-> obj used-point))
+ (format 0 "u")
+ (format 0 " ")
+ )
+ (if (= arg0 (-> obj next-to-last-point))
+ (format 0 "n")
+ (format 0 " ")
+ )
+ (if (= arg0 (-> obj end-point))
+ (format 0 "e")
+ (format 0 " ")
+ )
+ (if (= arg0 -134250495)
+ (format 0 " ~D~%" arg0)
+ (format
+ 0
+ " ~D ~M ~M ~M~%"
+ arg0
+ (-> obj point arg0 position x)
+ (-> obj point arg0 position y)
+ (-> obj point arg0 position z)
+ )
+ )
+ 0
+ (none)
+ )
+
+(defmethod TODO-RENAME-12 tracking-spline ((obj tracking-spline))
+ (let ((s5-0 (-> obj used-point)))
+ (while (!= s5-0 -134250495)
+ (print-nth-point obj s5-0)
+ (set! s5-0 (-> obj point s5-0 next))
+ )
+ (print-nth-point obj s5-0)
+ )
+ 0
+ (none)
+ )
+
+(defmethod TODO-RENAME-23 tracking-spline ((obj tracking-spline))
+ (let ((s5-0 (-> obj used-point))
+ (s4-0 (-> obj point (-> obj used-point) next))
+ )
+ (let ((s3-0 (new 'stack-no-clear 'vector)))
+ (when (!= s4-0 -134250495)
+ (TODO-RENAME-19 obj 0.0 s3-0 (the-as tracking-spline-sampler #f))
+ (camera-cross
+ (new 'static 'vector :y 1024.0)
+ (new 'static 'vector :z 1024.0)
+ s3-0
+ (new 'static 'vector4w :x #xff :w #x80)
+ (meters 0.25)
+ )
+ (TODO-RENAME-19 obj (-> obj sample-len) s3-0 (the-as tracking-spline-sampler #f))
+ (camera-cross
+ (new 'static 'vector :y 1024.0)
+ (new 'static 'vector :z 1024.0)
+ s3-0
+ (new 'static 'vector4w :x #xff :w #x80)
+ (meters 0.25)
+ )
+ )
+ )
+ (while (!= s4-0 -134250495)
+ (camera-line
+ (the-as vector (-> obj point s5-0))
+ (the-as vector (-> obj point s4-0))
+ (new 'static 'vector4w :x #x80 :y #x80 :z #x80 :w #x80)
+ )
+ (set! s5-0 s4-0)
+ (set! s4-0 (-> obj point s4-0 next))
+ )
+ )
+ (let ((s5-1 (new 'stack-no-clear 'vector)))
+ (camera-line
+ (-> obj debug-out-position)
+ (-> obj debug-old-position)
+ (new 'static 'vector4w :x #xff :y #xff :w #x80)
+ )
+ (vector-! s5-1 (-> obj debug-out-position) (-> obj debug-old-position))
+ (TODO-RENAME-20 obj s5-1 (-> obj debug-last-point))
+ (camera-line-rel (-> obj debug-old-position) s5-1 (new 'static 'vector4w :x #xff :z #xff :w #x80))
+ )
+ 0
+ (none)
+ )
+
+(defun debug-euler ((arg0 cam-dbg-scratch))
+ (let ((s4-0 (new 'stack-no-clear 'euler-angles))
+ (gp-0 (new 'stack-no-clear 'matrix))
+ )
+ (matrix->eul s4-0 (the-as matrix (&-> arg0 sphere-vec w)) 21)
+ (format *stdcon* "euler angles x ~R y ~R z ~R~%" (-> s4-0 x) (-> s4-0 y) (-> s4-0 z))
+ (format
+ *stdcon*
+ "~f ~f ~f ~f~%"
+ (-> arg0 sphere-vec w)
+ (-> arg0 crossvec 0 x)
+ (-> arg0 crossvec 0 y)
+ (-> arg0 crossvec 0 z)
+ )
+ (format
+ *stdcon*
+ "~f ~f ~f ~f~%"
+ (-> arg0 crossvec 0 w)
+ (-> arg0 crossvec 1 x)
+ (-> arg0 crossvec 1 y)
+ (-> arg0 crossvec 1 z)
+ )
+ (format
+ *stdcon*
+ "~f ~f ~f ~f~%"
+ (-> arg0 crossvec 1 w)
+ (-> arg0 crossvec 2 x)
+ (-> arg0 crossvec 2 y)
+ (-> arg0 crossvec 2 z)
+ )
+ (format
+ *stdcon*
+ "~f ~f ~f ~f~%"
+ (-> arg0 crossvec 2 w)
+ (-> arg0 bboxvec 0 x)
+ (-> arg0 bboxvec 0 y)
+ (-> arg0 bboxvec 0 z)
+ )
+ (eul->matrix gp-0 s4-0)
+ (format
+ *stdcon*
+ "~f ~f ~f ~f~%"
+ (-> gp-0 vector 0 x)
+ (-> gp-0 vector 0 y)
+ (-> gp-0 vector 0 z)
+ (-> gp-0 vector 0 w)
+ )
+ (format
+ *stdcon*
+ "~f ~f ~f ~f~%"
+ (-> gp-0 vector 1 x)
+ (-> gp-0 vector 1 y)
+ (-> gp-0 vector 1 z)
+ (-> gp-0 vector 1 w)
+ )
+ (format
+ *stdcon*
+ "~f ~f ~f ~f~%"
+ (-> gp-0 vector 2 x)
+ (-> gp-0 vector 2 y)
+ (-> gp-0 vector 2 z)
+ (-> gp-0 vector 2 w)
+ )
+ (format
+ *stdcon*
+ "~f ~f ~f ~f~%"
+ (-> gp-0 vector 3 x)
+ (-> gp-0 vector 3 y)
+ (-> gp-0 vector 3 z)
+ (-> gp-0 vector 3 w)
+ )
+ (if (or (< 0.001 (fabs (- (-> arg0 sphere-vec w) (-> gp-0 vector 0 x))))
+ (< 0.001 (fabs (- (-> arg0 crossvec 0 x) (-> gp-0 vector 0 y))))
+ (< 0.001 (fabs (- (-> arg0 crossvec 0 y) (-> gp-0 vector 0 z))))
+ (< 0.001 (fabs (- (-> arg0 crossvec 0 z) (-> gp-0 vector 0 w))))
+ (< 0.001 (fabs (- (-> arg0 crossvec 0 w) (-> gp-0 vector 1 x))))
+ (< 0.001 (fabs (- (-> arg0 crossvec 1 x) (-> gp-0 vector 1 y))))
+ (< 0.001 (fabs (- (-> arg0 crossvec 1 y) (-> gp-0 vector 1 z))))
+ (< 0.001 (fabs (- (-> arg0 crossvec 1 z) (-> gp-0 vector 1 w))))
+ (< 0.001 (fabs (- (-> arg0 crossvec 1 w) (-> gp-0 vector 2 x))))
+ (< 0.001 (fabs (- (-> arg0 crossvec 2 x) (-> gp-0 vector 2 y))))
+ (< 0.001 (fabs (- (-> arg0 crossvec 2 y) (-> gp-0 vector 2 z))))
+ (< 0.001 (fabs (- (-> arg0 crossvec 2 z) (-> gp-0 vector 2 w))))
+ (< 0.001 (fabs (- (-> arg0 crossvec 2 w) (-> gp-0 vector 3 x))))
+ (< 0.001 (fabs (- (-> arg0 bboxvec 0 x) (-> gp-0 vector 3 y))))
+ (< 0.001 (fabs (- (-> arg0 bboxvec 0 y) (-> gp-0 vector 3 z))))
+ (< 0.001 (fabs (- (-> arg0 bboxvec 0 z) (-> gp-0 vector 3 w))))
+ )
+ (format *stdcon* "different~%")
+ (format *stdcon* "same~%")
+ )
+ )
+ )
+
+(defun bike-cam-limit ((arg0 float))
+ (let* ((f0-1 (* 10012.444 arg0))
+ (f30-0 (fmax 0.0 f0-1))
+ )
+ (if (< f30-0 8192.0)
+ (* (/ 1.0 (- 1.0 (cos 21845.334))) (+ (- (cos 21845.334)) (cos (* 2.6666667 (- 8192.0 f30-0)))))
+ 1.0
+ )
+ )
+ )
+
+(defun master-draw-coordinates ((arg0 vector))
+ (let ((s5-0 (new-stack-vector0))
+ (gp-0 (new-stack-vector0))
+ )
+ (let ((a0-1 (new-stack-matrix0)))
+ (set-vector! s5-0 0.0 8192.0 0.0 1.0)
+ (matrix-rotate-yxz! a0-1 s5-0)
+ )
+ (vector+!
+ gp-0
+ (-> *camera-combiner* trans)
+ (vector-normalize-copy! gp-0 (-> *camera-combiner* inv-camera-rot vector 2) 24576.0)
+ )
+ (let ((a1-2 s5-0)
+ (v1-4 gp-0)
+ (a0-3 s5-0)
+ )
+ (set! (-> a0-3 x) 4096.0)
+ (set! (-> a0-3 y) 0.0)
+ (set! (-> a0-3 z) 0.0)
+ (set! (-> a0-3 w) 1.0)
+ (vector+! a1-2 v1-4 a0-3)
+ )
+ (add-debug-line #t (bucket-id debug-draw1) gp-0 s5-0 (new 'static 'rgba :r #xff :a #x80) #f (the-as rgba -1))
+ (let ((a1-5 s5-0)
+ (v1-5 gp-0)
+ (a0-5 s5-0)
+ )
+ (set! (-> a0-5 x) 0.0)
+ (set! (-> a0-5 y) 4096.0)
+ (set! (-> a0-5 z) 0.0)
+ (set! (-> a0-5 w) 1.0)
+ (vector+! a1-5 v1-5 a0-5)
+ )
+ (add-debug-line #t (bucket-id debug-draw1) gp-0 s5-0 (new 'static 'rgba :g #xff :a #x80) #f (the-as rgba -1))
+ (let ((a1-8 s5-0)
+ (v1-6 gp-0)
+ (a0-7 s5-0)
+ )
+ (set! (-> a0-7 x) 0.0)
+ (set! (-> a0-7 y) 0.0)
+ (set! (-> a0-7 z) 4096.0)
+ (set! (-> a0-7 w) 1.0)
+ (vector+! a1-8 v1-6 a0-7)
+ )
+ (add-debug-line #t (bucket-id debug-draw1) gp-0 s5-0 (new 'static 'rgba :b #xff :a #x80) #f (the-as rgba -1))
+ (when arg0
+ (set! (-> s5-0 quad) (-> arg0 quad))
+ (vector-normalize! s5-0 4096.0)
+ (vector+! s5-0 gp-0 s5-0)
+ (add-debug-line
+ #t
+ (bucket-id debug-draw1)
+ gp-0
+ s5-0
+ (new 'static 'rgba :r #x7f :g #x7f :a #x80)
+ #f
+ (the-as rgba -1)
+ )
+ )
+ )
+ 0
+ (none)
+ )
+
+(deftype cam-collision-record (structure)
+ ((pos vector :inline :offset-assert 0)
+ (vel vector :inline :offset-assert 16)
+ (desired-pos vector :inline :offset-assert 32)
+ (cam-tpos-cur vector :inline :offset-assert 48)
+ (cam-tpos-old vector :inline :offset-assert 64)
+ (view-flat vector :inline :offset-assert 80)
+ (string-min-val vector :inline :offset-assert 96)
+ (string-max-val vector :inline :offset-assert 112)
+ (view-off vector :inline :offset-assert 128)
+ (min-z-override float :offset-assert 144)
+ (string-push-z float :offset-assert 148)
+ (view-off-param float :offset-assert 152)
+ (frame int32 :offset-assert 156)
+ (iteration int32 :offset-assert 160)
+ (move-type symbol :offset-assert 164)
+ )
+ :method-count-assert 9
+ :size-assert #xa8
+ :flag-assert #x9000000a8
+ )
+
+
+(deftype cam-collision-record-array (inline-array-class)
+ ((data cam-collision-record :dynamic :offset-assert 16)
+ )
+ :method-count-assert 9
+ :size-assert #x10
+ :flag-assert #x900000010
+ )
+
+
+(set! (-> cam-collision-record-array heap-base) (the-as uint 176))
+
+(define *cam-collision-record-first* 0)
+
+(define *cam-collision-record-last* 0)
+
+(define *cam-collision-record-show* 0)
+
+(define *cam-collision-record* (new 'debug 'cam-collision-record-array 600))
+
+(defun cam-collision-record-save ((arg0 vector) (arg1 vector) (arg2 int) (arg3 symbol) (arg4 camera-slave))
+ (when *record-cam-collide-history*
+ (let ((v1-5 (the-as
+ cam-collision-record
+ (+ (+ (* 176 *cam-collision-record-last*) 12) (the-as int *cam-collision-record*))
+ )
+ )
+ )
+ (set! (-> v1-5 pos quad) (-> arg0 quad))
+ (set! (-> v1-5 vel quad) (-> arg1 quad))
+ (set! (-> v1-5 view-flat quad) (-> arg4 view-flat quad))
+ (set! (-> v1-5 desired-pos quad) (-> arg4 desired-pos quad))
+ (set! (-> v1-5 cam-tpos-cur quad) (-> *camera* tpos-curr-adj quad))
+ (set! (-> v1-5 cam-tpos-old quad) (-> *camera* tpos-old-adj quad))
+ (set! (-> v1-5 string-min-val quad) (-> arg4 string-min-val quad))
+ (set! (-> v1-5 string-max-val quad) (-> arg4 string-max-val quad))
+ (set! (-> v1-5 view-off quad) (-> arg4 view-off quad))
+ (set! (-> v1-5 frame) (-> *display* base-frame-counter))
+ (set! (-> v1-5 iteration) arg2)
+ (set! (-> v1-5 move-type) arg3)
+ (set! (-> v1-5 min-z-override) (-> arg4 min-z-override))
+ (set! (-> v1-5 string-push-z) (-> *camera* string-push-z))
+ (set! (-> v1-5 view-off-param) (-> arg4 view-off-param))
+ )
+ (set! *cam-collision-record-show* *cam-collision-record-last*)
+ (set! *cam-collision-record-last* (+ *cam-collision-record-last* 1))
+ (set! *cam-collision-record-last* (mod *cam-collision-record-last* 600))
+ (when (= *cam-collision-record-last* *cam-collision-record-first*)
+ (set! *cam-collision-record-first* (+ *cam-collision-record-first* 1))
+ (set! *cam-collision-record-first* (mod *cam-collision-record-first* 600))
+ )
+ )
+ 0
+ (none)
+ )
+
+(defun cam-collision-record-step ((arg0 int))
+ (set! *cam-collision-record-show* (+ *cam-collision-record-show* arg0))
+ (while (>= *cam-collision-record-show* 600)
+ (set! *cam-collision-record-show* (+ *cam-collision-record-show* -600))
+ )
+ (while (< *cam-collision-record-show* 0)
+ (set! *cam-collision-record-show* (+ *cam-collision-record-show* 600))
+ )
+ 0
+ (none)
+ )
+
+(defun cam-collision-record-draw ()
+ (cond
+ ((cpad-pressed? 0 down)
+ (cam-collision-record-step 1)
+ )
+ ((cpad-hold? 0 right)
+ (cam-collision-record-step 1)
+ )
+ ((cpad-pressed? 0 up)
+ (cam-collision-record-step -1)
+ )
+ ((cpad-hold? 0 left)
+ (cam-collision-record-step -1)
+ )
+ )
+ (let ((s5-0 (the-as
+ cam-collision-record
+ (+ (+ (* 176 *cam-collision-record-show*) 12) (the-as int *cam-collision-record*))
+ )
+ )
+ (s4-0 (new 'stack 'vector4w))
+ (gp-0 (new 'stack 'vector4w))
+ )
+ (format *stdcon* "move-type ~A~%" (-> s5-0 move-type))
+ (cond
+ ((= (-> s5-0 move-type) 'normal)
+ (set! (-> s4-0 x) 255)
+ (set! (-> s4-0 y) 255)
+ )
+ ((= (-> s5-0 move-type) 'jump)
+ (set! (-> s4-0 x) 255)
+ )
+ ((= (-> s5-0 move-type) 'no-hit)
+ (set! (-> s4-0 y) 255)
+ )
+ (else
+ (set! (-> s4-0 z) 255)
+ )
+ )
+ (set! (-> s4-0 w) 128)
+ (set! (-> gp-0 x) 127)
+ (set! (-> gp-0 y) 127)
+ (set! (-> gp-0 z) 127)
+ (set! (-> gp-0 w) 128)
+ (camera-line-rel-len (-> s5-0 pos) (-> s5-0 vel) (fmax 81.92 (vector-length (-> s5-0 vel))) s4-0)
+ (let* ((s3-1 (new 'stack-no-clear 'collide-tri-result))
+ (f30-1
+ (fill-and-probe-using-line-sphere
+ *collide-cache*
+ (-> s5-0 pos)
+ (-> s5-0 vel)
+ (-> *CAMERA-bank* collide-move-rad)
+ (collide-kind background)
+ (the-as process #f)
+ s3-1
+ 2
+ )
+ )
+ (s2-1 (new 'stack-no-clear 'vector))
+ )
+ (format *stdcon* "frame ~D iteration ~D travel ~f~%" (-> s5-0 frame) (-> s5-0 iteration) f30-1)
+ (format
+ *stdcon*
+ "mzo ~M psz ~M vop ~f~%"
+ (-> s5-0 min-z-override)
+ (-> s5-0 string-push-z)
+ (-> s5-0 view-off-param)
+ )
+ (format *stdcon* "pos ~M ~M ~M~%" (-> s5-0 pos x) (-> s5-0 pos y) (-> s5-0 pos z))
+ (format *stdcon* "vel ~M ~M ~M~%" (-> s5-0 vel x) (-> s5-0 vel y) (-> s5-0 vel z))
+ (format *stdcon* "des ~M ~M ~M~%" (-> s5-0 desired-pos x) (-> s5-0 desired-pos y) (-> s5-0 desired-pos z))
+ (format *stdcon* "flt ~M ~M ~M~%" (-> s5-0 view-flat x) (-> s5-0 view-flat y) (-> s5-0 view-flat z))
+ (format *stdcon* "cur ~M ~M ~M~%" (-> s5-0 cam-tpos-cur x) (-> s5-0 cam-tpos-cur y) (-> s5-0 cam-tpos-cur z))
+ (format *stdcon* "old ~M ~M ~M~%" (-> s5-0 cam-tpos-old x) (-> s5-0 cam-tpos-old y) (-> s5-0 cam-tpos-old z))
+ (format
+ *stdcon*
+ "smn ~M ~M ~M~%"
+ (-> s5-0 string-min-val x)
+ (-> s5-0 string-min-val y)
+ (-> s5-0 string-min-val z)
+ )
+ (format
+ *stdcon*
+ "smx ~M ~M ~M~%"
+ (-> s5-0 string-max-val x)
+ (-> s5-0 string-max-val y)
+ (-> s5-0 string-max-val z)
+ )
+ (format *stdcon* "vof ~M ~M ~M~%" (-> s5-0 view-off x) (-> s5-0 view-off y) (-> s5-0 view-off z))
+ (when (>= f30-1 0.0)
+ (camera-line (the-as vector (-> s3-1 vertex)) (-> s3-1 vertex 1) s4-0)
+ (camera-line (-> s3-1 vertex 1) (-> s3-1 vertex 2) s4-0)
+ (camera-line (-> s3-1 vertex 2) (the-as vector (-> s3-1 vertex)) s4-0)
+ (vector-! s2-1 (-> s5-0 pos) (-> s3-1 intersect))
+ (vector-normalize! s2-1 1.0)
+ (camera-line-rel-len (-> s3-1 intersect) s2-1 (-> *CAMERA-bank* collide-move-rad) gp-0)
+ (camera-line-rel-len (-> s3-1 intersect) (-> s3-1 normal) (-> *CAMERA-bank* collide-move-rad) gp-0)
+ )
+ )
+ )
0
(none)
)
(defun debug-set-camera-pos-rot! ((arg0 vector) (arg1 matrix))
(when (and *camera* *camera-combiner*)
- (send-event *camera* 'change-state cam-free-floating 0)
- (set! (-> *camera-combiner* trans quad) (-> arg0 quad))
- (let ((a2-0 (-> *camera-combiner* inv-camera-rot))
- (v1-10 (-> arg1 vector 0 quad))
- (a0-4 (-> arg1 vector 1 quad))
- (a1-2 (-> arg1 vector 2 quad))
- (a3-0 (-> arg1 vector 3 quad))
- )
- (set! (-> a2-0 vector 0 quad) v1-10)
- (set! (-> a2-0 vector 1 quad) a0-4)
- (set! (-> a2-0 vector 2 quad) a1-2)
- (set! (-> a2-0 vector 3 quad) a3-0)
+ (send-event *camera* 'change-state cam-free-floating 0)
+ (set! (-> *camera-combiner* trans quad) (-> arg0 quad))
+ (let ((a2-0 (-> *camera-combiner* inv-camera-rot))
+ (v1-10 (-> arg1 vector 0 quad))
+ (a0-4 (-> arg1 vector 1 quad))
+ (a1-2 (-> arg1 vector 2 quad))
+ (a3-0 (-> arg1 vector 3 quad))
+ )
+ (set! (-> a2-0 vector 0 quad) v1-10)
+ (set! (-> a2-0 vector 1 quad) a0-4)
+ (set! (-> a2-0 vector 2 quad) a1-2)
+ (set! (-> a2-0 vector 3 quad) a3-0)
+ )
+ (send-event *camera* 'change-state cam-fixed 0)
)
- (send-event *camera* 'change-state cam-fixed 0)
- )
arg0
)
+(defun external-cam-reset! ()
+ (vector-reset! (-> *math-camera* trans))
+ (matrix-identity! (-> *math-camera* inv-camera-rot))
+ (when *camera-combiner*
+ (let* ((v1-6 (-> *math-camera* inv-camera-rot))
+ (a3-0 (-> *camera-combiner* inv-camera-rot))
+ (a0-2 (-> a3-0 vector 0 quad))
+ (a1-0 (-> a3-0 vector 1 quad))
+ (a2-0 (-> a3-0 vector 2 quad))
+ (a3-1 (-> a3-0 vector 3 quad))
+ )
+ (set! (-> v1-6 vector 0 quad) a0-2)
+ (set! (-> v1-6 vector 1 quad) a1-0)
+ (set! (-> v1-6 vector 2 quad) a2-0)
+ (set! (-> v1-6 vector 3 quad) a3-1)
+ )
+ (set! (-> *math-camera* trans quad) (-> *camera-combiner* trans quad))
+ )
+ 0
+ (none)
+ )
+
)
-(define-extern cam-debug-add-los-tri (function (inline-array collide-cache-tri) vector vector none))
-(defun cam-debug-add-los-tri ((a (inline-array collide-cache-tri)) (b vector) (c vector))
- (none)
- )
-(defun cam-collision-record-save ((a vector) (b vector) (c int) (d symbol) (e camera-slave))
- (none)
- )
-(define-extern slave-los-state->string (function slave-los-state string))
-(define-extern cam-debug-reset-coll-tri (function none)) ;; not confirmed
-(when (or (not *camera-old-cpu*) (zero? *camera-old-cpu*))
- (set! *camera-old-cpu* 0)
- 0
- )
-
-;; failed to figure out what this is:
-(when (or (not *camera-old-vu*) (zero? *camera-old-vu*))
- (set! *camera-old-vu* 0)
- 0
- )
-
-;; failed to figure out what this is:
-(when (or (not *camera-old-tfrag-bytes*) (zero? *camera-old-tfrag-bytes*))
- (set! *camera-old-tfrag-bytes* 0)
- 0
- )
-
-;; definition (perm) for symbol *camera-old-level*, type string
-(define-perm *camera-old-level* string (new 'global 'string 128 (the-as string #f)))
-
-;; definition (perm) for symbol *camera-old-stat-string-tfrag*, type string
-(define-perm *camera-old-stat-string-tfrag* string (new 'global 'string 128 (the-as string #f)))
-
-;; definition (perm) for symbol *camera-old-stat-string-tfrag-near*, type string
-(define-perm *camera-old-stat-string-tfrag-near* string (new 'global 'string 128 (the-as string #f)))
-
-;; definition (perm) for symbol *camera-old-stat-string-total*, type string
-(define-perm *camera-old-stat-string-total* string (new 'global 'string 128 (the-as string #f)))
diff --git a/goal_src/engine/camera/math-camera.gc b/goal_src/engine/camera/math-camera.gc
index e1c8e2ce3f..0f700cd1d5 100644
--- a/goal_src/engine/camera/math-camera.gc
+++ b/goal_src/engine/camera/math-camera.gc
@@ -601,6 +601,10 @@
)
;;(.mov v1-14 vf6)
(.itof.vf vf6 vf6)
+ (.svf (&-> *transform-regs* vf7) vf7)
+ (.svf (&-> *transform-regs* vf8) vf8)
+ (.svf (&-> *transform-regs* vf9) vf9)
+ (.svf (&-> *transform-regs* vf6) vf6)
(set! (-> *transform-regs* vf1) (-> s5-0 vector 0 quad))
(set! (-> *transform-regs* vf2) (-> s5-0 vector 1 quad))
(set! (-> *transform-regs* vf3) (-> s5-0 vector 2 quad))
diff --git a/goal_src/engine/debug/debug-sphere.gc b/goal_src/engine/debug/debug-sphere.gc
index 9bb1c7d506..409ad6c30b 100644
--- a/goal_src/engine/debug/debug-sphere.gc
+++ b/goal_src/engine/debug/debug-sphere.gc
@@ -5,6 +5,10 @@
;; name in dgo: debug-sphere
;; dgos: GAME, ENGINE
+(defconstant DEBUG_SPHERE_SEC_AMT (#if (user? dass) 5 10))
+(defconstant DEBUG_SPHERE_SEC_H DEBUG_SPHERE_SEC_AMT)
+(defconstant DEBUG_SPHERE_SEC_W DEBUG_SPHERE_SEC_AMT)
+
(deftype debug-sphere-table (basic)
((point vector 300 :inline :offset-assert 16)
)
@@ -20,24 +24,24 @@
(s4-0 0)
)
(set-vector! s5-0 0.0 0.0 0.0 1.0)
- (dotimes (s3-0 10)
- (let ((f28-0 (* f30-0 (sin (* 3276.8 (the float s3-0)))))
- (f26-0 (* f30-0 (sin (* 3276.8 (the float (+ s3-0 1))))))
+ (dotimes (s3-0 DEBUG_SPHERE_SEC_H)
+ (let ((f28-0 (* f30-0 (sin (* (degrees (/ 180 DEBUG_SPHERE_SEC_H)) (the float s3-0)))))
+ (f26-0 (* f30-0 (sin (* (degrees (/ 180 DEBUG_SPHERE_SEC_H)) (the float (+ s3-0 1))))))
(s2-0 (new-stack-vector0))
(s1-0 (new-stack-vector0))
(s0-0 (new-stack-vector0))
)
- (set! (-> s2-0 y) (+ (-> s5-0 y) (* (cos (* 3276.8 (the float s3-0))) f30-0)))
+ (set! (-> s2-0 y) (+ (-> s5-0 y) (* (cos (* (degrees (/ 180 DEBUG_SPHERE_SEC_H)) (the float s3-0))) f30-0)))
(set! (-> s1-0 y) (-> s2-0 y))
- (set! (-> s0-0 y) (+ (-> s5-0 y) (* (cos (* 3276.8 (the float (+ s3-0 1)))) f30-0)))
+ (set! (-> s0-0 y) (+ (-> s5-0 y) (* (cos (* (degrees (/ 180 DEBUG_SPHERE_SEC_H)) (the float (+ s3-0 1)))) f30-0)))
(set! sv-80 0)
- (while (< sv-80 10)
- (set! (-> s2-0 x) (+ (-> s5-0 x) (* (cos (* 6553.6 (the float sv-80))) f28-0)))
- (set! (-> s2-0 z) (+ (-> s5-0 z) (* (sin (* 6553.6 (the float sv-80))) f28-0)))
- (set! (-> s1-0 x) (+ (-> s5-0 x) (* (cos (* 6553.6 (the float (+ sv-80 1)))) f28-0)))
- (set! (-> s1-0 z) (+ (-> s5-0 z) (* (sin (* 6553.6 (the float (+ sv-80 1)))) f28-0)))
- (set! (-> s0-0 x) (+ (-> s5-0 x) (* (cos (* 6553.6 (the float sv-80))) f26-0)))
- (set! (-> s0-0 z) (+ (-> s5-0 z) (* (sin (* 6553.6 (the float sv-80))) f26-0)))
+ (while (< sv-80 DEBUG_SPHERE_SEC_W)
+ (set! (-> s2-0 x) (+ (-> s5-0 x) (* (cos (* (degrees (/ 360 DEBUG_SPHERE_SEC_W)) (the float sv-80))) f28-0)))
+ (set! (-> s2-0 z) (+ (-> s5-0 z) (* (sin (* (degrees (/ 360 DEBUG_SPHERE_SEC_W)) (the float sv-80))) f28-0)))
+ (set! (-> s1-0 x) (+ (-> s5-0 x) (* (cos (* (degrees (/ 360 DEBUG_SPHERE_SEC_W)) (the float (+ sv-80 1)))) f28-0)))
+ (set! (-> s1-0 z) (+ (-> s5-0 z) (* (sin (* (degrees (/ 360 DEBUG_SPHERE_SEC_W)) (the float (+ sv-80 1)))) f28-0)))
+ (set! (-> s0-0 x) (+ (-> s5-0 x) (* (cos (* (degrees (/ 360 DEBUG_SPHERE_SEC_W)) (the float sv-80))) f26-0)))
+ (set! (-> s0-0 z) (+ (-> s5-0 z) (* (sin (* (degrees (/ 360 DEBUG_SPHERE_SEC_W)) (the float sv-80))) f26-0)))
(set! (-> arg0 point s4-0 quad) (-> s2-0 quad))
(set! (-> arg0 point (+ s4-0 1) quad) (-> s1-0 quad))
(set! (-> arg0 point (+ s4-0 2) quad) (-> s0-0 quad))
@@ -68,7 +72,7 @@
)
(.lvf vf1 (&-> arg1 quad))
(.mov vf2 arg2)
- (dotimes (s0-0 100)
+ (dotimes (s0-0 (* DEBUG_SPHERE_SEC_W DEBUG_SPHERE_SEC_H))
(.lvf vf3 (&-> points 0 quad))
(.lvf vf4 (&-> points 1 quad))
(.lvf vf5 (&-> points 2 quad))
diff --git a/goal_src/engine/debug/debug.gc b/goal_src/engine/debug/debug.gc
index 48eda076f6..432e8653c8 100644
--- a/goal_src/engine/debug/debug.gc
+++ b/goal_src/engine/debug/debug.gc
@@ -635,7 +635,7 @@
)
(defun-debug add-debug-text-sphere ((arg0 symbol) (arg1 bucket-id) (arg2 vector) (arg3 meters) (arg4 string) (arg5 rgba))
- "Add a debug sphere at the given point, withe some text. The color is for the sphere - the text is color 0."
+ "Add a debug sphere at the given point, with some text. The color is for the sphere - the text is color 0."
(add-debug-sphere arg0 arg1 arg2 arg3 arg5)
(add-debug-text-3d arg0 arg1 arg4 arg2 (font-color default) (the-as vector2h #f))
#f
diff --git a/goal_src/engine/debug/default-menu.gc b/goal_src/engine/debug/default-menu.gc
index cecc7900b8..4a0f4fd18d 100644
--- a/goal_src/engine/debug/default-menu.gc
+++ b/goal_src/engine/debug/default-menu.gc
@@ -552,7 +552,7 @@
)
)
)
- (set! (-> *shader-pick-menu* items) (the-as pair (sort (-> *shader-pick-menu* items) debug-menu-node)))
+ (set! (-> *shader-pick-menu* items) (sort (-> *shader-pick-menu* items) debug-menu-node))
(none)
)
@@ -657,29 +657,22 @@
)
)
(set! (-> *instance-shrub-menu* items)
- (the-as
- pair
- (sort
- (-> *instance-shrub-menu* items)
- (lambda ((arg0 debug-menu) (arg1 debug-menu)) (string<=? (-> arg0 name) (-> arg1 name)))
- )
+ (sort
+ (-> *instance-shrub-menu* items)
+ (lambda ((arg0 debug-menu) (arg1 debug-menu)) (string<=? (-> arg0 name) (-> arg1 name)))
)
)
(set! (-> *instance-tie-menu* items)
- (the-as
- pair
- (sort
- (-> *instance-tie-menu* items)
- (lambda ((arg0 debug-menu) (arg1 debug-menu)) (string<=? (-> arg0 name) (-> arg1 name)))
- )
+ (sort
+ (-> *instance-tie-menu* items)
+ (lambda ((arg0 debug-menu) (arg1 debug-menu)) (string<=? (-> arg0 name) (-> arg1 name)))
)
)
(set! (-> *enable-instance-tie-menu* items)
- (the-as pair (sort
- (-> *enable-instance-tie-menu* items)
- (lambda ((arg0 debug-menu) (arg1 debug-menu)) (string<=? (-> arg0 name) (-> arg1 name)))
- )
- )
+ (sort
+ (-> *enable-instance-tie-menu* items)
+ (lambda ((arg0 debug-menu) (arg1 debug-menu)) (string<=? (-> arg0 name) (-> arg1 name)))
+ )
)
0
(none)
@@ -4126,8 +4119,7 @@
)
)
)
- (set! (-> *part-pick-menu* items) (the-as pair (sort (-> *part-pick-menu* items) debug-menu-node)))
- (none)
+ (set! (-> *part-pick-menu* items) (sort (-> *part-pick-menu* items) debug-menu-node))
)
(defun debug-menu-make-part-menu ((ctx debug-menu-context))
@@ -4143,6 +4135,90 @@
)
)
+(define *entity-pick-menu* (the-as debug-menu #f))
+
+(defun dm-entity-pick-func ((e entity) (msg debug-menu-msg))
+ (when (= msg (debug-menu-msg press))
+ (if (= (-> *entity-debug-inspect* entity) e)
+ (set-entity! *entity-debug-inspect* (the entity #f))
+ (set-entity! *entity-debug-inspect* e))
+ )
+ (= (-> *entity-debug-inspect* entity) e)
+ )
+
+(defun build-entity-list ()
+ "Fill the entity pick menu"
+ ;; clear old list
+ (debug-menu-remove-all-items *entity-pick-menu*)
+ ;; go through active levels
+ (dotimes (s5-0 (-> *level* length))
+ (let ((s4-0 (-> *level* level s5-0)))
+ (when (= (-> s4-0 status) 'active)
+ ;; actor entities
+ (let ((s3-0 (-> s4-0 bsp actors)))
+ (when (nonzero? s3-0)
+ (dotimes (s2-0 (-> s3-0 length))
+ (let ((s1-0 (-> s3-0 data s2-0 actor)))
+ (debug-menu-append-item *entity-pick-menu* (new-dm-flag (res-lump-struct s1-0 'name string) s1-0 dm-entity-pick-func))
+ )
+ )
+ )
+ )
+ ;; ambients entities
+ (let ((s3-1 (-> s4-0 bsp ambients)))
+ (when (nonzero? s3-1)
+ (dotimes (s2-1 (-> s3-1 length))
+ (let ((s1-1 (-> s3-1 data s2-1 ambient)))
+ (debug-menu-append-item *entity-pick-menu* (new-dm-flag (res-lump-struct s1-1 'name string) s1-1 dm-entity-pick-func))
+ )
+ )
+ )
+ )
+ ;; camera entities
+ (let ((s4-1 (-> s4-0 bsp cameras)))
+ (when (nonzero? s4-1)
+ (dotimes (s3-2 (-> s4-1 length))
+ (let ((s2-2 (-> s4-1 s3-2)))
+ (debug-menu-append-item *entity-pick-menu* (new-dm-flag (res-lump-struct s2-2 'name string) s2-2 dm-entity-pick-func))
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ (set! (-> *entity-pick-menu* items) (sort (-> *entity-pick-menu* items) debug-menu-node))
+ )
+
+(defun dm-display-entities-pick-func ((arg0 symbol))
+ (debug-print-entities *level* arg0 (the-as type #f))
+ )
+
+(defun debug-menu-make-entity-menu ((ctx debug-menu-context))
+ (let ((entity-menu (new 'debug 'debug-menu ctx "Entity menu")))
+ (let ((pick-menu (new 'debug 'debug-menu ctx "Pick entity menu")))
+ (set! *entity-pick-menu* pick-menu)
+ (debug-menu-append-item entity-menu (new-dm-submenu "Pick Entity" pick-menu))
+ )
+ (debug-menu-append-item entity-menu (new-dm-func "Refresh" #f build-entity-list))
+ (debug-menu-append-item entity-menu (new-dm-func "Go to entity" #f
+ (lambda ()
+ (unless (-> *entity-debug-inspect* entity) (return #f))
+ (let ((tf (new 'stack 'transformq)))
+ (vector-copy! (-> tf trans) (-> *entity-debug-inspect* entity trans))
+ (quaternion-identity! (-> tf quat))
+ (vector-identity! (-> tf scale))
+ (send-event *camera* 'teleport-to-transformq tf)
+ ))))
+ (debug-menu-append-item entity-menu (new-dm-func "Print entity info" #t dm-display-entities-pick-func))
+ (debug-menu-append-item entity-menu (new-dm-func "Print entity info (ag)" 'art-group dm-display-entities-pick-func))
+ (debug-menu-append-item entity-menu (new-dm-func "Print entity info (meters)" 'entity-meters dm-display-entities-pick-func))
+ (debug-menu-append-item entity-menu (new-dm-func "Print entity info (perm)" 'entity-perm dm-display-entities-pick-func))
+
+ (new-dm-submenu "Entity" entity-menu)
+ )
+ )
+
(defmacro dm-lambda-boolean-flag (val)
"helper macro for making boolean buttons that don't just access symbols directly"
`(lambda (arg (msg debug-menu-msg))
@@ -4196,24 +4272,10 @@
)
)
-(defun dm-display-entities-pick-func ((arg0 symbol))
- (debug-print-entities *level* arg0 (the-as type #f))
- )
-
(when (-> *debug-menu-context* root-menu)
(debug-menu-append-item (-> *debug-menu-context* root-menu) (debug-menu-make-load-menu *debug-menu-context*))
(debug-menu-append-item (-> *debug-menu-context* root-menu) (debug-menu-make-part-menu *debug-menu-context*))
-
- (debug-menu-append-item (-> *debug-menu-context* root-menu)
- (debug-menu-make-from-template *debug-menu-context*
- '(menu "Entity"
- (function "Print entity info" #t dm-display-entities-pick-func)
- (function "Print entity info (art-group)" art-group dm-display-entities-pick-func)
- (function "Print entity info (entity-meters)" entity-meters dm-display-entities-pick-func)
- (function "Print entity info (entity-perm)" entity-perm dm-display-entities-pick-func)
- )
- )
- )
+ (debug-menu-append-item (-> *debug-menu-context* root-menu) (debug-menu-make-entity-menu *debug-menu-context*))
;; Music menu TODO
;; Secrets menu TODO
;; Scene menu TODO
diff --git a/goal_src/engine/debug/menu.gc b/goal_src/engine/debug/menu.gc
index a2985f1a88..d850512436 100644
--- a/goal_src/engine/debug/menu.gc
+++ b/goal_src/engine/debug/menu.gc
@@ -54,7 +54,7 @@
(set! (-> gp-0 root-menu) #f)
(set! (-> gp-0 joypad-func) #f)
(set! (-> gp-0 joypad-item) #f)
- (set! (-> gp-0 font) (new 'debug 'font-context *font-default-matrix* 0 0 0.0 (font-color default) (font-flags shadow kerning)))
+ (set! (-> gp-0 font) (new 'debug 'font-context *font-default-matrix* 0 0 0.0 (font-color default) (font-flags shadow kerning pc-hack)))
gp-0
)
)
@@ -970,7 +970,10 @@
)
;; actually draw the item.
- (debug-menu-item-render (the-as debug-menu-item s0-1) (+ s3-1 12) s2-1 submenus (= s0-1 selected))
+ ;; PC PORT note : do not render if text is out of bounds...
+ (when (and (< -20 s2-1) (> 256 s2-1))
+ (debug-menu-item-render (the-as debug-menu-item s0-1) (+ s3-1 12) s2-1 submenus (= s0-1 selected))
+ )
(+! s2-1 8)
(set! s1-1 (cdr s1-1))
(set! s0-1 (car s1-1))
diff --git a/goal_src/engine/draw/process-drawable.gc b/goal_src/engine/draw/process-drawable.gc
index 41ff1d60e1..e241cb910f 100644
--- a/goal_src/engine/draw/process-drawable.gc
+++ b/goal_src/engine/draw/process-drawable.gc
@@ -957,16 +957,15 @@
; )
(label cfg-27)
(let ((a0-17 (-> gp-0 effect)))
- ; (if a0-17
- ; (TODO-RENAME-9 a0-17)
- ; )
+ (if a0-17
+ (TODO-RENAME-9 a0-17)
+ )
)
)
0
(none)
)
-;; WARN: Expression building failed: Function ja-post has a return type of none, but the expression builder found a return statement.
(defbehavior ja-post process-drawable ()
(when (nonzero? (-> self draw))
(let ((gp-1 (logtest? (-> self draw status) (draw-status drwf04))))
diff --git a/goal_src/engine/engine/connect.gc b/goal_src/engine/engine/connect.gc
index dcd79c5721..3522eb7022 100644
--- a/goal_src/engine/engine/connect.gc
+++ b/goal_src/engine/engine/connect.gc
@@ -54,9 +54,9 @@
(declare-type engine basic)
(deftype connection (connectable)
((param0 basic :offset-assert 16) ;; often (function object object object object object)
- (param1 basic :offset-assert 20)
- (param2 basic :offset-assert 24)
- (param3 basic :offset-assert 28)
+ (param1 int32 :offset-assert 20)
+ (param2 int32 :offset-assert 24)
+ (param3 int32 :offset-assert 28)
(quad uint128 2 :offset 0)
)
:method-count-assert 14
@@ -73,6 +73,19 @@
)
)
+(defmethod inspect connection ((obj connection))
+ (format #t "[~8x] ~A~%" obj 'connection)
+ (format #t "~Tnext0: ~`connectable`P~%" (-> obj next0))
+ (format #t "~Tprev0: ~`connectable`P~%" (-> obj prev0))
+ (format #t "~Tnext1: ~`connectable`P~%" (-> obj next1))
+ (format #t "~Tprev1: ~`connectable`P~%" (-> obj prev1))
+ (format #t "~Tparam0: ~A~%" (-> obj param0))
+ (format #t "~Tparam1: ~A~%" (-> obj param1))
+ (format #t "~Tparam2: ~A~%" (-> obj param2))
+ (format #t "~Tparam3: ~A~%" (-> obj param3))
+ (format #t "~Tquad[2] @ #x~X~%" (&-> obj next0))
+ obj
+ )
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; engine
@@ -336,7 +349,7 @@
(let ((ct (the-as connection (-> obj alive-list-end prev0))))
(while (!= ct (-> obj alive-list))
;; execute!
- ((the-as (function basic basic basic object object) (-> ct param0)) (-> ct param1) (-> ct param2) (-> ct param3) arg0)
+ ((the-as (function int int int object object) (-> ct param0)) (-> ct param1) (-> ct param2) (-> ct param3) arg0)
;; advance to previous.
(set! ct (the-as connection (-> ct prev0)))
)
@@ -350,7 +363,7 @@
(let ((ct (the-as connection (-> obj alive-list-end prev0))))
(while (!= ct (-> obj alive-list))
;; execute function
- (let ((result ((the-as (function basic basic basic object object) (-> ct param0)) (-> ct param1) (-> ct param2) (-> ct param3) arg0)))
+ (let ((result ((the-as (function int int int object object) (-> ct param0)) (-> ct param1) (-> ct param2) (-> ct param3) arg0)))
;; set the next one, _before_ removing
(set! ct (the-as connection (-> ct prev0)))
;; remove if desired.
@@ -413,9 +426,9 @@
(let ((con (the connection con)))
;; set the params of the connection
(set! (-> con param0) (the basic func))
- (set! (-> con param1) (the basic p1))
- (set! (-> con param2) (the basic p2))
- (set! (-> con param3) (the basic p3))
+ (set! (-> con param1) (the int p1))
+ (set! (-> con param2) (the int p2))
+ (set! (-> con param3) (the int p3))
;; splice us out of the dead list
(set! (-> obj dead-list next0) (-> con next0))
(set! (-> con next0 prev0) (-> obj dead-list))
diff --git a/goal_src/engine/entity/entity.gc b/goal_src/engine/entity/entity.gc
index 580213bf7b..ebb7ac6ef7 100644
--- a/goal_src/engine/entity/entity.gc
+++ b/goal_src/engine/entity/entity.gc
@@ -1289,7 +1289,7 @@
process-hidden
med-res-level))
;; disallowed types
- (obj-etype? plat-eco boatpaddle cavecrystal snow-bunny ram citb-battlecontroller)
+ ;(obj-etype?)
(zero? (-> obj etype)))
(when (nonzero? (-> obj etype))
(birth-log "rejecting etype ~A birth~%" (-> obj etype))
@@ -1939,3 +1939,186 @@
)
)
+(#when PC_PORT
+
+;; custom entity functions for pc port
+(defun-debug entity-inspect-draw ((inspect-info entity-debug-inspect))
+ "draw text about an entity on screen"
+
+ (update-pad inspect-info 0)
+ (let* ((e (-> inspect-info entity)) (name (res-lump-struct e 'name string)))
+ (set! *display-actor-anim* (the string (and (-> inspect-info show-actor-info) name)))
+ ;; draw trans
+ (add-debug-x #t (bucket-id debug-draw1) (-> e trans) (static-rgba 255 255 0 128))
+ (if (or (not (-> inspect-info show-actor-info)) (!= (-> e type) entity-actor) (and (= (-> e type) entity-actor) (not (-> (the entity-actor e) extra process))))
+ (add-debug-text-3d #t (bucket-id debug-draw1) name (-> e trans) (font-color red) (new 'static 'vector2h :y 8)))
+
+ ;; start writing text
+ (let ((cur-y (- 16 (* (-> inspect-info scroll-y) 8))) (y-adv 8))
+ (with-dma-buffer-add-bucket ((debug-buf (-> (current-frame) debug-buf))
+ (bucket-id debug-draw1))
+ ;; basic info, actor id, etc
+ (draw-string-xy
+ (string-format "~3L~A~0L ~A~%tags: ~D size: ~D aid: #x~x~%R1/L1 scroll L3 toggle display-actor-info~%--------------------" (-> e type) name (length e) (asize-of e) (-> e aid))
+ debug-buf 352 cur-y (font-color default) (font-flags shadow kerning middle))
+ (+! cur-y (* 8 4))
+
+ ;; draw each tag in entity
+ (dotimes (i (length e))
+ (let ((data (get-tag-index-data e i)))
+
+ ;; tag info
+ (format (clear *debug-temp-string*) "~3L~2D)~0L ~20L~A~0L:" i (-> e tag i name) (-> e tag i elt-type))
+
+ ;; tag data - special cases first
+ (cond
+ ((and (= (-> e tag i name) 'water-height) (= (-> e tag i elt-count) 4) (= (-> e tag i elt-type) float))
+ (format *debug-temp-string* " ~mm ~mm ~mm ~f"
+ (-> (the (pointer float) data) 0)
+ (-> (the (pointer float) data) 1)
+ (-> (the (pointer float) data) 2)
+ (-> (the (pointer float) data) 3)
+ )
+ )
+ ((and (= (-> e tag i name) 'flava) (= (-> e tag i elt-count) 1) (= (-> e tag i elt-type) int32))
+ (format *debug-temp-string* " (music-flava ~S)" (enum->string music-flava (-> (the (pointer int32) data) 0)))
+ )
+ ((and (= (-> e tag i name) 'text-id) (= (-> e tag i elt-count) 1) (= (-> e tag i elt-type) int32))
+ (format *debug-temp-string* " (game-text-id ~S)" (enum->string game-text-id (-> (the (pointer int32) data) 0)))
+ )
+ ((and (= (-> e tag i name) 'eco-info) (= (-> e tag i elt-count) 2) (= (-> e tag i elt-type) int32))
+ (format *debug-temp-string* " ~S " (pickup-type->string (the-as pickup-type (-> (the (pointer int32) data) 0))))
+ (if (= (pickup-type fuel-cell) (-> (the (pointer int32) data) 0))
+ (format *debug-temp-string* "~S" (game-task->string (the-as game-task (-> (the (pointer int32) data) 1))))
+ (format *debug-temp-string* "~D" (-> (the (pointer int32) data) 1))
+ )
+ (if (= (pickup-type buzzer) (-> (the (pointer int32) data) 0))
+ (format *debug-temp-string* " ~S" (game-task->string (the-as game-task (logand #xffff (-> (the (pointer int32) data) 1)))))
+ )
+ )
+ ((and (= (-> e tag i name) 'options) (= (-> e tag i elt-count) 1) (= (-> e tag i elt-type) uint32))
+ (format *debug-temp-string* " (fact-options ")
+ (bit-enum->string fact-options (-> (the (pointer uint32) data) 0) *debug-temp-string*)
+ (format *debug-temp-string* ")")
+ )
+ ((and (= (-> e tag i name) 'visvol) (= (-> e tag i elt-count) 2) (= (-> e tag i elt-type) vector))
+ (format *debug-temp-string* " display actor-vis!")
+ )
+ ((and (= (-> e tag i name) 'path) (= (-> e tag i elt-type) vector))
+ (format *debug-temp-string* " display path marks!")
+ )
+ ((and (= (-> e tag i name) 'vol) (= (-> e tag i elt-type) vector))
+ (format *debug-temp-string* " display vol marks!")
+ )
+ (else
+ (dotimes (ii (-> e tag i elt-count))
+ (format *debug-temp-string* " ")
+ (case (-> e tag i elt-type)
+ ((string symbol type)
+ (format *debug-temp-string* "~A" (-> (the (pointer basic) data) ii)))
+ ((float)
+ (case (-> e tag i name)
+ (('spring-height 'vis-dist 'height-info 'distance 'cam-notice-dist 'cam-vert 'cam-horz 'idle-distance
+ 'nearest-y-threshold 'center-point 'center-radius 'notice-dist 'trigger-height 'notice-top)
+ (format *debug-temp-string* "~mm" (-> (the (pointer float) data) ii))
+ )
+ (('rotoffset 'fov 'rotmin 'rotmax 'tiltmin 'tiltmax 'rotspeed)
+ (format *debug-temp-string* "~rdeg" (-> (the (pointer float) data) ii))
+ )
+ (else
+ (format *debug-temp-string* "~f" (-> (the (pointer float) data) ii))
+ )
+ )
+ )
+ ((int8) (format *debug-temp-string* "~D" (-> (the (pointer int8) data) ii)))
+ ((int16) (format *debug-temp-string* "~D" (-> (the (pointer int16) data) ii)))
+ ((int32)
+ (case (-> e tag i name)
+ (('final-pickup 'pickup-type)
+ (format *debug-temp-string* "~S" (pickup-type->string (the-as pickup-type (-> (the (pointer int32) data) ii))))
+ )
+ (('alt-task)
+ (format *debug-temp-string* "~S" (game-task->string (the-as game-task (-> (the (pointer int32) data) ii))))
+ )
+ (else
+ (format *debug-temp-string* "~D" (-> (the (pointer int32) data) ii))
+ )
+ )
+ )
+ ((uint8)
+ (case (-> e tag i name)
+ (('shadow-mask)
+ (format *debug-temp-string* "#b~b" (-> (the (pointer uint8) data) ii))
+ )
+ (else
+ (format *debug-temp-string* "#x~x" (-> (the (pointer uint8) data) ii))
+ )
+ )
+ )
+ ((uint16) (format *debug-temp-string* "#x~x" (-> (the (pointer uint16) data) ii)))
+ ((uint32)
+ (case (-> e tag i name)
+ (('nav-mesh-actor 'open-actor 'trigger-actor 'path-actor 'state-actor 'alt-actor 'next-actor 'prev-actor
+ 'spawner-blocker-actor 'spawner-trigger-actor 'kill-actor 'fade-actor 'water-actor 'target-actor)
+ (format *debug-temp-string* "~%#x~x (~S)" (-> (the (pointer uint32) data) ii)
+ (res-lump-struct (entity-by-aid (-> (the (pointer uint32) data) ii)) 'name string))
+ (+! y-adv 8)
+ )
+ (('movie-mask)
+ (format *debug-temp-string* "#b~b" (-> (the (pointer uint32) data) ii))
+ )
+ (else
+ (format *debug-temp-string* "#x~x" (-> (the (pointer uint32) data) ii))
+ )
+ )
+ )
+ ((vector)
+ (case (-> e tag i name)
+ (('movie-pos)
+ (format *debug-temp-string* "~%(~mm ~mm ~mm ~rdeg)"
+ (-> (the (inline-array vector) data) ii x)
+ (-> (the (inline-array vector) data) ii y)
+ (-> (the (inline-array vector) data) ii z)
+ (-> (the (inline-array vector) data) ii w)
+ )
+ )
+ (('nav-mesh-sphere)
+ (format *debug-temp-string* "~%(~mm ~mm ~mm ~mm)"
+ (-> (the (inline-array vector) data) ii x)
+ (-> (the (inline-array vector) data) ii y)
+ (-> (the (inline-array vector) data) ii z)
+ (-> (the (inline-array vector) data) ii w)
+ )
+ )
+ (else
+ (format *debug-temp-string* "~%(~f ~f ~f ~f)"
+ (-> (the (inline-array vector) data) ii x)
+ (-> (the (inline-array vector) data) ii y)
+ (-> (the (inline-array vector) data) ii z)
+ (-> (the (inline-array vector) data) ii w)
+ )
+ )
+ )
+ (+! y-adv 8))
+ (else
+ (format *debug-temp-string* "" (-> e tag i elt-type))
+ (set! ii (the int (-> e tag i elt-count)))
+ )
+ )
+ )
+ )
+ )
+
+ (draw-string-xy *debug-temp-string* debug-buf 352 cur-y (font-color default) (font-flags shadow kerning middle))
+ (+! cur-y y-adv)
+ (set! y-adv 8)
+
+ ))
+
+ )
+ )))
+
+
+)
+
+
diff --git a/goal_src/engine/entity/relocate.gc b/goal_src/engine/entity/relocate.gc
index 60168113de..1b9fcfafaf 100644
--- a/goal_src/engine/entity/relocate.gc
+++ b/goal_src/engine/entity/relocate.gc
@@ -7,90 +7,70 @@
;; note: the while loop in this is changed to include a cast to basic.
+;; DECOMP BEGINS
+
(defmethod relocate process ((obj process) (arg0 int))
(let ((v1-0 *kernel-context*))
- (set! (-> v1-0 relocating-process) obj)
- (set! (-> v1-0 relocating-min) (the-as int (&-> obj type)))
- (set!
- (-> v1-0 relocating-max)
- (the-as
- int
- (+ (+ (-> obj allocated-length) -4 (-> process size)) (the-as int obj))
- )
+ (set! (-> v1-0 relocating-process) obj)
+ (set! (-> v1-0 relocating-min) (the-as int (&-> obj type)))
+ (set! (-> v1-0 relocating-max)
+ (the-as int (+ (+ (-> obj allocated-length) -4 (-> process size)) (the-as int obj)))
+ )
+ (set! (-> v1-0 relocating-offset) arg0)
)
- (set! (-> v1-0 relocating-offset) arg0)
- )
(&+! (-> obj ppointer 0) arg0)
(let ((v1-5 (-> obj entity)))
- (if (and v1-5 (= (-> v1-5 extra process) obj))
- (&+! (-> v1-5 extra process) arg0)
+ (if (and v1-5 (= (-> v1-5 extra process) obj))
+ (&+! (-> v1-5 extra process) arg0)
+ )
)
- )
(let ((v1-7 (-> obj connection-list next1)))
- (while (the-as connection v1-7)
- (let ((a0-14 (-> v1-7 prev1)))
- (if
- (and
- (>= (the-as int a0-14) (-> *kernel-context* relocating-min))
- (< (the-as int a0-14) (-> *kernel-context* relocating-max))
- )
- (&+! (-> v1-7 prev1) arg0)
+ (while (the-as connection v1-7)
+ (let ((a0-14 (-> v1-7 prev1)))
+ (if (and (>= (the-as int a0-14) (-> *kernel-context* relocating-min))
+ (< (the-as int a0-14) (-> *kernel-context* relocating-max))
+ )
+ (&+! (-> v1-7 prev1) arg0)
+ )
+ )
+ (let ((a0-19 (-> (the-as connection v1-7) param1)))
+ (if (and (>= a0-19 (-> *kernel-context* relocating-min)) (< a0-19 (-> *kernel-context* relocating-max)))
+ (+! (-> (the-as connection v1-7) param1) arg0)
+ )
+ )
+ (let ((a0-24 (-> (the-as connection v1-7) param2)))
+ (if (and (>= a0-24 (-> *kernel-context* relocating-min)) (< a0-24 (-> *kernel-context* relocating-max)))
+ (+! (-> (the-as connection v1-7) param2) arg0)
+ )
+ )
+ (let ((a0-29 (-> (the-as connection v1-7) param3)))
+ (if (and (>= a0-29 (-> *kernel-context* relocating-min)) (< a0-29 (-> *kernel-context* relocating-max)))
+ (+! (-> (the-as connection v1-7) param3) arg0)
+ )
+ )
+ (set! v1-7 (-> (the-as connection v1-7) next1))
)
- )
- (let ((a0-19 (-> (the-as connection v1-7) param1)))
- (if
- (and
- (>= (the-as int a0-19) (-> *kernel-context* relocating-min))
- (< (the-as int a0-19) (-> *kernel-context* relocating-max))
- )
- (&+! (-> (the-as connection v1-7) param1) arg0)
- )
- )
- (let ((a0-24 (-> (the-as connection v1-7) param2)))
- (if
- (and
- (>= (the-as int a0-24) (-> *kernel-context* relocating-min))
- (< (the-as int a0-24) (-> *kernel-context* relocating-max))
- )
- (&+! (-> (the-as connection v1-7) param2) arg0)
- )
- )
- (let ((a0-29 (-> (the-as connection v1-7) param3)))
- (if
- (and
- (>= (the-as int a0-29) (-> *kernel-context* relocating-min))
- (< (the-as int a0-29) (-> *kernel-context* relocating-max))
- )
- (&+! (-> (the-as connection v1-7) param3) arg0)
- )
- )
- (set! v1-7 (-> (the-as connection v1-7) next1))
)
- )
(let ((v1-10 (-> obj self)))
- (if
- (and
- (>= (the-as int v1-10) (-> *kernel-context* relocating-min))
- (< (the-as int v1-10) (-> *kernel-context* relocating-max))
- )
- (&+! (-> obj self) arg0)
+ (if (and (>= (the-as int v1-10) (-> *kernel-context* relocating-min))
+ (< (the-as int v1-10) (-> *kernel-context* relocating-max))
+ )
+ (&+! (-> obj self) arg0)
+ )
)
- )
(let ((v1-15 (-> obj ppointer)))
- (if
- (and
- (>= (the-as int v1-15) (-> *kernel-context* relocating-min))
- (< (the-as int v1-15) (-> *kernel-context* relocating-max))
- )
- (&+! (-> obj ppointer) arg0)
+ (if (and (>= (the-as int v1-15) (-> *kernel-context* relocating-min))
+ (< (the-as int v1-15) (-> *kernel-context* relocating-max))
+ )
+ (&+! (-> obj ppointer) arg0)
+ )
)
- )
(let ((s4-0 (the basic (&+ (-> obj heap-base) 4))))
- (while (< (the-as int s4-0) (the-as int (-> obj heap-cur)))
- (relocate s4-0 arg0)
- (&+! s4-0 (logand -16 (+ (asize-of s4-0) 15)))
+ (while (< (the-as int s4-0) (the-as int (-> obj heap-cur)))
+ (relocate s4-0 arg0)
+ (&+! s4-0 (logand -16 (+ (asize-of s4-0) 15)))
+ )
)
- )
(&+! (-> obj main-thread) arg0)
(&+! (-> obj top-thread) arg0)
(&+! (-> obj heap-base) arg0)
@@ -99,18 +79,18 @@
(let ((a2-4 (asize-of obj))
(a1-22 (&-> obj type))
)
- (cond
- ((>= arg0 0)
- (qmem-copy->! (&+ a1-22 arg0) a1-22 a2-4)
- )
- ((< a2-4 2560)
- (qmem-copy<-! (&+ a1-22 arg0) a1-22 a2-4)
- )
- (else
- (ultimate-memcpy (&+ a1-22 arg0) a1-22 (the-as uint a2-4))
- )
+ (cond
+ ((>= arg0 0)
+ (qmem-copy->! (&+ a1-22 arg0) a1-22 a2-4)
+ )
+ ((< a2-4 2560)
+ (qmem-copy<-! (&+ a1-22 arg0) a1-22 a2-4)
+ )
+ (else
+ (ultimate-memcpy (&+ a1-22 arg0) a1-22 (the-as uint a2-4))
+ )
+ )
)
- )
(set! (-> *kernel-context* relocating-process) #f)
(&+ obj arg0)
)
@@ -122,56 +102,52 @@
(defmethod relocate process-drawable ((obj process-drawable) (arg0 int))
(let ((v1-0 *kernel-context*))
- (set! (-> v1-0 relocating-process) obj)
- (set! (-> v1-0 relocating-min) (the-as int (&-> obj type)))
- (set!
- (-> v1-0 relocating-max)
- (the-as
- int
- (+ (+ (-> obj allocated-length) -4 (-> process size)) (the-as int obj))
- )
+ (set! (-> v1-0 relocating-process) obj)
+ (set! (-> v1-0 relocating-min) (the-as int (&-> obj type)))
+ (set! (-> v1-0 relocating-max)
+ (the-as int (+ (+ (-> obj allocated-length) -4 (-> process size)) (the-as int obj)))
+ )
+ (set! (-> v1-0 relocating-offset) arg0)
)
- (set! (-> v1-0 relocating-offset) arg0)
- )
(if (nonzero? (-> obj root))
- (&+! (-> obj root) arg0)
- )
+ (&+! (-> obj root) arg0)
+ )
(if (nonzero? (-> obj node-list))
- (&+! (-> obj node-list) arg0)
- )
+ (&+! (-> obj node-list) arg0)
+ )
(if (nonzero? (-> obj draw))
- (&+! (-> obj draw) arg0)
- )
+ (&+! (-> obj draw) arg0)
+ )
(if (nonzero? (-> obj skel))
- (&+! (-> obj skel) arg0)
- )
+ (&+! (-> obj skel) arg0)
+ )
(if (nonzero? (-> obj nav))
- (&+! (-> obj nav) arg0)
- )
+ (&+! (-> obj nav) arg0)
+ )
(if (nonzero? (-> obj align))
- (&+! (-> obj align) arg0)
- )
+ (&+! (-> obj align) arg0)
+ )
(if (nonzero? (-> obj path))
- (&+! (-> obj path) arg0)
- )
+ (&+! (-> obj path) arg0)
+ )
(if (nonzero? (-> obj vol))
- (&+! (-> obj vol) arg0)
- )
+ (&+! (-> obj vol) arg0)
+ )
(if (nonzero? (-> obj fact))
- (&+! (-> obj fact) arg0)
- )
+ (&+! (-> obj fact) arg0)
+ )
(if (nonzero? (-> obj link))
- (&+! (-> obj link) arg0)
- )
+ (&+! (-> obj link) arg0)
+ )
(if (nonzero? (-> obj part))
- (&+! (-> obj part) arg0)
- )
+ (&+! (-> obj part) arg0)
+ )
(if (nonzero? (-> obj water))
- (&+! (-> obj water) arg0)
- )
+ (&+! (-> obj water) arg0)
+ )
(if (nonzero? (-> obj sound))
- (&+! (-> obj sound) arg0)
- )
+ (&+! (-> obj sound) arg0)
+ )
(the-as process-drawable ((method-of-type process relocate) obj arg0))
)
@@ -179,32 +155,26 @@
(&+! (-> obj process) arg0)
(&+! (-> obj root-prim) arg0)
(if (-> obj riders)
- (&+! (-> obj riders) arg0)
- )
+ (&+! (-> obj riders) arg0)
+ )
obj
)
(defmethod relocate collide-shape-moving ((obj collide-shape-moving) (arg0 int))
(if (-> obj dynam)
- (&+! (-> obj dynam) arg0)
- )
- (the-as
- collide-shape-moving
- ((method-of-type collide-shape relocate) obj arg0)
- )
+ (&+! (-> obj dynam) arg0)
+ )
+ (the-as collide-shape-moving ((method-of-type collide-shape relocate) obj arg0))
)
-(defmethod
- relocate
- collide-sticky-rider-group
- ((obj collide-sticky-rider-group) (arg0 int))
+(defmethod relocate collide-sticky-rider-group ((obj collide-sticky-rider-group) (arg0 int))
(countdown (v1-0 (-> obj num-riders))
- (let ((a2-2 (-> obj rider v1-0)))
- (if (-> a2-2 sticky-prim)
- (&+! (-> a2-2 sticky-prim) arg0)
- )
+ (let ((a2-2 (-> obj rider v1-0)))
+ (if (-> a2-2 sticky-prim)
+ (&+! (-> a2-2 sticky-prim) arg0)
+ )
+ )
)
- )
obj
)
@@ -213,14 +183,11 @@
obj
)
-(defmethod
- relocate
- collide-shape-prim-group
- ((obj collide-shape-prim-group) (arg0 int))
+(defmethod relocate collide-shape-prim-group ((obj collide-shape-prim-group) (arg0 int))
(&+! (-> obj cshape) arg0)
(countdown (v1-2 (-> obj num-prims))
- (&+! (-> obj prims v1-2) arg0)
- )
+ (&+! (-> obj prims v1-2) arg0)
+ )
obj
)
@@ -233,67 +200,57 @@
(&+! (-> obj skeleton) arg0)
(&+! (-> obj process) arg0)
(when (-> obj ripple)
- (if (-> obj ripple query)
- (&+! (-> obj ripple query) arg0)
+ (if (-> obj ripple query)
+ (&+! (-> obj ripple query) arg0)
+ )
+ (&+! (-> obj ripple) arg0)
)
- (&+! (-> obj ripple) arg0)
- )
(let ((v1-14 (-> obj shadow-ctrl)))
- (if
- (and
- (>= (the-as int v1-14) (-> *kernel-context* relocating-min))
- (< (the-as int v1-14) (-> *kernel-context* relocating-max))
- )
- (&+! (-> obj shadow-ctrl) arg0)
+ (if (and (>= (the-as int v1-14) (-> *kernel-context* relocating-min))
+ (< (the-as int v1-14) (-> *kernel-context* relocating-max))
+ )
+ (&+! (-> obj shadow-ctrl) arg0)
+ )
)
- )
obj
)
(defmethod relocate joint-control ((obj joint-control) (arg0 int))
(if (-> obj effect)
- (&+! (-> obj effect) arg0)
- )
- (set!
- (-> obj root-channel)
- (the-as
- (inline-array joint-control-channel)
- (+ (the-as uint (-> obj root-channel)) arg0)
- )
- )
+ (&+! (-> obj effect) arg0)
+ )
+ (set! (-> obj root-channel)
+ (the-as (inline-array joint-control-channel) (+ (the-as uint (-> obj root-channel)) arg0))
+ )
(countdown (v1-6 (-> obj allocated-length))
- (&+! (-> obj channel v1-6 parent) arg0)
- )
+ (&+! (-> obj channel v1-6 parent) arg0)
+ )
obj
)
(defmethod relocate cspace-array ((obj cspace-array) (arg0 int))
(countdown (v1-0 (-> obj length))
- (let ((a2-2 (-> obj data v1-0)))
- (if (-> a2-2 parent)
- (&+! (-> a2-2 parent) arg0)
- )
- (&+! (-> a2-2 bone) arg0)
- (let ((a3-6 (-> a2-2 param1)))
- (if
- (and
- (>= (the-as int a3-6) (-> *kernel-context* relocating-min))
- (< (the-as int a3-6) (-> *kernel-context* relocating-max))
- )
- (&+! (-> a2-2 param1) arg0)
+ (let ((a2-2 (-> obj data v1-0)))
+ (if (-> a2-2 parent)
+ (&+! (-> a2-2 parent) arg0)
+ )
+ (&+! (-> a2-2 bone) arg0)
+ (let ((a3-6 (-> a2-2 param1)))
+ (if (and (>= (the-as int a3-6) (-> *kernel-context* relocating-min))
+ (< (the-as int a3-6) (-> *kernel-context* relocating-max))
+ )
+ (&+! (-> a2-2 param1) arg0)
+ )
+ )
+ (let ((a3-11 (-> a2-2 param2)))
+ (if (and (>= (the-as int a3-11) (-> *kernel-context* relocating-min))
+ (< (the-as int a3-11) (-> *kernel-context* relocating-max))
+ )
+ (&+! (-> a2-2 param2) arg0)
+ )
+ )
)
- )
- (let ((a3-11 (-> a2-2 param2)))
- (if
- (and
- (>= (the-as int a3-11) (-> *kernel-context* relocating-min))
- (< (the-as int a3-11) (-> *kernel-context* relocating-max))
- )
- (&+! (-> a2-2 param2) arg0)
- )
- )
)
- )
obj
)
@@ -344,101 +301,90 @@
obj
)
-(defmethod
- relocate
- sparticle-launch-control
- ((obj sparticle-launch-control) (arg0 int))
+(defmethod relocate sparticle-launch-control ((obj sparticle-launch-control) (arg0 int))
(&+! (-> obj proc) arg0)
(countdown (v1-2 (-> obj length))
- (let* ((a0-3 (-> obj data v1-2))
- (a2-0 (-> a0-3 origin))
+ (let* ((a0-3 (-> obj data v1-2))
+ (a2-0 (-> a0-3 origin))
+ )
+ (if (and (>= (the-as int a2-0) (-> *kernel-context* relocating-min))
+ (< (the-as int a2-0) (-> *kernel-context* relocating-max))
+ )
+ (&+! (-> a0-3 origin) arg0)
)
- (if
- (and
- (>= (the-as int a2-0) (-> *kernel-context* relocating-min))
- (< (the-as int a2-0) (-> *kernel-context* relocating-max))
)
- (&+! (-> a0-3 origin) arg0)
- )
)
- )
(forall-particles-with-key
- obj
- (lambda ((arg0 sparticle-system) (arg1 sparticle-cpuinfo))
- (let ((v1-1 (-> *kernel-context* relocating-offset)))
- (set!
- (-> arg1 key)
- (the-as sparticle-launch-control (+ (the-as int (-> arg1 key)) v1-1))
+ obj
+ (lambda ((arg0 sparticle-system) (arg1 sparticle-cpuinfo))
+ (let ((v1-1 (-> *kernel-context* relocating-offset)))
+ (set! (-> arg1 key) (the-as sparticle-launch-control (+ (the-as int (-> arg1 key)) v1-1)))
+ (if (-> arg1 binding)
+ (set! (-> arg1 binding) (the-as sparticle-launch-state (+ (the-as int (-> arg1 binding)) v1-1)))
+ )
+ )
+ 0
+ (none)
)
- (if (-> arg1 binding)
- (set!
- (-> arg1 binding)
- (the-as sparticle-launch-state (+ (the-as int (-> arg1 binding)) v1-1))
- )
- )
- )
- 0
- (none)
+ #t
+ #t
)
- #t
- #t
- )
obj
)
(defmethod relocate camera-master ((obj camera-master) (arg0 int))
(if (nonzero? (-> obj water-drip))
- (&+! (-> obj water-drip) arg0)
- )
+ (&+! (-> obj water-drip) arg0)
+ )
(the-as camera-master ((method-of-type process relocate) obj arg0))
)
(defmethod relocate time-of-day-proc ((obj time-of-day-proc) (arg0 int))
(if (nonzero? (-> obj stars))
- (&+! (-> obj stars) arg0)
- )
+ (&+! (-> obj stars) arg0)
+ )
(if (nonzero? (-> obj sun))
- (&+! (-> obj sun) arg0)
- )
+ (&+! (-> obj sun) arg0)
+ )
(if (nonzero? (-> obj green-sun))
- (&+! (-> obj green-sun) arg0)
- )
+ (&+! (-> obj green-sun) arg0)
+ )
(if (nonzero? (-> obj moon))
- (&+! (-> obj moon) arg0)
- )
+ (&+! (-> obj moon) arg0)
+ )
(the-as time-of-day-proc ((method-of-type process relocate) obj arg0))
)
(defmethod relocate swingpole ((obj swingpole) (arg0 int))
(if (nonzero? (-> obj root))
- (&+! (-> obj root) arg0)
- )
+ (&+! (-> obj root) arg0)
+ )
(the-as swingpole ((method-of-type process relocate) obj arg0))
)
(defmethod relocate part-tracker ((obj part-tracker) (arg0 int))
(if (nonzero? (-> obj root))
- (&+! (-> obj root) arg0)
- )
+ (&+! (-> obj root) arg0)
+ )
(if (nonzero? (-> obj part))
- (&+! (-> obj part) arg0)
- )
+ (&+! (-> obj part) arg0)
+ )
(the-as part-tracker ((method-of-type process relocate) obj arg0))
)
(defmethod relocate manipy ((obj manipy) (arg0 int))
(if (nonzero? (-> obj joint 0))
- (&+! (-> obj joint 0) arg0)
- )
+ (&+! (-> obj joint 0) arg0)
+ )
(if (nonzero? (-> obj joint 1))
- (&+! (-> obj joint 1) arg0)
- )
+ (&+! (-> obj joint 1) arg0)
+ )
(if (nonzero? (-> obj joint 2))
- (&+! (-> obj joint 2) arg0)
- )
+ (&+! (-> obj joint 2) arg0)
+ )
(if (nonzero? (-> obj joint 3))
- (&+! (-> obj joint 3) arg0)
- )
+ (&+! (-> obj joint 3) arg0)
+ )
(the-as manipy ((method-of-type process-drawable relocate) obj arg0))
)
diff --git a/goal_src/engine/game/game-info.gc b/goal_src/engine/game/game-info.gc
index 26ceb2b5f3..6e41e2b5e8 100644
--- a/goal_src/engine/game/game-info.gc
+++ b/goal_src/engine/game/game-info.gc
@@ -240,7 +240,7 @@
"demo-start"
)
(*debug-segment*
- (#if (user? dass) "snow-start" "village1-hut")
+ (#if (user? dass) "citadel-generator-end" "village1-hut")
)
(else
"title-start"
diff --git a/goal_src/engine/game/generic-obs-h.gc b/goal_src/engine/game/generic-obs-h.gc
index 99be3718fe..f0a5de21f4 100644
--- a/goal_src/engine/game/generic-obs-h.gc
+++ b/goal_src/engine/game/generic-obs-h.gc
@@ -5,13 +5,9 @@
;; name in dgo: generic-obs-h
;; dgos: GAME, ENGINE
-;; TODO - for babak-with-cannon
(define-extern mistycam-spawn (function none))
-;; TODO - for babak-with-cannon
(define-extern beachcam-spawn (function none))
-(define-extern draw-eco-beam (function vector vector none))
-
(declare-type camera-tracker process)
(define-extern process-grab? (function process symbol :behavior camera-tracker))
(define-extern process-release? (function process symbol :behavior process))
@@ -31,24 +27,26 @@
(define-extern eco-blue-glow (function vector none))
+(declare-type joint-mod basic)
+
;; DECOMP BEGINS
(deftype manipy (process-drawable)
- ((new-trans-hook (function none) :offset-assert 176)
- (cur-trans-hook (function none) :offset-assert 180)
- (cur-event-hook (function none) :offset-assert 184)
- (new-joint-anim art-joint-anim :offset-assert 188)
- (new-joint-anim-blend uint64 :offset-assert 192)
- (anim-mode symbol :offset-assert 200)
- (cur-grab-handle handle :offset-assert 208)
- (cur-target-handle handle :offset-assert 216)
- (old-grab-pos vector :inline :offset-assert 224)
- (joint process-drawable 4 :offset-assert 240)
- (new-post-hook (function none) :offset-assert 256)
- (cur-post-hook (function none) :offset-assert 260)
- (clone-copy-trans basic :offset-assert 264)
- (shadow-backup basic :offset-assert 268)
- (draw? symbol :offset-assert 272)
+ ((new-trans-hook (function none) :offset-assert 176)
+ (cur-trans-hook (function none) :offset-assert 180)
+ (cur-event-hook (function none) :offset-assert 184)
+ (new-joint-anim art-joint-anim :offset-assert 188)
+ (new-joint-anim-blend uint64 :offset-assert 192)
+ (anim-mode symbol :offset-assert 200)
+ (cur-grab-handle handle :offset-assert 208)
+ (cur-target-handle handle :offset-assert 216)
+ (old-grab-pos vector :inline :offset-assert 224)
+ (joint joint-mod 4 :offset-assert 240)
+ (new-post-hook (function none) :offset-assert 256)
+ (cur-post-hook (function none) :offset-assert 260)
+ (clone-copy-trans basic :offset-assert 264)
+ (shadow-backup basic :offset-assert 268)
+ (draw? symbol :offset-assert 272)
)
:heap-base #xb0
:method-count-assert 20
diff --git a/goal_src/engine/game/generic-obs.gc b/goal_src/engine/game/generic-obs.gc
index 21f4a26e5c..544da4a43d 100644
--- a/goal_src/engine/game/generic-obs.gc
+++ b/goal_src/engine/game/generic-obs.gc
@@ -1199,7 +1199,7 @@
)
(defbehavior camera-tracker-init camera-tracker ((arg0 object))
- (stack-size-set! (-> self main-thread) 768) ;; was 512
+ (stack-size-set! (-> self main-thread) 512)
(logclear! (-> self mask) (process-mask actor-pause movie enemy platform projectile))
(set! (-> self mask-to-clear) (the-as uint #x4a0800))
(set! (-> self grab-target) (the-as handle #f))
diff --git a/goal_src/engine/game/main-h.gc b/goal_src/engine/game/main-h.gc
index eac3c839ed..aab964463b 100644
--- a/goal_src/engine/game/main-h.gc
+++ b/goal_src/engine/game/main-h.gc
@@ -6,7 +6,6 @@
;; dgos: GAME, ENGINE
;; Global engine settings:
-(defglobalconstant TARGET_STARTUP_HACKS #t)
(defglobalconstant NO_BONES_HACK #f)
(define *stats-poly* #f)
(define *stats-memory* #f)
@@ -72,7 +71,7 @@
(define *display-path-marks* #f)
(define *display-vol-marks* #f)
(define *display-water-marks* #f)
-(define *display-actor-anim* #f)
+(define *display-actor-anim* (the string #f))
(define *display-process-anim* (the-as (pointer process) #f))
(define *display-actor-vis* #f)
(define *display-actor-graph* #f)
diff --git a/goal_src/engine/game/main.gc b/goal_src/engine/game/main.gc
index 9652498d60..b11568a674 100644
--- a/goal_src/engine/game/main.gc
+++ b/goal_src/engine/game/main.gc
@@ -522,6 +522,47 @@
0
)
+(defconstant MEM_BAR_WIDTH 152)
+(defconstant MEM_BAR_HEIGHT 8)
+(defconstant MEM_BAR_NUM 7)
+(defconstant MEM_BAR_BG_COL (static-rgba 64 64 64 64))
+(defconstant MEM_BAR_X (- 480 MEM_BAR_WIDTH))
+(defconstant MEM_BAR_Y (- 224 4 (* MEM_BAR_HEIGHT MEM_BAR_NUM)))
+(defmacro draw-memory-bar-generic (buf &key remain &key total &key name &key idx &key color)
+ `(let* (
+ (total (the float ,total))
+ (remain (the float ,remain))
+ (used-p (/ (- total remain) total))
+ (used-x (the int (* used-p MEM_BAR_WIDTH)))
+ (used-y (+ MEM_BAR_Y (* ,idx MEM_BAR_HEIGHT)))
+ )
+ (draw-sprite2d-xy ,buf MEM_BAR_X used-y used-x MEM_BAR_HEIGHT ,color)
+ (draw-sprite2d-xy ,buf (+ MEM_BAR_X used-x) used-y (- MEM_BAR_WIDTH used-x) MEM_BAR_HEIGHT MEM_BAR_BG_COL)
+ (draw-string-xy ,name ,buf MEM_BAR_X used-y (font-color red) (font-flags shadow kerning right))
+ (draw-string-xy (string-format "~,,2f%" (* used-p 100)) ,buf (+ MEM_BAR_X used-x) used-y (font-color red) (font-flags shadow kerning middle))
+ (draw-string-xy (string-format "~,,1fM" (/ total (* 1024 1024))) ,buf (+ MEM_BAR_X MEM_BAR_WIDTH) used-y (font-color red) (font-flags shadow kerning left))
+ )
+ )
+(defmacro draw-memory-bar-kheap (buf heap &key (name #f) &key idx &key color)
+ `(let ((heap ,heap))
+ (draw-memory-bar-generic ,buf
+ :remain (&- (-> heap top) (-> heap current))
+ :total (&- (-> heap top) (-> heap base))
+ :name ,(if name name (symbol->string heap))
+ :idx ,idx
+ :color ,color)
+ )
+ )
+(defmacro draw-memory-bar-dead-pool-heap (buf heap &key (name #f) &key idx &key color)
+ `(let* ((heap ,heap) (pool-total (memory-total heap)))
+ (draw-memory-bar-generic ,buf
+ :remain (- pool-total (memory-used heap))
+ :total pool-total
+ :name ,(if name name (symbol->string heap))
+ :idx ,idx
+ :color ,color)
+ )
+ )
(defbehavior display-loop process ()
"This is in progress..."
@@ -670,14 +711,18 @@
;; debug drawing
(when *debug-segment*
- (debug-draw-buffers) ;; lines/text
-
(#when PC_PORT
(if (-> *pc-settings* debug-pad-display)
(debug-pad-display (-> *cpad-list* cpads 0))
)
+ (when (and (or (= *master-mode* 'game) (= *master-mode* 'pause)) (-> *entity-debug-inspect* entity))
+ (define-extern entity-inspect-draw (function entity-debug-inspect object))
+ (entity-inspect-draw *entity-debug-inspect*)
+ )
)
+ (debug-draw-buffers) ;; lines/text
+
;; debug dma
(with-dma-buffer-add-bucket ((debug-buf (-> disp frames (-> disp on-screen) frame debug-buf))
(bucket-id debug-draw1))
@@ -721,7 +766,7 @@
(format *stdcon* "bug-report ~A~%" *user*)
(format *stdcon* "nick ~A continue ~S~%" (-> *load-state* vis-nick) (-> *game-info* current-continue name))
(dotimes (i LEVEL_COUNT)
- (format *stdcon* "level ~D ~8A ~A~%" i (-> *level* level i name) (-> *level* level i display?))
+ (format *stdcon* "level ~D ~12A ~A~%" i (-> *level* level i name) (-> *level* level i display?))
)
(format *stdcon* "music ~A (f: ~D) sound ~A ~A~%"
(-> *setting-control* current music) (-> *setting-control* current sound-flava)
@@ -738,38 +783,19 @@
)
)
(when (-> *pc-settings* display-heap-status)
- (mlet* ((BAR_WIDTH 160)
- (BAR_HEIGHT 8)
- (BAR_NUM 2)
- (BAR_BG_COL (static-rgba 64 64 64 64))
- (BAR_X (- 480 BAR_WIDTH))
- (BAR_Y (- 224 4 (* BAR_HEIGHT BAR_NUM)))
- )
- (let* (
- (remain (the float (&- (-> global top) (-> global current))))
- (total (the float (&- (-> global top) (-> global base))))
- (used-p (/ (- total remain) total))
- (used-x (the int (* used-p BAR_WIDTH)))
- (used-y BAR_Y)
- )
- (draw-sprite2d-xy debug-buf BAR_X used-y used-x BAR_HEIGHT (static-rgba 32 32 255 64))
- (draw-sprite2d-xy debug-buf (+ BAR_X used-x) used-y (- BAR_WIDTH used-x) BAR_HEIGHT BAR_BG_COL)
- (draw-string-xy "global" debug-buf BAR_X used-y (font-color red) (font-flags shadow kerning right))
- (draw-string-xy (string-format "~,,2f% (~,,1fM)" (* used-p 100) (/ total (* 1024 1024))) debug-buf (+ BAR_X used-x) used-y (font-color red) (font-flags shadow kerning middle))
- )
- (let* (
- (remain (the float (&- (-> debug top) (-> debug current))))
- (total (the float (&- (-> debug top) (-> debug base))))
- (used-p (/ (- total remain) total))
- (used-x (the int (* used-p BAR_WIDTH)))
- (used-y (+ BAR_Y BAR_HEIGHT))
- )
- (draw-sprite2d-xy debug-buf BAR_X used-y used-x BAR_HEIGHT (static-rgba 255 32 32 64))
- (draw-sprite2d-xy debug-buf (+ BAR_X used-x) used-y (- BAR_WIDTH used-x) BAR_HEIGHT BAR_BG_COL)
- (draw-string-xy "debug" debug-buf BAR_X used-y (font-color red) (font-flags shadow kerning right))
- (draw-string-xy (string-format "~,,2f% (~,,1fM)" (* used-p 100) (/ total (* 1024 1024))) debug-buf (+ BAR_X used-x) used-y (font-color red) (font-flags shadow kerning middle))
- )
- )
+ (draw-memory-bar-kheap debug-buf global :idx 0 :color (static-rgba 32 32 255 64))
+ (draw-memory-bar-kheap debug-buf debug :idx 1 :color (static-rgba 255 32 32 64))
+ (draw-memory-bar-kheap debug-buf (-> *level* level 0 heap) :name "l0" :idx 2 :color (static-rgba 32 255 255 64))
+ (draw-memory-bar-kheap debug-buf (-> *level* level 1 heap) :name "l1" :idx 3 :color (static-rgba 255 32 255 64))
+ (draw-memory-bar-dead-pool-heap debug-buf *nk-dead-pool* :name "actor" :idx 4 :color (static-rgba 32 255 32 64))
+ (draw-memory-bar-generic debug-buf
+ :remain (* 16 (dma-buffer-free (-> disp frames (-> disp on-screen) frame global-buf)))
+ :total (length (-> disp frames (-> disp on-screen) frame global-buf))
+ :name "dma-global" :idx 5 :color (static-rgba 32 32 255 64))
+ (draw-memory-bar-generic debug-buf
+ :remain (* 16 (dma-buffer-free (-> disp frames (-> disp on-screen) frame debug-buf)))
+ :total (length (-> disp frames (-> disp on-screen) frame debug-buf))
+ :name "dma-debug" :idx 6 :color (static-rgba 255 32 32 64))
)
)
diff --git a/goal_src/engine/game/settings.gc b/goal_src/engine/game/settings.gc
index e11aff31a3..5f9e45c5b7 100644
--- a/goal_src/engine/game/settings.gc
+++ b/goal_src/engine/game/settings.gc
@@ -339,7 +339,7 @@
)
;; set sound flava
- (set! (-> s5-1 sound-flava) (the-as uint (flava-lookup (-> gp-0 music) (the-as int (-> s5-1 sound-flava)))))
+ (set! (-> s5-1 sound-flava) (the-as uint (flava-lookup (-> gp-0 music) (the-as music-flava (-> s5-1 sound-flava)))))
(set! (-> gp-0 sound-flava) (-> s5-1 sound-flava))
(if *sound-player-enable*
(sound-set-flava (-> gp-0 sound-flava))
diff --git a/goal_src/engine/game/task/process-taskable.gc b/goal_src/engine/game/task/process-taskable.gc
index a42c5daf27..56e8d94527 100644
--- a/goal_src/engine/game/task/process-taskable.gc
+++ b/goal_src/engine/game/task/process-taskable.gc
@@ -186,7 +186,7 @@
((< (vector-length s5-3) 102400.0)
(when (not (-> obj have-music))
(set! (-> obj have-music) #t)
- (set-setting! *setting-control* pp 'music (the-as symbol (-> obj music)) 0.0 0)
+ (set-setting! *setting-control* pp 'music (-> obj music) 0.0 0)
)
)
((-> obj have-music)
@@ -415,7 +415,7 @@
(deactivate a0-4)
)
)
- (set! (-> self last-talk) (the-as uint (-> *display* game-frame-counter)))
+ (set! (-> self last-talk) (-> *display* game-frame-counter))
(dummy-52 self)
(none)
)
@@ -486,13 +486,13 @@
(ja-play-spooled-anim
(the-as spool-anim arg1)
arg0
- (the-as art-joint-anim (-> self blend-on-exit))
+ (-> self blend-on-exit)
(lambda ((arg0 process-taskable)) (= (get-response (-> arg0 query)) 'no))
)
(ja-play-spooled-anim
(the-as spool-anim arg1)
arg0
- (the-as art-joint-anim (-> self blend-on-exit))
+ (-> self blend-on-exit)
(the-as (function process-drawable symbol) false-func)
)
)
@@ -1035,7 +1035,7 @@
((not *target*)
)
((not (-> self will-talk))
- (if (>= (- (-> *display* game-frame-counter) (the-as int (-> self last-talk))) 3000)
+ (if (>= (- (-> *display* game-frame-counter) (-> self last-talk)) 3000)
(set! (-> self will-talk) #t)
)
)
@@ -1085,7 +1085,7 @@
(set! (-> v1-59 scale) 0.9)
)
(set! (-> gp-1 flags) (font-flags shadow kerning left large))
- (print-game-text (lookup-text! *common-text* (the-as game-text-id (-> self talk-message)) #f) gp-1 #f 128 22)
+ (print-game-text (lookup-text! *common-text* (-> self talk-message) #f) gp-1 #f 128 22)
)
(when (and (cpad-pressed? 0 circle) (process-grab? *target*))
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons circle))
@@ -1174,8 +1174,8 @@
(set! (-> obj cell-for-task) (game-task none))
(set! (-> obj camera) (the-as handle #f))
(set! (-> obj will-talk) #t)
- (set! (-> obj talk-message) (the-as uint 260))
- (set! (-> obj last-talk) (the-as uint 0))
+ (set! (-> obj talk-message) (game-text-id press-to-talk))
+ (set! (-> obj last-talk) 0)
(set! (-> obj bounce-away) #t)
(set! (-> obj been-kicked) #f)
(set! (-> obj neck-joint-index) arg5)
@@ -1347,7 +1347,6 @@
(s1-0 (or (!= (-> self spooling?) #t) (logtest? (-> (the-as process-taskable s2-0) skel status) 32)))
)
(vector<-cspace! s5-0 (-> (the-as process-taskable s2-0) node-list data (-> self cam-joint-index)))
-
(vector-normalize-copy! gp-0 (-> s4-0 vector 2) -1.0)
(when s1-0
(when (not (-> self had-valid-frame))
@@ -1419,22 +1418,20 @@
)
(defmethod draw-npc-shadow process-taskable ((obj process-taskable))
- (#unless TARGET_STARTUP_HACKS
- (let ((gp-0 (-> obj draw shadow-ctrl)))
- (cond
- ((and (-> obj draw shadow) (zero? (-> obj draw cur-lod)) (logtest? (-> obj draw status) (draw-status drwf03)))
- (dummy-15 gp-0 (-> obj draw origin) -4096.0 4096.0 32768.0)
- (dummy-14 gp-0)
- )
- (else
- (let ((v1-10 gp-0))
- (logior! (-> v1-10 settings flags) 32)
- )
- 0
- )
- )
- )
- )
+ (let ((gp-0 (-> obj draw shadow-ctrl)))
+ (cond
+ ((and (-> obj draw shadow) (zero? (-> obj draw cur-lod)) (logtest? (-> obj draw status) (draw-status drwf03)))
+ ;(dummy-15 gp-0 (-> obj draw origin) -4096.0 4096.0 32768.0)
+ (dummy-14 gp-0)
+ )
+ (else
+ (let ((v1-10 gp-0))
+ (logior! (-> v1-10 settings flags) 32)
+ )
+ 0
+ )
+ )
+ )
(none)
)
diff --git a/goal_src/engine/game/task/task-control-h.gc b/goal_src/engine/game/task/task-control-h.gc
index 2ab8687a82..c51691c71a 100644
--- a/goal_src/engine/game/task/task-control-h.gc
+++ b/goal_src/engine/game/task/task-control-h.gc
@@ -117,21 +117,21 @@
(cell-for-task game-task :offset-assert 256)
(cell-x handle :offset-assert 264)
(cam-joint-index int32 :offset-assert 272)
- (skippable basic :offset-assert 276) ;; probably a symbol
- (blend-on-exit basic :offset-assert 280) ;; probably a symbol?
+ (skippable symbol :offset-assert 276)
+ (blend-on-exit art-joint-anim :offset-assert 280)
(camera handle :offset-assert 288)
(will-talk symbol :offset-assert 296)
- (talk-message uint32 :offset-assert 300)
- (last-talk uint64 :offset-assert 304)
+ (talk-message game-text-id :offset-assert 300)
+ (last-talk int64 :offset-assert 304)
(bounce-away symbol :offset-assert 312)
(ambient ambient-control :inline :offset-assert 320)
(center-joint-index int32 :offset-assert 336)
(draw-bounds-y-offset float :offset-assert 340)
(neck-joint-index int32 :offset-assert 344)
(fuel-cell-anim spool-anim :offset-assert 348)
- (sound-flava uint8 :offset-assert 352)
+ (sound-flava music-flava :offset-assert 352)
(have-flava symbol :offset-assert 356)
- (music basic :offset-assert 360)
+ (music symbol :offset-assert 360)
(have-music symbol :offset-assert 364)
(been-kicked symbol :offset-assert 368)
(cur-trans-hook (function none) :offset-assert 372)
diff --git a/goal_src/engine/gfx/font-h.gc b/goal_src/engine/gfx/font-h.gc
index 78a83193fc..3a7cd5b00e 100644
--- a/goal_src/engine/gfx/font-h.gc
+++ b/goal_src/engine/gfx/font-h.gc
@@ -65,6 +65,7 @@
(left 3)
(right 4)
(large 5)
+ (pc-hack 6) ;; added, widescreen small text hack
)
(deftype char-verts (structure)
diff --git a/goal_src/engine/gfx/font.gc b/goal_src/engine/gfx/font.gc
index 22a5add345..62076f2fa7 100644
--- a/goal_src/engine/gfx/font.gc
+++ b/goal_src/engine/gfx/font.gc
@@ -693,7 +693,7 @@
(.mul.vf vf25 vf25 vf1 :mask #b11)
(.mul.vf vf23 vf23 vf1 :mask #b11)
;; hack! fixes small font widescreen
- (if (logtest? (-> arg2 flags) (font-flags large right middle))
+ (unless (logtest? (-> arg2 flags) (font-flags pc-hack))
(.mul.vf vf24 vf24 vf1 :mask #b11)
)
(let ((fw *font-work*))
@@ -1657,7 +1657,7 @@
(.mul.vf vf25 vf25 vf1 :mask #b11)
(.mul.vf vf23 vf23 vf1 :mask #b11)
;; hack! fixes small font widescreen
- (if (logtest? (-> arg1 flags) (font-flags large right middle))
+ (unless (logtest? (-> arg1 flags) (font-flags pc-hack))
(.mul.vf vf24 vf24 vf1 :mask #b11)
)
(let ((a1-4 *font-work*))
diff --git a/goal_src/engine/level/level.gc b/goal_src/engine/level/level.gc
index e4e1e01b8a..7234e4937b 100644
--- a/goal_src/engine/level/level.gc
+++ b/goal_src/engine/level/level.gc
@@ -1494,7 +1494,7 @@
(let ((startup-level (case *kernel-boot-message*
(('play)
(if *debug-segment*
- (#if (user? dass) 'snow 'village1)
+ (#if (user? dass) 'citadel 'village1)
'title
)
)
@@ -1664,6 +1664,12 @@
(format 0 "Discarding level ~A~%" (-> s4-0 name))
(level-status-set! s4-0 'inactive)
(set! v1-0 #t)
+ (#when PC_PORT
+ (when *debug-segment*
+ (define-extern *entity* entity)
+ (set! *entity* (the entity #f))
+ )
+ )
)
)
)
diff --git a/goal_src/engine/pc/pckernel.gc b/goal_src/engine/pc/pckernel.gc
index c11d10ce73..4f53814b1a 100644
--- a/goal_src/engine/pc/pckernel.gc
+++ b/goal_src/engine/pc/pckernel.gc
@@ -591,6 +591,67 @@
(read-from-file *pc-settings* PC_SETTINGS_FILE_NAME)
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;; entity debugging
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(when *debug-segment*
+
+(deftype entity-debug-inspect (basic)
+ (
+ (scroll-y int32)
+ (entity entity)
+ (show-actor-info symbol)
+ )
+ (:methods
+ (new (symbol type) _type_)
+ (set-entity! (_type_ entity) entity)
+ (update-pad (_type_ int) none)
+ )
+ )
+
+(defmethod new entity-debug-inspect ((allocation symbol) (type-to-make type))
+ "make a new entity-debug-inspect object"
+
+ (let ((obj (object-new allocation type-to-make (the-as int (-> type-to-make size)))))
+
+ (set! (-> obj scroll-y) 0)
+ (set! (-> obj entity) (the entity #f))
+ (set! (-> obj show-actor-info) #f)
+ obj
+ )
+ )
+
+(defmethod set-entity! entity-debug-inspect ((obj entity-debug-inspect) (e entity))
+ "set the entity to inspect"
+
+ (set! (-> obj entity) e)
+ (unless e
+ (set! *display-actor-anim* (the string #f)))
+ (set! (-> obj scroll-y) 0)
+
+ e
+ )
+
+(defmethod update-pad entity-debug-inspect ((obj entity-debug-inspect) (pad-idx int))
+ "respond to pad inputs"
+
+ (if (cpad-pressed? pad-idx r1)
+ (1+! (-> obj scroll-y)))
+ (if (cpad-pressed? pad-idx l1)
+ (set! (-> obj scroll-y) (max 0 (1- (-> obj scroll-y)))))
+ (if (cpad-pressed? pad-idx l3)
+ (not! (-> obj show-actor-info)))
+
+ (none))
+
+
+(define *entity-debug-inspect* (new 'debug 'entity-debug-inspect))
+
+)
+
+
)
diff --git a/goal_src/engine/sound/gsound-h.gc b/goal_src/engine/sound/gsound-h.gc
index f5c325c481..f24fd499d6 100644
--- a/goal_src/engine/sound/gsound-h.gc
+++ b/goal_src/engine/sound/gsound-h.gc
@@ -83,6 +83,60 @@
(set-fps)
)
+;; flavors for music
+(defenum music-flava
+ :type uint8
+ (racer 1)
+ (flutflut 2)
+ (to-maincave 3)
+ (to-snow 4)
+ (sage 5)
+ (assistant 6)
+ (birdlady 7)
+ (mayor 8)
+ (sculptor 9)
+ (explorer 10)
+ (sage-yellow 11)
+ (sage-red 12)
+ (sage-blue 13)
+ (miners 14)
+ (warrior 15)
+ (geologist 16)
+ (gambler 17)
+ (sage-hut 18)
+ (dock 19)
+ (farmer 20)
+ (jungleb-eggtop 21)
+ (misty-boat 22)
+ (misty-battle 23)
+ (beach-sentinel 24)
+ (beach-cannon 25)
+ (beach-grotto 26)
+ (citadel-center 27)
+ (robocave 28)
+ (robocave-top 29)
+ (maincave 30)
+ (darkcave 31)
+ (snow-battle 32)
+ (snow-cave 33)
+ (snow-fort 34)
+ (snow-balls 35)
+ (levitator 36)
+ (swamp-launcher 37)
+ (swamp-battle 38)
+ (jungle-temple-exit 39)
+ (jungle-lurkerm 40)
+ (jungle-temple-top 41)
+ (rolling-gorge 42)
+ (ogre-middle 43)
+ (ogre-end 44)
+ (lavatube-middle 45)
+ (lavatube-end 46)
+ (finalboss-middle 47)
+ (finalboss-end 48)
+ (default 49)
+ )
+
;; like should match the sound type in OVERLORD
;; This is shared between all sound RPCs and acts like the header for the sound messages
(deftype sound-rpc-cmd (structure)
diff --git a/goal_src/engine/sound/gsound.gc b/goal_src/engine/sound/gsound.gc
index f1190ff14d..b6202ddd02 100644
--- a/goal_src/engine/sound/gsound.gc
+++ b/goal_src/engine/sound/gsound.gc
@@ -887,7 +887,7 @@
(define *flava-table* (new 'global 'flava-table))
(set! (-> *flava-table* count) 0)
-(defun flava-lookup ((music symbol) (n int))
+(defun flava-lookup ((music symbol) (n music-flava))
"Return the n'th flava for the specified music"
(dotimes (i (-> *flava-table* count))
@@ -904,7 +904,7 @@
`(begin
;; append a new music to the flava table
- (set! (-> *flava-table* row (-> *flava-table* count) music) ,name)
+ (set! (-> *flava-table* row (-> *flava-table* count) music) (quote ,name))
;; reset this music's flavas
(dotimes (n 50)
@@ -916,170 +916,116 @@
(1+! (-> *flava-table* count))
;; set the flavas or whatever they're called
- ,@(apply (lambda (x) `(set! (-> *flava-table* row (1- (-> *flava-table* count)) flava ,(first x)) ,(second x))) flavas)
+ ,@(apply (lambda (x) `(set! (-> *flava-table* row (1- (-> *flava-table* count)) flava (music-flava ,(first x))) ,(second x))) flavas)
)
)
-#| flava events (guesses):
-0 :
-1 : racer
-2 : flutflut
-3 : to-maincave
-4 : to-snow
-5 : sage
-6 : assistant
-7 : birdlady
-8 : mayor
-9 : sculptor
-10: uncle
-11: sage-yellow
-12: sage-red
-13: sage-blue
-14: miners
-15: warrior
-16: geologist
-17: gambler
-18: sage-hut
-19: dock
-20: farmer
-21: jungleb-eggtop
-22: misty-boat
-23: misty-ambush (?)
-24: beach-sentinel
-25: beach-cannon
-26: beach-logs
-27: citadel-center
-28: robocave
-29: robocave-top
-30: maincave
-31: darkcave
-32: snow-ambush (?)
-33: snow-cave
-34: snow-fort
-35: snow-balls
-36: levitator
-37: swamp-launcher
-38: swamp-ambush (?)
-39: jungle-temple-exit
-40: jungle-lurkerm
-41: jungle-temple-top
-42: rolling-race
-43: ogre-middle
-44: ogre-end
-45: lavatube-middle
-46: lavatube-end
-47: finalboss-middle
-48: finalboss-end
-49: default
-|#
-
-;; TODO make enum
-(flava-table-add 'village1
- (5 2)
- (6 6)
- (7 4)
- (20 5)
- (8 7)
- (9 8)
- (10 9)
- (19 10)
- (18 3)
+(flava-table-add village1
+ (sage 2)
+ (assistant 6)
+ (birdlady 4)
+ (farmer 5)
+ (mayor 7)
+ (sculptor 8)
+ (explorer 9)
+ (dock 10)
+ (sage-hut 3)
)
-(flava-table-add 'jungle
- (39 1)
- (40 2)
- (41 3)
+(flava-table-add jungle
+ (jungle-temple-exit 1)
+ (jungle-lurkerm 2)
+ (jungle-temple-top 3)
)
-(flava-table-add 'firecanyon
- (1 1)
+(flava-table-add firecanyon
+ (racer 1)
)
-(flava-table-add 'jungleb
- (21 1)
+(flava-table-add jungleb
+ (jungleb-eggtop 1)
)
-(flava-table-add 'beach
- (7 4)
- (24 1)
- (25 2)
- (26 3)
+(flava-table-add beach
+ (birdlady 4)
+ (beach-sentinel 1)
+ (beach-cannon 2)
+ (beach-grotto 3)
)
-(flava-table-add 'misty
- (1 3)
- (22 2)
- (23 1)
+(flava-table-add misty
+ (racer 3)
+ (misty-boat 2)
+ (misty-battle 1)
)
-(flava-table-add 'village2
- (5 1)
- (6 2)
- (15 3)
- (16 4)
- (17 5)
- (36 6)
+(flava-table-add village2
+ (sage 1)
+ (assistant 2)
+ (warrior 3)
+ (geologist 4)
+ (gambler 5)
+ (levitator 6)
)
-(flava-table-add 'swamp
- (2 4)
- (37 2)
- (38 3)
+(flava-table-add swamp
+ (flutflut 4)
+ (swamp-launcher 2)
+ (swamp-battle 3)
)
-(flava-table-add 'rolling
- (42 1)
+(flava-table-add rolling
+ (rolling-gorge 1)
)
-(flava-table-add 'ogre
- (43 1)
- (44 2)
+(flava-table-add ogre
+ (ogre-middle 1)
+ (ogre-end 2)
)
-(flava-table-add 'village3
- (3 4)
- (4 5)
- (5 2)
- (6 3)
- (14 1)
+(flava-table-add village3
+ (to-maincave 4)
+ (to-snow 5)
+ (sage 2)
+ (assistant 3)
+ (miners 1)
)
-(flava-table-add 'maincave
- (28 1)
- (29 2)
- (30 3)
- (31 4)
+(flava-table-add maincave
+ (robocave 1)
+ (robocave-top 2)
+ (maincave 3)
+ (darkcave 4)
)
-(flava-table-add 'snow
- (2 2)
- (32 1)
- (33 3)
- (34 4)
- (35 5)
+(flava-table-add snow
+ (flutflut 2)
+ (snow-battle 1)
+ (snow-cave 3)
+ (snow-fort 4)
+ (snow-balls 5)
)
-(flava-table-add 'lavatube
- (45 2)
- (46 3)
- (49 1)
+(flava-table-add lavatube
+ (lavatube-middle 2)
+ (lavatube-end 3)
+ (default 1)
)
-(flava-table-add 'citadel
- (5 1)
- (6 2)
- (11 3)
- (12 4)
- (13 5)
- (27 6)
+(flava-table-add citadel
+ (sage 1)
+ (assistant 2)
+ (sage-yellow 3)
+ (sage-red 4)
+ (sage-blue 5)
+ (citadel-center 6)
)
-(flava-table-add 'finalboss
- (47 1)
- (48 2)
+(flava-table-add finalboss
+ (finalboss-middle 1)
+ (finalboss-end 2)
)
-(flava-table-add 'credits
- (49 2)
+(flava-table-add credits
+ (default 2)
)
diff --git a/goal_src/engine/target/sidekick.gc b/goal_src/engine/target/sidekick.gc
index c8313c9267..b41313c594 100644
--- a/goal_src/engine/target/sidekick.gc
+++ b/goal_src/engine/target/sidekick.gc
@@ -203,18 +203,17 @@
)
)
)
- (#unless TARGET_STARTUP_HACKS
- (let ((a0-26 (-> self skel effect)))
- (if a0-26
- (TODO-RENAME-9 a0-26)
- )
- )
- (if (logtest? (-> self skel status) 72)
- (merc-blend-shape self)
+ (let ((a0-26 (-> self skel effect)))
+ (if a0-26
+ (TODO-RENAME-9 a0-26)
)
- (if (logtest? (-> self skel status) 384)
- (merc-eye-anim self)
- ))
+ )
+ ; (if (logtest? (-> self skel status) 72)
+ ; (merc-blend-shape self)
+ ; )
+ ; (if (logtest? (-> self skel status) 384)
+ ; (merc-eye-anim self)
+ ; )
(none)
)
)
diff --git a/goal_src/engine/ui/progress/progress-part.gc b/goal_src/engine/ui/progress/progress-part.gc
index 8d8d12d953..72a9646e2f 100644
--- a/goal_src/engine/ui/progress/progress-part.gc
+++ b/goal_src/engine/ui/progress/progress-part.gc
@@ -180,13 +180,9 @@
(set! (-> arg2 vector 0 y) 0.0)
)
(else
- ;; NOTE: this code has been commented for now so we can run progress even when manipy isn't working yet.
- ;; if we don't have this stuff loaded right, just set the offset to 0.
- ;; this ends up being the right offset in all the cases except for things that
- ;; orbit the powercell. Those are just drawn underneath the powercell
- ; (vector<-cspace! s3-0 (-> s5-0 icons (logand s4-0 3) icon 0 node-list data v1-0))
- ; (vector<-cspace! s2-0 (-> s5-0 icons (logand s4-0 3) icon 0 node-list data 3))
- ; (vector-! s3-0 s3-0 s2-0)
+ (vector<-cspace! s3-0 (-> s5-0 icons (logand s4-0 3) icon 0 node-list data v1-0))
+ (vector<-cspace! s2-0 (-> s5-0 icons (logand s4-0 3) icon 0 node-list data 3))
+ (vector-! s3-0 s3-0 s2-0)
(set! (-> arg2 vector 0 x) (* 48.0 (-> s3-0 x)))
(set! (-> arg2 vector 0 y) (* 60.0 (-> s3-0 y)))
(set! (-> arg2 vector 0 z) (* 32.0 (-> s3-0 z)))
diff --git a/goal_src/engine/ui/progress/progress.gc b/goal_src/engine/ui/progress/progress.gc
index 62ad519a74..4e9ddf5192 100644
--- a/goal_src/engine/ui/progress/progress.gc
+++ b/goal_src/engine/ui/progress/progress.gc
@@ -364,7 +364,7 @@
:stack *scratch-memory-top*
)))
(when new-manipy
- ;;(set! (-> (-> new-manipy) draw dma-add-func) dma-add-process-drawable-hud) TODO
+ (set! (-> (-> new-manipy) draw dma-add-func) dma-add-process-drawable-hud)
(set-vector! (-> (-> new-manipy) root trans) 0.0 0.0 0.0 1.0)
(set-vector! (-> (-> new-manipy) root scale) ,scale-x ,scale-y ,scale-x 1.0)
(when #f
diff --git a/goal_src/engine/ui/text-h.gc b/goal_src/engine/ui/text-h.gc
index 18ebbdea65..e57b17cb0d 100644
--- a/goal_src/engine/ui/text-h.gc
+++ b/goal_src/engine/ui/text-h.gc
@@ -16,6 +16,7 @@
(zero 0)
(one 1)
(confirm #x103)
+ (press-to-talk #x104)
(press-to-use #x105)
(confirm-play #x106)
(play-again? #x107)
@@ -37,8 +38,12 @@
(spanish #x117)
(italian #x118)
(japanese #x119)
+ (press-to-trade-money #x11a)
+ (press-to-trade-money-oracle #x11b)
(press-to-warp #x11c)
(press-to-exit #x11d)
+ (press-to-talk-to-sage #x123)
+ (press-to-talk-to-assistant #x124)
(aspect-ratio #x125)
(video-mode #x126)
(game-options #x127)
diff --git a/goal_src/engine/util/types-h.gc b/goal_src/engine/util/types-h.gc
index fa02edbd54..a94b5b640b 100644
--- a/goal_src/engine/util/types-h.gc
+++ b/goal_src/engine/util/types-h.gc
@@ -119,8 +119,8 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; set to #t to get lots of prints during loading
-(defglobalconstant DEBUG_LOAD #t)
-(defglobalconstant DEBUG_TEX #t)
+(defglobalconstant DEBUG_LOAD #f)
+(defglobalconstant DEBUG_TEX #f)
(defmacro load-dbg (fmt-str &rest args)
(if DEBUG_LOAD
diff --git a/goal_src/game.gp b/goal_src/game.gp
index dfe228ee06..9630bc1668 100644
--- a/goal_src/game.gp
+++ b/goal_src/game.gp
@@ -393,7 +393,6 @@
"common/blocking-plane.gc"
"common/launcherdoor.gc"
- "common/snow-bunny.gc"
"common/battlecontroller.gc"
"racer_common/target-racer-h-FIC-LAV-MIS-OGR-ROL.gc"
@@ -624,7 +623,7 @@
;; assistant
(copy-strs "ASIBESWI" "ASR1BESW")
;; sage
-(copy-strs "SAISD1" "SAISD2" "SAISE" "SAR1ECOR" "SAIMCANN" "SAR1MCAN" "SAR1GENE" "SAR2GENE")
+(copy-strs "SAISA" "SAISD1" "SAISD2" "SAISE" "SAR1ECOR" "SAIMCANN" "SAR1MCAN" "SAR1GENE" "SAR2GENE")
;; fishermans-boat
(copy-strs "FIBRTMIS")
@@ -882,6 +881,7 @@
"snow-ram.gc"
"snow-part.gc"
"yeti.gc"
+ "snow-bunny.gc"
)
(copy-textures 710 842 711 712)
@@ -912,6 +912,8 @@
"snow-vis"
)
+;; ram-boss
+(copy-strs "SNRBICFC" "SNRBIPFC" "SNRBSBFC")
;;;;;;;;;;;;;;;;;;;;;
;; Fire Canyon
@@ -1323,7 +1325,7 @@
(goal-src-sequence
"levels/citadel/"
- :deps ("out/obj/battlecontroller.o")
+ :deps ("out/obj/battlecontroller.o" "out/obj/snow-bunny.o")
"citadel-part.gc"
"citadel-obs.gc"
@@ -1453,7 +1455,6 @@
"intro-vis"
)
-(copy-strs "SAISA")
;; evilbro
(copy-strs "EVMEND")
diff --git a/goal_src/goal-lib.gc b/goal_src/goal-lib.gc
index 18a25fe7a6..fd0780a1e5 100644
--- a/goal_src/goal-lib.gc
+++ b/goal_src/goal-lib.gc
@@ -608,6 +608,14 @@
`(set! ,result (sext32 (sar (logand #xffffffff (the-as int ,in)) ,sa)))
)
+(defmacro /-0-guard (a b)
+ `(let ((divisor ,b))
+ (if (zero? divisor)
+ 0
+ (/ ,a divisor))
+ )
+ )
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Bit Macros
;;;;;;;;;;;;;;;;;;;;;;;;;;;
diff --git a/goal_src/kernel/gcommon.gc b/goal_src/kernel/gcommon.gc
index 21e96a5086..4bc63263d7 100644
--- a/goal_src/kernel/gcommon.gc
+++ b/goal_src/kernel/gcommon.gc
@@ -608,7 +608,7 @@
)
)
-(defun sort ((lst object) (compare-func (function object object object)))
+(defun sort ((lst pair) (compare-func (function object object object)))
"Sort a list, using compare-func to compare elements.
The comparison function can return either an integer or a true/false.
For integers, use a positive number to represent first > second
@@ -1421,3 +1421,7 @@
(set! ,dest ,src)
)
)
+
+(defmacro empty-form ()
+ `(none)
+ )
diff --git a/goal_src/kernel/gstate.gc b/goal_src/kernel/gstate.gc
index 9a97e621f6..68adfe52f2 100644
--- a/goal_src/kernel/gstate.gc
+++ b/goal_src/kernel/gstate.gc
@@ -212,7 +212,7 @@ It type checks the arguments for the entry function.
;; This way it can check the individual function types, make sure they make sense, and create
;; a state with the appropriate type.
,(if virtual
- `(define-virtual-state-hook ,state-name ,defstate-type ,new-state :event ,event :enter ,enter :trans ,trans :exit ,exit :code ,code :post ,post)
+ `(define-virtual-state-hook ,state-name ,defstate-type ,new-state ,(eq? virtual 'override) :event ,event :enter ,enter :trans ,trans :exit ,exit :code ,code :post ,post)
`(define-state-hook ,state-name ,defstate-type ,new-state :event ,event :enter ,enter :trans ,trans :exit ,exit :code ,code :post ,post)
)
diff --git a/goal_src/kernel/gstring.gc b/goal_src/kernel/gstring.gc
index 77497873f8..5772ff38aa 100644
--- a/goal_src/kernel/gstring.gc
+++ b/goal_src/kernel/gstring.gc
@@ -722,3 +722,9 @@
)
)
+(#when PC_PORT
+(when *debug-segment*
+ ;; shared temporary string.
+ (define *debug-temp-string* (new 'debug 'string 4096 (the string #f)))
+ )
+)
diff --git a/goal_src/levels/beach/bird-lady-beach.gc b/goal_src/levels/beach/bird-lady-beach.gc
index 73506e4197..6f3200fa42 100644
--- a/goal_src/levels/beach/bird-lady-beach.gc
+++ b/goal_src/levels/beach/bird-lady-beach.gc
@@ -118,7 +118,7 @@
(defmethod init-from-entity! bird-lady-beach ((obj bird-lady-beach) (arg0 entity-actor))
(dummy-40 obj arg0 *bird-lady-beach-sg* 3 51 (new 'static 'vector :y 4096.0 :w 4096.0) 5)
(set! (-> obj tasks) (get-task-control (game-task beach-flutflut)))
- (set! (-> obj sound-flava) (the-as uint 7))
+ (set! (-> obj sound-flava) (music-flava birdlady))
(dummy-42 obj)
(none)
)
diff --git a/goal_src/levels/beach/bird-lady.gc b/goal_src/levels/beach/bird-lady.gc
index f736921bdd..b72a8ef89c 100644
--- a/goal_src/levels/beach/bird-lady.gc
+++ b/goal_src/levels/beach/bird-lady.gc
@@ -161,7 +161,7 @@
(defmethod init-from-entity! bird-lady ((obj bird-lady) (arg0 entity-actor))
(dummy-40 obj arg0 *bird-lady-sg* 3 51 (new 'static 'vector :y 4096.0 :w 4096.0) 5)
(set! (-> obj tasks) (get-task-control (game-task beach-flutflut)))
- (set! (-> obj sound-flava) (the-as uint 7))
+ (set! (-> obj sound-flava) (music-flava birdlady))
(set! (-> obj draw light-index) (the-as uint 4))
(if (closed? (-> obj tasks) (game-task beach-flutflut) (task-status need-reminder))
(dummy-18 obj)
diff --git a/goal_src/levels/beach/mayor.gc b/goal_src/levels/beach/mayor.gc
index 3814cceab1..00845dfdf7 100644
--- a/goal_src/levels/beach/mayor.gc
+++ b/goal_src/levels/beach/mayor.gc
@@ -71,7 +71,7 @@
)
(defmethod play-anim! mayor ((obj mayor) (arg0 symbol))
- (set! (-> obj talk-message) (the-as uint 260))
+ (set! (-> obj talk-message) (game-text-id press-to-talk))
(case (current-status (-> obj tasks))
(((task-status need-hint) (task-status need-introduction))
(when arg0
@@ -535,7 +535,7 @@
(send-event *target* 'get-pickup 5 (- (-> *GAME-bank* money-task-inc)))
)
(else
- (set! (-> obj talk-message) (the-as uint 282))
+ (set! (-> obj talk-message) (game-text-id press-to-trade-money))
)
)
(new 'static 'spool-anim
@@ -725,7 +725,7 @@
(dummy-40 obj arg0 *mayor-sg* 3 51 (new 'static 'vector :y 4096.0 :w 4096.0) 5)
(set! (-> obj bounce-away) #f)
(set! (-> obj tasks) (get-task-control (game-task jungle-lurkerm)))
- (set! (-> obj sound-flava) (the-as uint 8))
+ (set! (-> obj sound-flava) (music-flava mayor))
(set! (-> obj draw light-index) (the-as uint 2))
(dummy-42 obj)
(none)
diff --git a/goal_src/levels/beach/sculptor.gc b/goal_src/levels/beach/sculptor.gc
index 09702aebea..3820cba386 100644
--- a/goal_src/levels/beach/sculptor.gc
+++ b/goal_src/levels/beach/sculptor.gc
@@ -588,7 +588,7 @@
(dummy-40 obj arg0 *sculptor-sg* 3 40 (new 'static 'vector :w 4096.0) 5)
(set! (-> obj tasks) (get-task-control (game-task misty-muse)))
(set! (-> obj muse) (the-as handle #f))
- (set! (-> obj sound-flava) (the-as uint 9))
+ (set! (-> obj sound-flava) (music-flava sculptor))
(set! (-> obj draw light-index) (the-as uint 3))
(dummy-42 obj)
(none)
diff --git a/goal_src/levels/citadel/citadel-sages.gc b/goal_src/levels/citadel/citadel-sages.gc
index 0b8db7618d..c3ad2239b7 100644
--- a/goal_src/levels/citadel/citadel-sages.gc
+++ b/goal_src/levels/citadel/citadel-sages.gc
@@ -5,18 +5,9 @@
;; name in dgo: citadel-sages
;; dgos: CIT, L1
-(define-extern *citb-sagecage-sg* skeleton-group)
-
-(define-extern *green-sagecage-sg* skeleton-group)
(define-extern *robotboss-sg* skeleton-group)
-(define-extern *evilbro-citadel-sg* skeleton-group)
-(define-extern *evilsis-citadel-sg* skeleton-group)
-(define-extern *yellowsage-sg* skeleton-group)
-(define-extern *bluesage-sg* skeleton-group)
-(define-extern *redsage-sg* skeleton-group)
(declare-type citb-sage process-taskable)
-(declare-type robotboss process-drawable)
;; DECOMP BEGINS
@@ -55,19 +46,19 @@
(let ((gp-0 (-> self node-list data 3 bone transform))
(s5-0 (new 'stack-no-clear 'vector))
)
- (let ((s4-0 (new 'stack-no-clear 'vector)))
+ (let ((s4-0 (new 'stack-no-clear 'quaternion)))
(let ((s3-0 (new 'stack-no-clear 'vector)))
- (matrix->quaternion (the-as quaternion s4-0) gp-0)
+ (matrix->quaternion s4-0 gp-0)
(vector-! s3-0 (camera-pos) (-> self root-override trans))
(let ((v1-7 (-> gp-0 vector 2)))
(set! (-> self angle-offset) (- (atan (-> v1-7 x) (-> v1-7 z))))
)
- (quaternion-rotate-local-x! (the-as quaternion s4-0) (the-as quaternion s4-0) 16384.0)
+ (quaternion-rotate-local-x! s4-0 s4-0 16384.0)
(let ((f0-7 (+ (-> self angle-offset) (atan (-> s3-0 x) (-> s3-0 z)))))
- (quaternion-rotate-local-z! (the-as quaternion s4-0) (the-as quaternion s4-0) f0-7)
+ (quaternion-rotate-local-z! s4-0 s4-0 f0-7)
)
)
- (quaternion-copy! *particle-quat* (the-as quaternion s4-0))
+ (quaternion-copy! *particle-quat* s4-0)
)
(let ((s4-1 (-> *part-id-table* 2473))
(s3-1 *sp-particle-system-3d*)
@@ -491,8 +482,15 @@
)
:trans
(behavior ()
- (if (not (should-display? self))
- (go-virtual hidden)
+ (#if PC_PORT
+ ;; fix infinite state recursion
+ (if (and (not (and (-> self been-kicked) (-> *pc-settings* fixes crash-sagecage))) (not (should-display? self)))
+ (go-virtual hidden)
+ )
+ ;; no fix
+ (if (not (should-display? self))
+ (go-virtual hidden)
+ )
)
((-> (method-of-type process-taskable idle) trans))
(none)
@@ -616,7 +614,7 @@
(dummy-40 obj arg0 *redsage-sg* 3 33 (new 'static 'vector :w 8192.0) 5)
(set! (-> obj tasks) (get-task-control (-> obj entity extra perm task)))
(play-reminder obj)
- (set! (-> obj sound-flava) (the-as uint 12))
+ (set! (-> obj sound-flava) (music-flava sage-red))
(dummy-42 obj)
(none)
)
@@ -735,7 +733,7 @@
(dummy-40 obj arg0 *bluesage-sg* 3 54 (new 'static 'vector :w 8192.0) 5)
(set! (-> obj tasks) (get-task-control (-> obj entity extra perm task)))
(play-reminder obj)
- (set! (-> obj sound-flava) (the-as uint 13))
+ (set! (-> obj sound-flava) (music-flava sage-blue))
(dummy-42 obj)
(none)
)
@@ -849,7 +847,7 @@
(dummy-40 obj arg0 *yellowsage-sg* 3 50 (new 'static 'vector :w 8192.0) 5)
(set! (-> obj tasks) (get-task-control (-> obj entity extra perm task)))
(play-reminder obj)
- (set! (-> obj sound-flava) (the-as uint 11))
+ (set! (-> obj sound-flava) (music-flava sage-yellow))
(dummy-42 obj)
(none)
)
@@ -1107,7 +1105,7 @@
(when s5-1
(format 0 "robotboss activated ent ~A~%" gp-0)
(let ((f0-0 327680.0))
- (set! (-> (the-as robotboss s5-1) draw bounds w) f0-0)
+ (set! (-> (the-as process-drawable s5-1) draw bounds w) f0-0)
f0-0
)
)
@@ -1243,7 +1241,7 @@
0
)
)
- (set! (-> obj sound-flava) (the-as uint 5))
+ (set! (-> obj sound-flava) (music-flava sage))
(dummy-42 obj)
(none)
)
diff --git a/goal_src/levels/citadel/citb-bunny.gc b/goal_src/levels/citadel/citb-bunny.gc
index 28bcbac9ff..ba198734b4 100644
--- a/goal_src/levels/citadel/citb-bunny.gc
+++ b/goal_src/levels/citadel/citb-bunny.gc
@@ -81,14 +81,15 @@
)
)
-(defmethod dummy-60 citb-bunny ((obj citb-bunny) (arg0 object))
+(defmethod dummy-60 citb-bunny ((obj citb-bunny))
(initialize-skeleton obj *citb-bunny-sg* '())
(set! (-> obj draw origin-joint-index) (the-as uint 3))
- (the-as symbol 0)
+ 0
+ (none)
)
(defmethod TODO-RENAME-48 citb-bunny ((obj citb-bunny) (arg0 object))
- (dummy-60 obj arg0)
+ (dummy-60 obj)
(TODO-RENAME-45 obj *citb-bunny-nav-enemy-info*)
(set! (-> obj draw shadow-ctrl settings flags) (logand -9 (-> obj draw shadow-ctrl settings flags)))
(cond
@@ -101,7 +102,7 @@
(set! (-> obj retreat-timeout) 0.1)
)
)
- (set! (-> obj last-nondangerous-time) (the-as uint (-> *display* base-frame-counter)))
+ (set! (-> obj last-nondangerous-time) (-> *display* base-frame-counter))
(set! (-> obj gnd-popup) 16384.0)
(set! (-> obj got-jump-event?) #f)
(set! (-> obj notice-land-anim) 8)
@@ -122,29 +123,21 @@
((zero? v1-0)
(set! (-> obj jump-anim) 6)
(set! (-> obj jump-height-min) 4096.0)
- (let ((f0-1 0.6))
- (set! (-> obj jump-height-factor) f0-1)
- f0-1
- )
+ (set! (-> obj jump-height-factor) 0.6)
)
((= v1-0 1)
(set! (-> obj jump-anim) 5)
(set! (-> obj jump-height-min) 4096.0)
- (let ((f0-3 0.6))
- (set! (-> obj jump-height-factor) f0-3)
- f0-3
- )
+ (set! (-> obj jump-height-factor) 0.6)
)
((= v1-0 2)
(set! (-> obj jump-anim) 5)
(set! (-> obj jump-height-min) 4096.0)
- (let ((f0-5 0.4))
- (set! (-> obj jump-height-factor) f0-5)
- f0-5
- )
+ (set! (-> obj jump-height-factor) 0.4)
)
)
)
+ (none)
)
diff --git a/goal_src/levels/citadel/citb-drop-plat-CIT.gc b/goal_src/levels/citadel/citb-drop-plat-CIT.gc
index ec8648a165..e1d46ab0ef 100644
--- a/goal_src/levels/citadel/citb-drop-plat-CIT.gc
+++ b/goal_src/levels/citadel/citb-drop-plat-CIT.gc
@@ -5,9 +5,6 @@
;; name in dgo: citb-drop-plat
;; dgos: CIT
-(declare-type drop-plat process)
-(declare-type citb-drop-plat process)
-
;; DECOMP BEGINS
(defskelgroup *citb-drop-plat-sg* citb-drop-plat
@@ -418,27 +415,22 @@
(set! sv-64 (the int (* 150.0 (rand-vu))))
(set! sv-48 (get-process *default-dead-pool* drop-plat #x4000))
(set! (-> self child-array data s1-0)
- (ppointer->handle (when sv-48
- (let ((t9-6 (method-of-type drop-plat activate)))
- (t9-6 (the-as drop-plat sv-48) self 'drop-plat (the-as pointer #x70004000))
- )
- (let ((t9-7 run-function-in-process)
- (a0-8 sv-48)
- (a1-5 drop-plat-init-by-other)
- (a2-4 gp-0)
- (t0-0 (-> self duration))
- )
- ((the-as (function process function vector uint uint int) t9-7)
- a0-8
- a1-5
- a2-4
- (the-as uint sv-64)
- (the-as uint t0-0)
- )
- )
- (-> sv-48 ppointer)
- )
- )
+ (ppointer->handle
+ (when sv-48
+ (let ((t9-6 (method-of-type drop-plat activate)))
+ (t9-6 (the-as drop-plat sv-48) self 'drop-plat (the-as pointer #x70004000))
+ )
+ (let ((t9-7 run-function-in-process)
+ (a0-8 sv-48)
+ (a1-5 drop-plat-init-by-other)
+ (a2-4 gp-0)
+ (t0-0 (-> self duration))
+ )
+ ((the-as (function process function vector int int int none) t9-7) a0-8 a1-5 a2-4 sv-64 t0-0 s0-0)
+ )
+ (-> sv-48 ppointer)
+ )
+ )
)
)
)
diff --git a/goal_src/levels/common/nav-enemy-h.gc b/goal_src/levels/common/nav-enemy-h.gc
index 8fd2010263..641a13b411 100644
--- a/goal_src/levels/common/nav-enemy-h.gc
+++ b/goal_src/levels/common/nav-enemy-h.gc
@@ -80,7 +80,7 @@
(frustration-point vector :inline :offset-assert 208)
(jump-dest vector :inline :offset-assert 224)
(jump-trajectory trajectory :inline :offset-assert 240)
- (jump-time uint64 :offset-assert 280)
+ (jump-time int64 :offset-assert 280)
(nav-info nav-enemy-info :offset-assert 288)
(target-speed float :offset-assert 292)
(momentum-speed float :offset-assert 296)
@@ -136,31 +136,31 @@
(TODO-RENAME-48 (_type_) none 48)
(TODO-RENAME-49 (_type_ nav-enemy-info) float 49)
(TODO-RENAME-50 (_type_ vector) symbol 50)
- (dummy-51 (_type_) object 51)
+ (dummy-51 (_type_) none 51)
(dummy-52 (_type_ vector) symbol 52)
(dummy-53 (_type_) symbol 53)
- (dummy-54 (_type_) none 54)
- (dummy-55 (_type_) none 55)
- (set-jump-height-factor! (_type_ int) float 56)
- (dummy-57 (_type_) vector 57)
- (dummy-58 (_type_) vector 58)
+ (dummy-54 (_type_ vector) symbol 54)
+ (dummy-55 (_type_) symbol 55)
+ (set-jump-height-factor! (_type_ int) none 56)
+ (dummy-57 (_type_) none 57)
+ (dummy-58 (_type_) none 58)
(TODO-RENAME-59 (_type_) none 59)
- (dummy-60 (_type_ object) symbol 60)
- (dummy-61 (_type_) none 61)
- (dummy-62 (_type_) none 62)
- (dummy-63 (_type_) none 63)
- (dummy-64 (_type_) none 64)
- (dummy-65 (_type_) none 65)
- (dummy-66 (_type_) none 66)
- (dummy-67 (_type_) symbol 67)
- (dummy-68 (_type_) none 68)
- (dummy-69 (_type_) none 69)
- (dummy-70 (_type_) none 70)
- (dummy-71 () _type_ :state 71)
+ (dummy-60 (_type_ symbol) symbol 60)
+ (snow-bunny-attack () _type_ :state 61)
+ (snow-bunny-chase-hop () _type_ :state 62)
+ (snow-bunny-defend () _type_ :state 63)
+ (dummy-64 () _type_ :state 64)
+ (snow-bunny-lunge () _type_ :state 65)
+ (snow-bunny-nav-resume () _type_ :state 66)
+ (snow-bunny-patrol-hop () _type_ :state 67)
+ (snow-bunny-patrol-idle () _type_ :state 68)
+ (dummy-69 () _type_ :state 69)
+ (snow-bunny-retreat-hop () _type_ :state 70)
+ (snow-bunny-tune-spheres () _type_ :state 71)
(nav-enemy-touch-handler (_type_ process event-message-block) object 72)
(nav-enemy-attack-handler (_type_ process event-message-block) object 73)
(nav-enemy-jump-blocked () _type_ :state 74)
- (dummy-75 (_type_) none 75)
+ (dummy-75 () _type_ :state 75)
)
)
diff --git a/goal_src/levels/common/nav-enemy.gc b/goal_src/levels/common/nav-enemy.gc
index f65b58fd6b..0b1394b187 100644
--- a/goal_src/levels/common/nav-enemy.gc
+++ b/goal_src/levels/common/nav-enemy.gc
@@ -83,7 +83,7 @@
(set-collide-offense (-> obj collide-info) 2 (collide-offense touch))
(set! (-> obj nav-enemy-flags) (logand -257 (-> obj nav-enemy-flags)))
)
- (#unless TARGET_STARTUP_HACKS (dummy-14 (-> obj draw shadow-ctrl)))
+ (dummy-14 (-> obj draw shadow-ctrl))
(when *target*
(if *target*
(look-at-enemy!
@@ -727,8 +727,7 @@ nav-enemy-default-event-handler
(and (>= (+ (-> *ACTOR-bank* pause-dist) (-> obj collide-info pause-adjust-distance))
(vector-vector-distance (-> obj collide-info trans) (camera-pos))
)
- (or (#if TARGET_STARTUP_HACKS #t (logtest? (-> self draw status) (draw-status drwf03)))
- (!= (-> obj next-state name) 'nav-enemy-idle))
+ (or (logtest? (-> obj draw status) (draw-status drwf03)) (!= (-> obj next-state name) 'nav-enemy-idle))
)
)
(and (nonzero? (-> obj skel)) (!= (-> obj skel root-channel 0) (-> obj skel channel)))
@@ -769,7 +768,7 @@ nav-enemy-default-event-handler
)
(>= (- (-> *display* base-frame-counter) (-> self state-time)) (-> self state-timeout))
(nonzero? (-> self draw))
- (#if TARGET_STARTUP_HACKS #t (logtest? (-> self draw status) (draw-status drwf03)))
+ (logtest? (-> self draw status) (draw-status drwf03))
)
(go-virtual nav-enemy-patrol)
)
@@ -833,8 +832,7 @@ nav-enemy-default-event-handler
(behavior ()
(when (>= (- (-> *display* base-frame-counter) (-> self state-time)) 30)
(when (>= (- (-> *display* base-frame-counter) (-> self state-time)) (-> self state-timeout))
- (if (and (nonzero? (-> self draw))
- (#if TARGET_STARTUP_HACKS #t (logtest? (-> self draw status) (draw-status drwf03))))
+ (if (and (nonzero? (-> self draw)) (logtest? (-> self draw status) (draw-status drwf03)))
(set! (-> self free-time) (-> *display* base-frame-counter))
)
(if (or (or (not *target*) (< (-> self enemy-info idle-distance)
@@ -1611,7 +1609,7 @@ nav-enemy-default-event-handler
)
)
(when (logtest? (-> self nav-enemy-flags) 8)
- (let ((f30-0 (the float (- (-> *display* base-frame-counter) (the-as int (-> self jump-time))))))
+ (let ((f30-0 (the float (- (-> *display* base-frame-counter) (-> self jump-time)))))
(let ((v1-12 (eval-position! (-> self jump-trajectory) f30-0 (new 'stack-no-clear 'vector))))
(set! (-> self collide-info trans quad) (-> v1-12 quad))
)
@@ -1698,7 +1696,7 @@ nav-enemy-default-event-handler
)
)
(set! (-> self collide-info status) (logand -8 (-> self collide-info status)))
- (set! (-> self jump-time) (the-as uint (-> *display* base-frame-counter)))
+ (set! (-> self jump-time) (-> *display* base-frame-counter))
(logior! (-> self nav-enemy-flags) 8)
(cond
((logtest? (-> self nav-enemy-flags) 1024)
@@ -1742,9 +1740,7 @@ nav-enemy-default-event-handler
)
)
)
- (while (< (the float (- (-> *display* base-frame-counter) (the-as int (-> self jump-time))))
- (-> self jump-trajectory time)
- )
+ (while (< (the float (- (-> *display* base-frame-counter) (-> self jump-time))) (-> self jump-trajectory time))
(suspend)
(let ((a0-36 (-> self skel root-channel 0)))
(set! (-> a0-36 param 0) (the float (+ (-> a0-36 frame-group data 0 length) -1)))
diff --git a/goal_src/levels/common/plat-eco.gc b/goal_src/levels/common/plat-eco.gc
index 52fec9cbc3..619ac58b56 100644
--- a/goal_src/levels/common/plat-eco.gc
+++ b/goal_src/levels/common/plat-eco.gc
@@ -5,7 +5,8 @@
;; name in dgo: plat-eco
;; dgos: GAME, COMMON, L1
-;; TODO - for citb-plat
+;; DECOMP BEGINS
+
(deftype plat-eco (plat)
((notice-dist float :offset-assert 264)
(sync-offset-dest float :offset-assert 268)
@@ -15,8 +16,332 @@
(unlit-look lod-set :inline :offset-assert 288)
(lit-look lod-set :inline :offset-assert 324)
)
+ :heap-base #x100
:method-count-assert 33
:size-assert #x165
- :heap-base #x100
:flag-assert #x2101000165
+ (:methods
+ (notice-blue (handle) _type_ :replace :state 29)
+ )
)
+
+
+(defskelgroup *plat-eco-unlit-sg* plat-eco
+ 0
+ 8
+ ((1 (meters 20)) (2 (meters 40)) (3 (meters 999999)))
+ :bounds (static-spherem 0 0 0 3)
+ :longest-edge (meters 0)
+ )
+
+(defskelgroup *plat-eco-lit-sg* plat-eco
+ 0
+ 8
+ ((5 (meters 20)) (6 (meters 40)) (7 (meters 999999)))
+ :bounds (static-spherem 0 0 0 3)
+ :longest-edge (meters 0)
+ )
+
+(defstate plat-idle (plat-eco)
+ :virtual #t
+ :event
+ (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block))
+ (case arg2
+ (('wake)
+ (go-virtual plat-path-active (the-as plat #f))
+ )
+ (('eco-blue)
+ (go-virtual notice-blue (process->handle arg0))
+ )
+ (('ridden 'edge-grabbed)
+ (let ((a1-6 (new 'stack-no-clear 'event-message-block)))
+ (set! (-> a1-6 from) self)
+ (set! (-> a1-6 num-params) 2)
+ (set! (-> a1-6 message) 'query)
+ (set! (-> a1-6 param 0) (the-as uint 'powerup))
+ (set! (-> a1-6 param 1) (the-as uint 3))
+ (when (send-event-function *target* a1-6)
+ (send-to-all (-> self link) 'wake)
+ (go-virtual plat-path-active (the-as plat #f))
+ )
+ )
+ )
+ )
+ )
+ :enter
+ (behavior ()
+ (lods-assign! (-> self draw) (-> self unlit-look))
+ (none)
+ )
+ :trans
+ (behavior ()
+ (when (and (and *target*
+ (>= (-> self notice-dist) (vector-vector-distance (-> self root-override trans) (-> *target* control trans)))
+ )
+ (send-event *target* 'query 'powerup 3)
+ )
+ (send-to-all (-> self link) 'wake)
+ (go-virtual plat-path-active (the-as plat #f))
+ )
+ (if (and *target*
+ (>= (-> self notice-dist) (vector-vector-distance (-> self root-override trans) (-> *target* control trans)))
+ )
+ (level-hint-spawn
+ (game-text-id daxter-blue-eco-plat-tutorial)
+ "sksp0073"
+ (the-as entity #f)
+ *entity-pool*
+ (game-task none)
+ )
+ )
+ (none)
+ )
+ :code
+ (behavior ()
+ (ja-post)
+ (update-transforms! (-> self root-override))
+ (anim-loop)
+ (none)
+ )
+ :post
+ (the-as (function none :behavior plat-eco) ja-post)
+ )
+
+(defstate notice-blue (plat-eco)
+ :virtual override
+ :event
+ (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block))
+ (case arg2
+ (('wake)
+ (sound-play-by-name
+ (static-sound-name "blue-eco-on")
+ (new-sound-id)
+ 1024
+ 0
+ 0
+ 1
+ (the-as symbol (-> self root-override trans))
+ )
+ (go-virtual plat-path-active (the-as plat #f))
+ )
+ (('ridden 'edge-grabbed)
+ (let ((a1-3 (new 'stack-no-clear 'event-message-block)))
+ (set! (-> a1-3 from) self)
+ (set! (-> a1-3 num-params) 2)
+ (set! (-> a1-3 message) 'query)
+ (set! (-> a1-3 param 0) (the-as uint 'powerup))
+ (set! (-> a1-3 param 1) (the-as uint 3))
+ (when (send-event-function *target* a1-3)
+ (send-to-all (-> self link) 'wake)
+ (go-virtual plat-path-active (the-as plat #f))
+ )
+ )
+ )
+ )
+ )
+ :trans
+ (behavior ()
+ ((-> (method-of-object self plat-idle) trans))
+ (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) 'query)
+ (set! (-> a1-0 param 0) (the-as uint 'powerup))
+ (set! (-> a1-0 param 1) (the-as uint 3))
+ (if (and (not (send-event-function *target* a1-0))
+ (begin (logior! (-> self mask) (process-mask sleep-code)) (not (-> self bouncing)))
+ )
+ (go-virtual plat-idle)
+ )
+ )
+ (none)
+ )
+ :code
+ (behavior ((arg0 handle))
+ (set! (-> self target) arg0)
+ (while #t
+ (let* ((gp-0 (handle->process (-> self target)))
+ (v1-4 (if (and (nonzero? gp-0) (type-type? (-> gp-0 type) process-drawable))
+ gp-0
+ )
+ )
+ )
+ (when v1-4
+ (let* ((gp-1 (-> (the-as process-drawable v1-4) root))
+ (v1-6 (if (and (nonzero? gp-1) (type-type? (-> gp-1 type) collide-shape))
+ gp-1
+ )
+ )
+ )
+ (when v1-6
+ (let* ((s5-0 (-> self root-override root-prim prim-core))
+ (a1-3 (-> (the-as collide-shape v1-6) root-prim prim-core))
+ (f30-0 (vector-vector-distance (the-as vector s5-0) (the-as vector a1-3)))
+ )
+ (when (rand-vu-percent? 0.5)
+ (let ((gp-2 (new 'stack-no-clear 'vector)))
+ (set! (-> gp-2 quad) (-> s5-0 world-sphere quad))
+ (dotimes (s5-1 3)
+ (+! (-> gp-2 data s5-1) (rand-vu-float-range -5324.8 5324.8))
+ )
+ (eco-blue-glow gp-2)
+ )
+ )
+ (set! (-> self bouncing) #t)
+ (activate!
+ (-> self smush)
+ (lerp-scale
+ (rand-vu-float-range 1.1 1.3)
+ (rand-vu-float-range 1.0 1.02)
+ f30-0
+ (-> *FACT-bank* suck-suck-dist)
+ (-> *FACT-bank* suck-bounce-dist)
+ )
+ 60
+ 60
+ 1.0
+ 1.0
+ )
+ )
+ )
+ )
+ )
+ )
+ (suspend)
+ )
+ (none)
+ )
+ :post
+ (behavior ()
+ (plat-trans)
+ (plat-post)
+ (none)
+ )
+ )
+
+(defstate plat-path-active (plat-eco)
+ :virtual #t
+ :enter
+ (behavior ((arg0 plat))
+ (lods-assign! (-> self draw) (-> self lit-look))
+ (sync-now! (-> self sync) (-> self sync-linear-val))
+ (set! (-> self sync-offset-faux) (-> self sync offset))
+ (let* ((f0-3 (the float (-> self sync period)))
+ (f1-1 (* 0.5 f0-3))
+ )
+ (if (< f1-1 (- (-> self sync-offset-dest) (-> self sync-offset-faux)))
+ (+! (-> self sync-offset-faux) f0-3)
+ )
+ (if (< f1-1 (- (-> self sync-offset-faux) (-> self sync-offset-dest)))
+ (set! (-> self sync-offset-faux) (- (-> self sync-offset-faux) f0-3))
+ )
+ )
+ (cond
+ (arg0
+ (let ((f0-5 (-> self sync-offset-dest)))
+ (set! (-> self sync offset) f0-5)
+ (set! (-> self sync-offset-faux) f0-5)
+ )
+ )
+ (else
+ (process-entity-status! self (entity-perm-status complete) #t)
+ (dotimes (gp-1 5)
+ (spawn-projectile-blue *target*)
+ )
+ )
+ )
+ (none)
+ )
+ :trans
+ (behavior ()
+ (when (!= (-> self sync-offset-faux) (-> self sync-offset-dest))
+ (set! (-> self sync-offset-faux)
+ (seek (-> self sync-offset-faux) (-> self sync-offset-dest) (* 12.0 (-> *display* seconds-per-frame)))
+ )
+ (let* ((f0-7 (the float (-> self sync period)))
+ (f1-3 (+ (-> self sync-offset-faux) f0-7))
+ )
+ (set! (-> self sync offset) (- f1-3 (* (the float (the int (/ f1-3 f0-7))) f0-7)))
+ )
+ )
+ ((-> (method-of-type plat plat-path-active) trans))
+ (none)
+ )
+ )
+
+(defmethod dummy-24 plat-eco ((obj plat-eco))
+ (let ((s5-0 (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player))))
+ (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process))
+ (set! (-> s5-0 reaction) default-collision-reaction)
+ (set! (-> s5-0 no-reaction)
+ (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing)
+ )
+ (alloc-riders s5-0 1)
+ (let ((s4-0 (new 'process 'collide-shape-prim-mesh s5-0 (the-as uint 0) (the-as uint 0))))
+ (set! (-> s4-0 prim-core collide-as) (collide-kind ground-object blue-eco-suck))
+ (set! (-> s4-0 collide-with) (collide-kind target))
+ (set! (-> s4-0 prim-core action) (collide-action solid ca-1))
+ (set! (-> s4-0 prim-core offense) (collide-offense indestructible))
+ (set! (-> s4-0 transform-index) 0)
+ (set-vector! (-> s4-0 local-sphere) 0.0 -1228.8 0.0 13926.4)
+ (set-root-prim! s5-0 s4-0)
+ )
+ (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w)))
+ (backup-collide-with-as s5-0)
+ (set! (-> obj root-override) s5-0)
+ )
+ 0
+ (none)
+ )
+
+(defmethod get-unlit-skel plat-eco ((obj plat-eco))
+ *plat-eco-unlit-sg*
+ )
+
+(defmethod get-lit-skel plat-eco ((obj plat-eco))
+ *plat-eco-lit-sg*
+ )
+
+(defmethod init-from-entity! plat-eco ((obj plat-eco) (arg0 entity-actor))
+ (set! (-> obj mask) (logior (process-mask platform) (-> obj mask)))
+ (set! (-> obj notice-dist) (res-lump-float arg0 'notice-dist :default -1.0))
+ (set! (-> obj link) (new 'process 'actor-link-info obj))
+ (dummy-24 obj)
+ (process-drawable-from-entity! obj arg0)
+ (let ((s4-0 (get-unlit-skel obj))
+ (s5-1 (get-lit-skel obj))
+ )
+ (initialize-skeleton obj s4-0 '())
+ (dummy-9 (-> obj unlit-look) s4-0 (-> obj draw art-group) (-> obj entity))
+ (dummy-9 (-> obj lit-look) s5-1 (-> obj draw art-group) (-> obj entity))
+ )
+ (logclear! (-> obj mask) (process-mask actor-pause))
+ (update-transforms! (-> obj root-override))
+ (set! (-> obj part) (create-launch-control (-> *part-group-id-table* 107) obj))
+ (set! (-> obj path) (new 'process 'curve-control obj 'path -1000000000.0))
+ (logior! (-> obj path flags) (path-control-flag display draw-line draw-point draw-text))
+ (set! (-> obj fact)
+ (new 'process 'fact-info obj (pickup-type eco-pill-random) (-> *FACT-bank* default-pill-inc))
+ )
+ (load-params! (-> obj sync) obj (the-as uint 3000) 0.0 0.15 0.15)
+ (set! (-> obj sync-offset-dest) (-> obj sync offset))
+ (set! (-> obj sync-linear-val) (get-phase-offset (-> obj sync)))
+ (sync-now! (-> obj sync) (-> obj sync-linear-val))
+ (set! (-> obj sync-offset-faux) (-> obj sync offset))
+ (set! (-> obj path-pos) (get-current-phase-with-mirror (-> obj sync)))
+ (eval-path-curve! (-> obj path) (-> obj root-override trans) (-> obj path-pos) 'interp)
+ (set! (-> obj sound-id) (new-sound-id))
+ (dummy-26 obj)
+ (dummy-21 obj)
+ (if (or (and (-> obj entity) (logtest? (-> obj entity extra perm status) (entity-perm-status complete)))
+ (< (-> obj notice-dist) 0.0)
+ )
+ (go (method-of-object obj plat-path-active) (the-as plat #t))
+ (go (method-of-object obj plat-idle))
+ )
+ (none)
+ )
+
+
+
+
diff --git a/goal_src/levels/common/snow-bunny.gc b/goal_src/levels/common/snow-bunny.gc
deleted file mode 100644
index e3ef99ee2a..0000000000
--- a/goal_src/levels/common/snow-bunny.gc
+++ /dev/null
@@ -1,37 +0,0 @@
-;;-*-Lisp-*-
-(in-package goal)
-
-;; name: snow-bunny.gc
-;; name in dgo: snow-bunny
-;; dgos: CIT, L1, SNO
-
-(deftype snow-bunny (nav-enemy)
- ((patrol-rand-distraction int32 :offset-assert 400)
- (base-hop-dist float :offset-assert 404)
- (halfway-dist float :offset-assert 408)
- (retreat-timeout float :offset-assert 412)
- (gnd-popup float :offset-assert 416)
- (jump-height-min float :offset-assert 420)
- (jump-height-factor float :offset-assert 424)
- (jump-anim-start-frame float :offset-assert 428)
- (defense uint64 :offset-assert 432)
- (retreat-timeout-time uint64 :offset-assert 440)
- (last-nondangerous-time uint64 :offset-assert 448)
- (patrol-hop-failed? basic :offset-assert 456)
- (should-retreat? basic :offset-assert 460)
- (got-jump-event? basic :offset-assert 464)
- (using-jump-event? basic :offset-assert 468)
- (jump-anim int8 :offset-assert 472)
- (notice-land-anim int8 :offset-assert 473)
- (attack-anim int8 :offset-assert 474)
- (final-dest vector :inline :offset-assert 480)
- (jump-event-dest vector :inline :offset-assert 496)
- )
- :method-count-assert 77
- :size-assert #x200
- :heap-base #x190
- :flag-assert #x4d01900200
- (:methods
- (dummy-76 () none 76))
- )
-
diff --git a/goal_src/levels/common/ticky.gc b/goal_src/levels/common/ticky.gc
index d645f3c2d7..5d6742868a 100644
--- a/goal_src/levels/common/ticky.gc
+++ b/goal_src/levels/common/ticky.gc
@@ -5,7 +5,8 @@
;; name in dgo: ticky
;; dgos: GAME, COMMON, L1
-;; definition of type ticky
+;; DECOMP BEGINS
+
(deftype ticky (structure)
((delay-til-ramp int64 :offset-assert 0)
(delay-til-timeout int64 :offset-assert 8)
@@ -16,71 +17,53 @@
:size-assert #x20
:flag-assert #xc00000020
(:methods
- (sleep (_type_ uint) none 9)
- (reached-delay? (_type_ uint) symbol 10)
+ (sleep (_type_ int) none 9)
+ (reached-delay? (_type_ int) symbol 10)
(completed? (_type_) symbol 11)
)
)
-;; definition for method 9 of type ticky
-;; INFO: Return type mismatch int vs none.
-(defmethod sleep ticky ((obj ticky) (arg0 uint))
+
+
+(defmethod sleep ticky ((obj ticky) (arg0 int))
(set! (-> obj starting-time) (-> *display* base-frame-counter))
- (set! (-> obj delay-til-timeout) (the-as int arg0))
- (set!
- (-> obj delay-til-ramp)
- (the-as int (max 0 (the-as int (+ arg0 -1200))))
- )
+ (set! (-> obj delay-til-timeout) arg0)
+ (set! (-> obj delay-til-ramp) (max 0 (+ arg0 -1200)))
(set! (-> obj last-tick-time) 0)
0
(none)
)
-;; definition for method 11 of type ticky
(defmethod completed? ticky ((obj ticky))
(let ((gp-0 #f))
- (let ((v1-2 (- (-> *display* base-frame-counter) (-> obj starting-time))))
- (cond
- ((>= v1-2 (-> obj delay-til-timeout))
- (set! gp-0 #t)
- )
- (else
- (let*
- ((f0-1
- (fmin
- 1.0
- (/
- (the float (max 0 (- v1-2 (-> obj delay-til-ramp))))
- (the float (- (-> obj delay-til-timeout) (-> obj delay-til-ramp)))
- )
+ (let ((v1-2 (- (-> *display* base-frame-counter) (-> obj starting-time))))
+ (cond
+ ((>= v1-2 (-> obj delay-til-timeout))
+ (set! gp-0 #t)
+ )
+ (else
+ (let* ((f0-1 (fmin 1.0 (/ (the float (max 0 (- v1-2 (-> obj delay-til-ramp))))
+ (the float (- (-> obj delay-til-timeout) (-> obj delay-til-ramp)))
+ )
+ )
+ )
+ (v1-7 (the int (lerp 105.0 41.0 f0-1)))
+ )
+ (when (>= (- (-> *display* base-frame-counter) (-> obj last-tick-time)) v1-7)
+ (set! (-> obj last-tick-time) (-> *display* base-frame-counter))
+ (sound-play-by-name (static-sound-name "stopwatch") (new-sound-id) 1024 0 0 1 #t)
+ )
+ )
)
- )
- (v1-7 (the int (lerp 105.0 41.0 f0-1)))
)
- (when
- (>= (- (-> *display* base-frame-counter) (-> obj last-tick-time)) v1-7)
- (set! (-> obj last-tick-time) (-> *display* base-frame-counter))
- (sound-play-by-name
- (static-sound-name "stopwatch")
- (new-sound-id)
- 1024
- 0
- 0
- 1
- #t
- )
- )
- )
)
- )
+ gp-0
)
- gp-0
- )
)
-;; definition for method 10 of type ticky
-(defmethod reached-delay? ticky ((obj ticky) (arg0 uint))
- (>=
- (- (-> *display* base-frame-counter) (-> obj starting-time))
- (the-as int arg0)
- )
+(defmethod reached-delay? ticky ((obj ticky) (arg0 int))
+ (>= (- (-> *display* base-frame-counter) (-> obj starting-time)) arg0)
)
+
+
+
+
diff --git a/goal_src/levels/darkcave/darkcave-obs.gc b/goal_src/levels/darkcave/darkcave-obs.gc
index a0713ebefb..931dc892dc 100644
--- a/goal_src/levels/darkcave/darkcave-obs.gc
+++ b/goal_src/levels/darkcave/darkcave-obs.gc
@@ -16,11 +16,11 @@
(glow-u float :offset-assert 184)
(glow-wf-period int32 :offset-assert 188)
(glow-wf-offset int32 :offset-assert 192)
- (prev-compute-glow-time uint64 :offset-assert 200)
- (start-fade-time uint64 :offset-assert 208)
- (end-fade-time uint64 :offset-assert 216)
- (activated-time uint64 :offset-assert 224)
- (last-updated-user-lighting uint64 :offset-assert 232)
+ (prev-compute-glow-time int64 :offset-assert 200)
+ (start-fade-time int64 :offset-assert 208)
+ (end-fade-time int64 :offset-assert 216)
+ (activated-time int64 :offset-assert 224)
+ (last-updated-user-lighting int64 :offset-assert 232)
(player-attack-id uint64 :offset-assert 240)
(on-color-mult vector :inline :offset-assert 256)
(on-color-emissive vector :inline :offset-assert 272)
@@ -54,7 +54,7 @@
(when (-> obj is-master?)
(let ((v1-2 (-> *display* base-frame-counter)))
(when (!= (-> obj last-updated-user-lighting) v1-2)
- (set! (-> obj last-updated-user-lighting) (the-as uint v1-2))
+ (set! (-> obj last-updated-user-lighting) v1-2)
(execute-connections *cavecrystal-light-control*)
)
)
@@ -63,8 +63,8 @@
)
(defmethod compute-glow cavecrystal ((obj cavecrystal))
- (set! (-> obj prev-compute-glow-time) (the-as uint (-> *display* game-frame-counter)))
- (let* ((gp-1 (max 1 (the-as int (+ (- 1 (the-as int (-> obj activated-time))) (-> *display* game-frame-counter)))))
+ (set! (-> obj prev-compute-glow-time) (-> *display* game-frame-counter))
+ (let* ((gp-1 (max 1 (+ (- 1 (-> obj activated-time)) (-> *display* game-frame-counter))))
(f0-2
(/ (the float (mod (+ (-> *display* base-frame-counter) (-> obj glow-wf-offset)) (-> obj glow-wf-period)))
(the float (-> obj glow-wf-period))
@@ -73,17 +73,17 @@
(f30-1 (* 0.1 (cos (* 65536.0 f0-2))))
)
(cond
- ((>= 20 (the-as int gp-1))
+ ((>= 20 gp-1)
(let ((v1-11 (* 0.05 (the float gp-1))))
(fmax 0.0 (fmin 2.0 (+ (* 2.0 v1-11) (* v1-11 f30-1))))
)
)
- ((>= 180 (the-as int gp-1))
+ ((>= 180 gp-1)
(let ((a2-0 (* 0.00625 (the float (+ gp-1 -20)))))
(fmin 2.0 (+ (lerp 2.0 1.0 a2-0) f30-1))
)
)
- ((>= (the-as int (-> obj start-fade-time)) (the-as int gp-1))
+ ((>= (-> obj start-fade-time) gp-1)
(+ 1.0 f30-1)
)
(else
@@ -136,7 +136,7 @@
(cond
((!= v1-1 (-> self player-attack-id))
(set! (-> self player-attack-id) v1-1)
- (set! (-> self activated-time) (the-as uint (-> *display* game-frame-counter)))
+ (set! (-> self activated-time) (-> *display* game-frame-counter))
#t
)
(else
@@ -151,8 +151,8 @@
:enter
(behavior ()
(logclear! (-> self mask) (process-mask actor-pause))
- (set! (-> self activated-time) (the-as uint (-> *display* game-frame-counter)))
- (set! (-> self prev-compute-glow-time) (the-as uint (-> *display* game-frame-counter)))
+ (set! (-> self activated-time) (-> *display* game-frame-counter))
+ (set! (-> self prev-compute-glow-time) (-> *display* game-frame-counter))
(none)
)
:exit
@@ -223,7 +223,7 @@
(defmethod init-from-entity! cavecrystal ((obj cavecrystal) (arg0 entity-actor))
(set! (-> obj glow-u) 0.0)
(set! (-> obj player-attack-id) (the-as uint 0))
- (set! (-> obj last-updated-user-lighting) (the-as uint 0))
+ (set! (-> obj last-updated-user-lighting) 0)
(set-vector! (-> obj off-color-mult) 0.0 0.0 0.0 1.0)
(set-vector! (-> obj off-color-emissive) 0.0 0.0 0.0 0.0)
(set-vector! (-> obj on-color-mult) 1.0 1.0 1.0 1.0)
@@ -250,9 +250,7 @@
(if (-> obj is-master?)
(logclear! (-> obj mask) (process-mask actor-pause))
)
- (set! (-> obj start-fade-time)
- (the-as uint (the int (* 300.0 (res-lump-float (-> obj entity) 'timeout :default 8.0))))
- )
+ (set! (-> obj start-fade-time) (the int (* 300.0 (res-lump-float (-> obj entity) 'timeout :default 8.0))))
(process-drawable-from-entity! obj arg0)
(initialize-skeleton obj *cavecrystal-sg* '())
(nav-mesh-connect obj (-> obj root-override) (the-as nav-control #f))
diff --git a/goal_src/levels/finalboss/green-eco-lurker.gc b/goal_src/levels/finalboss/green-eco-lurker.gc
index b999aa6ff0..b6b3f5f4a2 100644
--- a/goal_src/levels/finalboss/green-eco-lurker.gc
+++ b/goal_src/levels/finalboss/green-eco-lurker.gc
@@ -475,9 +475,9 @@
(set! (-> self state-time) (-> *display* base-frame-counter))
(set! (-> self played-sound?) #f)
(set! (-> self sound-delay) (nav-enemy-rnd-int-range 30 150))
- (let ((f0-1 (- (-> self appear-dest x) (-> (the-as robotboss (-> self parent 0)) root-override trans x))))
+ (let ((f0-1 (- (-> self appear-dest x) (-> (the-as green-eco-lurker-gen (-> self parent 0)) root trans x))))
(set! (-> self collide-info trans x)
- (+ (-> (the-as robotboss (-> self parent 0)) root-override trans x) (fmax -32768.0 (fmin 32768.0 f0-1)))
+ (+ (-> (the-as green-eco-lurker-gen (-> self parent 0)) root trans x) (fmax -32768.0 (fmin 32768.0 f0-1)))
)
)
(logior! (-> self collide-info nav-flags) 2)
diff --git a/goal_src/levels/jungle/fisher-JUN.gc b/goal_src/levels/jungle/fisher-JUN.gc
index 2ff0f77362..026c51e06f 100644
--- a/goal_src/levels/jungle/fisher-JUN.gc
+++ b/goal_src/levels/jungle/fisher-JUN.gc
@@ -1171,7 +1171,7 @@
(case (current-status (-> obj tasks))
(((task-status need-hint) (task-status need-introduction))
(when arg0
- (set! (-> obj blend-on-exit) #t)
+ (set! (-> obj blend-on-exit) (the-as art-joint-anim #t))
(close-status! (-> obj tasks) (task-status need-introduction))
(set! (-> obj training) #t)
)
@@ -1213,7 +1213,7 @@
)
(((task-status need-reminder-a) (task-status need-reminder))
(set! (-> obj skippable) #t)
- (set! (-> obj blend-on-exit) #t)
+ (set! (-> obj blend-on-exit) (the-as art-joint-anim #t))
(new 'static 'spool-anim :name "fisher-reminder-1" :index 10 :parts 1 :command-list '())
)
(((task-status need-reward-speech))
@@ -2255,14 +2255,10 @@
(send-event
(ppointer->process (-> self manipy))
'eval
- (lambda :behavior target
+ (lambda :behavior manipy
()
- (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))
- )
+ (set! (-> self joint 0) (new 'process 'joint-mod (joint-mod-handler-mode joint-set*) self 6))
+ (set! (-> self joint 1) (new 'process 'joint-mod (joint-mod-handler-mode joint-set*) self 5))
(none)
)
)
@@ -2302,22 +2298,17 @@
(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))
+ (let ((s2-0 (new-stack-vector0))
+ (s4-0 (new-stack-vector0))
(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)
- (initialize-skeleton (-> self manipy 0 joint 0) (the-as skeleton-group s4-0) (the-as pair s3-0))
+ (set-trs! (-> self manipy 0 joint 0) s4-0 s3-0 s2-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 initialize-skeleton))
- (a2-7 #f)
- )
- (t9-16 a0-34 (the-as skeleton-group s4-0) (the-as pair a2-7))
- )
+ (set-trs! (-> self manipy 0 joint 1) s4-0 (the-as quaternion #f) (the-as vector #f))
(set! (-> s5-2 y) (-> s5-2 x))
(set! (-> s5-2 x) f30-0)
)
diff --git a/goal_src/levels/jungle/jungle-mirrors.gc b/goal_src/levels/jungle/jungle-mirrors.gc
index 5b3f461601..9a8706a655 100644
--- a/goal_src/levels/jungle/jungle-mirrors.gc
+++ b/goal_src/levels/jungle/jungle-mirrors.gc
@@ -972,31 +972,24 @@
(cond
(gp-0
(set! (-> self next-reflector-trans quad) (-> gp-0 extra trans quad))
- (let ((f0-3 (+ (-> self next-reflector-trans y) (res-lump-float gp-0 'height-info))))
- (set! (-> self next-reflector-trans y) f0-3)
- f0-3
- )
+ (+! (-> self next-reflector-trans y) (res-lump-float gp-0 'height-info))
)
(else
- (let ((v1-9 (res-lump-struct (-> self entity) 'alt-vector structure))
- (v0-2 (the-as object (-> self next-reflector-trans)))
- )
- (set! (-> (the-as vector v0-2) quad) (-> (the-as vector v1-9) quad))
- v0-2
+ (let ((v1-9 (res-lump-struct (-> self entity) 'alt-vector structure)))
+ (set! (-> self next-reflector-trans quad) (-> (the-as vector v1-9) quad))
)
)
)
)
+ (none)
)
(defbehavior periscope-set-target-direction periscope ((arg0 vector))
(let ((f30-0 (vector-xz-length arg0)))
(set! (-> self target-turn) (atan (-> arg0 x) (-> arg0 z)))
- (let ((f0-5 (atan (- (-> arg0 y)) f30-0)))
- (set! (-> self target-tilt) f0-5)
- f0-5
- )
+ (set! (-> self target-tilt) (atan (- (-> arg0 y)) f30-0))
)
+ (none)
)
(defbehavior periscope-find-aim-at-angles periscope ()
@@ -1012,6 +1005,7 @@
(periscope-set-target-direction s5-0)
)
)
+ (none)
)
(defbehavior periscope-find-reflection-angles periscope ()
@@ -1036,6 +1030,7 @@
(periscope-set-target-direction s4-0)
)
)
+ (none)
)
(defbehavior periscope-has-power-input? periscope ()
@@ -1081,10 +1076,10 @@
(quaternion-zxy! (-> self root-override quat) (the-as vector a1-0))
)
(set! (-> self root-override trans y) (+ -184320.0 (-> self y-offset) (-> self base y)))
- (let ((f0-10 (+ (- (+ (-> self base y) (-> self y-offset)) (-> self height)) (-> self y-offset-grips))))
- (set! (-> self grips transform trans y) f0-10)
- f0-10
- )
+ (set! (-> self grips transform trans y)
+ (+ (- (+ (-> self base y) (-> self y-offset)) (-> self height)) (-> self y-offset-grips))
+ )
+ (none)
)
(defbehavior periscope-post periscope ()
@@ -1119,7 +1114,7 @@
(defbehavior peri-beamcam-init-by-other process ((arg0 string))
(let ((gp-0 (entity-by-name "junglecam-1")))
(the-as
- (pointer process)
+ (pointer pov-camera)
(cond
(gp-0
(cond
diff --git a/goal_src/levels/jungleb/plant-boss.gc b/goal_src/levels/jungleb/plant-boss.gc
index fd9ded47f2..44429de5e0 100644
--- a/goal_src/levels/jungleb/plant-boss.gc
+++ b/goal_src/levels/jungleb/plant-boss.gc
@@ -1399,7 +1399,132 @@
(defstate plant-boss-intro (plant-boss)
:code
- (behavior () (none)) ;; todo
+ (behavior ()
+ (set-setting! *setting-control* self 'music 'danger (-> (new 'static 'array float 1 0.0) 0) 0)
+ (send-event *target* 'reset-pickup 'eco)
+ (let ((v1-9 (-> self entity extra perm)))
+ (logior! (-> v1-9 status) (entity-perm-status user-set-from-cstage))
+ (b! (zero? (-> v1-9 user-int8 2)) cfg-5 :delay (empty-form))
+ )
+ (ja-channel-push! 1 150)
+ (let ((gp-0 (-> self skel root-channel 0)))
+ (joint-control-channel-group-eval!
+ gp-0
+ (the-as art-joint-anim (-> self draw art-group data 10))
+ num-func-identity
+ )
+ (set! (-> gp-0 frame-num) (ja-aframe (the-as float 510.0) 0))
+ )
+ (b! #t cfg-3 :delay (nop!))
+ (label cfg-2)
+ (set! (-> self energy)
+ (seek (-> self energy) (-> (new 'static 'array float 1 1.0) 0) (* 2.0 (-> *display* seconds-per-frame)))
+ )
+ (suspend)
+ (label cfg-3)
+ (let ((v1-22 (-> self skel channel)))
+ (b! (!= (-> self skel root-channel 0) v1-22) cfg-2 :delay (nop!))
+ )
+ (set-mode! (-> self neck) (joint-mod-handler-mode world-look-at))
+ (set-mode! (-> self body) (joint-mod-handler-mode world-look-at))
+ (b! #t cfg-17 :delay (nop!))
+ (label cfg-5)
+ (when (not (handle->process (-> self cam-tracker)))
+ (let ((gp-1 (get-process *default-dead-pool* camera-tracker #x4000)))
+ (set! (-> self cam-tracker)
+ (ppointer->handle (when gp-1
+ (let ((t9-9 (method-of-type camera-tracker activate)))
+ (t9-9 (the-as camera-tracker gp-1) self 'camera-tracker (the-as pointer #x70004000))
+ )
+ (run-now-in-process
+ gp-1
+ camera-tracker-init
+ (lambda :behavior camera-tracker
+ ()
+ (while (not (process-grab? *target*))
+ (suspend)
+ )
+ (ambient-hint-spawn "gamcam28" (the-as vector #f) *entity-pool* 'ambient)
+ (send-event *camera* 'blend-from-as-fixed)
+ (camera-look-at (the-as pair (ppointer->process (-> self parent))) (the-as uint 13))
+ (camera-change-to "camera-220" 0 #f)
+ (while (let ((a1-4 (new 'stack-no-clear 'event-message-block)))
+ (set! (-> a1-4 from) self)
+ (set! (-> a1-4 num-params) 0)
+ (set! (-> a1-4 message) 'intro-done?)
+ (not (send-event-function *camera* a1-4))
+ )
+ (suspend)
+ )
+ (camera-change-to "camera-222" 600 #f)
+ (let ((gp-0 (-> *display* base-frame-counter)))
+ (until (>= (- (-> *display* base-frame-counter) gp-0) 600)
+ (suspend)
+ )
+ )
+ (while (not (process-release? (handle->process (-> self grab-target))))
+ (suspend)
+ )
+ (send-event *camera* 'blend-from-as-fixed)
+ (camera-look-at (the-as pair *target*) (the-as uint 0))
+ (camera-change-to (the-as string 'base) 150 #f)
+ (none)
+ )
+ )
+ (-> gp-1 ppointer)
+ )
+ )
+ )
+ )
+ )
+ (let ((v1-37 (-> self neck)))
+ (set! (-> v1-37 blend) 0.0)
+ )
+ (let ((v1-38 (-> self body)))
+ (set! (-> v1-38 blend) 0.0)
+ )
+ (set-mode! (-> self neck) (joint-mod-handler-mode world-look-at))
+ (set-mode! (-> self body) (joint-mod-handler-mode world-look-at))
+ (set! (-> self body flex-blend) 0.0)
+ (let ((a0-25 (-> self skel root-channel 0)))
+ (set! (-> a0-25 param 0) (-> (new 'static 'array float 1 1.0) 0))
+ (joint-control-channel-group! a0-25 (the-as art-joint-anim #f) num-func-loop!)
+ )
+ (ja-channel-push! 1 150)
+ (let ((gp-2 (-> self skel root-channel 0)))
+ (set! (-> gp-2 frame-group) (the-as art-joint-anim (-> self draw art-group data 10)))
+ (set! (-> gp-2 param 0) (ja-aframe (the-as float 510.0) 0))
+ (set! (-> gp-2 param 1) (-> (new 'static 'array float 1 1.0) 0))
+ (set! (-> gp-2 frame-num) 0.0)
+ (joint-control-channel-group! gp-2 (the-as art-joint-anim (-> self draw art-group data 10)) num-func-seek!)
+ )
+ (until (ja-done? 0)
+ (set! (-> self energy)
+ (seek (-> self energy) (-> (new 'static 'array float 1 1.0) 0) (* 0.2 (-> *display* seconds-per-frame)))
+ )
+ (ja-blend-eval)
+ (suspend)
+ (let ((gp-3 (-> self skel root-channel 0)))
+ (set! (-> gp-3 param 0) (ja-aframe (the-as float 510.0) 0))
+ (set! (-> gp-3 param 1) (-> (new 'static 'array float 1 1.0) 0))
+ (joint-control-channel-group-eval! gp-3 (the-as art-joint-anim #f) num-func-seek!)
+ )
+ )
+ (let ((a0-33 (-> self skel root-channel 0)))
+ (set! (-> a0-33 param 0) (the float (+ (-> a0-33 frame-group data 0 length) -1)))
+ (set! (-> a0-33 param 1) (-> (new 'static 'array float 1 1.0) 0))
+ (joint-control-channel-group! a0-33 (the-as art-joint-anim #f) num-func-seek!)
+ )
+ (let ((v1-77 (-> self entity extra perm)))
+ (logior! (-> v1-77 status) (entity-perm-status user-set-from-cstage))
+ (set! (-> v1-77 user-int8 2) 1)
+ )
+ (label cfg-17)
+ (set! (-> self cycle-count) 0)
+ (set! (-> self snap-count) 0)
+ (go plant-boss-reset 0)
+ (none)
+ )
:post
(the-as (function none :behavior plant-boss) ja-post)
)
diff --git a/goal_src/levels/maincave/baby-spider.gc b/goal_src/levels/maincave/baby-spider.gc
index 0dfa70404a..60f954ee4d 100644
--- a/goal_src/levels/maincave/baby-spider.gc
+++ b/goal_src/levels/maincave/baby-spider.gc
@@ -262,11 +262,9 @@ baby-spider-default-event-handler
)
(set! (-> obj delta-wiggle-angle) (* 910.2222 f1-1))
(set! (-> obj wiggle-factor) (* 1.5 f2-4))
- (let ((f0-3 (* 28672.0 f0-2)))
- (set! (-> obj target-speed) f0-3)
- (the-as object f0-3)
- )
+ (set! (-> obj target-speed) (* 28672.0 f0-2))
)
+ (none)
)
(defmethod dummy-52 baby-spider ((obj baby-spider) (arg0 vector))
diff --git a/goal_src/levels/maincave/cavecrystal-light.gc b/goal_src/levels/maincave/cavecrystal-light.gc
index aaba915a81..752f3832e5 100644
--- a/goal_src/levels/maincave/cavecrystal-light.gc
+++ b/goal_src/levels/maincave/cavecrystal-light.gc
@@ -27,18 +27,18 @@
(deftype cavecrystal-light-control (basic)
((active-count int32 :offset-assert 4)
(head cavecrystal-light :offset-assert 8)
- (last-known-valid-time uint64 :offset-assert 16)
+ (last-known-valid-time int64 :offset-assert 16)
(crystal cavecrystal-light 7 :inline :offset-assert 32)
)
:method-count-assert 15
:size-assert #x170
:flag-assert #xf00000170
(:methods
- (TODO-RENAME-9 (_type_ int float process-drawable) object 9)
+ (TODO-RENAME-9 (_type_ int float process-drawable) none 9)
(TODO-RENAME-10 (_type_ vector) float 10)
- (inc-intensites! (_type_) int 11)
- (TODO-RENAME-12 (_type_) symbol 12)
- (create-connection! (_type_ process-drawable res-lump (function object object object object object) object object) connection 13)
+ (inc-intensities! (_type_) none 11)
+ (TODO-RENAME-12 (_type_) none 12)
+ (create-connection! (_type_ process-drawable res-lump (function object object object object object) int float) connection 13)
(execute-connections (_type_) int 14)
)
)
@@ -69,8 +69,8 @@
(arg0 process-drawable)
(arg1 res-lump)
(arg2 (function object object object object object))
- (arg3 object)
- (arg4 object)
+ (arg3 int)
+ (arg4 float)
)
(if (nonzero? (res-lump-value arg1 'crystal-light uint128))
(add-connection *cavecrystal-engine* arg0 arg2 (process->ppointer arg0) arg3 arg4)
@@ -86,7 +86,7 @@
(a1-1 (-> *display* base-frame-counter))
)
(when (!= v1-0 a1-1)
- (set! (-> obj last-known-valid-time) (the-as uint a1-1))
+ (set! (-> obj last-known-valid-time) a1-1)
(cond
((zero? v1-0)
(set! (-> obj active-count) 0)
@@ -101,7 +101,6 @@
(set! (-> a1-5 crystal-handle) (the-as handle #f))
)
)
- #f
)
(else
(when (> (-> obj active-count) 0)
@@ -129,15 +128,15 @@
)
)
)
- #f
)
)
)
)
)
+ (none)
)
-(defmethod inc-intensites! cavecrystal-light-control ((obj cavecrystal-light-control))
+(defmethod inc-intensities! cavecrystal-light-control ((obj cavecrystal-light-control))
(set! (-> obj head) #f)
(let ((a1-0 (the-as cavecrystal-light #f))
(v0-0 0)
@@ -156,10 +155,11 @@
)
)
(set! (-> obj active-count) v0-0)
- v0-0
)
+ (none)
)
+;; WARN: Expression building failed: Function (method 9 cavecrystal-light-control) has a return type of none, but the expression builder found a return statement.
(defmethod TODO-RENAME-9 cavecrystal-light-control ((obj cavecrystal-light-control) (arg0 int) (arg1 float) (arg2 process-drawable))
(TODO-RENAME-12 obj)
(when (or (< arg0 0) (>= arg0 7))
@@ -173,12 +173,12 @@
(set! (-> s3-0 intensity) arg1)
(set! (-> s3-0 crystal-handle) (process->handle arg2))
(set! (-> s3-0 trans quad) (-> arg2 root trans quad))
- (inc-intensites! obj)
+ (inc-intensities! obj)
)
((and (>= 0.0 arg1) (< 0.0 (-> s3-0 intensity)))
(+! (-> obj active-count) -1)
(set! (-> s3-0 intensity) 0.0)
- (inc-intensites! obj)
+ (inc-intensities! obj)
)
((< 0.0 arg1)
(set! (-> s3-0 intensity) arg1)
@@ -186,6 +186,7 @@
)
(set-fade! *palette-fade-controls* (+ arg0 1) arg1 0.0 (-> s3-0 trans))
)
+ (none)
)
(defmethod TODO-RENAME-10 cavecrystal-light-control ((obj cavecrystal-light-control) (arg0 vector))
diff --git a/goal_src/levels/misty/misty-obs.gc b/goal_src/levels/misty/misty-obs.gc
index 839c4b6ff9..fc804be3e7 100644
--- a/goal_src/levels/misty/misty-obs.gc
+++ b/goal_src/levels/misty/misty-obs.gc
@@ -1084,7 +1084,8 @@
(let ((f30-0 1274.3112)
(f28-0 (the float s4-0))
)
- (set! s4-0 (/ (the int (* 65536.0 (ja-frame-num 0))) (+ (-> (if (> (-> self skel active-channels) 0)
+ ;; changed for divide by zero
+ (set! s4-0 (/-0-guard (the int (* 65536.0 (ja-frame-num 0))) (+ (-> (if (> (-> self skel active-channels) 0)
(-> self skel root-channel 0 frame-group)
)
data
diff --git a/goal_src/levels/misty/mistycannon.gc b/goal_src/levels/misty/mistycannon.gc
index d4f358640d..66f09631e3 100644
--- a/goal_src/levels/misty/mistycannon.gc
+++ b/goal_src/levels/misty/mistycannon.gc
@@ -756,6 +756,7 @@
)
)
(when (nonzero? (-> self sfx))
+ (#when PC_DEBUG_SOUND_ENABLE
(let ((gp-1 (the-as sound-rpc-set-param (get-sound-buffer-entry))))
(set! (-> gp-1 command) (sound-command set-param))
(set! (-> gp-1 id) (the-as sound-id (-> self sfx)))
@@ -773,6 +774,7 @@
(set! (-> gp-1 parms mask) (the-as uint 32))
(-> gp-1 id)
)
+ )
)
(quaternion*! (-> self root-override quat) (-> self root-override quat) (-> self tumble-quat))
(suspend)
@@ -934,7 +936,7 @@
(a1-2 (-> self root-override root-prim prim-core))
(v1-5 (-> v1-3 root-prim prim-core))
(a2-1 (new 'stack-no-clear 'vector))
- (t2-0 (new 'stack-no-clear 'collide-mesh-cache-tri))
+ (t2-0 (new 'stack-no-clear 'collide-tri-result))
)
0.0
(vector-! a2-1 (the-as vector v1-5) (the-as vector a1-2))
@@ -945,7 +947,7 @@
40.96
(collide-kind background)
self
- (the-as collide-tri-result t2-0)
+ t2-0
1
)
0.0
diff --git a/goal_src/levels/misty/muse.gc b/goal_src/levels/misty/muse.gc
index 07a5759fca..a5aa86cc6a 100644
--- a/goal_src/levels/misty/muse.gc
+++ b/goal_src/levels/misty/muse.gc
@@ -158,7 +158,8 @@
)
)
)
- (the-as object 0)
+ 0
+ (none)
)
(defmethod common-post muse ((obj muse))
diff --git a/goal_src/levels/rolling/rolling-obs.gc b/goal_src/levels/rolling/rolling-obs.gc
index 21973a6aed..e265fe2725 100644
--- a/goal_src/levels/rolling/rolling-obs.gc
+++ b/goal_src/levels/rolling/rolling-obs.gc
@@ -264,7 +264,7 @@
(defun dark-plants-all-done ((arg0 dark-plant))
(while #t
- (if (!= (-> (the-as process arg0) state) dark-plant-gone)
+ (if (!= (-> arg0 state) dark-plant-gone)
(return #f)
)
(if (zero? (-> arg0 num-alts))
@@ -274,7 +274,7 @@
(if (not v1-9)
(return #t)
)
- (if (= v1-9 (the-as process arg0))
+ (if (= v1-9 arg0)
(return #t)
)
(set! arg0 (the-as dark-plant v1-9))
@@ -1605,7 +1605,7 @@
(-> gp-5 ppointer)
)
)
- (sleep (-> self ticker) (the-as uint #x1b7740))
+ (sleep (-> self ticker) #x1b7740)
(set-setting! *setting-control* self 'sound-flava #f 40.0 42)
(none)
)
diff --git a/goal_src/levels/snow/ice-cube.gc b/goal_src/levels/snow/ice-cube.gc
index f561a7e1d4..779c0ddb6e 100644
--- a/goal_src/levels/snow/ice-cube.gc
+++ b/goal_src/levels/snow/ice-cube.gc
@@ -5,3 +5,1674 @@
;; name in dgo: ice-cube
;; dgos: L1, SNO
+;; DECOMP BEGINS
+
+(defskelgroup *ice-cube-break-sg* ice-cube-break
+ 0
+ -1
+ ((1 (meters 999999)))
+ :bounds (static-spherem 0 -15 0 50)
+ :longest-edge (meters 0)
+ )
+
+(deftype ice-cube (nav-enemy)
+ ((part2 sparticle-launch-control :offset-assert 400)
+ (part3 sparticle-launch-control :offset-assert 404)
+ (part4 sparticle-launch-control :offset-assert 408)
+ (track-target? symbol :offset-assert 412)
+ (slow-down? symbol :offset-assert 416)
+ (tracking-player? symbol :offset-assert 420)
+ (force-spawn-pt int32 :offset-assert 424)
+ (speed float :offset-assert 428)
+ (anim-blend float :offset-assert 432)
+ (prev-charge-angle-diff float :offset-assert 436)
+ (charge-angle float :offset-assert 440)
+ (ground-y float :offset-assert 444)
+ (cprims-type uint64 :offset-assert 448)
+ (next-skid-sound-time uint64 :offset-assert 456)
+ (starting-pos vector :inline :offset-assert 464)
+ (target-pt vector :inline :offset-assert 480)
+ )
+ :heap-base #x180
+ :method-count-assert 76
+ :size-assert #x1f0
+ :flag-assert #x4c018001f0
+ (:methods
+ (dummy-51 (_type_ vector vector) symbol :replace 51)
+ (dummy-53 (_type_ vector vector) symbol :replace 53)
+ )
+ (:states
+ ice-cube-appear
+ ice-cube-appear-land
+ ice-cube-become-mean
+ ice-cube-face-player
+ ice-cube-mean-charge
+ ice-cube-mean-charge-done
+ ice-cube-mean-turn-to-charge
+ ice-cube-retract-spikes
+ ice-cube-shatter
+ ice-cube-tired
+ ice-cube-trying-to-appear
+ )
+ )
+
+
+(defskelgroup *ice-cube-sg* ice-cube
+ 0
+ -1
+ ((1 (meters 20)) (2 (meters 40)) (3 (meters 999999)))
+ :bounds (static-spherem 0 3 0 3.6)
+ :longest-edge (meters 0)
+ :shadow 4
+ )
+
+(define *ice-cube-nav-enemy-info* (new 'static 'nav-enemy-info
+ :idle-anim 5
+ :walk-anim 6
+ :turn-anim -1
+ :notice-anim 7
+ :run-anim 6
+ :jump-anim 6
+ :jump-land-anim 6
+ :victory-anim 7
+ :taunt-anim 7
+ :die-anim 7
+ :neck-joint 5
+ :player-look-at-joint 5
+ :run-travel-speed (meters 20.0)
+ :run-rotate-speed (degrees 2880.0)
+ :run-acceleration (meters 1.0)
+ :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 (seconds 0.5)
+ :attack-shove-back (meters 3.0)
+ :attack-shove-up (meters 2.0)
+ :shadow-size (meters 1.0)
+ :notice-nav-radius (meters 1.5)
+ :nav-nearest-y-threshold (meters 10.0)
+ :notice-distance (meters 35.0)
+ :stop-chase-distance (meters 45.0)
+ :frustration-distance (meters 8.0)
+ :frustration-time #x4b0
+ :die-anim-hold-frame 10000000000.0
+ :jump-anim-start-frame 10.0
+ :jump-land-anim-end-frame 10000000000.0
+ :jump-height-min (meters 3.0)
+ :jump-height-factor 0.5
+ :jump-start-anim-speed 1.0
+ :shadow-max-y (meters 1.0)
+ :shadow-min-y (meters -3.5)
+ :shadow-locus-dist (meters 150.0)
+ :use-align #f
+ :draw-shadow #f
+ :move-to-ground #t
+ :hover-if-no-ground #f
+ :use-momentum #f
+ :use-flee #f
+ :use-proximity-notice #f
+ :use-jump-blocked #f
+ :use-jump-patrol #f
+ :gnd-collide-with #x1
+ :debug-draw-neck #f
+ :debug-draw-jump #f
+ )
+ )
+
+(defpartgroup group-ice-cube-appear1
+ :id 507
+ :flags (use-local-clock)
+ :bounds (static-bspherem 0 0 0 16)
+ :parts
+ ((sp-item 1887 :fade-after (meters 70) :falloff-to (meters 70))
+ (sp-item 1888 :fade-after (meters 70) :falloff-to (meters 70))
+ )
+ )
+
+(defpart 1888
+ :init-specs
+ ((sp-tex spt-texture (new 'static 'texture-id :index #x19 :page #x2))
+ (sp-flt spt-num 16.0)
+ (sp-rnd-flt spt-x (meters -2) (meters 4) 1.0)
+ (sp-rnd-flt spt-y (meters 0.5) (meters 1) 1.0)
+ (sp-rnd-flt spt-z (meters -2) (meters 4) 1.0)
+ (sp-rnd-flt spt-scale-x (meters 0.24) (meters 0.24) 1.0)
+ (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0)
+ (sp-copy-from-other spt-scale-y -4)
+ (sp-flt spt-r 128.0)
+ (sp-flt spt-g 128.0)
+ (sp-flt spt-b 128.0)
+ (sp-rnd-flt spt-a 128.0 64.0 1.0)
+ (sp-rnd-flt spt-vel-y (meters 0.033333335) (meters 0.05) 1.0)
+ (sp-rnd-flt spt-rotvel-z (degrees -2.4) (degrees 3.4666667) 1.0)
+ (sp-flt spt-accel-y -5.4613333)
+ (sp-flt spt-friction 0.99)
+ (sp-int spt-timer 450)
+ (sp-cpuinfo-flags bit2 bit12)
+ (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 40.0) 1.0)
+ (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0)
+ )
+ )
+
+(defpart 1887
+ :init-specs
+ ((sp-tex spt-texture (new 'static 'texture-id :page #x2))
+ (sp-flt spt-num 32.0)
+ (sp-rnd-flt spt-x (meters -2) (meters 4) 1.0)
+ (sp-rnd-flt spt-y (meters 0.5) (meters 1) 1.0)
+ (sp-rnd-flt spt-z (meters -2) (meters 4) 1.0)
+ (sp-rnd-flt spt-scale-x (meters 2.5) (meters 2.5) 1.0)
+ (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0)
+ (sp-copy-from-other spt-scale-y -4)
+ (sp-flt spt-r 128.0)
+ (sp-flt spt-g 128.0)
+ (sp-flt spt-b 128.0)
+ (sp-rnd-flt spt-a 32.0 32.0 1.0)
+ (sp-rnd-flt spt-vel-y (meters 0.05) (meters 0.016666668) 1.0)
+ (sp-flt spt-scalevel-x (meters 0.006666667))
+ (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 1.2) 1.0)
+ (sp-copy-from-other spt-scalevel-y -4)
+ (sp-flt spt-fade-a -0.07111111)
+ (sp-flt spt-accel-y -5.4613333)
+ (sp-flt spt-friction 0.99)
+ (sp-int spt-timer 450)
+ (sp-cpuinfo-flags bit2 bit12)
+ (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 40.0) 1.0)
+ (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0)
+ )
+ )
+
+(defpartgroup group-ice-cube-appear2
+ :id 508
+ :flags (use-local-clock)
+ :bounds (static-bspherem 0 0 0 16)
+ :parts
+ ((sp-item 1889 :fade-after (meters 70) :falloff-to (meters 70)))
+ )
+
+(defpart 1889
+ :init-specs
+ ((sp-tex spt-texture (new 'static 'texture-id :index #x19 :page #x2))
+ (sp-rnd-flt spt-num 1.0 2.0 1.0)
+ (sp-rnd-flt spt-x (meters -0.25) (meters 0.5) 1.0)
+ (sp-rnd-flt spt-z (meters -0.25) (meters 0.5) 1.0)
+ (sp-rnd-flt spt-scale-x (meters 0.2) (meters 0.1) 1.0)
+ (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0)
+ (sp-copy-from-other spt-scale-y -4)
+ (sp-flt spt-r 128.0)
+ (sp-flt spt-g 128.0)
+ (sp-flt spt-b 128.0)
+ (sp-rnd-flt spt-a 64.0 64.0 1.0)
+ (sp-rnd-flt spt-vel-y (meters 0) (meters 0.006666667) 1.0)
+ (sp-rnd-flt spt-rotvel-z (degrees -2.4) (degrees 3.4666667) 1.0)
+ (sp-flt spt-accel-y -5.4613333)
+ (sp-int spt-timer 150)
+ (sp-cpuinfo-flags bit2 bit12)
+ (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 30.0) 1.0)
+ (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0)
+ )
+ )
+
+(defpartgroup group-ice-cube-foot-puff
+ :id 567
+ :duration 5
+ :linger-duration 450
+ :bounds (static-bspherem 0 0 0 2)
+ :parts
+ ((sp-item 2325) (sp-item 2326) (sp-item 2327))
+ )
+
+(defpart 2325
+ :init-specs
+ ((sp-tex spt-texture (new 'static 'texture-id :page #x2))
+ (sp-flt spt-num 16.0)
+ (sp-rnd-flt spt-scale-x (meters 1) (meters 1) 1.0)
+ (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0)
+ (sp-copy-from-other spt-scale-y -4)
+ (sp-rnd-flt spt-r 196.0 64.0 1.0)
+ (sp-rnd-flt spt-g 196.0 64.0 1.0)
+ (sp-rnd-flt spt-b 196.0 64.0 1.0)
+ (sp-rnd-flt spt-a 16.0 32.0 1.0)
+ (sp-rnd-flt spt-vel-y (meters 0.02) (meters 0.01) 1.0)
+ (sp-flt spt-scalevel-x (meters 0.0033333334))
+ (sp-rnd-flt spt-rotvel-z (degrees -0.2) (degrees 0.4) 1.0)
+ (sp-copy-from-other spt-scalevel-y -4)
+ (sp-flt spt-fade-a -0.16)
+ (sp-flt spt-accel-y -1.3653333)
+ (sp-flt spt-friction 0.95)
+ (sp-int spt-timer 300)
+ (sp-cpuinfo-flags bit2 bit12)
+ (sp-rnd-flt spt-conerot-x (degrees 60.0) (degrees 30.0) 1.0)
+ (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0)
+ )
+ )
+
+(defpart 2326
+ :init-specs
+ ((sp-tex spt-texture (new 'static 'texture-id :page #x2))
+ (sp-flt spt-num 12.0)
+ (sp-rnd-flt spt-scale-x (meters 0.5) (meters 0.25) 1.0)
+ (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0)
+ (sp-copy-from-other spt-scale-y -4)
+ (sp-rnd-flt spt-r 196.0 64.0 1.0)
+ (sp-rnd-flt spt-g 196.0 64.0 1.0)
+ (sp-rnd-flt spt-b 196.0 64.0 1.0)
+ (sp-rnd-flt spt-a 16.0 16.0 1.0)
+ (sp-rnd-flt spt-vel-y (meters 0.053333335) (meters 0.02) 1.0)
+ (sp-flt spt-scalevel-x (meters 0.0016666667))
+ (sp-rnd-flt spt-rotvel-z (degrees -0.2) (degrees 0.4) 1.0)
+ (sp-copy-from-other spt-scalevel-y -4)
+ (sp-flt spt-fade-a -0.21333334)
+ (sp-flt spt-accel-y -1.3653333)
+ (sp-flt spt-friction 0.95)
+ (sp-int spt-timer 150)
+ (sp-cpuinfo-flags bit2 bit12)
+ (sp-rnd-flt spt-conerot-x (degrees 60.0) (degrees 30.0) 1.0)
+ (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0)
+ )
+ )
+
+(defpart 2327
+ :init-specs
+ ((sp-tex spt-texture (new 'static 'texture-id :index #x4 :page #x2))
+ (sp-flt spt-num 32.0)
+ (sp-rnd-flt spt-x (meters -0.4) (meters 0.8) 1.0)
+ (sp-rnd-flt spt-y (meters -0.1) (meters 0.4) 1.0)
+ (sp-rnd-flt spt-z (meters -0.4) (meters 0.8) 1.0)
+ (sp-rnd-flt spt-scale-x (meters 0.07) (meters 0.02) 1.0)
+ (sp-copy-from-other spt-scale-y -4)
+ (sp-rnd-flt spt-r 196.0 2.0 64.0)
+ (sp-rnd-int spt-g 1128529920 1 64.0)
+ (sp-rnd-int spt-b 1128529920 1 64.0)
+ (sp-rnd-flt spt-a 64.0 64.0 1.0)
+ (sp-rnd-flt spt-vel-y (meters 0.015) (meters 0.006666667) 1.0)
+ (sp-flt spt-fade-a -0.42666668)
+ (sp-rnd-flt spt-accel-y -5.4613333 2.7306666 1.0)
+ (sp-int spt-timer 300)
+ (sp-cpuinfo-flags bit2 bit12)
+ (sp-rnd-flt spt-conerot-x (degrees 30.0) (degrees 50.000004) 1.0)
+ (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0)
+ (sp-flt spt-conerot-radius (meters 0.5))
+ )
+ )
+
+(defpartgroup group-ice-cube-shatter
+ :id 509
+ :flags (use-local-clock)
+ :bounds (static-bspherem 0 0 0 16)
+ :parts
+ ((sp-item 1890) (sp-item 1891) (sp-item 1892))
+ )
+
+(defpart 1892
+ :init-specs
+ ((sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2))
+ (sp-flt spt-num 64.0)
+ (sp-flt spt-y (meters 1))
+ (sp-rnd-flt spt-scale-x (meters 0.24) (meters 0.24) 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 96.0 32.0 1.0)
+ (sp-rnd-flt spt-vel-y (meters 0.033333335) (meters 0.13333334) 1.0)
+ (sp-flt spt-accel-y -0.13653333)
+ (sp-flt spt-friction 0.99)
+ (sp-int-plain-rnd spt-timer 60 89 1)
+ (sp-cpuinfo-flags bit2 bit12)
+ (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 140.0) 1.0)
+ (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0)
+ (sp-rnd-flt spt-conerot-radius (meters 0) (meters 1.5) 1.0)
+ )
+ )
+
+(defpart 1891
+ :init-specs
+ ((sp-tex spt-texture (new 'static 'texture-id :page #x2))
+ (sp-flt spt-num 8.0)
+ (sp-rnd-flt spt-x (meters -2) (meters 4) 1.0)
+ (sp-flt spt-y (meters 1))
+ (sp-rnd-flt spt-z (meters -2) (meters 4) 1.0)
+ (sp-rnd-flt spt-scale-x (meters 3) (meters 2) 1.0)
+ (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0)
+ (sp-copy-from-other spt-scale-y -4)
+ (sp-flt spt-r 255.0)
+ (sp-flt spt-g 255.0)
+ (sp-flt spt-b 255.0)
+ (sp-rnd-flt spt-a 64.0 64.0 1.0)
+ (sp-rnd-flt spt-vel-y (meters 0) (meters 0.016666668) 1.0)
+ (sp-flt spt-scalevel-x (meters 0.006666667))
+ (sp-rnd-flt spt-rotvel-z (degrees -0.3) (degrees 0.6) 1.0)
+ (sp-copy-from-other spt-scalevel-y -4)
+ (sp-flt spt-fade-a -0.28444445)
+ (sp-flt spt-friction 0.99)
+ (sp-int spt-timer 450)
+ (sp-cpuinfo-flags bit2 bit12)
+ (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 120.0) 1.0)
+ (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0)
+ (sp-rnd-flt spt-conerot-radius (meters 0) (meters 1.5) 1.0)
+ )
+ )
+
+(defpart 1890
+ :init-specs
+ ((sp-tex spt-texture (new 'static 'texture-id :page #x2))
+ (sp-flt spt-num 16.0)
+ (sp-rnd-flt spt-x (meters -2) (meters 4) 1.0)
+ (sp-flt spt-y (meters 1))
+ (sp-rnd-flt spt-z (meters -2) (meters 4) 1.0)
+ (sp-rnd-flt spt-scale-x (meters 1) (meters 1) 1.0)
+ (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0)
+ (sp-copy-from-other spt-scale-y -4)
+ (sp-flt spt-r 255.0)
+ (sp-flt spt-g 255.0)
+ (sp-flt spt-b 255.0)
+ (sp-rnd-flt spt-a 32.0 32.0 1.0)
+ (sp-rnd-flt spt-vel-y (meters 0.13333334) (meters 0.033333335) 1.0)
+ (sp-flt spt-scalevel-x (meters 0.006666667))
+ (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 1.2) 1.0)
+ (sp-copy-from-other spt-scalevel-y -4)
+ (sp-flt spt-fade-a -0.35555556)
+ (sp-flt spt-friction 0.99)
+ (sp-int spt-timer 180)
+ (sp-cpuinfo-flags bit2 bit12)
+ (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 120.0) 1.0)
+ (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0)
+ (sp-rnd-flt spt-conerot-radius (meters 0) (meters 1.5) 1.0)
+ )
+ )
+
+;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 98]
+;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 176]
+;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 194]
+(defbehavior ice-cube-default-event-handler ice-cube ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block))
+ (let ((v1-0 arg2))
+ (the-as
+ object
+ (cond
+ ((= v1-0 'attack)
+ (cond
+ ((and (= (-> arg0 type) target)
+ (= (-> self cprims-type) 2)
+ (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) 'query)
+ (set! (-> a1-1 param 0) (the-as uint 'powerup))
+ (set! (-> a1-1 param 1) (the-as uint 2))
+ (not (send-event-function *target* a1-1))
+ )
+ )
+ (when (and (cond
+ ((= (-> arg0 type) target)
+ (send-event arg0 'attack (-> arg3 param 0) (new 'static 'attack-info))
+ )
+ (else
+ (let ((a1-3 (new 'stack-no-clear 'event-message-block)))
+ (set! (-> a1-3 from) self)
+ (set! (-> a1-3 num-params) 4)
+ (set! (-> a1-3 message) 'attack)
+ (set! (-> a1-3 param 0) (-> arg3 param 0))
+ (set! (-> a1-3 param 1) (the-as uint #f))
+ (let ((v1-20 (+ *global-attack-id* 1)))
+ (set! *global-attack-id* v1-20)
+ (set! (-> a1-3 param 2) (the-as uint v1-20))
+ )
+ (set! (-> a1-3 param 3) (the-as uint 0))
+ (send-event-function arg0 a1-3)
+ )
+ )
+ )
+ (= (-> arg0 type) target)
+ )
+ (set-collide-offense (-> self collide-info) 2 (collide-offense no-offense))
+ (logior! (-> self nav-enemy-flags) 256)
+ (level-hint-spawn (game-text-id ice-cube-hint) "sksp0350" (the-as entity #f) *entity-pool* (game-task none))
+ )
+ )
+ (else
+ (nav-enemy-set-hit-from-direction arg0)
+ (go ice-cube-shatter)
+ )
+ )
+ )
+ ((= v1-0 'touch)
+ (when (and (cond
+ ((= (-> arg0 type) target)
+ (send-event arg0 'attack (-> arg3 param 0) (new 'static 'attack-info))
+ )
+ (else
+ (let ((a1-7 (new 'stack-no-clear 'event-message-block)))
+ (set! (-> a1-7 from) self)
+ (set! (-> a1-7 num-params) 4)
+ (set! (-> a1-7 message) 'attack)
+ (set! (-> a1-7 param 0) (-> arg3 param 0))
+ (set! (-> a1-7 param 1) (the-as uint #f))
+ (let ((v1-38 (+ *global-attack-id* 1)))
+ (set! *global-attack-id* v1-38)
+ (set! (-> a1-7 param 2) (the-as uint v1-38))
+ )
+ (set! (-> a1-7 param 3) (the-as uint 0))
+ (send-event-function arg0 a1-7)
+ )
+ )
+ )
+ (= (-> arg0 type) target)
+ )
+ (set-collide-offense (-> self collide-info) 2 (collide-offense no-offense))
+ ;; NOTE fixed decompiler bug
+ (set! (-> self nav-enemy-flags) (logior (-> self nav-enemy-flags) 256))
+ )
+ )
+ ((= v1-0 'touched)
+ (when (!= (-> arg0 type) target)
+ (cond
+ ((= (-> arg0 type) target)
+ (let ((a1-9 (new 'stack-no-clear 'event-message-block)))
+ (set! (-> a1-9 from) self)
+ (set! (-> a1-9 num-params) 2)
+ (set! (-> a1-9 message) 'attack)
+ (set! (-> a1-9 param 0) (-> arg3 param 0))
+ (let ((v1-49 (new 'static 'attack-info :mask #x20)))
+ (set! (-> v1-49 mode) #f)
+ (set! (-> a1-9 param 1) (the-as uint v1-49))
+ )
+ (send-event-function arg0 a1-9)
+ )
+ )
+ (else
+ (let ((a1-10 (new 'stack-no-clear 'event-message-block)))
+ (set! (-> a1-10 from) self)
+ (set! (-> a1-10 num-params) 4)
+ (set! (-> a1-10 message) 'attack)
+ (set! (-> a1-10 param 0) (-> arg3 param 0))
+ (set! (-> a1-10 param 1) (the-as uint #f))
+ (let ((v1-54 (+ *global-attack-id* 1)))
+ (set! *global-attack-id* v1-54)
+ (set! (-> a1-10 param 2) (the-as uint v1-54))
+ )
+ (set! (-> a1-10 param 3) (the-as uint 0))
+ (send-event-function arg0 a1-10)
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+
+(defmethod initialize-collision ice-cube ((obj ice-cube))
+ (let ((s5-0 (new 'process 'collide-shape-moving obj (collide-list-enum usually-hit-by-player))))
+ (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process))
+ (set! (-> s5-0 reaction) default-collision-reaction)
+ (set! (-> s5-0 no-reaction)
+ (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing)
+ )
+ (let ((s4-0 (new 'process 'collide-shape-prim-group s5-0 (the-as uint 5) 0)))
+ (set! (-> s4-0 prim-core collide-as) (collide-kind enemy))
+ (set! (-> s4-0 collide-with) (collide-kind target))
+ (set! (-> s4-0 prim-core action) (collide-action solid))
+ (set-vector! (-> s4-0 local-sphere) 0.0 12288.0 0.0 14745.6)
+ (set-root-prim! s5-0 s4-0)
+ (let ((s3-0 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 3))))
+ (set! (-> s3-0 prim-core collide-as) (collide-kind enemy))
+ (set! (-> s3-0 collide-with) (collide-kind target))
+ (set! (-> s3-0 prim-core action) (collide-action solid))
+ (set! (-> s3-0 prim-core offense) (collide-offense touch))
+ (set-vector! (-> s3-0 local-sphere) 0.0 3276.8 0.0 3276.8)
+ (append-prim s4-0 s3-0)
+ )
+ (let ((s3-1 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 3))))
+ (set! (-> s3-1 prim-core collide-as) (collide-kind enemy))
+ (set! (-> s3-1 collide-with) (collide-kind target))
+ (set! (-> s3-1 prim-core action) (collide-action solid))
+ (set! (-> s3-1 prim-core offense) (collide-offense touch))
+ (set-vector! (-> s3-1 local-sphere) 0.0 5734.4 0.0 3276.8)
+ (append-prim s4-0 s3-1)
+ )
+ (let ((s3-2 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 3))))
+ (set! (-> s3-2 prim-core collide-as) (collide-kind enemy))
+ (set! (-> s3-2 collide-with) (collide-kind target))
+ (set! (-> s3-2 prim-core action) (collide-action solid))
+ (set! (-> s3-2 prim-core offense) (collide-offense touch))
+ (set-vector! (-> s3-2 local-sphere) 0.0 8192.0 0.0 3276.8)
+ (append-prim s4-0 s3-2)
+ )
+ (let ((s3-3 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 1))))
+ (set! (-> s3-3 prim-core collide-as) (collide-kind enemy))
+ (set! (-> s3-3 collide-with) (collide-kind target))
+ (set! (-> s3-3 prim-core offense) (collide-offense normal-attack))
+ (set! (-> s3-3 transform-index) 6)
+ (set-vector! (-> s3-3 local-sphere) 819.2 0.0 0.0 2048.0)
+ (append-prim s4-0 s3-3)
+ )
+ (let ((s3-4 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 1))))
+ (set! (-> s3-4 prim-core collide-as) (collide-kind enemy))
+ (set! (-> s3-4 collide-with) (collide-kind target))
+ (set! (-> s3-4 prim-core offense) (collide-offense normal-attack))
+ (set! (-> s3-4 transform-index) 4)
+ (set-vector! (-> s3-4 local-sphere) 0.0 2048.0 0.0 4505.6)
+ (append-prim s4-0 s3-4)
+ )
+ )
+ (set! (-> s5-0 nav-radius) 6144.0)
+ (backup-collide-with-as s5-0)
+ (set! (-> s5-0 max-iteration-count) (the-as uint 1))
+ (set! (-> obj collide-info) s5-0)
+ )
+ (set! (-> obj cprims-type) (the-as uint 0))
+ (set-root-prim-collide-with! (-> obj collide-info) (collide-kind target))
+ (set! (-> obj collide-info event-self) 'touched)
+ (dummy-57 obj)
+ 0
+ (none)
+ )
+
+(defmethod dummy-57 ice-cube ((obj ice-cube))
+ (when (!= (-> obj cprims-type) 1)
+ (set! (-> obj cprims-type) (the-as uint 1))
+ (let ((v1-3 (-> obj collide-info root-prim)))
+ (set-vector! (-> v1-3 local-sphere) 0.0 12288.0 0.0 14745.6)
+ (set-vector! (-> (the-as collide-shape-prim-group v1-3) prims 3 local-sphere) 819.2 0.0 0.0 2048.0)
+ (set-vector! (-> (the-as collide-shape-prim-group v1-3) prims 4 local-sphere) 0.0 2048.0 0.0 4505.6)
+ )
+ )
+ (none)
+ )
+
+(defmethod dummy-58 ice-cube ((obj ice-cube))
+ (when (!= (-> obj cprims-type) 2)
+ (set! (-> obj cprims-type) (the-as uint 2))
+ (let ((v1-3 (-> obj collide-info root-prim)))
+ (set-vector! (-> v1-3 local-sphere) 0.0 12288.0 0.0 16384.0)
+ (set-vector! (-> (the-as collide-shape-prim-group v1-3) prims 3 local-sphere) 819.2 0.0 0.0 4915.2)
+ (set-vector! (-> (the-as collide-shape-prim-group v1-3) prims 4 local-sphere) 0.0 2048.0 0.0 9420.8)
+ )
+ )
+ (none)
+ )
+
+(defmethod TODO-RENAME-48 ice-cube ((obj ice-cube))
+ (process-drawable-from-entity! obj (the-as entity-actor (-> obj entity)))
+ (initialize-skeleton obj *ice-cube-sg* '())
+ (TODO-RENAME-45 obj *ice-cube-nav-enemy-info*)
+ (set! (-> obj neck up) (the-as uint 0))
+ (set! (-> obj neck nose) (the-as uint 1))
+ (set! (-> obj neck ear) (the-as uint 2))
+ 0
+ (none)
+ )
+
+(defmethod deactivate ice-cube ((obj ice-cube))
+ (if (nonzero? (-> obj part2))
+ (kill-and-free-particles (-> obj part2))
+ )
+ (if (nonzero? (-> obj part3))
+ (kill-and-free-particles (-> obj part3))
+ )
+ (if (nonzero? (-> obj part4))
+ (kill-and-free-particles (-> obj part4))
+ )
+ ((method-of-type process-drawable deactivate) obj)
+ (none)
+ )
+
+(defmethod relocate ice-cube ((obj ice-cube) (arg0 int))
+ (if (nonzero? (-> obj part2))
+ (&+! (-> obj part2) arg0)
+ )
+ (if (nonzero? (-> obj part3))
+ (&+! (-> obj part3) arg0)
+ )
+ (if (nonzero? (-> obj part4))
+ (&+! (-> obj part4) arg0)
+ )
+ (the-as ice-cube ((the-as (function nav-enemy int nav-enemy) (find-parent-method ice-cube 7)) obj arg0))
+ )
+
+(defmethod init-from-entity! ice-cube ((obj ice-cube) (arg0 entity-actor))
+ (set! (-> obj part) (create-launch-control (-> *part-group-id-table* 507) obj))
+ (set! (-> obj part2) (create-launch-control (-> *part-group-id-table* 508) obj))
+ (set! (-> obj part3) (create-launch-control (-> *part-group-id-table* 509) obj))
+ (set! (-> obj part4) (create-launch-control (-> *part-group-id-table* 567) obj))
+ (initialize-collision obj)
+ (TODO-RENAME-48 obj)
+ (let ((s4-0 (-> obj path curve num-cverts)))
+ (if (<= s4-0 0)
+ (go process-drawable-art-error "no path")
+ )
+ (let ((v1-21 (res-lump-value arg0 'mode uint128 :default (the-as uint128 -1))))
+ (if (and (>= (the-as int v1-21) 0) (< (the-as int v1-21) s4-0))
+ (set! (-> obj force-spawn-pt) (the-as int v1-21))
+ (set! (-> obj force-spawn-pt) -1)
+ )
+ )
+ )
+ (go ice-cube-trying-to-appear)
+ (none)
+ )
+
+(defmethod dummy-60 ice-cube ((obj ice-cube) (arg0 symbol))
+ (let ((gp-0 (new 'stack-no-clear 'vector)))
+ (when (-> obj tracking-player?)
+ (if (and *target* arg0)
+ (set! (-> obj target-pt quad) (-> (target-pos 0) quad))
+ )
+ )
+ (vector-! gp-0 (-> obj target-pt) (-> obj collide-info trans))
+ (seek-toward-heading-vec! (-> obj collide-info) gp-0 524288.0 30)
+ (let ((v0-5 (< (fabs (deg- (quaternion-y-angle (-> obj collide-info quat)) (vector-y-angle gp-0))) 364.0889)))
+ (b! #t cfg-10 :delay (nop!))
+ (the-as none 0)
+ (set! v0-5 (the-as symbol #f))
+ (label cfg-10)
+ v0-5
+ )
+ )
+ )
+
+(defmethod dummy-51 ice-cube ((obj ice-cube) (arg0 vector) (arg1 vector))
+ (let ((s5-0 (new 'stack-no-clear 'vector)))
+ (let* ((s4-0 (new 'stack-no-clear 'collide-tri-result))
+ (f0-0 40960.0)
+ (f30-0 (+ f0-0 40960.0))
+ )
+ (set! (-> s5-0 quad) (-> arg0 quad))
+ (+! (-> s5-0 y) f0-0)
+ (let ((f0-2 (fill-and-probe-using-y-probe
+ *collide-cache*
+ s5-0
+ f30-0
+ (collide-kind background)
+ (-> obj collide-info process)
+ s4-0
+ (the-as uint 1)
+ )
+ )
+ )
+ (if (or (< f0-2 0.0) (= (logand #b111000 (the-as int (-> s4-0 pat))) 8)) ;; yes this is bugged
+ (return #f)
+ )
+ (set! (-> s5-0 y) (- (-> s5-0 y) (* f0-2 f30-0)))
+ )
+ )
+ (set! (-> arg1 quad) (-> s5-0 quad))
+ )
+ #t
+ )
+
+(defmethod dummy-52 ice-cube ((obj ice-cube) (arg0 vector))
+ (when *target*
+ (let ((f0-0 (vector-vector-xz-distance arg0 (target-pos 0))))
+ (when (and (>= f0-0 40960.0) (>= 81920.0 f0-0) (not (TODO-RENAME-50 obj arg0)))
+ (let ((a0-4 (new 'stack-no-clear 'vector)))
+ (set! (-> a0-4 quad) (-> arg0 quad))
+ (set! (-> a0-4 w) (-> obj collide-info root-prim local-sphere w))
+ (if (sphere-in-view-frustum? (the-as sphere a0-4))
+ (return #t)
+ )
+ )
+ )
+ )
+ )
+ #f
+ )
+
+(defmethod dummy-53 ice-cube ((obj ice-cube) (arg0 vector) (arg1 vector))
+ (local-vars (s1-0 int) (s2-0 int))
+ (let ((s3-0 (-> obj path curve num-cverts)))
+ (if (<= s3-0 0)
+ (return #f)
+ )
+ (cond
+ ((>= (-> obj force-spawn-pt) 0)
+ (set! s1-0 (-> obj force-spawn-pt))
+ (set! s2-0 1)
+ )
+ (else
+ (set! s1-0 (rand-vu-int-count s3-0))
+ (set! s2-0 s3-0)
+ )
+ )
+ (while (> s2-0 0)
+ (eval-path-curve-div! (-> obj path) arg0 (the float s1-0) 'interp)
+ (when (dummy-52 obj arg0)
+ (let ((a1-3 (new 'stack-no-clear 'vector))
+ (s3-1 (new 'stack-no-clear 'collide-tri-result))
+ )
+ (set! (-> a1-3 quad) (-> arg0 quad))
+ (set! (-> a1-3 y) (+ 16384.0 (-> a1-3 y)))
+ (if (>= (fill-and-probe-using-line-sphere
+ *collide-cache*
+ a1-3
+ (new 'static 'vector :y -32768.0 :w 1.0)
+ 409.6
+ (collide-kind background)
+ obj
+ s3-1
+ 1
+ )
+ 0.0
+ )
+ (set! (-> arg0 quad) (-> s3-1 intersect quad))
+ )
+ )
+ (cond
+ (*target*
+ (vector-! arg1 (target-pos 0) arg0)
+ (set! (-> arg1 y) 0.0)
+ )
+ (else
+ (set-vector! arg1 (rand-vu-float-range -4096.0 4096.0) 0.0 (rand-vu-float-range -4096.0 4096.0) 1.0)
+ (set! (-> arg1 x) (+ 409.6 (-> arg1 x)))
+ )
+ )
+ (vector-normalize! arg1 1.0)
+ (return #t)
+ )
+ (set! s1-0 (mod (+ s1-0 1) s3-0))
+ (+! s2-0 -1)
+ )
+ )
+ #f
+ )
+
+(defstate ice-cube-trying-to-appear (ice-cube)
+ :enter
+ (behavior ()
+ (ja-channel-set! 0)
+ (ja-post)
+ (logior! (-> self draw status) (draw-status drwf01))
+ (clear-collide-with-as (-> self collide-info))
+ (none)
+ )
+ :exit
+ (behavior ()
+ (logclear! (-> self draw status) (draw-status drwf01))
+ (restore-collide-with-as (-> self collide-info))
+ (none)
+ )
+ :trans
+ (behavior ()
+ (when (and *target* (>= 163840.0 (vector-vector-distance (-> self collide-info trans) (-> *target* control trans))))
+ (let ((s5-0 (new 'stack-no-clear 'vector))
+ (gp-0 (new 'stack-no-clear 'vector))
+ )
+ (when (dummy-53 self s5-0 gp-0)
+ (set! (-> self collide-info trans quad) (-> s5-0 quad))
+ (forward-up->quaternion (-> self collide-info quat) gp-0 *up-vector*)
+ (dummy-57 self)
+ (go ice-cube-appear)
+ )
+ )
+ )
+ (none)
+ )
+ :code
+ (behavior ()
+ (logior! (-> self mask) (process-mask sleep-code))
+ (suspend)
+ 0
+ (none)
+ )
+ )
+
+(defstate ice-cube-appear (ice-cube)
+ :event
+ ice-cube-default-event-handler
+ :enter
+ (behavior ()
+ (dummy-57 self)
+ (set! (-> self ground-y) (-> self collide-info trans y))
+ (spawn (-> self part) (-> self collide-info trans))
+ (set-current-poly! (-> self nav) (dummy-16 (-> self nav) (-> self collide-info trans)))
+ (set! (-> self collide-info trans y) (+ -12288.0 (-> self collide-info trans y)))
+ (set! (-> self collide-info transv quad) (-> *null-vector* quad))
+ (set! (-> self collide-info transv y) (rand-vu-float-range 102400.0 114688.0))
+ (none)
+ )
+ :trans
+ (behavior ()
+ (when (and (< (-> self collide-info trans y) (-> self ground-y)) (< (-> self collide-info transv y) 0.0))
+ (set! (-> self collide-info trans y) (-> self ground-y))
+ (set! (-> self collide-info transv quad) (-> *null-vector* quad))
+ (go ice-cube-appear-land)
+ )
+ (let* ((s5-0 (-> self node-list))
+ (a0-2 (-> s5-0 length))
+ (gp-0 (new 'stack-no-clear 'vector))
+ )
+ (vector<-cspace! gp-0 (-> s5-0 data (nav-enemy-rnd-int-count a0-2)))
+ (spawn (-> self part2) gp-0)
+ )
+ (none)
+ )
+ :code
+ (behavior ()
+ (ja-channel-push! 1 60)
+ (let ((a0-1 (-> self skel root-channel 0)))
+ (set! (-> a0-1 frame-group) (the-as art-joint-anim (-> self draw art-group data 7)))
+ (set! (-> a0-1 param 0)
+ (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 7)) data 0 length) -1))
+ )
+ (set! (-> a0-1 param 1) 1.0)
+ (set! (-> a0-1 frame-num) 0.0)
+ (joint-control-channel-group! a0-1 (the-as art-joint-anim (-> self draw art-group data 7)) num-func-seek!)
+ )
+ (until (ja-done? 0)
+ (suspend)
+ (let ((a0-2 (-> self skel root-channel 0)))
+ (set! (-> a0-2 param 0) (the float (+ (-> a0-2 frame-group data 0 length) -1)))
+ (set! (-> a0-2 param 1) 1.0)
+ (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-seek!)
+ )
+ )
+ (while #t
+ (suspend)
+ )
+ (none)
+ )
+ :post
+ (the-as (function none :behavior ice-cube) nav-enemy-falling-post)
+ )
+
+(defstate ice-cube-appear-land (ice-cube)
+ :event
+ ice-cube-default-event-handler
+ :code
+ (behavior ()
+ (let ((gp-0 (new 'stack-no-clear 'vector)))
+ (vector<-cspace! gp-0 (-> self node-list data 29))
+ (spawn (-> self part4) gp-0)
+ (vector<-cspace! gp-0 (-> self node-list data 25))
+ (spawn (-> self part4) gp-0)
+ )
+ (ja-channel-push! 1 30)
+ (let ((a0-5 (-> self skel root-channel 0)))
+ (set! (-> a0-5 frame-group) (the-as art-joint-anim (-> self draw art-group data 8)))
+ (set! (-> a0-5 param 0)
+ (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 8)) data 0 length) -1))
+ )
+ (set! (-> a0-5 param 1) 1.0)
+ (set! (-> a0-5 frame-num) 0.0)
+ (joint-control-channel-group! a0-5 (the-as art-joint-anim (-> self draw art-group data 8)) num-func-seek!)
+ )
+ (until (ja-done? 0)
+ (suspend)
+ (let ((a0-6 (-> self skel root-channel 0)))
+ (set! (-> a0-6 param 0) (the float (+ (-> a0-6 frame-group data 0 length) -1)))
+ (set! (-> a0-6 param 1) 1.0)
+ (joint-control-channel-group-eval! a0-6 (the-as art-joint-anim #f) num-func-seek!)
+ )
+ )
+ (if (TODO-RENAME-46 self (-> self nav-info notice-distance))
+ (go ice-cube-become-mean)
+ (go-virtual nav-enemy-idle)
+ )
+ (none)
+ )
+ :post
+ (the-as (function none :behavior ice-cube) ja-post)
+ )
+
+(defstate nav-enemy-idle (ice-cube)
+ :virtual #t
+ :event
+ ice-cube-default-event-handler
+ :enter
+ (behavior ()
+ (let ((t9-0 (-> (method-of-type nav-enemy nav-enemy-idle) enter)))
+ (if t9-0
+ (t9-0)
+ )
+ )
+ (set! (-> self draw force-lod) -1)
+ (logior! (-> self mask) (process-mask actor-pause))
+ (none)
+ )
+ )
+
+(defstate nav-enemy-patrol (ice-cube)
+ :virtual #t
+ :event
+ ice-cube-default-event-handler
+ :enter
+ (behavior ()
+ (let ((t9-0 (-> (method-of-type nav-enemy nav-enemy-patrol) enter)))
+ (if t9-0
+ (t9-0)
+ )
+ )
+ (set! (-> self draw force-lod) -1)
+ (logior! (-> self mask) (process-mask actor-pause))
+ (none)
+ )
+ :code
+ (behavior ()
+ (ja-channel-push! 1 60)
+ (let ((t9-1 (-> (method-of-type nav-enemy nav-enemy-patrol) code)))
+ (if t9-1
+ ((the-as (function none) t9-1))
+ )
+ )
+ (none)
+ )
+ )
+
+(defstate nav-enemy-notice (ice-cube)
+ :virtual #t
+ :enter
+ (the-as (function none :behavior ice-cube) #f)
+ :exit
+ (the-as (function none :behavior ice-cube) #f)
+ :trans
+ (the-as (function none :behavior ice-cube) #f)
+ :code
+ (behavior ()
+ (dummy-57 self)
+ (set! (-> self nav-enemy-flags) (logand -3 (-> self nav-enemy-flags)))
+ (logclear! (-> self mask) (process-mask actor-pause))
+ (go ice-cube-face-player)
+ (none)
+ )
+ :post
+ (the-as (function none :behavior ice-cube) #f)
+ )
+
+(defstate ice-cube-face-player (ice-cube)
+ :event
+ ice-cube-default-event-handler
+ :enter
+ (behavior ()
+ (set! (-> self state-time) (-> *display* base-frame-counter))
+ (logior! (-> self nav-enemy-flags) 4)
+ (dummy-57 self)
+ (logclear! (-> self mask) (process-mask actor-pause))
+ (if (or (not *target*)
+ (logtest? (-> *target* state-flags) #x80f8)
+ (not (nav-enemy-test-point-near-nav-mesh? (-> *target* control shadow-pos)))
+ )
+ (go-virtual nav-enemy-patrol)
+ )
+ (set! (-> self tracking-player?) #t)
+ (set! (-> self target-pt quad) (-> (target-pos 0) quad))
+ (nav-enemy-neck-control-look-at)
+ (set-vector! (-> self collide-info transv) 0.0 114688.0 0.0 1.0)
+ (none)
+ )
+ :code
+ (behavior ()
+ (local-vars (gp-0 symbol))
+ (ja-channel-push! 1 60)
+ (let ((a0-1 (-> self skel root-channel 0)))
+ (set! (-> a0-1 frame-group) (the-as art-joint-anim (-> self draw art-group data 7)))
+ (set! (-> a0-1 param 0)
+ (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 7)) data 0 length) -1))
+ )
+ (set! (-> a0-1 param 1) 1.0)
+ (set! (-> a0-1 frame-num) 0.0)
+ (joint-control-channel-group! a0-1 (the-as art-joint-anim (-> self draw art-group data 7)) num-func-seek!)
+ )
+ (until (ja-done? 0)
+ (let ((f30-0 (-> self collide-info transv y)))
+ (integrate-for-enemy-with-move-to-ground!
+ (-> self collide-info)
+ (-> self collide-info transv)
+ (collide-kind background)
+ 32768.0
+ #f
+ #f
+ #f
+ )
+ (if (< 0.0 f30-0)
+ (set! (-> self collide-info transv y) f30-0)
+ )
+ )
+ (+! (-> self collide-info transv y) (* -544768.0 (-> *display* seconds-per-frame)))
+ (let* ((v1-26 (>= 0.0 (-> self collide-info transv y)))
+ (v1-27 (and v1-26 (logtest? (-> self collide-info status) 1)))
+ )
+ (set! gp-0 (dummy-60 self (not v1-27)))
+ )
+ (suspend)
+ (let ((a0-8 (-> self skel root-channel 0)))
+ (set! (-> a0-8 param 0) (the float (+ (-> a0-8 frame-group data 0 length) -1)))
+ (set! (-> a0-8 param 1) 1.0)
+ (joint-control-channel-group-eval! a0-8 (the-as art-joint-anim #f) num-func-seek!)
+ )
+ )
+ (while #t
+ (let ((s5-0 (and (>= 0.0 (-> self collide-info transv y)) (logtest? (-> self collide-info status) 1))))
+ (set! gp-0 (and s5-0 gp-0))
+ (if gp-0
+ (goto cfg-26)
+ )
+ (integrate-for-enemy-with-move-to-ground!
+ (-> self collide-info)
+ (-> self collide-info transv)
+ (collide-kind background)
+ 32768.0
+ #f
+ #f
+ #f
+ )
+ (+! (-> self collide-info transv y) (* -544768.0 (-> *display* seconds-per-frame)))
+ (set! gp-0 (dummy-60 self (not s5-0)))
+ )
+ (suspend)
+ )
+ (label cfg-26)
+ (let ((gp-1 (new 'stack-no-clear 'vector)))
+ (vector<-cspace! gp-1 (-> self node-list data 29))
+ (spawn (-> self part4) gp-1)
+ (vector<-cspace! gp-1 (-> self node-list data 25))
+ (spawn (-> self part4) gp-1)
+ )
+ (let ((a0-16 (-> self skel root-channel 0)))
+ (set! (-> a0-16 frame-group) (the-as art-joint-anim (-> self draw art-group data 8)))
+ (set! (-> a0-16 param 0)
+ (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 8)) data 0 length) -1))
+ )
+ (set! (-> a0-16 param 1) 1.0)
+ (set! (-> a0-16 frame-num) 0.0)
+ (joint-control-channel-group! a0-16 (the-as art-joint-anim (-> self draw art-group data 8)) num-func-seek!)
+ )
+ (until (ja-done? 0)
+ (suspend)
+ (let ((a0-17 (-> self skel root-channel 0)))
+ (set! (-> a0-17 param 0) (the float (+ (-> a0-17 frame-group data 0 length) -1)))
+ (set! (-> a0-17 param 1) 1.0)
+ (joint-control-channel-group-eval! a0-17 (the-as art-joint-anim #f) num-func-seek!)
+ )
+ )
+ (go ice-cube-become-mean)
+ (none)
+ )
+ :post
+ (the-as (function none :behavior ice-cube) nav-enemy-simple-post)
+ )
+
+(defstate ice-cube-become-mean (ice-cube)
+ :event
+ ice-cube-default-event-handler
+ :enter
+ (behavior ()
+ (set! (-> self draw force-lod) 0)
+ (logclear! (-> self mask) (process-mask actor-pause))
+ (dummy-57 self)
+ (none)
+ )
+ :code
+ (behavior ()
+ (ja-channel-push! 1 22)
+ (let ((gp-0 #f))
+ (let ((a0-1 (-> self skel root-channel 0)))
+ (set! (-> a0-1 frame-group) (the-as art-joint-anim (-> self draw art-group data 9)))
+ (set! (-> a0-1 param 0)
+ (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 9)) data 0 length) -1))
+ )
+ (set! (-> a0-1 param 1) 1.0)
+ (set! (-> a0-1 frame-num) 0.0)
+ (joint-control-channel-group! a0-1 (the-as art-joint-anim (-> self draw art-group data 9)) num-func-seek!)
+ )
+ (until (ja-done? 0)
+ (when (and (not gp-0) (>= (ja-aframe-num 0) 8.0))
+ (set! gp-0 #t)
+ (dummy-58 self)
+ )
+ (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!)
+ )
+ )
+ )
+ (go ice-cube-mean-turn-to-charge)
+ (none)
+ )
+ :post
+ (the-as (function none :behavior ice-cube) nav-enemy-simple-post)
+ )
+
+(defmethod dummy-54 ice-cube ((obj ice-cube) (arg0 vector))
+ (let* ((s4-0 (-> obj path curve num-cverts))
+ (s2-0 (nav-enemy-rnd-int-count s4-0))
+ (s5-0 (new 'stack-no-clear 'vector))
+ )
+ (dotimes (s3-0 s4-0)
+ (eval-path-curve-div! (-> obj path) s5-0 (the float s2-0) 'interp)
+ (when (>= (vector-vector-xz-distance s5-0 (-> obj collide-info trans)) 32768.0)
+ (when (dummy-51 obj s5-0 s5-0)
+ (set! (-> obj target-pt quad) (-> s5-0 quad))
+ (return #t)
+ )
+ )
+ (set! s2-0 (mod (+ s2-0 1) s4-0))
+ )
+ )
+ #f
+ )
+
+(defstate ice-cube-mean-turn-to-charge (ice-cube)
+ :event
+ ice-cube-default-event-handler
+ :enter
+ (behavior ()
+ (set! (-> self state-time) (-> *display* base-frame-counter))
+ (logior! (-> self nav-enemy-flags) 4)
+ (dummy-58 self)
+ (if (or (not *target*)
+ (logtest? (-> *target* state-flags) #x80f8)
+ (not (nav-enemy-test-point-near-nav-mesh? (-> *target* control shadow-pos)))
+ )
+ (go ice-cube-retract-spikes)
+ )
+ (set! (-> self tracking-player?) #t)
+ (set! (-> self target-pt quad) (-> (target-pos 0) quad))
+ (nav-enemy-neck-control-look-at)
+ (set-vector! (-> self collide-info transv) 0.0 114688.0 0.0 1.0)
+ (none)
+ )
+ :code
+ (behavior ()
+ (local-vars (gp-0 symbol))
+ (ja-channel-push! 1 22)
+ (let ((a0-1 (-> self skel root-channel 0)))
+ (set! (-> a0-1 frame-group) (the-as art-joint-anim (-> self draw art-group data 10)))
+ (set! (-> a0-1 param 0)
+ (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 10)) data 0 length) -1))
+ )
+ (set! (-> a0-1 param 1) 1.0)
+ (set! (-> a0-1 frame-num) 0.0)
+ (joint-control-channel-group! a0-1 (the-as art-joint-anim (-> self draw art-group data 10)) num-func-seek!)
+ )
+ (until (ja-done? 0)
+ (let ((f30-0 (-> self collide-info transv y)))
+ (integrate-for-enemy-with-move-to-ground!
+ (-> self collide-info)
+ (-> self collide-info transv)
+ (collide-kind background)
+ 32768.0
+ #f
+ #f
+ #f
+ )
+ (if (< 0.0 f30-0)
+ (set! (-> self collide-info transv y) f30-0)
+ )
+ )
+ (+! (-> self collide-info transv y) (* -544768.0 (-> *display* seconds-per-frame)))
+ (let* ((v1-26 (>= 0.0 (-> self collide-info transv y)))
+ (v1-27 (and v1-26 (logtest? (-> self collide-info status) 1)))
+ )
+ (set! gp-0 (dummy-60 self (not v1-27)))
+ )
+ (suspend)
+ (let ((a0-8 (-> self skel root-channel 0)))
+ (set! (-> a0-8 param 0) (the float (+ (-> a0-8 frame-group data 0 length) -1)))
+ (set! (-> a0-8 param 1) 1.0)
+ (joint-control-channel-group-eval! a0-8 (the-as art-joint-anim #f) num-func-seek!)
+ )
+ )
+ (while #t
+ (let ((s5-0 (and (>= 0.0 (-> self collide-info transv y)) (logtest? (-> self collide-info status) 1))))
+ (set! gp-0 (and s5-0 gp-0))
+ (if gp-0
+ (goto cfg-26)
+ )
+ (integrate-for-enemy-with-move-to-ground!
+ (-> self collide-info)
+ (-> self collide-info transv)
+ (collide-kind background)
+ 32768.0
+ #f
+ #f
+ #f
+ )
+ (+! (-> self collide-info transv y) (* -544768.0 (-> *display* seconds-per-frame)))
+ (set! gp-0 (dummy-60 self (not s5-0)))
+ )
+ (suspend)
+ )
+ (label cfg-26)
+ (let ((gp-1 (new 'stack-no-clear 'vector)))
+ (vector<-cspace! gp-1 (-> self node-list data 29))
+ (spawn (-> self part4) gp-1)
+ (vector<-cspace! gp-1 (-> self node-list data 25))
+ (spawn (-> self part4) gp-1)
+ )
+ (let ((a0-16 (-> self skel root-channel 0)))
+ (set! (-> a0-16 frame-group) (the-as art-joint-anim (-> self draw art-group data 11)))
+ (set! (-> a0-16 param 0)
+ (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 11)) data 0 length) -1))
+ )
+ (set! (-> a0-16 param 1) 1.0)
+ (set! (-> a0-16 frame-num) 0.0)
+ (joint-control-channel-group! a0-16 (the-as art-joint-anim (-> self draw art-group data 11)) num-func-seek!)
+ )
+ (until (ja-done? 0)
+ (suspend)
+ (let ((a0-17 (-> self skel root-channel 0)))
+ (set! (-> a0-17 param 0) (the float (+ (-> a0-17 frame-group data 0 length) -1)))
+ (set! (-> a0-17 param 1) 1.0)
+ (joint-control-channel-group-eval! a0-17 (the-as art-joint-anim #f) num-func-seek!)
+ )
+ )
+ (go ice-cube-mean-charge)
+ (none)
+ )
+ :post
+ (the-as (function none :behavior ice-cube) nav-enemy-simple-post)
+ )
+
+(defstate ice-cube-mean-charge (ice-cube)
+ :event
+ ice-cube-default-event-handler
+ :enter
+ (behavior ()
+ (set! (-> self state-time) (-> *display* base-frame-counter))
+ (dummy-58 self)
+ (logior! (-> self nav-enemy-flags) 4)
+ (set! (-> self next-skid-sound-time) (the-as uint (-> *display* base-frame-counter)))
+ (if (or (not *target*)
+ (logtest? (-> *target* state-flags) #x80f8)
+ (not (nav-enemy-test-point-near-nav-mesh? (-> *target* control shadow-pos)))
+ )
+ (go ice-cube-retract-spikes)
+ )
+ (set! (-> self target-speed) (-> self nav-info run-travel-speed))
+ (set! (-> self acceleration) (-> self nav-info run-acceleration))
+ (set! (-> self rotate-speed) (-> self nav-info run-rotate-speed))
+ (set! (-> self turn-time) (the-as int (-> self nav-info run-turn-time)))
+ (logclear! (-> self nav flags) (nav-control-flags bit8))
+ (set-root-prim-collide-with! (-> self collide-info) (collide-kind cak-2 cak-3 target crate enemy))
+ (set! (-> self track-target?) #t)
+ (set! (-> self slow-down?) #f)
+ (set! (-> self speed) 81920.0)
+ (set! (-> self prev-charge-angle-diff) 0.0)
+ (let ((a0-6 (-> self collide-info trans)))
+ (set! (-> self starting-pos quad) (-> a0-6 quad))
+ )
+ (set! (-> self charge-angle) (quaternion-y-angle (-> self collide-info quat)))
+ (none)
+ )
+ :exit
+ (behavior ()
+ (logior! (-> self nav flags) (nav-control-flags bit8))
+ (set-root-prim-collide-with! (-> self collide-info) (collide-kind target))
+ (none)
+ )
+ :trans
+ (behavior ()
+ (when (or (not *target*) (logtest? (-> *target* state-flags) 128))
+ (cond
+ ((= (-> self speed) 0.0)
+ (go ice-cube-mean-charge-done)
+ )
+ (else
+ (set! (-> self slow-down?) #t)
+ (set! (-> self track-target?) #f)
+ (set! (-> self tracking-player?) #f)
+ )
+ )
+ )
+ (if (-> self tracking-player?)
+ (set! (-> self target-pt quad) (-> (target-pos 0) quad))
+ )
+ (let ((gp-1 (new 'stack-no-clear 'vector))
+ (s5-0 (new 'stack-no-clear 'vector))
+ )
+ (vector-! gp-1 (-> self target-pt) (-> self starting-pos))
+ (vector-! s5-0 (-> self collide-info trans) (-> self starting-pos))
+ (let ((f30-0 (vector-xz-length gp-1))
+ (f28-0 (vector-xz-length s5-0))
+ )
+ (if (< (+ 14336.0 f30-0) f28-0)
+ (set! (-> self slow-down?) #t)
+ )
+ (let ((f0-5 (atan (-> gp-1 x) (-> gp-1 z)))
+ (gp-2 (-> self nav target-pos))
+ )
+ (if (< f30-0 (+ 8192.0 f28-0))
+ (set! (-> self track-target?) #f)
+ )
+ (cond
+ ((-> self track-target?)
+ (let ((f26-0 (deg-seek-smooth (-> self charge-angle) f0-5 (* 2730.6667 (-> *display* seconds-per-frame)) 0.25)))
+ (set! (-> self prev-charge-angle-diff) (deg- f26-0 (-> self charge-angle)))
+ (set! (-> self charge-angle) f26-0)
+ )
+ )
+ (else
+ (let ((f0-11 (* 0.99 (-> self prev-charge-angle-diff))))
+ (set! (-> self prev-charge-angle-diff) f0-11)
+ (+! (-> self charge-angle) f0-11)
+ )
+ )
+ )
+ (set-vector! gp-2 0.0 0.0 (+ 15360.0 (fmax f30-0 f28-0)) 1.0)
+ (vector-rotate-around-y! gp-2 gp-2 (-> self charge-angle))
+ (vector+! gp-2 gp-2 (-> self starting-pos))
+ (TODO-RENAME-28 (-> self nav) (collide-kind wall-object ground-object))
+ (dummy-11 (-> self nav) gp-2)
+ )
+ )
+ )
+ (set! (-> self nav travel y) 0.0)
+ (when (-> self slow-down?)
+ (set! (-> self speed)
+ (seek-with-smooth (-> self speed) 0.0 (* 81920.0 (-> *display* seconds-per-frame)) 0.8 1638.4)
+ )
+ (if (>= 0.0 (-> self speed))
+ (go ice-cube-mean-charge-done)
+ )
+ (when (zero? (nav-enemy-rnd-int-count 45))
+ (let ((gp-3 (new 'stack-no-clear 'vector)))
+ (vector<-cspace! gp-3 (-> self node-list data 29))
+ (spawn (-> self part4) gp-3)
+ (vector<-cspace! gp-3 (-> self node-list data 25))
+ (spawn (-> self part4) gp-3)
+ )
+ )
+ (when (>= (-> *display* base-frame-counter) (the-as int (-> self next-skid-sound-time)))
+ (set! (-> self next-skid-sound-time)
+ (the-as uint (+ (-> *display* base-frame-counter) (nav-enemy-rnd-int-range 60 120)))
+ )
+ (sound-play-by-name
+ (static-sound-name "ice-stop")
+ (new-sound-id)
+ (the int (* 10.24 (the float (the int (* 0.0012207031 (-> self speed))))))
+ 0
+ 0
+ 1
+ #t
+ )
+ )
+ )
+ (let ((f30-1 (* (vector-xz-length (-> self nav travel)) (-> *display* frames-per-second))))
+ (if (< f30-1 13107.2)
+ (go ice-cube-mean-charge-done)
+ )
+ (set! (-> self collide-info transv quad) (-> self nav travel quad))
+ (if (< (-> self speed) f30-1)
+ (set! f30-1 (-> self speed))
+ )
+ (set! (-> self anim-blend) (fmin 1.0 (* 0.000016276043 f30-1)))
+ (vector-normalize! (-> self collide-info transv) f30-1)
+ )
+ (set! (-> self collide-info transv y) (+ -36864.0 (-> self collide-info transv y)))
+ (quaternion-rotate-y-to-vector!
+ (-> self collide-info quat)
+ (-> self collide-info quat)
+ (the-as quaternion (-> self collide-info transv))
+ (* 16384.0 (-> *display* seconds-per-frame))
+ )
+ (integrate-for-enemy-with-move-to-ground!
+ (-> self collide-info)
+ (-> self collide-info transv)
+ (collide-kind background)
+ 8192.0
+ #f
+ #f
+ #f
+ )
+ (none)
+ )
+ :code
+ (behavior ()
+ (ja-channel-push! 1 60)
+ (let ((gp-0 (-> self skel root-channel 0)))
+ (joint-control-channel-group-eval!
+ gp-0
+ (the-as art-joint-anim (-> self draw art-group data 12))
+ num-func-identity
+ )
+ (set! (-> gp-0 frame-num) 0.0)
+ )
+ (until (-> self slow-down?)
+ (suspend)
+ (let ((a0-2 (-> self skel root-channel 0)))
+ (set! (-> a0-2 param 0) 1.0)
+ (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-loop!)
+ )
+ )
+ (ja-channel-push! 2 21)
+ (let ((gp-1 (-> self skel root-channel 0)))
+ (joint-control-channel-group-eval!
+ gp-1
+ (the-as art-joint-anim (-> self draw art-group data 17))
+ num-func-identity
+ )
+ (set! (-> gp-1 frame-num) 0.0)
+ )
+ (let ((a0-5 (-> self skel root-channel 1)))
+ (set! (-> a0-5 frame-interp) (-> self anim-blend))
+ (set! (-> a0-5 frame-group) (the-as art-joint-anim (-> self draw art-group data 13)))
+ (set! (-> a0-5 param 0) 0.0)
+ (joint-control-channel-group-eval!
+ a0-5
+ (the-as art-joint-anim (-> self draw art-group data 13))
+ num-func-chan
+ )
+ )
+ (while #t
+ (suspend)
+ (let ((a0-6 (-> self skel root-channel 0)))
+ (set! (-> a0-6 param 0) 1.0)
+ (joint-control-channel-group-eval! a0-6 (the-as art-joint-anim #f) num-func-loop!)
+ )
+ (let ((a0-7 (-> self skel root-channel 1)))
+ (set! (-> a0-7 frame-interp) (-> self anim-blend))
+ (set! (-> a0-7 param 0) 0.0)
+ (joint-control-channel-group-eval! a0-7 (the-as art-joint-anim #f) num-func-chan)
+ )
+ )
+ (none)
+ )
+ :post
+ (the-as (function none :behavior ice-cube) nav-enemy-simple-post)
+ )
+
+(defstate ice-cube-mean-charge-done (ice-cube)
+ :event
+ ice-cube-default-event-handler
+ :code
+ (behavior ()
+ (dummy-58 self)
+ (nav-enemy-neck-control-inactive)
+ (go ice-cube-retract-spikes)
+ (none)
+ )
+ )
+
+(defstate ice-cube-retract-spikes (ice-cube)
+ :event
+ ice-cube-default-event-handler
+ :code
+ (behavior ()
+ (dummy-58 self)
+ (nav-enemy-neck-control-inactive)
+ (ja-channel-push! 1 21)
+ (let ((gp-0 #f))
+ (let ((a0-2 (-> self skel root-channel 0)))
+ (set! (-> a0-2 frame-group) (the-as art-joint-anim (-> self draw art-group data 14)))
+ (set! (-> a0-2 param 0)
+ (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 14)) data 0 length) -1))
+ )
+ (set! (-> a0-2 param 1) 1.0)
+ (set! (-> a0-2 frame-num) 0.0)
+ (joint-control-channel-group! a0-2 (the-as art-joint-anim (-> self draw art-group data 14)) num-func-seek!)
+ )
+ (until (ja-done? 0)
+ (when (and (not gp-0) (>= (ja-aframe-num 0) 3.0))
+ (set! gp-0 #t)
+ (dummy-57 self)
+ )
+ (suspend)
+ (let ((a0-5 (-> self skel root-channel 0)))
+ (set! (-> a0-5 param 0) (the float (+ (-> a0-5 frame-group data 0 length) -1)))
+ (set! (-> a0-5 param 1) 1.0)
+ (joint-control-channel-group-eval! a0-5 (the-as art-joint-anim #f) num-func-seek!)
+ )
+ )
+ )
+ (go ice-cube-tired)
+ (none)
+ )
+ :post
+ (the-as (function none :behavior ice-cube) nav-enemy-simple-post)
+ )
+
+(defstate ice-cube-tired (ice-cube)
+ :event
+ ice-cube-default-event-handler
+ :enter
+ (behavior ()
+ (set! (-> self state-time) (-> *display* base-frame-counter))
+ (none)
+ )
+ :trans
+ (behavior ()
+ (when (>= (- (-> *display* base-frame-counter) (-> self state-time)) 600)
+ (cond
+ ((or (not *target*) (< (-> self enemy-info idle-distance)
+ (vector-vector-distance (-> self collide-info trans) (-> *target* control trans))
+ )
+ )
+ (go-virtual nav-enemy-idle)
+ )
+ ((TODO-RENAME-46 self (-> self nav-info notice-distance))
+ (go ice-cube-face-player)
+ )
+ (else
+ (go-virtual nav-enemy-patrol)
+ )
+ )
+ )
+ (none)
+ )
+ :code
+ (behavior ()
+ (ja-channel-push! 1 60)
+ (let ((a0-1 (-> self skel root-channel 0)))
+ (set! (-> a0-1 frame-group) (the-as art-joint-anim (-> self draw art-group data 16)))
+ (set! (-> a0-1 param 0)
+ (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 16)) data 0 length) -1))
+ )
+ (set! (-> a0-1 param 1) 1.0)
+ (set! (-> a0-1 frame-num) 0.0)
+ (joint-control-channel-group! a0-1 (the-as art-joint-anim (-> self draw art-group data 16)) num-func-seek!)
+ )
+ (until (ja-done? 0)
+ (suspend)
+ (let ((a0-2 (-> self skel root-channel 0)))
+ (set! (-> a0-2 param 0) (the float (+ (-> a0-2 frame-group data 0 length) -1)))
+ (set! (-> a0-2 param 1) 1.0)
+ (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-seek!)
+ )
+ )
+ (ja-channel-push! 1 60)
+ (while #t
+ (let ((a0-5 (-> self skel root-channel 0)))
+ (set! (-> a0-5 frame-group) (the-as art-joint-anim (-> self draw art-group data 15)))
+ (set! (-> a0-5 param 0)
+ (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 15)) data 0 length) -1))
+ )
+ (set! (-> a0-5 param 1) 1.0)
+ (set! (-> a0-5 frame-num) 0.0)
+ (joint-control-channel-group! a0-5 (the-as art-joint-anim (-> self draw art-group data 15)) num-func-seek!)
+ )
+ (until (ja-done? 0)
+ (suspend)
+ (let ((a0-6 (-> self skel root-channel 0)))
+ (set! (-> a0-6 param 0) (the float (+ (-> a0-6 frame-group data 0 length) -1)))
+ (set! (-> a0-6 param 1) 1.0)
+ (joint-control-channel-group-eval! a0-6 (the-as art-joint-anim #f) num-func-seek!)
+ )
+ )
+ )
+ (none)
+ )
+ :post
+ (the-as (function none :behavior ice-cube) nav-enemy-simple-post)
+ )
+
+(defstate ice-cube-shatter (ice-cube)
+ :code
+ (behavior ()
+ (logclear! (-> self mask) (process-mask actor-pause))
+ (let ((gp-0 (new 'stack-no-clear 'vector)))
+ (vector<-cspace! gp-0 (-> self node-list data 3))
+ (spawn (-> self part3) gp-0)
+ )
+ (drop-pickup (-> self enemy-info) #t *entity-pool* (-> self enemy-info) 0)
+ (clear-collide-with-as (-> self collide-info))
+ (dummy-18 self)
+ (let ((gp-1 (new 'stack 'joint-exploder-tuning 1)))
+ (set! (-> gp-1 duration) (the-as uint 900))
+ (set! (-> gp-1 gravity) -327680.0)
+ (set! (-> gp-1 fountain-rand-transv-lo quad) (-> (target-pos 0) quad))
+ (let ((s5-1 (get-process *default-dead-pool* joint-exploder #x4000)))
+ (when s5-1
+ (let ((t9-8 (method-of-type joint-exploder activate)))
+ (t9-8 (the-as joint-exploder s5-1) self 'joint-exploder (the-as pointer #x70004000))
+ )
+ (run-now-in-process
+ s5-1
+ joint-exploder-init-by-other
+ *ice-cube-break-sg*
+ 2
+ gp-1
+ (new 'static 'joint-exploder-static-params
+ :joints
+ (new
+ 'static
+ 'boxed-array
+ :type joint-exploder-static-joint-params :length 22 :allocated-length 22
+ (new 'static 'joint-exploder-static-joint-params :joint-index 28)
+ (new 'static 'joint-exploder-static-joint-params :joint-index 23)
+ (new 'static 'joint-exploder-static-joint-params :joint-index 8)
+ (new 'static 'joint-exploder-static-joint-params :joint-index 7)
+ (new 'static 'joint-exploder-static-joint-params :joint-index 26)
+ (new 'static 'joint-exploder-static-joint-params :joint-index 21)
+ (new 'static 'joint-exploder-static-joint-params :joint-index 24)
+ (new 'static 'joint-exploder-static-joint-params :joint-index 29)
+ (new 'static 'joint-exploder-static-joint-params :joint-index 11)
+ (new 'static 'joint-exploder-static-joint-params :joint-index 4)
+ (new 'static 'joint-exploder-static-joint-params :joint-index 6)
+ (new 'static 'joint-exploder-static-joint-params :joint-index 5)
+ (new 'static 'joint-exploder-static-joint-params :joint-index 12)
+ (new 'static 'joint-exploder-static-joint-params :joint-index 13)
+ (new 'static 'joint-exploder-static-joint-params :joint-index 14)
+ (new 'static 'joint-exploder-static-joint-params :joint-index 15)
+ (new 'static 'joint-exploder-static-joint-params :joint-index 16)
+ (new 'static 'joint-exploder-static-joint-params :joint-index 17)
+ (new 'static 'joint-exploder-static-joint-params :joint-index 18)
+ (new 'static 'joint-exploder-static-joint-params :joint-index 19)
+ (new 'static 'joint-exploder-static-joint-params :joint-index 3)
+ (new 'static 'joint-exploder-static-joint-params :joint-index 20)
+ )
+ )
+ )
+ (-> s5-1 ppointer)
+ )
+ )
+ )
+ (sound-play-by-name (static-sound-name "ice-explode") (new-sound-id) 1024 0 0 1 #t)
+ (suspend)
+ (ja-channel-set! 0)
+ (ja-post)
+ (until (not (-> self child))
+ (suspend)
+ )
+ (none)
+ )
+ )
+
+
+
+
diff --git a/goal_src/levels/snow/snow-ball.gc b/goal_src/levels/snow/snow-ball.gc
index ec504d8e3c..6897c2ae07 100644
--- a/goal_src/levels/snow/snow-ball.gc
+++ b/goal_src/levels/snow/snow-ball.gc
@@ -5,3 +5,654 @@
;; name in dgo: snow-ball
;; dgos: L1, SNO
+;; DECOMP BEGINS
+
+(deftype snow-ball-shadow (process-drawable)
+ ()
+ :heap-base #x40
+ :method-count-assert 20
+ :size-assert #xb0
+ :flag-assert #x14004000b0
+ (:states
+ snow-ball-shadow-idle
+ )
+ )
+
+
+(deftype snow-ball-junction (structure)
+ ((enter-time int64 :offset-assert 0)
+ (exit-time int64 :offset-assert 8)
+ )
+ :method-count-assert 9
+ :size-assert #x10
+ :flag-assert #x900000010
+ )
+
+
+(deftype snow-ball-path-info (structure)
+ ((hug-path? symbol :offset-assert 0)
+ (path-pos vector :inline :offset-assert 16)
+ )
+ :method-count-assert 9
+ :size-assert #x20
+ :flag-assert #x900000020
+ )
+
+
+(deftype snow-ball-roller (process-drawable)
+ ((root-override collide-shape-moving :offset 112)
+ (which-path int32 :offset-assert 176)
+ (path-u float :offset-assert 180)
+ (path-speed float :offset-assert 184)
+ (path-length float :offset-assert 188)
+ (path-fall-u float :offset-assert 192)
+ (path-coming-out-u float :offset-assert 196)
+ (path-faded-up-u float :offset-assert 200)
+ (delay-til-bounce int32 :offset-assert 204)
+ (rolling-sound-id sound-id :offset-assert 208)
+ (rolling-sound-enabled? symbol :offset-assert 212)
+ (last-bounce-time int64 :offset-assert 216)
+ (hit-player-time int64 :offset-assert 224)
+ (path-info snow-ball-path-info :inline :offset-assert 240)
+ (junctions snow-ball-junction 4 :inline :offset-assert 272)
+ )
+ :heap-base #xe0
+ :method-count-assert 23
+ :size-assert #x150
+ :flag-assert #x1700e00150
+ (:methods
+ (follow-path (_type_) none 20)
+ (play-landing-sound (_type_ float) sound-id 21)
+ (dummy-22 (_type_ process-drawable) none 22)
+ )
+ (:states
+ snow-ball-roller-idle
+ )
+ )
+
+
+(deftype snow-ball (process)
+ ((child-override (pointer snow-ball-roller) :offset 20)
+ (state-time int64 :offset-assert 112)
+ (last-path-picked int32 :offset-assert 120)
+ (same-path-picked-count int32 :offset-assert 124)
+ (delay-til-next int32 :offset-assert 128)
+ (path curve-control 2 :offset-assert 132)
+ )
+ :heap-base #x20
+ :method-count-assert 16
+ :size-assert #x8c
+ :flag-assert #x100020008c
+ (:methods
+ (dummy-14 (_type_ (inline-array snow-ball-junction) float int) symbol 14)
+ (dummy-15 (_type_ (inline-array snow-ball-junction) int) symbol 15)
+ )
+ (:states
+ snow-ball-idle
+ )
+ )
+
+
+(defskelgroup *snow-ball-sg* snow-ball
+ 0
+ 2
+ ((1 (meters 999999)))
+ :bounds (static-spherem 0 0 0 3)
+ :longest-edge (meters 0)
+ )
+
+(defskelgroup *snow-ball-shadow-sg* snow-ball
+ 3
+ -1
+ ((4 (meters 999999)))
+ :bounds (static-spherem 0 -1.5 0 2)
+ :longest-edge (meters 0)
+ :shadow 5
+ )
+
+(define
+ *snow-ball-shadow-control*
+ (new 'static 'shadow-control :settings (new 'static 'shadow-settings
+ :center
+ (new 'static 'vector :w (the-as float #xa))
+ :shadow-dir
+ (new 'static 'vector :y -1.0 :w 245760.0)
+ :bot-plane (new 'static 'plane :y 1.0 :w 26624.0)
+ :top-plane (new 'static 'plane :y 1.0)
+ :fade-dist 819200.0
+ )
+ )
+ )
+
+(defstate snow-ball-shadow-idle (snow-ball-shadow)
+ :trans
+ (behavior ()
+ (set! (-> self root trans quad) (-> (the-as process-drawable (-> self parent 0)) root trans quad))
+ (dummy-14 (-> self draw shadow-ctrl))
+ 0
+ (none)
+ )
+ :code
+ (behavior ()
+ (while #t
+ (logior! (-> self mask) (process-mask sleep-code))
+ (suspend)
+ )
+ (none)
+ )
+ :post
+ (the-as (function none :behavior snow-ball-shadow) ja-post)
+ )
+
+(defbehavior snow-ball-shadow-init-by-other snow-ball-shadow ()
+ (stack-size-set! (-> self main-thread) 128)
+ (logclear! (-> self mask) (process-mask actor-pause movie enemy platform projectile))
+ (set! (-> self root) (new 'process 'trsqv))
+ (set! (-> self root trans quad) (-> (the-as process-drawable (-> self parent 0)) root trans quad))
+ (quaternion-identity! (-> self root quat))
+ (vector-identity! (-> self root scale))
+ (initialize-skeleton self *snow-ball-shadow-sg* '())
+ (ja-channel-set! 1)
+ (let ((gp-0 (-> self skel root-channel 0)))
+ (joint-control-channel-group-eval!
+ gp-0
+ (the-as art-joint-anim (-> self draw art-group data 6))
+ num-func-identity
+ )
+ (set! (-> gp-0 frame-num) 0.0)
+ )
+ (set! (-> self draw shadow-ctrl) *snow-ball-shadow-control*)
+ (go snow-ball-shadow-idle)
+ (none)
+ )
+
+(defbehavior snow-ball-roller-path-init snow-ball-roller ()
+ (set! (-> self path-u) 0.0)
+ (set! (-> self path-length) (path-distance (-> self path)))
+ (none)
+ )
+
+(defmethod follow-path snow-ball-roller ((obj snow-ball-roller))
+ (let ((s5-0 (-> obj path-info)))
+ (set! (-> s5-0 hug-path?) #f)
+ (let ((s4-0 (new 'stack-no-clear 'vector)))
+ (set! (-> s4-0 quad) (-> s5-0 path-pos quad))
+ (eval-path-curve! (-> obj path) (-> s5-0 path-pos) (-> obj path-u) 'interp)
+ (let ((f0-1 (-> obj path-coming-out-u)))
+ (when (< (-> obj path-u) f0-1)
+ (set! (-> s5-0 path-pos y) (+ (- -20480.0 (* -20480.0 (/ (-> obj path-u) f0-1))) (-> s5-0 path-pos y)))
+ (set! (-> s5-0 hug-path?) #t)
+ )
+ )
+ (let ((f0-6 (-> obj path-faded-up-u)))
+ (cond
+ ((< (-> obj path-u) f0-6)
+ (let* ((f0-7 (/ (-> obj path-u) f0-6))
+ (f0-8 (* f0-7 f0-7))
+ )
+ (set-vector! (-> obj draw color-mult) f0-8 f0-8 f0-8 1.0)
+ )
+ )
+ (else
+ (vector-identity! (-> obj draw color-mult))
+ )
+ )
+ )
+ (cond
+ ((>= (-> obj path-u) (-> obj path-fall-u))
+ (set! (-> s5-0 path-pos y) -409600.0)
+ (set! (-> s5-0 path-pos x) (+ (-> s4-0 x) (-> obj root-override transv x)))
+ (set! (-> s5-0 path-pos z) (+ (-> s4-0 z) (-> obj root-override transv z)))
+ (set! (-> obj rolling-sound-enabled?) #f)
+ )
+ (else
+ (set! (-> obj root-override transv x) (- (-> s5-0 path-pos x) (-> s4-0 x)))
+ (set! (-> obj root-override transv z) (- (-> s5-0 path-pos z) (-> s4-0 z)))
+ )
+ )
+ )
+ )
+ (none)
+ )
+
+(defmethod play-landing-sound snow-ball-roller ((obj snow-ball-roller) (arg0 float))
+ (let ((f30-0 (* 0.0018780049 (fmin 53248.0 (fmax 0.0 (+ -4096.0 (fabs arg0)))))))
+ (sound-play-by-name (static-sound-name "snowball-land") (new-sound-id) (the int (* 10.24 f30-0)) 0 0 1 #t)
+ )
+ )
+
+(defbehavior snow-ball-roller-path-update snow-ball-roller ()
+ (local-vars (f0-5 float))
+ (let ((f0-0 (-> self root-override trans y)))
+ (+! (-> self root-override transv y) (* -491520.0 (-> *display* seconds-per-frame)))
+ (let ((f30-0 (+ f0-0 (* (-> self root-override transv y) (-> *display* seconds-per-frame)))))
+ (follow-path self)
+ (let ((a1-0 (new 'stack-no-clear 'vector)))
+ (let ((a0-1 (-> self path-info)))
+ (set! (-> a1-0 quad) (-> a0-1 path-pos quad))
+ )
+ (set! (-> a1-0 y) (+ 9216.0 (-> a1-0 y)))
+ (cond
+ ((-> self path-info hug-path?)
+ (move-to-point! (-> self root-override) a1-0)
+ (set! (-> self root-override transv y) 0.0)
+ )
+ ((begin (set! f0-5 (- f30-0 (-> a1-0 y))) (< 0.0 f0-5))
+ (+! (-> a1-0 y) f0-5)
+ (move-to-point! (-> self root-override) a1-0)
+ )
+ (else
+ (move-to-point! (-> self root-override) a1-0)
+ (let ((f0-7 (-> self root-override transv y)))
+ (cond
+ ((>= -40960.0 f0-7)
+ (set! (-> self root-override transv y) (* 0.4 (- f0-7)))
+ (play-landing-sound self (-> self root-override transv y))
+ )
+ (else
+ (set! (-> self root-override transv y) 0.0)
+ )
+ )
+ )
+ (when (< (-> self path-u) (-> self path-fall-u))
+ (when (>= (- (-> *display* base-frame-counter) (-> self last-bounce-time)) (-> self delay-til-bounce))
+ (let ((f0-13 (rand-vu-float-range 8192.0 20480.0)))
+ (+! (-> self root-override transv y) f0-13)
+ (play-landing-sound self f0-13)
+ )
+ (set! (-> self last-bounce-time) (-> *display* base-frame-counter))
+ (set! (-> self delay-til-bounce) (rand-vu-int-range 300 2100))
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ (let ((s4-0 (new 'stack-no-clear 'vector)))
+ (TODO-RENAME-14 (-> self path) s4-0 (-> self path-u))
+ (let ((gp-0 (new 'stack-no-clear 'matrix)))
+ (let ((s5-0 (new 'stack-no-clear 'matrix)))
+ (let ((s3-0 (new 'stack-no-clear 'vector)))
+ (vector-negate! s3-0 (-> *standard-dynamics* gravity-normal))
+ (forward-down->inv-matrix gp-0 s4-0 s3-0)
+ )
+ (matrix-rotate-x! s5-0 (* 1.1317686 (-> self path-u) (-> self path-length)))
+ (matrix*! gp-0 s5-0 gp-0)
+ )
+ (matrix->quaternion (-> self root-override quat) gp-0)
+ )
+ )
+ (+! (-> self path-u) (* (-> self path-speed) (-> *display* seconds-per-frame)))
+ (if (< 1.0 (-> self path-u))
+ (set! (-> self path-u) 1.0)
+ )
+ (let ((f0-23 (- 819200.0 (-> self root-override trans y))))
+ (when (>= f0-23 0.0)
+ (cond
+ ((>= f0-23 245760.0)
+ (deactivate self)
+ )
+ (else
+ (let ((f0-25 (- 1.0 (* 0.0000040690106 f0-23))))
+ (set! (-> self root-override scale x) f0-25)
+ (set! (-> self root-override scale y) f0-25)
+ (set! (-> self root-override scale z) f0-25)
+ )
+ )
+ )
+ )
+ )
+ (let ((v1-54 (< (vector-vector-distance (-> self root-override trans) (math-camera-pos)) 163840.0)))
+ (cond
+ ((zero? (-> self rolling-sound-id))
+ (if (and v1-54 (-> self rolling-sound-enabled?))
+ (set! (-> self rolling-sound-id) (sound-play-by-name
+ (static-sound-name "snowball-roll")
+ (new-sound-id)
+ 1024
+ 0
+ 0
+ 1
+ (the-as symbol (-> self root-override trans))
+ )
+ )
+ )
+ )
+ ((and v1-54 (-> self rolling-sound-enabled?))
+ (sound-play-by-name
+ (static-sound-name "snowball-roll")
+ (-> self rolling-sound-id)
+ 1024
+ 0
+ 0
+ 1
+ (the-as symbol (-> self root-override trans))
+ )
+ )
+ (else
+ (sound-stop (-> self rolling-sound-id))
+ (set! (-> self rolling-sound-id) (new 'static 'sound-id))
+ 0
+ )
+ )
+ )
+ (none)
+ )
+
+(defmethod dummy-22 snow-ball-roller ((obj snow-ball-roller) (arg0 process-drawable))
+ (with-pp
+ (cond
+ ((< (+ 4096.0 (-> arg0 root trans y)) (-> obj root-override trans y))
+ (let ((f0-2 81920.0))
+ (+! (-> obj root-override transv y) f0-2)
+ (play-landing-sound obj f0-2)
+ )
+ )
+ (else
+ (let ((f0-3 24576.0))
+ (+! (-> obj root-override transv y) f0-3)
+ (play-landing-sound obj f0-3)
+ )
+ )
+ )
+ (let ((s4-0 (new 'stack-no-clear 'vector)))
+ (let ((s3-0 (new 'stack-no-clear 'vector)))
+ (vector-! s4-0 (-> arg0 root trans) (-> obj root-override trans))
+ (set! (-> s4-0 y) 0.0)
+ (vector-normalize! s4-0 1.0)
+ (TODO-RENAME-14 (-> obj path) s3-0 (-> obj path-u))
+ (set! (-> s3-0 y) 0.0)
+ (vector-normalize! s3-0 1.0)
+ (let* ((f28-0 (atan (-> s4-0 x) (-> s4-0 z)))
+ (f30-0 (atan (-> s3-0 x) (-> s3-0 z)))
+ (f0-11 (deg- f28-0 f30-0))
+ )
+ (when (< (fabs f0-11) 10922.667)
+ (let ((f30-1 (+ f30-0 (if (>= f0-11 0.0)
+ 10922.667
+ -10922.667
+ )
+ )
+ )
+ )
+ (set-vector! s4-0 (sin f30-1) 0.0 (cos f30-1) 1.0)
+ )
+ )
+ )
+ )
+ (vector-normalize! s4-0 25600.0)
+ (vector+! s4-0 s4-0 (-> obj root-override trans))
+ (vector-! s4-0 s4-0 (-> arg0 root trans))
+ (set! (-> s4-0 y) 0.0)
+ (let ((f30-2 (vector-length s4-0)))
+ (vector-normalize! s4-0 1.0)
+ (let ((a1-17 (new 'stack-no-clear 'event-message-block)))
+ (set! (-> a1-17 from) pp)
+ (set! (-> a1-17 num-params) 2)
+ (set! (-> a1-17 message) 'attack)
+ (set! (-> a1-17 param 0) (the-as uint #f))
+ (let ((v1-20 (new 'static 'attack-info :mask #xc2)))
+ (set! (-> v1-20 vector quad) (-> s4-0 quad))
+ (set! (-> v1-20 shove-up) 12288.0)
+ (set! (-> v1-20 shove-back) f30-2)
+ (set! (-> a1-17 param 1) (the-as uint v1-20))
+ )
+ (send-event-function arg0 a1-17)
+ )
+ )
+ )
+ (none)
+ )
+ )
+
+(defstate snow-ball-roller-idle (snow-ball-roller)
+ :event
+ (behavior ((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)
+ (do-push-aways! (-> self root-override))
+ (when (>= (- (-> *display* base-frame-counter) (-> self hit-player-time)) 150)
+ (set! (-> self hit-player-time) (-> *display* base-frame-counter))
+ (dummy-22 self *target*)
+ )
+ )
+ )
+ )
+ )
+ )
+ :enter
+ (behavior ()
+ (set! (-> self last-bounce-time) (-> *display* base-frame-counter))
+ (snow-ball-roller-path-init)
+ (none)
+ )
+ :exit
+ (behavior ()
+ (set! (-> self rolling-sound-enabled?) #f)
+ (when (nonzero? (-> self rolling-sound-id))
+ (sound-stop (-> self rolling-sound-id))
+ (set! (-> self rolling-sound-id) (new 'static 'sound-id))
+ 0
+ )
+ (none)
+ )
+ :trans
+ (behavior ()
+ (snow-ball-roller-path-update)
+ (none)
+ )
+ :code
+ (behavior ()
+ (while #t
+ (logior! (-> self mask) (process-mask sleep-code))
+ (suspend)
+ )
+ (none)
+ )
+ :post
+ (the-as (function none :behavior snow-ball-roller) transform-post)
+ )
+
+(defbehavior snow-ball-roller-init-by-other snow-ball-roller ((arg0 entity-actor) (arg1 snow-ball) (arg2 float) (arg3 int) (arg4 (inline-array snow-ball-junction)))
+ (set! (-> self rolling-sound-id) (new 'static 'sound-id))
+ (set! (-> self rolling-sound-enabled?) #t)
+ (set! (-> self path-speed) arg2)
+ (set! (-> self which-path) arg3)
+ (set! (-> self hit-player-time) 0)
+ (set! (-> self entity) arg0)
+ (dotimes (s3-0 4)
+ (mem-copy! (the-as pointer (-> self junctions s3-0)) (the-as pointer (-> arg4 s3-0)) 16)
+ )
+ (let ((s4-1 (new 'process 'collide-shape-moving self (collide-list-enum hit-by-player))))
+ (set! (-> s4-1 dynam) (copy *standard-dynamics* 'process))
+ (set! (-> s4-1 reaction) default-collision-reaction)
+ (set! (-> s4-1 no-reaction)
+ (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing)
+ )
+ (let ((s3-1 (new 'process 'collide-shape-prim-sphere s4-1 (the-as uint 0))))
+ (set! (-> s3-1 prim-core collide-as) (collide-kind enemy))
+ (set! (-> s3-1 collide-with) (collide-kind target))
+ (set! (-> s3-1 prim-core action) (collide-action solid))
+ (set! (-> s3-1 prim-core offense) (collide-offense indestructible))
+ (set-vector! (-> s3-1 local-sphere) 0.0 0.0 0.0 10240.0)
+ (set-root-prim! s4-1 s3-1)
+ )
+ (set! (-> s4-1 nav-radius) (* 0.75 (-> s4-1 root-prim local-sphere w)))
+ (backup-collide-with-as s4-1)
+ (set! (-> self root-override) s4-1)
+ )
+ (set-vector! (-> self root-override transv) 0.0 0.0 0.0 1.0)
+ (process-drawable-from-entity! self arg0)
+ (initialize-skeleton self *snow-ball-sg* '())
+ (logclear! (-> self mask) (process-mask actor-pause))
+ (set! (-> self path) (new 'process 'curve-control self 'path (the float (+ arg3 1))))
+ (logior! (-> self path flags) (path-control-flag display draw-line draw-point draw-text))
+ (let ((v1-33 (-> self which-path)))
+ (cond
+ ((zero? v1-33)
+ (set! (-> self path-fall-u) 0.8667)
+ (set! (-> self path-coming-out-u) 0.05)
+ (set! (-> self path-faded-up-u) 0.075)
+ )
+ ((= v1-33 1)
+ (set! (-> self path-fall-u) 0.9105)
+ (set! (-> self path-coming-out-u) 0.05)
+ (set! (-> self path-faded-up-u) 0.075)
+ )
+ )
+ )
+ (set! (-> self delay-til-bounce) (rand-vu-int-range 900 2100))
+ (let ((gp-1 (get-process *default-dead-pool* snow-ball-shadow #x4000)))
+ (when gp-1
+ (let ((t9-11 (method-of-type snow-ball-shadow activate)))
+ (t9-11 (the-as snow-ball-shadow gp-1) self 'snow-ball-shadow (the-as pointer #x70004000))
+ )
+ (run-now-in-process gp-1 snow-ball-shadow-init-by-other)
+ (-> gp-1 ppointer)
+ )
+ )
+ (go snow-ball-roller-idle)
+ (none)
+ )
+
+(defmethod dummy-14 snow-ball ((obj snow-ball) (arg0 (inline-array snow-ball-junction)) (arg1 float) (arg2 int))
+ (local-vars (v1-0 (pointer float)))
+ (if (zero? arg2)
+ (set! v1-0 (new 'static 'array float 8 0.3309 0.36 0.4691 0.5061 0.6904 0.7264 0.864 0.8667))
+ (set! v1-0 (new 'static 'array float 8 0.3344 0.3528 0.4919 0.5246 0.6967 0.7272 0.8677 0.9105))
+ )
+ (let ((a0-4 (* arg1 (-> *display* seconds-per-frame)))
+ (a1-1 (-> arg0 0))
+ (a2-2 (-> *display* base-frame-counter))
+ )
+ (dotimes (a3-1 4)
+ (set! (-> a1-1 enter-time) (+ a2-2 (the int (/ (-> v1-0 0) a0-4))))
+ (set! (-> a1-1 exit-time) (+ a2-2 (the int (/ (-> v1-0 1) a0-4))))
+ (set! v1-0 (&-> v1-0 2))
+ (&+! a1-1 16)
+ )
+ )
+ #f
+ )
+
+(defmethod dummy-15 snow-ball ((obj snow-ball) (arg0 (inline-array snow-ball-junction)) (arg1 int))
+ (local-vars (v0-0 symbol))
+ (let ((v1-0 (-> obj child-override)))
+ (while v1-0
+ (let ((a0-1 (-> arg0 0))
+ (a3-1 (-> v1-0 0 junctions))
+ )
+ (dotimes (t0-0 3)
+ (if (and (>= (-> a3-1 0 exit-time) (-> a0-1 enter-time)) (>= (-> a0-1 exit-time) (-> a3-1 0 enter-time)))
+ (return #f)
+ )
+ (&+! a0-1 16)
+ (set! a3-1 (the-as (inline-array snow-ball-junction) (-> a3-1 1)))
+ )
+ (when (= arg1 (-> v1-0 0 which-path))
+ (if (>= (-> a3-1 0 exit-time) (-> a0-1 enter-time))
+ (return #f)
+ )
+ )
+ )
+ (set! v1-0 (the-as (pointer snow-ball-roller) (-> v1-0 0 brother)))
+ )
+ )
+ (return #t)
+ v0-0
+ )
+
+(defstate snow-ball-idle (snow-ball)
+ :code
+ (behavior ()
+ (local-vars (gp-0 int))
+ (set! (-> self state-time) (-> *display* base-frame-counter))
+ (set! (-> self delay-til-next) 0)
+ (label cfg-1)
+ (when (>= (- (-> *display* base-frame-counter) (-> self state-time)) (-> self delay-til-next))
+ (set! gp-0 (cond
+ ((>= (-> self same-path-picked-count) 2)
+ (if (zero? (-> self last-path-picked))
+ (set! gp-0 1)
+ (set! gp-0 0)
+ )
+ gp-0
+ )
+ (else
+ (rand-vu-int-range 0 1)
+ )
+ )
+ )
+ (let ((s4-0 0)
+ (s5-0 (new 'stack-no-clear 'inline-array 'snow-ball-junction 4))
+ )
+ (while #t
+ (let ((s3-0 (/ (+ 98304.0 (rand-vu-float-range 0.0 32768.0)) (path-distance (-> self path gp-0)))))
+ (dummy-14 self s5-0 s3-0 gp-0)
+ (when (dummy-15 self s5-0 gp-0)
+ (let ((s4-1 (get-process *default-dead-pool* snow-ball-roller #x4000)))
+ (when s4-1
+ (let ((t9-6 (method-of-type snow-ball-roller activate)))
+ (t9-6 (the-as snow-ball-roller s4-1) self 'snow-ball-roller (the-as pointer #x70004000))
+ )
+ (run-now-in-process s4-1 snow-ball-roller-init-by-other (-> self entity) self s3-0 gp-0 s5-0)
+ (-> s4-1 ppointer)
+ )
+ )
+ (set! (-> self state-time) (-> *display* base-frame-counter))
+ (set! (-> self delay-til-next) (rand-vu-int-range 450 1650))
+ (cond
+ ((= gp-0 (-> self last-path-picked))
+ (+! (-> self same-path-picked-count) 1)
+ )
+ (else
+ (set! (-> self last-path-picked) gp-0)
+ (set! (-> self same-path-picked-count) 1)
+ )
+ )
+ (goto cfg-22)
+ )
+ )
+ (+! s4-0 1)
+ (if (< 5 s4-0)
+ (goto cfg-22)
+ )
+ )
+ )
+ )
+ (label cfg-22)
+ (suspend)
+ (b! #t cfg-1 :delay (nop!))
+ (none)
+ )
+ )
+
+(defmethod relocate snow-ball ((obj snow-ball) (arg0 int))
+ (dotimes (v1-0 2)
+ (if (nonzero? (-> obj path v1-0))
+ (&+! (-> obj path v1-0) arg0)
+ )
+ )
+ (the-as snow-ball ((the-as (function process-drawable int process-drawable) (find-parent-method snow-ball 7))
+ (the-as process-drawable obj)
+ arg0
+ )
+ )
+ )
+
+(defmethod init-from-entity! snow-ball ((obj snow-ball) (arg0 entity-actor))
+ (set! (-> obj last-path-picked) 1)
+ (set! (-> obj same-path-picked-count) 1)
+ (dotimes (s5-0 2)
+ (set! (-> obj path s5-0) (new 'process 'curve-control obj 'path (the float (+ s5-0 1))))
+ )
+ (logclear! (-> obj mask) (process-mask actor-pause))
+ (go snow-ball-idle)
+ (none)
+ )
+
+
+
+
diff --git a/goal_src/levels/snow/snow-bunny.gc b/goal_src/levels/snow/snow-bunny.gc
new file mode 100644
index 0000000000..c19600905c
--- /dev/null
+++ b/goal_src/levels/snow/snow-bunny.gc
@@ -0,0 +1,1348 @@
+;;-*-Lisp-*-
+(in-package goal)
+
+;; name: snow-bunny.gc
+;; name in dgo: snow-bunny
+;; dgos: CIT, L1, SNO
+
+;; DECOMP BEGINS
+
+(deftype snow-bunny (nav-enemy)
+ ((patrol-rand-distraction int32 :offset-assert 400)
+ (base-hop-dist float :offset-assert 404)
+ (halfway-dist float :offset-assert 408)
+ (retreat-timeout float :offset-assert 412)
+ (gnd-popup float :offset-assert 416)
+ (jump-height-min float :offset-assert 420)
+ (jump-height-factor float :offset-assert 424)
+ (jump-anim-start-frame float :offset-assert 428)
+ (defense uint64 :offset-assert 432)
+ (retreat-timeout-time int64 :offset-assert 440)
+ (last-nondangerous-time int64 :offset-assert 448)
+ (patrol-hop-failed? basic :offset-assert 456)
+ (should-retreat? basic :offset-assert 460)
+ (got-jump-event? symbol :offset-assert 464)
+ (using-jump-event? basic :offset-assert 468)
+ (jump-anim int8 :offset-assert 472)
+ (notice-land-anim int8 :offset-assert 473)
+ (attack-anim int8 :offset-assert 474)
+ (final-dest vector :inline :offset-assert 480)
+ (jump-event-dest vector :inline :offset-assert 496)
+ )
+ :heap-base #x190
+ :method-count-assert 77
+ :size-assert #x200
+ :flag-assert #x4d01900200
+ (:methods
+ (dummy-51 (_type_ vector vector) symbol :replace 51)
+ (dummy-52 (_type_) symbol :replace 52)
+ (dummy-54 (_type_) symbol :replace 54)
+ (dummy-57 (_type_) symbol :replace 57)
+ (dummy-60 (_type_) none :replace 60)
+ (dummy-76 (_type_ symbol) none 76)
+ )
+ )
+
+(define-extern *snow-bunny* (pointer snow-bunny))
+
+(defskelgroup *snow-bunny-sg* snow-bunny
+ 0
+ 5
+ ((1 (meters 20)) (2 (meters 40)) (3 (meters 999999)))
+ :bounds (static-spherem 0 0.25 0 2)
+ :longest-edge (meters 0)
+ :shadow 4
+ )
+
+(define *snow-bunny-nav-enemy-info* (new 'static 'nav-enemy-info
+ :idle-anim 5
+ :walk-anim 5
+ :turn-anim 5
+ :notice-anim 9
+ :run-anim 5
+ :jump-anim 7
+ :jump-land-anim 10
+ :victory-anim 9
+ :taunt-anim 9
+ :die-anim 11
+ :neck-joint 5
+ :player-look-at-joint 5
+ :run-travel-speed (meters 6.0)
+ :run-rotate-speed (degrees 2880.0)
+ :run-acceleration (meters 1.0)
+ :run-turn-time (seconds 0.1)
+ :walk-travel-speed (meters 4.0)
+ :walk-rotate-speed (degrees 720.0)
+ :walk-acceleration (meters 1.0)
+ :walk-turn-time (seconds 0.5)
+ :shadow-size (meters 2.0)
+ :notice-nav-radius (meters 1.2)
+ :nav-nearest-y-threshold (meters 10.0)
+ :notice-distance (meters 30.0)
+ :stop-chase-distance (meters 40.0)
+ :frustration-distance (meters 8.0)
+ :frustration-time #x4b0
+ :die-anim-hold-frame 31.0
+ :jump-anim-start-frame 11.0
+ :jump-land-anim-end-frame 10000000000.0
+ :jump-height-min (meters 1.0)
+ :jump-height-factor 0.6
+ :jump-start-anim-speed 1.0
+ :shadow-max-y (meters 0.25)
+ :shadow-min-y (meters -4.0)
+ :shadow-locus-dist (meters 150.0)
+ :use-align #f
+ :draw-shadow #t
+ :move-to-ground #t
+ :hover-if-no-ground #f
+ :use-momentum #f
+ :use-flee #f
+ :use-proximity-notice #f
+ :use-jump-blocked #f
+ :use-jump-patrol #f
+ :gnd-collide-with #x1
+ :debug-draw-neck #f
+ :debug-draw-jump #f
+ )
+ )
+
+(defbehavior snow-bunny-default-event-handler snow-bunny ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block))
+ (case arg2
+ (('attack)
+ (nav-enemy-set-hit-from-direction arg0)
+ (go-virtual nav-enemy-die)
+ )
+ (('touch)
+ (let ((a1-5 (new 'stack-no-clear 'event-message-block)))
+ (set! (-> a1-5 from) self)
+ (set! (-> a1-5 num-params) 2)
+ (set! (-> a1-5 message) 'attack)
+ (set! (-> a1-5 param 0) (-> arg3 param 0))
+ (set! (-> a1-5 param 1) (the-as uint (new 'static 'attack-info)))
+ (when (send-event-function arg0 a1-5)
+ (set! (-> self touch-time) (-> *display* base-frame-counter))
+ (set-collide-offense (-> self collide-info) 2 (collide-offense no-offense))
+ (logior! (-> self nav-enemy-flags) 256)
+ (go-virtual snow-bunny-attack)
+ )
+ )
+ )
+ (('jump)
+ (let ((v1-16 (the-as object (-> arg3 param 0))))
+ (set! (-> self got-jump-event?) #t)
+ (let ((v0-1 (the-as object (-> self jump-event-dest))))
+ (set! (-> (the-as vector v0-1) quad) (-> (the-as vector v1-16) quad))
+ v0-1
+ )
+ )
+ )
+ )
+ )
+
+(defmethod dummy-76 snow-bunny ((obj snow-bunny) (arg0 symbol))
+ (let ((f0-0 -4096.0))
+ (if arg0
+ (set! f0-0 -20480.0)
+ )
+ (let ((v1-3 (-> obj draw shadow-ctrl)))
+ (set! (-> v1-3 settings bot-plane w) (- f0-0))
+ )
+ )
+ 0
+ (none)
+ )
+
+(defmethod initialize-collision snow-bunny ((obj snow-bunny))
+ (let ((s5-0 (new 'process 'collide-shape-moving obj (collide-list-enum usually-hit-by-player))))
+ (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process))
+ (set! (-> s5-0 reaction) default-collision-reaction)
+ (set! (-> s5-0 no-reaction)
+ (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing)
+ )
+ (let ((s4-0 (new 'process 'collide-shape-prim-group s5-0 (the-as uint 3) 0)))
+ (set! (-> s4-0 prim-core collide-as) (collide-kind enemy))
+ (set! (-> s4-0 collide-with) (collide-kind target))
+ (set! (-> s4-0 prim-core action) (collide-action solid))
+ (set-vector! (-> s4-0 local-sphere) 0.0 3686.4 0.0 5324.8)
+ (set-root-prim! s5-0 s4-0)
+ (let ((s3-0 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 3))))
+ (set! (-> s3-0 prim-core collide-as) (collide-kind enemy))
+ (set! (-> s3-0 collide-with) (collide-kind target))
+ (set! (-> s3-0 prim-core action) (collide-action solid))
+ (set! (-> s3-0 prim-core offense) (collide-offense touch))
+ (set-vector! (-> s3-0 local-sphere) 0.0 1638.4 0.0 1843.2)
+ (append-prim s4-0 s3-0)
+ )
+ (let ((s3-1 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 3))))
+ (set! (-> s3-1 prim-core collide-as) (collide-kind enemy))
+ (set! (-> s3-1 collide-with) (collide-kind target))
+ (set! (-> s3-1 prim-core action) (collide-action solid))
+ (set! (-> s3-1 prim-core offense) (collide-offense touch))
+ (set-vector! (-> s3-1 local-sphere) 0.0 4096.0 0.0 1843.2)
+ (append-prim s4-0 s3-1)
+ )
+ (let ((s3-2 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 1))))
+ (set! (-> s3-2 prim-core collide-as) (collide-kind enemy))
+ (set! (-> s3-2 collide-with) (collide-kind target))
+ (set! (-> s3-2 prim-core offense) (collide-offense normal-attack))
+ (set! (-> s3-2 transform-index) 6)
+ (set-vector! (-> s3-2 local-sphere) 0.0 0.0 0.0 2457.6)
+ (append-prim s4-0 s3-2)
+ )
+ )
+ (set! (-> s5-0 nav-radius) 2048.0)
+ (backup-collide-with-as s5-0)
+ (set! (-> s5-0 max-iteration-count) (the-as uint 2))
+ (set! (-> obj collide-info) s5-0)
+ )
+ 0
+ (none)
+ )
+
+(defmethod dummy-60 snow-bunny ((obj snow-bunny))
+ (initialize-skeleton obj *snow-bunny-sg* '())
+ (set! (-> obj draw origin-joint-index) (the-as uint 3))
+ (none)
+ )
+
+(defmethod TODO-RENAME-48 snow-bunny ((obj snow-bunny))
+ (dummy-60 obj)
+ (TODO-RENAME-45 obj *snow-bunny-nav-enemy-info*)
+ (set! (-> obj draw shadow-ctrl settings flags) (logand -9 (-> obj draw shadow-ctrl settings flags)))
+ (cond
+ ((zero? (res-lump-value (-> obj entity) 'mode uint128))
+ (set! (-> obj defense) (the-as uint 1))
+ (set! (-> obj retreat-timeout) 5.0)
+ )
+ (else
+ (set! (-> obj defense) (the-as uint 0))
+ (set! (-> obj retreat-timeout) 0.1)
+ )
+ )
+ (set! (-> obj last-nondangerous-time) (-> *display* base-frame-counter))
+ (set! (-> obj gnd-popup) 16384.0)
+ (set! (-> obj got-jump-event?) #f)
+ (set! (-> obj notice-land-anim) 10)
+ (set! (-> obj attack-anim) 6)
+ (set! (-> obj neck up) (the-as uint 1))
+ (set! (-> obj neck nose) (the-as uint 2))
+ (set! (-> obj neck ear) (the-as uint 0))
+ (set! (-> obj patrol-rand-distraction) (+ (nav-enemy-rnd-int-count 5) 1))
+ (set! (-> obj patrol-hop-failed?) #f)
+ 0
+ (none)
+ )
+
+(defmethod init-from-entity! snow-bunny ((obj snow-bunny) (arg0 entity-actor))
+ (initialize-collision obj)
+ (process-drawable-from-entity! obj arg0)
+ (TODO-RENAME-48 obj)
+ (if (<= (-> obj path curve num-cverts) 0)
+ (go process-drawable-art-error "no path")
+ )
+ (set! *snow-bunny* (the-as (pointer snow-bunny) (process->ppointer obj)))
+ (TODO-RENAME-59 obj)
+ (none)
+ )
+
+(defmethod dummy-58 snow-bunny ((obj snow-bunny))
+ (if (zero? (logand (-> *target* state-flags) 2))
+ (set! (-> obj last-nondangerous-time) (-> *display* base-frame-counter))
+ )
+ (none)
+ )
+
+(defbehavior snow-bunny-initialize-jump snow-bunny ((arg0 vector))
+ (nav-enemy-initialize-custom-jump arg0 #f (-> self jump-height-min) (-> self jump-height-factor) -307200.0)
+ (set! (-> self nav-enemy-flags) (logand -1025 (-> self nav-enemy-flags)))
+ (logior! (-> self nav-enemy-flags) 512)
+ 0
+ (none)
+ )
+
+(defbehavior snow-bunny-execute-jump snow-bunny ()
+ (nav-enemy-execute-custom-jump (-> self jump-anim) (-> self jump-anim-start-frame) 1.0)
+ 0
+ (none)
+ )
+
+(defmethod set-jump-height-factor! snow-bunny ((obj snow-bunny) (arg0 int))
+ (let ((v1-0 arg0))
+ (cond
+ ((zero? v1-0)
+ (set! (-> obj jump-anim) 8)
+ (set! (-> obj jump-height-min) 4096.0)
+ (set! (-> obj jump-height-factor) 0.6)
+ (set! (-> obj jump-anim-start-frame) 4.0)
+ )
+ ((= v1-0 1)
+ (set! (-> obj jump-anim) 7)
+ (set! (-> obj jump-height-min) 4096.0)
+ (set! (-> obj jump-height-factor) 0.6)
+ (set! (-> obj jump-anim-start-frame) 11.0)
+ )
+ ((= v1-0 2)
+ (set! (-> obj jump-anim) 7)
+ (set! (-> obj jump-height-min) 4096.0)
+ (set! (-> obj jump-height-factor) 0.4)
+ (set! (-> obj jump-anim-start-frame) 11.0)
+ )
+ )
+ )
+ (none)
+ )
+
+(defmethod dummy-57 snow-bunny ((obj snow-bunny))
+ (if (or (not *target*) (zero? (logand (-> *target* state-flags) 2)))
+ (return #f)
+ )
+ (let ((f0-0 (vector-vector-xz-distance (target-pos 0) (-> obj collide-info trans))))
+ (if (< 73728.0 f0-0)
+ (return #f)
+ )
+ (let* ((f0-1 (- f0-0 (-> *TARGET-bank* spin-radius)))
+ (f0-2 (+ -2457.6 f0-1))
+ )
+ (if (>= 40.96 f0-2)
+ (set! f0-2 40.96)
+ )
+ (let ((v1-13 (the int (/ f0-2 (* (-> obj nav-info run-travel-speed) (-> *display* seconds-per-frame))))))
+ (if (<= (- (- 108 (- (-> *display* base-frame-counter) (-> obj last-nondangerous-time))) v1-13) 0)
+ (return #f)
+ )
+ )
+ )
+ )
+ #t
+ )
+
+(defstate snow-bunny-tune-spheres (snow-bunny)
+ :virtual override
+ :code
+ (behavior ()
+ 0
+ (none)
+ )
+ :post
+ (the-as (function none :behavior snow-bunny) transform-post)
+ )
+
+(defstate nav-enemy-idle (snow-bunny)
+ :virtual #t
+ :enter
+ (behavior ()
+ (dummy-76 self #f)
+ (let ((t9-1 (-> (method-of-type nav-enemy nav-enemy-idle) enter)))
+ (if t9-1
+ (t9-1)
+ )
+ )
+ (none)
+ )
+ :code
+ (behavior ()
+ (ja-channel-push! 1 30)
+ (let ((gp-0 (-> self skel root-channel 0)))
+ (joint-control-channel-group-eval!
+ gp-0
+ (the-as art-joint-anim (-> self draw art-group data (-> self nav-info idle-anim)))
+ num-func-identity
+ )
+ (set! (-> gp-0 frame-num)
+ (rand-vu-float-range 0.0 (the float (+ (-> (if (> (-> self skel active-channels) 0)
+ (-> self skel root-channel 0 frame-group)
+ )
+ data
+ 0
+ length
+ )
+ -1
+ )
+ )
+ )
+ )
+ )
+ (let ((f30-0 (nav-enemy-rnd-float-range 0.75 1.25)))
+ (while #t
+ (suspend)
+ (let ((a0-4 (-> self skel root-channel 0)))
+ (set! (-> a0-4 param 0) f30-0)
+ (joint-control-channel-group-eval! a0-4 (the-as art-joint-anim #f) num-func-loop!)
+ )
+ )
+ )
+ (none)
+ )
+ )
+
+(defstate nav-enemy-patrol (snow-bunny)
+ :virtual #t
+ :enter
+ (the-as (function none :behavior snow-bunny) #f)
+ :trans
+ (the-as (function none :behavior snow-bunny) #f)
+ :code
+ (behavior ()
+ (go-virtual snow-bunny-nav-resume)
+ (none)
+ )
+ )
+
+(defstate snow-bunny-nav-resume (snow-bunny)
+ :virtual override
+ :code
+ (behavior ()
+ (cond
+ (*target*
+ (let ((f0-0 (vector-vector-distance (target-pos 0) (-> self collide-info trans))))
+ (cond
+ ((>= f0-0 (-> self enemy-info idle-distance))
+ (go-virtual nav-enemy-idle)
+ )
+ ((< (-> self nav-info notice-distance) f0-0)
+ (go-virtual snow-bunny-patrol-idle)
+ )
+ ((TODO-RENAME-46 self (-> self nav-info notice-distance))
+ (go-virtual nav-enemy-notice)
+ )
+ (else
+ (go-virtual snow-bunny-patrol-idle)
+ )
+ )
+ )
+ )
+ (else
+ (go-virtual nav-enemy-idle)
+ )
+ )
+ (none)
+ )
+ )
+
+(defstate snow-bunny-patrol-idle (snow-bunny)
+ :virtual override
+ :event
+ snow-bunny-default-event-handler
+ :enter
+ (behavior ()
+ (set! (-> self state-time) (-> *display* base-frame-counter))
+ (dummy-76 self #f)
+ (set! (-> self nav flags) (logior (nav-control-flags bit19) (-> self nav flags)))
+ (set! (-> self nav-enemy-flags) (logand -5 (-> self nav-enemy-flags)))
+ (logior! (-> self nav-enemy-flags) 8)
+ (set! (-> self state-timeout) 30)
+ (none)
+ )
+ :trans
+ (behavior ()
+ (if (dummy-57 self)
+ (go-virtual snow-bunny-defend)
+ )
+ (when (>= (- (-> *display* base-frame-counter) (-> self state-time)) (-> self state-timeout))
+ (if (not *target*)
+ (go-virtual nav-enemy-idle)
+ )
+ (cond
+ ((>= (vector-vector-distance (target-pos 0) (-> self collide-info trans)) (-> self enemy-info idle-distance))
+ (go-virtual nav-enemy-idle)
+ )
+ ((nav-enemy-notice-player?)
+ (go-virtual nav-enemy-notice)
+ )
+ )
+ )
+ (dummy-58 self)
+ (none)
+ )
+ :code
+ (behavior ()
+ (let ((gp-0 (nav-enemy-rnd-int-count 3)))
+ (when (and (not (-> self patrol-hop-failed?)) (zero? gp-0))
+ (if (dummy-53 self)
+ (go-virtual snow-bunny-patrol-hop)
+ )
+ )
+ (set! (-> self patrol-hop-failed?) #f)
+ (let ((gp-2 (min gp-0 (nav-enemy-rnd-int-count 3))))
+ (ja-channel-push! 1 30)
+ (let ((s5-0 (-> self skel root-channel 0)))
+ (joint-control-channel-group-eval!
+ s5-0
+ (the-as art-joint-anim (-> self draw art-group data (-> self nav-info idle-anim)))
+ num-func-identity
+ )
+ (set! (-> s5-0 frame-num)
+ (rand-vu-float-range 0.0 (the float (+ (-> (if (> (-> self skel active-channels) 0)
+ (-> self skel root-channel 0 frame-group)
+ )
+ data
+ 0
+ length
+ )
+ -1
+ )
+ )
+ )
+ )
+ )
+ (while #t
+ (let ((s5-1 (-> *display* base-frame-counter)))
+ (until (>= (- (-> *display* base-frame-counter) s5-1) 756)
+ (suspend)
+ (let ((a0-6 (-> self skel root-channel 0)))
+ (set! (-> a0-6 param 0) 1.0)
+ (joint-control-channel-group-eval! a0-6 (the-as art-joint-anim #f) num-func-loop!)
+ )
+ )
+ )
+ (cond
+ ((zero? gp-2)
+ (if (dummy-53 self)
+ (go-virtual snow-bunny-patrol-hop)
+ )
+ )
+ (else
+ (+! gp-2 -1)
+ )
+ )
+ )
+ )
+ )
+ (none)
+ )
+ :post
+ (the-as (function none :behavior snow-bunny) nav-enemy-simple-post)
+ )
+
+(defmethod dummy-51 snow-bunny ((obj snow-bunny) (arg0 vector) (arg1 vector))
+ (let ((s5-0 (new 'stack-no-clear 'vector)))
+ (let* ((s4-0 (new 'stack-no-clear 'collide-tri-result))
+ (f0-0 (-> obj gnd-popup))
+ (f30-0 (+ f0-0 40960.0))
+ )
+ (set! (-> s5-0 quad) (-> arg0 quad))
+ (+! (-> s5-0 y) f0-0)
+ (let ((f0-2 (fill-and-probe-using-y-probe
+ *collide-cache*
+ s5-0
+ f30-0
+ (collide-kind background)
+ (-> obj collide-info process)
+ s4-0
+ (the-as uint 1)
+ )
+ )
+ )
+ (if (or (< f0-2 0.0) (= (logand #b111000 (the-as int (-> s4-0 pat))) 8)) ;; yes this is bugged... again
+ (return #f)
+ )
+ (set! (-> s5-0 y) (- (-> s5-0 y) (* f0-2 f30-0)))
+ )
+ )
+ (set! (-> arg1 quad) (-> s5-0 quad))
+ )
+ #t
+ )
+
+(defmethod dummy-53 snow-bunny ((obj snow-bunny))
+ (let* ((s4-0 (-> obj path curve num-cverts))
+ (s2-0 (nav-enemy-rnd-int-count s4-0))
+ (s5-0 (new 'stack-no-clear 'vector))
+ )
+ (dotimes (s3-0 s4-0)
+ (eval-path-curve-div! (-> obj path) s5-0 (the float s2-0) 'interp)
+ (let ((f30-0 (vector-vector-xz-distance s5-0 (-> obj collide-info trans))))
+ (when (>= f30-0 6144.0)
+ (when (dummy-51 obj s5-0 s5-0)
+ (set! (-> obj final-dest quad) (-> s5-0 quad))
+ (set! (-> obj halfway-dist) (* 0.5 f30-0))
+ (set! (-> obj base-hop-dist) (rand-vu-float-range 6144.0 22118.4))
+ (return #t)
+ )
+ )
+ )
+ (set! s2-0 (mod (+ s2-0 1) s4-0))
+ )
+ )
+ #f
+ )
+
+(defmethod dummy-54 snow-bunny ((obj snow-bunny))
+ (local-vars (sv-48 (function float float)))
+ (set! (-> obj using-jump-event?) #f)
+ (let* ((s5-1 (vector-! (new 'stack-no-clear 'vector) (-> obj final-dest) (-> obj collide-info trans)))
+ (f30-0 (vector-length s5-1))
+ (f1-0 (-> obj halfway-dist))
+ (f0-1 (- 1.0 (/ (fabs (- f30-0 f1-0)) (* 2.0 f1-0))))
+ )
+ (cond
+ ((< f0-1 0.3)
+ (set! f0-1 0.3)
+ )
+ ((< 1.0 f0-1)
+ (set! f0-1 1.0)
+ )
+ )
+ (let ((f28-0 (* (-> obj base-hop-dist) f0-1)))
+ (cond
+ ((>= (+ 4096.0 f28-0) f30-0)
+ (set! (-> obj nav target-pos quad) (-> obj final-dest quad))
+ )
+ (else
+ (vector-rotate-around-y! s5-1 s5-1 16384.0)
+ (vector-normalize! s5-1 (- f30-0 f28-0))
+ (let ((s4-0 (new 'stack-no-clear 'vector)))
+ (let ((s3-0 vector+*!)
+ (s2-0 s4-0)
+ (s1-0 (-> obj final-dest))
+ (s0-0 s5-1)
+ )
+ (set! sv-48 sin)
+ (let ((a0-9 (rand-vu-float-range -16384.0 16384.0)))
+ (s3-0 s2-0 s1-0 s0-0 (sv-48 a0-9))
+ )
+ )
+ (vector-! s5-1 s4-0 (-> obj collide-info trans))
+ (when (< f28-0 (vector-length s5-1))
+ (vector-normalize! s5-1 f28-0)
+ (vector+! s4-0 (-> obj collide-info trans) s5-1)
+ )
+ (set! (-> obj nav target-pos quad) (-> s4-0 quad))
+ )
+ )
+ )
+ )
+ )
+ (set! (-> obj got-jump-event?) #f)
+ (dummy-11 (-> obj nav) (-> obj nav target-pos))
+ (cond
+ ((-> obj got-jump-event?)
+ (set! (-> obj nav target-pos quad) (-> obj jump-event-dest quad))
+ (set! (-> obj using-jump-event?) #t)
+ )
+ (else
+ (let ((s5-2 (-> obj nav travel)))
+ (if (< (vector-length s5-2) 0.01)
+ (return #f)
+ )
+ (let ((a2-2 (-> obj nav target-pos)))
+ (vector+! a2-2 (-> obj collide-info trans) s5-2)
+ (if (not (dummy-51 obj a2-2 a2-2))
+ (return #f)
+ )
+ )
+ )
+ )
+ )
+ #t
+ )
+
+(defstate snow-bunny-patrol-hop (snow-bunny)
+ :virtual override
+ :event
+ snow-bunny-default-event-handler
+ :enter
+ (behavior ()
+ (set! (-> self state-time) (-> *display* base-frame-counter))
+ (when (not (dummy-54 self))
+ (set! (-> self patrol-hop-failed?) #t)
+ (go-virtual snow-bunny-patrol-idle)
+ )
+ (if (dummy-57 self)
+ (go-virtual snow-bunny-defend)
+ )
+ (set-jump-height-factor! self 0)
+ (snow-bunny-initialize-jump (-> self nav target-pos))
+ (dummy-76 self #t)
+ (set! (-> self rotate-speed) 728177.75)
+ (set! (-> self turn-time) 30)
+ (none)
+ )
+ :exit
+ (behavior ()
+ (logior! (-> self nav-enemy-flags) 24)
+ (set! (-> self collide-info nav-flags) (logand -3 (-> self collide-info nav-flags)))
+ (none)
+ )
+ :trans
+ (behavior ()
+ (dummy-58 self)
+ (none)
+ )
+ :code
+ (behavior ()
+ (snow-bunny-execute-jump)
+ (if (-> self using-jump-event?)
+ (set-current-poly! (-> self nav) (dummy-16 (-> self nav) (-> self collide-info trans)))
+ )
+ (if (or (zero? (nav-enemy-rnd-int-count (-> self patrol-rand-distraction)))
+ (>= 40.96 (vector-vector-distance (-> self final-dest) (-> self collide-info trans)))
+ )
+ (go-virtual snow-bunny-patrol-idle)
+ (go-virtual snow-bunny-patrol-hop)
+ )
+ (none)
+ )
+ :post
+ (the-as (function none :behavior snow-bunny) nav-enemy-jump-post)
+ )
+
+(defstate nav-enemy-notice (snow-bunny)
+ :virtual #t
+ :event
+ snow-bunny-default-event-handler
+ :enter
+ (behavior ()
+ (logior! (-> self nav-enemy-flags) 4)
+ (nav-enemy-neck-control-look-at)
+ (if (logtest? (-> self nav-enemy-flags) 2)
+ (go-virtual nav-enemy-chase)
+ )
+ (logior! (-> self nav-enemy-flags) 2)
+ (dummy-76 self #t)
+ (set-vector! (-> self collide-info transv) 0.0 (nav-enemy-rnd-float-range 102400.0 131072.0) 0.0 1.0)
+ (none)
+ )
+ :exit
+ (the-as (function none :behavior snow-bunny) #f)
+ :trans
+ (behavior ()
+ (dummy-58 self)
+ (none)
+ )
+ :code
+ (behavior ()
+ (ja-channel-push! 1 22)
+ (let ((f30-0 (nav-enemy-rnd-float-range 0.8 1.2)))
+ (let ((gp-0 (-> self skel root-channel 0)))
+ (set! (-> gp-0 frame-group)
+ (the-as art-joint-anim (-> self draw art-group data (-> self nav-info notice-anim)))
+ )
+ (set! (-> gp-0 param 0) (ja-aframe 8.0 0))
+ (set! (-> gp-0 param 1) f30-0)
+ (set! (-> gp-0 frame-num) 0.0)
+ (joint-control-channel-group!
+ gp-0
+ (the-as art-joint-anim (-> self draw art-group data (-> self nav-info notice-anim)))
+ num-func-seek!
+ )
+ )
+ (until (ja-done? 0)
+ (suspend)
+ (let ((gp-1 (-> self skel root-channel 0)))
+ (set! (-> gp-1 param 0) (ja-aframe 8.0 0))
+ (set! (-> gp-1 param 1) f30-0)
+ (joint-control-channel-group-eval! gp-1 (the-as art-joint-anim #f) num-func-seek!)
+ )
+ )
+ (until (logtest? (-> self collide-info status) 1)
+ (let ((a0-11 (-> self skel root-channel 0)))
+ (set! (-> a0-11 param 0) (the float (+ (-> a0-11 frame-group data 0 length) -1)))
+ (set! (-> a0-11 param 1) f30-0)
+ (joint-control-channel-group-eval! a0-11 (the-as art-joint-anim #f) num-func-seek!)
+ )
+ (+! (-> self collide-info transv y) (* -546119.7 (-> *display* seconds-per-frame)))
+ (integrate-for-enemy-with-move-to-ground!
+ (-> self collide-info)
+ (-> self collide-info transv)
+ (collide-kind background)
+ 12288.0
+ #f
+ #f
+ #f
+ )
+ (when *target*
+ (let ((gp-2 (new 'stack-no-clear 'vector)))
+ (vector-! gp-2 (target-pos 0) (-> self collide-info trans))
+ (seek-toward-heading-vec! (-> self collide-info) gp-2 524288.0 30)
+ )
+ )
+ (suspend)
+ )
+ (ja-channel-push! 1 22)
+ (let ((a0-18 (-> self skel root-channel 0)))
+ (set! (-> a0-18 frame-group) (the-as art-joint-anim (-> self draw art-group data (-> self notice-land-anim))))
+ (set! (-> a0-18 param 0)
+ (the float
+ (+ (-> (the-as art-joint-anim (-> self draw art-group data (-> self notice-land-anim))) data 0 length) -1)
+ )
+ )
+ (set! (-> a0-18 param 1) f30-0)
+ (set! (-> a0-18 frame-num) 0.0)
+ (joint-control-channel-group!
+ a0-18
+ (the-as art-joint-anim (-> self draw art-group data (-> self notice-land-anim)))
+ num-func-seek!
+ )
+ )
+ (until (ja-done? 0)
+ (suspend)
+ (let ((a0-19 (-> self skel root-channel 0)))
+ (set! (-> a0-19 param 0) (the float (+ (-> a0-19 frame-group data 0 length) -1)))
+ (set! (-> a0-19 param 1) f30-0)
+ (joint-control-channel-group-eval! a0-19 (the-as art-joint-anim #f) num-func-seek!)
+ )
+ )
+ )
+ (go-virtual nav-enemy-chase)
+ (none)
+ )
+ :post
+ (the-as (function none :behavior snow-bunny) nav-enemy-simple-post)
+ )
+
+(defstate nav-enemy-chase (snow-bunny)
+ :virtual #t
+ :event
+ (the-as (function process int symbol event-message-block object :behavior snow-bunny) #f)
+ :exit
+ (the-as (function none :behavior snow-bunny) #f)
+ :trans
+ (the-as (function none :behavior snow-bunny) #f)
+ :code
+ (behavior ()
+ (go-virtual snow-bunny-chase-hop)
+ (none)
+ )
+ :post
+ (the-as (function none :behavior snow-bunny) #f)
+ )
+
+(defmethod dummy-52 snow-bunny ((obj snow-bunny))
+ (local-vars (sv-48 (function float float)))
+ (set! (-> obj using-jump-event?) #f)
+ (if (not *target*)
+ (return #f)
+ )
+ (let ((s4-0 (-> obj final-dest)))
+ (set! (-> s4-0 quad) (-> (target-pos 0) quad))
+ (if (not (dummy-51 obj s4-0 s4-0))
+ (return #f)
+ )
+ (set! (-> obj base-hop-dist) (rand-vu-float-range 18022.4 22118.4))
+ (let* ((s5-2 (vector-! (new 'stack-no-clear 'vector) s4-0 (-> obj collide-info trans)))
+ (f28-0 (vector-length s5-2))
+ (f30-0 (-> obj base-hop-dist))
+ )
+ (cond
+ ((>= (+ 4096.0 f30-0) f28-0)
+ (set! (-> obj nav target-pos quad) (-> s4-0 quad))
+ )
+ (else
+ (vector-rotate-around-y! s5-2 s5-2 16384.0)
+ (vector-normalize! s5-2 (- f28-0 f30-0))
+ (let ((s3-0 (new 'stack-no-clear 'vector)))
+ (let ((s2-0 vector+*!)
+ (s1-0 s3-0)
+ (s0-0 s5-2)
+ )
+ (set! sv-48 sin)
+ (let ((a0-11 (rand-vu-float-range -16384.0 16384.0)))
+ (s2-0 s1-0 s4-0 s0-0 (sv-48 a0-11))
+ )
+ )
+ (vector-! s5-2 s3-0 (-> obj collide-info trans))
+ (when (< f30-0 (vector-length s5-2))
+ (vector-normalize! s5-2 f30-0)
+ (vector+! s3-0 (-> obj collide-info trans) s5-2)
+ )
+ (set! (-> obj nav target-pos quad) (-> s3-0 quad))
+ )
+ )
+ )
+ )
+ )
+ (set! (-> obj got-jump-event?) #f)
+ (dummy-11 (-> obj nav) (-> obj nav target-pos))
+ (cond
+ ((-> obj got-jump-event?)
+ (set! (-> obj nav target-pos quad) (-> obj jump-event-dest quad))
+ (set! (-> obj using-jump-event?) #t)
+ )
+ (else
+ (let ((s5-3 (-> obj nav travel)))
+ (if (< (vector-length s5-3) 0.01)
+ (return #f)
+ )
+ (let ((a2-3 (-> obj nav target-pos)))
+ (vector+! a2-3 (-> obj collide-info trans) s5-3)
+ (if (not (dummy-51 obj a2-3 a2-3))
+ (return #f)
+ )
+ )
+ )
+ )
+ )
+ #t
+ )
+
+(defstate snow-bunny-chase-hop (snow-bunny)
+ :virtual override
+ :event
+ snow-bunny-default-event-handler
+ :enter
+ (behavior ()
+ (set! (-> self state-time) (-> *display* base-frame-counter))
+ (set! (-> self should-retreat?) #f)
+ (if (or (not *target*) (logtest? (-> *target* state-flags) 128))
+ (go-virtual nav-enemy-patrol)
+ )
+ (if (not (TODO-RENAME-46 self (-> self nav-info stop-chase-distance)))
+ (go-virtual nav-enemy-patrol)
+ )
+ (if (dummy-57 self)
+ (go-virtual snow-bunny-defend)
+ )
+ (when (not (dummy-52 self))
+ (set! (-> self nav-enemy-flags) (logand -3 (-> self nav-enemy-flags)))
+ (go-virtual nav-enemy-notice)
+ )
+ (set-jump-height-factor! self 1)
+ (snow-bunny-initialize-jump (-> self nav target-pos))
+ (dummy-76 self #t)
+ (set! (-> self rotate-speed) 728177.75)
+ (set! (-> self turn-time) 30)
+ (none)
+ )
+ :exit
+ (behavior ()
+ (logior! (-> self nav-enemy-flags) 24)
+ (set! (-> self collide-info nav-flags) (logand -3 (-> self collide-info nav-flags)))
+ (none)
+ )
+ :trans
+ (behavior ()
+ (if (dummy-57 self)
+ (set! (-> self should-retreat?) #t)
+ )
+ (dummy-58 self)
+ (none)
+ )
+ :code
+ (behavior ()
+ (snow-bunny-execute-jump)
+ (if (-> self using-jump-event?)
+ (set-current-poly! (-> self nav) (dummy-16 (-> self nav) (-> self collide-info trans)))
+ )
+ (if (-> self should-retreat?)
+ (go-virtual snow-bunny-defend)
+ )
+ (go-virtual snow-bunny-chase-hop)
+ (none)
+ )
+ :post
+ (the-as (function none :behavior snow-bunny) nav-enemy-jump-post)
+ )
+
+(defstate snow-bunny-defend (snow-bunny)
+ :virtual override
+ :code
+ (behavior ()
+ (if (= (-> self defense) 1)
+ (go-virtual snow-bunny-retreat-hop)
+ (go-virtual snow-bunny-lunge)
+ )
+ (none)
+ )
+ )
+
+(deftype snow-bunny-retreat-work (structure)
+ ((found-best basic :offset-assert 0)
+ (using-jump-event? basic :offset-assert 4)
+ (best-travel-dist float :offset-assert 8)
+ (best-dest vector :inline :offset-assert 16)
+ (away-vec vector :inline :offset-assert 32)
+ )
+ :method-count-assert 9
+ :size-assert #x30
+ :flag-assert #x900000030
+ )
+
+
+(defmethod dummy-55 snow-bunny ((obj snow-bunny))
+ (set! (-> obj using-jump-event?) #f)
+ (if (not *target*)
+ (return #f)
+ )
+ (let ((s5-0 (new 'stack-no-clear 'snow-bunny-retreat-work)))
+ (set! (-> s5-0 found-best) #f)
+ (let ((s4-0 (-> obj nav)))
+ (TODO-RENAME-27 s4-0)
+ (TODO-RENAME-28 s4-0 (collide-kind
+ background
+ cak-1
+ cak-2
+ cak-3
+ target
+ water
+ powerup
+ crate
+ enemy
+ wall-object
+ projectile
+ ground-object
+ target-attack
+ mother-spider
+ cak-14
+ blue-eco-suck
+ unknown-16
+ unknown-17
+ unknown-18
+ unknown-19
+ unknown-20
+ unknown-21
+ unknown-22
+ unknown-23
+ unknown-24
+ unknown-25
+ unknown-26
+ unknown-27
+ unknown-28
+ unknown-29
+ unknown-30
+ unknown-31
+ unknown-32
+ unknown-33
+ unknown-34
+ unknown-35
+ unknown-36
+ unknown-37
+ unknown-38
+ unknown-39
+ unknown-40
+ unknown-41
+ unknown-42
+ unknown-43
+ unknown-44
+ unknown-45
+ unknown-46
+ unknown-47
+ unknown-48
+ unknown-49
+ unknown-50
+ unknown-51
+ unknown-52
+ unknown-53
+ unknown-54
+ unknown-55
+ unknown-56
+ unknown-57
+ unknown-58
+ unknown-59
+ unknown-60
+ unknown-61
+ unknown-62
+ unknown-63
+ )
+ )
+ )
+ (let ((s4-1 (target-pos 0)))
+ (vector-! (-> s5-0 away-vec) (-> obj collide-info trans) s4-1)
+ (set! (-> s5-0 away-vec y) 0.0)
+ (vector-normalize! (-> s5-0 away-vec) 86016.0)
+ (let* ((s3-0 (quaternion-y-angle (-> *target* control quat)))
+ (a0-9 (atan (-> s5-0 away-vec x) (-> s5-0 away-vec z)))
+ (s3-1 (deg- a0-9 s3-0))
+ )
+ (dotimes (s2-0 2)
+ (cond
+ ((zero? s2-0)
+ (let ((f30-0 0.0))
+ (if (< (fabs s3-1) 16384.0)
+ (set! f30-0 (if (>= s3-1 0.0)
+ 4551.1113
+ -4551.1113
+ )
+ )
+ )
+ (let ((f0-7 (+ f30-0 (rand-vu-float-range -6371.5557 6371.5557)))
+ (s1-0 (new 'stack-no-clear 'vector))
+ )
+ (vector-rotate-around-y! s1-0 (-> s5-0 away-vec) f0-7)
+ (vector+! (-> obj final-dest) s4-1 s1-0)
+ )
+ )
+ )
+ ((= s2-0 1)
+ (let* ((f30-1 32768.0)
+ (f0-10 (if (>= s3-1 0.0)
+ (- f30-1 (rand-vu-float-range 10012.444 15473.777))
+ (+ f30-1 (rand-vu-float-range 10012.444 15473.777))
+ )
+ )
+ (s1-1 (new 'stack-no-clear 'vector))
+ )
+ (vector-rotate-around-y! s1-1 (-> s5-0 away-vec) f0-10)
+ (vector+! (-> obj final-dest) s4-1 s1-1)
+ )
+ )
+ )
+ (let* ((s1-3 (vector-! (new 'stack-no-clear 'vector) (-> obj final-dest) (-> obj collide-info trans)))
+ (f0-12 (vector-length s1-3))
+ )
+ (let ((f1-4 (* 0.000011625744 f0-12)))
+ (cond
+ ((< 1.0 f1-4)
+ (set! f1-4 1.0)
+ )
+ ((< f1-4 0.4)
+ (set! f1-4 0.4)
+ )
+ )
+ (set! (-> obj base-hop-dist) (+ 16384.0 (* 20480.0 f1-4)))
+ )
+ (when (< (-> obj base-hop-dist) f0-12)
+ (vector-normalize! s1-3 (-> obj base-hop-dist))
+ (vector+! (-> obj final-dest) (-> obj collide-info trans) s1-3)
+ )
+ )
+ (set! (-> obj nav target-pos quad) (-> obj final-dest quad))
+ (set! (-> obj got-jump-event?) #f)
+ (dummy-13 (-> obj nav) (-> obj nav target-pos) (-> obj nav old-travel))
+ (when (< (vector-xz-length (-> obj nav travel)) 204.8)
+ (let ((s1-4 (new 'stack-no-clear 'nav-gap-info)))
+ (when (TODO-RENAME-12 (-> obj nav) s1-4)
+ (set! (-> obj got-jump-event?) #t)
+ (set! (-> obj jump-event-dest quad) (-> s1-4 dest quad))
+ )
+ )
+ )
+ (cond
+ ((-> obj got-jump-event?)
+ (when (zero? s2-0)
+ (set! (-> obj nav target-pos quad) (-> obj jump-event-dest quad))
+ (set! (-> obj using-jump-event?) #t)
+ (return #t)
+ )
+ )
+ (else
+ (let* ((s0-0 (-> obj nav travel))
+ (f30-2 (vector-length s0-0))
+ )
+ (when (>= f30-2 409.6)
+ (let ((s1-5 (-> obj nav target-pos)))
+ (vector+! s1-5 (-> obj collide-info trans) s0-0)
+ (when (dummy-51 obj s1-5 s1-5)
+ (if (>= f30-2 (+ -409.6 (-> obj base-hop-dist)))
+ (return #t)
+ )
+ (when (or (not (-> s5-0 found-best)) (< (-> s5-0 best-travel-dist) f30-2))
+ (set! (-> s5-0 found-best) #t)
+ (set! (-> s5-0 best-travel-dist) f30-2)
+ (set! (-> s5-0 best-dest quad) (-> s1-5 quad))
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ (when (-> s5-0 found-best)
+ (set! (-> obj nav target-pos quad) (-> s5-0 best-dest quad))
+ (vector-! (-> obj nav travel) (-> s5-0 best-dest) (-> obj collide-info trans))
+ (return #t)
+ )
+ )
+ #f
+ )
+
+(defstate snow-bunny-retreat-hop (snow-bunny)
+ :virtual override
+ :event
+ snow-bunny-default-event-handler
+ :enter
+ (behavior ()
+ (set! (-> self state-time) (-> *display* base-frame-counter))
+ (if (not *target*)
+ (go-virtual nav-enemy-patrol)
+ )
+ (let ((v1-8 (>= 73728.0 (vector-vector-xz-distance (target-pos 0) (-> self collide-info trans)))))
+ (when (or (-> self should-retreat?) (and v1-8 (logtest? (-> *target* state-flags) 2)))
+ (set! (-> self retreat-timeout-time)
+ (+ (-> *display* base-frame-counter) (the int (* 300.0 (-> self retreat-timeout))))
+ )
+ (set! (-> self should-retreat?) #f)
+ )
+ (when (or (>= (-> *display* base-frame-counter) (-> self retreat-timeout-time)) (not v1-8))
+ (if (or (not *target*)
+ (logtest? (-> *target* state-flags) 128)
+ (not (TODO-RENAME-46 self (-> self nav-info stop-chase-distance)))
+ )
+ (go-virtual nav-enemy-patrol)
+ (go-virtual snow-bunny-chase-hop)
+ )
+ )
+ )
+ (when (not (dummy-55 self))
+ (set-vector! (-> self nav travel) 0.0 0.0 0.0 1.0)
+ (set! (-> self nav target-pos quad) (-> self collide-info trans quad))
+ )
+ (set-jump-height-factor! self 2)
+ (snow-bunny-initialize-jump (-> self nav target-pos))
+ (dummy-76 self #t)
+ (set! (-> self rotate-speed) 728177.75)
+ (set! (-> self turn-time) 30)
+ (none)
+ )
+ :exit
+ (behavior ()
+ (logior! (-> self nav-enemy-flags) 24)
+ (set! (-> self collide-info nav-flags) (logand -3 (-> self collide-info nav-flags)))
+ (none)
+ )
+ :trans
+ (behavior ()
+ (dummy-58 self)
+ (none)
+ )
+ :code
+ (behavior ()
+ (snow-bunny-execute-jump)
+ (if (-> self using-jump-event?)
+ (set-current-poly! (-> self nav) (dummy-16 (-> self nav) (-> self collide-info trans)))
+ )
+ (go-virtual snow-bunny-retreat-hop)
+ (none)
+ )
+ :post
+ (the-as (function none :behavior snow-bunny) nav-enemy-jump-post)
+ )
+
+(defstate snow-bunny-lunge (snow-bunny)
+ :virtual override
+ :event
+ snow-bunny-default-event-handler
+ :enter
+ (behavior ()
+ (set! (-> self state-time) (-> *display* base-frame-counter))
+ (dummy-76 self #f)
+ (none)
+ )
+ :trans
+ (behavior ()
+ (if (not *target*)
+ (go-virtual nav-enemy-patrol)
+ )
+ (dummy-58 self)
+ (let ((f0-0 (vector-vector-xz-distance (target-pos 0) (-> self collide-info trans))))
+ (if (< 73728.0 f0-0)
+ (go-virtual snow-bunny-chase-hop)
+ )
+ )
+ (if (not (logtest? (-> *target* state-flags) 2))
+ (go-virtual snow-bunny-chase-hop)
+ )
+ (if (and (logtest? (-> *target* state-flags) 2) (not (TODO-RENAME-46 self (-> self nav-info notice-distance))))
+ (go-virtual snow-bunny-retreat-hop)
+ )
+ (none)
+ )
+ :code
+ (behavior ()
+ (ja-channel-push! 1 22)
+ (while #t
+ (let ((a0-1 (-> self skel root-channel 0)))
+ (set! (-> a0-1 frame-group)
+ (the-as art-joint-anim (-> self draw art-group data (-> self nav-info idle-anim)))
+ )
+ (set! (-> a0-1 param 0)
+ (the float
+ (+ (-> (the-as art-joint-anim (-> self draw art-group data (-> self nav-info idle-anim))) data 0 length) -1)
+ )
+ )
+ (set! (-> a0-1 param 1) 1.0)
+ (set! (-> a0-1 frame-num) 0.0)
+ (joint-control-channel-group!
+ a0-1
+ (the-as art-joint-anim (-> self draw art-group data (-> self nav-info idle-anim)))
+ num-func-seek!
+ )
+ )
+ (until (ja-done? 0)
+ (suspend)
+ (let ((a0-2 (-> self skel root-channel 0)))
+ (set! (-> a0-2 param 0) (the float (+ (-> a0-2 frame-group data 0 length) -1)))
+ (set! (-> a0-2 param 1) 1.0)
+ (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-seek!)
+ )
+ )
+ )
+ (none)
+ )
+ :post
+ (the-as (function none :behavior snow-bunny) nav-enemy-simple-post)
+ )
+
+(defstate snow-bunny-attack (snow-bunny)
+ :virtual override
+ :event
+ snow-bunny-default-event-handler
+ :enter
+ (behavior ()
+ (set! (-> self state-time) (-> *display* base-frame-counter))
+ (set-vector! (-> self collide-info transv) 0.0 0.0 0.0 1.0)
+ (dummy-76 self #t)
+ (none)
+ )
+ :trans
+ (behavior ()
+ (when *target*
+ (let ((gp-0 (new 'stack-no-clear 'vector)))
+ (vector-! gp-0 (target-pos 0) (-> self collide-info trans))
+ (seek-toward-heading-vec! (-> self collide-info) gp-0 524288.0 30)
+ )
+ )
+ (+! (-> self collide-info transv y) (* -546119.7 (-> *display* seconds-per-frame)))
+ (integrate-for-enemy-with-move-to-ground!
+ (-> self collide-info)
+ (-> self collide-info transv)
+ (collide-kind background)
+ 8192.0
+ #f
+ #f
+ #f
+ )
+ (none)
+ )
+ :code
+ (behavior ()
+ (ja-channel-push! 1 22)
+ (let ((a0-1 (-> self skel root-channel 0)))
+ (set! (-> a0-1 frame-group) (the-as art-joint-anim (-> self draw art-group data (-> self attack-anim))))
+ (set! (-> a0-1 param 0)
+ (the float
+ (+ (-> (the-as art-joint-anim (-> self draw art-group data (-> self attack-anim))) data 0 length) -1)
+ )
+ )
+ (set! (-> a0-1 param 1) 1.0)
+ (set! (-> a0-1 frame-num) 0.0)
+ (joint-control-channel-group!
+ a0-1
+ (the-as art-joint-anim (-> self draw art-group data (-> self attack-anim)))
+ num-func-seek!
+ )
+ )
+ (until (ja-done? 0)
+ (suspend)
+ (let ((a0-2 (-> self skel root-channel 0)))
+ (set! (-> a0-2 param 0) (the float (+ (-> a0-2 frame-group data 0 length) -1)))
+ (set! (-> a0-2 param 1) 1.0)
+ (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-seek!)
+ )
+ )
+ (until (logtest? (-> self collide-info status) 1)
+ (suspend)
+ )
+ (go-virtual snow-bunny-retreat-hop)
+ (none)
+ )
+ :post
+ (the-as (function none :behavior snow-bunny) nav-enemy-simple-post)
+ )
+
+
+
+
diff --git a/goal_src/levels/snow/snow-flutflut-obs.gc b/goal_src/levels/snow/snow-flutflut-obs.gc
index f7214d2693..efbc251eab 100644
--- a/goal_src/levels/snow/snow-flutflut-obs.gc
+++ b/goal_src/levels/snow/snow-flutflut-obs.gc
@@ -49,8 +49,8 @@
(deftype snow-button (process-drawable)
((root-override collide-shape-moving :offset 112)
(wiggled? symbol :offset-assert 176)
- (timeout uint64 :offset-assert 184)
- (delay-til-wiggle uint64 :offset-assert 192)
+ (timeout int64 :offset-assert 184)
+ (delay-til-wiggle int64 :offset-assert 192)
(prev-button entity-actor :offset-assert 200)
(ticker ticky :inline :offset-assert 208)
)
@@ -467,7 +467,7 @@
(set! (-> obj link) (new 'process 'actor-link-info obj))
(initialize-skeleton obj *snow-button-sg* '())
(logior! (-> obj skel status) 1)
- (set! (-> obj timeout) (the-as uint (the int (* 300.0 (res-lump-float arg0 'timeout :default 10.0)))))
+ (set! (-> obj timeout) (the int (* 300.0 (res-lump-float arg0 'timeout :default 10.0))))
(set! (-> obj delay-til-wiggle) (+ (-> obj timeout) -120))
(if (> (entity-actor-count arg0 'alt-actor) 0)
(set! (-> obj prev-button) (entity-actor-lookup arg0 'alt-actor 0))
diff --git a/goal_src/levels/snow/snow-ram-boss.gc b/goal_src/levels/snow/snow-ram-boss.gc
index 07114d1f0b..f55b978c19 100644
--- a/goal_src/levels/snow/snow-ram-boss.gc
+++ b/goal_src/levels/snow/snow-ram-boss.gc
@@ -5,40 +5,2235 @@
;; name in dgo: snow-ram-boss
;; dgos: L1, SNO
-;; TODO - for snow-ram
-(deftype ram-boss (nav-enemy)
- ((parent-override (pointer ram) :score 100 :offset 12)
- (facing-y float :offset-assert 400)
- (player-dir-y float :offset-assert 404)
- (last-turn-speed float :offset-assert 408)
- (frustration int32 :offset-assert 412)
- (dead? symbol :offset-assert 416)
- (has-shield? symbol :offset-assert 420)
- (proj-stoked basic :offset-assert 424)
- (proj-status uint64 :offset-assert 432)
- (part2 sparticle-launch-control :offset-assert 440)
- (proj-last-thrown-time uint64 :offset-assert 448)
- (nav-enemy-patrol-timeout uint64 :offset-assert 456)
- (proj-launch-vec vector :inline :offset-assert 464)
- (local-throw-point vector :inline :offset-assert 480)
- (shield-jmod joint-mod-set-local :offset-assert 496)
+(declare-type ram-boss nav-enemy)
+
+;; DECOMP BEGINS
+
+(deftype ram-boss-proj (projectile)
+ ((parent-override (pointer ram-boss) :offset 12)
+ (part2 sparticle-launch-control :offset-assert 412)
+ (launched? symbol :offset-assert 416)
+ (growth float :offset-assert 420)
+ (charge-sound-id sound-id :offset-assert 424)
+ (launch-time uint64 :offset-assert 432)
+ (facing-dir vector :inline :offset-assert 448)
)
+ :heap-base #x160
+ :method-count-assert 29
+ :size-assert #x1d0
+ :flag-assert #x1d016001d0
+ (:states
+ ram-boss-proj-growing
+ ram-boss-proj-launch
+ )
+ )
+
+
+(deftype ram-boss (nav-enemy)
+ ((parent-override (pointer ram) :offset 12)
+ (facing-y float :offset-assert 400)
+ (player-dir-y float :offset-assert 404)
+ (last-turn-speed float :offset-assert 408)
+ (frustration int32 :offset-assert 412)
+ (dead? symbol :offset-assert 416)
+ (has-shield? symbol :offset-assert 420)
+ (proj-stoked basic :offset-assert 424)
+ (proj-status uint64 :offset-assert 432)
+ (part2 sparticle-launch-control :offset-assert 440)
+ (proj-last-thrown-time uint64 :offset-assert 448)
+ (nav-enemy-patrol-timeout uint64 :offset-assert 456)
+ (proj-launch-vec vector :inline :offset-assert 464)
+ (local-throw-point vector :inline :offset-assert 480)
+ (shield-jmod joint-mod-set-local :offset-assert 496)
+ )
+ :heap-base #x190
:method-count-assert 76
:size-assert #x1f4
- :heap-base #x190
:flag-assert #x4c019001f4
+ (:methods
+ (dummy-51 (_type_ vector) symbol :replace 51)
+ (dummy-52 (_type_) symbol :replace 52)
+ (dummy-57 (_type_ float) float :replace 57)
+ )
(:states
- ram-boss-tracking
- ram-boss-nav-resume
- ram-boss-throw
- ram-boss-nav-start
- ram-boss-jump-down-hit-ground
- (ram-boss-jump-down basic vector)
- (ram-boss-already-down basic vector)
- ram-boss-idle
- ram-boss-lose-shield
- ram-boss-up-defend-block
+ (ram-boss-already-down basic)
ram-boss-forward-defend-block
- ram-boss-show-anims)
+ ram-boss-idle
+ (ram-boss-jump-down basic)
+ ram-boss-jump-down-hit-ground
+ ram-boss-lose-shield
+ ram-boss-nav-resume
+ ram-boss-nav-start
+ ram-boss-show-anims
+ ram-boss-throw
+ ram-boss-tracking
+ ram-boss-up-defend-block
+ )
)
-(define-extern ram-boss-init-by-other (function basic nav-enemy symbol none :behavior ram-boss))
+
+
+(defskelgroup *ram-boss-sg* ram-boss
+ 0
+ 13
+ ((1 (meters 20)) (2 (meters 40)) (3 (meters 999999)))
+ :bounds (static-spherem 0 1 0 4.4)
+ :longest-edge (meters 1.2)
+ )
+
+(define *ram-boss-nav-enemy-info* (new 'static 'nav-enemy-info
+ :idle-anim 13
+ :walk-anim 11
+ :turn-anim -1
+ :notice-anim 19
+ :run-anim 11
+ :jump-anim 13
+ :jump-land-anim 13
+ :victory-anim 14
+ :taunt-anim 14
+ :die-anim 15
+ :neck-joint 6
+ :player-look-at-joint 5
+ :run-travel-speed (meters 6.0)
+ :run-rotate-speed (degrees 2880.0)
+ :run-acceleration (meters 1.0)
+ :run-turn-time (seconds 0.1)
+ :walk-travel-speed (meters 4.0)
+ :walk-rotate-speed (degrees 720.0)
+ :walk-acceleration (meters 1.0)
+ :walk-turn-time (seconds 0.5)
+ :attack-shove-back (meters 2.0)
+ :attack-shove-up (meters 0.5)
+ :shadow-size (meters 2.0)
+ :notice-nav-radius (meters 18.0)
+ :nav-nearest-y-threshold (meters 10.0)
+ :notice-distance (meters 58.0)
+ :stop-chase-distance (meters 58.0)
+ :frustration-time #x2328
+ :die-anim-hold-frame 24.0
+ :jump-anim-start-frame 10.0
+ :jump-land-anim-end-frame 10000000000.0
+ :jump-height-min (meters 3.0)
+ :jump-height-factor 0.5
+ :jump-start-anim-speed 1.0
+ :shadow-max-y (meters 1.0)
+ :shadow-min-y (meters -1.0)
+ :shadow-locus-dist (meters 150.0)
+ :use-align #f
+ :draw-shadow #t
+ :move-to-ground #t
+ :hover-if-no-ground #f
+ :use-momentum #f
+ :use-flee #f
+ :use-proximity-notice #f
+ :use-jump-blocked #f
+ :use-jump-patrol #f
+ :gnd-collide-with #x1
+ :debug-draw-neck #f
+ :debug-draw-jump #f
+ )
+ )
+
+(define *ram-boss-nav-enemy-info-no-shield* (new 'static 'nav-enemy-info
+ :idle-anim 13
+ :walk-anim 12
+ :turn-anim -1
+ :notice-anim 19
+ :run-anim 12
+ :jump-anim 13
+ :jump-land-anim 13
+ :victory-anim 14
+ :taunt-anim 14
+ :die-anim 15
+ :neck-joint 6
+ :player-look-at-joint 5
+ :run-travel-speed (meters 6.0)
+ :run-rotate-speed (degrees 2880.0)
+ :run-acceleration (meters 1.0)
+ :run-turn-time (seconds 0.1)
+ :walk-travel-speed (meters 4.0)
+ :walk-rotate-speed (degrees 720.0)
+ :walk-acceleration (meters 1.0)
+ :walk-turn-time (seconds 0.5)
+ :attack-shove-back (meters 2.0)
+ :attack-shove-up (meters 0.5)
+ :shadow-size (meters 2.0)
+ :notice-nav-radius (meters 18.0)
+ :nav-nearest-y-threshold (meters 10.0)
+ :notice-distance (meters 58.0)
+ :stop-chase-distance (meters 58.0)
+ :frustration-time #x2328
+ :die-anim-hold-frame 24.0
+ :jump-anim-start-frame 10.0
+ :jump-land-anim-end-frame 10000000000.0
+ :jump-height-min (meters 3.0)
+ :jump-height-factor 0.5
+ :jump-start-anim-speed 1.0
+ :shadow-max-y (meters 1.0)
+ :shadow-min-y (meters -1.0)
+ :shadow-locus-dist (meters 150.0)
+ :use-align #f
+ :draw-shadow #t
+ :move-to-ground #t
+ :hover-if-no-ground #f
+ :use-momentum #f
+ :use-flee #f
+ :use-proximity-notice #f
+ :use-jump-blocked #f
+ :use-jump-patrol #f
+ :gnd-collide-with #x1
+ :debug-draw-neck #f
+ :debug-draw-jump #f
+ )
+ )
+
+(defpartgroup group-ram-boss-proj-grow
+ :id 521
+ :flags (use-local-clock)
+ :bounds (static-bspherem 0 0 0 8)
+ :parts
+ ((sp-item 1904) (sp-item 1905) (sp-item 2487))
+ )
+
+(defpart 2487
+ :init-specs
+ ((sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2))
+ (sp-flt spt-num 1.0)
+ (sp-rnd-flt spt-scale-x (meters 1.5) (meters 1) 1.0)
+ (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0)
+ (sp-copy-from-other spt-scale-y -4)
+ (sp-rnd-flt spt-r 96.0 96.0 1.0)
+ (sp-rnd-flt spt-g 48.0 48.0 1.0)
+ (sp-rnd-flt spt-b 0.0 32.0 1.0)
+ (sp-rnd-flt spt-a 64.0 64.0 1.0)
+ (sp-flt spt-fade-a -6.4)
+ (sp-int spt-timer 10)
+ (sp-cpuinfo-flags bit2 bit3)
+ (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0)
+ (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0)
+ (sp-flt spt-conerot-radius (meters 0.4))
+ )
+ )
+
+(defpart 1904
+ :init-specs
+ ((sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2))
+ (sp-rnd-flt spt-num 1.0 2.0 1.0)
+ (sp-rnd-flt spt-scale-x (meters 0.3) (meters 0.1) 1.0)
+ (sp-copy-from-other spt-scale-y -4)
+ (sp-rnd-flt spt-r 160.0 32.0 1.0)
+ (sp-rnd-flt spt-g 0.0 32.0 1.0)
+ (sp-flt spt-b 0.0)
+ (sp-flt spt-a 64.0)
+ (sp-flt spt-vel-y (meters -0.033333335))
+ (sp-flt spt-fade-r -0.53333336)
+ (sp-flt spt-fade-g 1.0666667)
+ (sp-flt spt-fade-b 0.53333336)
+ (sp-flt spt-fade-a 1.0666667)
+ (sp-int spt-timer 60)
+ (sp-cpuinfo-flags bit2)
+ (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0)
+ (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0)
+ (sp-flt spt-conerot-radius (meters 2))
+ )
+ )
+
+(defpart 1905
+ :init-specs
+ ((sp-tex spt-texture (new 'static 'texture-id :index #x4 :page #x2))
+ (sp-flt spt-num 4.0)
+ (sp-rnd-flt spt-scale-x (meters 0.5) (meters 0.25) 1.0)
+ (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0)
+ (sp-copy-from-other spt-scale-y -4)
+ (sp-rnd-flt spt-r 150.0 32.0 1.0)
+ (sp-rnd-flt spt-g 24.0 74.0 1.0)
+ (sp-rnd-flt spt-b 0.0 32.0 1.0)
+ (sp-rnd-flt spt-a 64.0 64.0 1.0)
+ (sp-flt spt-fade-a -6.4)
+ (sp-int spt-timer 10)
+ (sp-cpuinfo-flags bit2)
+ (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0)
+ (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0)
+ (sp-flt spt-conerot-radius (meters 0.15))
+ )
+ )
+
+(defpartgroup group-ram-boss-proj-fly
+ :id 522
+ :duration 300
+ :bounds (static-bspherem 0 0 0 3)
+ :parts
+ ((sp-item 1910 :flags (launch-asap) :binding 1908)
+ (sp-item 1908 :flags (start-dead) :binding 1909)
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ )
+ )
+
+(defpart 1910
+ :init-specs
+ ((sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2))
+ (sp-flt spt-num 1.0)
+ (sp-flt spt-scale-x (meters 0.01))
+ (sp-copy-from-other spt-scale-y -4)
+ (sp-flt spt-a 0.0)
+ (sp-int spt-timer 1200)
+ (sp-cpuinfo-flags bit3)
+ (sp-func spt-func 'sparticle-track-root-prim)
+ )
+ )
+
+(defpart 1908
+ :init-specs
+ ((sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2))
+ (sp-flt spt-num 1.0)
+ (sp-flt spt-scale-x (meters 1))
+ (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0)
+ (sp-copy-from-other spt-scale-y -4)
+ (sp-rnd-flt spt-r 128.0 32.0 1.0)
+ (sp-rnd-flt spt-g 64.0 32.0 1.0)
+ (sp-flt spt-b 32.0)
+ (sp-flt spt-a 128.0)
+ (sp-flt spt-scalevel-x (meters -0.006666667))
+ (sp-copy-from-other spt-scalevel-y -4)
+ (sp-flt spt-fade-r 0.53333336)
+ (sp-flt spt-fade-g -1.0666667)
+ (sp-flt spt-fade-b -0.53333336)
+ (sp-int spt-timer 150)
+ (sp-cpuinfo-flags bit2)
+ (sp-int spt-next-time 81)
+ (sp-launcher-by-id spt-next-launcher 1912)
+ (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0)
+ (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0)
+ (sp-flt spt-conerot-radius (meters 0.1))
+ )
+ )
+
+(defpart 1912
+ :init-specs
+ ((sp-flt spt-fade-r 0.0) (sp-flt spt-fade-g 0.0) (sp-flt spt-fade-b 0.0))
+ )
+
+(defpart 1909
+ :init-specs
+ ((sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2))
+ (sp-rnd-flt spt-num 1.0 5.0 1.0)
+ (sp-rnd-flt spt-scale-x (meters 0.2) (meters 0.1) 1.0)
+ (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0)
+ (sp-copy-from-other spt-scale-y -4)
+ (sp-rnd-flt spt-r 128.0 32.0 1.0)
+ (sp-rnd-flt spt-g 64.0 32.0 1.0)
+ (sp-flt spt-b 32.0)
+ (sp-flt spt-a 128.0)
+ (sp-rnd-flt spt-vel-y (meters 0.006666667) (meters 0.0033333334) 1.0)
+ (sp-flt spt-scalevel-x (meters -0.0026666666))
+ (sp-copy-from-other spt-scalevel-y -4)
+ (sp-flt spt-fade-r 0.53333336)
+ (sp-flt spt-fade-g -1.0666667)
+ (sp-flt spt-fade-b -0.53333336)
+ (sp-flt spt-accel-y -2.7306666)
+ (sp-flt spt-friction 0.97)
+ (sp-int-plain-rnd spt-timer 30 119 1)
+ (sp-cpuinfo-flags bit2)
+ (sp-int spt-next-time 60)
+ (sp-launcher-by-id spt-next-launcher 1912)
+ (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0)
+ (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0)
+ (sp-rnd-flt spt-conerot-radius (meters 0) (meters 0.4) 1.0)
+ )
+ )
+
+(defpartgroup group-ram-boss-proj-hit
+ :id 523
+ :duration 5
+ :flags (use-local-clock)
+ :bounds (static-bspherem 0 0 0 8)
+ :parts
+ ((sp-item 1914) (sp-item 1915) (sp-item 1916))
+ )
+
+(defpart 1914
+ :init-specs
+ ((sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2))
+ (sp-flt spt-num 64.0)
+ (sp-rnd-flt spt-scale-x (meters 0.5) (meters 0.2) 1.0)
+ (sp-copy-from-other spt-scale-y -4)
+ (sp-rnd-flt spt-r 192.0 32.0 1.0)
+ (sp-rnd-flt spt-g 96.0 64.0 1.0)
+ (sp-rnd-flt spt-b 32.0 32.0 1.0)
+ (sp-rnd-flt spt-a 32.0 32.0 1.0)
+ (sp-rnd-flt spt-vel-y (meters 0.026666667) (meters 0.053333335) 1.0)
+ (sp-flt spt-scalevel-x (meters -0.0033333334))
+ (sp-copy-from-other spt-scalevel-y -4)
+ (sp-flt spt-fade-r 0.0)
+ (sp-flt spt-fade-g -0.42666668)
+ (sp-flt spt-fade-b -0.21333334)
+ (sp-flt spt-accel-y -0.68266666)
+ (sp-flt spt-friction 0.97)
+ (sp-int-plain-rnd spt-timer 30 119 1)
+ (sp-cpuinfo-flags bit2)
+ (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0)
+ (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0)
+ (sp-rnd-flt spt-conerot-radius (meters 0) (meters 0.4) 1.0)
+ )
+ )
+
+(defpart 1916
+ :init-specs
+ ((sp-tex spt-texture (new 'static 'texture-id :page #x2))
+ (sp-flt spt-num 6.0)
+ (sp-rnd-flt spt-scale-x (meters 3) (meters 3) 1.0)
+ (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0)
+ (sp-copy-from-other spt-scale-y -4)
+ (sp-rnd-flt spt-r 128.0 32.0 1.0)
+ (sp-rnd-flt spt-g 64.0 32.0 1.0)
+ (sp-flt spt-b 32.0)
+ (sp-rnd-flt spt-a 32.0 32.0 1.0)
+ (sp-rnd-flt spt-rotvel-z (degrees -0.2) (degrees 0.4) 1.0)
+ (sp-flt spt-fade-r 0.21333334)
+ (sp-flt spt-fade-g -0.42666668)
+ (sp-flt spt-fade-b -0.21333334)
+ (sp-flt spt-fade-a -0.30476192)
+ (sp-rnd-flt spt-accel-y -0.68266666 0.68266666 1.0)
+ (sp-int spt-timer 210)
+ (sp-cpuinfo-flags bit2 bit3)
+ (sp-int spt-next-time 150)
+ (sp-launcher-by-id spt-next-launcher 1912)
+ (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 180.0) 1.0)
+ )
+ )
+
+(defpart 1915
+ :init-specs
+ ((sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2))
+ (sp-flt spt-num 1.0)
+ (sp-rnd-flt spt-scale-x (meters 6) (meters 1) 1.0)
+ (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0)
+ (sp-copy-from-other spt-scale-y -4)
+ (sp-rnd-flt spt-r 128.0 32.0 1.0)
+ (sp-rnd-flt spt-g 64.0 32.0 1.0)
+ (sp-flt spt-b 32.0)
+ (sp-flt spt-a 96.0)
+ (sp-flt spt-fade-a -4.8)
+ (sp-int spt-timer 15)
+ (sp-cpuinfo-flags bit2 bit3)
+ )
+ )
+
+(defpartgroup group-ram-boss-proj-die
+ :id 524
+ :duration 5
+ :flags (use-local-clock)
+ :bounds (static-bspherem 0 0 0 8)
+ :parts
+ ((sp-item 1914))
+ )
+
+(defmethod dummy-24 ram-boss-proj ((obj ram-boss-proj))
+ (with-pp
+ (quaternion-rotate-local-x!
+ (-> obj root-override quat)
+ (-> obj root-override quat)
+ (* 65718.05 (-> *display* seconds-per-frame))
+ )
+ (quaternion-rotate-local-y!
+ (-> obj root-override quat)
+ (-> obj root-override quat)
+ (* 32221.867 (-> *display* seconds-per-frame))
+ )
+ (let ((f0-9 (* 5120.0 (+ 0.9 (* 0.1 (cos (* 873.81335 (the float (mod (-> *display* base-frame-counter) 75)))))))))
+ (find-ground-and-draw-shadow
+ (-> obj root-override trans)
+ (the-as vector #f)
+ f0-9
+ (collide-kind background)
+ (the-as process #f)
+ 0.0
+ 81920.0
+ )
+ )
+ (if (-> obj launched?)
+ (spawn (-> obj part2) (the-as vector (-> obj root-override root-prim prim-core)))
+ )
+ (#when PC_DEBUG_SOUND_ENABLE
+ (let ((s5-0 (the-as sound-rpc-set-param (get-sound-buffer-entry))))
+ (set! (-> s5-0 command) (sound-command set-param))
+ (set! (-> s5-0 id) (-> obj sound-id))
+ (let ((a1-4 (-> obj root-override trans)))
+ (let ((gp-1 pp))
+ (when (= a1-4 #t)
+ (if (and gp-1 (type-type? (-> gp-1 type) process-drawable) (nonzero? (-> (the-as process-drawable gp-1) root)))
+ (set! a1-4 (-> (the-as process-drawable gp-1) root trans))
+ (set! a1-4 (the-as vector #f))
+ )
+ )
+ )
+ (sound-trans-convert (-> s5-0 parms trans) a1-4)
+ )
+ (set! (-> s5-0 parms mask) (the-as uint 32))
+ (-> s5-0 id)
+ )
+ )
+ (none)
+ )
+ )
+
+(defun snow-ram-proj-update-velocity ((arg0 ram-boss-proj))
+ (when (>= (vector-vector-distance (-> arg0 parent-override 0 collide-info trans) (-> arg0 target))
+ (vector-vector-distance (-> arg0 parent-override 0 collide-info trans) (-> arg0 root-override trans))
+ )
+ (let ((s3-1 (vector-! (new 'stack-no-clear 'vector) (-> arg0 target) (-> arg0 root-override trans)))
+ (s4-0 (new 'stack-no-clear 'vector))
+ (s5-0 (vector-normalize-copy! (new 'stack-no-clear 'vector) (-> arg0 root-override transv) 1.0))
+ )
+ (if (logtest? (-> arg0 root-override status) 4)
+ (vector-flatten! s3-1 s3-1 (-> arg0 root-override local-normal))
+ )
+ (vector-normalize-copy! s4-0 s3-1 1.0)
+ (let ((s3-2 (new 'stack-no-clear 'matrix)))
+ (matrix-from-two-vectors-max-angle-partial!
+ s3-2
+ s5-0
+ s4-0
+ (* (-> arg0 max-turn) (-> *display* seconds-per-frame))
+ (-> arg0 tween)
+ )
+ (vector-matrix*! s5-0 s5-0 s3-2)
+ )
+ (vector-normalize! s5-0 1.0)
+ (vector-float*! (-> arg0 root-override transv) s5-0 (-> arg0 max-speed))
+ )
+ )
+ 0
+ (none)
+ )
+
+(defmethod dummy-25 ram-boss-proj ((obj ram-boss-proj))
+ (go ram-boss-proj-growing)
+ 0
+ (none)
+ )
+
+(defmethod dummy-26 ram-boss-proj ((obj ram-boss-proj))
+ (let ((s5-0 (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player))))
+ (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process))
+ (set! (-> s5-0 reaction) projectile-collision-reaction)
+ (set! (-> s5-0 no-reaction)
+ (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing)
+ )
+ (let ((s4-0 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 0))))
+ (set! (-> s4-0 prim-core collide-as) (collide-kind projectile))
+ (set! (-> s4-0 collide-with)
+ (collide-kind background cak-2 cak-3 target crate enemy wall-object ground-object)
+ )
+ (set! (-> s4-0 prim-core offense) (collide-offense strong-attack))
+ (set-vector! (-> s4-0 local-sphere) 0.0 0.0 0.0 1228.8)
+ (set-root-prim! s5-0 s4-0)
+ )
+ (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w)))
+ (backup-collide-with-as s5-0)
+ (set! (-> s5-0 max-iteration-count) (the-as uint 2))
+ (set! (-> s5-0 event-self) 'touched)
+ (set! (-> obj root-override) s5-0)
+ )
+ 0
+ (none)
+ )
+
+(defmethod dummy-27 ram-boss-proj ((obj ram-boss-proj))
+ (set! (-> obj charge-sound-id) (new 'static 'sound-id))
+ (set! (-> obj part) (create-launch-control (-> *part-group-id-table* 521) obj))
+ (set! (-> obj part2) (create-launch-control (-> *part-group-id-table* 522) obj))
+ (set! (-> obj launched?) #f)
+ (set! (-> obj growth) 0.0)
+ (set! (-> obj max-speed) 40960.0)
+ (set! (-> obj update-velocity) snow-ram-proj-update-velocity)
+ (set! (-> obj max-turn) 11832.889)
+ (set! (-> obj tween) 0.02)
+ (set! (-> obj attack-mode) 'snow-ram-proj)
+ (set! (-> obj launch-time) (the-as uint (-> *display* base-frame-counter)))
+ (set! (-> obj timeout) (the-as uint 1200))
+ (set! (-> obj sound-id) (sound-play-by-name (static-sound-name "ramboss-track") (new-sound-id) 1024 0 0 1 #t))
+ (let ((v1-12 (-> obj parent-override)))
+ (set! (-> v1-12 0 proj-stoked) #t)
+ (set! (-> v1-12 0 proj-status) (the-as uint 1))
+ )
+ (none)
+ )
+
+(defmethod deactivate ram-boss-proj ((obj ram-boss-proj))
+ (if (nonzero? (-> obj part2))
+ (kill-and-free-particles (-> obj part2))
+ )
+ ((method-of-type projectile deactivate) obj)
+ (none)
+ )
+
+(defmethod relocate ram-boss-proj ((obj ram-boss-proj) (arg0 int))
+ (if (nonzero? (-> obj part2))
+ (&+! (-> obj part2) arg0)
+ )
+ (the-as ram-boss-proj ((method-of-type projectile relocate) obj arg0))
+ )
+
+(defmethod dummy-28 ram-boss-proj ((obj ram-boss-proj))
+ (when (and *target* (zero? (logand (-> *target* state-flags) #x80f8)))
+ (let ((gp-0 (-> obj target)))
+ (set! (-> gp-0 quad) (-> (target-pos 0) quad))
+ (set! (-> gp-0 y) (+ 4915.2 (-> gp-0 y)))
+ (let ((f0-2 (vector-vector-distance gp-0 (-> obj root-override trans)))
+ (a2-0 (new 'stack-no-clear 'vector))
+ )
+ (if (>= 0.0 f0-2)
+ (set! f0-2 409.6)
+ )
+ (set! (-> a2-0 quad) (-> *target* control transv quad))
+ (set! (-> a2-0 y) 0.0)
+ (let ((f0-3 (/ f0-2 (* 40960.0 (-> *display* seconds-per-frame)))))
+ (vector+float*! gp-0 gp-0 a2-0 (* f0-3 (-> *display* seconds-per-frame)))
+ )
+ )
+ )
+ )
+ (none)
+ )
+
+(defstate ram-boss-proj-growing (ram-boss-proj)
+ :event
+ (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block))
+ (case arg2
+ (('launch)
+ (let ((v1-1 (-> self parent-override)))
+ (set! (-> v1-1 0 proj-stoked) #f)
+ (set! (-> v1-1 0 proj-status) (the-as uint 0))
+ )
+ 0
+ (go ram-boss-proj-launch)
+ )
+ )
+ )
+ :code
+ (behavior ()
+ (set! (-> self charge-sound-id)
+ (sound-play-by-name (static-sound-name "ramboss-charge") (new-sound-id) 1024 0 0 1 #t)
+ )
+ (while #t
+ (let ((gp-1 (-> self parent-override)))
+ (when (-> gp-1 0 dead?)
+ (set! (-> gp-1 0 proj-stoked) #f)
+ (set! (-> gp-1 0 proj-status) (the-as uint 0))
+ (sound-stop (-> self charge-sound-id))
+ (go-virtual projectile-dissipate)
+ )
+ (dummy-54 (-> gp-1 0) (-> self root-override trans))
+ (update-transforms! (-> self root-override))
+ (cond
+ ((-> gp-1 0 proj-stoked)
+ (set! (-> gp-1 0 proj-stoked) #f)
+ (set! (-> self growth)
+ (seek-with-smooth (-> self growth) 1.0 (* 1.25 (-> *display* seconds-per-frame)) 0.8 0.01)
+ )
+ (if (>= (-> self growth) 1.0)
+ (set! (-> gp-1 0 proj-status) (the-as uint 2))
+ (set! (-> gp-1 0 proj-status) (the-as uint 1))
+ )
+ )
+ (else
+ (set! (-> self growth) 0.0)
+ (set! (-> gp-1 0 proj-stoked) #f)
+ (set! (-> gp-1 0 proj-status) (the-as uint 0))
+ (sound-stop (-> self charge-sound-id))
+ (go-virtual projectile-dissipate)
+ )
+ )
+ )
+ (let ((f0-6 (-> self growth)))
+ (set-vector! (-> self root-override scale) f0-6 f0-6 f0-6 1.0)
+ )
+ (spawn (-> self part) (-> self root-override trans))
+ (suspend)
+ )
+ (none)
+ )
+ )
+
+(defstate ram-boss-proj-launch (ram-boss-proj)
+ :code
+ (behavior ()
+ (sound-play-by-name (static-sound-name "ramboss-fire") (new-sound-id) 1024 0 0 1 #t)
+ (set! (-> self launched?) #t)
+ (set! (-> self growth) 1.0)
+ (logior! (-> self root-override root-prim prim-core action) (collide-action solid))
+ (set! (-> self launch-time) (the-as uint (-> *display* base-frame-counter)))
+ (vector-float*! (-> self root-override transv) (-> self parent-override 0 proj-launch-vec) 40960.0)
+ (set! (-> self target quad) (-> (target-pos 0) quad))
+ (set! (-> self target y) (+ 4915.2 (-> self target y)))
+ (set! (-> self target-base quad) (-> self target quad))
+ (go-virtual projectile-moving)
+ (none)
+ )
+ )
+
+(defstate projectile-impact (ram-boss-proj)
+ :virtual #t
+ :code
+ (behavior ()
+ (let ((gp-0 (get-process *default-dead-pool* part-tracker #x4000)))
+ (when gp-0
+ (let ((t9-1 (method-of-type part-tracker activate)))
+ (t9-1 (the-as part-tracker gp-0) *entity-pool* 'part-tracker (the-as pointer #x70004000))
+ )
+ (run-now-in-process
+ gp-0
+ part-tracker-init
+ (-> *part-group-id-table* 523)
+ -1
+ #f
+ #f
+ #f
+ (-> self root-override trans)
+ )
+ (-> gp-0 ppointer)
+ )
+ )
+ (if (nonzero? (-> self sound-id))
+ (sound-stop (-> self sound-id))
+ )
+ (sound-play-by-name (static-sound-name "ramboss-hit") (new-sound-id) 1024 0 0 1 #t)
+ (suspend)
+ (go-virtual projectile-die)
+ (none)
+ )
+ )
+
+(defstate projectile-dissipate (ram-boss-proj)
+ :virtual #t
+ :code
+ (behavior ()
+ (let ((gp-0 (get-process *default-dead-pool* part-tracker #x4000)))
+ (when gp-0
+ (let ((t9-1 (method-of-type part-tracker activate)))
+ (t9-1 (the-as part-tracker gp-0) *entity-pool* 'part-tracker (the-as pointer #x70004000))
+ )
+ (run-now-in-process
+ gp-0
+ part-tracker-init
+ (-> *part-group-id-table* 524)
+ -1
+ #f
+ #f
+ #f
+ (-> self root-override trans)
+ )
+ (-> gp-0 ppointer)
+ )
+ )
+ (if (nonzero? (-> self sound-id))
+ (sound-stop (-> self sound-id))
+ )
+ (suspend)
+ (go-virtual projectile-die)
+ (none)
+ )
+ )
+
+(defpartgroup group-ram-boss-shield-on-fire
+ :id 525
+ :flags (use-local-clock)
+ :bounds (static-bspherem 0 0 0 8)
+ :parts
+ ((sp-item 1919))
+ )
+
+(defpart 1919
+ :init-specs
+ ((sp-tex spt-texture (new 'static 'texture-id :page #x2))
+ (sp-flt spt-num 2.0)
+ (sp-rnd-flt spt-x (meters -0.25) (meters 0.5) 1.0)
+ (sp-rnd-flt spt-z (meters -0.25) (meters 0.5) 1.0)
+ (sp-rnd-flt spt-scale-x (meters 1) (meters 2) 1.0)
+ (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0)
+ (sp-copy-from-other spt-scale-y -4)
+ (sp-flt spt-r 128.0)
+ (sp-rnd-flt spt-g 0.0 128.0 1.0)
+ (sp-flt spt-b 0.0)
+ (sp-rnd-flt spt-a 32.0 64.0 1.0)
+ (sp-rnd-flt spt-vel-y (meters 0.006666667) (meters 0.006666667) 1.0)
+ (sp-flt spt-scalevel-x (meters 0.023529412))
+ (sp-rnd-flt spt-rotvel-z (degrees -0.6) (degrees 1.2) 1.0)
+ (sp-copy-from-other spt-scalevel-y -4)
+ (sp-flt spt-fade-a -1.5058824)
+ (sp-flt spt-friction 0.98)
+ (sp-int spt-timer 81)
+ (sp-cpuinfo-flags bit2 bit3 bit14)
+ (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 360.0) 1.0)
+ )
+ )
+
+(defpartgroup group-ram-boss-foot-puff
+ :id 574
+ :duration 5
+ :linger-duration 450
+ :bounds (static-bspherem 0 0 0 2)
+ :parts
+ ((sp-item 2367) (sp-item 2368) (sp-item 2369))
+ )
+
+(defpart 2367
+ :init-specs
+ ((sp-tex spt-texture (new 'static 'texture-id :page #x2))
+ (sp-flt spt-num 16.0)
+ (sp-rnd-flt spt-scale-x (meters 1) (meters 1) 1.0)
+ (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0)
+ (sp-copy-from-other spt-scale-y -4)
+ (sp-rnd-flt spt-r 196.0 64.0 1.0)
+ (sp-rnd-flt spt-g 196.0 64.0 1.0)
+ (sp-rnd-flt spt-b 196.0 64.0 1.0)
+ (sp-rnd-flt spt-a 16.0 32.0 1.0)
+ (sp-rnd-flt spt-vel-y (meters 0.02) (meters 0.01) 1.0)
+ (sp-flt spt-scalevel-x (meters 0.0033333334))
+ (sp-rnd-flt spt-rotvel-z (degrees -0.2) (degrees 0.4) 1.0)
+ (sp-copy-from-other spt-scalevel-y -4)
+ (sp-flt spt-fade-a -0.16)
+ (sp-flt spt-accel-y -1.3653333)
+ (sp-flt spt-friction 0.95)
+ (sp-int spt-timer 300)
+ (sp-cpuinfo-flags bit2 bit12)
+ (sp-rnd-flt spt-conerot-x (degrees 60.0) (degrees 30.0) 1.0)
+ (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0)
+ )
+ )
+
+(defpart 2368
+ :init-specs
+ ((sp-tex spt-texture (new 'static 'texture-id :page #x2))
+ (sp-flt spt-num 12.0)
+ (sp-rnd-flt spt-scale-x (meters 0.5) (meters 0.25) 1.0)
+ (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0)
+ (sp-copy-from-other spt-scale-y -4)
+ (sp-rnd-flt spt-r 196.0 64.0 1.0)
+ (sp-rnd-flt spt-g 196.0 64.0 1.0)
+ (sp-rnd-flt spt-b 196.0 64.0 1.0)
+ (sp-rnd-flt spt-a 16.0 16.0 1.0)
+ (sp-rnd-flt spt-vel-y (meters 0.053333335) (meters 0.02) 1.0)
+ (sp-flt spt-scalevel-x (meters 0.0016666667))
+ (sp-rnd-flt spt-rotvel-z (degrees -0.2) (degrees 0.4) 1.0)
+ (sp-copy-from-other spt-scalevel-y -4)
+ (sp-flt spt-fade-a -0.21333334)
+ (sp-flt spt-accel-y -1.3653333)
+ (sp-flt spt-friction 0.95)
+ (sp-int spt-timer 150)
+ (sp-cpuinfo-flags bit2 bit12)
+ (sp-rnd-flt spt-conerot-x (degrees 60.0) (degrees 30.0) 1.0)
+ (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0)
+ )
+ )
+
+(defpart 2369
+ :init-specs
+ ((sp-tex spt-texture (new 'static 'texture-id :index #x4 :page #x2))
+ (sp-flt spt-num 32.0)
+ (sp-rnd-flt spt-x (meters -0.4) (meters 0.8) 1.0)
+ (sp-rnd-flt spt-y (meters -0.1) (meters 0.4) 1.0)
+ (sp-rnd-flt spt-z (meters -0.4) (meters 0.8) 1.0)
+ (sp-rnd-flt spt-scale-x (meters 0.07) (meters 0.02) 1.0)
+ (sp-copy-from-other spt-scale-y -4)
+ (sp-rnd-flt spt-r 196.0 2.0 64.0)
+ (sp-rnd-int spt-g 1128529920 1 64.0)
+ (sp-rnd-int spt-b 1128529920 1 64.0)
+ (sp-rnd-flt spt-a 64.0 64.0 1.0)
+ (sp-rnd-flt spt-vel-y (meters 0.015) (meters 0.006666667) 1.0)
+ (sp-flt spt-fade-a -0.42666668)
+ (sp-rnd-flt spt-accel-y -5.4613333 2.7306666 1.0)
+ (sp-int spt-timer 300)
+ (sp-cpuinfo-flags bit2 bit12)
+ (sp-rnd-flt spt-conerot-x (degrees 30.0) (degrees 50.000004) 1.0)
+ (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0)
+ (sp-flt spt-conerot-radius (meters 0.5))
+ )
+ )
+
+;; WARN: disable def twice: 194. This may happen when a cond (no else) is nested inside of another conditional, but it should be rare.
+(defbehavior ram-boss-on-ground-event-handler ram-boss ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block))
+ (local-vars (v0-4 object))
+ (case arg2
+ (('attack 'bonk 'roll)
+ (cond
+ ((-> self has-shield?)
+ (let ((a1-3 (new 'stack-no-clear 'event-message-block)))
+ (set! (-> a1-3 from) self)
+ (set! (-> a1-3 num-params) 2)
+ (set! (-> a1-3 message) 'query)
+ (set! (-> a1-3 param 0) (the-as uint 'powerup))
+ (set! (-> a1-3 param 1) (the-as uint 2))
+ (cond
+ ((send-event-function *target* a1-3)
+ (nav-enemy-set-hit-from-direction arg0)
+ (let ((a1-4 (new 'stack-no-clear 'event-message-block)))
+ (set! (-> a1-4 from) self)
+ (set! (-> a1-4 num-params) 2)
+ (set! (-> a1-4 message) 'shove)
+ (set! (-> a1-4 param 0) (the-as uint #f))
+ (let ((v1-9 (new 'static 'attack-info :mask #x40)))
+ (set! (-> v1-9 shove-back) 8192.0)
+ (set! (-> a1-4 param 1) (the-as uint v1-9))
+ )
+ (send-event-function arg0 a1-4)
+ )
+ (go ram-boss-lose-shield)
+ (return #t)
+ v0-4
+ )
+ ((begin
+ (if (zero? (logand (-> self nav-enemy-flags) 256))
+ (do-push-aways! (-> self collide-info))
+ )
+ (level-hint-spawn
+ (game-text-id ram-boss-red-eco-hint)
+ "sksp0346"
+ (the-as entity #f)
+ *entity-pool*
+ (game-task none)
+ )
+ (>= (- (-> (target-pos 0) y) (-> self collide-info trans y)) 9420.8)
+ )
+ (let ((a1-6 (new 'stack-no-clear 'event-message-block)))
+ (set! (-> a1-6 from) self)
+ (set! (-> a1-6 num-params) 2)
+ (set! (-> a1-6 message) 'shove)
+ (set! (-> a1-6 param 0) (the-as uint #f))
+ (let ((v1-22 (new 'static 'attack-info :mask #xc0)))
+ (set! (-> v1-22 shove-back) 16384.0)
+ (set! (-> v1-22 shove-up) 8192.0)
+ (set! (-> a1-6 param 1) (the-as uint v1-22))
+ )
+ (send-event-function arg0 a1-6)
+ )
+ (go ram-boss-up-defend-block)
+ (return #t)
+ v0-4
+ )
+ (else
+ (when (= arg2 'attack)
+ (let ((a1-7 (new 'stack-no-clear 'event-message-block)))
+ (set! (-> a1-7 from) self)
+ (set! (-> a1-7 num-params) 2)
+ (set! (-> a1-7 message) 'shove)
+ (set! (-> a1-7 param 0) (the-as uint #f))
+ (let ((v1-30 (new 'static 'attack-info :mask #x40)))
+ (set! (-> v1-30 shove-back) 16384.0)
+ (set! (-> a1-7 param 1) (the-as uint v1-30))
+ )
+ (send-event-function arg0 a1-7)
+ )
+ (go ram-boss-forward-defend-block)
+ (return #t)
+ v0-4
+ )
+ )
+ )
+ )
+ )
+ (else
+ (go-virtual nav-enemy-die)
+ (return #t)
+ v0-4
+ )
+ )
+ )
+ (('touch)
+ (if (zero? (logand (-> self nav-enemy-flags) 256))
+ (do-push-aways! (-> self collide-info))
+ )
+ (cond
+ ((-> self has-shield?)
+ (cond
+ ((>= (- (-> (target-pos 0) y) (-> self collide-info trans y)) 9420.8)
+ (let ((a1-8 (new 'stack-no-clear 'event-message-block)))
+ (set! (-> a1-8 from) self)
+ (set! (-> a1-8 num-params) 2)
+ (set! (-> a1-8 message) 'shove)
+ (set! (-> a1-8 param 0) (-> arg3 param 0))
+ (let ((v1-49 (new 'static 'attack-info :mask #xc0)))
+ (set! (-> v1-49 shove-back) 16384.0)
+ (set! (-> v1-49 shove-up) 8192.0)
+ (set! (-> a1-8 param 1) (the-as uint v1-49))
+ )
+ (send-event-function arg0 a1-8)
+ )
+ (go ram-boss-up-defend-block)
+ (return #t)
+ v0-4
+ )
+ (else
+ (when (= arg2 'attack)
+ (let ((a1-9 (new 'stack-no-clear 'event-message-block)))
+ (set! (-> a1-9 from) self)
+ (set! (-> a1-9 num-params) 2)
+ (set! (-> a1-9 message) 'shove)
+ (set! (-> a1-9 param 0) (-> arg3 param 0))
+ (let ((v1-58 (new 'static 'attack-info :mask #x40)))
+ (set! (-> v1-58 shove-back) 16384.0)
+ (set! (-> a1-9 param 1) (the-as uint v1-58))
+ )
+ (send-event-function arg0 a1-9)
+ )
+ (go ram-boss-forward-defend-block)
+ (return #t)
+ v0-4
+ )
+ )
+ )
+ )
+ (else
+ (if (nav-enemy-send-attack arg0 (the-as touching-shapes-entry (-> arg3 param 0)) 'generic)
+ (go-virtual nav-enemy-victory)
+ )
+ )
+ )
+ )
+ (('notify)
+ (when (= (-> arg0 type) ram-boss-proj)
+ (let ((v1-66 arg0))
+ (cond
+ ((= (-> arg3 param 0) 'attack)
+ (when (= (-> arg3 param 1) *target*)
+ (set! (-> self frustration) 0)
+ (go-virtual nav-enemy-victory)
+ (return #t)
+ v0-4
+ )
+ )
+ ((= (-> arg3 param 0) 'die)
+ (let* ((v1-73 (- (-> *display* base-frame-counter) (the-as int (-> (the-as ram-boss v1-66) proj-status))))
+ (v1-74 (- 1200 v1-73))
+ )
+ (cond
+ ((< 1200 v1-74)
+ (set! v1-74 1200)
+ )
+ ((< v1-74 0)
+ (set! v1-74 0)
+ )
+ )
+ (+! (-> self frustration) (the int (* 0.00083333335 (the float (* v1-74 128)))))
+ )
+ (when (< 256 (-> self frustration))
+ (set! v0-4 256)
+ (set! (-> self frustration) (the-as int v0-4))
+ v0-4
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+
+(defmethod deactivate ram-boss ((obj ram-boss))
+ (if (nonzero? (-> obj part2))
+ (kill-and-free-particles (-> obj part2))
+ )
+ ((method-of-type nav-enemy deactivate) obj)
+ (none)
+ )
+
+(defmethod relocate ram-boss ((obj ram-boss) (arg0 int))
+ (if (nonzero? (-> obj shield-jmod))
+ (&+! (-> obj shield-jmod) arg0)
+ )
+ (if (nonzero? (-> obj part2))
+ (&+! (-> obj part2) arg0)
+ )
+ (the-as ram-boss ((method-of-type nav-enemy relocate) obj arg0))
+ )
+
+(defmethod initialize-collision ram-boss ((obj ram-boss))
+ (let ((s5-0 (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player))))
+ (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process))
+ (set! (-> s5-0 reaction) default-collision-reaction)
+ (set! (-> s5-0 no-reaction)
+ (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing)
+ )
+ (let ((s4-0 (new 'process 'collide-shape-prim-group s5-0 (the-as uint 4) 0)))
+ (set! (-> s4-0 prim-core collide-as) (collide-kind enemy wall-object))
+ (set! (-> s4-0 collide-with) (collide-kind target))
+ (set! (-> s4-0 prim-core action) (collide-action solid))
+ (set-vector! (-> s4-0 local-sphere) 0.0 8192.0 -4096.0 11468.8)
+ (set-root-prim! s5-0 s4-0)
+ (let ((s3-0 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 3))))
+ (set! (-> s3-0 prim-core collide-as) (collide-kind enemy))
+ (set! (-> s3-0 collide-with) (collide-kind target))
+ (set! (-> s3-0 prim-core action) (collide-action solid))
+ (set! (-> s3-0 prim-core offense) (collide-offense indestructible))
+ (set-vector! (-> s3-0 local-sphere) 0.0 4096.0 -2048.0 6144.0)
+ (append-prim s4-0 s3-0)
+ )
+ (let ((s3-1 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 3))))
+ (set! (-> s3-1 prim-core collide-as) (collide-kind enemy))
+ (set! (-> s3-1 collide-with) (collide-kind target))
+ (set! (-> s3-1 prim-core action) (collide-action solid))
+ (set! (-> s3-1 prim-core offense) (collide-offense indestructible))
+ (set-vector! (-> s3-1 local-sphere) 0.0 8601.6 -2048.0 7782.4)
+ (append-prim s4-0 s3-1)
+ )
+ (let ((s3-2 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 1))))
+ (set! (-> s3-2 prim-core collide-as) (collide-kind enemy))
+ (set! (-> s3-2 collide-with) (collide-kind target))
+ (set! (-> s3-2 prim-core offense) (collide-offense no-offense))
+ (set! (-> s3-2 transform-index) 6)
+ (set-vector! (-> s3-2 local-sphere) 0.0 0.0 0.0 4096.0)
+ (append-prim s4-0 s3-2)
+ )
+ (let ((s3-3 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 3))))
+ (set! (-> s3-3 prim-core offense) (collide-offense indestructible))
+ (set! (-> s3-3 transform-index) 3)
+ (set-vector! (-> s3-3 local-sphere) 0.0 0.0 0.0 409.6)
+ (append-prim s4-0 s3-3)
+ )
+ )
+ (set! (-> s5-0 nav-radius) 10240.0)
+ (backup-collide-with-as s5-0)
+ (set! (-> s5-0 max-iteration-count) (the-as uint 2))
+ (set! (-> obj collide-info) s5-0)
+ )
+ 0
+ (none)
+ )
+
+(defmethod dummy-52 ram-boss ((obj ram-boss))
+ (let ((v1-1 (the-as basic (-> obj collide-info root-prim))))
+ (set-vector! (-> (the-as collide-shape-prim v1-1) local-sphere) 0.0 8192.0 0.0 13516.8)
+ (set-vector! (-> (the-as (array collide-shape-prim) v1-1) 16 local-sphere) 0.0 4096.0 0.0 4505.6)
+ (set-vector! (-> (the-as (array collide-shape-prim) v1-1) 17 local-sphere) 0.0 9830.4 0.0 4505.6)
+ (set-vector! (-> (the-as (array collide-shape-prim) v1-1) 18 local-sphere) 0.0 0.0 0.0 2048.0)
+ (let ((v1-2 (-> (the-as (array collide-shape-prim) v1-1) 19)))
+ (logior! (-> v1-2 prim-core action) (collide-action solid))
+ (set! (-> v1-2 collide-with) (collide-kind target))
+ (set! (-> v1-2 prim-core collide-as) (collide-kind enemy))
+ (let ((v0-0 (-> v1-2 local-sphere)))
+ (set! (-> v0-0 x) 0.0)
+ (set! (-> v0-0 y) 819.2)
+ (set! (-> v0-0 z) 4505.6)
+ (set! (-> v0-0 w) 8192.0)
+ (the-as symbol v0-0)
+ )
+ )
+ )
+ )
+
+(defmethod dummy-53 ram-boss ((obj ram-boss))
+ (let ((v1-1 (the-as (array collide-shape-prim) (-> obj collide-info root-prim))))
+ (let ((a0-1 (-> v1-1 16)))
+ (set! (-> a0-1 prim-core offense) (collide-offense touch))
+ )
+ (let ((a0-2 (-> v1-1 17)))
+ (set! (-> a0-2 prim-core offense) (collide-offense touch))
+ )
+ (let ((a0-3 (-> v1-1 18)))
+ (set! (-> a0-3 prim-core offense) (collide-offense touch))
+ )
+ (let ((v1-2 (-> v1-1 19)))
+ (logclear! (-> v1-2 prim-core action) (collide-action solid))
+ (set! (-> v1-2 collide-with) (collide-kind))
+ (set! (-> v1-2 prim-core collide-as) (collide-kind))
+ (set! (-> v1-2 prim-core offense) (collide-offense no-offense))
+ )
+ )
+ (the-as symbol 0)
+ )
+
+(defmethod TODO-RENAME-48 ram-boss ((obj ram-boss))
+ (initialize-skeleton obj *ram-boss-sg* '())
+ (set! (-> obj draw origin-joint-index) (the-as uint 3))
+ (TODO-RENAME-45 obj *ram-boss-nav-enemy-info*)
+ (logclear! (-> obj enemy-info options) (fact-options fop1))
+ (set! (-> obj part) (create-launch-control (-> *part-group-id-table* 525) obj))
+ (set! (-> obj part2) (create-launch-control (-> *part-group-id-table* 574) obj))
+ (set! (-> obj shield-jmod) (new 'process 'joint-mod-set-local obj 32 #f #f #t))
+ (set! (-> obj shield-jmod enable) #f)
+ (set! (-> obj has-shield?) #t)
+ (when (nonzero? (-> obj entity extra perm user-int8 1))
+ (set! (-> obj has-shield?) #f)
+ (TODO-RENAME-49 obj *ram-boss-nav-enemy-info-no-shield*)
+ (let ((v1-23 (-> obj shield-jmod)))
+ (set! (-> v1-23 enable) #t)
+ (set! (-> v1-23 transform scale quad) (the-as uint128 0))
+ )
+ )
+ (set! (-> obj neck up) (the-as uint 1))
+ (set! (-> obj neck nose) (the-as uint 2))
+ (set! (-> obj neck ear) (the-as uint 0))
+ 0
+ (none)
+ )
+
+(defbehavior ram-boss-init-by-other ram-boss ((arg0 basic) (arg1 nav-enemy) (arg2 symbol))
+ (set! (-> self dead?) #f)
+ (set! (-> self proj-status) (the-as uint 0))
+ (set! (-> self proj-stoked) #f)
+ (set! (-> self proj-last-thrown-time) (the-as uint (-> *display* base-frame-counter)))
+ (set-vector! (-> self local-throw-point) 10456.269 9961.882 1510.6049 1.0)
+ (set! (-> self frustration) 0)
+ (set! (-> self nav-enemy-patrol-timeout) (the-as uint 300))
+ (initialize-collision self)
+ (set! (-> self entity) (-> arg1 entity))
+ (TODO-RENAME-48 self)
+ (set! (-> self collide-info trans quad) (-> arg1 collide-info trans quad))
+ (set-vector! (-> self collide-info scale) 1.0 1.0 1.0 1.0)
+ (let ((t9-2 quaternion-copy!)
+ (a0-6 (-> self collide-info quat))
+ )
+ (t9-2 a0-6 (-> arg1 collide-info quat))
+ (cond
+ (arg2
+ (go ram-boss-already-down (the-as basic a0-6))
+ )
+ (else
+ (ja-post)
+ (logior! (-> self nav-enemy-flags) 2)
+ (go ram-boss-idle)
+ )
+ )
+ )
+ (none)
+ )
+
+(defmethod dummy-54 ram-boss ((obj ram-boss) (arg0 vector))
+ (let ((a2-0 (-> obj node-list data 18 bone transform)))
+ (set-vector! arg0 0.0 0.0 -2457.6 1.0)
+ (vector-matrix*! arg0 arg0 a2-0)
+ )
+ (the-as symbol (vector-float*! arg0 arg0 (/ 1.0 (-> arg0 w))))
+ )
+
+(defmethod dummy-55 ram-boss ((obj ram-boss))
+ (if (not *target*)
+ (return #f)
+ )
+ (let ((s5-0 (new 'stack-no-clear 'vector))
+ (s4-0 (new 'stack-no-clear 'vector))
+ )
+ (set! (-> s5-0 quad) (-> obj collide-info trans quad))
+ (set! (-> s5-0 y) (+ 8192.0 (-> s5-0 y)))
+ (set! (-> s4-0 quad) (-> (target-pos 0) quad))
+ (set! (-> s4-0 y) (+ 4915.2 (-> s4-0 y)))
+ (vector-! s4-0 s4-0 s5-0)
+ (let* ((t2-0 (new 'stack-no-clear 'collide-tri-result))
+ (v0-0 (< (fill-and-probe-using-line-sphere
+ *collide-cache*
+ s5-0
+ s4-0
+ 1228.8
+ (collide-kind background cak-2 ground-object)
+ obj
+ t2-0
+ 1
+ )
+ 0.0
+ )
+ )
+ )
+ (b! #t cfg-7 :delay (nop!))
+ (the-as none 0)
+ (set! v0-0 (the-as symbol #f))
+ (label cfg-7)
+ v0-0
+ )
+ )
+ )
+
+(defmethod dummy-51 ram-boss ((obj ram-boss) (arg0 vector))
+ (let* ((f30-0 (quaternion-y-angle (-> obj collide-info quat)))
+ (f0-2 (atan (-> arg0 x) (-> arg0 z)))
+ (f0-3 (deg- f30-0 f0-2))
+ )
+ (when (< (fabs f0-3) 10922.667)
+ (if (< 1820.4445 f0-3)
+ (vector-rotate-around-y! arg0 arg0 (+ -1820.4445 f0-3))
+ )
+ (return #f)
+ )
+ )
+ #t
+ )
+
+(defmethod set-jump-height-factor! ram-boss ((obj ram-boss) (arg0 int))
+ (cond
+ ((zero? (-> obj proj-status))
+ (when (and *target* (>= (- (-> *display* base-frame-counter) (the-as int (-> obj proj-last-thrown-time))) 600))
+ (when arg0
+ (set! (-> obj proj-stoked) #t)
+ (let ((s5-0 (new 'stack-no-clear 'vector)))
+ (set! (-> s5-0 quad) (the-as uint128 0))
+ (let* ((s4-0 (the-as ram-boss-proj (get-process *default-dead-pool* ram-boss-proj #x4000)))
+ (v1-9 (when s4-0
+ (let ((t9-1 (method-of-type ram-boss-proj activate)))
+ (t9-1 s4-0 obj 'ram-boss-proj (the-as pointer #x70004000))
+ )
+ (run-now-in-process
+ s4-0
+ projectile-init-by-other
+ (-> obj entity)
+ (-> obj collide-info trans)
+ s5-0
+ 0
+ (process->handle *target*)
+ )
+ (-> s4-0 ppointer)
+ )
+ )
+ )
+ (set! (-> (the-as (pointer ram-boss-proj) v1-9) 0 notify-handle) (process->handle obj))
+ )
+ )
+ )
+ )
+ )
+ (else
+ (set! (-> obj proj-stoked) #t)
+ )
+ )
+ (none)
+ )
+
+(defstate ram-boss-show-anims (ram-boss)
+ :trans
+ (behavior ()
+ 0
+ (none)
+ )
+ :code
+ (behavior ()
+ 0
+ (none)
+ )
+ :post
+ (the-as (function none :behavior ram-boss) transform-post)
+ )
+
+(defstate ram-boss-idle (ram-boss)
+ :event
+ (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block))
+ (case arg2
+ (('jump)
+ (go ram-boss-jump-down arg0)
+ )
+ (('touch 'attack)
+ (nav-enemy-send-attack arg0 (the-as touching-shapes-entry (-> arg3 param 0)) 'generic)
+ )
+ )
+ )
+ :enter
+ (behavior ()
+ ((-> (method-of-type nav-enemy nav-enemy-idle) enter))
+ (set! (-> self frustration) 0)
+ 0
+ (none)
+ )
+ :code
+ (behavior ()
+ (logior! (-> self nav-enemy-flags) 4)
+ (while #t
+ (clone-anim-once
+ (ppointer->handle (-> self parent-override))
+ (the-as int (-> self draw origin-joint-index))
+ #t
+ ""
+ )
+ (let ((a0-4 (-> self parent-override 0 node-list data 9 bone transform)))
+ (set! (-> self collide-info trans quad) (-> a0-4 vector 3 quad))
+ )
+ (transform-post)
+ (when *target*
+ (if *target*
+ (look-at-enemy!
+ (-> *target* neck)
+ (the-as vector (-> (the-as collide-shape-prim-group (-> self collide-info root-prim)) prims 0 prim-core))
+ 'attacking
+ self
+ )
+ )
+ )
+ (suspend)
+ )
+ (none)
+ )
+ )
+
+(defstate ram-boss-jump-down (ram-boss)
+ :event
+ (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block))
+ (case arg2
+ (('touch 'attack)
+ (nav-enemy-send-attack arg0 (the-as touching-shapes-entry (-> arg3 param 0)) 'generic)
+ )
+ )
+ )
+ :enter
+ (behavior ((arg0 basic))
+ (dummy-52 self)
+ (logior! (-> self nav-enemy-flags) 4)
+ (let ((s5-0 (new 'stack-no-clear 'vector))
+ (gp-0 (-> self node-list data 0 bone transform))
+ )
+ (let ((s1-0 (new 'stack-no-clear 'matrix))
+ (s4-0 (new 'stack-no-clear 'vector))
+ )
+ (matrix-4x4-inverse! s1-0 gp-0)
+ (vector-matrix*! s4-0 (target-pos 0) s1-0)
+ (set-vector! s5-0 -49152.0 -32768.0 16384.0 1.0)
+ (if (< (-> s4-0 x) 0.0)
+ (set! (-> s5-0 x) (- (-> s5-0 x)))
+ )
+ )
+ (let ((s4-1 (new 'stack-no-clear 'vector)))
+ (vector-matrix*! s4-1 s5-0 gp-0)
+ (vector-! s4-1 s4-1 (-> gp-0 vector 3))
+ (set! (-> s4-1 y) 0.0)
+ (vector-normalize! s4-1 1.0)
+ (set! (-> self collide-info transv x) (* 65536.0 (-> s4-1 x)))
+ (set! (-> self collide-info transv z) (* 65536.0 (-> s4-1 z)))
+ )
+ )
+ (set! (-> self collide-info transv y) 102400.0)
+ (none)
+ )
+ :trans
+ (behavior ()
+ (+! (-> self collide-info transv y) (* -544768.0 (-> *display* seconds-per-frame)))
+ (integrate-for-enemy-with-move-to-ground!
+ (-> self collide-info)
+ (-> self collide-info transv)
+ (collide-kind background)
+ 16384.0
+ #f
+ #f
+ #f
+ )
+ (if (logtest? (-> self collide-info status) 1)
+ (go ram-boss-jump-down-hit-ground)
+ )
+ (none)
+ )
+ :code
+ (behavior ((arg0 basic))
+ (ja-channel-push! 1 240)
+ (let ((a0-2 (-> self skel root-channel 0)))
+ (set! (-> a0-2 frame-group) (the-as art-joint-anim (-> self draw art-group data 16)))
+ (set! (-> a0-2 param 0)
+ (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 16)) data 0 length) -1))
+ )
+ (set! (-> a0-2 param 1) 1.0)
+ (set! (-> a0-2 frame-num) 0.0)
+ (joint-control-channel-group! a0-2 (the-as art-joint-anim (-> self draw art-group data 16)) num-func-seek!)
+ )
+ (until (ja-done? 0)
+ (let ((gp-0 (new 'stack-no-clear 'vector)))
+ (vector-! gp-0 (target-pos 0) (-> self collide-info trans))
+ (set! (-> gp-0 y) 0.0)
+ (seek-toward-heading-vec! (-> self collide-info) gp-0 182044.44 3)
+ )
+ (suspend)
+ (let ((a0-7 (-> self skel root-channel 0)))
+ (set! (-> a0-7 param 0) (the float (+ (-> a0-7 frame-group data 0 length) -1)))
+ (set! (-> a0-7 param 1) 1.0)
+ (joint-control-channel-group-eval! a0-7 (the-as art-joint-anim #f) num-func-seek!)
+ )
+ )
+ (while #t
+ (suspend)
+ )
+ (none)
+ )
+ :post
+ (the-as (function none :behavior ram-boss) nav-enemy-simple-post)
+ )
+
+(defstate ram-boss-jump-down-hit-ground (ram-boss)
+ :event
+ (-> ram-boss-jump-down event)
+ :code
+ (behavior ()
+ (logior! (-> self nav-enemy-flags) 4)
+ (activate! *camera-smush-control* 409.6 37 150 1.0 0.99)
+ (let ((a0-1 (-> self skel root-channel 0)))
+ (set! (-> a0-1 frame-group) (the-as art-joint-anim (-> self draw art-group data 17)))
+ (set! (-> a0-1 param 0)
+ (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 17)) data 0 length) -1))
+ )
+ (set! (-> a0-1 param 1) 1.0)
+ (set! (-> a0-1 frame-num) 0.0)
+ (joint-control-channel-group! a0-1 (the-as art-joint-anim (-> self draw art-group data 17)) num-func-seek!)
+ )
+ (until (ja-done? 0)
+ (suspend)
+ (let ((a0-2 (-> self skel root-channel 0)))
+ (set! (-> a0-2 param 0) (the float (+ (-> a0-2 frame-group data 0 length) -1)))
+ (set! (-> a0-2 param 1) 1.0)
+ (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-seek!)
+ )
+ )
+ (logior! (-> self nav-enemy-flags) 2)
+ (go ram-boss-nav-start)
+ (none)
+ )
+ :post
+ (the-as (function none :behavior ram-boss) nav-enemy-simple-post)
+ )
+
+(defstate ram-boss-already-down (ram-boss)
+ :code
+ (behavior ((arg0 basic))
+ (logior! (-> self nav-enemy-flags) 4)
+ (dummy-52 self)
+ (let ((a1-0 (new 'stack-no-clear 'vector))
+ (a2-0 (-> self parent-override 0 node-list data 0 bone transform))
+ )
+ (set-vector! a1-0 0.0 -16384.0 -32768.0 1.0)
+ (vector-matrix*! (-> self collide-info trans) a1-0 a2-0)
+ )
+ (move-to-ground (-> self collide-info) 40960.0 40960.0 #t (collide-kind background))
+ (let ((gp-0 (new 'stack-no-clear 'vector)))
+ (vector-! gp-0 (target-pos 0) (-> self collide-info trans))
+ (set! (-> gp-0 y) 0.0)
+ (set-heading-vec! (-> self collide-info) gp-0)
+ )
+ (go ram-boss-nav-start)
+ (none)
+ )
+ )
+
+(defstate ram-boss-nav-start (ram-boss)
+ :code
+ (behavior ()
+ (let ((a1-1 (dummy-16 (-> self nav) (-> self collide-info trans))))
+ (when (not a1-1)
+ (go process-drawable-art-error "not on nav mesh")
+ (return #f)
+ )
+ (set-current-poly! (-> self nav) a1-1)
+ )
+ (go ram-boss-nav-resume)
+ (none)
+ )
+ )
+
+(defstate ram-boss-nav-resume (ram-boss)
+ :code
+ (behavior ()
+ (set! (-> self frustration) 0)
+ (when *target*
+ (let ((f30-0 (vector-vector-distance (target-pos 0) (-> self collide-info trans))))
+ (cond
+ ((>= 18432.0 f30-0)
+ (go ram-boss-tracking)
+ )
+ ((not (TODO-RENAME-46 self 237568.0))
+ (go-virtual nav-enemy-patrol)
+ )
+ ((and (< f30-0 106496.0) (dummy-55 self))
+ (go-virtual nav-enemy-attack)
+ )
+ ((< f30-0 237568.0)
+ (go-virtual nav-enemy-chase)
+ )
+ (else
+ (go-virtual nav-enemy-patrol)
+ )
+ )
+ )
+ )
+ (go-virtual nav-enemy-idle)
+ (none)
+ )
+ )
+
+(defstate nav-enemy-patrol (ram-boss)
+ :virtual #t
+ :event
+ ram-boss-on-ground-event-handler
+ :enter
+ (behavior ()
+ ((-> (method-of-type nav-enemy nav-enemy-patrol) enter))
+ (set! (-> self state-timeout) (the-as int (-> self nav-enemy-patrol-timeout)))
+ (set! (-> self nav-enemy-patrol-timeout) (the-as uint 300))
+ (ja-channel-push! 1 90)
+ (none)
+ )
+ :trans
+ (behavior ()
+ (when *target*
+ (let ((f0-0 (vector-vector-distance (target-pos 0) (-> self collide-info trans))))
+ (if (>= 18432.0 f0-0)
+ (go ram-boss-tracking)
+ )
+ )
+ )
+ ((-> (method-of-type nav-enemy nav-enemy-patrol) trans))
+ (none)
+ )
+ )
+
+(defstate nav-enemy-chase (ram-boss)
+ :virtual #t
+ :event
+ ram-boss-on-ground-event-handler
+ :enter
+ (behavior ()
+ (let ((t9-0 (-> (method-of-type nav-enemy nav-enemy-chase) enter)))
+ (if t9-0
+ (t9-0)
+ )
+ )
+ (none)
+ )
+ :trans
+ (behavior ()
+ (let ((f30-0 (vector-vector-distance (target-pos 0) (-> self collide-info trans))))
+ (if (>= 18432.0 f30-0)
+ (go ram-boss-tracking)
+ )
+ (when (>= (- (-> *display* base-frame-counter) (-> self state-time)) (-> self reaction-time))
+ (if (not (TODO-RENAME-46 self (-> self nav-info stop-chase-distance)))
+ (go-virtual nav-enemy-patrol)
+ )
+ (if (and (>= 73728.0 f30-0) (dummy-55 self))
+ (go-virtual nav-enemy-attack)
+ )
+ )
+ )
+ (cond
+ ((logtest? (nav-control-flags bit17) (-> self nav flags))
+ (if (>= (- (-> *display* base-frame-counter) (-> self free-time)) 300)
+ (go-virtual nav-enemy-patrol)
+ )
+ )
+ (else
+ (set! (-> self free-time) (-> *display* base-frame-counter))
+ )
+ )
+ 0
+ (none)
+ )
+ )
+
+(defstate nav-enemy-attack (ram-boss)
+ :virtual #t
+ :event
+ ram-boss-on-ground-event-handler
+ :trans
+ (the-as (function none :behavior ram-boss) #f)
+ :code
+ (behavior ()
+ (go ram-boss-tracking)
+ (none)
+ )
+ )
+
+(defmethod dummy-57 ram-boss ((obj ram-boss) (arg0 float))
+ (let ((f0-0 0.0))
+ (when *target*
+ (let ((s3-0 (new 'stack-no-clear 'vector)))
+ (vector-! s3-0 (target-pos 0) (-> obj collide-info trans))
+ (let ((f0-1 (vector-x-angle s3-0)))
+ (set! f0-0 (* 0.000091552734 f0-1))
+ )
+ )
+ (cond
+ ((< f0-0 0.0)
+ (set! f0-0 0.0)
+ )
+ ((< 1.0 f0-0)
+ (set! f0-0 1.0)
+ )
+ )
+ (if (>= arg0 0.0)
+ (set! f0-0 (* 0.5 (+ f0-0 arg0)))
+ )
+ )
+ f0-0
+ )
+ )
+
+(defstate ram-boss-tracking (ram-boss)
+ :event
+ ram-boss-on-ground-event-handler
+ :enter
+ (behavior ()
+ (set! (-> self state-time) (-> *display* base-frame-counter))
+ (set! (-> self facing-y) (quaternion-y-angle (-> self collide-info quat)))
+ (logior! (-> self nav-enemy-flags) 4)
+ (none)
+ )
+ :trans
+ (behavior ()
+ (set-jump-height-factor!
+ self
+ (the-as int (>= (- (-> *display* base-frame-counter) (-> self state-time)) 225))
+ )
+ (if (not *target*)
+ (go-virtual nav-enemy-patrol)
+ )
+ (let ((gp-0 (new 'stack-no-clear 'vector)))
+ (vector-! gp-0 (target-pos 0) (-> self collide-info trans))
+ (set! (-> self player-dir-y) (atan (-> gp-0 x) (-> gp-0 z)))
+ )
+ (let* ((v1-13 (if (-> self has-shield?)
+ 145635.56
+ 41870.223
+ )
+ )
+ (f30-0 (-> self facing-y))
+ (f0-6 (deg-seek-smooth f30-0 (-> self player-dir-y) (* v1-13 (-> *display* seconds-per-frame)) 0.25))
+ (f0-7 (deg- f0-6 f30-0))
+ )
+ (cond
+ ((< 18.204445 (fabs f0-7))
+ (set! (-> self last-turn-speed) (* (fabs f0-7) (-> *display* frames-per-second)))
+ (quaternion-rotate-y! (-> self collide-info quat) (-> self collide-info quat) f0-7)
+ (set! (-> self facing-y) (quaternion-y-angle (-> self collide-info quat)))
+ )
+ (else
+ (set! (-> self last-turn-speed) 0.0)
+ )
+ )
+ )
+ (let ((f0-10 (vector-vector-distance (target-pos 0) (-> self collide-info trans))))
+ (cond
+ ((>= f0-10 106496.0)
+ (if (>= f0-10 237568.0)
+ (go-virtual nav-enemy-patrol)
+ )
+ (go-virtual nav-enemy-chase)
+ )
+ ((< 18432.0 f0-10)
+ (if (not (dummy-55 self))
+ (go-virtual nav-enemy-chase)
+ )
+ (when (>= (-> self frustration) 256)
+ (set! (-> self frustration) 0)
+ (set! (-> self nav-enemy-patrol-timeout) (the-as uint (rand-vu-int-range 600 1500)))
+ (go-virtual nav-enemy-patrol)
+ )
+ )
+ )
+ )
+ (when (and (= (-> self proj-status) 2)
+ (zero? (logand (-> *target* state-flags) #x80f8))
+ (>= (- (-> *display* base-frame-counter) (-> self state-time)) 60)
+ )
+ (let ((gp-2 (new 'stack-no-clear 'vector))
+ (s5-2 (new 'stack-no-clear 'vector))
+ )
+ (dummy-54 self s5-2)
+ (set! (-> gp-2 quad) (-> (target-pos 0) quad))
+ (set! (-> gp-2 y) (+ 4915.2 (-> gp-2 y)))
+ (vector-! (-> self proj-launch-vec) gp-2 s5-2)
+ )
+ (vector-normalize! (-> self proj-launch-vec) 1.0)
+ (if (not (dummy-51 self (-> self proj-launch-vec)))
+ (go ram-boss-throw)
+ )
+ )
+ 0
+ (none)
+ )
+ :code
+ (behavior ()
+ (let ((f30-0 -1.0))
+ (while #t
+ (set! f30-0 (dummy-57 self f30-0))
+ (cond
+ ((< 5461.3335 (-> self last-turn-speed))
+ (cond
+ ((-> self has-shield?)
+ (when (not (= (if (> (-> self skel active-channels) 0)
+ (-> self skel root-channel 0 frame-group)
+ )
+ (-> self draw art-group data 7)
+ )
+ )
+ (ja-channel-push! 2 60)
+ (let ((gp-0 (-> self skel root-channel 0)))
+ (joint-control-channel-group-eval!
+ gp-0
+ (the-as art-joint-anim (-> self draw art-group data 7))
+ num-func-identity
+ )
+ (set! (-> gp-0 frame-num) 0.0)
+ )
+ (let ((a0-7 (-> self skel root-channel 1)))
+ (set! (-> a0-7 frame-interp) f30-0)
+ (set! (-> a0-7 frame-group) (the-as art-joint-anim (-> self draw art-group data 22)))
+ (set! (-> a0-7 param 0) 0.0)
+ (joint-control-channel-group-eval!
+ a0-7
+ (the-as art-joint-anim (-> self draw art-group data 22))
+ num-func-chan
+ )
+ )
+ )
+ )
+ (else
+ (when (not (= (if (> (-> self skel active-channels) 0)
+ (-> self skel root-channel 0 frame-group)
+ )
+ (-> self draw art-group data 20)
+ )
+ )
+ (ja-channel-push! 1 60)
+ (let ((gp-1 (-> self skel root-channel 0)))
+ (joint-control-channel-group-eval!
+ gp-1
+ (the-as art-joint-anim (-> self draw art-group data 20))
+ num-func-identity
+ )
+ (set! (-> gp-1 frame-num) 0.0)
+ )
+ )
+ )
+ )
+ )
+ ((-> self has-shield?)
+ (when (not (= (if (> (-> self skel active-channels) 0)
+ (-> self skel root-channel 0 frame-group)
+ )
+ (-> self draw art-group data 6)
+ )
+ )
+ (ja-channel-push! 2 60)
+ (let ((gp-2 (-> self skel root-channel 0)))
+ (joint-control-channel-group-eval!
+ gp-2
+ (the-as art-joint-anim (-> self draw art-group data 6))
+ num-func-identity
+ )
+ (set! (-> gp-2 frame-num) 0.0)
+ )
+ (let ((a0-20 (-> self skel root-channel 1)))
+ (set! (-> a0-20 frame-interp) f30-0)
+ (set! (-> a0-20 frame-group) (the-as art-joint-anim (-> self draw art-group data 21)))
+ (set! (-> a0-20 param 0) 0.0)
+ (joint-control-channel-group-eval!
+ a0-20
+ (the-as art-joint-anim (-> self draw art-group data 21))
+ num-func-chan
+ )
+ )
+ )
+ )
+ (else
+ (when (not (= (if (> (-> self skel active-channels) 0)
+ (-> self skel root-channel 0 frame-group)
+ )
+ (-> self draw art-group data 24)
+ )
+ )
+ (ja-channel-push! 1 60)
+ (let ((gp-3 (-> self skel root-channel 0)))
+ (joint-control-channel-group-eval!
+ gp-3
+ (the-as art-joint-anim (-> self draw art-group data 24))
+ num-func-identity
+ )
+ (set! (-> gp-3 frame-num) 0.0)
+ )
+ )
+ )
+ )
+ (suspend)
+ (let ((a0-27 (-> self skel root-channel 0)))
+ (set! (-> a0-27 param 0) 1.0)
+ (joint-control-channel-group-eval! a0-27 (the-as art-joint-anim #f) num-func-loop!)
+ )
+ (when (= (ja-group-size) 2)
+ (let ((a0-28 (-> self skel root-channel 1)))
+ (set! (-> a0-28 frame-interp) f30-0)
+ (set! (-> a0-28 param 0) 0.0)
+ (joint-control-channel-group-eval! a0-28 (the-as art-joint-anim #f) num-func-chan)
+ )
+ )
+ )
+ )
+ (none)
+ )
+ :post
+ (the-as (function none :behavior ram-boss) nav-enemy-simple-post)
+ )
+
+(defstate ram-boss-forward-defend-block (ram-boss)
+ :enter
+ (behavior ()
+ (set! (-> self frustration) 0)
+ (logior! (-> self nav-enemy-flags) 4)
+ (none)
+ )
+ :trans
+ (behavior ()
+ (set-jump-height-factor! self (the-as int #t))
+ 0
+ (none)
+ )
+ :code
+ (behavior ()
+ (ja-channel-push! 1 30)
+ (let ((a0-1 (-> self skel root-channel 0)))
+ (set! (-> a0-1 frame-group) (the-as art-joint-anim (-> self draw art-group data 8)))
+ (set! (-> a0-1 param 0)
+ (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 8)) data 0 length) -1))
+ )
+ (set! (-> a0-1 param 1) 1.0)
+ (set! (-> a0-1 frame-num) 0.0)
+ (joint-control-channel-group! a0-1 (the-as art-joint-anim (-> self draw art-group data 8)) num-func-seek!)
+ )
+ (until (ja-done? 0)
+ (suspend)
+ (let ((a0-2 (-> self skel root-channel 0)))
+ (set! (-> a0-2 param 0) (the float (+ (-> a0-2 frame-group data 0 length) -1)))
+ (set! (-> a0-2 param 1) 1.0)
+ (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-seek!)
+ )
+ )
+ (go ram-boss-tracking)
+ (none)
+ )
+ :post
+ (the-as (function none :behavior ram-boss) nav-enemy-simple-post)
+ )
+
+(defstate ram-boss-up-defend-block (ram-boss)
+ :enter
+ (behavior ()
+ (set! (-> self frustration) 0)
+ (logior! (-> self nav-enemy-flags) 4)
+ (none)
+ )
+ :trans
+ (behavior ()
+ (set-jump-height-factor! self (the-as int #t))
+ 0
+ (none)
+ )
+ :code
+ (behavior ()
+ (ja-channel-push! 1 30)
+ (let ((a0-1 (-> self skel root-channel 0)))
+ (set! (-> a0-1 frame-group) (the-as art-joint-anim (-> self draw art-group data 9)))
+ (set! (-> a0-1 param 0)
+ (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 9)) data 0 length) -1))
+ )
+ (set! (-> a0-1 param 1) 1.0)
+ (set! (-> a0-1 frame-num) 0.0)
+ (joint-control-channel-group! a0-1 (the-as art-joint-anim (-> self draw art-group data 9)) num-func-seek!)
+ )
+ (until (ja-done? 0)
+ (suspend)
+ (let ((a0-2 (-> self skel root-channel 0)))
+ (set! (-> a0-2 param 0) (the float (+ (-> a0-2 frame-group data 0 length) -1)))
+ (set! (-> a0-2 param 1) 1.0)
+ (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-seek!)
+ )
+ )
+ (go ram-boss-tracking)
+ (none)
+ )
+ :post
+ (the-as (function none :behavior ram-boss) nav-enemy-simple-post)
+ )
+
+(defstate nav-enemy-victory (ram-boss)
+ :virtual #t
+ :event
+ ram-boss-on-ground-event-handler
+ :enter
+ (the-as (function none :behavior ram-boss) #f)
+ :exit
+ (the-as (function none :behavior ram-boss) #f)
+ :trans
+ (behavior ()
+ (when *target*
+ (let ((f0-0 (vector-vector-distance (target-pos 0) (-> self collide-info trans))))
+ (if (and (>= 18432.0 f0-0) (-> self has-shield?))
+ (go ram-boss-tracking)
+ )
+ )
+ )
+ (none)
+ )
+ :code
+ (behavior ()
+ (set! (-> self frustration) 0)
+ (ja-channel-push! 1 22)
+ (let ((f30-0 (nav-enemy-rnd-float-range 0.8 1.2)))
+ (let ((a0-2 (-> self skel root-channel 0)))
+ (set! (-> a0-2 frame-group)
+ (the-as art-joint-anim (-> self draw art-group data (-> self nav-info victory-anim)))
+ )
+ (set! (-> a0-2 param 0)
+ (the float
+ (+ (-> (the-as art-joint-anim (-> self draw art-group data (-> self nav-info victory-anim))) data 0 length)
+ -1
+ )
+ )
+ )
+ (set! (-> a0-2 param 1) f30-0)
+ (set! (-> a0-2 frame-num) 0.0)
+ (joint-control-channel-group!
+ a0-2
+ (the-as art-joint-anim (-> self draw art-group data (-> self nav-info victory-anim)))
+ num-func-seek!
+ )
+ )
+ (until (ja-done? 0)
+ (suspend)
+ (let ((a0-3 (-> self skel root-channel 0)))
+ (set! (-> a0-3 param 0) (the float (+ (-> a0-3 frame-group data 0 length) -1)))
+ (set! (-> a0-3 param 1) f30-0)
+ (joint-control-channel-group-eval! a0-3 (the-as art-joint-anim #f) num-func-seek!)
+ )
+ )
+ )
+ (go-virtual nav-enemy-attack)
+ (none)
+ )
+ :post
+ (the-as (function none :behavior ram-boss) nav-enemy-simple-post)
+ )
+
+(defstate nav-enemy-stare (ram-boss)
+ :virtual #t
+ :event
+ ram-boss-on-ground-event-handler
+ :enter
+ (behavior ()
+ (go ram-boss-nav-resume)
+ (none)
+ )
+ )
+
+(defstate ram-boss-throw (ram-boss)
+ :event
+ ram-boss-on-ground-event-handler
+ :enter
+ (behavior ()
+ (logior! (-> self nav-enemy-flags) 4)
+ (let ((gp-0 (-> self child)))
+ (while gp-0
+ (send-event (ppointer->process gp-0) 'launch)
+ (set! gp-0 (-> gp-0 0 brother))
+ )
+ )
+ (set! (-> self proj-last-thrown-time) (the-as uint (-> *display* base-frame-counter)))
+ (none)
+ )
+ :trans
+ (behavior ()
+ (set-jump-height-factor! self (the-as int #t))
+ 0
+ (none)
+ )
+ :code
+ (behavior ()
+ (ja-channel-push! 1 22)
+ (cond
+ ((-> self has-shield?)
+ (let ((a0-1 (-> self skel root-channel 0)))
+ (set! (-> a0-1 frame-group) (the-as art-joint-anim (-> self draw art-group data 10)))
+ (set! (-> a0-1 param 0)
+ (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 10)) data 0 length) -1))
+ )
+ (set! (-> a0-1 param 1) 1.0)
+ (set! (-> a0-1 frame-num) 0.0)
+ (joint-control-channel-group! a0-1 (the-as art-joint-anim (-> self draw art-group data 10)) num-func-seek!)
+ )
+ (until (ja-done? 0)
+ (suspend)
+ (let ((a0-2 (-> self skel root-channel 0)))
+ (set! (-> a0-2 param 0) (the float (+ (-> a0-2 frame-group data 0 length) -1)))
+ (set! (-> a0-2 param 1) 1.0)
+ (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-seek!)
+ )
+ )
+ )
+ (else
+ (let ((a0-4 (-> self skel root-channel 0)))
+ (set! (-> a0-4 frame-group) (the-as art-joint-anim (-> self draw art-group data 23)))
+ (set! (-> a0-4 param 0)
+ (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 23)) data 0 length) -1))
+ )
+ (set! (-> a0-4 param 1) 1.0)
+ (set! (-> a0-4 frame-num) 0.0)
+ (joint-control-channel-group! a0-4 (the-as art-joint-anim (-> self draw art-group data 23)) num-func-seek!)
+ )
+ (until (ja-done? 0)
+ (suspend)
+ (let ((a0-5 (-> self skel root-channel 0)))
+ (set! (-> a0-5 param 0) (the float (+ (-> a0-5 frame-group data 0 length) -1)))
+ (set! (-> a0-5 param 1) 1.0)
+ (joint-control-channel-group-eval! a0-5 (the-as art-joint-anim #f) num-func-seek!)
+ )
+ )
+ )
+ )
+ (go ram-boss-tracking)
+ (none)
+ )
+ :post
+ (the-as (function none :behavior ram-boss) nav-enemy-simple-post)
+ )
+
+(defstate ram-boss-lose-shield (ram-boss)
+ :enter
+ (behavior ()
+ (logior! (-> self nav-enemy-flags) 4)
+ (nav-enemy-neck-control-inactive)
+ (dummy-53 self)
+ (TODO-RENAME-49 self *ram-boss-nav-enemy-info-no-shield*)
+ (none)
+ )
+ :exit
+ (behavior ()
+ (nav-enemy-neck-control-look-at)
+ (set! (-> self has-shield?) #f)
+ (let ((v1-2 (-> self entity extra perm)))
+ (logior! (-> v1-2 status) (entity-perm-status user-set-from-cstage))
+ (set! (-> v1-2 user-int8 1) 1)
+ )
+ (let ((v1-3 (-> self shield-jmod)))
+ (set! (-> v1-3 enable) #t)
+ (set! (-> v1-3 transform scale quad) (the-as uint128 0))
+ )
+ (none)
+ )
+ :code
+ (behavior ()
+ (let ((gp-0 (new 'stack-no-clear 'vector)))
+ (vector-normalize-copy! gp-0 (-> self hit-from-dir) 16384.0)
+ (vector+! gp-0 (-> self collide-info trans) gp-0)
+ (set! (-> self nav target-pos quad) (-> gp-0 quad))
+ )
+ (ja-channel-push! 1 30)
+ (let ((a0-5 (-> self skel root-channel 0)))
+ (set! (-> a0-5 frame-group) (the-as art-joint-anim (-> self draw art-group data 18)))
+ (set! (-> a0-5 param 0)
+ (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 18)) data 0 length) -1))
+ )
+ (set! (-> a0-5 param 1) 1.0)
+ (set! (-> a0-5 frame-num) 0.0)
+ (joint-control-channel-group! a0-5 (the-as art-joint-anim (-> self draw art-group data 18)) num-func-seek!)
+ )
+ (until (ja-done? 0)
+ (let ((gp-1 (new 'stack-no-clear 'vector)))
+ (vector<-cspace! gp-1 (-> self node-list data 32))
+ (spawn (-> self part) gp-1)
+ )
+ (suspend)
+ (let ((a0-8 (-> self skel root-channel 0)))
+ (set! (-> a0-8 param 0) (the float (+ (-> a0-8 frame-group data 0 length) -1)))
+ (set! (-> a0-8 param 1) 1.0)
+ (joint-control-channel-group-eval! a0-8 (the-as art-joint-anim #f) num-func-seek!)
+ )
+ )
+ (go ram-boss-tracking)
+ (none)
+ )
+ :post
+ (behavior ()
+ (TODO-RENAME-9 (-> self align))
+ (dummy-11 (-> self nav) (-> self nav target-pos))
+ (TODO-RENAME-11
+ (-> self align)
+ 4
+ (-> self nav travel)
+ (the-as int 1.0)
+ 1.0
+ (* (-> self enemy-info speed) (-> self speed-scale))
+ )
+ (vector-v++!
+ (-> self collide-info transv)
+ (compute-acc-due-to-gravity (-> self collide-info) (new-stack-vector0) 0.0)
+ )
+ (TODO-RENAME-10 (-> self align) 16 1.0 1.0 1.0)
+ (integrate-for-enemy-with-move-to-ground!
+ (-> self collide-info)
+ (-> self collide-info transv)
+ (collide-kind background)
+ 8192.0
+ #t
+ #f
+ #f
+ )
+ (nav-enemy-common-post)
+ (none)
+ )
+ )
+
+(defstate nav-enemy-die (ram-boss)
+ :virtual #t
+ :code
+ (behavior ()
+ (ja-channel-push! 1 22)
+ (clear-collide-with-as (-> self collide-info))
+ (nav-enemy-fall-and-play-death-anim
+ (the-as art-joint-anim (-> self draw art-group data (-> self nav-info die-anim)))
+ 1.0
+ 1.0
+ 1000000000000000.0
+ 600
+ )
+ (send-event self 'death-end)
+ (send-event (ppointer->process (-> self parent-override)) 'notify)
+ (suspend)
+ 0
+ (none)
+ )
+ )
+
+
+
+
diff --git a/goal_src/levels/snow/snow-ram.gc b/goal_src/levels/snow/snow-ram.gc
index 8bfddda83e..9fa2c6f0e0 100644
--- a/goal_src/levels/snow/snow-ram.gc
+++ b/goal_src/levels/snow/snow-ram.gc
@@ -5,11 +5,6 @@
;; name in dgo: snow-ram
;; dgos: L1, SNO
-(define-extern *ram-sg* skeleton-group)
-
-(declare-type ram process-drawable)
-
-
;; DECOMP BEGINS
(defskelgroup *ram-sg* ram
diff --git a/goal_src/levels/sunken/double-lurker.gc b/goal_src/levels/sunken/double-lurker.gc
index 8d24439ec8..7dd054edfc 100644
--- a/goal_src/levels/sunken/double-lurker.gc
+++ b/goal_src/levels/sunken/double-lurker.gc
@@ -441,7 +441,8 @@
(defmethod dummy-51 double-lurker-top ((obj double-lurker-top))
(restore-collide-with-as (-> obj collide-info))
(logior! (-> obj collide-info nav-flags) 1)
- (the-as object (TODO-RENAME-27 (-> obj nav)))
+ (TODO-RENAME-27 (-> obj nav))
+ (none)
)
(defmethod initialize-collision double-lurker-top ((obj double-lurker-top))
@@ -1400,7 +1401,7 @@
)
)
)
- (the-as object #f)
+ (none)
)
(defmethod TODO-RENAME-48 double-lurker ((obj double-lurker))
diff --git a/goal_src/levels/sunken/orbit-plat.gc b/goal_src/levels/sunken/orbit-plat.gc
index 4f8aeeec16..5286a89e89 100644
--- a/goal_src/levels/sunken/orbit-plat.gc
+++ b/goal_src/levels/sunken/orbit-plat.gc
@@ -585,7 +585,59 @@
:trans
(the-as (function none :behavior orbit-plat) plat-trans)
:code
- (behavior () (none)) ;; todo
+ (behavior ()
+ (set! (-> self plat-status) (the-as uint 2))
+ (set! (-> self is-reset?) #f)
+ (let ((gp-0 (new 'stack-no-clear 'vector)))
+ 0.0
+ (let ((a0-0 (new 'stack-no-clear 'vector))
+ (s5-0 (new 'stack-no-clear 'vector))
+ )
+ (let ((v1-1 gp-0)
+ (a1-0 (-> self other))
+ )
+ (set! (-> v1-1 quad) (-> (the-as orbit-plat (if a1-0
+ (-> a1-0 extra process)
+ )
+ )
+ root-override
+ trans
+ quad
+ )
+ )
+ )
+ (vector-! a0-0 (-> self basetrans) gp-0)
+ (let ((f30-0 (vector-length a0-0)))
+ (set! (-> self reset-length) f30-0)
+ (let ((a0-1 (-> self skel root-channel 0)))
+ (set! (-> a0-1 param 0) 0.0)
+ (set! (-> a0-1 param 1) 1.0)
+ (joint-control-channel-group! a0-1 (the-as art-joint-anim #f) num-func-seek!)
+ )
+ (label cfg-3)
+ (dotimes (s4-0 2)
+ (get-rotate-point! s5-0 gp-0 (-> self basetrans) (the-as vector f30-0) (-> self rot-dir) 40960.0)
+ (b! (not (dummy-16 (-> self nav) s5-0)) cfg-6 :delay (empty-form))
+ (set! (-> self basetrans quad) (-> s5-0 quad))
+ (b! #t cfg-9 :delay (nop!))
+ (label cfg-6)
+ (set! (-> self rot-dir) (- (-> self rot-dir)))
+ )
+ )
+ )
+ )
+ (label cfg-9)
+ (suspend)
+ (when (not (ja-done? 0))
+ (let ((a0-7 (-> self skel root-channel 0)))
+ (set! (-> a0-7 param 0) 0.0)
+ (set! (-> a0-7 param 1) 1.0)
+ (joint-control-channel-group-eval! a0-7 (the-as art-joint-anim #f) num-func-seek!)
+ )
+ )
+ (b! #t cfg-3 :delay (nop!))
+ (none)
+ )
:post
(the-as (function none :behavior orbit-plat) plat-post)
)
diff --git a/goal_src/levels/sunken/square-platform.gc b/goal_src/levels/sunken/square-platform.gc
index 8aae475a90..d68731bc8f 100644
--- a/goal_src/levels/sunken/square-platform.gc
+++ b/goal_src/levels/sunken/square-platform.gc
@@ -61,9 +61,9 @@
(plat-mask uint32 :offset-assert 184)
(plat-id-dir int32 :offset-assert 188)
(wiggled? symbol :offset-assert 192)
- (timeout uint64 :offset-assert 200)
- (last-plat-activated-time uint64 :offset-assert 208)
- (delay-til-wiggle uint64 :offset-assert 216)
+ (timeout int64 :offset-assert 200)
+ (last-plat-activated-time int64 :offset-assert 208)
+ (delay-til-wiggle int64 :offset-assert 216)
(ticker ticky :inline :offset-assert 224)
)
:heap-base #x90
@@ -681,8 +681,8 @@
(send-to-all (-> self link) 'bounce)
)
)
- (when (>= (- (-> *display* base-frame-counter) (the-as int (-> self last-plat-activated-time))) 90)
- (set! (-> self last-plat-activated-time) (the-as uint (-> *display* base-frame-counter)))
+ (when (>= (- (-> *display* base-frame-counter) (-> self last-plat-activated-time)) 90)
+ (set! (-> self last-plat-activated-time) (-> *display* base-frame-counter))
(let ((v1-20 (-> self plat-id))
(a0-5 (-> self plat-id-dir))
(a1-3 (-> self plat-mask))
@@ -725,9 +725,7 @@
(set! (-> obj plat-id) -1)
(set! (-> obj root) (new 'process 'trsqv))
(process-drawable-from-entity! obj arg0)
- (set! (-> obj timeout)
- (the-as uint (the int (* 300.0 (res-lump-float (-> obj entity) 'timeout :default 10.0))))
- )
+ (set! (-> obj timeout) (the int (* 300.0 (res-lump-float (-> obj entity) 'timeout :default 10.0))))
(set! (-> obj delay-til-wiggle) (+ (-> obj timeout) -120))
(set! (-> obj link) (new 'process 'actor-link-info obj))
(set! (-> obj plat-mask) (the-as uint (get-matching-actor-type-mask (-> obj link) square-platform)))
diff --git a/goal_src/levels/sunken/sunken-pipegame.gc b/goal_src/levels/sunken/sunken-pipegame.gc
index 58bff028f3..887a31e0f0 100644
--- a/goal_src/levels/sunken/sunken-pipegame.gc
+++ b/goal_src/levels/sunken/sunken-pipegame.gc
@@ -17,9 +17,9 @@
(deftype sunken-pipegame-prize (structure)
- ((puzzle-delay uint64 :offset-assert 0)
- (pipe-travel-time-to-far uint64 :offset-assert 8)
- (pipe-travel-time-to-jar uint64 :offset-assert 16)
+ ((puzzle-delay int64 :offset-assert 0)
+ (pipe-travel-time-to-far int64 :offset-assert 8)
+ (pipe-travel-time-to-jar int64 :offset-assert 16)
(actor-handle handle :offset-assert 24)
(jar-pos vector :inline :offset-assert 32)
(far-pos vector :inline :offset-assert 48)
@@ -49,7 +49,7 @@
:size-assert #x2a0
:flag-assert #x17023002a0
(:methods
- (dummy-20 (_type_) none 20)
+ (dummy-20 (_type_) uint 20)
(dummy-21 (_type_ symbol) symbol 21)
(dummy-22 (_type_ symbol) none 22)
)
@@ -528,8 +528,8 @@
(if (got-buzzer? *game-info* (game-task sunken-buzzer) 1)
(+! gp-0 4)
)
+ (the-as uint gp-0)
)
- (none)
)
(defstate sunken-pipegame-start-up (sunken-pipegame)
@@ -725,9 +725,7 @@
)
)
)
- (until (>= (- (-> *display* base-frame-counter) gp-0)
- (the-as int (-> self prize (-> self challenge) pipe-travel-time-to-far))
- )
+ (until (>= (- (-> *display* base-frame-counter) gp-0) (-> self prize (-> self challenge) pipe-travel-time-to-far))
(let ((s5-6 (-> self prize (-> self challenge))))
(spawn (-> s5-6 sucked-up-part) (-> s5-6 sucked-up-jar-part-pos))
(spawn (-> s5-6 blown-out-part) (-> s5-6 blown-out-far-part-pos))
@@ -860,7 +858,7 @@
)
(set! (-> self state-time) (-> *display* base-frame-counter))
(until (>= (- (-> *display* base-frame-counter) (-> self state-time))
- (the-as int (-> self prize (-> self challenge) pipe-travel-time-to-jar))
+ (-> self prize (-> self challenge) pipe-travel-time-to-jar)
)
(let ((gp-4 (-> self prize (-> self challenge))))
(spawn (-> gp-4 sucked-up-part) (-> gp-4 sucked-up-far-part-pos))
@@ -1031,7 +1029,7 @@
(process-drawable-from-entity! obj arg0)
(set! (-> obj path) (new 'process 'path-control obj 'path 0.0))
(logior! (-> obj path flags) (path-control-flag display draw-line draw-point draw-text))
- (set! (-> obj challenges-mask) (the-as uint (dummy-20 obj)))
+ (set! (-> obj challenges-mask) (dummy-20 obj))
(let ((s4-0 (new 'stack-no-clear 'vector))
(s3-0 (new 'stack-no-clear 'quaternion))
)
@@ -1052,9 +1050,9 @@
(let ((v1-30 s2-0))
(cond
((zero? v1-30)
- (set! (-> s0-0 puzzle-delay) (the-as uint 7500))
- (set! (-> s0-0 pipe-travel-time-to-far) (the-as uint 2550))
- (set! (-> s0-0 pipe-travel-time-to-jar) (the-as uint 750))
+ (set! (-> s0-0 puzzle-delay) 7500)
+ (set! (-> s0-0 pipe-travel-time-to-far) 2550)
+ (set! (-> s0-0 pipe-travel-time-to-jar) 750)
(set-vector! s4-0 -30720.0 1146.88 5120.0 1.0)
(set! (-> s0-0 sucked-up-part) (create-launch-control (-> *part-group-id-table* 448) obj))
(set! (-> s0-0 blown-out-part) (create-launch-control (-> *part-group-id-table* 451) obj))
@@ -1074,9 +1072,9 @@
)
)
((= v1-30 1)
- (set! (-> s0-0 puzzle-delay) (the-as uint 4500))
- (set! (-> s0-0 pipe-travel-time-to-far) (the-as uint 1650))
- (set! (-> s0-0 pipe-travel-time-to-jar) (the-as uint 750))
+ (set! (-> s0-0 puzzle-delay) 4500)
+ (set! (-> s0-0 pipe-travel-time-to-far) 1650)
+ (set! (-> s0-0 pipe-travel-time-to-jar) 750)
(set-vector! s4-0 0.0 1146.88 5120.0 1.0)
(set! (-> s0-0 sucked-up-part) (create-launch-control (-> *part-group-id-table* 449) obj))
(set! (-> s0-0 blown-out-part) (create-launch-control (-> *part-group-id-table* 452) obj))
@@ -1098,9 +1096,9 @@
)
)
((= v1-30 2)
- (set! (-> s0-0 puzzle-delay) (the-as uint 4500))
- (set! (-> s0-0 pipe-travel-time-to-far) (the-as uint 1350))
- (set! (-> s0-0 pipe-travel-time-to-jar) (the-as uint 750))
+ (set! (-> s0-0 puzzle-delay) 4500)
+ (set! (-> s0-0 pipe-travel-time-to-far) 1350)
+ (set! (-> s0-0 pipe-travel-time-to-jar) 750)
(set-vector! s4-0 30720.0 1146.88 5120.0 1.0)
(set! (-> s0-0 sucked-up-part) (create-launch-control (-> *part-group-id-table* 450) obj))
(set! (-> s0-0 blown-out-part) (create-launch-control (-> *part-group-id-table* 453) obj))
@@ -1136,7 +1134,7 @@
)
)
(set! (-> obj button s2-0) (the-as (pointer sunken-pipegame-button) v1-102))
- (set! (-> (the-as sunken-pipegame-button (-> (the-as sunken-pipegame-button v1-102) name)) button-id) s2-0)
+ (set! (-> (the-as (pointer sunken-pipegame-button) v1-102) 0 button-id) s2-0)
)
)
)
diff --git a/goal_src/levels/swamp/billy.gc b/goal_src/levels/swamp/billy.gc
index e62b1b3af0..e3eed8713a 100644
--- a/goal_src/levels/swamp/billy.gc
+++ b/goal_src/levels/swamp/billy.gc
@@ -439,7 +439,7 @@
(case (current-status (-> obj tasks))
(((task-status need-hint) (task-status need-introduction))
(when arg0
- (set! (-> obj blend-on-exit) #t)
+ (set! (-> obj blend-on-exit) (the-as art-joint-anim #t))
(close-status! (-> obj tasks) (task-status need-introduction))
(let ((s5-1 (new 'stack-no-clear 'vector)))
(dotimes (s4-0 (+ (the int (the float (+ (-> obj path-snacks curve num-cverts) -1))) 1))
@@ -498,7 +498,7 @@
)
(((task-status need-reminder-a) (task-status need-reminder))
(set! (-> obj skippable) #t)
- (set! (-> obj blend-on-exit) #t)
+ (set! (-> obj blend-on-exit) (the-as art-joint-anim #t))
(set! (-> obj will-talk) #t)
(new 'static 'spool-anim
:name "billy-reminder-1"
diff --git a/goal_src/levels/village1/explorer.gc b/goal_src/levels/village1/explorer.gc
index 8a55e409a1..b572d3dc07 100644
--- a/goal_src/levels/village1/explorer.gc
+++ b/goal_src/levels/village1/explorer.gc
@@ -65,7 +65,7 @@
)
(defmethod play-anim! explorer ((obj explorer) (arg0 symbol))
- (set! (-> obj talk-message) (the-as uint 260))
+ (set! (-> obj talk-message) (game-text-id press-to-talk))
(case (current-status (-> obj tasks))
(((task-status need-hint) (task-status need-introduction))
(if arg0
@@ -117,7 +117,7 @@
)
(else
(set! (-> obj will-talk) #t)
- (set! (-> obj talk-message) (the-as uint 282))
+ (set! (-> obj talk-message) (game-text-id press-to-trade-money))
)
)
(new 'static 'spool-anim
@@ -556,7 +556,7 @@
(defmethod init-from-entity! explorer ((obj explorer) (arg0 entity-actor))
(dummy-40 obj arg0 *explorer-sg* 3 42 (new 'static 'vector :w 4096.0) 5)
(set! (-> obj tasks) (get-task-control (game-task village1-uncle-money)))
- (set! (-> obj sound-flava) (the-as uint 10))
+ (set! (-> obj sound-flava) (music-flava explorer))
(set! (-> obj draw light-index) (the-as uint 5))
(dummy-42 obj)
(none)
diff --git a/goal_src/levels/village1/sage.gc b/goal_src/levels/village1/sage.gc
index c664bcfe10..886cc7c9bd 100644
--- a/goal_src/levels/village1/sage.gc
+++ b/goal_src/levels/village1/sage.gc
@@ -655,7 +655,7 @@
(dummy-40 obj arg0 *sage-sg* 3 40 (new 'static 'vector :w 4096.0) 5)
(set! (-> obj tasks) (get-task-control (game-task misty-cannon)))
(set! (-> obj reminder-played) #f)
- (set! (-> obj sound-flava) (the-as uint 5))
+ (set! (-> obj sound-flava) (music-flava sage))
(set! (-> obj assistant) (the-as handle #f))
(set! (-> obj draw light-index) (the-as uint 1))
(dummy-42 obj)
diff --git a/goal_src/levels/village2/assistant-village2.gc b/goal_src/levels/village2/assistant-village2.gc
index 4dd61534f9..c8a2dc280c 100644
--- a/goal_src/levels/village2/assistant-village2.gc
+++ b/goal_src/levels/village2/assistant-village2.gc
@@ -100,7 +100,7 @@
(defmethod play-anim! assistant-bluehut ((obj assistant-bluehut) (arg0 symbol))
(with-pp
- (set! (-> obj talk-message) (the-as uint 292))
+ (set! (-> obj talk-message) (game-text-id press-to-talk-to-assistant))
(case (current-status (-> obj tasks))
(((task-status unknown) (task-status need-hint) (task-status need-introduction))
(if (not arg0)
diff --git a/goal_src/levels/village2/gambler.gc b/goal_src/levels/village2/gambler.gc
index 9dfa0436cf..df5631ea81 100644
--- a/goal_src/levels/village2/gambler.gc
+++ b/goal_src/levels/village2/gambler.gc
@@ -26,7 +26,7 @@
)
(defmethod play-anim! gambler ((obj gambler) (arg0 symbol))
- (set! (-> obj talk-message) (the-as uint 260))
+ (set! (-> obj talk-message) (game-text-id press-to-talk))
(case (current-status (-> obj tasks))
(((task-status need-hint) (task-status need-introduction))
(when arg0
@@ -101,7 +101,7 @@
(send-event *target* 'get-pickup 5 (- (-> *GAME-bank* money-task-inc)))
)
(else
- (set! (-> obj talk-message) (the-as uint 282))
+ (set! (-> obj talk-message) (game-text-id press-to-trade-money))
)
)
(new 'static 'spool-anim :name "gambler-resolution-money" :index 15 :parts 2 :command-list '())
@@ -274,7 +274,7 @@
(defmethod init-from-entity! gambler ((obj gambler) (arg0 entity-actor))
(dummy-40 obj arg0 *gambler-sg* 3 32 (new 'static 'vector :w 4096.0) 5)
(set! (-> obj tasks) (get-task-control (game-task rolling-race)))
- (set! (-> obj sound-flava) (the-as uint 17))
+ (set! (-> obj sound-flava) (music-flava gambler))
(set! (-> obj draw light-index) (the-as uint 4))
(dummy-42 obj)
(none)
diff --git a/goal_src/levels/village2/geologist.gc b/goal_src/levels/village2/geologist.gc
index 944fb2cfc7..e0be881137 100644
--- a/goal_src/levels/village2/geologist.gc
+++ b/goal_src/levels/village2/geologist.gc
@@ -26,7 +26,7 @@
)
(defmethod play-anim! geologist ((obj geologist) (arg0 symbol))
- (set! (-> obj talk-message) (the-as uint 260))
+ (set! (-> obj talk-message) (game-text-id press-to-talk))
(case (current-status (-> obj tasks))
(((task-status need-hint) (task-status need-introduction))
(when arg0
@@ -93,7 +93,7 @@
(send-event *target* 'get-pickup 5 (- (-> *GAME-bank* money-task-inc)))
)
(else
- (set! (-> obj talk-message) (the-as uint 282))
+ (set! (-> obj talk-message) (game-text-id press-to-trade-money))
)
)
(new 'static 'spool-anim :name "geologist-resolution-money" :index 10 :parts 2 :command-list '())
@@ -169,7 +169,7 @@
(defmethod init-from-entity! geologist ((obj geologist) (arg0 entity-actor))
(dummy-40 obj arg0 *geologist-sg* 3 45 (new 'static 'vector :w 4096.0) 5)
(set! (-> obj tasks) (get-task-control (game-task rolling-moles)))
- (set! (-> obj sound-flava) (the-as uint 16))
+ (set! (-> obj sound-flava) (music-flava geologist))
(set! (-> obj draw light-index) (the-as uint 2))
(dummy-42 obj)
(none)
diff --git a/goal_src/levels/village2/sage-bluehut.gc b/goal_src/levels/village2/sage-bluehut.gc
index 4d865c0be8..16b4221522 100644
--- a/goal_src/levels/village2/sage-bluehut.gc
+++ b/goal_src/levels/village2/sage-bluehut.gc
@@ -42,7 +42,7 @@
(defmethod play-anim! sage-bluehut ((obj sage-bluehut) (arg0 symbol))
(with-pp
- (set! (-> obj talk-message) (the-as uint 291))
+ (set! (-> obj talk-message) (game-text-id press-to-talk-to-sage))
(case (current-status (-> obj tasks))
(((task-status need-hint) (task-status need-introduction))
(if (not arg0)
@@ -418,7 +418,7 @@
(set! (-> obj reminder-played) #f)
(set! (-> obj assistant) (entity-actor-lookup arg0 'alt-actor 0))
(set! (-> obj draw light-index) (the-as uint 1))
- (set! (-> obj sound-flava) (the-as uint 5))
+ (set! (-> obj sound-flava) (music-flava sage))
(dummy-42 obj)
(none)
)
diff --git a/goal_src/levels/village2/warrior.gc b/goal_src/levels/village2/warrior.gc
index 3b71c04eeb..81e5ad38f8 100644
--- a/goal_src/levels/village2/warrior.gc
+++ b/goal_src/levels/village2/warrior.gc
@@ -63,7 +63,7 @@
(defmethod play-anim! warrior ((obj warrior) (arg0 symbol))
(with-pp
- (set! (-> obj talk-message) (the-as uint 260))
+ (set! (-> obj talk-message) (game-text-id press-to-talk))
(case (current-status (-> obj tasks))
(((task-status need-hint) (task-status need-introduction))
(if arg0
@@ -120,7 +120,7 @@
)
(else
(set! (-> obj will-talk) #t)
- (set! (-> obj talk-message) (the-as uint 282))
+ (set! (-> obj talk-message) (game-text-id press-to-trade-money))
)
)
(new 'static 'spool-anim
@@ -218,7 +218,7 @@
(defmethod init-from-entity! warrior ((obj warrior) (arg0 entity-actor))
(dummy-40 obj arg0 *warrior-sg* 3 33 (new 'static 'vector :y -4096.0 :w 10240.0) 5)
(set! (-> obj tasks) (get-task-control (game-task village2-warrior-money)))
- (set! (-> obj sound-flava) (the-as uint 15))
+ (set! (-> obj sound-flava) (music-flava warrior))
(set! (-> obj draw light-index) (the-as uint 3))
(dummy-42 obj)
(none)
diff --git a/goal_src/levels/village3/assistant-village3.gc b/goal_src/levels/village3/assistant-village3.gc
index 0ed25e95e8..828ece0ee4 100644
--- a/goal_src/levels/village3/assistant-village3.gc
+++ b/goal_src/levels/village3/assistant-village3.gc
@@ -62,7 +62,7 @@
)
(defmethod play-anim! assistant-villagec ((obj assistant-villagec) (arg0 symbol))
- (set! (-> obj talk-message) (the-as uint 292))
+ (set! (-> obj talk-message) (game-text-id press-to-talk-to-assistant))
(cond
((= (get-task-status (game-task finalboss-movies)) (task-status need-introduction))
(if arg0
diff --git a/goal_src/levels/village3/miners.gc b/goal_src/levels/village3/miners.gc
index 94e30616e3..bed4cf185c 100644
--- a/goal_src/levels/village3/miners.gc
+++ b/goal_src/levels/village3/miners.gc
@@ -92,7 +92,7 @@
)
(defmethod play-anim! minertall ((obj minertall) (arg0 symbol))
- (set! (-> obj talk-message) (the-as uint 260))
+ (set! (-> obj talk-message) (game-text-id press-to-talk))
(current-status (-> obj tasks))
(if arg0
(format
@@ -279,7 +279,7 @@
(defmethod play-anim! minershort ((obj minershort) (arg0 symbol))
(with-pp
- (set! (-> obj talk-message) (the-as uint 260))
+ (set! (-> obj talk-message) (game-text-id press-to-talk))
(case (current-status (-> obj tasks))
(((task-status need-hint) (task-status need-introduction))
(if (not arg0)
@@ -458,7 +458,7 @@
)
(else
(set! (-> obj will-talk) #t)
- (set! (-> obj talk-message) (the-as uint 282))
+ (set! (-> obj talk-message) (game-text-id press-to-trade-money))
)
)
(if (< (the-as uint s4-3) (the-as uint 3))
@@ -613,7 +613,7 @@
(set! (-> obj tasks) (get-task-control (game-task village3-miner-money1)))
(set! (-> obj other-miner) (the-as minertall (entity-actor-lookup arg0 'alt-actor 0)))
(set! (-> obj cur-trans-hook) minershort-trans-hook)
- (set! (-> obj sound-flava) (the-as uint 14))
+ (set! (-> obj sound-flava) (music-flava miners))
(set! (-> obj draw light-index) (the-as uint 1))
(dummy-42 obj)
(none)
diff --git a/goal_src/levels/village3/sage-village3.gc b/goal_src/levels/village3/sage-village3.gc
index cfd0e1d28d..7bf8cc0893 100644
--- a/goal_src/levels/village3/sage-village3.gc
+++ b/goal_src/levels/village3/sage-village3.gc
@@ -48,7 +48,7 @@
(defmethod play-anim! sage-villagec ((obj sage-villagec) (arg0 symbol))
(with-pp
- (set! (-> obj talk-message) (the-as uint 291))
+ (set! (-> obj talk-message) (game-text-id press-to-talk-to-sage))
(case (current-status (-> obj tasks))
(((task-status unknown) (task-status need-hint) (task-status need-introduction))
(if (not arg0)
@@ -344,7 +344,7 @@
(set! (-> obj assistant) (entity-actor-lookup arg0 'alt-actor 0))
(set! (-> obj evilbro) (the-as handle #f))
(set! (-> obj evilsis) (the-as handle #f))
- (set! (-> obj sound-flava) (the-as uint 5))
+ (set! (-> obj sound-flava) (music-flava sage))
(dummy-42 obj)
(none)
)
diff --git a/goal_src/levels/village3/village3-obs.gc b/goal_src/levels/village3/village3-obs.gc
index eb5d3ce45a..d2089f767f 100644
--- a/goal_src/levels/village3/village3-obs.gc
+++ b/goal_src/levels/village3/village3-obs.gc
@@ -5,3 +5,627 @@
;; name in dgo: village3-obs
;; dgos: L1, VI3
+;; DECOMP BEGINS
+
+(defskelgroup *med-res-ogre-sg* medres-ogre
+ 0
+ 2
+ ((1 (meters 999999)))
+ :bounds (static-spherem -200 0 -450 350)
+ :longest-edge (meters 0.01)
+ )
+
+(defskelgroup *med-res-ogre2-sg* medres-ogre2
+ 0
+ 2
+ ((1 (meters 999999)))
+ :bounds (static-spherem -200 0 -950 320)
+ :longest-edge (meters 0.01)
+ )
+
+(defskelgroup *med-res-ogre3-sg* medres-ogre3
+ 0
+ 2
+ ((1 (meters 999999)))
+ :bounds (static-spherem -100 0 -1370 300)
+ :longest-edge (meters 0.01)
+ )
+
+(defskelgroup *med-res-finalboss-sg* medres-finalboss
+ 0
+ 2
+ ((1 (meters 999999)))
+ :bounds (static-spherem 80 120 -150 470)
+ :longest-edge (meters 0.01)
+ )
+
+(deftype villagec-lava (water-anim)
+ ()
+ :heap-base #x70
+ :method-count-assert 30
+ :size-assert #xdc
+ :flag-assert #x1e007000dc
+ )
+
+
+(define ripple-for-villagec-lava (new 'static 'ripple-wave-set
+ :count 2
+ :converted #f
+ :wave
+ (new 'static 'inline-array ripple-wave 4
+ (new 'static 'ripple-wave :scale 40.0 :xdiv 2 :speed 1.5)
+ (new 'static 'ripple-wave :scale 40.0 :xdiv -2 :zdiv 2 :speed 0.9)
+ (new 'static 'ripple-wave)
+ (new 'static 'ripple-wave)
+ )
+ )
+ )
+
+(defmethod TODO-RENAME-22 villagec-lava ((obj villagec-lava))
+ (let ((t9-0 (method-of-type water-anim TODO-RENAME-22)))
+ (t9-0 obj)
+ )
+ (let ((v1-2 (new 'process 'ripple-control)))
+ (set! (-> obj draw ripple) v1-2)
+ (set! (-> v1-2 global-scale) 3072.0)
+ (set! (-> v1-2 waveform) ripple-for-villagec-lava)
+ )
+ (set! (-> obj flags) (logand -8388609 (-> obj flags)))
+ (set! (-> obj flags) (logior #x2000000 (-> obj flags)))
+ (set! (-> obj attack-event) 'lava)
+ (none)
+ )
+
+(deftype gondola (process-drawable)
+ ((root-override collide-shape-moving :offset 112)
+ (anim spool-anim :offset-assert 176)
+ (old-target-pos transformq :inline :offset-assert 192)
+ )
+ :heap-base #x80
+ :method-count-assert 23
+ :size-assert #xf0
+ :flag-assert #x17008000f0
+ (:methods
+ (idle (symbol) _type_ :state 20)
+ (ride-up () _type_ :state 21)
+ (ride-down () _type_ :state 22)
+ )
+ )
+
+
+(defskelgroup *gondola-sg* gondola
+ 0
+ 3
+ ((1 (meters 999999)))
+ :bounds (static-spherem 0 -5.5 0 6.5)
+ :longest-edge (meters 0)
+ :shadow 2
+ )
+
+(defstate idle (gondola)
+ :virtual #t
+ :code
+ (behavior ((arg0 symbol))
+ (set! (-> self state-time) (-> *display* base-frame-counter))
+ (ja-channel-set! 1)
+ (cond
+ (arg0
+ (set! (-> self anim) (new 'static 'spool-anim
+ :name "gondola-ride-down"
+ :index 6
+ :parts 3
+ :command-list
+ '((0 want-levels village3 snow)
+ (0 shadow target #f)
+ (0 shadow sidekick #f)
+ (1 display-level village3 display)
+ (175 display-level snow #f)
+ (300 setting-reset music village3)
+ (618 save)
+ (619 blackout 20)
+ (619 shadow target #t)
+ )
+ )
+ )
+ (let ((v1-5 (-> self skel root-channel 0)))
+ (set! (-> v1-5 frame-group) (the-as art-joint-anim (-> self draw art-group data 4)))
+ )
+ )
+ (else
+ (set! (-> self anim) (new 'static 'spool-anim
+ :name "gondola-ride-up"
+ :index 5
+ :parts 3
+ :command-list
+ '((0 want-levels village3 snow)
+ (0 shadow target #f)
+ (400 setting-reset music snow)
+ (400 display-level snow display)
+ (678 save)
+ (679 blackout 20)
+ (679 shadow target #t)
+ )
+ )
+ )
+ (let ((v1-9 (-> self skel root-channel 0)))
+ (set! (-> v1-9 frame-group) (the-as art-joint-anim (-> self draw art-group data 3)))
+ )
+ )
+ )
+ (transform-post)
+ (while #t
+ (when (and *target* (and (< (vector-vector-distance
+ (vector<-cspace! (new 'stack-no-clear 'vector) (-> self node-list data 3))
+ (target-pos 0)
+ )
+ 81920.0
+ )
+ (not (movie?))
+ (not (level-hint-displayed?))
+ (>= (- (-> *display* base-frame-counter) (-> self state-time)) 900)
+ (file-status *art-control* (-> self anim name) 0)
+ )
+ )
+ (let ((s3-0 (get-reminder (get-task-control (game-task village3-button)) 2))
+ (s4-1 (and *cheat-mode* (cpad-hold? 0 l3)))
+ (s5-1 (vector<-cspace! (new 'stack-no-clear 'vector) (-> self node-list data 3)))
+ )
+ (cond
+ ((not (or s4-1 (task-closed? (game-task village3-button) (task-status need-hint))))
+ )
+ ((and (< (the int (-> *game-info* fuel)) (+ s3-0 2)) (< (the int (-> *game-info* fuel)) 71) (not s4-1))
+ (level-hint-spawn
+ (game-text-id village3-gondola-malfunctioning)
+ "asstvb75"
+ (the-as entity #f)
+ *entity-pool*
+ (game-task none)
+ )
+ )
+ (else
+ (level-hint-spawn
+ (game-text-id village3-gondola-reactivated)
+ "asstvb76"
+ (the-as entity #f)
+ *entity-pool*
+ (game-task none)
+ )
+ (let ((s4-3 (new 'stack-no-clear 'event-message-block)))
+ (set! (-> s4-3 from) self)
+ (set! (-> s4-3 num-params) 0)
+ (set! (-> s4-3 message) 'update)
+ (let ((s3-1 send-event-function)
+ (v1-36 (entity-actor-lookup (-> self entity) 'alt-actor 0))
+ )
+ (s3-1
+ (if v1-36
+ (-> v1-36 extra process)
+ )
+ s4-3
+ )
+ )
+ )
+ (let ((s4-4 (new 'stack-no-clear 'event-message-block)))
+ (set! (-> s4-4 from) self)
+ (set! (-> s4-4 num-params) 0)
+ (set! (-> s4-4 message) 'update)
+ (let ((s3-2 send-event-function)
+ (v1-40 (entity-actor-lookup (-> self entity) 'alt-actor 1))
+ )
+ (s3-2
+ (if v1-40
+ (-> v1-40 extra process)
+ )
+ s4-4
+ )
+ )
+ )
+ (when (and (< (vector-vector-xz-distance s5-1 (-> *target* control trans)) 18432.0)
+ (and (not (and (logtest? (-> *target* control unknown-surface00 flags) 2048)
+ (zero? (logand (-> *target* control status) 1))
+ )
+ )
+ (and (< (+ -40960.0 (-> s5-1 y)) (-> *target* control trans y))
+ (begin
+ (hide-hud)
+ (level-hint-surpress!)
+ (kill-current-level-hint '() '(sidekick voicebox) 'exit)
+ (hud-hidden?)
+ )
+ (can-grab-display? self)
+ )
+ )
+ )
+ (let ((s5-2
+ (new 'stack 'font-context *font-default-matrix* 32 160 0.0 (font-color default) (font-flags shadow kerning))
+ )
+ )
+ (let ((v1-59 s5-2))
+ (set! (-> v1-59 width) (the float 440))
+ )
+ (let ((v1-60 s5-2))
+ (set! (-> v1-60 height) (the float 80))
+ )
+ (set! (-> s5-2 flags) (font-flags shadow kerning large))
+ (print-game-text (lookup-text! *common-text* (game-text-id press-to-use) #f) s5-2 #f 128 22)
+ )
+ (when (and (cpad-pressed? 0 circle) (process-grab? *target*))
+ (if arg0
+ (go-virtual ride-down)
+ (go-virtual ride-up)
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ (spool-push *art-control* (-> self anim name) 0 self -99.0)
+ (suspend)
+ )
+ (none)
+ )
+ )
+
+(defstate ride-up (gondola)
+ :virtual #t
+ :code
+ (behavior ()
+ (process-entity-status! self (entity-perm-status bit-3) #t)
+ (let ((a1-1 (new 'stack-no-clear 'event-message-block)))
+ (set! (-> a1-1 from) self)
+ (set! (-> a1-1 num-params) 1)
+ (set! (-> a1-1 message) 'clone-anim)
+ (set! (-> a1-1 param 0) (the-as uint self))
+ (when (send-event-function *target* a1-1)
+ (send-event (ppointer->process (-> *target* sidekick)) 'matrix 'play-anim)
+ (send-event *target* 'blend-shape #t)
+ (set-setting! *setting-control* self 'sound-flava #f 30.0 4)
+ (logclear! (-> self mask) (process-mask enemy))
+ (let ((gp-0 (get-process *default-dead-pool* othercam #x4000)))
+ (when gp-0
+ (let ((t9-6 (method-of-type othercam activate)))
+ (t9-6 (the-as othercam gp-0) self 'othercam (the-as pointer #x70004000))
+ )
+ (run-now-in-process gp-0 othercam-init-by-other self 4 #f #t)
+ (-> gp-0 ppointer)
+ )
+ )
+ (ja-play-spooled-anim
+ (-> self anim)
+ (the-as art-joint-anim (-> self draw art-group data 3))
+ (the-as art-joint-anim (-> self draw art-group data 4))
+ (the-as (function process-drawable symbol) false-func)
+ )
+ (clear-pending-settings-from-process *setting-control* self 'sound-flava)
+ (send-event *target* 'blend-shape #f)
+ (when *target*
+ (vector<-cspace! (the-as vector (-> self old-target-pos)) (-> *target* node-list data 3))
+ (send-event *target* 'trans 'restore (-> self old-target-pos))
+ (send-event *target* 'end-mode)
+ (update-transforms! (-> self root-override))
+ (move-to-ground (-> *target* control) 4096.0 40960.0 #t (-> *target* control root-prim collide-with))
+ (logior! (-> *target* control status) 7)
+ (suspend)
+ (send-event *camera* 'teleport-to-other-start-string)
+ )
+ (load-state-want-vis 'sno)
+ (set-continue! *game-info* "snow-start")
+ )
+ )
+ (process-entity-status! self (entity-perm-status bit-3) #f)
+ (go-virtual idle #t)
+ (none)
+ )
+ :post
+ (behavior ()
+ (ja-post)
+ (dummy-14 (-> self draw shadow-ctrl))
+ (none)
+ )
+ )
+
+(defstate ride-down (gondola)
+ :virtual #t
+ :code
+ (behavior ()
+ (process-entity-status! self (entity-perm-status bit-3) #t)
+ (let ((a1-1 (new 'stack-no-clear 'event-message-block)))
+ (set! (-> a1-1 from) self)
+ (set! (-> a1-1 num-params) 1)
+ (set! (-> a1-1 message) 'clone-anim)
+ (set! (-> a1-1 param 0) (the-as uint self))
+ (when (send-event-function *target* a1-1)
+ (send-event *target* 'trans 'save (-> self old-target-pos))
+ (send-event (ppointer->process (-> *target* sidekick)) 'matrix 'play-anim)
+ (send-event *target* 'blend-shape #t)
+ (set-setting! *setting-control* self 'sound-flava #f 30.0 4)
+ (logclear! (-> self mask) (process-mask enemy))
+ (let ((gp-0 (get-process *default-dead-pool* othercam #x4000)))
+ (when gp-0
+ (let ((t9-7 (method-of-type othercam activate)))
+ (t9-7 (the-as othercam gp-0) self 'othercam (the-as pointer #x70004000))
+ )
+ (run-now-in-process gp-0 othercam-init-by-other self 4 #f #t)
+ (-> gp-0 ppointer)
+ )
+ )
+ (ja-play-spooled-anim
+ (-> self anim)
+ (the-as art-joint-anim (-> self draw art-group data 4))
+ (the-as art-joint-anim (-> self draw art-group data 3))
+ (the-as (function process-drawable symbol) false-func)
+ )
+ (clear-pending-settings-from-process *setting-control* self 'sound-flava)
+ (send-event *target* 'blend-shape #f)
+ (when *target*
+ (vector<-cspace! (the-as vector (-> self old-target-pos)) (-> *target* node-list data 3))
+ (send-event *target* 'trans 'restore (-> self old-target-pos))
+ (send-event *target* 'end-mode)
+ (update-transforms! (-> self root-override))
+ (move-to-ground (-> *target* control) 4096.0 40960.0 #t (-> *target* control root-prim collide-with))
+ (logior! (-> *target* control status) 7)
+ (suspend)
+ (send-event *camera* 'teleport-to-other-start-string)
+ )
+ (load-state-want-vis 'vi3)
+ (set-continue! *game-info* "village3-farside")
+ )
+ )
+ (process-entity-status! self (entity-perm-status bit-3) #f)
+ (go-virtual idle #f)
+ (none)
+ )
+ :post
+ (-> (method-of-type gondola ride-up) post)
+ )
+
+(defmethod init-from-entity! gondola ((obj gondola) (arg0 entity-actor))
+ (stack-size-set! (-> obj main-thread) 512)
+ (let ((s4-0 (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player))))
+ (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process))
+ (set! (-> s4-0 reaction) default-collision-reaction)
+ (set! (-> s4-0 no-reaction)
+ (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing)
+ )
+ (alloc-riders s4-0 1)
+ (let ((s3-0 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 0))))
+ (set! (-> s3-0 prim-core collide-as) (collide-kind ground-object))
+ (set! (-> s3-0 collide-with) (collide-kind target))
+ (set! (-> s3-0 prim-core action) (collide-action solid ca-1))
+ (set! (-> s3-0 prim-core offense) (collide-offense indestructible))
+ (set! (-> s3-0 transform-index) 3)
+ (set-vector! (-> s3-0 local-sphere) 0.0 -24576.0 0.0 26624.0)
+ (set-root-prim! s4-0 s3-0)
+ )
+ (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w)))
+ (backup-collide-with-as s4-0)
+ (set! (-> obj root-override) s4-0)
+ )
+ (process-drawable-from-entity! obj arg0)
+ (quaternion-identity! (-> obj root-override quat))
+ (initialize-skeleton obj *gondola-sg* '())
+ (set! (-> obj draw origin-joint-index) (the-as uint 3))
+ (logclear! (-> obj mask) (process-mask actor-pause))
+ (set! (-> obj draw shadow-joint-index) (the-as uint 3))
+ (set! (-> obj draw shadow-ctrl) (copy *target-shadow-control* 'process))
+ (let ((a0-16 (-> obj draw shadow-ctrl)))
+ (when a0-16
+ (let ((v1-32 a0-16))
+ (set! (-> v1-32 settings bot-plane w) (- -122880.0))
+ )
+ 0
+ (let ((v1-34 a0-16))
+ (set! (-> v1-34 settings top-plane w) (- 4096.0))
+ )
+ 0
+ (dummy-14 a0-16)
+ )
+ )
+ (cond
+ ((< (-> (target-pos 0) y) (+ 204800.0 (-> obj root-override trans y)))
+ (go (method-of-object obj idle) #f)
+ )
+ (else
+ (set! (-> obj anim) (new 'static 'spool-anim :name "gondola-ride-down" :index 6 :parts 3 :command-list '()))
+ (go (method-of-object obj idle) #t)
+ )
+ )
+ (none)
+ )
+
+(deftype pistons (process-drawable)
+ ()
+ :heap-base #x40
+ :method-count-assert 22
+ :size-assert #xb0
+ :flag-assert #x16004000b0
+ (:methods
+ (idle () _type_ :state 20)
+ (active (basic symbol) _type_ :state 21)
+ )
+ )
+
+
+(defskelgroup *pistons-sg* pistons
+ 0
+ 2
+ ((1 (meters 999999)))
+ :bounds (static-spherem 0 6 0 8)
+ :longest-edge (meters 0)
+ )
+
+(defstate idle (pistons)
+ :virtual #t
+ :event
+ (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block))
+ (case arg2
+ (('update)
+ (go-virtual active (the-as basic (process->handle arg0)) #f)
+ )
+ )
+ )
+ :code
+ (behavior ()
+ (ja-post)
+ (logior! (-> self mask) (process-mask sleep))
+ (suspend)
+ 0
+ (none)
+ )
+ )
+
+(defstate active (pistons)
+ :virtual #t
+ :code
+ (behavior ((arg0 basic) (arg1 symbol))
+ (process-entity-status! self (entity-perm-status complete) #t)
+ (if (not arg1)
+ (sound-play-by-name (static-sound-name "gdl-start-up") (new-sound-id) 1024 0 0 1 #t)
+ )
+ (let ((f30-0 (if arg1
+ 1.0
+ 0.0
+ )
+ )
+ )
+ (while #t
+ (set! f30-0 (seek f30-0 1.0 (* 0.2 (-> *display* seconds-per-frame))))
+ (let ((a0-5 (-> self skel root-channel 0)))
+ (set! (-> a0-5 param 0) f30-0)
+ (joint-control-channel-group-eval! a0-5 (the-as art-joint-anim #f) num-func-loop!)
+ )
+ (ja-post)
+ (update! (-> self sound))
+ (suspend)
+ )
+ )
+ ;; note : deleted some unused trash "code" here
+ (none)
+ )
+ )
+
+(defmethod init-from-entity! pistons ((obj pistons) (arg0 entity-actor))
+ (set! (-> obj root) (new 'process 'trsqv))
+ (process-drawable-from-entity! obj arg0)
+ (initialize-skeleton obj *pistons-sg* '())
+ (set! (-> obj sound) (new
+ 'process
+ 'ambient-sound
+ (new 'static 'sound-spec
+ :mask #x80
+ :num 1.0
+ :group #x1
+ :sound-name (static-sound-name "gdl-gen-loop")
+ :volume #x400
+ :fo-max 100
+ )
+ (-> obj root trans)
+ )
+ )
+ (if (and (-> obj entity) (logtest? (-> obj entity extra perm status) (entity-perm-status complete)))
+ (go (method-of-object obj active) #f #t)
+ (go (method-of-object obj idle))
+ )
+ (none)
+ )
+
+(deftype gondolacables (process-drawable)
+ ()
+ :heap-base #x40
+ :method-count-assert 21
+ :size-assert #xb0
+ :flag-assert #x15004000b0
+ (:methods
+ (idle () _type_ :state 20)
+ )
+ )
+
+
+(defskelgroup *gondolacables-sg* gondolacables
+ 0
+ 2
+ ((1 (meters 999999)))
+ :bounds (static-spherem 0 0 0 120)
+ :longest-edge (meters 0)
+ )
+
+(defstate idle (gondolacables)
+ :virtual #t
+ :event
+ (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block))
+ (let ((v1-0 arg2))
+ (the-as object (when (= v1-0 'update)
+ (process-entity-status! self (entity-perm-status complete) #t)
+ (let ((v0-0 1))
+ (set! (-> self draw mgeo effect 0 effect-bits) (the-as uint v0-0))
+ v0-0
+ )
+ )
+ )
+ )
+ )
+ :code
+ (behavior ()
+ (while #t
+ (let ((a0-0 (-> self skel root-channel 0)))
+ (set! (-> a0-0 frame-group) (if (> (-> self skel active-channels) 0)
+ (-> self skel root-channel 0 frame-group)
+ )
+ )
+ (set! (-> a0-0 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0)
+ (-> self skel root-channel 0 frame-group)
+ )
+ data
+ 0
+ length
+ )
+ -1
+ )
+ )
+ )
+ (set! (-> a0-0 param 1) 1.0)
+ (set! (-> a0-0 frame-num) 0.0)
+ (joint-control-channel-group!
+ a0-0
+ (if (> (-> self skel active-channels) 0)
+ (-> self skel root-channel 0 frame-group)
+ )
+ num-func-seek!
+ )
+ )
+ (until (ja-done? 0)
+ (suspend)
+ (let ((a0-1 (-> self skel root-channel 0)))
+ (set! (-> a0-1 param 0) (the float (+ (-> a0-1 frame-group data 0 length) -1)))
+ (set! (-> a0-1 param 1) 1.0)
+ (joint-control-channel-group-eval! a0-1 (the-as art-joint-anim #f) num-func-seek!)
+ )
+ )
+ )
+ (none)
+ )
+ :post
+ (the-as (function none :behavior gondolacables) ja-post)
+ )
+
+(defmethod init-from-entity! gondolacables ((obj gondolacables) (arg0 entity-actor))
+ (set! (-> obj root) (new 'process 'trsqv))
+ (process-drawable-from-entity! obj arg0)
+ (initialize-skeleton obj *gondolacables-sg* '())
+ (set! (-> obj draw mgeo effect 0 effect-bits)
+ (the-as
+ uint
+ (if (and (-> obj entity) (logtest? (-> obj entity extra perm status) (entity-perm-status complete)))
+ 1
+ 0
+ )
+ )
+ )
+ (go (method-of-object obj idle))
+ (none)
+ )
+
+
+
+
diff --git a/goal_src/levels/village_common/oracle.gc b/goal_src/levels/village_common/oracle.gc
index 21d9f545ee..74b5aefd1f 100644
--- a/goal_src/levels/village_common/oracle.gc
+++ b/goal_src/levels/village_common/oracle.gc
@@ -29,7 +29,7 @@
)
(defmethod play-anim! oracle ((obj oracle) (arg0 symbol))
- (set! (-> obj talk-message) (the-as uint 260))
+ (set! (-> obj talk-message) (game-text-id press-to-talk))
(case (current-status (-> obj tasks))
(((task-status need-hint) (task-status need-introduction))
(when arg0
@@ -175,7 +175,7 @@
)
(else
(set! (-> obj will-talk) #t)
- (set! (-> obj talk-message) (the-as uint 283))
+ (set! (-> obj talk-message) (game-text-id press-to-trade-money-oracle))
)
)
(cond
diff --git a/goalc/compiler/IR.cpp b/goalc/compiler/IR.cpp
index f98af296db..dba52c3fbd 100644
--- a/goalc/compiler/IR.cpp
+++ b/goalc/compiler/IR.cpp
@@ -1057,6 +1057,8 @@ void IR_FloatToInt::do_codegen(emitter::ObjectGenerator* gen,
emitter::IR_Record irec) {
gen->add_instr(IGen::float_to_int32(get_reg(m_dest, allocs, irec), get_reg(m_src, allocs, irec)),
irec);
+ gen->add_instr(IGen::movsx_r64_r32(get_reg(m_dest, allocs, irec), get_reg(m_dest, allocs, irec)),
+ irec);
}
///////////////////////
diff --git a/goalc/compiler/compilation/State.cpp b/goalc/compiler/compilation/State.cpp
index f68f7fba6b..56a778c1ff 100644
--- a/goalc/compiler/compilation/State.cpp
+++ b/goalc/compiler/compilation/State.cpp
@@ -139,8 +139,10 @@ Val* Compiler::compile_define_virtual_state_hook(const goos::Object& form,
// state_name
// state_parent
// state object
+ // is_override
// named args for enter/exit/trans/post/event/code
- va_check(form, args, {goos::ObjectType::SYMBOL, goos::ObjectType::SYMBOL, {}},
+ va_check(form, args,
+ {goos::ObjectType::SYMBOL, goos::ObjectType::SYMBOL, {}, goos::ObjectType::SYMBOL},
{
{"enter", {true, {}}},
{"exit", {true, {}}},
@@ -179,7 +181,8 @@ Val* Compiler::compile_define_virtual_state_hook(const goos::Object& form,
MethodInfo parent_method_info;
auto parent_of_parent_type = m_ts.lookup_type(state_parent)->get_parent();
- if (m_ts.try_lookup_method(parent_of_parent_type, state_name, &parent_method_info)) {
+ if (m_ts.try_lookup_method(parent_of_parent_type, state_name, &parent_method_info) &&
+ args.unnamed.at(3).as_symbol()->name == "#f") {
// need to call inherit state TODO
auto inherit_state_func =
compile_get_symbol_value(form, "inherit-state", env)->to_gpr(form, env);
diff --git a/goalc/debugger/Debugger.cpp b/goalc/debugger/Debugger.cpp
index f8ca4a00a3..790b5ae9af 100644
--- a/goalc/debugger/Debugger.cpp
+++ b/goalc/debugger/Debugger.cpp
@@ -300,7 +300,7 @@ std::vector Debugger::get_backtrace(u64 rip, u64 rsp) {
found = true;
}
} else*/
- if (fails > 50) {
+ if (fails > 70) {
fmt::print(
"Backtrace was too long. Exception might have happened outside GOAL code, or the "
"stack frame is too long.\n");
@@ -578,14 +578,18 @@ void Debugger::read_symbol_table() {
bytes_read += 128;
// just in case
str_buff[127] = '\0';
- assert(strlen(str_buff) < 50);
- std::string str(str_buff);
// GOAL sym - s7
auto sym_offset = s32(offset + st_base + BASIC_OFFSET) - s32(m_debug_context.s7);
assert(sym_offset >= INT16_MIN);
assert(sym_offset <= INT16_MAX);
+ std::string str(str_buff);
+ if (str.length() >= 50) {
+ fmt::print("Invalid symbol #x{:x}!\n", sym_offset);
+ continue;
+ }
+
// update maps
if (m_symbol_name_to_offset_map.find(str) != m_symbol_name_to_offset_map.end()) {
if (str == "asize-of-basic-func") {
@@ -596,7 +600,8 @@ void Debugger::read_symbol_table() {
str += "-hack-copy";
} else {
fmt::print("Symbol {} (#x{:x}) appears multiple times!\n", str, sym_offset);
- assert(false);
+ continue;
+ // assert(false);
}
}
diff --git a/scripts/jak1_file_list.py b/scripts/jak1_file_list.py
index 61da5ccb77..91f86e6dff 100644
--- a/scripts/jak1_file_list.py
+++ b/scripts/jak1_file_list.py
@@ -391,7 +391,7 @@ file_list = [\
["citadel-obs", "citadel-obs", 3, ["CIT", "L1"], "levels/citadel"],
["citb-plat", "citb-plat", 3, ["CIT", "L1"], "levels/citadel"],
["citadel-sages", "citadel-sages", 3, ["CIT", "L1"], "levels/citadel"],
-["snow-bunny", "snow-bunny", 3, ["CIT", "L1", "SNO"], "levels/common"],
+["snow-bunny", "snow-bunny", 3, ["CIT", "L1", "SNO"], "levels/snow"],
["citb-bunny", "citb-bunny", 3, ["CIT", "L1"], "levels/citadel"],
["citb-drop-plat-CIT", "citb-drop-plat", 3, ["CIT"], "levels/citadel"],
["citb-drop-plat-L1", "citb-drop-plat", 3, ["L1"], "levels/l1_only"],
diff --git a/scripts/update-game-text-id.py b/scripts/update-game-text-id.py
new file mode 100644
index 0000000000..8c67a1b90f
--- /dev/null
+++ b/scripts/update-game-text-id.py
@@ -0,0 +1,42 @@
+## Given a list of files(comma delimited), decompile it, then place it under the specified placeholder (if it exists)
+## if the placeholder doesn't exist, error out
+## the placeholder is `;; DECOMP BEGINS`
+
+import os
+
+print("Copying game-text-id enum")
+begin_str = ";; GAME-TEXT-ID ENUM BEGINS"
+end_str = ";; GAME-TEXT-ID ENUM ENDS"
+enum_lines = []
+with open('./decompiler/config/all-types.gc') as f:
+ lines = f.readlines()
+ found_enum = False
+ for line in lines:
+ if found_enum and end_str in line:
+ break
+ if found_enum:
+ enum_lines.append(line)
+ if begin_str in line:
+ found_enum = True
+new_texth_lines = []
+with open('goal_src/engine/ui/text-h.gc') as f:
+ lines = f.readlines()
+ found_enum = False
+ for line in lines:
+ if begin_str in line:
+ found_enum = True
+ new_texth_lines.append(begin_str + "\n")
+ new_texth_lines += enum_lines
+ new_texth_lines.append(end_str + "\n")
+ continue
+ if end_str in line:
+ found_enum = False
+ continue
+ if found_enum:
+ continue
+ new_texth_lines.append(line)
+os.remove('goal_src/engine/ui/text-h.gc')
+with open('goal_src/engine/ui/text-h.gc', "w") as f:
+ f.writelines(new_texth_lines)
+print("game-text-id enum updated!")
+
diff --git a/scripts/update-goal-src.py b/scripts/update-goal-src.py
index 87ef871069..41b1fdd1bf 100644
--- a/scripts/update-goal-src.py
+++ b/scripts/update-goal-src.py
@@ -31,7 +31,6 @@ files_with_modifications = [
"default-menu",
"collide-shape",
"cam-states",
- "plant-boss",
"helix-water",
"lavatube-energy",
"sage-finalboss-FIN",
@@ -39,7 +38,9 @@ files_with_modifications = [
"entity",
"ogreboss",
"navigate",
- "nav-enemy"
+ "ice-cube",
+ "snow-bunny",
+ "citadel-sages"
]
for file in files:
@@ -122,42 +123,6 @@ for file in files:
print("Copied - {}!".format(file))
-print("Copying game-text-id enum")
-begin_str = ";; GAME-TEXT-ID ENUM BEGINS"
-end_str = ";; GAME-TEXT-ID ENUM ENDS"
-enum_lines = []
-with open('./decompiler/config/all-types.gc') as f:
- lines = f.readlines()
- found_enum = False
- for line in lines:
- if found_enum and end_str in line:
- break
- if found_enum:
- enum_lines.append(line)
- if begin_str in line:
- found_enum = True
-new_texth_lines = []
-with open('goal_src/engine/ui/text-h.gc') as f:
- lines = f.readlines()
- found_enum = False
- for line in lines:
- if begin_str in line:
- found_enum = True
- new_texth_lines.append(begin_str + "\n")
- new_texth_lines += enum_lines
- new_texth_lines.append(end_str + "\n")
- continue
- if end_str in line:
- found_enum = False
- continue
- if found_enum:
- continue
- new_texth_lines.append(line)
-os.remove('goal_src/engine/ui/text-h.gc')
-with open('goal_src/engine/ui/text-h.gc', "w") as f:
- f.writelines(new_texth_lines)
-print("game-text-id enum updated!")
-
if throw_error:
exit(1)
diff --git a/test/decompiler/reference/decompiler-macros.gc b/test/decompiler/reference/decompiler-macros.gc
index 6965ae3a76..9bdb47442f 100644
--- a/test/decompiler/reference/decompiler-macros.gc
+++ b/test/decompiler/reference/decompiler-macros.gc
@@ -480,7 +480,7 @@
;; This way it can check the individual function types, make sure they make sense, and create
;; a state with the appropriate type.
,(if virtual
- `(define-virtual-state-hook ,state-name ,defstate-type ,new-state :event ,event :enter ,enter :trans ,trans :exit ,exit :code ,code :post ,post)
+ `(define-virtual-state-hook ,state-name ,defstate-type ,new-state ,(eq? virtual 'override) :event ,event :enter ,enter :trans ,trans :exit ,exit :code ,code :post ,post)
`(define-state-hook ,state-name ,defstate-type ,new-state :event ,event :enter ,enter :trans ,trans :exit ,exit :code ,code :post ,post)
)
diff --git a/test/decompiler/reference/engine/ambient/ambient_REF.gc b/test/decompiler/reference/engine/ambient/ambient_REF.gc
index 1a2fe22358..f81049fbd1 100644
--- a/test/decompiler/reference/engine/ambient/ambient_REF.gc
+++ b/test/decompiler/reference/engine/ambient/ambient_REF.gc
@@ -223,7 +223,7 @@
)
;; definition for function can-grab-display?
-(defun can-grab-display? ((arg0 process-taskable))
+(defun can-grab-display? ((arg0 process))
(let ((v1-2 (handle->process (-> *game-info* display-text-handle))))
(when (and (or (not v1-2) (= v1-2 arg0) (>= (- (-> *display* base-frame-counter) (-> *game-info* display-text-time)) 30))
(and *target*
diff --git a/test/decompiler/reference/engine/debug/default-menu_REF.gc b/test/decompiler/reference/engine/debug/default-menu_REF.gc
index 6039628e0e..761c30687f 100644
--- a/test/decompiler/reference/engine/debug/default-menu_REF.gc
+++ b/test/decompiler/reference/engine/debug/default-menu_REF.gc
@@ -548,7 +548,7 @@
(define *shader-pick-menu* (the-as debug-menu #f))
;; definition for function build-shader-list
-;; INFO: Return type mismatch object vs none.
+;; INFO: Return type mismatch pair vs none.
(defun build-shader-list ()
(debug-menu-remove-all-items *shader-pick-menu*)
(when *texture-page-dir*
@@ -576,7 +576,7 @@
)
)
)
- (set! (-> *shader-pick-menu* items) (the-as pair (sort (-> *shader-pick-menu* items) debug-menu-node)))
+ (set! (-> *shader-pick-menu* items) (sort (-> *shader-pick-menu* items) debug-menu-node))
(none)
)
@@ -688,29 +688,22 @@
)
)
(set! (-> *instance-shrub-menu* items)
- (the-as
- pair
- (sort
- (-> *instance-shrub-menu* items)
- (lambda ((arg0 debug-menu) (arg1 debug-menu)) (string<=? (-> arg0 name) (-> arg1 name)))
- )
+ (sort
+ (-> *instance-shrub-menu* items)
+ (lambda ((arg0 debug-menu) (arg1 debug-menu)) (string<=? (-> arg0 name) (-> arg1 name)))
)
)
(set! (-> *instance-tie-menu* items)
- (the-as
- pair
- (sort
- (-> *instance-tie-menu* items)
- (lambda ((arg0 debug-menu) (arg1 debug-menu)) (string<=? (-> arg0 name) (-> arg1 name)))
- )
+ (sort
+ (-> *instance-tie-menu* items)
+ (lambda ((arg0 debug-menu) (arg1 debug-menu)) (string<=? (-> arg0 name) (-> arg1 name)))
)
)
(set! (-> *enable-instance-tie-menu* items)
- (the-as pair (sort
- (-> *enable-instance-tie-menu* items)
- (lambda ((arg0 debug-menu) (arg1 debug-menu)) (string<=? (-> arg0 name) (-> arg1 name)))
- )
- )
+ (sort
+ (-> *enable-instance-tie-menu* items)
+ (lambda ((arg0 debug-menu) (arg1 debug-menu)) (string<=? (-> arg0 name) (-> arg1 name)))
+ )
)
0
(none)
diff --git a/test/decompiler/reference/engine/engine/connect_REF.gc b/test/decompiler/reference/engine/engine/connect_REF.gc
index 3648db8523..570bc0557f 100644
--- a/test/decompiler/reference/engine/engine/connect_REF.gc
+++ b/test/decompiler/reference/engine/engine/connect_REF.gc
@@ -26,9 +26,9 @@
;; definition of type connection
(deftype connection (connectable)
((param0 basic :offset-assert 16)
- (param1 basic :offset-assert 20)
- (param2 basic :offset-assert 24)
- (param3 basic :offset-assert 28)
+ (param1 int32 :offset-assert 20)
+ (param2 int32 :offset-assert 24)
+ (param3 int32 :offset-assert 28)
(quad uint128 2 :offset 0)
)
:method-count-assert 14
@@ -283,9 +283,9 @@
(let ((ct (the-as connection (-> obj alive-list-end prev0))))
(while (!= ct (-> obj alive-list))
((the-as (function basic basic basic object object) (-> ct param0))
- (-> ct param1)
- (-> ct param2)
- (-> ct param3)
+ (the-as basic (-> ct param1))
+ (the-as basic (-> ct param2))
+ (the-as basic (-> ct param3))
arg0
)
(set! ct (the-as connection (-> ct prev0)))
@@ -300,9 +300,9 @@
(let ((ct (the-as connection (-> obj alive-list-end prev0))))
(while (!= ct (-> obj alive-list))
(let ((result ((the-as (function basic basic basic object object) (-> ct param0))
- (-> ct param1)
- (-> ct param2)
- (-> ct param3)
+ (the-as basic (-> ct param1))
+ (the-as basic (-> ct param2))
+ (the-as basic (-> ct param3))
arg0
)
)
@@ -349,9 +349,9 @@
(let ((con (the-as connection (-> obj dead-list next0))))
(when (not (or (not proc) (= con (-> obj dead-list-end))))
(set! (-> con param0) (the-as basic func))
- (set! (-> con param1) (the-as basic p1))
- (set! (-> con param2) (the-as basic p2))
- (set! (-> con param3) (the-as basic p3))
+ (set! (-> con param1) (the-as int p1))
+ (set! (-> con param2) (the-as int p2))
+ (set! (-> con param3) (the-as int p3))
(set! (-> obj dead-list next0) (-> con next0))
(set! (-> con next0 prev0) (-> obj dead-list))
(set! (-> con next0) (-> obj alive-list next0))
diff --git a/test/decompiler/reference/engine/entity/relocate_REF.gc b/test/decompiler/reference/engine/entity/relocate_REF.gc
index 3f0b448486..5aa3f836e4 100644
--- a/test/decompiler/reference/engine/entity/relocate_REF.gc
+++ b/test/decompiler/reference/engine/entity/relocate_REF.gc
@@ -27,24 +27,18 @@
)
)
(let ((a0-19 (-> (the-as connection v1-7) param1)))
- (if (and (>= (the-as int a0-19) (-> *kernel-context* relocating-min))
- (< (the-as int a0-19) (-> *kernel-context* relocating-max))
- )
- (&+! (-> (the-as connection v1-7) param1) arg0)
+ (if (and (>= a0-19 (-> *kernel-context* relocating-min)) (< a0-19 (-> *kernel-context* relocating-max)))
+ (+! (-> (the-as connection v1-7) param1) arg0)
)
)
(let ((a0-24 (-> (the-as connection v1-7) param2)))
- (if (and (>= (the-as int a0-24) (-> *kernel-context* relocating-min))
- (< (the-as int a0-24) (-> *kernel-context* relocating-max))
- )
- (&+! (-> (the-as connection v1-7) param2) arg0)
+ (if (and (>= a0-24 (-> *kernel-context* relocating-min)) (< a0-24 (-> *kernel-context* relocating-max)))
+ (+! (-> (the-as connection v1-7) param2) arg0)
)
)
(let ((a0-29 (-> (the-as connection v1-7) param3)))
- (if (and (>= (the-as int a0-29) (-> *kernel-context* relocating-min))
- (< (the-as int a0-29) (-> *kernel-context* relocating-max))
- )
- (&+! (-> (the-as connection v1-7) param3) arg0)
+ (if (and (>= a0-29 (-> *kernel-context* relocating-min)) (< a0-29 (-> *kernel-context* relocating-max)))
+ (+! (-> (the-as connection v1-7) param3) arg0)
)
)
(set! v1-7 (-> (the-as connection v1-7) next1))
diff --git a/test/decompiler/reference/engine/game/generic-obs-h_REF.gc b/test/decompiler/reference/engine/game/generic-obs-h_REF.gc
index 09b6eba9c9..de579568ca 100644
--- a/test/decompiler/reference/engine/game/generic-obs-h_REF.gc
+++ b/test/decompiler/reference/engine/game/generic-obs-h_REF.gc
@@ -3,21 +3,21 @@
;; definition of type manipy
(deftype manipy (process-drawable)
- ((new-trans-hook (function none) :offset-assert 176)
- (cur-trans-hook (function none) :offset-assert 180)
- (cur-event-hook (function none) :offset-assert 184)
- (new-joint-anim art-joint-anim :offset-assert 188)
- (new-joint-anim-blend uint64 :offset-assert 192)
- (anim-mode symbol :offset-assert 200)
- (cur-grab-handle handle :offset-assert 208)
- (cur-target-handle handle :offset-assert 216)
- (old-grab-pos vector :inline :offset-assert 224)
- (joint process-drawable 4 :offset-assert 240)
- (new-post-hook (function none) :offset-assert 256)
- (cur-post-hook (function none) :offset-assert 260)
- (clone-copy-trans basic :offset-assert 264)
- (shadow-backup basic :offset-assert 268)
- (draw? symbol :offset-assert 272)
+ ((new-trans-hook (function none) :offset-assert 176)
+ (cur-trans-hook (function none) :offset-assert 180)
+ (cur-event-hook (function none) :offset-assert 184)
+ (new-joint-anim art-joint-anim :offset-assert 188)
+ (new-joint-anim-blend uint64 :offset-assert 192)
+ (anim-mode symbol :offset-assert 200)
+ (cur-grab-handle handle :offset-assert 208)
+ (cur-target-handle handle :offset-assert 216)
+ (old-grab-pos vector :inline :offset-assert 224)
+ (joint joint-mod 4 :offset-assert 240)
+ (new-post-hook (function none) :offset-assert 256)
+ (cur-post-hook (function none) :offset-assert 260)
+ (clone-copy-trans basic :offset-assert 264)
+ (shadow-backup basic :offset-assert 268)
+ (draw? symbol :offset-assert 272)
)
:heap-base #xb0
:method-count-assert 20
diff --git a/test/decompiler/reference/engine/game/settings_REF.gc b/test/decompiler/reference/engine/game/settings_REF.gc
index b4819fee1c..088b6d6bca 100644
--- a/test/decompiler/reference/engine/game/settings_REF.gc
+++ b/test/decompiler/reference/engine/game/settings_REF.gc
@@ -21,7 +21,7 @@
(set! (-> obj music) (the-as symbol (-> conn param1)))
)
(('process-mask)
- (case (-> conn param1)
+ (case (the-as object (-> conn param1))
(('set)
(logior! (-> obj process-mask) (the-as int (-> conn param3)))
)
@@ -175,7 +175,7 @@
(set! (-> obj ambient) (the-as (pointer progress) (-> conn param1)))
)
(('common-page)
- (case (-> conn param1)
+ (case (the-as object (-> conn param1))
(('set)
(logior! (-> obj common-page) (the-as int (-> conn param3)))
)
@@ -312,7 +312,9 @@
)
(set! (-> gp-0 music) (-> s5-1 music))
)
- (set! (-> s5-1 sound-flava) (the-as uint (flava-lookup (-> gp-0 music) (the-as int (-> s5-1 sound-flava)))))
+ (set! (-> s5-1 sound-flava)
+ (the-as uint (flava-lookup (-> gp-0 music) (the-as music-flava (-> s5-1 sound-flava))))
+ )
(set! (-> gp-0 sound-flava) (-> s5-1 sound-flava))
(if *sound-player-enable*
(sound-set-flava (-> gp-0 sound-flava))
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 393430a172..2a6be1295b 100644
--- a/test/decompiler/reference/engine/game/task/process-taskable_REF.gc
+++ b/test/decompiler/reference/engine/game/task/process-taskable_REF.gc
@@ -189,7 +189,7 @@
((< (vector-length s5-3) 102400.0)
(when (not (-> obj have-music))
(set! (-> obj have-music) #t)
- (set-setting! *setting-control* pp 'music (the-as symbol (-> obj music)) 0.0 0)
+ (set-setting! *setting-control* pp 'music (-> obj music) 0.0 0)
)
)
((-> obj have-music)
@@ -442,7 +442,7 @@
(deactivate a0-4)
)
)
- (set! (-> self last-talk) (the-as uint (-> *display* game-frame-counter)))
+ (set! (-> self last-talk) (-> *display* game-frame-counter))
(dummy-52 self)
(none)
)
@@ -515,13 +515,13 @@
(ja-play-spooled-anim
(the-as spool-anim arg1)
arg0
- (the-as art-joint-anim (-> self blend-on-exit))
+ (-> self blend-on-exit)
(lambda ((arg0 process-taskable)) (= (get-response (-> arg0 query)) 'no))
)
(ja-play-spooled-anim
(the-as spool-anim arg1)
arg0
- (the-as art-joint-anim (-> self blend-on-exit))
+ (-> self blend-on-exit)
(the-as (function process-drawable symbol) false-func)
)
)
@@ -1082,7 +1082,7 @@
((not *target*)
)
((not (-> self will-talk))
- (if (>= (- (-> *display* game-frame-counter) (the-as int (-> self last-talk))) 3000)
+ (if (>= (- (-> *display* game-frame-counter) (-> self last-talk)) 3000)
(set! (-> self will-talk) #t)
)
)
@@ -1132,7 +1132,7 @@
(set! (-> v1-59 scale) 0.9)
)
(set! (-> gp-1 flags) (font-flags shadow kerning left large))
- (print-game-text (lookup-text! *common-text* (the-as game-text-id (-> self talk-message)) #f) gp-1 #f 128 22)
+ (print-game-text (lookup-text! *common-text* (-> self talk-message) #f) gp-1 #f 128 22)
)
(when (and (cpad-pressed? 0 circle) (process-grab? *target*))
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons circle))
@@ -1225,8 +1225,8 @@
(set! (-> obj cell-for-task) (game-task none))
(set! (-> obj camera) (the-as handle #f))
(set! (-> obj will-talk) #t)
- (set! (-> obj talk-message) (the-as uint 260))
- (set! (-> obj last-talk) (the-as uint 0))
+ (set! (-> obj talk-message) (game-text-id press-to-talk))
+ (set! (-> obj last-talk) 0)
(set! (-> obj bounce-away) #t)
(set! (-> obj been-kicked) #f)
(set! (-> obj neck-joint-index) arg5)
diff --git a/test/decompiler/reference/engine/game/task/task-control-h_REF.gc b/test/decompiler/reference/engine/game/task/task-control-h_REF.gc
index d035d77de2..35f01e80a0 100644
--- a/test/decompiler/reference/engine/game/task/task-control-h_REF.gc
+++ b/test/decompiler/reference/engine/game/task/task-control-h_REF.gc
@@ -97,21 +97,21 @@
(cell-for-task game-task :offset-assert 256)
(cell-x handle :offset-assert 264)
(cam-joint-index int32 :offset-assert 272)
- (skippable basic :offset-assert 276)
- (blend-on-exit basic :offset-assert 280)
+ (skippable symbol :offset-assert 276)
+ (blend-on-exit art-joint-anim :offset-assert 280)
(camera handle :offset-assert 288)
(will-talk symbol :offset-assert 296)
- (talk-message uint32 :offset-assert 300)
- (last-talk uint64 :offset-assert 304)
+ (talk-message game-text-id :offset-assert 300)
+ (last-talk int64 :offset-assert 304)
(bounce-away symbol :offset-assert 312)
(ambient ambient-control :inline :offset-assert 320)
(center-joint-index int32 :offset-assert 336)
(draw-bounds-y-offset float :offset-assert 340)
(neck-joint-index int32 :offset-assert 344)
(fuel-cell-anim spool-anim :offset-assert 348)
- (sound-flava uint8 :offset-assert 352)
+ (sound-flava music-flava :offset-assert 352)
(have-flava symbol :offset-assert 356)
- (music basic :offset-assert 360)
+ (music symbol :offset-assert 360)
(have-music symbol :offset-assert 364)
(been-kicked symbol :offset-assert 368)
(cur-trans-hook (function none) :offset-assert 372)
diff --git a/test/decompiler/reference/engine/sound/gsound_REF.gc b/test/decompiler/reference/engine/sound/gsound_REF.gc
index 3433759ca7..e6236398b7 100644
--- a/test/decompiler/reference/engine/sound/gsound_REF.gc
+++ b/test/decompiler/reference/engine/sound/gsound_REF.gc
@@ -984,7 +984,7 @@
(set! (-> *flava-table* count) 0)
;; definition for function flava-lookup
-(defun flava-lookup ((arg0 symbol) (arg1 int))
+(defun flava-lookup ((arg0 symbol) (arg1 music-flava))
(dotimes (v1-0 (-> *flava-table* count))
(if (= (-> *flava-table* row v1-0 music) arg0)
(return (the-as int (-> *flava-table* row 0 flava (+ arg1 (* v1-0 64)))))
diff --git a/test/decompiler/reference/kernel/gcommon_REF.gc b/test/decompiler/reference/kernel/gcommon_REF.gc
index 9358f29246..6f66df0582 100644
--- a/test/decompiler/reference/kernel/gcommon_REF.gc
+++ b/test/decompiler/reference/kernel/gcommon_REF.gc
@@ -407,7 +407,7 @@
)
;; definition for function sort
-(defun sort ((lst object) (compare-func (function object object object)))
+(defun sort ((lst pair) (compare-func (function object object object)))
(let ((unsorted-count -1))
(while (nonzero? unsorted-count)
(set! unsorted-count 0)
diff --git a/test/decompiler/reference/levels/beach/bird-lady-beach_REF.gc b/test/decompiler/reference/levels/beach/bird-lady-beach_REF.gc
index f45e67538b..d6fc166c84 100644
--- a/test/decompiler/reference/levels/beach/bird-lady-beach_REF.gc
+++ b/test/decompiler/reference/levels/beach/bird-lady-beach_REF.gc
@@ -128,7 +128,7 @@
(defmethod init-from-entity! bird-lady-beach ((obj bird-lady-beach) (arg0 entity-actor))
(dummy-40 obj arg0 *bird-lady-beach-sg* 3 51 (new 'static 'vector :y 4096.0 :w 4096.0) 5)
(set! (-> obj tasks) (get-task-control (game-task beach-flutflut)))
- (set! (-> obj sound-flava) (the-as uint 7))
+ (set! (-> obj sound-flava) (music-flava birdlady))
(dummy-42 obj)
(none)
)
diff --git a/test/decompiler/reference/levels/beach/bird-lady_REF.gc b/test/decompiler/reference/levels/beach/bird-lady_REF.gc
index c5de87acca..43c3365b06 100644
--- a/test/decompiler/reference/levels/beach/bird-lady_REF.gc
+++ b/test/decompiler/reference/levels/beach/bird-lady_REF.gc
@@ -173,7 +173,7 @@
(defmethod init-from-entity! bird-lady ((obj bird-lady) (arg0 entity-actor))
(dummy-40 obj arg0 *bird-lady-sg* 3 51 (new 'static 'vector :y 4096.0 :w 4096.0) 5)
(set! (-> obj tasks) (get-task-control (game-task beach-flutflut)))
- (set! (-> obj sound-flava) (the-as uint 7))
+ (set! (-> obj sound-flava) (music-flava birdlady))
(set! (-> obj draw light-index) (the-as uint 4))
(if (closed? (-> obj tasks) (game-task beach-flutflut) (task-status need-reminder))
(dummy-18 obj)
diff --git a/test/decompiler/reference/levels/beach/mayor_REF.gc b/test/decompiler/reference/levels/beach/mayor_REF.gc
index 095da5b591..bff2f04832 100644
--- a/test/decompiler/reference/levels/beach/mayor_REF.gc
+++ b/test/decompiler/reference/levels/beach/mayor_REF.gc
@@ -79,7 +79,7 @@
;; definition for method 32 of type mayor
(defmethod play-anim! mayor ((obj mayor) (arg0 symbol))
- (set! (-> obj talk-message) (the-as uint 260))
+ (set! (-> obj talk-message) (game-text-id press-to-talk))
(case (current-status (-> obj tasks))
(((task-status need-hint) (task-status need-introduction))
(when arg0
@@ -543,7 +543,7 @@
(send-event *target* 'get-pickup 5 (- (-> *GAME-bank* money-task-inc)))
)
(else
- (set! (-> obj talk-message) (the-as uint 282))
+ (set! (-> obj talk-message) (game-text-id press-to-trade-money))
)
)
(new 'static 'spool-anim
@@ -738,7 +738,7 @@
(dummy-40 obj arg0 *mayor-sg* 3 51 (new 'static 'vector :y 4096.0 :w 4096.0) 5)
(set! (-> obj bounce-away) #f)
(set! (-> obj tasks) (get-task-control (game-task jungle-lurkerm)))
- (set! (-> obj sound-flava) (the-as uint 8))
+ (set! (-> obj sound-flava) (music-flava mayor))
(set! (-> obj draw light-index) (the-as uint 2))
(dummy-42 obj)
(none)
diff --git a/test/decompiler/reference/levels/beach/sculptor_REF.gc b/test/decompiler/reference/levels/beach/sculptor_REF.gc
index 218df6b0dd..450857cff2 100644
--- a/test/decompiler/reference/levels/beach/sculptor_REF.gc
+++ b/test/decompiler/reference/levels/beach/sculptor_REF.gc
@@ -602,7 +602,7 @@
(dummy-40 obj arg0 *sculptor-sg* 3 40 (new 'static 'vector :w 4096.0) 5)
(set! (-> obj tasks) (get-task-control (game-task misty-muse)))
(set! (-> obj muse) (the-as handle #f))
- (set! (-> obj sound-flava) (the-as uint 9))
+ (set! (-> obj sound-flava) (music-flava sculptor))
(set! (-> obj draw light-index) (the-as uint 3))
(dummy-42 obj)
(none)
diff --git a/test/decompiler/reference/levels/citadel/citadel-sages_REF.gc b/test/decompiler/reference/levels/citadel/citadel-sages_REF.gc
index e2c6dc9018..1a71026ede 100644
--- a/test/decompiler/reference/levels/citadel/citadel-sages_REF.gc
+++ b/test/decompiler/reference/levels/citadel/citadel-sages_REF.gc
@@ -51,19 +51,19 @@
(let ((gp-0 (-> self node-list data 3 bone transform))
(s5-0 (new 'stack-no-clear 'vector))
)
- (let ((s4-0 (new 'stack-no-clear 'vector)))
+ (let ((s4-0 (new 'stack-no-clear 'quaternion)))
(let ((s3-0 (new 'stack-no-clear 'vector)))
- (matrix->quaternion (the-as quaternion s4-0) gp-0)
+ (matrix->quaternion s4-0 gp-0)
(vector-! s3-0 (camera-pos) (-> self root-override trans))
(let ((v1-7 (-> gp-0 vector 2)))
(set! (-> self angle-offset) (- (atan (-> v1-7 x) (-> v1-7 z))))
)
- (quaternion-rotate-local-x! (the-as quaternion s4-0) (the-as quaternion s4-0) 16384.0)
+ (quaternion-rotate-local-x! s4-0 s4-0 16384.0)
(let ((f0-7 (+ (-> self angle-offset) (atan (-> s3-0 x) (-> s3-0 z)))))
- (quaternion-rotate-local-z! (the-as quaternion s4-0) (the-as quaternion s4-0) f0-7)
+ (quaternion-rotate-local-z! s4-0 s4-0 f0-7)
)
)
- (quaternion-copy! *particle-quat* (the-as quaternion s4-0))
+ (quaternion-copy! *particle-quat* s4-0)
)
(let ((s4-1 (-> *part-id-table* 2473))
(s3-1 *sp-particle-system-3d*)
@@ -688,7 +688,7 @@
(dummy-40 obj arg0 *redsage-sg* 3 33 (new 'static 'vector :w 8192.0) 5)
(set! (-> obj tasks) (get-task-control (-> obj entity extra perm task)))
(play-reminder obj)
- (set! (-> obj sound-flava) (the-as uint 12))
+ (set! (-> obj sound-flava) (music-flava sage-red))
(dummy-42 obj)
(none)
)
@@ -824,7 +824,7 @@
(dummy-40 obj arg0 *bluesage-sg* 3 54 (new 'static 'vector :w 8192.0) 5)
(set! (-> obj tasks) (get-task-control (-> obj entity extra perm task)))
(play-reminder obj)
- (set! (-> obj sound-flava) (the-as uint 13))
+ (set! (-> obj sound-flava) (music-flava sage-blue))
(dummy-42 obj)
(none)
)
@@ -955,7 +955,7 @@
(dummy-40 obj arg0 *yellowsage-sg* 3 50 (new 'static 'vector :w 8192.0) 5)
(set! (-> obj tasks) (get-task-control (-> obj entity extra perm task)))
(play-reminder obj)
- (set! (-> obj sound-flava) (the-as uint 11))
+ (set! (-> obj sound-flava) (music-flava sage-yellow))
(dummy-42 obj)
(none)
)
@@ -1232,7 +1232,7 @@
(when s5-1
(format 0 "robotboss activated ent ~A~%" gp-0)
(let ((f0-0 327680.0))
- (set! (-> (the-as robotboss s5-1) draw bounds w) f0-0)
+ (set! (-> (the-as process-drawable s5-1) draw bounds w) f0-0)
f0-0
)
)
@@ -1371,7 +1371,7 @@
0
)
)
- (set! (-> obj sound-flava) (the-as uint 5))
+ (set! (-> obj sound-flava) (music-flava sage))
(dummy-42 obj)
(none)
)
diff --git a/test/decompiler/reference/levels/citadel/citb-bunny_REF.gc b/test/decompiler/reference/levels/citadel/citb-bunny_REF.gc
index 5cf3c65a91..fc4e3cfde2 100644
--- a/test/decompiler/reference/levels/citadel/citb-bunny_REF.gc
+++ b/test/decompiler/reference/levels/citadel/citb-bunny_REF.gc
@@ -84,17 +84,18 @@
)
;; definition for method 60 of type citb-bunny
-;; INFO: Return type mismatch int vs symbol.
-(defmethod dummy-60 citb-bunny ((obj citb-bunny) (arg0 object))
+;; INFO: Return type mismatch int vs none.
+(defmethod dummy-60 citb-bunny ((obj citb-bunny))
(initialize-skeleton obj *citb-bunny-sg* '())
(set! (-> obj draw origin-joint-index) (the-as uint 3))
- (the-as symbol 0)
+ 0
+ (none)
)
;; definition for method 48 of type citb-bunny
;; INFO: Return type mismatch int vs none.
(defmethod TODO-RENAME-48 citb-bunny ((obj citb-bunny) (arg0 object))
- (dummy-60 obj arg0)
+ (dummy-60 obj)
(TODO-RENAME-45 obj *citb-bunny-nav-enemy-info*)
(set! (-> obj draw shadow-ctrl settings flags) (logand -9 (-> obj draw shadow-ctrl settings flags)))
(cond
@@ -107,7 +108,7 @@
(set! (-> obj retreat-timeout) 0.1)
)
)
- (set! (-> obj last-nondangerous-time) (the-as uint (-> *display* base-frame-counter)))
+ (set! (-> obj last-nondangerous-time) (-> *display* base-frame-counter))
(set! (-> obj gnd-popup) 16384.0)
(set! (-> obj got-jump-event?) #f)
(set! (-> obj notice-land-anim) 8)
@@ -123,33 +124,26 @@
)
;; definition for method 56 of type citb-bunny
+;; INFO: Return type mismatch float vs none.
(defmethod set-jump-height-factor! citb-bunny ((obj citb-bunny) (arg0 int))
(let ((v1-0 arg0))
(cond
((zero? v1-0)
(set! (-> obj jump-anim) 6)
(set! (-> obj jump-height-min) 4096.0)
- (let ((f0-1 0.6))
- (set! (-> obj jump-height-factor) f0-1)
- f0-1
- )
+ (set! (-> obj jump-height-factor) 0.6)
)
((= v1-0 1)
(set! (-> obj jump-anim) 5)
(set! (-> obj jump-height-min) 4096.0)
- (let ((f0-3 0.6))
- (set! (-> obj jump-height-factor) f0-3)
- f0-3
- )
+ (set! (-> obj jump-height-factor) 0.6)
)
((= v1-0 2)
(set! (-> obj jump-anim) 5)
(set! (-> obj jump-height-min) 4096.0)
- (let ((f0-5 0.4))
- (set! (-> obj jump-height-factor) f0-5)
- f0-5
- )
+ (set! (-> obj jump-height-factor) 0.4)
)
)
)
+ (none)
)
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 1dcd2e3057..136e428bbe 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
@@ -479,27 +479,22 @@
(set! sv-64 (the int (* 150.0 (rand-vu))))
(set! sv-48 (get-process *default-dead-pool* drop-plat #x4000))
(set! (-> self child-array data s1-0)
- (ppointer->handle (when sv-48
- (let ((t9-6 (method-of-type drop-plat activate)))
- (t9-6 (the-as drop-plat sv-48) self 'drop-plat (the-as pointer #x70004000))
- )
- (let ((t9-7 run-function-in-process)
- (a0-8 sv-48)
- (a1-5 drop-plat-init-by-other)
- (a2-4 gp-0)
- (t0-0 (-> self duration))
- )
- ((the-as (function process function vector uint uint int) t9-7)
- a0-8
- a1-5
- a2-4
- (the-as uint sv-64)
- (the-as uint t0-0)
- )
- )
- (-> sv-48 ppointer)
- )
- )
+ (ppointer->handle
+ (when sv-48
+ (let ((t9-6 (method-of-type drop-plat activate)))
+ (t9-6 (the-as drop-plat sv-48) self 'drop-plat (the-as pointer #x70004000))
+ )
+ (let ((t9-7 run-function-in-process)
+ (a0-8 sv-48)
+ (a1-5 drop-plat-init-by-other)
+ (a2-4 gp-0)
+ (t0-0 (-> self duration))
+ )
+ ((the-as (function process function vector int int int none) t9-7) a0-8 a1-5 a2-4 sv-64 t0-0 s0-0)
+ )
+ (-> sv-48 ppointer)
+ )
+ )
)
)
)
diff --git a/test/decompiler/reference/levels/common/babak-with-cannon_REF.gc b/test/decompiler/reference/levels/common/babak-with-cannon_REF.gc
deleted file mode 100644
index 902ccd3565..0000000000
--- a/test/decompiler/reference/levels/common/babak-with-cannon_REF.gc
+++ /dev/null
@@ -1,528 +0,0 @@
-;;-*-Lisp-*-
-(in-package goal)
-
-;; definition of type babak-with-cannon
-(deftype babak-with-cannon (babak)
- ((cannon-ent entity :offset-assert 400)
- (distance float :offset-assert 404)
- )
- :heap-base #x130
- :method-count-assert 76
- :size-assert #x198
- :flag-assert #x4c01300198
- (:states
- babak-with-cannon-jump-off-cannon
- babak-with-cannon-jump-onto-cannon
- babak-with-cannon-shooting
- )
- )
-
-;; definition for method 3 of type babak-with-cannon
-(defmethod inspect babak-with-cannon ((obj babak-with-cannon))
- (let ((t9-0 (method-of-type babak inspect)))
- (t9-0 obj)
- )
- (format #t "~T~Tcannon-ent: ~A~%" (-> obj cannon-ent))
- (format #t "~T~Tdistance: ~f~%" (-> obj distance))
- obj
- )
-
-;; failed to figure out what this is:
-nav-enemy-default-event-handler
-
-;; failed to figure out what this is:
-(defstate nav-enemy-idle (babak-with-cannon)
- :virtual #t
- :event
- (the-as
- (function process int symbol event-message-block object :behavior babak-with-cannon)
- nav-enemy-default-event-handler
- )
- :trans
- (behavior ()
- (if (and (and *target* (>= (-> self enemy-info idle-distance)
- (vector-vector-distance (-> self collide-info trans) (-> *target* control trans))
- )
- )
- (>= (- (-> *display* base-frame-counter) (-> self state-time)) (-> self state-timeout))
- )
- (go-virtual nav-enemy-patrol)
- )
- (none)
- )
- :code
- (behavior ()
- (ja-channel-push! 1 22)
- (let ((a0-1 (-> self skel root-channel 0)))
- (set! (-> a0-1 frame-group)
- (the-as art-joint-anim (-> self draw art-group data (-> self nav-info idle-anim)))
- )
- (set! (-> a0-1 param 0)
- (the float
- (+ (-> (the-as art-joint-anim (-> self draw art-group data (-> self nav-info idle-anim))) data 0 length) -1)
- )
- )
- (set! (-> a0-1 param 1) 1.0)
- (set! (-> a0-1 frame-num) 0.0)
- (joint-control-channel-group!
- a0-1
- (the-as art-joint-anim (-> self draw art-group data (-> self nav-info idle-anim)))
- num-func-seek!
- )
- )
- (until (ja-done? 0)
- (ja-post)
- (suspend)
- (let ((a0-2 (-> self skel root-channel 0)))
- (set! (-> a0-2 param 0) (the float (+ (-> a0-2 frame-group data 0 length) -1)))
- (set! (-> a0-2 param 1) 1.0)
- (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-seek!)
- )
- )
- (anim-loop)
- (none)
- )
- :post
- (the-as (function none :behavior babak-with-cannon) #f)
- )
-
-;; failed to figure out what this is:
-(defstate nav-enemy-patrol (babak-with-cannon)
- :virtual #t
- :event
- (the-as
- (function process int symbol event-message-block object :behavior babak-with-cannon)
- nav-enemy-default-event-handler
- )
- :trans
- (behavior ()
- (when (>= (- (-> *display* base-frame-counter) (-> self state-time)) 30)
- (let ((f30-0 (- (-> (target-pos 0) y) (-> self collide-info trans y))))
- (if (and (>= (- (-> *display* base-frame-counter) (-> self state-time)) 900)
- (or (or (not *target*)
- (< (-> self distance) (vector-vector-distance (-> self collide-info trans) (-> *target* control trans)))
- )
- (< f30-0 -40960.0)
- )
- )
- (go babak-run-to-cannon)
- )
- )
- (when (>= (- (-> *display* base-frame-counter) (-> self state-time)) (-> self state-timeout))
- (if (or (not *target*) (< (-> self enemy-info idle-distance)
- (vector-vector-distance (-> self collide-info trans) (-> *target* control trans))
- )
- )
- (go-virtual nav-enemy-idle)
- )
- )
- (if (nav-enemy-notice-player?)
- (go-virtual nav-enemy-notice)
- )
- )
- (none)
- )
- :code
- (-> (method-of-type babak nav-enemy-patrol) code)
- )
-
-;; failed to figure out what this is:
-(defstate babak-run-to-cannon (babak)
- :event
- (the-as
- (function process int symbol event-message-block object :behavior babak)
- nav-enemy-default-event-handler
- )
- :enter
- (behavior ()
- (set! (-> self state-time) (-> *display* base-frame-counter))
- (set! (-> self nav destination-pos quad) (-> self entity extra trans quad))
- (set! (-> self nav target-pos quad) (-> self entity extra trans quad))
- (none)
- )
- :trans
- (behavior ()
- (if (nav-enemy-notice-player?)
- (go-virtual nav-enemy-chase)
- )
- (if (logtest? (nav-control-flags bit19) (-> self nav flags))
- (go babak-with-cannon-jump-onto-cannon)
- )
- (none)
- )
- :code
- (behavior ()
- (ja-channel-push! 1 22)
- (while #t
- (let ((a0-1 (-> self skel root-channel 0)))
- (set! (-> a0-1 frame-group) (the-as art-joint-anim (-> self draw art-group data 8)))
- (set! (-> a0-1 param 0)
- (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 8)) data 0 length) -1))
- )
- (set! (-> a0-1 param 1) 1.0)
- (set! (-> a0-1 frame-num) 0.0)
- (joint-control-channel-group! a0-1 (the-as art-joint-anim (-> self draw art-group data 8)) num-func-seek!)
- )
- (until (ja-done? 0)
- (suspend)
- (let ((a0-2 (-> self skel root-channel 0)))
- (set! (-> a0-2 param 0) (the float (+ (-> a0-2 frame-group data 0 length) -1)))
- (set! (-> a0-2 param 1) 1.0)
- (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-seek!)
- )
- )
- )
- (none)
- )
- :post
- (behavior ()
- (nav-enemy-travel-post)
- (none)
- )
- )
-
-;; definition for function handle->process-safe
-(defun handle->process-safe ((arg0 handle))
- (let ((v0-0 (the-as process #f)))
- (if (handle->process arg0)
- (set! v0-0 (-> arg0 process 0))
- )
- v0-0
- )
- )
-
-;; definition for function babak-with-cannon-compute-cannon-dir
-;; Used lq/sq
-(defun babak-with-cannon-compute-cannon-dir ((arg0 mistycannon) (arg1 vector))
- (set! (-> arg1 quad) (-> arg0 node-list data 3 bone transform vector 2 quad))
- arg1
- )
-
-;; definition for function babak-with-cannon-compute-ride-point
-;; Used lq/sq
-(defun babak-with-cannon-compute-ride-point ((arg0 mistycannon) (arg1 vector))
- (set! (-> arg1 quad) (-> arg0 root-override trans quad))
- (let ((a1-4 (new 'static 'vector :y 18149.377 :z -17289.217 :w 1.0))
- (a2-0 (-> arg0 node-list data 3 bone transform))
- )
- (vector-matrix*! arg1 a1-4 a2-0)
- )
- arg1
- )
-
-;; definition for function babak-with-cannon-ride-cannon-post
-(defbehavior babak-with-cannon-ride-cannon-post babak-with-cannon ()
- (let* ((v1-0 (-> self cannon-ent))
- (s5-0 (if v1-0
- (-> v1-0 extra process)
- )
- )
- (gp-0 (if (and (nonzero? s5-0) (type-type? (-> s5-0 type) process-drawable))
- s5-0
- )
- )
- )
- (when gp-0
- (let ((s5-1 (new 'stack-no-clear 'vector)))
- (babak-with-cannon-compute-cannon-dir (the-as mistycannon gp-0) s5-1)
- (forward-up->quaternion (-> self collide-info quat) s5-1 *y-vector*)
- )
- (babak-with-cannon-compute-ride-point (the-as mistycannon gp-0) (-> self collide-info trans))
- )
- )
- (nav-enemy-simple-post)
- (none)
- )
-
-;; failed to figure out what this is:
-(defstate babak-with-cannon-jump-onto-cannon (babak-with-cannon)
- :event
- (the-as
- (function process int symbol event-message-block object :behavior babak-with-cannon)
- nav-enemy-jump-event-handler
- )
- :exit
- (behavior ()
- (logior! (-> self nav-enemy-flags) 24)
- (none)
- )
- :code
- (behavior ()
- (set! (-> self state-time) (-> *display* base-frame-counter))
- (set! (-> self rotate-speed) (-> self nav-info run-rotate-speed))
- (set! (-> self turn-time) (the-as int (-> self nav-info run-turn-time)))
- (set! (-> self nav-enemy-flags) (logand -25 (-> self nav-enemy-flags)))
- (nav-enemy-neck-control-inactive)
- (let* ((v1-7 (-> self cannon-ent))
- (gp-0 (if v1-7
- (-> v1-7 extra process)
- )
- )
- (a0-2 (if (and (nonzero? gp-0) (type-type? (-> gp-0 type) process-drawable))
- gp-0
- )
- )
- )
- (cond
- (a0-2
- (babak-with-cannon-compute-ride-point (the-as mistycannon a0-2) (-> self event-param-point))
- (nav-enemy-initialize-jump (-> self event-param-point))
- )
- (else
- (go-virtual nav-enemy-idle)
- )
- )
- )
- (when (not (nav-enemy-facing-point? (-> self jump-dest) 5461.3335))
- (ja-channel-push! 1 60)
- (nav-enemy-turn-to-face-point (-> self jump-dest) 1820.4445)
- )
- (logior! (-> self nav-enemy-flags) 16)
- (nav-enemy-execute-jump)
- (set! (-> self nav-enemy-flags) (logand -25 (-> self nav-enemy-flags)))
- (let* ((v1-20 (-> self cannon-ent))
- (gp-1 (if v1-20
- (-> v1-20 extra process)
- )
- )
- (a0-9 (if (and (nonzero? gp-1) (type-type? (-> gp-1 type) process-drawable))
- gp-1
- )
- )
- )
- (when a0-9
- (let ((gp-2 (babak-with-cannon-compute-cannon-dir (the-as mistycannon a0-9) (new 'stack-no-clear 'vector))))
- (when (not (nav-enemy-facing-direction? gp-2 1820.4445))
- (ja-channel-push! 1 60)
- (nav-enemy-turn-to-face-dir gp-2 182.04445)
- (forward-up->quaternion (-> self collide-info quat) gp-2 *y-vector*)
- )
- )
- )
- )
- (ja-channel-push! 1 30)
- (let ((a0-15 (-> self skel root-channel 0)))
- (set! (-> a0-15 frame-group) (the-as art-joint-anim (-> self draw art-group data 17)))
- (set! (-> a0-15 param 0)
- (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 17)) data 0 length) -1))
- )
- (set! (-> a0-15 param 1) 1.0)
- (set! (-> a0-15 frame-num) 0.0)
- (joint-control-channel-group! a0-15 (the-as art-joint-anim (-> self draw art-group data 17)) num-func-seek!)
- )
- (until (ja-done? 0)
- (suspend)
- (let ((a0-16 (-> self skel root-channel 0)))
- (set! (-> a0-16 param 0) (the float (+ (-> a0-16 frame-group data 0 length) -1)))
- (set! (-> a0-16 param 1) 1.0)
- (joint-control-channel-group-eval! a0-16 (the-as art-joint-anim #f) num-func-seek!)
- )
- )
- (go babak-with-cannon-shooting)
- (none)
- )
- :post
- (the-as (function none :behavior babak-with-cannon) nav-enemy-jump-post)
- )
-
-;; failed to figure out what this is:
-(defstate babak-with-cannon-jump-off-cannon (babak-with-cannon)
- :event
- (the-as
- (function process int symbol event-message-block object :behavior babak-with-cannon)
- nav-enemy-jump-event-handler
- )
- :exit
- (behavior ()
- (logior! (-> self nav-enemy-flags) 24)
- (none)
- )
- :code
- (behavior ()
- (set! (-> self state-time) (-> *display* base-frame-counter))
- (nav-enemy-initialize-jump (-> self entity extra trans))
- (nav-enemy-neck-control-look-at)
- (set! (-> self nav-enemy-flags) (logand -25 (-> self nav-enemy-flags)))
- (let ((a0-2 (-> self skel root-channel 0)))
- (set! (-> a0-2 frame-group) (the-as art-joint-anim (-> self draw art-group data 17)))
- (set! (-> a0-2 param 0) 0.0)
- (set! (-> a0-2 param 1) 2.0)
- (set! (-> a0-2 frame-num)
- (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 17)) data 0 length) -1))
- )
- (joint-control-channel-group! a0-2 (the-as art-joint-anim (-> self draw art-group data 17)) num-func-seek!)
- )
- (until (ja-done? 0)
- (suspend)
- (let ((a0-3 (-> self skel root-channel 0)))
- (set! (-> a0-3 param 0) 0.0)
- (set! (-> a0-3 param 1) 2.0)
- (joint-control-channel-group-eval! a0-3 (the-as art-joint-anim #f) num-func-seek!)
- )
- )
- (when (not (nav-enemy-facing-point? (-> self jump-dest) 5461.3335))
- (ja-channel-push! 1 60)
- (nav-enemy-turn-to-face-point (-> self jump-dest) 1820.4445)
- )
- (logior! (-> self nav-enemy-flags) 16)
- (nav-enemy-execute-jump)
- (let ((a1-6 (dummy-16 (-> self nav) (-> self jump-dest))))
- (set-current-poly! (-> self nav) a1-6)
- )
- (go-virtual nav-enemy-jump-land)
- (none)
- )
- :post
- (the-as (function none :behavior babak-with-cannon) nav-enemy-jump-post)
- )
-
-;; failed to figure out what this is:
-(defstate babak-with-cannon-shooting (babak-with-cannon)
- :event
- (the-as
- (function process int symbol event-message-block object :behavior babak-with-cannon)
- nav-enemy-default-event-handler
- )
- :enter
- (behavior ()
- (set! (-> self state-time) (-> *display* base-frame-counter))
- (let ((v1-2 (entity-actor-lookup (-> self entity) 'alt-actor 0)))
- (if v1-2
- (logior! (-> v1-2 extra perm status) (entity-perm-status complete))
- )
- )
- (none)
- )
- :exit
- (behavior ()
- (let ((v1-0 (entity-actor-lookup (-> self entity) 'alt-actor 0)))
- (if v1-0
- (logclear! (-> v1-0 extra perm status) (entity-perm-status complete))
- )
- )
- (none)
- )
- :trans
- (behavior ()
- (let ((f0-1 (- (-> (target-pos 0) y) (-> self collide-info trans y))))
- (if (and (< -40960.0 f0-1)
- (and (and *target*
- (>= (-> self distance) (vector-vector-distance (-> self collide-info trans) (-> *target* control trans)))
- )
- (>= (- (-> *display* base-frame-counter) (-> self state-time)) 900)
- )
- )
- (go babak-with-cannon-jump-off-cannon)
- )
- )
- (none)
- )
- :code
- (behavior ()
- (while #t
- (suspend)
- )
- (none)
- )
- :post
- babak-with-cannon-ride-cannon-post
- )
-
-;; failed to figure out what this is:
-(defstate nav-enemy-die (babak-with-cannon)
- :virtual #t
- :event
- (the-as
- (function process int symbol event-message-block object :behavior babak-with-cannon)
- nav-enemy-default-event-handler
- )
- :trans
- (behavior ()
- (if (and *target* (= (-> *target* current-level name) 'beach))
- (spool-push *art-control* "beachcam-cannon" 0 self -1.0)
- )
- (if (and *target* (= (-> *target* current-level name) 'misty))
- (spool-push *art-control* "mistycam-cannon" 0 self -1.0)
- )
- (let ((t9-3 (-> (the-as (state nav-enemy) (find-parent-method babak-with-cannon 23)) trans)))
- (if t9-3
- (t9-3)
- )
- )
- (none)
- )
- )
-
-;; failed to figure out what this is:
-(defstate nav-enemy-fuel-cell (babak-with-cannon)
- :virtual #t
- :event
- (the-as
- (function process int symbol event-message-block object :behavior babak-with-cannon)
- process-drawable-fuel-cell-handler
- )
- :code
- (behavior ()
- (ja-channel-set! 0)
- (clear-collide-with-as (-> self collide-info))
- (ja-post)
- (when (not (task-complete? *game-info* (-> self entity extra perm task)))
- (when (not (and (-> self entity) (logtest? (-> self entity extra perm status) (entity-perm-status complete))))
- (process-entity-status! self (entity-perm-status complete) #t)
- (if (and *target* (= (-> *target* current-level name) 'beach))
- (beachcam-spawn)
- )
- (if (and *target* (= (-> *target* current-level name) 'misty))
- (mistycam-spawn)
- )
- )
- (if (not (-> self child))
- (birth-pickup-at-point
- (-> self collide-info trans)
- (pickup-type fuel-cell)
- (the float (-> self entity extra perm task))
- #f
- self
- (the-as fact-info #f)
- )
- )
- (while (-> self child)
- (suspend)
- )
- )
- (dummy-18 self)
- (none)
- )
- )
-
-;; definition for method 39 of type babak-with-cannon
-(defmethod common-post babak-with-cannon ((obj babak-with-cannon))
- (cond
- ((= (level-status *level* 'beach) 'active)
- (spool-push *art-control* "beachcam-cannon" 0 obj -99.0)
- )
- ((= (level-status *level* 'misty) 'active)
- (spool-push *art-control* "mistycam-cannon" 0 obj -99.0)
- )
- )
- ((method-of-type nav-enemy common-post) obj)
- (none)
- )
-
-;; definition for method 11 of type babak-with-cannon
-;; INFO: Return type mismatch object vs none.
-(defmethod init-from-entity! babak-with-cannon ((obj babak-with-cannon) (arg0 entity-actor))
- (initialize-collision obj)
- (process-drawable-from-entity! obj arg0)
- (TODO-RENAME-48 obj)
- (set! (-> obj distance) (res-lump-float arg0 'distance :default 163840.0))
- (set! (-> obj cannon-ent) (entity-actor-lookup (-> obj entity) 'alt-actor 0))
- (logclear! (-> obj mask) (process-mask actor-pause))
- (if (or (not (and (-> obj entity) (logtest? (-> obj entity extra perm status) (entity-perm-status complete))))
- (zero? (logand (-> obj enemy-info options) (fact-options fop1)))
- )
- (go (method-of-object obj nav-enemy-idle))
- )
- (go (method-of-object obj nav-enemy-fuel-cell))
- (none)
- )
diff --git a/test/decompiler/reference/levels/common/mistycannon_REF.gc b/test/decompiler/reference/levels/common/mistycannon_REF.gc
deleted file mode 100644
index 4f6fbd7de0..0000000000
--- a/test/decompiler/reference/levels/common/mistycannon_REF.gc
+++ /dev/null
@@ -1,2129 +0,0 @@
-;;-*-Lisp-*-
-(in-package goal)
-
-;; definition of type angle-tracker
-(deftype angle-tracker (structure)
- ((value float :offset-assert 0)
- (min float :offset-assert 4)
- (range float :offset-assert 8)
- (speed float :offset-assert 12)
- )
- :method-count-assert 9
- :size-assert #x10
- :flag-assert #x900000010
- )
-
-;; definition for method 3 of type angle-tracker
-(defmethod inspect angle-tracker ((obj angle-tracker))
- (format #t "[~8x] ~A~%" obj 'angle-tracker)
- (format #t "~Tvalue: ~f~%" (-> obj value))
- (format #t "~Tmin: ~f~%" (-> obj min))
- (format #t "~Trange: ~f~%" (-> obj range))
- (format #t "~Tspeed: ~f~%" (-> obj speed))
- obj
- )
-
-;; definition for function angle-tracker-apply-move!
-(defun angle-tracker-apply-move! ((arg0 angle-tracker) (arg1 float))
- (let* ((f0-2 (* arg1 (-> arg0 speed) (-> *display* seconds-per-frame)))
- (f0-3 (+ (-> arg0 value) f0-2))
- )
- (when (!= (-> arg0 range) 0.0)
- (if (< f0-3 0.0)
- (set! f0-3 0.0)
- )
- (if (< (-> arg0 range) f0-3)
- (set! f0-3 (-> arg0 range))
- )
- )
- (let ((f1-7 (- (-> arg0 value) f0-3)))
- (if (= (-> arg0 range) 0.0)
- (set! f0-3 (the float (sar (shl (the int f0-3) 48) 48)))
- )
- (set! (-> arg0 value) f0-3)
- f1-7
- )
- )
- )
-
-;; definition for function angle-tracker-init-range!
-;; INFO: Return type mismatch int vs none.
-(defun angle-tracker-init-range! ((arg0 angle-tracker) (arg1 float) (arg2 float) (arg3 float))
- (set! (-> arg0 min) arg1)
- (set! (-> arg0 range) (the float (sar (shl (the int (- arg2 arg1)) 48) 48)))
- (if (< (-> arg0 range) 0.0)
- (set! (-> arg0 range) (+ 65536.0 (-> arg0 range)))
- )
- (set! (-> arg0 value) (* 0.5 (-> arg0 range)))
- (set! (-> arg0 speed) arg3)
- 0
- (none)
- )
-
-;; definition for function angle-tracker-get-value
-(defun angle-tracker-get-value ((arg0 angle-tracker))
- (the float (sar (shl (the int (+ (-> arg0 min) (-> arg0 value))) 48) 48))
- )
-
-;; definition for function angle-tracker-set-value
-(defun angle-tracker-set-value ((arg0 angle-tracker) (arg1 float))
- (let ((v1-0 (- arg1 (-> arg0 min))))
- (when (!= (-> arg0 range) 0.0)
- (if (< v1-0 0.0)
- (set! v1-0 0.0)
- )
- (if (< (-> arg0 range) v1-0)
- (set! v1-0 (-> arg0 range))
- )
- )
- (set! (-> arg0 value) v1-0)
- (+ (-> arg0 min) v1-0)
- )
- )
-
-;; definition for function angle-tracker-seek!
-(defun angle-tracker-seek! ((arg0 angle-tracker) (arg1 float))
- (let* ((v1-0 arg0)
- (f1-1 (the float (sar (shl (the int (+ (-> v1-0 min) (-> v1-0 value))) 48) 48)))
- (f0-6 (* (-> arg0 speed) (-> *display* seconds-per-frame)))
- (v1-9 (the float (sar (shl (the int (- arg1 f1-1)) 48) 48)))
- )
- (when (< (fabs v1-9) f0-6)
- (let ((f0-8 (+ (-> arg0 value) v1-9)))
- (cond
- ((= (-> arg0 range) 0.0)
- (set! (-> arg0 value) (the float (sar (shl (the int f0-8) 48) 48)))
- (return #t)
- )
- (else
- (when (< f0-8 0.0)
- (set! (-> arg0 value) 0.0)
- (return #f)
- )
- (when (< (-> arg0 range) f0-8)
- (set! (-> arg0 value) (-> arg0 range))
- (return #f)
- )
- (set! (-> arg0 value) f0-8)
- (return #t)
- )
- )
- )
- (set! v1-9 (the-as float 0))
- )
- (cond
- ((< v1-9 0.0)
- (let ((f0-14 (- (-> arg0 value) f0-6)))
- (set! f0-14 (cond
- ((= (-> arg0 range) 0.0)
- (the float (sar (shl (the int f0-14) 48) 48))
- )
- (else
- (if (< f0-14 0.0)
- (set! f0-14 0.0)
- )
- f0-14
- )
- )
- )
- (set! (-> arg0 value) (the float (sar (shl (the int f0-14) 48) 48)))
- )
- )
- (else
- (let ((f0-20 (+ (-> arg0 value) f0-6)))
- (set! f0-20 (cond
- ((= (-> arg0 range) 0.0)
- (the float (sar (shl (the int f0-20) 48) 48))
- )
- (else
- (if (< (-> arg0 range) f0-20)
- (set! f0-20 (-> arg0 range))
- )
- f0-20
- )
- )
- )
- (set! (-> arg0 value) (the float (sar (shl (the int f0-20) 48) 48)))
- )
- )
- )
- )
- #f
- )
-
-;; failed to figure out what this is:
-(defpartgroup group-beach-sack-fuse
- :id 117
- :bounds (static-bspherem 0 0 0 1)
- :parts
- ((sp-item 517 :fade-after (meters 30))
- (sp-item 518 :fade-after (meters 120) :falloff-to (meters 120))
- (sp-item 519 :fade-after (meters 80) :falloff-to (meters 80))
- )
- )
-
-;; failed to figure out what this is:
-(defpart 517
- :init-specs
- ((sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2))
- (sp-flt spt-num 4.0)
- (sp-flt spt-scale-x (meters 0.1))
- (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0)
- (sp-copy-from-other spt-scale-y -4)
- (sp-flt spt-r 192.0)
- (sp-flt spt-g 192.0)
- (sp-rnd-flt spt-b 64.0 128.0 1.0)
- (sp-rnd-flt spt-a 4.0 24.0 1.0)
- (sp-flt spt-vel-y (meters 0.013333334))
- (sp-rnd-flt spt-rotvel-z (degrees -0.15) (degrees 0.3) 1.0)
- (sp-flt spt-fade-a 2.1333334)
- (sp-flt spt-accel-y -0.4096)
- (sp-int-plain-rnd spt-timer 45 14 1)
- (sp-cpuinfo-flags bit2 bit3)
- (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 180.0) 1.0)
- (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0)
- )
- )
-
-;; failed to figure out what this is:
-(defpart 518
- :init-specs
- ((sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2))
- (sp-flt spt-num 1.0)
- (sp-rnd-flt spt-scale-x (meters 0.25) (meters 1) 1.0)
- (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0)
- (sp-copy-from-other spt-scale-y -4)
- (sp-flt spt-r 192.0)
- (sp-flt spt-g 192.0)
- (sp-rnd-flt spt-b 64.0 128.0 1.0)
- (sp-rnd-flt spt-a 48.0 48.0 1.0)
- (sp-int spt-timer 5)
- (sp-cpuinfo-flags bit2 bit3)
- )
- )
-
-;; failed to figure out what this is:
-(defpart 519
- :init-specs
- ((sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2))
- (sp-flt spt-num 4.0)
- (sp-flt spt-scale-x (meters 0.2))
- (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0)
- (sp-copy-from-other spt-scale-y -4)
- (sp-flt spt-r 32.0)
- (sp-flt spt-g 32.0)
- (sp-rnd-flt spt-b 8.0 24.0 1.0)
- (sp-rnd-flt spt-a 160.0 95.0 1.0)
- (sp-flt spt-scalevel-x (meters 0.016666668))
- (sp-copy-from-other spt-scalevel-y -4)
- (sp-flt spt-fade-a -8.366014)
- (sp-flt spt-accel-y -8.192)
- (sp-int spt-timer 15)
- (sp-cpuinfo-flags bit2 bit3)
- (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 180.0) 1.0)
- (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0)
- (sp-rnd-flt spt-conerot-radius (meters 0.6) (meters 0.2) 1.0)
- )
- )
-
-;; failed to figure out what this is:
-(defpartgroup group-beach-sack-explosion
- :id 118
- :flags (use-local-clock)
- :bounds (static-bspherem 0 0 0 16)
- :parts
- ((sp-item 520 :period 1200 :length 30)
- (sp-item 521 :fade-after (meters 60) :period 1200 :length 15)
- (sp-item 522 :period 1200 :length 15 :offset 15)
- (sp-item 523 :period 1200 :length 15)
- (sp-item 524 :fade-after (meters 80) :falloff-to (meters 80) :period 1200 :length 30 :binding 525)
- (sp-item 525 :flags (start-dead))
- (sp-item 525 :flags (start-dead))
- (sp-item 525 :flags (start-dead))
- (sp-item 525 :flags (start-dead))
- (sp-item 525 :flags (start-dead))
- (sp-item 525 :flags (start-dead))
- (sp-item 525 :flags (start-dead))
- (sp-item 525 :flags (start-dead))
- (sp-item 525 :flags (start-dead))
- (sp-item 525 :flags (start-dead))
- (sp-item 525 :flags (start-dead))
- (sp-item 525 :flags (start-dead))
- (sp-item 525 :flags (start-dead))
- (sp-item 525 :flags (start-dead))
- (sp-item 525 :flags (start-dead))
- (sp-item 525 :flags (start-dead))
- )
- )
-
-;; failed to figure out what this is:
-(defpart 520
- :init-specs
- ((sp-tex spt-texture (new 'static 'texture-id :page #x2))
- (sp-flt spt-num 1.5)
- (sp-rnd-flt spt-y (meters 0.5) (meters 0.5) 1.0)
- (sp-rnd-flt spt-scale-x (meters 2.5) (meters 1.5) 1.0)
- (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0)
- (sp-copy-from-other spt-scale-y -4)
- (sp-flt spt-r 70.0)
- (sp-flt spt-g 70.0)
- (sp-rnd-flt spt-b 70.0 16.0 1.0)
- (sp-flt spt-a 96.0)
- (sp-rnd-flt spt-vel-y (meters 0.006666667) (meters 0.033333335) 1.0)
- (sp-flt spt-scalevel-x (meters 0.006))
- (sp-rnd-flt spt-rotvel-z (degrees -0.2) (degrees 0.4) 1.0)
- (sp-copy-from-other spt-scalevel-y -4)
- (sp-flt spt-accel-y 0.2048)
- (sp-flt spt-friction 0.92)
- (sp-int spt-timer 900)
- (sp-cpuinfo-flags bit2 bit12 bit14)
- (sp-int-plain-rnd spt-next-time 30 299 1)
- (sp-launcher-by-id spt-next-launcher 526)
- (sp-rnd-flt spt-conerot-x (degrees 70.0) (degrees 20.0) 1.0)
- (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0)
- (sp-flt spt-conerot-radius (meters 2))
- )
- )
-
-;; failed to figure out what this is:
-(defpart 526
- :init-specs
- ((sp-flt spt-scalevel-x (meters 0)) (sp-copy-from-other spt-scalevel-y -4) (sp-flt spt-fade-a -0.32))
- )
-
-;; failed to figure out what this is:
-(defpart 521
- :init-specs
- ((sp-tex spt-texture (new 'static 'texture-id :index #x2 :page #x2))
- (sp-flt spt-num 6.0)
- (sp-flt spt-y (meters 0.75))
- (sp-rnd-flt spt-scale-x (meters 8) (meters 8) 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 1.2) (meters 3) 1.0)
- (sp-flt spt-r 192.0)
- (sp-flt spt-g 192.0)
- (sp-rnd-flt spt-b 64.0 128.0 1.0)
- (sp-flt spt-a 0.0)
- (sp-flt spt-scalevel-x (meters 0.009765625))
- (sp-rnd-flt spt-rotvel-z (degrees -0.15) (degrees 0.3) 1.0)
- (sp-flt spt-scalevel-y (meters 0.009765625))
- (sp-flt spt-fade-a 2.1333334)
- (sp-int spt-timer 30)
- (sp-cpuinfo-flags bit2 bit3 bit14)
- (sp-int spt-next-time 15)
- (sp-launcher-by-id spt-next-launcher 527)
- (sp-flt spt-rotate-y (degrees 0.0))
- )
- )
-
-;; failed to figure out what this is:
-(defpart 527
- :init-specs
- ((sp-flt spt-fade-a -1.3333334))
- )
-
-;; failed to figure out what this is:
-(defpart 522
- :init-specs
- ((sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2))
- (sp-flt spt-num 1.0)
- (sp-flt spt-y (meters 1))
- (sp-rnd-flt spt-scale-x (meters 24) (meters 16) 1.0)
- (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0)
- (sp-copy-from-other spt-scale-y -4)
- (sp-flt spt-r 196.0)
- (sp-flt spt-g 196.0)
- (sp-flt spt-b 196.0)
- (sp-flt spt-a 64.0)
- (sp-int spt-timer 5)
- (sp-cpuinfo-flags bit2 bit3 bit14)
- )
- )
-
-;; failed to figure out what this is:
-(defpart 523
- :init-specs
- ((sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2))
- (sp-flt spt-num 1.0)
- (sp-flt spt-y (meters 1))
- (sp-rnd-flt spt-scale-x (meters 24) (meters 16) 1.0)
- (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0)
- (sp-copy-from-other spt-scale-y -4)
- (sp-flt spt-r 196.0)
- (sp-flt spt-g 32.0)
- (sp-flt spt-b 32.0)
- (sp-flt spt-a 64.0)
- (sp-int spt-timer 5)
- (sp-cpuinfo-flags bit2 bit3 bit14)
- )
- )
-
-;; failed to figure out what this is:
-(defpart 524
- :init-specs
- ((sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2))
- (sp-rnd-flt spt-num 5.0 10.0 1.0)
- (sp-rnd-flt spt-x (meters -0.5) (meters 1) 1.0)
- (sp-rnd-flt spt-y (meters 0.25) (meters 1.5) 1.0)
- (sp-rnd-flt spt-z (meters -0.5) (meters 1) 1.0)
- (sp-flt spt-scale-x (meters 0.5))
- (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0)
- (sp-copy-from-other spt-scale-y -4)
- (sp-flt spt-r 255.0)
- (sp-rnd-int spt-g 1123942400 1 127.0)
- (sp-flt spt-b 0.0)
- (sp-flt spt-a 127.0)
- (sp-rnd-flt spt-vel-y (meters 0.06666667) (meters 0.06666667) 1.0)
- (sp-flt spt-fade-g -4.266667)
- (sp-flt spt-fade-b -2.8444445)
- (sp-flt spt-accel-y -16.384)
- (sp-flt spt-friction 0.97)
- (sp-int spt-timer 90)
- (sp-cpuinfo-flags bit2 bit3 bit14)
- (sp-int-plain-rnd spt-next-time 5 38 1)
- (sp-launcher-by-id spt-next-launcher 528)
- (sp-rnd-flt spt-conerot-x (degrees 40.0) (degrees 30.0) 1.0)
- (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0)
- )
- )
-
-;; failed to figure out what this is:
-(defpart 528
- :init-specs
- ((sp-flt spt-scalevel-x (meters -0.0033333334))
- (sp-copy-from-other spt-scalevel-y -4)
- (sp-flt spt-fade-r -4.266667)
- (sp-flt spt-fade-g 0.7111111)
- (sp-flt spt-fade-b 1.4222223)
- (sp-flt spt-fade-a -2.8444445)
- )
- )
-
-;; failed to figure out what this is:
-(defpart 525
- :init-specs
- ((sp-tex spt-texture (new 'static 'texture-id :page #x2))
- (sp-flt spt-num 2.0)
- (sp-rnd-flt spt-x (meters -0.25) (meters 0.5) 1.0)
- (sp-rnd-flt spt-y (meters -0.25) (meters 0.5) 1.0)
- (sp-rnd-flt spt-z (meters -0.25) (meters 0.5) 1.0)
- (sp-rnd-flt spt-scale-x (meters 0.5) (meters 0.5) 1.0)
- (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0)
- (sp-copy-from-other spt-scale-y -4)
- (sp-flt spt-r 70.0)
- (sp-flt spt-g 70.0)
- (sp-rnd-flt spt-b 70.0 16.0 1.0)
- (sp-rnd-flt spt-a 20.0 8.0 1.0)
- (sp-flt spt-scalevel-x (meters 0.0033333334))
- (sp-rnd-flt spt-rotvel-z (degrees -0.3) (degrees 0.6) 1.0)
- (sp-copy-from-other spt-scalevel-y -4)
- (sp-flt spt-fade-a -0.11666667)
- (sp-int spt-timer 300)
- (sp-cpuinfo-flags bit2 bit12 bit14)
- )
- )
-
-;; failed to figure out what this is:
-(defpartgroup group-beach-cannon-fire
- :id 119
- :flags (use-local-clock)
- :bounds (static-bspherem 0 0 0 24)
- :parts
- ((sp-item 529 :fade-after (meters 200) :falloff-to (meters 200) :period 1200 :length 30)
- (sp-item 530 :fade-after (meters 100) :falloff-to (meters 100) :period 1200 :length 15)
- (sp-item 531 :fade-after (meters 40) :falloff-to (meters 40) :period 1200 :length 15)
- (sp-item 532 :period 1200 :length 15 :offset 15)
- (sp-item 533 :period 1200 :length 15)
- (sp-item 534 :fade-after (meters 40) :falloff-to (meters 40) :period 1200 :length 15 :binding 535)
- (sp-item 535 :flags (start-dead))
- (sp-item 535 :flags (start-dead))
- (sp-item 535 :flags (start-dead))
- (sp-item 535 :flags (start-dead))
- (sp-item 535 :flags (start-dead))
- (sp-item 535 :flags (start-dead))
- (sp-item 535 :flags (start-dead))
- (sp-item 535 :flags (start-dead))
- (sp-item 535 :flags (start-dead))
- (sp-item 535 :flags (start-dead))
- (sp-item 535 :flags (start-dead))
- (sp-item 535 :flags (start-dead))
- (sp-item 535 :flags (start-dead))
- (sp-item 535 :flags (start-dead))
- (sp-item 535 :flags (start-dead))
- (sp-item 535 :flags (start-dead))
- (sp-item 535 :flags (start-dead))
- (sp-item 535 :flags (start-dead))
- (sp-item 535 :flags (start-dead))
- (sp-item 535 :flags (start-dead))
- (sp-item 535 :flags (start-dead))
- (sp-item 535 :flags (start-dead))
- (sp-item 535 :flags (start-dead))
- (sp-item 535 :flags (start-dead))
- )
- )
-
-;; failed to figure out what this is:
-(defpart 529
- :init-specs
- ((sp-tex spt-texture (new 'static 'texture-id :page #x2))
- (sp-flt spt-num 6.0)
- (sp-rnd-flt spt-scale-x (meters 1.5) (meters 1.5) 1.0)
- (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0)
- (sp-copy-from-other spt-scale-y -4)
- (sp-flt spt-r 64.0)
- (sp-flt spt-g 64.0)
- (sp-rnd-flt spt-b 64.0 16.0 1.0)
- (sp-flt spt-a 48.0)
- (sp-rnd-flt spt-vel-y (meters 0.1) (meters 0.013333334) 1.0)
- (sp-flt spt-vel-z (meters -0.033333335))
- (sp-flt spt-scalevel-x (meters 0.016666668))
- (sp-rnd-flt spt-rotvel-z (degrees -0.2) (degrees 0.4) 1.0)
- (sp-copy-from-other spt-scalevel-y -4)
- (sp-flt spt-accel-y 0.27306667)
- (sp-flt spt-friction 0.92)
- (sp-int spt-timer 900)
- (sp-cpuinfo-flags bit2 bit12)
- (sp-int-plain-rnd spt-next-time 30 299 1)
- (sp-launcher-by-id spt-next-launcher 536)
- (sp-flt spt-launchrot-x (degrees 90.0))
- (sp-rnd-flt spt-launchrot-y (degrees 0.0) (degrees 360.0) 1.0)
- (sp-flt spt-conerot-x (degrees 45.0))
- (sp-flt spt-conerot-radius (meters 2))
- (sp-flt spt-rotate-y (degrees 90.0))
- )
- )
-
-;; failed to figure out what this is:
-(defpart 536
- :init-specs
- ((sp-flt spt-scalevel-x (meters 0.006666667))
- (sp-copy-from-other spt-scalevel-y -4)
- (sp-flt spt-fade-a -0.16)
- )
- )
-
-;; failed to figure out what this is:
-(defpart 530
- :init-specs
- ((sp-tex spt-texture (new 'static 'texture-id :page #x2))
- (sp-flt spt-num 5.0)
- (sp-rnd-flt spt-scale-x (meters 1.5) (meters 1.5) 1.0)
- (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0)
- (sp-copy-from-other spt-scale-y -4)
- (sp-flt spt-r 64.0)
- (sp-flt spt-g 64.0)
- (sp-rnd-flt spt-b 64.0 16.0 1.0)
- (sp-flt spt-a 48.0)
- (sp-rnd-flt spt-vel-z (meters 0.3) (meters 0.06666667) 1.0)
- (sp-flt spt-scalevel-x (meters 0.026666667))
- (sp-rnd-int-flt spt-rotvel-z (degrees -0.3) 1 109.22667)
- (sp-copy-from-other spt-scalevel-y -4)
- (sp-flt spt-accel-y -0.27306667)
- (sp-flt spt-friction 0.96)
- (sp-int spt-timer 900)
- (sp-cpuinfo-flags bit2 bit12)
- (sp-int-plain-rnd spt-next-time 30 149 1)
- (sp-launcher-by-id spt-next-launcher 536)
- (sp-rnd-flt spt-launchrot-x (degrees -83.0) (degrees -7.0000005) 1.0)
- (sp-rnd-flt spt-launchrot-y (degrees 0.0) (degrees 360.0) 1.0)
- (sp-flt spt-conerot-x (degrees 45.0))
- (sp-flt spt-conerot-radius (meters 2))
- (sp-flt spt-rotate-y (degrees 90.0))
- )
- )
-
-;; failed to figure out what this is:
-(defpart 531
- :init-specs
- ((sp-tex spt-texture (new 'static 'texture-id :index #x2 :page #x2))
- (sp-flt spt-num 6.0)
- (sp-flt spt-y (meters 0.75))
- (sp-rnd-flt spt-scale-x (meters 16) (meters 16) 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 1.2) (meters 3) 1.0)
- (sp-flt spt-r 192.0)
- (sp-flt spt-g 192.0)
- (sp-rnd-flt spt-b 64.0 128.0 1.0)
- (sp-flt spt-a 0.0)
- (sp-flt spt-scalevel-x (meters 0.009765625))
- (sp-rnd-flt spt-rotvel-z (degrees -0.15) (degrees 0.3) 1.0)
- (sp-flt spt-scalevel-y (meters 0.009765625))
- (sp-flt spt-fade-a 2.1333334)
- (sp-int spt-timer 30)
- (sp-cpuinfo-flags bit2 bit3)
- (sp-int spt-next-time 15)
- (sp-launcher-by-id spt-next-launcher 537)
- )
- )
-
-;; failed to figure out what this is:
-(defpart 537
- :init-specs
- ((sp-flt spt-fade-a -1.3333334))
- )
-
-;; failed to figure out what this is:
-(defpart 532
- :init-specs
- ((sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2))
- (sp-flt spt-num 1.0)
- (sp-flt spt-y (meters 1))
- (sp-rnd-flt spt-scale-x (meters 24) (meters 16) 1.0)
- (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0)
- (sp-copy-from-other spt-scale-y -4)
- (sp-flt spt-r 196.0)
- (sp-flt spt-g 196.0)
- (sp-flt spt-b 196.0)
- (sp-flt spt-a 64.0)
- (sp-int spt-timer 5)
- (sp-cpuinfo-flags bit2 bit3)
- )
- )
-
-;; failed to figure out what this is:
-(defpart 533
- :init-specs
- ((sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2))
- (sp-flt spt-num 1.0)
- (sp-flt spt-y (meters 1))
- (sp-rnd-flt spt-scale-x (meters 24) (meters 16) 1.0)
- (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0)
- (sp-copy-from-other spt-scale-y -4)
- (sp-flt spt-r 196.0)
- (sp-flt spt-g 32.0)
- (sp-flt spt-b 32.0)
- (sp-flt spt-a 64.0)
- (sp-int spt-timer 5)
- (sp-cpuinfo-flags bit2 bit3)
- )
- )
-
-;; failed to figure out what this is:
-(defpart 534
- :init-specs
- ((sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2))
- (sp-rnd-flt spt-num 5.0 10.0 1.0)
- (sp-rnd-flt spt-scale-x (meters 0.5) (meters 1) 1.0)
- (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0)
- (sp-copy-from-other spt-scale-y -4)
- (sp-flt spt-r 255.0)
- (sp-flt spt-g 255.0)
- (sp-flt spt-b 0.0)
- (sp-flt spt-a 128.0)
- (sp-rnd-flt spt-vel-z (meters 0.16666667) (meters 0.16666667) 1.0)
- (sp-flt spt-fade-g -4.2222223)
- (sp-flt spt-fade-b -2.8)
- (sp-rnd-flt spt-accel-y -6.826667 -3.4133334 1.0)
- (sp-flt spt-friction 0.95)
- (sp-int spt-timer 600)
- (sp-cpuinfo-flags bit2 bit3)
- (sp-int-plain-rnd spt-next-time 10 89 1)
- (sp-launcher-by-id spt-next-launcher 538)
- (sp-rnd-flt spt-launchrot-x (degrees -60.0) (degrees -60.0) 1.0)
- (sp-rnd-flt spt-launchrot-y (degrees 0.0) (degrees 360.0) 1.0)
- (sp-flt spt-conerot-x (degrees 45.0))
- (sp-flt spt-rotate-y (degrees 90.0))
- )
- )
-
-;; failed to figure out what this is:
-(defpart 538
- :init-specs
- ((sp-flt spt-scalevel-x (meters -0.0033333334))
- (sp-copy-from-other spt-scalevel-y -4)
- (sp-flt spt-fade-r -0.6)
- (sp-flt spt-fade-g -1.8)
- (sp-flt spt-fade-a -0.85333335)
- )
- )
-
-;; failed to figure out what this is:
-(defpart 535
- :init-specs
- ((sp-tex spt-texture (new 'static 'texture-id :page #x2))
- (sp-flt spt-num 0.5)
- (sp-rnd-flt spt-x (meters -0.25) (meters 0.5) 1.0)
- (sp-rnd-flt spt-y (meters -0.25) (meters 0.5) 1.0)
- (sp-rnd-flt spt-z (meters -0.25) (meters 0.5) 1.0)
- (sp-rnd-flt spt-scale-x (meters 1) (meters 1) 1.0)
- (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0)
- (sp-copy-from-other spt-scale-y -4)
- (sp-flt spt-r 64.0)
- (sp-flt spt-g 64.0)
- (sp-flt spt-b 64.0)
- (sp-rnd-flt spt-a 16.0 8.0 1.0)
- (sp-flt spt-scalevel-x (meters 0.006666667))
- (sp-rnd-flt spt-rotvel-z (degrees -0.6) (degrees 1.2) 1.0)
- (sp-copy-from-other spt-scalevel-y -4)
- (sp-flt spt-fade-a -0.08)
- (sp-int spt-timer 300)
- (sp-cpuinfo-flags bit2 bit12)
- )
- )
-
-;; definition of type mistycannon-missile
-(deftype mistycannon-missile (process-drawable)
- ((root-override collide-shape-moving :offset 112)
- (muzzle-time float :offset-assert 176)
- (tumble-quat quaternion :inline :offset-assert 192)
- (blast-radius float :offset-assert 208)
- (water-height float :offset-assert 212)
- (sfx uint32 :offset-assert 216)
- (part2 sparticle-launch-control :offset-assert 220)
- (ground-time uint64 :offset-assert 224)
- )
- :heap-base #x80
- :method-count-assert 21
- :size-assert #xe8
- :flag-assert #x15008000e8
- (:methods
- (spawn-part (_type_) none 20)
- )
- (:states
- mistycannon-missile-explode
- mistycannon-missile-idle
- mistycannon-missile-in-water
- )
- )
-
-;; definition for method 3 of type mistycannon-missile
-(defmethod inspect mistycannon-missile ((obj mistycannon-missile))
- (let ((t9-0 (method-of-type process-drawable inspect)))
- (t9-0 obj)
- )
- (format #t "~T~Tmuzzle-time: ~f~%" (-> obj muzzle-time))
- (format #t "~T~Ttumble-quat: #~%" (-> obj tumble-quat))
- (format #t "~T~Tblast-radius: ~f~%" (-> obj blast-radius))
- (format #t "~T~Twater-height: ~f~%" (-> obj water-height))
- (format #t "~T~Tsfx: ~D~%" (-> obj sfx))
- (format #t "~T~Tpart2: ~A~%" (-> obj part2))
- (format #t "~T~Tground-time: ~D~%" (-> obj ground-time))
- obj
- )
-
-;; definition for method 7 of type mistycannon-missile
-;; INFO: Return type mismatch process-drawable vs mistycannon-missile.
-(defmethod relocate mistycannon-missile ((obj mistycannon-missile) (arg0 int))
- (if (nonzero? (-> obj part2))
- (&+! (-> obj part2) arg0)
- )
- (the-as mistycannon-missile ((method-of-type process-drawable relocate) obj arg0))
- )
-
-;; definition for method 10 of type mistycannon-missile
-(defmethod deactivate mistycannon-missile ((obj mistycannon-missile))
- (if (nonzero? (-> obj part2))
- (kill-and-free-particles (-> obj part2))
- )
- ((method-of-type process-drawable deactivate) obj)
- (none)
- )
-
-;; failed to figure out what this is:
-(defskelgroup *mistycannon-missile-sg* sack
- 0
- 2
- ((1 (meters 999999)))
- :bounds (static-spherem 0 0 0 4)
- :longest-edge (meters 0)
- )
-
-;; definition for method 20 of type mistycannon-missile
-;; INFO: Return type mismatch int vs none.
-(defmethod spawn-part mistycannon-missile ((obj mistycannon-missile))
- (let ((gp-0 (-> obj part))
- (a1-1 (vector<-cspace! (new 'stack-no-clear 'vector) (-> obj node-list data 7)))
- )
- (spawn gp-0 a1-1)
- )
- 0
- (none)
- )
-
-;; failed to figure out what this is:
-(defstate mistycannon-missile-idle (mistycannon-missile)
- :event
- (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block))
- (case arg2
- (('attack)
- (go mistycannon-missile-explode)
- )
- )
- )
- :enter
- (behavior ()
- (set! (-> self state-time) (-> *display* base-frame-counter))
- (set! (-> self sfx) (the-as uint 0))
- 0
- (none)
- )
- :trans
- (behavior ()
- (if (< (-> self root-override trans y) (-> self water-height))
- (go mistycannon-missile-in-water)
- )
- (none)
- )
- :code
- (behavior ()
- (clear-collide-with-as (-> self root-override))
- (while (< (- (-> *display* base-frame-counter) (-> self state-time)) (the int (* 300.0 (-> self muzzle-time))))
- (quaternion*! (-> self root-override quat) (-> self root-override quat) (-> self tumble-quat))
- (suspend)
- (let ((f0-1
- (fmin
- 1.0
- (/ (the float (- (-> *display* base-frame-counter) (-> self state-time)))
- (the float (the int (* 300.0 (-> self muzzle-time))))
- )
- )
- )
- )
- (set! (-> self root-override scale x) (* 0.6 f0-1))
- (set! (-> self root-override scale y) (* 0.6 f0-1))
- (set! (-> self root-override scale z) (* 0.6 f0-1))
- )
- )
- (restore-collide-with-as (-> self root-override))
- (set-vector! (-> self root-override scale) 0.6 0.6 0.6 1.0)
- (while (zero? (logand (-> self root-override status) 1))
- (if (and (zero? (-> self sfx))
- (< (if *target*
- (vector-vector-distance (-> self root-override trans) (-> *target* control trans))
- 4096000.0
- )
- 409600.0
- )
- )
- (set! (-> self sfx)
- (the-as
- uint
- (sound-play-by-name
- (static-sound-name "sack-incoming")
- (new-sound-id)
- 1024
- 0
- 0
- 1
- (the-as symbol (-> self root-override trans))
- )
- )
- )
- )
- (when (nonzero? (-> self sfx))
- (let ((gp-1 (the-as sound-rpc-set-param (get-sound-buffer-entry))))
- (set! (-> gp-1 command) (sound-command set-param))
- (set! (-> gp-1 id) (the-as sound-id (-> self sfx)))
- (let ((a1-3 (-> self root-override trans)))
- (let ((s5-1 self))
- (when (= a1-3 #t)
- (if (and s5-1 (type-type? (-> s5-1 type) process-drawable) (nonzero? (-> s5-1 root-override)))
- (set! a1-3 (-> s5-1 root-override trans))
- (set! a1-3 (the-as vector #f))
- )
- )
- )
- (sound-trans-convert (-> gp-1 parms trans) a1-3)
- )
- (set! (-> gp-1 parms mask) (the-as uint 32))
- (-> gp-1 id)
- )
- )
- (quaternion*! (-> self root-override quat) (-> self root-override quat) (-> self tumble-quat))
- (suspend)
- )
- (quaternion-set! (-> self root-override quat) 0.0 0.0 0.0 1.0)
- (update-transforms! (-> self root-override))
- (when (nonzero? (-> self sfx))
- (sound-stop (the-as sound-id (-> self sfx)))
- (set! (-> self sfx) (the-as uint 0))
- 0
- )
- (set! (-> self ground-time) (the-as uint (-> *display* base-frame-counter)))
- (sound-play-by-name
- (static-sound-name "sack-land")
- (new-sound-id)
- 1024
- 0
- 0
- 1
- (the-as symbol (-> self root-override trans))
- )
- (let ((a0-18 (-> self skel root-channel 0)))
- (set! (-> a0-18 frame-group) (the-as art-joint-anim (-> self draw art-group data 3)))
- (set! (-> a0-18 param 0)
- (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 3)) data 0 length) -1))
- )
- (set! (-> a0-18 param 1) 1.0)
- (set! (-> a0-18 frame-num) 0.0)
- (joint-control-channel-group! a0-18 (the-as art-joint-anim (-> self draw art-group data 3)) num-func-seek!)
- )
- (until (ja-done? 0)
- (suspend)
- (let ((a0-19 (-> self skel root-channel 0)))
- (set! (-> a0-19 param 0) (the float (+ (-> a0-19 frame-group data 0 length) -1)))
- (set! (-> a0-19 param 1) 1.0)
- (joint-control-channel-group-eval! a0-19 (the-as art-joint-anim #f) num-func-seek!)
- )
- )
- (let ((a0-21 (-> self skel root-channel 0)))
- (set! (-> a0-21 frame-group) (the-as art-joint-anim (-> self draw art-group data 4)))
- (set! (-> a0-21 param 0)
- (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 4)) data 0 length) -1))
- )
- (set! (-> a0-21 param 1) 1.0)
- (set! (-> a0-21 frame-num) 0.0)
- (joint-control-channel-group! a0-21 (the-as art-joint-anim (-> self draw art-group data 4)) num-func-seek!)
- )
- (until (ja-done? 0)
- (suspend)
- (let ((a0-22 (-> self skel root-channel 0)))
- (set! (-> a0-22 param 0) (the float (+ (-> a0-22 frame-group data 0 length) -1)))
- (set! (-> a0-22 param 1) 1.0)
- (joint-control-channel-group-eval! a0-22 (the-as art-joint-anim #f) num-func-seek!)
- )
- )
- (go mistycannon-missile-explode)
- (none)
- )
- :post
- (behavior ()
- (vector-v++!
- (-> self root-override transv)
- (compute-acc-due-to-gravity (-> self root-override) (new-stack-vector0) 1.0)
- )
- (set! (-> self root-override root-prim prim-core offense) (collide-offense touch))
- (fill-cache-integrate-and-collide!
- (-> self root-override)
- (-> self root-override transv)
- (-> self root-override root-prim collide-with)
- )
- (set! (-> self root-override root-prim prim-core offense) (collide-offense indestructible))
- (spawn-part self)
- (when (and (zero? (-> self draw cur-lod)) (logtest? (-> self draw status) (draw-status drwf03)))
- (if (logtest? (-> self root-override status) 1)
- (draw-shadow
- (-> self root-override shadow-pos)
- (-> self root-override shadow-pos)
- (-> self root-override ground-poly-normal)
- 8192.0
- 4096.0
- (the-as float 0)
- )
- (find-ground-and-draw-shadow
- (-> self root-override trans)
- (-> self root-override shadow-pos)
- 8192.0
- (collide-kind background)
- (the-as process #f)
- 0.0
- 81920.0
- )
- )
- )
- (ja-post)
- (none)
- )
- )
-
-;; failed to figure out what this is:
-(defstate mistycannon-missile-in-water (mistycannon-missile)
- :code
- (behavior ()
- (when (nonzero? (-> self sfx))
- (sound-stop (the-as sound-id (-> self sfx)))
- (set! (-> self sfx) (the-as uint 0))
- 0
- )
- (let ((a1-0 (new-stack-vector0)))
- (set! (-> a1-0 x) (-> self root-override trans x))
- (set! (-> a1-0 y) (-> self water-height))
- (set! (-> a1-0 z) (-> self root-override trans z))
- (set! (-> a1-0 w) 1.0)
- (splash-spawn (the-as basic 1.0) (the-as basic a1-0) 1)
- )
- (label cfg-3)
- (vector-v++!
- (-> self root-override transv)
- (compute-acc-due-to-gravity (-> self root-override) (new-stack-vector0) 1.0)
- )
- (vector-float*! (-> self root-override transv) (-> self root-override transv) 0.5)
- (update-transforms! (-> self root-override))
- (fill-cache-integrate-and-collide!
- (-> self root-override)
- (-> self root-override transv)
- (-> self root-override root-prim collide-with)
- )
- (set! (-> self root-override scale x)
- (seek (-> self root-override scale x) 0.0 (* 0.01 (-> *display* time-adjust-ratio)))
- )
- (set! (-> self root-override scale y)
- (seek (-> self root-override scale y) 0.0 (* 0.01 (-> *display* time-adjust-ratio)))
- )
- (set! (-> self root-override scale z)
- (seek (-> self root-override scale z) 0.0 (* 0.01 (-> *display* time-adjust-ratio)))
- )
- (when (< 0.05 (-> self root-override scale x))
- (suspend)
- (goto cfg-3)
- )
- (ja-channel-set! 0)
- (none)
- )
- :post
- (the-as (function none :behavior mistycannon-missile) ja-post)
- )
-
-;; failed to figure out what this is:
-(defstate mistycannon-missile-explode (mistycannon-missile)
- :event
- (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block))
- (case arg2
- (('touched)
- (let* ((s4-0 arg0)
- (v1-2 (if (and (nonzero? s4-0) (type-type? (-> s4-0 type) process-drawable))
- s4-0
- )
- )
- )
- (when v1-2
- (let* ((v1-3 (-> (the-as mistycannon-missile v1-2) root-override))
- (a1-2 (-> self root-override root-prim prim-core))
- (v1-5 (-> v1-3 root-prim prim-core))
- (a2-1 (new 'stack-no-clear 'vector))
- (t2-0 (new 'stack-no-clear 'collide-mesh-cache-tri))
- )
- 0.0
- (vector-! a2-1 (the-as vector v1-5) (the-as vector a1-2))
- (when (< (fill-and-probe-using-line-sphere
- *collide-cache*
- (the-as vector a1-2)
- a2-1
- 40.96
- (collide-kind background)
- self
- (the-as collide-tri-result t2-0)
- 1
- )
- 0.0
- )
- (cond
- ((= (-> arg0 type) target)
- (let ((a1-3 (new 'stack-no-clear 'event-message-block)))
- (set! (-> a1-3 from) self)
- (set! (-> a1-3 num-params) 2)
- (set! (-> a1-3 message) 'attack)
- (set! (-> a1-3 param 0) (-> arg3 param 0))
- (let ((a0-8 (new 'static 'attack-info :mask #x20)))
- (set! (-> a0-8 mode) 'explode)
- (set! (-> a1-3 param 1) (the-as uint a0-8))
- )
- (send-event-function arg0 a1-3)
- )
- )
- (else
- (let ((a1-4 (new 'stack-no-clear 'event-message-block)))
- (set! (-> a1-4 from) self)
- (set! (-> a1-4 num-params) 4)
- (set! (-> a1-4 message) 'attack)
- (set! (-> a1-4 param 0) (-> arg3 param 0))
- (set! (-> a1-4 param 1) (the-as uint 'explode))
- (let ((v1-18 (+ *global-attack-id* 1)))
- (set! *global-attack-id* v1-18)
- (set! (-> a1-4 param 2) (the-as uint v1-18))
- )
- (set! (-> a1-4 param 3) (the-as uint 0))
- (send-event-function arg0 a1-4)
- )
- )
- )
- )
- )
- )
- )
- )
- )
- )
- :code
- (behavior ()
- (if (and *target* (= (-> *target* next-state name) 'target-periscope))
- (sound-play-by-spec
- (new 'static 'sound-spec
- :mask #xc0
- :num 1.0
- :group #x1
- :sound-name (static-sound-name "explosion")
- :volume #x400
- :fo-min #xc8
- :fo-max #x190
- )
- (new-sound-id)
- (the-as vector #t)
- )
- (sound-play-by-spec
- (new 'static 'sound-spec :num 1.0 :group #x1 :sound-name (static-sound-name "explosion") :volume #x400)
- (new-sound-id)
- (the-as vector #t)
- )
- )
- (spawn (-> self part2) (-> self root-override trans))
- (ja-channel-set! 0)
- (let ((v1-11 (-> self root-override root-prim)))
- (set! (-> v1-11 local-sphere w) (-> self blast-radius))
- (set! (-> v1-11 prim-core world-sphere w) (-> self blast-radius))
- (set! (-> v1-11 collide-with) (collide-kind cak-2 cak-3 target crate enemy wall-object))
- (set! (-> v1-11 prim-core collide-as) (collide-kind enemy))
- )
- (update-transforms! (-> self root-override))
- (let ((a1-3 (new 'stack-no-clear 'overlaps-others-params)))
- (set! (-> a1-3 options) (the-as uint 0))
- (set! (-> a1-3 tlist) *touching-list*)
- (find-overlapping-shapes (-> self root-override) a1-3)
- )
- (suspend)
- (clear-collide-with-as (-> self root-override))
- (let ((gp-2 (-> *display* base-frame-counter)))
- (until (>= (- (-> *display* base-frame-counter) gp-2) 900)
- (spawn (-> self part2) (-> self root-override trans))
- (suspend)
- )
- )
- (kill-and-free-particles (-> self part2))
- (deactivate self)
- (none)
- )
- :post
- (the-as (function none :behavior mistycannon-missile) ja-post)
- )
-
-;; definition for function mistycannon-collision-reaction
-;; INFO: Return type mismatch int vs none.
-(defun mistycannon-collision-reaction ((arg0 collide-shape-moving) (arg1 collide-shape-intersect))
- (let ((s5-0 0))
- (let ((a1-1 (new 'stack-no-clear 'vector)))
- (vector-float*! a1-1 (-> arg1 move-vec) (-> arg1 best-u))
- (move-by-vector! arg0 a1-1)
- )
- (let ((f0-2 (vector-dot (-> arg0 transv) (-> arg1 best-tri normal)))
- (v1-6 (new 'stack-no-clear 'vector))
- )
- (vector-float*! v1-6 (-> arg1 best-tri normal) (* 2.0 f0-2))
- (vector-! (-> arg0 transv) (-> arg0 transv) v1-6)
- )
- (vector-float*! (-> arg0 transv) (-> arg0 transv) 0.15)
- (let ((v0-1 (logior s5-0 7)))
- (logior! (-> arg0 status) v0-1)
- )
- )
- (none)
- )
-
-;; definition of type mistycannon-init-data
-(deftype mistycannon-init-data (structure)
- ((pos vector :offset-assert 0)
- (vel vector :offset-assert 4)
- (rotate float :offset-assert 8)
- (flight-time float :offset-assert 12)
- (muzzle-time float :offset-assert 16)
- (blast-radius float :offset-assert 20)
- )
- :method-count-assert 9
- :size-assert #x18
- :flag-assert #x900000018
- )
-
-;; definition for method 3 of type mistycannon-init-data
-(defmethod inspect mistycannon-init-data ((obj mistycannon-init-data))
- (format #t "[~8x] ~A~%" obj 'mistycannon-init-data)
- (format #t "~Tpos: #~%" (-> obj pos))
- (format #t "~Tvel: #~%" (-> obj vel))
- (format #t "~Trotate: ~f~%" (-> obj rotate))
- (format #t "~Tflight-time: ~f~%" (-> obj flight-time))
- (format #t "~Tmuzzle-time: ~f~%" (-> obj muzzle-time))
- (format #t "~Tblast-radius: ~f~%" (-> obj blast-radius))
- obj
- )
-
-;; definition for function mistycannon-missile-init-by-other
-;; INFO: Return type mismatch object vs none.
-;; Used lq/sq
-(defbehavior mistycannon-missile-init-by-other mistycannon-missile ((arg0 mistycannon-init-data) (arg1 entity))
- (set! (-> self mask) (logior (process-mask projectile) (-> self mask)))
- (logclear! (-> self mask) (process-mask actor-pause))
- (set! (-> self entity) arg1)
- (let ((s5-0 (new 'process 'collide-shape-moving self (collide-list-enum hit-by-player))))
- (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process))
- (set! (-> s5-0 reaction)
- (the-as
- (function collide-shape-moving collide-shape-intersect vector vector none)
- mistycannon-collision-reaction
- )
- )
- (set! (-> s5-0 no-reaction)
- (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing)
- )
- (let ((s4-0 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 0))))
- (set! (-> s4-0 prim-core collide-as) (collide-kind enemy))
- (set! (-> s4-0 collide-with) (collide-kind background cak-2 cak-3 target crate enemy wall-object))
- (set! (-> s4-0 prim-core action) (collide-action solid))
- (set! (-> s4-0 prim-core offense) (collide-offense touch))
- (set! (-> s4-0 transform-index) 0)
- (set-vector! (-> s4-0 local-sphere) 0.0 0.0 0.0 1720.3201)
- (set-root-prim! s5-0 s4-0)
- )
- (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w)))
- (backup-collide-with-as s5-0)
- (set! (-> s5-0 event-self) 'touched)
- (set! (-> s5-0 max-iteration-count) (the-as uint 4))
- (set! (-> self root-override) s5-0)
- )
- (set! (-> self root-override trans quad) (-> arg0 pos quad))
- (set-vector! (-> self root-override scale) 0.0 0.0 0.0 1.0)
- (set! (-> self muzzle-time) (-> arg0 muzzle-time))
- (quaternion-axis-angle! (-> self root-override quat) 0.0 1.0 0.0 (-> arg0 rotate))
- (let ((f0-13 (/ 655360.0 (the float (the int (* 300.0 (-> arg0 flight-time)))))))
- (quaternion-axis-angle! (-> self tumble-quat) 1.0 0.0 0.0 f0-13)
- )
- (initialize-skeleton self *mistycannon-missile-sg* '())
- (set! (-> self root-override transv quad) (-> arg0 vel quad))
- (set! (-> self blast-radius) (-> arg0 blast-radius))
- (set! (-> self water-height) (res-lump-float (-> self entity) 'water-height :default -4096000.0))
- (set! (-> self part) (create-launch-control (-> *part-group-id-table* 117) self))
- (set! (-> self part2) (create-launch-control (-> *part-group-id-table* 118) self))
- (go mistycannon-missile-idle)
- (none)
- )
-
-;; definition for function spawn-mistycannon-missile
-;; INFO: Return type mismatch int vs none.
-(defun spawn-mistycannon-missile ((arg0 process-tree)
- (arg1 vector)
- (arg2 vector)
- (arg3 float)
- (arg4 float)
- (arg5 float)
- (arg6 float)
- (arg7 entity)
- )
- (let ((s5-0 (new 'stack-no-clear 'mistycannon-init-data)))
- (set! (-> s5-0 pos) arg1)
- (set! (-> s5-0 vel) arg2)
- (set! (-> s5-0 rotate) arg3)
- (set! (-> s5-0 flight-time) arg4)
- (set! (-> s5-0 muzzle-time) arg5)
- (set! (-> s5-0 blast-radius) arg6)
- (let ((s3-0 (get-process *default-dead-pool* mistycannon-missile #x4000)))
- (when s3-0
- (let ((t9-1 (method-of-type mistycannon-missile activate)))
- (t9-1 (the-as mistycannon-missile s3-0) arg0 'mistycannon-missile (the-as pointer #x70004000))
- )
- (run-now-in-process s3-0 mistycannon-missile-init-by-other s5-0 arg7)
- (-> s3-0 ppointer)
- )
- )
- )
- 0
- (none)
- )
-
-;; definition of type mistycannon
-(deftype mistycannon (process-drawable)
- ((root-override collide-shape-moving :offset 112)
- (rotate angle-tracker :inline :offset-assert 176)
- (fact-info-override fact-info-enemy :offset 144)
- (tilt angle-tracker :inline :offset-assert 192)
- (front-wheel float :offset-assert 208)
- (rear-wheel float :offset-assert 212)
- (last-known-rotation float :offset-assert 216)
- (part-timer uint64 :offset-assert 224)
- (hellmouth vector :inline :offset-assert 240)
- (postbindinfo-ok symbol :offset-assert 256)
- (launch-origin vector :inline :offset-assert 272)
- (goggles vector :inline :offset-assert 288)
- (avoid-entity entity-actor :offset-assert 304)
- (center-point vector :inline :offset-assert 320)
- (at-point vector :inline :offset-assert 336)
- (accuracy-range float :offset-assert 352)
- (target-theta float :offset-assert 356)
- (sound-id sound-id :offset-assert 360)
- (aim-sound-id sound-id :offset-assert 364)
- (player-touching-grips? symbol :offset-assert 368)
- )
- :heap-base #x110
- :method-count-assert 24
- :size-assert #x174
- :flag-assert #x1801100174
- (:methods
- (rotate! (_type_ float) none 20)
- (tilt! (_type_ float) none 21)
- (dummy-22 (_type_ float float float) none 22)
- (dummy-23 (_type_) none 23)
- )
- (:states
- mistycannon-aim-at-player
- mistycannon-idle
- mistycannon-player-control
- mistycannon-waiting-for-player
- mistycannon-waiting-for-player-to-fuck-off
- )
- )
-
-;; definition for method 3 of type mistycannon
-(defmethod inspect mistycannon ((obj mistycannon))
- (let ((t9-0 (method-of-type process-drawable inspect)))
- (t9-0 obj)
- )
- (format #t "~T~Trotate: #~%" (-> obj rotate))
- (format #t "~T~Ttilt: #~%" (-> obj tilt))
- (format #t "~T~Tfront-wheel: ~f~%" (-> obj front-wheel))
- (format #t "~T~Trear-wheel: ~f~%" (-> obj rear-wheel))
- (format #t "~T~Tlast-known-rotation: ~f~%" (-> obj last-known-rotation))
- (format #t "~T~Tpart-timer: ~D~%" (-> obj part-timer))
- (format #t "~T~Thellmouth: #~%" (-> obj hellmouth))
- (format #t "~T~Tpostbindinfo-ok: ~A~%" (-> obj postbindinfo-ok))
- (format #t "~T~Tlaunch-origin: #~%" (-> obj launch-origin))
- (format #t "~T~Tgoggles: #~%" (-> obj goggles))
- (format #t "~T~Tavoid-entity: ~A~%" (-> obj avoid-entity))
- (format #t "~T~Tcenter-point: #~%" (-> obj center-point))
- (format #t "~T~Tat-point: #~%" (-> obj at-point))
- (format #t "~T~Taccuracy-range: ~f~%" (-> obj accuracy-range))
- (format #t "~T~Ttarget-theta: ~f~%" (-> obj target-theta))
- (format #t "~T~Tsound-id: ~D~%" (-> obj sound-id))
- (format #t "~T~Taim-sound-id: ~D~%" (-> obj aim-sound-id))
- (format #t "~T~Tplayer-touching-grips?: ~A~%" (-> obj player-touching-grips?))
- obj
- )
-
-;; definition for function mistycannon-pick-random-target-point
-(defbehavior mistycannon-pick-random-target-point mistycannon ()
- (let ((f30-0 (* (sqrtf (rand-vu)) (-> self center-point w)))
- (f28-1 (* 65536.0 (rand-vu)))
- )
- (set! (-> self at-point x) (+ (-> self center-point x) (* f30-0 (cos f28-1))))
- (set! (-> self at-point y) (-> self center-point y))
- (set! (-> self at-point z) (+ (-> self center-point z) (* f30-0 (sin f28-1))))
- )
- (set! (-> self at-point w) 1.0)
- (let ((f0-11 (rand-vu-float-range 2730.6667 12743.111)))
- (set! (-> self target-theta) f0-11)
- f0-11
- )
- )
-
-;; definition for method 20 of type mistycannon
-;; INFO: Return type mismatch int vs none.
-(defmethod rotate! mistycannon ((obj mistycannon) (arg0 float))
- (angle-tracker-apply-move! (-> obj rotate) arg0)
- 0
- (none)
- )
-
-;; definition for method 21 of type mistycannon
-;; INFO: Return type mismatch int vs none.
-(defmethod tilt! mistycannon ((obj mistycannon) (arg0 float))
- (angle-tracker-apply-move! (-> obj tilt) arg0)
- 0
- (none)
- )
-
-;; definition for method 22 of type mistycannon
-;; INFO: Return type mismatch int vs none.
-;; WARN: Expression building failed: Function (method 22 mistycannon) has a return type of none, but the expression builder found a return statement.
-(defmethod dummy-22 mistycannon ((obj mistycannon) (arg0 float) (arg1 float) (arg2 float))
- (if (not (-> obj postbindinfo-ok))
- (return #f)
- )
- (let* ((s3-0 (-> obj launch-origin))
- (s2-0 (new 'stack-no-clear 'vector))
- (v1-3 (-> obj rotate))
- (f30-0 (the float (sar (shl (the int (+ (-> v1-3 min) (-> v1-3 value))) 48) 48)))
- (v1-8 (-> obj tilt))
- (f26-0 (the float (sar (shl (the int (+ (-> v1-8 min) (-> v1-8 value))) 48) 48)))
- (f28-0 (/ 24576.0 arg0))
- )
- (let ((f24-0 (cos f26-0)))
- (set! (-> s2-0 x) (* arg0 f24-0 (sin f30-0)))
- (set! (-> s2-0 z) (* arg0 f24-0 (cos f30-0)))
- )
- (set! (-> s2-0 y) (* arg0 (sin f26-0)))
- (vector-float*! (-> obj hellmouth) s2-0 f28-0)
- (vector+! (-> obj hellmouth) (-> obj hellmouth) s3-0)
- (spawn-mistycannon-missile obj s3-0 s2-0 f30-0 arg1 f28-0 arg2 (-> obj entity))
- )
- (sound-play-by-name (static-sound-name "cannon-shot") (new-sound-id) 1024 0 0 1 #t)
- (set! (-> obj part local-clock) 0)
- (set! (-> obj part-timer) (the-as uint (-> *display* base-frame-counter)))
- (mistycannon-pick-random-target-point)
- 0
- (none)
- )
-
-;; definition for method 23 of type mistycannon
-;; INFO: Return type mismatch int vs none.
-(defmethod dummy-23 mistycannon ((obj mistycannon))
- (when (< (- (-> *display* base-frame-counter) (the-as int (-> obj part-timer))) 900)
- (let ((v1-4 (-> obj rotate)))
- (set! (-> *part-id-table* 529 init-specs 24 initial-valuef)
- (the float (sar (shl (the int (+ (-> v1-4 min) (-> v1-4 value))) 48) 48))
- )
- )
- (let ((v1-12 (-> obj rotate)))
- (set! (-> *part-id-table* 530 init-specs 23 initial-valuef)
- (the float (sar (shl (the int (+ (-> v1-12 min) (-> v1-12 value))) 48) 48))
- )
- )
- (let ((v1-20 (-> obj rotate)))
- (set! (-> *part-id-table* 534 init-specs 21 initial-valuef)
- (the float (sar (shl (the int (+ (-> v1-20 min) (-> v1-20 value))) 48) 48))
- )
- )
- (let ((f0-18 16384.0)
- (v1-28 (-> obj tilt))
- )
- (set! (-> *part-id-table* 529 init-specs 22 initial-valuef)
- (- f0-18 (the float (sar (shl (the int (+ (-> v1-28 min) (-> v1-28 value))) 48) 48)))
- )
- )
- (let ((f0-20 16384.0)
- (v1-36 (-> obj tilt))
- )
- (set! (-> *part-id-table* 530 init-specs 21 initial-valuef)
- (- f0-20 (the float (sar (shl (the int (+ (-> v1-36 min) (-> v1-36 value))) 48) 48)))
- )
- )
- (let ((f0-22 16384.0)
- (v1-44 (-> obj tilt))
- )
- (set! (-> *part-id-table* 534 init-specs 20 initial-valuef)
- (- f0-22 (the float (sar (shl (the int (+ (-> v1-44 min) (-> v1-44 value))) 48) 48)))
- )
- )
- (spawn (-> obj part) (-> obj hellmouth))
- )
- 0
- (none)
- )
-
-;; failed to figure out what this is:
-(defskelgroup *mistycannon-sg* mistycannon
- 0
- 3
- ((1 (meters 20)) (2 (meters 999999)))
- :bounds (static-spherem 0 5 0 9)
- :longest-edge (meters 4)
- )
-
-;; definition for function mistycannon-prebind-function
-;; INFO: Return type mismatch int vs none.
-(defun mistycannon-prebind-function ((arg0 mistycannon) (arg1 int) (arg2 mistycannon))
- (let ((t9-0 quaternion-axis-angle!)
- (a0-1 (&-> arg0 link))
- (a1-1 0.0)
- (a2-1 1.0)
- (a3-0 0.0)
- (v1-0 (-> arg2 rotate))
- )
- (t9-0
- (the-as quaternion a0-1)
- a1-1
- a2-1
- a3-0
- (the float (sar (shl (the int (+ (-> v1-0 min) (-> v1-0 value))) 48) 48))
- )
- )
- (let ((t9-1 quaternion-axis-angle!)
- (a0-2 (&-> arg0 tilt min))
- (a1-2 -1.0)
- (a2-2 0.0)
- (a3-1 0.0)
- (v1-4 (-> arg2 tilt))
- )
- (t9-1
- (the-as quaternion a0-2)
- a1-2
- a2-2
- a3-1
- (the float (sar (shl (the int (+ (-> v1-4 min) (-> v1-4 value))) 48) 48))
- )
- )
- (let* ((v1-8 (-> arg2 rotate))
- (f0-16
- (- (the float (sar (shl (the int (+ (-> v1-8 min) (-> v1-8 value))) 48) 48)) (-> arg2 last-known-rotation))
- )
- )
- (set! (-> arg2 front-wheel) (the float (sar (shl (the int (+ (-> arg2 front-wheel) (* 5.0 f0-16))) 48) 48)))
- (set! (-> arg2 rear-wheel) (the float (sar (shl (the int (+ (-> arg2 rear-wheel) (* 3.0 f0-16))) 48) 48)))
- )
- (let ((v1-19 (-> arg2 rotate)))
- (set! (-> arg2 last-known-rotation)
- (the float (sar (shl (the int (+ (-> v1-19 min) (-> v1-19 value))) 48) 48))
- )
- )
- (quaternion-axis-angle! (the-as quaternion (&-> arg0 stack 324)) -1.0 0.0 0.0 (-> arg2 front-wheel))
- (quaternion-axis-angle! (the-as quaternion (&-> arg0 stack 276)) 1.0 0.0 0.0 (-> arg2 front-wheel))
- (quaternion-axis-angle! (the-as quaternion (&-> arg0 goggles y)) -1.0 0.0 0.0 (-> arg2 rear-wheel))
- (quaternion-axis-angle! (the-as quaternion (&-> arg0 at-point y)) 1.0 0.0 0.0 (-> arg2 rear-wheel))
- 0
- (none)
- )
-
-;; definition for function mistycannon-postbind-function
-;; INFO: Return type mismatch int vs none.
-;; Used lq/sq
-(defun mistycannon-postbind-function ((arg0 mistycannon))
- (set! (-> arg0 launch-origin quad) (-> arg0 node-list data 4 bone transform vector 3 quad))
- (let ((s5-0 (new 'stack-no-clear 'vector)))
- (set-vector! s5-0 0.0 53248.0 -4096.0 1.0)
- (vector-matrix*! s5-0 s5-0 (-> arg0 node-list data 3 bone transform))
- (set! (-> arg0 goggles quad) (-> s5-0 quad))
- )
- (set! (-> arg0 postbindinfo-ok) #t)
- 0
- (none)
- )
-
-;; failed to figure out what this is:
-(defstate mistycannon-idle (mistycannon)
- :trans
- (behavior ()
- (if (not (and (-> self entity) (logtest? (-> self entity extra perm status) (entity-perm-status complete))))
- (go mistycannon-waiting-for-player)
- )
- (if (and (-> self postbindinfo-ok)
- *target*
- (>= (-> self fact-info-override idle-distance)
- (vector-vector-distance (-> self root-override trans) (-> *target* control trans))
- )
- )
- (go mistycannon-aim-at-player)
- )
- (rider-trans)
- (none)
- )
- :code
- (behavior ()
- (while #t
- (dummy-23 self)
- (suspend)
- )
- (none)
- )
- :post
- (the-as (function none :behavior mistycannon) rider-post)
- )
-
-;; definition of type quadratic-solution
-(deftype quadratic-solution (structure)
- ((s1 float :offset-assert 0)
- (s2 float :offset-assert 4)
- )
- :method-count-assert 9
- :size-assert #x8
- :flag-assert #x900000008
- )
-
-;; definition for method 3 of type quadratic-solution
-(defmethod inspect quadratic-solution ((obj quadratic-solution))
- (format #t "[~8x] ~A~%" obj 'quadratic-solution)
- (format #t "~Ts1: ~f~%" (-> obj s1))
- (format #t "~Ts2: ~f~%" (-> obj s2))
- obj
- )
-
-;; definition for function solve-missile-tilt
-(defun solve-missile-tilt ((arg0 quadratic-solution) (arg1 float) (arg2 float) (arg3 float) (arg4 float))
- (let* ((f1-3 (* 0.5 arg2 arg2 arg4))
- (f0-3 f1-3)
- (f30-0 (- (* arg2 arg1 arg1)))
- (f2-6 (+ f1-3 (* arg1 arg1 arg3)))
- (f1-5 (- (* f30-0 f30-0) (* 4.0 f2-6 f0-3)))
- (f28-0 (/ 0.5 f0-3))
- )
- (if (< f1-5 0.0)
- (return #f)
- )
- (let ((f26-0 (sqrtf f1-5)))
- (set! (-> arg0 s1) (atan (* (+ (- f30-0) f26-0) f28-0) 1.0))
- (set! (-> arg0 s2) (atan (* (- (- f30-0) f26-0) f28-0) 1.0))
- )
- )
- #t
- )
-
-;; definition of type trajectory-params
-(deftype trajectory-params (structure)
- ((x float :offset-assert 0)
- (y float :offset-assert 4)
- (gravity float :offset-assert 8)
- (theta float :offset-assert 12)
- (speed float :offset-assert 16)
- (time float :offset-assert 20)
- )
- :method-count-assert 9
- :size-assert #x18
- :flag-assert #x900000018
- )
-
-;; definition for method 3 of type trajectory-params
-(defmethod inspect trajectory-params ((obj trajectory-params))
- (format #t "[~8x] ~A~%" obj 'trajectory-params)
- (format #t "~Tx: ~f~%" (-> obj x))
- (format #t "~Ty: ~f~%" (-> obj y))
- (format #t "~Tgravity: ~f~%" (-> obj gravity))
- (format #t "~Ttheta: ~f~%" (-> obj theta))
- (format #t "~Tspeed: ~f~%" (-> obj speed))
- (format #t "~Ttime: ~f~%" (-> obj time))
- obj
- )
-
-;; definition for function solve-missile-velocity
-;; INFO: Return type mismatch int vs none.
-(defun solve-missile-velocity ((arg0 trajectory-params) (arg1 float))
- (set! (-> arg0 theta) arg1)
- (let ((f0-4 (* (- (* (-> arg0 x) (tan arg1)) (-> arg0 y)) (/ 2.0 (-> arg0 gravity)))))
- (when (< 0.0 f0-4)
- (set! (-> arg0 time) (sqrtf f0-4))
- (set! (-> arg0 speed) (/ (-> arg0 x) (* (-> arg0 time) (cos arg1))))
- )
- )
- 0
- (none)
- )
-
-;; definition for function mistycannon-find-best-solution
-(defbehavior mistycannon-find-best-solution mistycannon ((arg0 quadratic-solution))
- (let ((v1-0 #t)
- (a1-0 #t)
- (v0-0 -1)
- )
- (let ((f1-0 (-> self tilt min))
- (f0-1 (+ (-> self tilt range) (-> self tilt min)))
- )
- (if (< (-> arg0 s1) f1-0)
- (set! v1-0 #f)
- )
- (if (< f0-1 (-> arg0 s1))
- (set! v1-0 #f)
- )
- (if (< (-> arg0 s2) f1-0)
- (set! a1-0 #f)
- )
- (if (< f0-1 (-> arg0 s2))
- (set! a1-0 #f)
- )
- )
- (if v1-0
- (set! v0-0 0)
- )
- (if a1-0
- (set! v0-0 1)
- )
- (set! a1-0 (and v1-0 a1-0))
- (when a1-0
- (if (< (-> arg0 s1) (-> arg0 s2))
- (set! v0-0 0)
- (set! v0-0 1)
- )
- )
- v0-0
- )
- )
-
-;; definition for function mistycannon-find-trajectory
-(defbehavior mistycannon-find-trajectory mistycannon ((arg0 trajectory-params))
- (set! (-> arg0 time) 0.0)
- (solve-missile-velocity arg0 (-> arg0 theta))
- (none)
- )
-
-;; definition for function mistycannon-do-aim
-;; INFO: Return type mismatch int vs none.
-;; WARN: Expression building failed: Function mistycannon-do-aim has a return type of none, but the expression builder found a return statement.
-(defbehavior mistycannon-do-aim mistycannon ((arg0 vector) (arg1 vector))
- (if (not (-> self postbindinfo-ok))
- (return #f)
- )
- (when (-> self avoid-entity)
- (let ((a1-1 (-> self avoid-entity extra trans)))
- (if (< (vector-vector-distance arg0 a1-1) 122880.0)
- (return #f)
- )
- )
- )
- (let ((gp-0 (new 'stack-no-clear 'trajectory-params)))
- (let ((s4-0 (new 'stack-no-clear 'vector)))
- (vector-! s4-0 arg0 (-> self launch-origin))
- (set! (-> gp-0 x) (vector-xz-length s4-0))
- (set! (-> gp-0 y) (-> s4-0 y))
- )
- (set! (-> gp-0 gravity) (-> *standard-dynamics* gravity-length))
- (set! (-> gp-0 speed) 409600.0)
- (set! (-> gp-0 theta) (-> self target-theta))
- (mistycannon-find-trajectory gp-0)
- (let ((v1-12 (new 'stack-no-clear 'vector))
- (s4-1 (new 'stack-no-clear 'vector))
- )
- (vector-float*! v1-12 arg1 (* 0.4 (+ 2.0 (-> gp-0 time))))
- (vector+! s4-1 arg0 v1-12)
- (let ((f30-0 (* (sqrtf (rand-vu)) (-> self accuracy-range)))
- (f28-1 (* 65536.0 (rand-vu)))
- )
- (+! (-> s4-1 x) (* f30-0 (cos f28-1)))
- (+! (-> s4-1 z) (* f30-0 (sin f28-1)))
- )
- (let ((s5-1 (new 'stack-no-clear 'vector)))
- (vector-! s5-1 s4-1 (-> self launch-origin))
- (let ((f0-19 (atan (-> s5-1 x) (-> s5-1 z))))
- (angle-tracker-seek! (-> self rotate) f0-19)
- )
- (set! (-> gp-0 x) (vector-xz-length s5-1))
- (set! (-> gp-0 y) (-> s5-1 y))
- )
- )
- (mistycannon-find-trajectory gp-0)
- (when (= (-> gp-0 time) 0.0)
- (when (>= (- (-> *display* base-frame-counter) (-> self state-time)) 900)
- (dummy-22 self 409600.0 2.0 20480.0)
- (set! (-> self state-time) (-> *display* base-frame-counter))
- )
- (return #f)
- )
- (when (angle-tracker-seek! (-> self tilt) (-> gp-0 theta))
- (when (>= (- (-> *display* base-frame-counter) (-> self state-time)) 900)
- (dummy-22 self (fmax 163840.0 (fmin 409600.0 (-> gp-0 speed))) (-> gp-0 time) 20480.0)
- (set! (-> self state-time) (-> *display* base-frame-counter))
- )
- )
- )
- 0
- (none)
- )
-
-;; failed to figure out what this is:
-(defstate mistycannon-aim-at-player (mistycannon)
- :enter
- (behavior ()
- (set! (-> self state-time) (-> *display* base-frame-counter))
- (none)
- )
- :trans
- (behavior ()
- (if (not (and (-> self entity) (logtest? (-> self entity extra perm status) (entity-perm-status complete))))
- (go mistycannon-waiting-for-player)
- )
- (if (not (and *target* (>= (-> self fact-info-override idle-distance)
- (vector-vector-distance (-> self root-override trans) (-> *target* control trans))
- )
- )
- )
- (go mistycannon-idle)
- )
- (rider-trans)
- (none)
- )
- :code
- (behavior ()
- (while #t
- (if (< (vector-vector-xz-distance (target-pos 0) (-> self center-point)) (-> self center-point w))
- (mistycannon-do-aim (-> *target* control trans) (-> *target* control transv))
- (mistycannon-do-aim (-> self at-point) (new-stack-vector0))
- )
- (dummy-23 self)
- (suspend)
- )
- (none)
- )
- :post
- (the-as (function none :behavior mistycannon) rider-post)
- )
-
-;; failed to figure out what this is:
-(defstate mistycannon-waiting-for-player (mistycannon)
- :event
- (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block))
- (case arg2
- (('touch)
- (when ((method-of-type touching-shapes-entry prims-touching?)
- (the-as touching-shapes-entry (-> arg3 param 0))
- (-> self root-override)
- (the-as uint 1)
- )
- (let ((v0-1 (the-as object #t)))
- (set! (-> self player-touching-grips?) (the-as symbol v0-1))
- v0-1
- )
- )
- )
- (('change-mode)
- (go mistycannon-player-control)
- )
- )
- )
- :trans
- (behavior ()
- (if (and (-> self entity) (logtest? (-> self entity extra perm status) (entity-perm-status complete)))
- (go mistycannon-aim-at-player)
- )
- (rider-trans)
- (none)
- )
- :code
- (behavior ()
- (set! (-> self player-touching-grips?) #f)
- (while #t
- (let ((f0-0 2730.6667)
- (v1-0 (-> self tilt))
- )
- (if (< f0-0 (the float (sar (shl (the int (+ (-> v1-0 min) (-> v1-0 value))) 48) 48)))
- (angle-tracker-seek! (-> self tilt) 2730.6667)
- )
- )
- (dummy-23 self)
- (when (and (-> self player-touching-grips?) (not (level-hint-displayed?)))
- (set! (-> self player-touching-grips?) #f)
- (hide-hud)
- (level-hint-surpress!)
- (kill-current-level-hint '() '(sidekick voicebox) 'exit)
- (when (and (hud-hidden?) (can-grab-display? (the-as process-taskable self)))
- (let ((gp-0
- (new 'stack 'font-context *font-default-matrix* 32 160 0.0 (font-color default) (font-flags shadow kerning))
- )
- )
- (let ((v1-15 gp-0))
- (set! (-> v1-15 width) (the float 440))
- )
- (let ((v1-16 gp-0))
- (set! (-> v1-16 height) (the float 80))
- )
- (set! (-> gp-0 flags) (font-flags shadow kerning large))
- (print-game-text (lookup-text! *common-text* (game-text-id press-to-use) #f) gp-0 #f 128 22)
- )
- (when (cpad-pressed? 0 circle)
- (while #t
- (send-event *target* 'change-mode 'periscope self)
- (suspend)
- (suspend)
- )
- )
- )
- )
- (suspend)
- )
- (none)
- )
- :post
- (the-as (function none :behavior mistycannon) rider-post)
- )
-
-;; failed to figure out what this is:
-(defstate cam-mistycannon (camera-slave)
- :event
- cam-standard-event-handler
- :enter
- (behavior ()
- (when (not (-> self enter-has-run))
- (set! (-> self blend-from-type) (the-as uint 1))
- (set! (-> self blend-to-type) (the-as uint 1))
- )
- (none)
- )
- :trans
- (behavior ()
- (if (zero? (logand (-> *camera* master-options) 2))
- (cam-slave-go cam-free-floating)
- )
- (none)
- )
- :code
- (behavior ()
- (while #t
- (let ((v1-0 (-> self change-event-from)))
- (set! (-> self trans quad) (-> (the-as mistycannon (-> v1-0 0)) goggles quad))
- (let ((t9-0 matrix-rotate-yx!)
- (a0-1 (-> self tracking))
- (v1-2 (-> (the-as mistycannon (-> v1-0 0)) rotate))
- )
- (t9-0 (the-as matrix a0-1) (the float (sar (shl (the int (+ (-> v1-2 min) (-> v1-2 value))) 48) 48)) 3640.889)
- )
- )
- (suspend)
- )
- (none)
- )
- )
-
-;; failed to figure out what this is:
-(defstate mistycannon-player-control (mistycannon)
- :event
- (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block))
- (case arg2
- (('change-mode)
- (send-event *camera* 'change-state cam-mistycannon 0)
- )
- )
- )
- :exit
- (behavior ()
- (sound-stop (-> self sound-id))
- (sound-stop (-> self aim-sound-id))
- (none)
- )
- :trans
- (behavior ()
- (dummy-23 self)
- (rider-trans)
- (none)
- )
- :code
- (behavior ()
- (send-event *camera* 'change-state cam-mistycannon 0)
- (suspend)
- (set! (-> self state-time) (-> *display* base-frame-counter))
- (let ((gp-0 0)
- (s5-0 0)
- )
- (while #t
- (when *camera-read-analog*
- (let ((f30-0 (analog-input (the-as int (-> *cpad-list* cpads 0 leftx)) 128.0 48.0 110.0 -1.0))
- (f28-0 (analog-input (the-as int (-> *cpad-list* cpads 0 lefty)) 128.0 48.0 110.0 -1.0))
- )
- (rotate! self f30-0)
- (tilt! self (- f28-0))
- (if (or (!= f30-0 0.0) (!= f28-0 0.0))
- (sound-play-by-name (static-sound-name "telescope") (-> self aim-sound-id) 1024 0 0 1 #t)
- (sound-stop (-> self aim-sound-id))
- )
- )
- )
- (when (cpad-pressed? 0 triangle)
- (process-entity-status! self (entity-perm-status bit-3) #t)
- (sound-stop (-> self sound-id))
- (send-event *camera* 'change-to-entity-by-name "camera-111")
- (suspend)
- (while #t
- (let ((a1-8 (new 'stack-no-clear 'event-message-block)))
- (set! (-> a1-8 from) self)
- (set! (-> a1-8 num-params) 0)
- (set! (-> a1-8 message) 'end-mode)
- (when (send-event-function *target* a1-8)
- (send-event *camera* 'change-state *camera-base-mode* 0)
- (process-entity-status! self (entity-perm-status bit-3) #f)
- (go mistycannon-waiting-for-player-to-fuck-off)
- )
- )
- (suspend)
- )
- )
- (let ((v1-45 (and (cpad-hold? 0 x) (>= (- (-> *display* base-frame-counter) (-> self state-time)) 300))))
- (when (zero? s5-0)
- (when v1-45
- (set! gp-0 (seekl gp-0 300 (- (-> *display* base-frame-counter) (-> *display* old-base-frame-counter))))
- (sound-play-by-name
- (static-sound-name "cannon-charge")
- (-> self sound-id)
- 1024
- (the int (* 1524.0 (* 0.008 (the float gp-0))))
- 0
- 1
- #t
- )
- )
- (when (or (= gp-0 300)
- (and (zero? (logand (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons x))) (nonzero? gp-0))
- )
- (let ((gp-1 (+ 50 (the int (* 0.16666667 (the float gp-0))))))
- (level-hint-spawn (game-text-id daxter-get-some) "sksp009f" (the-as entity #f) *entity-pool* (game-task none))
- (dummy-22 self (* 4096.0 (the float gp-1)) 2.0 40960.0)
- )
- (set! (-> self state-time) (-> *display* base-frame-counter))
- (set! gp-0 0)
- (set! s5-0 1)
- (sound-stop (-> self sound-id))
- )
- (if (nonzero? gp-0)
- (debug-percent-bar
- #t
- (bucket-id debug-draw0)
- 192
- 160
- (* 0.0033333334 (the float gp-0))
- (new 'static 'rgba :r #xff :a #x80)
- )
- )
- )
- )
- (if (zero? (logand (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons x)))
- (set! s5-0 0)
- )
- (suspend)
- )
- )
- (none)
- )
- :post
- (the-as (function none :behavior mistycannon) rider-post)
- )
-
-;; failed to figure out what this is:
-(defstate mistycannon-waiting-for-player-to-fuck-off (mistycannon)
- :event
- (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block))
- (let ((v1-0 arg2))
- (the-as object (when (= v1-0 'touch)
- (when ((method-of-type touching-shapes-entry prims-touching?)
- (the-as touching-shapes-entry (-> arg3 param 0))
- (-> self root-override)
- (the-as uint 1)
- )
- (let ((v0-0 (-> *display* base-frame-counter)))
- (set! (-> self state-time) v0-0)
- v0-0
- )
- )
- )
- )
- )
- )
- :enter
- (behavior ()
- (set! (-> self state-time) (-> *display* base-frame-counter))
- (none)
- )
- :trans
- (the-as (function none :behavior mistycannon) rider-trans)
- :code
- (behavior ()
- (while #t
- (suspend)
- (dummy-23 self)
- (if (>= (- (-> *display* base-frame-counter) (-> self state-time)) 300)
- (go mistycannon-waiting-for-player)
- )
- )
- (none)
- )
- :post
- (the-as (function none :behavior mistycannon) rider-post)
- )
-
-;; definition for method 11 of type mistycannon
-;; INFO: Return type mismatch object vs none.
-;; Used lq/sq
-(defmethod init-from-entity! mistycannon ((obj mistycannon) (arg0 entity-actor))
- (local-vars (sv-16 res-tag) (sv-32 res-tag) (sv-48 res-tag))
- (set! (-> obj mask) (logior (process-mask enemy) (-> obj mask)))
- (let ((s4-0 (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-others))))
- (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process))
- (set! (-> s4-0 reaction) default-collision-reaction)
- (set! (-> s4-0 no-reaction)
- (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing)
- )
- (alloc-riders s4-0 1)
- (let ((s3-0 (new 'process 'collide-shape-prim-group s4-0 (the-as uint 2) 0)))
- (set! (-> s3-0 prim-core collide-as) (collide-kind ground-object))
- (set! (-> s3-0 collide-with) (collide-kind target))
- (set! (-> s3-0 prim-core action) (collide-action solid ca-1))
- (set! (-> s3-0 transform-index) 3)
- (set-vector! (-> s3-0 local-sphere) 0.0 20480.0 0.0 40960.0)
- (set-root-prim! s4-0 s3-0)
- (let ((s2-0 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 0))))
- (set! (-> s2-0 prim-core collide-as) (collide-kind ground-object))
- (set! (-> s2-0 collide-with) (collide-kind target))
- (set! (-> s2-0 prim-core action) (collide-action solid ca-1))
- (set! (-> s2-0 prim-core offense) (collide-offense indestructible))
- (set! (-> s2-0 transform-index) 3)
- (set-vector! (-> s2-0 local-sphere) 0.0 20480.0 0.0 40960.0)
- (append-prim s3-0 s2-0)
- )
- (let ((s2-1 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 1))))
- (set! (-> s2-1 prim-core collide-as) (collide-kind enemy))
- (set! (-> s2-1 collide-with) (collide-kind target))
- (set! (-> s2-1 prim-core offense) (collide-offense indestructible))
- (set! (-> s2-1 transform-index) 3)
- (set-vector! (-> s2-1 local-sphere) 0.0 28672.0 -8192.0 4096.0)
- (append-prim s3-0 s2-1)
- )
- )
- (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w)))
- (backup-collide-with-as s4-0)
- (set! (-> obj root-override) s4-0)
- )
- (process-drawable-from-entity! obj arg0)
- (quaternion-identity! (-> obj root-override quat))
- (initialize-skeleton obj *mistycannon-sg* '())
- (logior! (-> obj skel status) 1)
- (update-transforms! (-> obj root-override))
- (set! (-> obj skel prebind-function)
- (the-as (function pointer int process-drawable none) mistycannon-prebind-function)
- )
- (set! (-> obj skel postbind-function) mistycannon-postbind-function)
- (set! (-> obj fact-info-override)
- (new 'process 'fact-info-enemy obj (pickup-type eco-pill-random) (-> *FACT-bank* default-pill-inc))
- )
- (logclear! (-> obj mask) (process-mask actor-pause))
- (let ((f30-0 (res-lump-float arg0 'rotmin :default 16384.0))
- (f28-0 (res-lump-float arg0 'rotmax :default 32768.0))
- (f0-15 (res-lump-float arg0 'rotspeed :default 3640.889))
- )
- (angle-tracker-init-range! (-> obj rotate) f30-0 f28-0 f0-15)
- )
- (let ((f30-1 (res-lump-float arg0 'tiltmin :default -1820.4445))
- (f28-1 (res-lump-float arg0 'tiltmax :default 12743.111))
- (f0-16 (res-lump-float arg0 'tiltspeed :default 3640.889))
- )
- (angle-tracker-init-range! (-> obj tilt) f30-1 f28-1 f0-16)
- )
- (set! (-> obj avoid-entity) (entity-actor-lookup (-> obj entity) 'alt-actor 0))
- (set! (-> obj center-point w) (res-lump-float arg0 'center-radius))
- (cond
- ((= (-> obj center-point w) 0.0)
- (set! (-> obj center-point quad) (-> obj root-override trans quad))
- (set! (-> obj center-point w) (-> obj fact-info-override idle-distance))
- )
- (else
- (set! sv-16 (new 'static 'res-tag))
- (let ((v1-64 (res-lump-data arg0 'center-point pointer :tag-ptr (& sv-16))))
- (set! (-> obj center-point x) (if (and v1-64 (< 0.0 (the float (-> sv-16 elt-count))))
- (-> (the-as (pointer float) v1-64))
- 0.0
- )
- )
- )
- (set! sv-32 (new 'static 'res-tag))
- (let ((v1-67 (res-lump-data arg0 'center-point (pointer float) :tag-ptr (& sv-32))))
- (set! (-> obj center-point y) (if (and v1-67 (< 1.0 (the float (-> sv-32 elt-count))))
- (-> v1-67 1)
- 0.0
- )
- )
- )
- (set! sv-48 (new 'static 'res-tag))
- (let ((v1-70 (res-lump-data arg0 'center-point (pointer float) :tag-ptr (& sv-48))))
- (set! (-> obj center-point z) (if (and v1-70 (< 2.0 (the float (-> sv-48 elt-count))))
- (-> v1-70 2)
- 0.0
- )
- )
- )
- )
- )
- (set! (-> obj accuracy-range) 16384.0)
- (mistycannon-pick-random-target-point)
- (set! (-> obj part) (create-launch-control (-> *part-group-id-table* 119) obj))
- (set! (-> obj part-timer) (the-as uint (+ (-> *display* base-frame-counter) -3000)))
- (set! (-> obj postbindinfo-ok) #f)
- (let ((v1-79 (-> obj rotate)))
- (set! (-> obj last-known-rotation)
- (the float (sar (shl (the int (+ (-> v1-79 min) (-> v1-79 value))) 48) 48))
- )
- )
- (set! (-> obj sound-id) (new-sound-id))
- (set! (-> obj aim-sound-id) (new-sound-id))
- (if (and (-> obj entity) (logtest? (-> obj entity extra perm status) (entity-perm-status complete)))
- (go mistycannon-idle)
- (go mistycannon-waiting-for-player)
- )
- (none)
- )
diff --git a/test/decompiler/reference/levels/common/nav-enemy-h_REF.gc b/test/decompiler/reference/levels/common/nav-enemy-h_REF.gc
index 23401a7afb..0bb16addce 100644
--- a/test/decompiler/reference/levels/common/nav-enemy-h_REF.gc
+++ b/test/decompiler/reference/levels/common/nav-enemy-h_REF.gc
@@ -126,7 +126,7 @@
(frustration-point vector :inline :offset-assert 208)
(jump-dest vector :inline :offset-assert 224)
(jump-trajectory trajectory :inline :offset-assert 240)
- (jump-time uint64 :offset-assert 280)
+ (jump-time int64 :offset-assert 280)
(nav-info nav-enemy-info :offset-assert 288)
(target-speed float :offset-assert 292)
(momentum-speed float :offset-assert 296)
@@ -182,31 +182,31 @@
(TODO-RENAME-48 (_type_) none 48)
(TODO-RENAME-49 (_type_ nav-enemy-info) float 49)
(TODO-RENAME-50 (_type_ vector) symbol 50)
- (dummy-51 (_type_) object 51)
+ (dummy-51 (_type_) none 51)
(dummy-52 (_type_ vector) symbol 52)
(dummy-53 (_type_) symbol 53)
- (dummy-54 (_type_) none 54)
- (dummy-55 (_type_) none 55)
- (set-jump-height-factor! (_type_ int) float 56)
- (dummy-57 (_type_) vector 57)
- (dummy-58 (_type_) vector 58)
+ (dummy-54 (_type_ vector) symbol 54)
+ (dummy-55 (_type_) symbol 55)
+ (set-jump-height-factor! (_type_ int) none 56)
+ (dummy-57 (_type_) none 57)
+ (dummy-58 (_type_) none 58)
(TODO-RENAME-59 (_type_) none 59)
- (dummy-60 (_type_ object) symbol 60)
- (dummy-61 (_type_) none 61)
- (dummy-62 (_type_) none 62)
- (dummy-63 (_type_) none 63)
- (dummy-64 (_type_) none 64)
- (dummy-65 (_type_) none 65)
- (dummy-66 (_type_) none 66)
- (dummy-67 (_type_) symbol 67)
- (dummy-68 (_type_) none 68)
- (dummy-69 (_type_) none 69)
- (dummy-70 (_type_) none 70)
- (dummy-71 () _type_ :state 71)
+ (dummy-60 (_type_ symbol) symbol 60)
+ (snow-bunny-attack () _type_ :state 61)
+ (snow-bunny-chase-hop () _type_ :state 62)
+ (snow-bunny-defend () _type_ :state 63)
+ (dummy-64 () _type_ :state 64)
+ (snow-bunny-lunge () _type_ :state 65)
+ (snow-bunny-nav-resume () _type_ :state 66)
+ (snow-bunny-patrol-hop () _type_ :state 67)
+ (snow-bunny-patrol-idle () _type_ :state 68)
+ (dummy-69 () _type_ :state 69)
+ (snow-bunny-retreat-hop () _type_ :state 70)
+ (snow-bunny-tune-spheres () _type_ :state 71)
(nav-enemy-touch-handler (_type_ process event-message-block) object 72)
(nav-enemy-attack-handler (_type_ process event-message-block) object 73)
(nav-enemy-jump-blocked () _type_ :state 74)
- (dummy-75 (_type_) none 75)
+ (dummy-75 () _type_ :state 75)
)
)
diff --git a/test/decompiler/reference/levels/common/nav-enemy_REF.gc b/test/decompiler/reference/levels/common/nav-enemy_REF.gc
index 065582522f..bb6fe256c4 100644
--- a/test/decompiler/reference/levels/common/nav-enemy_REF.gc
+++ b/test/decompiler/reference/levels/common/nav-enemy_REF.gc
@@ -1709,7 +1709,7 @@ nav-enemy-default-event-handler
)
)
(when (logtest? (-> self nav-enemy-flags) 8)
- (let ((f30-0 (the float (- (-> *display* base-frame-counter) (the-as int (-> self jump-time))))))
+ (let ((f30-0 (the float (- (-> *display* base-frame-counter) (-> self jump-time)))))
(let ((v1-12 (eval-position! (-> self jump-trajectory) f30-0 (new 'stack-no-clear 'vector))))
(set! (-> self collide-info trans quad) (-> v1-12 quad))
)
@@ -1804,7 +1804,7 @@ nav-enemy-default-event-handler
)
)
(set! (-> self collide-info status) (logand -8 (-> self collide-info status)))
- (set! (-> self jump-time) (the-as uint (-> *display* base-frame-counter)))
+ (set! (-> self jump-time) (-> *display* base-frame-counter))
(logior! (-> self nav-enemy-flags) 8)
(cond
((logtest? (-> self nav-enemy-flags) 1024)
@@ -1848,9 +1848,7 @@ nav-enemy-default-event-handler
)
)
)
- (while (< (the float (- (-> *display* base-frame-counter) (the-as int (-> self jump-time))))
- (-> self jump-trajectory time)
- )
+ (while (< (the float (- (-> *display* base-frame-counter) (-> self jump-time))) (-> self jump-trajectory time))
(suspend)
(let ((a0-36 (-> self skel root-channel 0)))
(set! (-> a0-36 param 0) (the float (+ (-> a0-36 frame-group data 0 length) -1)))
diff --git a/test/decompiler/reference/levels/common/plat-eco_REF.gc b/test/decompiler/reference/levels/common/plat-eco_REF.gc
new file mode 100644
index 0000000000..78b43e616d
--- /dev/null
+++ b/test/decompiler/reference/levels/common/plat-eco_REF.gc
@@ -0,0 +1,363 @@
+;;-*-Lisp-*-
+(in-package goal)
+
+;; definition of type plat-eco
+(deftype plat-eco (plat)
+ ((notice-dist float :offset-assert 264)
+ (sync-offset-dest float :offset-assert 268)
+ (sync-offset-faux float :offset-assert 272)
+ (sync-linear-val float :offset-assert 276)
+ (target handle :offset-assert 280)
+ (unlit-look lod-set :inline :offset-assert 288)
+ (lit-look lod-set :inline :offset-assert 324)
+ )
+ :heap-base #x100
+ :method-count-assert 33
+ :size-assert #x165
+ :flag-assert #x2101000165
+ (:methods
+ (notice-blue (handle) _type_ :replace :state 29)
+ )
+ )
+
+;; definition for method 3 of type plat-eco
+(defmethod inspect plat-eco ((obj plat-eco))
+ (let ((t9-0 (method-of-type plat inspect)))
+ (t9-0 obj)
+ )
+ (format #t "~T~Tnotice-dist: ~f~%" (-> obj notice-dist))
+ (format #t "~T~Tsync-offset-dest: ~f~%" (-> obj sync-offset-dest))
+ (format #t "~T~Tsync-offset-faux: ~f~%" (-> obj sync-offset-faux))
+ (format #t "~T~Tsync-linear-val: ~f~%" (-> obj sync-linear-val))
+ (format #t "~T~Ttarget: ~D~%" (-> obj target))
+ (format #t "~T~Tunlit-look: #~%" (-> obj unlit-look))
+ (format #t "~T~Tlit-look: #~%" (-> obj lit-look))
+ obj
+ )
+
+;; failed to figure out what this is:
+(defskelgroup *plat-eco-unlit-sg* plat-eco
+ 0
+ 8
+ ((1 (meters 20)) (2 (meters 40)) (3 (meters 999999)))
+ :bounds (static-spherem 0 0 0 3)
+ :longest-edge (meters 0)
+ )
+
+;; failed to figure out what this is:
+(defskelgroup *plat-eco-lit-sg* plat-eco
+ 0
+ 8
+ ((5 (meters 20)) (6 (meters 40)) (7 (meters 999999)))
+ :bounds (static-spherem 0 0 0 3)
+ :longest-edge (meters 0)
+ )
+
+;; failed to figure out what this is:
+(defstate plat-idle (plat-eco)
+ :virtual #t
+ :event
+ (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block))
+ (case arg2
+ (('wake)
+ (go-virtual plat-path-active (the-as plat #f))
+ )
+ (('eco-blue)
+ (go-virtual notice-blue (process->handle arg0))
+ )
+ (('ridden 'edge-grabbed)
+ (let ((a1-6 (new 'stack-no-clear 'event-message-block)))
+ (set! (-> a1-6 from) self)
+ (set! (-> a1-6 num-params) 2)
+ (set! (-> a1-6 message) 'query)
+ (set! (-> a1-6 param 0) (the-as uint 'powerup))
+ (set! (-> a1-6 param 1) (the-as uint 3))
+ (when (send-event-function *target* a1-6)
+ (send-to-all (-> self link) 'wake)
+ (go-virtual plat-path-active (the-as plat #f))
+ )
+ )
+ )
+ )
+ )
+ :enter
+ (behavior ()
+ (lods-assign! (-> self draw) (-> self unlit-look))
+ (none)
+ )
+ :trans
+ (behavior ()
+ (when (and (and *target*
+ (>= (-> self notice-dist) (vector-vector-distance (-> self root-override trans) (-> *target* control trans)))
+ )
+ (send-event *target* 'query 'powerup 3)
+ )
+ (send-to-all (-> self link) 'wake)
+ (go-virtual plat-path-active (the-as plat #f))
+ )
+ (if (and *target*
+ (>= (-> self notice-dist) (vector-vector-distance (-> self root-override trans) (-> *target* control trans)))
+ )
+ (level-hint-spawn
+ (game-text-id daxter-blue-eco-plat-tutorial)
+ "sksp0073"
+ (the-as entity #f)
+ *entity-pool*
+ (game-task none)
+ )
+ )
+ (none)
+ )
+ :code
+ (behavior ()
+ (ja-post)
+ (update-transforms! (-> self root-override))
+ (anim-loop)
+ (none)
+ )
+ :post
+ (the-as (function none :behavior plat-eco) ja-post)
+ )
+
+;; failed to figure out what this is:
+(defstate notice-blue (plat-eco)
+ :virtual override
+ :event
+ (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block))
+ (case arg2
+ (('wake)
+ (sound-play-by-name
+ (static-sound-name "blue-eco-on")
+ (new-sound-id)
+ 1024
+ 0
+ 0
+ 1
+ (the-as symbol (-> self root-override trans))
+ )
+ (go-virtual plat-path-active (the-as plat #f))
+ )
+ (('ridden 'edge-grabbed)
+ (let ((a1-3 (new 'stack-no-clear 'event-message-block)))
+ (set! (-> a1-3 from) self)
+ (set! (-> a1-3 num-params) 2)
+ (set! (-> a1-3 message) 'query)
+ (set! (-> a1-3 param 0) (the-as uint 'powerup))
+ (set! (-> a1-3 param 1) (the-as uint 3))
+ (when (send-event-function *target* a1-3)
+ (send-to-all (-> self link) 'wake)
+ (go-virtual plat-path-active (the-as plat #f))
+ )
+ )
+ )
+ )
+ )
+ :trans
+ (behavior ()
+ ((-> (method-of-object self plat-idle) trans))
+ (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) 'query)
+ (set! (-> a1-0 param 0) (the-as uint 'powerup))
+ (set! (-> a1-0 param 1) (the-as uint 3))
+ (if (and (not (send-event-function *target* a1-0))
+ (begin (logior! (-> self mask) (process-mask sleep-code)) (not (-> self bouncing)))
+ )
+ (go-virtual plat-idle)
+ )
+ )
+ (none)
+ )
+ :code
+ (behavior ((arg0 handle))
+ (set! (-> self target) arg0)
+ (while #t
+ (let* ((gp-0 (handle->process (-> self target)))
+ (v1-4 (if (and (nonzero? gp-0) (type-type? (-> gp-0 type) process-drawable))
+ gp-0
+ )
+ )
+ )
+ (when v1-4
+ (let* ((gp-1 (-> (the-as process-drawable v1-4) root))
+ (v1-6 (if (and (nonzero? gp-1) (type-type? (-> gp-1 type) collide-shape))
+ gp-1
+ )
+ )
+ )
+ (when v1-6
+ (let* ((s5-0 (-> self root-override root-prim prim-core))
+ (a1-3 (-> (the-as collide-shape v1-6) root-prim prim-core))
+ (f30-0 (vector-vector-distance (the-as vector s5-0) (the-as vector a1-3)))
+ )
+ (when (rand-vu-percent? 0.5)
+ (let ((gp-2 (new 'stack-no-clear 'vector)))
+ (set! (-> gp-2 quad) (-> s5-0 world-sphere quad))
+ (dotimes (s5-1 3)
+ (+! (-> gp-2 data s5-1) (rand-vu-float-range -5324.8 5324.8))
+ )
+ (eco-blue-glow gp-2)
+ )
+ )
+ (set! (-> self bouncing) #t)
+ (activate!
+ (-> self smush)
+ (lerp-scale
+ (rand-vu-float-range 1.1 1.3)
+ (rand-vu-float-range 1.0 1.02)
+ f30-0
+ (-> *FACT-bank* suck-suck-dist)
+ (-> *FACT-bank* suck-bounce-dist)
+ )
+ 60
+ 60
+ 1.0
+ 1.0
+ )
+ )
+ )
+ )
+ )
+ )
+ (suspend)
+ )
+ (none)
+ )
+ :post
+ (behavior ()
+ (plat-trans)
+ (plat-post)
+ (none)
+ )
+ )
+
+;; failed to figure out what this is:
+(defstate plat-path-active (plat-eco)
+ :virtual #t
+ :enter
+ (behavior ((arg0 plat))
+ (lods-assign! (-> self draw) (-> self lit-look))
+ (sync-now! (-> self sync) (-> self sync-linear-val))
+ (set! (-> self sync-offset-faux) (-> self sync offset))
+ (let* ((f0-3 (the float (-> self sync period)))
+ (f1-1 (* 0.5 f0-3))
+ )
+ (if (< f1-1 (- (-> self sync-offset-dest) (-> self sync-offset-faux)))
+ (+! (-> self sync-offset-faux) f0-3)
+ )
+ (if (< f1-1 (- (-> self sync-offset-faux) (-> self sync-offset-dest)))
+ (set! (-> self sync-offset-faux) (- (-> self sync-offset-faux) f0-3))
+ )
+ )
+ (cond
+ (arg0
+ (let ((f0-5 (-> self sync-offset-dest)))
+ (set! (-> self sync offset) f0-5)
+ (set! (-> self sync-offset-faux) f0-5)
+ )
+ )
+ (else
+ (process-entity-status! self (entity-perm-status complete) #t)
+ (dotimes (gp-1 5)
+ (spawn-projectile-blue *target*)
+ )
+ )
+ )
+ (none)
+ )
+ :trans
+ (behavior ()
+ (when (!= (-> self sync-offset-faux) (-> self sync-offset-dest))
+ (set! (-> self sync-offset-faux)
+ (seek (-> self sync-offset-faux) (-> self sync-offset-dest) (* 12.0 (-> *display* seconds-per-frame)))
+ )
+ (let* ((f0-7 (the float (-> self sync period)))
+ (f1-3 (+ (-> self sync-offset-faux) f0-7))
+ )
+ (set! (-> self sync offset) (- f1-3 (* (the float (the int (/ f1-3 f0-7))) f0-7)))
+ )
+ )
+ ((-> (method-of-type plat plat-path-active) trans))
+ (none)
+ )
+ )
+
+;; definition for method 24 of type plat-eco
+;; INFO: Return type mismatch int vs none.
+(defmethod dummy-24 plat-eco ((obj plat-eco))
+ (let ((s5-0 (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player))))
+ (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process))
+ (set! (-> s5-0 reaction) default-collision-reaction)
+ (set! (-> s5-0 no-reaction)
+ (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing)
+ )
+ (alloc-riders s5-0 1)
+ (let ((s4-0 (new 'process 'collide-shape-prim-mesh s5-0 (the-as uint 0) (the-as uint 0))))
+ (set! (-> s4-0 prim-core collide-as) (collide-kind ground-object blue-eco-suck))
+ (set! (-> s4-0 collide-with) (collide-kind target))
+ (set! (-> s4-0 prim-core action) (collide-action solid ca-1))
+ (set! (-> s4-0 prim-core offense) (collide-offense indestructible))
+ (set! (-> s4-0 transform-index) 0)
+ (set-vector! (-> s4-0 local-sphere) 0.0 -1228.8 0.0 13926.4)
+ (set-root-prim! s5-0 s4-0)
+ )
+ (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w)))
+ (backup-collide-with-as s5-0)
+ (set! (-> obj root-override) s5-0)
+ )
+ 0
+ (none)
+ )
+
+;; definition for method 23 of type plat-eco
+(defmethod get-unlit-skel plat-eco ((obj plat-eco))
+ *plat-eco-unlit-sg*
+ )
+
+;; definition for method 27 of type plat-eco
+(defmethod get-lit-skel plat-eco ((obj plat-eco))
+ *plat-eco-lit-sg*
+ )
+
+;; definition for method 11 of type plat-eco
+;; INFO: Return type mismatch object vs none.
+(defmethod init-from-entity! plat-eco ((obj plat-eco) (arg0 entity-actor))
+ (set! (-> obj mask) (logior (process-mask platform) (-> obj mask)))
+ (set! (-> obj notice-dist) (res-lump-float arg0 'notice-dist :default -1.0))
+ (set! (-> obj link) (new 'process 'actor-link-info obj))
+ (dummy-24 obj)
+ (process-drawable-from-entity! obj arg0)
+ (let ((s4-0 (get-unlit-skel obj))
+ (s5-1 (get-lit-skel obj))
+ )
+ (initialize-skeleton obj s4-0 '())
+ (dummy-9 (-> obj unlit-look) s4-0 (-> obj draw art-group) (-> obj entity))
+ (dummy-9 (-> obj lit-look) s5-1 (-> obj draw art-group) (-> obj entity))
+ )
+ (logclear! (-> obj mask) (process-mask actor-pause))
+ (update-transforms! (-> obj root-override))
+ (set! (-> obj part) (create-launch-control (-> *part-group-id-table* 107) obj))
+ (set! (-> obj path) (new 'process 'curve-control obj 'path -1000000000.0))
+ (logior! (-> obj path flags) (path-control-flag display draw-line draw-point draw-text))
+ (set! (-> obj fact)
+ (new 'process 'fact-info obj (pickup-type eco-pill-random) (-> *FACT-bank* default-pill-inc))
+ )
+ (load-params! (-> obj sync) obj (the-as uint 3000) 0.0 0.15 0.15)
+ (set! (-> obj sync-offset-dest) (-> obj sync offset))
+ (set! (-> obj sync-linear-val) (get-phase-offset (-> obj sync)))
+ (sync-now! (-> obj sync) (-> obj sync-linear-val))
+ (set! (-> obj sync-offset-faux) (-> obj sync offset))
+ (set! (-> obj path-pos) (get-current-phase-with-mirror (-> obj sync)))
+ (eval-path-curve! (-> obj path) (-> obj root-override trans) (-> obj path-pos) 'interp)
+ (set! (-> obj sound-id) (new-sound-id))
+ (dummy-26 obj)
+ (dummy-21 obj)
+ (if (or (and (-> obj entity) (logtest? (-> obj entity extra perm status) (entity-perm-status complete)))
+ (< (-> obj notice-dist) 0.0)
+ )
+ (go (method-of-object obj plat-path-active) (the-as plat #t))
+ (go (method-of-object obj plat-idle))
+ )
+ (none)
+ )
diff --git a/test/decompiler/reference/levels/common/static-screen_REF.gc b/test/decompiler/reference/levels/common/static-screen_REF.gc
deleted file mode 100644
index f305d97f01..0000000000
--- a/test/decompiler/reference/levels/common/static-screen_REF.gc
+++ /dev/null
@@ -1,189 +0,0 @@
-;;-*-Lisp-*-
-(in-package goal)
-
-;; definition of type static-screen
-(deftype static-screen (process)
- ((part sparticle-launch-control 1 :offset-assert 112)
- (state-time uint64 :offset-assert 120)
- )
- :heap-base #x10
- :method-count-assert 15
- :size-assert #x80
- :flag-assert #xf00100080
- (:methods
- (idle (int int symbol) _type_ :state 14)
- )
- )
-
-;; definition for method 3 of type static-screen
-(defmethod inspect static-screen ((obj static-screen))
- (let ((t9-0 (method-of-type process inspect)))
- (t9-0 obj)
- )
- (format #t "~T~Tpart[1] @ #x~X~%" (-> obj stack))
- (format #t "~T~Tstate-time: ~D~%" (-> obj state-time))
- obj
- )
-
-;; definition for method 7 of type static-screen
-;; INFO: Return type mismatch process vs static-screen.
-(defmethod relocate static-screen ((obj static-screen) (arg0 int))
- (let ((v1-0 *kernel-context*))
- (set! (-> v1-0 relocating-process) obj)
- (set! (-> v1-0 relocating-min) (the-as int (&-> obj type)))
- (set! (-> v1-0 relocating-max)
- (the-as int (+ (+ (-> obj allocated-length) -4 (-> process size)) (the-as int obj)))
- )
- (set! (-> v1-0 relocating-offset) arg0)
- )
- (dotimes (v1-2 1)
- (if (nonzero? (-> obj part v1-2))
- (&+! (-> obj part v1-2) arg0)
- )
- )
- (the-as static-screen ((method-of-type process relocate) obj arg0))
- )
-
-;; definition for method 10 of type static-screen
-(defmethod deactivate static-screen ((obj static-screen))
- (dotimes (s5-0 1)
- (if (nonzero? (-> obj part s5-0))
- (kill-and-free-particles (-> obj part s5-0))
- )
- )
- ((method-of-type process deactivate) obj)
- (none)
- )
-
-;; failed to figure out what this is:
-(defpart 2966
- :init-specs
- ((sp-tex spt-texture (new 'static 'texture-id :page #x5c6))
- (sp-flt spt-num 1.0)
- (sp-flt spt-y (meters 1.18))
- (sp-flt spt-scale-x (meters 15))
- (sp-flt spt-scale-y (meters 6.5))
- (sp-flt spt-r 128.0)
- (sp-flt spt-g 128.0)
- (sp-flt spt-b 128.0)
- (sp-flt spt-a 128.0)
- (sp-int spt-timer -1)
- (sp-cpuinfo-flags bit2 bit9 bit13)
- )
- )
-
-;; failed to figure out what this is:
-(defpart 2967
- :init-specs
- ((sp-tex spt-texture (new 'static 'texture-id :index #x1 :page #x5c6))
- (sp-flt spt-num 1.0)
- (sp-flt spt-y (meters -1.264))
- (sp-flt spt-scale-x (meters 15))
- (sp-flt spt-scale-y (meters 3.25))
- (sp-flt spt-r 128.0)
- (sp-flt spt-g 128.0)
- (sp-flt spt-b 128.0)
- (sp-flt spt-a 128.0)
- (sp-int spt-timer -1)
- (sp-cpuinfo-flags bit2 bit9 bit13)
- )
- )
-
-;; failed to figure out what this is:
-(defpart 2968
- :init-specs
- ((sp-tex spt-texture (new 'static 'texture-id :index #x2 :page #x5c6))
- (sp-flt spt-num 1.0)
- (sp-flt spt-y (meters -2.482))
- (sp-flt spt-scale-x (meters 15))
- (sp-flt spt-scale-y (meters 1.625))
- (sp-flt spt-r 128.0)
- (sp-flt spt-g 128.0)
- (sp-flt spt-b 128.0)
- (sp-flt spt-a 128.0)
- (sp-int spt-timer -1)
- (sp-cpuinfo-flags bit2 bit9 bit13)
- )
- )
-
-;; failed to figure out what this is:
-(defpartgroup group-part-screen1
- :id 707
- :flags (screen-space)
- :bounds (static-bspherem 0 0 0 1)
- :parts
- ((sp-item 2966 :flags (launch-asap)) (sp-item 2967 :flags (launch-asap)) (sp-item 2968 :flags (launch-asap)))
- )
-
-;; failed to figure out what this is:
-(defstate idle (static-screen)
- :virtual #t
- :enter
- (behavior ((arg0 int) (arg1 int) (arg2 symbol))
- (set! (-> *setting-control* current bg-a) 1.0)
- (set! (-> *setting-control* default bg-a) 0.0)
- (push-setting! *setting-control* self 'common-page 'set 0.0 (ash 1 (+ arg0 1)))
- (none)
- )
- :trans
- (behavior ()
- (hide-hud-quick)
- (spawn (-> self part 0) *zero-vector*)
- 0
- (none)
- )
- :code
- (behavior ((arg0 int) (arg1 int) (arg2 symbol))
- (local-vars (v1-6 symbol))
- (set! (-> self state-time) (the-as uint (-> *display* base-frame-counter)))
- (until v1-6
- (suspend)
- (set! v1-6
- (or (and (> arg1 0) (>= (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) arg1))
- (and arg2
- (>= (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) 300)
- (cpad-pressed? 0 select start triangle circle x square)
- )
- )
- )
- )
- (set! (-> *setting-control* default bg-a) 1.0)
- (while (!= (-> *setting-control* current bg-a) (-> *setting-control* default bg-a))
- (suspend)
- )
- (clear-pending-settings-from-process *setting-control* self 'common-page)
- (suspend)
- 0
- (none)
- )
- )
-
-;; definition for function static-screen-init-by-other
-;; INFO: Return type mismatch int vs none.
-(defbehavior static-screen-init-by-other static-screen ((arg0 int) (arg1 int) (arg2 int) (arg3 int) (arg4 int) (arg5 symbol))
- (let ((s3-0 (lookup-part-group-by-name "group-part-screen1")))
- (when (and s3-0 (nonzero? s3-0) (type-type? (-> s3-0 type) sparticle-launch-group))
- (set! (-> *part-id-table* 2966 init-specs 0 initial-valuef) (the-as float arg1))
- (set! (-> *part-id-table* 2967 init-specs 0 initial-valuef) (the-as float arg2))
- (set! (-> *part-id-table* 2968 init-specs 0 initial-valuef) (the-as float arg3))
- (set! (-> self part 0) (create-launch-control (the-as sparticle-launch-group s3-0) self))
- (go-virtual idle arg0 arg4 arg5)
- )
- )
- 0
- (none)
- )
-
-;; definition for function static-screen-spawn
-;; Used lq/sq
-(defun static-screen-spawn ((arg0 int) (arg1 int) (arg2 int) (arg3 int) (arg4 int) (arg5 symbol) (arg6 target))
- (local-vars (sv-16 process))
- (set! sv-16 (get-process *default-dead-pool* static-screen #x4000))
- (when sv-16
- (let ((t9-1 (method-of-type static-screen activate)))
- (t9-1 (the-as static-screen sv-16) arg6 'static-screen (the-as pointer #x70004000))
- )
- (run-now-in-process sv-16 static-screen-init-by-other arg0 arg1 arg2 arg3 arg4 arg5)
- (-> sv-16 ppointer)
- )
- )
diff --git a/test/decompiler/reference/levels/common/ticky_REF.gc b/test/decompiler/reference/levels/common/ticky_REF.gc
index 84acd17560..2ea205dccc 100644
--- a/test/decompiler/reference/levels/common/ticky_REF.gc
+++ b/test/decompiler/reference/levels/common/ticky_REF.gc
@@ -12,8 +12,8 @@
:size-assert #x20
:flag-assert #xc00000020
(:methods
- (sleep (_type_ uint) none 9)
- (reached-delay? (_type_ uint) symbol 10)
+ (sleep (_type_ int) none 9)
+ (reached-delay? (_type_ int) symbol 10)
(completed? (_type_) symbol 11)
)
)
@@ -30,10 +30,10 @@
;; definition for method 9 of type ticky
;; INFO: Return type mismatch int vs none.
-(defmethod sleep ticky ((obj ticky) (arg0 uint))
+(defmethod sleep ticky ((obj ticky) (arg0 int))
(set! (-> obj starting-time) (-> *display* base-frame-counter))
- (set! (-> obj delay-til-timeout) (the-as int arg0))
- (set! (-> obj delay-til-ramp) (the-as int (max 0 (the-as int (+ arg0 -1200)))))
+ (set! (-> obj delay-til-timeout) arg0)
+ (set! (-> obj delay-til-ramp) (max 0 (+ arg0 -1200)))
(set! (-> obj last-tick-time) 0)
0
(none)
@@ -68,6 +68,6 @@
)
;; definition for method 10 of type ticky
-(defmethod reached-delay? ticky ((obj ticky) (arg0 uint))
- (>= (- (-> *display* base-frame-counter) (-> obj starting-time)) (the-as int arg0))
+(defmethod reached-delay? ticky ((obj ticky) (arg0 int))
+ (>= (- (-> *display* base-frame-counter) (-> obj starting-time)) arg0)
)
diff --git a/test/decompiler/reference/levels/darkcave/darkcave-obs_REF.gc b/test/decompiler/reference/levels/darkcave/darkcave-obs_REF.gc
index 98dea78ab3..b42c6b5f16 100644
--- a/test/decompiler/reference/levels/darkcave/darkcave-obs_REF.gc
+++ b/test/decompiler/reference/levels/darkcave/darkcave-obs_REF.gc
@@ -9,11 +9,11 @@
(glow-u float :offset-assert 184)
(glow-wf-period int32 :offset-assert 188)
(glow-wf-offset int32 :offset-assert 192)
- (prev-compute-glow-time uint64 :offset-assert 200)
- (start-fade-time uint64 :offset-assert 208)
- (end-fade-time uint64 :offset-assert 216)
- (activated-time uint64 :offset-assert 224)
- (last-updated-user-lighting uint64 :offset-assert 232)
+ (prev-compute-glow-time int64 :offset-assert 200)
+ (start-fade-time int64 :offset-assert 208)
+ (end-fade-time int64 :offset-assert 216)
+ (activated-time int64 :offset-assert 224)
+ (last-updated-user-lighting int64 :offset-assert 232)
(player-attack-id uint64 :offset-assert 240)
(on-color-mult vector :inline :offset-assert 256)
(on-color-emissive vector :inline :offset-assert 272)
@@ -72,7 +72,7 @@
(when (-> obj is-master?)
(let ((v1-2 (-> *display* base-frame-counter)))
(when (!= (-> obj last-updated-user-lighting) v1-2)
- (set! (-> obj last-updated-user-lighting) (the-as uint v1-2))
+ (set! (-> obj last-updated-user-lighting) v1-2)
(execute-connections *cavecrystal-light-control*)
)
)
@@ -82,8 +82,8 @@
;; definition for method 21 of type cavecrystal
(defmethod compute-glow cavecrystal ((obj cavecrystal))
- (set! (-> obj prev-compute-glow-time) (the-as uint (-> *display* game-frame-counter)))
- (let* ((gp-1 (max 1 (the-as int (+ (- 1 (the-as int (-> obj activated-time))) (-> *display* game-frame-counter)))))
+ (set! (-> obj prev-compute-glow-time) (-> *display* game-frame-counter))
+ (let* ((gp-1 (max 1 (+ (- 1 (-> obj activated-time)) (-> *display* game-frame-counter))))
(f0-2
(/ (the float (mod (+ (-> *display* base-frame-counter) (-> obj glow-wf-offset)) (-> obj glow-wf-period)))
(the float (-> obj glow-wf-period))
@@ -92,17 +92,17 @@
(f30-1 (* 0.1 (cos (* 65536.0 f0-2))))
)
(cond
- ((>= 20 (the-as int gp-1))
+ ((>= 20 gp-1)
(let ((v1-11 (* 0.05 (the float gp-1))))
(fmax 0.0 (fmin 2.0 (+ (* 2.0 v1-11) (* v1-11 f30-1))))
)
)
- ((>= 180 (the-as int gp-1))
+ ((>= 180 gp-1)
(let ((a2-0 (* 0.00625 (the float (+ gp-1 -20)))))
(fmin 2.0 (+ (lerp 2.0 1.0 a2-0) f30-1))
)
)
- ((>= (the-as int (-> obj start-fade-time)) (the-as int gp-1))
+ ((>= (-> obj start-fade-time) gp-1)
(+ 1.0 f30-1)
)
(else
@@ -157,7 +157,7 @@
(cond
((!= v1-1 (-> self player-attack-id))
(set! (-> self player-attack-id) v1-1)
- (set! (-> self activated-time) (the-as uint (-> *display* game-frame-counter)))
+ (set! (-> self activated-time) (-> *display* game-frame-counter))
#t
)
(else
@@ -172,8 +172,8 @@
:enter
(behavior ()
(logclear! (-> self mask) (process-mask actor-pause))
- (set! (-> self activated-time) (the-as uint (-> *display* game-frame-counter)))
- (set! (-> self prev-compute-glow-time) (the-as uint (-> *display* game-frame-counter)))
+ (set! (-> self activated-time) (-> *display* game-frame-counter))
+ (set! (-> self prev-compute-glow-time) (-> *display* game-frame-counter))
(none)
)
:exit
@@ -248,7 +248,7 @@
(defmethod init-from-entity! cavecrystal ((obj cavecrystal) (arg0 entity-actor))
(set! (-> obj glow-u) 0.0)
(set! (-> obj player-attack-id) (the-as uint 0))
- (set! (-> obj last-updated-user-lighting) (the-as uint 0))
+ (set! (-> obj last-updated-user-lighting) 0)
(set-vector! (-> obj off-color-mult) 0.0 0.0 0.0 1.0)
(set-vector! (-> obj off-color-emissive) 0.0 0.0 0.0 0.0)
(set-vector! (-> obj on-color-mult) 1.0 1.0 1.0 1.0)
@@ -275,9 +275,7 @@
(if (-> obj is-master?)
(logclear! (-> obj mask) (process-mask actor-pause))
)
- (set! (-> obj start-fade-time)
- (the-as uint (the int (* 300.0 (res-lump-float (-> obj entity) 'timeout :default 8.0))))
- )
+ (set! (-> obj start-fade-time) (the int (* 300.0 (res-lump-float (-> obj entity) 'timeout :default 8.0))))
(process-drawable-from-entity! obj arg0)
(initialize-skeleton obj *cavecrystal-sg* '())
(nav-mesh-connect obj (-> obj root-override) (the-as nav-control #f))
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 a40c3cc694..0b9c4d0deb 100644
--- a/test/decompiler/reference/levels/finalboss/green-eco-lurker_REF.gc
+++ b/test/decompiler/reference/levels/finalboss/green-eco-lurker_REF.gc
@@ -515,9 +515,9 @@
(set! (-> self state-time) (-> *display* base-frame-counter))
(set! (-> self played-sound?) #f)
(set! (-> self sound-delay) (nav-enemy-rnd-int-range 30 150))
- (let ((f0-1 (- (-> self appear-dest x) (-> (the-as robotboss (-> self parent 0)) root-override trans x))))
+ (let ((f0-1 (- (-> self appear-dest x) (-> (the-as green-eco-lurker-gen (-> self parent 0)) root trans x))))
(set! (-> self collide-info trans x)
- (+ (-> (the-as robotboss (-> self parent 0)) root-override trans x) (fmax -32768.0 (fmin 32768.0 f0-1)))
+ (+ (-> (the-as green-eco-lurker-gen (-> self parent 0)) root trans x) (fmax -32768.0 (fmin 32768.0 f0-1)))
)
)
(logior! (-> self collide-info nav-flags) 2)
diff --git a/test/decompiler/reference/levels/flut_common/flutflut_REF.gc b/test/decompiler/reference/levels/flut_common/flutflut_REF.gc
index ea1ff653d8..d49493f811 100644
--- a/test/decompiler/reference/levels/flut_common/flutflut_REF.gc
+++ b/test/decompiler/reference/levels/flut_common/flutflut_REF.gc
@@ -243,7 +243,7 @@
(hide-hud)
(level-hint-surpress!)
(kill-current-level-hint '() '(sidekick voicebox) 'exit)
- (when (and (hud-hidden?) (can-grab-display? (the-as process-taskable self)))
+ (when (and (hud-hidden?) (can-grab-display? self))
(let ((gp-0
(new 'stack 'font-context *font-default-matrix* 32 160 0.0 (font-color default) (font-flags shadow kerning))
)
diff --git a/test/decompiler/reference/levels/jungle/fisher-JUN_REF.gc b/test/decompiler/reference/levels/jungle/fisher-JUN_REF.gc
index 2c44c2249f..ad50038ebd 100644
--- a/test/decompiler/reference/levels/jungle/fisher-JUN_REF.gc
+++ b/test/decompiler/reference/levels/jungle/fisher-JUN_REF.gc
@@ -1267,7 +1267,7 @@
(case (current-status (-> obj tasks))
(((task-status need-hint) (task-status need-introduction))
(when arg0
- (set! (-> obj blend-on-exit) #t)
+ (set! (-> obj blend-on-exit) (the-as art-joint-anim #t))
(close-status! (-> obj tasks) (task-status need-introduction))
(set! (-> obj training) #t)
)
@@ -1309,7 +1309,7 @@
)
(((task-status need-reminder-a) (task-status need-reminder))
(set! (-> obj skippable) #t)
- (set! (-> obj blend-on-exit) #t)
+ (set! (-> obj blend-on-exit) (the-as art-joint-anim #t))
(new 'static 'spool-anim :name "fisher-reminder-1" :index 10 :parts 1 :command-list '())
)
(((task-status need-reward-speech))
@@ -2372,14 +2372,10 @@
(send-event
(ppointer->process (-> self manipy))
'eval
- (lambda :behavior target
+ (lambda :behavior manipy
()
- (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))
- )
+ (set! (-> self joint 0) (new 'process 'joint-mod (joint-mod-handler-mode joint-set*) self 6))
+ (set! (-> self joint 1) (new 'process 'joint-mod (joint-mod-handler-mode joint-set*) self 5))
(none)
)
)
@@ -2419,22 +2415,17 @@
(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))
+ (let ((s2-0 (new-stack-vector0))
+ (s4-0 (new-stack-vector0))
(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)
- (initialize-skeleton (-> self manipy 0 joint 0) (the-as skeleton-group s4-0) (the-as pair s3-0))
+ (set-trs! (-> self manipy 0 joint 0) s4-0 s3-0 s2-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 initialize-skeleton))
- (a2-7 #f)
- )
- (t9-16 a0-34 (the-as skeleton-group s4-0) (the-as pair a2-7))
- )
+ (set-trs! (-> self manipy 0 joint 1) s4-0 (the-as quaternion #f) (the-as vector #f))
(set! (-> s5-2 y) (-> s5-2 x))
(set! (-> s5-2 x) f30-0)
)
diff --git a/test/decompiler/reference/levels/jungle/jungle-mirrors_REF.gc b/test/decompiler/reference/levels/jungle/jungle-mirrors_REF.gc
index 0fae201acd..1347c4fb7a 100644
--- a/test/decompiler/reference/levels/jungle/jungle-mirrors_REF.gc
+++ b/test/decompiler/reference/levels/jungle/jungle-mirrors_REF.gc
@@ -1058,6 +1058,7 @@
)
;; definition for function periscope-find-next
+;; INFO: Return type mismatch object vs none.
;; Used lq/sq
(defbehavior periscope-find-next periscope ()
(let ((gp-0 (-> self link next)))
@@ -1070,32 +1071,26 @@
(cond
(gp-0
(set! (-> self next-reflector-trans quad) (-> gp-0 extra trans quad))
- (let ((f0-3 (+ (-> self next-reflector-trans y) (res-lump-float gp-0 'height-info))))
- (set! (-> self next-reflector-trans y) f0-3)
- f0-3
- )
+ (+! (-> self next-reflector-trans y) (res-lump-float gp-0 'height-info))
)
(else
- (let ((v1-9 (res-lump-struct (-> self entity) 'alt-vector structure))
- (v0-2 (the-as object (-> self next-reflector-trans)))
- )
- (set! (-> (the-as vector v0-2) quad) (-> (the-as vector v1-9) quad))
- v0-2
+ (let ((v1-9 (res-lump-struct (-> self entity) 'alt-vector structure)))
+ (set! (-> self next-reflector-trans quad) (-> (the-as vector v1-9) quad))
)
)
)
)
+ (none)
)
;; definition for function periscope-set-target-direction
+;; INFO: Return type mismatch float vs none.
(defbehavior periscope-set-target-direction periscope ((arg0 vector))
(let ((f30-0 (vector-xz-length arg0)))
(set! (-> self target-turn) (atan (-> arg0 x) (-> arg0 z)))
- (let ((f0-5 (atan (- (-> arg0 y)) f30-0)))
- (set! (-> self target-tilt) f0-5)
- f0-5
- )
+ (set! (-> self target-tilt) (atan (- (-> arg0 y)) f30-0))
)
+ (none)
)
;; definition for function periscope-find-aim-at-angles
@@ -1113,6 +1108,7 @@
(periscope-set-target-direction s5-0)
)
)
+ (none)
)
;; definition for function periscope-find-reflection-angles
@@ -1139,6 +1135,7 @@
(periscope-set-target-direction s4-0)
)
)
+ (none)
)
;; definition for function periscope-has-power-input?
@@ -1181,6 +1178,7 @@
)
;; definition for function periscope-update-joints
+;; INFO: Return type mismatch float vs none.
(defbehavior periscope-update-joints periscope ()
(let ((a1-0 (new 'stack-no-clear 'event-message-block)))
(set! (-> a1-0 to) (the-as process 0.0))
@@ -1190,10 +1188,10 @@
(quaternion-zxy! (-> self root-override quat) (the-as vector a1-0))
)
(set! (-> self root-override trans y) (+ -184320.0 (-> self y-offset) (-> self base y)))
- (let ((f0-10 (+ (- (+ (-> self base y) (-> self y-offset)) (-> self height)) (-> self y-offset-grips))))
- (set! (-> self grips transform trans y) f0-10)
- f0-10
- )
+ (set! (-> self grips transform trans y)
+ (+ (- (+ (-> self base y) (-> self y-offset)) (-> self height)) (-> self y-offset-grips))
+ )
+ (none)
)
;; definition for function periscope-post
@@ -1229,11 +1227,11 @@
)
;; definition for function peri-beamcam-init-by-other
-;; INFO: Return type mismatch object vs (pointer process).
+;; INFO: Return type mismatch object vs (pointer pov-camera).
(defbehavior peri-beamcam-init-by-other process ((arg0 string))
(let ((gp-0 (entity-by-name "junglecam-1")))
(the-as
- (pointer process)
+ (pointer pov-camera)
(cond
(gp-0
(cond
@@ -1628,7 +1626,7 @@
(hide-hud)
(level-hint-surpress!)
(kill-current-level-hint '() '(sidekick voicebox) 'exit)
- (when (and (hud-hidden?) (can-grab-display? (the-as process-taskable self)))
+ (when (and (hud-hidden?) (can-grab-display? self))
(let ((s2-2
(new 'stack 'font-context *font-default-matrix* 32 160 0.0 (font-color default) (font-flags shadow kerning))
)
diff --git a/test/decompiler/reference/levels/maincave/baby-spider_REF.gc b/test/decompiler/reference/levels/maincave/baby-spider_REF.gc
index 8c226da2f0..81468d3903 100644
--- a/test/decompiler/reference/levels/maincave/baby-spider_REF.gc
+++ b/test/decompiler/reference/levels/maincave/baby-spider_REF.gc
@@ -295,7 +295,7 @@ baby-spider-default-event-handler
)
;; definition for method 51 of type baby-spider
-;; INFO: Return type mismatch float vs object.
+;; INFO: Return type mismatch float vs none.
(defmethod dummy-51 baby-spider ((obj baby-spider))
(let* ((f0-0 (rand-vu-float-range 0.0 1.0))
(f1-1 (+ 1.0 (* 2.0 f0-0)))
@@ -305,11 +305,9 @@ baby-spider-default-event-handler
)
(set! (-> obj delta-wiggle-angle) (* 910.2222 f1-1))
(set! (-> obj wiggle-factor) (* 1.5 f2-4))
- (let ((f0-3 (* 28672.0 f0-2)))
- (set! (-> obj target-speed) f0-3)
- (the-as object f0-3)
- )
+ (set! (-> obj target-speed) (* 28672.0 f0-2))
)
+ (none)
)
;; definition for method 52 of type baby-spider
diff --git a/test/decompiler/reference/levels/maincave/cavecrystal-light_REF.gc b/test/decompiler/reference/levels/maincave/cavecrystal-light_REF.gc
index 410d65af14..0f079c4685 100644
--- a/test/decompiler/reference/levels/maincave/cavecrystal-light_REF.gc
+++ b/test/decompiler/reference/levels/maincave/cavecrystal-light_REF.gc
@@ -36,18 +36,18 @@
(deftype cavecrystal-light-control (basic)
((active-count int32 :offset-assert 4)
(head cavecrystal-light :offset-assert 8)
- (last-known-valid-time uint64 :offset-assert 16)
+ (last-known-valid-time int64 :offset-assert 16)
(crystal cavecrystal-light 7 :inline :offset-assert 32)
)
:method-count-assert 15
:size-assert #x170
:flag-assert #xf00000170
(:methods
- (TODO-RENAME-9 (_type_ int float process-drawable) object 9)
+ (TODO-RENAME-9 (_type_ int float process-drawable) none 9)
(TODO-RENAME-10 (_type_ vector) float 10)
- (inc-intensites! (_type_) int 11)
- (TODO-RENAME-12 (_type_) symbol 12)
- (create-connection! (_type_ process-drawable res-lump (function object object object object object) object object) connection 13)
+ (inc-intensities! (_type_) none 11)
+ (TODO-RENAME-12 (_type_) none 12)
+ (create-connection! (_type_ process-drawable res-lump (function object object object object object) int float) connection 13)
(execute-connections (_type_) int 14)
)
)
@@ -92,8 +92,8 @@
(arg0 process-drawable)
(arg1 res-lump)
(arg2 (function object object object object object))
- (arg3 object)
- (arg4 object)
+ (arg3 int)
+ (arg4 float)
)
(if (nonzero? (res-lump-value arg1 'crystal-light uint128))
(add-connection *cavecrystal-engine* arg0 arg2 (process->ppointer arg0) arg3 arg4)
@@ -106,12 +106,13 @@
)
;; definition for method 12 of type cavecrystal-light-control
+;; INFO: Return type mismatch symbol vs none.
(defmethod TODO-RENAME-12 cavecrystal-light-control ((obj cavecrystal-light-control))
(let ((v1-0 (-> obj last-known-valid-time))
(a1-1 (-> *display* base-frame-counter))
)
(when (!= v1-0 a1-1)
- (set! (-> obj last-known-valid-time) (the-as uint a1-1))
+ (set! (-> obj last-known-valid-time) a1-1)
(cond
((zero? v1-0)
(set! (-> obj active-count) 0)
@@ -126,7 +127,6 @@
(set! (-> a1-5 crystal-handle) (the-as handle #f))
)
)
- #f
)
(else
(when (> (-> obj active-count) 0)
@@ -154,16 +154,17 @@
)
)
)
- #f
)
)
)
)
)
+ (none)
)
;; definition for method 11 of type cavecrystal-light-control
-(defmethod inc-intensites! cavecrystal-light-control ((obj cavecrystal-light-control))
+;; INFO: Return type mismatch int vs none.
+(defmethod inc-intensities! cavecrystal-light-control ((obj cavecrystal-light-control))
(set! (-> obj head) #f)
(let ((a1-0 (the-as cavecrystal-light #f))
(v0-0 0)
@@ -182,11 +183,13 @@
)
)
(set! (-> obj active-count) v0-0)
- v0-0
)
+ (none)
)
;; definition for method 9 of type cavecrystal-light-control
+;; INFO: Return type mismatch object vs none.
+;; WARN: Expression building failed: Function (method 9 cavecrystal-light-control) has a return type of none, but the expression builder found a return statement.
;; Used lq/sq
(defmethod TODO-RENAME-9 cavecrystal-light-control ((obj cavecrystal-light-control) (arg0 int) (arg1 float) (arg2 process-drawable))
(TODO-RENAME-12 obj)
@@ -201,12 +204,12 @@
(set! (-> s3-0 intensity) arg1)
(set! (-> s3-0 crystal-handle) (process->handle arg2))
(set! (-> s3-0 trans quad) (-> arg2 root trans quad))
- (inc-intensites! obj)
+ (inc-intensities! obj)
)
((and (>= 0.0 arg1) (< 0.0 (-> s3-0 intensity)))
(+! (-> obj active-count) -1)
(set! (-> s3-0 intensity) 0.0)
- (inc-intensites! obj)
+ (inc-intensities! obj)
)
((< 0.0 arg1)
(set! (-> s3-0 intensity) arg1)
@@ -214,6 +217,7 @@
)
(set-fade! *palette-fade-controls* (+ arg0 1) arg1 0.0 (-> s3-0 trans))
)
+ (none)
)
;; definition for method 10 of type cavecrystal-light-control
diff --git a/test/decompiler/reference/levels/misty/mistycannon_REF.gc b/test/decompiler/reference/levels/misty/mistycannon_REF.gc
index 141814f24d..8425a29a13 100644
--- a/test/decompiler/reference/levels/misty/mistycannon_REF.gc
+++ b/test/decompiler/reference/levels/misty/mistycannon_REF.gc
@@ -993,7 +993,7 @@
(a1-2 (-> self root-override root-prim prim-core))
(v1-5 (-> v1-3 root-prim prim-core))
(a2-1 (new 'stack-no-clear 'vector))
- (t2-0 (new 'stack-no-clear 'collide-mesh-cache-tri))
+ (t2-0 (new 'stack-no-clear 'collide-tri-result))
)
0.0
(vector-! a2-1 (the-as vector v1-5) (the-as vector a1-2))
@@ -1004,7 +1004,7 @@
40.96
(collide-kind background)
self
- (the-as collide-tri-result t2-0)
+ t2-0
1
)
0.0
@@ -1786,7 +1786,7 @@
(hide-hud)
(level-hint-surpress!)
(kill-current-level-hint '() '(sidekick voicebox) 'exit)
- (when (and (hud-hidden?) (can-grab-display? (the-as process-taskable self)))
+ (when (and (hud-hidden?) (can-grab-display? self))
(let ((gp-0
(new 'stack 'font-context *font-default-matrix* 32 160 0.0 (font-color default) (font-flags shadow kerning))
)
@@ -2127,7 +2127,3 @@
)
(none)
)
-
-
-
-
diff --git a/test/decompiler/reference/levels/misty/muse_REF.gc b/test/decompiler/reference/levels/misty/muse_REF.gc
index f7b2dbcbda..51c33e7bc9 100644
--- a/test/decompiler/reference/levels/misty/muse_REF.gc
+++ b/test/decompiler/reference/levels/misty/muse_REF.gc
@@ -178,7 +178,7 @@
)
;; definition for method 51 of type muse
-;; INFO: Return type mismatch int vs object.
+;; INFO: Return type mismatch int vs none.
(defmethod dummy-51 muse ((obj muse))
(dotimes (s5-0 2)
(let ((v1-2 (rand-vu-int-range 3 (+ (-> obj node-list length) -1))))
@@ -192,7 +192,8 @@
)
)
)
- (the-as object 0)
+ 0
+ (none)
)
;; definition for method 39 of type muse
diff --git a/test/decompiler/reference/levels/racer_common/racer_REF.gc b/test/decompiler/reference/levels/racer_common/racer_REF.gc
new file mode 100644
index 0000000000..2b7ae165b2
--- /dev/null
+++ b/test/decompiler/reference/levels/racer_common/racer_REF.gc
@@ -0,0 +1,516 @@
+;;-*-Lisp-*-
+(in-package goal)
+
+;; failed to figure out what this is:
+(if (not (nmember "racerp" *kernel-packages*))
+ (set! *kernel-packages* (cons "racerp" *kernel-packages*))
+ )
+
+;; definition of type racer
+(deftype racer (process-drawable)
+ ((parent-override (pointer target) :offset 12)
+ (root-override collide-shape-moving :offset 112)
+ (extra-trans vector :inline :offset-assert 176)
+ (condition int32 :offset-assert 192)
+ (cell handle :offset-assert 200)
+ (path-data path-control 2 :offset-assert 208)
+ (path-target curve-control :offset 208)
+ (path-racer path-control :offset 212)
+ (auto-get-off symbol :offset-assert 216)
+ (shadow-backup shadow-geo :offset-assert 220)
+ )
+ :heap-base #x70
+ :method-count-assert 24
+ :size-assert #xe0
+ :flag-assert #x18007000e0
+ (:methods
+ (wait-for-start () _type_ :state 20)
+ (idle () _type_ :state 21)
+ (pickup ((state collectable)) _type_ :state 22)
+ (wait-for-return () _type_ :state 23)
+ )
+ )
+
+;; definition for method 3 of type racer
+(defmethod inspect racer ((obj racer))
+ (let ((t9-0 (method-of-type process-drawable inspect)))
+ (t9-0 obj)
+ )
+ (format #t "~T~Textra-trans: ~`vector`P~%" (-> obj extra-trans))
+ (format #t "~T~Tcondition: ~D~%" (-> obj condition))
+ (format #t "~T~Tcell: ~D~%" (-> obj cell))
+ (format #t "~T~Tpath-data[2] @ #x~X~%" (-> obj path-data))
+ (format #t "~T~Tpath-target: ~A~%" (-> obj path-target))
+ (format #t "~T~Tpath-racer: ~A~%" (-> obj path-racer))
+ (format #t "~T~Tauto-get-off: ~A~%" (-> obj auto-get-off))
+ (format #t "~T~Tshadow-backup: ~A~%" (-> obj shadow-backup))
+ obj
+ )
+
+;; definition for method 7 of type racer
+;; INFO: Return type mismatch process-drawable vs racer.
+(defmethod relocate racer ((obj racer) (arg0 int))
+ (countdown (v1-0 2)
+ (if (-> obj path-data v1-0)
+ (&+! (-> obj path-data v1-0) arg0)
+ )
+ )
+ (the-as racer ((method-of-type process-drawable relocate) obj arg0))
+ )
+
+;; failed to figure out what this is:
+(defskelgroup *racer-sg* racer
+ 0
+ 3
+ ((1 (meters 999999)))
+ :bounds (static-spherem 0 0 0 3.5)
+ :longest-edge (meters 0)
+ :shadow 2
+ :sort 1
+ )
+
+;; failed to figure out what this is:
+(defskelgroup *racer-explode-sg* racer
+ 22
+ 24
+ ((23 (meters 999999)))
+ :bounds (static-spherem 0 0 0 3.5)
+ :longest-edge (meters 0)
+ )
+
+;; definition for symbol *racer-shadow-control*, type shadow-control
+(define
+ *racer-shadow-control*
+ (new 'static 'shadow-control :settings (new 'static 'shadow-settings
+ :center
+ (new 'static 'vector :w (the-as float #xa))
+ :shadow-dir
+ (new 'static 'vector :y -1.0 :w 614400.0)
+ :bot-plane (new 'static 'plane :y 1.0 :w 81920.0)
+ :top-plane (new 'static 'plane :y 1.0 :w 2048.0)
+ )
+ )
+ )
+
+;; definition for function racer-effect
+;; INFO: Return type mismatch int vs none.
+(defbehavior racer-effect racer ()
+ (when (!= (-> self condition) 4)
+ (spawn (-> self part) (-> self root-override trans))
+ (update! (-> self sound))
+ )
+ 0
+ (none)
+ )
+
+;; failed to figure out what this is:
+(defstate wait-for-start (racer)
+ :virtual #t
+ :event
+ (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block))
+ (local-vars (v0-1 structure))
+ (let ((v1-0 arg2))
+ (the-as
+ object
+ (cond
+ ((= v1-0 'trans)
+ (vector+! (the-as vector (-> arg3 param 0)) (-> self root-override trans) (-> self extra-trans))
+ )
+ ((= v1-0 'notify)
+ (set! v0-1 #t)
+ (set! (-> self auto-get-off) (the-as symbol v0-1))
+ v0-1
+ )
+ ((= v1-0 'shadow)
+ (cond
+ ((-> arg3 param 0)
+ (set! v0-1 (-> self shadow-backup))
+ (set! (-> self draw shadow) (the-as shadow-geo v0-1))
+ v0-1
+ )
+ (else
+ (set! (-> self draw shadow) #f)
+ #f
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ :exit
+ (behavior ()
+ (set! (-> self root-override root-prim prim-core action) (collide-action))
+ (set! (-> self root-override root-prim prim-core offense) (collide-offense no-offense))
+ 0
+ (none)
+ )
+ :code
+ (behavior ()
+ (label cfg-0)
+ (case (-> self condition)
+ ((2)
+ (let ((gp-0 (get-task-control (-> self entity extra perm task))))
+ (if (and *cheat-mode* (cpad-hold? 0 l3))
+ (goto cfg-77)
+ )
+ (first-any gp-0 #t)
+ (case (current-status gp-0)
+ (((task-status need-reward-speech))
+ (ja-channel-set! 1)
+ (let ((v1-15 (-> self skel root-channel 0)))
+ (set! (-> v1-15 frame-group) (the-as art-joint-anim (-> self draw art-group data 3)))
+ )
+ (set! (-> self root-override root-prim prim-core action) (collide-action solid ca-11))
+ (set! (-> self root-override root-prim prim-core offense) (collide-offense indestructible))
+ (ja-post)
+ )
+ (((task-status invalid))
+ (goto cfg-77)
+ )
+ )
+ )
+ )
+ ((6)
+ (if (or (task-closed? (game-task village2-levitator) (task-status need-hint))
+ (and *cheat-mode* (cpad-hold? 0 l3))
+ (and *target* (logtest? (-> *target* control root-prim prim-core action) (collide-action ca-9)))
+ )
+ (goto cfg-77)
+ )
+ )
+ ((5)
+ (cond
+ ((and *cheat-mode* (cpad-hold? 0 l3))
+ (goto cfg-77)
+ )
+ ((>= (-> *game-info* fuel) 72.0)
+ (goto cfg-77)
+ )
+ )
+ )
+ ((3)
+ (cond
+ ((and (task-complete? *game-info* (-> self entity extra perm task)) (not (handle->process (-> self cell))))
+ (when (and (-> self auto-get-off) (send-event *target* 'end-mode))
+ (set! (-> self auto-get-off) #f)
+ (go-virtual pickup (the-as (state collectable) (method-of-object self idle)))
+ )
+ (set! (-> self auto-get-off) #f)
+ (goto cfg-77)
+ )
+ ((not (handle->process (-> self cell)))
+ (set! (-> self cell)
+ (ppointer->handle
+ (birth-pickup-at-point
+ (vector+! (new 'stack-no-clear 'vector) (-> self root-override trans) (new 'static 'vector :y 8192.0 :w 1.0))
+ (pickup-type fuel-cell)
+ (the float (-> self entity extra perm task))
+ #f
+ self
+ (-> self fact)
+ )
+ )
+ )
+ )
+ )
+ )
+ ((4)
+ (if (and *target* (zero? (logand (-> *target* control root-prim prim-core action) (collide-action ca-9))))
+ (goto cfg-77)
+ )
+ )
+ (else
+ (goto cfg-77)
+ )
+ )
+ (racer-effect)
+ (suspend)
+ (b! #t cfg-0 :delay (nop!))
+ (label cfg-77)
+ (if (and *target* (logtest? (-> *target* control root-prim prim-core action) (collide-action ca-9)))
+ (go-virtual wait-for-return)
+ (go-virtual idle)
+ )
+ (none)
+ )
+ )
+
+;; failed to figure out what this is:
+(defstate idle (racer)
+ :virtual #t
+ :event
+ (-> (method-of-type racer wait-for-start) event)
+ :enter
+ (behavior ()
+ (blocking-plane-destroy)
+ (blocking-plane-spawn (-> self path-target))
+ (none)
+ )
+ :exit
+ (-> (method-of-type racer wait-for-start) exit)
+ :code
+ (behavior ()
+ (ja-channel-set! 1)
+ (let ((v1-2 (-> self skel root-channel 0)))
+ (set! (-> v1-2 frame-group) (the-as art-joint-anim (-> self draw art-group data 3)))
+ )
+ (set! (-> self root-override root-prim prim-core action) (collide-action solid ca-11))
+ (set! (-> self root-override root-prim prim-core offense) (collide-offense indestructible))
+ 0.0
+ (let ((f30-0 (if (= (-> self condition) 4)
+ 61440.0
+ 20480.0
+ )
+ )
+ )
+ (while #t
+ (if (and *target* (logtest? (-> *target* control root-prim prim-core action) (collide-action ca-9)))
+ (go-virtual wait-for-return)
+ )
+ (when (and (and *target* (>= f30-0 (vector-vector-distance (-> self root-override trans) (-> *target* control trans))))
+ (and (not (movie?)) (not (level-hint-displayed?)))
+ )
+ (hide-hud)
+ (level-hint-surpress!)
+ (kill-current-level-hint '() '(sidekick voicebox) 'exit)
+ (when (and (hud-hidden?) (can-grab-display? self))
+ (let ((gp-0
+ (new 'stack 'font-context *font-default-matrix* 32 160 0.0 (font-color default) (font-flags shadow kerning))
+ )
+ )
+ (let ((v1-24 gp-0))
+ (set! (-> v1-24 width) (the float 440))
+ )
+ (let ((v1-25 gp-0))
+ (set! (-> v1-25 height) (the float 80))
+ )
+ (set! (-> gp-0 flags) (font-flags shadow kerning large))
+ (print-game-text (lookup-text! *common-text* (game-text-id press-to-use) #f) gp-0 #f 128 22)
+ )
+ (if (and (or (cpad-pressed? 0 circle) (= (-> self condition) 4)) (send-event *target* 'change-mode 'racing self))
+ (go-virtual pickup (the-as (state collectable) (method-of-object self wait-for-return)))
+ )
+ )
+ )
+ (racer-effect)
+ (suspend)
+ )
+ )
+ (none)
+ )
+ :post
+ (the-as (function none :behavior racer) ja-post)
+ )
+
+;; failed to figure out what this is:
+(defstate pickup (racer)
+ :virtual #t
+ :event
+ (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block))
+ (case arg2
+ (('draw)
+ (ja-channel-set! 1)
+ (let ((v1-3 (-> self skel root-channel 0)))
+ (set! (-> v1-3 frame-group) (the-as art-joint-anim (-> self draw art-group data 3)))
+ )
+ (set! (-> self root-override root-prim prim-core action) (collide-action solid ca-11))
+ (set! (-> self root-override root-prim prim-core offense) (collide-offense indestructible))
+ (transform-post)
+ )
+ (('trans)
+ (vector+! (the-as vector (-> arg3 param 0)) (-> self root-override trans) (-> self extra-trans))
+ )
+ (('touch 'attack)
+ #f
+ )
+ (('shadow)
+ (cond
+ ((-> arg3 param 0)
+ (let ((v0-1 (the-as object (-> self shadow-backup))))
+ (set! (-> self draw shadow) (the-as shadow-geo v0-1))
+ v0-1
+ )
+ )
+ (else
+ (set! (-> self draw shadow) #f)
+ #f
+ )
+ )
+ )
+ )
+ )
+ :enter
+ (behavior ((arg0 (state collectable)))
+ ((the-as (function none :behavior racer) (-> arg0 enter)))
+ (none)
+ )
+ :code
+ (behavior ((arg0 (state collectable)))
+ (ja-channel-set! 0)
+ (ja-post)
+ (while (zero? (ja-group-size))
+ (when (or (not *target*)
+ (< 24576.0 (vector-vector-distance (-> self root-override trans) (-> *target* control trans)))
+ )
+ (when (and *target* (logtest? (-> *target* control root-prim prim-core action) (collide-action ca-9)))
+ (case (-> (level-get-target-inside *level*) name)
+ (('misty)
+ (close-specific-task! (game-task misty-bike) (task-status need-reminder-a))
+ (level-hint-spawn
+ (game-text-id misty-racer-hit-the-ballon-lurkers)
+ "sksp0062"
+ (the-as entity #f)
+ *entity-pool*
+ (game-task none)
+ )
+ )
+ )
+ )
+ (go arg0)
+ )
+ (racer-effect)
+ (suspend)
+ )
+ (while (and *target* (logtest? (-> *target* control root-prim prim-core action) (collide-action ca-9)))
+ (racer-effect)
+ (suspend)
+ )
+ (let ((s5-0 (-> *display* base-frame-counter)))
+ (until (>= (- (-> *display* base-frame-counter) s5-0) 300)
+ (racer-effect)
+ (suspend)
+ )
+ )
+ (go arg0)
+ (none)
+ )
+ )
+
+;; failed to figure out what this is:
+(defstate wait-for-return (racer)
+ :virtual #t
+ :event
+ (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block))
+ (if (and (or (= arg2 'touch) (= arg2 'attack)) (and (!= (-> self condition) 4) (send-event *target* 'end-mode)))
+ (go-virtual pickup (the-as (state collectable) (method-of-object self idle)))
+ )
+ (the-as
+ object
+ (cond
+ ((= arg2 'trans)
+ (vector+! (the-as vector (-> arg3 param 0)) (-> self root-override trans) (-> self extra-trans))
+ )
+ ((= arg2 'shadow)
+ (cond
+ ((-> arg3 param 0)
+ (let ((v0-3 (the-as structure (-> self shadow-backup))))
+ (set! (-> self draw shadow) (the-as shadow-geo v0-3))
+ v0-3
+ )
+ )
+ (else
+ (set! (-> self draw shadow) #f)
+ #f
+ )
+ )
+ )
+ )
+ )
+ )
+ :enter
+ (behavior ()
+ (blocking-plane-destroy)
+ (blocking-plane-spawn (the-as curve-control (-> self path-racer)))
+ (none)
+ )
+ :code
+ (behavior ()
+ (ja-channel-set! 0)
+ (ja-post)
+ (while #t
+ (if (not (and *target* (logtest? (-> *target* control root-prim prim-core action) (collide-action ca-9))))
+ (go-virtual idle)
+ )
+ (racer-effect)
+ (suspend)
+ )
+ (none)
+ )
+ )
+
+;; definition for method 11 of type racer
+;; INFO: Return type mismatch object vs none.
+(defmethod init-from-entity! racer ((obj racer) (arg0 entity-actor))
+ (let ((s4-0 (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player))))
+ (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process))
+ (set! (-> s4-0 reaction) default-collision-reaction)
+ (set! (-> s4-0 no-reaction)
+ (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing)
+ )
+ (let ((s3-0 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0))))
+ (set! (-> s3-0 prim-core collide-as) (collide-kind wall-object))
+ (set! (-> s3-0 collide-with) (collide-kind target))
+ (set-vector! (-> s3-0 local-sphere) 0.0 0.0 0.0 6144.0)
+ (set-root-prim! s4-0 s3-0)
+ )
+ (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w)))
+ (backup-collide-with-as s4-0)
+ (set! (-> obj root-override) s4-0)
+ )
+ (process-drawable-from-entity! obj arg0)
+ (set-yaw-angle-clear-roll-pitch! (-> obj root-override) (res-lump-float arg0 'rotoffset))
+ (initialize-skeleton obj *racer-sg* '())
+ (set! (-> obj shadow-backup) (-> obj draw shadow))
+ (set! (-> obj draw shadow-ctrl) *racer-shadow-control*)
+ (let ((v1-23 (-> obj node-list data)))
+ (set! (-> v1-23 0 param0) cspace<-transformq+trans!)
+ (set! (-> v1-23 0 param1) (the-as basic (-> obj root-override trans)))
+ (set! (-> v1-23 0 param2) (the-as basic (-> obj extra-trans)))
+ )
+ (set! (-> obj condition) (res-lump-value arg0 'index int))
+ (set! (-> obj fact)
+ (new 'process 'fact-info obj (pickup-type eco-pill-random) (-> *FACT-bank* default-pill-inc))
+ )
+ (set! (-> obj part) (create-launch-control (-> *part-group-id-table* 115) obj))
+ (dotimes (s5-1 2)
+ (let ((v1-32 (new 'process 'curve-control obj 'path (the float (+ s5-1 1)))))
+ (set! (-> obj path-data s5-1) v1-32)
+ (if v1-32
+ (logior! (-> v1-32 flags) (path-control-flag display draw-line draw-point draw-text))
+ )
+ )
+ )
+ (set! (-> obj path) (-> obj path-target))
+ (set-vector! (-> obj extra-trans) 0.0 6144.0 0.0 1.0)
+ (set! (-> obj auto-get-off) #f)
+ (move-to-ground (-> obj root-override) 40960.0 40960.0 #t (collide-kind background))
+ (set! (-> obj cell) (the-as handle #f))
+ (blocking-plane-spawn
+ (the-as
+ curve-control
+ (if (or (and *target* (logtest? (-> *target* control root-prim prim-core action) (collide-action ca-9)))
+ (= (-> obj condition) 3)
+ )
+ (-> obj path-racer)
+ (-> obj path-target)
+ )
+ )
+ )
+ (set! (-> obj sound) (new
+ 'process
+ 'ambient-sound
+ (new 'static 'sound-spec
+ :mask #x80
+ :num 1.0
+ :group #x1
+ :sound-name (static-sound-name "zoom-teleport")
+ :volume #x400
+ :fo-max 30
+ )
+ (-> obj root-override trans)
+ )
+ )
+ (go (method-of-object obj wait-for-start))
+ (none)
+ )
diff --git a/test/decompiler/reference/levels/rolling/rolling-obs_REF.gc b/test/decompiler/reference/levels/rolling/rolling-obs_REF.gc
index 5e4f425827..0f255f32f6 100644
--- a/test/decompiler/reference/levels/rolling/rolling-obs_REF.gc
+++ b/test/decompiler/reference/levels/rolling/rolling-obs_REF.gc
@@ -351,7 +351,7 @@
;; definition for function dark-plants-all-done
(defun dark-plants-all-done ((arg0 dark-plant))
(while #t
- (if (!= (-> (the-as process arg0) state) dark-plant-gone)
+ (if (!= (-> arg0 state) dark-plant-gone)
(return #f)
)
(if (zero? (-> arg0 num-alts))
@@ -361,7 +361,7 @@
(if (not v1-9)
(return #t)
)
- (if (= v1-9 (the-as process arg0))
+ (if (= v1-9 arg0)
(return #t)
)
(set! arg0 (the-as dark-plant v1-9))
@@ -1818,7 +1818,7 @@
(-> gp-5 ppointer)
)
)
- (sleep (-> self ticker) (the-as uint #x1b7740))
+ (sleep (-> self ticker) #x1b7740)
(set-setting! *setting-control* self 'sound-flava #f 40.0 42)
(none)
)
diff --git a/test/decompiler/reference/levels/snow/snow-ball_REF.gc b/test/decompiler/reference/levels/snow/snow-ball_REF.gc
new file mode 100644
index 0000000000..2d0d32018c
--- /dev/null
+++ b/test/decompiler/reference/levels/snow/snow-ball_REF.gc
@@ -0,0 +1,736 @@
+;;-*-Lisp-*-
+(in-package goal)
+
+;; definition of type snow-ball-shadow
+(deftype snow-ball-shadow (process-drawable)
+ ()
+ :heap-base #x40
+ :method-count-assert 20
+ :size-assert #xb0
+ :flag-assert #x14004000b0
+ (:states
+ snow-ball-shadow-idle
+ )
+ )
+
+;; definition for method 3 of type snow-ball-shadow
+(defmethod inspect snow-ball-shadow ((obj snow-ball-shadow))
+ (let ((t9-0 (method-of-type process-drawable inspect)))
+ (t9-0 obj)
+ )
+ obj
+ )
+
+;; definition of type snow-ball-junction
+(deftype snow-ball-junction (structure)
+ ((enter-time int64 :offset-assert 0)
+ (exit-time int64 :offset-assert 8)
+ )
+ :method-count-assert 9
+ :size-assert #x10
+ :flag-assert #x900000010
+ )
+
+;; definition for method 3 of type snow-ball-junction
+(defmethod inspect snow-ball-junction ((obj snow-ball-junction))
+ (format #t "[~8x] ~A~%" obj 'snow-ball-junction)
+ (format #t "~Tenter-time: ~D~%" (-> obj enter-time))
+ (format #t "~Texit-time: ~D~%" (-> obj exit-time))
+ obj
+ )
+
+;; definition of type snow-ball-path-info
+(deftype snow-ball-path-info (structure)
+ ((hug-path? symbol :offset-assert 0)
+ (path-pos vector :inline :offset-assert 16)
+ )
+ :method-count-assert 9
+ :size-assert #x20
+ :flag-assert #x900000020
+ )
+
+;; definition for method 3 of type snow-ball-path-info
+(defmethod inspect snow-ball-path-info ((obj snow-ball-path-info))
+ (format #t "[~8x] ~A~%" obj 'snow-ball-path-info)
+ (format #t "~Thug-path?: ~A~%" (-> obj hug-path?))
+ (format #t "~Tpath-pos: #~%" (-> obj path-pos))
+ obj
+ )
+
+;; definition of type snow-ball-roller
+(deftype snow-ball-roller (process-drawable)
+ ((root-override collide-shape-moving :offset 112)
+ (which-path int32 :offset-assert 176)
+ (path-u float :offset-assert 180)
+ (path-speed float :offset-assert 184)
+ (path-length float :offset-assert 188)
+ (path-fall-u float :offset-assert 192)
+ (path-coming-out-u float :offset-assert 196)
+ (path-faded-up-u float :offset-assert 200)
+ (delay-til-bounce int32 :offset-assert 204)
+ (rolling-sound-id sound-id :offset-assert 208)
+ (rolling-sound-enabled? symbol :offset-assert 212)
+ (last-bounce-time int64 :offset-assert 216)
+ (hit-player-time int64 :offset-assert 224)
+ (path-info snow-ball-path-info :inline :offset-assert 240)
+ (junctions snow-ball-junction 4 :inline :offset-assert 272)
+ )
+ :heap-base #xe0
+ :method-count-assert 23
+ :size-assert #x150
+ :flag-assert #x1700e00150
+ (:methods
+ (follow-path (_type_) none 20)
+ (play-landing-sound (_type_ float) sound-id 21)
+ (dummy-22 (_type_ process-drawable) none 22)
+ )
+ (:states
+ snow-ball-roller-idle
+ )
+ )
+
+;; definition for method 3 of type snow-ball-roller
+(defmethod inspect snow-ball-roller ((obj snow-ball-roller))
+ (let ((t9-0 (method-of-type process-drawable inspect)))
+ (t9-0 obj)
+ )
+ (format #t "~T~Twhich-path: ~D~%" (-> obj which-path))
+ (format #t "~T~Tpath-u: ~f~%" (-> obj path-u))
+ (format #t "~T~Tpath-speed: ~f~%" (-> obj path-speed))
+ (format #t "~T~Tpath-length: ~f~%" (-> obj path-length))
+ (format #t "~T~Tpath-fall-u: ~f~%" (-> obj path-fall-u))
+ (format #t "~T~Tpath-coming-out-u: ~f~%" (-> obj path-coming-out-u))
+ (format #t "~T~Tpath-faded-up-u: ~f~%" (-> obj path-faded-up-u))
+ (format #t "~T~Tdelay-til-bounce: ~D~%" (-> obj delay-til-bounce))
+ (format #t "~T~Trolling-sound-id: ~D~%" (-> obj rolling-sound-id))
+ (format #t "~T~Trolling-sound-enabled?: ~A~%" (-> obj rolling-sound-enabled?))
+ (format #t "~T~Tlast-bounce-time: ~D~%" (-> obj last-bounce-time))
+ (format #t "~T~Thit-player-time: ~D~%" (-> obj hit-player-time))
+ (format #t "~T~Tpath-info: #~%" (-> obj path-info))
+ (format #t "~T~Tjunctions[4] @ #x~X~%" (-> obj junctions))
+ obj
+ )
+
+;; definition of type snow-ball
+(deftype snow-ball (process)
+ ((child-override (pointer snow-ball-roller) :offset 20)
+ (state-time int64 :offset-assert 112)
+ (last-path-picked int32 :offset-assert 120)
+ (same-path-picked-count int32 :offset-assert 124)
+ (delay-til-next int32 :offset-assert 128)
+ (path curve-control 2 :offset-assert 132)
+ )
+ :heap-base #x20
+ :method-count-assert 16
+ :size-assert #x8c
+ :flag-assert #x100020008c
+ (:methods
+ (dummy-14 (_type_ (inline-array snow-ball-junction) float int) symbol 14)
+ (dummy-15 (_type_ (inline-array snow-ball-junction) int) symbol 15)
+ )
+ (:states
+ snow-ball-idle
+ )
+ )
+
+;; definition for method 3 of type snow-ball
+(defmethod inspect snow-ball ((obj snow-ball))
+ (let ((t9-0 (method-of-type process inspect)))
+ (t9-0 obj)
+ )
+ (format #t "~T~Tstate-time: ~D~%" (-> obj state-time))
+ (format #t "~T~Tlast-path-picked: ~D~%" (-> obj last-path-picked))
+ (format #t "~T~Tsame-path-picked-count: ~D~%" (-> obj same-path-picked-count))
+ (format #t "~T~Tdelay-til-next: ~D~%" (-> obj delay-til-next))
+ (format #t "~T~Tpath[2] @ #x~X~%" (-> obj path))
+ obj
+ )
+
+;; failed to figure out what this is:
+(defskelgroup *snow-ball-sg* snow-ball
+ 0
+ 2
+ ((1 (meters 999999)))
+ :bounds (static-spherem 0 0 0 3)
+ :longest-edge (meters 0)
+ )
+
+;; failed to figure out what this is:
+(defskelgroup *snow-ball-shadow-sg* snow-ball
+ 3
+ -1
+ ((4 (meters 999999)))
+ :bounds (static-spherem 0 -1.5 0 2)
+ :longest-edge (meters 0)
+ :shadow 5
+ )
+
+;; definition for symbol *snow-ball-shadow-control*, type shadow-control
+(define
+ *snow-ball-shadow-control*
+ (new 'static 'shadow-control :settings (new 'static 'shadow-settings
+ :center
+ (new 'static 'vector :w (the-as float #xa))
+ :shadow-dir
+ (new 'static 'vector :y -1.0 :w 245760.0)
+ :bot-plane (new 'static 'plane :y 1.0 :w 26624.0)
+ :top-plane (new 'static 'plane :y 1.0)
+ :fade-dist 819200.0
+ )
+ )
+ )
+
+;; failed to figure out what this is:
+(defstate snow-ball-shadow-idle (snow-ball-shadow)
+ :trans
+ (behavior ()
+ (set! (-> self root trans quad) (-> (the-as process-drawable (-> self parent 0)) root trans quad))
+ (dummy-14 (-> self draw shadow-ctrl))
+ 0
+ (none)
+ )
+ :code
+ (behavior ()
+ (while #t
+ (logior! (-> self mask) (process-mask sleep-code))
+ (suspend)
+ )
+ (none)
+ )
+ :post
+ (the-as (function none :behavior snow-ball-shadow) ja-post)
+ )
+
+;; definition for function snow-ball-shadow-init-by-other
+;; INFO: Return type mismatch object vs none.
+;; Used lq/sq
+(defbehavior snow-ball-shadow-init-by-other snow-ball-shadow ()
+ (stack-size-set! (-> self main-thread) 128)
+ (logclear! (-> self mask) (process-mask actor-pause movie enemy platform projectile))
+ (set! (-> self root) (new 'process 'trsqv))
+ (set! (-> self root trans quad) (-> (the-as process-drawable (-> self parent 0)) root trans quad))
+ (quaternion-identity! (-> self root quat))
+ (vector-identity! (-> self root scale))
+ (initialize-skeleton self *snow-ball-shadow-sg* '())
+ (ja-channel-set! 1)
+ (let ((gp-0 (-> self skel root-channel 0)))
+ (joint-control-channel-group-eval!
+ gp-0
+ (the-as art-joint-anim (-> self draw art-group data 6))
+ num-func-identity
+ )
+ (set! (-> gp-0 frame-num) 0.0)
+ )
+ (set! (-> self draw shadow-ctrl) *snow-ball-shadow-control*)
+ (go snow-ball-shadow-idle)
+ (none)
+ )
+
+;; definition for function snow-ball-roller-path-init
+;; INFO: Return type mismatch float vs none.
+(defbehavior snow-ball-roller-path-init snow-ball-roller ()
+ (set! (-> self path-u) 0.0)
+ (set! (-> self path-length) (path-distance (-> self path)))
+ (none)
+ )
+
+;; definition for method 20 of type snow-ball-roller
+;; INFO: Return type mismatch float vs none.
+;; Used lq/sq
+(defmethod follow-path snow-ball-roller ((obj snow-ball-roller))
+ (let ((s5-0 (-> obj path-info)))
+ (set! (-> s5-0 hug-path?) #f)
+ (let ((s4-0 (new 'stack-no-clear 'vector)))
+ (set! (-> s4-0 quad) (-> s5-0 path-pos quad))
+ (eval-path-curve! (-> obj path) (-> s5-0 path-pos) (-> obj path-u) 'interp)
+ (let ((f0-1 (-> obj path-coming-out-u)))
+ (when (< (-> obj path-u) f0-1)
+ (set! (-> s5-0 path-pos y) (+ (- -20480.0 (* -20480.0 (/ (-> obj path-u) f0-1))) (-> s5-0 path-pos y)))
+ (set! (-> s5-0 hug-path?) #t)
+ )
+ )
+ (let ((f0-6 (-> obj path-faded-up-u)))
+ (cond
+ ((< (-> obj path-u) f0-6)
+ (let* ((f0-7 (/ (-> obj path-u) f0-6))
+ (f0-8 (* f0-7 f0-7))
+ )
+ (set-vector! (-> obj draw color-mult) f0-8 f0-8 f0-8 1.0)
+ )
+ )
+ (else
+ (vector-identity! (-> obj draw color-mult))
+ )
+ )
+ )
+ (cond
+ ((>= (-> obj path-u) (-> obj path-fall-u))
+ (set! (-> s5-0 path-pos y) -409600.0)
+ (set! (-> s5-0 path-pos x) (+ (-> s4-0 x) (-> obj root-override transv x)))
+ (set! (-> s5-0 path-pos z) (+ (-> s4-0 z) (-> obj root-override transv z)))
+ (set! (-> obj rolling-sound-enabled?) #f)
+ )
+ (else
+ (set! (-> obj root-override transv x) (- (-> s5-0 path-pos x) (-> s4-0 x)))
+ (set! (-> obj root-override transv z) (- (-> s5-0 path-pos z) (-> s4-0 z)))
+ )
+ )
+ )
+ )
+ (none)
+ )
+
+;; definition for method 21 of type snow-ball-roller
+(defmethod play-landing-sound snow-ball-roller ((obj snow-ball-roller) (arg0 float))
+ (let ((f30-0 (* 0.0018780049 (fmin 53248.0 (fmax 0.0 (+ -4096.0 (fabs arg0)))))))
+ (sound-play-by-name (static-sound-name "snowball-land") (new-sound-id) (the int (* 10.24 f30-0)) 0 0 1 #t)
+ )
+ )
+
+;; definition for function snow-ball-roller-path-update
+;; INFO: Return type mismatch int vs none.
+;; Used lq/sq
+(defbehavior snow-ball-roller-path-update snow-ball-roller ()
+ (local-vars (f0-5 float))
+ (let ((f0-0 (-> self root-override trans y)))
+ (+! (-> self root-override transv y) (* -491520.0 (-> *display* seconds-per-frame)))
+ (let ((f30-0 (+ f0-0 (* (-> self root-override transv y) (-> *display* seconds-per-frame)))))
+ (follow-path self)
+ (let ((a1-0 (new 'stack-no-clear 'vector)))
+ (let ((a0-1 (-> self path-info)))
+ (set! (-> a1-0 quad) (-> a0-1 path-pos quad))
+ )
+ (set! (-> a1-0 y) (+ 9216.0 (-> a1-0 y)))
+ (cond
+ ((-> self path-info hug-path?)
+ (move-to-point! (-> self root-override) a1-0)
+ (set! (-> self root-override transv y) 0.0)
+ )
+ ((begin (set! f0-5 (- f30-0 (-> a1-0 y))) (< 0.0 f0-5))
+ (+! (-> a1-0 y) f0-5)
+ (move-to-point! (-> self root-override) a1-0)
+ )
+ (else
+ (move-to-point! (-> self root-override) a1-0)
+ (let ((f0-7 (-> self root-override transv y)))
+ (cond
+ ((>= -40960.0 f0-7)
+ (set! (-> self root-override transv y) (* 0.4 (- f0-7)))
+ (play-landing-sound self (-> self root-override transv y))
+ )
+ (else
+ (set! (-> self root-override transv y) 0.0)
+ )
+ )
+ )
+ (when (< (-> self path-u) (-> self path-fall-u))
+ (when (>= (- (-> *display* base-frame-counter) (-> self last-bounce-time)) (-> self delay-til-bounce))
+ (let ((f0-13 (rand-vu-float-range 8192.0 20480.0)))
+ (+! (-> self root-override transv y) f0-13)
+ (play-landing-sound self f0-13)
+ )
+ (set! (-> self last-bounce-time) (-> *display* base-frame-counter))
+ (set! (-> self delay-til-bounce) (rand-vu-int-range 300 2100))
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ (let ((s4-0 (new 'stack-no-clear 'vector)))
+ (TODO-RENAME-14 (-> self path) s4-0 (-> self path-u))
+ (let ((gp-0 (new 'stack-no-clear 'matrix)))
+ (let ((s5-0 (new 'stack-no-clear 'matrix)))
+ (let ((s3-0 (new 'stack-no-clear 'vector)))
+ (vector-negate! s3-0 (-> *standard-dynamics* gravity-normal))
+ (forward-down->inv-matrix gp-0 s4-0 s3-0)
+ )
+ (matrix-rotate-x! s5-0 (* 1.1317686 (-> self path-u) (-> self path-length)))
+ (matrix*! gp-0 s5-0 gp-0)
+ )
+ (matrix->quaternion (-> self root-override quat) gp-0)
+ )
+ )
+ (+! (-> self path-u) (* (-> self path-speed) (-> *display* seconds-per-frame)))
+ (if (< 1.0 (-> self path-u))
+ (set! (-> self path-u) 1.0)
+ )
+ (let ((f0-23 (- 819200.0 (-> self root-override trans y))))
+ (when (>= f0-23 0.0)
+ (cond
+ ((>= f0-23 245760.0)
+ (deactivate self)
+ )
+ (else
+ (let ((f0-25 (- 1.0 (* 0.0000040690106 f0-23))))
+ (set! (-> self root-override scale x) f0-25)
+ (set! (-> self root-override scale y) f0-25)
+ (set! (-> self root-override scale z) f0-25)
+ )
+ )
+ )
+ )
+ )
+ (let ((v1-54 (< (vector-vector-distance (-> self root-override trans) (math-camera-pos)) 163840.0)))
+ (cond
+ ((zero? (-> self rolling-sound-id))
+ (if (and v1-54 (-> self rolling-sound-enabled?))
+ (set! (-> self rolling-sound-id) (sound-play-by-name
+ (static-sound-name "snowball-roll")
+ (new-sound-id)
+ 1024
+ 0
+ 0
+ 1
+ (the-as symbol (-> self root-override trans))
+ )
+ )
+ )
+ )
+ ((and v1-54 (-> self rolling-sound-enabled?))
+ (sound-play-by-name
+ (static-sound-name "snowball-roll")
+ (-> self rolling-sound-id)
+ 1024
+ 0
+ 0
+ 1
+ (the-as symbol (-> self root-override trans))
+ )
+ )
+ (else
+ (sound-stop (-> self rolling-sound-id))
+ (set! (-> self rolling-sound-id) (new 'static 'sound-id))
+ 0
+ )
+ )
+ )
+ (none)
+ )
+
+;; definition for method 22 of type snow-ball-roller
+;; INFO: Return type mismatch object vs none.
+;; Used lq/sq
+(defmethod dummy-22 snow-ball-roller ((obj snow-ball-roller) (arg0 process-drawable))
+ (with-pp
+ (cond
+ ((< (+ 4096.0 (-> arg0 root trans y)) (-> obj root-override trans y))
+ (let ((f0-2 81920.0))
+ (+! (-> obj root-override transv y) f0-2)
+ (play-landing-sound obj f0-2)
+ )
+ )
+ (else
+ (let ((f0-3 24576.0))
+ (+! (-> obj root-override transv y) f0-3)
+ (play-landing-sound obj f0-3)
+ )
+ )
+ )
+ (let ((s4-0 (new 'stack-no-clear 'vector)))
+ (let ((s3-0 (new 'stack-no-clear 'vector)))
+ (vector-! s4-0 (-> arg0 root trans) (-> obj root-override trans))
+ (set! (-> s4-0 y) 0.0)
+ (vector-normalize! s4-0 1.0)
+ (TODO-RENAME-14 (-> obj path) s3-0 (-> obj path-u))
+ (set! (-> s3-0 y) 0.0)
+ (vector-normalize! s3-0 1.0)
+ (let* ((f28-0 (atan (-> s4-0 x) (-> s4-0 z)))
+ (f30-0 (atan (-> s3-0 x) (-> s3-0 z)))
+ (f0-11 (deg- f28-0 f30-0))
+ )
+ (when (< (fabs f0-11) 10922.667)
+ (let ((f30-1 (+ f30-0 (if (>= f0-11 0.0)
+ 10922.667
+ -10922.667
+ )
+ )
+ )
+ )
+ (set-vector! s4-0 (sin f30-1) 0.0 (cos f30-1) 1.0)
+ )
+ )
+ )
+ )
+ (vector-normalize! s4-0 25600.0)
+ (vector+! s4-0 s4-0 (-> obj root-override trans))
+ (vector-! s4-0 s4-0 (-> arg0 root trans))
+ (set! (-> s4-0 y) 0.0)
+ (let ((f30-2 (vector-length s4-0)))
+ (vector-normalize! s4-0 1.0)
+ (let ((a1-17 (new 'stack-no-clear 'event-message-block)))
+ (set! (-> a1-17 from) pp)
+ (set! (-> a1-17 num-params) 2)
+ (set! (-> a1-17 message) 'attack)
+ (set! (-> a1-17 param 0) (the-as uint #f))
+ (let ((v1-20 (new 'static 'attack-info :mask #xc2)))
+ (set! (-> v1-20 vector quad) (-> s4-0 quad))
+ (set! (-> v1-20 shove-up) 12288.0)
+ (set! (-> v1-20 shove-back) f30-2)
+ (set! (-> a1-17 param 1) (the-as uint v1-20))
+ )
+ (send-event-function arg0 a1-17)
+ )
+ )
+ )
+ (none)
+ )
+ )
+
+;; failed to figure out what this is:
+(defstate snow-ball-roller-idle (snow-ball-roller)
+ :event
+ (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block))
+ (let ((v1-0 arg2))
+ (the-as object (when (or (= v1-0 'touch) (= v1-0 'attack))
+ (when (= (-> arg0 type) target)
+ (do-push-aways! (-> self root-override))
+ (when (>= (- (-> *display* base-frame-counter) (-> self hit-player-time)) 150)
+ (set! (-> self hit-player-time) (-> *display* base-frame-counter))
+ (dummy-22 self *target*)
+ )
+ )
+ )
+ )
+ )
+ )
+ :enter
+ (behavior ()
+ (set! (-> self last-bounce-time) (-> *display* base-frame-counter))
+ (snow-ball-roller-path-init)
+ (none)
+ )
+ :exit
+ (behavior ()
+ (set! (-> self rolling-sound-enabled?) #f)
+ (when (nonzero? (-> self rolling-sound-id))
+ (sound-stop (-> self rolling-sound-id))
+ (set! (-> self rolling-sound-id) (new 'static 'sound-id))
+ 0
+ )
+ (none)
+ )
+ :trans
+ (behavior ()
+ (snow-ball-roller-path-update)
+ (none)
+ )
+ :code
+ (behavior ()
+ (while #t
+ (logior! (-> self mask) (process-mask sleep-code))
+ (suspend)
+ )
+ (none)
+ )
+ :post
+ (the-as (function none :behavior snow-ball-roller) transform-post)
+ )
+
+;; definition for function snow-ball-roller-init-by-other
+;; INFO: Return type mismatch object vs none.
+(defbehavior snow-ball-roller-init-by-other snow-ball-roller ((arg0 entity-actor) (arg1 snow-ball) (arg2 float) (arg3 int) (arg4 (inline-array snow-ball-junction)))
+ (set! (-> self rolling-sound-id) (new 'static 'sound-id))
+ (set! (-> self rolling-sound-enabled?) #t)
+ (set! (-> self path-speed) arg2)
+ (set! (-> self which-path) arg3)
+ (set! (-> self hit-player-time) 0)
+ (set! (-> self entity) arg0)
+ (dotimes (s3-0 4)
+ (mem-copy! (the-as pointer (-> self junctions s3-0)) (the-as pointer (-> arg4 s3-0)) 16)
+ )
+ (let ((s4-1 (new 'process 'collide-shape-moving self (collide-list-enum hit-by-player))))
+ (set! (-> s4-1 dynam) (copy *standard-dynamics* 'process))
+ (set! (-> s4-1 reaction) default-collision-reaction)
+ (set! (-> s4-1 no-reaction)
+ (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing)
+ )
+ (let ((s3-1 (new 'process 'collide-shape-prim-sphere s4-1 (the-as uint 0))))
+ (set! (-> s3-1 prim-core collide-as) (collide-kind enemy))
+ (set! (-> s3-1 collide-with) (collide-kind target))
+ (set! (-> s3-1 prim-core action) (collide-action solid))
+ (set! (-> s3-1 prim-core offense) (collide-offense indestructible))
+ (set-vector! (-> s3-1 local-sphere) 0.0 0.0 0.0 10240.0)
+ (set-root-prim! s4-1 s3-1)
+ )
+ (set! (-> s4-1 nav-radius) (* 0.75 (-> s4-1 root-prim local-sphere w)))
+ (backup-collide-with-as s4-1)
+ (set! (-> self root-override) s4-1)
+ )
+ (set-vector! (-> self root-override transv) 0.0 0.0 0.0 1.0)
+ (process-drawable-from-entity! self arg0)
+ (initialize-skeleton self *snow-ball-sg* '())
+ (logclear! (-> self mask) (process-mask actor-pause))
+ (set! (-> self path) (new 'process 'curve-control self 'path (the float (+ arg3 1))))
+ (logior! (-> self path flags) (path-control-flag display draw-line draw-point draw-text))
+ (let ((v1-33 (-> self which-path)))
+ (cond
+ ((zero? v1-33)
+ (set! (-> self path-fall-u) 0.8667)
+ (set! (-> self path-coming-out-u) 0.05)
+ (set! (-> self path-faded-up-u) 0.075)
+ )
+ ((= v1-33 1)
+ (set! (-> self path-fall-u) 0.9105)
+ (set! (-> self path-coming-out-u) 0.05)
+ (set! (-> self path-faded-up-u) 0.075)
+ )
+ )
+ )
+ (set! (-> self delay-til-bounce) (rand-vu-int-range 900 2100))
+ (let ((gp-1 (get-process *default-dead-pool* snow-ball-shadow #x4000)))
+ (when gp-1
+ (let ((t9-11 (method-of-type snow-ball-shadow activate)))
+ (t9-11 (the-as snow-ball-shadow gp-1) self 'snow-ball-shadow (the-as pointer #x70004000))
+ )
+ (run-now-in-process gp-1 snow-ball-shadow-init-by-other)
+ (-> gp-1 ppointer)
+ )
+ )
+ (go snow-ball-roller-idle)
+ (none)
+ )
+
+;; definition for method 14 of type snow-ball
+(defmethod dummy-14 snow-ball ((obj snow-ball) (arg0 (inline-array snow-ball-junction)) (arg1 float) (arg2 int))
+ (local-vars (v1-0 (pointer float)))
+ (if (zero? arg2)
+ (set! v1-0 (new 'static 'array float 8 0.3309 0.36 0.4691 0.5061 0.6904 0.7264 0.864 0.8667))
+ (set! v1-0 (new 'static 'array float 8 0.3344 0.3528 0.4919 0.5246 0.6967 0.7272 0.8677 0.9105))
+ )
+ (let ((a0-4 (* arg1 (-> *display* seconds-per-frame)))
+ (a1-1 (-> arg0 0))
+ (a2-2 (-> *display* base-frame-counter))
+ )
+ (dotimes (a3-1 4)
+ (set! (-> a1-1 enter-time) (+ a2-2 (the int (/ (-> v1-0 0) a0-4))))
+ (set! (-> a1-1 exit-time) (+ a2-2 (the int (/ (-> v1-0 1) a0-4))))
+ (set! v1-0 (&-> v1-0 2))
+ (&+! a1-1 16)
+ )
+ )
+ #f
+ )
+
+;; definition for method 15 of type snow-ball
+(defmethod dummy-15 snow-ball ((obj snow-ball) (arg0 (inline-array snow-ball-junction)) (arg1 int))
+ (local-vars (v0-0 symbol))
+ (let ((v1-0 (-> obj child-override)))
+ (while v1-0
+ (let ((a0-1 (-> arg0 0))
+ (a3-1 (-> v1-0 0 junctions))
+ )
+ (dotimes (t0-0 3)
+ (if (and (>= (-> a3-1 0 exit-time) (-> a0-1 enter-time)) (>= (-> a0-1 exit-time) (-> a3-1 0 enter-time)))
+ (return #f)
+ )
+ (&+! a0-1 16)
+ (set! a3-1 (the-as (inline-array snow-ball-junction) (-> a3-1 1)))
+ )
+ (when (= arg1 (-> v1-0 0 which-path))
+ (if (>= (-> a3-1 0 exit-time) (-> a0-1 enter-time))
+ (return #f)
+ )
+ )
+ )
+ (set! v1-0 (the-as (pointer snow-ball-roller) (-> v1-0 0 brother)))
+ )
+ )
+ (return #t)
+ v0-0
+ )
+
+;; failed to figure out what this is:
+(defstate snow-ball-idle (snow-ball)
+ :code
+ (behavior ()
+ (local-vars (gp-0 int))
+ (set! (-> self state-time) (-> *display* base-frame-counter))
+ (set! (-> self delay-til-next) 0)
+ (label cfg-1)
+ (when (>= (- (-> *display* base-frame-counter) (-> self state-time)) (-> self delay-til-next))
+ (set! gp-0 (cond
+ ((>= (-> self same-path-picked-count) 2)
+ (if (zero? (-> self last-path-picked))
+ (set! gp-0 1)
+ (set! gp-0 0)
+ )
+ gp-0
+ )
+ (else
+ (rand-vu-int-range 0 1)
+ )
+ )
+ )
+ (let ((s4-0 0)
+ (s5-0 (new 'stack-no-clear 'inline-array 'snow-ball-junction 4))
+ )
+ (while #t
+ (let ((s3-0 (/ (+ 98304.0 (rand-vu-float-range 0.0 32768.0)) (path-distance (-> self path gp-0)))))
+ (dummy-14 self s5-0 s3-0 gp-0)
+ (when (dummy-15 self s5-0 gp-0)
+ (let ((s4-1 (get-process *default-dead-pool* snow-ball-roller #x4000)))
+ (when s4-1
+ (let ((t9-6 (method-of-type snow-ball-roller activate)))
+ (t9-6 (the-as snow-ball-roller s4-1) self 'snow-ball-roller (the-as pointer #x70004000))
+ )
+ (run-now-in-process s4-1 snow-ball-roller-init-by-other (-> self entity) self s3-0 gp-0 s5-0)
+ (-> s4-1 ppointer)
+ )
+ )
+ (set! (-> self state-time) (-> *display* base-frame-counter))
+ (set! (-> self delay-til-next) (rand-vu-int-range 450 1650))
+ (cond
+ ((= gp-0 (-> self last-path-picked))
+ (+! (-> self same-path-picked-count) 1)
+ )
+ (else
+ (set! (-> self last-path-picked) gp-0)
+ (set! (-> self same-path-picked-count) 1)
+ )
+ )
+ (goto cfg-22)
+ )
+ )
+ (+! s4-0 1)
+ (if (< 5 s4-0)
+ (goto cfg-22)
+ )
+ )
+ )
+ )
+ (label cfg-22)
+ (suspend)
+ (b! #t cfg-1 :delay (nop!))
+ (none)
+ )
+ )
+
+;; definition for method 7 of type snow-ball
+;; INFO: Return type mismatch process-drawable vs snow-ball.
+(defmethod relocate snow-ball ((obj snow-ball) (arg0 int))
+ (dotimes (v1-0 2)
+ (if (nonzero? (-> obj path v1-0))
+ (&+! (-> obj path v1-0) arg0)
+ )
+ )
+ (the-as snow-ball ((the-as (function process-drawable int process-drawable) (find-parent-method snow-ball 7))
+ (the-as process-drawable obj)
+ arg0
+ )
+ )
+ )
+
+;; definition for method 11 of type snow-ball
+;; INFO: Return type mismatch object vs none.
+(defmethod init-from-entity! snow-ball ((obj snow-ball) (arg0 entity-actor))
+ (set! (-> obj last-path-picked) 1)
+ (set! (-> obj same-path-picked-count) 1)
+ (dotimes (s5-0 2)
+ (set! (-> obj path s5-0) (new 'process 'curve-control obj 'path (the float (+ s5-0 1))))
+ )
+ (logclear! (-> obj mask) (process-mask actor-pause))
+ (go snow-ball-idle)
+ (none)
+ )
diff --git a/test/decompiler/reference/levels/snow/snow-flutflut-obs_REF.gc b/test/decompiler/reference/levels/snow/snow-flutflut-obs_REF.gc
index 26565897e2..27fee7a266 100644
--- a/test/decompiler/reference/levels/snow/snow-flutflut-obs_REF.gc
+++ b/test/decompiler/reference/levels/snow/snow-flutflut-obs_REF.gc
@@ -55,8 +55,8 @@
(deftype snow-button (process-drawable)
((root-override collide-shape-moving :offset 112)
(wiggled? symbol :offset-assert 176)
- (timeout uint64 :offset-assert 184)
- (delay-til-wiggle uint64 :offset-assert 192)
+ (timeout int64 :offset-assert 184)
+ (delay-til-wiggle int64 :offset-assert 192)
(prev-button entity-actor :offset-assert 200)
(ticker ticky :inline :offset-assert 208)
)
@@ -503,7 +503,7 @@
(set! (-> obj link) (new 'process 'actor-link-info obj))
(initialize-skeleton obj *snow-button-sg* '())
(logior! (-> obj skel status) 1)
- (set! (-> obj timeout) (the-as uint (the int (* 300.0 (res-lump-float arg0 'timeout :default 10.0)))))
+ (set! (-> obj timeout) (the int (* 300.0 (res-lump-float arg0 'timeout :default 10.0))))
(set! (-> obj delay-til-wiggle) (+ (-> obj timeout) -120))
(if (> (entity-actor-count arg0 'alt-actor) 0)
(set! (-> obj prev-button) (entity-actor-lookup arg0 'alt-actor 0))
diff --git a/test/decompiler/reference/levels/snow/snow-ram-boss_REF.gc b/test/decompiler/reference/levels/snow/snow-ram-boss_REF.gc
new file mode 100644
index 0000000000..94ff45f6b2
--- /dev/null
+++ b/test/decompiler/reference/levels/snow/snow-ram-boss_REF.gc
@@ -0,0 +1,2347 @@
+;;-*-Lisp-*-
+(in-package goal)
+
+;; definition of type ram-boss-proj
+(deftype ram-boss-proj (projectile)
+ ((parent-override (pointer ram-boss) :offset 12)
+ (part2 sparticle-launch-control :offset-assert 412)
+ (launched? symbol :offset-assert 416)
+ (growth float :offset-assert 420)
+ (charge-sound-id sound-id :offset-assert 424)
+ (launch-time uint64 :offset-assert 432)
+ (facing-dir vector :inline :offset-assert 448)
+ )
+ :heap-base #x160
+ :method-count-assert 29
+ :size-assert #x1d0
+ :flag-assert #x1d016001d0
+ (:states
+ ram-boss-proj-growing
+ ram-boss-proj-launch
+ )
+ )
+
+;; definition for method 3 of type ram-boss-proj
+(defmethod inspect ram-boss-proj ((obj ram-boss-proj))
+ (let ((t9-0 (method-of-type projectile inspect)))
+ (t9-0 obj)
+ )
+ (format #t "~T~Tpart2: ~A~%" (-> obj part2))
+ (format #t "~T~Tlaunched?: ~A~%" (-> obj launched?))
+ (format #t "~T~Tgrowth: ~f~%" (-> obj growth))
+ (format #t "~T~Tcharge-sound-id: ~D~%" (-> obj charge-sound-id))
+ (format #t "~T~Tlaunch-time: ~D~%" (-> obj launch-time))
+ (format #t "~T~Tfacing-dir: #~%" (-> obj facing-dir))
+ obj
+ )
+
+;; definition of type ram-boss
+(deftype ram-boss (nav-enemy)
+ ((parent-override (pointer ram) :offset 12)
+ (facing-y float :offset-assert 400)
+ (player-dir-y float :offset-assert 404)
+ (last-turn-speed float :offset-assert 408)
+ (frustration int32 :offset-assert 412)
+ (dead? symbol :offset-assert 416)
+ (has-shield? symbol :offset-assert 420)
+ (proj-stoked basic :offset-assert 424)
+ (proj-status uint64 :offset-assert 432)
+ (part2 sparticle-launch-control :offset-assert 440)
+ (proj-last-thrown-time uint64 :offset-assert 448)
+ (nav-enemy-patrol-timeout uint64 :offset-assert 456)
+ (proj-launch-vec vector :inline :offset-assert 464)
+ (local-throw-point vector :inline :offset-assert 480)
+ (shield-jmod joint-mod-set-local :offset-assert 496)
+ )
+ :heap-base #x190
+ :method-count-assert 76
+ :size-assert #x1f4
+ :flag-assert #x4c019001f4
+ (:methods
+ (dummy-51 (_type_ vector) symbol :replace 51)
+ (dummy-52 (_type_) symbol :replace 52)
+ (dummy-57 (_type_ float) float :replace 57)
+ )
+ (:states
+ (ram-boss-already-down basic)
+ ram-boss-forward-defend-block
+ ram-boss-idle
+ (ram-boss-jump-down basic)
+ ram-boss-jump-down-hit-ground
+ ram-boss-lose-shield
+ ram-boss-nav-resume
+ ram-boss-nav-start
+ ram-boss-show-anims
+ ram-boss-throw
+ ram-boss-tracking
+ ram-boss-up-defend-block
+ )
+ )
+
+;; definition for method 3 of type ram-boss
+(defmethod inspect ram-boss ((obj ram-boss))
+ (let ((t9-0 (method-of-type nav-enemy inspect)))
+ (t9-0 obj)
+ )
+ (format #t "~T~Tfacing-y: ~f~%" (-> obj facing-y))
+ (format #t "~T~Tplayer-dir-y: ~f~%" (-> obj player-dir-y))
+ (format #t "~T~Tlast-turn-speed: ~f~%" (-> obj last-turn-speed))
+ (format #t "~T~Tfrustration: ~D~%" (-> obj frustration))
+ (format #t "~T~Tdead?: ~A~%" (-> obj dead?))
+ (format #t "~T~Thas-shield?: ~A~%" (-> obj has-shield?))
+ (format #t "~T~Tproj-stoked: ~A~%" (-> obj proj-stoked))
+ (format #t "~T~Tproj-status: ~D~%" (-> obj proj-status))
+ (format #t "~T~Tpart2: ~A~%" (-> obj part2))
+ (format #t "~T~Tproj-last-thrown-time: ~D~%" (-> obj proj-last-thrown-time))
+ (format #t "~T~Tnav-enemy-patrol-timeout: ~D~%" (-> obj nav-enemy-patrol-timeout))
+ (format #t "~T~Tproj-launch-vec: #~%" (-> obj proj-launch-vec))
+ (format #t "~T~Tlocal-throw-point: #~%" (-> obj local-throw-point))
+ (format #t "~T~Tshield-jmod: ~A~%" (-> obj shield-jmod))
+ obj
+ )
+
+;; failed to figure out what this is:
+(defskelgroup *ram-boss-sg* ram-boss
+ 0
+ 13
+ ((1 (meters 20)) (2 (meters 40)) (3 (meters 999999)))
+ :bounds (static-spherem 0 1 0 4.4)
+ :longest-edge (meters 1.2)
+ )
+
+;; definition for symbol *ram-boss-nav-enemy-info*, type nav-enemy-info
+(define *ram-boss-nav-enemy-info* (new 'static 'nav-enemy-info
+ :idle-anim 13
+ :walk-anim 11
+ :turn-anim -1
+ :notice-anim 19
+ :run-anim 11
+ :jump-anim 13
+ :jump-land-anim 13
+ :victory-anim 14
+ :taunt-anim 14
+ :die-anim 15
+ :neck-joint 6
+ :player-look-at-joint 5
+ :run-travel-speed (meters 6.0)
+ :run-rotate-speed (degrees 2880.0)
+ :run-acceleration (meters 1.0)
+ :run-turn-time (seconds 0.1)
+ :walk-travel-speed (meters 4.0)
+ :walk-rotate-speed (degrees 720.0)
+ :walk-acceleration (meters 1.0)
+ :walk-turn-time (seconds 0.5)
+ :attack-shove-back (meters 2.0)
+ :attack-shove-up (meters 0.5)
+ :shadow-size (meters 2.0)
+ :notice-nav-radius (meters 18.0)
+ :nav-nearest-y-threshold (meters 10.0)
+ :notice-distance (meters 58.0)
+ :stop-chase-distance (meters 58.0)
+ :frustration-time #x2328
+ :die-anim-hold-frame 24.0
+ :jump-anim-start-frame 10.0
+ :jump-land-anim-end-frame 10000000000.0
+ :jump-height-min (meters 3.0)
+ :jump-height-factor 0.5
+ :jump-start-anim-speed 1.0
+ :shadow-max-y (meters 1.0)
+ :shadow-min-y (meters -1.0)
+ :shadow-locus-dist (meters 150.0)
+ :use-align #f
+ :draw-shadow #t
+ :move-to-ground #t
+ :hover-if-no-ground #f
+ :use-momentum #f
+ :use-flee #f
+ :use-proximity-notice #f
+ :use-jump-blocked #f
+ :use-jump-patrol #f
+ :gnd-collide-with #x1
+ :debug-draw-neck #f
+ :debug-draw-jump #f
+ )
+ )
+
+;; definition for symbol *ram-boss-nav-enemy-info-no-shield*, type nav-enemy-info
+(define *ram-boss-nav-enemy-info-no-shield* (new 'static 'nav-enemy-info
+ :idle-anim 13
+ :walk-anim 12
+ :turn-anim -1
+ :notice-anim 19
+ :run-anim 12
+ :jump-anim 13
+ :jump-land-anim 13
+ :victory-anim 14
+ :taunt-anim 14
+ :die-anim 15
+ :neck-joint 6
+ :player-look-at-joint 5
+ :run-travel-speed (meters 6.0)
+ :run-rotate-speed (degrees 2880.0)
+ :run-acceleration (meters 1.0)
+ :run-turn-time (seconds 0.1)
+ :walk-travel-speed (meters 4.0)
+ :walk-rotate-speed (degrees 720.0)
+ :walk-acceleration (meters 1.0)
+ :walk-turn-time (seconds 0.5)
+ :attack-shove-back (meters 2.0)
+ :attack-shove-up (meters 0.5)
+ :shadow-size (meters 2.0)
+ :notice-nav-radius (meters 18.0)
+ :nav-nearest-y-threshold (meters 10.0)
+ :notice-distance (meters 58.0)
+ :stop-chase-distance (meters 58.0)
+ :frustration-time #x2328
+ :die-anim-hold-frame 24.0
+ :jump-anim-start-frame 10.0
+ :jump-land-anim-end-frame 10000000000.0
+ :jump-height-min (meters 3.0)
+ :jump-height-factor 0.5
+ :jump-start-anim-speed 1.0
+ :shadow-max-y (meters 1.0)
+ :shadow-min-y (meters -1.0)
+ :shadow-locus-dist (meters 150.0)
+ :use-align #f
+ :draw-shadow #t
+ :move-to-ground #t
+ :hover-if-no-ground #f
+ :use-momentum #f
+ :use-flee #f
+ :use-proximity-notice #f
+ :use-jump-blocked #f
+ :use-jump-patrol #f
+ :gnd-collide-with #x1
+ :debug-draw-neck #f
+ :debug-draw-jump #f
+ )
+ )
+
+;; failed to figure out what this is:
+(defpartgroup group-ram-boss-proj-grow
+ :id 521
+ :flags (use-local-clock)
+ :bounds (static-bspherem 0 0 0 8)
+ :parts
+ ((sp-item 1904) (sp-item 1905) (sp-item 2487))
+ )
+
+;; failed to figure out what this is:
+(defpart 2487
+ :init-specs
+ ((sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2))
+ (sp-flt spt-num 1.0)
+ (sp-rnd-flt spt-scale-x (meters 1.5) (meters 1) 1.0)
+ (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0)
+ (sp-copy-from-other spt-scale-y -4)
+ (sp-rnd-flt spt-r 96.0 96.0 1.0)
+ (sp-rnd-flt spt-g 48.0 48.0 1.0)
+ (sp-rnd-flt spt-b 0.0 32.0 1.0)
+ (sp-rnd-flt spt-a 64.0 64.0 1.0)
+ (sp-flt spt-fade-a -6.4)
+ (sp-int spt-timer 10)
+ (sp-cpuinfo-flags bit2 bit3)
+ (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0)
+ (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0)
+ (sp-flt spt-conerot-radius (meters 0.4))
+ )
+ )
+
+;; failed to figure out what this is:
+(defpart 1904
+ :init-specs
+ ((sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2))
+ (sp-rnd-flt spt-num 1.0 2.0 1.0)
+ (sp-rnd-flt spt-scale-x (meters 0.3) (meters 0.1) 1.0)
+ (sp-copy-from-other spt-scale-y -4)
+ (sp-rnd-flt spt-r 160.0 32.0 1.0)
+ (sp-rnd-flt spt-g 0.0 32.0 1.0)
+ (sp-flt spt-b 0.0)
+ (sp-flt spt-a 64.0)
+ (sp-flt spt-vel-y (meters -0.033333335))
+ (sp-flt spt-fade-r -0.53333336)
+ (sp-flt spt-fade-g 1.0666667)
+ (sp-flt spt-fade-b 0.53333336)
+ (sp-flt spt-fade-a 1.0666667)
+ (sp-int spt-timer 60)
+ (sp-cpuinfo-flags bit2)
+ (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0)
+ (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0)
+ (sp-flt spt-conerot-radius (meters 2))
+ )
+ )
+
+;; failed to figure out what this is:
+(defpart 1905
+ :init-specs
+ ((sp-tex spt-texture (new 'static 'texture-id :index #x4 :page #x2))
+ (sp-flt spt-num 4.0)
+ (sp-rnd-flt spt-scale-x (meters 0.5) (meters 0.25) 1.0)
+ (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0)
+ (sp-copy-from-other spt-scale-y -4)
+ (sp-rnd-flt spt-r 150.0 32.0 1.0)
+ (sp-rnd-flt spt-g 24.0 74.0 1.0)
+ (sp-rnd-flt spt-b 0.0 32.0 1.0)
+ (sp-rnd-flt spt-a 64.0 64.0 1.0)
+ (sp-flt spt-fade-a -6.4)
+ (sp-int spt-timer 10)
+ (sp-cpuinfo-flags bit2)
+ (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0)
+ (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0)
+ (sp-flt spt-conerot-radius (meters 0.15))
+ )
+ )
+
+;; failed to figure out what this is:
+(defpartgroup group-ram-boss-proj-fly
+ :id 522
+ :duration 300
+ :bounds (static-bspherem 0 0 0 3)
+ :parts
+ ((sp-item 1910 :flags (launch-asap) :binding 1908)
+ (sp-item 1908 :flags (start-dead) :binding 1909)
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ (sp-item 1909 :flags (start-dead launch-asap))
+ )
+ )
+
+;; failed to figure out what this is:
+(defpart 1910
+ :init-specs
+ ((sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2))
+ (sp-flt spt-num 1.0)
+ (sp-flt spt-scale-x (meters 0.01))
+ (sp-copy-from-other spt-scale-y -4)
+ (sp-flt spt-a 0.0)
+ (sp-int spt-timer 1200)
+ (sp-cpuinfo-flags bit3)
+ (sp-func spt-func 'sparticle-track-root-prim)
+ )
+ )
+
+;; failed to figure out what this is:
+(defpart 1908
+ :init-specs
+ ((sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2))
+ (sp-flt spt-num 1.0)
+ (sp-flt spt-scale-x (meters 1))
+ (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0)
+ (sp-copy-from-other spt-scale-y -4)
+ (sp-rnd-flt spt-r 128.0 32.0 1.0)
+ (sp-rnd-flt spt-g 64.0 32.0 1.0)
+ (sp-flt spt-b 32.0)
+ (sp-flt spt-a 128.0)
+ (sp-flt spt-scalevel-x (meters -0.006666667))
+ (sp-copy-from-other spt-scalevel-y -4)
+ (sp-flt spt-fade-r 0.53333336)
+ (sp-flt spt-fade-g -1.0666667)
+ (sp-flt spt-fade-b -0.53333336)
+ (sp-int spt-timer 150)
+ (sp-cpuinfo-flags bit2)
+ (sp-int spt-next-time 81)
+ (sp-launcher-by-id spt-next-launcher 1912)
+ (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0)
+ (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0)
+ (sp-flt spt-conerot-radius (meters 0.1))
+ )
+ )
+
+;; failed to figure out what this is:
+(defpart 1912
+ :init-specs
+ ((sp-flt spt-fade-r 0.0) (sp-flt spt-fade-g 0.0) (sp-flt spt-fade-b 0.0))
+ )
+
+;; failed to figure out what this is:
+(defpart 1909
+ :init-specs
+ ((sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2))
+ (sp-rnd-flt spt-num 1.0 5.0 1.0)
+ (sp-rnd-flt spt-scale-x (meters 0.2) (meters 0.1) 1.0)
+ (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0)
+ (sp-copy-from-other spt-scale-y -4)
+ (sp-rnd-flt spt-r 128.0 32.0 1.0)
+ (sp-rnd-flt spt-g 64.0 32.0 1.0)
+ (sp-flt spt-b 32.0)
+ (sp-flt spt-a 128.0)
+ (sp-rnd-flt spt-vel-y (meters 0.006666667) (meters 0.0033333334) 1.0)
+ (sp-flt spt-scalevel-x (meters -0.0026666666))
+ (sp-copy-from-other spt-scalevel-y -4)
+ (sp-flt spt-fade-r 0.53333336)
+ (sp-flt spt-fade-g -1.0666667)
+ (sp-flt spt-fade-b -0.53333336)
+ (sp-flt spt-accel-y -2.7306666)
+ (sp-flt spt-friction 0.97)
+ (sp-int-plain-rnd spt-timer 30 119 1)
+ (sp-cpuinfo-flags bit2)
+ (sp-int spt-next-time 60)
+ (sp-launcher-by-id spt-next-launcher 1912)
+ (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0)
+ (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0)
+ (sp-rnd-flt spt-conerot-radius (meters 0) (meters 0.4) 1.0)
+ )
+ )
+
+;; failed to figure out what this is:
+(defpartgroup group-ram-boss-proj-hit
+ :id 523
+ :duration 5
+ :flags (use-local-clock)
+ :bounds (static-bspherem 0 0 0 8)
+ :parts
+ ((sp-item 1914) (sp-item 1915) (sp-item 1916))
+ )
+
+;; failed to figure out what this is:
+(defpart 1914
+ :init-specs
+ ((sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2))
+ (sp-flt spt-num 64.0)
+ (sp-rnd-flt spt-scale-x (meters 0.5) (meters 0.2) 1.0)
+ (sp-copy-from-other spt-scale-y -4)
+ (sp-rnd-flt spt-r 192.0 32.0 1.0)
+ (sp-rnd-flt spt-g 96.0 64.0 1.0)
+ (sp-rnd-flt spt-b 32.0 32.0 1.0)
+ (sp-rnd-flt spt-a 32.0 32.0 1.0)
+ (sp-rnd-flt spt-vel-y (meters 0.026666667) (meters 0.053333335) 1.0)
+ (sp-flt spt-scalevel-x (meters -0.0033333334))
+ (sp-copy-from-other spt-scalevel-y -4)
+ (sp-flt spt-fade-r 0.0)
+ (sp-flt spt-fade-g -0.42666668)
+ (sp-flt spt-fade-b -0.21333334)
+ (sp-flt spt-accel-y -0.68266666)
+ (sp-flt spt-friction 0.97)
+ (sp-int-plain-rnd spt-timer 30 119 1)
+ (sp-cpuinfo-flags bit2)
+ (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0)
+ (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0)
+ (sp-rnd-flt spt-conerot-radius (meters 0) (meters 0.4) 1.0)
+ )
+ )
+
+;; failed to figure out what this is:
+(defpart 1916
+ :init-specs
+ ((sp-tex spt-texture (new 'static 'texture-id :page #x2))
+ (sp-flt spt-num 6.0)
+ (sp-rnd-flt spt-scale-x (meters 3) (meters 3) 1.0)
+ (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0)
+ (sp-copy-from-other spt-scale-y -4)
+ (sp-rnd-flt spt-r 128.0 32.0 1.0)
+ (sp-rnd-flt spt-g 64.0 32.0 1.0)
+ (sp-flt spt-b 32.0)
+ (sp-rnd-flt spt-a 32.0 32.0 1.0)
+ (sp-rnd-flt spt-rotvel-z (degrees -0.2) (degrees 0.4) 1.0)
+ (sp-flt spt-fade-r 0.21333334)
+ (sp-flt spt-fade-g -0.42666668)
+ (sp-flt spt-fade-b -0.21333334)
+ (sp-flt spt-fade-a -0.30476192)
+ (sp-rnd-flt spt-accel-y -0.68266666 0.68266666 1.0)
+ (sp-int spt-timer 210)
+ (sp-cpuinfo-flags bit2 bit3)
+ (sp-int spt-next-time 150)
+ (sp-launcher-by-id spt-next-launcher 1912)
+ (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 180.0) 1.0)
+ )
+ )
+
+;; failed to figure out what this is:
+(defpart 1915
+ :init-specs
+ ((sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2))
+ (sp-flt spt-num 1.0)
+ (sp-rnd-flt spt-scale-x (meters 6) (meters 1) 1.0)
+ (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0)
+ (sp-copy-from-other spt-scale-y -4)
+ (sp-rnd-flt spt-r 128.0 32.0 1.0)
+ (sp-rnd-flt spt-g 64.0 32.0 1.0)
+ (sp-flt spt-b 32.0)
+ (sp-flt spt-a 96.0)
+ (sp-flt spt-fade-a -4.8)
+ (sp-int spt-timer 15)
+ (sp-cpuinfo-flags bit2 bit3)
+ )
+ )
+
+;; failed to figure out what this is:
+(defpartgroup group-ram-boss-proj-die
+ :id 524
+ :duration 5
+ :flags (use-local-clock)
+ :bounds (static-bspherem 0 0 0 8)
+ :parts
+ ((sp-item 1914))
+ )
+
+;; definition for method 24 of type ram-boss-proj
+;; INFO: Return type mismatch sound-id vs none.
+(defmethod dummy-24 ram-boss-proj ((obj ram-boss-proj))
+ (with-pp
+ (quaternion-rotate-local-x!
+ (-> obj root-override quat)
+ (-> obj root-override quat)
+ (* 65718.05 (-> *display* seconds-per-frame))
+ )
+ (quaternion-rotate-local-y!
+ (-> obj root-override quat)
+ (-> obj root-override quat)
+ (* 32221.867 (-> *display* seconds-per-frame))
+ )
+ (let ((f0-9 (* 5120.0 (+ 0.9 (* 0.1 (cos (* 873.81335 (the float (mod (-> *display* base-frame-counter) 75)))))))))
+ (find-ground-and-draw-shadow
+ (-> obj root-override trans)
+ (the-as vector #f)
+ f0-9
+ (collide-kind background)
+ (the-as process #f)
+ 0.0
+ 81920.0
+ )
+ )
+ (if (-> obj launched?)
+ (spawn (-> obj part2) (the-as vector (-> obj root-override root-prim prim-core)))
+ )
+ (let ((s5-0 (the-as sound-rpc-set-param (get-sound-buffer-entry))))
+ (set! (-> s5-0 command) (sound-command set-param))
+ (set! (-> s5-0 id) (-> obj sound-id))
+ (let ((a1-4 (-> obj root-override trans)))
+ (let ((gp-1 pp))
+ (when (= a1-4 #t)
+ (if (and gp-1 (type-type? (-> gp-1 type) process-drawable) (nonzero? (-> (the-as process-drawable gp-1) root)))
+ (set! a1-4 (-> (the-as process-drawable gp-1) root trans))
+ (set! a1-4 (the-as vector #f))
+ )
+ )
+ )
+ (sound-trans-convert (-> s5-0 parms trans) a1-4)
+ )
+ (set! (-> s5-0 parms mask) (the-as uint 32))
+ (-> s5-0 id)
+ )
+ (none)
+ )
+ )
+
+;; definition for function snow-ram-proj-update-velocity
+;; INFO: Return type mismatch int vs none.
+(defun snow-ram-proj-update-velocity ((arg0 ram-boss-proj))
+ (when (>= (vector-vector-distance (-> arg0 parent-override 0 collide-info trans) (-> arg0 target))
+ (vector-vector-distance (-> arg0 parent-override 0 collide-info trans) (-> arg0 root-override trans))
+ )
+ (let ((s3-1 (vector-! (new 'stack-no-clear 'vector) (-> arg0 target) (-> arg0 root-override trans)))
+ (s4-0 (new 'stack-no-clear 'vector))
+ (s5-0 (vector-normalize-copy! (new 'stack-no-clear 'vector) (-> arg0 root-override transv) 1.0))
+ )
+ (if (logtest? (-> arg0 root-override status) 4)
+ (vector-flatten! s3-1 s3-1 (-> arg0 root-override local-normal))
+ )
+ (vector-normalize-copy! s4-0 s3-1 1.0)
+ (let ((s3-2 (new 'stack-no-clear 'matrix)))
+ (matrix-from-two-vectors-max-angle-partial!
+ s3-2
+ s5-0
+ s4-0
+ (* (-> arg0 max-turn) (-> *display* seconds-per-frame))
+ (-> arg0 tween)
+ )
+ (vector-matrix*! s5-0 s5-0 s3-2)
+ )
+ (vector-normalize! s5-0 1.0)
+ (vector-float*! (-> arg0 root-override transv) s5-0 (-> arg0 max-speed))
+ )
+ )
+ 0
+ (none)
+ )
+
+;; definition for method 25 of type ram-boss-proj
+;; INFO: Return type mismatch int vs none.
+(defmethod dummy-25 ram-boss-proj ((obj ram-boss-proj))
+ (go ram-boss-proj-growing)
+ 0
+ (none)
+ )
+
+;; definition for method 26 of type ram-boss-proj
+;; INFO: Return type mismatch int vs none.
+(defmethod dummy-26 ram-boss-proj ((obj ram-boss-proj))
+ (let ((s5-0 (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player))))
+ (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process))
+ (set! (-> s5-0 reaction) projectile-collision-reaction)
+ (set! (-> s5-0 no-reaction)
+ (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing)
+ )
+ (let ((s4-0 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 0))))
+ (set! (-> s4-0 prim-core collide-as) (collide-kind projectile))
+ (set! (-> s4-0 collide-with)
+ (collide-kind background cak-2 cak-3 target crate enemy wall-object ground-object)
+ )
+ (set! (-> s4-0 prim-core offense) (collide-offense strong-attack))
+ (set-vector! (-> s4-0 local-sphere) 0.0 0.0 0.0 1228.8)
+ (set-root-prim! s5-0 s4-0)
+ )
+ (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w)))
+ (backup-collide-with-as s5-0)
+ (set! (-> s5-0 max-iteration-count) (the-as uint 2))
+ (set! (-> s5-0 event-self) 'touched)
+ (set! (-> obj root-override) s5-0)
+ )
+ 0
+ (none)
+ )
+
+;; definition for method 27 of type ram-boss-proj
+;; INFO: Return type mismatch int vs none.
+(defmethod dummy-27 ram-boss-proj ((obj ram-boss-proj))
+ (set! (-> obj charge-sound-id) (new 'static 'sound-id))
+ (set! (-> obj part) (create-launch-control (-> *part-group-id-table* 521) obj))
+ (set! (-> obj part2) (create-launch-control (-> *part-group-id-table* 522) obj))
+ (set! (-> obj launched?) #f)
+ (set! (-> obj growth) 0.0)
+ (set! (-> obj max-speed) 40960.0)
+ (set! (-> obj update-velocity) snow-ram-proj-update-velocity)
+ (set! (-> obj max-turn) 11832.889)
+ (set! (-> obj tween) 0.02)
+ (set! (-> obj attack-mode) 'snow-ram-proj)
+ (set! (-> obj launch-time) (the-as uint (-> *display* base-frame-counter)))
+ (set! (-> obj timeout) (the-as uint 1200))
+ (set! (-> obj sound-id) (sound-play-by-name (static-sound-name "ramboss-track") (new-sound-id) 1024 0 0 1 #t))
+ (let ((v1-12 (-> obj parent-override)))
+ (set! (-> v1-12 0 proj-stoked) #t)
+ (set! (-> v1-12 0 proj-status) (the-as uint 1))
+ )
+ (none)
+ )
+
+;; definition for method 10 of type ram-boss-proj
+(defmethod deactivate ram-boss-proj ((obj ram-boss-proj))
+ (if (nonzero? (-> obj part2))
+ (kill-and-free-particles (-> obj part2))
+ )
+ ((method-of-type projectile deactivate) obj)
+ (none)
+ )
+
+;; definition for method 7 of type ram-boss-proj
+;; INFO: Return type mismatch projectile vs ram-boss-proj.
+(defmethod relocate ram-boss-proj ((obj ram-boss-proj) (arg0 int))
+ (if (nonzero? (-> obj part2))
+ (&+! (-> obj part2) arg0)
+ )
+ (the-as ram-boss-proj ((method-of-type projectile relocate) obj arg0))
+ )
+
+;; definition for method 28 of type ram-boss-proj
+;; INFO: Return type mismatch vector vs none.
+;; Used lq/sq
+(defmethod dummy-28 ram-boss-proj ((obj ram-boss-proj))
+ (when (and *target* (zero? (logand (-> *target* state-flags) #x80f8)))
+ (let ((gp-0 (-> obj target)))
+ (set! (-> gp-0 quad) (-> (target-pos 0) quad))
+ (set! (-> gp-0 y) (+ 4915.2 (-> gp-0 y)))
+ (let ((f0-2 (vector-vector-distance gp-0 (-> obj root-override trans)))
+ (a2-0 (new 'stack-no-clear 'vector))
+ )
+ (if (>= 0.0 f0-2)
+ (set! f0-2 409.6)
+ )
+ (set! (-> a2-0 quad) (-> *target* control transv quad))
+ (set! (-> a2-0 y) 0.0)
+ (let ((f0-3 (/ f0-2 (* 40960.0 (-> *display* seconds-per-frame)))))
+ (vector+float*! gp-0 gp-0 a2-0 (* f0-3 (-> *display* seconds-per-frame)))
+ )
+ )
+ )
+ )
+ (none)
+ )
+
+;; failed to figure out what this is:
+(defstate ram-boss-proj-growing (ram-boss-proj)
+ :event
+ (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block))
+ (case arg2
+ (('launch)
+ (let ((v1-1 (-> self parent-override)))
+ (set! (-> v1-1 0 proj-stoked) #f)
+ (set! (-> v1-1 0 proj-status) (the-as uint 0))
+ )
+ 0
+ (go ram-boss-proj-launch)
+ )
+ )
+ )
+ :code
+ (behavior ()
+ (set! (-> self charge-sound-id)
+ (sound-play-by-name (static-sound-name "ramboss-charge") (new-sound-id) 1024 0 0 1 #t)
+ )
+ (while #t
+ (let ((gp-1 (-> self parent-override)))
+ (when (-> gp-1 0 dead?)
+ (set! (-> gp-1 0 proj-stoked) #f)
+ (set! (-> gp-1 0 proj-status) (the-as uint 0))
+ (sound-stop (-> self charge-sound-id))
+ (go-virtual projectile-dissipate)
+ )
+ (dummy-54 (-> gp-1 0) (-> self root-override trans))
+ (update-transforms! (-> self root-override))
+ (cond
+ ((-> gp-1 0 proj-stoked)
+ (set! (-> gp-1 0 proj-stoked) #f)
+ (set! (-> self growth)
+ (seek-with-smooth (-> self growth) 1.0 (* 1.25 (-> *display* seconds-per-frame)) 0.8 0.01)
+ )
+ (if (>= (-> self growth) 1.0)
+ (set! (-> gp-1 0 proj-status) (the-as uint 2))
+ (set! (-> gp-1 0 proj-status) (the-as uint 1))
+ )
+ )
+ (else
+ (set! (-> self growth) 0.0)
+ (set! (-> gp-1 0 proj-stoked) #f)
+ (set! (-> gp-1 0 proj-status) (the-as uint 0))
+ (sound-stop (-> self charge-sound-id))
+ (go-virtual projectile-dissipate)
+ )
+ )
+ )
+ (let ((f0-6 (-> self growth)))
+ (set-vector! (-> self root-override scale) f0-6 f0-6 f0-6 1.0)
+ )
+ (spawn (-> self part) (-> self root-override trans))
+ (suspend)
+ )
+ (none)
+ )
+ )
+
+;; failed to figure out what this is:
+(defstate ram-boss-proj-launch (ram-boss-proj)
+ :code
+ (behavior ()
+ (sound-play-by-name (static-sound-name "ramboss-fire") (new-sound-id) 1024 0 0 1 #t)
+ (set! (-> self launched?) #t)
+ (set! (-> self growth) 1.0)
+ (logior! (-> self root-override root-prim prim-core action) (collide-action solid))
+ (set! (-> self launch-time) (the-as uint (-> *display* base-frame-counter)))
+ (vector-float*! (-> self root-override transv) (-> self parent-override 0 proj-launch-vec) 40960.0)
+ (set! (-> self target quad) (-> (target-pos 0) quad))
+ (set! (-> self target y) (+ 4915.2 (-> self target y)))
+ (set! (-> self target-base quad) (-> self target quad))
+ (go-virtual projectile-moving)
+ (none)
+ )
+ )
+
+;; failed to figure out what this is:
+(defstate projectile-impact (ram-boss-proj)
+ :virtual #t
+ :code
+ (behavior ()
+ (let ((gp-0 (get-process *default-dead-pool* part-tracker #x4000)))
+ (when gp-0
+ (let ((t9-1 (method-of-type part-tracker activate)))
+ (t9-1 (the-as part-tracker gp-0) *entity-pool* 'part-tracker (the-as pointer #x70004000))
+ )
+ (run-now-in-process
+ gp-0
+ part-tracker-init
+ (-> *part-group-id-table* 523)
+ -1
+ #f
+ #f
+ #f
+ (-> self root-override trans)
+ )
+ (-> gp-0 ppointer)
+ )
+ )
+ (if (nonzero? (-> self sound-id))
+ (sound-stop (-> self sound-id))
+ )
+ (sound-play-by-name (static-sound-name "ramboss-hit") (new-sound-id) 1024 0 0 1 #t)
+ (suspend)
+ (go-virtual projectile-die)
+ (none)
+ )
+ )
+
+;; failed to figure out what this is:
+(defstate projectile-dissipate (ram-boss-proj)
+ :virtual #t
+ :code
+ (behavior ()
+ (let ((gp-0 (get-process *default-dead-pool* part-tracker #x4000)))
+ (when gp-0
+ (let ((t9-1 (method-of-type part-tracker activate)))
+ (t9-1 (the-as part-tracker gp-0) *entity-pool* 'part-tracker (the-as pointer #x70004000))
+ )
+ (run-now-in-process
+ gp-0
+ part-tracker-init
+ (-> *part-group-id-table* 524)
+ -1
+ #f
+ #f
+ #f
+ (-> self root-override trans)
+ )
+ (-> gp-0 ppointer)
+ )
+ )
+ (if (nonzero? (-> self sound-id))
+ (sound-stop (-> self sound-id))
+ )
+ (suspend)
+ (go-virtual projectile-die)
+ (none)
+ )
+ )
+
+;; failed to figure out what this is:
+(defpartgroup group-ram-boss-shield-on-fire
+ :id 525
+ :flags (use-local-clock)
+ :bounds (static-bspherem 0 0 0 8)
+ :parts
+ ((sp-item 1919))
+ )
+
+;; failed to figure out what this is:
+(defpart 1919
+ :init-specs
+ ((sp-tex spt-texture (new 'static 'texture-id :page #x2))
+ (sp-flt spt-num 2.0)
+ (sp-rnd-flt spt-x (meters -0.25) (meters 0.5) 1.0)
+ (sp-rnd-flt spt-z (meters -0.25) (meters 0.5) 1.0)
+ (sp-rnd-flt spt-scale-x (meters 1) (meters 2) 1.0)
+ (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0)
+ (sp-copy-from-other spt-scale-y -4)
+ (sp-flt spt-r 128.0)
+ (sp-rnd-flt spt-g 0.0 128.0 1.0)
+ (sp-flt spt-b 0.0)
+ (sp-rnd-flt spt-a 32.0 64.0 1.0)
+ (sp-rnd-flt spt-vel-y (meters 0.006666667) (meters 0.006666667) 1.0)
+ (sp-flt spt-scalevel-x (meters 0.023529412))
+ (sp-rnd-flt spt-rotvel-z (degrees -0.6) (degrees 1.2) 1.0)
+ (sp-copy-from-other spt-scalevel-y -4)
+ (sp-flt spt-fade-a -1.5058824)
+ (sp-flt spt-friction 0.98)
+ (sp-int spt-timer 81)
+ (sp-cpuinfo-flags bit2 bit3 bit14)
+ (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 360.0) 1.0)
+ )
+ )
+
+;; failed to figure out what this is:
+(defpartgroup group-ram-boss-foot-puff
+ :id 574
+ :duration 5
+ :linger-duration 450
+ :bounds (static-bspherem 0 0 0 2)
+ :parts
+ ((sp-item 2367) (sp-item 2368) (sp-item 2369))
+ )
+
+;; failed to figure out what this is:
+(defpart 2367
+ :init-specs
+ ((sp-tex spt-texture (new 'static 'texture-id :page #x2))
+ (sp-flt spt-num 16.0)
+ (sp-rnd-flt spt-scale-x (meters 1) (meters 1) 1.0)
+ (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0)
+ (sp-copy-from-other spt-scale-y -4)
+ (sp-rnd-flt spt-r 196.0 64.0 1.0)
+ (sp-rnd-flt spt-g 196.0 64.0 1.0)
+ (sp-rnd-flt spt-b 196.0 64.0 1.0)
+ (sp-rnd-flt spt-a 16.0 32.0 1.0)
+ (sp-rnd-flt spt-vel-y (meters 0.02) (meters 0.01) 1.0)
+ (sp-flt spt-scalevel-x (meters 0.0033333334))
+ (sp-rnd-flt spt-rotvel-z (degrees -0.2) (degrees 0.4) 1.0)
+ (sp-copy-from-other spt-scalevel-y -4)
+ (sp-flt spt-fade-a -0.16)
+ (sp-flt spt-accel-y -1.3653333)
+ (sp-flt spt-friction 0.95)
+ (sp-int spt-timer 300)
+ (sp-cpuinfo-flags bit2 bit12)
+ (sp-rnd-flt spt-conerot-x (degrees 60.0) (degrees 30.0) 1.0)
+ (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0)
+ )
+ )
+
+;; failed to figure out what this is:
+(defpart 2368
+ :init-specs
+ ((sp-tex spt-texture (new 'static 'texture-id :page #x2))
+ (sp-flt spt-num 12.0)
+ (sp-rnd-flt spt-scale-x (meters 0.5) (meters 0.25) 1.0)
+ (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0)
+ (sp-copy-from-other spt-scale-y -4)
+ (sp-rnd-flt spt-r 196.0 64.0 1.0)
+ (sp-rnd-flt spt-g 196.0 64.0 1.0)
+ (sp-rnd-flt spt-b 196.0 64.0 1.0)
+ (sp-rnd-flt spt-a 16.0 16.0 1.0)
+ (sp-rnd-flt spt-vel-y (meters 0.053333335) (meters 0.02) 1.0)
+ (sp-flt spt-scalevel-x (meters 0.0016666667))
+ (sp-rnd-flt spt-rotvel-z (degrees -0.2) (degrees 0.4) 1.0)
+ (sp-copy-from-other spt-scalevel-y -4)
+ (sp-flt spt-fade-a -0.21333334)
+ (sp-flt spt-accel-y -1.3653333)
+ (sp-flt spt-friction 0.95)
+ (sp-int spt-timer 150)
+ (sp-cpuinfo-flags bit2 bit12)
+ (sp-rnd-flt spt-conerot-x (degrees 60.0) (degrees 30.0) 1.0)
+ (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0)
+ )
+ )
+
+;; failed to figure out what this is:
+(defpart 2369
+ :init-specs
+ ((sp-tex spt-texture (new 'static 'texture-id :index #x4 :page #x2))
+ (sp-flt spt-num 32.0)
+ (sp-rnd-flt spt-x (meters -0.4) (meters 0.8) 1.0)
+ (sp-rnd-flt spt-y (meters -0.1) (meters 0.4) 1.0)
+ (sp-rnd-flt spt-z (meters -0.4) (meters 0.8) 1.0)
+ (sp-rnd-flt spt-scale-x (meters 0.07) (meters 0.02) 1.0)
+ (sp-copy-from-other spt-scale-y -4)
+ (sp-rnd-flt spt-r 196.0 2.0 64.0)
+ (sp-rnd-int spt-g 1128529920 1 64.0)
+ (sp-rnd-int spt-b 1128529920 1 64.0)
+ (sp-rnd-flt spt-a 64.0 64.0 1.0)
+ (sp-rnd-flt spt-vel-y (meters 0.015) (meters 0.006666667) 1.0)
+ (sp-flt spt-fade-a -0.42666668)
+ (sp-rnd-flt spt-accel-y -5.4613333 2.7306666 1.0)
+ (sp-int spt-timer 300)
+ (sp-cpuinfo-flags bit2 bit12)
+ (sp-rnd-flt spt-conerot-x (degrees 30.0) (degrees 50.000004) 1.0)
+ (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0)
+ (sp-flt spt-conerot-radius (meters 0.5))
+ )
+ )
+
+;; definition for function ram-boss-on-ground-event-handler
+;; WARN: disable def twice: 194. This may happen when a cond (no else) is nested inside of another conditional, but it should be rare.
+(defbehavior ram-boss-on-ground-event-handler ram-boss ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block))
+ (local-vars (v0-4 object))
+ (case arg2
+ (('attack 'bonk 'roll)
+ (cond
+ ((-> self has-shield?)
+ (let ((a1-3 (new 'stack-no-clear 'event-message-block)))
+ (set! (-> a1-3 from) self)
+ (set! (-> a1-3 num-params) 2)
+ (set! (-> a1-3 message) 'query)
+ (set! (-> a1-3 param 0) (the-as uint 'powerup))
+ (set! (-> a1-3 param 1) (the-as uint 2))
+ (cond
+ ((send-event-function *target* a1-3)
+ (nav-enemy-set-hit-from-direction arg0)
+ (let ((a1-4 (new 'stack-no-clear 'event-message-block)))
+ (set! (-> a1-4 from) self)
+ (set! (-> a1-4 num-params) 2)
+ (set! (-> a1-4 message) 'shove)
+ (set! (-> a1-4 param 0) (the-as uint #f))
+ (let ((v1-9 (new 'static 'attack-info :mask #x40)))
+ (set! (-> v1-9 shove-back) 8192.0)
+ (set! (-> a1-4 param 1) (the-as uint v1-9))
+ )
+ (send-event-function arg0 a1-4)
+ )
+ (go ram-boss-lose-shield)
+ (return #t)
+ v0-4
+ )
+ ((begin
+ (if (zero? (logand (-> self nav-enemy-flags) 256))
+ (do-push-aways! (-> self collide-info))
+ )
+ (level-hint-spawn
+ (game-text-id ram-boss-red-eco-hint)
+ "sksp0346"
+ (the-as entity #f)
+ *entity-pool*
+ (game-task none)
+ )
+ (>= (- (-> (target-pos 0) y) (-> self collide-info trans y)) 9420.8)
+ )
+ (let ((a1-6 (new 'stack-no-clear 'event-message-block)))
+ (set! (-> a1-6 from) self)
+ (set! (-> a1-6 num-params) 2)
+ (set! (-> a1-6 message) 'shove)
+ (set! (-> a1-6 param 0) (the-as uint #f))
+ (let ((v1-22 (new 'static 'attack-info :mask #xc0)))
+ (set! (-> v1-22 shove-back) 16384.0)
+ (set! (-> v1-22 shove-up) 8192.0)
+ (set! (-> a1-6 param 1) (the-as uint v1-22))
+ )
+ (send-event-function arg0 a1-6)
+ )
+ (go ram-boss-up-defend-block)
+ (return #t)
+ v0-4
+ )
+ (else
+ (when (= arg2 'attack)
+ (let ((a1-7 (new 'stack-no-clear 'event-message-block)))
+ (set! (-> a1-7 from) self)
+ (set! (-> a1-7 num-params) 2)
+ (set! (-> a1-7 message) 'shove)
+ (set! (-> a1-7 param 0) (the-as uint #f))
+ (let ((v1-30 (new 'static 'attack-info :mask #x40)))
+ (set! (-> v1-30 shove-back) 16384.0)
+ (set! (-> a1-7 param 1) (the-as uint v1-30))
+ )
+ (send-event-function arg0 a1-7)
+ )
+ (go ram-boss-forward-defend-block)
+ (return #t)
+ v0-4
+ )
+ )
+ )
+ )
+ )
+ (else
+ (go-virtual nav-enemy-die)
+ (return #t)
+ v0-4
+ )
+ )
+ )
+ (('touch)
+ (if (zero? (logand (-> self nav-enemy-flags) 256))
+ (do-push-aways! (-> self collide-info))
+ )
+ (cond
+ ((-> self has-shield?)
+ (cond
+ ((>= (- (-> (target-pos 0) y) (-> self collide-info trans y)) 9420.8)
+ (let ((a1-8 (new 'stack-no-clear 'event-message-block)))
+ (set! (-> a1-8 from) self)
+ (set! (-> a1-8 num-params) 2)
+ (set! (-> a1-8 message) 'shove)
+ (set! (-> a1-8 param 0) (-> arg3 param 0))
+ (let ((v1-49 (new 'static 'attack-info :mask #xc0)))
+ (set! (-> v1-49 shove-back) 16384.0)
+ (set! (-> v1-49 shove-up) 8192.0)
+ (set! (-> a1-8 param 1) (the-as uint v1-49))
+ )
+ (send-event-function arg0 a1-8)
+ )
+ (go ram-boss-up-defend-block)
+ (return #t)
+ v0-4
+ )
+ (else
+ (when (= arg2 'attack)
+ (let ((a1-9 (new 'stack-no-clear 'event-message-block)))
+ (set! (-> a1-9 from) self)
+ (set! (-> a1-9 num-params) 2)
+ (set! (-> a1-9 message) 'shove)
+ (set! (-> a1-9 param 0) (-> arg3 param 0))
+ (let ((v1-58 (new 'static 'attack-info :mask #x40)))
+ (set! (-> v1-58 shove-back) 16384.0)
+ (set! (-> a1-9 param 1) (the-as uint v1-58))
+ )
+ (send-event-function arg0 a1-9)
+ )
+ (go ram-boss-forward-defend-block)
+ (return #t)
+ v0-4
+ )
+ )
+ )
+ )
+ (else
+ (if (nav-enemy-send-attack arg0 (the-as touching-shapes-entry (-> arg3 param 0)) 'generic)
+ (go-virtual nav-enemy-victory)
+ )
+ )
+ )
+ )
+ (('notify)
+ (when (= (-> arg0 type) ram-boss-proj)
+ (let ((v1-66 arg0))
+ (cond
+ ((= (-> arg3 param 0) 'attack)
+ (when (= (-> arg3 param 1) *target*)
+ (set! (-> self frustration) 0)
+ (go-virtual nav-enemy-victory)
+ (return #t)
+ v0-4
+ )
+ )
+ ((= (-> arg3 param 0) 'die)
+ (let* ((v1-73 (- (-> *display* base-frame-counter) (the-as int (-> (the-as ram-boss v1-66) proj-status))))
+ (v1-74 (- 1200 v1-73))
+ )
+ (cond
+ ((< 1200 v1-74)
+ (set! v1-74 1200)
+ )
+ ((< v1-74 0)
+ (set! v1-74 0)
+ )
+ )
+ (+! (-> self frustration) (the int (* 0.00083333335 (the float (* v1-74 128)))))
+ )
+ (when (< 256 (-> self frustration))
+ (set! v0-4 256)
+ (set! (-> self frustration) (the-as int v0-4))
+ v0-4
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+
+;; definition for method 10 of type ram-boss
+(defmethod deactivate ram-boss ((obj ram-boss))
+ (if (nonzero? (-> obj part2))
+ (kill-and-free-particles (-> obj part2))
+ )
+ ((method-of-type nav-enemy deactivate) obj)
+ (none)
+ )
+
+;; definition for method 7 of type ram-boss
+;; INFO: Return type mismatch nav-enemy vs ram-boss.
+(defmethod relocate ram-boss ((obj ram-boss) (arg0 int))
+ (if (nonzero? (-> obj shield-jmod))
+ (&+! (-> obj shield-jmod) arg0)
+ )
+ (if (nonzero? (-> obj part2))
+ (&+! (-> obj part2) arg0)
+ )
+ (the-as ram-boss ((method-of-type nav-enemy relocate) obj arg0))
+ )
+
+;; definition for method 47 of type ram-boss
+;; INFO: Return type mismatch int vs none.
+(defmethod initialize-collision ram-boss ((obj ram-boss))
+ (let ((s5-0 (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player))))
+ (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process))
+ (set! (-> s5-0 reaction) default-collision-reaction)
+ (set! (-> s5-0 no-reaction)
+ (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing)
+ )
+ (let ((s4-0 (new 'process 'collide-shape-prim-group s5-0 (the-as uint 4) 0)))
+ (set! (-> s4-0 prim-core collide-as) (collide-kind enemy wall-object))
+ (set! (-> s4-0 collide-with) (collide-kind target))
+ (set! (-> s4-0 prim-core action) (collide-action solid))
+ (set-vector! (-> s4-0 local-sphere) 0.0 8192.0 -4096.0 11468.8)
+ (set-root-prim! s5-0 s4-0)
+ (let ((s3-0 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 3))))
+ (set! (-> s3-0 prim-core collide-as) (collide-kind enemy))
+ (set! (-> s3-0 collide-with) (collide-kind target))
+ (set! (-> s3-0 prim-core action) (collide-action solid))
+ (set! (-> s3-0 prim-core offense) (collide-offense indestructible))
+ (set-vector! (-> s3-0 local-sphere) 0.0 4096.0 -2048.0 6144.0)
+ (append-prim s4-0 s3-0)
+ )
+ (let ((s3-1 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 3))))
+ (set! (-> s3-1 prim-core collide-as) (collide-kind enemy))
+ (set! (-> s3-1 collide-with) (collide-kind target))
+ (set! (-> s3-1 prim-core action) (collide-action solid))
+ (set! (-> s3-1 prim-core offense) (collide-offense indestructible))
+ (set-vector! (-> s3-1 local-sphere) 0.0 8601.6 -2048.0 7782.4)
+ (append-prim s4-0 s3-1)
+ )
+ (let ((s3-2 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 1))))
+ (set! (-> s3-2 prim-core collide-as) (collide-kind enemy))
+ (set! (-> s3-2 collide-with) (collide-kind target))
+ (set! (-> s3-2 prim-core offense) (collide-offense no-offense))
+ (set! (-> s3-2 transform-index) 6)
+ (set-vector! (-> s3-2 local-sphere) 0.0 0.0 0.0 4096.0)
+ (append-prim s4-0 s3-2)
+ )
+ (let ((s3-3 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 3))))
+ (set! (-> s3-3 prim-core offense) (collide-offense indestructible))
+ (set! (-> s3-3 transform-index) 3)
+ (set-vector! (-> s3-3 local-sphere) 0.0 0.0 0.0 409.6)
+ (append-prim s4-0 s3-3)
+ )
+ )
+ (set! (-> s5-0 nav-radius) 10240.0)
+ (backup-collide-with-as s5-0)
+ (set! (-> s5-0 max-iteration-count) (the-as uint 2))
+ (set! (-> obj collide-info) s5-0)
+ )
+ 0
+ (none)
+ )
+
+;; definition for method 52 of type ram-boss
+;; INFO: Return type mismatch vector vs symbol.
+(defmethod dummy-52 ram-boss ((obj ram-boss))
+ (let ((v1-1 (the-as basic (-> obj collide-info root-prim))))
+ (set-vector! (-> (the-as collide-shape-prim v1-1) local-sphere) 0.0 8192.0 0.0 13516.8)
+ (set-vector! (-> (the-as (array collide-shape-prim) v1-1) 16 local-sphere) 0.0 4096.0 0.0 4505.6)
+ (set-vector! (-> (the-as (array collide-shape-prim) v1-1) 17 local-sphere) 0.0 9830.4 0.0 4505.6)
+ (set-vector! (-> (the-as (array collide-shape-prim) v1-1) 18 local-sphere) 0.0 0.0 0.0 2048.0)
+ (let ((v1-2 (-> (the-as (array collide-shape-prim) v1-1) 19)))
+ (logior! (-> v1-2 prim-core action) (collide-action solid))
+ (set! (-> v1-2 collide-with) (collide-kind target))
+ (set! (-> v1-2 prim-core collide-as) (collide-kind enemy))
+ (let ((v0-0 (-> v1-2 local-sphere)))
+ (set! (-> v0-0 x) 0.0)
+ (set! (-> v0-0 y) 819.2)
+ (set! (-> v0-0 z) 4505.6)
+ (set! (-> v0-0 w) 8192.0)
+ (the-as symbol v0-0)
+ )
+ )
+ )
+ )
+
+;; definition for method 53 of type ram-boss
+;; INFO: Return type mismatch int vs symbol.
+(defmethod dummy-53 ram-boss ((obj ram-boss))
+ (let ((v1-1 (the-as (array collide-shape-prim) (-> obj collide-info root-prim))))
+ (let ((a0-1 (-> v1-1 16)))
+ (set! (-> a0-1 prim-core offense) (collide-offense touch))
+ )
+ (let ((a0-2 (-> v1-1 17)))
+ (set! (-> a0-2 prim-core offense) (collide-offense touch))
+ )
+ (let ((a0-3 (-> v1-1 18)))
+ (set! (-> a0-3 prim-core offense) (collide-offense touch))
+ )
+ (let ((v1-2 (-> v1-1 19)))
+ (logclear! (-> v1-2 prim-core action) (collide-action solid))
+ (set! (-> v1-2 collide-with) (collide-kind))
+ (set! (-> v1-2 prim-core collide-as) (collide-kind))
+ (set! (-> v1-2 prim-core offense) (collide-offense no-offense))
+ )
+ )
+ (the-as symbol 0)
+ )
+
+;; definition for method 48 of type ram-boss
+;; INFO: Return type mismatch int vs none.
+;; Used lq/sq
+(defmethod TODO-RENAME-48 ram-boss ((obj ram-boss))
+ (initialize-skeleton obj *ram-boss-sg* '())
+ (set! (-> obj draw origin-joint-index) (the-as uint 3))
+ (TODO-RENAME-45 obj *ram-boss-nav-enemy-info*)
+ (logclear! (-> obj enemy-info options) (fact-options fop1))
+ (set! (-> obj part) (create-launch-control (-> *part-group-id-table* 525) obj))
+ (set! (-> obj part2) (create-launch-control (-> *part-group-id-table* 574) obj))
+ (set! (-> obj shield-jmod) (new 'process 'joint-mod-set-local obj 32 #f #f #t))
+ (set! (-> obj shield-jmod enable) #f)
+ (set! (-> obj has-shield?) #t)
+ (when (nonzero? (-> obj entity extra perm user-int8 1))
+ (set! (-> obj has-shield?) #f)
+ (TODO-RENAME-49 obj *ram-boss-nav-enemy-info-no-shield*)
+ (let ((v1-23 (-> obj shield-jmod)))
+ (set! (-> v1-23 enable) #t)
+ (set! (-> v1-23 transform scale quad) (the-as uint128 0))
+ )
+ )
+ (set! (-> obj neck up) (the-as uint 1))
+ (set! (-> obj neck nose) (the-as uint 2))
+ (set! (-> obj neck ear) (the-as uint 0))
+ 0
+ (none)
+ )
+
+;; definition for function ram-boss-init-by-other
+;; INFO: Return type mismatch object vs none.
+;; Used lq/sq
+(defbehavior ram-boss-init-by-other ram-boss ((arg0 basic) (arg1 nav-enemy) (arg2 symbol))
+ (set! (-> self dead?) #f)
+ (set! (-> self proj-status) (the-as uint 0))
+ (set! (-> self proj-stoked) #f)
+ (set! (-> self proj-last-thrown-time) (the-as uint (-> *display* base-frame-counter)))
+ (set-vector! (-> self local-throw-point) 10456.269 9961.882 1510.6049 1.0)
+ (set! (-> self frustration) 0)
+ (set! (-> self nav-enemy-patrol-timeout) (the-as uint 300))
+ (initialize-collision self)
+ (set! (-> self entity) (-> arg1 entity))
+ (TODO-RENAME-48 self)
+ (set! (-> self collide-info trans quad) (-> arg1 collide-info trans quad))
+ (set-vector! (-> self collide-info scale) 1.0 1.0 1.0 1.0)
+ (let ((t9-2 quaternion-copy!)
+ (a0-6 (-> self collide-info quat))
+ )
+ (t9-2 a0-6 (-> arg1 collide-info quat))
+ (cond
+ (arg2
+ (go ram-boss-already-down (the-as basic a0-6))
+ )
+ (else
+ (ja-post)
+ (logior! (-> self nav-enemy-flags) 2)
+ (go ram-boss-idle)
+ )
+ )
+ )
+ (none)
+ )
+
+;; definition for method 54 of type ram-boss
+;; INFO: Return type mismatch vector vs symbol.
+(defmethod dummy-54 ram-boss ((obj ram-boss) (arg0 vector))
+ (let ((a2-0 (-> obj node-list data 18 bone transform)))
+ (set-vector! arg0 0.0 0.0 -2457.6 1.0)
+ (vector-matrix*! arg0 arg0 a2-0)
+ )
+ (the-as symbol (vector-float*! arg0 arg0 (/ 1.0 (-> arg0 w))))
+ )
+
+;; definition for method 55 of type ram-boss
+;; Used lq/sq
+(defmethod dummy-55 ram-boss ((obj ram-boss))
+ (if (not *target*)
+ (return #f)
+ )
+ (let ((s5-0 (new 'stack-no-clear 'vector))
+ (s4-0 (new 'stack-no-clear 'vector))
+ )
+ (set! (-> s5-0 quad) (-> obj collide-info trans quad))
+ (set! (-> s5-0 y) (+ 8192.0 (-> s5-0 y)))
+ (set! (-> s4-0 quad) (-> (target-pos 0) quad))
+ (set! (-> s4-0 y) (+ 4915.2 (-> s4-0 y)))
+ (vector-! s4-0 s4-0 s5-0)
+ (let* ((t2-0 (new 'stack-no-clear 'collide-tri-result))
+ (v0-0 (< (fill-and-probe-using-line-sphere
+ *collide-cache*
+ s5-0
+ s4-0
+ 1228.8
+ (collide-kind background cak-2 ground-object)
+ obj
+ t2-0
+ 1
+ )
+ 0.0
+ )
+ )
+ )
+ (b! #t cfg-7 :delay (nop!))
+ (the-as none 0)
+ (set! v0-0 (the-as symbol #f))
+ (label cfg-7)
+ v0-0
+ )
+ )
+ )
+
+;; definition for method 51 of type ram-boss
+(defmethod dummy-51 ram-boss ((obj ram-boss) (arg0 vector))
+ (let* ((f30-0 (quaternion-y-angle (-> obj collide-info quat)))
+ (f0-2 (atan (-> arg0 x) (-> arg0 z)))
+ (f0-3 (deg- f30-0 f0-2))
+ )
+ (when (< (fabs f0-3) 10922.667)
+ (if (< 1820.4445 f0-3)
+ (vector-rotate-around-y! arg0 arg0 (+ -1820.4445 f0-3))
+ )
+ (return #f)
+ )
+ )
+ #t
+ )
+
+;; definition for method 56 of type ram-boss
+;; INFO: Return type mismatch object vs none.
+;; Used lq/sq
+(defmethod set-jump-height-factor! ram-boss ((obj ram-boss) (arg0 int))
+ (cond
+ ((zero? (-> obj proj-status))
+ (when (and *target* (>= (- (-> *display* base-frame-counter) (the-as int (-> obj proj-last-thrown-time))) 600))
+ (when arg0
+ (set! (-> obj proj-stoked) #t)
+ (let ((s5-0 (new 'stack-no-clear 'vector)))
+ (set! (-> s5-0 quad) (the-as uint128 0))
+ (let* ((s4-0 (the-as ram-boss-proj (get-process *default-dead-pool* ram-boss-proj #x4000)))
+ (v1-9 (when s4-0
+ (let ((t9-1 (method-of-type ram-boss-proj activate)))
+ (t9-1 s4-0 obj 'ram-boss-proj (the-as pointer #x70004000))
+ )
+ (run-now-in-process
+ s4-0
+ projectile-init-by-other
+ (-> obj entity)
+ (-> obj collide-info trans)
+ s5-0
+ 0
+ (process->handle *target*)
+ )
+ (-> s4-0 ppointer)
+ )
+ )
+ )
+ (set! (-> (the-as (pointer ram-boss-proj) v1-9) 0 notify-handle) (process->handle obj))
+ )
+ )
+ )
+ )
+ )
+ (else
+ (set! (-> obj proj-stoked) #t)
+ )
+ )
+ (none)
+ )
+
+;; failed to figure out what this is:
+(defstate ram-boss-show-anims (ram-boss)
+ :trans
+ (behavior ()
+ 0
+ (none)
+ )
+ :code
+ (behavior ()
+ 0
+ (none)
+ )
+ :post
+ (the-as (function none :behavior ram-boss) transform-post)
+ )
+
+;; failed to figure out what this is:
+(defstate ram-boss-idle (ram-boss)
+ :event
+ (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block))
+ (case arg2
+ (('jump)
+ (go ram-boss-jump-down arg0)
+ )
+ (('touch 'attack)
+ (nav-enemy-send-attack arg0 (the-as touching-shapes-entry (-> arg3 param 0)) 'generic)
+ )
+ )
+ )
+ :enter
+ (behavior ()
+ ((-> (method-of-type nav-enemy nav-enemy-idle) enter))
+ (set! (-> self frustration) 0)
+ 0
+ (none)
+ )
+ :code
+ (behavior ()
+ (logior! (-> self nav-enemy-flags) 4)
+ (while #t
+ (clone-anim-once
+ (ppointer->handle (-> self parent-override))
+ (the-as int (-> self draw origin-joint-index))
+ #t
+ ""
+ )
+ (let ((a0-4 (-> self parent-override 0 node-list data 9 bone transform)))
+ (set! (-> self collide-info trans quad) (-> a0-4 vector 3 quad))
+ )
+ (transform-post)
+ (when *target*
+ (if *target*
+ (look-at-enemy!
+ (-> *target* neck)
+ (the-as vector (-> (the-as collide-shape-prim-group (-> self collide-info root-prim)) prims 0 prim-core))
+ 'attacking
+ self
+ )
+ )
+ )
+ (suspend)
+ )
+ (none)
+ )
+ )
+
+;; failed to figure out what this is:
+(defstate ram-boss-jump-down (ram-boss)
+ :event
+ (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block))
+ (case arg2
+ (('touch 'attack)
+ (nav-enemy-send-attack arg0 (the-as touching-shapes-entry (-> arg3 param 0)) 'generic)
+ )
+ )
+ )
+ :enter
+ (behavior ((arg0 basic))
+ (dummy-52 self)
+ (logior! (-> self nav-enemy-flags) 4)
+ (let ((s5-0 (new 'stack-no-clear 'vector))
+ (gp-0 (-> self node-list data 0 bone transform))
+ )
+ (let ((s1-0 (new 'stack-no-clear 'matrix))
+ (s4-0 (new 'stack-no-clear 'vector))
+ )
+ (matrix-4x4-inverse! s1-0 gp-0)
+ (vector-matrix*! s4-0 (target-pos 0) s1-0)
+ (set-vector! s5-0 -49152.0 -32768.0 16384.0 1.0)
+ (if (< (-> s4-0 x) 0.0)
+ (set! (-> s5-0 x) (- (-> s5-0 x)))
+ )
+ )
+ (let ((s4-1 (new 'stack-no-clear 'vector)))
+ (vector-matrix*! s4-1 s5-0 gp-0)
+ (vector-! s4-1 s4-1 (-> gp-0 vector 3))
+ (set! (-> s4-1 y) 0.0)
+ (vector-normalize! s4-1 1.0)
+ (set! (-> self collide-info transv x) (* 65536.0 (-> s4-1 x)))
+ (set! (-> self collide-info transv z) (* 65536.0 (-> s4-1 z)))
+ )
+ )
+ (set! (-> self collide-info transv y) 102400.0)
+ (none)
+ )
+ :trans
+ (behavior ()
+ (+! (-> self collide-info transv y) (* -544768.0 (-> *display* seconds-per-frame)))
+ (integrate-for-enemy-with-move-to-ground!
+ (-> self collide-info)
+ (-> self collide-info transv)
+ (collide-kind background)
+ 16384.0
+ #f
+ #f
+ #f
+ )
+ (if (logtest? (-> self collide-info status) 1)
+ (go ram-boss-jump-down-hit-ground)
+ )
+ (none)
+ )
+ :code
+ (behavior ((arg0 basic))
+ (ja-channel-push! 1 240)
+ (let ((a0-2 (-> self skel root-channel 0)))
+ (set! (-> a0-2 frame-group) (the-as art-joint-anim (-> self draw art-group data 16)))
+ (set! (-> a0-2 param 0)
+ (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 16)) data 0 length) -1))
+ )
+ (set! (-> a0-2 param 1) 1.0)
+ (set! (-> a0-2 frame-num) 0.0)
+ (joint-control-channel-group! a0-2 (the-as art-joint-anim (-> self draw art-group data 16)) num-func-seek!)
+ )
+ (until (ja-done? 0)
+ (let ((gp-0 (new 'stack-no-clear 'vector)))
+ (vector-! gp-0 (target-pos 0) (-> self collide-info trans))
+ (set! (-> gp-0 y) 0.0)
+ (seek-toward-heading-vec! (-> self collide-info) gp-0 182044.44 3)
+ )
+ (suspend)
+ (let ((a0-7 (-> self skel root-channel 0)))
+ (set! (-> a0-7 param 0) (the float (+ (-> a0-7 frame-group data 0 length) -1)))
+ (set! (-> a0-7 param 1) 1.0)
+ (joint-control-channel-group-eval! a0-7 (the-as art-joint-anim #f) num-func-seek!)
+ )
+ )
+ (while #t
+ (suspend)
+ )
+ (none)
+ )
+ :post
+ (the-as (function none :behavior ram-boss) nav-enemy-simple-post)
+ )
+
+;; failed to figure out what this is:
+(defstate ram-boss-jump-down-hit-ground (ram-boss)
+ :event
+ (-> ram-boss-jump-down event)
+ :code
+ (behavior ()
+ (logior! (-> self nav-enemy-flags) 4)
+ (activate! *camera-smush-control* 409.6 37 150 1.0 0.99)
+ (let ((a0-1 (-> self skel root-channel 0)))
+ (set! (-> a0-1 frame-group) (the-as art-joint-anim (-> self draw art-group data 17)))
+ (set! (-> a0-1 param 0)
+ (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 17)) data 0 length) -1))
+ )
+ (set! (-> a0-1 param 1) 1.0)
+ (set! (-> a0-1 frame-num) 0.0)
+ (joint-control-channel-group! a0-1 (the-as art-joint-anim (-> self draw art-group data 17)) num-func-seek!)
+ )
+ (until (ja-done? 0)
+ (suspend)
+ (let ((a0-2 (-> self skel root-channel 0)))
+ (set! (-> a0-2 param 0) (the float (+ (-> a0-2 frame-group data 0 length) -1)))
+ (set! (-> a0-2 param 1) 1.0)
+ (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-seek!)
+ )
+ )
+ (logior! (-> self nav-enemy-flags) 2)
+ (go ram-boss-nav-start)
+ (none)
+ )
+ :post
+ (the-as (function none :behavior ram-boss) nav-enemy-simple-post)
+ )
+
+;; failed to figure out what this is:
+(defstate ram-boss-already-down (ram-boss)
+ :code
+ (behavior ((arg0 basic))
+ (logior! (-> self nav-enemy-flags) 4)
+ (dummy-52 self)
+ (let ((a1-0 (new 'stack-no-clear 'vector))
+ (a2-0 (-> self parent-override 0 node-list data 0 bone transform))
+ )
+ (set-vector! a1-0 0.0 -16384.0 -32768.0 1.0)
+ (vector-matrix*! (-> self collide-info trans) a1-0 a2-0)
+ )
+ (move-to-ground (-> self collide-info) 40960.0 40960.0 #t (collide-kind background))
+ (let ((gp-0 (new 'stack-no-clear 'vector)))
+ (vector-! gp-0 (target-pos 0) (-> self collide-info trans))
+ (set! (-> gp-0 y) 0.0)
+ (set-heading-vec! (-> self collide-info) gp-0)
+ )
+ (go ram-boss-nav-start)
+ (none)
+ )
+ )
+
+;; failed to figure out what this is:
+(defstate ram-boss-nav-start (ram-boss)
+ :code
+ (behavior ()
+ (let ((a1-1 (dummy-16 (-> self nav) (-> self collide-info trans))))
+ (when (not a1-1)
+ (go process-drawable-art-error "not on nav mesh")
+ (return #f)
+ )
+ (set-current-poly! (-> self nav) a1-1)
+ )
+ (go ram-boss-nav-resume)
+ (none)
+ )
+ )
+
+;; failed to figure out what this is:
+(defstate ram-boss-nav-resume (ram-boss)
+ :code
+ (behavior ()
+ (set! (-> self frustration) 0)
+ (when *target*
+ (let ((f30-0 (vector-vector-distance (target-pos 0) (-> self collide-info trans))))
+ (cond
+ ((>= 18432.0 f30-0)
+ (go ram-boss-tracking)
+ )
+ ((not (TODO-RENAME-46 self 237568.0))
+ (go-virtual nav-enemy-patrol)
+ )
+ ((and (< f30-0 106496.0) (dummy-55 self))
+ (go-virtual nav-enemy-attack)
+ )
+ ((< f30-0 237568.0)
+ (go-virtual nav-enemy-chase)
+ )
+ (else
+ (go-virtual nav-enemy-patrol)
+ )
+ )
+ )
+ )
+ (go-virtual nav-enemy-idle)
+ (none)
+ )
+ )
+
+;; failed to figure out what this is:
+(defstate nav-enemy-patrol (ram-boss)
+ :virtual #t
+ :event
+ ram-boss-on-ground-event-handler
+ :enter
+ (behavior ()
+ ((-> (method-of-type nav-enemy nav-enemy-patrol) enter))
+ (set! (-> self state-timeout) (the-as int (-> self nav-enemy-patrol-timeout)))
+ (set! (-> self nav-enemy-patrol-timeout) (the-as uint 300))
+ (ja-channel-push! 1 90)
+ (none)
+ )
+ :trans
+ (behavior ()
+ (when *target*
+ (let ((f0-0 (vector-vector-distance (target-pos 0) (-> self collide-info trans))))
+ (if (>= 18432.0 f0-0)
+ (go ram-boss-tracking)
+ )
+ )
+ )
+ ((-> (method-of-type nav-enemy nav-enemy-patrol) trans))
+ (none)
+ )
+ )
+
+;; failed to figure out what this is:
+(defstate nav-enemy-chase (ram-boss)
+ :virtual #t
+ :event
+ ram-boss-on-ground-event-handler
+ :enter
+ (behavior ()
+ (let ((t9-0 (-> (method-of-type nav-enemy nav-enemy-chase) enter)))
+ (if t9-0
+ (t9-0)
+ )
+ )
+ (none)
+ )
+ :trans
+ (behavior ()
+ (let ((f30-0 (vector-vector-distance (target-pos 0) (-> self collide-info trans))))
+ (if (>= 18432.0 f30-0)
+ (go ram-boss-tracking)
+ )
+ (when (>= (- (-> *display* base-frame-counter) (-> self state-time)) (-> self reaction-time))
+ (if (not (TODO-RENAME-46 self (-> self nav-info stop-chase-distance)))
+ (go-virtual nav-enemy-patrol)
+ )
+ (if (and (>= 73728.0 f30-0) (dummy-55 self))
+ (go-virtual nav-enemy-attack)
+ )
+ )
+ )
+ (cond
+ ((logtest? (nav-control-flags bit17) (-> self nav flags))
+ (if (>= (- (-> *display* base-frame-counter) (-> self free-time)) 300)
+ (go-virtual nav-enemy-patrol)
+ )
+ )
+ (else
+ (set! (-> self free-time) (-> *display* base-frame-counter))
+ )
+ )
+ 0
+ (none)
+ )
+ )
+
+;; failed to figure out what this is:
+(defstate nav-enemy-attack (ram-boss)
+ :virtual #t
+ :event
+ ram-boss-on-ground-event-handler
+ :trans
+ (the-as (function none :behavior ram-boss) #f)
+ :code
+ (behavior ()
+ (go ram-boss-tracking)
+ (none)
+ )
+ )
+
+;; definition for method 57 of type ram-boss
+(defmethod dummy-57 ram-boss ((obj ram-boss) (arg0 float))
+ (let ((f0-0 0.0))
+ (when *target*
+ (let ((s3-0 (new 'stack-no-clear 'vector)))
+ (vector-! s3-0 (target-pos 0) (-> obj collide-info trans))
+ (let ((f0-1 (vector-x-angle s3-0)))
+ (set! f0-0 (* 0.000091552734 f0-1))
+ )
+ )
+ (cond
+ ((< f0-0 0.0)
+ (set! f0-0 0.0)
+ )
+ ((< 1.0 f0-0)
+ (set! f0-0 1.0)
+ )
+ )
+ (if (>= arg0 0.0)
+ (set! f0-0 (* 0.5 (+ f0-0 arg0)))
+ )
+ )
+ f0-0
+ )
+ )
+
+;; failed to figure out what this is:
+(defstate ram-boss-tracking (ram-boss)
+ :event
+ ram-boss-on-ground-event-handler
+ :enter
+ (behavior ()
+ (set! (-> self state-time) (-> *display* base-frame-counter))
+ (set! (-> self facing-y) (quaternion-y-angle (-> self collide-info quat)))
+ (logior! (-> self nav-enemy-flags) 4)
+ (none)
+ )
+ :trans
+ (behavior ()
+ (set-jump-height-factor!
+ self
+ (the-as int (>= (- (-> *display* base-frame-counter) (-> self state-time)) 225))
+ )
+ (if (not *target*)
+ (go-virtual nav-enemy-patrol)
+ )
+ (let ((gp-0 (new 'stack-no-clear 'vector)))
+ (vector-! gp-0 (target-pos 0) (-> self collide-info trans))
+ (set! (-> self player-dir-y) (atan (-> gp-0 x) (-> gp-0 z)))
+ )
+ (let* ((v1-13 (if (-> self has-shield?)
+ 145635.56
+ 41870.223
+ )
+ )
+ (f30-0 (-> self facing-y))
+ (f0-6 (deg-seek-smooth f30-0 (-> self player-dir-y) (* v1-13 (-> *display* seconds-per-frame)) 0.25))
+ (f0-7 (deg- f0-6 f30-0))
+ )
+ (cond
+ ((< 18.204445 (fabs f0-7))
+ (set! (-> self last-turn-speed) (* (fabs f0-7) (-> *display* frames-per-second)))
+ (quaternion-rotate-y! (-> self collide-info quat) (-> self collide-info quat) f0-7)
+ (set! (-> self facing-y) (quaternion-y-angle (-> self collide-info quat)))
+ )
+ (else
+ (set! (-> self last-turn-speed) 0.0)
+ )
+ )
+ )
+ (let ((f0-10 (vector-vector-distance (target-pos 0) (-> self collide-info trans))))
+ (cond
+ ((>= f0-10 106496.0)
+ (if (>= f0-10 237568.0)
+ (go-virtual nav-enemy-patrol)
+ )
+ (go-virtual nav-enemy-chase)
+ )
+ ((< 18432.0 f0-10)
+ (if (not (dummy-55 self))
+ (go-virtual nav-enemy-chase)
+ )
+ (when (>= (-> self frustration) 256)
+ (set! (-> self frustration) 0)
+ (set! (-> self nav-enemy-patrol-timeout) (the-as uint (rand-vu-int-range 600 1500)))
+ (go-virtual nav-enemy-patrol)
+ )
+ )
+ )
+ )
+ (when (and (= (-> self proj-status) 2)
+ (zero? (logand (-> *target* state-flags) #x80f8))
+ (>= (- (-> *display* base-frame-counter) (-> self state-time)) 60)
+ )
+ (let ((gp-2 (new 'stack-no-clear 'vector))
+ (s5-2 (new 'stack-no-clear 'vector))
+ )
+ (dummy-54 self s5-2)
+ (set! (-> gp-2 quad) (-> (target-pos 0) quad))
+ (set! (-> gp-2 y) (+ 4915.2 (-> gp-2 y)))
+ (vector-! (-> self proj-launch-vec) gp-2 s5-2)
+ )
+ (vector-normalize! (-> self proj-launch-vec) 1.0)
+ (if (not (dummy-51 self (-> self proj-launch-vec)))
+ (go ram-boss-throw)
+ )
+ )
+ 0
+ (none)
+ )
+ :code
+ (behavior ()
+ (let ((f30-0 -1.0))
+ (while #t
+ (set! f30-0 (dummy-57 self f30-0))
+ (cond
+ ((< 5461.3335 (-> self last-turn-speed))
+ (cond
+ ((-> self has-shield?)
+ (when (not (= (if (> (-> self skel active-channels) 0)
+ (-> self skel root-channel 0 frame-group)
+ )
+ (-> self draw art-group data 7)
+ )
+ )
+ (ja-channel-push! 2 60)
+ (let ((gp-0 (-> self skel root-channel 0)))
+ (joint-control-channel-group-eval!
+ gp-0
+ (the-as art-joint-anim (-> self draw art-group data 7))
+ num-func-identity
+ )
+ (set! (-> gp-0 frame-num) 0.0)
+ )
+ (let ((a0-7 (-> self skel root-channel 1)))
+ (set! (-> a0-7 frame-interp) f30-0)
+ (set! (-> a0-7 frame-group) (the-as art-joint-anim (-> self draw art-group data 22)))
+ (set! (-> a0-7 param 0) 0.0)
+ (joint-control-channel-group-eval!
+ a0-7
+ (the-as art-joint-anim (-> self draw art-group data 22))
+ num-func-chan
+ )
+ )
+ )
+ )
+ (else
+ (when (not (= (if (> (-> self skel active-channels) 0)
+ (-> self skel root-channel 0 frame-group)
+ )
+ (-> self draw art-group data 20)
+ )
+ )
+ (ja-channel-push! 1 60)
+ (let ((gp-1 (-> self skel root-channel 0)))
+ (joint-control-channel-group-eval!
+ gp-1
+ (the-as art-joint-anim (-> self draw art-group data 20))
+ num-func-identity
+ )
+ (set! (-> gp-1 frame-num) 0.0)
+ )
+ )
+ )
+ )
+ )
+ ((-> self has-shield?)
+ (when (not (= (if (> (-> self skel active-channels) 0)
+ (-> self skel root-channel 0 frame-group)
+ )
+ (-> self draw art-group data 6)
+ )
+ )
+ (ja-channel-push! 2 60)
+ (let ((gp-2 (-> self skel root-channel 0)))
+ (joint-control-channel-group-eval!
+ gp-2
+ (the-as art-joint-anim (-> self draw art-group data 6))
+ num-func-identity
+ )
+ (set! (-> gp-2 frame-num) 0.0)
+ )
+ (let ((a0-20 (-> self skel root-channel 1)))
+ (set! (-> a0-20 frame-interp) f30-0)
+ (set! (-> a0-20 frame-group) (the-as art-joint-anim (-> self draw art-group data 21)))
+ (set! (-> a0-20 param 0) 0.0)
+ (joint-control-channel-group-eval!
+ a0-20
+ (the-as art-joint-anim (-> self draw art-group data 21))
+ num-func-chan
+ )
+ )
+ )
+ )
+ (else
+ (when (not (= (if (> (-> self skel active-channels) 0)
+ (-> self skel root-channel 0 frame-group)
+ )
+ (-> self draw art-group data 24)
+ )
+ )
+ (ja-channel-push! 1 60)
+ (let ((gp-3 (-> self skel root-channel 0)))
+ (joint-control-channel-group-eval!
+ gp-3
+ (the-as art-joint-anim (-> self draw art-group data 24))
+ num-func-identity
+ )
+ (set! (-> gp-3 frame-num) 0.0)
+ )
+ )
+ )
+ )
+ (suspend)
+ (let ((a0-27 (-> self skel root-channel 0)))
+ (set! (-> a0-27 param 0) 1.0)
+ (joint-control-channel-group-eval! a0-27 (the-as art-joint-anim #f) num-func-loop!)
+ )
+ (when (= (ja-group-size) 2)
+ (let ((a0-28 (-> self skel root-channel 1)))
+ (set! (-> a0-28 frame-interp) f30-0)
+ (set! (-> a0-28 param 0) 0.0)
+ (joint-control-channel-group-eval! a0-28 (the-as art-joint-anim #f) num-func-chan)
+ )
+ )
+ )
+ )
+ (none)
+ )
+ :post
+ (the-as (function none :behavior ram-boss) nav-enemy-simple-post)
+ )
+
+;; failed to figure out what this is:
+(defstate ram-boss-forward-defend-block (ram-boss)
+ :enter
+ (behavior ()
+ (set! (-> self frustration) 0)
+ (logior! (-> self nav-enemy-flags) 4)
+ (none)
+ )
+ :trans
+ (behavior ()
+ (set-jump-height-factor! self (the-as int #t))
+ 0
+ (none)
+ )
+ :code
+ (behavior ()
+ (ja-channel-push! 1 30)
+ (let ((a0-1 (-> self skel root-channel 0)))
+ (set! (-> a0-1 frame-group) (the-as art-joint-anim (-> self draw art-group data 8)))
+ (set! (-> a0-1 param 0)
+ (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 8)) data 0 length) -1))
+ )
+ (set! (-> a0-1 param 1) 1.0)
+ (set! (-> a0-1 frame-num) 0.0)
+ (joint-control-channel-group! a0-1 (the-as art-joint-anim (-> self draw art-group data 8)) num-func-seek!)
+ )
+ (until (ja-done? 0)
+ (suspend)
+ (let ((a0-2 (-> self skel root-channel 0)))
+ (set! (-> a0-2 param 0) (the float (+ (-> a0-2 frame-group data 0 length) -1)))
+ (set! (-> a0-2 param 1) 1.0)
+ (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-seek!)
+ )
+ )
+ (go ram-boss-tracking)
+ (none)
+ )
+ :post
+ (the-as (function none :behavior ram-boss) nav-enemy-simple-post)
+ )
+
+;; failed to figure out what this is:
+(defstate ram-boss-up-defend-block (ram-boss)
+ :enter
+ (behavior ()
+ (set! (-> self frustration) 0)
+ (logior! (-> self nav-enemy-flags) 4)
+ (none)
+ )
+ :trans
+ (behavior ()
+ (set-jump-height-factor! self (the-as int #t))
+ 0
+ (none)
+ )
+ :code
+ (behavior ()
+ (ja-channel-push! 1 30)
+ (let ((a0-1 (-> self skel root-channel 0)))
+ (set! (-> a0-1 frame-group) (the-as art-joint-anim (-> self draw art-group data 9)))
+ (set! (-> a0-1 param 0)
+ (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 9)) data 0 length) -1))
+ )
+ (set! (-> a0-1 param 1) 1.0)
+ (set! (-> a0-1 frame-num) 0.0)
+ (joint-control-channel-group! a0-1 (the-as art-joint-anim (-> self draw art-group data 9)) num-func-seek!)
+ )
+ (until (ja-done? 0)
+ (suspend)
+ (let ((a0-2 (-> self skel root-channel 0)))
+ (set! (-> a0-2 param 0) (the float (+ (-> a0-2 frame-group data 0 length) -1)))
+ (set! (-> a0-2 param 1) 1.0)
+ (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-seek!)
+ )
+ )
+ (go ram-boss-tracking)
+ (none)
+ )
+ :post
+ (the-as (function none :behavior ram-boss) nav-enemy-simple-post)
+ )
+
+;; failed to figure out what this is:
+(defstate nav-enemy-victory (ram-boss)
+ :virtual #t
+ :event
+ ram-boss-on-ground-event-handler
+ :enter
+ (the-as (function none :behavior ram-boss) #f)
+ :exit
+ (the-as (function none :behavior ram-boss) #f)
+ :trans
+ (behavior ()
+ (when *target*
+ (let ((f0-0 (vector-vector-distance (target-pos 0) (-> self collide-info trans))))
+ (if (and (>= 18432.0 f0-0) (-> self has-shield?))
+ (go ram-boss-tracking)
+ )
+ )
+ )
+ (none)
+ )
+ :code
+ (behavior ()
+ (set! (-> self frustration) 0)
+ (ja-channel-push! 1 22)
+ (let ((f30-0 (nav-enemy-rnd-float-range 0.8 1.2)))
+ (let ((a0-2 (-> self skel root-channel 0)))
+ (set! (-> a0-2 frame-group)
+ (the-as art-joint-anim (-> self draw art-group data (-> self nav-info victory-anim)))
+ )
+ (set! (-> a0-2 param 0)
+ (the float
+ (+ (-> (the-as art-joint-anim (-> self draw art-group data (-> self nav-info victory-anim))) data 0 length)
+ -1
+ )
+ )
+ )
+ (set! (-> a0-2 param 1) f30-0)
+ (set! (-> a0-2 frame-num) 0.0)
+ (joint-control-channel-group!
+ a0-2
+ (the-as art-joint-anim (-> self draw art-group data (-> self nav-info victory-anim)))
+ num-func-seek!
+ )
+ )
+ (until (ja-done? 0)
+ (suspend)
+ (let ((a0-3 (-> self skel root-channel 0)))
+ (set! (-> a0-3 param 0) (the float (+ (-> a0-3 frame-group data 0 length) -1)))
+ (set! (-> a0-3 param 1) f30-0)
+ (joint-control-channel-group-eval! a0-3 (the-as art-joint-anim #f) num-func-seek!)
+ )
+ )
+ )
+ (go-virtual nav-enemy-attack)
+ (none)
+ )
+ :post
+ (the-as (function none :behavior ram-boss) nav-enemy-simple-post)
+ )
+
+;; failed to figure out what this is:
+(defstate nav-enemy-stare (ram-boss)
+ :virtual #t
+ :event
+ ram-boss-on-ground-event-handler
+ :enter
+ (behavior ()
+ (go ram-boss-nav-resume)
+ (none)
+ )
+ )
+
+;; failed to figure out what this is:
+(defstate ram-boss-throw (ram-boss)
+ :event
+ ram-boss-on-ground-event-handler
+ :enter
+ (behavior ()
+ (logior! (-> self nav-enemy-flags) 4)
+ (let ((gp-0 (-> self child)))
+ (while gp-0
+ (send-event (ppointer->process gp-0) 'launch)
+ (set! gp-0 (-> gp-0 0 brother))
+ )
+ )
+ (set! (-> self proj-last-thrown-time) (the-as uint (-> *display* base-frame-counter)))
+ (none)
+ )
+ :trans
+ (behavior ()
+ (set-jump-height-factor! self (the-as int #t))
+ 0
+ (none)
+ )
+ :code
+ (behavior ()
+ (ja-channel-push! 1 22)
+ (cond
+ ((-> self has-shield?)
+ (let ((a0-1 (-> self skel root-channel 0)))
+ (set! (-> a0-1 frame-group) (the-as art-joint-anim (-> self draw art-group data 10)))
+ (set! (-> a0-1 param 0)
+ (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 10)) data 0 length) -1))
+ )
+ (set! (-> a0-1 param 1) 1.0)
+ (set! (-> a0-1 frame-num) 0.0)
+ (joint-control-channel-group! a0-1 (the-as art-joint-anim (-> self draw art-group data 10)) num-func-seek!)
+ )
+ (until (ja-done? 0)
+ (suspend)
+ (let ((a0-2 (-> self skel root-channel 0)))
+ (set! (-> a0-2 param 0) (the float (+ (-> a0-2 frame-group data 0 length) -1)))
+ (set! (-> a0-2 param 1) 1.0)
+ (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-seek!)
+ )
+ )
+ )
+ (else
+ (let ((a0-4 (-> self skel root-channel 0)))
+ (set! (-> a0-4 frame-group) (the-as art-joint-anim (-> self draw art-group data 23)))
+ (set! (-> a0-4 param 0)
+ (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 23)) data 0 length) -1))
+ )
+ (set! (-> a0-4 param 1) 1.0)
+ (set! (-> a0-4 frame-num) 0.0)
+ (joint-control-channel-group! a0-4 (the-as art-joint-anim (-> self draw art-group data 23)) num-func-seek!)
+ )
+ (until (ja-done? 0)
+ (suspend)
+ (let ((a0-5 (-> self skel root-channel 0)))
+ (set! (-> a0-5 param 0) (the float (+ (-> a0-5 frame-group data 0 length) -1)))
+ (set! (-> a0-5 param 1) 1.0)
+ (joint-control-channel-group-eval! a0-5 (the-as art-joint-anim #f) num-func-seek!)
+ )
+ )
+ )
+ )
+ (go ram-boss-tracking)
+ (none)
+ )
+ :post
+ (the-as (function none :behavior ram-boss) nav-enemy-simple-post)
+ )
+
+;; failed to figure out what this is:
+(defstate ram-boss-lose-shield (ram-boss)
+ :enter
+ (behavior ()
+ (logior! (-> self nav-enemy-flags) 4)
+ (nav-enemy-neck-control-inactive)
+ (dummy-53 self)
+ (TODO-RENAME-49 self *ram-boss-nav-enemy-info-no-shield*)
+ (none)
+ )
+ :exit
+ (behavior ()
+ (nav-enemy-neck-control-look-at)
+ (set! (-> self has-shield?) #f)
+ (let ((v1-2 (-> self entity extra perm)))
+ (logior! (-> v1-2 status) (entity-perm-status user-set-from-cstage))
+ (set! (-> v1-2 user-int8 1) 1)
+ )
+ (let ((v1-3 (-> self shield-jmod)))
+ (set! (-> v1-3 enable) #t)
+ (set! (-> v1-3 transform scale quad) (the-as uint128 0))
+ )
+ (none)
+ )
+ :code
+ (behavior ()
+ (let ((gp-0 (new 'stack-no-clear 'vector)))
+ (vector-normalize-copy! gp-0 (-> self hit-from-dir) 16384.0)
+ (vector+! gp-0 (-> self collide-info trans) gp-0)
+ (set! (-> self nav target-pos quad) (-> gp-0 quad))
+ )
+ (ja-channel-push! 1 30)
+ (let ((a0-5 (-> self skel root-channel 0)))
+ (set! (-> a0-5 frame-group) (the-as art-joint-anim (-> self draw art-group data 18)))
+ (set! (-> a0-5 param 0)
+ (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 18)) data 0 length) -1))
+ )
+ (set! (-> a0-5 param 1) 1.0)
+ (set! (-> a0-5 frame-num) 0.0)
+ (joint-control-channel-group! a0-5 (the-as art-joint-anim (-> self draw art-group data 18)) num-func-seek!)
+ )
+ (until (ja-done? 0)
+ (let ((gp-1 (new 'stack-no-clear 'vector)))
+ (vector<-cspace! gp-1 (-> self node-list data 32))
+ (spawn (-> self part) gp-1)
+ )
+ (suspend)
+ (let ((a0-8 (-> self skel root-channel 0)))
+ (set! (-> a0-8 param 0) (the float (+ (-> a0-8 frame-group data 0 length) -1)))
+ (set! (-> a0-8 param 1) 1.0)
+ (joint-control-channel-group-eval! a0-8 (the-as art-joint-anim #f) num-func-seek!)
+ )
+ )
+ (go ram-boss-tracking)
+ (none)
+ )
+ :post
+ (behavior ()
+ (TODO-RENAME-9 (-> self align))
+ (dummy-11 (-> self nav) (-> self nav target-pos))
+ (TODO-RENAME-11
+ (-> self align)
+ 4
+ (-> self nav travel)
+ (the-as int 1.0)
+ 1.0
+ (* (-> self enemy-info speed) (-> self speed-scale))
+ )
+ (vector-v++!
+ (-> self collide-info transv)
+ (compute-acc-due-to-gravity (-> self collide-info) (new-stack-vector0) 0.0)
+ )
+ (TODO-RENAME-10 (-> self align) 16 1.0 1.0 1.0)
+ (integrate-for-enemy-with-move-to-ground!
+ (-> self collide-info)
+ (-> self collide-info transv)
+ (collide-kind background)
+ 8192.0
+ #t
+ #f
+ #f
+ )
+ (nav-enemy-common-post)
+ (none)
+ )
+ )
+
+;; failed to figure out what this is:
+(defstate nav-enemy-die (ram-boss)
+ :virtual #t
+ :code
+ (behavior ()
+ (ja-channel-push! 1 22)
+ (clear-collide-with-as (-> self collide-info))
+ (nav-enemy-fall-and-play-death-anim
+ (the-as art-joint-anim (-> self draw art-group data (-> self nav-info die-anim)))
+ 1.0
+ 1.0
+ 1000000000000000.0
+ 600
+ )
+ (send-event self 'death-end)
+ (send-event (ppointer->process (-> self parent-override)) 'notify)
+ (suspend)
+ 0
+ (none)
+ )
+ )
diff --git a/test/decompiler/reference/levels/sunken/double-lurker_REF.gc b/test/decompiler/reference/levels/sunken/double-lurker_REF.gc
index 85650d01ae..e8050e634e 100644
--- a/test/decompiler/reference/levels/sunken/double-lurker_REF.gc
+++ b/test/decompiler/reference/levels/sunken/double-lurker_REF.gc
@@ -464,11 +464,11 @@
)
;; definition for method 51 of type double-lurker-top
-;; INFO: Return type mismatch none vs object.
(defmethod dummy-51 double-lurker-top ((obj double-lurker-top))
(restore-collide-with-as (-> obj collide-info))
(logior! (-> obj collide-info nav-flags) 1)
- (the-as object (TODO-RENAME-27 (-> obj nav)))
+ (TODO-RENAME-27 (-> obj nav))
+ (none)
)
;; definition for method 47 of type double-lurker-top
@@ -1433,7 +1433,7 @@
)
;; definition for method 51 of type double-lurker
-;; INFO: Return type mismatch symbol vs object.
+;; INFO: Return type mismatch symbol vs none.
(defmethod dummy-51 double-lurker ((obj double-lurker))
(let ((v1-1 (-> obj collide-info root-prim)))
(let ((a0-1 0))
@@ -1456,7 +1456,7 @@
)
)
)
- (the-as object #f)
+ (none)
)
;; definition for method 48 of type double-lurker
diff --git a/test/decompiler/reference/levels/sunken/square-platform_REF.gc b/test/decompiler/reference/levels/sunken/square-platform_REF.gc
index a1afd14ba4..22d7cd8d9d 100644
--- a/test/decompiler/reference/levels/sunken/square-platform_REF.gc
+++ b/test/decompiler/reference/levels/sunken/square-platform_REF.gc
@@ -80,9 +80,9 @@
(plat-mask uint32 :offset-assert 184)
(plat-id-dir int32 :offset-assert 188)
(wiggled? symbol :offset-assert 192)
- (timeout uint64 :offset-assert 200)
- (last-plat-activated-time uint64 :offset-assert 208)
- (delay-til-wiggle uint64 :offset-assert 216)
+ (timeout int64 :offset-assert 200)
+ (last-plat-activated-time int64 :offset-assert 208)
+ (delay-til-wiggle int64 :offset-assert 216)
(ticker ticky :inline :offset-assert 224)
)
:heap-base #x90
@@ -739,8 +739,8 @@
(send-to-all (-> self link) 'bounce)
)
)
- (when (>= (- (-> *display* base-frame-counter) (the-as int (-> self last-plat-activated-time))) 90)
- (set! (-> self last-plat-activated-time) (the-as uint (-> *display* base-frame-counter)))
+ (when (>= (- (-> *display* base-frame-counter) (-> self last-plat-activated-time)) 90)
+ (set! (-> self last-plat-activated-time) (-> *display* base-frame-counter))
(let ((v1-20 (-> self plat-id))
(a0-5 (-> self plat-id-dir))
(a1-3 (-> self plat-mask))
@@ -785,9 +785,7 @@
(set! (-> obj plat-id) -1)
(set! (-> obj root) (new 'process 'trsqv))
(process-drawable-from-entity! obj arg0)
- (set! (-> obj timeout)
- (the-as uint (the int (* 300.0 (res-lump-float (-> obj entity) 'timeout :default 10.0))))
- )
+ (set! (-> obj timeout) (the int (* 300.0 (res-lump-float (-> obj entity) 'timeout :default 10.0))))
(set! (-> obj delay-til-wiggle) (+ (-> obj timeout) -120))
(set! (-> obj link) (new 'process 'actor-link-info obj))
(set! (-> obj plat-mask) (the-as uint (get-matching-actor-type-mask (-> obj link) square-platform)))
diff --git a/test/decompiler/reference/levels/sunken/sunken-pipegame_REF.gc b/test/decompiler/reference/levels/sunken/sunken-pipegame_REF.gc
index 48f3fbef1a..b1061f0f27 100644
--- a/test/decompiler/reference/levels/sunken/sunken-pipegame_REF.gc
+++ b/test/decompiler/reference/levels/sunken/sunken-pipegame_REF.gc
@@ -20,9 +20,9 @@
;; definition of type sunken-pipegame-prize
(deftype sunken-pipegame-prize (structure)
- ((puzzle-delay uint64 :offset-assert 0)
- (pipe-travel-time-to-far uint64 :offset-assert 8)
- (pipe-travel-time-to-jar uint64 :offset-assert 16)
+ ((puzzle-delay int64 :offset-assert 0)
+ (pipe-travel-time-to-far int64 :offset-assert 8)
+ (pipe-travel-time-to-jar int64 :offset-assert 16)
(actor-handle handle :offset-assert 24)
(jar-pos vector :inline :offset-assert 32)
(far-pos vector :inline :offset-assert 48)
@@ -70,7 +70,7 @@
:size-assert #x2a0
:flag-assert #x17023002a0
(:methods
- (dummy-20 (_type_) none 20)
+ (dummy-20 (_type_) uint 20)
(dummy-21 (_type_ symbol) symbol 21)
(dummy-22 (_type_ symbol) none 22)
)
@@ -581,7 +581,7 @@
)
;; definition for method 20 of type sunken-pipegame
-;; INFO: Return type mismatch int vs none.
+;; INFO: Return type mismatch int vs uint.
(defmethod dummy-20 sunken-pipegame ((obj sunken-pipegame))
(let ((gp-0 0))
(if (task-complete? *game-info* (game-task sunken-pipe))
@@ -593,8 +593,8 @@
(if (got-buzzer? *game-info* (game-task sunken-buzzer) 1)
(+! gp-0 4)
)
+ (the-as uint gp-0)
)
- (none)
)
;; failed to figure out what this is:
@@ -793,9 +793,7 @@
)
)
)
- (until (>= (- (-> *display* base-frame-counter) gp-0)
- (the-as int (-> self prize (-> self challenge) pipe-travel-time-to-far))
- )
+ (until (>= (- (-> *display* base-frame-counter) gp-0) (-> self prize (-> self challenge) pipe-travel-time-to-far))
(let ((s5-6 (-> self prize (-> self challenge))))
(spawn (-> s5-6 sucked-up-part) (-> s5-6 sucked-up-jar-part-pos))
(spawn (-> s5-6 blown-out-part) (-> s5-6 blown-out-far-part-pos))
@@ -928,7 +926,7 @@
)
(set! (-> self state-time) (-> *display* base-frame-counter))
(until (>= (- (-> *display* base-frame-counter) (-> self state-time))
- (the-as int (-> self prize (-> self challenge) pipe-travel-time-to-jar))
+ (-> self prize (-> self challenge) pipe-travel-time-to-jar)
)
(let ((gp-4 (-> self prize (-> self challenge))))
(spawn (-> gp-4 sucked-up-part) (-> gp-4 sucked-up-far-part-pos))
@@ -1109,7 +1107,7 @@
(process-drawable-from-entity! obj arg0)
(set! (-> obj path) (new 'process 'path-control obj 'path 0.0))
(logior! (-> obj path flags) (path-control-flag display draw-line draw-point draw-text))
- (set! (-> obj challenges-mask) (the-as uint (dummy-20 obj)))
+ (set! (-> obj challenges-mask) (dummy-20 obj))
(let ((s4-0 (new 'stack-no-clear 'vector))
(s3-0 (new 'stack-no-clear 'quaternion))
)
@@ -1130,9 +1128,9 @@
(let ((v1-30 s2-0))
(cond
((zero? v1-30)
- (set! (-> s0-0 puzzle-delay) (the-as uint 7500))
- (set! (-> s0-0 pipe-travel-time-to-far) (the-as uint 2550))
- (set! (-> s0-0 pipe-travel-time-to-jar) (the-as uint 750))
+ (set! (-> s0-0 puzzle-delay) 7500)
+ (set! (-> s0-0 pipe-travel-time-to-far) 2550)
+ (set! (-> s0-0 pipe-travel-time-to-jar) 750)
(set-vector! s4-0 -30720.0 1146.88 5120.0 1.0)
(set! (-> s0-0 sucked-up-part) (create-launch-control (-> *part-group-id-table* 448) obj))
(set! (-> s0-0 blown-out-part) (create-launch-control (-> *part-group-id-table* 451) obj))
@@ -1152,9 +1150,9 @@
)
)
((= v1-30 1)
- (set! (-> s0-0 puzzle-delay) (the-as uint 4500))
- (set! (-> s0-0 pipe-travel-time-to-far) (the-as uint 1650))
- (set! (-> s0-0 pipe-travel-time-to-jar) (the-as uint 750))
+ (set! (-> s0-0 puzzle-delay) 4500)
+ (set! (-> s0-0 pipe-travel-time-to-far) 1650)
+ (set! (-> s0-0 pipe-travel-time-to-jar) 750)
(set-vector! s4-0 0.0 1146.88 5120.0 1.0)
(set! (-> s0-0 sucked-up-part) (create-launch-control (-> *part-group-id-table* 449) obj))
(set! (-> s0-0 blown-out-part) (create-launch-control (-> *part-group-id-table* 452) obj))
@@ -1176,9 +1174,9 @@
)
)
((= v1-30 2)
- (set! (-> s0-0 puzzle-delay) (the-as uint 4500))
- (set! (-> s0-0 pipe-travel-time-to-far) (the-as uint 1350))
- (set! (-> s0-0 pipe-travel-time-to-jar) (the-as uint 750))
+ (set! (-> s0-0 puzzle-delay) 4500)
+ (set! (-> s0-0 pipe-travel-time-to-far) 1350)
+ (set! (-> s0-0 pipe-travel-time-to-jar) 750)
(set-vector! s4-0 30720.0 1146.88 5120.0 1.0)
(set! (-> s0-0 sucked-up-part) (create-launch-control (-> *part-group-id-table* 450) obj))
(set! (-> s0-0 blown-out-part) (create-launch-control (-> *part-group-id-table* 453) obj))
@@ -1214,7 +1212,7 @@
)
)
(set! (-> obj button s2-0) (the-as (pointer sunken-pipegame-button) v1-102))
- (set! (-> (the-as sunken-pipegame-button (-> (the-as sunken-pipegame-button v1-102) name)) button-id) s2-0)
+ (set! (-> (the-as (pointer sunken-pipegame-button) v1-102) 0 button-id) s2-0)
)
)
)
diff --git a/test/decompiler/reference/levels/swamp/billy_REF.gc b/test/decompiler/reference/levels/swamp/billy_REF.gc
index 9ecb0179e7..cca9a4bea4 100644
--- a/test/decompiler/reference/levels/swamp/billy_REF.gc
+++ b/test/decompiler/reference/levels/swamp/billy_REF.gc
@@ -497,7 +497,7 @@
(case (current-status (-> obj tasks))
(((task-status need-hint) (task-status need-introduction))
(when arg0
- (set! (-> obj blend-on-exit) #t)
+ (set! (-> obj blend-on-exit) (the-as art-joint-anim #t))
(close-status! (-> obj tasks) (task-status need-introduction))
(let ((s5-1 (new 'stack-no-clear 'vector)))
(dotimes (s4-0 (+ (the int (the float (+ (-> obj path-snacks curve num-cverts) -1))) 1))
@@ -556,7 +556,7 @@
)
(((task-status need-reminder-a) (task-status need-reminder))
(set! (-> obj skippable) #t)
- (set! (-> obj blend-on-exit) #t)
+ (set! (-> obj blend-on-exit) (the-as art-joint-anim #t))
(set! (-> obj will-talk) #t)
(new 'static 'spool-anim
:name "billy-reminder-1"
diff --git a/test/decompiler/reference/levels/village1/explorer_REF.gc b/test/decompiler/reference/levels/village1/explorer_REF.gc
index 9748776d38..e3e98beec2 100644
--- a/test/decompiler/reference/levels/village1/explorer_REF.gc
+++ b/test/decompiler/reference/levels/village1/explorer_REF.gc
@@ -72,7 +72,7 @@
;; definition for method 32 of type explorer
(defmethod play-anim! explorer ((obj explorer) (arg0 symbol))
- (set! (-> obj talk-message) (the-as uint 260))
+ (set! (-> obj talk-message) (game-text-id press-to-talk))
(case (current-status (-> obj tasks))
(((task-status need-hint) (task-status need-introduction))
(if arg0
@@ -124,7 +124,7 @@
)
(else
(set! (-> obj will-talk) #t)
- (set! (-> obj talk-message) (the-as uint 282))
+ (set! (-> obj talk-message) (game-text-id press-to-trade-money))
)
)
(new 'static 'spool-anim
@@ -569,7 +569,7 @@
(defmethod init-from-entity! explorer ((obj explorer) (arg0 entity-actor))
(dummy-40 obj arg0 *explorer-sg* 3 42 (new 'static 'vector :w 4096.0) 5)
(set! (-> obj tasks) (get-task-control (game-task village1-uncle-money)))
- (set! (-> obj sound-flava) (the-as uint 10))
+ (set! (-> obj sound-flava) (music-flava explorer))
(set! (-> obj draw light-index) (the-as uint 5))
(dummy-42 obj)
(none)
diff --git a/test/decompiler/reference/levels/village1/fishermans-boat_REF.gc b/test/decompiler/reference/levels/village1/fishermans-boat_REF.gc
index cb72f5d2a0..53593da4d9 100644
--- a/test/decompiler/reference/levels/village1/fishermans-boat_REF.gc
+++ b/test/decompiler/reference/levels/village1/fishermans-boat_REF.gc
@@ -996,7 +996,7 @@
(hide-hud)
(level-hint-surpress!)
(kill-current-level-hint '() '(sidekick voicebox) 'exit)
- (when (and (hud-hidden?) (can-grab-display? (the-as process-taskable self)) (= *kernel-boot-message* 'play))
+ (when (and (hud-hidden?) (can-grab-display? self) (= *kernel-boot-message* 'play))
(let ((s5-1
(new 'stack 'font-context *font-default-matrix* 32 160 0.0 (font-color default) (font-flags shadow kerning))
)
diff --git a/test/decompiler/reference/levels/village1/sage_REF.gc b/test/decompiler/reference/levels/village1/sage_REF.gc
index d4ad9ddd29..ef037160e4 100644
--- a/test/decompiler/reference/levels/village1/sage_REF.gc
+++ b/test/decompiler/reference/levels/village1/sage_REF.gc
@@ -670,7 +670,7 @@
(dummy-40 obj arg0 *sage-sg* 3 40 (new 'static 'vector :w 4096.0) 5)
(set! (-> obj tasks) (get-task-control (game-task misty-cannon)))
(set! (-> obj reminder-played) #f)
- (set! (-> obj sound-flava) (the-as uint 5))
+ (set! (-> obj sound-flava) (music-flava sage))
(set! (-> obj assistant) (the-as handle #f))
(set! (-> obj draw light-index) (the-as uint 1))
(dummy-42 obj)
diff --git a/test/decompiler/reference/levels/village2/assistant-village2_REF.gc b/test/decompiler/reference/levels/village2/assistant-village2_REF.gc
index c9bd6bc6ef..b723ffe000 100644
--- a/test/decompiler/reference/levels/village2/assistant-village2_REF.gc
+++ b/test/decompiler/reference/levels/village2/assistant-village2_REF.gc
@@ -113,7 +113,7 @@
;; definition for method 32 of type assistant-bluehut
(defmethod play-anim! assistant-bluehut ((obj assistant-bluehut) (arg0 symbol))
(with-pp
- (set! (-> obj talk-message) (the-as uint 292))
+ (set! (-> obj talk-message) (game-text-id press-to-talk-to-assistant))
(case (current-status (-> obj tasks))
(((task-status unknown) (task-status need-hint) (task-status need-introduction))
(if (not arg0)
diff --git a/test/decompiler/reference/levels/village2/gambler_REF.gc b/test/decompiler/reference/levels/village2/gambler_REF.gc
index 6cf86b9ce1..59df182fdc 100644
--- a/test/decompiler/reference/levels/village2/gambler_REF.gc
+++ b/test/decompiler/reference/levels/village2/gambler_REF.gc
@@ -30,7 +30,7 @@
;; definition for method 32 of type gambler
(defmethod play-anim! gambler ((obj gambler) (arg0 symbol))
- (set! (-> obj talk-message) (the-as uint 260))
+ (set! (-> obj talk-message) (game-text-id press-to-talk))
(case (current-status (-> obj tasks))
(((task-status need-hint) (task-status need-introduction))
(when arg0
@@ -105,7 +105,7 @@
(send-event *target* 'get-pickup 5 (- (-> *GAME-bank* money-task-inc)))
)
(else
- (set! (-> obj talk-message) (the-as uint 282))
+ (set! (-> obj talk-message) (game-text-id press-to-trade-money))
)
)
(new 'static 'spool-anim :name "gambler-resolution-money" :index 15 :parts 2 :command-list '())
@@ -282,7 +282,7 @@
(defmethod init-from-entity! gambler ((obj gambler) (arg0 entity-actor))
(dummy-40 obj arg0 *gambler-sg* 3 32 (new 'static 'vector :w 4096.0) 5)
(set! (-> obj tasks) (get-task-control (game-task rolling-race)))
- (set! (-> obj sound-flava) (the-as uint 17))
+ (set! (-> obj sound-flava) (music-flava gambler))
(set! (-> obj draw light-index) (the-as uint 4))
(dummy-42 obj)
(none)
diff --git a/test/decompiler/reference/levels/village2/geologist_REF.gc b/test/decompiler/reference/levels/village2/geologist_REF.gc
index 93d7650833..506dfbfad2 100644
--- a/test/decompiler/reference/levels/village2/geologist_REF.gc
+++ b/test/decompiler/reference/levels/village2/geologist_REF.gc
@@ -30,7 +30,7 @@
;; definition for method 32 of type geologist
(defmethod play-anim! geologist ((obj geologist) (arg0 symbol))
- (set! (-> obj talk-message) (the-as uint 260))
+ (set! (-> obj talk-message) (game-text-id press-to-talk))
(case (current-status (-> obj tasks))
(((task-status need-hint) (task-status need-introduction))
(when arg0
@@ -97,7 +97,7 @@
(send-event *target* 'get-pickup 5 (- (-> *GAME-bank* money-task-inc)))
)
(else
- (set! (-> obj talk-message) (the-as uint 282))
+ (set! (-> obj talk-message) (game-text-id press-to-trade-money))
)
)
(new 'static 'spool-anim :name "geologist-resolution-money" :index 10 :parts 2 :command-list '())
@@ -176,7 +176,7 @@
(defmethod init-from-entity! geologist ((obj geologist) (arg0 entity-actor))
(dummy-40 obj arg0 *geologist-sg* 3 45 (new 'static 'vector :w 4096.0) 5)
(set! (-> obj tasks) (get-task-control (game-task rolling-moles)))
- (set! (-> obj sound-flava) (the-as uint 16))
+ (set! (-> obj sound-flava) (music-flava geologist))
(set! (-> obj draw light-index) (the-as uint 2))
(dummy-42 obj)
(none)
diff --git a/test/decompiler/reference/levels/village2/sage-bluehut_REF.gc b/test/decompiler/reference/levels/village2/sage-bluehut_REF.gc
index d7ff506803..1637308564 100644
--- a/test/decompiler/reference/levels/village2/sage-bluehut_REF.gc
+++ b/test/decompiler/reference/levels/village2/sage-bluehut_REF.gc
@@ -60,7 +60,7 @@
;; definition for method 32 of type sage-bluehut
(defmethod play-anim! sage-bluehut ((obj sage-bluehut) (arg0 symbol))
(with-pp
- (set! (-> obj talk-message) (the-as uint 291))
+ (set! (-> obj talk-message) (game-text-id press-to-talk-to-sage))
(case (current-status (-> obj tasks))
(((task-status need-hint) (task-status need-introduction))
(if (not arg0)
@@ -446,7 +446,7 @@
(set! (-> obj reminder-played) #f)
(set! (-> obj assistant) (entity-actor-lookup arg0 'alt-actor 0))
(set! (-> obj draw light-index) (the-as uint 1))
- (set! (-> obj sound-flava) (the-as uint 5))
+ (set! (-> obj sound-flava) (music-flava sage))
(dummy-42 obj)
(none)
)
diff --git a/test/decompiler/reference/levels/village2/warrior_REF.gc b/test/decompiler/reference/levels/village2/warrior_REF.gc
index 99c918765d..17c5057362 100644
--- a/test/decompiler/reference/levels/village2/warrior_REF.gc
+++ b/test/decompiler/reference/levels/village2/warrior_REF.gc
@@ -70,7 +70,7 @@
;; definition for method 32 of type warrior
(defmethod play-anim! warrior ((obj warrior) (arg0 symbol))
(with-pp
- (set! (-> obj talk-message) (the-as uint 260))
+ (set! (-> obj talk-message) (game-text-id press-to-talk))
(case (current-status (-> obj tasks))
(((task-status need-hint) (task-status need-introduction))
(if arg0
@@ -127,7 +127,7 @@
)
(else
(set! (-> obj will-talk) #t)
- (set! (-> obj talk-message) (the-as uint 282))
+ (set! (-> obj talk-message) (game-text-id press-to-trade-money))
)
)
(new 'static 'spool-anim
@@ -231,7 +231,7 @@
(defmethod init-from-entity! warrior ((obj warrior) (arg0 entity-actor))
(dummy-40 obj arg0 *warrior-sg* 3 33 (new 'static 'vector :y -4096.0 :w 10240.0) 5)
(set! (-> obj tasks) (get-task-control (game-task village2-warrior-money)))
- (set! (-> obj sound-flava) (the-as uint 15))
+ (set! (-> obj sound-flava) (music-flava warrior))
(set! (-> obj draw light-index) (the-as uint 3))
(dummy-42 obj)
(none)
diff --git a/test/decompiler/reference/levels/village3/assistant-village3_REF.gc b/test/decompiler/reference/levels/village3/assistant-village3_REF.gc
index 2c26727264..5a0ad3a3c8 100644
--- a/test/decompiler/reference/levels/village3/assistant-village3_REF.gc
+++ b/test/decompiler/reference/levels/village3/assistant-village3_REF.gc
@@ -69,7 +69,7 @@
;; definition for method 32 of type assistant-villagec
(defmethod play-anim! assistant-villagec ((obj assistant-villagec) (arg0 symbol))
- (set! (-> obj talk-message) (the-as uint 292))
+ (set! (-> obj talk-message) (game-text-id press-to-talk-to-assistant))
(cond
((= (get-task-status (game-task finalboss-movies)) (task-status need-introduction))
(if arg0
diff --git a/test/decompiler/reference/levels/village3/miners_REF.gc b/test/decompiler/reference/levels/village3/miners_REF.gc
index 1b44057ef4..8e90b7b895 100644
--- a/test/decompiler/reference/levels/village3/miners_REF.gc
+++ b/test/decompiler/reference/levels/village3/miners_REF.gc
@@ -99,7 +99,7 @@
;; definition for method 32 of type minertall
;; INFO: Return type mismatch art-element vs basic.
(defmethod play-anim! minertall ((obj minertall) (arg0 symbol))
- (set! (-> obj talk-message) (the-as uint 260))
+ (set! (-> obj talk-message) (game-text-id press-to-talk))
(current-status (-> obj tasks))
(if arg0
(format
@@ -309,7 +309,7 @@
;; definition for method 32 of type minershort
(defmethod play-anim! minershort ((obj minershort) (arg0 symbol))
(with-pp
- (set! (-> obj talk-message) (the-as uint 260))
+ (set! (-> obj talk-message) (game-text-id press-to-talk))
(case (current-status (-> obj tasks))
(((task-status need-hint) (task-status need-introduction))
(if (not arg0)
@@ -488,7 +488,7 @@
)
(else
(set! (-> obj will-talk) #t)
- (set! (-> obj talk-message) (the-as uint 282))
+ (set! (-> obj talk-message) (game-text-id press-to-trade-money))
)
)
(if (< (the-as uint s4-3) (the-as uint 3))
@@ -648,7 +648,7 @@
(set! (-> obj tasks) (get-task-control (game-task village3-miner-money1)))
(set! (-> obj other-miner) (the-as minertall (entity-actor-lookup arg0 'alt-actor 0)))
(set! (-> obj cur-trans-hook) minershort-trans-hook)
- (set! (-> obj sound-flava) (the-as uint 14))
+ (set! (-> obj sound-flava) (music-flava miners))
(set! (-> obj draw light-index) (the-as uint 1))
(dummy-42 obj)
(none)
diff --git a/test/decompiler/reference/levels/village3/sage-village3_REF.gc b/test/decompiler/reference/levels/village3/sage-village3_REF.gc
index 655b72e26b..7f60f6347b 100644
--- a/test/decompiler/reference/levels/village3/sage-village3_REF.gc
+++ b/test/decompiler/reference/levels/village3/sage-village3_REF.gc
@@ -57,7 +57,7 @@
;; definition for method 32 of type sage-villagec
(defmethod play-anim! sage-villagec ((obj sage-villagec) (arg0 symbol))
(with-pp
- (set! (-> obj talk-message) (the-as uint 291))
+ (set! (-> obj talk-message) (game-text-id press-to-talk-to-sage))
(case (current-status (-> obj tasks))
(((task-status unknown) (task-status need-hint) (task-status need-introduction))
(if (not arg0)
@@ -362,7 +362,7 @@
(set! (-> obj assistant) (entity-actor-lookup arg0 'alt-actor 0))
(set! (-> obj evilbro) (the-as handle #f))
(set! (-> obj evilsis) (the-as handle #f))
- (set! (-> obj sound-flava) (the-as uint 5))
+ (set! (-> obj sound-flava) (music-flava sage))
(dummy-42 obj)
(none)
)
diff --git a/test/decompiler/reference/levels/village_common/oracle_REF.gc b/test/decompiler/reference/levels/village_common/oracle_REF.gc
index d2c82fe682..3d515a9369 100644
--- a/test/decompiler/reference/levels/village_common/oracle_REF.gc
+++ b/test/decompiler/reference/levels/village_common/oracle_REF.gc
@@ -37,7 +37,7 @@
;; definition for method 32 of type oracle
(defmethod play-anim! oracle ((obj oracle) (arg0 symbol))
- (set! (-> obj talk-message) (the-as uint 260))
+ (set! (-> obj talk-message) (game-text-id press-to-talk))
(case (current-status (-> obj tasks))
(((task-status need-hint) (task-status need-introduction))
(when arg0
@@ -183,7 +183,7 @@
)
(else
(set! (-> obj will-talk) #t)
- (set! (-> obj talk-message) (the-as uint 283))
+ (set! (-> obj talk-message) (game-text-id press-to-trade-money-oracle))
)
)
(cond
diff --git a/test/decompiler/reference/levels/village_common/villagep-obs_REF.gc b/test/decompiler/reference/levels/village_common/villagep-obs_REF.gc
index 3823fa8aa1..bcf5228799 100644
--- a/test/decompiler/reference/levels/village_common/villagep-obs_REF.gc
+++ b/test/decompiler/reference/levels/village_common/villagep-obs_REF.gc
@@ -176,7 +176,7 @@
(level-hint-surpress!)
(kill-current-level-hint '() '(sidekick voicebox) 'exit)
(when (and (hud-hidden?)
- (can-grab-display? (the-as process-taskable self))
+ (can-grab-display? self)
(cond
((or (= (-> *target* next-state name) 'target-warp-in) (= (-> *target* next-state name) 'target-warp-out))
(set! (-> self state-time) (-> *display* base-frame-counter))
@@ -350,7 +350,7 @@
(set! s5-0 #f)
(set! s2-0 0)
)
- (can-grab-display? (the-as process-taskable self))
+ (can-grab-display? self)
(hide-hud)
(let ((s1-2 (get-continue-by-name *game-info* (-> *warp-info* gp-0))))
(lookup-level-info (-> s1-2 level))
diff --git a/test/goalc/test_with_game.cpp b/test/goalc/test_with_game.cpp
index 04b338cb7f..0e8bb764ce 100644
--- a/test/goalc/test_with_game.cpp
+++ b/test/goalc/test_with_game.cpp
@@ -882,7 +882,7 @@ TEST_F(WithGameTests, SetU64FromFloat) {
TEST_F(WithGameTests, TrickyFloatBehavior) {
shared_compiler->runner.run_static_test(env, testCategory, "tricky-floats.gc",
- {"#x80000000 1.0000 #xffffffffbf800000\n0\n"});
+ {"#xffffffff80000000 1.0000 #xffffffffbf800000\n0\n"});
}
TEST_F(WithGameTests, ProcessAllocation) {