mirror of
https://github.com/open-goal/jak-project
synced 2026-06-02 02:00:40 -04:00
637990314b
Closes #736 --------- Co-authored-by: Hat Kid <6624576+Hat-Kid@users.noreply.github.com>
3429 lines
124 KiB
Common Lisp
3429 lines
124 KiB
Common Lisp
;;-*-Lisp-*-
|
|
(in-package goal)
|
|
|
|
;; name: task-control.gc
|
|
;; name in dgo: task-control
|
|
;; dgos: GAME
|
|
|
|
(define-extern task-node-close-upwards (function (array game-task-node-info) int none))
|
|
|
|
;; DECOMP BEGINS
|
|
|
|
(deftype resetter-control (basic)
|
|
((process handle)
|
|
(handle-init-hack symbol :overlay-at process)
|
|
)
|
|
(:methods
|
|
(check-reset (_type_) object)
|
|
(get-resetter (_type_) process)
|
|
(spawn-resetter! (_type_ resetter-params game-task-node-info) symbol)
|
|
(do-reset (_type_) object)
|
|
)
|
|
)
|
|
|
|
|
|
(define *resetter-control* (new 'static 'resetter-control :handle-init-hack #f))
|
|
|
|
(defmethod print ((this resetter-spec))
|
|
(format
|
|
#t
|
|
"#<resetter-spec :continue ~A :reset-mode ~S :node ~S :execute ~A @ #x~X>"
|
|
(-> this continue)
|
|
(-> this reset-mode)
|
|
(game-task-node->string (-> this node))
|
|
(-> this execute)
|
|
this
|
|
)
|
|
this
|
|
)
|
|
|
|
(defun game-task-node->string ((arg0 game-task-node))
|
|
(-> *game-info* sub-task-list arg0 name)
|
|
)
|
|
|
|
(defmethod get-play-list-idx ((this game-task-info))
|
|
(let ((v1-1 (-> *game-info* play-list)))
|
|
(countdown (a1-0 (-> v1-1 length))
|
|
(if (= this (-> v1-1 a1-0))
|
|
(return a1-0)
|
|
)
|
|
)
|
|
)
|
|
0
|
|
)
|
|
|
|
(defmethod get-idx-in-task-list ((this game-task-node-info))
|
|
(let ((v1-1 (-> *game-info* sub-task-list)))
|
|
(countdown (a1-0 (-> v1-1 length))
|
|
(if (= this (-> v1-1 a1-0))
|
|
(return a1-0)
|
|
)
|
|
)
|
|
)
|
|
0
|
|
)
|
|
|
|
(defun reset-city-squad-control ((arg0 symbol))
|
|
(if (and (nonzero? *cty-attack-controller*) *cty-attack-controller*)
|
|
(cty-attack-reset arg0 #f #f)
|
|
)
|
|
(none)
|
|
)
|
|
|
|
(defun city-task-faction-commands ()
|
|
(if (or (zero? *cty-faction-manager*) (not *cty-faction-manager*))
|
|
(return 0)
|
|
)
|
|
(setup-city-task-faction)
|
|
)
|
|
|
|
(defun evaluate-faction-commands ((arg0 pair))
|
|
(if (or (zero? *cty-faction-manager*) (not *cty-faction-manager*) (zero? arg0))
|
|
(return 0)
|
|
)
|
|
(cty-faction-evaluate-commands arg0)
|
|
)
|
|
|
|
(defun update-task-masks ((arg0 symbol))
|
|
(local-vars (a3-2 symbol))
|
|
(if (= arg0 'none)
|
|
(return 0)
|
|
)
|
|
(do-nothing *level*)
|
|
(cond
|
|
((or (= arg0 'debug) (= arg0 'level))
|
|
)
|
|
((logtest? (-> *game-info* secrets) (game-secrets hero-mode))
|
|
(set! (-> *game-info* features) (game-feature
|
|
gun
|
|
gun-red-1
|
|
gun-red-2
|
|
gun-red-3
|
|
gun-yellow-1
|
|
gun-yellow-2
|
|
gun-yellow-3
|
|
gun-blue-1
|
|
gun-blue-2
|
|
gun-blue-3
|
|
gun-dark-1
|
|
gun-dark-2
|
|
gun-dark-3
|
|
board
|
|
gun-upgrade-yellow-ammo-1
|
|
gun-upgrade-yellow-ammo-2
|
|
gun-upgrade-red-ammo-1
|
|
gun-upgrade-red-ammo-2
|
|
gun-upgrade-blue-ammo-1
|
|
gun-upgrade-blue-ammo-2
|
|
gun-upgrade-dark-ammo-1
|
|
gun-upgrade-dark-ammo-2
|
|
board-launch
|
|
board-zap
|
|
darkjak
|
|
darkjak-bomb0
|
|
darkjak-bomb1
|
|
lightjak
|
|
lightjak-regen
|
|
lightjak-freeze
|
|
lightjak-shield
|
|
armor0
|
|
armor1
|
|
armor2
|
|
armor3
|
|
lighteco
|
|
darkeco
|
|
)
|
|
)
|
|
(set! (-> *game-info* items) (game-items))
|
|
(set! (-> *game-info* vehicles) (game-vehicles v-turtle v-snake v-scorpion v-toad v-rhino))
|
|
(set! (-> *game-info* light-crystal) 0.0)
|
|
(set! (-> *game-info* dark-crystal) 0.0)
|
|
)
|
|
(else
|
|
(set! (-> *game-info* features) (game-feature))
|
|
(set! (-> *game-info* items) (game-items))
|
|
(set! (-> *game-info* vehicles) (game-vehicles))
|
|
(set! (-> *game-info* light-crystal) 0.0)
|
|
(set! (-> *game-info* dark-crystal) 0.0)
|
|
)
|
|
)
|
|
(let ((s5-0 (-> *minimap* engine alive-list)))
|
|
(while s5-0
|
|
(let ((s4-0 s5-0))
|
|
(if (and (logtest? (-> s4-0 flags) (minimap-flag task-graph))
|
|
(or (not (game-task-node-info-method-12 (-> *game-info* sub-task-list (-> s4-0 node))))
|
|
(not (minimap-class-node-method-9 (-> s4-0 class)))
|
|
)
|
|
)
|
|
(logior! (-> s4-0 flags) (minimap-flag fade-out))
|
|
)
|
|
)
|
|
(set! s5-0 (-> s5-0 next))
|
|
)
|
|
)
|
|
(let ((v1-43 (-> *game-info* task-node-exclusive)))
|
|
(set! (-> v1-43 length) 0)
|
|
(let ((a0-10 (-> *game-info* sub-task-list)))
|
|
(dotimes (a1-0 (-> a0-10 length))
|
|
(when (nonzero? a1-0)
|
|
(let ((a2-3 (-> a0-10 a1-0)))
|
|
(set! a3-2
|
|
(and (logtest? (-> a2-3 flags) (game-task-node-flag exclusive))
|
|
(not (logtest? (-> a2-3 flags) (game-task-node-flag closed)))
|
|
(begin
|
|
(dotimes (a3-5 4)
|
|
(let ((t1-0 (-> a2-3 parent-node a3-5)))
|
|
(when (and (nonzero? t1-0) (not (logtest? (-> a0-10 t1-0 flags) (game-task-node-flag closed))))
|
|
(set! a3-2 #f)
|
|
(goto cfg-38)
|
|
)
|
|
)
|
|
)
|
|
#t
|
|
)
|
|
)
|
|
)
|
|
(label cfg-38)
|
|
(when a3-2
|
|
(when (< (-> v1-43 length) (-> v1-43 allocated-length))
|
|
(set! (-> v1-43 (-> v1-43 length)) (the-as uint (-> a2-3 task)))
|
|
(+! (-> v1-43 length) 1)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(let ((s5-1
|
|
(lambda ((arg0 pair))
|
|
(let ((s4-0 (-> arg0 car)))
|
|
(while (not (null? (the-as object arg0)))
|
|
(let ((v1-0 (-> (the-as pair s4-0) car))
|
|
(s5-0 (-> (the-as pair (-> (the-as pair s4-0) cdr)) car))
|
|
)
|
|
(-> (the-as pair (-> (the-as pair (-> (the-as pair s4-0) cdr)) cdr)) car)
|
|
(-> (the-as pair (-> (the-as pair (-> (the-as pair (-> (the-as pair s4-0) cdr)) cdr)) cdr)) car)
|
|
(let ((v1-1 (as-type (-> (the-as symbol v1-0) value) level-load-info))
|
|
(a0-11 (-> (the-as pair (-> (the-as pair s4-0) cdr)) cdr))
|
|
)
|
|
(when (and v1-1 (-> (the-as level-load-info v1-1) borrow))
|
|
(case s5-0
|
|
(('alias)
|
|
(set! a0-11 (cond
|
|
((-> (the-as pair a0-11) car)
|
|
(empty)
|
|
a0-11
|
|
)
|
|
(else
|
|
#f
|
|
)
|
|
)
|
|
)
|
|
(set! (-> (the-as level-load-info v1-1) borrow alias) a0-11)
|
|
)
|
|
(else
|
|
(set! (-> (the-as level-load-info v1-1) borrow borrow-info (/ (the-as int s5-0) 8)) a0-11)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(set! arg0 (the-as pair (-> arg0 cdr)))
|
|
(set! s4-0 (-> arg0 car))
|
|
)
|
|
)
|
|
#f
|
|
)
|
|
)
|
|
)
|
|
(let ((s4-1 #f))
|
|
(s5-1 (-> *game-info* sub-task-list (game-task-node city-start-start) borrow))
|
|
(evaluate-faction-commands (-> *game-info* sub-task-list (game-task-node city-start-start) faction-commands))
|
|
(let ((s3-0 (-> *game-info* sub-task-list)))
|
|
(dotimes (s2-0 (-> s3-0 length))
|
|
(when (nonzero? s2-0)
|
|
(let ((s1-0 (-> s3-0 s2-0)))
|
|
(case arg0
|
|
(('debug 'level)
|
|
)
|
|
(else
|
|
(if (logtest? (-> s1-0 flags) (game-task-node-flag closed))
|
|
(eval-game-task-cmd! s1-0)
|
|
)
|
|
)
|
|
)
|
|
(when (game-task-node-info-method-12 s1-0)
|
|
(if (-> s1-0 on-open)
|
|
(script-eval (-> s1-0 on-open) :key s1-0)
|
|
)
|
|
(when (-> s1-0 when-open)
|
|
(let ((s0-0 (-> s1-0 when-open length)))
|
|
(while (begin (label cfg-75) (nonzero? s0-0))
|
|
(+! s0-0 -1)
|
|
(let ((sv-176 (-> s1-0 when-open s0-0)))
|
|
(case (-> sv-176 actor)
|
|
(((game-task-actor minimap))
|
|
(if (not (minimap-class-node-method-9 (-> *minimap-class-list* (-> sv-176 icon))))
|
|
(goto cfg-75)
|
|
)
|
|
(let ((v1-89 (add-icon! *minimap* *dproc* (-> sv-176 icon) (the-as int (-> sv-176 icon)) (the-as vector #f) s2-0)))
|
|
(when v1-89
|
|
(logior! (-> v1-89 flags) (minimap-flag task-graph))
|
|
(cond
|
|
((and (logtest? (minimap-flag ctywide) (-> v1-89 class flags))
|
|
(logtest? (minimap-flag transport) (-> v1-89 class flags))
|
|
)
|
|
(let ((v1-91 (add-icon! *minimap* *dproc* (the-as uint 21) 21 (the-as vector #f) s2-0)))
|
|
(if v1-91
|
|
(logior! (-> v1-91 flags) (minimap-flag task-graph))
|
|
)
|
|
)
|
|
)
|
|
((and (logtest? (minimap-flag wasall waswide desert) (-> v1-89 class flags))
|
|
(logtest? (minimap-flag transport) (-> v1-89 class flags))
|
|
)
|
|
(let ((v1-96 (add-icon! *minimap* *dproc* (the-as uint 18) 18 (the-as vector #f) s2-0)))
|
|
(if v1-96
|
|
(logior! (-> v1-96 flags) (minimap-flag task-graph))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(s5-1 (-> s1-0 borrow))
|
|
(when (not (null? (-> s1-0 faction-commands)))
|
|
(set! s4-1 #t)
|
|
(evaluate-faction-commands (-> s1-0 faction-commands))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(if (not s4-1)
|
|
(city-task-faction-commands)
|
|
)
|
|
)
|
|
(dotimes (s4-2 (the-as int (-> *setting-control* user-current faction-command-count)))
|
|
(evaluate-faction-commands (-> *setting-control* user-current faction-command s4-2))
|
|
)
|
|
(if (logtest? (game-secrets darkjak-tracking) (-> *game-info* secrets))
|
|
(set! (-> *game-info* features)
|
|
(the-as game-feature (logior (game-feature darkjak-tracking) (-> *game-info* features)))
|
|
)
|
|
)
|
|
(logior! (-> *game-info* features) (-> *game-info* debug-features))
|
|
(logior! (-> *game-info* items) (-> *game-info* debug-items))
|
|
(logior! (-> *game-info* vehicles) (-> *game-info* debug-vehicles))
|
|
(dotimes (s4-3 (the-as int (-> *setting-control* user-current borrow-count)))
|
|
(s5-1 (-> *setting-control* user-current borrow s4-3))
|
|
)
|
|
)
|
|
(case arg0
|
|
(('load)
|
|
)
|
|
(else
|
|
(let ((s5-2 (-> *game-info* sub-task-list)))
|
|
(dotimes (s4-4 (-> s5-2 length))
|
|
(when (nonzero? s4-4)
|
|
(let ((s3-1 (-> s5-2 s4-4)))
|
|
(if (and (-> s3-1 manager) (or (and (logtest? (-> s3-1 flags) (game-task-node-flag closed))
|
|
(not (task-node-closed? (-> s3-1 manager final-node)))
|
|
)
|
|
(game-task-node-info-method-12 s3-1)
|
|
)
|
|
)
|
|
(script-eval '(task-manager) :key s3-1)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(add-borrow-levels *load-state*)
|
|
(dotimes (s5-3 (-> *level* length))
|
|
(let ((a0-75 (-> *level* level s5-3)))
|
|
(if (= (-> a0-75 status) 'active)
|
|
(set-proto-vis! a0-75 arg0)
|
|
)
|
|
)
|
|
)
|
|
(if (logtest? (game-secrets vehicle-fox) (-> *game-info* secrets))
|
|
(logior! (-> *game-info* vehicles) (game-vehicles v-fox))
|
|
)
|
|
(if (logtest? (game-secrets vehicle-mirage) (-> *game-info* secrets))
|
|
(logior! (-> *game-info* vehicles) (game-vehicles v-mirage))
|
|
)
|
|
(if (logtest? (game-secrets vehicle-x-ride) (-> *game-info* secrets))
|
|
(logior! (-> *game-info* vehicles) (game-vehicles v-x-ride))
|
|
)
|
|
(set! (-> *game-info* percent-complete) (calculate-percentage *game-info*))
|
|
0
|
|
)
|
|
|
|
(defmethod set-proto-vis! ((this level) (arg0 symbol))
|
|
(if (= arg0 'none)
|
|
(return 0)
|
|
)
|
|
(set! (-> this task-mask)
|
|
(logior (logand (-> this info base-task-mask) (task-mask task0 task1 task2 task3 task4 task5 task6 task7 done))
|
|
(logand (-> this task-mask) (task-mask primary0))
|
|
)
|
|
)
|
|
(let ((v1-8 (-> this info taskname))
|
|
(a0-4 (-> *game-info* sub-task-list))
|
|
)
|
|
(dotimes (a1-1 (-> a0-4 length))
|
|
(when (nonzero? a1-1)
|
|
(let ((a2-3 (-> a0-4 a1-1)))
|
|
(when (and (logtest? (-> a2-3 flags) (game-task-node-flag closed)) (= (-> a2-3 level) v1-8))
|
|
(cond
|
|
((logtest? (-> a2-3 flags) (game-task-node-flag abs-task-mask))
|
|
(set! (-> this task-mask) (-> a2-3 task-mask))
|
|
)
|
|
((logtest? (-> a2-3 flags) (game-task-node-flag set-task-mask))
|
|
(logior! (-> this task-mask) (-> a2-3 task-mask))
|
|
)
|
|
((logtest? (-> a2-3 flags) (game-task-node-flag clear-task-mask))
|
|
(logclear! (-> this task-mask) (-> a2-3 task-mask))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(case (-> this name)
|
|
(('foresta 'forestb)
|
|
(prototypes-game-visible-set! '("gun-base-cylinder.mb" "gun-base-tubes.mb") #f this)
|
|
(prototypes-game-visible-set!
|
|
'("destroyed-statue-base.mb"
|
|
"destroyed-statue-chunk-a.mb"
|
|
"destroyed-statue-chunk-b.mb"
|
|
"destroyed-statue-eyelid.mb"
|
|
"destroyed-statue-rubble-terrain.mb"
|
|
"fora-grounder-destroyed-statue-lil-rocks.mb"
|
|
"fora-shrub-destroyed-statue-pebbles.mb"
|
|
"neo-spawner-root-a.mb"
|
|
"neo-spawner-root-b.mb"
|
|
)
|
|
(and (task-node-closed? (game-task-node wascity-defend-resolution))
|
|
(not (task-node-closed? (game-task-node precursor-tour-resolution)))
|
|
)
|
|
this
|
|
)
|
|
(prototypes-game-visible-set!
|
|
'("green-eco-vent-a.mb")
|
|
(not (task-node-closed? (game-task-node forest-ring-chase-introduction)))
|
|
this
|
|
)
|
|
)
|
|
(('mhcityb 'mhcitya)
|
|
(prototypes-game-visible-set!
|
|
'("mhcity-de-tower-grind-strand-long-nocol01.mb"
|
|
"mhcity-ground-lower-wall-gapfiller-strand-nub-01.mb"
|
|
"mhcity-ground-lower-wall-veins-small-02.mb"
|
|
"mhcity-wall-vine-thin-c-destrand-01.mb"
|
|
"mhcity-wall-vine-thin-s-destrand-01.mb"
|
|
)
|
|
(not (task-node-closed? (game-task-node city-destroy-darkeco-resolution)))
|
|
this
|
|
)
|
|
)
|
|
(('factoryb)
|
|
(prototypes-game-visible-set!
|
|
'("facb-gun-tower-base-01.mb")
|
|
(not (task-node-closed? (game-task-node factory-sky-battle-tower1)))
|
|
this
|
|
)
|
|
(prototypes-game-visible-set!
|
|
'("facb-gun-tower-base-02.mb")
|
|
(not (task-node-closed? (game-task-node factory-sky-battle-tower2)))
|
|
this
|
|
)
|
|
(prototypes-game-visible-set!
|
|
'("facb-gun-tower-base-03.mb")
|
|
(not (task-node-closed? (game-task-node factory-sky-battle-tower3)))
|
|
this
|
|
)
|
|
(prototypes-game-visible-set!
|
|
'("facb-gun-tower-base-04.mb")
|
|
(not (task-node-closed? (game-task-node factory-sky-battle-tower4)))
|
|
this
|
|
)
|
|
)
|
|
(('precurd)
|
|
(prototypes-game-visible-set!
|
|
'("precur-road-bridge01.mb"
|
|
"precur-road-bridge02.mb"
|
|
"precur-road-bridge03.mb"
|
|
"precur-road-bridge04.mb"
|
|
"precur-road-bridge05.mb"
|
|
)
|
|
(not (task-node-closed? (game-task-node precursor-destroy-ship-escape-continue)))
|
|
this
|
|
)
|
|
)
|
|
(('desertg)
|
|
(prototypes-game-visible-set! '("des-egg.mb") (not (task-node-closed? (game-task-node nest-eggs-wall))) this)
|
|
)
|
|
(('wasstada)
|
|
(prototypes-game-visible-set!
|
|
'("wstd-table.mb")
|
|
(task-node-closed? (game-task-node arena-fight-1-introduction))
|
|
this
|
|
)
|
|
)
|
|
(('desertg)
|
|
(prototypes-game-visible-set! '("des-egg.mb") (not (task-node-closed? (game-task-node nest-eggs-wall))) this)
|
|
)
|
|
(('templea 'templed)
|
|
(prototypes-game-visible-set!
|
|
'("tpl-hide-debris-blocka.mb"
|
|
"tpl-hide-debris-blockb.mb"
|
|
"tpl-hide-debris-plank-8m.mb"
|
|
"tpl-hide-debris-rock1.mb"
|
|
"tpl-hide-sunken-brick-01.mb"
|
|
"tpl-hide-collision-01.mb"
|
|
)
|
|
(task-node-closed? (game-task-node temple-defend-introduction))
|
|
this
|
|
)
|
|
(prototypes-game-visible-set!
|
|
'("tpl-hall-alter-tunnel-section-jnt-hide.mb" "tpl-hall-alter-tunnel-section-hide.mb")
|
|
(not (task-node-closed? (game-task-node temple-tests-resolution)))
|
|
this
|
|
)
|
|
)
|
|
(('ctywide)
|
|
(prototypes-game-visible-set!
|
|
'("palcab-lowres-mhcity-tower-shell.mb"
|
|
"palcab-lowres-mhcity-tower-shelleye-01.mb"
|
|
"palcab-lowres-mhcity-tower-cap.mb"
|
|
"palcab-lowres-mhcity-tower-capdoor-01.mb"
|
|
)
|
|
(not (task-node-closed? (game-task-node tower-destroy-resolution)))
|
|
this
|
|
)
|
|
(prototypes-game-visible-set!
|
|
'("palcab-lowres-mhcity-tower-shell-blasted-01.mb" "palcab-lowres-mhcity-tower-shell-blasted-02.mb")
|
|
(task-node-closed? (game-task-node tower-destroy-resolution))
|
|
this
|
|
)
|
|
)
|
|
(('ctygenb)
|
|
(prototypes-game-visible-set!
|
|
'("city-cable-grindable-turnoff-01.mb"
|
|
"city-cable-grindable-collision-01.mb"
|
|
"city-cable-grindable-collision.mb"
|
|
)
|
|
(task-node-closed? (game-task-node tower-destroy-resolution))
|
|
this
|
|
)
|
|
)
|
|
(('atoll)
|
|
)
|
|
(('ctymarkb)
|
|
)
|
|
(('ctypal)
|
|
)
|
|
(('ctyasha)
|
|
)
|
|
(('stadiumb)
|
|
)
|
|
(('hiphog)
|
|
)
|
|
)
|
|
(logior! (-> this task-mask) (-> *setting-control* user-current task-mask))
|
|
0
|
|
)
|
|
|
|
(defun play-clean ((arg0 symbol))
|
|
(set! *display-entity-errors* #f)
|
|
(set! *display-profile* #f)
|
|
(set! *display-actor-marks* #f)
|
|
(set! (-> *level* play?) #t)
|
|
(time-of-day-setup #t)
|
|
(set! *time-of-day-fast* #f)
|
|
(send-event (ppointer->process *time-of-day*) 'change 'ratio 1.0)
|
|
(let ((t9-2 reset-city-squad-control)
|
|
(a0-5 #f)
|
|
)
|
|
(t9-2 a0-5)
|
|
)
|
|
(when arg0
|
|
(let ((s5-0 (-> *game-info* mode)))
|
|
(set! (-> *game-info* mode) arg0)
|
|
(initialize! *game-info* 'game (the-as game-save #f) (the-as string #f) (the-as resetter-spec #f))
|
|
(set! (-> *game-info* mode) s5-0)
|
|
)
|
|
)
|
|
0
|
|
)
|
|
|
|
;; WARN: Return type mismatch object vs string.
|
|
(defun play-task ((arg0 game-task) (arg1 symbol) (arg2 symbol))
|
|
(persist-with-delay *setting-control* 'fail-music-volume (seconds 5) 'music-volume 'abs 0.0 0)
|
|
(persist-with-delay *setting-control* 'fail-sfx-volume (seconds 5) 'sfx-volume 'abs 0.0 0)
|
|
(persist-with-delay *setting-control* 'fail-dialog-volume (seconds 5) 'dialog-volume 'abs 0.0 0)
|
|
(play-clean arg1)
|
|
(let ((gp-1 (-> *game-info* play-list arg0)))
|
|
(the-as string (cond
|
|
((and (= arg2 'pre-play) (-> gp-1 pre-play-continue))
|
|
(task-node-open! (-> gp-1 pre-play-node) 'menu)
|
|
(-> gp-1 pre-play-continue)
|
|
)
|
|
((and (= arg2 'kiosk) (-> gp-1 kiosk-play-continue))
|
|
(send-event (ppointer->process *time-of-day*) 'change 'hour 7)
|
|
(task-node-open! (-> gp-1 kiosk-play-node) 'event)
|
|
(if (pair? (-> gp-1 kiosk-play-continue))
|
|
(-> (the-as pair (-> gp-1 kiosk-play-continue)) car)
|
|
(-> gp-1 kiosk-play-continue)
|
|
)
|
|
)
|
|
(else
|
|
(if (-> gp-1 play-continue)
|
|
(task-node-open! (-> gp-1 play-node) 'menu)
|
|
)
|
|
(-> gp-1 play-continue)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
(defun restart-mission ()
|
|
(let ((gp-0 #t))
|
|
(let ((s5-0 #f))
|
|
(let ((t9-0 reset-city-squad-control)
|
|
(a0-0 #f)
|
|
)
|
|
(t9-0 a0-0)
|
|
)
|
|
(let ((v1-1 (-> *task-manager-engine* alive-list next0)))
|
|
*task-manager-engine*
|
|
(let ((s4-0 (-> v1-1 next0)))
|
|
(while (!= v1-1 (-> *task-manager-engine* alive-list-end))
|
|
(let ((a0-3 (-> (the-as connection v1-1) param1)))
|
|
(if (not s5-0)
|
|
(set! s5-0 #t)
|
|
)
|
|
(if (and (-> (the-as task-manager a0-3) next-state)
|
|
(let ((v1-7 (-> (the-as task-manager a0-3) next-state name)))
|
|
(or (= v1-7 'complete) (= v1-7 'resolution) (= v1-7 'fail) (= v1-7 'restart))
|
|
)
|
|
)
|
|
(set! s5-0 'busy)
|
|
)
|
|
(if (send-event (the-as process-tree a0-3) 'restart)
|
|
(set! gp-0 #f)
|
|
)
|
|
)
|
|
(set! v1-1 s4-0)
|
|
*task-manager-engine*
|
|
(set! s4-0 (-> s4-0 next0))
|
|
)
|
|
)
|
|
)
|
|
(if (or (and *target* (focus-test? *target* dead) s5-0) (= s5-0 'busy))
|
|
(return (the-as int #f))
|
|
)
|
|
)
|
|
(cond
|
|
((-> *setting-control* user-current restart-info)
|
|
(spawn-resetter!
|
|
*resetter-control*
|
|
(the-as resetter-params (-> *setting-control* user-current restart-info))
|
|
(the-as game-task-node-info #f)
|
|
)
|
|
)
|
|
(gp-0
|
|
(let ((s5-1 (the-as game-task-node-info #f))
|
|
(s4-1 (level-get-target-inside *level*))
|
|
(gp-1 (the-as string #f))
|
|
)
|
|
(when (and s4-1 (not (logtest? (-> s4-1 info level-flags) (level-flags lf0))))
|
|
(let ((s3-0 (-> *game-info* sub-task-list)))
|
|
(dotimes (s2-0 (-> s3-0 length))
|
|
(when (nonzero? s2-0)
|
|
(let ((s1-0 (-> s3-0 s2-0)))
|
|
(if (and (= (-> s1-0 level) (-> s4-1 info taskname))
|
|
(!= (-> s1-0 level) 'city)
|
|
(not (logtest? (-> s1-0 flags) (game-task-node-flag no-restart)))
|
|
(game-task-node-info-method-12 s1-0)
|
|
)
|
|
(set! s5-1 s1-0)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(when s5-1
|
|
(let ((v1-56 (-> *game-info* play-list (-> s5-1 task))))
|
|
(cond
|
|
((and (-> s5-1 reset) (-> s5-1 reset restart-info))
|
|
(spawn-resetter! *resetter-control* (-> s5-1 reset restart-info) (the-as game-task-node-info #f))
|
|
(return 0)
|
|
)
|
|
((-> v1-56 play-continue)
|
|
(set! gp-1 (-> v1-56 play-continue))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(let ((a1-8 (new 'stack-no-clear 'resetter-params)))
|
|
(set! (-> a1-8 flags) (resetter-flag auto-reset text-message no-audio))
|
|
(set! (-> a1-8 message) (resetter-message mission-retry))
|
|
(set! (-> a1-8 retry continue) gp-1)
|
|
(set! (-> a1-8 retry node) (game-task-node none))
|
|
(set! (-> a1-8 retry reset-mode) 'try)
|
|
(set! (-> a1-8 retry execute) #f)
|
|
(set! (-> a1-8 fail node) (game-task-node none))
|
|
(set! (-> a1-8 fail continue) #f)
|
|
(set! (-> a1-8 fail reset-mode) 'life)
|
|
(set! (-> a1-8 fail execute) #f)
|
|
(set! (-> a1-8 reset-delay) (the-as uint 0))
|
|
(set! (-> a1-8 task) (game-task none))
|
|
(set! (-> a1-8 text-message) (text-id null))
|
|
(spawn-resetter! *resetter-control* a1-8 (the-as game-task-node-info #f))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
0
|
|
)
|
|
|
|
;; WARN: Function fail-mission has a return type of none, but the expression builder found a return statement.
|
|
(defun fail-mission ()
|
|
(let ((gp-0 #t))
|
|
(let ((s5-0 #f))
|
|
(let ((t9-0 reset-city-squad-control)
|
|
(a0-0 #f)
|
|
)
|
|
(t9-0 a0-0)
|
|
)
|
|
(let ((v1-1 (-> *task-manager-engine* alive-list next0)))
|
|
*task-manager-engine*
|
|
(let ((s4-0 (-> v1-1 next0)))
|
|
(while (!= v1-1 (-> *task-manager-engine* alive-list-end))
|
|
(let ((a0-3 (-> (the-as connection v1-1) param1)))
|
|
(if (not s5-0)
|
|
(set! s5-0 #t)
|
|
)
|
|
(if (and (-> (the-as task-manager a0-3) next-state)
|
|
(let ((v1-7 (-> (the-as task-manager a0-3) next-state name)))
|
|
(or (= v1-7 'complete) (= v1-7 'resolution) (= v1-7 'fail) (= v1-7 'restart))
|
|
)
|
|
)
|
|
(set! s5-0 'busy)
|
|
)
|
|
(if (send-event (the-as process-tree a0-3) 'fail #t)
|
|
(set! gp-0 #f)
|
|
)
|
|
)
|
|
(set! v1-1 s4-0)
|
|
*task-manager-engine*
|
|
(set! s4-0 (-> s4-0 next0))
|
|
)
|
|
)
|
|
)
|
|
(if (or (and *target* (focus-test? *target* dead) s5-0) (= s5-0 'busy))
|
|
(return #f)
|
|
)
|
|
)
|
|
(cond
|
|
((-> *setting-control* user-current fail-info)
|
|
(spawn-resetter!
|
|
*resetter-control*
|
|
(the-as resetter-params (-> *setting-control* user-current fail-info))
|
|
(the-as game-task-node-info #f)
|
|
)
|
|
)
|
|
(gp-0
|
|
(let ((s4-1 (the-as game-task-node-info #f))
|
|
(s3-0 (level-get-target-inside *level*))
|
|
(gp-1 (the-as string #f))
|
|
(s5-1 138)
|
|
)
|
|
(when (and s3-0 (not (logtest? (-> s3-0 info level-flags) (level-flags lf0))))
|
|
(let ((s2-0 (-> *game-info* sub-task-list)))
|
|
(dotimes (s1-0 (-> s2-0 length))
|
|
(when (nonzero? s1-0)
|
|
(let ((s0-0 (-> s2-0 s1-0)))
|
|
(if (and (= (-> s0-0 level) (-> s3-0 info taskname))
|
|
(!= (-> s0-0 level) 'city)
|
|
(not (logtest? (-> s0-0 flags) (game-task-node-flag no-restart)))
|
|
(game-task-node-info-method-12 s0-0)
|
|
)
|
|
(set! s4-1 s0-0)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(cond
|
|
((and s4-1 (-> s4-1 reset) (-> s4-1 reset fail-info))
|
|
(spawn-resetter! *resetter-control* (-> s4-1 reset fail-info) (the-as game-task-node-info #f))
|
|
(return 0)
|
|
)
|
|
((= (level-status? *level* 'wasall #f) 'active)
|
|
(set! gp-1 "wasdoors-desert")
|
|
(if (and (-> *game-info* current-continue)
|
|
(logtest? (continue-flags race) (-> *game-info* current-continue flags))
|
|
)
|
|
(set! gp-1 (-> *game-info* current-continue name))
|
|
)
|
|
(set! s5-1 1973)
|
|
)
|
|
((and s4-1 (let ((a0-25 (-> *game-info* play-list (-> s4-1 task) play-continue)))
|
|
(when a0-25
|
|
(set! gp-1 a0-25)
|
|
gp-1
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(let ((a1-12 (new 'stack-no-clear 'resetter-params)))
|
|
(set! (-> a1-12 flags) (resetter-flag auto-reset text-message))
|
|
(set! (-> a1-12 message) (resetter-message mission-fail))
|
|
(set! (-> a1-12 retry continue) #f)
|
|
(set! (-> a1-12 retry node) (game-task-node none))
|
|
(set! (-> a1-12 retry reset-mode) 'try)
|
|
(set! (-> a1-12 retry execute) #f)
|
|
(set! (-> a1-12 fail node) (game-task-node none))
|
|
(set! (-> a1-12 fail continue) gp-1)
|
|
(set! (-> a1-12 fail reset-mode) 'life)
|
|
(set! (-> a1-12 fail execute) #f)
|
|
(set! (-> a1-12 reset-delay) (the-as uint 1500))
|
|
(set! (-> a1-12 task) (game-task none))
|
|
(set! (-> a1-12 text-message) (the-as text-id s5-1))
|
|
(spawn-resetter! *resetter-control* a1-12 (the-as game-task-node-info #f))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
0
|
|
(none)
|
|
)
|
|
|
|
(defun task-node-by-name ((arg0 string))
|
|
(let ((s5-0 (-> *game-info* sub-task-list)))
|
|
(dotimes (s4-0 (-> s5-0 length))
|
|
(when (nonzero? s4-0)
|
|
(let ((s3-0 (-> s5-0 s4-0)))
|
|
(if (string= arg0 (-> s3-0 name))
|
|
(return s3-0)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(the-as game-task-node-info #f)
|
|
)
|
|
|
|
(defun task-node-index-by-name ((arg0 string))
|
|
(let ((s5-0 (-> *game-info* sub-task-list)))
|
|
(dotimes (s4-0 (-> s5-0 length))
|
|
(when (nonzero? s4-0)
|
|
(let ((v1-4 (-> s5-0 s4-0)))
|
|
(if (string= arg0 (-> v1-4 name))
|
|
(return s4-0)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
0
|
|
)
|
|
|
|
(defun task-resolution-close! ((arg0 game-task))
|
|
(let ((v1-1 (-> *game-info* sub-task-list)))
|
|
(dotimes (a1-0 (-> v1-1 length))
|
|
(when (nonzero? a1-0)
|
|
(let ((a2-3 (-> v1-1 a1-0)))
|
|
(when (and (= (-> a2-3 task) arg0) (logtest? (-> a2-3 flags) (game-task-node-flag close-task)))
|
|
(open! a2-3 'event)
|
|
(return #t)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
#f
|
|
)
|
|
|
|
(defun task-close! ((arg0 string))
|
|
(let ((s5-0 (-> *game-info* sub-task-list)))
|
|
(dotimes (s4-0 (-> s5-0 length))
|
|
(when (nonzero? s4-0)
|
|
(let ((s3-0 (-> s5-0 s4-0)))
|
|
(when (string= arg0 (-> s3-0 name))
|
|
(let ((gp-2 (not (logtest? (-> s3-0 flags) (game-task-node-flag closed)))))
|
|
(open! s3-0 'event)
|
|
(return gp-2)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(format 0 "ERROR: attempting to close unknown task node ~A.~%" arg0)
|
|
#f
|
|
)
|
|
|
|
(defun task-closed? ((arg0 string))
|
|
(let ((s5-0 (-> *game-info* sub-task-list)))
|
|
(dotimes (s4-0 (-> s5-0 length))
|
|
(when (nonzero? s4-0)
|
|
(let ((s3-0 (-> s5-0 s4-0)))
|
|
(if (string= arg0 (-> s3-0 name))
|
|
(return (logtest? (-> s3-0 flags) (game-task-node-flag closed)))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(format 0 "ERROR: attempting to query closed? of unknown task node ~A.~%" arg0)
|
|
#f
|
|
)
|
|
|
|
(defun open-task-nodes ((arg0 (array game-task-node-info)))
|
|
(local-vars (a3-4 symbol))
|
|
(set! (-> arg0 length) 0)
|
|
(let ((v1-1 (-> *game-info* sub-task-list)))
|
|
(dotimes (a1-0 (-> v1-1 length))
|
|
(when (nonzero? a1-0)
|
|
(let ((a2-3 (-> v1-1 a1-0)))
|
|
(when (and (not (logtest? (-> a2-3 flags) (game-task-node-flag closed)))
|
|
(begin
|
|
(dotimes (a3-3 4)
|
|
(when (and (nonzero? (-> a2-3 parent-node a3-3))
|
|
(not (logtest? (-> v1-1 (-> a2-3 parent-node a3-3) flags) (game-task-node-flag closed)))
|
|
)
|
|
(set! a3-4 #f)
|
|
(goto cfg-14)
|
|
)
|
|
)
|
|
(set! a3-4 #t)
|
|
(label cfg-14)
|
|
(and a3-4 (< (-> arg0 length) (-> arg0 allocated-length)))
|
|
)
|
|
)
|
|
(set! (-> arg0 (-> arg0 length)) a2-3)
|
|
(+! (-> arg0 length) 1)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
arg0
|
|
)
|
|
|
|
(defmethod print ((this game-task-node-info))
|
|
(format
|
|
#t
|
|
"#<game-task-node-info ~S ~S @ #x~X>"
|
|
(-> this name)
|
|
(cond
|
|
((logtest? (-> this flags) (game-task-node-flag closed))
|
|
"closed"
|
|
)
|
|
((game-task-node-info-method-12 this)
|
|
"open"
|
|
)
|
|
(else
|
|
"inactive"
|
|
)
|
|
)
|
|
this
|
|
)
|
|
this
|
|
)
|
|
|
|
(defmethod open! ((this game-task-node-info) (arg0 symbol))
|
|
(when (not (logtest? (-> this flags) (game-task-node-flag closed)))
|
|
(let ((s4-0 (lambda ((arg0 game-task-node-info) (arg1 symbol))
|
|
(logior! (-> arg0 flags) (game-task-node-flag closed))
|
|
(+! (-> *game-info* task-counter) 1)
|
|
(when (zero? (-> arg0 close-time))
|
|
(set! (-> arg0 gem-count) (the-as uint (the int (-> *game-info* gem))))
|
|
(set! (-> arg0 skill-count) (the-as uint (the int (-> *game-info* skill))))
|
|
(set! (-> arg0 close-time) (the-as uint (-> *display* game-clock frame-counter)))
|
|
)
|
|
(if (-> arg0 on-close)
|
|
(script-eval (-> arg0 on-close) :key arg0)
|
|
)
|
|
(when (logtest? (-> arg0 flags) (game-task-node-flag close-task))
|
|
(let ((t9-2 reset-city-squad-control)
|
|
(a0-4 #f)
|
|
)
|
|
(t9-2 a0-4)
|
|
)
|
|
(target-reset-on-task-finish)
|
|
(if (= arg1 'event)
|
|
(menu-secrets-notify-task-node-close (the-as game-task-node arg0))
|
|
)
|
|
)
|
|
(if (logtest? (-> arg0 flags) (game-task-node-flag close-task))
|
|
((lambda ((arg0 game-task-node-info))
|
|
(if *target*
|
|
(send-event *target* 'get-pickup (pickup-type fuel-cell) (the float (-> arg0 task)))
|
|
(give *game-info* 'fuel-cell (the float (-> arg0 task)) (the-as handle #f))
|
|
)
|
|
)
|
|
arg0
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(let ((s2-0 0)
|
|
(s3-0 (new 'stack-no-clear 'array 'game-task-node 64))
|
|
)
|
|
(let ((s1-0 this))
|
|
(loop
|
|
(cond
|
|
((= (-> s1-0 parent-node 0) (game-task-node none))
|
|
(goto cfg-21)
|
|
)
|
|
((= (-> s1-0 parent-node 1) (game-task-node none))
|
|
(let ((v1-10 (-> *game-info* sub-task-list (-> s1-0 parent-node 0))))
|
|
(cond
|
|
((logtest? (-> v1-10 flags) (game-task-node-flag closed))
|
|
(goto cfg-21)
|
|
)
|
|
(else
|
|
(set! (-> s3-0 s2-0) (-> s1-0 parent-node 0))
|
|
(+! s2-0 1)
|
|
(when (< 64 s2-0)
|
|
(break!)
|
|
0
|
|
)
|
|
)
|
|
)
|
|
(set! s1-0 v1-10)
|
|
)
|
|
)
|
|
(else
|
|
(dotimes (s0-0 4)
|
|
(let ((v1-15 (-> s1-0 parent-node s0-0)))
|
|
(if (nonzero? v1-15)
|
|
(open! (-> *game-info* sub-task-list v1-15) 'none)
|
|
)
|
|
)
|
|
)
|
|
(goto cfg-21)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(label cfg-21)
|
|
(while (nonzero? s2-0)
|
|
(+! s2-0 -1)
|
|
(s4-0 (-> *game-info* sub-task-list (-> s3-0 s2-0)) arg0)
|
|
)
|
|
)
|
|
(s4-0 this arg0)
|
|
)
|
|
(let ((s4-1 (-> *game-info* sub-task-list)))
|
|
(dotimes (s3-1 (-> s4-1 length))
|
|
(when (nonzero? s3-1)
|
|
(let ((s2-1 (-> s4-1 s3-1)))
|
|
(if (and (or (logtest? (-> s2-1 flags) (game-task-node-flag auto-close disk-close))
|
|
(and (kiosk?)
|
|
(logtest? (-> this flags) (game-task-node-flag close-task))
|
|
(!= arg0 'menu)
|
|
(logtest? (-> s2-1 flags) (game-task-node-flag kiosk-close))
|
|
)
|
|
)
|
|
(game-task-node-info-method-12 s2-1)
|
|
)
|
|
(open! s2-1 'none)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(update-task-masks arg0)
|
|
)
|
|
0
|
|
)
|
|
|
|
(defun task-node-closed? ((arg0 game-task-node))
|
|
(let ((v1-2 (-> *game-info* sub-task-list arg0)))
|
|
(logtest? (-> v1-2 flags) (game-task-node-flag closed))
|
|
)
|
|
)
|
|
|
|
(defun task-node-close! ((arg0 game-task-node) (arg1 symbol))
|
|
(open! (-> *game-info* sub-task-list arg0) arg1)
|
|
0
|
|
)
|
|
|
|
(defun task-open? ((arg0 string))
|
|
(let ((s5-0 (-> *game-info* sub-task-list))
|
|
(s4-0 0)
|
|
)
|
|
(while (< s4-0 (-> s5-0 length))
|
|
(when (nonzero? s4-0)
|
|
(let ((v1-4 (-> s5-0 s4-0)))
|
|
(if (string= arg0 (-> v1-4 name))
|
|
(return (task-node-open? (the-as game-task-node s4-0)))
|
|
)
|
|
)
|
|
)
|
|
(set! s4-0 (+ s4-0 1))
|
|
)
|
|
)
|
|
(format 0 "ERROR: attempting to query open? of unknown task node ~A.~%" arg0)
|
|
#f
|
|
)
|
|
|
|
(defmethod game-task-node-info-method-11 ((this game-task-node-info) (arg0 symbol))
|
|
(local-vars (v1-19 symbol))
|
|
(when (logtest? (-> this flags) (game-task-node-flag closed))
|
|
(logclear! (-> this flags) (game-task-node-flag closed))
|
|
(+! (-> *game-info* task-counter) 1)
|
|
(if (logtest? (-> this flags) (game-task-node-flag close-task))
|
|
(logclear! (-> *game-info* task-perm-list data (-> this task) status) (entity-perm-status complete))
|
|
)
|
|
(let ((s5-0 (-> *game-info* sub-task-list)))
|
|
(dotimes (s4-0 (-> s5-0 length))
|
|
(when (nonzero? s4-0)
|
|
(let ((a0-4 (-> s5-0 s4-0)))
|
|
(set! v1-19
|
|
(and (logtest? (-> a0-4 flags) (game-task-node-flag closed))
|
|
(begin
|
|
(dotimes (v1-20 4)
|
|
(when (and (nonzero? (-> a0-4 parent-node v1-20))
|
|
(not (logtest? (-> s5-0 (-> a0-4 parent-node v1-20) flags) (game-task-node-flag closed)))
|
|
)
|
|
(set! v1-19 #t)
|
|
(goto cfg-17)
|
|
)
|
|
)
|
|
#f
|
|
)
|
|
)
|
|
)
|
|
(label cfg-17)
|
|
(if v1-19
|
|
(game-task-node-info-method-11 a0-4 'none)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(update-task-masks arg0)
|
|
)
|
|
0
|
|
(none)
|
|
)
|
|
|
|
(defun task-node-open? ((arg0 game-task-node))
|
|
(let ((v1-1 (-> *game-info* sub-task-list)))
|
|
(game-task-node-info-method-12 (-> v1-1 arg0))
|
|
)
|
|
)
|
|
|
|
(defmethod game-task-node-info-method-12 ((this game-task-node-info))
|
|
(local-vars (a0-3 symbol) (a1-1 symbol))
|
|
(let ((a1-0 (-> *game-info* sub-task-list))
|
|
(v1-1 this)
|
|
)
|
|
(and (not (logtest? (-> v1-1 flags) (game-task-node-flag closed)))
|
|
(begin
|
|
(dotimes (a2-2 4)
|
|
(let ((t0-0 (-> v1-1 parent-node a2-2)))
|
|
(when (and (nonzero? t0-0) (not (logtest? (-> a1-0 t0-0 flags) (game-task-node-flag closed))))
|
|
(set! a1-1 #f)
|
|
(goto cfg-12)
|
|
)
|
|
)
|
|
)
|
|
(set! a1-1 #t)
|
|
(label cfg-12)
|
|
a1-1
|
|
)
|
|
(and (or (zero? (+ (-> *setting-control* user-current exclusive-task-count) (-> *game-info* task-node-exclusive length))
|
|
)
|
|
(begin
|
|
(dotimes (a1-6 (the-as int (-> *setting-control* user-current exclusive-task-count)))
|
|
(when (= (-> *setting-control* user-current exclusive-task a1-6) (-> this task))
|
|
(set! a0-3 #t)
|
|
(goto cfg-29)
|
|
)
|
|
)
|
|
(dotimes (a1-9 (-> *game-info* task-node-exclusive length))
|
|
(when (= (-> *game-info* task-node-exclusive a1-9) (-> this task))
|
|
(set! a0-3 #t)
|
|
(goto cfg-29)
|
|
)
|
|
)
|
|
(set! a0-3 #f)
|
|
(label cfg-29)
|
|
(or a0-3 (logtest? (-> v1-1 flags) (game-task-node-flag auto-close disk-close)))
|
|
)
|
|
)
|
|
(or (not (-> v1-1 open?)) ((-> v1-1 open?) v1-1))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
(defun task-node-open! ((arg0 game-task-node) (arg1 symbol))
|
|
(let ((s5-0 (-> *game-info* sub-task-list arg0)))
|
|
(dotimes (s4-0 4)
|
|
(if (nonzero? (-> s5-0 parent-node s4-0))
|
|
(open! (-> *game-info* sub-task-list (-> s5-0 parent-node s4-0)) arg1)
|
|
)
|
|
)
|
|
(game-task-node-info-method-11 s5-0 arg1)
|
|
)
|
|
0
|
|
)
|
|
|
|
(defmethod eval-game-task-cmd! ((this game-task-node-info))
|
|
(dotimes (v1-0 (the-as int (-> this command-count)))
|
|
(case (-> *game-info* task-node-commands (+ (-> this command-index) v1-0))
|
|
(((game-task-node-command none))
|
|
)
|
|
(((game-task-node-command add-jakc))
|
|
(set! (-> *game-info* features) (the-as game-feature (logior (game-feature jakc) (-> *game-info* features))))
|
|
)
|
|
(((game-task-node-command add-sidekick))
|
|
(logior! (-> *game-info* features) (game-feature sidekick))
|
|
)
|
|
(((game-task-node-command sub-sidekick))
|
|
(logclear! (-> *game-info* features) (game-feature sidekick))
|
|
)
|
|
(((game-task-node-command add-board))
|
|
(logior! (-> *game-info* features) (game-feature board))
|
|
)
|
|
(((game-task-node-command add-board-training))
|
|
(set! (-> *game-info* features)
|
|
(the-as game-feature (logior (game-feature feature36) (-> *game-info* features)))
|
|
)
|
|
)
|
|
(((game-task-node-command add-board-launch))
|
|
(set! (-> *game-info* features)
|
|
(the-as game-feature (logior (game-feature board-launch) (-> *game-info* features)))
|
|
)
|
|
)
|
|
(((game-task-node-command add-board-zap))
|
|
(set! (-> *game-info* features)
|
|
(the-as game-feature (logior (game-feature board-zap) (-> *game-info* features)))
|
|
)
|
|
)
|
|
(((game-task-node-command add-board-trail))
|
|
(set! (-> *game-info* features)
|
|
(the-as game-feature (logior (game-feature board-trail) (-> *game-info* features)))
|
|
)
|
|
)
|
|
(((game-task-node-command sub-board-trail))
|
|
(set! (-> *game-info* features)
|
|
(the-as game-feature (logclear (-> *game-info* features) (game-feature board-trail)))
|
|
)
|
|
)
|
|
(((game-task-node-command sub-board))
|
|
(logclear! (-> *game-info* features) (game-feature board))
|
|
)
|
|
(((game-task-node-command add-gun-red-1))
|
|
(logior! (-> *game-info* features) (game-feature gun gun-red-1))
|
|
)
|
|
(((game-task-node-command add-gun-red-2))
|
|
(logior! (-> *game-info* features) (game-feature gun gun-red-2))
|
|
)
|
|
(((game-task-node-command add-gun-red-3))
|
|
(logior! (-> *game-info* features) (game-feature gun gun-red-3))
|
|
)
|
|
(((game-task-node-command add-gun-red-ammo-1))
|
|
(logior! (-> *game-info* features) (game-feature gun gun-upgrade-red-ammo-1))
|
|
)
|
|
(((game-task-node-command add-gun-red-ammo-2))
|
|
(logior! (-> *game-info* features) (game-feature gun gun-upgrade-red-ammo-2))
|
|
)
|
|
(((game-task-node-command add-gun-yellow-1))
|
|
(logior! (-> *game-info* features) (game-feature gun gun-yellow-1))
|
|
)
|
|
(((game-task-node-command add-gun-yellow-2))
|
|
(logior! (-> *game-info* features) (game-feature gun gun-yellow-2))
|
|
)
|
|
(((game-task-node-command add-gun-yellow-3))
|
|
(logior! (-> *game-info* features) (game-feature gun gun-yellow-3))
|
|
)
|
|
(((game-task-node-command add-gun-yellow-ammo-1))
|
|
(logior! (-> *game-info* features) (game-feature gun gun-upgrade-yellow-ammo-1))
|
|
)
|
|
(((game-task-node-command add-gun-yellow-ammo-2))
|
|
(logior! (-> *game-info* features) (game-feature gun gun-upgrade-yellow-ammo-2))
|
|
)
|
|
(((game-task-node-command add-gun-blue-1))
|
|
(logior! (-> *game-info* features) (game-feature gun gun-blue-1))
|
|
)
|
|
(((game-task-node-command add-gun-blue-2))
|
|
(logior! (-> *game-info* features) (game-feature gun gun-blue-2))
|
|
)
|
|
(((game-task-node-command add-gun-blue-3))
|
|
(logior! (-> *game-info* features) (game-feature gun gun-blue-3))
|
|
)
|
|
(((game-task-node-command add-gun-blue-ammo-1))
|
|
(logior! (-> *game-info* features) (game-feature gun gun-upgrade-blue-ammo-1))
|
|
)
|
|
(((game-task-node-command add-gun-blue-ammo-2))
|
|
(logior! (-> *game-info* features) (game-feature gun gun-upgrade-blue-ammo-2))
|
|
)
|
|
(((game-task-node-command add-gun-dark-1))
|
|
(logior! (-> *game-info* features) (game-feature gun gun-dark-1))
|
|
)
|
|
(((game-task-node-command add-gun-dark-2))
|
|
(logior! (-> *game-info* features) (game-feature gun gun-dark-2))
|
|
)
|
|
(((game-task-node-command add-gun-dark-3))
|
|
(logior! (-> *game-info* features) (game-feature gun gun-dark-3))
|
|
)
|
|
(((game-task-node-command add-gun-dark-ammo-1))
|
|
(logior! (-> *game-info* features) (game-feature gun gun-upgrade-dark-ammo-1))
|
|
)
|
|
(((game-task-node-command add-gun-dark-ammo-2))
|
|
(logior! (-> *game-info* features) (game-feature gun gun-upgrade-dark-ammo-2))
|
|
)
|
|
(((game-task-node-command add-pass-port-mh))
|
|
(set! (-> *game-info* features)
|
|
(the-as game-feature (logior (game-feature feature31) (-> *game-info* features)))
|
|
)
|
|
)
|
|
(((game-task-node-command add-pass-port-inda))
|
|
(set! (-> *game-info* features)
|
|
(the-as game-feature (logior (game-feature feature32) (-> *game-info* features)))
|
|
)
|
|
)
|
|
(((game-task-node-command add-pass-inda-indb))
|
|
(set! (-> *game-info* features)
|
|
(the-as game-feature (logior (game-feature feature33) (-> *game-info* features)))
|
|
)
|
|
)
|
|
(((game-task-node-command add-pass-indb-sluma))
|
|
(set! (-> *game-info* features)
|
|
(the-as game-feature (logior (game-feature feature34) (-> *game-info* features)))
|
|
)
|
|
)
|
|
(((game-task-node-command add-pass-slumb-genb))
|
|
(set! (-> *game-info* features)
|
|
(the-as game-feature (logior (game-feature feature35) (-> *game-info* features)))
|
|
)
|
|
)
|
|
(((game-task-node-command add-darkeco))
|
|
(set! (-> *game-info* features)
|
|
(the-as game-feature (logior (game-feature darkeco) (-> *game-info* features)))
|
|
)
|
|
)
|
|
(((game-task-node-command add-darkjak))
|
|
(set! (-> *game-info* features)
|
|
(the-as game-feature (logior (game-feature darkjak) (-> *game-info* features)))
|
|
)
|
|
)
|
|
(((game-task-node-command add-darkjak-smack))
|
|
(set! (-> *game-info* features)
|
|
(the-as game-feature (logior (game-feature darkjak-smack) (-> *game-info* features)))
|
|
)
|
|
)
|
|
(((game-task-node-command add-darkjak-bomb0))
|
|
(set! (-> *game-info* features)
|
|
(the-as game-feature (logior (game-feature darkjak-bomb0) (-> *game-info* features)))
|
|
)
|
|
)
|
|
(((game-task-node-command add-darkjak-bomb1))
|
|
(set! (-> *game-info* features)
|
|
(the-as game-feature (logior (game-feature darkjak-bomb1) (-> *game-info* features)))
|
|
)
|
|
)
|
|
(((game-task-node-command add-darkjak-tracking))
|
|
(set! (-> *game-info* features)
|
|
(the-as game-feature (logior (game-feature darkjak-tracking) (-> *game-info* features)))
|
|
)
|
|
)
|
|
(((game-task-node-command add-darkjak-invinc))
|
|
(set! (-> *game-info* features)
|
|
(the-as game-feature (logior (game-feature darkjak-invinc) (-> *game-info* features)))
|
|
)
|
|
)
|
|
(((game-task-node-command add-lighteco))
|
|
(set! (-> *game-info* features)
|
|
(the-as game-feature (logior (game-feature lighteco) (-> *game-info* features)))
|
|
)
|
|
)
|
|
(((game-task-node-command add-lightjak))
|
|
(set! (-> *game-info* features)
|
|
(the-as game-feature (logior (game-feature lightjak) (-> *game-info* features)))
|
|
)
|
|
)
|
|
(((game-task-node-command add-lightjak-regen))
|
|
(set! (-> *game-info* features)
|
|
(the-as game-feature (logior (game-feature lightjak lightjak-regen) (-> *game-info* features)))
|
|
)
|
|
)
|
|
(((game-task-node-command add-lightjak-swoop))
|
|
(set! (-> *game-info* features)
|
|
(the-as game-feature (logior (game-feature lightjak lightjak-swoop) (-> *game-info* features)))
|
|
)
|
|
)
|
|
(((game-task-node-command add-lightjak-freeze))
|
|
(set! (-> *game-info* features)
|
|
(the-as game-feature (logior (game-feature lightjak lightjak-freeze) (-> *game-info* features)))
|
|
)
|
|
)
|
|
(((game-task-node-command add-lightjak-shield))
|
|
(set! (-> *game-info* features)
|
|
(the-as game-feature (logior (game-feature lightjak lightjak-shield) (-> *game-info* features)))
|
|
)
|
|
)
|
|
(((game-task-node-command add-armor-0))
|
|
(set! (-> *game-info* features)
|
|
(the-as game-feature (logior (game-feature armor0) (-> *game-info* features)))
|
|
)
|
|
)
|
|
(((game-task-node-command add-armor-1))
|
|
(set! (-> *game-info* features)
|
|
(the-as game-feature (logior (game-feature armor1) (-> *game-info* features)))
|
|
)
|
|
)
|
|
(((game-task-node-command add-armor-2))
|
|
(set! (-> *game-info* features)
|
|
(the-as game-feature (logior (game-feature armor2) (-> *game-info* features)))
|
|
)
|
|
)
|
|
(((game-task-node-command add-armor-3))
|
|
(set! (-> *game-info* features)
|
|
(the-as game-feature (logior (game-feature armor3) (-> *game-info* features)))
|
|
)
|
|
)
|
|
(((game-task-node-command add-artifact-invis))
|
|
(set! (-> *game-info* features)
|
|
(the-as game-feature (logior (game-feature artifact-invis) (-> *game-info* features)))
|
|
)
|
|
)
|
|
(((game-task-node-command add-light-eco-crystal))
|
|
(+! (-> *game-info* light-crystal) 1.0)
|
|
(case (-> *game-info* light-crystal)
|
|
((1.0)
|
|
(logior! (-> *game-info* items) (game-items light-eco-crystal0))
|
|
)
|
|
((2.0)
|
|
(logior! (-> *game-info* items) (game-items light-eco-crystal1))
|
|
)
|
|
((3.0)
|
|
(logior! (-> *game-info* items) (game-items light-eco-crystal2))
|
|
)
|
|
((4.0)
|
|
(logior! (-> *game-info* items) (game-items light-eco-crystal3))
|
|
)
|
|
)
|
|
)
|
|
(((game-task-node-command add-dark-eco-crystal))
|
|
(+! (-> *game-info* dark-crystal) 1.0)
|
|
(case (-> *game-info* dark-crystal)
|
|
((1.0)
|
|
(logior! (-> *game-info* items) (game-items dark-eco-crystal0))
|
|
)
|
|
((2.0)
|
|
(logior! (-> *game-info* items) (game-items dark-eco-crystal1))
|
|
)
|
|
((3.0)
|
|
(logior! (-> *game-info* items) (game-items dark-eco-crystal2))
|
|
)
|
|
((4.0)
|
|
(logior! (-> *game-info* items) (game-items dark-eco-crystal3))
|
|
)
|
|
)
|
|
)
|
|
(((game-task-node-command add-vehicle-turtle))
|
|
(logior! (-> *game-info* vehicles) (game-vehicles v-turtle))
|
|
)
|
|
(((game-task-node-command add-vehicle-snake))
|
|
(logior! (-> *game-info* vehicles) (game-vehicles v-snake))
|
|
)
|
|
(((game-task-node-command add-vehicle-scorpion))
|
|
(logior! (-> *game-info* vehicles) (game-vehicles v-scorpion))
|
|
)
|
|
(((game-task-node-command add-vehicle-toad))
|
|
(logior! (-> *game-info* vehicles) (game-vehicles v-toad))
|
|
)
|
|
(((game-task-node-command add-vehicle-rhino))
|
|
(logior! (-> *game-info* vehicles) (game-vehicles v-rhino))
|
|
)
|
|
(((game-task-node-command add-amulet-1))
|
|
(logior! (-> *game-info* items) (game-items amulet0))
|
|
)
|
|
(((game-task-node-command add-amulet-2))
|
|
(logior! (-> *game-info* items) (game-items amulet1))
|
|
)
|
|
(((game-task-node-command add-amulet-3))
|
|
(logior! (-> *game-info* items) (game-items amulet2))
|
|
)
|
|
(((game-task-node-command add-pass-front-gate))
|
|
(logior! (-> *game-info* items) (game-items pass-front-gate))
|
|
)
|
|
(((game-task-node-command add-seal))
|
|
(logior! (-> *game-info* items) (game-items seal-of-mar))
|
|
)
|
|
(((game-task-node-command add-cypher-gliph))
|
|
(logior! (-> *game-info* items) (game-items cypher-gliph))
|
|
)
|
|
(((game-task-node-command add-av-cube))
|
|
(logior! (-> *game-info* items) (game-items artifact-holocube))
|
|
)
|
|
(((game-task-node-command add-av-reflector))
|
|
(logior! (-> *game-info* items) (game-items artifact-av-reflector))
|
|
)
|
|
(((game-task-node-command add-av-prism))
|
|
(logior! (-> *game-info* items) (game-items artifact-av-prism))
|
|
)
|
|
(((game-task-node-command add-av-generator))
|
|
(logior! (-> *game-info* items) (game-items artifact-av-generator))
|
|
)
|
|
(((game-task-node-command add-av-map))
|
|
(logior! (-> *game-info* items) (game-items artifact-av-map))
|
|
)
|
|
)
|
|
)
|
|
0
|
|
(none)
|
|
)
|
|
|
|
(defun task-node-close-upwards ((arg0 (array game-task-node-info)) (arg1 int))
|
|
(let ((s5-0 (-> arg0 arg1)))
|
|
(dotimes (s4-0 4)
|
|
(when (nonzero? (-> s5-0 parent-node s4-0))
|
|
(let ((v1-11 (-> arg0 (-> s5-0 parent-node s4-0))))
|
|
(when (not (logtest? (-> v1-11 flags) (game-task-node-flag closed)))
|
|
(logior! (-> v1-11 flags) (game-task-node-flag closed))
|
|
(task-node-close-upwards arg0 (the-as int (-> s5-0 parent-node s4-0)))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
0
|
|
(none)
|
|
)
|
|
|
|
(defun task-node-reset ((arg0 symbol))
|
|
(let ((s5-0 (-> *game-info* sub-task-list)))
|
|
(dotimes (s4-0 (-> s5-0 length))
|
|
(when (nonzero? s4-0)
|
|
(let ((s3-0 (-> s5-0 s4-0)))
|
|
(when (logtest? (-> s3-0 flags) (game-task-node-flag closed))
|
|
(case arg0
|
|
(('game)
|
|
(if (nonzero? s4-0)
|
|
(logclear! (-> s3-0 flags) (game-task-node-flag closed))
|
|
)
|
|
)
|
|
(('life)
|
|
(if (and (not (task-complete? *game-info* (-> s3-0 task)))
|
|
(not (logtest? (-> s3-0 flags) (game-task-node-flag save-on-life)))
|
|
)
|
|
(logclear! (-> s3-0 flags) (game-task-node-flag closed))
|
|
)
|
|
)
|
|
(('try)
|
|
(if (and (not (task-complete? *game-info* (-> s3-0 task)))
|
|
(or (not (logtest? (-> s3-0 flags) (game-task-node-flag save-on-life save-on-try)))
|
|
(logtest? (-> s3-0 flags) (game-task-node-flag reset-on-try))
|
|
)
|
|
)
|
|
(logclear! (-> s3-0 flags) (game-task-node-flag closed))
|
|
)
|
|
)
|
|
)
|
|
(if (logtest? (-> s3-0 flags) (game-task-node-flag closed))
|
|
(task-node-close-upwards s5-0 s4-0)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(+! (-> *game-info* task-counter) 1)
|
|
0
|
|
)
|
|
|
|
(defun-debug task-node-dump ((arg0 symbol))
|
|
(let ((gp-0 (-> *game-info* sub-task-list)))
|
|
(dotimes (s5-0 (-> gp-0 length))
|
|
(when (nonzero? s5-0)
|
|
(let* ((s0-0 (-> gp-0 s5-0))
|
|
(s4-0 format)
|
|
(s3-0 #t)
|
|
(s2-0 " ~-40S ~-8S ~S~%")
|
|
(s1-0 (game-task-node->string (the-as game-task-node s5-0)))
|
|
(a3-0 (if (task-node-closed? (the-as game-task-node s5-0))
|
|
"closed"
|
|
"open"
|
|
)
|
|
)
|
|
(t0-0 (and (-> s0-0 manager) (handle->process (-> s0-0 manager manager))))
|
|
)
|
|
(set! t0-0 (cond
|
|
(t0-0
|
|
(empty)
|
|
t0-0
|
|
)
|
|
(else
|
|
""
|
|
)
|
|
)
|
|
)
|
|
(s4-0 s3-0 s2-0 s1-0 a3-0 t0-0)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
#f
|
|
)
|
|
|
|
(defmethod print ((this game-task-event))
|
|
(let* ((t9-0 format)
|
|
(a0-1 #t)
|
|
(a1-0 "#<game-task-control ~S :action ~S :scene ~A @ #x~X>")
|
|
(v1-0 (-> this actor))
|
|
(a2-1 (cond
|
|
((= v1-0 (game-task-actor wascity-turret))
|
|
"wascity-turret"
|
|
)
|
|
((= v1-0 (game-task-actor none))
|
|
"none"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-genb-2))
|
|
"burning-bush-genb-2"
|
|
)
|
|
((= v1-0 (game-task-actor unused-slot-18))
|
|
"unused-slot-18"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-wasb-3))
|
|
"burning-bush-wasb-3"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-desd-3))
|
|
"burning-bush-desd-3"
|
|
)
|
|
((= v1-0 (game-task-actor unused-slot-17))
|
|
"unused-slot-17"
|
|
)
|
|
((= v1-0 (game-task-actor unused-slot-15))
|
|
"unused-slot-15"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-inda-1))
|
|
"burning-bush-inda-1"
|
|
)
|
|
((= v1-0 (game-task-actor veger-ruins))
|
|
"veger-ruins"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-desb-2))
|
|
"burning-bush-desb-2"
|
|
)
|
|
((= v1-0 (game-task-actor unused-slot-16))
|
|
"unused-slot-16"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-desf))
|
|
"burning-bush-desf"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-slumb-3))
|
|
"burning-bush-slumb-3"
|
|
)
|
|
((= v1-0 (game-task-actor wascity-leaper))
|
|
"wascity-leaper"
|
|
)
|
|
((= v1-0 (game-task-actor unused-slot-8))
|
|
"unused-slot-8"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-slumb-2))
|
|
"burning-bush-slumb-2"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-desb))
|
|
"burning-bush-desb"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-wasa-2))
|
|
"burning-bush-wasa-2"
|
|
)
|
|
((= v1-0 (game-task-actor seem-wascitya))
|
|
"seem-wascitya"
|
|
)
|
|
((= v1-0 (game-task-actor ashelin-oasis))
|
|
"ashelin-oasis"
|
|
)
|
|
((= v1-0 (game-task-actor was-pre-game-deserte))
|
|
"was-pre-game-deserte"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-indb))
|
|
"burning-bush-indb"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-port-4))
|
|
"burning-bush-port-4"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-port-5))
|
|
"burning-bush-port-5"
|
|
)
|
|
((= v1-0 (game-task-actor seem-wascity))
|
|
"seem-wascity"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-wasa-1))
|
|
"burning-bush-wasa-1"
|
|
)
|
|
((= v1-0 (game-task-actor unused-slot-20))
|
|
"unused-slot-20"
|
|
)
|
|
((= v1-0 (game-task-actor vin-vinroom))
|
|
"vin-vinroom"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-marka))
|
|
"burning-bush-marka"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-slumc-2))
|
|
"burning-bush-slumc-2"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-desc-5))
|
|
"burning-bush-desc-5"
|
|
)
|
|
((= v1-0 (game-task-actor unused-slot-19))
|
|
"unused-slot-19"
|
|
)
|
|
((= v1-0 (game-task-actor monk-mummy))
|
|
"monk-mummy"
|
|
)
|
|
((= v1-0 (game-task-actor torn-freehq))
|
|
"torn-freehq"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-indb-3))
|
|
"burning-bush-indb-3"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-desb-4))
|
|
"burning-bush-desb-4"
|
|
)
|
|
((= v1-0 (game-task-actor seem-temple))
|
|
"seem-temple"
|
|
)
|
|
((= v1-0 (game-task-actor kleever-arena))
|
|
"kleever-arena"
|
|
)
|
|
((= v1-0 (game-task-actor unused-slot-21))
|
|
"unused-slot-21"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-indb-2))
|
|
"burning-bush-indb-2"
|
|
)
|
|
((= v1-0 (game-task-actor oracle-oracle))
|
|
"oracle-oracle"
|
|
)
|
|
((= v1-0 (game-task-actor jinx-hiphog))
|
|
"jinx-hiphog"
|
|
)
|
|
((= v1-0 (game-task-actor minimap))
|
|
"minimap"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-arena))
|
|
"burning-bush-arena"
|
|
)
|
|
((= v1-0 (game-task-actor damus-wasdoors))
|
|
"damus-wasdoors"
|
|
)
|
|
((= v1-0 (game-task-actor kleever-pen))
|
|
"kleever-pen"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-markb))
|
|
"burning-bush-markb"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-genb-4))
|
|
"burning-bush-genb-4"
|
|
)
|
|
((= v1-0 (game-task-actor daxter))
|
|
"daxter"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-genb-5))
|
|
"burning-bush-genb-5"
|
|
)
|
|
((= v1-0 (game-task-actor torn-hipbar))
|
|
"torn-hipbar"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-genb-1))
|
|
"burning-bush-genb-1"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-inda-4))
|
|
"burning-bush-inda-4"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-desb-3))
|
|
"burning-bush-desb-3"
|
|
)
|
|
((= v1-0 (game-task-actor sig-nest))
|
|
"sig-nest"
|
|
)
|
|
((= v1-0 (game-task-actor unused-slot-22))
|
|
"unused-slot-22"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-slumb))
|
|
"burning-bush-slumb"
|
|
)
|
|
((= v1-0 (game-task-actor ashelin-freehq))
|
|
"ashelin-freehq"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-desc-2))
|
|
"burning-bush-desc-2"
|
|
)
|
|
((= v1-0 (game-task-actor samos-onintent))
|
|
"samos-onintent"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-desd))
|
|
"burning-bush-desd"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-desg-2))
|
|
"burning-bush-desg-2"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-wasa-6))
|
|
"burning-bush-wasa-6"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-wasb-7))
|
|
"burning-bush-wasb-7"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-wasb-2))
|
|
"burning-bush-wasb-2"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-inda-5))
|
|
"burning-bush-inda-5"
|
|
)
|
|
((= v1-0 (game-task-actor sig-talkbox))
|
|
"sig-talkbox"
|
|
)
|
|
((= v1-0 (game-task-actor pecker-onintent))
|
|
"pecker-onintent"
|
|
)
|
|
((= v1-0 (game-task-actor damus-arena))
|
|
"damus-arena"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-wasa-5))
|
|
"burning-bush-wasa-5"
|
|
)
|
|
((= v1-0 (game-task-actor unused-slot-23))
|
|
"unused-slot-23"
|
|
)
|
|
((= v1-0 (game-task-actor damus-wascity))
|
|
"damus-wascity"
|
|
)
|
|
((= v1-0 (game-task-actor monk-wascity))
|
|
"monk-wascity"
|
|
)
|
|
((= v1-0 (game-task-actor damus-desert))
|
|
"damus-desert"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-wasb-1))
|
|
"burning-bush-wasb-1"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-desc-4))
|
|
"burning-bush-desc-4"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-dese-5))
|
|
"burning-bush-dese-5"
|
|
)
|
|
((= v1-0 (game-task-actor was-pre-game-wascityb))
|
|
"was-pre-game-wascityb"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-slumc))
|
|
"burning-bush-slumc"
|
|
)
|
|
((= v1-0 (game-task-actor power-game-vinroom))
|
|
"power-game-vinroom"
|
|
)
|
|
((= v1-0 (game-task-actor tess-gungame))
|
|
"tess-gungame"
|
|
)
|
|
((= v1-0 (game-task-actor pecker))
|
|
"pecker"
|
|
)
|
|
((= v1-0 (game-task-actor torn-hipbooth))
|
|
"torn-hipbooth"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-desg-4))
|
|
"burning-bush-desg-4"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-genc-2))
|
|
"burning-bush-genc-2"
|
|
)
|
|
((= v1-0 (game-task-actor damus-ruins))
|
|
"damus-ruins"
|
|
)
|
|
((= v1-0 (game-task-actor unused-slot-24))
|
|
"unused-slot-24"
|
|
)
|
|
((= v1-0 (game-task-actor ashelin-talkbox))
|
|
"ashelin-talkbox"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-port-8))
|
|
"burning-bush-port-8"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-port-2))
|
|
"burning-bush-port-2"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-wasb-6))
|
|
"burning-bush-wasb-6"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-port-3))
|
|
"burning-bush-port-3"
|
|
)
|
|
((= v1-0 (game-task-actor unused-slot-27))
|
|
"unused-slot-27"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-slumb-4))
|
|
"burning-bush-slumb-4"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-desg-3))
|
|
"burning-bush-desg-3"
|
|
)
|
|
((= v1-0 (game-task-actor sig-wasdoors))
|
|
"sig-wasdoors"
|
|
)
|
|
((= v1-0 (game-task-actor samos-freehq))
|
|
"samos-freehq"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-sluma-1))
|
|
"burning-bush-sluma-1"
|
|
)
|
|
((= v1-0 (game-task-actor onin-talkbox))
|
|
"onin-talkbox"
|
|
)
|
|
((= v1-0 (game-task-actor unused-slot-25))
|
|
"unused-slot-25"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-desc-3))
|
|
"burning-bush-desc-3"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-genb))
|
|
"burning-bush-genb"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-markb-2))
|
|
"burning-bush-markb-2"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-dese-2))
|
|
"burning-bush-dese-2"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-indb-1))
|
|
"burning-bush-indb-1"
|
|
)
|
|
((= v1-0 (game-task-actor unused-slot-9))
|
|
"unused-slot-9"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-slumb-1))
|
|
"burning-bush-slumb-1"
|
|
)
|
|
((= v1-0 (game-task-actor unused-slot-28))
|
|
"unused-slot-28"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-pal-2))
|
|
"burning-bush-pal-2"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-desa-2))
|
|
"burning-bush-desa-2"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-farma))
|
|
"burning-bush-farma"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-desg))
|
|
"burning-bush-desg"
|
|
)
|
|
((= v1-0 (game-task-actor keira-freehq))
|
|
"keira-freehq"
|
|
)
|
|
((= v1-0 (game-task-actor unused-slot-26))
|
|
"unused-slot-26"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-desd-5))
|
|
"burning-bush-desd-5"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-wasb-5))
|
|
"burning-bush-wasb-5"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-desc))
|
|
"burning-bush-desc"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-genb-3))
|
|
"burning-bush-genb-3"
|
|
)
|
|
((= v1-0 (game-task-actor onin-onintent))
|
|
"onin-onintent"
|
|
)
|
|
((= v1-0 (game-task-actor unused-slot-29))
|
|
"unused-slot-29"
|
|
)
|
|
((= v1-0 (game-task-actor unused-slot-10))
|
|
"unused-slot-10"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-inda-2))
|
|
"burning-bush-inda-2"
|
|
)
|
|
((= v1-0 (game-task-actor unused-slot-30))
|
|
"unused-slot-30"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-inda-3))
|
|
"burning-bush-inda-3"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-slumc-1))
|
|
"burning-bush-slumc-1"
|
|
)
|
|
((= v1-0 (game-task-actor samos-genb))
|
|
"samos-genb"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-dese-4))
|
|
"burning-bush-dese-4"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-desh))
|
|
"burning-bush-desh"
|
|
)
|
|
((= v1-0 (game-task-actor samos-talkbox))
|
|
"samos-talkbox"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-farmb))
|
|
"burning-bush-farmb"
|
|
)
|
|
((= v1-0 (game-task-actor gun-gungame))
|
|
"gun-gungame"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-wasa-4))
|
|
"burning-bush-wasa-4"
|
|
)
|
|
((= v1-0 (game-task-actor unused-slot-12))
|
|
"unused-slot-12"
|
|
)
|
|
((= v1-0 (game-task-actor onin-freehq))
|
|
"onin-freehq"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-desa-3))
|
|
"burning-bush-desa-3"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-port-6))
|
|
"burning-bush-port-6"
|
|
)
|
|
((= v1-0 (game-task-actor unused-slot-11))
|
|
"unused-slot-11"
|
|
)
|
|
((= v1-0 (game-task-actor unused-slot-31))
|
|
"unused-slot-31"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-wasa-3))
|
|
"burning-bush-wasa-3"
|
|
)
|
|
((= v1-0 (game-task-actor veger-cave))
|
|
"veger-cave"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-port-1))
|
|
"burning-bush-port-1"
|
|
)
|
|
((= v1-0 (game-task-actor keira-genb))
|
|
"keira-genb"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-dese-3))
|
|
"burning-bush-dese-3"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-gena-2))
|
|
"burning-bush-gena-2"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-genc))
|
|
"burning-bush-genc"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-desd-2))
|
|
"burning-bush-desd-2"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-desa))
|
|
"burning-bush-desa"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-port))
|
|
"burning-bush-port"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-inda))
|
|
"burning-bush-inda"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-stadium))
|
|
"burning-bush-stadium"
|
|
)
|
|
((= v1-0 (game-task-actor damus-waspal))
|
|
"damus-waspal"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-port-7))
|
|
"burning-bush-port-7"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-wasb-4))
|
|
"burning-bush-wasb-4"
|
|
)
|
|
((= v1-0 (game-task-actor keira-garage))
|
|
"keira-garage"
|
|
)
|
|
((= v1-0 (game-task-actor torn-hiptable))
|
|
"torn-hiptable"
|
|
)
|
|
((= v1-0 (game-task-actor torn-hiphog))
|
|
"torn-hiphog"
|
|
)
|
|
((= v1-0 (game-task-actor kleever-wasdoors))
|
|
"kleever-wasdoors"
|
|
)
|
|
((= v1-0 (game-task-actor unused-slot-14))
|
|
"unused-slot-14"
|
|
)
|
|
((= v1-0 (game-task-actor unused-slot-13))
|
|
"unused-slot-13"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-dese))
|
|
"burning-bush-dese"
|
|
)
|
|
((= v1-0 (game-task-actor seem-leaper))
|
|
"seem-leaper"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-pal))
|
|
"burning-bush-pal"
|
|
)
|
|
((= v1-0 (game-task-actor kleever-wascityb))
|
|
"kleever-wascityb"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-desd-4))
|
|
"burning-bush-desd-4"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-sluma-3))
|
|
"burning-bush-sluma-3"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-sluma-2))
|
|
"burning-bush-sluma-2"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-gena))
|
|
"burning-bush-gena"
|
|
)
|
|
((= v1-0 (game-task-actor burning-bush-sluma))
|
|
"burning-bush-sluma"
|
|
)
|
|
(else
|
|
"*unknown*"
|
|
)
|
|
)
|
|
)
|
|
(v1-1 (-> this action))
|
|
)
|
|
(t9-0
|
|
a0-1
|
|
a1-0
|
|
a2-1
|
|
(cond
|
|
((= v1-1 (game-task-action idle))
|
|
"idle"
|
|
)
|
|
((= v1-1 (game-task-action play))
|
|
"play"
|
|
)
|
|
((= v1-1 (game-task-action show))
|
|
"show"
|
|
)
|
|
((= v1-1 (game-task-action talk))
|
|
"talk"
|
|
)
|
|
((= v1-1 (game-task-action hide))
|
|
"hide"
|
|
)
|
|
((= v1-1 (game-task-action say))
|
|
"say"
|
|
)
|
|
((= v1-1 (game-task-action trade))
|
|
"trade"
|
|
)
|
|
((= v1-1 (game-task-action menu))
|
|
"menu"
|
|
)
|
|
(else
|
|
"*unknown*"
|
|
)
|
|
)
|
|
(-> this scene)
|
|
this
|
|
)
|
|
)
|
|
this
|
|
)
|
|
|
|
(defmethod new game-task-control ((allocation symbol) (type-to-make type) (arg0 game-task-actor))
|
|
(let ((v0-0 (object-new allocation type-to-make (the-as int (-> type-to-make size)))))
|
|
(set! (-> v0-0 actor) arg0)
|
|
v0-0
|
|
)
|
|
)
|
|
|
|
(defmethod get-current-task-event ((this game-task-control))
|
|
(let ((gp-0 (new 'static 'game-task-event :scene #f)))
|
|
(let ((s4-0 #f))
|
|
(when (!= (-> this counter) (-> *game-info* task-counter))
|
|
(set! (-> this counter) (-> *game-info* task-counter))
|
|
(set! (-> this current-node) (game-task-node none))
|
|
(set! (-> this current-event) #f)
|
|
(set! s4-0 #t)
|
|
(let ((s2-0 (-> *game-info* sub-task-list)))
|
|
(dotimes (s3-0 (-> s2-0 length))
|
|
(when (nonzero? s3-0)
|
|
(let ((s1-0 (-> s2-0 s3-0)))
|
|
(when (and (task-node-open? (the-as game-task-node s3-0))
|
|
(-> s1-0 when-open)
|
|
(begin
|
|
(countdown (v1-12 (-> s1-0 when-open length))
|
|
(when (= (-> this actor) (-> s1-0 when-open v1-12 actor))
|
|
(set! (-> this current-event) (-> s1-0 when-open v1-12))
|
|
(set! (-> this current-node) (the-as game-task-node s3-0))
|
|
#t
|
|
(goto cfg-18)
|
|
)
|
|
)
|
|
#f
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(label cfg-18)
|
|
(cond
|
|
((= (-> this current-node) (game-task-node none))
|
|
(set! (-> gp-0 actor) (-> this actor))
|
|
)
|
|
((begin (set! gp-0 (-> this current-event)) (not (logtest? (-> gp-0 flags) (game-task-flags gatflag-00))))
|
|
)
|
|
(else
|
|
(set! (-> gp-0 action) (the-as game-task-action (-> gp-0 tex)))
|
|
)
|
|
)
|
|
(if s4-0
|
|
(logior! (-> gp-0 flags) (game-task-flags gatflag-01))
|
|
(logclear! (-> gp-0 flags) (game-task-flags gatflag-01))
|
|
)
|
|
)
|
|
gp-0
|
|
)
|
|
)
|
|
|
|
(deftype resetter (process)
|
|
((params resetter-params :inline)
|
|
(message resetter-message :overlay-at (-> params message))
|
|
(flags resetter-flag :overlay-at (-> params flags))
|
|
(reset-delay uint32 :overlay-at (-> params reset-delay))
|
|
(task game-task :overlay-at (-> params task))
|
|
(text-message text-id :overlay-at (-> params text-message))
|
|
(retry resetter-spec :inline :overlay-at (-> params retry))
|
|
(retry-continue continue-point :overlay-at (-> params retry continue))
|
|
(retry-node game-task-node :overlay-at (-> params retry node))
|
|
(retry-reset-mode symbol :overlay-at (-> params retry reset-mode))
|
|
(fail resetter-spec :inline :overlay-at (-> params fail))
|
|
(fail-continue continue-point :overlay-at (-> params fail continue))
|
|
(fail-node game-task-node :overlay-at (-> params fail node))
|
|
(fail-reset-mode symbol :overlay-at (-> params fail reset-mode))
|
|
(resetter-id text-id :offset 176)
|
|
(grabbed-player? symbol :offset 180)
|
|
(grabbed-time time-frame)
|
|
(dead-player? symbol)
|
|
(retry? symbol)
|
|
(message-id text-id)
|
|
(stinger uint32)
|
|
(start-time time-frame)
|
|
)
|
|
(:state-methods
|
|
idle
|
|
resetting
|
|
)
|
|
(:methods
|
|
(resetter-method-16 (_type_) none)
|
|
)
|
|
)
|
|
|
|
|
|
(defmethod run-logic? ((this resetter))
|
|
"Should this process be run? Checked by execute-process-tree."
|
|
#t
|
|
)
|
|
|
|
;; WARN: Return type mismatch float vs none.
|
|
(defmethod resetter-method-16 ((this resetter))
|
|
(when (and (not (logtest? (-> this params flags) (resetter-flag no-message)))
|
|
(= (get-status *gui-control* (the-as sound-id (-> this message-id))) (gui-status active))
|
|
)
|
|
(let ((gp-0
|
|
(new 'stack 'font-context *font-default-matrix* 70 20 0.0 (font-color orange) (font-flags shadow kerning))
|
|
)
|
|
)
|
|
(set! (-> gp-0 origin x) 120.0)
|
|
(set-scale! gp-0 0.7)
|
|
(set-width! gp-0 300)
|
|
(set-height! gp-0 35)
|
|
(set! (-> gp-0 flags) (font-flags shadow kerning middle middle-vert large))
|
|
(let ((s4-0 (if (logtest? (-> this params flags) (resetter-flag text-message))
|
|
(the-as int (-> this params text-message))
|
|
138
|
|
)
|
|
)
|
|
)
|
|
(when (nonzero? s4-0)
|
|
(let ((s3-0 print-game-text))
|
|
(format (clear *temp-string*) (lookup-text! *common-text* (the-as text-id s4-0) #f) 1)
|
|
(s3-0 *temp-string* gp-0 #f 44 (bucket-id hud-draw-hud-alpha))
|
|
)
|
|
)
|
|
)
|
|
(when (= (-> this params message) (resetter-message mission-fail-or-retry))
|
|
(set-height! gp-0 95)
|
|
(let ((s5-1 print-game-text))
|
|
(format (clear *temp-string*) (lookup-text! *common-text* (text-id text-008b) #f) 1)
|
|
(s5-1 *temp-string* gp-0 #f 44 (bucket-id hud-draw-hud-alpha))
|
|
)
|
|
(set-height! gp-0 155)
|
|
(let ((s5-2 print-game-text))
|
|
(format (clear *temp-string*) (lookup-text! *common-text* (text-id text-0081) #f) 1)
|
|
(s5-2 *temp-string* gp-0 #f 44 (bucket-id hud-draw-hud-alpha))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(none)
|
|
)
|
|
|
|
(defstate idle (resetter)
|
|
:virtual #t
|
|
:event (behavior ((proc process) (argc int) (message symbol) (block event-message-block))
|
|
(case message
|
|
(('reset)
|
|
(cond
|
|
((-> self grabbed-player?)
|
|
(persist-with-delay *setting-control* 'fail (seconds 10) 'bg-a 'abs 1.0 0)
|
|
(go-virtual resetting)
|
|
)
|
|
(else
|
|
(logior! (-> self params flags) (resetter-flag auto-reset))
|
|
(set! (-> self params reset-delay) (the-as uint 0))
|
|
#t
|
|
)
|
|
)
|
|
)
|
|
(('query)
|
|
(case (-> block param 0)
|
|
(('reset)
|
|
(-> self grabbed-player?)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
:exit (behavior ()
|
|
(update-rates! (-> *display* bg-clock) 1.0)
|
|
(update-rates! (-> *display* entity-clock) 1.0)
|
|
(update-rates! (-> *display* target-clock) 1.0)
|
|
(update-rates! (-> *display* camera-clock) 1.0)
|
|
)
|
|
:code (behavior ()
|
|
(if (and *target* (focus-test? *target* dead))
|
|
(set! (-> self dead-player?) #t)
|
|
)
|
|
(cond
|
|
((or (= (-> self params message) (resetter-message mission-fail))
|
|
(= (-> self params message) (resetter-message mission-retry))
|
|
(logtest? (-> self params flags) (resetter-flag no-grab))
|
|
)
|
|
(while (begin
|
|
(if (and *target* (focus-test? *target* grabbed))
|
|
(process-release? *target*)
|
|
)
|
|
(if (logtest? (-> self params flags) (resetter-flag no-draw-target))
|
|
(send-event *target* 'draw #f)
|
|
)
|
|
(let ((a1-1 (new 'stack-no-clear 'event-message-block)))
|
|
(set! (-> a1-1 from) (process->ppointer self))
|
|
(set! (-> a1-1 num-params) 2)
|
|
(set! (-> a1-1 message) 'attack-invinc)
|
|
(set! (-> a1-1 param 0) (the-as uint #f))
|
|
(set! (-> a1-1 param 1)
|
|
(the-as
|
|
uint
|
|
(static-attack-info
|
|
:mask (vehicle-impulse-factor)
|
|
((id (new-attack-id)) (damage 2.0) (vehicle-damage-factor 1.0) (vehicle-impulse-factor 1.0) (mode 'bot))
|
|
)
|
|
)
|
|
)
|
|
(not (or (send-event-function *target* a1-1) (and *target* (focus-test? *target* dead))))
|
|
)
|
|
)
|
|
(suspend)
|
|
)
|
|
(hide-hud 'hud-health)
|
|
)
|
|
((= (-> self params message) (resetter-message mission-fail-or-retry))
|
|
(while (not (process-grab? *target* 'dead))
|
|
(suspend)
|
|
)
|
|
)
|
|
)
|
|
(set! (-> self grabbed-player?) #t)
|
|
(set! (-> self grabbed-time) (-> *display* real-clock frame-counter))
|
|
(kill-current-talker '() '() 'exit)
|
|
(when (and (not (-> self dead-player?)) (not (logtest? (-> self params flags) (resetter-flag no-slow-down))))
|
|
(while (< (- (-> *display* real-clock frame-counter) (-> self grabbed-time)) (seconds 1.5))
|
|
(let ((f30-0
|
|
(lerp-scale 0.0 1.0 (the float (- (-> *display* real-clock frame-counter) (-> self grabbed-time))) 0.0 450.0)
|
|
)
|
|
)
|
|
(set-filter-color!
|
|
(lerp-scale 1.0 1.25 f30-0 0.0 1.0)
|
|
(lerp-scale 1.0 0.875 f30-0 0.0 1.0)
|
|
(lerp-scale 1.0 0.25 f30-0 0.0 1.0)
|
|
)
|
|
(update-rates! (-> *display* bg-clock) (- 1.0 f30-0))
|
|
(update-rates! (-> *display* entity-clock) (- 1.0 f30-0))
|
|
(update-rates! (-> *display* target-clock) (- 1.0 f30-0))
|
|
(update-rates! (-> *display* camera-clock) (- 1.0 f30-0))
|
|
)
|
|
(resetter-method-16 self)
|
|
(suspend)
|
|
)
|
|
(+! (-> self clock ref-count) -1)
|
|
(+! (-> *display* real-clock ref-count) 1)
|
|
(set! (-> self clock) (-> *display* real-clock))
|
|
(logclear! (-> self mask) (process-mask freeze))
|
|
(set-master-mode 'freeze)
|
|
(set-setting! 'sfx-volume 'abs 0.0 0)
|
|
(set-setting! 'ambient-volume 'abs 0.0 0)
|
|
)
|
|
(case (-> self params message)
|
|
(((resetter-message mission-fail) (resetter-message mission-retry))
|
|
(until #f
|
|
(when (or (and (logtest? (-> self params flags) (resetter-flag auto-reset))
|
|
(>= (- (-> *display* real-clock frame-counter) (-> self grabbed-time))
|
|
(the-as time-frame (-> self params reset-delay))
|
|
)
|
|
)
|
|
(or (cpad-pressed? 0 confirm)
|
|
(and (kiosk?)
|
|
(>= (- (-> *display* real-clock frame-counter) (-> self start-time)) (seconds 60))
|
|
(>= (- (-> *display* real-clock frame-counter) (-> *cpad-list* cpads 0 real-change-time)) (seconds 60))
|
|
)
|
|
)
|
|
)
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons confirm))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons confirm))
|
|
(if (= (-> self params message) (resetter-message mission-retry))
|
|
(set! (-> self retry?) #t)
|
|
)
|
|
(persist-with-delay *setting-control* 'fail (seconds 10) 'bg-a 'abs 1.0 0)
|
|
(go-virtual resetting)
|
|
)
|
|
(resetter-method-16 self)
|
|
(suspend)
|
|
)
|
|
#f
|
|
)
|
|
(((resetter-message mission-fail-or-retry))
|
|
(until #f
|
|
(when (cpad-pressed? 0 confirm)
|
|
(sound-play "mission-retry")
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons confirm))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons confirm))
|
|
(set! (-> self retry?) #t)
|
|
(cond
|
|
((not *target*)
|
|
)
|
|
((focus-test? *target* grabbed)
|
|
(while (not (process-release? *target*))
|
|
(suspend)
|
|
)
|
|
)
|
|
)
|
|
(suspend)
|
|
(persist-with-delay *setting-control* 'fail (seconds 10) 'bg-a 'abs 1.0 0)
|
|
(go-virtual resetting)
|
|
)
|
|
(let ((v1-147 (when (cpad-pressed? 0 triangle)
|
|
(sound-play "mission-quit")
|
|
#t
|
|
)
|
|
)
|
|
)
|
|
(when (or v1-147
|
|
(and (kiosk?)
|
|
(>= (- (-> *display* real-clock frame-counter) (-> self start-time)) (seconds 60))
|
|
(>= (- (-> *display* real-clock frame-counter) (-> *cpad-list* cpads 0 real-change-time)) (seconds 60))
|
|
)
|
|
)
|
|
(logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons triangle))
|
|
(logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons triangle))
|
|
(set! (-> self retry?) #f)
|
|
(cond
|
|
((not *target*)
|
|
)
|
|
((focus-test? *target* grabbed)
|
|
(while (not (process-release? *target*))
|
|
(suspend)
|
|
)
|
|
)
|
|
)
|
|
(suspend)
|
|
(go-virtual resetting)
|
|
)
|
|
)
|
|
(resetter-method-16 self)
|
|
(suspend)
|
|
)
|
|
#f
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
(defmethod deactivate ((this resetter))
|
|
"Make a process dead, clean it up, remove it from the active pool, and return to dead pool."
|
|
(set-filter-color! 1.0 1.0 1.0)
|
|
(sound-group-continue (the-as sound-group #xffffffff))
|
|
(update-rates! (-> *display* bg-clock) 1.0)
|
|
(update-rates! (-> *display* entity-clock) 1.0)
|
|
(update-rates! (-> *display* target-clock) 1.0)
|
|
(update-rates! (-> *display* camera-clock) 1.0)
|
|
(call-parent-method this)
|
|
(none)
|
|
)
|
|
|
|
(defstate resetting (resetter)
|
|
:virtual #t
|
|
:event (behavior ((proc process) (argc int) (message symbol) (block event-message-block))
|
|
(case message
|
|
(('reset)
|
|
#t
|
|
)
|
|
(('query)
|
|
(case (-> block param 0)
|
|
(('reset)
|
|
#t
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
:exit (behavior ()
|
|
(if (= *master-mode* 'freeze)
|
|
(set-master-mode 'game)
|
|
)
|
|
(process-release? *target*)
|
|
)
|
|
:code (behavior ()
|
|
(suspend-for (seconds 1)
|
|
(let ((f30-0 (lerp-scale 1.0 0.0 (the float (- (current-time) time)) 0.0 300.0)))
|
|
(set-filter-color!
|
|
(lerp-scale 1.0 1.25 f30-0 0.0 1.0)
|
|
(lerp-scale 1.0 0.875 f30-0 0.0 1.0)
|
|
(lerp-scale 1.0 0.25 f30-0 0.0 1.0)
|
|
)
|
|
)
|
|
)
|
|
(let ((gp-1 (if (-> self retry?)
|
|
(-> self params retry)
|
|
(-> self params fail)
|
|
)
|
|
)
|
|
)
|
|
(format 0 "---------> resetting with ~`resetter-spec`P~%" gp-1)
|
|
(let ((s5-1 (-> gp-1 execute)))
|
|
(if s5-1
|
|
(script-eval (the-as pair s5-1))
|
|
)
|
|
)
|
|
(cond
|
|
((and *target*
|
|
(or (and (focus-test? *target* dead) #t) (and (not (-> gp-1 continue)) (focus-test? *target* grabbed)))
|
|
)
|
|
(inc-death-count! *game-info*)
|
|
(if (-> gp-1 continue)
|
|
(set-continue! *game-info* (-> gp-1 continue) #t)
|
|
)
|
|
(when (-> gp-1 reset-mode)
|
|
(task-node-reset (-> gp-1 reset-mode))
|
|
(update-task-masks (-> gp-1 reset-mode))
|
|
)
|
|
(if (nonzero? (-> gp-1 node))
|
|
(task-node-open! (-> gp-1 node) 'event)
|
|
)
|
|
(if (and *target* (focus-test? *target* dead grabbed))
|
|
(send-event *target* 'end-mode 'bot (if (-> self retry?)
|
|
(-> self params retry)
|
|
(-> self params fail)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(else
|
|
(initialize! *game-info* #f (the-as game-save #f) (the-as string #f) gp-1)
|
|
)
|
|
)
|
|
(cond
|
|
((or (and *target* (focus-test? *target* dead)) (-> gp-1 continue))
|
|
(persist-with-delay *setting-control* 'fail-sfx-volume (seconds 3) 'sfx-volume 'abs 0.0 0)
|
|
(persist-with-delay *setting-control* 'fail-dialog-volume (seconds 3) 'dialog-volume 'abs 0.0 0)
|
|
(persist-with-delay *setting-control* 'fail-music-volume (seconds 3) 'music-volume 'abs 0.0 0)
|
|
)
|
|
(else
|
|
(set-action!
|
|
*gui-control*
|
|
(gui-action fade)
|
|
(the-as sound-id (-> self stinger))
|
|
(gui-channel none)
|
|
(gui-action none)
|
|
(the-as string #f)
|
|
(the-as (function gui-connection symbol) #f)
|
|
(the-as process #f)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(persist-with-delay *setting-control* 'allow-continue (seconds 3) 'allow-continue #f 0.0 0)
|
|
(persist-with-delay *setting-control* 'speech-control (seconds 3) 'speech-control #f 0.0 0)
|
|
)
|
|
)
|
|
|
|
(defbehavior resetter-init-by-other resetter ((arg0 resetter-params) (arg1 game-task-node-info))
|
|
(stack-size-set! (-> self main-thread) 512)
|
|
(mem-copy! (the-as pointer (-> self params)) (the-as pointer arg0) 48)
|
|
(set! (-> self grabbed-player?) #f)
|
|
(set! (-> self dead-player?) #f)
|
|
(set! (-> self retry?) #f)
|
|
(set-setting! 'allow-continue #f 0.0 0)
|
|
(set-setting! 'gun-eject #f 0.0 0)
|
|
(set-setting! 'minimap 'clear 0.0 (minimap-flag minimap))
|
|
(set! (-> self start-time) (-> *display* real-clock frame-counter))
|
|
(set! (-> *game-info* mode) 'play)
|
|
(set-action!
|
|
*gui-control*
|
|
(gui-action stop)
|
|
(the-as sound-id 1)
|
|
(gui-channel guard)
|
|
(gui-action none)
|
|
(the-as string #f)
|
|
(the-as (function gui-connection symbol) #f)
|
|
(the-as process #f)
|
|
)
|
|
(set-action!
|
|
*gui-control*
|
|
(gui-action stop)
|
|
(the-as sound-id 1)
|
|
(gui-channel citizen)
|
|
(gui-action none)
|
|
(the-as string #f)
|
|
(the-as (function gui-connection symbol) #f)
|
|
(the-as process #f)
|
|
)
|
|
(set-action!
|
|
*gui-control*
|
|
(gui-action stop)
|
|
(the-as sound-id 1)
|
|
(gui-channel jak-mode)
|
|
(gui-action none)
|
|
(the-as string #f)
|
|
(the-as (function gui-connection symbol) #f)
|
|
(the-as process #f)
|
|
)
|
|
(when (not (or (logtest? (-> arg0 flags) (resetter-flag no-audio))
|
|
(and arg1 (logtest? (-> arg0 flags) (resetter-flag no-audio-first)) (zero? (-> arg1 death-count)))
|
|
)
|
|
)
|
|
(if (and arg1 (logtest? (-> arg0 flags) (resetter-flag no-audio-first)))
|
|
(set-action!
|
|
*gui-control*
|
|
(gui-action stop)
|
|
(the-as sound-id 1)
|
|
(gui-channel alert)
|
|
(gui-action none)
|
|
(the-as string #f)
|
|
(the-as (function gui-connection symbol) #f)
|
|
(the-as process #f)
|
|
)
|
|
)
|
|
(set! (-> self stinger)
|
|
(the-as uint (add-process *gui-control* *target* (gui-channel task) (gui-action play) "lose1" -99.0 0))
|
|
)
|
|
(sound-params-set! *gui-control* (the-as sound-id (-> self stinger)) #f -1 -1 -1 0.75)
|
|
)
|
|
(set-setting! 'music-volume 'abs 0.0 0)
|
|
(if (logtest? (-> arg0 flags) (resetter-flag stop-sfx))
|
|
(set-setting! 'sfx-volume 'abs 0.0 0)
|
|
)
|
|
(set-setting! 'speech-control #f 0.0 0)
|
|
(set-setting! 'allow-progress #f 0.0 0)
|
|
(set-setting! 'allow-pause #f 0.0 0)
|
|
(+! (-> self clock ref-count) -1)
|
|
(+! (-> *display* base-clock ref-count) 1)
|
|
(set! (-> self clock) (-> *display* base-clock))
|
|
(apply-settings *setting-control*)
|
|
(if (or (not (logtest? (-> self params flags) (resetter-flag text-message)))
|
|
(nonzero? (-> self params text-message))
|
|
(= (-> self params message) (resetter-message mission-fail-or-retry))
|
|
)
|
|
(set! (-> self message-id)
|
|
(the-as text-id (add-process *gui-control* self (gui-channel supertitle) (gui-action play) "fail" 81920.0 0))
|
|
)
|
|
)
|
|
(set! (-> self resetter-id)
|
|
(the-as text-id (add-process *gui-control* self (gui-channel resetter) (gui-action play) "fail" -99.0 0))
|
|
)
|
|
(go-virtual idle)
|
|
)
|
|
|
|
(defmethod spawn-resetter! ((this resetter-control) (arg0 resetter-params) (arg1 game-task-node-info))
|
|
(when (not (handle->process (-> this process)))
|
|
(let ((v1-4 (process-spawn resetter arg0 arg1 :name "resetter" :to *entity-pool*)))
|
|
(when v1-4
|
|
(set! (-> this process) (process->handle (-> v1-4 0)))
|
|
#t
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
(defmethod do-reset ((this resetter-control))
|
|
(send-event (handle->process (-> this process)) 'reset)
|
|
)
|
|
|
|
(defmethod check-reset ((this resetter-control))
|
|
(send-event (handle->process (-> this process)) 'query 'reset)
|
|
)
|
|
|
|
(defmethod get-resetter ((this resetter-control))
|
|
(handle->process (-> this process))
|
|
)
|
|
|
|
(defmethod task-manager-method-25 ((this task-manager))
|
|
0
|
|
(none)
|
|
)
|
|
|
|
(defmethod task-manager-method-26 ((this task-manager))
|
|
0
|
|
(none)
|
|
)
|
|
|
|
(defmethod task-manager-method-27 ((this task-manager))
|
|
0
|
|
(none)
|
|
)
|
|
|
|
(defmethod task-manager-method-28 ((this task-manager))
|
|
0
|
|
(none)
|
|
)
|
|
|
|
;; WARN: Return type mismatch structure vs resetter-params.
|
|
;; WARN: disable def twice: 65. This may happen when a cond (no else) is nested inside of another conditional, but it should be rare.
|
|
;; WARN: disable def twice: 127. This may happen when a cond (no else) is nested inside of another conditional, but it should be rare.
|
|
;; WARN: disable def twice: 189. This may happen when a cond (no else) is nested inside of another conditional, but it should be rare.
|
|
;; WARN: disable def twice: 251. This may happen when a cond (no else) is nested inside of another conditional, but it should be rare.
|
|
(defmethod on-fail ((this task-manager) (arg0 symbol))
|
|
(local-vars (v0-0 structure))
|
|
(let ((gp-0 (-> *game-info* sub-task-list (-> this node-info manager final-node)))
|
|
(s5-0 (-> this node-info))
|
|
(v1-5 arg0)
|
|
)
|
|
(the-as
|
|
resetter-params
|
|
(cond
|
|
((= v1-5 'death)
|
|
(let ((v1-7 (-> *setting-control* user-current death-info)))
|
|
(if v1-7
|
|
(return (the-as resetter-params v1-7))
|
|
)
|
|
)
|
|
(while (!= gp-0 s5-0)
|
|
(if (and (-> gp-0 reset)
|
|
(-> gp-0 reset death-info)
|
|
(or (logtest? (-> gp-0 flags) (game-task-node-flag closed)) (game-task-node-info-method-12 gp-0))
|
|
)
|
|
(return (the-as resetter-params (-> gp-0 reset death-info)))
|
|
)
|
|
(set! gp-0 (-> *game-info* sub-task-list (-> gp-0 parent-node 0)))
|
|
)
|
|
(when (and (-> gp-0 reset)
|
|
(-> gp-0 reset death-info)
|
|
(or (logtest? (-> gp-0 flags) (game-task-node-flag closed)) (game-task-node-info-method-12 gp-0))
|
|
)
|
|
(return (the-as resetter-params (-> gp-0 reset death-info)))
|
|
v0-0
|
|
)
|
|
)
|
|
((= v1-5 'fail)
|
|
(let ((v1-35 (-> *setting-control* user-current fail-info)))
|
|
(if v1-35
|
|
(return (the-as resetter-params v1-35))
|
|
)
|
|
)
|
|
(while (!= gp-0 s5-0)
|
|
(if (and (-> gp-0 reset)
|
|
(-> gp-0 reset fail-info)
|
|
(or (logtest? (-> gp-0 flags) (game-task-node-flag closed)) (game-task-node-info-method-12 gp-0))
|
|
)
|
|
(return (the-as resetter-params (-> gp-0 reset fail-info)))
|
|
)
|
|
(set! gp-0 (-> *game-info* sub-task-list (-> gp-0 parent-node 0)))
|
|
)
|
|
(when (and (-> gp-0 reset)
|
|
(-> gp-0 reset fail-info)
|
|
(or (logtest? (-> gp-0 flags) (game-task-node-flag closed)) (game-task-node-info-method-12 gp-0))
|
|
)
|
|
(return (the-as resetter-params (-> gp-0 reset fail-info)))
|
|
v0-0
|
|
)
|
|
)
|
|
((= v1-5 'restart)
|
|
(let ((v1-63 (-> *setting-control* user-current restart-info)))
|
|
(if v1-63
|
|
(return (the-as resetter-params v1-63))
|
|
)
|
|
)
|
|
(while (!= gp-0 s5-0)
|
|
(if (and (-> gp-0 reset)
|
|
(-> gp-0 reset restart-info)
|
|
(or (logtest? (-> gp-0 flags) (game-task-node-flag closed)) (game-task-node-info-method-12 gp-0))
|
|
)
|
|
(return (the-as resetter-params (-> gp-0 reset restart-info)))
|
|
)
|
|
(set! gp-0 (-> *game-info* sub-task-list (-> gp-0 parent-node 0)))
|
|
)
|
|
(when (and (-> gp-0 reset)
|
|
(-> gp-0 reset restart-info)
|
|
(or (logtest? (-> gp-0 flags) (game-task-node-flag closed)) (game-task-node-info-method-12 gp-0))
|
|
)
|
|
(return (the-as resetter-params (-> gp-0 reset restart-info)))
|
|
v0-0
|
|
)
|
|
)
|
|
((= v1-5 'quit)
|
|
(let ((v1-91 (-> *setting-control* user-current quit-info)))
|
|
(if v1-91
|
|
(return (the-as resetter-params v1-91))
|
|
)
|
|
)
|
|
(while (!= gp-0 s5-0)
|
|
(if (and (-> gp-0 reset)
|
|
(-> gp-0 reset quit-info)
|
|
(or (logtest? (-> gp-0 flags) (game-task-node-flag closed)) (game-task-node-info-method-12 gp-0))
|
|
)
|
|
(return (the-as resetter-params (-> gp-0 reset quit-info)))
|
|
)
|
|
(set! gp-0 (-> *game-info* sub-task-list (-> gp-0 parent-node 0)))
|
|
)
|
|
(when (and (-> gp-0 reset)
|
|
(-> gp-0 reset quit-info)
|
|
(or (logtest? (-> gp-0 flags) (game-task-node-flag closed)) (game-task-node-info-method-12 gp-0))
|
|
)
|
|
(return (the-as resetter-params (-> gp-0 reset quit-info)))
|
|
v0-0
|
|
)
|
|
)
|
|
(else
|
|
(the-as structure #f)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
(defbehavior task-manager-init-by-other task-manager ((arg0 game-task-node-info) (arg1 symbol))
|
|
(stack-size-set! (-> self main-thread) 2048)
|
|
(add-connection *task-manager-engine* self nothing self arg0 #f)
|
|
(set! (-> self node-info) arg0)
|
|
(set! (-> self lev-name) arg1)
|
|
(add-setting! 'task arg0 0.0 0)
|
|
(add-setting! 'task-manager (process->ppointer self) 0.0 0)
|
|
(set-time! (-> self intro-time))
|
|
(set! (-> self fail-on-death?) (if (and (-> self node-info reset) (-> self node-info reset death-info))
|
|
#t
|
|
#f
|
|
)
|
|
)
|
|
(when arg1
|
|
(let* ((v1-19 (level-get *level* arg1))
|
|
(a1-6 (if (and (nonzero? (-> v1-19 entity)) (> (-> v1-19 entity length) 0))
|
|
(-> v1-19 entity data 0 entity)
|
|
)
|
|
)
|
|
)
|
|
(if a1-6
|
|
(process-entity-set! self a1-6)
|
|
)
|
|
)
|
|
)
|
|
(init! self)
|
|
(go-virtual wait)
|
|
)
|
|
|
|
(defmethod kill-all-children ((this task-manager))
|
|
(while (-> this child)
|
|
(deactivate (ppointer->process (-> this child)))
|
|
)
|
|
0
|
|
(none)
|
|
)
|
|
|
|
;; WARN: Return type mismatch int vs object.
|
|
(defmethod go-fail ((this task-manager))
|
|
(if *debug-segment*
|
|
(format #t "task failed: ran out of time~%")
|
|
)
|
|
(go (method-of-object this fail) (on-fail this 'fail))
|
|
0
|
|
)
|
|
|
|
(defmethod hud-timer-handler ((this task-manager))
|
|
(when (nonzero? (-> this start-time))
|
|
(let ((v1-3 (handle->process (-> this hud-timer))))
|
|
(if (and *target* (not v1-3))
|
|
(set! (-> this hud-timer)
|
|
(ppointer->handle (process-spawn hud-timer :init hud-init-by-other :name "hud-timer" :to *target*))
|
|
)
|
|
)
|
|
)
|
|
(let ((v1-13 (- (-> this time-limit) (- (current-time) (-> this start-time)))))
|
|
(let ((a0-15 *game-info*))
|
|
(set! (-> a0-15 timer) v1-13)
|
|
(set! (-> a0-15 timer-flash) (< v1-13 (seconds 10)))
|
|
)
|
|
(when (< v1-13 0)
|
|
(send-event (handle->process (-> this hud-timer)) 'hide-and-die)
|
|
(go-fail this)
|
|
)
|
|
)
|
|
)
|
|
0
|
|
(none)
|
|
)
|
|
|
|
(defmethod init! ((this task-manager))
|
|
(set! (-> this info) (-> this node-info manager))
|
|
(countdown (v1-2 4)
|
|
(set! (-> this hud v1-2) (the-as handle #f))
|
|
)
|
|
(set! (-> this arrow) (the-as handle #f))
|
|
(set! (-> this player-vehicle) (the-as handle #f))
|
|
(set! (-> this fail-now) #f)
|
|
(set! (-> this restart-now) #f)
|
|
(set! (-> this allow-fail) #t)
|
|
0
|
|
(none)
|
|
)
|
|
|
|
(defmethod set-time-limit ((this task-manager))
|
|
(when (logtest? (-> this info mask) (task-manager-mask time-limit))
|
|
(set-time! (-> this start-time))
|
|
(set! (-> this time-limit) (the-as time-frame (-> this info time-limit)))
|
|
)
|
|
0
|
|
(none)
|
|
)
|
|
|
|
(defmethod deactivate ((this task-manager))
|
|
"Make a process dead, clean it up, remove it from the active pool, and return to dead pool."
|
|
(with-pp
|
|
(let ((s5-0 pp))
|
|
(set! pp this)
|
|
(task-manager-method-25 this)
|
|
(set! pp s5-0)
|
|
)
|
|
(countdown (s5-1 4)
|
|
(send-event (handle->process (-> this hud s5-1)) 'hide-and-die)
|
|
)
|
|
((method-of-type process deactivate) this)
|
|
(none)
|
|
)
|
|
)
|
|
|
|
(defbehavior task-manager-event-handler task-manager ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block))
|
|
(taskman-event-handler self arg0 arg1 arg2 arg3)
|
|
)
|
|
|
|
(defmethod taskman-event-handler ((this task-manager) (arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block))
|
|
(local-vars (v0-2 object))
|
|
(case arg2
|
|
(('fail)
|
|
(let ((s4-0 (on-fail this 'fail))
|
|
(v1-2 (if (>= arg1 1)
|
|
(-> arg3 param 0)
|
|
)
|
|
)
|
|
)
|
|
(if (and (not (and (-> this next-state) (let ((a0-7 (-> this next-state name)))
|
|
(or (= a0-7 'complete) (= a0-7 'resolution) (= a0-7 'fail) (= a0-7 'retry))
|
|
)
|
|
)
|
|
)
|
|
(or (not v1-2) s4-0)
|
|
(not (scene-select?))
|
|
)
|
|
(go (method-of-object this fail) s4-0)
|
|
)
|
|
)
|
|
)
|
|
(('restart)
|
|
(let ((a0-12 (on-fail this 'restart)))
|
|
(if (and (not (and (-> this next-state) (let ((v1-11 (-> this next-state name)))
|
|
(or (= v1-11 'complete) (= v1-11 'fail) (= v1-11 'restart))
|
|
)
|
|
)
|
|
)
|
|
a0-12
|
|
)
|
|
(go (method-of-object this restart) (the-as symbol a0-12))
|
|
)
|
|
)
|
|
)
|
|
(('restart-immediately)
|
|
(let ((a0-16 (on-fail this 'restart)))
|
|
(when (and (or (not (and (-> this next-state) (let ((v1-19 (-> this next-state name)))
|
|
(or (= v1-19 'complete) (= v1-19 'resolution) (= v1-19 'fail) (= v1-19 'restart))
|
|
)
|
|
)
|
|
)
|
|
(not (-> this allow-fail))
|
|
)
|
|
a0-16
|
|
)
|
|
(set! (-> this restart-now) #t)
|
|
(go (method-of-object this restart) (the-as symbol a0-16))
|
|
)
|
|
)
|
|
)
|
|
(('quit)
|
|
(let ((a0-20 (on-fail this 'quit)))
|
|
(if (and (not (and (-> this next-state) (let ((v1-30 (-> this next-state name)))
|
|
(or (= v1-30 'complete) (= v1-30 'resolution) (= v1-30 'fail) (= v1-30 'restart))
|
|
)
|
|
)
|
|
)
|
|
a0-20
|
|
)
|
|
(go (method-of-object this restart) (the-as symbol a0-20))
|
|
)
|
|
)
|
|
)
|
|
(('complete)
|
|
(if (or (not (and (-> this next-state) (let ((v1-37 (-> this next-state name)))
|
|
(or (= v1-37 'complete) (= v1-37 'resolution) (= v1-37 'fail) (= v1-37 'restart))
|
|
)
|
|
)
|
|
)
|
|
(not (-> this allow-fail))
|
|
)
|
|
(go (method-of-object this complete))
|
|
)
|
|
)
|
|
(('wait)
|
|
(go (method-of-object this wait))
|
|
)
|
|
(('active)
|
|
(go (method-of-object this active))
|
|
)
|
|
(('fail-on-death)
|
|
(set! v0-2 (-> arg3 param 0))
|
|
(set! (-> this fail-on-death?) (the-as symbol v0-2))
|
|
v0-2
|
|
)
|
|
(('target)
|
|
(case (-> arg3 param 0)
|
|
(('die)
|
|
(let ((a0-37 (on-fail this 'death)))
|
|
(when a0-37
|
|
(if (not (and (-> this next-state)
|
|
(let ((v1-51 (-> this next-state name)))
|
|
(or (= v1-51 'wait) (= v1-51 'complete) (= v1-51 'resolution) (= v1-51 'fail) (= v1-51 'restart))
|
|
)
|
|
)
|
|
)
|
|
(go (method-of-object this fail) a0-37)
|
|
)
|
|
(if (not (and (-> this next-state) (let ((v1-59 (-> this next-state name)))
|
|
(or (= v1-59 'wait) (= v1-59 'complete) (= v1-59 'resolution))
|
|
)
|
|
)
|
|
)
|
|
'wait
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(('fail-continue)
|
|
(let ((v1-61 (on-fail this 'fail)))
|
|
(when v1-61
|
|
(case (-> v1-61 message)
|
|
(((resetter-message mission-retry))
|
|
(-> v1-61 retry)
|
|
)
|
|
(else
|
|
(-> v1-61 fail)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(('fail-immediately)
|
|
(when (or (not (and (-> this next-state) (let ((v1-65 (-> this next-state name)))
|
|
(or (= v1-65 'complete) (= v1-65 'resolution) (= v1-65 'fail) (= v1-65 'restart))
|
|
)
|
|
)
|
|
)
|
|
(not (-> this allow-fail))
|
|
)
|
|
(set! (-> this allow-fail) #t)
|
|
(set! (-> this fail-now) #t)
|
|
(go (method-of-object this fail) (on-fail this 'fail))
|
|
)
|
|
)
|
|
(('allow-fail)
|
|
(set! v0-2 (-> arg3 param 0))
|
|
(set! (-> this allow-fail) (the-as symbol v0-2))
|
|
v0-2
|
|
)
|
|
)
|
|
)
|
|
|
|
(defmethod ready? ((this task-manager))
|
|
(and (or (not (logtest? (game-task-node-flag city-wait) (-> this node-info flags)))
|
|
(let ((a0-4 (level-get-target-inside *level*)))
|
|
(cond
|
|
((not (and a0-4 (logtest? (-> a0-4 info level-flags) (level-flags lf0))))
|
|
(set-time! (-> this intro-time))
|
|
#f
|
|
)
|
|
(else
|
|
#t
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(or (zero? (-> this info intro-delay))
|
|
(time-elapsed? (-> this intro-time) (the-as time-frame (-> this info intro-delay)))
|
|
)
|
|
(and *target* (not (logtest? (focus-status dead teleporting) (-> *target* focus-status))))
|
|
(not (-> *setting-control* user-current talking))
|
|
)
|
|
)
|
|
|
|
(defstate wait (task-manager)
|
|
:virtual #t
|
|
:event task-manager-event-handler
|
|
:trans (behavior ()
|
|
(if (or (and (nonzero? (-> self info final-node)) (task-node-closed? (-> self info final-node)))
|
|
(and (not (logtest? (-> self node-info flags) (game-task-node-flag closed)))
|
|
(not (game-task-node-info-method-12 (-> self node-info)))
|
|
)
|
|
)
|
|
(deactivate self)
|
|
)
|
|
)
|
|
:code (behavior ()
|
|
(local-vars (v1-18 symbol))
|
|
(while (or (not *target*) (not *spawn-actors*))
|
|
(suspend)
|
|
)
|
|
(when (or (logtest? (game-task-node-flag intro-wait city-wait) (-> self node-info flags))
|
|
(nonzero? (-> self info intro-delay))
|
|
)
|
|
(while (not (ready? self))
|
|
(suspend)
|
|
)
|
|
(let ((a0-5 (-> self info intro-scene)))
|
|
(when a0-5
|
|
(let ((gp-1 (talker-spawn-func
|
|
(string->talker-speech (the-as string a0-5))
|
|
*entity-pool*
|
|
(target-pos 0)
|
|
(the-as region #f)
|
|
)
|
|
)
|
|
)
|
|
(get-status *gui-control* gp-1)
|
|
(until v1-18
|
|
(suspend)
|
|
(let ((v1-17 (get-status *gui-control* gp-1)))
|
|
(set! v1-18 (or (= v1-17 (gui-status stop)) (= v1-17 (gui-status unknown))))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(if (logtest? (-> self node-info flags) (game-task-node-flag intro-wait))
|
|
(open! (-> self node-info) 'event)
|
|
)
|
|
)
|
|
(set-time-limit self)
|
|
(if (logtest? (-> self info mask) (task-manager-mask auto-complete))
|
|
(go-virtual complete)
|
|
)
|
|
(go-virtual active)
|
|
)
|
|
)
|
|
|
|
(defstate active (task-manager)
|
|
:virtual #t
|
|
:event task-manager-event-handler
|
|
:enter (behavior ()
|
|
(set-time! (-> self state-time))
|
|
)
|
|
:trans (behavior ()
|
|
((-> (method-of-object self wait) trans))
|
|
(if (logtest? (-> self info mask) (task-manager-mask time-limit))
|
|
(hud-timer-handler self)
|
|
)
|
|
(if (and *debug-segment* (not *editable*))
|
|
(format *stdebug* "task-manager ~A alive~%" (-> self node-info name))
|
|
)
|
|
(task-manager-method-26 self)
|
|
)
|
|
:code sleep-code
|
|
)
|
|
|
|
(defstate complete (task-manager)
|
|
:virtual #t
|
|
:event task-manager-event-handler
|
|
:enter (behavior ()
|
|
(set-time! (-> self state-time))
|
|
(set-setting! 'allow-progress #f 0.0 0)
|
|
)
|
|
:code (behavior ()
|
|
(if (get-resetter *resetter-control*)
|
|
(sleep-code)
|
|
)
|
|
(send-event (handle->process (-> self arrow)) 'die)
|
|
(countdown (gp-0 4)
|
|
(send-event (handle->process (-> self hud gp-0)) 'hide-and-die)
|
|
)
|
|
(let ((gp-1 (-> self child)))
|
|
(while gp-1
|
|
(send-event (ppointer->process gp-1) 'notify 'die)
|
|
(set! gp-1 (-> gp-1 0 brother))
|
|
)
|
|
)
|
|
(when (not (logtest? (game-task-node-flag no-hud-wait) (-> self node-info flags)))
|
|
(let ((gp-2 (current-time)))
|
|
(label cfg-28)
|
|
(when (not (time-elapsed? gp-2 (seconds 5)))
|
|
(when (handle->process (-> self arrow))
|
|
(suspend)
|
|
(goto cfg-28)
|
|
)
|
|
(countdown (v1-42 4)
|
|
(when (handle->process (-> self hud v1-42))
|
|
(suspend)
|
|
(goto cfg-28)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(go-virtual resolution)
|
|
)
|
|
)
|
|
|
|
(defstate resolution (task-manager)
|
|
:virtual #t
|
|
:event task-manager-event-handler
|
|
:enter (behavior ()
|
|
(set-time! (-> self state-time))
|
|
)
|
|
:code (behavior ()
|
|
(local-vars (v1-27 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)
|
|
(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-27 (or (handle->process (-> self arrow)) (begin
|
|
(countdown (v1-28 4)
|
|
(when (handle->process (-> self hud v1-28))
|
|
(set! v1-27 #t)
|
|
(goto cfg-39)
|
|
)
|
|
)
|
|
#f
|
|
)
|
|
)
|
|
)
|
|
(label cfg-39)
|
|
v1-27
|
|
)
|
|
(suspend)
|
|
)
|
|
)
|
|
)
|
|
|
|
(defstate fail (task-manager)
|
|
:virtual #t
|
|
:event task-manager-event-handler
|
|
:exit (behavior ()
|
|
(disable *screen-filter*)
|
|
)
|
|
:code (behavior ((arg0 resetter-params))
|
|
(while (not (-> self allow-fail))
|
|
(suspend)
|
|
)
|
|
(send-event (handle->process (-> self arrow)) 'die)
|
|
(countdown (s5-0 4)
|
|
(send-event (handle->process (-> self hud s5-0)) 'hide-and-die)
|
|
)
|
|
(task-manager-method-28 self)
|
|
(let ((s5-1 (-> self info on-fail)))
|
|
(if s5-1
|
|
(script-eval s5-1)
|
|
)
|
|
)
|
|
(when arg0
|
|
(spawn-resetter! *resetter-control* arg0 (-> self node-info))
|
|
(while (get-resetter *resetter-control*)
|
|
(suspend)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
(defstate restart (task-manager)
|
|
:virtual #t
|
|
:event task-manager-event-handler
|
|
:exit (-> (method-of-type task-manager fail) exit)
|
|
:code (behavior ((arg0 symbol))
|
|
(send-event (handle->process (-> self arrow)) 'die)
|
|
(countdown (s5-0 4)
|
|
(send-event (handle->process (-> self hud s5-0)) 'hide-and-die)
|
|
)
|
|
(task-manager-method-28 self)
|
|
(let ((s5-1 (-> self info on-fail)))
|
|
(if s5-1
|
|
(script-eval s5-1)
|
|
)
|
|
)
|
|
(cond
|
|
(arg0
|
|
(spawn-resetter! *resetter-control* (the-as resetter-params arg0) (-> self node-info))
|
|
(while (get-resetter *resetter-control*)
|
|
(suspend)
|
|
)
|
|
)
|
|
(else
|
|
(initialize! *game-info* 'try (the-as game-save #f) (the-as string #f) (the-as resetter-spec #f))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
;; og:preserve-this added
|
|
(defun get-active-mission-description ((info discord-info))
|
|
"Added in PC port to retrieve a string for the currently active mission to display in Discord."
|
|
(let* ((nodes (-> *game-info* sub-task-list))
|
|
(level (level-get-target-inside *level*))
|
|
(task-level-idx (if level (-> level info task-level) 0))
|
|
(side-missions-start (the int (game-task-node desert-bbush-get-to-1-introduction)))
|
|
(side-missions-end (the int (game-task-node desert-bbush-destroy-interceptors-resolution)))
|
|
; (gg-node? (lambda ((node game-task-node-info))
|
|
; (or (= (-> node task) (game-task city-red-gun-training))
|
|
; (= (-> node task) (game-task city-yellow-gun-training))
|
|
; (= (-> node task) (game-task city-blue-gun-training))
|
|
; (= (-> node task) (game-task city-dark-gun-training)))))
|
|
)
|
|
(dotimes (i (-> nodes length))
|
|
(when (nonzero? i)
|
|
(let* ((node (-> nodes i))
|
|
(mgr-info (-> node manager))
|
|
(mgr-handle (if mgr-info (-> mgr-info manager) (the handle #f))))
|
|
;; if we are not in a valid task level, just return.
|
|
(when (= task-level-idx 0)
|
|
(return (lookup-text! *common-text* (text-id discord-rpc-not-in-mission) #f))
|
|
)
|
|
;; check for gungame (there is probably a better way to do this)
|
|
; (when (and (= (-> level name) 'gungame)
|
|
; (gg-node? node)
|
|
; (task-node-open? (the game-task-node i)))
|
|
; (awhen (process-by-ename "training-manager-2")
|
|
; (if (= (-> it next-state name) 'course)
|
|
; (let ((feat (-> *setting-control* user-current features)))
|
|
; (cond
|
|
; ((not (logtest? feat (game-feature gun-yellow gun-blue gun-dark)))
|
|
; (set! (-> info task) "city-red-gun-training")
|
|
; (return (lookup-text! *common-text* (text-id discord-rpc-red-gun-training) #f))
|
|
; )
|
|
; ((not (logtest? feat (game-feature gun-red gun-blue gun-dark)))
|
|
; (set! (-> info task) "city-yellow-gun-training")
|
|
; (return (lookup-text! *common-text* (text-id discord-rpc-yellow-gun-training) #f))
|
|
; )
|
|
; ((not (logtest? feat (game-feature gun-red gun-yellow gun-dark)))
|
|
; (set! (-> info task) "city-blue-gun-training")
|
|
; (return (lookup-text! *common-text* (text-id discord-rpc-blue-gun-training) #f))
|
|
; )
|
|
; (else
|
|
; (set! (-> info task) "city-dark-gun-training")
|
|
; (return (lookup-text! *common-text* (text-id discord-rpc-dark-gun-training) #f))
|
|
; )
|
|
; )
|
|
; )
|
|
; )
|
|
; )
|
|
; )
|
|
;; check for side missions
|
|
(when (and (>= i side-missions-start)
|
|
(<= i side-missions-end)
|
|
(task-node-open? (the game-task-node i))
|
|
mgr-handle)
|
|
(set! (-> info task) (game-task->string (-> node task)))
|
|
(return (lookup-text! *common-text* (text-id discord-rpc-in-side-mission) #f))
|
|
)
|
|
;; check for any other tasks
|
|
(when (and ; (not (gg-node? node))
|
|
(task-node-open? (the game-task-node i))
|
|
(!= (-> node description) (the text-id 0))
|
|
;; small hack for desert-glide: hanga has task-level volcano, but the task node has task-level desert...
|
|
(or (and (= (-> level name) 'hanga)
|
|
(or (= (the game-task-node i) (game-task-node desert-glide-templetop))
|
|
(= (the game-task-node i) (game-task-node desert-glide-resolution))))
|
|
(= (-> *task-level* task-level-idx) (-> node level))))
|
|
(set! (-> info task) (game-task->string (-> node task)))
|
|
(return (lookup-text! *common-text* (-> node description) #f))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(lookup-text! *common-text* (text-id discord-rpc-not-in-mission) #f)
|
|
)
|
|
) |