Files
jak-project/test/decompiler/reference/engine/ui/text_REF.gc
T
2022-02-20 13:30:08 -05:00

580 lines
21 KiB
Common Lisp
Vendored
Generated

;;-*-Lisp-*-
(in-package goal)
;; definition for symbol *game-text-word*, type string
(define *game-text-word* (new 'global 'string 128 (the-as string #f)))
;; definition for symbol *game-text-line*, type string
(define *game-text-line* (new 'global 'string 256 (the-as string #f)))
;; definition for symbol *level-text-file-load-flag*, type symbol
(define *level-text-file-load-flag* #t)
;; failed to figure out what this is:
(when (zero? (-> *common-text-heap* base))
(let ((gp-0 *common-text-heap*))
(set! (-> gp-0 base) (malloc 'global #x8800))
(set! (-> gp-0 current) (-> gp-0 base))
(set! (-> gp-0 top-base) (&+ (-> gp-0 base) #x8800))
(set! (-> gp-0 top) (-> gp-0 top-base))
)
)
;; definition for method 4 of type game-text-info
(defmethod length game-text-info ((obj game-text-info))
(-> obj length)
)
;; definition for method 5 of type game-text-info
;; INFO: Return type mismatch uint vs int.
(defmethod asize-of game-text-info ((obj game-text-info))
(the-as int (+ (-> obj type size) (* (-> obj length) 8)))
)
;; definition for method 3 of type game-text-info
;; INFO: this function exists in multiple non-identical object files
(defmethod inspect game-text-info ((obj game-text-info))
(format #t "[~8x] ~A~%" obj (-> obj type))
(format #t "~Tlength: ~D~%" (-> obj length))
(format #t "~Tdata[~D]: @ #x~X~%" (-> obj length) (-> obj data))
(dotimes (s5-0 (-> obj length))
(format #t "~T [~D] #x~X ~A~%" s5-0 (-> obj data s5-0 id) (-> obj data s5-0 text))
)
obj
)
;; definition for method 8 of type game-text-info
(defmethod mem-usage game-text-info ((obj game-text-info) (arg0 memory-usage-block) (arg1 int))
(set! (-> arg0 length) (max 81 (-> arg0 length)))
(set! (-> arg0 data 80 name) "string")
(+! (-> arg0 data 80 count) 1)
(let ((v1-6 (asize-of obj)))
(+! (-> arg0 data 80 used) v1-6)
(+! (-> arg0 data 80 total) (logand -16 (+ v1-6 15)))
)
(dotimes (s4-0 (-> obj length))
(set! (-> arg0 length) (max 81 (-> arg0 length)))
(set! (-> arg0 data 80 name) "string")
(+! (-> arg0 data 80 count) 1)
(let ((v1-18 (asize-of (-> obj data s4-0 text))))
(+! (-> arg0 data 80 used) v1-18)
(+! (-> arg0 data 80 total) (logand -16 (+ v1-18 15)))
)
)
obj
)
;; definition for method 9 of type game-text-info
(defmethod lookup-text! game-text-info ((obj game-text-info) (arg0 game-text-id) (arg1 symbol))
(let* ((a1-1 0)
(a3-0 (+ (-> obj length) 1))
(v1-2 (/ (+ a1-1 a3-0) 2))
)
(let ((t0-0 -1))
(while (and (!= (-> obj data v1-2 id) arg0) (!= v1-2 t0-0))
(if (< (the-as uint arg0) (the-as uint (-> obj data v1-2 id)))
(set! a3-0 v1-2)
(set! a1-1 v1-2)
)
(set! t0-0 v1-2)
(set! v1-2 (/ (+ a1-1 a3-0) 2))
)
)
(cond
((!= (-> obj data v1-2 id) arg0)
(cond
(arg1
(the-as string #f)
)
(else
(format (clear *temp-string*) "UNKNOWN ID ~D" arg0)
*temp-string*
)
)
)
(else
(-> obj data v1-2 text)
)
)
)
)
;; definition for symbol text-is-loading, type symbol
(define text-is-loading #f)
;; definition for function load-game-text-info
;; WARN: Found some very strange gotos. Check result carefully, this is not well tested.
(defun load-game-text-info ((txt-name string) (curr-text symbol) (heap kheap))
(local-vars (v0-2 int) (heap-sym-heap game-text-info) (lang int) (load-status int) (heap-free int))
(set! heap-sym-heap (the-as game-text-info (-> curr-text value)))
(set! lang (the-as int (-> *setting-control* current language)))
(set! load-status 0)
(set! heap-free (&- (-> heap top) (the-as uint (-> heap base))))
(if (and (= (scf-get-territory) 1) (zero? lang))
(set! lang 6)
)
(when (or (= heap-sym-heap #f)
(!= (-> heap-sym-heap language-id) lang)
(not (string= (-> heap-sym-heap group-name) txt-name))
)
(let ((v1-16 heap))
(set! (-> v1-16 current) (-> v1-16 base))
)
(b! #t cfg-14 :delay (nop!))
(label cfg-13)
(set! v0-2 0)
(b! #t cfg-27 :delay (nop!))
(label cfg-14)
(let ((s3-0 str-load))
(format (clear *temp-string*) "~D~S.TXT" lang txt-name)
(b!
(not (s3-0
*temp-string*
-1
(logand -64 (&+ (-> heap current) 63))
(&- (-> heap top) (the-as uint (-> heap current)))
)
)
cfg-13
:delay
(nop!)
)
)
(label cfg-16)
(let ((v1-20 (str-load-status (the-as (pointer int32) (& load-status)))))
(b! (!= v1-20 'error) cfg-19 :delay (empty-form))
(format 0 "Error loading text~%")
(set! v0-2 0)
(b! #t cfg-27 :delay (nop!))
(the-as none 0)
(b! #t cfg-24 :delay (nop!))
(label cfg-19)
(cond
((>= load-status (+ heap-free -300))
(format 0 "Game text heap overrun!~%")
(return 0)
)
((= v1-20 'busy)
(nop!)
(nop!)
(nop!)
(nop!)
(nop!)
(nop!)
(goto cfg-16)
)
)
)
(label cfg-24)
(let ((s2-1 (logand -64 (&+ (-> heap current) 63))))
(flush-cache 0)
(let ((s3-1 link))
(format (clear *temp-string*) "~D~S.TXT" lang txt-name)
(set! (-> curr-text value) (s3-1 s2-1 (-> *temp-string* data) load-status heap 0))
)
)
(if (<= (the-as int (-> curr-text value)) 0)
(set! (-> curr-text value) (the-as object #f))
)
)
(set! v0-2 0)
(label cfg-27)
v0-2
)
;; definition for function load-level-text-files
;; INFO: Return type mismatch int vs none.
(defun load-level-text-files ((arg0 int))
(if (or *level-text-file-load-flag* (>= arg0 0))
(load-game-text-info "common" '*common-text* *common-text-heap*)
)
0
(none)
)
;; definition for function draw-debug-text-box
;; INFO: Return type mismatch int vs none.
(defun draw-debug-text-box ((arg0 font-context))
(let ((s5-0 (new 'static 'vector4w))
(gp-0 (new 'static 'matrix))
)
(let ((s4-0 (new 'static 'vector)))
(set-vector! s4-0 (-> arg0 origin x) (-> arg0 origin y) 0.0 1.0)
(set! (-> s4-0 x) (* (-> s4-0 x) (-> *video-parms* relative-x-scale-reciprical)))
(vector-matrix*! s4-0 s4-0 (-> arg0 mat))
(set-vector!
(-> gp-0 vector 0)
(the-as float (the int (-> s4-0 x)))
(the-as float (the int (-> s4-0 y)))
(the-as float (the int (-> s4-0 z)))
(the-as float 1)
)
(set-vector! s4-0 (+ (-> arg0 origin x) (-> arg0 width)) (-> arg0 origin y) 0.0 1.0)
(set! (-> s4-0 x) (* (-> s4-0 x) (-> *video-parms* relative-x-scale-reciprical)))
(vector-matrix*! s4-0 s4-0 (-> arg0 mat))
(set-vector!
(-> gp-0 vector 1)
(the-as float (the int (-> s4-0 x)))
(the-as float (the int (-> s4-0 y)))
(the-as float (the int (-> s4-0 z)))
(the-as float 1)
)
(set-vector! s4-0 (+ (-> arg0 origin x) (-> arg0 width)) (+ (-> arg0 origin y) (-> arg0 height)) 0.0 1.0)
(set! (-> s4-0 x) (* (-> s4-0 x) (-> *video-parms* relative-x-scale-reciprical)))
(vector-matrix*! s4-0 s4-0 (-> arg0 mat))
(set-vector!
(-> gp-0 vector 2)
(the-as float (the int (-> s4-0 x)))
(the-as float (the int (-> s4-0 y)))
(the-as float (the int (-> s4-0 z)))
(the-as float 1)
)
(set-vector! s4-0 (-> arg0 origin x) (+ (-> arg0 origin y) (-> arg0 height)) 0.0 1.0)
(set! (-> s4-0 x) (* (-> s4-0 x) (-> *video-parms* relative-x-scale-reciprical)))
(vector-matrix*! s4-0 s4-0 (-> arg0 mat))
(set-vector!
(-> gp-0 vector 3)
(the-as float (the int (-> s4-0 x)))
(the-as float (the int (-> s4-0 y)))
(the-as float (the int (-> s4-0 z)))
(the-as float 1)
)
)
(set-vector! s5-0 128 128 128 128)
(add-debug-line2d
#t
(bucket-id debug-draw1)
(the-as vector (-> gp-0 vector))
(-> gp-0 vector 1)
(the-as vector s5-0)
)
(add-debug-line2d #t (bucket-id debug-draw1) (-> gp-0 vector 1) (-> gp-0 vector 2) (the-as vector s5-0))
(add-debug-line2d #t (bucket-id debug-draw1) (-> gp-0 vector 2) (-> gp-0 vector 3) (the-as vector s5-0))
(add-debug-line2d
#t
(bucket-id debug-draw1)
(-> gp-0 vector 3)
(the-as vector (-> gp-0 vector))
(the-as vector s5-0)
)
)
0
(none)
)
;; definition for function set-font-color-alpha
;; INFO: Return type mismatch int vs none.
(defun set-font-color-alpha ((idx font-color) (alpha int))
(set! (-> *font-work* color-table idx color 0 a) alpha)
(set! (-> *font-work* color-table idx color 1 a) alpha)
(set! (-> *font-work* color-table idx color 2 a) alpha)
(set! (-> *font-work* color-table idx color 3 a) alpha)
(set! (-> *font-work* color-shadow w) alpha)
0
(none)
)
;; definition for function print-game-text-scaled
;; INFO: Return type mismatch int vs none.
(defun print-game-text-scaled ((str string) (scale float) (font-ctxt font-context) (alpha int))
(let ((f26-0 (-> font-ctxt width))
(f30-0 (-> font-ctxt height))
(f24-0 (-> font-ctxt origin x))
(f22-0 (-> font-ctxt origin y))
(f28-0 (-> font-ctxt scale))
)
(let ((f0-1 (* (-> font-ctxt width) scale))
(f1-2 (* (-> font-ctxt height) scale))
)
(if (logtest? (-> font-ctxt flags) (font-flags middle))
(+! (-> font-ctxt origin x) (* 0.5 (- f26-0 f0-1)))
)
(if (logtest? (-> font-ctxt flags) (font-flags left))
(+! (-> font-ctxt origin y) (the-as float (gpr->fpr (/ (the int (- f30-0 f1-2)) 2))))
)
(let ((v1-10 font-ctxt))
(set! (-> v1-10 scale) (* f28-0 scale))
)
(set! (-> font-ctxt width) f0-1)
(set! (-> font-ctxt height) f1-2)
)
(print-game-text str font-ctxt #f alpha 22)
(set! (-> font-ctxt origin x) f24-0)
(set! (-> font-ctxt origin y) f22-0)
(set! (-> font-ctxt width) f26-0)
(set! (-> font-ctxt height) f30-0)
(set! (-> font-ctxt scale) f28-0)
)
0
(none)
)
;; definition for function print-game-text
;; WARN: Stack slot offset 136 signed mismatch
;; WARN: Stack slot offset 136 signed mismatch
;; WARN: Stack slot offset 136 signed mismatch
;; WARN: Stack slot offset 136 signed mismatch
;; WARN: Stack slot offset 136 signed mismatch
;; WARN: Stack slot offset 136 signed mismatch
;; WARN: Stack slot offset 136 signed mismatch
;; WARN: Stack slot offset 156 signed mismatch
;; WARN: Stack slot offset 112 signed mismatch
;; WARN: Stack slot offset 116 signed mismatch
;; WARN: Stack slot offset 120 signed mismatch
;; WARN: Stack slot offset 124 signed mismatch
;; WARN: Stack slot offset 128 signed mismatch
;; WARN: Stack slot offset 132 signed mismatch
;; WARN: Stack slot offset 164 signed mismatch
;; WARN: Stack slot offset 160 signed mismatch
;; WARN: Stack slot offset 152 signed mismatch
;; WARN: Stack slot offset 148 signed mismatch
;; WARN: Stack slot offset 144 signed mismatch
;; WARN: Stack slot offset 164 signed mismatch
;; WARN: Stack slot offset 156 signed mismatch
;; WARN: Stack slot offset 156 signed mismatch
;; WARN: Stack slot offset 112 signed mismatch
;; WARN: Stack slot offset 116 signed mismatch
;; WARN: Stack slot offset 120 signed mismatch
;; WARN: Stack slot offset 124 signed mismatch
;; WARN: Stack slot offset 128 signed mismatch
;; WARN: Stack slot offset 132 signed mismatch
;; WARN: Stack slot offset 164 signed mismatch
;; WARN: Stack slot offset 160 signed mismatch
;; WARN: Stack slot offset 152 signed mismatch
;; WARN: Stack slot offset 148 signed mismatch
;; WARN: Stack slot offset 144 signed mismatch
;; WARN: Stack slot offset 164 signed mismatch
;; WARN: Stack slot offset 156 signed mismatch
;; WARN: Stack slot offset 156 signed mismatch
;; WARN: Stack slot offset 112 signed mismatch
;; WARN: Stack slot offset 116 signed mismatch
;; WARN: Stack slot offset 120 signed mismatch
;; WARN: Stack slot offset 124 signed mismatch
;; WARN: Stack slot offset 128 signed mismatch
;; WARN: Stack slot offset 132 signed mismatch
;; WARN: Stack slot offset 164 signed mismatch
(defun print-game-text ((str string) (font-ctxt font-context) (opaque symbol) (alpha int) (line-height int))
(local-vars
(sv-112 float)
(sv-116 float)
(sv-120 float)
(sv-124 float)
(sv-128 float)
(sv-132 float)
(sv-136 float)
(sv-140 (pointer uint8))
(sv-144 float)
(sv-148 float)
(sv-152 float)
(sv-156 float)
(sv-160 float)
(sv-164 float)
(sv-168 int)
(sv-176 int)
(sv-184 int)
(sv-192 int)
(sv-200 int)
(sv-208 symbol)
(sv-212 symbol)
)
(let ((gp-0 (new
'stack
'font-context
*font-default-matrix*
(the int (-> font-ctxt origin x))
(the int (-> font-ctxt origin y))
0.0
(font-color default)
(font-flags shadow kerning)
)
)
)
(when (< 0.1 (-> font-ctxt scale))
(set! sv-112 (-> font-ctxt mat vector 0 x))
(set! sv-116 (-> font-ctxt mat vector 1 y))
(set! sv-120 (-> *video-parms* relative-x-scale))
(set! sv-124 (-> *video-parms* relative-y-scale))
(set! sv-128 (-> *video-parms* relative-x-scale-reciprical))
(set! sv-132 (-> *video-parms* relative-y-scale-reciprical))
(set! sv-136 (-> font-ctxt scale))
(set! (-> gp-0 origin z) (-> font-ctxt origin z))
(set! (-> gp-0 flags) (-> font-ctxt flags))
(set! (-> gp-0 color) (-> font-ctxt color))
(set! (-> gp-0 scale) sv-136)
(when (logtest? (-> gp-0 flags) (font-flags left))
(logclear! (-> gp-0 flags) (font-flags left))
(let ((f30-0 (-> gp-0 width))
(f28-0 (-> gp-0 height))
)
(set! (-> gp-0 width) (-> font-ctxt width))
(set! (-> gp-0 height) (-> font-ctxt height))
(+! (-> gp-0 origin y)
(the float (the int (* 0.5 (- (-> gp-0 height) (print-game-text str gp-0 #t 128 22)))))
)
(set! (-> gp-0 width) f30-0)
(set! (-> gp-0 height) f28-0)
)
)
(set! (-> gp-0 mat vector 0 x) (* (-> gp-0 mat vector 0 x) sv-136))
(set! (-> gp-0 mat vector 1 y) (* (-> gp-0 mat vector 1 y) sv-136))
(set! (-> *video-parms* relative-x-scale) (* (-> *video-parms* relative-x-scale) sv-136))
(set! (-> *video-parms* relative-y-scale) (* (-> *video-parms* relative-y-scale) sv-136))
(set! (-> *video-parms* relative-x-scale-reciprical) (/ 1.0 (-> *video-parms* relative-x-scale)))
(set! (-> *video-parms* relative-y-scale-reciprical) (/ 1.0 sv-136))
(set! sv-140 (-> str data))
(set! sv-144 (-> gp-0 origin x))
(set! sv-148 (-> gp-0 origin x))
(set! sv-152 (+ (-> gp-0 origin x) (-> font-ctxt width)))
(set! sv-156 (+ (-> gp-0 origin y) (-> font-ctxt height)))
(set! sv-160 (* (get-string-length " " gp-0) (-> *video-parms* relative-x-scale)))
(set! sv-164 (* (if (logtest? (-> gp-0 flags) (font-flags large))
(the float line-height)
14.0
)
sv-136
)
)
(set! sv-168 0)
(if (logtest? (-> gp-0 flags) (font-flags middle))
(+! (-> gp-0 origin x) (* 0.5 (-> font-ctxt width)))
)
(set! sv-176 (the-as int (-> sv-140 0)))
(set! sv-184 0)
(set! sv-192 0)
(set! sv-200 0)
(set! sv-208 (the-as symbol #f))
(set! sv-212 (the-as symbol #f))
(set! (-> *game-text-line* data 0) (the-as uint 0))
(while (or (not (and (zero? sv-176) (zero? sv-184) (zero? sv-192))) (>= sv-156 (-> gp-0 origin y)))
(cond
((= sv-176 32)
(set! (-> *game-text-word* data sv-184) (the-as uint sv-176))
(set! sv-184 (+ sv-184 1))
(set! sv-208 #t)
)
((zero? sv-176)
(if (zero? sv-184)
(set! sv-212 #t)
(set! sv-208 #t)
)
)
(else
(if (= sv-176 95)
(set! sv-176 32)
)
(set! (-> *game-text-word* data sv-184) (the-as uint sv-176))
(set! sv-184 (+ sv-184 1))
)
)
(when (= sv-208 #t)
(set! (-> *game-text-word* data sv-184) (the-as uint 0))
(let* ((f30-1 sv-144)
(f0-49 (* (get-string-length *game-text-word* gp-0) (-> *video-parms* relative-x-scale)))
(f1-14 (+ f30-1 f0-49))
)
(if (= (-> *game-text-word* data (+ sv-184 -1)) 32)
(set! f1-14 (- f1-14 sv-160))
)
(cond
((< sv-152 f1-14)
(set! sv-144 (+ sv-148 f0-49))
(set! sv-212 #t)
)
(else
(set! sv-144 (+ sv-144 f0-49))
)
)
)
)
(when (= sv-212 #t)
(when (>= sv-200 (the-as int (-> gp-0 start-line)))
(let ((f30-2 (+ (-> gp-0 origin y) sv-164)))
(when (>= sv-156 f30-2)
(when (= (-> *game-text-line* data (+ sv-192 -1)) 32)
(set! (-> *game-text-line* data (+ sv-192 -1)) (the-as uint 0))
(when (and (= (-> *game-text-line* data (+ sv-192 -5)) 126) (= (-> *game-text-line* data (+ sv-192 -2)) 72))
(set! (-> *game-text-line* data (+ sv-192 -5)) (the-as uint 0))
0
)
)
)
(when (and (= (-> *game-text-line* data (+ sv-192 -4)) 126) (= (-> *game-text-line* data (+ sv-192 -1)) 72))
(set! (-> *game-text-line* data (+ sv-192 -4)) (the-as uint 0))
0
)
(if (nonzero? (-> *game-text-line* data 0))
(set! sv-168 (+ sv-168 1))
)
(when (not opaque)
(let* ((s1-1 (-> *display* frames (-> *display* on-screen) frame global-buf))
(s2-1 (-> s1-1 base))
)
(set-font-color-alpha (-> font-ctxt color) alpha)
(draw-string *game-text-line* s1-1 gp-0)
(set-font-color-alpha (-> font-ctxt color) 128)
(set! (-> gp-0 color) (-> *font-work* last-color))
(let ((a3-3 (-> s1-1 base)))
(let ((v1-127 (the-as object (-> s1-1 base))))
(set! (-> (the-as dma-packet v1-127) dma) (new 'static 'dma-tag :id (dma-tag-id next)))
(set! (-> (the-as dma-packet v1-127) vif0) (new 'static 'vif-tag))
(set! (-> (the-as dma-packet v1-127) vif1) (new 'static 'vif-tag))
(set! (-> s1-1 base) (&+ (the-as pointer v1-127) 16))
)
(dma-bucket-insert-tag
(-> *display* frames (-> *display* on-screen) frame bucket-group)
(bucket-id debug-draw0)
s2-1
(the-as (pointer dma-tag) a3-3)
)
)
)
)
(set! (-> gp-0 origin y) f30-2)
)
)
(set! sv-200 (+ sv-200 1))
(set! (-> *game-text-line* data 0) (the-as uint 0))
(set! sv-192 0)
(set! sv-212 (the-as symbol #f))
)
(when (= sv-208 #t)
(copy-charp<-charp (&-> *game-text-line* data sv-192) (-> *game-text-word* data))
(set! sv-192 (+ sv-192 sv-184))
(set! sv-184 0)
(set! sv-208 (the-as symbol #f))
)
(when (nonzero? sv-176)
(set! sv-140 (&-> sv-140 1))
(set! sv-176 (the-as int (-> sv-140 0)))
)
)
(set! (-> gp-0 mat vector 0 x) sv-112)
(set! (-> gp-0 mat vector 1 y) sv-116)
(set! (-> *video-parms* relative-x-scale) sv-120)
(set! (-> *video-parms* relative-y-scale) sv-124)
(set! (-> *video-parms* relative-x-scale-reciprical) sv-128)
(set! (-> *video-parms* relative-y-scale-reciprical) sv-132)
(if (> sv-168 0)
(* sv-164 (the float sv-168))
0.0
)
)
)
)
;; definition for function disable-level-text-file-loading
;; INFO: Return type mismatch int vs none.
(defun disable-level-text-file-loading ()
(set! *level-text-file-load-flag* #f)
0
(none)
)
;; definition for function enable-level-text-file-loading
;; INFO: Return type mismatch int vs none.
(defun enable-level-text-file-loading ()
(set! *level-text-file-load-flag* #t)
0
(none)
)