;;-*-Lisp-*- (in-package goal) ;; name: collectables.gc ;; name in dgo: collectables ;; dgos: GAME, ENGINE (declare-type vent process-drawable) (declare-type eco eco-collectable) (defenum collectable-flags :bitfield #t :type uint32 (trans 0) (fade 1) (can-collect 2) (fading 3) (suck 4) (ignore-blue 5) (anim 6) ) ;; DECOMP BEGINS (define *eco-pill-count* 0) (deftype collectable (process-drawable) ((root-override collide-shape-moving :offset 112) (pickup-type pickup-type :offset-assert 176) (pickup-amount float :offset-assert 180) (notify-parent basic :offset-assert 184) (old-base vector :inline :offset-assert 192) (base vector :inline :offset-assert 208) (extra-trans vector :inline :offset-assert 224) (jump-pos vector :inline :offset-assert 240) (flags collectable-flags :offset-assert 256) (birth-time int64 :offset-assert 264) (collect-timeout int64 :offset-assert 272) (fadeout-timeout int64 :offset-assert 280) (bob-offset int64 :offset-assert 288) (bob-amount float :offset-assert 296) (pickup-handle handle :offset-assert 304) (actor-pause symbol :offset-assert 312) ) :heap-base #xd0 :method-count-assert 22 :size-assert #x13c :flag-assert #x1600d0013c (:methods (initialize (_type_) _type_ 20) (initialize-params (_type_ int float) none 21) ) ) (defmethod initialize-params collectable ((obj collectable) (arg0 int) (arg1 float)) (logclear! (-> obj mask) (process-mask crate enemy platform ambient)) (set! (-> obj mask) (logior (process-mask collectable) (-> obj mask))) (set! (-> obj flags) (collectable-flags can-collect ignore-blue)) (set! (-> obj bob-amount) arg1) (set! (-> obj bob-offset) (+ (the-as int (-> obj root-override trans x)) (the-as int (-> obj root-override trans y)) (the-as int (-> obj root-override trans z)) ) ) (cond ((or (= (vector-length (-> obj root-override transv)) 0.0) (logtest? (-> obj fact options) (fact-options fop6)) ) (vector-reset! (-> obj root-override transv)) ) (else (logior! (-> obj flags) (collectable-flags trans)) (logclear! (-> obj flags) (collectable-flags can-collect)) (logclear! (-> obj mask) (process-mask actor-pause)) (set! (-> obj bob-amount) 0.0) ) ) (when (and (> arg0 0) #t) (logior! (-> obj flags) (collectable-flags fade)) (set! (-> obj fadeout-timeout) arg0) ) (set! (-> obj collect-timeout) 99) (set! (-> obj birth-time) (-> *display* base-frame-counter)) (set! (-> obj base quad) (-> obj root-override trans quad)) (set! (-> obj old-base quad) (-> obj root-override trans quad)) (set! (-> obj pickup-handle) (the-as handle #f)) (case (-> obj fact pickup-type) (((pickup-type eco-pill) (pickup-type eco-green) (pickup-type money) (pickup-type eco-blue)) (logclear! (-> obj flags) (collectable-flags ignore-blue)) ) ) (if (logtest? (-> obj fact options) (fact-options large)) (set! (-> obj root-override root-prim local-sphere w) (* 2.5 (-> obj root-override root-prim local-sphere w))) ) (none) ) (deftype eco-collectable (collectable) ((eco-effect sparticle-launch-group :offset-assert 316) (collect-effect sparticle-launch-group :offset-assert 320) (collect-effect2 sparticle-launch-group :offset-assert 324) (collect-effect-time seconds :offset-assert 328) (respawn-delay int64 :offset-assert 336) (sound-name sound-spec :offset-assert 344) (target handle :offset-assert 352) (suck-time int64 :offset-assert 360) (suck-y-offset float :offset-assert 368) (speed vector :inline :offset-assert 384) (movie-pos-index int32 :offset-assert 400) ) :heap-base #x130 :method-count-assert 31 :size-assert #x194 :flag-assert #x1f01300194 (:methods (wait () _type_ :state 22) (pickup (object handle) _type_ :state 23) (die () _type_ :state 24) (jump () _type_ :state 25) (notice-blue (handle) _type_ :state 26) (get-pickup-sound (_type_ pickup-type) ambient-sound 27) (initialize-eco (_type_ entity-actor pickup-type float) object 28) (animate (_type_) none 29) (blocked () _type_ :state 30) ) ) (defmethod initialize eco-collectable ((obj eco-collectable)) (stack-size-set! (-> obj main-thread) 128) (logior! (-> obj mask) (process-mask actor-pause)) (set! (-> obj actor-pause) #t) (set! (-> obj notify-parent) #f) (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-sphere s5-0 (the-as uint 0)))) (set! (-> s4-0 prim-core collide-as) (the-as uint #x8040)) (set! (-> s4-0 collide-with) (the-as uint 16)) (set-vector! (-> s4-0 local-sphere) 0.0 3276.8 0.0 3276.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! (-> obj root-override) s5-0) ) (set! (-> obj fact) (new 'process 'fact-info obj (-> obj pickup-type) (-> obj pickup-amount))) (if (logtest? (fact-options respawn) (-> obj fact options)) (set! (-> obj respawn-delay) (-> obj fact fade-time)) ) obj ) (defmethod get-pickup-sound eco-collectable ((obj eco-collectable) (arg0 pickup-type)) (set! (-> obj fact pickup-type) arg0) (case (-> obj fact pickup-type) (((pickup-type eco-blue) (pickup-type eco-red) (pickup-type eco-green) (pickup-type eco-yellow)) (logclear! (-> obj mask) (process-mask actor-pause)) ) ) (set! (-> obj sound-name) #f) (case arg0 (((pickup-type eco-yellow)) (set! (-> obj eco-effect) (-> *part-group-id-table* 56)) (set! (-> obj collect-effect) (-> *part-group-id-table* 68)) (set! (-> obj collect-effect2) (-> *part-group-id-table* 57)) (set! (-> obj collect-effect-time) 150) (set! (-> obj sound-name) (new 'static 'sound-spec :mask #x80 :num 1.0 :group #x1 :sound-name (static-sound-name "yel-eco-idle") :volume #x400 :fo-max 15 ) ) ) (((pickup-type eco-red)) (set! (-> obj eco-effect) (-> *part-group-id-table* 48)) (set! (-> obj collect-effect) (-> *part-group-id-table* 69)) (set! (-> obj collect-effect2) (-> *part-group-id-table* 49)) (set! (-> obj collect-effect-time) 150) (set! (-> obj sound-name) (new 'static 'sound-spec :mask #x80 :num 1.0 :group #x1 :sound-name (static-sound-name "red-eco-idle") :volume #x400 :fo-max 15 ) ) ) (((pickup-type eco-blue)) (set! (-> obj eco-effect) (-> *part-group-id-table* 42)) (set! (-> obj collect-effect) (-> *part-group-id-table* 67)) (set! (-> obj collect-effect2) (-> *part-group-id-table* 43)) (set! (-> obj collect-effect-time) 150) (set! (-> obj sound-name) (new 'static 'sound-spec :mask #x80 :num 1.0 :group #x1 :sound-name (static-sound-name "blue-eco-idle") :volume #x400 :fo-max 15 ) ) ) (((pickup-type eco-green)) (set! (-> obj eco-effect) (-> *part-group-id-table* 58)) (set! (-> obj collect-effect) (-> *part-group-id-table* 66)) (set! (-> obj collect-effect2) (-> *part-group-id-table* 61)) (set! (-> obj collect-effect-time) 150) (set! (-> obj sound-name) (new 'static 'sound-spec :mask #x80 :num 1.0 :group #x1 :sound-name (static-sound-name "green-eco-idle") :volume #x400 :fo-max 15 ) ) ) (((pickup-type eco-pill)) (set! (-> obj eco-effect) (-> *part-group-id-table* 59)) (set! (-> obj collect-effect2) (-> *part-group-id-table* 60)) (set! (-> obj collect-effect-time) 150) ) ) (set! (-> obj part) (create-launch-control (-> obj eco-effect) obj)) (when (-> obj sound-name) (let ((v0-1 (new 'process 'ambient-sound (-> obj sound-name) (-> obj root-override trans)))) (set! (-> obj sound) v0-1) v0-1 ) ) ) (defbehavior initialize-eco-by-other eco ((arg0 vector) (arg1 vector) (arg2 fact-info)) (let ((s3-0 (-> arg2 pickup-type)) (f30-0 (-> arg2 pickup-spawn-amount)) ) (set! (-> self pickup-amount) f30-0) (set! (-> self pickup-type) s3-0) (initialize self) (set! (-> self fact pickup-type) s3-0) (set! (-> self fact pickup-amount) f30-0) ) (set! (-> self fact options) (-> arg2 options)) (set! (-> self root-override trans quad) (-> arg0 quad)) (set! (-> self root-override transv quad) (-> arg1 quad)) (get-pickup-sound self (-> self fact pickup-type)) (set! (-> self notify-parent) #f) (case (-> self fact pickup-type) (((pickup-type eco-blue) (pickup-type eco-yellow) (pickup-type eco-red)) (initialize-params self (if (and arg2 (logtest? (-> arg2 options) (fact-options fade))) (-> arg2 fade-time) 0 ) (the-as float 1024.0) ) ) (else (initialize-params self 4500 (the-as float 1024.0)) ) ) (dummy-47 (-> self root-override)) (set! (-> self event-hook) (-> (method-of-object self wait) event)) (if (logtest? (fact-options eco-blocked) (-> self fact options)) (go-virtual blocked) ) (go-virtual wait) (none) ) (defmethod initialize-eco eco-collectable ((obj eco-collectable) (arg0 entity-actor) (arg1 pickup-type) (arg2 float)) (set! (-> obj pickup-amount) arg2) (set! (-> obj pickup-type) arg1) (initialize obj) (set! (-> obj root-override trans quad) (-> arg0 extra trans quad)) (get-pickup-sound obj (-> obj fact pickup-type)) (initialize-params obj 0 (the-as float 1024.0)) (dummy-47 (-> obj root-override)) (if (logtest? (fact-options eco-blocked) (-> obj fact options)) (go (method-of-object obj blocked)) ) (go (method-of-object obj wait)) ) (defmethod animate eco-collectable ((obj eco-collectable)) 0 (none) ) (defun add-blue-shake ((arg0 vector) (arg1 vector) (arg2 vector)) (let* ((f0-0 (vector-vector-distance arg1 arg2)) (f30-0 (lerp-scale (the-as float 409.6) (the-as float 0.0) f0-0 (-> *FACT-bank* suck-suck-dist) (-> *FACT-bank* suck-bounce-dist) ) ) ) (+! (-> arg0 x) (rand-vu-float-range (- f30-0) f30-0)) (+! (-> arg0 y) (rand-vu-float-range (- f30-0) f30-0)) (+! (-> arg0 z) (rand-vu-float-range (- f30-0) f30-0)) ) arg0 ) (defbehavior check-blue-suck eco-collectable ((arg0 process-drawable)) (let ((v1-1 (if (and (nonzero? arg0) (type-type? (-> arg0 type) process-drawable)) arg0 ) ) ) (when v1-1 (let* ((gp-1 (-> v1-1 root)) (v1-3 (if (and (nonzero? gp-1) (type-type? (-> gp-1 type) collide-shape)) gp-1 ) ) ) (when v1-3 (let ((a0-5 (-> self root-override root-prim prim-core)) (a1-2 (-> (the-as collide-shape v1-3) root-prim prim-core)) ) (if (< (vector-vector-distance (the-as vector a0-5) (the-as vector a1-2)) (-> *FACT-bank* suck-suck-dist)) (logior! (-> self flags) (collectable-flags suck)) ) ) ) ) ) ) (none) ) (defbehavior add-blue-motion eco-collectable ((arg0 symbol) (arg1 symbol) (arg2 symbol) (arg3 symbol)) (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)) (the-as collide-shape gp-1) ) ) ) (when v1-6 (let ((s2-0 (-> self root-override root-prim prim-core)) (gp-2 (-> v1-6 root-prim prim-core)) ) (if (and arg1 (rand-vu-percent? (the-as float 0.25))) (eco-blue-glow (the-as vector s2-0)) ) (let ((f0-0 (vector-vector-distance (the-as vector s2-0) (the-as vector gp-2)))) (cond ((and arg3 (< f0-0 8192.0)) (return #t) ) ((begin (set! arg0 (and (or (not arg2) (or (< f0-0 (-> *FACT-bank* suck-suck-dist)) (logtest? (-> self flags) (collectable-flags suck))) ) arg0 ) ) arg0 ) (logior! (-> self flags) (collectable-flags suck)) (if (= (-> self speed w) 0.0) (set! (-> self suck-time) (-> *display* base-frame-counter)) ) (+! (-> self speed w) (* 163840.0 (-> *display* seconds-per-frame))) (+! (-> self speed y) (* 291271.12 (-> *display* seconds-per-frame))) (set! (-> self speed y) (fmin (fmin 291271.12 (-> self speed y)) (-> self speed y))) (let ((s5-2 (vector-! (new 'stack-no-clear 'vector) (-> self base) (the-as vector gp-2)))) (vector-normalize! s5-2 (fmax 0.0 (- (vector-length s5-2) (* (-> self speed w) (-> *display* seconds-per-frame)))) ) (vector-rotate-y! s5-2 s5-2 (* (-> self speed y) (-> self speed z) (-> *display* seconds-per-frame))) (set! (-> self suck-y-offset) (* 2048.0 (sin (* 873.81335 (the float (mod (- (-> *display* base-frame-counter) (-> self suck-time)) 75))))) ) (vector+! (-> self base) (the-as vector gp-2) s5-2) ) ) ((and arg2 (and (< (+ 4096.0 (-> *FACT-bank* suck-bounce-dist)) f0-0) (zero? (logand (-> self flags) (collectable-flags suck))) ) ) (go-virtual wait) ) (arg1 (add-blue-shake (-> self root-override trans) (the-as vector s2-0) (the-as vector gp-2)) ) ) ) ) ) ) ) ) #f ) (defstate blocked (eco-collectable) :virtual #t :trans (behavior () (if (task-complete? *game-info* (-> self entity extra perm task)) (go-virtual wait) ) (none) ) :code (the-as (function none :behavior eco-collectable) anim-loop) ) (defstate jump (eco-collectable) :virtual #t :code (behavior () (if (type-type? (-> self type) fuel-cell) (sound-play-by-name (static-sound-name "cell-prize") (new-sound-id) 1024 0 0 1 #t) ) (logclear! (-> self mask) (process-mask actor-pause)) (let ((gp-1 (new 'stack 'trajectory))) (set! (-> self base y) (-> self jump-pos y)) (setup-from-to-duration! gp-1 (-> self root-override trans) (-> self jump-pos) (the-as float 300.0) (the-as float -2.2755556) ) (set! (-> self state-time) (-> *display* base-frame-counter)) (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 300) (let ((f0-2 (the float (- (-> *display* base-frame-counter) (-> self state-time))))) (eval-position! gp-1 f0-2 (-> self root-override trans)) ) (transform-post) (animate self) (suspend) (when (nonzero? (-> self skel)) (let ((a0-10 (-> self skel root-channel 0))) (set! (-> a0-10 param 0) 0.5) (joint-control-channel-group-eval! a0-10 (the-as art-joint-anim #f) num-func-loop!) ) ) ) ) (set! (-> self root-override trans quad) (-> self jump-pos quad)) (set! (-> self base quad) (-> self root-override trans quad)) (vector-reset! (-> self root-override transv)) (dummy-47 (-> self root-override)) (logclear! (-> self flags) (collectable-flags trans)) (logior! (-> self flags) (collectable-flags can-collect)) (if (-> self actor-pause) (logior! (-> self mask) (process-mask actor-pause)) ) (go-virtual wait) (none) ) ) (defstate wait (eco-collectable) :virtual #t :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) (local-vars (v0-3 none)) (when (and (or (= arg2 'touch) (= arg2 'attack)) (and (logtest? (-> self flags) (collectable-flags can-collect)) (>= (- (-> *display* base-frame-counter) (-> self birth-time)) (-> self collect-timeout)) (!= (-> self next-state name) 'pickup) (send-event arg0 'get-pickup (-> self fact pickup-type) (-> self fact pickup-amount)) ) ) (logclear! (-> self mask) (process-mask actor-pause)) (go-virtual pickup #f (process->handle arg0)) ) (the-as object (cond ((= arg2 'eco-blue) (when (and (zero? (logand (-> self flags) (collectable-flags fading ignore-blue))) (!= (-> self next-state name) 'pickup) (begin (check-blue-suck (the-as process-drawable arg0)) #t) (logtest? (-> self flags) (collectable-flags can-collect)) (>= (- (-> *display* base-frame-counter) (-> self birth-time)) (-> self collect-timeout)) ) (logclear! (-> self mask) (process-mask actor-pause)) (go-virtual notice-blue (process->handle arg0)) ) ) ((= arg2 'trans) (set! (-> self root-override trans quad) (-> (the-as vector (-> arg3 param 0)) quad)) (dummy-47 (-> self root-override)) (ja-post) ) ((= arg2 'jump) (logclear! (-> self mask) (process-mask actor-pause)) (set! (-> self jump-pos quad) (-> (the-as vector (-> arg3 param 0)) quad)) (go-virtual jump) ) ((= arg2 'pickup) (when (!= (-> self next-state name) 'pickup) (if (and (> arg1 0) (-> arg3 param 0)) (TODO-RENAME-30 (-> self root-override) (the-as vector (-> arg3 param 0))) ) (logclear! (-> self mask) (process-mask actor-pause)) (go-virtual pickup #f (the-as handle #f)) ) ) ((= arg2 'die) (logclear! (-> self mask) (process-mask actor-pause)) (go-virtual die) ) ((= arg2 'movie-pos) (set! v0-3 (the-as none (-> arg3 param 0))) (set! (-> self movie-pos-index) (the-as int v0-3)) v0-3 ) ((= arg2 'actor-pause) (cond ((-> arg3 param 0) (logior! (-> self mask) (process-mask actor-pause)) (set! v0-3 (the-as none #t)) (set! (-> self actor-pause) (the-as symbol v0-3)) v0-3 ) (else (logclear! (-> self mask) (process-mask actor-pause)) (set! (-> self actor-pause) #f) #f ) ) ) ((= arg2 'fade) (logior! (-> self flags) (collectable-flags fade)) (set! (-> self fadeout-timeout) 30) (set! v0-3 (the-as none (-> *display* base-frame-counter))) (set! (-> self birth-time) (the-as int v0-3)) v0-3 ) ) ) ) :enter (behavior () (if (and (logtest? (-> self fact options) (fact-options fop6 can-collect)) (logtest? (-> self flags) (collectable-flags can-collect)) (!= (-> self next-state name) 'pickup) (send-event *target* 'get-pickup (-> self fact pickup-type) (-> self fact pickup-amount)) ) (go-virtual pickup #f (process->handle *target*)) ) (none) ) :trans (behavior () (cond ((logtest? (-> self flags) (collectable-flags trans)) (vector-v++! (-> self root-override transv) (dummy-62 (-> self root-override) (new-stack-vector0) (the-as float 0.0)) ) (dummy-57 (-> self root-override) (-> self root-override transv)) (when (and (>= 0.0 (-> self root-override transv y)) (>= (-> self base y) (-> self root-override trans y))) (set! (-> self root-override trans y) (-> self base y)) (cond ((< (-> self root-override transv y) -8192.0) (set! (-> self root-override transv y) (* -0.5 (-> self root-override transv y))) ) (else (vector-reset! (-> self root-override transv)) (logclear! (-> self flags) (collectable-flags trans)) (logior! (-> self flags) (collectable-flags can-collect)) (if (-> self actor-pause) (logior! (-> self mask) (process-mask actor-pause)) ) (set! (-> self base quad) (-> self root-override trans quad)) (if (and (logtest? (-> self fact options) (fact-options can-collect)) (zero? (logand (-> self flags) (collectable-flags ignore-blue))) ) (go-virtual notice-blue (process->handle *target*)) ) (if (and (logtest? (-> self fact options) (fact-options fop6 can-collect)) (!= (-> self next-state name) 'pickup) (send-event *target* 'get-pickup (-> self fact pickup-type) (-> self fact pickup-amount)) ) (go-virtual pickup #f (process->handle *target*)) ) ) ) ) ) (else (set! (-> self trans-hook) #f) ) ) (dummy-47 (-> self root-override)) (none) ) :code (behavior () (while #t (let ((gp-0 (-> self part)) (s5-0 (-> self root-override root-prim prim-core)) ) (when (and (logtest? (-> self flags) (collectable-flags fade)) (>= (- (-> *display* base-frame-counter) (-> self birth-time)) (-> self fadeout-timeout)) ) (let ((v1-10 (- 300 (- (- (-> *display* base-frame-counter) (-> self birth-time)) (-> self fadeout-timeout))))) (cond ((< v1-10 0) (process-entity-status! self (entity-perm-status dead) #t) (deactivate self) ) (else (logclear! (-> self mask) (process-mask actor-pause)) (set! (-> self actor-pause) #f) (logior! (-> self flags) (collectable-flags fading)) (logior! (-> self state-flags) 1) (set! (-> gp-0 fade) (* 0.0033333334 (the float v1-10))) ) ) ) ) (spawn gp-0 (the-as vector s5-0)) ) (if (nonzero? (-> self sound)) (update! (-> self sound)) ) (suspend) ) (none) ) ) (defstate notice-blue (eco-collectable) :virtual #t :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) (when (and (or (= arg2 'touch) (= arg2 'attack)) (and (logtest? (-> self flags) (collectable-flags can-collect)) (>= (- (-> *display* base-frame-counter) (-> self birth-time)) (-> self collect-timeout)) (!= (-> self next-state name) 'pickup) (send-event arg0 'get-pickup (-> self fact pickup-type) (-> self fact pickup-amount)) ) ) (logclear! (-> self mask) (process-mask actor-pause)) (go-virtual pickup #f (process->handle arg0)) ) ) :enter (behavior ((arg0 handle)) (set! (-> self target) arg0) (set! (-> self speed quad) (the-as uint128 0)) (set! (-> self speed z) (the-as float (if (rand-vu-percent? (the-as float 0.5)) 1.0 -1.0 ) ) ) (set! (-> self suck-y-offset) 0.0) (logclear! (-> self mask) (process-mask actor-pause)) (none) ) :exit (behavior () (if (-> self actor-pause) (logior! (-> self mask) (process-mask actor-pause)) ) (none) ) :trans (behavior () (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)) (zero? (logand (-> self flags) (collectable-flags suck)))) (go-virtual wait) ) ) (none) ) :code (behavior ((arg0 handle)) (while #t (set! (-> self root-override trans quad) (-> self base quad)) (add-blue-motion #t #f #t #f) (dummy-47 (-> self root-override)) (if (nonzero? (-> self draw)) (ja-post) ) (let ((a0-5 (-> self part)) (a1-1 (-> self root-override root-prim prim-core)) ) (if (nonzero? a0-5) (spawn a0-5 (the-as vector a1-1)) ) ) (if (nonzero? (-> self sound)) (update! (-> self sound)) ) (suspend) ) (none) ) ) (defstate pickup (eco-collectable) :virtual #t :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) (let ((v1-0 arg2)) (the-as object (cond ((= v1-0 'set-movie-pos) (let ((v1-3 (res-lump-struct (-> self entity) 'movie-pos vector :time (the-as float -1000000000.0)))) (the-as symbol (when v1-3 (set! (-> v1-3 quad) (-> (the-as vector (-> arg3 param 0)) quad)) (the-as symbol v1-3) ) ) ) ) ((= v1-0 'actor-pause) (the-as symbol (cond ((-> arg3 param 0) (logior! (-> self mask) (process-mask actor-pause)) (let ((v0-1 #t)) (set! (-> self actor-pause) v0-1) v0-1 ) ) (else (logclear! (-> self mask) (process-mask actor-pause)) (set! (-> self actor-pause) #f) #f ) ) ) ) ((= v1-0 'fade) (process-entity-status! self (entity-perm-status dead) #t) (the-as symbol (deactivate self)) ) ) ) ) ) :enter (behavior ((arg0 object) (arg1 handle)) (set! (-> self pickup-handle) arg1) (when (-> self notify-parent) (let ((gp-0 (new 'stack-no-clear 'event-message-block))) (set! (-> gp-0 from) self) (set! (-> gp-0 num-params) 1) (set! (-> gp-0 message) 'notify) (set! (-> gp-0 param 0) (the-as uint 'pickup)) (let ((s5-0 send-event-function) (s4-0 (ppointer->process (-> self parent))) ) (s5-0 (if (and (nonzero? s4-0) (type-type? (-> s4-0 type) process)) s4-0 ) gp-0 ) ) ) ) (logclear! (-> self mask) (process-mask actor-pause)) (none) ) :code (behavior ((arg0 object) (arg1 handle)) (clear-collide-with-as (-> self root-override)) (if (not (or (= (-> self fact pickup-type) (pickup-type eco-pill)) (logtest? (-> self fact options) (fact-options powerup)) ) ) (send-event (handle->process arg1) 'powerup (-> self fact pickup-type) (-> self fact pickup-amount)) ) (if (nonzero? (-> self sound)) (stop! (-> self sound)) ) (case (-> self fact pickup-type) (((pickup-type eco-yellow)) (sound-play-by-name (static-sound-name "y-eco-pickup") (new-sound-id) 1024 0 0 1 #t) ) (((pickup-type eco-red)) (sound-play-by-name (static-sound-name "r-eco-pickup") (new-sound-id) 1024 0 0 1 #t) ) (((pickup-type eco-blue)) (sound-play-by-name (static-sound-name "b-eco-pickup") (new-sound-id) 1024 0 0 1 #t) (case (-> (level-get-target-inside *level*) name) (('training) (level-hint-spawn (game-text-id training-more-eco-more-time) "sagevb23" (the-as entity #f) *entity-pool* (game-task none) ) ) ) ) (((pickup-type eco-green)) (sound-play-by-name (static-sound-name "g-eco-pickup") (new-sound-id) 1024 0 0 1 #t) ) (((pickup-type eco-green) (pickup-type eco-pill)) (sound-play-by-name (static-sound-name "pill-pickup") (new-sound-id) 1024 0 0 1 #t) ) ) (if (nonzero? (-> self part)) (kill-and-free-particles (-> self part)) ) (let ((gp-6 (handle->process (-> self pickup-handle)))) (when (nonzero? (-> self collect-effect)) (let ((s5-5 (get-process *default-dead-pool* part-tracker #x4000))) (when s5-5 (let ((t9-17 (method-of-type part-tracker activate))) (t9-17 (the-as part-tracker s5-5) gp-6 'part-tracker (the-as pointer #x70004000)) ) (run-now-in-process s5-5 part-tracker-init (-> self collect-effect) -1 part-tracker-track-target #f #f (-> self root-override root-prim prim-core) ) (-> s5-5 ppointer) ) ) ) ) (when (nonzero? (-> self collect-effect2)) (let ((gp-7 (get-process *default-dead-pool* part-tracker #x4000))) (when gp-7 (let ((t9-20 (method-of-type part-tracker activate))) (t9-20 (the-as part-tracker gp-7) self 'part-tracker (the-as pointer #x70004000)) ) (run-now-in-process gp-7 part-tracker-init (-> self collect-effect2) -1 (lambda ((arg0 part-tracker)) (let ((s5-0 (handle->process (-> arg0 userdata)))) (when s5-0 (let* ((v1-4 (handle->process (-> (the-as eco-collectable s5-0) pickup-handle))) (a2-0 (cond ((not v1-4) (-> arg0 root trans) ) ((= (-> v1-4 type) target) (vector<-cspace! (new 'stack-no-clear 'vector) (-> (the-as target v1-4) node-list data 5)) ) (else (-> (the-as target v1-4) control trans) ) ) ) ) (vector-lerp! (-> arg0 root trans) (-> arg0 offset) a2-0 (/ (the float (- (-> *display* base-frame-counter) (the-as int (-> arg0 start-time)))) (the float (-> (the-as eco-collectable s5-0) collect-effect-time)) ) ) ) ) ) ) (process->handle self) #f (-> self root-override root-prim prim-core) ) (-> gp-7 ppointer) ) ) ) (while (-> self child) (suspend) ) (go-virtual die) (none) ) ) (defstate die (eco-collectable) :virtual #t :code (behavior () (process-entity-status! self (entity-perm-status dead) #t) (none)) ) (deftype eco (eco-collectable) () :heap-base #x130 :method-count-assert 31 :size-assert #x194 :flag-assert #x1f01300194 ) (defmethod animate eco ((obj eco)) (let ((a0-1 (-> obj part)) (a1-0 (-> obj root-override root-prim prim-core)) ) (spawn a0-1 (the-as vector a1-0)) ) (if (nonzero? (-> obj sound)) (update! (-> obj sound)) ) 0 (none) ) (defstate die (eco) :virtual #t :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) (let ((v1-0 arg2)) (the-as object (cond ((= v1-0 'fade) (process-entity-status! self (entity-perm-status dead) #t) (deactivate self) ) ((= v1-0 'die) (go-virtual die) ) ) ) ) ) :exit (behavior () (process-entity-status! self (entity-perm-status bit-3) #f) (if (-> self actor-pause) (logior! (-> self mask) (process-mask actor-pause)) ) (none) ) :code (behavior () (process-entity-status! self (entity-perm-status bit-3) #t) (logclear! (-> self mask) (process-mask actor-pause)) (logclear! (-> self fact options) (fact-options fop6 can-collect)) (if (nonzero? (-> self part)) (kill-and-free-particles (-> self part)) ) (cond ((nonzero? (-> self respawn-delay)) (let ((gp-0 (-> *display* base-frame-counter))) (while (< (- (-> *display* base-frame-counter) gp-0) (-> self respawn-delay)) (suspend) ) ) ) (else (while (let ((f30-0 0.0) (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 'pickup)) (set! (-> a1-1 param 1) (the-as uint (-> self fact pickup-type))) (< f30-0 (the-as float (send-event-function *target* a1-1))) ) (suspend) ) ) ) (set! (-> self base quad) (-> self old-base quad)) (set! (-> self root-override trans quad) (-> self base quad)) (restore-collide-with-as (-> self root-override)) (go-virtual wait) (none) ) ) (deftype eco-yellow (eco) () :heap-base #x130 :method-count-assert 31 :size-assert #x194 :flag-assert #x1f01300194 ) (defmethod init-from-entity! eco-yellow ((obj eco-yellow) (arg0 entity-actor)) (initialize-eco obj arg0 (pickup-type eco-yellow) (-> *FACT-bank* eco-single-inc)) (none) ) (deftype eco-red (eco) () :heap-base #x130 :method-count-assert 31 :size-assert #x194 :flag-assert #x1f01300194 ) (defmethod init-from-entity! eco-red ((obj eco-red) (arg0 entity-actor)) (initialize-eco obj arg0 (pickup-type eco-red) (-> *FACT-bank* eco-single-inc)) (none) ) (deftype eco-blue (eco) () :heap-base #x130 :method-count-assert 31 :size-assert #x194 :flag-assert #x1f01300194 ) (defmethod init-from-entity! eco-blue ((obj eco-blue) (arg0 entity-actor)) (initialize-eco obj arg0 (pickup-type eco-blue) (-> *FACT-bank* eco-single-inc)) (none) ) (deftype health (eco-collectable) () :heap-base #x130 :method-count-assert 31 :size-assert #x194 :flag-assert #x1f01300194 ) (defmethod animate health ((obj health)) (let ((a0-1 (-> obj part)) (a1-0 (-> obj root-override root-prim prim-core)) ) (spawn a0-1 (the-as vector a1-0)) ) (if (nonzero? (-> obj sound)) (update! (-> obj sound)) ) 0 (none) ) (defmethod init-from-entity! health ((obj health) (arg0 entity-actor)) (initialize-eco obj arg0 (pickup-type eco-green) (-> *FACT-bank* health-single-inc)) (none) ) (deftype eco-pill (eco-collectable) () :heap-base #x130 :method-count-assert 31 :size-assert #x194 :flag-assert #x1f01300194 ) (defmethod animate eco-pill ((obj eco-pill)) (let ((a0-1 (-> obj part)) (a1-0 (-> obj root-override root-prim prim-core)) ) (spawn a0-1 (the-as vector a1-0)) ) (if (nonzero? (-> obj sound)) (update! (-> obj sound)) ) 0 (none) ) (defmethod init-from-entity! eco-pill ((obj eco-pill) (arg0 entity-actor)) (initialize-eco obj arg0 (pickup-type eco-pill) (-> *FACT-bank* health-small-inc)) (none) ) (defmethod deactivate eco-pill ((obj eco-pill)) (set! *eco-pill-count* (+ *eco-pill-count* -1)) ((method-of-type eco-collectable deactivate) obj) (none) ) (defmethod initialize eco-pill ((obj eco-pill)) (set! *eco-pill-count* (+ *eco-pill-count* 1)) (stack-size-set! (-> obj main-thread) 128) (logior! (-> obj mask) (process-mask actor-pause)) (set! (-> obj actor-pause) #t) (set! (-> obj notify-parent) #f) (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-sphere s5-0 (the-as uint 0)))) (set! (-> s4-0 prim-core collide-as) (the-as uint #x8040)) (set! (-> s4-0 collide-with) (the-as uint 16)) (set-vector! (-> s4-0 local-sphere) 0.0 3276.8 0.0 8192.0) (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) ) (set! (-> obj fact) (new 'process 'fact-info obj (-> obj pickup-type) (-> obj pickup-amount))) obj ) (defskelgroup *money-sg* money 0 4 ((1 (meters 20)) (2 (meters 40)) (3 (meters 999999))) :bounds (static-spherem 0 0 0 0.6) :longest-edge (meters 0) :texture-level 2 ) (defskelgroup *fuel-cell-sg* fuel-cell 0 2 ((1 (meters 999999))) :bounds (static-spherem 0 1 0 1.6) :longest-edge (meters 0) :texture-level 2 ) (deftype money (eco-collectable) () :heap-base #x130 :method-count-assert 31 :size-assert #x194 :flag-assert #x1f01300194 ) (defmethod run-logic? money ((obj money)) (or (zero? (logand (-> obj mask) (process-mask actor-pause))) (or (and (nonzero? (-> obj draw)) (logtest? (-> obj draw status) (draw-status drwf03)) (>= (+ (-> *ACTOR-bank* pause-dist) (-> obj root-override pause-adjust-distance)) (vector-vector-distance (-> obj root-override trans) (math-camera-pos)) ) ) (and (nonzero? (-> obj skel)) (!= (-> obj skel root-channel 0) (-> obj skel channel))) (and (nonzero? (-> obj draw)) (logtest? (-> obj draw status) (draw-status drwf04))) ) ) ) (defmethod deactivate money ((obj money)) (when (= (-> obj next-state name) 'pickup) (if (not (and (-> obj entity) (logtest? (-> obj entity extra perm status) (entity-perm-status dead)))) (format #t "money ~A was killed in pickup~%") ) (process-entity-status! obj (entity-perm-status dead) #t) ) ((method-of-type eco-collectable deactivate) obj) (none) ) (defstate wait (money) :virtual #t :code (behavior () (while #t (quaternion-rotate-y! (-> self root-override quat) (-> self root-override quat) (* 40049.777 (-> *display* seconds-per-frame)) ) (let ((f30-0 (-> self bob-amount))) (when (< 0.0 f30-0) (set! (-> self root-override trans y) (+ (-> self base y) (-> self suck-y-offset) (* f30-0 (sin (* 109.22667 (the float (mod (+ (- (-> *display* base-frame-counter) (-> self birth-time)) (-> self bob-offset)) 600)) ) ) ) ) ) (dummy-47 (-> self root-override)) ) ) (ja-post) (suspend) ) (none) ) ) (defstate notice-blue (money) :virtual #t :code (behavior ((arg0 handle)) (while #t (quaternion-rotate-y! (-> self root-override quat) (-> self root-override quat) (* 91022.22 (-> *display* seconds-per-frame)) ) (set! (-> self root-override trans quad) (-> self base quad)) (add-blue-motion #t #t #t #f) (let ((f30-0 (-> self bob-amount))) (if (< 0.0 f30-0) (set! (-> self root-override trans y) (+ (-> self base y) (-> self suck-y-offset) (* f30-0 (sin (* 109.22667 (the float (mod (+ (- (-> *display* base-frame-counter) (-> self birth-time)) (-> self bob-offset)) 600)) ) ) ) ) ) ) ) (transform-post) (suspend) ) (none) ) ) (defstate pickup (money) :virtual #t :code (behavior ((arg0 object) (arg1 handle)) (logclear! (-> self mask) (process-mask actor-pause)) (clear-collide-with-as (-> self root-override)) (process-entity-status! self (entity-perm-status dead) #t) (convert-to-hud-object self (the-as hud (ppointer->process (-> *hud-parts* money)))) (none) ) ) (defmethod initialize money ((obj money)) (stack-size-set! (-> obj main-thread) 128) (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-sphere s5-0 (the-as uint 0)))) (set! (-> s4-0 prim-core collide-as) (the-as uint #x8040)) (set! (-> s4-0 collide-with) (the-as uint 16)) (set-vector! (-> s4-0 local-sphere) 0.0 2048.0 0.0 4915.2) (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) ) (logior! (-> obj mask) (process-mask actor-pause)) (set! (-> obj actor-pause) #t) (set! (-> obj notify-parent) #f) (set! (-> obj fact) (new 'process 'fact-info obj (pickup-type money) (the-as float 1.0))) (let ((a0-10 (-> obj entity))) (if (when a0-10 (let ((a0-11 (-> a0-10 extra perm task))) (if a0-11 (= a0-11 (game-task none)) ) ) ) (set! (-> obj entity extra perm task) (game-task complete)) ) ) (initialize-skeleton obj *money-sg* '()) (if (-> obj entity) (nav-mesh-connect obj (-> obj root-override) (the-as nav-control #f)) ) (set-vector! (-> obj draw color-mult) 0.8 0.8 0.8 1.0) (set-vector! (-> obj draw color-emissive) 0.2 0.2 0.2 1.0) obj ) (defmethod init-from-entity! money ((obj money) (arg0 entity-actor)) (initialize obj) (process-drawable-from-entity! obj (the-as entity-actor (-> obj entity))) (initialize-params obj 0 (the-as float 1024.0)) (dummy-47 (-> obj root-override)) (go (method-of-object obj wait)) (none) ) (defbehavior money-init-by-other money ((arg0 vector) (arg1 vector) (arg2 fact-info) (arg3 entity)) (let ((s3-0 (-> arg2 pickup-type)) (f30-0 (-> arg2 pickup-spawn-amount)) ) (set! (-> self entity) arg3) (set! (-> self pickup-type) s3-0) (set! (-> self pickup-amount) f30-0) (initialize self) (set! (-> self fact pickup-type) s3-0) (set! (-> self fact pickup-amount) f30-0) ) (set! (-> self fact options) (-> arg2 options)) (set! (-> self notify-parent) #t) (set! (-> self root-override trans quad) (-> arg0 quad)) (quaternion-identity! (-> self root-override quat)) (vector-identity! (-> self root-override scale)) (set! (-> self root-override transv quad) (-> arg1 quad)) (initialize-params self 4500 (the-as float 1024.0)) (dummy-47 (-> self root-override)) (set! (-> self event-hook) (-> (method-of-object self wait) event)) (go-virtual wait) (none) ) (defbehavior money-init-by-other-no-bob money ((arg0 vector) (arg1 vector) (arg2 fact-info) (arg3 float) (arg4 entity)) (set! (-> self entity) arg4) (set! (-> self pickup-type) (the-as pickup-type arg2)) (set! (-> self pickup-amount) arg3) (initialize self) (set! (-> self fact pickup-type) (the-as pickup-type arg2)) (set! (-> self fact pickup-amount) arg3) (set! (-> self notify-parent) #t) (set! (-> self root-override trans quad) (-> arg0 quad)) (quaternion-identity! (-> self root-override quat)) (vector-identity! (-> self root-override scale)) (set! (-> self root-override transv quad) (-> arg1 quad)) (initialize-params self 4500 (the-as float 0.0)) (logior! (-> self flags) (collectable-flags ignore-blue)) (dummy-47 (-> self root-override)) (set! (-> self event-hook) (-> (method-of-object self wait) event)) (go-virtual wait) (none) ) (define *fuel-cell-tune-pos* (new 'static 'vector :w 1000000000.0)) (deftype fuel-cell (eco-collectable) ((victory-anim spool-anim :offset-assert 404) (state-object symbol :offset-assert 408) ) :heap-base #x130 :method-count-assert 31 :size-assert #x19c :flag-assert #x1f0130019c ) (defun fuel-cell-pick-anim ((arg0 process-drawable)) (let* ((gp-0 (-> arg0 entity extra trans)) (a0-2 (res-lump-value (-> arg0 entity) 'movie-mask uint128 :time (the-as float -1000000000.0))) (a1-1 8) (v1-6 (abs (the int (+ (* 0.00024414062 (-> gp-0 x)) (* 0.00024414062 (-> gp-0 z)))))) (v1-7 (mod v1-6 a1-1)) ) (while (logtest? a0-2 (ash 1 v1-7)) (set! v1-7 (mod (+ v1-7 1) a1-1)) ) (when *target* (cond ((logtest? (-> *target* control root-prim prim-core action) 512) (set! v1-7 16) ) ((logtest? (-> *target* control root-prim prim-core action) #x4000) (set! v1-7 32) ) ) ) (cond ((zero? v1-7) (new 'static 'spool-anim :name "fuel-cell-victory" :index 3 :parts 2 :command-list '()) ) ((= v1-7 1) (new 'static 'spool-anim :name "fuel-cell-victory-2" :index 4 :parts 2 :command-list '()) ) ((= v1-7 2) (new 'static 'spool-anim :name "fuel-cell-victory-3" :index 5 :parts 2 :command-list '()) ) ((= v1-7 3) (new 'static 'spool-anim :name "fuel-cell-victory-4" :index 6 :parts 2 :command-list '()) ) ((= v1-7 4) (new 'static 'spool-anim :name "fuel-cell-victory-5" :index 7 :parts 2 :command-list '()) ) ((= v1-7 5) (new 'static 'spool-anim :name "fuel-cell-victory-6" :index 8 :parts 2 :command-list '()) ) ((= v1-7 6) (new 'static 'spool-anim :name "fuel-cell-victory-7" :index 9 :parts 2 :command-list '()) ) ((= v1-7 7) (new 'static 'spool-anim :name "fuel-cell-victory-8" :index 10 :parts 2 :command-list '()) ) ((= v1-7 16) (new 'static 'spool-anim :name "fuel-cell-racer-victory-1" :index 40 :parts 2 :command-list '()) ) ((= v1-7 32) (new 'static 'spool-anim :name "fuel-cell-flut-victory-1" :index 44 :parts 2 :command-list '()) ) (else (new 'static 'spool-anim :name "fuel-cell-victory-3" :index 5 :parts 2 :command-list '()) ) ) ) ) (defbehavior fuel-cell-animate fuel-cell () (let* ((gp-0 self) (s5-0 (if (and (nonzero? gp-0) (type-type? (-> gp-0 type) fuel-cell)) gp-0 ) ) ) (cond (s5-0 (set! (-> s5-0 victory-anim) (fuel-cell-pick-anim s5-0)) (spool-push *art-control* (-> s5-0 victory-anim name) 0 self (the-as float -99.0)) ) (else (let ((v1-5 (fuel-cell-pick-anim self))) (spool-push *art-control* (-> v1-5 name) 0 self (the-as float -99.0)) ) ) ) ) (when (nonzero? (-> self part)) (cond ((logtest? (-> self draw status) (draw-status drwf01 drwf02)) (kill-and-free-particles (-> self part)) (if (nonzero? (-> self sound)) (kill-and-free-particles (-> self part)) ) ) (else (let* ((gp-1 (-> self root-override)) (v1-20 (if (and (nonzero? gp-1) (type-type? (-> gp-1 type) collide-shape)) gp-1 ) ) (gp-2 (if v1-20 (-> v1-20 root-prim prim-core) (-> self root-override trans) ) ) ) (spawn (-> self part) (the-as vector gp-2)) (when (nonzero? (-> self sound)) (update-trans! (-> self sound) (the-as vector gp-2)) (update! (-> self sound)) ) ) ) ) ) (set-vector! (-> self draw color-mult) 0.5 0.5 0.5 1.0) (set-vector! (-> self draw color-emissive) 0.5 0.5 0.5 1.0) 0 (none) ) (method-set! fuel-cell 29 fuel-cell-animate) (defstate wait (fuel-cell) :virtual #t :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) (local-vars (v0-3 none)) (when (and (or (= arg2 'touch) (= arg2 'attack)) (and (logtest? (-> self flags) (collectable-flags can-collect)) (>= (- (-> *display* base-frame-counter) (-> self birth-time)) (-> self collect-timeout)) (and (not (handle->process (-> *game-info* other-camera-handle))) (not *progress-process*) (!= (-> self next-state name) 'pickup) *target* (zero? (logand (-> *target* state-flags) #x8100)) ) ) ) (push-setting! *setting-control* self 'allow-progress #f 0.0 0) (copy-settings-from-target! *setting-control*) (logclear! (-> self mask) (process-mask actor-pause)) (go-virtual pickup #f (process->handle arg0)) ) (the-as object (cond ((= arg2 'trans) (set! (-> self root-override trans quad) (-> (the-as vector (-> arg3 param 0)) quad)) (set! (-> self base quad) (-> self root-override trans quad)) (dummy-47 (-> self root-override)) ) ((= arg2 'pickup) (when (!= (-> self next-state name) 'pickup) (if (and (> arg1 0) (-> arg3 param 0)) (TODO-RENAME-30 (-> self root-override) (the-as vector (-> arg3 param 0))) ) (logclear! (-> self mask) (process-mask actor-pause)) (go-virtual pickup #f (process->handle *target*)) ) ) ((= arg2 'collide-shape) (if (-> arg3 param 0) (restore-collide-with-as (-> self root-override)) (clear-collide-with-as (-> self root-override)) ) ) ((= arg2 'movie-pos) (set! v0-3 (the-as none (-> arg3 param 0))) (set! (-> self movie-pos-index) (the-as int v0-3)) v0-3 ) ((= arg2 'anim) (cond ((-> arg3 param 0) (set! v0-3 (the-as none (logclear (-> self flags) (collectable-flags anim)))) (set! (-> self flags) (the-as collectable-flags v0-3)) ) (else (set! v0-3 (the-as none (logior (-> self flags) (collectable-flags anim)))) (set! (-> self flags) (the-as collectable-flags v0-3)) ) ) v0-3 ) ) ) ) :code (behavior () 0.5 (let ((f28-0 0.0)) (let ((v1-3 (-> self skel root-channel 0))) (set! (-> v1-3 frame-group) (the-as art-joint-anim (-> self draw art-group data 2))) ) (while #t (let ((f30-0 (vector-vector-distance (-> self base) (target-pos 0)))) (set! f28-0 (if (and (< f30-0 (-> *FACT-bank* suck-suck-dist)) (zero? (logand (-> self flags) (collectable-flags anim)))) (seek f28-0 (the-as float 16384.0) (* 3072.0 (-> *display* seconds-per-frame))) (seek f28-0 (the-as float 0.0) (* 3072.0 (-> *display* seconds-per-frame))) ) ) (set! (-> self root-override trans y) (+ (-> self base y) (* 2867.2 (sin f28-0)))) (let ((f30-1 (lerp-scale (the-as float 0.6) (the-as float 0.5) f30-0 (the-as float 8192.0) (-> *FACT-bank* suck-suck-dist)) ) ) (transform-post) (fuel-cell-animate) (suspend) (let ((a0-11 (-> self skel root-channel 0))) (set! (-> a0-11 param 0) f30-1) (joint-control-channel-group-eval! a0-11 (the-as art-joint-anim #f) num-func-loop!) ) ) ) ) ) (none) ) ) (defstate pickup (fuel-cell) :virtual #t :enter (behavior ((arg0 object) (arg1 handle)) (set! (-> self state-time) (-> *display* base-frame-counter)) (set! (-> self state-object) #t) (let ((t9-1 (-> (the-as (state eco-collectable) (find-parent-method fuel-cell 23)) enter))) (if t9-1 (t9-1) ) ) (none) ) :trans (behavior () (let ((f30-0 (the-as float (cond ((string= (-> self victory-anim name) "fuel-cell-victory") 97.0 ) ((string= (-> self victory-anim name) "fuel-cell-victory-2") 97.0 ) ((string= (-> self victory-anim name) "fuel-cell-victory-3") 97.0 ) ((string= (-> self victory-anim name) "fuel-cell-victory-4") 97.0 ) ((string= (-> self victory-anim name) "fuel-cell-victory-5") 77.0 ) ((string= (-> self victory-anim name) "fuel-cell-victory-6") 97.0 ) ((string= (-> self victory-anim name) "fuel-cell-victory-7") 97.0 ) ((string= (-> self victory-anim name) "fuel-cell-victory-8") 97.0 ) ((string= (-> self victory-anim name) "fuel-cell-racer-victory-1") 88.0 ) ((string= (-> self victory-anim name) "fuel-cell-flut-victory-1") 150.0 ) (else 5000.0 ) ) ) ) ) (when (and (logtest? (-> self skel status) 32) (and (>= (ja-aframe-num 0) f30-0) (-> self state-object))) (set! (-> self state-object) #f) (kill-and-free-particles (-> self part)) (logior! (-> self draw status) (draw-status drwf05)) (if (not (or (logtest? (the-as int (res-lump-value (-> self entity) 'options uint128 :time (the-as float -1000000000.0))) 4096 ) (and *target* (logtest? (-> *target* control root-prim prim-core action) 512)) ) ) (send-event *camera* 'teleport-to-other-start-string) ) ) ) (none) ) :code (behavior ((arg0 object) (arg1 handle)) (local-vars (sv-96 res-tag)) (sound-play-by-name (static-sound-name "pu-powercell") (new-sound-id) 1024 0 0 1 #t) (clear-collide-with-as (-> self root-override)) (logclear! (-> self mask) (process-mask actor-pause)) (logclear! (-> self draw status) (draw-status drwf01)) (process-entity-status! self (entity-perm-status dead) #t) (stop! (-> self sound)) (while (handle->process (-> *game-info* other-camera-handle)) (format #t "WARNING: fuel-cell stall ~D ~A ~A~%" (-> *display* base-frame-counter) (handle->process (-> *game-info* other-camera-handle)) (-> *level* loading-level) ) (spool-push *art-control* (-> self victory-anim name) 0 self (the-as float -99.0)) (suspend) ) (while (let ((a1-8 (new 'stack-no-clear 'event-message-block))) (set! (-> a1-8 from) self) (set! (-> a1-8 num-params) 1) (set! (-> a1-8 message) 'clone-anim) (set! (-> a1-8 param 0) (the-as uint self)) (not (send-event-function *target* a1-8)) ) (spool-push *art-control* (-> self victory-anim name) 0 self (the-as float -99.0)) (format #t "WARNING: fuel-cell stall on not cloning.~%") (suspend) ) (set! sv-96 (new 'static 'res-tag)) (let* ((v1-34 (res-lump-data (-> self entity) 'movie-pos (inline-array vector) :tag-ptr (& sv-96) :time (the-as float -1000000000.0) ) ) (gp-1 (if (and v1-34 (< (-> self movie-pos-index) (the-as int (-> sv-96 elt-count)))) (-> v1-34 (-> self movie-pos-index)) (the-as vector #f) ) ) ) (cond ((and *debug-segment* (< (-> *fuel-cell-tune-pos* w) 1000000000.0)) (TODO-RENAME-30 (-> self root-override) *fuel-cell-tune-pos*) (set-yaw-angle-clear-roll-pitch! (-> self root-override) (-> *fuel-cell-tune-pos* w)) ) ((= (-> self movie-pos-index) -1) ) (gp-1 (TODO-RENAME-30 (-> self root-override) gp-1) (set-yaw-angle-clear-roll-pitch! (-> self root-override) (-> gp-1 w)) ) (else (TODO-RENAME-30 (-> self root-override) (-> *target* control trans)) (set-yaw-angle-clear-roll-pitch! (-> self root-override) (y-angle (-> *target* control))) (dummy-60 (-> self root-override) (the-as float 40960.0) (the-as float 40960.0) #f (the-as uint 1)) ) ) ) (spool-push *art-control* (-> self victory-anim name) 0 self (the-as float -99.0)) (send-event *target* 'get-pickup (-> self fact pickup-type) (-> self fact pickup-amount)) (set! (-> self draw bounds w) 32768.0) (logior! (-> self skel status) 1) (send-event *target* 'blend-shape #t) (push-setting! *setting-control* self 'music-volume 'rel (-> *setting-control* current music-volume-movie) 0) (push-setting! *setting-control* self 'sfx-volume 'rel (-> *setting-control* current sfx-volume-movie) 0) (push-setting! *setting-control* self 'ambient-volume 'rel (-> *setting-control* current ambient-volume-movie) 0 ) (let ((gp-3 (get-process *default-dead-pool* othercam #x4000))) (when gp-3 (let ((t9-26 (method-of-type othercam activate))) (t9-26 (the-as othercam gp-3) self 'othercam (the-as pointer #x70004000)) ) (run-now-in-process gp-3 othercam-init-by-other self 10 #f #t) (-> gp-3 ppointer) ) ) (auto-save-command 'auto-save 0 0 *default-pool*) (ja-play-spooled-anim (-> self victory-anim) (the-as art-joint-anim (-> self draw art-group data 2)) (the-as art-joint-anim #f) (the-as (function process-drawable symbol) false-func) ) (clear-pending-settings-from-process *setting-control* self 'music-volume) (clear-pending-settings-from-process *setting-control* self 'sfx-volume) (clear-pending-settings-from-process *setting-control* self 'ambient-volume) (send-event *target* 'blend-shape #f) (send-event *target* 'end-mode) (send-event *camera* 'no-intro) (send-event *camera* 'clear-entity) (ja-channel-set! 0) (suspend) (suspend) (let ((gp-4 (get-process *default-dead-pool* process #x4000))) (when gp-4 (let ((t9-39 (method-of-type process activate))) (t9-39 gp-4 self 'process (the-as pointer #x70004000)) ) (run-next-time-in-process gp-4 (lambda :behavior collectable ((arg0 game-task)) (while (or (-> *setting-control* current ambient) (-> *setting-control* current movie) (-> *setting-control* current hint) (str-is-playing?) ) (suspend) ) (cond ((= arg0 (game-task training-buzzer)) (level-hint-spawn (game-text-id training-assistant-found-scout-fly-cell) "asstvb45" (the-as entity #f) *entity-pool* (game-task none) ) ) ((= arg0 (game-task training-door)) (level-hint-spawn (game-text-id training-eco-opened-door) "sagevb25" (the-as entity #f) *entity-pool* (game-task none) ) ) ((= arg0 (game-task beach-ecorocks)) (level-hint-spawn (game-text-id beach-collectors-unblocked) "sagevb01" (the-as entity #f) *entity-pool* (game-task none) ) ) ((= arg0 (game-task misty-cannon)) (level-hint-spawn (game-text-id misty-stopped-lurkers-at-silo) "sagevb02" (the-as entity #f) *entity-pool* (game-task none) ) ) ((= arg0 (game-task misty-bike)) (level-hint-spawn (game-text-id misty-stopped-balloon-lurkers) "asstvb03" (the-as entity #f) *entity-pool* (game-task none) ) ) ((= arg0 (game-task firecanyon-end)) (level-hint-spawn (game-text-id fire-canyon-we-made-it) "sksp0095" (the-as entity #f) *entity-pool* (game-task none) ) ) ((= arg0 (game-task rolling-robbers)) (level-hint-spawn (game-text-id rolling-beat-lurkers) "asstvb20" (the-as entity #f) *entity-pool* (game-task none) ) ) ((= arg0 (game-task rolling-plants)) (level-hint-spawn (game-text-id sage-golfclap-i-have-low-expectations) "sagevb03" (the-as entity #f) *entity-pool* (game-task none) ) ) ((= arg0 (game-task swamp-flutflut)) (level-hint-spawn (game-text-id swamp-finished-with-flutflut) "asstvb21" (the-as entity #f) *entity-pool* (game-task none) ) ) ((= arg0 (game-task ogre-boss)) (level-hint-spawn (game-text-id ogre-boss-killed) "asstvb23" (the-as entity #f) *entity-pool* (game-task none) ) ) ((= arg0 (game-task ogre-end)) (level-hint-spawn (game-text-id assistant-finished-mountain-pass-race) "asstvb25" (the-as entity #f) *entity-pool* (game-task none) ) ) ((= arg0 (game-task beach-buzzer)) (level-hint-spawn (game-text-id found-all-scout-flies) "sksp009k" (the-as entity #f) *entity-pool* (game-task none) ) ) ((= arg0 (game-task jungle-buzzer)) (level-hint-spawn (game-text-id found-all-scout-flies) "sksp009k" (the-as entity #f) *entity-pool* (game-task none) ) ) ((= arg0 (game-task misty-buzzer)) (level-hint-spawn (game-text-id found-all-scout-flies) "sksp009k" (the-as entity #f) *entity-pool* (game-task none) ) ) ((= arg0 (game-task firecanyon-buzzer)) (level-hint-spawn (game-text-id found-all-scout-flies) "sksp009k" (the-as entity #f) *entity-pool* (game-task none) ) ) ((= arg0 (game-task rolling-buzzer)) (level-hint-spawn (game-text-id found-all-scout-flies) "sksp009k" (the-as entity #f) *entity-pool* (game-task none) ) ) ((= arg0 (game-task sunken-buzzer)) (level-hint-spawn (game-text-id found-all-scout-flies) "sksp009k" (the-as entity #f) *entity-pool* (game-task none) ) ) ((= arg0 (game-task swamp-buzzer)) (level-hint-spawn (game-text-id found-all-scout-flies) "sksp009k" (the-as entity #f) *entity-pool* (game-task none) ) ) ((= arg0 (game-task ogre-buzzer)) (level-hint-spawn (game-text-id found-all-scout-flies) "sksp009k" (the-as entity #f) *entity-pool* (game-task none) ) ) ((= arg0 (game-task cave-buzzer)) (level-hint-spawn (game-text-id found-all-scout-flies) "sksp009k" (the-as entity #f) *entity-pool* (game-task none) ) ) ((= arg0 (game-task snow-buzzer)) (level-hint-spawn (game-text-id found-all-scout-flies) "sksp009k" (the-as entity #f) *entity-pool* (game-task none) ) ) ((= arg0 (game-task lavatube-buzzer)) (level-hint-spawn (game-text-id found-all-scout-flies) "sksp009k" (the-as entity #f) *entity-pool* (game-task none) ) ) ((= arg0 (game-task citadel-buzzer)) (level-hint-spawn (game-text-id found-all-scout-flies) "sksp009k" (the-as entity #f) *entity-pool* (game-task none) ) ) ((= arg0 (game-task village1-buzzer)) (level-hint-spawn (game-text-id found-all-scout-flies) "sksp009k" (the-as entity #f) *entity-pool* (game-task none) ) ) ((= arg0 (game-task village2-buzzer)) (level-hint-spawn (game-text-id found-all-scout-flies) "sksp009k" (the-as entity #f) *entity-pool* (game-task none) ) ) ((= arg0 (game-task village3-buzzer)) (level-hint-spawn (game-text-id found-all-scout-flies) "sksp009k" (the-as entity #f) *entity-pool* (game-task none) ) ) ) (none) ) (the int (-> self fact pickup-amount)) ) (-> gp-4 ppointer) ) ) (case (the int (-> self fact pickup-amount)) (((game-task citadel-sage-blue)) (send-event (process-by-name "blue-sagecage-1" *active-pool*) 'play-anim) ) (((game-task citadel-sage-red)) (send-event (process-by-name "red-sagecage-1" *active-pool*) 'play-anim) ) (((game-task citadel-sage-yellow)) (send-event (process-by-name "yellow-sagecage-1" *active-pool*) 'play-anim) ) (((game-task citadel-sage-green)) (send-event (process-by-name "green-sagecage-1" *active-pool*) 'play-anim) ) (((game-task jungle-eggtop) (game-task snow-eggtop) (game-task snow-ball) (game-task sunken-slide)) ) (else (send-event (ppointer->process (-> *hud-parts* fuel-cell)) 'show) ) ) (convert-to-hud-object self (the-as hud (ppointer->process (-> *hud-parts* fuel-cell)))) (none) ) :post (behavior () (transform-post) (if (-> self state-object) (spawn (-> self part) (the-as vector (-> self root-override root-prim prim-core))) ) (none) ) ) (defmethod initialize fuel-cell ((obj fuel-cell)) (stack-size-set! (-> obj main-thread) 512) (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-sphere s5-0 (the-as uint 0)))) (set! (-> s4-0 prim-core collide-as) (the-as uint 64)) (set! (-> s4-0 collide-with) (the-as uint 16)) (set! (-> s4-0 transform-index) 3) (set-vector! (-> s4-0 local-sphere) 0.0 0.0 0.0 4915.2) (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) ) (logior! (-> obj mask) (process-mask actor-pause)) (set! (-> obj actor-pause) #t) (set! (-> obj notify-parent) #f) (set! (-> obj fact) (new 'process 'fact-info obj (pickup-type fuel-cell) (the-as float 0.0))) (initialize-skeleton obj *fuel-cell-sg* '()) (set! (-> obj base quad) (-> obj root-override trans quad)) (set! (-> obj old-base quad) (-> obj root-override trans quad)) (set! (-> obj part) (create-launch-control (-> *part-group-id-table* 63) obj)) (set! (-> obj sound) (new 'process 'ambient-sound (new 'static 'sound-spec :mask #x80 :num 1.0 :group #x1 :sound-name (static-sound-name "powercell-idle") :volume #x400 :fo-max 40 ) (-> obj root-override trans) ) ) (set! (-> obj victory-anim) (fuel-cell-pick-anim obj)) obj ) (defmethod init-from-entity! fuel-cell ((obj fuel-cell) (arg0 entity-actor)) (initialize obj) (process-drawable-from-entity! obj (the-as entity-actor (-> obj entity))) (initialize-params obj 0 (the-as float 1024.0)) (logclear! (-> obj fact options) (fact-options can-collect)) (dummy-47 (-> obj root-override)) (go (method-of-object obj wait)) (none) ) (defbehavior fuel-cell-init-by-other fuel-cell ((arg0 vector) (arg1 vector) (arg2 fact-info) (arg3 entity)) (let ((s3-0 (-> arg2 pickup-type)) (f30-0 (-> arg2 pickup-spawn-amount)) ) (set! (-> self entity) arg3) (set! (-> self pickup-type) s3-0) (set! (-> self pickup-amount) f30-0) (initialize self) (set! (-> self fact pickup-type) s3-0) (set! (-> self fact pickup-amount) f30-0) ) (set! (-> self fact options) (-> arg2 options)) (set! (-> self notify-parent) #t) (set! (-> self root-override trans quad) (-> arg0 quad)) (quaternion-identity! (-> self root-override quat)) (vector-identity! (-> self root-override scale)) (set! (-> self root-override transv quad) (-> arg1 quad)) (initialize-params self 0 (the-as float 1024.0)) (logclear! (-> self fact options) (fact-options can-collect)) (dummy-47 (-> self root-override)) (let ((gp-1 (res-lump-struct (-> self entity) 'movie-pos structure :time (the-as float -1000000000.0)))) (cond ((and *debug-segment* (< (-> *fuel-cell-tune-pos* w) 1000000000.0)) (set! (-> self jump-pos quad) (-> *fuel-cell-tune-pos* quad)) (set! (-> self jump-pos y) (+ 4096.0 (-> self jump-pos y))) (go-virtual jump) ) ((and gp-1 (zero? (logand (the-as int (res-lump-value (-> self entity) 'options uint128 :time (the-as float -1000000000.0))) 128 ) ) (zero? (logand (-> self fact options) (fact-options fop7))) ) (set! (-> self jump-pos quad) (-> (the-as vector gp-1) quad)) (set! (-> self jump-pos y) (+ 4096.0 (-> self jump-pos y))) (go-virtual jump) ) ) ) (set! (-> self event-hook) (-> (method-of-object self wait) event)) (go-virtual wait) (none) ) (defstate fuel-cell-clone-anim (fuel-cell) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) (case arg2 (('pickup) (when (!= (-> self next-state name) 'pickup) (if (and (> arg1 0) (-> arg3 param 0)) (TODO-RENAME-30 (-> self root-override) (the-as vector (-> arg3 param 0))) ) (logclear! (-> self mask) (process-mask actor-pause)) (go-virtual pickup #f (the-as handle #f)) ) ) (('trans) (set! (-> self root-override trans quad) (-> (the-as vector (-> arg3 param 0)) quad)) (set! (-> self base quad) (-> self root-override trans quad)) (dummy-47 (-> self root-override)) ) (('stop-cloning 'notify) (set! (-> self root-override trans quad) (-> self draw origin quad)) (set! (-> self base quad) (-> self root-override trans quad)) (ja-channel-set! 1) (let ((v1-20 (-> self skel root-channel 0))) (set! (-> v1-20 frame-group) (the-as art-joint-anim (-> self draw art-group data 2))) ) (logclear! (-> self draw status) (draw-status drwf01)) (vector-reset! (-> self draw origin)) (go-virtual wait) ) ) ) :exit (behavior () (if (-> self actor-pause) (logior! (-> self mask) (process-mask actor-pause)) ) (set! (-> self skel status) (logand -33 (-> self skel status))) (none) ) :code (behavior ((arg0 handle)) (logclear! (-> self mask) (process-mask actor-pause)) (clone-anim arg0 3 #t "") (format #t "ERROR: clone-anim returned in fuel-cell~%") (deactivate self) (none) ) :post (behavior () (dummy-47 (-> self root-override)) (animate self) (none)) ) (defbehavior fuel-cell-init-as-clone fuel-cell ((arg0 handle) (arg1 int)) (initialize self) (set! (-> self fact pickup-type) (pickup-type fuel-cell)) (set! (-> self fact pickup-amount) (the float arg1)) (initialize-params self 0 (the-as float 1024.0)) (logclear! (-> self mask) (process-mask actor-pause)) (set! (-> self actor-pause) #f) (sound-play-by-name (static-sound-name "cell-prize") (new-sound-id) 1024 0 0 1 #t) (go fuel-cell-clone-anim arg0) (none) ) (defskelgroup *buzzer-sg* buzzer 0 2 ((1 (meters 999999))) :bounds (static-spherem 0 1 0 1.6) :longest-edge (meters 0) :texture-level 2 ) (deftype buzzer (eco-collectable) ((victory-anim spool-anim :offset-assert 404) ) :heap-base #x130 :method-count-assert 31 :size-assert #x198 :flag-assert #x1f01300198 ) (defmethod animate buzzer ((obj buzzer)) (quaternion-rotate-y! (-> obj root-override quat) (-> obj root-override quat) (* 40049.777 (-> *display* seconds-per-frame)) ) (let ((a0-2 (-> obj 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!) ) (let ((f0-3 (y-angle (-> obj root-override)))) (set! (-> *part-id-table* 239 init-specs 4 initial-valuef) (+ 16384.0 f0-3)) (set! (-> *part-id-table* 240 init-specs 4 initial-valuef) (+ 16384.0 f0-3)) ) (spawn (-> obj part) (vector<-cspace! (new 'stack-no-clear 'vector) (-> obj node-list data 15))) (if (nonzero? (-> obj sound)) (update! (-> obj sound)) ) (if (and *target* (>= (-> *target* fact-info-target buzzer) 6.0)) (spool-push *art-control* (-> obj victory-anim name) 0 obj (the-as float -99.0)) ) 0 (none) ) (defstate wait (buzzer) :virtual #t :code (behavior () (case (get-reminder (get-task-control (the-as game-task (logand (the int (-> self fact pickup-amount)) #xffff))) 0) ((127) (go-virtual pickup #t (the-as handle #f)) ) ) (while #t (transform-post) (animate self) (suspend) ) (none) ) ) (defstate pickup (buzzer) :virtual #t :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) (let ((v1-0 arg2)) (the-as object (if (= v1-0 'notify) (process-entity-status! self (entity-perm-status dead) #t) ) ) ) ) :enter (behavior ((arg0 object) (arg1 handle)) (set! (-> self pickup-handle) arg1) (logclear! (-> self mask) (process-mask actor-pause)) (none) ) :code (behavior ((arg0 object) (arg1 handle)) (logclear! (-> self mask) (process-mask actor-pause)) (process-entity-status! self (entity-perm-status complete) #t) (sound-play-by-name (static-sound-name "buzzer-pickup") (new-sound-id) 1024 0 0 1 #t) (case (-> (level-get-target-inside *level*) name) (('training) (level-hint-spawn (game-text-id training-assistant-found-scout-fly) "asstvb44" (the-as entity #f) *entity-pool* (game-task none) ) ) (('firecanyon) (level-hint-spawn (game-text-id collectables-theres-scout-flys-here-too) "sksp0096" (the-as entity #f) *entity-pool* (game-task none) ) ) (else (level-hint-spawn (game-text-id collectables-scout-flies-red-boxes) "sksp009j" (the-as entity #f) *entity-pool* (game-task none) ) ) ) (ja-channel-set! 0) (clear-collide-with-as (-> self root-override)) (if (nonzero? (-> self sound)) (stop! (-> self sound)) ) (when (not arg0) (let* ((s5-1 (get-process *default-dead-pool* manipy #x4000)) (v1-18 (when s5-1 (let ((t9-11 (method-of-type manipy activate))) (t9-11 (the-as manipy s5-1) *entity-pool* 'manipy (the-as pointer #x70004000)) ) (run-now-in-process s5-1 manipy-init (-> self root-override trans) #f *buzzer-sg* #f) (-> s5-1 ppointer) ) ) ) (send-event (ppointer->process v1-18) 'become-hud-object (ppointer->process (-> *hud-parts* buzzers))) ) ) (let* ((s5-2 (logand (the int (-> self fact pickup-amount)) #xffff)) (s4-1 (get-task-control (the-as game-task s5-2))) ) (if (nonzero? s5-2) (close-specific-task! (the-as game-task s5-2) (task-status need-hint)) ) (when (and (= (get-reminder s4-1 0) 127) (and (-> self entity) (not (task-complete? *game-info* (the-as game-task s5-2)))) ) (if (and *target* (logtest? (-> *target* control root-prim prim-core action) #x7200) (not arg0)) (logior! (-> self fact options) (fact-options fop6 fop7)) ) (let ((v1-47 (birth-pickup-at-point (vector+! (new 'stack-no-clear 'vector) (-> self root-override trans) (new 'static 'vector :y 4096.0 :w 1.0)) (pickup-type fuel-cell) (the float s5-2) #f self (-> self fact) ) ) ) (when v1-47 (send-event (ppointer->process v1-47) 'movie-pos (-> self movie-pos-index)) (ja-channel-set! 0) (clear-collide-with-as (-> self root-override)) (ja-post) (while (-> self child) (suspend) ) ) ) ) ) (when (-> self notify-parent) (let ((gp-1 (new 'stack-no-clear 'event-message-block))) (set! (-> gp-1 from) self) (set! (-> gp-1 num-params) 1) (set! (-> gp-1 message) 'notify) (set! (-> gp-1 param 0) (the-as uint 'pickup)) (let ((s5-3 send-event-function) (s4-2 (ppointer->process (-> self parent))) ) (s5-3 (if (and (nonzero? s4-2) (type-type? (-> s4-2 type) process)) s4-2 ) gp-1 ) ) ) ) (none) ) ) (defmethod initialize buzzer ((obj buzzer)) (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-sphere s5-0 (the-as uint 0)))) (set! (-> s4-0 prim-core collide-as) (the-as uint #x8040)) (set! (-> s4-0 collide-with) (the-as uint 16)) (set-vector! (-> s4-0 local-sphere) 0.0 2457.6 0.0 4915.2) (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) ) (logior! (-> obj mask) (process-mask actor-pause)) (set! (-> obj actor-pause) #t) (set! (-> obj notify-parent) #f) (set! (-> obj fact) (new 'process 'fact-info obj (pickup-type buzzer) (the-as float 0.0))) (initialize-skeleton obj *buzzer-sg* '()) (set! (-> obj part) (create-launch-control (-> *part-group-id-table* 65) obj)) (set! (-> obj sound) (new 'process 'ambient-sound (new 'static 'sound-spec :mask #x80 :num 1.0 :group #x1 :sound-name (static-sound-name "buzzer") :volume #x400 :fo-max 40 ) (-> obj root-override trans) ) ) (set! (-> obj victory-anim) (fuel-cell-pick-anim obj)) obj ) (defmethod init-from-entity! buzzer ((obj buzzer) (arg0 entity-actor)) (initialize obj) (process-drawable-from-entity! obj (the-as entity-actor (-> obj entity))) (initialize-params obj 0 (the-as float 1024.0)) (set! (-> obj collect-timeout) 600) (dummy-47 (-> obj root-override)) (update-trans! (-> obj sound) (-> obj root-override trans)) (if (and (-> obj entity) (logtest? (-> obj entity extra perm status) (entity-perm-status complete))) (go (method-of-object obj wait)) (go (method-of-object obj pickup) #t (the-as handle #f)) ) (none) ) (defbehavior buzzer-init-by-other buzzer ((arg0 vector) (arg1 vector) (arg2 fact-info) (arg3 entity)) (let ((s3-0 (-> arg2 pickup-type)) (f30-0 (-> arg2 pickup-spawn-amount)) ) (set! (-> self entity) arg3) (set! (-> self pickup-type) s3-0) (set! (-> self pickup-amount) f30-0) (initialize self) (set! (-> self fact pickup-type) s3-0) (set! (-> self fact pickup-amount) f30-0) ) (set! (-> self fact options) (-> arg2 options)) (set! (-> self notify-parent) #t) (set! (-> self root-override trans quad) (-> arg0 quad)) (quaternion-identity! (-> self root-override quat)) (vector-identity! (-> self root-override scale)) (set! (-> self root-override transv quad) (-> arg1 quad)) (initialize-params self 0 (the-as float 1024.0)) (dummy-47 (-> self root-override)) (update-trans! (-> self sound) (-> self root-override trans)) (set! (-> self event-hook) (-> (method-of-object self wait) event)) (go-virtual wait) (none) ) (defmethod init-from-entity! eco ((obj eco) (arg0 entity-actor)) (let ((v1-2 (res-lump-value (-> obj entity) 'eco-info pickup-type :time (the-as float -1000000000.0)))) (set! (-> obj type) (cond ((= v1-2 (pickup-type eco-blue)) eco-blue ) ((= v1-2 (pickup-type eco-red)) eco-red ) ((= v1-2 (pickup-type eco-yellow)) eco-yellow ) ((= v1-2 (pickup-type eco-green)) health ) ((= v1-2 (pickup-type money)) money ) ((= v1-2 (pickup-type fuel-cell)) fuel-cell ) ((= v1-2 (pickup-type buzzer)) buzzer ) (else eco-pill ) ) ) ) (init-from-entity! obj arg0) (none) ) ;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 190] ;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 221] ;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 252] ;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 284] ;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 320] ;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 356] ;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 363] ;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 122] (defbehavior birth-pickup-at-point process ((arg0 vector) (arg1 pickup-type) (arg2 float) (arg3 symbol) (arg4 process-drawable) (arg5 fact-info)) (local-vars (v1-2 basic) (v1-28 symbol) (v1-34 symbol) (v1-40 symbol) (v1-46 symbol) (v1-52 symbol) (v1-58 symbol) (v1-64 symbol) (v1-71 symbol) (sv-32 fact-info) (sv-48 int) (sv-64 process) (sv-80 process) (sv-96 process) (sv-112 process) (sv-128 process) (sv-144 process) (sv-160 process) (sv-176 process) (sv-192 (pointer process)) ) (set! sv-32 arg5) (let ((s1-0 (new-stack-vector0)) (t9-0 (method-of-type res-lump get-property-value-float)) ) (let ((v1-1 sv-32)) (b! (not v1-1) cfg-3 :likely-delay (set! v1-2 sv-32)) ) (set! v1-2 (nonzero? (-> sv-32 process))) (label cfg-3) (let ((f30-0 (t9-0 (if v1-2 (-> sv-32 process entity) ) 'pickup-radius 'interp (the-as float -1000000000.0) (the-as float (cond ((= arg1 (pickup-type buzzer)) 0.0 ) ((= arg2 1.0) 409.6 ) (else 8192.0 ) ) ) (the-as (pointer res-tag) #f) *res-static-buf* ) ) ) (set! sv-192 (the-as (pointer process) #f)) (set! sv-48 (the int arg2)) (let ((s0-0 (new 'static 'fact-info))) (set! (-> s0-0 options) (fact-options)) (if sv-32 (mem-copy! (&-> s0-0 type) (&-> sv-32 type) 40) ) (set! (-> s0-0 pickup-type) arg1) (set! (-> s0-0 pickup-spawn-amount) 1.0) (while (> sv-48 0) (set! sv-48 (+ sv-48 -1)) (when arg3 (set-vector! s1-0 0.0 57001.605 f30-0 1.0) (vector-rotate-around-y! s1-0 s1-0 (/ (* 65536.0 (the float sv-48)) arg2)) ) (let ((v1-25 arg1)) (cond ((= v1-25 (pickup-type eco-yellow)) (set! sv-64 (get-process *pickup-dead-pool* eco-yellow #x4000)) (set! v1-28 (when sv-64 (set! sv-192 (the-as (pointer process) v1-28)) (let ((t9-4 (method-of-type eco-yellow activate))) (t9-4 (the-as eco-yellow sv-64) arg4 'eco-yellow (the-as pointer #x70004000)) ) (run-now-in-process sv-64 initialize-eco-by-other arg0 s1-0 s0-0) (set! sv-192 (-> sv-64 ppointer)) v1-28 ) ) sv-192 ) ((= v1-25 (pickup-type eco-red)) (set! sv-80 (get-process *pickup-dead-pool* eco-red #x4000)) (set! v1-34 (when sv-80 (set! sv-192 (the-as (pointer process) v1-34)) (let ((t9-7 (method-of-type eco-red activate))) (t9-7 (the-as eco-red sv-80) arg4 'eco-red (the-as pointer #x70004000)) ) (run-now-in-process sv-80 initialize-eco-by-other arg0 s1-0 s0-0) (set! sv-192 (-> sv-80 ppointer)) v1-34 ) ) (level-hint-spawn (game-text-id sidekick-hint-misty-get-red-eco) "sksp0071" (the-as entity #f) *entity-pool* (game-task none) ) ) ((= v1-25 (pickup-type eco-blue)) (set! sv-96 (get-process *pickup-dead-pool* eco-blue #x4000)) (set! v1-40 (when sv-96 (set! sv-192 (the-as (pointer process) v1-40)) (let ((t9-11 (method-of-type eco-blue activate))) (t9-11 (the-as eco-blue sv-96) arg4 'eco-blue (the-as pointer #x70004000)) ) (run-now-in-process sv-96 initialize-eco-by-other arg0 s1-0 s0-0) (set! sv-192 (-> sv-96 ppointer)) v1-40 ) ) sv-192 ) ((= v1-25 (pickup-type eco-green)) (set! sv-112 (get-process *pickup-dead-pool* health #x4000)) (set! v1-46 (when sv-112 (set! sv-192 (the-as (pointer process) v1-46)) (let ((t9-14 (method-of-type health activate))) (t9-14 (the-as health sv-112) arg4 'health (the-as pointer #x70004000)) ) (run-now-in-process sv-112 initialize-eco-by-other arg0 s1-0 s0-0) (set! sv-192 (-> sv-112 ppointer)) v1-46 ) ) sv-192 ) ((= v1-25 (pickup-type eco-pill)) (set! sv-128 (get-process *pickup-dead-pool* eco-pill #x4000)) (set! v1-52 (when sv-128 (set! sv-192 (the-as (pointer process) v1-52)) (let ((t9-17 (method-of-type eco-pill activate))) (t9-17 (the-as eco-pill sv-128) arg4 'eco-pill (the-as pointer #x70004000)) ) (run-now-in-process sv-128 initialize-eco-by-other arg0 s1-0 s0-0) (set! sv-192 (-> sv-128 ppointer)) v1-52 ) ) sv-192 ) ((= v1-25 (pickup-type money)) (set! sv-144 (get-process *pickup-dead-pool* money #x4000)) (set! v1-58 (when sv-144 (set! sv-192 (the-as (pointer process) v1-58)) (let ((t9-20 (method-of-type money activate))) (t9-20 (the-as money sv-144) arg4 'money (the-as pointer #x70004000)) ) (run-now-in-process sv-144 money-init-by-other arg0 s1-0 s0-0 (-> self entity)) (set! sv-192 (-> sv-144 ppointer)) v1-58 ) ) sv-192 ) ((= v1-25 (pickup-type fuel-cell)) (set! (-> s0-0 pickup-spawn-amount) arg2) (set! sv-160 (get-process *pickup-dead-pool* fuel-cell #x4000)) (set! v1-64 (when sv-160 (set! sv-192 (the-as (pointer process) v1-64)) (let ((t9-23 (method-of-type fuel-cell activate))) (t9-23 (the-as fuel-cell sv-160) arg4 'fuel-cell (the-as pointer #x70004000)) ) (run-now-in-process sv-160 fuel-cell-init-by-other arg0 s1-0 s0-0 (-> self entity)) (set! sv-192 (-> sv-160 ppointer)) v1-64 ) ) (set! sv-48 0) sv-48 ) ((= v1-25 (pickup-type buzzer)) (set! (-> s0-0 pickup-spawn-amount) arg2) (set! sv-176 (get-process *pickup-dead-pool* buzzer #x4000)) (set! v1-71 (when sv-176 (set! sv-192 (the-as (pointer process) v1-71)) (let ((t9-26 (method-of-type buzzer activate))) (t9-26 (the-as buzzer sv-176) arg4 'buzzer (the-as pointer #x70004000)) ) (run-now-in-process sv-176 buzzer-init-by-other arg0 s1-0 s0-0 (-> self entity)) (set! sv-192 (-> sv-176 ppointer)) v1-71 ) ) (set! sv-48 0) sv-48 ) (else (format 0 "ERROR: unknown type of eco ~d~%" arg1) #f ) ) ) ) ) ) ) sv-192 ) (defmethod drop-pickup fact-info ((obj fact-info) (arg0 symbol) (arg1 process-tree) (arg2 fact-info) (arg3 int)) (let ((s3-0 (-> obj pickup-type)) (f30-0 (-> obj pickup-amount)) ) (when (= s3-0 (pickup-type eco-pill-random)) f30-0 (let ((s1-0 (get-death-count *game-info* #f))) (set! s3-0 (pickup-type eco-pill)) (set! f30-0 (cond ((and (= s1-0 1) *target* (and (>= 1.0 (-> *target* fact-info-target health)) (rand-vu-percent? (the-as float 0.1))) ) (set! s3-0 (pickup-type eco-green)) 1.0 ) ((and (< 1 s1-0) *target* (and (>= 2.0 (-> *target* fact-info-target health)) (rand-vu-percent? (the-as float 0.05))) ) (set! s3-0 (pickup-type eco-green)) 1.0 ) ((< 20 *eco-pill-count*) (return (the-as (pointer process) #f)) f30-0 ) ((< 10 *eco-pill-count*) 1.0 ) ((type-type? (-> obj type) fact-info-enemy) (+ (rand-vu-float-range (the-as float 3.0) (+ 5.0 f30-0)) (the float arg3)) ) (else (+ (rand-vu-float-range (the-as float 2.0) (+ 3.0 f30-0)) (the float arg3)) ) ) ) ) ) (let ((s2-1 (new 'stack-no-clear 'vector))) (set! (-> s2-1 quad) (-> obj process root trans quad)) (set! (-> s2-1 y) (+ 12288.0 (-> s2-1 y))) (let ((s1-1 (new 'stack-no-clear 'collide-tri-result))) (if (>= (fill-and-probe-using-y-probe *collide-cache* s2-1 (the-as float 81920.0) (the-as uint 1) (the-as process #f) s1-1 (the-as uint 1) ) 0.0 ) (set! (-> s2-1 quad) (-> s1-1 intersect quad)) (set! (-> s2-1 quad) (-> obj process root trans quad)) ) ) (if (= (the-as int s3-0) 6) (set! (-> s2-1 y) (+ 6144.0 (-> s2-1 y))) ) (birth-pickup-at-point s2-1 (the-as pickup-type s3-0) f30-0 arg0 (the-as process-drawable arg1) obj) ) ) ) (deftype ecovalve (process-drawable) ((root-override collide-shape-moving :offset 112) (offset vector :inline :offset-assert 176) (offset-target vector :inline :offset-assert 192) (block-func (function vent symbol) :offset-assert 208) ) :heap-base #x70 :method-count-assert 20 :size-assert #xd4 :flag-assert #x14007000d4 ) (defskelgroup *ecovalve-sg* ecovalve 0 2 ((1 (meters 999999))) :bounds (static-spherem 0 1 0 1.6) :longest-edge (meters 0) :texture-level 2 ) (defstate ecovalve-idle (ecovalve) :code (behavior () (transform-post) (suspend) (transform-post) (while #t (if (not ((-> self block-func) (the-as vent (ppointer->process (-> self parent))))) (set-vector! (-> self offset-target) 0.0 0.0 0.0 1.0) ) (when (!= (-> self offset-target y) (-> self offset y)) (vector-seek! (-> self offset) (-> self offset-target) (* 4096.0 (-> *display* seconds-per-frame))) (TODO-RENAME-30 (-> self root-override) (vector+! (new 'stack-no-clear 'vector) (-> (the-as process-drawable (-> self parent 0)) root trans) (-> self offset) ) ) (transform-post) ) (suspend) ) (none) ) ) (defbehavior ecovalve-init-by-other ecovalve ((arg0 (function vent symbol))) (stack-size-set! (-> self main-thread) 128) (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) 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-mesh s5-0 (the-as uint 0) (the-as uint 0)))) (set! (-> s4-0 prim-core collide-as) (the-as uint 256)) (set! (-> s4-0 collide-with) (the-as uint 16)) (set! (-> s4-0 prim-core action) (the-as uint 1)) (set! (-> s4-0 prim-core offense) 1) (set! (-> s4-0 transform-index) 3) (set-vector! (-> s4-0 local-sphere) 0.0 3686.4 0.0 6144.0) (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! (-> self root-override) s5-0) ) (if (and *target* (logtest? (-> *target* control root-prim prim-core action) 512)) (clear-collide-with-as (-> self root-override)) ) (set! (-> self block-func) arg0) (set! (-> self root-override trans quad) (-> (the-as process-drawable (-> self parent 0)) root trans quad)) (set-vector! (-> self offset-target) 0.0 -2252.8 0.0 1.0) (if (not ((-> self block-func) (the-as vent (ppointer->process (-> self parent))))) (set-vector! (-> self offset-target) 0.0 0.0 0.0 1.0) ) (set! (-> self offset quad) (-> self offset-target quad)) (initialize-skeleton self *ecovalve-sg* '()) (TODO-RENAME-30 (-> self root-override) (vector+! (new 'stack-no-clear 'vector) (-> (the-as process-drawable (-> self parent 0)) root trans) (-> self offset) ) ) (go ecovalve-idle) (none) ) (deftype vent (process-drawable) ((root-override collide-shape :offset 112) (show-particles symbol :offset-assert 176) (collect-effect sparticle-launch-group :offset-assert 180) (collect-effect2 sparticle-launch-group :offset-assert 184) (collect-effect-time uint64 :offset-assert 192) (blocker entity-actor :offset-assert 200) (block-func (function vent symbol) :offset-assert 204) (pickup-handle handle :offset-assert 208) ) :heap-base #x70 :method-count-assert 21 :size-assert #xd8 :flag-assert #x15007000d8 (:methods (initialize (_type_ entity-actor pickup-type) none 20) ) (:states vent-blocked (vent-pickup handle) vent-wait-for-touch ) ) (defmethod initialize vent ((obj vent) (arg0 entity-actor) (arg1 pickup-type)) (stack-size-set! (-> obj main-thread) 128) (logior! (-> obj mask) (process-mask actor-pause)) (let ((s3-0 (new 'process 'collide-shape obj (collide-list-enum hit-by-player)))) (let ((s2-0 (new 'process 'collide-shape-prim-sphere s3-0 (the-as uint 0)))) (set! (-> s2-0 prim-core collide-as) (the-as uint 64)) (set! (-> s2-0 collide-with) (the-as uint 16)) (set-vector! (-> s2-0 local-sphere) 0.0 4915.2 0.0 6553.6) (set-root-prim! s3-0 s2-0) ) (set! (-> s3-0 nav-radius) (* 0.75 (-> s3-0 root-prim local-sphere w))) (backup-collide-with-as s3-0) (set! (-> obj root-override) s3-0) ) (set! (-> obj root-override trans quad) (-> arg0 extra trans quad)) (dummy-47 (-> obj root-override)) (set! (-> obj root-override pause-adjust-distance) 409600.0) (set! (-> obj fact) (new 'process 'fact-info obj arg1 (-> *FACT-bank* eco-full-inc))) (set! (-> obj block-func) (the-as (function vent symbol) true-func)) (case (-> obj fact pickup-type) (((pickup-type eco-blue)) (set! (-> obj part) (create-launch-control (-> *part-group-id-table* 44) obj)) (set! (-> obj collect-effect) (-> *part-group-id-table* 67)) (set! (-> obj collect-effect2) (-> *part-group-id-table* 43)) (set! (-> obj sound) (new 'process 'ambient-sound 'eco-bg-blue (-> obj root-override trans))) ) (((pickup-type eco-red)) (set! (-> obj part) (create-launch-control (-> *part-group-id-table* 50) obj)) (set! (-> obj collect-effect) (-> *part-group-id-table* 69)) (set! (-> obj collect-effect2) (-> *part-group-id-table* 49)) (set! (-> obj sound) (new 'process 'ambient-sound 'eco-bg-red (-> obj root-override trans))) ) (((pickup-type eco-green)) (set! (-> obj part) (create-launch-control (-> *part-group-id-table* 62) obj)) (set! (-> obj collect-effect) (-> *part-group-id-table* 66)) (set! (-> obj collect-effect2) (-> *part-group-id-table* 61)) (set! (-> obj sound) (new 'process 'ambient-sound 'eco-bg-green (-> obj root-override trans))) ) (((pickup-type eco-yellow)) (set! (-> obj part) (create-launch-control (-> *part-group-id-table* 52) obj)) (set! (-> obj collect-effect) (-> *part-group-id-table* 68)) (set! (-> obj collect-effect2) (-> *part-group-id-table* 57)) (set! (-> obj sound) (new 'process 'ambient-sound 'eco-bg-yellow (-> obj root-override trans))) ) ) (set! (-> obj blocker) (entity-actor-lookup (-> obj entity) 'alt-actor 0)) (when (-> obj blocker) (logior! (-> obj fact options) (fact-options vent-blocked)) (set! (-> obj block-func) (lambda ((arg0 vent)) (zero? (logand (-> arg0 blocker extra perm status) (entity-perm-status complete)))) ) ) (set! (-> obj show-particles) #t) (when (logtest? (-> obj fact options) (fact-options vent-blocked)) (when (logtest? (-> obj fact options) (fact-options vent-valve)) (case (-> obj fact pickup-type) (((pickup-type eco-blue)) (set! (-> obj block-func) (the-as (function vent symbol) (lambda () (not (task-complete? *game-info* (game-task jungle-eggtop))))) ) ) (((pickup-type eco-red)) (set! (-> obj block-func) (the-as (function vent symbol) (lambda () (not (task-complete? *game-info* (game-task red-eggtop))))) ) ) (((pickup-type eco-yellow)) (set! (-> obj block-func) (the-as (function vent symbol) (lambda () (not (task-complete? *game-info* (game-task snow-eggtop))))) ) ) ) (let ((s5-1 (get-process *pickup-dead-pool* ecovalve #x4000))) (when s5-1 (let ((t9-17 (method-of-type ecovalve activate))) (t9-17 (the-as ecovalve s5-1) obj 'ecovalve (the-as pointer #x70004000)) ) (run-now-in-process s5-1 ecovalve-init-by-other (-> obj block-func)) (-> s5-1 ppointer) ) ) ) (if ((-> obj block-func) obj) (go vent-blocked) ) ) (go vent-wait-for-touch) (none) ) (defbehavior vent-standard-event-handler vent ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) (case arg2 (('show-particles) (let ((v0-0 (the-as object (-> arg3 param 0)))) (set! (-> self show-particles) (the-as symbol v0-0)) v0-0 ) ) (('hide) (set! (-> self block-func) (the-as (function vent symbol) true-func)) (go vent-blocked) ) ) ) (defstate vent-wait-for-touch (vent) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) (if (and (or (= arg2 'touch) (= arg2 'attack)) (let ((a1-1 (new 'stack-no-clear 'event-message-block))) (set! (-> a1-1 from) self) (set! (-> a1-1 num-params) 2) (set! (-> a1-1 message) 'get-pickup) (set! (-> a1-1 param 0) (the-as uint (-> self fact pickup-type))) (set! (-> a1-1 param 1) (the-as uint (-> self fact pickup-amount))) (and (= (send-event-function arg0 a1-1) #t) (or (logtest? (-> self fact options) (fact-options powerup)) (send-event arg0 'powerup)) ) ) ) (go vent-pickup (process->handle arg0)) ) (vent-standard-event-handler arg0 arg1 arg2 arg3) ) :code (behavior () (while #t (let ((a0-0 (-> self part)) (a1-0 (-> self root-override trans)) (gp-0 (-> self sound)) ) (if (and (nonzero? a0-0) (-> self show-particles)) (spawn a0-0 a1-0) ) (if (nonzero? gp-0) (update! gp-0) ) ) (suspend) ) (none) ) ) (defstate vent-blocked (vent) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) (case arg2 (('show) (go vent-wait-for-touch) ) ) ) :code (behavior () (while #t (if (not ((-> self block-func) self)) (go vent-wait-for-touch) ) (suspend) ) (none) ) ) (defstate vent-pickup (vent) :event vent-standard-event-handler :code (behavior ((arg0 handle)) (when (-> self show-particles) (when (nonzero? (-> self collect-effect)) (let* ((s5-0 (handle->process arg0)) (gp-0 (if (and (nonzero? s5-0) (type-type? (-> s5-0 type) process-drawable)) s5-0 ) ) ) (when gp-0 (let* ((s4-0 (-> (the-as process-drawable gp-0) root)) (s5-1 (if (and (nonzero? s4-0) (type-type? (-> s4-0 type) collide-shape)) s4-0 ) ) ) (when s5-1 (let ((s4-1 (get-process *default-dead-pool* part-tracker #x4000))) (when s4-1 (let ((t9-3 (method-of-type part-tracker activate))) (t9-3 (the-as part-tracker s4-1) gp-0 'part-tracker (the-as pointer #x70004000)) ) (run-now-in-process s4-1 part-tracker-init (-> self collect-effect) -1 part-tracker-track-target #f #f (-> (the-as collide-shape s5-1) root-prim prim-core) ) (-> s4-1 ppointer) ) ) (let ((gp-1 (get-process *default-dead-pool* part-tracker #x4000))) (when gp-1 (let ((t9-6 (method-of-type part-tracker activate))) (t9-6 (the-as part-tracker gp-1) self 'part-tracker (the-as pointer #x70004000)) ) (run-now-in-process gp-1 part-tracker-init (-> self collect-effect2) -1 part-tracker-move-to-target #f #f (-> self root-override root-prim prim-core) ) (-> gp-1 ppointer) ) ) ) ) ) ) ) ) (go vent-wait-for-touch) (none) ) ) (deftype ventyellow (vent) () :heap-base #x70 :method-count-assert 21 :size-assert #xd8 :flag-assert #x15007000d8 ) (defmethod init-from-entity! ventyellow ((obj ventyellow) (arg0 entity-actor)) (initialize obj arg0 (pickup-type eco-yellow)) (none) ) (deftype ventred (vent) () :heap-base #x70 :method-count-assert 21 :size-assert #xd8 :flag-assert #x15007000d8 ) (defmethod init-from-entity! ventred ((obj ventred) (arg0 entity-actor)) (initialize obj arg0 (pickup-type eco-red)) (none) ) (deftype ventblue (vent) () :heap-base #x70 :method-count-assert 21 :size-assert #xd8 :flag-assert #x15007000d8 ) (defmethod init-from-entity! ventblue ((obj ventblue) (arg0 entity-actor)) (initialize obj arg0 (pickup-type eco-blue)) (none) ) (deftype ecovent (vent) () :heap-base #x70 :method-count-assert 21 :size-assert #xd8 :flag-assert #x15007000d8 ) (defmethod init-from-entity! ecovent ((obj ecovent) (arg0 entity-actor)) (initialize obj arg0 (pickup-type eco-blue)) (none) )