mirror of
https://github.com/open-goal/jak-project
synced 2026-07-09 23:01:56 -04:00
637990314b
Closes #736 --------- Co-authored-by: Hat Kid <6624576+Hat-Kid@users.noreply.github.com>
1025 lines
38 KiB
Common Lisp
Vendored
Generated
1025 lines
38 KiB
Common Lisp
Vendored
Generated
;;-*-Lisp-*-
|
|
(in-package goal)
|
|
|
|
;; definition of type elec-gate-params
|
|
(deftype elec-gate-params (structure)
|
|
((bolt-spec lightning-spec)
|
|
(ring-spec lightning-spec)
|
|
(ring-radius-min float)
|
|
(ring-radius-max float)
|
|
(speed-mult float)
|
|
(min-dist float)
|
|
(max-dist float)
|
|
(plane-expand-xz float)
|
|
(plane-expand-y float)
|
|
(plane-shift-z float)
|
|
)
|
|
)
|
|
|
|
;; definition for method 3 of type elec-gate-params
|
|
(defmethod inspect ((this elec-gate-params))
|
|
(when (not this)
|
|
(set! this this)
|
|
(goto cfg-4)
|
|
)
|
|
(format #t "[~8x] ~A~%" this 'elec-gate-params)
|
|
(format #t "~1Tbolt-spec: ~A~%" (-> this bolt-spec))
|
|
(format #t "~1Tring-spec: ~A~%" (-> this ring-spec))
|
|
(format #t "~1Tring-radius-min: ~f~%" (-> this ring-radius-min))
|
|
(format #t "~1Tring-radius-max: ~f~%" (-> this ring-radius-max))
|
|
(format #t "~1Tspeed-mult: ~f~%" (-> this speed-mult))
|
|
(format #t "~1Tmin-dist: ~f~%" (-> this min-dist))
|
|
(format #t "~1Tmax-dist: ~f~%" (-> this max-dist))
|
|
(format #t "~1Tplane-expand-xz: ~f~%" (-> this plane-expand-xz))
|
|
(format #t "~1Tplane-expand-y: ~f~%" (-> this plane-expand-y))
|
|
(format #t "~1Tplane-shift-z: ~f~%" (-> this plane-shift-z))
|
|
(label cfg-4)
|
|
this
|
|
)
|
|
|
|
;; definition of type elec-gate-bolt
|
|
(deftype elec-gate-bolt (structure)
|
|
((ring lightning-control 2)
|
|
(bolt lightning-control)
|
|
(ring-radius float)
|
|
(pos float)
|
|
)
|
|
)
|
|
|
|
;; definition for method 3 of type elec-gate-bolt
|
|
(defmethod inspect ((this elec-gate-bolt))
|
|
(when (not this)
|
|
(set! this this)
|
|
(goto cfg-4)
|
|
)
|
|
(format #t "[~8x] ~A~%" this 'elec-gate-bolt)
|
|
(format #t "~1Tring[2] @ #x~X~%" (-> this ring))
|
|
(format #t "~1Tbolt: ~A~%" (-> this bolt))
|
|
(format #t "~1Tring-radius: ~f~%" (-> this ring-radius))
|
|
(format #t "~1Tpos: ~f~%" (-> this pos))
|
|
(label cfg-4)
|
|
this
|
|
)
|
|
|
|
;; definition of type elec-wall
|
|
(deftype elec-wall (structure)
|
|
((pos vector :inline)
|
|
(dir vector :inline)
|
|
)
|
|
)
|
|
|
|
;; definition for method 3 of type elec-wall
|
|
(defmethod inspect ((this elec-wall))
|
|
(when (not this)
|
|
(set! this this)
|
|
(goto cfg-4)
|
|
)
|
|
(format #t "[~8x] ~A~%" this 'elec-wall)
|
|
(format #t "~1Tpos: #<vector @ #x~X>~%" (-> this pos))
|
|
(format #t "~1Tdir: #<vector @ #x~X>~%" (-> this dir))
|
|
(label cfg-4)
|
|
this
|
|
)
|
|
|
|
;; definition of type elec-gate
|
|
(deftype elec-gate (process-drawable)
|
|
((params elec-gate-params)
|
|
(path-l path-control :overlay-at path)
|
|
(path-r path-control)
|
|
(l-bolt elec-gate-bolt 5 :inline)
|
|
(part-on sparticle-launch-control :overlay-at part)
|
|
(part-off sparticle-launch-control)
|
|
(part-spawner-left part-spawner)
|
|
(part-spawner-right part-spawner)
|
|
(on-start pair)
|
|
(on-stop pair)
|
|
(on-shutdown pair)
|
|
(on-trigger pair)
|
|
(dividing-wall elec-wall :inline)
|
|
(plane elec-wall 2 :inline)
|
|
(wall-y float)
|
|
(wall-xz float)
|
|
(lightning-quality float)
|
|
(quality-enabled? symbol)
|
|
)
|
|
(:state-methods
|
|
idle
|
|
active
|
|
shutdown-camera
|
|
shutdown
|
|
)
|
|
(:methods
|
|
(get-params (_type_) elec-gate-params)
|
|
(elec-gate-method-25 (_type_) none)
|
|
(elec-gate-method-26 (_type_) none)
|
|
(go-initial-state (_type_) object)
|
|
(spawn-particles (_type_ sparticle-launch-control) none)
|
|
(set-elec-scale! (_type_ float) none)
|
|
(elec-gate-method-30 (_type_ float) none)
|
|
)
|
|
)
|
|
|
|
;; definition for method 3 of type elec-gate
|
|
(defmethod inspect ((this elec-gate))
|
|
(when (not this)
|
|
(set! this this)
|
|
(goto cfg-4)
|
|
)
|
|
(let ((t9-0 (method-of-type process-drawable inspect)))
|
|
(t9-0 this)
|
|
)
|
|
(format #t "~2Tparams: #<elec-gate-params @ #x~X>~%" (-> this params))
|
|
(format #t "~2Tpath-l: ~A~%" (-> this path))
|
|
(format #t "~2Tpath-r: ~A~%" (-> this path-r))
|
|
(format #t "~2Tl-bolt[5] @ #x~X~%" (-> this l-bolt))
|
|
(format #t "~2Tpart-on: ~A~%" (-> this part))
|
|
(format #t "~2Tpart-off: ~A~%" (-> this part-off))
|
|
(format #t "~2Tpart-spawner-left: ~A~%" (-> this part-spawner-left))
|
|
(format #t "~2Tpart-spawner-right: ~A~%" (-> this part-spawner-right))
|
|
(format #t "~2Ton-start: ~A~%" (-> this on-start))
|
|
(format #t "~2Ton-stop: ~A~%" (-> this on-stop))
|
|
(format #t "~2Ton-shutdown: ~A~%" (-> this on-shutdown))
|
|
(format #t "~2Ton-trigger: ~A~%" (-> this on-trigger))
|
|
(format #t "~2Tdividing-wall: #<elec-wall @ #x~X>~%" (-> this dividing-wall))
|
|
(format #t "~2Tplane[2] @ #x~X~%" (-> this plane))
|
|
(format #t "~2Twall-y: ~f~%" (-> this wall-y))
|
|
(format #t "~2Twall-xz: ~f~%" (-> this wall-xz))
|
|
(format #t "~2Tlightning-quality: ~f~%" (-> this lightning-quality))
|
|
(format #t "~2Tquality-enabled?: ~A~%" (-> this quality-enabled?))
|
|
(label cfg-4)
|
|
this
|
|
)
|
|
|
|
;; definition for symbol *default-elec-gate-params*, type elec-gate-params
|
|
(define *default-elec-gate-params* (new 'static 'elec-gate-params
|
|
:bolt-spec (new 'static 'lightning-spec
|
|
:name #f
|
|
:flags (lightning-spec-flags lsf2)
|
|
:start-color (new 'static 'rgba :r #xff :g #xff :b #xff :a #x80)
|
|
:end-color (new 'static 'rgba :a #x80)
|
|
:fade-to-color (new 'static 'rgba :r #xbf :b #x8f :a #x5)
|
|
:fade-start-factor 0.2
|
|
:fade-time 120.0
|
|
:texture (new 'static 'texture-id :index #x8f :page #x4)
|
|
:reduction 0.42
|
|
:num-points 16
|
|
:box-size 8601.6
|
|
:merge-factor 0.5
|
|
:merge-count 2
|
|
:radius 1638.4
|
|
:duration -1.0
|
|
:sound #f
|
|
)
|
|
:ring-spec (new 'static 'lightning-spec
|
|
:name #f
|
|
:flags (lightning-spec-flags lsf2)
|
|
:rand-func #x3
|
|
:start-color (new 'static 'rgba :r #xff :g #xff :b #xff :a #x80)
|
|
:end-color (new 'static 'rgba :r #xff :g #xff :b #xff :a #x80)
|
|
:fade-to-color (new 'static 'rgba :r #xbf :b #x8f :a #x5)
|
|
:fade-start-factor 0.2
|
|
:fade-time 120.0
|
|
:texture (new 'static 'texture-id :index #x3f :page #x4)
|
|
:reduction 0.42
|
|
:num-points 12
|
|
:box-size 3072.0
|
|
:merge-factor 0.5
|
|
:radius 2048.0
|
|
:duration -1.0
|
|
:sound #f
|
|
)
|
|
:ring-radius-min 1638.4
|
|
:ring-radius-max 2867.2
|
|
:speed-mult 1.0
|
|
:min-dist 163840.0
|
|
:max-dist 491520.0
|
|
:plane-expand-xz 8192.0
|
|
:plane-expand-y 81920.0
|
|
)
|
|
)
|
|
|
|
;; definition for function elec-gate-post
|
|
;; INFO: Used lq/sq
|
|
(defbehavior elec-gate-post elec-gate ()
|
|
(let ((gp-0 (-> self params)))
|
|
(dotimes (s5-0 5)
|
|
(let* ((s2-0 (-> self l-bolt s5-0))
|
|
(s4-0 (get-point-at-percent-along-path! (-> self path) (new 'stack-no-clear 'vector) (-> s2-0 pos) 'interp))
|
|
(s3-0 (get-point-at-percent-along-path! (-> self path-r) (new 'stack-no-clear 'vector) (-> s2-0 pos) 'interp))
|
|
)
|
|
(let ((a0-2 (-> s2-0 bolt))
|
|
(v1-4 s4-0)
|
|
)
|
|
(set! (-> a0-2 state meet data 0 quad) (-> v1-4 quad))
|
|
)
|
|
(let ((a0-5 (-> s2-0 bolt))
|
|
(v1-6 s3-0)
|
|
)
|
|
(vector-copy! (-> a0-5 state meet data (+ (-> a0-5 state points-to-draw) -1)) v1-6)
|
|
)
|
|
(when (-> gp-0 ring-spec)
|
|
(let ((s1-0 (-> gp-0 ring-spec num-points))
|
|
(s0-0 (-> s2-0 ring 0))
|
|
(sv-96 (-> s2-0 ring 1))
|
|
(sv-112 (new 'stack-no-clear 'vector))
|
|
)
|
|
(set! (-> sv-112 x) 0.0)
|
|
(set! (-> sv-112 y) 0.0)
|
|
(set! (-> sv-112 z) (-> s2-0 ring-radius))
|
|
(set! (-> sv-112 w) 0.0)
|
|
(let ((f30-0 (* 65536.0 (/ 1.0 (the float (+ s1-0 -1))))))
|
|
(dotimes (s2-1 s1-0)
|
|
(set-point! s0-0 s2-1 (vector+! (new 'stack-no-clear 'vector) s4-0 sv-112))
|
|
(set-point! sv-96 s2-1 (vector+! (new 'stack-no-clear 'vector) s3-0 sv-112))
|
|
(vector-rotate-y! sv-112 sv-112 f30-0)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(debug-draw (-> self path))
|
|
(debug-draw (-> self path-r))
|
|
(none)
|
|
)
|
|
|
|
;; failed to figure out what this is:
|
|
(defstate idle (elec-gate)
|
|
:virtual #t
|
|
:event (behavior ((proc process) (argc int) (message symbol) (block event-message-block))
|
|
(case message
|
|
(('trigger)
|
|
(let ((gp-0 (-> self on-trigger)))
|
|
(if gp-0
|
|
(script-eval gp-0 :vector (-> self root trans))
|
|
)
|
|
)
|
|
(go-virtual active)
|
|
)
|
|
)
|
|
)
|
|
:enter (behavior ()
|
|
(process-entity-status! self (entity-perm-status subtask-complete) #t)
|
|
(dotimes (v1-0 5)
|
|
(let ((a0-3 (-> self l-bolt v1-0 bolt))
|
|
(a1-1 0)
|
|
)
|
|
(let ((a2-2 (!= a1-1 (-> a0-3 state mode))))
|
|
(case a1-1
|
|
((3)
|
|
(if a2-2
|
|
(set! (-> a0-3 state counter) 0.0)
|
|
)
|
|
)
|
|
((1)
|
|
(set! (-> a0-3 state start-color) (-> a0-3 spec start-color))
|
|
(set! (-> a0-3 state end-color) (-> a0-3 spec end-color))
|
|
)
|
|
)
|
|
)
|
|
(set! (-> a0-3 state mode) (the-as uint a1-1))
|
|
)
|
|
(when (-> self params ring-spec)
|
|
(let ((a0-9 (-> self l-bolt v1-0 ring 0))
|
|
(a1-2 0)
|
|
)
|
|
(let ((a2-12 (!= a1-2 (-> a0-9 state mode))))
|
|
(case a1-2
|
|
((3)
|
|
(if a2-12
|
|
(set! (-> a0-9 state counter) 0.0)
|
|
)
|
|
)
|
|
((1)
|
|
(set! (-> a0-9 state start-color) (-> a0-9 spec start-color))
|
|
(set! (-> a0-9 state end-color) (-> a0-9 spec end-color))
|
|
)
|
|
)
|
|
)
|
|
(set! (-> a0-9 state mode) (the-as uint a1-2))
|
|
)
|
|
(let ((a0-12 (-> self l-bolt v1-0 ring 1))
|
|
(a1-3 0)
|
|
)
|
|
(let ((a2-22 (!= a1-3 (-> a0-12 state mode))))
|
|
(case a1-3
|
|
((3)
|
|
(if a2-22
|
|
(set! (-> a0-12 state counter) 0.0)
|
|
)
|
|
)
|
|
((1)
|
|
(set! (-> a0-12 state start-color) (-> a0-12 spec start-color))
|
|
(set! (-> a0-12 state end-color) (-> a0-12 spec end-color))
|
|
)
|
|
)
|
|
)
|
|
(set! (-> a0-12 state mode) (the-as uint a1-3))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
:code sleep-code
|
|
:post (behavior ()
|
|
(set-elec-scale! self 0.0)
|
|
(if (nonzero? (-> self part-off))
|
|
(spawn-particles self (-> self part-off))
|
|
)
|
|
)
|
|
)
|
|
|
|
;; failed to figure out what this is:
|
|
(defstate active (elec-gate)
|
|
:virtual #t
|
|
:event (behavior ((proc process) (argc int) (message symbol) (block event-message-block))
|
|
(case message
|
|
(('shutdown)
|
|
(go-virtual shutdown-camera)
|
|
)
|
|
)
|
|
)
|
|
:enter (behavior ()
|
|
(process-entity-status! self (entity-perm-status subtask-complete) #f)
|
|
(if (-> self on-start)
|
|
(script-eval (-> self on-start) :vector (-> self root trans))
|
|
)
|
|
(dotimes (v1-7 5)
|
|
(set! (-> self l-bolt v1-7 pos) (+ -1.0 (* 0.2 (the float v1-7))))
|
|
(let ((a0-9 (-> self l-bolt v1-7 bolt))
|
|
(a1-3 0)
|
|
)
|
|
(let ((a2-3 (!= a1-3 (-> a0-9 state mode))))
|
|
(case a1-3
|
|
((3)
|
|
(if a2-3
|
|
(set! (-> a0-9 state counter) 0.0)
|
|
)
|
|
)
|
|
((1)
|
|
(set! (-> a0-9 state start-color) (-> a0-9 spec start-color))
|
|
(set! (-> a0-9 state end-color) (-> a0-9 spec end-color))
|
|
)
|
|
)
|
|
)
|
|
(set! (-> a0-9 state mode) (the-as uint a1-3))
|
|
)
|
|
(when (-> self params ring-spec)
|
|
(let ((a0-15 (-> self l-bolt v1-7 ring 0))
|
|
(a1-4 0)
|
|
)
|
|
(let ((a2-13 (!= a1-4 (-> a0-15 state mode))))
|
|
(case a1-4
|
|
((3)
|
|
(if a2-13
|
|
(set! (-> a0-15 state counter) 0.0)
|
|
)
|
|
)
|
|
((1)
|
|
(set! (-> a0-15 state start-color) (-> a0-15 spec start-color))
|
|
(set! (-> a0-15 state end-color) (-> a0-15 spec end-color))
|
|
)
|
|
)
|
|
)
|
|
(set! (-> a0-15 state mode) (the-as uint a1-4))
|
|
)
|
|
(let ((a0-18 (-> self l-bolt v1-7 ring 1))
|
|
(a1-5 0)
|
|
)
|
|
(let ((a2-23 (!= a1-5 (-> a0-18 state mode))))
|
|
(case a1-5
|
|
((3)
|
|
(if a2-23
|
|
(set! (-> a0-18 state counter) 0.0)
|
|
)
|
|
)
|
|
((1)
|
|
(set! (-> a0-18 state start-color) (-> a0-18 spec start-color))
|
|
(set! (-> a0-18 state end-color) (-> a0-18 spec end-color))
|
|
)
|
|
)
|
|
)
|
|
(set! (-> a0-18 state mode) (the-as uint a1-5))
|
|
)
|
|
)
|
|
)
|
|
(let ((gp-0 (new 'stack-no-clear 'inline-array 'vector 2)))
|
|
(dotimes (v1-10 2)
|
|
(set! (-> gp-0 v1-10 quad) (the-as uint128 0))
|
|
)
|
|
(let ((s5-0 (new 'stack-no-clear 'vector)))
|
|
0.0
|
|
(get-point-in-path! (-> self path) (-> gp-0 0) 0.0 'interp)
|
|
(get-point-in-path! (-> self path-r) (-> gp-0 1) 0.0 'interp)
|
|
(vector-! s5-0 (-> gp-0 1) (-> gp-0 0))
|
|
(vector-normalize! s5-0 (+ (-> self params plane-expand-xz) (res-lump-float (-> self entity) 'width)))
|
|
(vector+! (-> gp-0 1) (-> gp-0 1) s5-0)
|
|
(vector-negate! s5-0 s5-0)
|
|
(vector+! (-> gp-0 0) (-> gp-0 0) s5-0)
|
|
(vector-! s5-0 (-> gp-0 1) (-> gp-0 0))
|
|
(vector-normalize! s5-0 -1.0)
|
|
(vector-cross! s5-0 s5-0 *y-vector*)
|
|
(vector+float*! (-> gp-0 0) (-> gp-0 0) s5-0 (-> self params plane-shift-z))
|
|
(vector+float*! (-> gp-0 1) (-> gp-0 1) s5-0 (-> self params plane-shift-z))
|
|
(vector-normalize-copy! s5-0 *up-vector* -8192.0)
|
|
(vector+! (-> gp-0 0) (-> gp-0 0) s5-0)
|
|
(vector+! (-> gp-0 1) (-> gp-0 1) s5-0)
|
|
)
|
|
(let ((f0-12
|
|
(+ (- (-> (get-point-in-path! (-> self path) (new 'stack-no-clear 'vector) (get-num-segments (-> self path)) 'interp)
|
|
y
|
|
)
|
|
(-> (get-point-in-path! (-> self path) (new 'stack-no-clear 'vector) 0.0 'interp) y)
|
|
)
|
|
(-> self params plane-expand-y)
|
|
)
|
|
)
|
|
)
|
|
(blocking-plane-spawn (the-as curve-control #f) gp-0 f0-12)
|
|
)
|
|
)
|
|
)
|
|
:trans (behavior ()
|
|
(let ((gp-0 *target*))
|
|
(when gp-0
|
|
(when (not (focus-test? gp-0 disable dead ignore grabbed pilot-riding pilot mech teleporting invulnerable))
|
|
(let* ((v1-5 (get-trans gp-0 0))
|
|
(a1-2 (vector-! (new 'stack-no-clear 'vector) v1-5 (-> self dividing-wall pos)))
|
|
(s5-0 (-> self plane (if (< 0.0 (vector-dot a1-2 (-> self dividing-wall dir)))
|
|
0
|
|
1
|
|
)
|
|
)
|
|
)
|
|
(s4-1 (vector-! (new 'stack-no-clear 'vector) v1-5 (-> s5-0 pos)))
|
|
)
|
|
(when (and (< (vector-dot (vector-normalize-copy! (new 'stack-no-clear 'vector) s4-1 1.0) (-> s5-0 dir)) 0.0)
|
|
(let ((v1-10 s4-1))
|
|
(< (sqrtf (+ (* (-> v1-10 x) (-> v1-10 x)) (* (-> v1-10 z) (-> v1-10 z)))) (-> self wall-xz))
|
|
)
|
|
(< (fabs (-> s4-1 y)) (-> self wall-y))
|
|
)
|
|
(send-event
|
|
gp-0
|
|
'attack
|
|
#f
|
|
(static-attack-info :mask (vehicle-impulse-factor) ((id (new-attack-id))
|
|
(damage 2.0)
|
|
(vehicle-damage-factor 1.0)
|
|
(vehicle-impulse-factor 1.0)
|
|
(vector (-> s5-0 dir))
|
|
(shove-back (meters 6))
|
|
(shove-up (meters 3))
|
|
(control (if (focus-test? gp-0 board)
|
|
1.0
|
|
0.0
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(let* ((s5-1 (-> self l-bolt))
|
|
(s4-2 (get-point-at-percent-along-path! (-> self path) (new 'stack-no-clear 'vector) (-> s5-1 0 pos) 'interp))
|
|
(s5-2
|
|
(get-point-at-percent-along-path! (-> self path-r) (new 'stack-no-clear 'vector) (-> s5-1 0 pos) 'interp)
|
|
)
|
|
)
|
|
(process-spawn
|
|
lightning-tracker
|
|
:init lightning-tracker-init
|
|
(-> self params bolt-spec)
|
|
15
|
|
(the-as symbol #f)
|
|
(the-as symbol #f)
|
|
s4-2
|
|
(get-trans gp-0 3)
|
|
:name "lightning-tracker"
|
|
:to *entity-pool*
|
|
:unk 0
|
|
)
|
|
(process-spawn
|
|
lightning-tracker
|
|
:init lightning-tracker-init
|
|
(-> self params bolt-spec)
|
|
15
|
|
(the-as symbol #f)
|
|
(the-as symbol #f)
|
|
s5-2
|
|
(get-trans gp-0 3)
|
|
:name "lightning-tracker"
|
|
:to *entity-pool*
|
|
:unk 0
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(set! (-> self lightning-quality) (lerp-scale
|
|
0.0
|
|
1.0
|
|
(vector-vector-distance (get-trans gp-0 0) (-> self root trans))
|
|
(-> self params max-dist)
|
|
(-> self params min-dist)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(let ((gp-1 (+ (the int (* 5.0 (-> self lightning-quality))) 1)))
|
|
(dotimes (s5-4 5)
|
|
(let ((s3-3 (-> self l-bolt s5-4))
|
|
(s2-3 (-> self params))
|
|
(s4-5 (if (and (-> self quality-enabled?) (zero? (mod s5-4 gp-1)))
|
|
0
|
|
-1
|
|
)
|
|
)
|
|
)
|
|
(seek! (-> s3-3 pos) 1.5 (* (-> s2-3 speed-mult) (+ 0.2 (fabs (-> s3-3 pos))) (seconds-per-frame)))
|
|
(cond
|
|
((>= (-> s3-3 pos) 1.5)
|
|
(set! (-> s3-3 ring-radius) (rand-vu-float-range (-> s2-3 ring-radius-min) (-> s2-3 ring-radius-max)))
|
|
(set! (-> s3-3 pos) 0.0)
|
|
)
|
|
((>= (-> s3-3 pos) 1.0)
|
|
(let ((v1-56 (-> self l-bolt s5-4 bolt))
|
|
(a0-40 (logand 0 s4-5))
|
|
)
|
|
(let ((a1-21 (!= a0-40 (-> v1-56 state mode))))
|
|
(case a0-40
|
|
((3)
|
|
(if a1-21
|
|
(set! (-> v1-56 state counter) 0.0)
|
|
)
|
|
)
|
|
((1)
|
|
(set! (-> v1-56 state start-color) (-> v1-56 spec start-color))
|
|
(set! (-> v1-56 state end-color) (-> v1-56 spec end-color))
|
|
)
|
|
)
|
|
)
|
|
(set! (-> v1-56 state mode) (the-as uint a0-40))
|
|
)
|
|
(when (-> self params ring-spec)
|
|
(let ((v1-62 (-> self l-bolt s5-4 ring 0))
|
|
(a0-41 (logand 0 s4-5))
|
|
)
|
|
(let ((a1-31 (!= a0-41 (-> v1-62 state mode))))
|
|
(case a0-41
|
|
((3)
|
|
(if a1-31
|
|
(set! (-> v1-62 state counter) 0.0)
|
|
)
|
|
)
|
|
((1)
|
|
(set! (-> v1-62 state start-color) (-> v1-62 spec start-color))
|
|
(set! (-> v1-62 state end-color) (-> v1-62 spec end-color))
|
|
)
|
|
)
|
|
)
|
|
(set! (-> v1-62 state mode) (the-as uint a0-41))
|
|
)
|
|
(let ((a0-42 (-> self l-bolt s5-4 ring 1))
|
|
(v1-65 (logand 0 s4-5))
|
|
)
|
|
(let ((a1-41 (!= v1-65 (-> a0-42 state mode))))
|
|
(case v1-65
|
|
((3)
|
|
(if a1-41
|
|
(set! (-> a0-42 state counter) 0.0)
|
|
)
|
|
)
|
|
((1)
|
|
(set! (-> a0-42 state start-color) (-> a0-42 spec start-color))
|
|
(set! (-> a0-42 state end-color) (-> a0-42 spec end-color))
|
|
)
|
|
)
|
|
)
|
|
(set! (-> a0-42 state mode) (the-as uint v1-65))
|
|
)
|
|
)
|
|
)
|
|
((< 0.0 (-> s3-3 pos))
|
|
(when (zero? (-> self l-bolt s5-4 bolt state mode))
|
|
(let ((v1-74 (-> self l-bolt s5-4 bolt))
|
|
(a0-43 (logand s4-5 1))
|
|
)
|
|
(let ((a1-51 (!= a0-43 (-> v1-74 state mode))))
|
|
(case a0-43
|
|
((3)
|
|
(if a1-51
|
|
(set! (-> v1-74 state counter) 0.0)
|
|
)
|
|
)
|
|
((1)
|
|
(set! (-> v1-74 state start-color) (-> v1-74 spec start-color))
|
|
(set! (-> v1-74 state end-color) (-> v1-74 spec end-color))
|
|
)
|
|
)
|
|
)
|
|
(set! (-> v1-74 state mode) (the-as uint a0-43))
|
|
)
|
|
(when (-> self params ring-spec)
|
|
(let ((v1-80 (-> self l-bolt s5-4 ring 0))
|
|
(a0-44 (logand s4-5 1))
|
|
)
|
|
(let ((a1-61 (!= a0-44 (-> v1-80 state mode))))
|
|
(case a0-44
|
|
((3)
|
|
(if a1-61
|
|
(set! (-> v1-80 state counter) 0.0)
|
|
)
|
|
)
|
|
((1)
|
|
(set! (-> v1-80 state start-color) (-> v1-80 spec start-color))
|
|
(set! (-> v1-80 state end-color) (-> v1-80 spec end-color))
|
|
)
|
|
)
|
|
)
|
|
(set! (-> v1-80 state mode) (the-as uint a0-44))
|
|
)
|
|
(let ((a0-45 (-> self l-bolt s5-4 ring 1))
|
|
(v1-83 (logand s4-5 1))
|
|
)
|
|
(let ((a1-71 (!= v1-83 (-> a0-45 state mode))))
|
|
(case v1-83
|
|
((3)
|
|
(if a1-71
|
|
(set! (-> a0-45 state counter) 0.0)
|
|
)
|
|
)
|
|
((1)
|
|
(set! (-> a0-45 state start-color) (-> a0-45 spec start-color))
|
|
(set! (-> a0-45 state end-color) (-> a0-45 spec end-color))
|
|
)
|
|
)
|
|
)
|
|
(set! (-> a0-45 state mode) (the-as uint v1-83))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
:code sleep-code
|
|
:post (behavior ()
|
|
(set-elec-scale! self 1.0)
|
|
(if (nonzero? (-> self part))
|
|
(spawn-particles self (-> self part))
|
|
)
|
|
(update! (-> self sound))
|
|
(elec-gate-post)
|
|
)
|
|
)
|
|
|
|
;; failed to figure out what this is:
|
|
(defstate shutdown-camera (elec-gate)
|
|
:virtual #t
|
|
:code (behavior ()
|
|
(suspend-for (seconds 1)
|
|
)
|
|
(format 0 "~s~%" (-> self name))
|
|
(if (res-lump-struct (-> self entity) 'camera-name structure)
|
|
(process-spawn
|
|
external-camera-controller
|
|
(-> self entity)
|
|
600
|
|
#f
|
|
:name "external-camera-controller"
|
|
:to *entity-pool*
|
|
)
|
|
)
|
|
(suspend-for (seconds 1)
|
|
)
|
|
(go-virtual shutdown)
|
|
)
|
|
:post (behavior ()
|
|
(elec-gate-post)
|
|
)
|
|
)
|
|
|
|
;; failed to figure out what this is:
|
|
(defstate shutdown (elec-gate)
|
|
:virtual #t
|
|
:enter (behavior ()
|
|
(process-entity-status! self (entity-perm-status subtask-complete) #t)
|
|
(stop! (-> self sound))
|
|
(sound-play "elec-gate-off")
|
|
(blocking-plane-destroy)
|
|
(if (-> self on-stop)
|
|
(script-eval (-> self on-stop) :vector (-> self root trans))
|
|
)
|
|
)
|
|
:trans (behavior ()
|
|
(let ((gp-0 #t))
|
|
(dotimes (s5-0 5)
|
|
(let ((s4-0 (-> self l-bolt s5-0)))
|
|
(seek! (-> s4-0 pos) 0.0 (seconds-per-frame))
|
|
(set! gp-0 (cond
|
|
((or (< 1.0 (-> s4-0 pos)) (>= 0.0 (-> s4-0 pos)))
|
|
(when (= (-> self l-bolt s5-0 bolt state mode) 2)
|
|
(let ((v1-9 (-> self l-bolt s5-0 bolt))
|
|
(a0-6 3)
|
|
)
|
|
(let ((a1-2 (!= a0-6 (-> v1-9 state mode))))
|
|
(case a0-6
|
|
((3)
|
|
(if a1-2
|
|
(set! (-> v1-9 state counter) 0.0)
|
|
)
|
|
)
|
|
((1)
|
|
(set! (-> v1-9 state start-color) (-> v1-9 spec start-color))
|
|
(set! (-> v1-9 state end-color) (-> v1-9 spec end-color))
|
|
)
|
|
)
|
|
)
|
|
(set! (-> v1-9 state mode) (the-as uint a0-6))
|
|
)
|
|
(when (-> self params ring-spec)
|
|
(let ((v1-14 (-> self l-bolt s5-0 ring 0))
|
|
(a0-8 3)
|
|
)
|
|
(let ((a1-12 (!= a0-8 (-> v1-14 state mode))))
|
|
(case a0-8
|
|
((3)
|
|
(if a1-12
|
|
(set! (-> v1-14 state counter) 0.0)
|
|
)
|
|
)
|
|
((1)
|
|
(set! (-> v1-14 state start-color) (-> v1-14 spec start-color))
|
|
(set! (-> v1-14 state end-color) (-> v1-14 spec end-color))
|
|
)
|
|
)
|
|
)
|
|
(set! (-> v1-14 state mode) (the-as uint a0-8))
|
|
)
|
|
(let ((v1-17 (-> self l-bolt s5-0 ring 1))
|
|
(a0-9 3)
|
|
)
|
|
(let ((a1-22 (!= a0-9 (-> v1-17 state mode))))
|
|
(case a0-9
|
|
((3)
|
|
(if a1-22
|
|
(set! (-> v1-17 state counter) 0.0)
|
|
)
|
|
)
|
|
((1)
|
|
(set! (-> v1-17 state start-color) (-> v1-17 spec start-color))
|
|
(set! (-> v1-17 state end-color) (-> v1-17 spec end-color))
|
|
)
|
|
)
|
|
)
|
|
(set! (-> v1-17 state mode) (the-as uint a0-9))
|
|
)
|
|
)
|
|
)
|
|
gp-0
|
|
)
|
|
(else
|
|
#f
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(when gp-0
|
|
(let ((gp-1 (-> self on-shutdown)))
|
|
(if gp-1
|
|
(script-eval gp-1 :vector (-> self root trans))
|
|
)
|
|
)
|
|
(go-virtual idle)
|
|
)
|
|
)
|
|
)
|
|
:code sleep-code
|
|
:post (behavior ()
|
|
(set-elec-scale! self 0.0)
|
|
(if (nonzero? (-> self part-off))
|
|
(spawn-particles self (-> self part-off))
|
|
)
|
|
(elec-gate-post)
|
|
)
|
|
)
|
|
|
|
;; definition for method 29 of type elec-gate
|
|
;; WARN: Return type mismatch int vs none.
|
|
(defmethod set-elec-scale! ((this elec-gate) (arg0 float))
|
|
(if (< (vector-vector-distance (-> this root trans) (target-pos 0)) 327680.0)
|
|
(elec-gate-method-30 this arg0)
|
|
)
|
|
0
|
|
(none)
|
|
)
|
|
|
|
;; definition for method 30 of type elec-gate
|
|
;; WARN: Return type mismatch int vs none.
|
|
(defmethod elec-gate-method-30 ((this elec-gate) (arg0 float))
|
|
0
|
|
(none)
|
|
)
|
|
|
|
;; definition for method 28 of type elec-gate
|
|
;; WARN: Return type mismatch int vs none.
|
|
(defmethod spawn-particles ((this elec-gate) (arg0 sparticle-launch-control))
|
|
(if (-> this part-spawner-left)
|
|
(spawn arg0 (the-as vector (&-> this part-spawner-left child 8)))
|
|
)
|
|
(if (-> this part-spawner-right)
|
|
(spawn arg0 (the-as vector (&-> this part-spawner-right child 8)))
|
|
)
|
|
0
|
|
(none)
|
|
)
|
|
|
|
;; definition for method 7 of type elec-gate
|
|
;; WARN: Return type mismatch process-drawable vs elec-gate.
|
|
(defmethod relocate ((this elec-gate) (offset int))
|
|
(dotimes (v1-0 5)
|
|
(let ((a2-2 (-> this l-bolt v1-0)))
|
|
(if (nonzero? (-> a2-2 bolt))
|
|
(&+! (-> a2-2 bolt) offset)
|
|
)
|
|
(if (nonzero? (-> a2-2 ring 0))
|
|
(&+! (-> a2-2 ring 0) offset)
|
|
)
|
|
(if (nonzero? (-> a2-2 ring 1))
|
|
(&+! (-> a2-2 ring 1) offset)
|
|
)
|
|
)
|
|
)
|
|
(if (nonzero? (-> this path-r))
|
|
(&+! (-> this path-r) offset)
|
|
)
|
|
(when (nonzero? (-> this part-off))
|
|
(if (nonzero? (-> this part-off))
|
|
(&+! (-> this part-off) offset)
|
|
)
|
|
)
|
|
(the-as elec-gate ((method-of-type process-drawable relocate) this offset))
|
|
)
|
|
|
|
;; definition for method 10 of type elec-gate
|
|
(defmethod deactivate ((this elec-gate))
|
|
"Make a process dead, clean it up, remove it from the active pool, and return to dead pool."
|
|
(if (nonzero? (-> this root))
|
|
(set-elec-scale! this 0.0)
|
|
)
|
|
(if (nonzero? (-> this part-off))
|
|
(kill-particles (-> this part-off))
|
|
)
|
|
(call-parent-method this)
|
|
(none)
|
|
)
|
|
|
|
;; definition for method 24 of type elec-gate
|
|
(defmethod get-params ((this elec-gate))
|
|
*default-elec-gate-params*
|
|
)
|
|
|
|
;; definition for method 25 of type elec-gate
|
|
;; WARN: Return type mismatch int vs none.
|
|
(defmethod elec-gate-method-25 ((this elec-gate))
|
|
0
|
|
(none)
|
|
)
|
|
|
|
;; definition for method 26 of type elec-gate
|
|
;; WARN: Return type mismatch int vs none.
|
|
(defmethod elec-gate-method-26 ((this elec-gate))
|
|
0
|
|
(none)
|
|
)
|
|
|
|
;; definition for method 27 of type elec-gate
|
|
;; WARN: Return type mismatch int vs object.
|
|
(defmethod go-initial-state ((this elec-gate))
|
|
(if (or (logtest? (actor-option user17) (-> this fact options))
|
|
(and (-> this entity) (logtest? (-> this entity extra perm status) (entity-perm-status subtask-complete)))
|
|
)
|
|
(go (method-of-object this idle))
|
|
(go (method-of-object this active))
|
|
)
|
|
0
|
|
)
|
|
|
|
;; definition for method 11 of type elec-gate
|
|
;; INFO: Used lq/sq
|
|
(defmethod init-from-entity! ((this elec-gate) (arg0 entity-actor))
|
|
"Set up a newly created process from the entity that created it."
|
|
(set! (-> this root) (new 'process 'trsqv))
|
|
(process-drawable-from-entity! this arg0)
|
|
(set! (-> this entity) arg0)
|
|
(set! (-> this fact)
|
|
(new 'process 'fact-info this (pickup-type eco-pill-random) (-> *FACT-bank* default-eco-pill-green-inc))
|
|
)
|
|
(set! (-> this params) (get-params this))
|
|
(logclear! (-> this mask) (process-mask actor-pause))
|
|
(set! (-> this path) (new 'process 'path-control this 'pathl 0.0 (the-as entity #f) #f))
|
|
(logior! (-> this path flags) (path-control-flag display draw-line draw-point draw-text))
|
|
(set! (-> this path-r) (new 'process 'path-control this 'pathr 0.0 (the-as entity #f) #f))
|
|
(logior! (-> this path-r flags) (path-control-flag display draw-line draw-point draw-text))
|
|
(set! (-> this part-spawner-left) (the-as part-spawner (entity-actor-lookup arg0 'alt-actor 0)))
|
|
(set! (-> this part-spawner-right) (the-as part-spawner (entity-actor-lookup arg0 'alt-actor 1)))
|
|
(let ((s5-1 (-> this params)))
|
|
(dotimes (s4-0 5)
|
|
(let ((s3-0 (-> this l-bolt s4-0)))
|
|
(set! (-> s3-0 bolt) (new 'process 'lightning-control (-> s5-1 bolt-spec) this 0.0))
|
|
(when (-> s5-1 ring-spec)
|
|
(set! (-> s3-0 ring 0) (new 'process 'lightning-control (-> s5-1 ring-spec) this 0.0))
|
|
(set! (-> s3-0 ring 1) (new 'process 'lightning-control (-> s5-1 ring-spec) this 0.0))
|
|
)
|
|
(set! (-> s3-0 ring-radius) (rand-vu-float-range (-> s5-1 ring-radius-min) (-> s5-1 ring-radius-max)))
|
|
(set! (-> s3-0 pos) (* 0.2 (the float s4-0)))
|
|
)
|
|
)
|
|
)
|
|
(let* ((s4-1 (get-point-in-path! (-> this path) (new 'stack-no-clear 'vector) 0.0 'interp))
|
|
(v1-29 (get-point-in-path! (-> this path-r) (new 'stack-no-clear 'vector) 0.0 'interp))
|
|
(a1-15 (vector-! (new 'stack-no-clear 'vector) v1-29 s4-1))
|
|
(s5-3 (vector+float*! (new 'stack-no-clear 'vector) s4-1 a1-15 0.5))
|
|
(v1-31 (vector-normalize-copy! (new 'stack-no-clear 'vector) a1-15 1.0))
|
|
)
|
|
(vector-cross! v1-31 v1-31 *up-vector*)
|
|
(set! (-> this dividing-wall pos quad) (-> s5-3 quad))
|
|
(vector-copy! (-> this dividing-wall dir) v1-31)
|
|
(vector+float*! (-> this plane 0 pos) s5-3 v1-31 12288.0)
|
|
(vector-copy! (-> this plane 0 dir) v1-31)
|
|
(vector-float*! v1-31 v1-31 -1.0)
|
|
(vector+float*! (-> this plane 1 pos) s5-3 v1-31 12288.0)
|
|
(vector-copy! (-> this plane 1 dir) v1-31)
|
|
)
|
|
(set! (-> this wall-xz)
|
|
(vector-vector-distance
|
|
(get-point-in-path! (-> this path) (new 'stack-no-clear 'vector) 0.0 'interp)
|
|
(get-point-in-path! (-> this path-r) (new 'stack-no-clear 'vector) 0.0 'interp)
|
|
)
|
|
)
|
|
(set! (-> this wall-xz) (/ (-> this wall-xz) 2))
|
|
(+! (-> this wall-xz) 4096.0)
|
|
(set! (-> this wall-y)
|
|
(fabs
|
|
(- (-> (get-point-in-path! (-> this path) (new 'stack-no-clear 'vector) (get-num-segments (-> this path)) 'interp)
|
|
y
|
|
)
|
|
(-> (get-point-in-path! (-> this path) (new 'stack-no-clear 'vector) 0.0 'interp) y)
|
|
)
|
|
)
|
|
)
|
|
(+! (-> this wall-y) 4096.0)
|
|
(set! (-> this quality-enabled?) #t)
|
|
(set! (-> this lightning-quality) 1.0)
|
|
(set! (-> this sound)
|
|
(new 'process 'ambient-sound (static-sound-spec "electric-gate" :group 0 :fo-max 70) (-> this root trans) 0.0)
|
|
)
|
|
(set! (-> this on-start) (res-lump-struct (-> this entity) 'on-start pair))
|
|
(set! (-> this on-stop) (res-lump-struct (-> this entity) 'on-stop pair))
|
|
(set! (-> this on-shutdown) (res-lump-struct (-> this entity) 'on-shutdown pair))
|
|
(set! (-> this on-trigger) (res-lump-struct (-> this entity) 'on-trigger pair))
|
|
(elec-gate-method-25 this)
|
|
(elec-gate-method-26 this)
|
|
(go-initial-state this)
|
|
)
|
|
|
|
;; definition of type sewer-elec-gate
|
|
(deftype sewer-elec-gate (elec-gate)
|
|
((gate-index int32)
|
|
)
|
|
)
|
|
|
|
;; definition for method 3 of type sewer-elec-gate
|
|
(defmethod inspect ((this sewer-elec-gate))
|
|
(when (not this)
|
|
(set! this this)
|
|
(goto cfg-4)
|
|
)
|
|
(let ((t9-0 (method-of-type elec-gate inspect)))
|
|
(t9-0 this)
|
|
)
|
|
(format #t "~2Tgate-index: ~D~%" (-> this gate-index))
|
|
(label cfg-4)
|
|
this
|
|
)
|
|
|
|
;; definition for method 29 of type sewer-elec-gate
|
|
;; WARN: Return type mismatch int vs none.
|
|
(defmethod set-elec-scale! ((this sewer-elec-gate) (arg0 float))
|
|
(set-sewh-electricity-scale! arg0 (-> this gate-index))
|
|
(if (zero? (-> this gate-index))
|
|
(set-sewg-electricity-scale! arg0 (-> this gate-index))
|
|
)
|
|
0
|
|
(none)
|
|
)
|
|
|
|
;; definition for method 11 of type sewer-elec-gate
|
|
(defmethod init-from-entity! ((this sewer-elec-gate) (arg0 entity-actor))
|
|
"Set up a newly created process from the entity that created it."
|
|
(set! (-> this gate-index) (res-lump-value (-> this entity) 'index int :time -1000000000.0))
|
|
(call-parent-method this arg0)
|
|
)
|