Files
jak-project/goal_src/jak3/engine/debug/bug-report.gc
T
Hat Kid 93afb02cf4 decomp3: spawn target, add merc and particle buckets and some temporary hacks (#3445)
This includes all the collision stuff needed to spawn `target`,
decompiles the sparticle code and adds some of the PC hacks needed for
merc to run (it doesn't work quite right and looks bad, likely due to a
combination of code copied from Jak 2 and the time of day hacks).

There are a bunch of temporary hacks (see commits) in place to prevent
the game from crashing quite as much, but it is still extremely prone to
doing so due to lots of missing functions/potentially bad decomp.

---------

Co-authored-by: water <awaterford111445@gmail.com>
2024-04-05 00:07:39 -04:00

388 lines
13 KiB
Common Lisp

;;-*-Lisp-*-
(in-package goal)
;; name: bug-report.gc
;; name in dgo: bug-report
;; dgos: GAME
(declare-type bug-report process)
(define-extern *bug-report* (pointer bug-report))
;; DECOMP BEGINS
;; og:preserve-this this file was manually rewritten
(declare-file (debug))
(define *continue-bug-report*
(new 'static 'continue-point
:name "wasall-start"
:level #f
:flags (continue-flags continue-flag-16)
:trans (new 'static 'vector :x 9283373.0 :y 126422.22 :z 1057314.9 :w 1.0)
:camera-trans (new 'static 'vector :x 9272728.0 :y 147014.05 :z 1009150.4 :w 1.0)
:quat (new 'static 'vector4h :data (new 'static 'array int16 4 -36 #x5dfc 22 #x56de))
:camera-rot (new 'static 'array int16 9 #x796a 0 -10364 #x4b5 #x7f20 #xe21 #x2834 -3810 #x7899)
:on-goto #f
:vis-nick 'wasall
:vehicle-type #x1b
:want-count 4
:want (new 'static 'inline-array level-buffer-state-small 4
(new 'static 'level-buffer-state-small :name 'wasall :display? 'special)
(new 'static 'level-buffer-state-small :name 'desert-game :display? 'display)
(new 'static 'level-buffer-state-small :name 'wasdoors :display? 'display)
(new 'static 'level-buffer-state-small :name 'desertb :display? 'display)
)
:want-sound (new 'static 'array symbol 3 'wasall1 'desert1 'desert2)
)
)
(deftype bug-report (process)
((bug-number uint32 5)
(digit uint32)
(state-time time-frame)
(next-down time-frame)
)
(:state-methods
idle
)
(:methods
(bug-report-method-15 (_type_) none)
(bug-report-method-16 (_type_) none)
)
)
(define *bug-report* (the (pointer bug-report) #f))
(defmethod inspect ((this bug-report))
(call-parent-method this)
(format #t "~2Tbug-number[5] @ #x~X~%" (-> this bug-number))
(dotimes (i 5)
(format #t "~T [~D]~2Tbug-number: ~D~%" i (-> this bug-number i))
)
(format #t "~2Tdigit: ~D~%" (-> this digit))
(format #t "~2Tstate-time: ~D~%" (-> this state-time))
(format #t "~2Tnext-down: ~D~%" (-> this next-down))
this
)
(defmethod deactivate ((this bug-report))
"Make a process dead, clean it up, remove it from the active pool, and return to dead pool."
(set! *bug-report* (the (pointer bug-report) #f))
(call-parent-method this)
)
(defbehavior bug-report-init bug-report ()
(set! *bug-report* (the (pointer bug-report) (process->ppointer self)))
(set! (-> self bug-number 0) (the-as uint 0))
(set! (-> self bug-number 1) (the-as uint 0))
(set! (-> self bug-number 2) (the-as uint 0))
(set! (-> self bug-number 3) (the-as uint 0))
(set! (-> self bug-number 4) (the-as uint 0))
(set! (-> self digit) (the-as uint 0))
(set! (-> self next-down) 0)
(go-virtual idle)
)
(defun bug-report-stop ()
(kill-by-type bug-report *active-pool*)
(none)
)
(defun bug-report-start ()
(bug-report-stop)
(process-spawn bug-report :init bug-report-init :name "bug-report")
(none)
)
(defstate idle (bug-report)
:virtual #t
:enter (behavior () (set-time! (-> self state-time)))
:code sleep-code
:trans (behavior ()
(when (cpad-hold? 0 l2)
(when (>= (- (current-time) (-> self next-down)) 0)
(when (cpad-hold? 0 left)
(set! (-> self next-down) (+ (current-time) (seconds 0.2)))
(if (zero? (-> self digit))
(set! (-> self digit) (the-as uint 4))
(+! (-> self digit) -1)
)
)
(when (cpad-hold? 0 right)
(set! (-> self next-down) (+ (current-time) (seconds 0.2)))
(cond
((= (-> self digit) 4)
(set! (-> self digit) (the-as uint 0))
0
)
(else
(+! (-> self digit) 1)
)
)
)
(when (cpad-hold? 0 up)
(set! (-> self next-down) (+ (current-time) (seconds 0.2)))
(cond
((= (-> self bug-number (-> self digit)) 9)
(set! (-> self bug-number (-> self digit)) (the-as uint 0))
0
)
(else
(+! (-> self bug-number (-> self digit)) 1)
)
)
)
(when (cpad-hold? 0 down)
(set! (-> self next-down) (+ (current-time) (seconds 0.2)))
(if (zero? (-> self bug-number (-> self digit)))
(set! (-> self bug-number (-> self digit)) (the-as uint 9))
(+! (-> self bug-number (-> self digit)) -1)
)
)
)
(if (cpad-pressed? 0 x)
(bug-report-method-16 self)
)
0
)
(with-dma-buffer-add-bucket ((s5-0 (-> *display* frames (-> *display* on-screen) debug-buf))
(bucket-id hud-draw-hud-alpha)
)
(draw-string-xy "Use L2 + X to Load" s5-0 32 80 (font-color white) (font-flags kerning))
(draw-string-xy "Use L2 + D-Pad to change bug number" s5-0 32 112 (font-color white) (font-flags kerning))
(dotimes (s4-0 5)
(let ((s3-0 (clear *temp-string*)))
(format s3-0 "~1,'0D" (-> self bug-number s4-0))
(draw-string-xy
s3-0
s5-0
(+ (* 24 s4-0) 32)
132
(if (= (-> self digit) s4-0)
(font-color red)
(font-color yellow)
)
(font-flags kerning large)
)
)
)
)
)
)
(defmethod bug-report-method-15 ((this bug-report))
(if (not *target*)
(return #f)
)
(let ((a0-1 (-> *target* control))
(s5-0 *continue-bug-report*)
)
(set! (-> s5-0 trans quad) (-> a0-1 trans quad))
(set-vector!
(-> s5-0 quat)
(the int (* 32767.0 (-> a0-1 quat x)))
(the int (* 32767.0 (-> a0-1 quat y)))
(the int (* 32767.0 (-> a0-1 quat z)))
(the int (* 32767.0 (-> a0-1 quat w)))
)
(let ((v1-6 *math-camera*))
(set! (-> s5-0 camera-trans quad) (-> v1-6 trans quad))
(set! (-> s5-0 camera-rot 0) (the int (* 32767.0 (-> v1-6 inv-camera-rot rvec x))))
(set! (-> s5-0 camera-rot 1) (the int (* 32767.0 (-> v1-6 inv-camera-rot rvec y))))
(set! (-> s5-0 camera-rot 2) (the int (* 32767.0 (-> v1-6 inv-camera-rot rvec z))))
(set! (-> s5-0 camera-rot 3) (the int (* 32767.0 (-> v1-6 inv-camera-rot uvec x))))
(set! (-> s5-0 camera-rot 4) (the int (* 32767.0 (-> v1-6 inv-camera-rot uvec y))))
(set! (-> s5-0 camera-rot 5) (the int (* 32767.0 (-> v1-6 inv-camera-rot uvec z))))
(set! (-> s5-0 camera-rot 6) (the int (* 32767.0 (-> v1-6 inv-camera-rot fvec x))))
(set! (-> s5-0 camera-rot 7) (the int (* 32767.0 (-> v1-6 inv-camera-rot fvec y))))
(set! (-> s5-0 camera-rot 8) (the int (* 32767.0 (-> v1-6 inv-camera-rot fvec z))))
)
(dotimes (s4-0 4)
(let ((v1-10 (lookup-level-info (-> *load-state* want s4-0 name))))
(cond
((and v1-10 (!= (-> v1-10 memory-mode) 10))
(set! (-> s5-0 want s4-0 name) (-> *load-state* want s4-0 name))
(set! (-> s5-0 want s4-0 display?) (-> *load-state* want s4-0 display?))
)
(else
(set! (-> s5-0 want s4-0 name) #f)
(set! (-> s5-0 want s4-0 display?) #f)
)
)
)
)
)
(format
(clear *temp-string*)
"db/bug-report/bug-report-~D~D~D~D~D.txt"
(-> this bug-number 0)
(-> this bug-number 1)
(-> this bug-number 2)
(-> this bug-number 3)
(-> this bug-number 4)
)
*temp-string*
(let ((gp-1 (new 'stack 'file-stream *temp-string* 'write)))
(let ((s5-2 format)
(s4-1 gp-1)
(s3-0 "nick ~S~%")
(v1-29 (lookup-level-info (-> *load-state* vis-nick)))
)
(s5-2 s4-1 s3-0 (if v1-29
(-> v1-29 name)
)
)
)
(let ((t9-6 format)
(a0-37 gp-1)
(a1-16 "continue ~S~%")
(v1-31 (-> *game-info* current-continue))
)
(t9-6 a0-37 a1-16 (if v1-31
(-> v1-31 name)
)
)
)
(dotimes (s5-3 10)
(format gp-1 "level ~D ~A ~A~%" s5-3 (-> *load-state* want s5-3 name) (-> *load-state* want s5-3 display?))
)
(format gp-1 "music ~-8S~%" (-> *setting-control* user-current music))
(dotimes (s5-4 6)
(format gp-1 "sound ~D ~-8S~%" s5-4 (-> *level* sound-bank s5-4 name))
)
(let ((v1-43 (target-pos 0)))
(format gp-1 "target ~f ~f ~f~%" (-> v1-43 x) (-> v1-43 y) (-> v1-43 z))
)
(let ((s5-5 *math-camera*))
(format gp-1 "camera-trans ~f ~f ~f~%" (-> s5-5 trans x) (-> s5-5 trans y) (-> s5-5 trans z))
(format
gp-1
"camera-rot ~f ~f ~f "
(-> s5-5 inv-camera-rot rvec x)
(-> s5-5 inv-camera-rot rvec y)
(-> s5-5 inv-camera-rot rvec z)
)
(format
gp-1
"~f ~f ~f "
(-> s5-5 inv-camera-rot uvec x)
(-> s5-5 inv-camera-rot uvec y)
(-> s5-5 inv-camera-rot uvec z)
)
(format
gp-1
"~f ~f ~f~%"
(-> s5-5 inv-camera-rot fvec x)
(-> s5-5 inv-camera-rot fvec y)
(-> s5-5 inv-camera-rot fvec z)
)
)
(let ((s5-6 (-> *game-info* sub-task-list)))
(dotimes (s4-2 (-> s5-6 length))
(when (nonzero? s4-2)
(let ((s3-1 (-> s5-6 s4-2)))
(if (game-task-node-info-method-12 s3-1)
(format gp-1 "open-node ~s~%" (-> s3-1 name))
)
)
)
)
)
(file-stream-close gp-1)
(file-stream-close gp-1)
)
(none)
)
(defmethod bug-report-method-16 ((this bug-report))
(local-vars
(sv-128 string)
(sv-132 string)
(sv-136 continue-point)
(sv-140 int)
(sv-144 vector)
(sv-148 vector)
)
(format
(clear *temp-string*)
"db/bug-report/bug-report-~D~D~D~D~D.txt"
(-> this bug-number 0)
(-> this bug-number 1)
(-> this bug-number 2)
(-> this bug-number 3)
(-> this bug-number 4)
)
*temp-string*
(let ((gp-1 (new 'stack 'file-stream *temp-string* 'read)))
(when (zero? (-> gp-1 file))
(set! sv-128 (new 'debug 'string 1024 (the-as string #f)))
(set! sv-132 (new 'debug 'string 64 (the-as string #f)))
(set! sv-136 *continue-bug-report*)
(set! sv-140 0)
(set! sv-144 (new 'stack-no-clear 'vector))
(set! sv-148 (new 'stack-no-clear 'vector))
(file-stream-read-string gp-1 sv-128)
(while (string-get-arg!! sv-132 sv-128)
(cond
((string= "nick" sv-132)
(string-get-arg!! sv-132 sv-128)
)
((string= "continue" sv-132)
(string-get-arg!! sv-132 sv-128)
)
((string= "level" sv-132)
(string-get-int32!! (the-as (pointer int32) (& sv-140)) sv-128)
(string-get-arg!! sv-132 sv-128)
(set! (-> sv-136 want sv-140 name) (string->symbol sv-132))
(string-get-arg!! sv-132 sv-128)
(set! (-> sv-136 want sv-140 display?) (string->symbol sv-132))
)
((string= "music" sv-132)
(string-get-arg!! sv-132 sv-128)
)
((string= "target" sv-132)
(string-get-float!! (the-as (pointer float) (-> sv-136 trans)) sv-128)
(string-get-float!! (&-> sv-136 trans y) sv-128)
(string-get-float!! (&-> sv-136 trans z) sv-128)
)
((string= "camera-trans" sv-132)
(string-get-float!! (the-as (pointer float) (-> sv-136 camera-trans)) sv-128)
(string-get-float!! (&-> sv-136 camera-trans y) sv-128)
(string-get-float!! (&-> sv-136 camera-trans z) sv-128)
)
((string= "camera-rot" sv-132)
(let ((s5-1 (new 'stack-no-clear 'array 'float 9)))
(string-get-float!! (&-> s5-1 0) sv-128)
(string-get-float!! (&-> s5-1 1) sv-128)
(string-get-float!! (&-> s5-1 2) sv-128)
(string-get-float!! (&-> s5-1 3) sv-128)
(string-get-float!! (&-> s5-1 4) sv-128)
(string-get-float!! (&-> s5-1 5) sv-128)
(string-get-float!! (&-> s5-1 6) sv-128)
(string-get-float!! (&-> s5-1 7) sv-128)
(string-get-float!! (&-> s5-1 8) sv-128)
(dotimes (v1-34 9)
(set! (-> sv-136 camera-rot v1-34) (the int (* 32767.0 (-> s5-1 v1-34))))
)
)
)
((string= "open-node" sv-132)
(string-get-arg!! sv-132 sv-128)
(let ((a0-48 (task-node-index-by-name sv-132)))
(if a0-48
(task-node-open! (the-as game-task-node a0-48) 'menu)
)
)
)
)
)
(file-stream-close gp-1)
(stop 'debug)
(start 'debug *continue-bug-report*)
)
(file-stream-close gp-1)
)
(none)
)