mirror of
https://github.com/open-goal/jak-project.git
synced 2024-10-20 21:27:52 -04:00
24578b64b9
* hardcode `time-frame`things * Update cam-states_REF.gc * Update level-info_REF.gc * update refs 1 * update refs 2 * update refs 3 * update refs 4 * update refs 5 * update detection and casting * Update FormExpressionAnalysis.cpp * update refs 6 * update mood decomp * update refs 7 * update refs 8 * remove temp entity birth code * update time-frame casts * fix compiler * hardcode stuff and fix some types * fix some bitfield detection being wrong * bug fixes * detect seconds on adds with immediate * update refs 9 * fix casts and rand-vu-int-range bugs (update refs 10) * update refs 11 * update 12 * update 13 * update 14 * Update game-info_REF.gc * improve cpad macros detection * remove unused code * update refs * clang * update source code * Update cam-states.gc * `lavatube-energy` finish * update refs * fix actor bank stuff * Update navigate.gc * reduce entity default stack size * Update transformq-h.gc * oops forgot these * fix code and tests * fix mood sound stuff * Update load-dgo.gc * Update README.md
539 lines
25 KiB
Common Lisp
539 lines
25 KiB
Common Lisp
;;-*-Lisp-*-
|
|
(in-package goal)
|
|
|
|
;; name: assistant-firecanyon.gc
|
|
;; name in dgo: assistant-firecanyon
|
|
;; dgos: L1, FIC
|
|
|
|
;; DECOMP BEGINS
|
|
|
|
(deftype assistant-firecanyon (process-taskable)
|
|
()
|
|
:heap-base #x110
|
|
:method-count-assert 53
|
|
:size-assert #x17c
|
|
:flag-assert #x350110017c
|
|
)
|
|
|
|
|
|
(defskelgroup *assistant-firecanyon-sg* assistant-firecanyon
|
|
0
|
|
3
|
|
((1 (meters 999999)))
|
|
:bounds (static-spherem 0 0 0 4)
|
|
:longest-edge (meters 0)
|
|
:shadow 2
|
|
)
|
|
|
|
(defmethod play-anim! assistant-firecanyon ((obj assistant-firecanyon) (arg0 symbol))
|
|
(case (current-status (-> obj tasks))
|
|
(((task-status need-reward-speech))
|
|
(if arg0
|
|
(close-current! (-> obj tasks))
|
|
)
|
|
(new 'static 'spool-anim
|
|
:name "assistant-firecanyon-resolution"
|
|
:index 13
|
|
:parts 11
|
|
:command-list
|
|
'((0 want-levels village1 firecanyon)
|
|
(151 joint "cameraB")
|
|
(346 joint "camera")
|
|
(346 shadow self #f)
|
|
(461 joint "cameraB")
|
|
(546 joint "camera")
|
|
(636 joint "cameraB")
|
|
(695 alive "balloon-12")
|
|
(696 joint "camera")
|
|
(821 alive "balloon-16")
|
|
(822 joint "cameraB")
|
|
(962 joint "camera")
|
|
(1268 shadow self #t)
|
|
)
|
|
)
|
|
)
|
|
(else
|
|
(if arg0
|
|
(format
|
|
0
|
|
"ERROR: <GMJ>: ~S playing anim for task status ~S~%"
|
|
(-> obj name)
|
|
(task-status->string (current-status (-> obj tasks)))
|
|
)
|
|
)
|
|
(-> obj draw art-group data 3)
|
|
)
|
|
)
|
|
)
|
|
|
|
(defmethod get-art-elem assistant-firecanyon ((obj assistant-firecanyon))
|
|
(if (= (current-status (-> obj tasks)) (task-status invalid))
|
|
(-> obj draw art-group data 8)
|
|
(-> obj draw art-group data 3)
|
|
)
|
|
)
|
|
|
|
(defstate hidden (assistant-firecanyon)
|
|
:virtual #t
|
|
:trans
|
|
(behavior ()
|
|
((-> (method-of-type process-taskable hidden) trans))
|
|
(when (and (cond
|
|
((and *target* (>= 61440.0 (vector-vector-distance (-> self root-override trans) (-> *target* control trans))))
|
|
#t
|
|
)
|
|
(else
|
|
(set! (-> self state-time) (-> *display* base-frame-counter))
|
|
#f
|
|
)
|
|
)
|
|
(and (not (closed? (-> self tasks) (game-task firecanyon-assistant) (task-status need-reward-speech)))
|
|
(not (movie?))
|
|
(not (level-hint-displayed?))
|
|
(not (and *cheat-mode* (cpad-hold? 0 l3)))
|
|
(< (- (-> *display* base-frame-counter) (-> self state-time)) (seconds 10))
|
|
)
|
|
)
|
|
(hide-hud)
|
|
(kill-current-level-hint '() '(sidekick voicebox) 'exit)
|
|
(when (and (seen-text? *game-info* (game-text-id firecanyon-not-enough-cells))
|
|
(hud-hidden?)
|
|
(can-grab-display? self)
|
|
(not (-> *setting-control* current hint))
|
|
)
|
|
(let ((gp-0
|
|
(new 'stack 'font-context *font-default-matrix* 32 160 0.0 (font-color default) (font-flags shadow kerning))
|
|
)
|
|
)
|
|
(let ((v1-26 gp-0))
|
|
(set! (-> v1-26 width) (the float 448))
|
|
)
|
|
(let ((v1-27 gp-0))
|
|
(set! (-> v1-27 height) (the float 80))
|
|
)
|
|
(let ((v1-28 gp-0))
|
|
(set! (-> v1-28 scale) 0.8)
|
|
)
|
|
(set! (-> gp-0 flags) (font-flags shadow kerning middle large))
|
|
(print-game-text (lookup-text! *common-text* (game-text-id firecanyon-collect-cells-text) #f) gp-0 #f 128 22)
|
|
)
|
|
)
|
|
(level-hint-spawn
|
|
(game-text-id firecanyon-not-enough-cells)
|
|
"asstvb09"
|
|
(the-as entity #f)
|
|
*entity-pool*
|
|
(game-task none)
|
|
)
|
|
)
|
|
(none)
|
|
)
|
|
)
|
|
|
|
(defstate idle (assistant-firecanyon)
|
|
:virtual #t
|
|
:code
|
|
(behavior ()
|
|
(if (!= (if (> (-> self skel active-channels) 0)
|
|
(-> self skel root-channel 0 frame-group)
|
|
)
|
|
(get-art-elem self)
|
|
)
|
|
(ja-channel-push! 1 15)
|
|
)
|
|
(while #t
|
|
(let ((gp-0 #t))
|
|
(cond
|
|
((= (current-status (-> self tasks)) (task-status invalid))
|
|
(let* ((v1-8 (/ (the-as int (rand-uint31-gen *random-generator*)) 256))
|
|
(v1-9 (the-as number (logior #x3f800000 v1-8)))
|
|
)
|
|
(when (< (+ -1.0 (the-as float v1-9)) 0.5)
|
|
(let ((v1-14 (-> self skel root-channel 0)))
|
|
(set! (-> v1-14 frame-group) (the-as art-joint-anim (-> self draw art-group data 8)))
|
|
)
|
|
(let* ((f30-0 2.0)
|
|
(v1-16 (/ (the-as int (rand-uint31-gen *random-generator*)) 256))
|
|
(v1-17 (the-as number (logior #x3f800000 v1-16)))
|
|
)
|
|
(countdown (gp-1 (+ (the int (* f30-0 (+ -1.0 (the-as float v1-17)))) 3))
|
|
(let ((a0-15 (-> self skel root-channel 0)))
|
|
(set! (-> a0-15 frame-group) (if (> (-> self skel active-channels) 0)
|
|
(-> self skel root-channel 0 frame-group)
|
|
)
|
|
)
|
|
(set! (-> a0-15 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0)
|
|
(-> self skel root-channel 0 frame-group)
|
|
)
|
|
data
|
|
0
|
|
length
|
|
)
|
|
-1
|
|
)
|
|
)
|
|
)
|
|
(set! (-> a0-15 param 1) 1.0)
|
|
(set! (-> a0-15 frame-num) 0.0)
|
|
(joint-control-channel-group!
|
|
a0-15
|
|
(if (> (-> self skel active-channels) 0)
|
|
(-> self skel root-channel 0 frame-group)
|
|
)
|
|
num-func-seek!
|
|
)
|
|
)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(let ((a0-16 (-> self skel root-channel 0)))
|
|
(set! (-> a0-16 param 0) (the float (+ (-> a0-16 frame-group data 0 length) -1)))
|
|
(set! (-> a0-16 param 1) 1.0)
|
|
(joint-control-channel-group-eval! a0-16 (the-as art-joint-anim #f) num-func-seek!)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(set! gp-0 #f)
|
|
)
|
|
)
|
|
(when (or gp-0 (let* ((v1-53 (/ (the-as int (rand-uint31-gen *random-generator*)) 256))
|
|
(v1-54 (the-as number (logior #x3f800000 v1-53)))
|
|
)
|
|
(< (+ -1.0 (the-as float v1-54)) 0.5)
|
|
)
|
|
)
|
|
(let ((a0-20 (-> self skel root-channel 0)))
|
|
(set! (-> a0-20 frame-group) (the-as art-joint-anim (-> self draw art-group data 9)))
|
|
(set! (-> a0-20 param 0)
|
|
(the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 9)) data 0 length) -1))
|
|
)
|
|
(set! (-> a0-20 param 1) 1.0)
|
|
(set! (-> a0-20 frame-num) 0.0)
|
|
(joint-control-channel-group! a0-20 (the-as art-joint-anim (-> self draw art-group data 9)) num-func-seek!)
|
|
)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(let ((a0-21 (-> self skel root-channel 0)))
|
|
(set! (-> a0-21 param 0) (the float (+ (-> a0-21 frame-group data 0 length) -1)))
|
|
(set! (-> a0-21 param 1) 1.0)
|
|
(joint-control-channel-group-eval! a0-21 (the-as art-joint-anim #f) num-func-seek!)
|
|
)
|
|
)
|
|
(let ((v1-81 (-> self skel root-channel 0)))
|
|
(set! (-> v1-81 frame-group) (the-as art-joint-anim (-> self draw art-group data 10)))
|
|
)
|
|
(let* ((f30-1 2.0)
|
|
(v1-83 (/ (the-as int (rand-uint31-gen *random-generator*)) 256))
|
|
(v1-84 (the-as number (logior #x3f800000 v1-83)))
|
|
)
|
|
(countdown (gp-2 (+ (the int (* f30-1 (+ -1.0 (the-as float v1-84)))) 3))
|
|
(let ((a0-28 (-> self skel root-channel 0)))
|
|
(set! (-> a0-28 frame-group) (if (> (-> self skel active-channels) 0)
|
|
(-> self skel root-channel 0 frame-group)
|
|
)
|
|
)
|
|
(set! (-> a0-28 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0)
|
|
(-> self skel root-channel 0 frame-group)
|
|
)
|
|
data
|
|
0
|
|
length
|
|
)
|
|
-1
|
|
)
|
|
)
|
|
)
|
|
(set! (-> a0-28 param 1) 1.0)
|
|
(set! (-> a0-28 frame-num) 0.0)
|
|
(joint-control-channel-group!
|
|
a0-28
|
|
(if (> (-> self skel active-channels) 0)
|
|
(-> self skel root-channel 0 frame-group)
|
|
)
|
|
num-func-seek!
|
|
)
|
|
)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(let ((a0-29 (-> self skel root-channel 0)))
|
|
(set! (-> a0-29 param 0) (the float (+ (-> a0-29 frame-group data 0 length) -1)))
|
|
(set! (-> a0-29 param 1) 1.0)
|
|
(joint-control-channel-group-eval! a0-29 (the-as art-joint-anim #f) num-func-seek!)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(let ((a0-31 (-> self skel root-channel 0)))
|
|
(set! (-> a0-31 frame-group) (the-as art-joint-anim (-> self draw art-group data 11)))
|
|
(set! (-> a0-31 param 0)
|
|
(the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 11)) data 0 length) -1))
|
|
)
|
|
(set! (-> a0-31 param 1) 1.0)
|
|
(set! (-> a0-31 frame-num) 0.0)
|
|
(joint-control-channel-group! a0-31 (the-as art-joint-anim (-> self draw art-group data 11)) num-func-seek!)
|
|
)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(let ((a0-32 (-> self skel root-channel 0)))
|
|
(set! (-> a0-32 param 0) (the float (+ (-> a0-32 frame-group data 0 length) -1)))
|
|
(set! (-> a0-32 param 1) 1.0)
|
|
(joint-control-channel-group-eval! a0-32 (the-as art-joint-anim #f) num-func-seek!)
|
|
)
|
|
)
|
|
)
|
|
(let* ((v1-140 (/ (the-as int (rand-uint31-gen *random-generator*)) 256))
|
|
(v1-141 (the-as number (logior #x3f800000 v1-140)))
|
|
)
|
|
(when (< (+ -1.0 (the-as float v1-141)) 0.25)
|
|
(let ((v1-146 (-> self skel root-channel 0)))
|
|
(set! (-> v1-146 frame-group) (the-as art-joint-anim (-> self draw art-group data 12)))
|
|
)
|
|
(let ((a0-39 (-> self skel root-channel 0)))
|
|
(set! (-> a0-39 frame-group) (if (> (-> self skel active-channels) 0)
|
|
(-> self skel root-channel 0 frame-group)
|
|
)
|
|
)
|
|
(set! (-> a0-39 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0)
|
|
(-> self skel root-channel 0 frame-group)
|
|
)
|
|
data
|
|
0
|
|
length
|
|
)
|
|
-1
|
|
)
|
|
)
|
|
)
|
|
(set! (-> a0-39 param 1) 1.0)
|
|
(set! (-> a0-39 frame-num) 0.0)
|
|
(joint-control-channel-group!
|
|
a0-39
|
|
(if (> (-> self skel active-channels) 0)
|
|
(-> self skel root-channel 0 frame-group)
|
|
)
|
|
num-func-seek!
|
|
)
|
|
)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(let ((a0-40 (-> self skel root-channel 0)))
|
|
(set! (-> a0-40 param 0) (the float (+ (-> a0-40 frame-group data 0 length) -1)))
|
|
(set! (-> a0-40 param 1) 1.0)
|
|
(joint-control-channel-group-eval! a0-40 (the-as art-joint-anim #f) num-func-seek!)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(else
|
|
(let* ((v1-176 (/ (the-as int (rand-uint31-gen *random-generator*)) 256))
|
|
(v1-177 (the-as number (logior #x3f800000 v1-176)))
|
|
)
|
|
(when (< (+ -1.0 (the-as float v1-177)) 0.8)
|
|
(let ((v1-182 (-> self skel root-channel 0)))
|
|
(set! (-> v1-182 frame-group) (the-as art-joint-anim (-> self draw art-group data 3)))
|
|
)
|
|
(let* ((f30-2 4.0)
|
|
(v1-184 (/ (the-as int (rand-uint31-gen *random-generator*)) 256))
|
|
(v1-185 (the-as number (logior #x3f800000 v1-184)))
|
|
)
|
|
(countdown (gp-3 (+ (the int (* f30-2 (+ -1.0 (the-as float v1-185)))) 8))
|
|
(let ((a0-49 (-> self skel root-channel 0)))
|
|
(set! (-> a0-49 frame-group) (if (> (-> self skel active-channels) 0)
|
|
(-> self skel root-channel 0 frame-group)
|
|
)
|
|
)
|
|
(set! (-> a0-49 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0)
|
|
(-> self skel root-channel 0 frame-group)
|
|
)
|
|
data
|
|
0
|
|
length
|
|
)
|
|
-1
|
|
)
|
|
)
|
|
)
|
|
(set! (-> a0-49 param 1) 1.0)
|
|
(set! (-> a0-49 frame-num) 0.0)
|
|
(joint-control-channel-group!
|
|
a0-49
|
|
(if (> (-> self skel active-channels) 0)
|
|
(-> self skel root-channel 0 frame-group)
|
|
)
|
|
num-func-seek!
|
|
)
|
|
)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(let ((a0-50 (-> self skel root-channel 0)))
|
|
(set! (-> a0-50 param 0) (the float (+ (-> a0-50 frame-group data 0 length) -1)))
|
|
(set! (-> a0-50 param 1) 1.0)
|
|
(joint-control-channel-group-eval! a0-50 (the-as art-joint-anim #f) num-func-seek!)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(set! gp-0 #f)
|
|
)
|
|
)
|
|
(when (or gp-0 (let* ((v1-221 (/ (the-as int (rand-uint31-gen *random-generator*)) 256))
|
|
(v1-222 (the-as number (logior #x3f800000 v1-221)))
|
|
)
|
|
(< (+ -1.0 (the-as float v1-222)) 0.5)
|
|
)
|
|
)
|
|
(let ((a0-54 (-> self skel root-channel 0)))
|
|
(set! (-> a0-54 frame-group) (the-as art-joint-anim (-> self draw art-group data 4)))
|
|
(set! (-> a0-54 param 0)
|
|
(the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 4)) data 0 length) -1))
|
|
)
|
|
(set! (-> a0-54 param 1) 1.0)
|
|
(set! (-> a0-54 frame-num) 0.0)
|
|
(joint-control-channel-group! a0-54 (the-as art-joint-anim (-> self draw art-group data 4)) num-func-seek!)
|
|
)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(let ((a0-55 (-> self skel root-channel 0)))
|
|
(set! (-> a0-55 param 0) (the float (+ (-> a0-55 frame-group data 0 length) -1)))
|
|
(set! (-> a0-55 param 1) 1.0)
|
|
(joint-control-channel-group-eval! a0-55 (the-as art-joint-anim #f) num-func-seek!)
|
|
)
|
|
)
|
|
(let ((v1-249 (-> self skel root-channel 0)))
|
|
(set! (-> v1-249 frame-group) (the-as art-joint-anim (-> self draw art-group data 5)))
|
|
)
|
|
(let* ((f30-3 2.0)
|
|
(v1-251 (/ (the-as int (rand-uint31-gen *random-generator*)) 256))
|
|
(v1-252 (the-as number (logior #x3f800000 v1-251)))
|
|
)
|
|
(countdown (gp-4 (+ (the int (* f30-3 (+ -1.0 (the-as float v1-252)))) 3))
|
|
(let ((a0-62 (-> self skel root-channel 0)))
|
|
(set! (-> a0-62 frame-group) (if (> (-> self skel active-channels) 0)
|
|
(-> self skel root-channel 0 frame-group)
|
|
)
|
|
)
|
|
(set! (-> a0-62 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0)
|
|
(-> self skel root-channel 0 frame-group)
|
|
)
|
|
data
|
|
0
|
|
length
|
|
)
|
|
-1
|
|
)
|
|
)
|
|
)
|
|
(set! (-> a0-62 param 1) 1.0)
|
|
(set! (-> a0-62 frame-num) 0.0)
|
|
(joint-control-channel-group!
|
|
a0-62
|
|
(if (> (-> self skel active-channels) 0)
|
|
(-> self skel root-channel 0 frame-group)
|
|
)
|
|
num-func-seek!
|
|
)
|
|
)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(let ((a0-63 (-> self skel root-channel 0)))
|
|
(set! (-> a0-63 param 0) (the float (+ (-> a0-63 frame-group data 0 length) -1)))
|
|
(set! (-> a0-63 param 1) 1.0)
|
|
(joint-control-channel-group-eval! a0-63 (the-as art-joint-anim #f) num-func-seek!)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(let ((a0-65 (-> self skel root-channel 0)))
|
|
(set! (-> a0-65 frame-group) (the-as art-joint-anim (-> self draw art-group data 6)))
|
|
(set! (-> a0-65 param 0)
|
|
(the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 6)) data 0 length) -1))
|
|
)
|
|
(set! (-> a0-65 param 1) 1.0)
|
|
(set! (-> a0-65 frame-num) 0.0)
|
|
(joint-control-channel-group! a0-65 (the-as art-joint-anim (-> self draw art-group data 6)) num-func-seek!)
|
|
)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(let ((a0-66 (-> self skel root-channel 0)))
|
|
(set! (-> a0-66 param 0) (the float (+ (-> a0-66 frame-group data 0 length) -1)))
|
|
(set! (-> a0-66 param 1) 1.0)
|
|
(joint-control-channel-group-eval! a0-66 (the-as art-joint-anim #f) num-func-seek!)
|
|
)
|
|
)
|
|
)
|
|
(let* ((v1-308 (/ (the-as int (rand-uint31-gen *random-generator*)) 256))
|
|
(v1-309 (the-as number (logior #x3f800000 v1-308)))
|
|
)
|
|
(when (< (+ -1.0 (the-as float v1-309)) 0.5)
|
|
(let ((v1-314 (-> self skel root-channel 0)))
|
|
(set! (-> v1-314 frame-group) (the-as art-joint-anim (-> self draw art-group data 7)))
|
|
)
|
|
(let* ((f30-4 2.0)
|
|
(v1-316 (/ (the-as int (rand-uint31-gen *random-generator*)) 256))
|
|
(v1-317 (the-as number (logior #x3f800000 v1-316)))
|
|
)
|
|
(countdown (gp-5 (+ (the int (* f30-4 (+ -1.0 (the-as float v1-317)))) 3))
|
|
(let ((a0-75 (-> self skel root-channel 0)))
|
|
(set! (-> a0-75 frame-group) (if (> (-> self skel active-channels) 0)
|
|
(-> self skel root-channel 0 frame-group)
|
|
)
|
|
)
|
|
(set! (-> a0-75 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0)
|
|
(-> self skel root-channel 0 frame-group)
|
|
)
|
|
data
|
|
0
|
|
length
|
|
)
|
|
-1
|
|
)
|
|
)
|
|
)
|
|
(set! (-> a0-75 param 1) 1.0)
|
|
(set! (-> a0-75 frame-num) 0.0)
|
|
(joint-control-channel-group!
|
|
a0-75
|
|
(if (> (-> self skel active-channels) 0)
|
|
(-> self skel root-channel 0 frame-group)
|
|
)
|
|
num-func-seek!
|
|
)
|
|
)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(let ((a0-76 (-> self skel root-channel 0)))
|
|
(set! (-> a0-76 param 0) (the float (+ (-> a0-76 frame-group data 0 length) -1)))
|
|
(set! (-> a0-76 param 1) 1.0)
|
|
(joint-control-channel-group-eval! a0-76 (the-as art-joint-anim #f) num-func-seek!)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(none)
|
|
)
|
|
)
|
|
|
|
(defmethod should-display? assistant-firecanyon ((obj assistant-firecanyon))
|
|
(first-any (-> obj tasks) #t)
|
|
(= (current-status (-> obj tasks)) (task-status need-reward-speech))
|
|
)
|
|
|
|
(defmethod init-from-entity! assistant-firecanyon ((obj assistant-firecanyon) (arg0 entity-actor))
|
|
(dummy-40 obj arg0 *assistant-firecanyon-sg* 3 29 (new 'static 'vector :w 4096.0) 5)
|
|
(set! (-> obj tasks) (get-task-control (game-task firecanyon-assistant)))
|
|
(first-any (-> obj tasks) #t)
|
|
(dummy-42 obj)
|
|
(none)
|
|
)
|
|
|
|
|
|
|
|
|