jak-project/goal_src/jak3/engine/common-obs/warp-gate.gc
Hat Kid 58a5440c8a
decomp3: more misc files (#3466)
Makes a bunch of missions mostly playable, including:
- `arena-training-1`
- `arena-fight-1`
- `wascity-chase`
- `arena-fight-2`
- `arena-fight-3`
- `volcano-darkeco`
- `desert-hover`
- `nest-eggs`
- `temple-climb`
- `temple-oracle`
- `temple-tests`
- `desert-beast-battle`
- `desert-turtle-training`
- `desert-course-race`
- `desert-artifact-race1`
- `wascity-leaper-race`
- `wascity-pre-game`
- `sewer-met-hum`
- `forest-kill-plants`
- `forest-ring-chase`
- `temple-defend`
- `tower-destroy`
- `desert-glide`

---
Files:

- `ripple`
- `waswide-mood`
- `sig-rider`
- `nst-tasks`
- `nst-part`
- `nst-gas`
- `nst-eggs-h`
- `nst-obs`
- `nst-mood`
- `egg-spider`
- `wasdoors-init`
- `wasall-tasks`
- `wvehicle-race`
- `wcar-marauder`
- `wcar-marauder-b`
- `turret-control`
- `was-squad-control`
- `turtle-training`
- `kleever-rider`
- `course-race`
- `artifact-race`
- `desert-hover`
- `desbeast-path-h`
- `des-beast`
- `desertg-obs`
- `desertf-obs`
- `desertd-obs`
- `desert-dust-storm`
- `des-cactus`
- `race-hud`
- `race-info`
- `race-manager`
- `tizard`
- `flyingsaw`
- `hover-training`
- `temple-mood`
- `temple-obs`
- `temple-obs2`
- `temple-part`
- `temple-scenes`
- `templex-mood`
- `templex-obs`
- `templex-part`
- `tomb-baby-spider`
- `target-turret-shot`
- `target-turret`
- `beast-battle-path`
- `des-beast-2`
- `mh-flyer`
- `scorpion-gun`
- `hover-enemy-h`
- `hover-enemy`
- `hover-formation-h`
- `hover-formation`
- `hover-nav-control-h`
- `hover-nav-control`
- `flamer-hover`
- `hover-nav-templea`
- `robo-hover`
- `hover-nav-sewb`
- `hover-nav-sewg`
- `hover-nav-sewj`
- `hover-nav-sewl`
- `hover-nav-sewo`
- `hover-nav-towera`
- `tower-mood`
- `tower-obs`
- `tower-scenes`
- `tower-part`
- `eco-green-collider`
- `forest-bridges`
- `forest-kill-plants`
- `forest-mood`
- `forest-ring-chase`
- `forest-tasks`
- `forest-part`
- `foresta-obs`
- `hover-nav-foresta`
- `mh-plant`
- `dp-bipedal-part`
- `dp-bipedal-shot`
- `dp-bipedal`
- `neo-spawner`
- `for-turret`
- `for-turret-shot`
- `neo-wasp`
- `neo-wasp-part`
- `volcanox-scenes`
- `volcanox-mood`
- `volcano-scenes`
- `volcano-mood`
- `volcano-obs`
- `volcano-obs2`
- `chain-physics`
- `rigid-body-plat`
- `volcano-part`
- `flamer-lava`
- `flitter`
- `spiky-frog`
- `flut-wild`
- `target-indax`
- `target-indax-hang`
- `mantis`
- `volcanox-obs`
- `spyder`
- `wcar-faccar`
- `mhcity-obs2`
- `mhcity-part`
- `mhcity-obs`
- `dm-mine-spider`
- `rapid-gunner`
- `stadium-mood`
- `stadium-scenes`
- `stadiuma-mood`
- `stadiuma-part`
- `kanga-lizard`
- `marauder`
- `arena-scenes`
- `wasstada-mood`
- `wasstada-obs`
- `wasstada-part`
- `wasstadb-obs`
- `wasstadc-obs`
- `dm-flyer`
- `maker-part`
- `maker-projectile`
- `skeet-part`
- `wascity-turret`
- `wasgun-h`
- `wasgun-hud`
- `wasgun-manager`
- `nav-graph-h`
- `traffic-engine-h`
- `waswide-init`
- `cty-borrow-manager-h`
- `cty-borrow-manager`
- `desert-part`
- `height-map-h`
- `height-map`
- `traffic-height-map`
- `vehicle-control`
- `hvehicle-h`
- `hvehicle`
- `hvehicle-effects`
- `hvehicle-physics`
- `hvehicle-util`
- `glider-h`
- `glider-hud`
- `glider-manager`
- `glider-ring`
- `glider-ring-part`
- `h-glider`
- `hanga-init`
- `was-pre-game`
- `was-leaper-race`
- `flut-racer`
- `desert-scenes`
- `desert-lizard-h`
- `desert-lizard-task`
- `desert-lizard`
- `throne-scenes`
- `waspal-mood`
- `waspala-obs`
- `waspala-part`
- `deswalk-obs`
- `deswalk-part`
- `terraformer-drone`
- `terraformer-head`
- `terraformer-part`
- `terraformer-setup`
2024-04-22 18:43:51 +02:00

1927 lines
65 KiB
Common Lisp

;;-*-Lisp-*-
(in-package goal)
;; name: warp-gate.gc
;; name in dgo: warp-gate
;; dgos: GAME
(define-extern v-marauder type)
(define-extern *range-warp-dust-color* curve-color-fast)
(define-extern *range-warp-dust-alpha* curve2d-fast)
(define-extern *range-warp-dust-scale-x* curve2d-fast)
(define-extern *range-warp-dust-scale-y* curve2d-fast)
(define-extern *curve-warp-dust-alpha* curve2d-fast)
(define-extern *curve-warp-dust-scale-x* curve2d-fast)
(define-extern *curve-warp-dust-scale-y* curve2d-fast)
;; DECOMP BEGINS
(defpartgroup group-warpgate
:id 202
:duration (seconds 0.267)
:flags (sp0 sp6)
:bounds (static-bspherem 0 0 0 8)
:rotate ((degrees 90) (degrees 0) (degrees 0))
:parts ((sp-item 825 :flags (is-3d sp3 sp7)) (sp-item 826 :flags (sp3)) (sp-item 827 :flags (sp7)))
)
(defpart 825
:init-specs ((:texture (middot level-default-sprite))
(:num 1.0)
(:scale-x (meters 4.75))
(:scale-y :copy scale-x)
(:r 255.0)
(:g 255.0)
(:b 255.0)
(:a 196.0)
(:fade-a -3.1875)
(:timer (seconds 0.267))
(:flags (sp-cpuinfo-flag-2))
(:rotate-y (degrees 0))
)
)
(defpart 826
:init-specs ((:texture (glow level-default-sprite))
(:num 1.0)
(:scale-x (meters 14))
(:rot-x (degrees 11.25))
(:rot-z (degrees 0) (degrees 3600))
(:scale-y :copy scale-x)
(:r 255.0)
(:g 255.0)
(:b 255.0)
(:a 48.0)
(:fade-a -0.8)
(:timer (seconds 0.267))
(:flags (glow))
(:userdata 4096.0)
)
)
(defpart 827
:init-specs ((:texture (hotdot level-default-sprite))
(:num 16.0)
(:x (meters 0) (meters 2))
(:scale-x (meters 0.1) (meters 0.1))
(:scale-y :copy scale-x)
(:r 255.0)
(:g 255.0)
(:b 255.0)
(:a 255.0)
(:scalevel-x (meters -0.0025))
(:scalevel-y :copy scalevel-x)
(:timer (seconds 0.267))
(:flags (sp-cpuinfo-flag-0 sp-cpuinfo-flag-3))
(:rotate-y (degrees 0) (degrees 3600))
)
)
(defpartgroup group-airtrain-dust-plume :id 203 :bounds (static-bspherem 0 0 0 15) :parts ((sp-item 828)))
(defpart 828
:init-specs ((:texture (bigpuff level-default-sprite))
(:num 1.0 1.0)
(:x (meters 0) (meters 10))
(:scale-x (meters 1) (meters 1))
(:rot-z (degrees 0) (degrees 3600))
(:scale-y (meters 1) (meters 1))
(:r 128.0)
(:g 106.0 16.0)
(:b 64.0 32.0)
(:a 16.0 32.0)
(:vel-x (meters 0.033333335) (meters 0.033333335))
(:scalevel-x (meters 0.033333335) (meters 0.006666667))
(:rotvel-z (degrees -0.3) (degrees 0.6))
(:scalevel-y :copy scalevel-x)
(:fade-a -0.04 -0.08)
(:accel-y (meters 0.00033333333))
(:friction 0.95 0.03)
(:timer (seconds 4.335))
(:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-13))
(:rotate-y (degrees 0) (degrees 3600))
)
)
(defpartgroup group-airtrain-dust-hover :id 204 :bounds (static-bspherem 0 0 0 15) :parts ((sp-item 829)))
(defpart 829
:init-specs ((:texture (bigpuff level-default-sprite))
(:num 1.0)
(:x (meters 0) (meters 5))
(:scale-x (meters 1) (meters 1))
(:rot-z (degrees 0) (degrees 3600))
(:scale-y (meters 1) (meters 1))
(:r 128.0)
(:g 106.0 16.0)
(:b 64.0 32.0)
(:a 16.0 16.0)
(:vel-x (meters 0.033333335) (meters 0.033333335))
(:scalevel-x (meters 0.016666668) (meters 0.006666667))
(:rotvel-z (degrees -0.3) (degrees 0.6))
(:scalevel-y :copy scalevel-x)
(:fade-a -0.04 -0.08)
(:accel-y (meters 0.00033333333))
(:friction 0.95 0.03)
(:timer (seconds 4.335))
(:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-13))
(:rotate-y (degrees 0) (degrees 3600))
)
)
(defpartgroup group-airtrain-thruster
:id 205
:linger-duration (seconds 2)
:flags (sp4 sp6)
:bounds (static-bspherem 0 0 0 12)
:rotate ((degrees 180) (degrees 0) (degrees 0))
:parts ((sp-item 830 :flags (sp6 sp7))
(sp-item 831 :flags (sp6 sp7))
(sp-item 832 :flags (sp7))
(sp-item 833 :flags (sp7))
(sp-item 834 :flags (sp7))
)
)
(defpartgroup group-airtrain-thruster-off
:id 206
:linger-duration (seconds 2)
:flags (sp4 sp6)
:bounds (static-bspherem 0 0 0 12)
:rotate ((degrees 180) (degrees 0) (degrees 0))
:parts ((sp-item 834 :fade-after (meters 120) :falloff-to (meters 90) :flags (sp7))
(sp-item 835 :fade-after (meters 120) :falloff-to (meters 90) :flags (sp7))
(sp-item 836 :flags (sp6 sp7))
)
)
(defpart 830
:init-specs ((:texture (glow level-default-sprite))
(:num 1.0)
(:y (meters 0.1))
(:scale-x (meters 1) (meters 0.4))
(:rot-x (degrees 2.25))
(:scale-y :copy scale-x)
(:r 255.0)
(:g 64.0 128.0)
(:b 0.0)
(:a 64.0 8.0)
(:timer (seconds 0.017))
(:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow))
(:userdata 409.6)
(:rotate-y (degrees 0))
)
)
(defpart 831
:init-specs ((:texture (glow-soft level-default-sprite))
(:num 1.0)
(:y (meters 0.1))
(:scale-x (meters 4.8) (meters 0.6))
(:rot-x (degrees 2.25))
(:scale-y :copy scale-x)
(:r 255.0)
(:g 64.0 128.0)
(:b 0.0)
(:a 16.0 2.0)
(:timer (seconds 0.017))
(:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow))
(:userdata 409.6)
(:rotate-y (degrees 0))
)
)
(defpart 832
:init-specs ((:texture (bigpuff level-default-sprite))
(:num 1.0 2.0)
(:scale-x (meters 1) (meters 1))
(:rot-z (degrees 0) (degrees 3600))
(:scale-y (meters 1) (meters 1))
(:r 196.0)
(:g 128.0 64.0)
(:b :copy g)
(:a 16.0 16.0)
(:vel-x (meters -0.006666667) (meters 0.013333334))
(:vel-y (meters -0.05) (meters -0.1))
(:vel-z (meters -0.006666667) (meters 0.013333334))
(:scalevel-x (meters 0.053333335) (meters 0.053333335))
(:rotvel-z (degrees -1.2) (degrees 2.4))
(:scalevel-y :copy scalevel-x)
(:fade-r 0.0)
(:fade-g 0.0)
(:fade-b 0.0)
(:fade-a -0.21333334 -0.42666668)
(:accel-y (meters 0.00016666666) (meters 0.0005))
(:friction 0.94 0.04)
(:timer (seconds 2))
(:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-13 sp-cpuinfo-flag-14))
(:rotate-y (degrees 0))
)
)
(defpart 835
:init-specs ((:texture (bigpuff level-default-sprite))
(:num 1.0 2.0)
(:scale-x (meters 1) (meters 1))
(:rot-z (degrees 0) (degrees 3600))
(:scale-y (meters 1) (meters 1))
(:r 196.0)
(:g 128.0 64.0)
(:b :copy g)
(:a 10.0 4.0)
(:vel-x (meters -0.006666667) (meters 0.013333334))
(:vel-y (meters -0.05) (meters -0.1))
(:vel-z (meters -0.006666667) (meters 0.013333334))
(:scalevel-x (meters 0.053333335) (meters 0.053333335))
(:rotvel-z (degrees -1.2) (degrees 2.4))
(:scalevel-y :copy scalevel-x)
(:fade-r 0.0)
(:fade-g 0.0)
(:fade-b 0.0)
(:fade-a -0.21333334 -0.42666668)
(:accel-y (meters 0.00016666666) (meters 0.0005))
(:friction 0.94 0.04)
(:timer (seconds 2))
(:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-13 sp-cpuinfo-flag-14))
(:rotate-y (degrees 0))
)
)
(defpart 836
:init-specs ((:texture (glow level-default-sprite))
(:num 1.0)
(:y (meters 0.1))
(:scale-x (meters 1.4) (meters 0.1))
(:rot-x (degrees 2.25))
(:scale-y :copy scale-x)
(:r 128.0)
(:g 48.0 32.0)
(:b 0.0)
(:a 48.0 8.0)
(:timer (seconds 0.017))
(:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow))
(:userdata 409.6)
(:rotate-y (degrees 0))
)
)
(defpart 833
:init-specs ((:texture (hotdot level-default-sprite))
(:num 0.0 1.0)
(:x (meters 0) (meters 0.5))
(:scale-x (meters 0.2) (meters 0.1))
(:scale-y :copy scale-x)
(:r 192.0 64.0)
(:g 128.0)
(:b 0.0)
(:a 128.0)
(:omega (degrees 0.0675) (degrees 0.0225))
(:vel-x (meters -0.013333334) (meters 0.026666667))
(:vel-y (meters -0.1) (meters -0.06666667))
(:vel-z (meters -0.013333334) (meters 0.026666667))
(:fade-g -1.0)
(:fade-a -2.56)
(:accel-x (meters 0) (meters 0.0016666667))
(:friction 0.96 0.02)
(:timer (seconds 0.085) (seconds 0.08))
(:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-13 sp-cpuinfo-flag-14))
(:func 'sparticle-motion-blur)
(:rotate-y (degrees 0) (degrees 3600))
)
)
(defpart 834
:init-specs ((:num 0.4)
(:rot-x 8)
(:r 1638.4)
(:g 1331.2)
(:b 1433.6)
(:vel-y (meters -0.05) (meters -0.016666668))
(:fade-r 32.768)
(:fade-g 28.671999)
(:fade-b 26.623999)
(:accel-x (meters 0) (meters 0.0016666667))
(:friction 0.94)
(:timer (seconds 0.335))
(:flags (distort))
(:next-time (seconds 0.167))
(:next-launcher 837)
(:rotate-y (degrees 0) (degrees 360))
)
)
(defpart 837
:init-specs ((:fade-r 0.0) (:fade-g 0.0) (:fade-b -4.096))
)
(defpartgroup group-warp-hellcat-thruster
:id 207
:duration (seconds 3)
:flags (sp0 sp4)
:bounds (static-bspherem 0 0 0 32)
:parts ((sp-item 838 :flags (is-3d sp7))
(sp-item 839 :flags (is-3d sp7))
(sp-item 840 :flags (sp7))
(sp-item 841 :flags (is-3d sp7))
(sp-item 842 :flags (is-3d sp7))
(sp-item 843 :flags (sp7))
)
)
(defpart 838
:init-specs ((:texture (mech-flame lprecurc-sprite))
(:num 1.0)
(:x (meters 1.45))
(:y (meters 1.1))
(:z (meters -5.15))
(:scale-x (meters 0.6))
(:rot-x 4)
(:scale-y (meters 2))
(:r 128.0 128.0)
(:g 32.0 96.0)
(:b :copy g)
(:a 128.0 64.0)
(:timer (seconds 0.017))
(:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-3))
(:rotate-y (degrees 0))
)
)
(defpart 839
:init-specs ((:texture (gun-yellow-muzzleflash level-default-sprite))
(:num 1.0)
(:x (meters 1.45))
(:y (meters 1.1))
(:z (meters -5.15))
(:scale-x (meters 0.6))
(:rot-x 4)
(:rot-z (degrees 90))
(:scale-y (meters 2))
(:r 128.0 128.0)
(:g 32.0 96.0)
(:b :copy g)
(:a 128.0 64.0)
(:timer (seconds 0.017))
(:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-3))
(:rotate-y (degrees 0))
)
)
(defpart 840
:init-specs ((:texture (glow-soft level-default-sprite))
(:num 1.0)
(:x (meters 1.45))
(:y (meters 1.1))
(:z (meters -4.75))
(:scale-x (meters 1.75))
(:rot-x (degrees 0.5625))
(:scale-y :copy scale-x)
(:r 255.0)
(:g 0.0 64.0)
(:b 0.0)
(:a 16.0 4.0)
(:rotvel-z (degrees 0.3))
(:timer (seconds 0.017))
(:flags (glow))
(:userdata 2048.0)
(:rotate-y (degrees 0))
)
)
(defpart 841
:init-specs ((:texture (gun-yellow-muzzleflash level-default-sprite))
(:num 1.0)
(:x (meters -1.45))
(:y (meters 1.1))
(:z (meters -5.15))
(:scale-x (meters 0.6))
(:rot-x 4)
(:scale-y (meters 2))
(:r 128.0 128.0)
(:g 32.0 96.0)
(:b :copy g)
(:a 128.0 64.0)
(:timer (seconds 0.017))
(:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-3))
(:rotate-y (degrees 0))
)
)
(defpart 842
:init-specs ((:texture (gun-yellow-muzzleflash level-default-sprite))
(:num 1.0)
(:x (meters -1.45))
(:y (meters 1.1))
(:z (meters -5.15))
(:scale-x (meters 0.6))
(:rot-x 4)
(:rot-z (degrees 90))
(:scale-y (meters 2))
(:r 128.0 128.0)
(:g 32.0 96.0)
(:b :copy g)
(:a 128.0 64.0)
(:timer (seconds 0.017))
(:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-3))
(:rotate-y (degrees 0))
)
)
(defpart 843
:init-specs ((:texture (glow-soft level-default-sprite))
(:num 1.0)
(:x (meters -1.45))
(:y (meters 1.1))
(:z (meters -4.75))
(:scale-x (meters 1.75))
(:rot-x (degrees 0.5625))
(:scale-y :copy scale-x)
(:r 255.0)
(:g 0.0 64.0)
(:b 0.0)
(:a 16.0 4.0)
(:rotvel-z (degrees 0.3))
(:timer (seconds 0.017))
(:flags (glow))
(:userdata 2048.0)
(:rotate-y (degrees 0))
)
)
(defskelgroup skel-warp-gate warp-gate warp-gate-lod0-jg warp-gate-idle-ja
((warp-gate-lod0-mg (meters 999999)))
:bounds (static-spherem 0 3 0 4)
:origin-joint-index 3
)
(deftype warp-gate (process-drawable)
((root collide-shape :override)
(level-name symbol)
(on-notice pair)
(on-activate pair)
(on-close pair)
(wait-for pair)
(continue continue-point)
(distance meters)
(anim-speed float)
(test-time time-frame)
(center vector :inline)
)
(:state-methods
idle
(use continue-point)
hidden
)
(:methods
(init-skel-and-collide! (_type_) none)
(init-defaults! (_type_) none)
(eval-on-notice (_type_) continue-point)
)
)
(defmethod eval-on-notice ((this warp-gate))
(let ((s5-0 (script-eval (-> this on-notice))))
(cond
((= s5-0 'hide)
(logior! (-> this draw status) (draw-control-status no-draw))
(set! (-> this continue) #f)
)
(s5-0
(logclear! (-> this draw status) (draw-control-status no-draw))
(set! (-> this continue) (get-continue-by-name *game-info* (the-as string (car s5-0))))
(set! (-> this on-activate) (the-as pair (car (cdr s5-0))))
(set! (-> this wait-for) (the-as pair (car (cdr (cdr s5-0)))))
(set! (-> this on-close) (the-as pair (car (cdr (cdr (cdr s5-0))))))
)
(else
(set! (-> this continue) #f)
)
)
)
(-> this continue)
)
(defstate hidden (warp-gate)
:virtual #t
:code sleep-code
)
(defstate idle (warp-gate)
:virtual #t
:event (behavior ((proc process) (argc int) (message symbol) (block event-message-block))
(case message
(('hide)
(go-virtual hidden)
)
(('effect)
(script-eval '(part-tracker "group-warpgate" entity self joint "outerOut"))
)
)
)
:code (behavior ()
(remove-setting! 'allow-progress)
(set-time! (-> self state-time))
(update-transforms (-> self root))
(until #f
(eval-on-notice self)
(when (and (and *target*
(and (>= (-> self distance) (vector-vector-distance (-> self root trans) (-> *target* control trans)))
(not (logtest? (focus-status teleporting) (-> *target* focus-status)))
)
)
(-> self continue)
(-> *setting-control* user-current airlock)
(begin
(persist-with-delay *setting-control* 'lightjak (seconds 0.1) 'lightjak #f 0.0 0)
(persist-with-delay *setting-control* 'darkjak (seconds 0.1) 'darkjak #f 0.0 0)
(persist-with-delay *setting-control* 'board (seconds 0.1) 'board #f 0.0 0)
(not (logtest? (focus-status in-head edge-grab pole flut tube light board pilot mech dark indax)
(-> *target* focus-status)
)
)
)
(not (-> *setting-control* user-current hint))
(zero? (-> *target* ext-anim))
)
(talker-surpress!)
(when (and (can-display-query? self "warp-gate" -99.0)
(cond
((and (-> *target* next-state) (let ((v1-37 (-> *target* next-state name)))
(or (= v1-37 'target-warp-in) (= v1-37 'target-warp-out))
)
)
(set-time! (-> self state-time))
#f
)
(else
#t
)
)
(time-elapsed? (-> self state-time) (seconds 0.1))
)
(if (and (cpad-pressed? 0 triangle) (process-grab? *target* #f))
(go-virtual use (-> self continue))
)
(script-eval (-> self on-close))
(let ((gp-0
(new 'stack 'font-context *font-default-matrix* 32 320 0.0 (font-color default) (font-flags shadow kerning))
)
)
(let ((v1-58 gp-0))
(set! (-> v1-58 width) (the float 340))
)
(let ((v1-59 gp-0))
(set! (-> v1-59 height) (the float 80))
)
(let ((v1-60 gp-0)
(a0-25 (-> *setting-control* user-default language))
)
(set! (-> v1-60 scale) (if (or (= a0-25 (language-enum korean)) (= a0-25 (language-enum russian)))
0.9
0.7
)
)
)
(set! (-> gp-0 flags) (font-flags shadow kerning large))
(print-game-text
(lookup-text! *common-text* (text-id text-0083) #f)
gp-0
#f
44
(bucket-id hud-draw-hud-alpha)
)
)
)
)
(cond
((-> self continue)
(seek! (-> self anim-speed) 1.0 (* 2.0 (seconds-per-frame)))
(setup-masks (-> self draw) 2 0)
)
(else
(setup-masks (-> self draw) 0 2)
(seek! (-> self anim-speed) 0.0 (* 2.0 (seconds-per-frame)))
)
)
(update! (-> self sound))
(ja-post)
(suspend)
(ja :num! (loop! (-> self anim-speed)))
)
#f
)
)
(defstate use (warp-gate)
:virtual #t
:event (behavior ((proc process) (argc int) (message symbol) (block event-message-block))
(case message
(('effect)
(script-eval '(part-tracker "group-warpgate" entity self joint "outerOut"))
)
)
)
:exit (behavior ()
(remove-setting! 'mode-name)
(remove-setting! 'interp-time)
)
:trans (behavior ()
(send-event *camera* 'joystick 0.0 0.0)
)
:code (behavior ((arg0 continue-point))
(local-vars (v1-38 symbol))
(kill-current-talker '() '() 'exit)
(set-setting! 'mode-name 'cam-fixed 0.0 0)
(set-setting! 'interp-time 'abs 0.0 0)
(set-time! (-> self state-time))
(logclear! (-> self mask) (process-mask actor-pause))
(when (not arg0)
(process-release? *target*)
(go-virtual idle)
)
(set-setting! 'allow-progress #f 0.0 0)
(set! (-> *setting-control* user-default border-mode) #t)
(set! (-> *level* play?) #t)
(apply-settings *setting-control*)
(let ((s5-0 (new 'stack-no-clear 'event-message-block)))
(set! (-> s5-0 from) (process->ppointer self))
(set! (-> s5-0 num-params) 4)
(set! (-> s5-0 message) 'change-state)
(set! (-> s5-0 param 0) (the-as uint target-warp-out))
(let ((v1-22 (new 'static 'vector)))
(set! (-> v1-22 quad) (-> self center quad))
(set! (-> s5-0 param 1) (the-as uint v1-22))
)
(set! (-> s5-0 param 2) (the-as uint (target-pos 0)))
(set! (-> s5-0 param 3) (the-as uint (process->handle self)))
(send-event-function *target* s5-0)
)
(script-eval (-> self on-activate))
(while (begin
(set! v1-38
(when (-> self wait-for)
(let* ((s5-1 (-> self wait-for))
(a1-8 (car s5-1))
)
(while (not (null? s5-1))
(when (not (member (status-of-level-and-borrows *level* (the-as symbol a1-8) #f) '(loaded active)))
(set! v1-38 #t)
(goto cfg-21)
)
(set! s5-1 (cdr s5-1))
(set! a1-8 (car s5-1))
)
)
#f
)
)
(label cfg-21)
(or v1-38 (not (time-elapsed? (-> self state-time) (seconds 2))))
)
(update! (-> self sound))
(suspend)
(ja :num! (loop!))
(ja-post)
)
(if (not (logtest? (-> arg0 flags) (continue-flags no-blackout)))
(set-blackout-frames (seconds 0.05))
)
(start 'play arg0)
(let ((gp-1 (current-time)))
(until (time-elapsed? gp-1 (seconds 1))
(suspend)
)
)
(while (and *target* (and (>= 81920.0 (vector-vector-distance (-> self root trans) (-> *target* control trans)))
(not (logtest? (focus-status teleporting) (-> *target* focus-status)))
)
)
(suspend)
(ja :num! (loop!))
(ja-post)
)
(logior! (-> self mask) (process-mask actor-pause))
(go-virtual idle)
)
)
;; WARN: Return type mismatch draw-control vs none.
(defmethod init-skel-and-collide! ((this warp-gate))
(let ((s5-0 (new 'process 'collide-shape this (collide-list-enum usually-hit-by-player))))
(set! (-> s5-0 penetrated-by) (penetrate))
(let ((v1-2 (new 'process 'collide-shape-prim-mesh s5-0 (the-as uint 0) (the-as uint 0))))
(set! (-> v1-2 prim-core collide-as) (collide-spec obstacle))
(set! (-> v1-2 prim-core action) (collide-action solid))
(set! (-> v1-2 transform-index) 3)
(set-vector! (-> v1-2 local-sphere) 0.0 12288.0 0.0 16384.0)
(set! (-> s5-0 total-prims) (the-as uint 1))
(set! (-> s5-0 root-prim) v1-2)
)
(set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w)))
(let ((v1-5 (-> s5-0 root-prim)))
(set! (-> s5-0 backup-collide-as) (-> v1-5 prim-core collide-as))
(set! (-> s5-0 backup-collide-with) (-> v1-5 prim-core collide-with))
)
(set! (-> this root) s5-0)
)
(initialize-skeleton
this
(the-as skeleton-group (art-group-get-by-name *level* "skel-warp-gate" (the-as (pointer level) #f)))
(the-as pair 0)
)
(none)
)
;; WARN: Return type mismatch float vs none.
(defmethod init-defaults! ((this warp-gate))
(set! (-> this level-name) (-> this level name))
(set! (-> this on-notice) (res-lump-struct (-> this entity) 'on-notice pair))
(set! (-> this on-activate) #f)
(set! (-> this wait-for) #f)
(set! (-> this continue) #f)
(set! (-> this on-close) #f)
(set! (-> this part) (create-launch-control (-> *part-group-id-table* 202) this))
(set! (-> this center quad) (-> this root trans quad))
(+! (-> this center y) 13516.8)
(set! (-> this sound)
(new 'process 'ambient-sound (static-sound-spec "warpgate" :group 0 :fo-max 30) (-> this root trans) 0.0)
)
(set! (-> this distance) (res-lump-float (-> this entity) 'distance :default 20480.0))
(none)
)
;; WARN: Return type mismatch object vs none.
(defbehavior warp-gate-init warp-gate ((arg0 entity-actor) (arg1 vector))
(stack-size-set! (-> self main-thread) 512)
(init-skel-and-collide! self)
(if arg0
(process-drawable-from-entity! self arg0)
)
(if arg1
(set! (-> self root trans quad) (-> arg1 quad))
)
(logior! (-> self mask) (process-mask actor-pause))
(init-defaults! self)
(go-virtual idle)
(none)
)
;; WARN: Return type mismatch none vs object.
(defmethod init-from-entity! ((this warp-gate) (arg0 entity-actor))
(warp-gate-init arg0 (the-as vector #f))
)
(define *warp-jump-mods* (new 'static 'surface
:name 'jump
:turnv 273066.66
:turnvf 30.0
:turnvv 1820444.5
:turnvvf 30.0
:tiltv 65536.0
:tiltvf 150.0
:tiltvv 262144.0
:tiltvvf 15.0
:transv-max 65536.0
:target-speed 65536.0
:slip-factor 1.0
:slide-factor 1.0
:slope-up-factor 1.0
:slope-down-factor 1.0
:slope-slip-angle 1.0
:impact-fric 1.0
:bend-factor 1.0
:bend-speed 1.0
:alignv 1.0
:slope-up-traction 1.0
:align-speed 1.0
:mode 'air
:flags (surface-flag turn-to-vel turn-when-centered gun-off)
)
)
(defstate target-warp-out (target)
:event (behavior ((proc process) (argc int) (message symbol) (block event-message-block))
(case message
(('death-end)
(let ((v0-0 (the-as object (logior (-> self draw status) (draw-control-status no-draw)))))
(set! (-> self draw status) (the-as draw-control-status v0-0))
v0-0
)
)
(('warp-gate)
(if (not (-> self control unknown-spool-anim00))
'busy
)
)
(else
(target-generic-event-handler proc argc message block)
)
)
)
:enter (behavior ((arg0 vector) (arg1 vector) (arg2 handle))
(set-time! (-> self state-time))
(logclear! (-> self control status) (collide-status on-surface on-ground touch-surface))
(set! (-> self control mod-surface) *warp-jump-mods*)
(set! (-> self control unknown-vector37 quad) (-> arg0 quad))
(set! (-> self control unknown-vector38 quad) (-> arg1 quad))
(+! (-> self control unknown-vector37 y) -4096.0)
(set! (-> self control unknown-word04) (the-as uint #f))
(set! (-> self control unknown-handle02) arg2)
(vector-reset! (-> self control transv))
(logior! (-> self target-flags) (target-flags tf6))
(set! (-> self alt-cam-pos quad) (-> arg1 quad))
(forward-up-nopitch->quaternion
(-> self control dir-targ)
(vector-! (new 'stack-no-clear 'vector) arg1 (-> self control trans))
(vector-y-quaternion! (new 'stack-no-clear 'vector) (-> self control dir-targ))
)
)
:exit (behavior ()
(logclear! (-> self target-flags) (target-flags tf6))
)
:code (behavior ((arg0 vector) (arg1 vector) (arg2 handle))
(ja-channel-push! 1 (seconds 0.2))
(ja-no-eval :group! jakb-duck-high-jump-ja :num! (seek! (ja-aframe 16.0 0)) :frame-num 0.0)
(until (ja-done? 0)
(suspend)
(ja :num! (seek! (ja-aframe 16.0 0)))
)
(vector-! (-> self control transv) (-> self control unknown-vector37) (-> self control trans))
(vector-xz-normalize! (-> self control transv) 32768.0)
(let ((v1-18 (new-stack-vector0)))
(let ((f0-6 (vector-dot (-> self control dynam gravity-normal) (-> self control transv))))
0.0
(vector-! v1-18 (-> self control transv) (vector-float*! v1-18 (-> self control dynam gravity-normal) f0-6))
)
(let* ((f0-7 (vector-length v1-18))
(f1-1 f0-7)
(f2-4
(- (sqrtf
(* 2.0
(-> self control dynam gravity-length)
(vector-dot
(-> self control dynam gravity-normal)
(vector-! (new 'stack-no-clear 'vector) (-> self control unknown-vector37) (-> self control trans))
)
)
)
(* 0.008333334 (- (-> self control dynam gravity-length)))
)
)
)
(vector+!
(-> self control transv)
(vector-float*! (-> self control transv) (-> self control dynam gravity-normal) f2-4)
(vector-float*! v1-18 v1-18 (/ f0-7 f1-1))
)
)
)
(let ((v1-20 (-> self control root-prim)))
(set! (-> v1-20 prim-core collide-as) (collide-spec))
(set! (-> v1-20 prim-core collide-with) (collide-spec))
)
0
(set-time! (-> self state-time))
(set! (-> self trans-hook)
(lambda :behavior target
()
(let ((v1-0 (new-stack-vector0))
(f0-1 (vector-dot (-> self control dynam gravity-normal) (-> self control transv)))
)
0.0
(vector-! v1-0 (-> self control transv) (vector-float*! v1-0 (-> self control dynam gravity-normal) f0-1))
(let* ((f1-2 (vector-length v1-0))
(f2-0 f1-2)
)
(if (< f0-1 0.0)
(set! f0-1 8192.0)
)
(vector+!
(-> self control transv)
(vector-float*! (-> self control transv) (-> self control dynam gravity-normal) f0-1)
(vector-float*! v1-0 v1-0 (/ f1-2 f2-0))
)
)
)
(let ((gp-1 (vector-! (new-stack-vector0) (-> self control unknown-vector37) (-> self control trans))))
(set! (-> gp-1 y) 0.0)
(send-event *target* 'sidekick #f)
(when (and (or (< (vector-dot gp-1 (-> self control transv)) 0.0) (-> self control unknown-spool-anim00))
(time-elapsed? (-> self state-time) (seconds 0.05))
)
(vector-seek! (-> self draw color-mult) (new 'static 'vector) (* 2.0 (seconds-per-frame)))
(set! (-> self control transv x) (* 0.95 (-> self control transv x)))
(set! (-> self control transv z) (* 0.95 (-> self control transv z)))
(when (not (-> self control unknown-spool-anim00))
(sound-play "warpgate-tele")
(send-event (handle->process (-> self control unknown-handle02)) 'effect)
(send-event self 'draw #f)
(let ((v0-1 #t))
(set! (-> self control unknown-word04) (the-as uint v0-1))
v0-1
)
)
)
)
)
)
(ja-no-eval :group! jakb-duck-high-jump-ja :num! (seek! (ja-aframe 40.0 0)) :frame-num (ja-aframe 16.0 0))
(until (ja-done? 0)
(suspend)
(ja :num! (seek! (ja-aframe 40.0 0)))
)
(sleep-code)
)
:post target-no-stick-post
)
(defstate target-warp-in (target)
:event target-generic-event-handler
:enter (behavior ((arg0 vector) (arg1 vector) (arg2 object))
(set! (-> self control did-move-to-pole-or-max-jump-height) (the-as float arg2))
((-> target-warp-out enter) arg0 arg1 (the-as handle arg2))
)
:exit (-> target-warp-out exit)
:trans (behavior ()
(set! (-> self control transv x)
(* 2.4 (- (-> self control unknown-vector38 x) (-> self control unknown-vector37 x)))
)
(set! (-> self control transv z)
(* 2.4 (- (-> self control unknown-vector38 z) (-> self control unknown-vector37 z)))
)
(if (logtest? (-> self control status) (collide-status on-surface))
(go target-hit-ground #f)
)
)
:code (behavior ((arg0 vector) (arg1 vector) (arg2 object))
(let ((a0-1 (-> self control did-move-to-pole-or-max-jump-height)))
(when a0-1
(let ((s5-0 (res-lump-struct (the-as res-lump a0-1) 'camera-name string)))
(when s5-0
(logclear! (-> self target-flags) (target-flags tf6))
(process-spawn-function
process
(lambda :behavior process
((arg0 string))
(local-vars (a1-2 event-message-block))
(add-setting! 'entity-name arg0 0.0 0)
(until (send-event-function *camera* a1-2)
(suspend)
(set! a1-2 (new 'stack-no-clear 'event-message-block))
(let ((v1-2 (process->ppointer self)))
(set! (-> a1-2 from) v1-2)
)
(set! (-> a1-2 num-params) 0)
(set! (-> a1-2 message) 'intro-done?)
)
#f
)
s5-0
:to self
)
)
)
)
)
(let ((v1-12 (-> self control root-prim)))
(set! (-> self control backup-collide-as) (-> v1-12 prim-core collide-as))
(set! (-> self control backup-collide-with) (-> v1-12 prim-core collide-with))
)
(let ((v1-15 (-> self control root-prim)))
(set! (-> v1-15 prim-core collide-as) (collide-spec))
(set! (-> v1-15 prim-core collide-with) (collide-spec))
)
0
(ja-channel-set! 0)
(vector-reset! (-> self control transv))
(move-to-point! (-> self control) (-> self control unknown-vector37))
(let ((s5-1 (current-time)))
(while (or (not (time-elapsed? s5-1 (seconds 1)))
(< 81920.0 (vector-vector-distance (camera-pos) (-> self control trans)))
)
(suspend)
)
)
(set-heading-vec! (-> self control) (-> self control transv))
(rot->dir-targ! (-> self control))
(set-time! (-> self state-time))
(set! (-> self post-hook) target-no-stick-post)
(ja-channel-set! 1)
(send-event
(if arg2
(-> (the-as process arg2) child 3)
)
'effect
)
(send-event self 'draw #t)
(sound-play "warpgate-tele")
(ja-no-eval :group! jakb-duck-high-jump-ja :num! (seek! (ja-aframe 42.0 0)) :frame-num (ja-aframe 40.0 0))
(until (ja-done? 0)
(let ((v1-58 (new-stack-vector0)))
(let ((f0-5 (vector-dot (-> self control dynam gravity-normal) (-> self control transv))))
0.0
(vector-! v1-58 (-> self control transv) (vector-float*! v1-58 (-> self control dynam gravity-normal) f0-5))
)
(let* ((f0-6 (vector-length v1-58))
(f1-1 f0-6)
(f2-3
(- (sqrtf (* 4096.0 (-> self control dynam gravity-length)))
(* 0.008333334 (- (-> self control dynam gravity-length)))
)
)
)
(vector+!
(-> self control transv)
(vector-float*! (-> self control transv) (-> self control dynam gravity-normal) f2-3)
(vector-float*! v1-58 v1-58 (/ f0-6 f1-1))
)
)
)
(suspend)
(ja :num! (seek! (ja-aframe 42.0 0)))
)
(ja-no-eval :group! jakb-duck-high-jump-ja :num! (seek! (ja-aframe 50.0 0)) :frame-num (ja-aframe 42.0 0))
(until (ja-done? 0)
(suspend)
(ja :num! (seek! (ja-aframe 50.0 0)))
)
(let ((v1-79 (-> self control root-prim)))
(set! (-> v1-79 prim-core collide-as) (-> self control backup-collide-as))
(set! (-> v1-79 prim-core collide-with) (-> self control backup-collide-with))
)
(ja-no-eval :group! jakb-duck-high-jump-ja :num! (seek!) :frame-num (ja-aframe 50.0 0))
(until (ja-done? 0)
(suspend)
(ja :num! (seek!))
)
(target-falling-anim -1 (seconds 0.33))
)
:post target-no-move-post
)
(defskelgroup skel-air-train air-train air-train-lod0-jg air-train-idle-ja
((air-train-lod0-mg (meters 999999)))
:bounds (static-spherem 0 2 -2 12.5)
:origin-joint-index 3
)
(deftype air-train (warp-gate)
((part-exhaust-left sparticle-launch-control)
(part-exhaust-right sparticle-launch-control)
(part-dust sparticle-launch-control)
(dust-y float)
(hover-sound sound-id)
(base-pos vector :inline)
)
)
;; WARN: Return type mismatch warp-gate vs air-train.
(defmethod relocate ((this air-train) (offset int))
(if (nonzero? (-> this part-exhaust-left))
(&+! (-> this part-exhaust-left) offset)
)
(if (nonzero? (-> this part-exhaust-right))
(&+! (-> this part-exhaust-right) offset)
)
(if (nonzero? (-> this part-dust))
(&+! (-> this part-dust) offset)
)
(the-as air-train ((method-of-type warp-gate relocate) this offset))
)
(defmethod deactivate ((this air-train))
"Make a process dead, clean it up, remove it from the active pool, and return to dead pool."
(sound-stop (-> this hover-sound))
(if (nonzero? (-> this part-exhaust-left))
(kill-particles (-> this part-exhaust-left))
)
(if (nonzero? (-> this part-exhaust-right))
(kill-particles (-> this part-exhaust-right))
)
(if (nonzero? (-> this part-dust))
(kill-particles (-> this part-dust))
)
((method-of-type warp-gate deactivate) this)
(none)
)
;; WARN: Return type mismatch draw-control vs none.
(defmethod init-skel-and-collide! ((this air-train))
(let ((s5-0 (new 'process 'collide-shape-moving this (collide-list-enum usually-hit-by-player))))
(set! (-> s5-0 dynam) (copy *standard-dynamics* 'process))
(set! (-> s5-0 reaction) cshape-reaction-default)
(set! (-> s5-0 no-reaction)
(the-as (function collide-shape-moving collide-query vector vector object) nothing)
)
(set! (-> s5-0 penetrated-by) (penetrate))
(let ((s4-0 (new 'process 'collide-shape-prim-group s5-0 (the-as uint 2) 0)))
(set! (-> s5-0 total-prims) (the-as uint 3))
(set! (-> s4-0 prim-core collide-as) (collide-spec obstacle))
(set! (-> s4-0 prim-core collide-with) (collide-spec jak player-list))
(set! (-> s4-0 prim-core action) (collide-action solid))
(set! (-> s4-0 transform-index) 3)
(set-vector! (-> s4-0 local-sphere) 0.0 0.0 0.0 69632.0)
(set! (-> s5-0 root-prim) s4-0)
)
(let ((v1-13 (new 'process 'collide-shape-prim-mesh s5-0 (the-as uint 0) (the-as uint 0))))
(set! (-> v1-13 prim-core collide-as) (collide-spec obstacle))
(set! (-> v1-13 prim-core collide-with) (collide-spec jak player-list))
(set! (-> v1-13 prim-core action) (collide-action solid))
(set! (-> v1-13 transform-index) 6)
(set-vector! (-> v1-13 local-sphere) 0.0 10240.0 0.0 24576.0)
)
(let ((v1-15 (new 'process 'collide-shape-prim-mesh s5-0 (the-as uint 1) (the-as uint 0))))
(set! (-> v1-15 prim-core collide-as) (collide-spec obstacle))
(set! (-> v1-15 prim-core collide-with) (collide-spec jak player-list))
(set! (-> v1-15 prim-core action) (collide-action solid))
(set! (-> v1-15 transform-index) 3)
(set-vector! (-> v1-15 local-sphere) 0.0 0.0 0.0 53248.0)
)
(set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w)))
(let ((v1-18 (-> s5-0 root-prim)))
(set! (-> s5-0 backup-collide-as) (-> v1-18 prim-core collide-as))
(set! (-> s5-0 backup-collide-with) (-> v1-18 prim-core collide-with))
)
(set! (-> this root) s5-0)
)
(initialize-skeleton
this
(the-as skeleton-group (art-group-get-by-name *level* "skel-air-train" (the-as (pointer level) #f)))
(the-as pair 0)
)
(none)
)
;; WARN: Return type mismatch sound-id vs none.
(defmethod init-defaults! ((this air-train))
(let ((t9-0 (method-of-type warp-gate init-defaults!)))
(t9-0 this)
)
(set! (-> this base-pos quad) (-> this root trans quad))
(let ((v1-2 (-> this level-name)))
(set! (-> this dust-y) (cond
((= v1-2 'nest)
-1105.92
)
((= v1-2 'caspad)
114647.04
)
(else
(the-as float #x7f800000)
)
)
)
)
(set! (-> this part-exhaust-left) (create-launch-control (-> *part-group-id-table* 206) this))
(set! (-> this part-exhaust-right) (create-launch-control (-> *part-group-id-table* 206) this))
(set! (-> this part-dust) (create-launch-control (-> *part-group-id-table* 204) this))
(set! (-> this root pause-adjust-distance) 368640.0)
(set! (-> this hover-sound) (sound-play "air-train"))
(none)
)
(defstate idle (air-train)
:virtual #t
:post (behavior ()
(let ((t9-0 (-> (method-of-type warp-gate idle) post)))
(if t9-0
((the-as (function none) t9-0))
)
)
(set! (-> self root trans y) (+ (-> self base-pos y)
(* 696.32 (cos (* 66.19798 (the float (mod (current-time) 990)))))
(* 450.56 (cos (* 42.25403 (the float (mod (current-time) 1551)))))
)
)
(spawn-from-cspace (-> self part-exhaust-left) (joint-node air-train-lod0-jg thruster_l))
(spawn-from-cspace (-> self part-exhaust-right) (joint-node air-train-lod0-jg thruster_r))
(let ((f0-9 (-> self dust-y)))
(when (!= f0-9 (the-as float #x7f800000))
(let ((a1-2 (new 'stack-no-clear 'vector)))
(set! (-> a1-2 quad) (-> self root trans quad))
(set! (-> a1-2 y) f0-9)
(spawn (-> self part-dust) a1-2)
)
)
)
(sound-play "air-train" :id (-> self hover-sound) :position (-> self root trans))
)
)
(defstate use (air-train)
:virtual #t
:code (behavior ((arg0 continue-point))
(kill-current-talker '() '() 'exit)
(set-time! (-> self state-time))
(logclear! (-> self mask) (process-mask actor-pause))
(when (not arg0)
(process-release? *target*)
(go-virtual idle)
)
(set-setting! 'allow-progress #f 0.0 0)
(set! (-> *setting-control* user-default border-mode) #t)
(set! (-> *level* play?) #t)
(apply-settings *setting-control*)
(sound-stop (-> self hover-sound))
(set! (-> self hover-sound) (new 'static 'sound-id))
(script-eval (-> self on-activate))
(sleep-code)
)
)
(load-scene (new 'static 'scene
:name "desert-air-train-in"
:extra #f
:info #f
:scene-flags (scene-flags scf1 scf2 scf3 scf4)
:mask-to-clear (process-mask movie enemy platform projectile)
:entity "air-train-5"
:art-group "scenecamera"
:anim "desert-air-train-in"
:parts 4
:command-list '((0
(kill "air-train-5")
(fadein (frame-time-30 10))
(apply ,(lambda () (kill-by-type v-marauder *active-pool*)))
)
(260
(part-tracker
"group-warp-fma-drop-thrusters"
entity
"air-train"
joint
"thruster_l"
track
#t
duration
(frame-range 260 475)
)
(part-tracker
"group-warp-fma-drop-thrusters"
entity
"air-train"
joint
"thruster_r"
track
#t
duration
(frame-range 260 475)
)
)
(270 (part-tracker
"group-warp-fma-dust-takeoff"
entity
"particleman"
joint
"particleA"
track
#t
duration
(frame-range 270 475)
)
)
(350
(part-tracker
"group-warp-thruster-trail"
entity
"air-train"
joint
"thruster_l"
track
#t
duration
(frame-range 350 475)
subsample-num
(new 'static 'bfloat :data 5.0)
)
(part-tracker
"group-warp-thruster-trail"
entity
"air-train"
joint
"thruster_r"
track
#t
duration
(frame-range 350 475)
subsample-num
(new 'static 'bfloat :data 5.0)
)
)
(475 (fadeout (frame-time-30 5)))
)
:cut-list '(285)
:wait-ground-time (seconds 1)
:actor (new 'static 'boxed-array :type scene-actor
(new 'static 'scene-actor
:name "scenecamera"
:level #f
:art-group "skel-scenecamera"
:prefix ""
:draw-frames '((min max))
:scissor-frames '()
:shadow-frames '((min max))
:cloth-reset-frames '()
:cloth-commands '()
:camera 4
:shadow-flags -1
:shadow-volume-joint #f
)
(new 'static 'scene-actor
:name "jakc-highres"
:level 'warpcast
:art-group "skel-jakc-highres"
:prefix ""
:draw-frames '((min max))
:scissor-frames '()
:shadow-frames '((min 290))
:cloth-reset-frames '()
:cloth-commands '()
:flags #x1
:shadow-flags -1
:shadow-volume-joint #f
:no-draw-seg #x80
)
(new 'static 'scene-actor
:name "sidekick-highres"
:level 'warpcast
:art-group "skel-sidekick-highres"
:prefix ""
:draw-frames '((min max))
:scissor-frames '()
:shadow-frames '((min 290))
:cloth-reset-frames '()
:cloth-commands '()
:flags #x1
:shadow-flags -1
:shadow-volume-joint #f
)
(new 'static 'scene-actor
:name "particleman"
:level 'warpcast
:art-group "skel-particleman"
:prefix ""
:draw-frames '((min max))
:scissor-frames '()
:shadow-frames '((min max))
:cloth-reset-frames '()
:cloth-commands '()
:shadow-flags -1
:shadow-volume-joint #f
)
(new 'static 'scene-actor
:name "air-train"
:level 'desertb
:art-group "skel-air-train"
:prefix ""
:draw-frames '((min max))
:scissor-frames '()
:shadow-frames '((min max))
:cloth-reset-frames '()
:cloth-commands '()
:flags #x1
:shadow-flags -1
:shadow-volume-joint #f
)
)
:load-point "desert-warp"
:end-point "ctyport-warp"
:borrow '()
:sfx-volume 0.75
:ambient-volume -1.0
:music-volume -1.0
:music-delay 1500.0
:on-running #f
:on-complete #f
)
)
(load-scene (new 'static 'scene
:name "desert-air-train-out"
:extra #f
:info #f
:scene-flags (scene-flags scf1 scf2 scf3 scf4)
:mask-to-clear (process-mask movie enemy platform projectile)
:entity "air-train-5"
:art-group "scenecamera"
:anim "desert-air-train-out"
:parts 3
:command-list '((0 (kill "air-train-5") (fadein (frame-time-30 10)))
(1
(part-tracker
"group-warp-fma-drop-thrusters"
entity
"air-train"
joint
"thruster_l"
track
#t
duration
(frame-range 1 200)
)
(part-tracker
"group-warp-fma-drop-thrusters"
entity
"air-train"
joint
"thruster_r"
track
#t
duration
(frame-range 1 200)
)
)
(65 (part-tracker
"group-warp-fma-dust-takeoff"
entity
"particleman"
joint
"particleA"
track
#t
duration
(frame-range 65 172)
)
)
(290 (fadeout (frame-time-30 5)))
)
:cut-list '(180)
:wait-ground-time (seconds 1)
:actor (new 'static 'boxed-array :type scene-actor
(new 'static 'scene-actor
:name "scenecamera"
:level #f
:art-group "skel-scenecamera"
:prefix ""
:draw-frames '((min max))
:scissor-frames '()
:shadow-frames '((min max))
:cloth-reset-frames '()
:cloth-commands '()
:camera 4
:shadow-flags -1
:shadow-volume-joint #f
)
(new 'static 'scene-actor
:name "jakc-highres"
:level 'warpcast
:art-group "skel-jakc-highres"
:prefix ""
:draw-frames '((min max))
:scissor-frames '()
:shadow-frames '((180 max))
:cloth-reset-frames '()
:cloth-commands '()
:flags #x1
:shadow-flags -1
:shadow-volume-joint #f
:no-draw-seg #x80
)
(new 'static 'scene-actor
:name "sidekick-highres"
:level 'warpcast
:art-group "skel-sidekick-highres"
:prefix ""
:draw-frames '((min max))
:scissor-frames '()
:shadow-frames '((180 max))
:cloth-reset-frames '()
:cloth-commands '()
:flags #x1
:shadow-flags -1
:shadow-volume-joint #f
)
(new 'static 'scene-actor
:name "particleman"
:level 'warpcast
:art-group "skel-particleman"
:prefix ""
:draw-frames '((min max))
:scissor-frames '()
:shadow-frames '((min max))
:cloth-reset-frames '()
:cloth-commands '()
:shadow-flags -1
:shadow-volume-joint #f
)
(new 'static 'scene-actor
:name "air-train"
:level 'desertb
:art-group "skel-air-train"
:prefix ""
:draw-frames '((min max))
:scissor-frames '()
:shadow-frames '((min max))
:cloth-reset-frames '()
:cloth-commands '()
:flags #x1
:shadow-flags -1
:shadow-volume-joint #f
)
)
:load-point "desert-warp"
:end-point "desert-warp"
:borrow '()
:sfx-volume 0.75
:ambient-volume -1.0
:music-volume -1.0
:music-delay 1500.0
:on-running #f
:on-complete #f
)
)
(load-scene (new 'static 'scene
:name "city-air-train-out"
:extra #f
:info #f
:scene-flags (scene-flags scf1 scf2 scf3 scf4)
:mask-to-clear (process-mask movie enemy platform projectile)
:entity "scene-stage-87"
:art-group "scenecamera"
:anim "city-air-train-out"
:parts 2
:command-list '((0 (kill "air-train-1") (fadein (frame-time-30 10))) (235 (fadeout (frame-time-30 5))))
:cut-list '(98 188)
:wait-ground-time (seconds 1)
:actor (new 'static 'boxed-array :type scene-actor
(new 'static 'scene-actor
:name "scenecamera"
:level #f
:art-group "skel-scenecamera"
:prefix ""
:draw-frames '((min max))
:scissor-frames '()
:shadow-frames '((min max))
:cloth-reset-frames '()
:cloth-commands '()
:camera 4
:shadow-flags -1
:shadow-volume-joint #f
)
(new 'static 'scene-actor
:name "jakc-highres"
:level 'citycast
:art-group "skel-jakc-highres"
:prefix ""
:draw-frames '((min max))
:scissor-frames '()
:shadow-frames '((min max))
:cloth-reset-frames '()
:cloth-commands '(((min max) set-flags local-space))
:flags #x1
:shadow-flags -1
:shadow-volume-joint #f
:no-draw-seg #x80
)
(new 'static 'scene-actor
:name "sidekick-highres"
:level 'citycast
:art-group "skel-sidekick-highres"
:prefix ""
:draw-frames '((min max))
:scissor-frames '()
:shadow-frames '((min max))
:cloth-reset-frames '()
:cloth-commands '()
:flags #x1
:shadow-flags -1
:shadow-volume-joint #f
)
(new 'static 'scene-actor
:name "air-train"
:level 'ctyport
:art-group "skel-air-train"
:prefix ""
:draw-frames '((min max))
:scissor-frames '()
:shadow-frames '((min max))
:cloth-reset-frames '()
:cloth-commands '()
:flags #x1
:shadow-flags -1
:shadow-volume-joint #f
)
)
:load-point "ctyport-air-train"
:end-point "ctyport-warp"
:borrow '()
:sfx-volume -1.0
:ambient-volume -1.0
:music-volume -1.0
:music-delay 1500.0
:on-running '(begin
(sound-play-loop "port-amb-mov")
(sound-play-loop "port-water-mov")
(sound-play-loop "port-gulls-mov")
)
:on-complete #f
)
)
(load-scene (new 'static 'scene
:name "city-air-train-in-desert"
:extra #f
:info #f
:scene-flags (scene-flags scf1 scf2 scf3 scf4)
:mask-to-clear (process-mask movie enemy platform projectile)
:entity "scene-stage-87"
:art-group "scenecamera"
:anim "city-air-train-in-desert"
:parts 3
:command-list '((0 (kill "air-train-1") (fadein (frame-time-30 10))) (275 (fadeout (frame-time-30 5))))
:cut-list '(51 102 226)
:wait-ground-time (seconds 1)
:actor (new 'static 'boxed-array :type scene-actor
(new 'static 'scene-actor
:name "scenecamera"
:level #f
:art-group "skel-scenecamera"
:prefix ""
:draw-frames '((min max))
:scissor-frames '()
:shadow-frames '((min max))
:cloth-reset-frames '()
:cloth-commands '()
:camera 4
:shadow-flags -1
:shadow-volume-joint #f
)
(new 'static 'scene-actor
:name "jakc-highres"
:level 'citycast
:art-group "skel-jakc-highres"
:prefix ""
:draw-frames '((min 226))
:scissor-frames '()
:shadow-frames '((min max))
:cloth-reset-frames '()
:cloth-commands '(((min max) set-flags local-space))
:flags #x1
:shadow-flags -1
:shadow-volume-joint #f
:no-draw-seg #x80
)
(new 'static 'scene-actor
:name "sidekick-highres"
:level 'citycast
:art-group "skel-sidekick-highres"
:prefix ""
:draw-frames '((min max))
:scissor-frames '()
:shadow-frames '((min max))
:cloth-reset-frames '()
:cloth-commands '()
:flags #x1
:shadow-flags -1
:shadow-volume-joint #f
)
(new 'static 'scene-actor
:name "air-train"
:level 'ctyport
:art-group "skel-air-train"
:prefix ""
:draw-frames '((min max))
:scissor-frames '((min max))
:shadow-frames '((min max))
:cloth-reset-frames '()
:cloth-commands '()
:flags #x1
:shadow-flags -1
:shadow-volume-joint #f
)
)
:load-point "ctyport-warp"
:end-point "desert-warp"
:borrow '()
:sfx-volume -1.0
:ambient-volume -1.0
:music-volume -1.0
:music-delay 1500.0
:on-running '(begin
(sound-play-loop "port-amb-mov")
(sound-play-loop "port-water-mov")
(sound-play-loop "port-gulls-mov")
)
:on-complete #f
)
)
(defpartgroup group-warp-fma-dust-takeoff
:id 208
:flags (sp0 sp4)
:bounds (static-bspherem 0 0 0 64)
:parts ((sp-item 844 :flags (sp7)))
)
(defpart 844
:init-specs ((:texture (dirtpuff01 level-default-sprite))
(:birth-func 'birth-func-curve)
(:num 5.0)
(:x (meters 0) (meters 3))
(:scale-x (meters 0.5))
(:rot-z (degrees 0) (degrees 360))
(:scale-y :copy scale-x)
(:r 128.0)
(:g 100.0)
(:b 60.0)
(:a 0.0)
(:vel-x (meters 0.033333335) (meters 0.06666667))
(:accel-y (meters 0) (meters 0.00016666666))
(:timer (seconds 3))
(:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-13 launch-along-z))
(:userdata 0.0)
(:func 'live-func-curve)
(:conerot-z (degrees 0))
(:rotate-y (degrees 0) (degrees 3600))
)
)
(if #t
(set! *range-warp-dust-color* (new 'static 'curve-color-fast
:xs (new 'static 'vector :y -1.0 :z -2.0 :w -3.0)
:ys (new 'static 'inline-array vector 4
(new 'static 'vector :x 140.0 :y 120.0 :z 80.0 :w 128.0)
(new 'static 'vector :x 100.0 :y 80.0 :z 40.0 :w 128.0)
(new 'static 'vector :x 100.0 :y 80.0 :z 40.0 :w 128.0)
(new 'static 'vector :x 100.0 :y 80.0 :z 40.0 :w 128.0)
)
:one-over-x-deltas (new 'static 'vector :x 1.0 :y 1.0 :z 1.0 :w 1.0)
)
)
)
(if #t
(set! *range-warp-dust-alpha* (new 'static 'curve2d-fast
:xs (new 'static 'vector :y -1.0 :z -2.0 :w -3.0)
:ys (new 'static 'vector :x 32.0 :y 40.0 :z 41.0 :w 42.0)
:one-over-x-deltas (new 'static 'vector :x 8.0 :y 1.0 :z 1.0 :w 1.0)
)
)
)
(if #t
(set! *range-warp-dust-scale-x* (new 'static 'curve2d-fast
:xs (new 'static 'vector :y -1.0 :z -2.0 :w -3.0)
:ys (new 'static 'vector :x 3.0 :y 3.3 :z 4.3 :w 5.3)
:one-over-x-deltas (new 'static 'vector :x 0.29999995 :y 1.0000002 :z 1.0 :w 1.0)
)
)
)
(if #t
(set! *range-warp-dust-scale-y* (new 'static 'curve2d-fast
:xs (new 'static 'vector :y -1.0 :z -2.0 :w -3.0)
:ys (new 'static 'vector :x 3.0 :y 3.3 :z 4.3 :w 5.3)
:one-over-x-deltas (new 'static 'vector :x 0.29999995 :y 1.0000002 :z 1.0 :w 1.0)
)
)
)
(if #t
(set! *curve-warp-dust-alpha* (new 'static 'curve2d-fast
:xs (new 'static 'vector :y -0.1 :z -0.5 :w -1.0)
:ys (new 'static 'vector :y 1.0 :z 1.0)
:one-over-x-deltas (new 'static 'vector :x 10.0 :z -2.0 :w 1.0)
)
)
)
(if #t
(set! *curve-warp-dust-scale-x* (new 'static 'curve2d-fast
:xs (new 'static 'vector :y -0.3 :z -0.4 :w -1.0)
:ys (new 'static 'vector :y 5.0 :z 6.0 :w 6.5)
:one-over-x-deltas (new 'static 'vector :x 16.666666 :y 10.000001 :z 0.8333333 :w 1.0)
)
)
)
(if #t
(set! *curve-warp-dust-scale-y* (new 'static 'curve2d-fast
:xs (new 'static 'vector :y -0.3 :z -0.4 :w -1.0)
:ys (new 'static 'vector :y 5.0 :z 6.0 :w 6.5)
:one-over-x-deltas (new 'static 'vector :x 16.666666 :y 10.000001 :z 0.8333333 :w 1.0)
)
)
)
(define *part-warp-fma-dust-takeoff-curve-settings* (new 'static 'particle-curve-settings
:lifetime-base (seconds 5)
:lifetime-offset (seconds 2)
:flags (particle-curve-flags pcf0)
)
)
(set! (-> *part-id-table* 844 init-specs 15 initial-valuef)
(the-as float *part-warp-fma-dust-takeoff-curve-settings*)
)
(set! (-> *part-warp-fma-dust-takeoff-curve-settings* color-start) *range-warp-dust-color*)
(set! (-> *part-warp-fma-dust-takeoff-curve-settings* alpha-start) *range-warp-dust-alpha*)
(set! (-> *part-warp-fma-dust-takeoff-curve-settings* scale-x-start) *range-warp-dust-scale-x*)
(set! (-> *part-warp-fma-dust-takeoff-curve-settings* scale-y-start) *range-warp-dust-scale-y*)
(set! (-> *part-warp-fma-dust-takeoff-curve-settings* r-scalar) #f)
(set! (-> *part-warp-fma-dust-takeoff-curve-settings* g-scalar) #f)
(set! (-> *part-warp-fma-dust-takeoff-curve-settings* b-scalar) #f)
(set! (-> *part-warp-fma-dust-takeoff-curve-settings* a-scalar) *curve-warp-dust-alpha*)
(set! (-> *part-warp-fma-dust-takeoff-curve-settings* scale-x-scalar) *curve-warp-dust-scale-x*)
(set! (-> *part-warp-fma-dust-takeoff-curve-settings* scale-y-scalar) *curve-warp-dust-scale-y*)
(defpartgroup group-warp-fma-drop-thrusters
:id 209
:flags (sp0 sp4)
:bounds (static-bspherem 0 0 0 640)
:parts ((sp-item 845 :flags (sp7))
(sp-item 846 :flags (sp7) :period (seconds 0.017) :length (seconds 0.017))
(sp-item 847 :flags (sp7) :period (seconds 0.017) :length (seconds 0.017))
)
)
(defpart 845
:init-specs ((:num 1.0)
(:x (meters -2) (meters 4))
(:y (meters -2) (meters 4))
(:z (meters -2) (meters 4))
(:rot-x 5)
(:r 20480.0)
(:g 10240.0)
(:b 8192.0 4096.0)
(:timer (seconds 0.5))
(:flags (distort launch-along-z))
)
)
(defpart 846
:init-specs ((:texture (colorflash level-default-sprite))
(:num 4.0)
(:scale-x (meters 2) (meters 2))
(:scale-y :copy scale-x)
(:r 255.0)
(:g 200.0)
(:b 128.0)
(:a 40.0 10.0)
(:vel-y (meters 0.1))
(:timer (seconds 0.017))
(:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-3))
(:conerot-z (degrees 0))
(:rotate-y (degrees 0))
)
)
(defpart 847
:init-specs ((:texture (glow level-default-sprite))
(:num 3.0)
(:scale-x (meters 6) (meters 1))
(:scale-y :copy scale-x)
(:r 255.0)
(:g 100.0 28.0)
(:b 0.0)
(:a 8.0 8.0)
(:vel-y (meters 0.1))
(:timer (seconds 0.017))
(:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-3))
(:conerot-z (degrees 0))
(:rotate-y (degrees 0))
)
)
(defpartgroup group-warp-thruster-trail
:id 210
:flags (sp0 sp4 sp13)
:bounds (static-bspherem 0 0 0 640)
:parts ((sp-item 848 :flags (sp7)))
)
(defpart 848
:init-specs ((:texture (big-cloud level-default-sprite))
(:num 1.0)
(:scale-x (meters 3))
(:rot-z (degrees 0) (degrees 360))
(:scale-y :copy scale-x)
(:r 80.0 100.0)
(:g :copy r)
(:b :copy r)
(:a 20.0 10.0)
(:vel-y (meters 0.1))
(:scalevel-x (meters 0.016666668) (meters 0.016666668))
(:scalevel-y :copy scalevel-x)
(:fade-a -0.05 -0.05)
(:friction 0.9)
(:timer (seconds 2))
(:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-13))
(:conerot-z (degrees 0))
(:rotate-y (degrees 0))
)
)