mirror of
https://github.com/open-goal/jak-project
synced 2026-07-01 20:20:35 -04:00
24578b64b9
* hardcode `time-frame`things * Update cam-states_REF.gc * Update level-info_REF.gc * update refs 1 * update refs 2 * update refs 3 * update refs 4 * update refs 5 * update detection and casting * Update FormExpressionAnalysis.cpp * update refs 6 * update mood decomp * update refs 7 * update refs 8 * remove temp entity birth code * update time-frame casts * fix compiler * hardcode stuff and fix some types * fix some bitfield detection being wrong * bug fixes * detect seconds on adds with immediate * update refs 9 * fix casts and rand-vu-int-range bugs (update refs 10) * update refs 11 * update 12 * update 13 * update 14 * Update game-info_REF.gc * improve cpad macros detection * remove unused code * update refs * clang * update source code * Update cam-states.gc * `lavatube-energy` finish * update refs * fix actor bank stuff * Update navigate.gc * reduce entity default stack size * Update transformq-h.gc * oops forgot these * fix code and tests * fix mood sound stuff * Update load-dgo.gc * Update README.md
655 lines
25 KiB
Common Lisp
Vendored
Generated
655 lines
25 KiB
Common Lisp
Vendored
Generated
;;-*-Lisp-*-
|
|
(in-package goal)
|
|
|
|
;; definition of type cam-point-watch-bank
|
|
(deftype cam-point-watch-bank (basic)
|
|
((speed float :offset-assert 4)
|
|
(rot-speed degrees :offset-assert 8)
|
|
)
|
|
:method-count-assert 9
|
|
:size-assert #xc
|
|
:flag-assert #x90000000c
|
|
)
|
|
|
|
;; definition for method 3 of type cam-point-watch-bank
|
|
(defmethod inspect cam-point-watch-bank ((obj cam-point-watch-bank))
|
|
(format #t "[~8x] ~A~%" obj (-> obj type))
|
|
(format #t "~Tspeed: ~f~%" (-> obj speed))
|
|
(format #t "~Trot-speed: (deg ~r)~%" (-> obj rot-speed))
|
|
obj
|
|
)
|
|
|
|
;; definition for symbol *CAM_POINT_WATCH-bank*, type cam-point-watch-bank
|
|
(define *CAM_POINT_WATCH-bank* (new 'static 'cam-point-watch-bank :speed 1600.0 :rot-speed (degrees 0.6)))
|
|
|
|
;; failed to figure out what this is:
|
|
(defstate cam-point-watch (camera-slave)
|
|
:event
|
|
(behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block))
|
|
(case arg2
|
|
(('teleport)
|
|
#f
|
|
)
|
|
(else
|
|
(cam-standard-event-handler arg0 arg1 arg2 arg3)
|
|
)
|
|
)
|
|
)
|
|
:enter
|
|
(behavior ()
|
|
(when (not (-> self enter-has-run))
|
|
(set! (-> self pivot-rad) 40960.0)
|
|
(set! (-> self blend-from-type) (the-as uint 1))
|
|
(set! (-> self blend-to-type) (the-as uint 1))
|
|
)
|
|
(none)
|
|
)
|
|
:code
|
|
(behavior ()
|
|
(while #t
|
|
(let ((s5-0 (new-stack-vector0))
|
|
(gp-0 (new-stack-vector0))
|
|
)
|
|
(when *camera-read-analog*
|
|
(let ((f28-0 (analog-input (the-as int (-> *cpad-list* cpads 0 leftx)) 128.0 48.0 110.0 -1.0))
|
|
(f30-0 (analog-input (the-as int (-> *cpad-list* cpads 0 lefty)) 128.0 48.0 110.0 -1.0))
|
|
(f26-0 (analog-input (the-as int (-> *cpad-list* cpads 0 rightx)) 128.0 48.0 110.0 -1.0))
|
|
(f0-0 (analog-input (the-as int (-> *cpad-list* cpads 0 righty)) 128.0 48.0 110.0 -1.0))
|
|
)
|
|
(cond
|
|
((cpad-hold? (-> *CAMERA-bank* joypad) r2)
|
|
(set! (-> s5-0 y) (- (-> s5-0 y) (* 0.2 (-> *CAM_POINT_WATCH-bank* rot-speed) (- f26-0))))
|
|
(set! (-> s5-0 x) (- (-> s5-0 x) (* 0.2 (-> *CAM_POINT_WATCH-bank* rot-speed) (- f0-0))))
|
|
(+! (-> gp-0 x) (* 0.2 (-> *CAM_POINT_WATCH-bank* speed) f28-0))
|
|
(+! (-> gp-0 z) (* 0.2 (-> *CAM_POINT_WATCH-bank* speed) f30-0))
|
|
)
|
|
(else
|
|
(set! (-> s5-0 y) (- (-> s5-0 y) (* 2.0 (-> *CAM_POINT_WATCH-bank* rot-speed) (- f26-0))))
|
|
(set! (-> s5-0 x) (- (-> s5-0 x) (* 2.0 (-> *CAM_POINT_WATCH-bank* rot-speed) (- f0-0))))
|
|
(+! (-> gp-0 x) (* 2.0 (-> *CAM_POINT_WATCH-bank* speed) f28-0))
|
|
(+! (-> gp-0 z) (* 2.0 (-> *CAM_POINT_WATCH-bank* speed) f30-0))
|
|
)
|
|
)
|
|
)
|
|
(let ((s4-0 (new-stack-vector0)))
|
|
(let ((s3-0 (new-stack-matrix0)))
|
|
(matrix-axis-angle! s3-0 (the-as vector (-> self tracking)) (- (-> s5-0 x)))
|
|
(vector-matrix*! s4-0 (-> self tracking inv-mat vector 2) s3-0)
|
|
(matrix-axis-angle! s3-0 (-> *camera* local-down) (- (-> s5-0 y)))
|
|
(vector-matrix*! s4-0 s4-0 s3-0)
|
|
)
|
|
(forward-down->inv-matrix (the-as matrix (-> self tracking)) s4-0 (-> *camera* local-down))
|
|
)
|
|
(set! (-> self pivot-rad) (- (-> self pivot-rad) (-> gp-0 z)))
|
|
(if (< (-> self pivot-rad) 4096.0)
|
|
(set! (-> self pivot-rad) 4096.0)
|
|
)
|
|
(set-vector! gp-0 0.0 0.0 (- (-> self pivot-rad)) 1.0)
|
|
(vector-matrix*! (-> self trans) gp-0 (the-as matrix (-> self tracking)))
|
|
)
|
|
)
|
|
(suspend)
|
|
0
|
|
)
|
|
(none)
|
|
)
|
|
)
|
|
|
|
;; definition of type cam-free-bank
|
|
(deftype cam-free-bank (basic)
|
|
((speed float :offset-assert 4)
|
|
(rot-speed degrees :offset-assert 8)
|
|
)
|
|
:method-count-assert 9
|
|
:size-assert #xc
|
|
:flag-assert #x90000000c
|
|
)
|
|
|
|
;; definition for method 3 of type cam-free-bank
|
|
(defmethod inspect cam-free-bank ((obj cam-free-bank))
|
|
(format #t "[~8x] ~A~%" obj (-> obj type))
|
|
(format #t "~Tspeed: ~f~%" (-> obj speed))
|
|
(format #t "~Trot-speed: (deg ~r)~%" (-> obj rot-speed))
|
|
obj
|
|
)
|
|
|
|
;; definition for symbol *CAM_FREE-bank*, type cam-free-bank
|
|
(define *CAM_FREE-bank* (new 'static 'cam-free-bank :speed 1600.0 :rot-speed (degrees 0.6)))
|
|
|
|
;; definition for function cam-free-floating-input
|
|
(defun cam-free-floating-input ((arg0 vector) (arg1 vector) (arg2 symbol) (arg3 int))
|
|
(when (and (!= *master-mode* 'menu) (not *cam-layout*))
|
|
(when *camera-read-buttons*
|
|
(if (cpad-hold? arg3 x)
|
|
(set! (-> arg0 x)
|
|
(- (-> arg0 x) (+ (-> *CAM_FREE-bank* rot-speed) (analog-input
|
|
(the-as int (-> *cpad-list* cpads arg3 abutton 6))
|
|
0.0
|
|
32.0
|
|
230.0
|
|
(-> *CAM_FREE-bank* rot-speed)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(when *camera-read-buttons*
|
|
(if (cpad-hold? arg3 triangle)
|
|
(+! (-> arg0 x) (+ (-> *CAM_FREE-bank* rot-speed) (analog-input
|
|
(the-as int (-> *cpad-list* cpads arg3 abutton 4))
|
|
0.0
|
|
32.0
|
|
230.0
|
|
(-> *CAM_FREE-bank* rot-speed)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(when *camera-read-buttons*
|
|
(if (cpad-hold? arg3 square)
|
|
(+! (-> arg0 y) (+ (-> *CAM_FREE-bank* rot-speed) (analog-input
|
|
(the-as int (-> *cpad-list* cpads arg3 abutton 7))
|
|
0.0
|
|
32.0
|
|
230.0
|
|
(-> *CAM_FREE-bank* rot-speed)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(when *camera-read-buttons*
|
|
(if (cpad-hold? arg3 circle)
|
|
(set! (-> arg0 y)
|
|
(- (-> arg0 y) (+ (-> *CAM_FREE-bank* rot-speed) (analog-input
|
|
(the-as int (-> *cpad-list* cpads arg3 abutton 5))
|
|
0.0
|
|
32.0
|
|
230.0
|
|
(-> *CAM_FREE-bank* rot-speed)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(when arg2
|
|
(when *camera-read-buttons*
|
|
(if (cpad-hold? arg3 l2)
|
|
(+! (-> arg0 z) (+ (-> *CAM_FREE-bank* rot-speed) (analog-input
|
|
(the-as int (-> *cpad-list* cpads arg3 abutton 10))
|
|
0.0
|
|
32.0
|
|
230.0
|
|
(-> *CAM_FREE-bank* rot-speed)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(when *camera-read-buttons*
|
|
(if (cpad-hold? arg3 r2)
|
|
(set! (-> arg0 z)
|
|
(- (-> arg0 z) (+ (-> *CAM_FREE-bank* rot-speed) (analog-input
|
|
(the-as int (-> *cpad-list* cpads arg3 abutton 11))
|
|
0.0
|
|
32.0
|
|
230.0
|
|
(-> *CAM_FREE-bank* rot-speed)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(cond
|
|
((not *cam-free-move-along-z*)
|
|
)
|
|
((not *camera-read-analog*)
|
|
)
|
|
((cpad-hold? arg3 r2)
|
|
(when *camera-read-buttons*
|
|
(if (cpad-hold? arg3 r1)
|
|
(+! (-> arg1 y) (+ (* 0.2 (-> *CAM_FREE-bank* speed)) (analog-input
|
|
(the-as int (-> *cpad-list* cpads arg3 abutton 9))
|
|
0.0
|
|
32.0
|
|
230.0
|
|
(* 0.2 (-> *CAM_FREE-bank* speed))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(when *camera-read-buttons*
|
|
(if (cpad-hold? arg3 l1)
|
|
(set! (-> arg1 y)
|
|
(- (-> arg1 y) (+ (* 0.2 (-> *CAM_FREE-bank* speed)) (analog-input
|
|
(the-as int (-> *cpad-list* cpads arg3 abutton 8))
|
|
0.0
|
|
32.0
|
|
230.0
|
|
(* 0.2 (-> *CAM_FREE-bank* speed))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(else
|
|
(when *camera-read-buttons*
|
|
(if (cpad-hold? arg3 r1)
|
|
(+! (-> arg1 y)
|
|
(+ (-> *CAM_FREE-bank* speed)
|
|
(analog-input (the-as int (-> *cpad-list* cpads arg3 abutton 9)) 0.0 32.0 230.0 (-> *CAM_FREE-bank* speed))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(when *camera-read-buttons*
|
|
(if (cpad-hold? arg3 l1)
|
|
(set! (-> arg1 y)
|
|
(- (-> arg1 y)
|
|
(+ (-> *CAM_FREE-bank* speed)
|
|
(analog-input (the-as int (-> *cpad-list* cpads arg3 abutton 8)) 0.0 32.0 230.0 (-> *CAM_FREE-bank* speed))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(when (and (!= *master-mode* 'menu) (not *cam-layout*))
|
|
(when *camera-read-buttons*
|
|
(if (cpad-hold? arg3 left)
|
|
(+! (-> arg1 x)
|
|
(+ (-> *CAM_FREE-bank* speed)
|
|
(analog-input (the-as int (-> *cpad-list* cpads arg3 abutton 1)) 0.0 32.0 230.0 (-> *CAM_FREE-bank* speed))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(when *camera-read-buttons*
|
|
(if (cpad-hold? arg3 right)
|
|
(set! (-> arg1 x)
|
|
(- (-> arg1 x)
|
|
(+ (-> *CAM_FREE-bank* speed)
|
|
(analog-input (the-as int (-> *cpad-list* cpads arg3 abutton 0)) 0.0 32.0 230.0 (-> *CAM_FREE-bank* speed))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(when *camera-read-buttons*
|
|
(if (cpad-hold? arg3 up)
|
|
(+! (-> arg1 z)
|
|
(+ (-> *CAM_FREE-bank* speed)
|
|
(analog-input (the-as int (-> *cpad-list* cpads arg3 abutton 2)) 0.0 32.0 230.0 (-> *CAM_FREE-bank* speed))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(when *camera-read-buttons*
|
|
(if (cpad-hold? arg3 down)
|
|
(set! (-> arg1 z)
|
|
(- (-> arg1 z)
|
|
(+ (-> *CAM_FREE-bank* speed)
|
|
(analog-input (the-as int (-> *cpad-list* cpads arg3 abutton 3)) 0.0 32.0 230.0 (-> *CAM_FREE-bank* speed))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(when *camera-read-analog*
|
|
(let ((f28-14 (analog-input (the-as int (-> *cpad-list* cpads arg3 leftx)) 128.0 48.0 110.0 -1.0))
|
|
(f30-14 (analog-input (the-as int (-> *cpad-list* cpads arg3 lefty)) 128.0 48.0 110.0 -1.0))
|
|
(f24-0 (analog-input (the-as int (-> *cpad-list* cpads arg3 rightx)) 128.0 48.0 110.0 -1.0))
|
|
(f26-0 (analog-input (the-as int (-> *cpad-list* cpads arg3 righty)) 128.0 48.0 110.0 -1.0))
|
|
)
|
|
(when *display-load-boundaries*
|
|
(when (and (!= arg3 1)
|
|
(zero? (logand (-> *cpad-list* cpads 1 button0-abs 0) (pad-buttons x)))
|
|
(zero? (logand (-> *cpad-list* cpads 1 button0-abs 0) (pad-buttons r1)))
|
|
(zero? (logand (-> *cpad-list* cpads 1 button0-abs 0) (pad-buttons r2)))
|
|
)
|
|
(+! f28-14 (analog-input (the-as int (-> *cpad-list* cpads 1 leftx)) 128.0 48.0 110.0 -1.0))
|
|
(+! f30-14 (analog-input (the-as int (-> *cpad-list* cpads 1 lefty)) 128.0 48.0 110.0 -1.0))
|
|
(+! f24-0 (analog-input (the-as int (-> *cpad-list* cpads 1 rightx)) 128.0 48.0 110.0 -1.0))
|
|
(+! f26-0 (analog-input (the-as int (-> *cpad-list* cpads 1 righty)) 128.0 48.0 110.0 -1.0))
|
|
)
|
|
)
|
|
(cond
|
|
((cpad-hold? arg3 r2)
|
|
(cond
|
|
((cpad-hold? arg3 l2)
|
|
(set! (-> arg0 y) (- (-> arg0 y) (* 0.5 (-> *CAM_FREE-bank* rot-speed) (- f24-0))))
|
|
(set! (-> arg0 x) (- (-> arg0 x) (* 0.5 (-> *CAM_FREE-bank* rot-speed) (- f26-0))))
|
|
)
|
|
(else
|
|
(set! (-> arg0 y) (- (-> arg0 y) (* (- f24-0) (-> *CAM_FREE-bank* rot-speed))))
|
|
(set! (-> arg0 x) (- (-> arg0 x) (* (- f26-0) (-> *CAM_FREE-bank* rot-speed))))
|
|
)
|
|
)
|
|
(+! (-> arg1 x) (* 0.2 (-> *CAM_FREE-bank* speed) f28-14))
|
|
(+! (-> arg1 z) (* 0.2 (-> *CAM_FREE-bank* speed) f30-14))
|
|
)
|
|
((cpad-hold? arg3 l2)
|
|
(+! (-> arg1 x) (* f28-14 (-> *CAM_FREE-bank* speed)))
|
|
(+! (-> arg1 y) (* f26-0 (-> *CAM_FREE-bank* speed)))
|
|
(+! (-> arg1 z) (* f30-14 (-> *CAM_FREE-bank* speed)))
|
|
)
|
|
(else
|
|
(set! (-> arg0 y) (- (-> arg0 y) (* 2.0 (-> *CAM_FREE-bank* rot-speed) (- f24-0))))
|
|
(set! (-> arg0 x) (- (-> arg0 x) (* 2.0 (-> *CAM_FREE-bank* rot-speed) (- f26-0))))
|
|
(+! (-> arg1 x) (* 2.0 (-> *CAM_FREE-bank* speed) f28-14))
|
|
(+! (-> arg1 z) (* 2.0 (-> *CAM_FREE-bank* speed) f30-14))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(vector-float*! arg0 arg0 (-> *display* time-adjust-ratio))
|
|
(vector-float*! arg1 arg1 (-> *display* time-adjust-ratio))
|
|
)
|
|
|
|
;; definition of type camera-free-floating-move-info
|
|
(deftype camera-free-floating-move-info (structure)
|
|
((rv vector :inline :offset-assert 0)
|
|
(tv vector :inline :offset-assert 16)
|
|
(up vector :inline :offset-assert 32)
|
|
(tm matrix :inline :offset-assert 48)
|
|
)
|
|
:method-count-assert 9
|
|
:size-assert #x70
|
|
:flag-assert #x900000070
|
|
)
|
|
|
|
;; definition for method 3 of type camera-free-floating-move-info
|
|
(defmethod inspect camera-free-floating-move-info ((obj camera-free-floating-move-info))
|
|
(format #t "[~8x] ~A~%" obj 'camera-free-floating-move-info)
|
|
(format #t "~Trv: #<vector @ #x~X>~%" (-> obj rv))
|
|
(format #t "~Ttv: #<vector @ #x~X>~%" (-> obj tv))
|
|
(format #t "~Tup: #<vector @ #x~X>~%" (-> obj up))
|
|
(format #t "~Ttm: #<matrix @ #x~X>~%" (-> obj tm))
|
|
obj
|
|
)
|
|
|
|
;; definition for function cam-free-floating-move
|
|
(defun cam-free-floating-move ((arg0 matrix) (arg1 vector) (arg2 vector) (arg3 int))
|
|
(if (logtest? (-> *cpad-list* cpads arg3 valid) 128)
|
|
(return (the-as vector #f))
|
|
)
|
|
(if (= *master-mode* 'menu)
|
|
(return (the-as vector #f))
|
|
)
|
|
(let ((s3-0 (new 'stack 'camera-free-floating-move-info)))
|
|
(cam-free-floating-input (-> s3-0 rv) (-> s3-0 tv) (not arg2) arg3)
|
|
(cond
|
|
(arg2
|
|
(matrix-axis-angle! (-> s3-0 tm) arg2 (-> s3-0 rv y))
|
|
(matrix*! arg0 arg0 (-> s3-0 tm))
|
|
(cond
|
|
((< (vector-dot (-> arg0 vector 1) arg2) 0.0)
|
|
(forward-down->inv-matrix arg0 (-> arg0 vector 2) arg2)
|
|
)
|
|
(else
|
|
(vector-negate! (-> s3-0 up) arg2)
|
|
(forward-down->inv-matrix arg0 (-> arg0 vector 2) (-> s3-0 up))
|
|
)
|
|
)
|
|
)
|
|
(else
|
|
(matrix-axis-angle! (-> s3-0 tm) (-> arg0 vector 1) (- (-> s3-0 rv y)))
|
|
(matrix*! arg0 arg0 (-> s3-0 tm))
|
|
)
|
|
)
|
|
(matrix-axis-angle! (-> s3-0 tm) (the-as vector (-> arg0 vector)) (- (-> s3-0 rv x)))
|
|
(matrix*! arg0 arg0 (-> s3-0 tm))
|
|
(matrix-axis-angle! (-> s3-0 tm) (-> arg0 vector 2) (- (-> s3-0 rv z)))
|
|
(matrix*! arg0 arg0 (-> s3-0 tm))
|
|
(vector-matrix*! (-> s3-0 tv) (-> s3-0 tv) arg0)
|
|
(vector+! arg1 arg1 (-> s3-0 tv))
|
|
)
|
|
)
|
|
|
|
;; failed to figure out what this is:
|
|
(defstate cam-free-floating (camera-slave)
|
|
:event
|
|
(behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block))
|
|
(case arg2
|
|
(('teleport)
|
|
#f
|
|
)
|
|
(else
|
|
(cam-standard-event-handler arg0 arg1 arg2 arg3)
|
|
)
|
|
)
|
|
)
|
|
:enter
|
|
(behavior ()
|
|
(when (not (-> self enter-has-run))
|
|
(set! (-> self blend-from-type) (the-as uint 1))
|
|
(set! (-> self blend-to-type) (the-as uint 1))
|
|
(send-event *camera-combiner* 'stop-tracking)
|
|
)
|
|
(none)
|
|
)
|
|
:code
|
|
(behavior ()
|
|
(while #t
|
|
(let ((a2-0 (-> *camera* local-down)))
|
|
(if (logtest? (-> self options) 8)
|
|
(set! a2-0 (the-as vector #f))
|
|
)
|
|
(cam-free-floating-move
|
|
(the-as matrix (-> self tracking))
|
|
(-> self trans)
|
|
a2-0
|
|
(the-as int (-> *CAMERA-bank* joypad))
|
|
)
|
|
)
|
|
(suspend)
|
|
)
|
|
(none)
|
|
)
|
|
)
|
|
|
|
;; definition of type camera-orbit-info
|
|
(deftype camera-orbit-info (structure)
|
|
((radius float :offset-assert 0)
|
|
(rot float :offset-assert 4)
|
|
(target-off vector :inline :offset-assert 16)
|
|
(orbit-off vector :inline :offset-assert 32)
|
|
(radius-lerp float :offset-assert 48)
|
|
)
|
|
:method-count-assert 9
|
|
:size-assert #x34
|
|
:flag-assert #x900000034
|
|
)
|
|
|
|
;; definition for method 3 of type camera-orbit-info
|
|
(defmethod inspect camera-orbit-info ((obj camera-orbit-info))
|
|
(format #t "[~8x] ~A~%" obj 'camera-orbit-info)
|
|
(format #t "~Tradius: ~f~%" (-> obj radius))
|
|
(format #t "~Trot: ~f~%" (-> obj rot))
|
|
(format #t "~Ttarget-off: #<vector @ #x~X>~%" (-> obj target-off))
|
|
(format #t "~Torbit-off: #<vector @ #x~X>~%" (-> obj orbit-off))
|
|
(format #t "~Tradius-lerp: ~f~%" (-> obj radius-lerp))
|
|
obj
|
|
)
|
|
|
|
;; definition of type CAM_ORBIT-bank
|
|
(deftype CAM_ORBIT-bank (basic)
|
|
((RADIUS_MAX float :offset-assert 4)
|
|
(RADIUS_MIN float :offset-assert 8)
|
|
(TARGET_OFF_ADJUST float :offset-assert 12)
|
|
(ORBIT_OFF_ADJUST float :offset-assert 16)
|
|
)
|
|
:method-count-assert 9
|
|
:size-assert #x14
|
|
:flag-assert #x900000014
|
|
)
|
|
|
|
;; definition for method 3 of type CAM_ORBIT-bank
|
|
(defmethod inspect CAM_ORBIT-bank ((obj CAM_ORBIT-bank))
|
|
(format #t "[~8x] ~A~%" obj (-> obj type))
|
|
(format #t "~TRADIUS_MAX: ~f~%" (-> obj RADIUS_MAX))
|
|
(format #t "~TRADIUS_MIN: ~f~%" (-> obj RADIUS_MIN))
|
|
(format #t "~TTARGET_OFF_ADJUST: ~f~%" (-> obj TARGET_OFF_ADJUST))
|
|
(format #t "~TORBIT_OFF_ADJUST: ~f~%" (-> obj ORBIT_OFF_ADJUST))
|
|
obj
|
|
)
|
|
|
|
;; definition for symbol *CAM_ORBIT-bank*, type CAM_ORBIT-bank
|
|
(define *CAM_ORBIT-bank* (new 'static 'CAM_ORBIT-bank
|
|
:RADIUS_MAX 61440.0
|
|
:RADIUS_MIN 409.6
|
|
:TARGET_OFF_ADJUST 81.92
|
|
:ORBIT_OFF_ADJUST 81.92
|
|
)
|
|
)
|
|
|
|
;; definition for symbol *camera-orbit-info*, type camera-orbit-info
|
|
(define *camera-orbit-info* (new 'static 'camera-orbit-info))
|
|
|
|
;; failed to figure out what this is:
|
|
(set! (-> *camera-orbit-info* radius-lerp) 0.45)
|
|
|
|
;; failed to figure out what this is:
|
|
(set! (-> *camera-orbit-info* target-off y) 4096.0)
|
|
|
|
;; failed to figure out what this is:
|
|
(set! (-> *camera-orbit-info* orbit-off y) 4096.0)
|
|
|
|
;; failed to figure out what this is:
|
|
(defstate cam-orbit (camera-slave)
|
|
:event
|
|
(behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block))
|
|
(case arg2
|
|
(('teleport)
|
|
#f
|
|
)
|
|
(else
|
|
(cam-standard-event-handler arg0 arg1 arg2 arg3)
|
|
)
|
|
)
|
|
)
|
|
:enter
|
|
(behavior ()
|
|
(when (not (-> self enter-has-run))
|
|
(if (not *camera-orbit-target*)
|
|
(cam-slave-go cam-free-floating)
|
|
)
|
|
(let ((v1-4 (new-stack-vector0)))
|
|
(vector-! v1-4 (-> self trans) (-> *camera-orbit-target* 0 root trans))
|
|
(set! (-> *camera-orbit-info* rot) (atan (-> v1-4 x) (-> v1-4 z)))
|
|
)
|
|
(set! (-> self blend-from-type) (the-as uint 1))
|
|
(set! (-> self blend-to-type) (the-as uint 1))
|
|
)
|
|
(none)
|
|
)
|
|
:exit
|
|
(behavior ()
|
|
'()
|
|
(none)
|
|
)
|
|
:code
|
|
(behavior ()
|
|
(while #t
|
|
(if (not *camera-orbit-target*)
|
|
(cam-slave-go cam-free-floating)
|
|
)
|
|
(when *camera-read-analog*
|
|
(let ((f0-0 (analog-input (the-as int (-> *cpad-list* cpads 0 righty)) 128.0 32.0 110.0 0.05)))
|
|
(cond
|
|
((< (* 0.05 (- 1.0 (-> *camera-orbit-info* radius-lerp))) f0-0)
|
|
(+! (-> *camera-orbit-info* radius-lerp) (* 0.05 (- 1.0 (-> *camera-orbit-info* radius-lerp))))
|
|
)
|
|
((< f0-0 (* 0.05 (- (-> *camera-orbit-info* radius-lerp))))
|
|
(+! (-> *camera-orbit-info* radius-lerp) (* 0.05 (- (-> *camera-orbit-info* radius-lerp))))
|
|
)
|
|
(else
|
|
(+! (-> *camera-orbit-info* radius-lerp) f0-0)
|
|
)
|
|
)
|
|
)
|
|
(set! (-> *camera-orbit-info* radius)
|
|
(lerp (-> *CAM_ORBIT-bank* RADIUS_MIN) (-> *CAM_ORBIT-bank* RADIUS_MAX) (-> *camera-orbit-info* radius-lerp))
|
|
)
|
|
)
|
|
(cond
|
|
((cpad-hold? 0 l2)
|
|
(if (cpad-hold? 0 l1)
|
|
(set! (-> *camera-orbit-info* target-off y)
|
|
(- (-> *camera-orbit-info* target-off y) (-> *CAM_ORBIT-bank* TARGET_OFF_ADJUST))
|
|
)
|
|
)
|
|
(if (cpad-hold? 0 r1)
|
|
(+! (-> *camera-orbit-info* target-off y) (-> *CAM_ORBIT-bank* TARGET_OFF_ADJUST))
|
|
)
|
|
)
|
|
(else
|
|
(if (cpad-hold? 0 l1)
|
|
(set! (-> *camera-orbit-info* orbit-off y)
|
|
(- (-> *camera-orbit-info* orbit-off y) (-> *CAM_ORBIT-bank* ORBIT_OFF_ADJUST))
|
|
)
|
|
)
|
|
(if (cpad-hold? 0 r1)
|
|
(+! (-> *camera-orbit-info* orbit-off y) (-> *CAM_ORBIT-bank* ORBIT_OFF_ADJUST))
|
|
)
|
|
)
|
|
)
|
|
(when *camera-read-analog*
|
|
(let ((f0-20
|
|
(analog-input
|
|
(the-as int (-> *cpad-list* cpads 0 rightx))
|
|
128.0
|
|
32.0
|
|
110.0
|
|
(* 21845.334 (-> *display* seconds-per-frame))
|
|
)
|
|
)
|
|
)
|
|
(set! (-> *camera-orbit-info* rot)
|
|
(the float (sar (shl (the int (+ (-> *camera-orbit-info* rot) f0-20)) 48) 48))
|
|
)
|
|
)
|
|
)
|
|
(let ((gp-0 (new-stack-vector0)))
|
|
(let ((s5-0 (new-stack-vector0)))
|
|
(set-vector!
|
|
(-> self trans)
|
|
(+ (-> *camera-orbit-target* 0 root trans x)
|
|
(* (sin (-> *camera-orbit-info* rot)) (-> *camera-orbit-info* radius))
|
|
)
|
|
(-> *camera-orbit-target* 0 root trans y)
|
|
(+ (-> *camera-orbit-target* 0 root trans z)
|
|
(* (cos (-> *camera-orbit-info* rot)) (-> *camera-orbit-info* radius))
|
|
)
|
|
1.0
|
|
)
|
|
(vector+! (-> self trans) (-> self trans) (-> *camera-orbit-info* orbit-off))
|
|
(vector+!
|
|
(-> self tracking follow-pt)
|
|
(-> *camera-orbit-target* 0 root trans)
|
|
(-> *camera-orbit-info* target-off)
|
|
)
|
|
(vector-! s5-0 (-> self trans) (-> self tracking follow-pt))
|
|
(set! (-> gp-0 y) (the float (sar (shl (the int (+ 32768.0 (atan (-> s5-0 x) (-> s5-0 z)))) 48) 48)))
|
|
(set! (-> gp-0 x) (atan (-> s5-0 y) (vector-xz-length s5-0)))
|
|
)
|
|
(set! (-> gp-0 z) 0.0)
|
|
(matrix-rotate-zxy! (the-as matrix (-> self tracking)) gp-0)
|
|
)
|
|
(suspend)
|
|
)
|
|
(none)
|
|
)
|
|
)
|