[decompiler] as-type and font method support (#3855)

Add support for `as-type` macro, and detecting inline font methods. This
works in all three games but I've only updated jak 3's goal_src for now.
Eventually I will go back and work through the others, but I want to get
more decompiler features in first.


![image](https://github.com/user-attachments/assets/5c31bf85-97b4-437c-bc4b-dc054e60551e)

---------

Co-authored-by: water111 <awaterford1111445@gmail.com>
This commit is contained in:
water111
2025-02-01 21:23:11 -05:00
committed by GitHub
parent d5590ab638
commit 48cb9bb787
645 changed files with 5391 additions and 16694 deletions
+10 -42
View File
@@ -498,13 +498,9 @@
(sound-play-by-spec (static-sound-spec "beep" :fo-curve 1) (new-sound-id) (the-as vector #t))
(cond
((-> arg0 target)
(let ((s5-11 (-> arg0 target)))
(set! (-> arg0 edit-plane) (the-as editable-plane (if (type? s5-11 editable-plane)
s5-11
)
)
)
)
(set! (-> arg0 edit-plane)
(the-as editable-plane (the-as editable (as-type (-> arg0 target) editable-plane)))
)
(editable-array-method-16 arg0)
)
(else
@@ -1709,11 +1705,7 @@
)
(while (< s4-2 s5-2)
(when (and s3-0 (logtest? (-> s3-0 flags) (editable-flag selected)))
(let ((v1-60 (if (type? s3-0 editable)
s3-0
)
)
)
(let ((v1-60 (as-type s3-0 editable)))
(when v1-60
(set! (-> v1-60 name) (the-as string (-> block param 0)))
(logior! (-> v1-60 flags) (editable-flag changed))
@@ -1740,11 +1732,7 @@
)
(while (< s4-3 s5-3)
(when (and s3-1 (logtest? (-> s3-1 flags) (editable-flag selected)))
(let ((v1-73 (if (type? s3-1 editable)
s3-1
)
)
)
(let ((v1-73 (as-type s3-1 editable)))
(when (and v1-73 (-> v1-73 region))
(set! (-> v1-73 region level) (the-as string (-> gp-3 dbname)))
(set! (-> v1-73 region changed) #t)
@@ -1777,11 +1765,7 @@
)
(while (< s5-4 gp-4)
(when (and s4-4 (logtest? (-> s4-4 flags) (editable-flag selected)))
(let ((s3-2 (if (type? s4-4 editable-light)
(the-as editable-light s4-4)
)
)
)
(let ((s3-2 (as-type s4-4 editable-light)))
(when s3-2
(set-vector! (-> s3-2 direction) f30-0 f28-0 f26-0 f24-0)
(vector-normalize! (-> s3-2 direction) 1.0)
@@ -1811,11 +1795,7 @@
)
(while (< s5-5 gp-5)
(when (and s4-5 (logtest? (-> s4-5 flags) (editable-flag selected)))
(let ((v1-114 (if (type? s4-5 editable-light)
(the-as editable-light s4-5)
)
)
)
(let ((v1-114 (as-type s4-5 editable-light)))
(when v1-114
(set-vector! (-> v1-114 color) f30-1 f28-1 f26-1 f24-1)
(logior! (-> v1-114 flags) (editable-flag changed))
@@ -1844,11 +1824,7 @@
)
(while (< s4-6 gp-6)
(when (and s3-3 (logtest? (-> s3-3 flags) (editable-flag selected)))
(let ((v1-129 (if (type? s3-3 editable-light)
s3-3
)
)
)
(let ((v1-129 (the-as editable (as-type s3-3 editable-light))))
(when v1-129
(set! (-> (the-as editable-light (+ (* s5-6 4) (the-as uint v1-129))) decay-start) f30-2)
(logior! (-> v1-129 flags) (editable-flag changed))
@@ -2253,11 +2229,7 @@
)
(while (< s3-0 s4-0)
(when (and s2-0 (logtest? (-> s2-0 flags) (editable-flag selected)))
(let ((a0-7 (if (type? s2-0 editable-light)
s2-0
)
)
)
(let ((a0-7 (the-as object (as-type s2-0 editable-light))))
(when (the-as editable a0-7)
(set! (-> (&+ (the-as (pointer float) a0-7) (/ arg0 8)) 0) arg2)
(logior! (-> (the-as editable a0-7) flags) (editable-flag changed))
@@ -2284,11 +2256,7 @@
)
(while (< s4-1 s5-1)
(when (and s3-1 (logtest? (-> s3-1 flags) (editable-flag selected)))
(let ((v1-29 (if (type? s3-1 editable-light)
s3-1
)
)
)
(let ((v1-29 (the-as object (as-type s3-1 editable-light))))
(if (the-as editable v1-29)
(set! f30-0 (-> (&+ (the-as (pointer float) v1-29) (/ arg0 8)) 0))
)
+2 -14
View File
@@ -1027,13 +1027,7 @@
(draw-string "..." s1-0 s5-0)
(set! arg4 (and (zero? arg3) arg4))
(when arg4
(let ((v1-14 s5-0)
(a1-5 20)
(a0-8 379)
)
(set! (-> v1-14 origin x) (the float a1-5))
(set! (-> v1-14 origin y) (the float a0-8))
)
(set-origin! s5-0 20 379)
(draw-string-adv (-> arg0 name) s1-0 s5-0)
(draw-string-adv ":" s1-0 s5-0)
(draw-string (-> arg0 display-str) s1-0 s5-0)
@@ -1113,13 +1107,7 @@
(font-color menu)
)
)
(let ((v1-20 (-> arg0 context font))
(a1-5 s3-1)
(a0-15 s2-1)
)
(set! (-> v1-20 origin x) (the float a1-5))
(set! (-> v1-20 origin y) (the float a0-15))
)
(set-origin! (-> arg0 context font) s3-1 s2-1)
(set! sv-16 (-> *display* frames (-> *display* on-screen) debug-buf))
(set! sv-32 (-> sv-16 base))
(draw-string ">" sv-16 (-> arg0 context font))
+2 -10
View File
@@ -257,12 +257,7 @@
(dotimes (s2-0 (-> s3-0 length))
(let ((s1-0 (-> s3-0 s2-0)))
(-> s1-0 aid)
(let* ((s0-0 s1-0)
(v1-14 (if (type? s0-0 entity-nav-mesh)
s0-0
)
)
)
(let ((v1-14 (as-type s1-0 entity-nav-mesh)))
(when v1-14
(let ((a0-7 (-> v1-14 nav-mesh))
(a1-2 (new 'stack-no-clear 'nav-find-poly-parms))
@@ -753,10 +748,7 @@
(dotimes (s2-1 (-> s3-3 length))
(let* ((s0-1 (-> s3-3 s2-1))
(s1-1 (-> s0-1 aid))
(v1-28 (if (type? s0-1 entity-nav-mesh)
s0-1
)
)
(v1-28 (as-type s0-1 entity-nav-mesh))
)
(when v1-28
(let ((a0-24 (-> v1-28 nav-mesh))