Files
jak-project/test/decompiler/reference/jak3/levels/common/external-player-control_REF.gc
T
Hat Kid 949508d0ed decomp3: traffic/citizen/faction code, desert-rescue (#3506)
- `cty-faction-h`
- `nav-graph`
- `citizen-h`
- `citizen`
- `civilian`
- `traffic-engine`
- `traffic-manager`
- `cty-attack-controller`
- `cty-faction`
- `formation-object`
- `formations`
- `squad-control-city-h`
- `squad-control-city`
- `traffic-util`
- `wlander-female`
- `wlander-h`
- `wlander-male`
- `speech-manager`
- `desert-rescue`
- `desresc-path`
- `neo-satellite`
- `rope-prim-system-h`
- `rope-prim-system`
- `rope-system`
- `wland-passenger`
- `cty-guard-projectile`
- `ctywide-init`
- `ff-squad-control`
- `guard-grenade`
- `guard-rifle`
- `guard-states`
- `guard-tazer`
- `ctywide-speech`
- `citizen-chick`
- `citizen-fat`
- `citizen-norm`
- `guard`
- `bike`
- `car`
- `test-bike`
- `vehicle-rider`
- `desert-rescue-bbush`
- `ff-squad-control-h`
- `flee-info`
- `guard-h`
- `mission-squad-control`
- `kg-squad-control`
- `kg-squad-member-h`
- `kg-squad-member`
- `mh-squad-control`
- `mh-squad-member-h`
- `mh-squad-member`
- `ctywide-obs-h`
- `ctywide-obs`
- `ctywide-part`
- `ctywide-scenes`
- `ctywide-tasks`
- `ctywide-texture`
- `billiards`
- `guide-arrow`
- `kg-vehicles`
- `flying-turret`
- `roboguard-city`
- `citizen-enemy`
- `metalhead-flitter`
- `metalhead-grunt`
- `metalhead-predator`
- `spydroid`
- `kg-squad-control-h`
- `mh-squad-control-h`
- `krimson-wall`
- `ctyport-obs`
- `ctyinda-obs`
- `ctyinda-part`
- `ctyindb-obs`
- `ctyindb-part`
- `ctyport-attack`
- `h-torpedo`
- `ctyport-part`
- `ctyport-scenes`
- `external-player-control`
- `desert-chase-path-h`
- `desert-chase-path`
- `desert-chase`
- `desert-jump`
- `wcar-catapult`
- `bombbot-h`
- `bombbot`
- `bombbot-path`
- `cty-hijack-missile`
- `cty-hijack`
- `ctyport-attack-bbush`
- `ctysluma-part`
- `ctyslumb-part`
- `ctyslumc-obs`
- `ctyslumc-part`
- `searchlight`
- `cty-destroy-grid`
- `ctyfarm-obs`
- `ctyfarma-part`
- `ctyfarmb-part`
- `freehq-part`
- `freehq-scenes`
- `onintent-scenes`
- `onintent-part`
- `cty-sniper-battery`
- `cty-sniper-turret`
- `intro-obs`
- `intro-part`
- `intro-scenes`
- `palcab-part`
- `palroof-part`
2024-05-09 19:18:55 -04:00

453 lines
15 KiB
Common Lisp
Vendored
Generated

;;-*-Lisp-*-
(in-package goal)
;; definition for symbol *target-controller-pad*, type cpad-info
(define *target-controller-pad* (new 'static 'cpad-info))
;; definition for function setup-control-pad
;; WARN: Return type mismatch int vs none.
(defun setup-control-pad ((arg0 cpad-info))
(cpad-invalid! arg0)
(set! (-> arg0 button0) (the-as uint 0))
(set! (-> arg0 valid) (the-as uint 0))
0
(none)
)
;; definition for function set-pad-world-dir
;; INFO: Used lq/sq
;; WARN: Return type mismatch int vs none.
(defun set-pad-world-dir ((arg0 cpad-info) (arg1 vector) (arg2 float))
(let ((s5-0 (new 'stack-no-clear 'vector)))
(set! (-> s5-0 quad) (-> arg1 quad))
(let ((s3-0 (matrix-transpose! (new 'stack-no-clear 'matrix) (-> *target* control cam-R-w))))
(let ((s2-0 (matrix-from-two-vectors!
(new 'stack-no-clear 'matrix)
(-> *target* control cam-R-w uvec)
(-> *target* control local-normal)
)
)
)
(matrix-transpose! s2-0 s2-0)
(vector-matrix*! s5-0 s5-0 s2-0)
)
(vector-matrix*! s5-0 s5-0 s3-0)
)
(set! (-> s5-0 y) 0.0)
(vector-normalize! s5-0 arg2)
(vector-rotate-around-y! s5-0 s5-0 32768.0)
(set! (-> arg0 stick0-dir) (atan (- (-> s5-0 x)) (- (-> s5-0 z))))
(set! (-> arg0 stick0-speed) arg2)
(+! (-> s5-0 x) 1.0)
(+! (-> s5-0 z) 1.0)
(set! (-> s5-0 x) (* 0.5 (-> s5-0 x)))
(set! (-> s5-0 z) (* 0.5 (-> s5-0 z)))
(set! (-> arg0 leftx) (the-as uint (the int (* 255.0 (-> s5-0 x)))))
(if (logtest? (-> *game-info* secrets) (game-secrets hflip-screen))
(set! (-> arg0 leftx) (the-as uint (* (the-as uint -1) (-> arg0 leftx))))
)
(set! (-> arg0 lefty) (the-as uint (the int (* 255.0 (-> s5-0 z)))))
)
(none)
)
;; definition for function override-player-controls
(defun override-player-controls ((arg0 cpad-info))
(let ((v1-1 (-> *setting-control* user-current player-control-override)))
(logclear! (-> arg0 button0) (-> *setting-control* user-current player-control-mask))
(logior! (-> arg0 button0) (logand (-> v1-1 button0) (-> *setting-control* user-current player-control-mask)))
(when (logtest? #x4000000 (-> *setting-control* user-current player-control-mask))
(set! (-> arg0 leftx) (-> v1-1 leftx))
(set! (-> arg0 lefty) (-> v1-1 lefty))
(set! (-> arg0 stick0-dir) (-> v1-1 stick0-dir))
(set! (-> arg0 stick0-speed) (-> v1-1 stick0-speed))
)
(when (logtest? #x8000000 (-> *setting-control* user-current player-control-mask))
(set! (-> arg0 rightx) (-> v1-1 rightx))
(set! (-> arg0 righty) (-> v1-1 righty))
)
)
0
)
;; definition of type player-controller-init-params
(deftype player-controller-init-params (structure)
((mode symbol)
(flags player-controller-flag)
(targ-pos vector :inline)
(notify-proc handle)
)
)
;; definition for method 3 of type player-controller-init-params
(defmethod inspect ((this player-controller-init-params))
(when (not this)
(set! this this)
(goto cfg-4)
)
(format #t "[~8x] ~A~%" this 'player-controller-init-params)
(format #t "~1Tmode: ~A~%" (-> this mode))
(format #t "~1Tflags: ~D~%" (-> this flags))
(format #t "~1Ttarg-pos: #<vector @ #x~X>~%" (-> this targ-pos))
(format #t "~1Tnotify-proc: ~D~%" (-> this notify-proc))
(label cfg-4)
this
)
;; definition of type player-controller
(deftype player-controller (process-focusable)
((params player-controller-init-params :inline)
(targ-pos vector :inline)
)
(:state-methods
idle
active
clip-to-nav-mesh
lock
)
(:methods
(set-nav-params (_type_) none)
(set-nav-mesh (_type_) none)
(set-params (_type_ player-controller-init-params) object)
(event-handler (_type_ process int symbol event-message-block) object)
)
)
;; definition for method 3 of type player-controller
(defmethod inspect ((this player-controller))
(when (not this)
(set! this this)
(goto cfg-4)
)
(let ((t9-0 (method-of-type process-focusable inspect)))
(t9-0 this)
)
(format #t "~2Tparams: #<player-controller-init-params @ #x~X>~%" (-> this params))
(format #t "~2Ttarg-pos: #<vector @ #x~X>~%" (-> this targ-pos))
(label cfg-4)
this
)
;; definition for method 32 of type player-controller
;; WARN: Return type mismatch nav-callback-info vs none.
(defmethod set-nav-params ((this player-controller))
(when (or (not (-> this nav)) (zero? (-> this nav)))
(let ((a0-4 (find-nearest-nav-mesh (target-pos 0) (the-as float #x7f800000))))
(if a0-4
(add-process-drawable-to-nav-mesh a0-4 this #t)
)
)
)
(when (-> this nav)
(set! (-> this nav flags) (nav-control-flag display-marks))
(let ((v1-9 (-> this nav)))
(set! (-> v1-9 sphere-mask) (the-as uint 0))
)
0
(let ((v1-11 (-> this nav)))
(set! (-> v1-11 target-speed) 4096.0)
)
0
(let ((v1-13 (-> this nav)))
(set! (-> v1-13 acceleration) 409600.0)
)
0
(let ((v1-15 (-> this nav)))
(set! (-> v1-15 turning-acceleration) 40960000.0)
)
0
(let ((v1-17 (-> this nav)))
(set! (-> v1-17 speed-scale) 1.0)
)
0
(let ((v1-19 (-> this nav)))
(set! (-> v1-19 max-rotation-rate) 18204444.0)
)
0
(set! (-> this nav callback-info) *default-nav-callback-info*)
)
(none)
)
;; definition for function player-controller-init-by-other
;; INFO: Used lq/sq
(defbehavior player-controller-init-by-other player-controller ((arg0 player-controller-init-params))
(let ((s5-0 (new 'process 'collide-shape self (collide-list-enum usually-hit-by-player))))
(set! (-> s5-0 penetrated-by) (penetrate
generic-attack
lunge
flop
punch
spin
roll
uppercut
bonk
tube
flut-attack
board
mech-punch
dark-punch
dark-smack
flut
)
)
(let ((v1-3 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 0))))
(set-vector! (-> v1-3 local-sphere) 0.0 0.0 0.0 0.01)
(set! (-> s5-0 total-prims) (the-as uint 1))
(set! (-> s5-0 root-prim) v1-3)
)
(set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w)))
(let ((v1-6 (-> s5-0 root-prim)))
(set! (-> s5-0 backup-collide-as) (-> v1-6 prim-core collide-as))
(set! (-> s5-0 backup-collide-with) (-> v1-6 prim-core collide-with))
)
(set! (-> self root) s5-0)
)
(set! (-> self root trans quad) (-> (target-pos 0) quad))
(set-params self arg0)
(go-virtual idle)
)
;; definition for method 34 of type player-controller
;; INFO: Used lq/sq
(defmethod set-params ((this player-controller) (arg0 player-controller-init-params))
(mem-copy! (the-as pointer (-> this params)) (the-as pointer arg0) 40)
(set! (-> this targ-pos quad) (-> arg0 targ-pos quad))
(case (-> arg0 mode)
(('active)
(if (not (and (-> this next-state) (= (-> this next-state name) 'active)))
(go (method-of-object this active))
)
)
(('clip-to-nav-mesh)
(if (not (and (-> this next-state) (= (-> this next-state name) 'clip-to-nav-mesh)))
(go (method-of-object this clip-to-nav-mesh))
)
)
(('lock)
(if (not (and (-> this next-state) (= (-> this next-state name) 'lock)))
(go (method-of-object this lock))
)
)
(('idle)
(if (not (and (-> this next-state) (= (-> this next-state name) 'idle)))
(go (method-of-object this idle))
)
)
)
)
;; definition for method 33 of type player-controller
(defmethod set-nav-mesh ((this player-controller))
(let ((a0-3 (find-nearest-nav-mesh (target-pos 0) (the-as float #x7f800000))))
(if (and a0-3 (!= nav-mesh (-> this nav state mesh)))
(change-to a0-3 this)
)
)
(none)
)
;; definition for function player-controller-event-handler
(defbehavior player-controller-event-handler player-controller ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block))
(event-handler self arg0 arg1 arg2 arg3)
)
;; definition for method 35 of type player-controller
;; INFO: Used lq/sq
(defmethod event-handler ((this player-controller) (arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block))
(case arg2
(('set-params)
(set-params this (the-as player-controller-init-params (-> arg3 param 0)))
)
(('set-target)
(let ((v0-0 (the-as object (-> this targ-pos))))
(set! (-> (the-as vector v0-0) quad) (-> (the-as vector (-> arg3 param 0)) quad))
v0-0
)
)
(('change-mode)
(set! (-> this params mode) (the-as symbol (-> arg3 param 0)))
(set-params this (-> this params))
)
)
)
;; failed to figure out what this is:
(defstate idle (player-controller)
:virtual #t
:event player-controller-event-handler
:enter (behavior ()
(remove-setting! 'player-control-override)
(remove-setting! 'player-control-mask)
)
:code sleep-code
)
;; failed to figure out what this is:
(defstate clip-to-nav-mesh (player-controller)
:virtual #t
:event player-controller-event-handler
:enter (behavior ()
(set-nav-params self)
)
:trans (behavior ()
(if (not *target*)
(go empty-state)
)
(set-nav-mesh self)
(when (and (-> self nav) (nonzero? (-> self nav)))
(when (and (logtest? (-> self params flags) (player-controller-flag pc1)) (-> self nav state mesh))
(let ((gp-0 (new 'stack-no-clear 'vector)))
(if (nav-mesh-method-10 (-> self nav state mesh) gp-0 (target-pos 0) (the-as nav-poly #f))
(set! (-> gp-0 y) (-> (target-pos 0) y))
)
(move-to-point! (-> *target* control) gp-0)
)
)
)
(set! (-> self root trans quad) (-> (target-pos 0) quad))
)
:code sleep-code
)
;; failed to figure out what this is:
(defstate lock (player-controller)
:virtual #t
:event player-controller-event-handler
:enter (behavior ()
(when (logtest? (-> self params flags) (player-controller-flag lock-features))
(set-setting! 'duck #f 0.0 0)
(set-setting! 'board #f 0.0 0)
(set-setting! 'darkjak #f 0.0 0)
(set-setting! 'jump #f 0.0 0)
)
(when (logtest? (-> self params flags) (player-controller-flag letterbox))
(set-setting! 'letterbox 'abs 1.0 0)
(set-setting! 'letterbox-speed 'abs 2.0 0)
)
(set-setting! 'player-control-override #f 0.0 *target-controller-pad*)
(let ((t1-7 #x400fff4))
(if (not (logtest? (-> self params flags) (player-controller-flag pc0)))
(set! t1-7 (logior #x8000000 t1-7))
)
(set-setting! 'player-control-mask #f 0.0 t1-7)
)
(setup-control-pad *target-controller-pad*)
)
:exit (behavior ()
(when (logtest? (-> self params flags) (player-controller-flag lock-features))
(remove-setting! 'duck)
(remove-setting! 'board)
(remove-setting! 'darkjak)
(remove-setting! 'jump)
)
(remove-setting! 'player-control-override)
(remove-setting! 'player-control-mask)
(when (logtest? (-> self params flags) (player-controller-flag letterbox))
(remove-setting! 'letterbox)
(set-setting! 'letterbox-speed 'abs 4.0 0)
)
)
:code sleep-code
)
;; failed to figure out what this is:
(defstate active (player-controller)
:virtual #t
:event player-controller-event-handler
:enter (behavior ()
(set-time! (-> self state-time))
(when (logtest? (-> self params flags) (player-controller-flag lock-features))
(set-setting! 'duck #f 0.0 0)
(set-setting! 'board #f 0.0 0)
(set-setting! 'darkjak #f 0.0 0)
(set-setting! 'jump #f 0.0 0)
)
(when (logtest? (-> self params flags) (player-controller-flag letterbox))
(set-setting! 'letterbox 'abs 1.0 0)
(set-setting! 'letterbox-speed 'abs 2.0 0)
)
(set-nav-params self)
(set-setting! 'player-control-override #f 0.0 *target-controller-pad*)
(let ((t1-7 #x400fff4))
(if (not (logtest? (-> self params flags) (player-controller-flag pc0)))
(set! t1-7 (logior #x8000000 t1-7))
)
(set-setting! 'player-control-mask #f 0.0 t1-7)
)
)
:exit (behavior ()
(when (logtest? (-> self params flags) (player-controller-flag lock-features))
(remove-setting! 'duck)
(remove-setting! 'board)
(remove-setting! 'darkjak)
(remove-setting! 'jump)
)
(remove-setting! 'player-control-override)
(remove-setting! 'player-control-mask)
(when (logtest? (-> self params flags) (player-controller-flag letterbox))
(remove-setting! 'letterbox)
(set-setting! 'letterbox-speed 'abs 4.0 0)
)
)
:trans (behavior ()
(if (not *target*)
(go empty-state)
)
(if (or (not (-> self nav)) (zero? (-> self nav)))
(go-virtual idle)
)
(set-nav-mesh self)
(when (and (logtest? (-> self params flags) (player-controller-flag pc1)) (-> self nav state mesh))
(let ((gp-0 (new 'stack-no-clear 'vector)))
(if (nav-mesh-method-10 (-> self nav state mesh) gp-0 (target-pos 0) (the-as nav-poly #f))
(set! (-> gp-0 y) (-> (target-pos 0) y))
)
(move-to-point! (-> *target* control) gp-0)
)
)
(set! (-> self root trans quad) (-> (target-pos 0) quad))
(set-virtual-cur-pos! (-> self nav state) (target-pos 0))
(let ((a0-9 (-> self nav state))
(v1-33 (-> self targ-pos))
)
(logclear! (-> a0-9 flags) (nav-state-flag directional-mode))
(logior! (-> a0-9 flags) (nav-state-flag target-poly-dirty))
(set! (-> a0-9 target-pos quad) (-> v1-33 quad))
)
0
(let ((gp-3 *target-controller-pad*))
(let ((a1-7 (-> self nav state)))
(set! (-> (new 'stack-no-clear 'vector) quad) (-> a1-7 velocity quad))
)
(let ((a0-12 (-> self nav state))
(s5-2 (new 'stack-no-clear 'vector))
)
(set! (-> s5-2 quad) (-> a0-12 heading quad))
(let ((f30-0 (vector-vector-xz-distance (-> self root trans) (-> self targ-pos))))
(let ((f28-0 1.0))
(setup-control-pad gp-3)
(if (< f30-0 24576.0)
(set! f28-0 (lerp-scale 0.3 1.0 f30-0 4096.0 24576.0))
)
(set-pad-world-dir gp-3 s5-2 f28-0)
)
(when (and (logtest? (-> self params flags) (player-controller-flag pc4))
(or (and (>= 1024.0 (vector-length (get-transv *target*))) (< f30-0 12288.0))
(and (< f30-0 14336.0) (focus-test? *target* board))
)
)
(send-event (handle->process (-> self params notify-proc)) 'reached-destination)
(go-virtual idle)
)
)
)
)
)
:code sleep-code
)