mirror of
https://github.com/open-goal/jak-project.git
synced 2024-10-20 11:26:18 -04:00
70ea2a1f67
Slam Dozer > Ram Rod
2438 lines
75 KiB
Common Lisp
2438 lines
75 KiB
Common Lisp
;;-*-Lisp-*-
|
|
(in-package goal)
|
|
|
|
;; name: des-bush.gc
|
|
;; name in dgo: des-bush
|
|
;; dgos: LBBSDRP1, LBBRING3, LBBRING4, LBBSDRP2, LBBRING2, LBBSPIRT, LBBSPID, LBBRING5, LBBSPRT3, LBBSPRT2, LBBRING1, LBBRING6, LBBSDRP3
|
|
|
|
(declare-type desert-chase-ring process)
|
|
|
|
;; +++bb-score-type
|
|
(defenum bb-score-type
|
|
:type uint8
|
|
(small)
|
|
(medium)
|
|
(large)
|
|
)
|
|
;; ---bb-score-type
|
|
|
|
|
|
;; DECOMP BEGINS
|
|
|
|
(define *tex-level-list*
|
|
(new 'static 'boxed-array :type symbol 'lbbring1 'lbbring2 'lbbring3 'lbbring4 'lbbring5 'lbbring6)
|
|
)
|
|
|
|
(defpartgroup group-desert-ring
|
|
:id 1547
|
|
:duration (seconds 218.45)
|
|
:linger-duration (seconds 0)
|
|
:bounds (static-bspherem 0 0 0 8)
|
|
:parts ((sp-item 5143 :flags (is-3d sp3 sp6 sp7))
|
|
(sp-item 5143 :flags (is-3d sp3 sp6 sp7))
|
|
(sp-item 5143 :flags (is-3d sp3 sp6 sp7))
|
|
(sp-item 5143 :flags (is-3d sp3 sp6 sp7))
|
|
(sp-item 5143 :flags (is-3d sp3 sp6 sp7))
|
|
(sp-item 5143 :flags (is-3d sp3 sp6 sp7))
|
|
(sp-item 5144 :flags (is-3d sp7))
|
|
(sp-item 5144 :flags (is-3d sp7))
|
|
)
|
|
)
|
|
|
|
(defpart 5143
|
|
:init-specs ((:texture (racegate lbbring6-sprite))
|
|
(:num 1.0)
|
|
(:scale-x (meters 12))
|
|
(:scale-y :copy scale-x)
|
|
(:r 40.0)
|
|
(:g 80.0)
|
|
(:b 255.0)
|
|
(:a 64.0)
|
|
(:rotvel-y (degrees 0.026666665) (degrees 0.033333335))
|
|
(:timer (seconds -0.005))
|
|
(:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14))
|
|
(:rotate-x (degrees -90) 1 (degrees 180))
|
|
(:rotate-z (degrees -90) (degrees 180))
|
|
)
|
|
)
|
|
|
|
(defpart 5144
|
|
:init-specs ((:texture (splash-foam level-default-sprite))
|
|
(:num 0.0 0.5)
|
|
(:scale-x (meters 12) (meters 1))
|
|
(:scale-y :copy scale-x)
|
|
(:r 10.0)
|
|
(:g 0.0 64.0)
|
|
(:b 255.0)
|
|
(:a 0.0)
|
|
(:scalevel-x (meters -0.093333334))
|
|
(:scalevel-y :copy scalevel-x)
|
|
(:fade-a 6.4)
|
|
(:timer (seconds 0.5))
|
|
(:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14 left-multiply-quat))
|
|
(:next-time (seconds 0.067))
|
|
(:next-launcher 5145)
|
|
(:rotate-x (degrees -90))
|
|
(:rotate-z (degrees -90) (degrees 180))
|
|
)
|
|
)
|
|
|
|
(defpart 5145
|
|
:init-specs ((:fade-a -1.28))
|
|
)
|
|
|
|
(defpartgroup group-desert-ring-final
|
|
:id 1548
|
|
:duration (seconds 218.45)
|
|
:linger-duration (seconds 0)
|
|
:bounds (static-bspherem 0 0 0 8)
|
|
:parts ((sp-item 5146 :flags (is-3d sp3 sp6 sp7))
|
|
(sp-item 5146 :flags (is-3d sp3 sp6 sp7))
|
|
(sp-item 5146 :flags (is-3d sp3 sp6 sp7))
|
|
(sp-item 5146 :flags (is-3d sp3 sp6 sp7))
|
|
(sp-item 5146 :flags (is-3d sp3 sp6 sp7))
|
|
(sp-item 5146 :flags (is-3d sp3 sp6 sp7))
|
|
(sp-item 5147 :flags (is-3d sp7))
|
|
(sp-item 5147 :flags (is-3d sp7))
|
|
)
|
|
)
|
|
|
|
(defpart 5146
|
|
:init-specs ((:texture (racegate lbbring6-sprite))
|
|
(:num 1.0)
|
|
(:scale-x (meters 12))
|
|
(:scale-y :copy scale-x)
|
|
(:r 255.0)
|
|
(:g 80.0)
|
|
(:b 40.0)
|
|
(:a 64.0)
|
|
(:rotvel-y (degrees 0.026666665) (degrees 0.033333335))
|
|
(:timer (seconds -0.005))
|
|
(:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14))
|
|
(:rotate-x (degrees -90) 1 (degrees 180))
|
|
(:rotate-z (degrees -90) (degrees 180))
|
|
)
|
|
)
|
|
|
|
(defpart 5147
|
|
:init-specs ((:texture (splash-foam level-default-sprite))
|
|
(:num 0.0 0.5)
|
|
(:scale-x (meters 12) (meters 1))
|
|
(:scale-y :copy scale-x)
|
|
(:r 255.0)
|
|
(:g 0.0 64.0)
|
|
(:b 10.0)
|
|
(:a 0.0)
|
|
(:scalevel-x (meters -0.093333334))
|
|
(:scalevel-y :copy scalevel-x)
|
|
(:fade-a 6.4)
|
|
(:timer (seconds 0.5))
|
|
(:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14 left-multiply-quat))
|
|
(:next-time (seconds 0.067))
|
|
(:next-launcher 5148)
|
|
(:rotate-x (degrees -90))
|
|
(:rotate-z (degrees -90) (degrees 180))
|
|
)
|
|
)
|
|
|
|
(defpart 5148
|
|
:init-specs ((:fade-a -1.28))
|
|
)
|
|
|
|
(defpartgroup group-desert-ring-explode
|
|
:id 1549
|
|
:duration (seconds 0.067)
|
|
:linger-duration (seconds 0.5)
|
|
:flags (sp0 sp4)
|
|
:bounds (static-bspherem 0 0 0 8)
|
|
:parts ((sp-item 5149 :flags (sp3 sp7)) (sp-item 5150 :flags (sp6 sp7)))
|
|
)
|
|
|
|
(defpart 5149
|
|
:init-specs ((:texture (middot level-default-sprite))
|
|
(:num 200.0)
|
|
(:x (meters 5.8))
|
|
(:scale-x (meters 0.3))
|
|
(:scale-y :copy scale-x)
|
|
(:r 40.0)
|
|
(:g 80.0)
|
|
(:b 255.0)
|
|
(:a 64.0)
|
|
(:omega (degrees 0.225))
|
|
(:vel-x (meters 0.06666667) (meters 0.06666667))
|
|
(:friction 0.9)
|
|
(:timer (seconds 1))
|
|
(:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-3))
|
|
(:func 'sparticle-motion-blur)
|
|
(:rotate-y (degrees 0))
|
|
(:rotate-z (degrees 0) (degrees 3600))
|
|
)
|
|
)
|
|
|
|
(defpart 5150
|
|
:init-specs ((:texture (glow-soft level-default-sprite))
|
|
(:num 1.0)
|
|
(:scale-x (meters 36))
|
|
(:scale-y :copy scale-x)
|
|
(:r 120.0)
|
|
(:g 120.0)
|
|
(:b 120.0)
|
|
(:a 20.0)
|
|
(:fade-r -17.0)
|
|
(:fade-g -8.5)
|
|
(:fade-b 0.0)
|
|
(:fade-a -0.6666667)
|
|
(:timer (seconds 0.1))
|
|
(:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow))
|
|
(:userdata 0.0)
|
|
(:rotate-x (degrees -90))
|
|
)
|
|
)
|
|
|
|
(defpartgroup group-desert-ring-explode-final
|
|
:id 1550
|
|
:duration (seconds 0.067)
|
|
:linger-duration (seconds 0.5)
|
|
:flags (sp0 sp4)
|
|
:bounds (static-bspherem 0 0 0 8)
|
|
:parts ((sp-item 5151 :flags (sp3 sp7)) (sp-item 5152 :flags (sp6 sp7)))
|
|
)
|
|
|
|
(defpart 5151
|
|
:init-specs ((:texture (middot level-default-sprite))
|
|
(:num 200.0)
|
|
(:x (meters 5.8))
|
|
(:scale-x (meters 0.3))
|
|
(:scale-y :copy scale-x)
|
|
(:r 255.0)
|
|
(:g 80.0)
|
|
(:b 40.0)
|
|
(:a 64.0)
|
|
(:omega (degrees 0.225))
|
|
(:vel-x (meters 0.06666667) (meters 0.06666667))
|
|
(:friction 0.9)
|
|
(:timer (seconds 1))
|
|
(:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-3))
|
|
(:func 'sparticle-motion-blur)
|
|
(:rotate-y (degrees 0))
|
|
(:rotate-z (degrees 0) (degrees 3600))
|
|
)
|
|
)
|
|
|
|
(defpart 5152
|
|
:init-specs ((:texture (glow-soft level-default-sprite))
|
|
(:num 1.0)
|
|
(:scale-x (meters 36))
|
|
(:scale-y :copy scale-x)
|
|
(:r 120.0)
|
|
(:g 120.0)
|
|
(:b 120.0)
|
|
(:a 20.0)
|
|
(:fade-r -17.0)
|
|
(:fade-g -8.5)
|
|
(:fade-b 0.0)
|
|
(:fade-a -0.6666667)
|
|
(:timer (seconds 0.1))
|
|
(:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow))
|
|
(:userdata 0.0)
|
|
(:rotate-x (degrees -90))
|
|
)
|
|
)
|
|
|
|
(defpartgroup group-desert-ring-birth
|
|
:id 1551
|
|
:duration (seconds 0.067)
|
|
:linger-duration (seconds 0.5)
|
|
:bounds (static-bspherem 0 0 0 8)
|
|
:parts ((sp-item 5153 :flags (is-3d sp3 sp6 sp7)) (sp-item 5150 :flags (sp6 sp7)))
|
|
)
|
|
|
|
(defpart 5153
|
|
:init-specs ((:texture (racegate lbbring6-sprite))
|
|
(:num 1.0)
|
|
(:r 40.0)
|
|
(:g 80.0)
|
|
(:b 255.0)
|
|
(:a 64.0)
|
|
(:scalevel-x (meters 0.1))
|
|
(:rotvel-y (degrees 0.026666665) (degrees 0.033333335))
|
|
(:scalevel-y :copy scalevel-x)
|
|
(:fade-a 0.53333336)
|
|
(:timer (seconds 0.4))
|
|
(:flags (sp-cpuinfo-flag-3 sp-cpuinfo-flag-14))
|
|
(:rotate-x (degrees -90))
|
|
(:rotate-z (degrees -90) (degrees 180))
|
|
)
|
|
)
|
|
|
|
(defpartgroup group-desert-ring-birth-final
|
|
:id 1552
|
|
:duration (seconds 0.067)
|
|
:linger-duration (seconds 0.5)
|
|
:bounds (static-bspherem 0 0 0 8)
|
|
:parts ((sp-item 5154 :flags (is-3d sp3 sp6 sp7)) (sp-item 5152 :flags (sp6 sp7)))
|
|
)
|
|
|
|
(defpart 5154
|
|
:init-specs ((:texture (racegate lbbring6-sprite))
|
|
(:num 1.0)
|
|
(:r 255.0)
|
|
(:g 80.0)
|
|
(:b 40.0)
|
|
(:a 64.0)
|
|
(:scalevel-x (meters 0.1))
|
|
(:rotvel-y (degrees 0.026666665) (degrees 0.033333335))
|
|
(:scalevel-y :copy scalevel-x)
|
|
(:fade-a 0.53333336)
|
|
(:timer (seconds 0.4))
|
|
(:flags (sp-cpuinfo-flag-3 sp-cpuinfo-flag-14))
|
|
(:rotate-x (degrees -90))
|
|
(:rotate-z (degrees -90) (degrees 180))
|
|
)
|
|
)
|
|
|
|
(defun find-level-name ()
|
|
(dotimes (gp-0 (-> *tex-level-list* length))
|
|
(let ((v1-3 (level-get *level* (-> *tex-level-list* gp-0))))
|
|
(if v1-3
|
|
(return v1-3)
|
|
)
|
|
)
|
|
)
|
|
(the-as level #f)
|
|
)
|
|
|
|
;; WARN: Return type mismatch texture-id vs none.
|
|
(defun set-ring-particle-texture ()
|
|
(let ((gp-0 (find-level-name)))
|
|
(when gp-0
|
|
(set! (-> *part-id-table* 5143 init-specs 0 initial-valuef)
|
|
(the-as float (lookup-level-texture-id-by-name "racegate" gp-0 7))
|
|
)
|
|
(set! (-> *part-id-table* 5146 init-specs 0 initial-valuef)
|
|
(the-as float (lookup-level-texture-id-by-name "racegate" gp-0 7))
|
|
)
|
|
(set! (-> *part-id-table* 5153 init-specs 0 initial-valuef)
|
|
(the-as float (lookup-level-texture-id-by-name "racegate" gp-0 7))
|
|
)
|
|
(set! (-> *part-id-table* 5154 init-specs 0 initial-valuef)
|
|
(the-as float (lookup-level-texture-id-by-name "racegate" gp-0 7))
|
|
)
|
|
)
|
|
)
|
|
(none)
|
|
)
|
|
|
|
(define *des-ring-times*
|
|
(the-as (array (array float))
|
|
(new 'static 'boxed-array :type array
|
|
(new 'static 'boxed-array :type float
|
|
11.0
|
|
9.0
|
|
9.0
|
|
8.0
|
|
7.0
|
|
11.0
|
|
8.0
|
|
8.0
|
|
10.0
|
|
8.0
|
|
12.0
|
|
9.0
|
|
10.0
|
|
9.0
|
|
10.0
|
|
13.0
|
|
11.0
|
|
12.0
|
|
10.0
|
|
10.0
|
|
10.0
|
|
10.0
|
|
8.0
|
|
9.0
|
|
13.0
|
|
10.0
|
|
12.0
|
|
10.0
|
|
6.0
|
|
8.0
|
|
9.0
|
|
11.0
|
|
10.0
|
|
11.0
|
|
10.0
|
|
11.0
|
|
15.0
|
|
14.0
|
|
9.0
|
|
15.0
|
|
10.0
|
|
13.0
|
|
9.0
|
|
13.0
|
|
8.0
|
|
7.0
|
|
)
|
|
(new 'static 'boxed-array :type float
|
|
11.0
|
|
5.2133
|
|
5.2066
|
|
5.8266
|
|
5.0
|
|
5.0
|
|
5.0
|
|
5.0
|
|
8.0
|
|
5.0
|
|
5.0
|
|
7.0
|
|
9.0
|
|
8.0
|
|
4.0
|
|
4.0
|
|
5.0
|
|
10.0
|
|
11.0
|
|
10.0
|
|
)
|
|
(new 'static 'boxed-array :type float
|
|
11.0
|
|
4.0
|
|
4.0
|
|
3.0
|
|
3.0
|
|
6.0
|
|
3.0
|
|
4.0
|
|
5.0
|
|
7.0
|
|
5.0
|
|
4.0
|
|
6.0
|
|
6.0
|
|
3.0
|
|
4.0
|
|
6.0
|
|
3.0
|
|
5.0
|
|
4.0
|
|
4.0
|
|
9.0
|
|
5.0
|
|
9.0
|
|
)
|
|
(new 'static 'boxed-array :type float 11.0 6.0 7.0 8.0 5.0 5.0 7.0 6.0 5.0 5.0 5.0 6.0 8.0 7.0 6.0 6.0 8.0)
|
|
(new 'static 'boxed-array :type float
|
|
11.0
|
|
5.0
|
|
4.0
|
|
5.0
|
|
5.0
|
|
5.0
|
|
5.0
|
|
6.0
|
|
6.0
|
|
6.0
|
|
5.0
|
|
6.0
|
|
6.0
|
|
5.0
|
|
6.0
|
|
6.0
|
|
6.0
|
|
4.0
|
|
6.0
|
|
7.0
|
|
5.0
|
|
5.0
|
|
7.0
|
|
6.0
|
|
6.0
|
|
5.0
|
|
5.0
|
|
4.0
|
|
)
|
|
(new 'static 'boxed-array :type float
|
|
11.0
|
|
6.0
|
|
5.0
|
|
7.0
|
|
8.0
|
|
4.0
|
|
3.0
|
|
4.0
|
|
5.0
|
|
5.0
|
|
5.0
|
|
5.0
|
|
5.0
|
|
6.0
|
|
5.0
|
|
7.0
|
|
7.0
|
|
4.0
|
|
5.0
|
|
5.0
|
|
6.0
|
|
7.0
|
|
4.0
|
|
4.0
|
|
7.0
|
|
5.0
|
|
5.0
|
|
5.0
|
|
4.0
|
|
4.0
|
|
7.0
|
|
5.0
|
|
7.0
|
|
7.0
|
|
7.0
|
|
7.0
|
|
4.0
|
|
7.0
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
(deftype task-manager-desert-bbush-ring (task-manager)
|
|
((actor-group (pointer actor-group))
|
|
(actor-group-count int32)
|
|
(current-ring int32)
|
|
)
|
|
(:methods
|
|
(task-manager-desert-bbush-ring-method-32 (_type_) none)
|
|
(task-manager-desert-bbush-ring-method-33 (_type_) none)
|
|
)
|
|
)
|
|
|
|
|
|
(defstate resolution (task-manager-desert-bbush-ring)
|
|
:virtual #t
|
|
:event task-manager-event-handler
|
|
:enter (behavior ()
|
|
(set-time! (-> self state-time))
|
|
)
|
|
:code (behavior ()
|
|
(local-vars (v1-34 object))
|
|
(when (logtest? (-> self info mask) (task-manager-mask resolution-scene))
|
|
(let ((gp-1 (ppointer->handle (process-spawn
|
|
scene-player
|
|
:init scene-player-init
|
|
(-> self info resolution-scene)
|
|
#t
|
|
(-> self info resolution-scene-continue)
|
|
:name "scene-player"
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(while (handle->process (the-as handle gp-1))
|
|
(suspend)
|
|
)
|
|
)
|
|
)
|
|
(task-manager-method-27 self)
|
|
(give *game-info* 'skill (the float (-> self info user-count)) (the-as handle #f))
|
|
(until (< (* 45 (-> self info user-count)) (- (current-time) (-> self state-time)))
|
|
(suspend)
|
|
)
|
|
(let ((gp-2 (-> self info on-complete)))
|
|
(if gp-2
|
|
(script-eval gp-2)
|
|
)
|
|
)
|
|
(task-node-close! (-> self info final-node) 'event)
|
|
(remove-setting! 'allow-progress)
|
|
(while (begin
|
|
(set! v1-34 (or (handle->process (-> self arrow)) (begin
|
|
(countdown (v1-35 4)
|
|
(when (handle->process (-> self hud v1-35))
|
|
(set! v1-34 #t)
|
|
(goto cfg-41)
|
|
)
|
|
)
|
|
#f
|
|
)
|
|
)
|
|
)
|
|
(label cfg-41)
|
|
v1-34
|
|
)
|
|
(suspend)
|
|
)
|
|
)
|
|
)
|
|
|
|
;; WARN: Return type mismatch string vs none.
|
|
(defmethod task-manager-desert-bbush-ring-method-32 ((this task-manager-desert-bbush-ring))
|
|
"t-manager-1"
|
|
(none)
|
|
)
|
|
|
|
(defmethod task-manager-desert-bbush-ring-method-33 ((this task-manager-desert-bbush-ring))
|
|
(cond
|
|
((= (status-of-level-and-borrows *level* 'waswide #f) 'active)
|
|
(set-setting! 'extra-bank '((wascity3 bbush1)) 0.0 0)
|
|
(set-setting! 'music 'wasring 0.0 0)
|
|
)
|
|
(else
|
|
(set-setting! 'extra-bank '((desert2 bbush1) (nest2 bbush1)) 0.0 0)
|
|
(set-setting! 'music 'desring 0.0 0)
|
|
)
|
|
)
|
|
0
|
|
(none)
|
|
)
|
|
|
|
(define *bb-fail*
|
|
(new 'static 'resetter-params
|
|
:flags (resetter-flag auto-reset text-message no-audio no-slow-down)
|
|
:fail (new 'static 'resetter-spec :continue "wasstada-jump-training" :reset-mode 'life :execute #f)
|
|
:retry (new 'static 'resetter-spec :continue #f :reset-mode 'try :execute #f)
|
|
:reset-delay (seconds 1)
|
|
)
|
|
)
|
|
|
|
(defmethod set-time-limit ((this task-manager-desert-bbush-ring))
|
|
(local-vars (sv-16 res-tag))
|
|
(let ((t9-0 (method-of-type task-manager set-time-limit)))
|
|
(t9-0 this)
|
|
)
|
|
(set-setting! 'airlock #f 0.0 0)
|
|
(format 0 "actor-group-count: ~d~%" (-> this actor-group-count))
|
|
(set! (-> this current-ring) 0)
|
|
(task-manager-desert-bbush-ring-method-33 this)
|
|
(logclear! (-> this mask) (process-mask actor-pause))
|
|
(let ((a0-8 (entity-by-name (the-as string (task-manager-desert-bbush-ring-method-32 this)))))
|
|
(when a0-8
|
|
(set! (-> this entity) (the-as entity-actor a0-8))
|
|
(set! sv-16 (new 'static 'res-tag))
|
|
(let ((s5-2 (res-lump-data a0-8 'actor-groups pointer :tag-ptr (& sv-16))))
|
|
(format 0 "elt-count: ~d" (-> sv-16 elt-count))
|
|
(cond
|
|
((and s5-2 (nonzero? (-> sv-16 elt-count)))
|
|
(set! (-> this actor-group-count) (the-as int (-> sv-16 elt-count)))
|
|
(set! (-> this actor-group) (the-as (pointer actor-group) s5-2))
|
|
)
|
|
(else
|
|
(format 0 "ERROR: ~s: entity missing actor-group!~%" (game-task->string (-> this node-info task)))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
0
|
|
(none)
|
|
)
|
|
|
|
(defmethod hud-timer-handler ((this task-manager-desert-bbush-ring))
|
|
(with-pp
|
|
(cond
|
|
((and *target*
|
|
(= (status-of-level-and-borrows *level* 'desert #f) 'active)
|
|
(focus-test? *target* pilot-riding)
|
|
)
|
|
(when (nonzero? (-> this start-time))
|
|
(let ((v1-8 (handle->process (-> this hud-timer))))
|
|
(if (and *target* (not v1-8))
|
|
(set! (-> this hud-timer)
|
|
(ppointer->handle (process-spawn hud-timer :init hud-init-by-other :name "hud-timer" :to *target*))
|
|
)
|
|
)
|
|
)
|
|
(let ((v1-18 (- (-> this time-limit) (- (current-time) (-> this start-time)))))
|
|
(let ((a0-21 *game-info*))
|
|
(set! (-> a0-21 timer) v1-18)
|
|
(set! (-> a0-21 timer-flash) (< v1-18 (seconds 10)))
|
|
)
|
|
(cond
|
|
((< v1-18 0)
|
|
(format #t "speed: ~f~%" (* 0.00024414062 (vector-length (-> *target* control transv))))
|
|
(cond
|
|
((< (vector-length (-> *target* control transv)) 1966.08)
|
|
(process-release? *target*)
|
|
(if *debug-segment*
|
|
(format #t "task failed: ran out of time~%")
|
|
)
|
|
(send-event (handle->process (-> this hud-timer)) 'hide-and-die)
|
|
(let ((v1-41 (-> this actor-group 0 data (-> this current-ring))))
|
|
(when v1-41
|
|
(let ((a1-9 (new 'stack-no-clear 'event-message-block)))
|
|
(set! (-> a1-9 from) (process->ppointer pp))
|
|
(set! (-> a1-9 num-params) 0)
|
|
(set! (-> a1-9 message) 'fail)
|
|
(let ((t9-8 send-event-function)
|
|
(v1-42 (-> v1-41 actor))
|
|
)
|
|
(t9-8
|
|
(if v1-42
|
|
(-> v1-42 extra process)
|
|
)
|
|
a1-9
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(go (method-of-object this fail) (on-fail this 'fail))
|
|
)
|
|
(else
|
|
(set! (-> this time-limit) (- (current-time) (-> this start-time)))
|
|
(process-grab? *target* #f)
|
|
)
|
|
)
|
|
)
|
|
(else
|
|
(process-release? *target*)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(else
|
|
(call-parent-method this)
|
|
)
|
|
)
|
|
0
|
|
(none)
|
|
)
|
|
)
|
|
|
|
(defstate active (task-manager-desert-bbush-ring)
|
|
:virtual #t
|
|
:event (behavior ((proc process) (argc int) (message symbol) (block event-message-block))
|
|
(case message
|
|
(('goal)
|
|
(send-event self 'complete)
|
|
)
|
|
(('ring-hit)
|
|
(+! (-> self current-ring) 1)
|
|
(cond
|
|
((< (-> self current-ring) (length (-> self actor-group 0)))
|
|
(let ((gp-1 (-> self actor-group 0 data (-> self current-ring))))
|
|
(when gp-1
|
|
(cond
|
|
((= (+ (length (-> self actor-group 0)) -1) (-> self current-ring))
|
|
(let ((a1-2 (new 'stack-no-clear 'event-message-block)))
|
|
(set! (-> a1-2 from) (process->ppointer self))
|
|
(set! (-> a1-2 num-params) 0)
|
|
(set! (-> a1-2 message) 'trigger-final)
|
|
(let ((t9-3 send-event-function)
|
|
(v1-17 (-> gp-1 actor))
|
|
)
|
|
(t9-3
|
|
(if v1-17
|
|
(-> v1-17 extra process)
|
|
)
|
|
a1-2
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(else
|
|
(let ((a1-3 (new 'stack-no-clear 'event-message-block)))
|
|
(set! (-> a1-3 from) (process->ppointer self))
|
|
(set! (-> a1-3 num-params) 0)
|
|
(set! (-> a1-3 message) 'trigger)
|
|
(let ((t9-4 send-event-function)
|
|
(v1-23 (-> gp-1 actor))
|
|
)
|
|
(t9-4
|
|
(if v1-23
|
|
(-> v1-23 extra process)
|
|
)
|
|
a1-3
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(set-time! (-> self start-time))
|
|
(set! (-> self time-limit)
|
|
(the-as time-frame (the int (* 300.0 (-> *des-ring-times* (-> self info index) (-> self current-ring)))))
|
|
)
|
|
0
|
|
)
|
|
)
|
|
)
|
|
(else
|
|
(send-event self 'complete)
|
|
)
|
|
)
|
|
)
|
|
(else
|
|
(task-manager-event-handler proc argc message block)
|
|
)
|
|
)
|
|
)
|
|
:enter (behavior ()
|
|
(set-time! (-> self start-time))
|
|
(set! (-> self time-limit)
|
|
(the-as time-frame (the int (* 300.0 (-> *des-ring-times* (-> self info index) 0))))
|
|
)
|
|
)
|
|
:exit (behavior ()
|
|
(process-release? *target*)
|
|
(let ((t9-2 (-> (find-parent-state) exit)))
|
|
(if t9-2
|
|
(t9-2)
|
|
)
|
|
)
|
|
0
|
|
)
|
|
:trans (behavior ()
|
|
(let ((t9-1 (-> (find-parent-state) trans)))
|
|
(if t9-1
|
|
(t9-1)
|
|
)
|
|
)
|
|
(hud-timer-handler self)
|
|
)
|
|
:code (behavior ()
|
|
(suspend)
|
|
(when (nonzero? (-> self actor-group-count))
|
|
(let ((v1-4 (-> self actor-group 0 data)))
|
|
(when v1-4
|
|
(let ((a1-0 (new 'stack-no-clear 'event-message-block)))
|
|
(set! (-> a1-0 from) (process->ppointer self))
|
|
(set! (-> a1-0 num-params) 0)
|
|
(set! (-> a1-0 message) 'trigger)
|
|
(let ((t9-0 send-event-function)
|
|
(v1-5 (-> v1-4 0 actor))
|
|
)
|
|
(t9-0
|
|
(if v1-5
|
|
(-> v1-5 extra process)
|
|
)
|
|
a1-0
|
|
)
|
|
)
|
|
)
|
|
0
|
|
)
|
|
)
|
|
)
|
|
(until #f
|
|
(suspend)
|
|
)
|
|
#f
|
|
)
|
|
)
|
|
|
|
(defstate fail (task-manager-desert-bbush-ring)
|
|
:virtual #t
|
|
:enter (behavior ((arg0 resetter-params))
|
|
(kill-by-type desert-chase-ring *active-pool*)
|
|
)
|
|
)
|
|
|
|
(deftype task-manager-desert-bbush-ring-2 (task-manager-desert-bbush-ring)
|
|
()
|
|
)
|
|
|
|
|
|
;; WARN: Return type mismatch string vs none.
|
|
(defmethod task-manager-desert-bbush-ring-method-32 ((this task-manager-desert-bbush-ring-2))
|
|
"t-manager-10"
|
|
(none)
|
|
)
|
|
|
|
(defmethod task-manager-desert-bbush-ring-method-33 ((this task-manager-desert-bbush-ring-2))
|
|
(set-setting! 'extra-bank '((desert2 bbush1)) 0.0 0)
|
|
(set-setting! 'music 'desring 0.0 0)
|
|
0
|
|
(none)
|
|
)
|
|
|
|
(deftype task-manager-desert-bbush-ring-3 (task-manager-desert-bbush-ring)
|
|
()
|
|
)
|
|
|
|
|
|
;; WARN: Return type mismatch string vs none.
|
|
(defmethod task-manager-desert-bbush-ring-method-32 ((this task-manager-desert-bbush-ring-3))
|
|
(format 0 "tag1~%")
|
|
"t-manager-2"
|
|
(none)
|
|
)
|
|
|
|
(deftype task-manager-desert-bbush-ring-4 (task-manager-desert-bbush-ring)
|
|
()
|
|
)
|
|
|
|
|
|
;; WARN: Return type mismatch string vs none.
|
|
(defmethod task-manager-desert-bbush-ring-method-32 ((this task-manager-desert-bbush-ring-4))
|
|
(format 0 "tag1~%")
|
|
"t-manager-6"
|
|
(none)
|
|
)
|
|
|
|
(deftype task-manager-desert-bbush-ring-5 (task-manager-desert-bbush-ring)
|
|
()
|
|
)
|
|
|
|
|
|
(defmethod init! ((this task-manager-desert-bbush-ring-5))
|
|
(set-setting! 'use-alternate-bouncer? #t 0.0 0)
|
|
(call-parent-method this)
|
|
(none)
|
|
)
|
|
|
|
;; WARN: Return type mismatch string vs none.
|
|
(defmethod task-manager-desert-bbush-ring-method-32 ((this task-manager-desert-bbush-ring-5))
|
|
(format 0 "tag1~%")
|
|
"t-manager-7"
|
|
(none)
|
|
)
|
|
|
|
(defmethod task-manager-desert-bbush-ring-method-33 ((this task-manager-desert-bbush-ring-5))
|
|
(set-setting! 'city-sound '(citybb1) 0.0 2)
|
|
(set-setting! 'music 'cityring 0.0 0)
|
|
0
|
|
(none)
|
|
)
|
|
|
|
(deftype task-manager-desert-bbush-ring-6 (task-manager-desert-bbush-ring)
|
|
()
|
|
)
|
|
|
|
|
|
(defmethod task-manager-desert-bbush-ring-method-33 ((this task-manager-desert-bbush-ring-6))
|
|
(set-setting! 'city-sound '(citybb1) 0.0 2)
|
|
(set-setting! 'music 'cityring 0.0 0)
|
|
0
|
|
(none)
|
|
)
|
|
|
|
(defmethod init! ((this task-manager-desert-bbush-ring-6))
|
|
(set-setting! 'use-alternate-bouncer? #t 0.0 0)
|
|
(call-parent-method this)
|
|
(none)
|
|
)
|
|
|
|
(define *bbush-ring-6-kg-squad-member-settings* (new 'static 'squad-unit-settings
|
|
:target-count 14
|
|
:shot-count #x7f
|
|
:inaccuracy (the-as float #x6)
|
|
:rand-shot-delay (seconds 108.42)
|
|
)
|
|
)
|
|
|
|
(defmethod set-time-limit ((this task-manager-desert-bbush-ring-6))
|
|
(set-setting! 'kg-enemy-settings #f 0.0 *bbush-ring-6-kg-squad-member-settings*)
|
|
(call-parent-method this)
|
|
(none)
|
|
)
|
|
|
|
;; WARN: Return type mismatch string vs none.
|
|
(defmethod task-manager-desert-bbush-ring-method-32 ((this task-manager-desert-bbush-ring-6))
|
|
(format 0 "tag1~%")
|
|
"t-manager-8"
|
|
(none)
|
|
)
|
|
|
|
(deftype desert-chase-ring (process-drawable)
|
|
((mat matrix :inline)
|
|
(taskman handle)
|
|
(turbo-handle handle)
|
|
(alt-actor entity-actor)
|
|
(ring-radius float)
|
|
(minimap connection-minimap)
|
|
(is-final? symbol)
|
|
(part-final sparticle-launch-control)
|
|
)
|
|
(:state-methods
|
|
dormant
|
|
idle
|
|
die
|
|
)
|
|
(:methods
|
|
(alloc-trsqv! (_type_) none)
|
|
)
|
|
)
|
|
|
|
|
|
(defun desert-chase-ring-cleared? ((arg0 vector) (arg1 vector) (arg2 desert-chase-ring))
|
|
(let ((s5-0 (new 'stack-no-clear 'vector)))
|
|
(and (< (fabs (vector-dot (vector-x-quaternion! s5-0 (the-as quaternion arg0)) arg1)) (-> arg2 ring-radius))
|
|
(< (fabs (vector-dot (vector-y-quaternion! s5-0 (the-as quaternion arg0)) arg1)) (-> arg2 ring-radius))
|
|
(< (fabs (vector-dot (vector-z-quaternion! s5-0 (the-as quaternion arg0)) arg1)) 4096.0)
|
|
)
|
|
)
|
|
)
|
|
|
|
(defmethod run-logic? ((this desert-chase-ring))
|
|
"Should this process be run? Checked by execute-process-tree."
|
|
#t
|
|
)
|
|
|
|
(defstate dormant (desert-chase-ring)
|
|
:virtual #t
|
|
:event (behavior ((proc process) (argc int) (message symbol) (block event-message-block))
|
|
(case message
|
|
(('trigger)
|
|
(if (type? proc task-manager-desert-bbush-ring)
|
|
(set! (-> self taskman) (process->handle proc))
|
|
)
|
|
(go-virtual idle)
|
|
)
|
|
(('trigger-final)
|
|
(when (type? proc task-manager-desert-bbush-ring)
|
|
(set! (-> self is-final?) #t)
|
|
(set! (-> self taskman) (process->handle proc))
|
|
)
|
|
(go-virtual idle)
|
|
)
|
|
)
|
|
)
|
|
:trans (behavior ()
|
|
0
|
|
)
|
|
:code sleep-code
|
|
:post (behavior ()
|
|
0
|
|
)
|
|
)
|
|
|
|
(defstate idle (desert-chase-ring)
|
|
:virtual #t
|
|
:event (behavior ((proc process) (argc int) (message symbol) (block event-message-block))
|
|
(case message
|
|
(('fail)
|
|
(if (nonzero? (-> self part))
|
|
(kill-particles (-> self part))
|
|
)
|
|
(go-virtual die)
|
|
)
|
|
)
|
|
)
|
|
:enter (behavior ()
|
|
(cond
|
|
((-> self is-final?)
|
|
(if (logtest? (-> *part-group-id-table* 1552 flags) (sp-group-flag sp13))
|
|
(part-tracker-spawn
|
|
part-tracker-subsampler
|
|
:to self
|
|
:group (-> *part-group-id-table* 1552)
|
|
:mat-joint (-> self mat)
|
|
)
|
|
(part-tracker-spawn part-tracker :to self :group (-> *part-group-id-table* 1552) :mat-joint (-> self mat))
|
|
)
|
|
)
|
|
((logtest? (-> *part-group-id-table* 1551 flags) (sp-group-flag sp13))
|
|
(part-tracker-spawn
|
|
part-tracker-subsampler
|
|
:to self
|
|
:group (-> *part-group-id-table* 1551)
|
|
:mat-joint (-> self mat)
|
|
)
|
|
)
|
|
(else
|
|
(part-tracker-spawn part-tracker :to self :group (-> *part-group-id-table* 1551) :mat-joint (-> self mat))
|
|
)
|
|
)
|
|
(sound-play "ring-create")
|
|
(set-time! (-> self state-time))
|
|
(set! (-> self minimap) (add-icon! *minimap* self (the-as uint 13) (the-as int #f) (the-as vector #t) 0))
|
|
(when (-> self alt-actor)
|
|
(format 0 "setting-up turbo~%")
|
|
(turbo-pickup-spawn (-> self alt-actor extra trans))
|
|
)
|
|
)
|
|
:trans (behavior ()
|
|
(let ((v1-0 *target*)
|
|
(a1-0 (new 'stack-no-clear 'vector))
|
|
)
|
|
(when v1-0
|
|
(cond
|
|
((focus-test? v1-0 pilot)
|
|
(let ((a2-1 (handle->process (-> v1-0 pilot vehicle))))
|
|
(set! (-> a1-0 quad) (-> (the-as vehicle a2-1) root root-prim prim-core world-sphere quad))
|
|
)
|
|
)
|
|
(else
|
|
(set! (-> a1-0 quad) (-> v1-0 control trans quad))
|
|
(+! (-> a1-0 y) 12288.0)
|
|
)
|
|
)
|
|
(vector-! a1-0 a1-0 (-> self root trans))
|
|
(let ((a0-12 (-> self root quat)))
|
|
(when (desert-chase-ring-cleared? (the-as vector a0-12) a1-0 self)
|
|
(if (-> self is-final?)
|
|
(sound-play "ring-final")
|
|
(sound-play "ring-pass")
|
|
)
|
|
(send-event (handle->process (-> self taskman)) 'ring-hit)
|
|
(if (nonzero? (-> self part))
|
|
(kill-particles (-> self part))
|
|
)
|
|
(cond
|
|
((-> self is-final?)
|
|
(if (logtest? (-> *part-group-id-table* 1550 flags) (sp-group-flag sp13))
|
|
(part-tracker-spawn
|
|
part-tracker-subsampler
|
|
:to self
|
|
:group (-> *part-group-id-table* 1550)
|
|
:mat-joint (-> self mat)
|
|
)
|
|
(part-tracker-spawn part-tracker :to self :group (-> *part-group-id-table* 1550) :mat-joint (-> self mat))
|
|
)
|
|
)
|
|
((logtest? (-> *part-group-id-table* 1549 flags) (sp-group-flag sp13))
|
|
(part-tracker-spawn
|
|
part-tracker-subsampler
|
|
:to self
|
|
:group (-> *part-group-id-table* 1549)
|
|
:mat-joint (-> self mat)
|
|
)
|
|
)
|
|
(else
|
|
(part-tracker-spawn part-tracker :to self :group (-> *part-group-id-table* 1549) :mat-joint (-> self mat))
|
|
)
|
|
)
|
|
(go-virtual die)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
:code sleep-code
|
|
:post (behavior ()
|
|
(when (time-elapsed? (-> self state-time) (seconds 0.4))
|
|
(cond
|
|
((-> self is-final?)
|
|
(if (nonzero? (-> self part-final))
|
|
(spawn-from-mat (-> self part-final) (-> self mat))
|
|
)
|
|
)
|
|
(else
|
|
(if (nonzero? (-> self part))
|
|
(spawn-from-mat (-> self part) (-> self mat))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
(defstate die (desert-chase-ring)
|
|
:virtual #t
|
|
:code (behavior ()
|
|
(kill-callback (-> *minimap* engine) (-> self minimap))
|
|
(while (-> self child)
|
|
(suspend)
|
|
)
|
|
(go-virtual dormant)
|
|
)
|
|
)
|
|
|
|
;; og:preserve-this duplicate
|
|
; (defmethod run-logic? ((this desert-chase-ring))
|
|
; "Should this process be run? Checked by execute-process-tree."
|
|
; #t
|
|
; )
|
|
|
|
(defmethod alloc-trsqv! ((this desert-chase-ring))
|
|
(set! (-> this root) (new 'process 'trsqv))
|
|
0
|
|
(none)
|
|
)
|
|
|
|
(defmethod relocate ((this desert-chase-ring) (offset int))
|
|
(if (nonzero? (-> this part-final))
|
|
(&+! (-> this part-final) offset)
|
|
)
|
|
(call-parent-method this offset)
|
|
)
|
|
|
|
(defmethod deactivate ((this desert-chase-ring))
|
|
"Make a process dead, clean it up, remove it from the active pool, and return to dead pool."
|
|
(if (nonzero? (-> this part-final))
|
|
(kill-particles (-> this part-final))
|
|
)
|
|
(call-parent-method this)
|
|
(none)
|
|
)
|
|
|
|
(defmethod init-from-entity! ((this desert-chase-ring) (arg0 entity-actor))
|
|
(set-ring-particle-texture)
|
|
(alloc-trsqv! this)
|
|
(process-drawable-from-entity! this arg0)
|
|
(set! (-> this ring-radius) (res-lump-float arg0 'ring-radius :default 24576.0))
|
|
(quaternion->matrix (-> this mat) (-> this root quat))
|
|
(set! (-> this mat trans quad) (-> this root trans quad))
|
|
(set! (-> this part) (create-launch-control (-> *part-group-id-table* 1547) this))
|
|
(set! (-> this part-final) (create-launch-control (-> *part-group-id-table* 1548) this))
|
|
(logclear! (-> this mask) (process-mask actor-pause))
|
|
(set! (-> this alt-actor) (entity-actor-lookup (-> this entity) 'alt-actor 0))
|
|
(set! (-> this is-final?) #f)
|
|
(go (method-of-object this dormant))
|
|
)
|
|
|
|
(deftype spirit (process-drawable)
|
|
((part-subsampler sparticle-subsampler)
|
|
(sound-id sound-id)
|
|
(sound-id-2 sound-id)
|
|
(play-pixie? symbol)
|
|
(goal-part sparticle-launch-control)
|
|
(draw-start-goal? symbol)
|
|
)
|
|
(:state-methods
|
|
idle
|
|
dormant
|
|
explode
|
|
)
|
|
)
|
|
|
|
|
|
(defstate explode (spirit)
|
|
:virtual #t
|
|
:enter (behavior ()
|
|
(cond
|
|
((logtest? (-> *part-group-id-table* 1546 flags) (sp-group-flag sp13))
|
|
(set! (-> *launch-matrix* trans quad) (-> self root trans quad))
|
|
(part-tracker-spawn part-tracker-subsampler :to self :group (-> *part-group-id-table* 1546))
|
|
)
|
|
(else
|
|
(set! (-> *launch-matrix* trans quad) (-> self root trans quad))
|
|
(part-tracker-spawn part-tracker :to self :group (-> *part-group-id-table* 1546))
|
|
)
|
|
)
|
|
)
|
|
:code sleep-code
|
|
)
|
|
|
|
(defstate dormant (spirit)
|
|
:virtual #t
|
|
:event (behavior ((proc process) (argc int) (message symbol) (block event-message-block))
|
|
(case message
|
|
(('trans)
|
|
(let ((v1-1 (the-as object (-> block param 0)))
|
|
(v0-0 (the-as object (-> self root trans)))
|
|
)
|
|
(set! (-> (the-as vector v0-0) quad) (-> (the-as vector v1-1) quad))
|
|
v0-0
|
|
)
|
|
)
|
|
(('play-pixie)
|
|
(go-virtual idle)
|
|
)
|
|
(('goal)
|
|
(go-virtual explode)
|
|
)
|
|
)
|
|
)
|
|
:trans (behavior ()
|
|
(sound-play "magic-trail" :id (-> self sound-id-2))
|
|
(spawn (-> self goal-part) (-> self root trans))
|
|
)
|
|
:code sleep-code
|
|
)
|
|
|
|
(defstate idle (spirit)
|
|
:virtual #t
|
|
:event (behavior ((proc process) (argc int) (message symbol) (block event-message-block))
|
|
(case message
|
|
(('trans)
|
|
(let ((v1-1 (the-as object (-> block param 0)))
|
|
(v0-0 (the-as object (-> self root trans)))
|
|
)
|
|
(set! (-> (the-as vector v0-0) quad) (-> (the-as vector v1-1) quad))
|
|
v0-0
|
|
)
|
|
)
|
|
(('play-pixie)
|
|
(set! (-> self play-pixie?) #t)
|
|
(set! (-> self draw-start-goal?) #f)
|
|
#f
|
|
)
|
|
(('goal-state)
|
|
(set! (-> self draw-start-goal?) #t)
|
|
(go-virtual dormant)
|
|
)
|
|
)
|
|
)
|
|
:trans (behavior ()
|
|
(spawn (-> self part) (-> self root trans))
|
|
(init-with-vec! (-> self part-subsampler) (-> self root trans))
|
|
(sound-play "magic-trail" :id (-> self sound-id-2))
|
|
(sound-play-by-name
|
|
(static-sound-name "flying-pixie")
|
|
(-> self sound-id)
|
|
1024
|
|
(the int (* 1524.0 (doppler-pitch-shift (-> self root trans) (-> self root transv))))
|
|
0
|
|
(sound-group)
|
|
#t
|
|
)
|
|
)
|
|
:code sleep-code
|
|
)
|
|
|
|
;; WARN: Return type mismatch process-drawable vs spirit.
|
|
(defmethod relocate ((this spirit) (offset int))
|
|
(if (nonzero? (-> this part-subsampler))
|
|
(&+! (-> this part-subsampler) offset)
|
|
)
|
|
(if (nonzero? (-> this goal-part))
|
|
(&+! (-> this goal-part) offset)
|
|
)
|
|
(the-as spirit ((method-of-type process-drawable relocate) this offset))
|
|
)
|
|
|
|
(defmethod deactivate ((this spirit))
|
|
"Make a process dead, clean it up, remove it from the active pool, and return to dead pool."
|
|
(if (nonzero? (-> this goal-part))
|
|
(kill-particles (-> this goal-part))
|
|
)
|
|
((method-of-type process-drawable deactivate) this)
|
|
(none)
|
|
)
|
|
|
|
(defbehavior spirit-init-by-other spirit ((arg0 vector))
|
|
(set! (-> self play-pixie?) #f)
|
|
(set! (-> self root) (new 'process 'trsqv))
|
|
(set! (-> self root trans quad) (-> arg0 quad))
|
|
(set! (-> self sound-id) (new-sound-id))
|
|
(set! (-> self sound-id-2) (new-sound-id))
|
|
(set! (-> self part) (create-launch-control (-> *part-group-id-table* 1541) self))
|
|
self
|
|
(set! (-> self part-subsampler)
|
|
(new 'process 'sparticle-subsampler *sp-particle-system-2d* (-> *part-id-table* 5117) 3.0)
|
|
)
|
|
(set! (-> self goal-part) (create-launch-control (-> *part-group-id-table* 1540) self))
|
|
(set! (-> self draw-start-goal?) #t)
|
|
(go-virtual dormant)
|
|
)
|
|
|
|
(deftype hud-spider-killed (hud-goal)
|
|
()
|
|
)
|
|
|
|
|
|
(defmethod draw ((this hud-spider-killed))
|
|
(set-hud-piece-position! (the-as hud-sprite (-> this sprites)) 65 125)
|
|
(format (clear (-> this strings 0 text)) "~D" (-> this values 0 current))
|
|
(set-as-offset-from! (the-as hud-sprite (-> this strings 0 pos)) (the-as vector4w (-> this sprites)) 0 -8)
|
|
(set-as-offset-from! (the-as hud-sprite (-> this strings 1 pos)) (the-as vector4w (-> this sprites)) 0 -40)
|
|
((method-of-type hud draw) this)
|
|
0
|
|
(none)
|
|
)
|
|
|
|
(defmethod update-values! ((this hud-spider-killed))
|
|
(set! (-> this values 0 target) (the int (-> *game-info* score)))
|
|
((method-of-type hud update-values!) this)
|
|
0
|
|
(none)
|
|
)
|
|
|
|
(defmethod init-callback ((this hud-spider-killed))
|
|
(set! (-> this gui-id)
|
|
(add-process *gui-control* this (gui-channel hud-upper-center-2) (gui-action hidden) (-> this name) 81920.0 0)
|
|
)
|
|
(logior! (-> this flags) (hud-flags show))
|
|
(set! (-> this sprites 0 tid) (the-as texture-id (get-texture hud-scoreboard-01 level-default-minimap)))
|
|
(set! (-> this sprites 0 scale-x) 1.2)
|
|
(set! (-> this sprites 0 flags) (hud-sprite-flags hsf3))
|
|
(alloc-string-if-needed this 0)
|
|
(set! (-> this strings 0 scale) 0.5)
|
|
(set! (-> this strings 0 flags) (font-flags kerning middle large))
|
|
(set! (-> this strings 0 color) (font-color red))
|
|
(alloc-string-if-needed this 1)
|
|
(set! (-> this strings 1 scale) 0.75)
|
|
(set! (-> this strings 1 flags) (font-flags kerning middle large))
|
|
(set! (-> this strings 1 color) (font-color red))
|
|
(let ((s5-0 format)
|
|
(gp-1 (clear (-> this strings 1 text)))
|
|
(s4-0 "~S")
|
|
)
|
|
(format (clear *temp-string*) (lookup-text! *common-text* (text-id kills) #f))
|
|
(s5-0 gp-1 s4-0 *temp-string*)
|
|
)
|
|
0
|
|
(none)
|
|
)
|
|
|
|
(deftype task-manager-bbush-egg-spider (task-manager)
|
|
((actor-group (pointer actor-group))
|
|
(actor-group-count int32)
|
|
(goal-score uint32)
|
|
(hud-score handle)
|
|
(hud-goal handle)
|
|
)
|
|
(:methods
|
|
(task-manager-bbush-egg-spider-method-32 (_type_) none)
|
|
)
|
|
)
|
|
|
|
|
|
(defstate resolution (task-manager-bbush-egg-spider)
|
|
:virtual #t
|
|
:event task-manager-event-handler
|
|
:enter (behavior ()
|
|
(set-time! (-> self state-time))
|
|
)
|
|
:code (behavior ()
|
|
(local-vars (v1-34 object))
|
|
(when (logtest? (-> self info mask) (task-manager-mask resolution-scene))
|
|
(let ((gp-1 (ppointer->handle (process-spawn
|
|
scene-player
|
|
:init scene-player-init
|
|
(-> self info resolution-scene)
|
|
#t
|
|
(-> self info resolution-scene-continue)
|
|
:name "scene-player"
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(while (handle->process (the-as handle gp-1))
|
|
(suspend)
|
|
)
|
|
)
|
|
)
|
|
(task-manager-method-27 self)
|
|
(give *game-info* 'skill (the float (-> self info user-count)) (the-as handle #f))
|
|
(until (< (* 45 (-> self info user-count)) (- (current-time) (-> self state-time)))
|
|
(suspend)
|
|
)
|
|
(let ((gp-2 (-> self info on-complete)))
|
|
(if gp-2
|
|
(script-eval gp-2)
|
|
)
|
|
)
|
|
(task-node-close! (-> self info final-node) 'event)
|
|
(remove-setting! 'allow-progress)
|
|
(while (begin
|
|
(set! v1-34 (or (handle->process (-> self arrow)) (begin
|
|
(countdown (v1-35 4)
|
|
(when (handle->process (-> self hud v1-35))
|
|
(set! v1-34 #t)
|
|
(goto cfg-41)
|
|
)
|
|
)
|
|
#f
|
|
)
|
|
)
|
|
)
|
|
(label cfg-41)
|
|
v1-34
|
|
)
|
|
(suspend)
|
|
)
|
|
)
|
|
)
|
|
|
|
(defmethod task-manager-method-25 ((this task-manager-bbush-egg-spider))
|
|
(dotimes (s5-0 44)
|
|
(let ((s4-0 (-> *vehicle-info* handle-by-vehicle-type s5-0)))
|
|
(when (handle->process s4-0)
|
|
(send-event (handle->process s4-0) 'ignore-damage #f)
|
|
(send-event (handle->process s4-0) 'ignore-impulse #f)
|
|
)
|
|
)
|
|
)
|
|
((method-of-type task-manager task-manager-method-25) this)
|
|
(none)
|
|
)
|
|
|
|
(defmethod task-manager-bbush-egg-spider-method-32 ((this task-manager-bbush-egg-spider))
|
|
(set-setting! 'extra-bank '((desert2 bbush2)) 0.0 0)
|
|
(set-setting! 'music 'despider 0.0 0)
|
|
0
|
|
(none)
|
|
)
|
|
|
|
;; WARN: Return type mismatch float vs none.
|
|
(defmethod set-time-limit ((this task-manager-bbush-egg-spider))
|
|
(local-vars (sv-16 res-tag))
|
|
(let ((t9-0 (method-of-type task-manager set-time-limit)))
|
|
(t9-0 this)
|
|
)
|
|
(set-setting! 'airlock #f 0.0 0)
|
|
(set-setting! 'string-max-height 'abs (meters 8) 0)
|
|
(set-setting! 'string-max-length 'abs (meters 24) 0)
|
|
(set-setting! 'string-min-height 'abs (meters 6) 0)
|
|
(set-setting! 'string-min-length 'abs (meters 20) 0)
|
|
(adjust-player-ammo 5000.0 (pickup-type ammo-yellow))
|
|
(adjust-player-ammo 5000.0 (pickup-type ammo-red))
|
|
(adjust-player-ammo 5000.0 (pickup-type ammo-blue))
|
|
(adjust-player-ammo 5000.0 (pickup-type ammo-dark))
|
|
(set-setting! 'pilot #f 0.0 0)
|
|
(set-setting! 'gun-special-mode #t 0.0 0)
|
|
(task-manager-bbush-egg-spider-method-32 this)
|
|
(let ((s5-0 (entity-by-name "tmanager-4")))
|
|
(when s5-0
|
|
(set! (-> this entity) (the-as entity-actor s5-0))
|
|
(set! (-> this goal-score)
|
|
(res-lump-value s5-0 'goal-score uint :default (the-as uint128 80) :time -1000000000.0)
|
|
)
|
|
(set! sv-16 (new 'static 'res-tag))
|
|
(let ((v1-20 (res-lump-data s5-0 'actor-groups pointer :tag-ptr (& sv-16))))
|
|
(cond
|
|
((and v1-20 (nonzero? (-> sv-16 elt-count)))
|
|
(set! (-> this actor-group-count) (the-as int (-> sv-16 elt-count)))
|
|
(set! (-> this actor-group) (the-as (pointer actor-group) v1-20))
|
|
)
|
|
(else
|
|
(format 0 "ERROR: ~s: entity missing actor-group!~%" (game-task->string (-> this node-info task)))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(set! (-> this hud-score)
|
|
(ppointer->handle
|
|
(process-spawn hud-spider-killed :init hud-init-by-other :name "hud-spider-killed" :to this)
|
|
)
|
|
)
|
|
(set! (-> this hud-goal)
|
|
(ppointer->handle (process-spawn hud-goal :init hud-init-by-other :name "hud-goal" :to this))
|
|
)
|
|
(set! (-> *game-info* goal) (the float (-> this goal-score)))
|
|
(set! (-> *game-info* score) 0.0)
|
|
(none)
|
|
)
|
|
|
|
(defstate active (task-manager-bbush-egg-spider)
|
|
:virtual #t
|
|
:event (behavior ((proc process) (argc int) (message symbol) (block event-message-block))
|
|
(case message
|
|
(('goal)
|
|
(send-event self 'complete)
|
|
)
|
|
(else
|
|
(task-manager-event-handler proc argc message block)
|
|
)
|
|
)
|
|
)
|
|
:enter (behavior ()
|
|
(set-time! (-> self start-time))
|
|
(set! (-> self time-limit) (seconds 60))
|
|
)
|
|
:trans (behavior ()
|
|
(let ((a1-0 (new 'stack-no-clear 'event-message-block)))
|
|
(set! (-> a1-0 from) (process->ppointer self))
|
|
(set! (-> a1-0 num-params) 0)
|
|
(set! (-> a1-0 message) 'count-death)
|
|
(let* ((t9-0 send-event-function)
|
|
(v1-5 (-> self actor-group 0 data 0 actor))
|
|
(v1-7 (t9-0
|
|
(if v1-5
|
|
(-> v1-5 extra process)
|
|
)
|
|
a1-0
|
|
)
|
|
)
|
|
)
|
|
(set! (-> *game-info* score) (the float v1-7))
|
|
(if (= v1-7 (-> self goal-score))
|
|
(send-event self 'complete)
|
|
)
|
|
)
|
|
)
|
|
(hud-timer-handler self)
|
|
)
|
|
:code (behavior ()
|
|
(set-setting! 'minimap 'clear 0.0 (minimap-flag minimap))
|
|
(until #f
|
|
(dotimes (v1-2 44)
|
|
(let ((gp-0 (-> *vehicle-info* handle-by-vehicle-type v1-2)))
|
|
(when (handle->process gp-0)
|
|
(send-event (handle->process gp-0) 'ignore-damage #t)
|
|
(send-event (handle->process gp-0) 'ignore-impulse #t)
|
|
(goto cfg-27)
|
|
)
|
|
)
|
|
)
|
|
(suspend)
|
|
)
|
|
#f
|
|
(until #f
|
|
(label cfg-27)
|
|
(suspend)
|
|
)
|
|
#f
|
|
)
|
|
)
|
|
|
|
(deftype task-manager-bbush-spirit-chase (task-manager)
|
|
((actor-group (pointer actor-group))
|
|
(actor-group-count int32)
|
|
(path-pos float)
|
|
(trans vector :inline)
|
|
(touched symbol)
|
|
(spirit handle)
|
|
(current-curve-distance float)
|
|
(current-curve-length float)
|
|
(min-spirit-vel float)
|
|
(current-spirit-vel float)
|
|
(high-spirit-vel float)
|
|
(fail-radius float)
|
|
(chase-distance float)
|
|
(start-offset-vel float)
|
|
(sound-id sound-id)
|
|
)
|
|
(:methods
|
|
(get-entity-name (_type_) string)
|
|
(task-manager-bbush-spirit-chase-method-33 (_type_) float)
|
|
(task-manager-bbush-spirit-chase-method-34 (_type_) float)
|
|
(set-sbanks (_type_) none)
|
|
)
|
|
)
|
|
|
|
|
|
(defstate resolution (task-manager-bbush-spirit-chase)
|
|
:virtual #t
|
|
:event task-manager-event-handler
|
|
:enter (behavior ()
|
|
(set-time! (-> self state-time))
|
|
)
|
|
:code (behavior ()
|
|
(local-vars (v1-38 object))
|
|
(when (logtest? (-> self info mask) (task-manager-mask resolution-scene))
|
|
(let ((gp-1
|
|
(ppointer->handle
|
|
(process-spawn
|
|
scene-player
|
|
:init scene-player-init
|
|
(-> self info resolution-scene)
|
|
#t
|
|
(-> self info resolution-scene-continue)
|
|
:name "scene-player"
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(while (handle->process (the-as handle gp-1))
|
|
(suspend)
|
|
)
|
|
)
|
|
)
|
|
(task-manager-method-27 self)
|
|
(set-time! (-> self state-time))
|
|
(give *game-info* 'skill (the float (-> self info user-count)) (the-as handle #f))
|
|
(set-action!
|
|
*gui-control*
|
|
(gui-action play)
|
|
(-> self sound-id)
|
|
(gui-channel none)
|
|
(gui-action none)
|
|
(the-as string #f)
|
|
(the-as (function gui-connection symbol) #f)
|
|
(the-as process #f)
|
|
)
|
|
(until (< (* 45 (-> self info user-count)) (- (current-time) (-> self state-time)))
|
|
(suspend)
|
|
)
|
|
(let ((gp-2 (-> self info on-complete)))
|
|
(if gp-2
|
|
(script-eval gp-2)
|
|
)
|
|
)
|
|
(task-node-close! (-> self info final-node) 'event)
|
|
(remove-setting! 'allow-progress)
|
|
(while (begin
|
|
(set! v1-38 (or (handle->process (-> self arrow)) (begin
|
|
(countdown (v1-39 4)
|
|
(when (handle->process (-> self hud v1-39))
|
|
(set! v1-38 #t)
|
|
(goto cfg-41)
|
|
)
|
|
)
|
|
#f
|
|
)
|
|
)
|
|
)
|
|
(label cfg-41)
|
|
v1-38
|
|
)
|
|
(suspend)
|
|
)
|
|
)
|
|
)
|
|
|
|
(defmethod set-sbanks ((this task-manager-bbush-spirit-chase))
|
|
(cond
|
|
((= (status-of-level-and-borrows *level* 'waswide #f) 'active)
|
|
(set-setting! 'extra-bank '((wascity3 bbush1)) 0.0 0)
|
|
(set-setting! 'music 'waspirit 0.0 0)
|
|
)
|
|
(else
|
|
(set-setting! 'extra-bank '((desert2 bbush1)) 0.0 0)
|
|
(set-setting! 'music 'despirit 0.0 0)
|
|
)
|
|
)
|
|
0
|
|
(none)
|
|
)
|
|
|
|
(defmethod get-entity-name ((this task-manager-bbush-spirit-chase))
|
|
"tmanager-5"
|
|
)
|
|
|
|
(defmethod task-manager-bbush-spirit-chase-method-33 ((this task-manager-bbush-spirit-chase))
|
|
4096.0
|
|
)
|
|
|
|
(defmethod task-manager-bbush-spirit-chase-method-34 ((this task-manager-bbush-spirit-chase))
|
|
655360.0
|
|
)
|
|
|
|
;; WARN: Return type mismatch object vs none.
|
|
(defmethod set-time-limit ((this task-manager-bbush-spirit-chase))
|
|
(local-vars (sv-16 res-tag))
|
|
(let ((t9-0 (method-of-type task-manager set-time-limit)))
|
|
(t9-0 this)
|
|
)
|
|
(set-setting! 'airlock #f 0.0 0)
|
|
(set! (-> this path-pos) 0.0)
|
|
(set! (-> this touched) #f)
|
|
(set! (-> this spirit) (ppointer->handle (process-spawn spirit *null-vector* :name "spirit" :to this)))
|
|
(logclear! (-> this mask) (process-mask actor-pause))
|
|
(let ((s5-2 (entity-by-name (get-entity-name this))))
|
|
(when s5-2
|
|
(set! (-> this min-spirit-vel) (res-lump-float s5-2 'min-spirit-vel :default 163840.0))
|
|
(set! (-> this high-spirit-vel) (res-lump-float s5-2 'high-spirit-vel :default 163840.0))
|
|
(set! (-> this fail-radius) (res-lump-float s5-2 'fail-radius :default 655360.0))
|
|
(set! (-> this chase-distance) (res-lump-float s5-2 'chase-distance :default 102400.0))
|
|
(set! (-> this start-offset-vel) (res-lump-float s5-2 'start-offset-vel :default 20480.0))
|
|
(format #t "new-vel: ~f~%" (* 0.00024414062 (-> this start-offset-vel)))
|
|
(set! (-> this entity) (the-as entity-actor s5-2))
|
|
(set! sv-16 (new 'static 'res-tag))
|
|
(let ((v1-19 (res-lump-data s5-2 'actor-groups pointer :tag-ptr (& sv-16))))
|
|
(cond
|
|
((and v1-19 (nonzero? (-> sv-16 elt-count)))
|
|
(set! (-> this actor-group-count) (the-as int (-> sv-16 elt-count)))
|
|
(set! (-> this actor-group) (the-as (pointer actor-group) v1-19))
|
|
)
|
|
(else
|
|
(format 0 "ERROR: ~s: entity missing actor-group!~%" (game-task->string (-> this node-info task)))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(set-sbanks this)
|
|
(set! (-> this sound-id) (new 'static 'sound-id))
|
|
(set! (-> this current-spirit-vel) (-> this min-spirit-vel))
|
|
(format #t "min-spirit-vel: ~f~%" (* 0.00024414062 (-> this min-spirit-vel)))
|
|
(none)
|
|
)
|
|
|
|
(defstate active (task-manager-bbush-spirit-chase)
|
|
:virtual #t
|
|
:event (behavior ((proc process) (argc int) (message symbol) (block event-message-block))
|
|
(case message
|
|
(('goal)
|
|
(send-event self 'complete)
|
|
)
|
|
(else
|
|
(task-manager-event-handler proc argc message block)
|
|
)
|
|
)
|
|
)
|
|
:enter (behavior ()
|
|
(set-time! (-> self start-time))
|
|
(set! (-> self time-limit) (seconds 60))
|
|
(set! (-> self current-curve-distance) 1.0)
|
|
(set! (-> self current-curve-distance) 0.0)
|
|
)
|
|
:trans (behavior ()
|
|
(local-vars (sv-240 vector) (sv-256 vector) (sv-272 vector))
|
|
(rlet ((vf0 :class vf)
|
|
(vf1 :class vf)
|
|
(vf2 :class vf)
|
|
)
|
|
(init-vf0-vector)
|
|
(when (nonzero? (-> self actor-group))
|
|
(dotimes (gp-0 (+ (length (-> self actor-group 0)) -1))
|
|
(cond
|
|
((and (>= (-> self path-pos) (the float gp-0)) (>= (the float (+ gp-0 1)) (-> self path-pos)))
|
|
(let ((v1-7 (-> self actor-group 0 data gp-0))
|
|
(a1-2 (-> self actor-group 0 data (+ gp-0 1)))
|
|
)
|
|
(when (and v1-7 a1-2)
|
|
(let ((s3-0 (-> v1-7 actor))
|
|
(s5-0 (-> a1-2 actor))
|
|
(s4-0 (new 'stack 'cubic-curve))
|
|
)
|
|
(new 'stack-no-clear 'vector)
|
|
(when (and s3-0 s5-0)
|
|
(let ((s2-0 s4-0)
|
|
(s1-0 (method-of-type cubic-curve cubic-curve-method-9))
|
|
(s0-0 (-> s3-0 trans))
|
|
)
|
|
(set! sv-240 (new 'stack-no-clear 'vector))
|
|
(let ((v0-1 (vector-z-quaternion! (new 'stack-no-clear 'vector) (-> s3-0 quat)))
|
|
(f0-3 204800.0)
|
|
)
|
|
(.lvf vf1 (&-> v0-1 quad))
|
|
(let ((v1-14 f0-3))
|
|
(.mov vf2 v1-14)
|
|
)
|
|
)
|
|
(.add.x.vf vf1 vf0 vf0 :mask #b1000)
|
|
(.mul.x.vf vf1 vf1 vf2 :mask #b111)
|
|
(.svf (&-> sv-240 quad) vf1)
|
|
(set! sv-256 (-> s5-0 trans))
|
|
(set! sv-272 (new 'stack-no-clear 'vector))
|
|
(let ((v0-2 (vector-z-quaternion! (new 'stack-no-clear 'vector) (-> s5-0 quat)))
|
|
(f0-4 204800.0)
|
|
)
|
|
(.lvf vf1 (&-> v0-2 quad))
|
|
(let ((v1-19 f0-4))
|
|
(.mov vf2 v1-19)
|
|
)
|
|
)
|
|
(.add.x.vf vf1 vf0 vf0 :mask #b1000)
|
|
(.mul.x.vf vf1 vf1 vf2 :mask #b111)
|
|
(.svf (&-> sv-272 quad) vf1)
|
|
(s1-0 s2-0 s0-0 sv-240 sv-256 sv-272)
|
|
)
|
|
(set! (-> self current-curve-length) (vector-vector-distance (-> s3-0 trans) (-> s5-0 trans)))
|
|
(cubic-curve-method-10 s4-0 (-> self trans) (- (-> self path-pos) (the float gp-0)))
|
|
(cond
|
|
((not (time-elapsed? (-> self state-time) (seconds 4)))
|
|
(let ((f0-9 (+ (vector-length (-> *target* control transv)) (-> self start-offset-vel))))
|
|
(seek! (-> self current-spirit-vel) f0-9 (* 0.5 (seconds-per-frame) (-> self high-spirit-vel)))
|
|
)
|
|
)
|
|
((< (vector-vector-distance (target-pos 0) (-> s5-0 trans))
|
|
(+ (vector-vector-distance (-> self trans) (-> s5-0 trans)) (-> self chase-distance))
|
|
)
|
|
(let ((f0-17 (fmax (vector-length (-> *target* control transv)) (-> self high-spirit-vel))))
|
|
(seek! (-> self current-spirit-vel) (-> self high-spirit-vel) (* 0.5 (seconds-per-frame) f0-17))
|
|
)
|
|
)
|
|
(else
|
|
(seek!
|
|
(-> self current-spirit-vel)
|
|
(-> self min-spirit-vel)
|
|
(* 0.5 (seconds-per-frame) (-> self high-spirit-vel))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(else
|
|
(set! (-> self current-curve-distance) 0.0)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(send-event (handle->process (-> self spirit)) 'trans (-> self trans))
|
|
(cond
|
|
((-> self touched)
|
|
(+! (-> self current-curve-distance) (* (-> self current-spirit-vel) (seconds-per-frame)))
|
|
(+! (-> self path-pos) (/ (-> self current-curve-distance) (-> self current-curve-length)))
|
|
(when (< (the float (+ (length (-> self actor-group 0)) -1)) (-> self path-pos))
|
|
(set! (-> self path-pos) (the float (+ (length (-> self actor-group 0)) -1)))
|
|
(send-event (handle->process (-> self spirit)) 'goal-state)
|
|
(set! (-> self sound-id)
|
|
(add-process *gui-control* self (gui-channel bbush) (gui-action queue) "miss001" -99.0 0)
|
|
)
|
|
(when (< (vector-vector-distance (target-pos 0) (-> self trans)) 20480.0)
|
|
(send-event (handle->process (-> self spirit)) 'goal)
|
|
(send-event self 'complete)
|
|
)
|
|
)
|
|
(let ((f0-36 (-> self fail-radius)))
|
|
(if (< (* f0-36 f0-36) (vector-vector-distance-squared (target-pos 0) (-> self trans)))
|
|
(send-event self 'fail)
|
|
)
|
|
)
|
|
)
|
|
(else
|
|
(set-time! (-> self state-time))
|
|
(let ((f0-39 (vector-vector-distance-squared (target-pos 0) (-> self trans)))
|
|
(f1-23 20480.0)
|
|
)
|
|
(when (< f0-39 (* f1-23 f1-23))
|
|
(set! (-> self touched) #t)
|
|
(sound-play "start-pickup")
|
|
(send-event (handle->process (-> self spirit)) 'play-pixie)
|
|
)
|
|
)
|
|
(if (< 409600.0 (vector-vector-distance (target-pos 0) (-> self trans)))
|
|
(send-event self 'fail)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
:code (behavior ()
|
|
(until #f
|
|
(suspend)
|
|
)
|
|
#f
|
|
)
|
|
)
|
|
|
|
(deftype task-manager-bbush-spirit-chase-2 (task-manager-bbush-spirit-chase)
|
|
()
|
|
)
|
|
|
|
|
|
(defmethod get-entity-name ((this task-manager-bbush-spirit-chase-2))
|
|
(format 0 "tag1~%")
|
|
"t-manager-4"
|
|
)
|
|
|
|
(defmethod task-manager-bbush-spirit-chase-method-33 ((this task-manager-bbush-spirit-chase-2))
|
|
18.0
|
|
)
|
|
|
|
(defmethod task-manager-bbush-spirit-chase-method-34 ((this task-manager-bbush-spirit-chase-2))
|
|
163840.0
|
|
)
|
|
|
|
(deftype task-manager-bbush-spirit-chase-3 (task-manager-bbush-spirit-chase)
|
|
()
|
|
)
|
|
|
|
|
|
(defmethod get-entity-name ((this task-manager-bbush-spirit-chase-3))
|
|
(format 0 "tag1~%")
|
|
"t-manager-5"
|
|
)
|
|
|
|
(defmethod set-sbanks ((this task-manager-bbush-spirit-chase-3))
|
|
(set-setting! 'city-sound '(citybb1) 0.0 2)
|
|
(set-setting! 'music 'ctysprit 0.0 0)
|
|
0
|
|
(none)
|
|
)
|
|
|
|
(defmethod task-manager-bbush-spirit-chase-method-33 ((this task-manager-bbush-spirit-chase-3))
|
|
94208.0
|
|
)
|
|
|
|
(defmethod task-manager-bbush-spirit-chase-method-34 ((this task-manager-bbush-spirit-chase-3))
|
|
163840.0
|
|
)
|
|
|
|
(deftype bb-score-a-pickup (process-hidden)
|
|
()
|
|
)
|
|
|
|
|
|
(deftype bb-score-b-pickup (process-hidden)
|
|
()
|
|
)
|
|
|
|
|
|
(deftype bb-score-c-pickup (process-hidden)
|
|
()
|
|
)
|
|
|
|
|
|
(defun-debug bb-score-type->string ((arg0 bb-score-type))
|
|
(case arg0
|
|
(((bb-score-type large))
|
|
"large"
|
|
)
|
|
(((bb-score-type small))
|
|
"small"
|
|
)
|
|
(((bb-score-type medium))
|
|
"medium"
|
|
)
|
|
(else
|
|
"*unknown*"
|
|
)
|
|
)
|
|
)
|
|
|
|
(deftype score-drop (process-drawable)
|
|
((src vector :inline)
|
|
(dst vector :inline)
|
|
(pickup-radius float)
|
|
(score uint32)
|
|
(score-pickup-radius float)
|
|
(bb-score-type bb-score-type)
|
|
(traj trajectory :inline)
|
|
)
|
|
(:state-methods
|
|
idle
|
|
dormant
|
|
die
|
|
)
|
|
)
|
|
|
|
|
|
(defstate dormant (score-drop)
|
|
:virtual #t
|
|
:event (behavior ((proc process) (argc int) (message symbol) (block event-message-block))
|
|
(case message
|
|
(('trigger)
|
|
(set! (-> self src quad) (-> (the-as vector (-> block param 0)) quad))
|
|
(set! (-> self dst quad) (-> self root trans quad))
|
|
(setup-from-to-duration! (-> self traj) (-> self src) (-> self dst) 300.0 -4.551111)
|
|
(go-virtual idle)
|
|
)
|
|
)
|
|
)
|
|
:trans (behavior ()
|
|
(add-debug-sphere #t (bucket-id debug) (-> self dst) (meters 1) *color-green*)
|
|
(add-debug-sphere #t (bucket-id debug) (-> self root trans) (meters 2) *color-red*)
|
|
)
|
|
:code sleep-code
|
|
)
|
|
|
|
(defstate idle (score-drop)
|
|
:virtual #t
|
|
:enter (behavior ()
|
|
(set-time! (-> self state-time))
|
|
(let ((v0-0 (-> self src quad)))
|
|
(set! (-> self root trans quad) v0-0)
|
|
)
|
|
)
|
|
:trans (behavior ()
|
|
(spawn (-> self part) (-> self root trans))
|
|
(/ (the float (- (current-time) (-> self state-time))) (-> self traj time))
|
|
(let ((f0-3 (vector-vector-distance-squared (target-pos 0) (-> self root trans)))
|
|
(f1-1 (-> self pickup-radius))
|
|
)
|
|
(when (< f0-3 (* f1-1 f1-1))
|
|
(send-event (ppointer->process (-> self parent)) 'score (-> self score))
|
|
(case (-> self bb-score-type)
|
|
(((bb-score-type small))
|
|
(sound-play "small-pickup")
|
|
)
|
|
(((bb-score-type medium))
|
|
(sound-play "medium-pickup")
|
|
)
|
|
(((bb-score-type large))
|
|
(sound-play "large-pickup")
|
|
)
|
|
)
|
|
(go-virtual die)
|
|
)
|
|
)
|
|
)
|
|
:code (behavior ()
|
|
(until #f
|
|
(compute-trans-at-time
|
|
(-> self traj)
|
|
(fmin (the float (- (current-time) (-> self state-time))) (-> self traj time))
|
|
(-> self root trans)
|
|
)
|
|
(suspend)
|
|
)
|
|
#f
|
|
)
|
|
:post ja-post
|
|
)
|
|
|
|
(defstate die (score-drop)
|
|
:virtual #t
|
|
:code (behavior ()
|
|
(cleanup-for-death self)
|
|
)
|
|
)
|
|
|
|
(defmethod deactivate ((this score-drop))
|
|
"Make a process dead, clean it up, remove it from the active pool, and return to dead pool."
|
|
(if (nonzero? (-> this part))
|
|
(kill-particles (-> this part))
|
|
)
|
|
((method-of-type process-drawable deactivate) this)
|
|
(none)
|
|
)
|
|
|
|
;; WARN: Return type mismatch entity-perm-status vs object.
|
|
(defmethod init-from-entity! ((this score-drop) (arg0 entity-actor))
|
|
(process-entity-status! this (entity-perm-status dead) #t)
|
|
)
|
|
|
|
(defbehavior score-drop-init-by-other score-drop ((arg0 entity-actor))
|
|
(process-entity-set! self arg0)
|
|
(set! (-> self root) (new 'process 'trsqv))
|
|
(process-drawable-from-entity! self arg0)
|
|
(logclear! (-> self mask) (process-mask actor-pause))
|
|
(cond
|
|
((= (-> arg0 etype) bb-score-a-pickup)
|
|
(set! (-> self part) (create-launch-control (-> *part-group-id-table* 1545) self))
|
|
(set! (-> self bb-score-type) (bb-score-type small))
|
|
0
|
|
)
|
|
((= (-> arg0 etype) bb-score-b-pickup)
|
|
(set! (-> self part) (create-launch-control (-> *part-group-id-table* 1544) self))
|
|
(set! (-> self bb-score-type) (bb-score-type medium))
|
|
)
|
|
(else
|
|
(set! (-> self part) (create-launch-control (-> *part-group-id-table* 1543) self))
|
|
(set! (-> self bb-score-type) (bb-score-type large))
|
|
)
|
|
)
|
|
(set! (-> self pickup-radius) (res-lump-float arg0 'score-pickup-radius :default 4096.0))
|
|
(format 0 "score-radius: ~f~%" (-> self pickup-radius))
|
|
(set! (-> self score)
|
|
(res-lump-value arg0 'score-amount uint :default (the-as uint128 100) :time -1000000000.0)
|
|
)
|
|
(go-virtual dormant)
|
|
)
|
|
|
|
(deftype task-manager-bbush-spirit-drop (task-manager)
|
|
((actor-group (pointer actor-group))
|
|
(actor-group-count int32)
|
|
(path-pos float)
|
|
(trans vector :inline)
|
|
(touched symbol)
|
|
(spirit handle)
|
|
(score-drop-handles handle 64)
|
|
(score-drop-num int32)
|
|
(current-curve-distance float)
|
|
(current-curve-length float)
|
|
(goal-score uint32)
|
|
(current-score uint32)
|
|
(score-drop-activation-radius float)
|
|
(min-spirit-vel float)
|
|
(high-spirit-vel float)
|
|
(current-spirit-vel float)
|
|
(fail-radius float)
|
|
(hud-score handle)
|
|
(hud-goal handle)
|
|
)
|
|
(:methods
|
|
(get-entity-name (_type_) string)
|
|
(task-manager-bbush-spirit-drop-method-33 (_type_) float)
|
|
(task-manager-bbush-spirit-drop-method-34 (_type_) float)
|
|
(task-manager-bbush-spirit-drop-method-35 (_type_) int)
|
|
(send-trigger (_type_) symbol)
|
|
(spawn-drops (_type_) symbol)
|
|
(set-sbanks (_type_) none)
|
|
)
|
|
)
|
|
|
|
|
|
(defstate resolution (task-manager-bbush-spirit-drop)
|
|
:virtual #t
|
|
:event task-manager-event-handler
|
|
:enter (behavior ()
|
|
(set-time! (-> self state-time))
|
|
)
|
|
:code (behavior ()
|
|
(local-vars (v1-34 object))
|
|
(when (logtest? (-> self info mask) (task-manager-mask resolution-scene))
|
|
(let ((gp-1 (ppointer->handle (process-spawn
|
|
scene-player
|
|
:init scene-player-init
|
|
(-> self info resolution-scene)
|
|
#t
|
|
(-> self info resolution-scene-continue)
|
|
:name "scene-player"
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(while (handle->process (the-as handle gp-1))
|
|
(suspend)
|
|
)
|
|
)
|
|
)
|
|
(task-manager-method-27 self)
|
|
(give *game-info* 'skill (the float (-> self info user-count)) (the-as handle #f))
|
|
(until (< (* 45 (-> self info user-count)) (- (current-time) (-> self state-time)))
|
|
(suspend)
|
|
)
|
|
(let ((gp-2 (-> self info on-complete)))
|
|
(if gp-2
|
|
(script-eval gp-2)
|
|
)
|
|
)
|
|
(task-node-close! (-> self info final-node) 'event)
|
|
(remove-setting! 'allow-progress)
|
|
(while (begin
|
|
(set! v1-34 (or (handle->process (-> self arrow)) (begin
|
|
(countdown (v1-35 4)
|
|
(when (handle->process (-> self hud v1-35))
|
|
(set! v1-34 #t)
|
|
(goto cfg-41)
|
|
)
|
|
)
|
|
#f
|
|
)
|
|
)
|
|
)
|
|
(label cfg-41)
|
|
v1-34
|
|
)
|
|
(suspend)
|
|
)
|
|
)
|
|
)
|
|
|
|
(defmethod set-sbanks ((this task-manager-bbush-spirit-drop))
|
|
(set-setting! 'extra-bank '((desert2 bbush1) (nest2 bbush1)) 0.0 0)
|
|
(set-setting! 'music 'desring 0.0 0)
|
|
0
|
|
(none)
|
|
)
|
|
|
|
(defmethod get-entity-name ((this task-manager-bbush-spirit-drop))
|
|
"tmanager-6"
|
|
)
|
|
|
|
(defmethod task-manager-bbush-spirit-drop-method-33 ((this task-manager-bbush-spirit-drop))
|
|
36.0
|
|
)
|
|
|
|
(defmethod task-manager-bbush-spirit-drop-method-34 ((this task-manager-bbush-spirit-drop))
|
|
655360.0
|
|
)
|
|
|
|
(defmethod task-manager-bbush-spirit-drop-method-35 ((this task-manager-bbush-spirit-drop))
|
|
100
|
|
)
|
|
|
|
(defmethod spawn-drops ((this task-manager-bbush-spirit-drop))
|
|
(when (-> this actor-group 1)
|
|
(set! (-> this score-drop-num) (-> this actor-group 1 length))
|
|
(format 0 "num-drops: ~d~%" (-> this score-drop-num))
|
|
(when (< 1 (-> this actor-group-count))
|
|
(format 0 "activating score-drops~%")
|
|
(dotimes (s5-0 (-> this actor-group 1 length))
|
|
(let ((s4-0 (-> this actor-group 1 data s5-0)))
|
|
(set! (-> this score-drop-handles s5-0)
|
|
(ppointer->handle (process-spawn score-drop (-> s4-0 actor) :name "score-drop" :to this))
|
|
)
|
|
)
|
|
)
|
|
#f
|
|
)
|
|
)
|
|
)
|
|
|
|
(defmethod send-trigger ((this task-manager-bbush-spirit-drop))
|
|
(dotimes (s5-0 (-> this score-drop-num))
|
|
(when (handle->process (-> this score-drop-handles s5-0))
|
|
(let ((s4-0 (-> this score-drop-handles s5-0 process 0)))
|
|
(if (< (vector-vector-distance (-> (the-as spirit s4-0) root trans) (-> this trans))
|
|
(-> this score-drop-activation-radius)
|
|
)
|
|
(send-event s4-0 'trigger (-> this trans))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
#f
|
|
)
|
|
|
|
;; WARN: Return type mismatch object vs none.
|
|
(defmethod set-time-limit ((this task-manager-bbush-spirit-drop))
|
|
(local-vars (sv-16 res-tag))
|
|
(let ((t9-0 (method-of-type task-manager set-time-limit)))
|
|
(t9-0 this)
|
|
)
|
|
(set-setting! 'airlock #f 0.0 0)
|
|
(set! (-> this path-pos) 0.0)
|
|
(set! (-> this touched) #f)
|
|
(set! (-> this spirit) (ppointer->handle (process-spawn spirit *null-vector* :name "spirit" :to this)))
|
|
(let ((s5-2 (entity-by-name (get-entity-name this))))
|
|
(when s5-2
|
|
(set! (-> this entity) (the-as entity-actor s5-2))
|
|
(set! (-> this goal-score)
|
|
(res-lump-value s5-2 'goal-score uint :default (the-as uint128 200) :time -1000000000.0)
|
|
)
|
|
(set! (-> this score-drop-activation-radius)
|
|
(res-lump-float s5-2 'score-drop-activation-radius :default 409600.0)
|
|
)
|
|
(format 0 "activation-radius: ~f~%" (-> this score-drop-activation-radius))
|
|
(set! (-> this min-spirit-vel) (res-lump-float s5-2 'min-spirit-vel :default 163840.0))
|
|
(set! (-> this high-spirit-vel) (res-lump-float s5-2 'high-spirit-vel :default 163840.0))
|
|
(set! (-> this fail-radius) (res-lump-float s5-2 'fail-radius :default 655360.0))
|
|
(set! sv-16 (new 'static 'res-tag))
|
|
(let ((v1-16 (res-lump-data s5-2 'actor-groups pointer :tag-ptr (& sv-16))))
|
|
(cond
|
|
((and v1-16 (nonzero? (-> sv-16 elt-count)))
|
|
(set! (-> this actor-group-count) (the-as int (-> sv-16 elt-count)))
|
|
(set! (-> this actor-group) (the-as (pointer actor-group) v1-16))
|
|
(spawn-drops this)
|
|
)
|
|
(else
|
|
(format 0 "ERROR: ~s: entity missing actor-group!~%" (game-task->string (-> this node-info task)))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(if *cty-attack-controller*
|
|
(logior! (-> *cty-attack-controller* target-attacker flags) (city-attacker-info-flag cai3))
|
|
)
|
|
(set-sbanks this)
|
|
(set! (-> this hud-score)
|
|
(ppointer->handle (process-spawn hud-big-score :init hud-init-by-other :name "hud-big-score" :to this))
|
|
)
|
|
(set! (-> this hud-goal)
|
|
(ppointer->handle (process-spawn hud-goal :init hud-init-by-other :name "hud-goal" :to this))
|
|
)
|
|
(set! (-> *game-info* goal) (the float (-> this goal-score)))
|
|
(set! (-> *game-info* score) 0.0)
|
|
(set! (-> this current-score) (the-as uint 0))
|
|
(set! (-> this current-spirit-vel) (-> this min-spirit-vel))
|
|
(format 0 "num drops: ~d~%" (length (-> this score-drop-handles)))
|
|
(none)
|
|
)
|
|
|
|
(defstate active (task-manager-bbush-spirit-drop)
|
|
:virtual #t
|
|
:event (behavior ((proc process) (argc int) (message symbol) (block event-message-block))
|
|
(case message
|
|
(('goal)
|
|
(send-event self 'complete)
|
|
)
|
|
(('score)
|
|
(let* ((v1-3 (-> block param 0))
|
|
(v0-0 (the-as object (+ (-> self current-score) v1-3)))
|
|
)
|
|
(set! (-> self current-score) (the-as uint v0-0))
|
|
v0-0
|
|
)
|
|
)
|
|
(else
|
|
(task-manager-event-handler proc argc message block)
|
|
)
|
|
)
|
|
)
|
|
:enter (behavior ()
|
|
(set-time! (-> self start-time))
|
|
(set! (-> self time-limit) (seconds 60))
|
|
(set! (-> self current-curve-distance) 1.0)
|
|
(set! (-> self current-curve-distance) 0.0)
|
|
)
|
|
:exit (behavior ()
|
|
(if *cty-attack-controller*
|
|
(logclear! (-> *cty-attack-controller* target-attacker flags) (city-attacker-info-flag cai3))
|
|
)
|
|
)
|
|
:trans (behavior ()
|
|
(local-vars (sv-240 vector) (sv-256 vector) (sv-272 vector))
|
|
(rlet ((vf0 :class vf)
|
|
(vf1 :class vf)
|
|
(vf2 :class vf)
|
|
)
|
|
(init-vf0-vector)
|
|
(set! (-> *game-info* score) (the float (-> self current-score)))
|
|
(when (nonzero? (-> self actor-group))
|
|
(dotimes (gp-0 (+ (length (-> self actor-group 0)) -1))
|
|
(cond
|
|
((and (>= (-> self path-pos) (the float gp-0)) (>= (the float (+ gp-0 1)) (-> self path-pos)))
|
|
(let ((v1-9 (-> self actor-group 0 data gp-0))
|
|
(a1-2 (-> self actor-group 0 data (+ gp-0 1)))
|
|
)
|
|
(when (and v1-9 a1-2)
|
|
(let ((s3-0 (-> v1-9 actor))
|
|
(s5-0 (-> a1-2 actor))
|
|
(s4-0 (new 'stack 'cubic-curve))
|
|
)
|
|
(new 'stack-no-clear 'vector)
|
|
(when (and s3-0 s5-0)
|
|
(let ((s2-0 s4-0)
|
|
(s1-0 (method-of-type cubic-curve cubic-curve-method-9))
|
|
(s0-0 (-> s3-0 trans))
|
|
)
|
|
(set! sv-240 (new 'stack-no-clear 'vector))
|
|
(let ((v0-1 (vector-z-quaternion! (new 'stack-no-clear 'vector) (-> s3-0 quat)))
|
|
(f0-5 204800.0)
|
|
)
|
|
(.lvf vf1 (&-> v0-1 quad))
|
|
(let ((v1-16 f0-5))
|
|
(.mov vf2 v1-16)
|
|
)
|
|
)
|
|
(.add.x.vf vf1 vf0 vf0 :mask #b1000)
|
|
(.mul.x.vf vf1 vf1 vf2 :mask #b111)
|
|
(.svf (&-> sv-240 quad) vf1)
|
|
(set! sv-256 (-> s5-0 trans))
|
|
(set! sv-272 (new 'stack-no-clear 'vector))
|
|
(let ((v0-2 (vector-z-quaternion! (new 'stack-no-clear 'vector) (-> s5-0 quat)))
|
|
(f0-6 204800.0)
|
|
)
|
|
(.lvf vf1 (&-> v0-2 quad))
|
|
(let ((v1-21 f0-6))
|
|
(.mov vf2 v1-21)
|
|
)
|
|
)
|
|
(.add.x.vf vf1 vf0 vf0 :mask #b1000)
|
|
(.mul.x.vf vf1 vf1 vf2 :mask #b111)
|
|
(.svf (&-> sv-272 quad) vf1)
|
|
(s1-0 s2-0 s0-0 sv-240 sv-256 sv-272)
|
|
)
|
|
(set! (-> self current-curve-length) (vector-vector-distance (-> s3-0 trans) (-> s5-0 trans)))
|
|
(cubic-curve-method-10 s4-0 (-> self trans) (- (-> self path-pos) (the float gp-0)))
|
|
(cond
|
|
((< (vector-vector-distance (target-pos 0) (-> s5-0 trans))
|
|
(+ 102400.0 (vector-vector-distance (-> self trans) (-> s5-0 trans)))
|
|
)
|
|
(let ((f0-13 (fmax (vector-length (-> *target* control transv)) (-> self high-spirit-vel))))
|
|
(seek! (-> self current-spirit-vel) (-> self high-spirit-vel) (* 0.5 (seconds-per-frame) f0-13))
|
|
)
|
|
)
|
|
(else
|
|
(seek!
|
|
(-> self current-spirit-vel)
|
|
(-> self min-spirit-vel)
|
|
(* 0.5 (seconds-per-frame) (-> self high-spirit-vel))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(else
|
|
(set! (-> self current-curve-distance) 0.0)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(send-event (handle->process (-> self spirit)) 'trans (-> self trans))
|
|
(send-trigger self)
|
|
(cond
|
|
((-> self touched)
|
|
(+! (-> self current-curve-distance) (* (-> self current-spirit-vel) (seconds-per-frame)))
|
|
(+! (-> self path-pos) (/ (-> self current-curve-distance) (-> self current-curve-length)))
|
|
(when (< (the float (+ (length (-> self actor-group 0)) -1)) (-> self path-pos))
|
|
(set! (-> self path-pos) (the float (+ (length (-> self actor-group 0)) -1)))
|
|
(send-event self 'fail)
|
|
)
|
|
(if (< (-> self fail-radius) (vector-vector-distance (target-pos 0) (-> self trans)))
|
|
(send-event self 'fail)
|
|
)
|
|
(if (or (< (-> self goal-score) (-> self current-score)) (= (-> self current-score) (-> self goal-score)))
|
|
(send-event self 'complete)
|
|
)
|
|
)
|
|
(else
|
|
(let ((f0-32 (vector-vector-distance-squared (target-pos 0) (-> self trans)))
|
|
(f1-17 20480.0)
|
|
)
|
|
(when (< f0-32 (* f1-17 f1-17))
|
|
(set! (-> self touched) #t)
|
|
(sound-play "start-pickup")
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
:code (behavior ()
|
|
(set-setting! 'minimap 'clear 0.0 (minimap-flag minimap))
|
|
(until #f
|
|
(suspend)
|
|
)
|
|
#f
|
|
)
|
|
)
|