diff --git a/decompiler/config/jak2/all-types.gc b/decompiler/config/jak2/all-types.gc index cbce542189..225d364faf 100644 --- a/decompiler/config/jak2/all-types.gc +++ b/decompiler/config/jak2/all-types.gc @@ -5599,14 +5599,14 @@ (other-name-1 symbol :offset 24) (packages pair :offset-assert 32) ;; guess on type (memory-mode uint32 :offset-assert 36) - (music-bank basic :offset-assert 40) - (ambient-sounds basic :offset-assert 44) + (music-bank symbol :offset-assert 40) + (ambient-sounds symbol :offset-assert 44) (sound-reverb float :offset-assert 48) (mood-func symbol :offset-assert 52) (mood-init symbol :offset-assert 56) - (ocean basic :offset-assert 60) - (sky basic :offset-assert 64) - (use-camera-other basic :offset-assert 68) + (ocean symbol :offset-assert 60) + (sky symbol :offset-assert 64) + (use-camera-other symbol :offset-assert 68) (part-engine-max int32 :offset-assert 72) (city-map-bits uint64 :offset-assert 80) (continues pair :offset-assert 88) @@ -5626,8 +5626,8 @@ (deactivate-func symbol :offset-assert 152) (kill-func symbol :offset-assert 156) (borrow-size uint16 2 :offset-assert 160) - (borrow-level symbol 2 :offset-assert 164) - (borrow-display? basic 2 :offset-assert 172) + (borrow-level symbol 2 :offset-assert 164) + (borrow-display? symbol 2 :offset-assert 172) (base-task-mask task-mask :offset-assert 180) (texture-anim symbol 10 :offset-assert 184 :score -1) (texture-anim-tfrag symbol :offset 184) @@ -5652,13 +5652,13 @@ (ocean-alpha float :offset-assert 280) (extra-sound-bank pair :offset-assert 284) ) + :pack-me :method-count-assert 9 :size-assert #x120 :flag-assert #x900000120 - ;; Failed to read fields. ) -(declare-type drawable basic) +(declare-type drawable basic) (deftype login-state (basic) ((state int32 :offset-assert 4) (pos uint32 :offset-assert 8) @@ -5682,6 +5682,7 @@ (ten 10) ) +(declare-type game-text-id uint32) (deftype level (basic) ((name symbol :offset-assert 4) (load-name basic :offset-assert 8) @@ -5778,7 +5779,7 @@ (debug-print-region-splitbox (_type_ vector object) none 20) ;; (vis-load (_type_) uint 20) (get-art-group-by-name (_type_ string) art-group 21) ;; (unused-21 (_type_) none 21) (level-method-22 () none 22) ;; (birth (_type_) _type_ 22) - (level-method-23 () none 23) ;; (level-status-set! (_type_ symbol) _type_ 23) + (lookup-text (_type_ game-text-id symbol) string 23) ;; (level-status-set! (_type_ symbol) _type_ 23) (level-method-24 () none 24) (birth (_type_) _type_ 25) ;; (init-vis (_type_) int 25) (level-status-update! (_type_ symbol) _type_ 26) @@ -6397,7 +6398,7 @@ ((length int32 :offset-assert 4) (language-id int32 :offset-assert 8) (group-name string :offset-assert 12) ;; guessed by decompiler - (data game-text :dynamic :offset-assert 16) ;; guessed by decompiler + (data game-text :dynamic :inline :offset-assert 16) ;; guessed by decompiler ) :method-count-assert 10 :size-assert #x10 @@ -11335,14 +11336,14 @@ (:methods (continue-point-method-9 () none 9) ;; (debug-draw! (_type_) none 9) (continue-point-method-10 () none 10) - (continue-point-method-11 () none 11) + (continue-point-method-11 (_type_) none 11) ) ) (defenum mc-status-code :type uint32 - ; (busy 0) - ; (ok 1) + ;; (busy 0) + (ok 1) ; (bad-handle 2) ; (format-failed 3) ; (internal-error 4) @@ -11367,7 +11368,7 @@ (deftype game-info (basic) ((mode symbol :offset-assert 4) ;; guessed by decompiler - (save-name basic :offset-assert 8) + (save-name string :offset-assert 8) (life float :offset-assert 12) (life-max float :offset-assert 16) (money float :offset-assert 20) @@ -11403,7 +11404,7 @@ (perm-list entity-perm-array :offset-assert 232) ;; guessed by decompiler (task-perm-list entity-perm-array :offset-assert 236) ;; guessed by decompiler (current-continue continue-point :offset-assert 240) ;; guessed by decompiler - (last-continue basic :offset-assert 244) + (last-continue continue-point :offset-assert 244) (unknown-pad3 uint32 3) (task-counter uint32 :offset-assert 260) (unknown-pad4 uint32) @@ -11449,7 +11450,7 @@ (distance float :offset-assert 540) (kiosk-timeout uint64 :offset-assert 544) (pause-start-time time-frame :offset-assert 552) - (game-score basic :offset-assert 560) + (game-score (array highscore-info) :offset-assert 560) (goal float :offset-assert 564) (miss float :offset-assert 568) (miss-max float :offset-assert 572) @@ -11467,8 +11468,8 @@ (:methods (initialize! (_type_ symbol game-save string) _type_ 9) (game-info-method-10 () none 10) ;; (adjust (_type_ symbol float handle) float 10) - (game-info-method-11 () none 11) ;; (task-complete? (_type_ game-task) symbol 11) - (game-info-method-12 () none 12) ;; (lookup-entity-perm-by-aid (_type_ actor-id) entity-perm 12) + (task-complete? (_type_ game-task) symbol 11) + (game-info-method-12 (_type_) none 12) ;; (lookup-entity-perm-by-aid (_type_ actor-id) entity-perm 12) (game-info-method-13 () none 13) ;; (get-entity-task-perm (_type_ game-task) entity-perm 13) (game-info-method-14 () none 14) ;; 14) (game-info-method-15 () none 15) @@ -13621,7 +13622,7 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (deftype script-form (structure) - ((name basic :offset-assert 0) + ((name string :offset-assert 0) (spec basic :offset-assert 4) (func basic :offset-assert 8) ) @@ -13797,13 +13798,13 @@ :size-assert #x10 :flag-assert #x1000000010 (:methods - (sync-info-method-9 () none 9) ;; (get-current-value (_type_ float) float 9) - (sync-info-method-10 () none 10) ;; (get-current-phase-no-mod (_type_) float 10) - (sync-info-method-11 () none 11) ;; (get-current-phase (_type_) float 11) - (sync-info-method-12 () none 12) ;; (get-current-value-with-mirror (_type_ float) float 12) - (sync-info-method-13 () none 13) ;; (get-current-phase-with-mirror (_type_) float 13) - (sync-info-method-14 () none 14) ;; (setup-params! (_type_ uint float float float) none 14) - (sync-info-method-15 () none 15) ;; (load-params! (_type_ process uint float float float) symbol 15) + (sync-info-method-9 (_type_) none 9) ;; (get-current-value (_type_ float) float 9) + (get-phase-offset "Get the offset, as a fraction of period" (_type_) float 10) + (get-norm! "Abstract method, stubbed" (_type_) float 11) + (multiply-norm! "Multiples result of `get-norm!` by the provided float" (_type_ float object) float 12) + (initialize! "Abstract method, stubbed" () none 13) + (sync-info-method-14 (_type_ time-frame) time-frame 14) + (sync-info-method-15 (_type_ float) none 15) ;; (load-params! (_type_ process uint float float float) symbol 15) ) ) @@ -15085,12 +15086,11 @@ :method-count-assert 12 :size-assert #x50 :flag-assert #xc00000050 - ;; Failed to read fields. (:methods (new (symbol type process-drawable int float collide-spec) _type_ 0) (initialize (_type_ process-drawable int float collide-spec) impact-control :behavior process 9) (update-from-cspace (_type_) none 10) - (impact-control-method-11 () none 11) + (impact-control-method-11 (_type_) none 11) ) ) @@ -15099,7 +15099,6 @@ :method-count-assert 12 :size-assert #x20 :flag-assert #xc00000020 - ;; Failed to read fields. (:methods (new (symbol type vector vector) _type_ 0) (initialize (_type_ vector vector) point-tracker 9) @@ -15115,7 +15114,6 @@ :method-count-assert 14 :size-assert #x30 :flag-assert #xe00000030 - ;; Failed to read fields. (:methods (combo-tracker-method-12 () none 12) (combo-tracker-method-13 () none 13) @@ -17509,7 +17507,7 @@ (bit-5 5) (subtask-complete 6) (bit-7 7) - (bit-8 8) + (complete 8) (bit-9 9) (bit-10 10) ) @@ -20774,9 +20772,9 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; (define-extern raw-ray-sphere-intersect function) ;; (function float float) -;; (define-extern ray-sphere-intersect function) ;; (function vector vector vector float float) +(define-extern ray-sphere-intersect (function vector vector vector float float)) ;; (define-extern ray-circle-intersect function) ;; (function vector vector vector float float) -;; (define-extern ray-cylinder-intersect function) ;; (function vector vector vector vector float float vector float) +(define-extern ray-cylinder-intersect (function vector vector vector vector float float vector float)) ;; (define-extern ray-plane-intersect function) ;; (function vector vector vector vector vector vector vector float) ;; (define-extern ray-triangle-intersect function) ;; (function vector vector float matrix vector vector float) ;; (define-extern collide-do-primitives function) ;; (function float) @@ -20862,27 +20860,24 @@ ;; cylinder ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -#| + (deftype cylinder-verts (structure) - ((vert vector 24 :offset-assert 0) ;; guessed by decompiler + ((vert vector 24 :inline :offset-assert 0) ;; guessed by decompiler ) :method-count-assert 9 :size-assert #x180 :flag-assert #x900000180 ) -|# -#| (deftype cylinder-flat-verts (structure) - ((vert vector 10 :offset-assert 0) ;; guessed by decompiler + ((vert vector 10 :inline :offset-assert 0) ;; guessed by decompiler ) :method-count-assert 9 :size-assert #xa0 :flag-assert #x9000000a0 ) -|# -;; (define-extern ray-arbitrary-circle-intersect function) ;; (function vector vector vector vector float float) +(define-extern ray-arbitrary-circle-intersect (function vector vector vector vector float float)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; wind-work ;; @@ -21313,10 +21308,10 @@ ;; (define-extern debug-reset-buffers function) ;; (function symbol) (define-extern debug-draw-buffers (function symbol)) (define-extern add-debug-line (function symbol bucket-id vector vector rgba symbol rgba symbol)) -;; (define-extern add-debug-line2d function) ;; (function symbol bucket-id vector vector vector symbol) +(define-extern add-debug-line2d (function symbol bucket-id vector vector vector symbol)) ;; (define-extern add-debug-box function) ;; (function symbol bucket-id vector vector rgba symbol) ;; (define-extern add-debug-box-with-transform function) -;; (define-extern add-debug-x function) ;; (function symbol bucket-id vector rgba symbol) +(define-extern add-debug-x (function symbol bucket-id vector rgba symbol)) ;; (define-extern add-debug-cross function) (define-extern add-debug-text-3d (function symbol bucket-id string vector font-color vector2h symbol)) ;; (define-extern add-debug-sphere-with-transform function) ;; (function symbol bucket-id vector meters matrix rgba symbol) @@ -21325,7 +21320,7 @@ ;; (define-extern add-debug-spheres function) ;; (function symbol bucket-id (inline-array vector) int rgba symbol) ;; (define-extern add-debug-line-sphere function) ;; (define-extern add-debug-circle function) ;; (function symbol bucket-id vector float rgba matrix symbol) -;; (define-extern add-debug-vector function) ;; (function symbol bucket-id vector vector meters rgba symbol) +(define-extern add-debug-vector (function symbol bucket-id vector vector meters rgba symbol)) (define-extern add-debug-matrix (function symbol bucket-id matrix float matrix)) ;; (define-extern add-debug-rot-matrix function) ;; (function symbol bucket-id matrix vector matrix) ;; (define-extern add-debug-quaternion function) @@ -21361,70 +21356,122 @@ ;; history ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -#| +(defenum collide-status + :bitfield #t + :type uint64 + (on-surface 0) + (on-ground 1) + (touch-surface 2) + (touch-wall 3) + (touch-ceiling 4) + (touch-actor 5) + (on-special-surface 6) + (touch-edge 7) + (no-touch 8) + (blocked 9) + (on-water 10) + (impact-surface 11) + (touch-background 12) + (stuck 13) + (touch-ceiling-sticky 14) + (glance 15) + (probe-hit 16) + ) + +(defenum history-channel + :type uint8 + (trans 0) + (transv 1) + (transv-in 2) + (transv-out 3) + (intersect 4) + (local-normal 5) + (surface-normal 6) + (collide-status 7) + (pat 8) + (time 9) + (friction 10)) + (deftype history-elt (structure) - ((record-tag-bytes UNKNOWN 4 :offset-assert 0) - (record-tag uint32 :offset-assert 0) - (record-id uint16 :offset-assert 0) - (owner uint8 :offset-assert 2) - (channel uint8 :offset-assert 4) - (timestamp uint64 :offset-assert 8) + ((record-tag-bytes uint8 4 :offset-assert 0) + (record-tag uint32 :offset 0) + (record-id uint16 :offset 0) + (owner uint8 :offset 2) + (channel history-channel :offset-assert 4) + (timestamp time-frame :offset-assert 8) (origin vector :inline :offset-assert 16) - (bytes UNKNOWN 16 :offset-assert 32) - (vector vector :inline :offset-assert 32) - (float float :offset-assert 32) - (collide-status uint64 :offset-assert 32) - (collide-reaction-flag uint32 :offset-assert 40) - (pat uint32 :offset-assert 32) + (bytes uint8 16 :offset-assert 32) + (vector vector :inline :offset 32) + (float float :offset 32) + (collide-status collide-status :offset 32) + (collide-reaction-flag uint32 :offset 40) + (pat pat-surface :offset 32) ) :method-count-assert 9 :size-assert #x30 :flag-assert #x900000030 ) -|# -#| (deftype history-iterator (basic) ((max-age uint32 :offset-assert 4) (owner uint8 :offset-assert 8) - (proc basic :offset-assert 12) + (proc process :offset-assert 12) (out basic :offset-assert 16) (channel-mask uint64 :offset-assert 24) (index int32 :offset-assert 32) - (done? basic :offset-assert 36) + (done? symbol :offset-assert 36) ) :method-count-assert 12 :size-assert #x28 :flag-assert #xc00000028 - ;; field out uses ~A with a signed load (:methods - (history-iterator-method-9 () none 9) - (history-iterator-method-10 () none 10) - (history-iterator-method-11 () none 11) + (new (symbol type uint32) _type_ 0) + (frame-counter-delta + "Returns the difference between [[*display*]]'s `base-clock.frame-counter` and the elt's `timestamp`" + (_type_ history-elt) time-frame 9) + (update-entries! + "Iterate through each [[history-elt]] in [[*history*]] + - If we hit the end set `done?` to true + - If the `timestamp` on the elt, minus the current framecounter exceeds `max-age`, we are also done, return #f + - However if we find an elt who's `owner` matches the iterator's, break out early returning that `elt`" + (_type_) history-elt 10) + (history-iterator-method-11 + "TODO - Unsure of the purpose + `min(1.0, ((history-elt.timestamp - 1) + frame-counter) / (max-age + 1)) - 1.0`" + (_type_ history-elt) float 11) ) ) -|# -#| (deftype history (basic) ((alloc-index int32 :offset-assert 4) (allocated-length int32 :offset-assert 8) - (elts UNKNOWN :dynamic :offset-assert 16) + (elts history-elt :dynamic :inline :offset 16) ) :method-count-assert 11 :size-assert #x10 :flag-assert #xb00000010 (:methods - (history-method-9 () none 9) - (history-method-10 () none 10) + (new (symbol type int) _type_ 0) + (clear-record-tags! + "First grab the latest [[history-elt]] at `alloc-index` + 1. update it's `channel`, `record-id` and `owner` from the provided args + 2. - if it's `record-tag` is zero -- return it + - otherwise, iterate through all `elts` until one is found that does not match it's `timestamp` + - if not `0` out the `record-tag` for that elt and continue iteration" + (_type_ history-channel uint uint) history-elt 9) + (clear-history-entries! + "Iterates through each [[history-elt]] in the `elt` dynamic array + For each entry: + - clear `timestamp` + - clear `record-tag`" + (_type_) none 10) ) ) -|# -;; (define-extern history-channel->string function) -;; (define-extern *history* object) -;; (define-extern history-print function) -;; (define-extern history-draw function) +(define-extern history-channel->string (function history-channel string)) +(define-extern *history* history) +(define-extern history-print (function history-iterator none)) +(define-extern history-draw (function history-iterator none)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; merc-vu1 ;; @@ -21580,39 +21627,47 @@ ;; ripple ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -#| (deftype ripple-request (structure) ((waveform ripple-wave :offset-assert 0) ;; guessed by decompiler (effect merc-effect :offset-assert 4) ) + :pack-me :method-count-assert 9 :size-assert #x8 :flag-assert #x900000008 ) -|# -#| (deftype ripple-globals (structure) ((count int32 :offset-assert 0) - (requests ripple-request 16 :offset-assert 4) ;; guessed by decompiler + (requests ripple-request 16 :inline :offset-assert 4) ;; guessed by decompiler ) :method-count-assert 9 :size-assert #x84 :flag-assert #x900000084 ) -|# -;; (define-extern *ripple-globals* object) ;; ripple-globals -;; (define-extern ripple-make-request function) ;; (function ripple-wave merc-effect none) -;; (define-extern ripple-update-waveform-offs function) ;; (function ripple-wave-set none) -;; (define-extern ripple-execute-init function) ;; (function none) -;; (define-extern ripple-create-wave-table function) ;; (function ripple-wave-set int) -;; (define-extern ripple-apply-wave-table function) ;; (function merc-effect symbol) -(define-extern ripple-execute (function none)) -;; (define-extern ripple-matrix-scale function) ;; function -;; (define-extern ripple-add-debug-sphere function) ;; (function process-drawable vector float float none) -;; (define-extern ripple-slow-add-sine-waves function) ;; (function ripple-wave-set float float float) -;; (define-extern ripple-find-height function) ;; (function process-drawable int vector float) +(define-extern *ripple-globals* "A collection of [[ripple-request]] (max of 16)" ripple-globals) +(define-extern ripple-make-request + "Iterate through [[*ripple-globals*]] `requests` looking for the one that matches the provided `effect` + If NOT found, append a new [[ripple-request]] with the providded `effect` and `waveform` to the end of the `requests`. + + NOTE: There can only be 16 effects at a given time, NOOP if already at that limit!" + (function ripple-wave merc-effect none)) +(define-extern ripple-update-waveform-offs (function ripple-wave-set none)) +(define-extern ripple-execute-init "TODO - Handled by MIPS2C" (function none)) +(define-extern ripple-create-wave-table "TODO - Handled by MIPS2C" (function ripple-wave-set int)) +(define-extern ripple-apply-wave-table "TODO - Handled by MIPS2C" (function merc-effect symbol)) +(define-extern ripple-execute + "Iterate through [[*ripple-globals*]] requests, from the end to index `0` + For each request, if it has a `waveform` create the wave-table via `ripple-create-wave-table` + Then for each `waveform` apply the `effect` using `ripple-apply-wave-table` + + Once completed, all `requests` have been processed and the `count` is reset to `0`" + (function none)) +(define-extern ripple-matrix-scale "TODO - Handled by MIPS2C" function) +(define-extern ripple-add-debug-sphere (function process-drawable vector float float none)) +(define-extern ripple-slow-add-sine-waves (function ripple-wave-set float float float)) +(define-extern ripple-find-height (function process-drawable int vector float)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; bones ;; @@ -22009,8 +22064,8 @@ ;; font-data ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; (define-extern *font12-table* object) ;; (inline-array vector) -;; (define-extern *font24-table* object) ;; (inline-array vector) +(define-extern *font12-table* (inline-array vector)) +(define-extern *font24-table* (inline-array vector)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; font ;; @@ -22018,8 +22073,8 @@ ;; (define-extern gen-font-12 function) ;; (define-extern draw-string-asm function) -;; (define-extern draw-string function) ;; (function string dma-buffer font-context float) -;; (define-extern get-string-length function) ;; (function string font-context float) +(define-extern draw-string (function string dma-buffer font-context float)) +(define-extern get-string-length (function string font-context float)) (define-extern draw-string-xy (function string dma-buffer int int font-color font-flags float)) ;; (define-extern draw-string-adv function) ;; (function string dma-buffer font-context none) @@ -22691,14 +22746,14 @@ ;; game-info ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; (define-extern *default-continue* continue-point) ;; continue-point +(define-extern *default-continue* continue-point) ;; (define-extern task-level->string function) ;; (define-extern level-name->task-level function) ;; (define-extern trsq->continue-point function) ;; (function trsq none) (define-extern position->stream (function string symbol symbol none)) ;; (define-extern bug-report-display function) ;; (define-extern print-continues function) -;; (define-extern *highscore-info-array* array) +(define-extern *highscore-info-array* (array highscore-info)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; game-task ;; @@ -24115,34 +24170,30 @@ ;; text ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -#| -(deftype game-text-info (basic) - () - :method-count-assert 10 - :size-assert #x10 - :flag-assert #xa00000010 - ;; Failed to read fields. - (:methods - (game-text-info-method-9 () none 9) ;; (lookup-text! (_type_ game-text-id symbol) string 9) - ) - ) -|# - -;; (define-extern *expand-buf-number* object) -;; (define-extern *game-text-word* object) ;; string -;; (define-extern *game-text-line* object) ;; string -;; (define-extern *expanded-text-line0* object) -;; (define-extern *expanded-text-line1* object) -;; (define-extern *level-text-file-load-flag* object) ;; symbol -;; (define-extern convert-korean-text function) -;; (define-extern text-is-loading object) ;; symbol -;; (define-extern load-game-text-info function) ;; (function string symbol kheap int) -(define-extern load-level-text-files (function int none)) -;; (define-extern draw-debug-text-box function) ;; (function font-context none) -;; (define-extern print-game-text-scaled function) ;; (function string float font-context int none) -;; (define-extern print-game-text function) ;; (function string font-context symbol int int float) -;; (define-extern disable-level-text-file-loading function) ;; (function none) -;; (define-extern enable-level-text-file-loading function) ;; (function none) +(define-extern *expand-buf-number* int) +(define-extern *game-text-word* string) +(define-extern *game-text-line* string) +(define-extern *expanded-text-line0* string) +(define-extern *expanded-text-line1* string) +(define-extern *level-text-file-load-flag* symbol) +(define-extern convert-korean-text + "Converts the provided [[game-text]] into korean. Returns a [[string]]" + (function game-text string)) +(define-extern text-is-loading symbol) +(define-extern load-game-text-info + "Load text, if needed. txt-name is the group name, curr-text is the _symbol_ for + the game-text-info, and heap is the heap to load to. The heap will be cleared." + (function string symbol kheap int)) +(define-extern load-level-text-files + "Load the text files needed for level idx. + This function made more sense back when text files were split up, but in the end they put everything + in a single text group and file." + (function int none)) +(define-extern draw-debug-text-box "Draws some lines" (function font-context none)) +(define-extern print-game-text-scaled "Print text, with a given scaling" (function string float font-context int none)) +(define-extern print-game-text "Print text." (function string font-context symbol int int float)) +(define-extern disable-level-text-file-loading "Disables [[*level-text-file-load-flag*]]" (function none)) +(define-extern enable-level-text-file-loading "Disables [[*level-text-file-load-flag*]]" (function none)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; collide-hash ;; @@ -25283,7 +25334,7 @@ ;; (define-extern camera-plot-float-func function) ;; (function float float float float (function float float) vector4w none) ;; (define-extern camera-line-setup function) ;; (function vector4w none) ;; (define-extern camera-line-draw function) ;; (function vector vector symbol) -;; (define-extern camera-line function) ;; (function vector vector vector4w none) +(define-extern camera-line (function vector vector vector4w none)) ;; (define-extern camera-line-rel function) ;; (function vector vector vector4w none) ;; (define-extern camera-line-rel-len function) ;; (function vector vector float vector4w none) ;; (define-extern camera-sphere function) ;; (function vector float vector none) @@ -25427,19 +25478,24 @@ ;; script ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; (define-extern command-get-int function) ;; (function object int int) -;; (define-extern command-get-float function) ;; (function object float float) -;; (define-extern command-get-time function) ;; (function object int int) -;; (define-extern command-get-param function) ;; (function object object object) -;; (define-extern command-get-quoted-param function) ;; (function object object object) -;; (define-extern command-get-process function) ;; (function object process process :behavior camera-tracker) -;; (define-extern command-get-entity function) -;; (define-extern command-get-trans function) ;; (function object vector vector) -;; (define-extern key-assoc function) -;; (define-extern *script-form* object) +(define-extern command-get-int (function object int int)) +(define-extern command-get-float (function object float float)) +(define-extern command-get-time (function object int int)) +(define-extern command-get-param (function object object object)) +(define-extern command-get-quoted-param (function object object object)) +;; (define-extern command-get-process (function object process process :behavior camera-tracker)) +(define-extern command-get-entity + "- If `search` is a [[process]] - return it's `entity` + - If `search` is an [[entity]] - return it + - If `search` is a [[string]] - return the result of [[entity-by-name]] + - If `search` is [[null?]] or [[empty]] or if no other condition passes, return `fallback`" + (function object entity entity)) +(define-extern command-get-trans (function object vector vector)) +(define-extern key-assoc (function none)) +(define-extern *script-form* int) ;; (define-extern level-from-heap function) -;; (define-extern *syntax-context* object) -;; (define-extern *script-context* object) +(define-extern *syntax-context* int) +(define-extern *script-context* int) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; generic-obs ;; @@ -26906,10 +26962,9 @@ ;; mech-h ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -#| (deftype mech-info (basic) ((entity basic :offset-assert 4) - (hud UNKNOWN 1 :offset-assert 8) + (hud uint64 1 :offset-assert 8) ;; handle? (mech-trans vector :inline :offset-assert 16) (mech-quat vector :inline :offset-assert 32) (mech-scale vector :inline :offset-assert 48) @@ -26936,15 +26991,15 @@ (shield-value float :offset-assert 204) (shield-max float :offset-assert 208) (walk-anim-leg int32 :offset-assert 212) - (state-impact? UNKNOWN 1 :offset-assert 216) - (state-impact UNKNOWN 1 :offset-assert 224) + (state-impact? symbol 1 :offset-assert 216) + (state-impact impact-control 1 :inline :offset-assert 224) (thruster-flame-width meters :offset-assert 304) (thruster-flame-length meters :offset-assert 308) - (thruster-local-pos UNKNOWN 2 :offset-assert 320) - (exhaust-local-pos UNKNOWN 2 :offset-assert 352) - (exhaust-local-dir UNKNOWN 2 :offset-assert 384) - (smoke-local-pos UNKNOWN 2 :offset-assert 416) - (smoke-local-vel UNKNOWN 2 :offset-assert 448) + (thruster-local-pos vector 2 :inline :offset-assert 320) + (exhaust-local-pos vector 2 :inline :offset-assert 352) + (exhaust-local-dir vector 2 :inline :offset-assert 384) + (smoke-local-pos vector 2 :inline :offset-assert 416) + (smoke-local-vel vector 2 :inline :offset-assert 448) (particle-system-2d basic :offset-assert 480) (particle-system-3d basic :offset-assert 484) (part-thruster basic :offset-assert 488) @@ -26957,9 +27012,8 @@ :size-assert #x1fc :flag-assert #x9000001fc ) -|# -;; (define-extern *mech-shadow-control* shadow-control) +(define-extern *mech-shadow-control* shadow-control) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; menu ;; diff --git a/decompiler/config/jak2/anonymous_function_types.jsonc b/decompiler/config/jak2/anonymous_function_types.jsonc index 58634d2129..f3b85f4c22 100644 --- a/decompiler/config/jak2/anonymous_function_types.jsonc +++ b/decompiler/config/jak2/anonymous_function_types.jsonc @@ -7,8 +7,6 @@ [23, "(function process symbol)"], [17, "(function process symbol)"] ], - "level": [[5, "(function none)"]], - "main": [[3, "(function none :behavior process)"]], "profile": [[9, "(function profile-segment-array profile-collapse none)"]], "bigmap-h": [ [1, "(function external-art-buffer none)"], @@ -24,7 +22,7 @@ [9, "(function none)"], [8, "(function none)"], [7, "(function time-frame none)"], - [3, "(function none)"] + [3, "(function none :behavior process)"] ], "level-info": [ @@ -38,7 +36,5 @@ [24, "(function level-group int symbol)"] ], - "gsound": [ - [1, "(function none)"] - ] + "gsound": [[1, "(function none)"]] } diff --git a/decompiler/config/jak2/hacks.jsonc b/decompiler/config/jak2/hacks.jsonc index 8d22e31ad6..3923bc1dc3 100644 --- a/decompiler/config/jak2/hacks.jsonc +++ b/decompiler/config/jak2/hacks.jsonc @@ -60,9 +60,6 @@ "(method 224 bot)", "(method 77 rapid-gunner)", // until loop without nop: - "(method 9 history)", - "history-print", - "history-draw", "(method 9 sparticle-launcher)", "(method 18 tracking-spline)", "cam-string-find-position-rel!", @@ -187,7 +184,12 @@ "display-loop-main", "lookup-level-info", "(method 24 level-group)", - "(method 19 level-group)" + "(method 19 level-group)", + // script + "command-get-time", + "command-get-param", + "command-get-quoted-param", + "command-get-entity" ], // If format is used with the wrong number of arguments, diff --git a/decompiler/config/jak2/label_types.jsonc b/decompiler/config/jak2/label_types.jsonc index dec1add70f..91f2f492f7 100644 --- a/decompiler/config/jak2/label_types.jsonc +++ b/decompiler/config/jak2/label_types.jsonc @@ -73,5 +73,15 @@ ["L364", "(pointer uint64)", 1], ["L367", "(pointer uint64)", 1], ["L362", "(pointer uint64)", 1] + ], + "font-data": [ + ["L1", "(inline-array vector)", 250], + ["L2", "(inline-array vector)", 250] + ], + "script": [["L2358", "vector4"]], + "text": [ + ["L96", "vector4"], + ["L95", "matrix"], + ["L96", "vector4w"] ] } diff --git a/decompiler/config/jak2/stack_structures.jsonc b/decompiler/config/jak2/stack_structures.jsonc index a5d091b109..e5d65d26c2 100644 --- a/decompiler/config/jak2/stack_structures.jsonc +++ b/decompiler/config/jak2/stack_structures.jsonc @@ -166,9 +166,7 @@ "string->sound-name": [[16, "qword"]], - "doppler-pitch-shift": [ - [16, ["inline-array", "vector", 2]] - ], + "doppler-pitch-shift": [[16, ["inline-array", "vector", 2]]], "(anon-function 1 gsound)": [ [16, ["array", "symbol", 4]], @@ -176,6 +174,19 @@ ], "matrix<-parented-transformq!": [[16, "vector"]], + "(method 9 cylinder)": [ + [48, "cylinder-verts"], + [432, "cylinder-verts"], + [816, "matrix"], + [880, "matrix"] + ], + + "(method 9 cylinder-flat)": [ + [48, "cylinder-flat-verts"], + [208, "cylinder-flat-verts"], + [368, "matrix"], + [432, "vector"] + ], "want-to-board?": [ [16, "vector"], diff --git a/decompiler/config/jak2/type_casts.jsonc b/decompiler/config/jak2/type_casts.jsonc index 5a568fb107..dc24f43041 100644 --- a/decompiler/config/jak2/type_casts.jsonc +++ b/decompiler/config/jak2/type_casts.jsonc @@ -510,50 +510,22 @@ "update-mood-village1": [[[21, 66], "gp", "(pointer float)"]], "update-mood-consite": [[[84, 110], "s4", "(pointer float)"]], "desaturate-mood-colors": [[[20, 92], "a0", "(inline-array mood-color)"]], - "ramdisk-load": [ - [[7, 12], "v1", "ramdisk-rpc-load"] - ], - "(method 10 engine-sound-pers)": [ - [[2, 19], "v1", "sound-rpc-set-param"] - ], + "ramdisk-load": [[[7, 12], "v1", "ramdisk-rpc-load"]], + "(method 10 engine-sound-pers)": [[[2, 19], "v1", "sound-rpc-set-param"]], - "check-irx-version": [ - [[3, 51], "gp", "sound-rpc-get-irx-version"] - ], + "check-irx-version": [[[3, 51], "gp", "sound-rpc-get-irx-version"]], - "sound-bank-iop-store": [ - [[7, 11], "v1", "sound-rpc-bank-cmd"] - ], - "sound-bank-iop-free": [ - [[7, 12], "v1", "sound-rpc-bank-cmd"] - ], - "sound-bank-load": [ - [[7, 12], "v1", "sound-rpc-load-bank"] - ], - "sound-bank-load-from-iop": [ - [[7, 12], "v1", "sound-rpc-load-bank"] - ], - "sound-bank-load-from-ee": [ - [[8, 14], "v1", "sound-rpc-load-bank"] - ], - "sound-bank-unload": [ - [[6, 11], "v1", "sound-rpc-unload-bank"] - ], - "sound-music-load": [ - [[6, 11], "v1", "sound-rpc-load-music"] - ], - "sound-music-unload": [ - [[3, 8], "v1", "sound-rpc-unload-music"] - ], - "set-language": [ - [[7, 12], "v1", "sound-rpc-set-language"] - ], - "sound-set-stereo-mode": [ - [[4, 9], "v1", "sound-rpc-set-stereo-mode"] - ], - "list-sounds": [ - [[3, 7], "v1", "sound-rpc-list-sounds"] - ], + "sound-bank-iop-store": [[[7, 11], "v1", "sound-rpc-bank-cmd"]], + "sound-bank-iop-free": [[[7, 12], "v1", "sound-rpc-bank-cmd"]], + "sound-bank-load": [[[7, 12], "v1", "sound-rpc-load-bank"]], + "sound-bank-load-from-iop": [[[7, 12], "v1", "sound-rpc-load-bank"]], + "sound-bank-load-from-ee": [[[8, 14], "v1", "sound-rpc-load-bank"]], + "sound-bank-unload": [[[6, 11], "v1", "sound-rpc-unload-bank"]], + "sound-music-load": [[[6, 11], "v1", "sound-rpc-load-music"]], + "sound-music-unload": [[[3, 8], "v1", "sound-rpc-unload-music"]], + "set-language": [[[7, 12], "v1", "sound-rpc-set-language"]], + "sound-set-stereo-mode": [[[4, 9], "v1", "sound-rpc-set-stereo-mode"]], + "list-sounds": [[[3, 7], "v1", "sound-rpc-list-sounds"]], "string->sound-name": [[[2, 18], "a1", "(pointer uint8)"]], "sound-set-volume": [[[3, 16], "v1", "sound-rpc-set-master-volume"]], "sound-set-reverb": [[[5, 25], "v1", "sound-rpc-set-reverb"]], @@ -602,5 +574,15 @@ [3, "v1", "target"], [14, "a0", "target"] ], + "(method 10 history)": [[[8, 10], "a1", "history-elt"]], + "(method 10 history-iterator)": [[[20, 35], "a2", "history-elt"]], + "command-get-time": [[119, "gp", "(pointer float)"]], + "command-get-param": [[122, "gp", "(pointer float)"]], + "command-get-entity": [[10, "gp", "process"]], + "print-game-text": [ + [225, "v1", "float"], + [241, "v1", "float"] + ], + "placeholder-do-not-add-below": [] } diff --git a/decompiler/config/jak2/var_names.jsonc b/decompiler/config/jak2/var_names.jsonc index 9f7fbc64db..5d7b8716c8 100644 --- a/decompiler/config/jak2/var_names.jsonc +++ b/decompiler/config/jak2/var_names.jsonc @@ -83,5 +83,17 @@ "vars": { "v1-2": "current-gun" } + }, + + "(method 10 cylinder)": { + "args": ["obj", "ray1", "ray2"] + }, + + "ripple-make-request": { + "args": ["waveform", "effect"] + }, + + "command-get-entity": { + "args": ["search", "fallback"] } } diff --git a/decompiler/config/jak2_ntsc_v1.jsonc b/decompiler/config/jak2_ntsc_v1.jsonc index d80f54495b..0f56c255b9 100644 --- a/decompiler/config/jak2_ntsc_v1.jsonc +++ b/decompiler/config/jak2_ntsc_v1.jsonc @@ -7,7 +7,7 @@ // if you want to filter to only some object names. // it will make the decompiler much faster. - "allowed_objects": ["mood-tables"], + "allowed_objects": [], "banned_objects": ["effect-control"], //////////////////////////// diff --git a/goal_src/jak2/engine/camera/cam-debug-h.gc b/goal_src/jak2/engine/camera/cam-debug-h.gc index 488162fb01..9502a1f16a 100644 --- a/goal_src/jak2/engine/camera/cam-debug-h.gc +++ b/goal_src/jak2/engine/camera/cam-debug-h.gc @@ -5,6 +5,9 @@ ;; name in dgo: cam-debug-h ;; dgos: ENGINE, GAME +;; NOTE - for cylinder +(define-extern camera-line (function vector vector vector4w none)) + ;; DECOMP BEGINS (declare-file (debug)) diff --git a/goal_src/jak2/engine/data/font-data.gc b/goal_src/jak2/engine/data/font-data.gc index e7171e5576..8673e272de 100644 --- a/goal_src/jak2/engine/data/font-data.gc +++ b/goal_src/jak2/engine/data/font-data.gc @@ -7,3 +7,514 @@ ;; DECOMP BEGINS +(define *font12-table* (new 'static 'inline-array vector 250 + (new 'static 'vector :x 0.0039 :y 0.0009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0976 :y 0.0009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.1914 :y 0.0009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.2851 :y 0.0009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.3789 :y 0.0009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.4726 :y 0.0009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.5664 :y 0.0009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.6601 :y 0.0009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.7539 :y 0.0009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.8476 :y 0.0009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0039 :y 0.0322 :z 1.0 :w 15.0) + (new 'static 'vector :x 0.0976 :y 0.0322 :z 1.0 :w 15.0) + (new 'static 'vector :x 0.1914 :y 0.0322 :z 1.0 :w 15.0) + (new 'static 'vector :x 0.2851 :y 0.0322 :z 1.0 :w 15.0) + (new 'static 'vector :x 0.3789 :y 0.0322 :z 1.0 :w 15.0) + (new 'static 'vector :x 0.4726 :y 0.0322 :z 1.0 :w 15.0) + (new 'static 'vector :x 0.5664 :y 0.0322 :z 1.0 :w 15.0) + (new 'static 'vector :x 0.6601 :y 0.0322 :z 1.0 :w 12.0) + (new 'static 'vector :x 0.7539 :y 0.0322 :z 1.0 :w 13.5) + (new 'static 'vector :x 0.8476 :y 0.0322 :z 1.0 :w 15.0) + (new 'static 'vector :x 0.0039 :y 0.0634 :z 1.0 :w 15.0) + (new 'static 'vector :x 0.0976 :y 0.0634 :z 1.0 :w 22.5) + (new 'static 'vector :x 0.1914 :y 0.0634 :z 1.0 :w 19.5) + (new 'static 'vector :x 0.2851 :y 0.0634 :z 1.0 :w 13.5) + (new 'static 'vector :x 0.3789 :y 0.0634 :z 1.0 :w 12.0) + (new 'static 'vector :x 0.4726 :y 0.0634 :z 1.0 :w 15.0) + (new 'static 'vector :x 0.5664 :y 0.0634 :z 1.0 :w 10.5) + (new 'static 'vector :x 0.6601 :y 0.0634 :z 1.0 :w 12.0) + (new 'static 'vector :x 0.7539 :y 0.0634 :z 1.0 :w 10.5) + (new 'static 'vector :x 0.8476 :y 0.0634 :z 1.0 :w 15.0) + (new 'static 'vector :x 0.0039 :y 0.0947 :z 1.0 :w 16.5) + (new 'static 'vector :x 0.0976 :y 0.0947 :z 1.0 :w 18.0) + (new 'static 'vector :x 0.1914 :y 0.0947 :z 1.0 :w 10.5) + (new 'static 'vector :x 0.2851 :y 0.0947 :z 1.0 :w 7.5) + (new 'static 'vector :x 0.3789 :y 0.0947 :z 1.0 :w 12.0) + (new 'static 'vector :x 0.4726 :y 0.0947 :z 1.0 :w 12.0) + (new 'static 'vector :x 0.5664 :y 0.0947 :z 1.0 :w 12.0) + (new 'static 'vector :x 0.6601 :y 0.0947 :z 1.0 :w 13.5) + (new 'static 'vector :x 0.7539 :y 0.0947 :z 1.0 :w 7.5) + (new 'static 'vector :x 0.8476 :y 0.0947 :z 1.0 :w 13.5) + (new 'static 'vector :x 0.0039 :y 0.1259 :z 1.0 :w 7.5) + (new 'static 'vector :x 0.0976 :y 0.1259 :z 1.0 :w 13.5) + (new 'static 'vector :x 0.1914 :y 0.1259 :z 1.0 :w 16.5) + (new 'static 'vector :x 0.2851 :y 0.1259 :z 1.0 :w 11.25) + (new 'static 'vector :x 0.3789 :y 0.1259 :z 1.0 :w 16.5) + (new 'static 'vector :x 0.4726 :y 0.1259 :z 1.0 :w 16.5) + (new 'static 'vector :x 0.5664 :y 0.1259 :z 1.0 :w 16.5) + (new 'static 'vector :x 0.6601 :y 0.1259 :z 1.0 :w 16.5) + (new 'static 'vector :x 0.7539 :y 0.1259 :z 1.0 :w 16.5) + (new 'static 'vector :x 0.8476 :y 0.1259 :z 1.0 :w 18.0) + (new 'static 'vector :x 0.0039 :y 0.1572 :z 1.0 :w 18.0) + (new 'static 'vector :x 0.0976 :y 0.1572 :z 1.0 :w 15.0) + (new 'static 'vector :x 0.1914 :y 0.1572 :z 1.0 :w 7.5) + (new 'static 'vector :x 0.2851 :y 0.1572 :z 1.0 :w 7.5) + (new 'static 'vector :x 0.3789 :y 0.1572 :z 1.0 :w 12.0) + (new 'static 'vector :x 0.4726 :y 0.1572 :z 1.0 :w 13.5) + (new 'static 'vector :x 0.5664 :y 0.1572 :z 1.0 :w 12.0) + (new 'static 'vector :x 0.6601 :y 0.1572 :z 1.0 :w 13.5) + (new 'static 'vector :x 0.7539 :y 0.1572 :z 1.0 :w 18.0) + (new 'static 'vector :x 0.8476 :y 0.1572 :z 1.0 :w 17.25) + (new 'static 'vector :x 0.0039 :y 0.1884 :z 1.0 :w 15.0) + (new 'static 'vector :x 0.0976 :y 0.1884 :z 1.0 :w 13.5) + (new 'static 'vector :x 0.1914 :y 0.1884 :z 1.0 :w 15.75) + (new 'static 'vector :x 0.2851 :y 0.1884 :z 1.0 :w 13.5) + (new 'static 'vector :x 0.3789 :y 0.1884 :z 1.0 :w 14.25) + (new 'static 'vector :x 0.4726 :y 0.1884 :z 1.0 :w 15.0) + (new 'static 'vector :x 0.5664 :y 0.1884 :z 1.0 :w 13.5) + (new 'static 'vector :x 0.6601 :y 0.1884 :z 1.0 :w 7.5) + (new 'static 'vector :x 0.7539 :y 0.1884 :z 1.0 :w 15.0) + (new 'static 'vector :x 0.8476 :y 0.1884 :z 1.0 :w 15.0) + (new 'static 'vector :x 0.0039 :y 0.2197 :z 1.0 :w 15.75) + (new 'static 'vector :x 0.0976 :y 0.2197 :z 1.0 :w 19.5) + (new 'static 'vector :x 0.1914 :y 0.2197 :z 1.0 :w 15.0) + (new 'static 'vector :x 0.2851 :y 0.2197 :z 1.0 :w 15.0) + (new 'static 'vector :x 0.3789 :y 0.2197 :z 1.0 :w 13.5) + (new 'static 'vector :x 0.4726 :y 0.2197 :z 1.0 :w 15.0) + (new 'static 'vector :x 0.5664 :y 0.2197 :z 1.0 :w 15.75) + (new 'static 'vector :x 0.6601 :y 0.2197 :z 1.0 :w 12.75) + (new 'static 'vector :x 0.7539 :y 0.2197 :z 1.0 :w 13.5) + (new 'static 'vector :x 0.8476 :y 0.2197 :z 1.0 :w 15.0) + (new 'static 'vector :x 0.0039 :y 0.2509 :z 1.0 :w 15.0) + (new 'static 'vector :x 0.0976 :y 0.2509 :z 1.0 :w 18.0) + (new 'static 'vector :x 0.1914 :y 0.2509 :z 1.0 :w 17.25) + (new 'static 'vector :x 0.2851 :y 0.2509 :z 1.0 :w 13.5) + (new 'static 'vector :x 0.3789 :y 0.2509 :z 1.0 :w 13.5) + (new 'static 'vector :x 0.4726 :y 0.2509 :z 1.0 :w 9.0) + (new 'static 'vector :x 0.5664 :y 0.2509 :z 1.0 :w 13.5) + (new 'static 'vector :x 0.6601 :y 0.2509 :z 1.0 :w 10.5) + (new 'static 'vector :x 0.7539 :y 0.2509 :z 1.0 :w 19.5) + (new 'static 'vector :x 0.8476 :y 0.2509 :z 1.0 :w 13.5) + (new 'static 'vector :x 0.0039 :y 0.2822 :z 1.0 :w 6.0) + (new 'static 'vector :x 0.0976 :y 0.2822 :z 1.0 :w 14.25) + (new 'static 'vector :x 0.1914 :y 0.2822 :z 1.0 :w 13.5) + (new 'static 'vector :x 0.2851 :y 0.2822 :z 1.0 :w 12.0) + (new 'static 'vector :x 0.3789 :y 0.2822 :z 1.0 :w 13.5) + (new 'static 'vector :x 0.4726 :y 0.2822 :z 1.0 :w 12.75) + (new 'static 'vector :x 0.5664 :y 0.2822 :z 1.0 :w 12.75) + (new 'static 'vector :x 0.6601 :y 0.2822 :z 1.0 :w 17.25) + (new 'static 'vector :x 0.7539 :y 0.2822 :z 1.0 :w 13.5) + (new 'static 'vector :x 0.8476 :y 0.2822 :z 1.0 :w 9.0) + (new 'static 'vector :x 0.0039 :y 0.3134 :z 1.0 :w 13.5) + (new 'static 'vector :x 0.0976 :y 0.3134 :z 1.0 :w 14.25) + (new 'static 'vector :x 0.1914 :y 0.3134 :z 1.0 :w 9.75) + (new 'static 'vector :x 0.2851 :y 0.3134 :z 1.0 :w 18.5) + (new 'static 'vector :x 0.3789 :y 0.3134 :z 1.0 :w 14.25) + (new 'static 'vector :x 0.4726 :y 0.3134 :z 1.0 :w 12.0) + (new 'static 'vector :x 0.5664 :y 0.3134 :z 1.0 :w 13.5) + (new 'static 'vector :x 0.6601 :y 0.3134 :z 1.0 :w 15.0) + (new 'static 'vector :x 0.7539 :y 0.3134 :z 1.0 :w 12.0) + (new 'static 'vector :x 0.8476 :y 0.3134 :z 1.0 :w 10.5) + (new 'static 'vector :x 0.0039 :y 0.3447 :z 1.0 :w 12.0) + (new 'static 'vector :x 0.0976 :y 0.3447 :z 1.0 :w 12.75) + (new 'static 'vector :x 0.1914 :y 0.3447 :z 1.0 :w 13.5) + (new 'static 'vector :x 0.2851 :y 0.3447 :z 1.0 :w 18.0) + (new 'static 'vector :x 0.3789 :y 0.3447 :z 1.0 :w 13.5) + (new 'static 'vector :x 0.4726 :y 0.3447 :z 1.0 :w 16.5) + (new 'static 'vector :x 0.5664 :y 0.3447 :z 1.0 :w 12.0) + (new 'static 'vector :x 0.6601 :y 0.3447 :z 1.0 :w 10.5) + (new 'static 'vector :x 0.7539 :y 0.3447 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.8476 :y 0.3447 :z 1.0 :w 12.0) + (new 'static 'vector :x 0.0039 :y 0.3759 :z 1.0 :w 13.5) + (new 'static 'vector :x 0.0976 :y 0.3759 :z 1.0 :w 13.5) + (new 'static 'vector :x 0.1914 :y 0.3759 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.2851 :y 0.3759 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.3789 :y 0.3759 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.4726 :y 0.3759 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.5664 :y 0.3759 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.6601 :y 0.3759 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.7539 :y 0.3759 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.8476 :y 0.3759 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0039 :y 0.4072 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0976 :y 0.4072 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.1914 :y 0.4072 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.2851 :y 0.4072 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.3789 :y 0.4072 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.4726 :y 0.4072 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.5664 :y 0.4072 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.6601 :y 0.4072 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.7539 :y 0.4072 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.8476 :y 0.4072 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0039 :y 0.4384 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0976 :y 0.4384 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.1914 :y 0.4384 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.2851 :y 0.4384 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.3789 :y 0.4384 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.4726 :y 0.4384 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.5664 :y 0.4384 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.6601 :y 0.4384 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.7539 :y 0.4384 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.8476 :y 0.4384 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0039 :y 0.4697 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0976 :y 0.4697 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.1914 :y 0.4697 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.2851 :y 0.4697 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.3789 :y 0.4697 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.4726 :y 0.4697 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.5664 :y 0.4697 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.6601 :y 0.4697 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.7539 :y 0.4697 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.8476 :y 0.4697 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0039 :y 0.5009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0976 :y 0.5009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.1914 :y 0.5009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.2851 :y 0.5009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.3789 :y 0.5009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.4726 :y 0.5009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.5664 :y 0.5009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.6601 :y 0.5009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.7539 :y 0.5009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.8476 :y 0.5009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0039 :y 0.5322 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0976 :y 0.5322 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.1914 :y 0.5322 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.2851 :y 0.5322 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.3789 :y 0.5322 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.4726 :y 0.5322 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.5664 :y 0.5322 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.6601 :y 0.5322 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.7539 :y 0.5322 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.8476 :y 0.5322 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0039 :y 0.5634 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0976 :y 0.5634 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.1914 :y 0.5634 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.2851 :y 0.5634 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.3789 :y 0.5634 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.4726 :y 0.5634 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.5664 :y 0.5634 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.6601 :y 0.5634 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.7539 :y 0.5634 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.8476 :y 0.5634 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0039 :y 0.5947 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0976 :y 0.5947 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.1914 :y 0.5947 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.2851 :y 0.5947 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.3789 :y 0.5947 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.4726 :y 0.5947 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.5664 :y 0.5947 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.6601 :y 0.5947 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.7539 :y 0.5947 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.8476 :y 0.5947 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0039 :y 0.6259 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0976 :y 0.6259 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.1914 :y 0.6259 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.2851 :y 0.6259 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.3789 :y 0.6259 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.4726 :y 0.6259 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.5664 :y 0.6259 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.6601 :y 0.6259 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.7539 :y 0.6259 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.8476 :y 0.6259 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0039 :y 0.6572 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0976 :y 0.6572 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.1914 :y 0.6572 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.2851 :y 0.6572 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.3789 :y 0.6572 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.4726 :y 0.6572 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.5664 :y 0.6572 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.6601 :y 0.6572 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.7539 :y 0.6572 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.8476 :y 0.6572 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0039 :y 0.6884 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0976 :y 0.6884 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.1914 :y 0.6884 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.2851 :y 0.6884 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.3789 :y 0.6884 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.4726 :y 0.6884 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.5664 :y 0.6884 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.6601 :y 0.6884 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.7539 :y 0.6884 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.8476 :y 0.6884 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0039 :y 0.7197 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0976 :y 0.7197 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.1914 :y 0.7197 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.2851 :y 0.7197 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.3789 :y 0.7197 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.4726 :y 0.7197 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.5664 :y 0.7197 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.6601 :y 0.7197 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.7539 :y 0.7197 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.8476 :y 0.7197 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0039 :y 0.7509 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0976 :y 0.7509 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.1914 :y 0.7509 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.2851 :y 0.7509 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.3789 :y 0.7509 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.4726 :y 0.7509 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.5664 :y 0.7509 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.6601 :y 0.7509 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.7539 :y 0.7509 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.8476 :y 0.7509 :z 1.0 :w 16.0) + ) + ) + +(define *font24-table* (new 'static 'inline-array vector 250 + (new 'static 'vector :x 0.0039 :y 0.0009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0976 :y 0.0009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.1914 :y 0.0009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.2851 :y 0.0009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.3789 :y 0.0009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.4726 :y 0.0009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.5664 :y 0.0009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.6601 :y 0.0009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.7539 :y 0.0009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.8476 :y 0.0009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0039 :y 0.0322 :z 1.0 :w 12.0) + (new 'static 'vector :x 0.0976 :y 0.0322 :z 1.0 :w 12.0) + (new 'static 'vector :x 0.1914 :y 0.0322 :z 1.0 :w 19.5) + (new 'static 'vector :x 0.2851 :y 0.0322 :z 1.0 :w 15.0) + (new 'static 'vector :x 0.3789 :y 0.0322 :z 1.0 :w 12.0) + (new 'static 'vector :x 0.4726 :y 0.0322 :z 1.0 :w 12.0) + (new 'static 'vector :x 0.5664 :y 0.0322 :z 1.0 :w 12.0) + (new 'static 'vector :x 0.6601 :y 0.0322 :z 1.0 :w 11.0) + (new 'static 'vector :x 0.7539 :y 0.0322 :z 1.0 :w 21.0) + (new 'static 'vector :x 0.8476 :y 0.0322 :z 1.0 :w 12.0) + (new 'static 'vector :x 0.0039 :y 0.0634 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.0976 :y 0.0634 :z 1.0 :w 27.0) + (new 'static 'vector :x 0.1914 :y 0.0634 :z 1.0 :w 27.0) + (new 'static 'vector :x 0.2851 :y 0.0634 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.3789 :y 0.0634 :z 1.0 :w 27.0) + (new 'static 'vector :x 0.4726 :y 0.0634 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.5664 :y 0.0634 :z 1.0 :w 15.0) + (new 'static 'vector :x 0.6601 :y 0.0634 :z 1.0 :w 11.0) + (new 'static 'vector :x 0.7539 :y 0.0634 :z 1.0 :w 17.0) + (new 'static 'vector :x 0.8476 :y 0.0634 :z 1.0 :w 17.5) + (new 'static 'vector :x 0.0039 :y 0.0947 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.0976 :y 0.0947 :z 1.0 :w 26.0) + (new 'static 'vector :x 0.1914 :y 0.0947 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.2851 :y 0.0947 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.3789 :y 0.0947 :z 1.0 :w 14.0) + (new 'static 'vector :x 0.4726 :y 0.0947 :z 1.0 :w 14.0) + (new 'static 'vector :x 0.5664 :y 0.0947 :z 1.0 :w 22.5) + (new 'static 'vector :x 0.6601 :y 0.0947 :z 1.0 :w 22.0) + (new 'static 'vector :x 0.7539 :y 0.0947 :z 1.0 :w 11.0) + (new 'static 'vector :x 0.8476 :y 0.0947 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0039 :y 0.1259 :z 1.0 :w 11.0) + (new 'static 'vector :x 0.0976 :y 0.1259 :z 1.0 :w 18.0) + (new 'static 'vector :x 0.1914 :y 0.1259 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.2851 :y 0.1259 :z 1.0 :w 14.0) + (new 'static 'vector :x 0.3789 :y 0.1259 :z 1.0 :w 22.0) + (new 'static 'vector :x 0.4726 :y 0.1259 :z 1.0 :w 23.0) + (new 'static 'vector :x 0.5664 :y 0.1259 :z 1.0 :w 23.0) + (new 'static 'vector :x 0.6601 :y 0.1259 :z 1.0 :w 22.0) + (new 'static 'vector :x 0.7539 :y 0.1259 :z 1.0 :w 23.0) + (new 'static 'vector :x 0.8476 :y 0.1259 :z 1.0 :w 23.0) + (new 'static 'vector :x 0.0039 :y 0.1572 :z 1.0 :w 23.0) + (new 'static 'vector :x 0.0976 :y 0.1572 :z 1.0 :w 22.0) + (new 'static 'vector :x 0.1914 :y 0.1572 :z 1.0 :w 11.0) + (new 'static 'vector :x 0.2851 :y 0.1572 :z 1.0 :w 20.0) + (new 'static 'vector :x 0.3789 :y 0.1572 :z 1.0 :w 25.0) + (new 'static 'vector :x 0.4726 :y 0.1572 :z 1.0 :w 21.0) + (new 'static 'vector :x 0.5664 :y 0.1572 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.6601 :y 0.1572 :z 1.0 :w 22.0) + (new 'static 'vector :x 0.7539 :y 0.1572 :z 1.0 :w 21.0) + (new 'static 'vector :x 0.8476 :y 0.1572 :z 1.0 :w 26.0) + (new 'static 'vector :x 0.0039 :y 0.1884 :z 1.0 :w 22.0) + (new 'static 'vector :x 0.0976 :y 0.1884 :z 1.0 :w 27.0) + (new 'static 'vector :x 0.1914 :y 0.1884 :z 1.0 :w 25.0) + (new 'static 'vector :x 0.2851 :y 0.1884 :z 1.0 :w 19.0) + (new 'static 'vector :x 0.3789 :y 0.1884 :z 1.0 :w 18.0) + (new 'static 'vector :x 0.4726 :y 0.1884 :z 1.0 :w 26.0) + (new 'static 'vector :x 0.5664 :y 0.1884 :z 1.0 :w 25.0) + (new 'static 'vector :x 0.6601 :y 0.1884 :z 1.0 :w 10.0) + (new 'static 'vector :x 0.7539 :y 0.1884 :z 1.0 :w 19.0) + (new 'static 'vector :x 0.8476 :y 0.1884 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.0039 :y 0.2197 :z 1.0 :w 18.0) + (new 'static 'vector :x 0.0976 :y 0.2197 :z 1.0 :w 26.0) + (new 'static 'vector :x 0.1914 :y 0.2197 :z 1.0 :w 25.0) + (new 'static 'vector :x 0.2851 :y 0.2197 :z 1.0 :w 27.0) + (new 'static 'vector :x 0.3789 :y 0.2197 :z 1.0 :w 21.0) + (new 'static 'vector :x 0.4726 :y 0.2197 :z 1.0 :w 27.0) + (new 'static 'vector :x 0.5664 :y 0.2197 :z 1.0 :w 19.0) + (new 'static 'vector :x 0.6601 :y 0.2197 :z 1.0 :w 21.0) + (new 'static 'vector :x 0.7539 :y 0.2197 :z 1.0 :w 22.0) + (new 'static 'vector :x 0.8476 :y 0.2197 :z 1.0 :w 23.0) + (new 'static 'vector :x 0.0039 :y 0.2509 :z 1.0 :w 26.0) + (new 'static 'vector :x 0.0976 :y 0.2509 :z 1.0 :w 27.0) + (new 'static 'vector :x 0.1914 :y 0.2509 :z 1.0 :w 27.0) + (new 'static 'vector :x 0.2851 :y 0.2509 :z 1.0 :w 25.0) + (new 'static 'vector :x 0.3789 :y 0.2509 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.4726 :y 0.2509 :z 1.0 :w 15.0) + (new 'static 'vector :x 0.5664 :y 0.2509 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.6601 :y 0.2509 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.7539 :y 0.2509 :z 1.0 :w 27.0) + (new 'static 'vector :x 0.8476 :y 0.2509 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.0039 :y 0.2822 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.0976 :y 0.2822 :z 1.0 :w 25.0) + (new 'static 'vector :x 0.1914 :y 0.2822 :z 1.0 :w 25.0) + (new 'static 'vector :x 0.2851 :y 0.2822 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.3789 :y 0.2822 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.4726 :y 0.2822 :z 1.0 :w 25.0) + (new 'static 'vector :x 0.5664 :y 0.2822 :z 1.0 :w 17.0) + (new 'static 'vector :x 0.6601 :y 0.2822 :z 1.0 :w 25.0) + (new 'static 'vector :x 0.7539 :y 0.2822 :z 1.0 :w 22.0) + (new 'static 'vector :x 0.8476 :y 0.2822 :z 1.0 :w 10.0) + (new 'static 'vector :x 0.0039 :y 0.3134 :z 1.0 :w 18.0) + (new 'static 'vector :x 0.0976 :y 0.3134 :z 1.0 :w 23.0) + (new 'static 'vector :x 0.1914 :y 0.3134 :z 1.0 :w 10.0) + (new 'static 'vector :x 0.2851 :y 0.3134 :z 1.0 :w 27.0) + (new 'static 'vector :x 0.3789 :y 0.3134 :z 1.0 :w 22.0) + (new 'static 'vector :x 0.4726 :y 0.3134 :z 1.0 :w 25.0) + (new 'static 'vector :x 0.5664 :y 0.3134 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.6601 :y 0.3134 :z 1.0 :w 25.0) + (new 'static 'vector :x 0.7539 :y 0.3134 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.8476 :y 0.3134 :z 1.0 :w 17.0) + (new 'static 'vector :x 0.0039 :y 0.3447 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0976 :y 0.3447 :z 1.0 :w 22.0) + (new 'static 'vector :x 0.1914 :y 0.3447 :z 1.0 :w 21.0) + (new 'static 'vector :x 0.2851 :y 0.3447 :z 1.0 :w 27.0) + (new 'static 'vector :x 0.3789 :y 0.3447 :z 1.0 :w 23.0) + (new 'static 'vector :x 0.4726 :y 0.3447 :z 1.0 :w 23.0) + (new 'static 'vector :x 0.5664 :y 0.3447 :z 1.0 :w 20.0) + (new 'static 'vector :x 0.6601 :y 0.3447 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.7539 :y 0.3447 :z 1.0 :w 27.0) + (new 'static 'vector :x 0.8476 :y 0.3447 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.0039 :y 0.3759 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.0976 :y 0.3759 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.1914 :y 0.3759 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.2851 :y 0.3759 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.3789 :y 0.3759 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.4726 :y 0.3759 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.5664 :y 0.3759 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.6601 :y 0.3759 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.7539 :y 0.3759 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.8476 :y 0.3759 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.0039 :y 0.4072 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.0976 :y 0.4072 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.1914 :y 0.4072 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.2851 :y 0.4072 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.3789 :y 0.4072 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.4726 :y 0.4072 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.5664 :y 0.4072 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.6601 :y 0.4072 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.7539 :y 0.4072 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.8476 :y 0.4072 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.0039 :y 0.4384 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.0976 :y 0.4384 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.1914 :y 0.4384 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.2851 :y 0.4384 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.3789 :y 0.4384 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.4726 :y 0.4384 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.5664 :y 0.4384 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.6601 :y 0.4384 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.7539 :y 0.4384 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.8476 :y 0.4384 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.0039 :y 0.4697 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.0976 :y 0.4697 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.1914 :y 0.4697 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.2851 :y 0.4697 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.3789 :y 0.4697 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.4726 :y 0.4697 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.5664 :y 0.4697 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.6601 :y 0.4697 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.7539 :y 0.4697 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.8476 :y 0.4697 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.0039 :y 0.5009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0976 :y 0.5009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.1914 :y 0.5009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.2851 :y 0.5009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.3789 :y 0.5009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.4726 :y 0.5009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.5664 :y 0.5009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.6601 :y 0.5009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.7539 :y 0.5009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.8476 :y 0.5009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0039 :y 0.5322 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0976 :y 0.5322 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.1914 :y 0.5322 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.2851 :y 0.5322 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.3789 :y 0.5322 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.4726 :y 0.5322 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.5664 :y 0.5322 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.6601 :y 0.5322 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.7539 :y 0.5322 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.8476 :y 0.5322 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0039 :y 0.5634 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0976 :y 0.5634 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.1914 :y 0.5634 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.2851 :y 0.5634 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.3789 :y 0.5634 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.4726 :y 0.5634 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.5664 :y 0.5634 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.6601 :y 0.5634 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.7539 :y 0.5634 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.8476 :y 0.5634 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0039 :y 0.5947 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0976 :y 0.5947 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.1914 :y 0.5947 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.2851 :y 0.5947 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.3789 :y 0.5947 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.4726 :y 0.5947 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.5664 :y 0.5947 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.6601 :y 0.5947 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.7539 :y 0.5947 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.8476 :y 0.5947 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0039 :y 0.6259 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0976 :y 0.6259 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.1914 :y 0.6259 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.2851 :y 0.6259 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.3789 :y 0.6259 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.4726 :y 0.6259 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.5664 :y 0.6259 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.6601 :y 0.6259 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.7539 :y 0.6259 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.8476 :y 0.6259 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0039 :y 0.6572 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0976 :y 0.6572 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.1914 :y 0.6572 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.2851 :y 0.6572 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.3789 :y 0.6572 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.4726 :y 0.6572 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.5664 :y 0.6572 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.6601 :y 0.6572 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.7539 :y 0.6572 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.8476 :y 0.6572 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0039 :y 0.6884 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0976 :y 0.6884 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.1914 :y 0.6884 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.2851 :y 0.6884 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.3789 :y 0.6884 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.4726 :y 0.6884 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.5664 :y 0.6884 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.6601 :y 0.6884 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.7539 :y 0.6884 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.8476 :y 0.6884 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0039 :y 0.7197 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0976 :y 0.7197 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.1914 :y 0.7197 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.2851 :y 0.7197 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.3789 :y 0.7197 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.4726 :y 0.7197 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.5664 :y 0.7197 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.6601 :y 0.7197 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.7539 :y 0.7197 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.8476 :y 0.7197 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0039 :y 0.7509 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0976 :y 0.7509 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.1914 :y 0.7509 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.2851 :y 0.7509 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.3789 :y 0.7509 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.4726 :y 0.7509 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.5664 :y 0.7509 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.6601 :y 0.7509 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.7539 :y 0.7509 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.8476 :y 0.7509 :z 1.0 :w 16.0) + ) + ) + + + + diff --git a/goal_src/jak2/engine/debug/debug.gc b/goal_src/jak2/engine/debug/debug.gc index 40555b6dd1..1ae7fae00a 100644 --- a/goal_src/jak2/engine/debug/debug.gc +++ b/goal_src/jak2/engine/debug/debug.gc @@ -5,5 +5,7 @@ ;; name in dgo: debug ;; dgos: ENGINE, GAME +(define-extern add-debug-line2d (function symbol bucket-id vector vector vector symbol)) + ;; DECOMP BEGINS diff --git a/goal_src/jak2/engine/debug/history.gc b/goal_src/jak2/engine/debug/history.gc index 8892552c09..8fce6ed715 100644 --- a/goal_src/jak2/engine/debug/history.gc +++ b/goal_src/jak2/engine/debug/history.gc @@ -5,5 +5,433 @@ ;; name in dgo: history ;; dgos: ENGINE, GAME +(defenum collide-status + :bitfield #t + :type uint64 + (on-surface 0) + (on-ground 1) + (touch-surface 2) + (touch-wall 3) + (touch-ceiling 4) + (touch-actor 5) + (on-special-surface 6) + (touch-edge 7) + (no-touch 8) + (blocked 9) + (on-water 10) + (impact-surface 11) + (touch-background 12) + (stuck 13) + (touch-ceiling-sticky 14) + (glance 15) + (probe-hit 16) + ) + +(defenum history-channel + :type uint8 + (trans 0) + (transv 1) + (transv-in 2) + (transv-out 3) + (intersect 4) + (local-normal 5) + (surface-normal 6) + (collide-status 7) + (pat 8) + (time 9) + (friction 10)) + ;; DECOMP BEGINS +;; this file is debug only +(declare-file (debug)) +(when *debug-segment* +(defun history-channel->string ((arg0 history-channel)) + (case arg0 + (((history-channel friction)) + "friction" + ) + (((history-channel transv-out)) + "transv-out" + ) + (((history-channel pat)) + "pat" + ) + (((history-channel transv-in)) + "transv-in" + ) + (((history-channel trans)) + "trans" + ) + (((history-channel local-normal)) + "local-normal" + ) + (((history-channel collide-status)) + "collide-status" + ) + (((history-channel time)) + "time" + ) + (((history-channel intersect)) + "intersect" + ) + (((history-channel surface-normal)) + "surface-normal" + ) + (((history-channel transv)) + "transv" + ) + (else + "*unknown*" + ) + ) + ) + +(deftype history-elt (structure) + ((record-tag-bytes uint8 4 :offset-assert 0) + (record-tag uint32 :offset 0) + (record-id uint16 :offset 0) + (owner uint8 :offset 2) + (channel history-channel :offset-assert 4) + (timestamp time-frame :offset-assert 8) + (origin vector :inline :offset-assert 16) + (bytes uint8 16 :offset-assert 32) + (vector vector :inline :offset 32) + (float float :offset 32) + (collide-status collide-status :offset 32) + (collide-reaction-flag uint32 :offset 40) + (pat pat-surface :offset 32) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) + +(deftype history-iterator (basic) + ((max-age uint32 :offset-assert 4) + (owner uint8 :offset-assert 8) + (proc process :offset-assert 12) + (out basic :offset-assert 16) + (channel-mask uint64 :offset-assert 24) + (index int32 :offset-assert 32) + (done? symbol :offset-assert 36) + ) + :method-count-assert 12 + :size-assert #x28 + :flag-assert #xc00000028 + (:methods + (new (symbol type uint32) _type_ 0) + (frame-counter-delta (_type_ history-elt) time-frame 9) + (update-entries! (_type_) history-elt 10) + (history-iterator-method-11 (_type_ history-elt) float 11) + ) + ) + +(deftype history (basic) + ((alloc-index int32 :offset-assert 4) + (allocated-length int32 :offset-assert 8) + (elts history-elt :inline :dynamic :offset 16) + ) + :method-count-assert 11 + :size-assert #x10 + :flag-assert #xb00000010 + (:methods + (new (symbol type int) _type_ 0) + (clear-record-tags! (_type_ history-channel uint uint) history-elt 9) + (clear-history-entries! (_type_) none 10) + ) + ) + +(defmethod length history ((obj history)) + (-> obj allocated-length) + ) + +(defmethod asize-of history ((obj history)) + (the-as int (+ (-> obj type size) (* 48 (-> obj allocated-length)))) + ) + +(defmethod new history ((allocation symbol) (type-to-make type) (arg0 int)) + (let ((v0-0 (object-new allocation type-to-make (the-as int (+ (-> type-to-make size) (* 48 arg0)))))) + (set! (-> v0-0 allocated-length) arg0) + v0-0 + ) + ) + +(defmethod clear-history-entries! history ((obj history)) + "Iterates through each [[history-elt]] in the `elt` dynamic array + For each entry: + - clear `timestamp` + - clear `record-tag`" + (set! (-> obj alloc-index) 0) + (countdown (v1-0 (-> obj allocated-length)) + (let ((a1-3 (-> obj elts v1-0))) + (set! (-> a1-3 record-tag) (the-as uint 0)) + (set! (-> a1-3 timestamp) 0) + ) + 0 + ) + 0 + (none) + ) + +(define-perm *history* history (new 'debug 'history 4096)) + +(clear-history-entries! *history*) + +;; WARN: new jak 2 until loop case, check carefully +(defmethod clear-record-tags! history ((obj history) (arg0 history-channel) (arg1 uint) (arg2 uint)) + "First grab the latest [[history-elt]] at `alloc-index` + 1. update it's `channel`, `record-id` and `owner` from the provided args + 2. - if it's `record-tag` is zero -- return it + - otherwise, iterate through all `elts` until one is found that does not match it's `timestamp` + - if not `0` out the `record-tag` for that elt and continue iteration" + (let* ((t1-0 (-> obj alloc-index)) + (v1-0 (-> obj elts)) + (v0-0 (-> v1-0 t1-0)) + ) + (let ((t2-0 (-> v0-0 record-tag)) + (t0-2 (-> v0-0 timestamp)) + ) + (set! (-> v0-0 channel) arg0) + (set! (-> v0-0 record-id) arg1) + (set! (-> v0-0 owner) arg2) + (set! (-> v0-0 timestamp) (-> *display* base-clock frame-counter)) + (let* ((a1-4 (-> obj allocated-length)) + (a2-2 (mod (+ t1-0 1) a1-4)) + ) + (set! (-> obj alloc-index) a2-2) + (when (nonzero? t2-0) + (until #f + (let ((a0-4 (-> v1-0 a2-2))) + (if (!= t0-2 (-> a0-4 timestamp)) + (return v0-0) + ) + (set! (-> a0-4 record-tag) (the-as uint 0)) + ) + (set! a2-2 (mod (+ a2-2 1) a1-4)) + ) + #f + ) + ) + ) + v0-0 + ) + ) + +(defmethod new history-iterator ((allocation symbol) (type-to-make type) (arg0 uint32)) + (let ((v0-0 (object-new allocation type-to-make (the-as int (-> type-to-make size))))) + (set! (-> v0-0 max-age) (the-as uint arg0)) + (set! (-> v0-0 owner) (the-as uint 1)) + (set! (-> v0-0 proc) #f) + (set! (-> v0-0 out) *stdcon*) + (set! (-> v0-0 channel-mask) (the-as uint -1)) + (set! (-> v0-0 index) (-> *history* alloc-index)) + (set! (-> v0-0 done?) #f) + v0-0 + ) + ) + +(defmethod update-entries! history-iterator ((obj history-iterator)) + "Iterate through each [[history-elt]] in [[*history*]] + - If we hit the end set `done?` to true + - If the `timestamp` on the elt, minus the current framecounter exceeds `max-age`, we are also done, return #f + - However if we find an elt who's `owner` matches the iterator's, break out early returning that `elt`" + (let ((v1-0 *history*) + (a1-2 (-> *display* base-clock frame-counter)) + ) + (while (not (-> obj done?)) + (let ((a2-1 (+ (-> obj index) -1))) + (if (< a2-1 0) + (set! a2-1 (+ (-> v1-0 allocated-length) -1)) + ) + (set! (-> obj index) a2-1) + (if (= a2-1 (-> v1-0 alloc-index)) + (set! (-> obj done?) #t) + ) + (let ((a2-5 (-> v1-0 elts a2-1))) + (when (nonzero? (-> a2-5 record-tag)) + (when (< (the-as time-frame (-> obj max-age)) (- a1-2 (-> a2-5 timestamp))) + (set! (-> obj done?) #t) + (return (the-as history-elt #f)) + ) + (if (= (-> a2-5 owner) (-> obj owner)) + (return a2-5) + ) + ) + ) + ) + ) + ) + (the-as history-elt #f) + ) + +(defmethod history-iterator-method-11 history-iterator ((obj history-iterator) (arg0 history-elt)) + "TODO - Unsure of the purpose + `min(1.0, ((history-elt.timestamp - 1) + frame-counter) / (max-age + 1)) - 1.0`" + (- 1.0 (fmin 1.0 (/ (the float (+ (- 1 (-> arg0 timestamp)) (-> *display* base-clock frame-counter))) + (the float (+ (-> obj max-age) 1)) + ) + ) + ) + ) + +(defmethod frame-counter-delta history-iterator ((obj history-iterator) (arg0 history-elt)) + "Returns the difference between [[*display*]]'s `base-clock.frame-counter` and the elt's `timestamp`" + (- (-> *display* base-clock frame-counter) (-> arg0 timestamp)) + ) + +(defun history-print ((arg0 history-iterator)) + (local-vars + (sv-16 basic) + (sv-24 int) + (sv-32 int) + (sv-40 history-elt) + (sv-48 time-frame) + (sv-56 uint) + (sv-64 collide-status) + (sv-72 float) + (sv-80 string) + (sv-96 string) + ) + (set! sv-16 (-> arg0 out)) + (set! sv-24 -1) + (set! sv-32 0) + (until #f + (set! sv-40 (update-entries! arg0)) + (if (not sv-40) + (goto cfg-71) + ) + (when (logtest? (-> arg0 channel-mask) (ash 1 (-> sv-40 channel))) + (set! sv-48 (frame-counter-delta arg0 sv-40)) + (set! sv-56 (-> sv-40 record-id)) + (cond + ((!= sv-24 sv-48) + (set! sv-24 (the-as int sv-48)) + (set! sv-32 (the-as int sv-56)) + (format sv-16 "~3D ~4X " sv-48 (-> sv-40 record-id)) + ) + ((!= sv-32 sv-56) + (set! sv-32 (the-as int sv-56)) + (format sv-16 " ~4X " (-> sv-40 record-id)) + ) + (else + (format sv-16 " ") + ) + ) + (let ((v1-22 (-> sv-40 channel))) + (cond + ((or (= v1-22 (history-channel trans)) + (or (= v1-22 (history-channel transv)) + (= v1-22 (history-channel transv-in)) + (= v1-22 (history-channel transv-out)) + (= v1-22 (history-channel intersect)) + ) + ) + (format + sv-16 + "~-15S: ~14Mm ~14Mm ~14Mm~%" + (history-channel->string (-> sv-40 channel)) + (-> sv-40 vector x) + (-> sv-40 vector y) + (-> sv-40 vector z) + ) + ) + ((or (= v1-22 (history-channel local-normal)) (= v1-22 (history-channel surface-normal))) + (format + sv-16 + "~-15S: ~14f ~14f ~14f~%" + (history-channel->string (-> sv-40 channel)) + (-> sv-40 vector x) + (-> sv-40 vector y) + (-> sv-40 vector z) + ) + ) + ((= v1-22 (history-channel pat)) + (let* ((s2-0 (-> sv-40 vector x)) + (s5-2 format) + (s4-2 sv-16) + (s3-2 "~-15S: #x~6X mode:~-8S material:~-10S event:~S~%") + (s1-0 (history-channel->string (-> sv-40 channel))) + (s0-0 s2-0) + ) + (set! sv-80 (pat-mode->string (the-as pat-surface s2-0))) + (set! sv-96 (pat-material->string (the-as pat-surface s2-0))) + (let ((t2-0 (pat-event->string (the-as pat-surface s2-0)))) + (s5-2 s4-2 s3-2 s1-0 s0-0 sv-80 sv-96 t2-0) + ) + ) + ) + ((= v1-22 (history-channel collide-status)) + (set! sv-64 (-> sv-40 collide-status)) + (set! sv-72 (-> sv-40 vector z)) + (format sv-16 "~-15S: #x~6X " (history-channel->string (-> sv-40 channel)) sv-64) + (let ((s5-4 sv-64)) + (if (= (logand s5-4 (collide-status touch-background)) (collide-status touch-background)) + (format sv-16 "touch-background ") + ) + (if (= (logand s5-4 (collide-status on-special-surface)) (collide-status on-special-surface)) + (format sv-16 "on-special-surface ") + ) + (if (= (logand s5-4 (collide-status touch-wall)) (collide-status touch-wall)) + (format sv-16 "touch-wall ") + ) + (if (= (logand s5-4 (collide-status on-surface)) (collide-status on-surface)) + (format sv-16 "on-surface ") + ) + (if (= (logand s5-4 (collide-status impact-surface)) (collide-status impact-surface)) + (format sv-16 "impact-surface ") + ) + (if (= (logand s5-4 (collide-status touch-ceiling)) (collide-status touch-ceiling)) + (format sv-16 "touch-ceiling ") + ) + (if (= (logand s5-4 (collide-status on-ground)) (collide-status on-ground)) + (format sv-16 "on-ground ") + ) + (if (= (logand s5-4 (collide-status glance)) (collide-status glance)) + (format sv-16 "glance ") + ) + (if (= (logand s5-4 (collide-status blocked)) (collide-status blocked)) + (format sv-16 "blocked ") + ) + (if (= (logand s5-4 (collide-status touch-edge)) (collide-status touch-edge)) + (format sv-16 "touch-edge ") + ) + (if (= (logand s5-4 (collide-status touch-ceiling-sticky)) (collide-status touch-ceiling-sticky)) + (format sv-16 "touch-ceiling-sticky ") + ) + (if (= (logand s5-4 (collide-status on-water)) (collide-status on-water)) + (format sv-16 "on-water ") + ) + (if (= (logand s5-4 (collide-status touch-actor)) (collide-status touch-actor)) + (format sv-16 "touch-actor ") + ) + (if (= (logand (collide-status probe-hit) s5-4) (collide-status probe-hit)) + (format sv-16 "probe-hit ") + ) + (if (= (logand s5-4 (collide-status stuck)) (collide-status stuck)) + (format sv-16 "stuck ") + ) + (if (= (logand s5-4 (collide-status no-touch)) (collide-status no-touch)) + (format sv-16 "no-touch ") + ) + (if (= (logand s5-4 (collide-status touch-surface)) (collide-status touch-surface)) + (format sv-16 "touch-surface ") + ) + ) + (format sv-16 " #x~6X~%" sv-72) + ) + ((= v1-22 (history-channel friction)) + (let ((f30-0 (-> sv-40 vector x))) + (format sv-16 "~-15S: ~f~%" (history-channel->string (-> sv-40 channel)) f30-0) + ) + ) + ) + ) + ) + ) + #f + (label cfg-71) + 0 + (none) + ) +) diff --git a/goal_src/jak2/engine/entity/entity-h.gc b/goal_src/jak2/engine/entity/entity-h.gc index 2ea91f8b09..f98240349d 100644 --- a/goal_src/jak2/engine/entity/entity-h.gc +++ b/goal_src/jak2/engine/entity/entity-h.gc @@ -16,7 +16,7 @@ (bit-5 5) (subtask-complete 6) (bit-7 7) - (bit-8 8) + (complete 8) (bit-9 9) (bit-10 10) ) diff --git a/goal_src/jak2/engine/game/game-info-h.gc b/goal_src/jak2/engine/game/game-info-h.gc index 42b2b2967a..33853bd9e3 100644 --- a/goal_src/jak2/engine/game/game-info-h.gc +++ b/goal_src/jak2/engine/game/game-info-h.gc @@ -13,7 +13,7 @@ (defenum mc-status-code :type uint32 ; (busy 0) - ; (ok 1) + (ok 1) ; (bad-handle 2) ; (format-failed 3) ; (internal-error 4) @@ -197,7 +197,7 @@ (:methods (continue-point-method-9 () none 9) (continue-point-method-10 () none 10) - (continue-point-method-11 () none 11) + (continue-point-method-11 (_type_) none 11) ) ) @@ -227,100 +227,100 @@ ) (deftype game-info (basic) - ((mode symbol :offset-assert 4) - (save-name basic :offset-assert 8) - (life float :offset-assert 12) - (life-max float :offset-assert 16) - (money float :offset-assert 20) - (money-total float :offset-assert 24) - (money-per-level uint8 32 :offset-assert 28) - (deaths-per-level uint8 32 :offset-assert 60) - (buzzer-total float :offset-assert 92) - (fuel float :offset-assert 96) - (gem float :offset-assert 100) - (gem-total float :offset-assert 104) - (skill float :offset-assert 108) - (skill-total float :offset-assert 112) - (karma float :offset-assert 116) - (eco-pill-dark float :offset-assert 120) - (eco-pill-dark-total float :offset-assert 124) - (features uint64 :offset-assert 128) - (debug-features uint64 :offset-assert 136) - (secrets uint32 :offset-assert 144) - (unknown-pad1 uint32 :offset-assert 148) - (purchase-secrets uint32 :offset-assert 152) - (unknown-pad2 uint32 :offset-assert 156) - (gun-type int32 :offset-assert 160) - (gun-ammo float 4 :offset-assert 164) - (shield float :offset-assert 180) - (score float :offset-assert 184) - (score-owner uint64 :offset-assert 192) - (timer uint64 :offset-assert 200) - (timer-owner uint64 :offset-assert 208) - (timer-flash basic :offset-assert 216) - (counter float :offset-assert 220) - (counter-flash basic :offset-assert 224) - (attack-id uint32 :offset-assert 228) - (perm-list entity-perm-array :offset-assert 232) - (task-perm-list entity-perm-array :offset-assert 236) - (current-continue continue-point :offset-assert 240) - (last-continue basic :offset-assert 244) - (unknown-pad3 uint32 3 :offset-assert 248) - (task-counter uint32 :offset-assert 260) - (unknown-pad4 uint32 :offset-assert 264) - (level-opened uint8 32 :offset-assert 268) - (total-deaths int32 :offset-assert 300) - (continue-deaths int32 :offset-assert 304) - (task-deaths int32 :offset-assert 308) - (total-trys int32 :offset-assert 312) - (game-start-time time-frame :offset-assert 320) - (continue-time time-frame :offset-assert 328) - (death-time time-frame :offset-assert 336) - (hit-time time-frame :offset-assert 344) - (task-pickup-time time-frame :offset-assert 352) - (unknown-array1 (array uint64) :offset-assert 360) - (unknown-array2 (array uint64) :offset-assert 364) - (unknown-array3 (array uint64) :offset-assert 368) - (death-pos vector-array :offset 372) - (stop-watch-start uint64 :offset-assert 376) - (stop-watch-stop uint64 :offset-assert 384) - (blackout-time time-frame :offset-assert 392) - (letterbox-time time-frame :offset-assert 400) - (hint-play-time time-frame :offset-assert 408) - (display-text-time time-frame :offset-assert 416) - (display-text-handle uint64 :offset-assert 424) - (death-movie-tick int32 :offset-assert 432) - (want-auto-save symbol :offset-assert 436) - (auto-save-proc handle :offset-assert 440) - (auto-save-status mc-status-code :offset-assert 448) - (auto-save-card int32 :offset-assert 452) - (auto-save-which int32 :offset-assert 456) - (auto-save-count int32 :offset-assert 460) - (pov-camera-handle uint64 :offset-assert 464) - (other-camera-handle uint64 :offset-assert 472) - (controller uint64 2 :offset-assert 480) - (race-timer uint64 :offset-assert 496) - (race-current-lap-count int32 :offset-assert 504) - (race-total-lap-count int32 :offset-assert 508) - (race-position int32 :offset-assert 512) - (race-number-turbos int32 :offset-assert 516) - (bot-health uint32 3 :offset-assert 520) - (demo-state uint32 :offset-assert 532) - (wanted-flash basic :offset-assert 536) - (distance float :offset-assert 540) - (kiosk-timeout uint64 :offset-assert 544) - (pause-start-time time-frame :offset-assert 552) - (game-score basic :offset-assert 560) - (goal float :offset-assert 564) - (miss float :offset-assert 568) - (miss-max float :offset-assert 572) - (unknown-array4 (array uint64) :offset-assert 576) - (live-eco-pill-count int32 :offset-assert 580) - (live-gem-count int32 :offset-assert 584) - (air-supply float :offset-assert 588) - (homing-beacon int32 :offset-assert 592) - (dark-eco-pickup int32 :offset-assert 596) - (green-eco-pickup int32 :offset-assert 600) + ((mode symbol :offset-assert 4) + (save-name string :offset-assert 8) + (life float :offset-assert 12) + (life-max float :offset-assert 16) + (money float :offset-assert 20) + (money-total float :offset-assert 24) + (money-per-level uint8 32 :offset-assert 28) + (deaths-per-level uint8 32 :offset-assert 60) + (buzzer-total float :offset-assert 92) + (fuel float :offset-assert 96) + (gem float :offset-assert 100) + (gem-total float :offset-assert 104) + (skill float :offset-assert 108) + (skill-total float :offset-assert 112) + (karma float :offset-assert 116) + (eco-pill-dark float :offset-assert 120) + (eco-pill-dark-total float :offset-assert 124) + (features uint64 :offset-assert 128) + (debug-features uint64 :offset-assert 136) + (secrets uint32 :offset-assert 144) + (unknown-pad1 uint32 :offset-assert 148) + (purchase-secrets uint32 :offset-assert 152) + (unknown-pad2 uint32 :offset-assert 156) + (gun-type int32 :offset-assert 160) + (gun-ammo float 4 :offset-assert 164) + (shield float :offset-assert 180) + (score float :offset-assert 184) + (score-owner uint64 :offset-assert 192) + (timer uint64 :offset-assert 200) + (timer-owner uint64 :offset-assert 208) + (timer-flash basic :offset-assert 216) + (counter float :offset-assert 220) + (counter-flash basic :offset-assert 224) + (attack-id uint32 :offset-assert 228) + (perm-list entity-perm-array :offset-assert 232) + (task-perm-list entity-perm-array :offset-assert 236) + (current-continue continue-point :offset-assert 240) + (last-continue continue-point :offset-assert 244) + (unknown-pad3 uint32 3 :offset-assert 248) + (task-counter uint32 :offset-assert 260) + (unknown-pad4 uint32 :offset-assert 264) + (level-opened uint8 32 :offset-assert 268) + (total-deaths int32 :offset-assert 300) + (continue-deaths int32 :offset-assert 304) + (task-deaths int32 :offset-assert 308) + (total-trys int32 :offset-assert 312) + (game-start-time time-frame :offset-assert 320) + (continue-time time-frame :offset-assert 328) + (death-time time-frame :offset-assert 336) + (hit-time time-frame :offset-assert 344) + (task-pickup-time time-frame :offset-assert 352) + (unknown-array1 (array uint64) :offset-assert 360) + (unknown-array2 (array uint64) :offset-assert 364) + (unknown-array3 (array uint64) :offset-assert 368) + (death-pos vector-array :offset 372) + (stop-watch-start uint64 :offset-assert 376) + (stop-watch-stop uint64 :offset-assert 384) + (blackout-time time-frame :offset-assert 392) + (letterbox-time time-frame :offset-assert 400) + (hint-play-time time-frame :offset-assert 408) + (display-text-time time-frame :offset-assert 416) + (display-text-handle uint64 :offset-assert 424) + (death-movie-tick int32 :offset-assert 432) + (want-auto-save symbol :offset-assert 436) + (auto-save-proc handle :offset-assert 440) + (auto-save-status mc-status-code :offset-assert 448) + (auto-save-card int32 :offset-assert 452) + (auto-save-which int32 :offset-assert 456) + (auto-save-count int32 :offset-assert 460) + (pov-camera-handle uint64 :offset-assert 464) + (other-camera-handle uint64 :offset-assert 472) + (controller uint64 2 :offset-assert 480) + (race-timer uint64 :offset-assert 496) + (race-current-lap-count int32 :offset-assert 504) + (race-total-lap-count int32 :offset-assert 508) + (race-position int32 :offset-assert 512) + (race-number-turbos int32 :offset-assert 516) + (bot-health uint32 3 :offset-assert 520) + (demo-state uint32 :offset-assert 532) + (wanted-flash basic :offset-assert 536) + (distance float :offset-assert 540) + (kiosk-timeout uint64 :offset-assert 544) + (pause-start-time time-frame :offset-assert 552) + (game-score (array highscore-info) :offset-assert 560) + (goal float :offset-assert 564) + (miss float :offset-assert 568) + (miss-max float :offset-assert 572) + (unknown-array4 (array uint64) :offset-assert 576) + (live-eco-pill-count int32 :offset-assert 580) + (live-gem-count int32 :offset-assert 584) + (air-supply float :offset-assert 588) + (homing-beacon int32 :offset-assert 592) + (dark-eco-pickup int32 :offset-assert 596) + (green-eco-pickup int32 :offset-assert 600) ) :method-count-assert 31 :size-assert #x25c @@ -328,8 +328,8 @@ (:methods (initialize! (_type_ symbol game-save string) _type_ 9) (game-info-method-10 () none 10) - (game-info-method-11 () none 11) - (game-info-method-12 () none 12) + (task-complete? (_type_ game-task) symbol 11) + (game-info-method-12 (_type_) none 12) (game-info-method-13 () none 13) (game-info-method-14 () none 14) (game-info-method-15 () none 15) diff --git a/goal_src/jak2/engine/game/settings.gc b/goal_src/jak2/engine/game/settings.gc index 60b43e351b..bb55c4b580 100644 --- a/goal_src/jak2/engine/game/settings.gc +++ b/goal_src/jak2/engine/game/settings.gc @@ -5,5 +5,8 @@ ;; name in dgo: settings ;; dgos: ENGINE, GAME +;; NOTE - for text +(define-extern *setting-control* setting-control) + ;; DECOMP BEGINS diff --git a/goal_src/jak2/engine/geometry/cylinder.gc b/goal_src/jak2/engine/geometry/cylinder.gc index f5616d82ba..4c6af26adf 100644 --- a/goal_src/jak2/engine/geometry/cylinder.gc +++ b/goal_src/jak2/engine/geometry/cylinder.gc @@ -7,3 +7,379 @@ ;; DECOMP BEGINS +(defmethod ray-capsule-intersect cylinder ((obj cylinder) (ray1 vector) (ray2 vector)) + (rlet ((acc :class vf) + (vf0 :class vf) + (vf1 :class vf) + (vf2 :class vf) + (vf3 :class vf) + (vf4 :class vf) + ) + (init-vf0-vector) + (let ((t2-0 (new 'stack-no-clear 'vector)) + (s4-0 (new 'stack-no-clear 'vector)) + ) + 0.0 + 0.0 + (let ((f30-0 (ray-cylinder-intersect ray1 ray2 (-> obj origin) (-> obj axis) (-> obj radius) (-> obj length) t2-0)) + ) + (let ((f0-5 (ray-sphere-intersect ray1 ray2 (-> obj origin) (-> obj radius)))) + (if (and (>= f0-5 0.0) (or (< f30-0 0.0) (< f0-5 f30-0))) + (set! f30-0 f0-5) + ) + ) + (let ((v1-5 s4-0)) + (let ((a0-3 (-> obj origin)) + (a1-3 (-> obj axis)) + (f0-6 (-> obj length)) + ) + (.lvf vf2 (&-> a1-3 quad)) + (.lvf vf1 (&-> a0-3 quad)) + (let ((a0-4 f0-6)) + (.mov vf3 a0-4) + ) + ) + (.add.x.vf vf4 vf0 vf0 :mask #b1000) + (.mul.x.vf acc vf2 vf3) + (.add.mul.w.vf vf4 vf1 vf0 acc :mask #b111) + (.svf (&-> v1-5 quad) vf4) + ) + (let ((f0-8 (ray-sphere-intersect ray1 ray2 s4-0 (-> obj radius)))) + (if (and (>= f0-8 0.0) (or (< f30-0 0.0) (< f0-8 f30-0))) + (set! f30-0 f0-8) + ) + ) + f30-0 + ) + ) + ) + ) + +(deftype cylinder-verts (structure) + ((vert vector 24 :inline :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #x180 + :flag-assert #x900000180 + ) + +(defmethod debug-draw cylinder ((obj cylinder) (arg0 vector4w)) + (local-vars + (sv-896 matrix) + (sv-912 vector) + (sv-928 vector) + (sv-944 vector) + (sv-960 vector) + (sv-976 vector) + (sv-992 vector) + (sv-1008 vector) + (sv-1024 vector) + (sv-1040 vector) + (sv-1056 vector) + (sv-1072 vector) + (sv-1088 vector) + ) + (rlet ((acc :class vf) + (vf0 :class vf) + (vf1 :class vf) + (vf2 :class vf) + (vf3 :class vf) + (vf4 :class vf) + (vf5 :class vf) + (vf6 :class vf) + ) + (init-vf0-vector) + (let ((s1-0 (new 'stack-no-clear 'vector)) + (s0-0 (new 'stack-no-clear 'vector)) + ) + (if (< 0.999 (fabs (-> obj axis y))) + (vector-cross! s1-0 (-> obj axis) (new 'static 'vector :z 1.0)) + (vector-cross! s1-0 (-> obj axis) (new 'static 'vector :y 1.0)) + ) + (vector-normalize! s1-0 (-> obj radius)) + (vector-float*! s0-0 (-> obj axis) (* 0.125 (-> obj length))) + (let ((s5-0 (new 'stack-no-clear 'cylinder-verts)) + (s4-0 (new 'stack-no-clear 'cylinder-verts)) + (s3-0 (new 'stack-no-clear 'matrix)) + ) + (matrix-axis-angle! s3-0 (-> obj axis) 4096.0) + (set! sv-896 (new 'stack-no-clear 'matrix)) + (vector-matrix*! (the-as vector sv-896) (-> obj origin) s3-0) + (let ((v1-6 (-> s3-0 trans))) + (.lvf vf4 (&-> (-> obj origin) quad)) + (.lvf vf5 (&-> sv-896 vector 0 quad)) + (.mov.vf vf6 vf0 :mask #b1000) + (.sub.vf vf6 vf4 vf5 :mask #b111) + (.svf (&-> v1-6 quad) vf6) + ) + (dotimes (v1-7 8) + (vector+! (-> s5-0 vert (+ v1-7 8)) (-> obj origin) s1-0) + (let ((a0-16 (-> s5-0 vert (+ v1-7 8)))) + (let ((a1-13 (-> s5-0 vert (+ v1-7 8))) + (a2-4 s0-0) + (f0-5 (the float v1-7)) + ) + (.lvf vf2 (&-> a2-4 quad)) + (.lvf vf1 (&-> a1-13 quad)) + (let ((a1-14 f0-5)) + (.mov vf3 a1-14) + ) + ) + (.add.x.vf vf4 vf0 vf0 :mask #b1000) + (.mul.x.vf acc vf2 vf3) + (.add.mul.w.vf vf4 vf1 vf0 acc :mask #b111) + (.svf (&-> a0-16 quad) vf4) + ) + ) + (dotimes (s0-1 8) + (set! sv-944 (-> s5-0 vert s0-1)) + (set! sv-912 (-> obj origin)) + (set! sv-928 s1-0) + (let ((f0-8 (cos (* 2048.0 (the float (- 7 s0-1)))))) + (.lvf vf2 (&-> sv-928 quad)) + (.lvf vf1 (&-> sv-912 quad)) + (let ((v1-19 f0-8)) + (.mov vf3 v1-19) + ) + ) + (.add.x.vf vf4 vf0 vf0 :mask #b1000) + (.mul.x.vf acc vf2 vf3) + (.add.mul.w.vf vf4 vf1 vf0 acc :mask #b111) + (.svf (&-> sv-944 quad) vf4) + (set! sv-992 (-> s5-0 vert s0-1)) + (set! sv-960 (-> s5-0 vert s0-1)) + (set! sv-976 (-> obj axis)) + (let ((f0-13 (* (- (-> obj radius)) (sin (* 2048.0 (the float (- 7 s0-1))))))) + (.lvf vf2 (&-> sv-976 quad)) + (.lvf vf1 (&-> sv-960 quad)) + (let ((v1-33 f0-13)) + (.mov vf3 v1-33) + ) + ) + (.add.x.vf vf4 vf0 vf0 :mask #b1000) + (.mul.x.vf acc vf2 vf3) + (.add.mul.w.vf vf4 vf1 vf0 acc :mask #b111) + (.svf (&-> sv-992 quad) vf4) + (set! sv-1040 (-> s5-0 vert (+ s0-1 16))) + (set! sv-1008 (-> obj origin)) + (set! sv-1024 s1-0) + (let ((f0-16 (cos (* 2048.0 (the float s0-1))))) + (.lvf vf2 (&-> sv-1024 quad)) + (.lvf vf1 (&-> sv-1008 quad)) + (let ((v1-43 f0-16)) + (.mov vf3 v1-43) + ) + ) + (.add.x.vf vf4 vf0 vf0 :mask #b1000) + (.mul.x.vf acc vf2 vf3) + (.add.mul.w.vf vf4 vf1 vf0 acc :mask #b111) + (.svf (&-> sv-1040 quad) vf4) + (set! sv-1088 (-> s5-0 vert (+ s0-1 16))) + (set! sv-1056 (-> s5-0 vert (+ s0-1 16))) + (set! sv-1072 (-> obj axis)) + (let ((f0-21 (+ (-> obj length) (* (-> obj radius) (sin (* 2048.0 (the float s0-1))))))) + (.lvf vf2 (&-> sv-1072 quad)) + (.lvf vf1 (&-> sv-1056 quad)) + (let ((v1-57 f0-21)) + (.mov vf3 v1-57) + ) + ) + (.add.x.vf vf4 vf0 vf0 :mask #b1000) + (.mul.x.vf acc vf2 vf3) + (.add.mul.w.vf vf4 vf1 vf0 acc :mask #b111) + (.svf (&-> sv-1088 quad) vf4) + ) + (dotimes (s2-1 16) + (dotimes (s1-1 24) + (vector-matrix*! (-> s4-0 vert s1-1) (-> s5-0 vert s1-1) s3-0) + (camera-line (-> s5-0 vert s1-1) (-> s4-0 vert s1-1) arg0) + (if (nonzero? s1-1) + (camera-line (-> s5-0 vert s1-1) (-> s5-0 vert (+ s1-1 -1)) arg0) + ) + ) + (let ((v1-77 s5-0)) + (set! s5-0 s4-0) + (set! s4-0 v1-77) + ) + ) + ) + ) + 0 + (none) + ) + ) + +(defun ray-arbitrary-circle-intersect ((arg0 vector) (arg1 vector) (arg2 vector) (arg3 vector) (arg4 float)) + (let* ((v1-1 (vector-! (new 'stack-no-clear 'vector) arg2 arg0)) + (f0-2 (/ (vector-dot v1-1 arg3) (vector-dot arg1 arg3))) + ) + (cond + ((or (< 1.0 f0-2) (< f0-2 0.0)) + -100000000.0 + ) + ((let ((a0-8 (new 'stack-no-clear 'vector))) + (vector-float*! a0-8 arg1 f0-2) + (vector-! a0-8 a0-8 v1-1) + (< (vector-dot a0-8 a0-8) (* arg4 arg4)) + ) + f0-2 + ) + (else + -100000000.0 + ) + ) + ) + ) + +(defmethod ray-flat-cyl-intersect cylinder-flat ((obj cylinder-flat) (arg0 vector) (arg1 vector)) + (rlet ((acc :class vf) + (vf0 :class vf) + (vf1 :class vf) + (vf2 :class vf) + (vf3 :class vf) + (vf4 :class vf) + ) + (init-vf0-vector) + (let ((gp-0 (new 'stack-no-clear 'vector)) + (s5-0 (new 'stack-no-clear 'vector)) + ) + 0.0 + 0.0 + (let ((f30-0 (ray-cylinder-intersect arg0 arg1 (-> obj origin) (-> obj axis) (-> obj radius) (-> obj length) gp-0)) + ) + (let ((f0-5 (ray-arbitrary-circle-intersect arg0 arg1 (-> obj origin) (-> obj axis) (-> obj radius)))) + (when (and (>= f0-5 0.0) (or (< f30-0 0.0) (< f0-5 f30-0))) + (set! f30-0 f0-5) + (set! (-> gp-0 quad) (-> obj origin quad)) + ) + ) + (let ((v1-5 s5-0)) + (let ((a0-5 (-> obj origin)) + (a1-3 (-> obj axis)) + (f0-6 (-> obj length)) + ) + (.lvf vf2 (&-> a1-3 quad)) + (.lvf vf1 (&-> a0-5 quad)) + (let ((a0-6 f0-6)) + (.mov vf3 a0-6) + ) + ) + (.add.x.vf vf4 vf0 vf0 :mask #b1000) + (.mul.x.vf acc vf2 vf3) + (.add.mul.w.vf vf4 vf1 vf0 acc :mask #b111) + (.svf (&-> v1-5 quad) vf4) + ) + (let ((f0-8 (ray-arbitrary-circle-intersect arg0 arg1 s5-0 (-> obj axis) (-> obj radius)))) + (when (and (>= f0-8 0.0) (or (< f30-0 0.0) (< f0-8 f30-0))) + (set! f30-0 f0-8) + (set! (-> gp-0 quad) (-> s5-0 quad)) + ) + ) + f30-0 + ) + ) + ) + ) + +(deftype cylinder-flat-verts (structure) + ((vert vector 10 :inline :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #xa0 + :flag-assert #x9000000a0 + ) + +(defmethod debug-draw cylinder-flat ((obj cylinder-flat) (arg0 vector4w)) + (local-vars (sv-448 vector)) + (rlet ((acc :class vf) + (vf0 :class vf) + (vf1 :class vf) + (vf2 :class vf) + (vf3 :class vf) + (vf4 :class vf) + (vf5 :class vf) + (vf6 :class vf) + ) + (init-vf0-vector) + (let ((s1-0 (new 'stack-no-clear 'vector)) + (s0-0 (new 'stack-no-clear 'vector)) + ) + (if (< 0.999 (fabs (-> obj axis y))) + (vector-cross! s1-0 (-> obj axis) (new 'static 'vector :z 1.0)) + (vector-cross! s1-0 (-> obj axis) (new 'static 'vector :y 1.0)) + ) + (vector-normalize! s1-0 (-> obj radius)) + (vector-float*! s0-0 (-> obj axis) (* 0.14285715 (-> obj length))) + (let ((s5-0 (new 'stack-no-clear 'cylinder-flat-verts)) + (s4-0 (new 'stack-no-clear 'cylinder-flat-verts)) + (s3-0 (new 'stack-no-clear 'matrix)) + ) + (matrix-axis-angle! s3-0 (-> obj axis) 4096.0) + (set! sv-448 (new 'stack-no-clear 'vector)) + (vector-matrix*! sv-448 (-> obj origin) s3-0) + (let ((v1-6 (-> s3-0 trans))) + (.lvf vf4 (&-> (-> obj origin) quad)) + (.lvf vf5 (&-> sv-448 quad)) + (.mov.vf vf6 vf0 :mask #b1000) + (.sub.vf vf6 vf4 vf5 :mask #b111) + (.svf (&-> v1-6 quad) vf6) + ) + (dotimes (v1-7 8) + (vector+! (-> s5-0 vert (+ v1-7 1)) (-> obj origin) s1-0) + (let ((a0-16 (-> s5-0 vert (+ v1-7 1)))) + (let ((a1-13 (-> s5-0 vert (+ v1-7 1))) + (a2-4 s0-0) + (f0-5 (the float v1-7)) + ) + (.lvf vf2 (&-> a2-4 quad)) + (.lvf vf1 (&-> a1-13 quad)) + (let ((a1-14 f0-5)) + (.mov vf3 a1-14) + ) + ) + (.add.x.vf vf4 vf0 vf0 :mask #b1000) + (.mul.x.vf acc vf2 vf3) + (.add.mul.w.vf vf4 vf1 vf0 acc :mask #b111) + (.svf (&-> a0-16 quad) vf4) + ) + ) + (set! (-> s5-0 vert 0 quad) (-> obj origin quad)) + (let ((v1-11 (-> s5-0 vert 9))) + (let ((a0-19 (-> obj origin)) + (a1-15 (-> obj axis)) + (f0-6 (-> obj length)) + ) + (.lvf vf2 (&-> a1-15 quad)) + (.lvf vf1 (&-> a0-19 quad)) + (let ((a0-20 f0-6)) + (.mov vf3 a0-20) + ) + ) + (.add.x.vf vf4 vf0 vf0 :mask #b1000) + (.mul.x.vf acc vf2 vf3) + (.add.mul.w.vf vf4 vf1 vf0 acc :mask #b111) + (.svf (&-> v1-11 quad) vf4) + ) + (dotimes (s2-1 16) + (dotimes (s1-1 10) + (vector-matrix*! (-> s4-0 vert s1-1) (-> s5-0 vert s1-1) s3-0) + (camera-line (-> s5-0 vert s1-1) (-> s4-0 vert s1-1) arg0) + (if (nonzero? s1-1) + (camera-line (-> s5-0 vert s1-1) (-> s5-0 vert (+ s1-1 -1)) arg0) + ) + ) + (let ((v1-28 s5-0)) + (set! s5-0 s4-0) + (set! s4-0 v1-28) + ) + ) + ) + ) + 0 + (none) + ) + ) + + + + diff --git a/goal_src/jak2/engine/level/level-h.gc b/goal_src/jak2/engine/level/level-h.gc index 5ee0c35b95..ef33befdef 100644 --- a/goal_src/jak2/engine/level/level-h.gc +++ b/goal_src/jak2/engine/level/level-h.gc @@ -88,6 +88,8 @@ (movie2 18) ;; 0x40000 ) +(declare-type game-text-id uint32) + ;; DECOMP BEGINS (deftype level-vis-info (basic) @@ -126,14 +128,14 @@ (other-name-1 symbol :offset 24) (packages pair :offset-assert 32) (memory-mode uint32 :offset-assert 36) - (music-bank basic :offset-assert 40) - (ambient-sounds basic :offset-assert 44) + (music-bank symbol :offset-assert 40) + (ambient-sounds symbol :offset-assert 44) (sound-reverb float :offset-assert 48) (mood-func symbol :offset-assert 52) (mood-init symbol :offset-assert 56) - (ocean basic :offset-assert 60) - (sky basic :offset-assert 64) - (use-camera-other basic :offset-assert 68) + (ocean symbol :offset-assert 60) + (sky symbol :offset-assert 64) + (use-camera-other symbol :offset-assert 68) (part-engine-max int32 :offset-assert 72) (city-map-bits uint64 :offset-assert 80) (continues pair :offset-assert 88) @@ -154,7 +156,7 @@ (kill-func symbol :offset-assert 156) (borrow-size uint16 2 :offset-assert 160) (borrow-level symbol 2 :offset-assert 164) - (borrow-display? basic 2 :offset-assert 172) + (borrow-display? symbol 2 :offset-assert 172) (base-task-mask task-mask :offset-assert 180) (texture-anim symbol 10 :offset-assert 184) (texture-anim-tfrag symbol :offset 184) @@ -179,6 +181,7 @@ (ocean-alpha float :offset-assert 280) (extra-sound-bank pair :offset-assert 284) ) + :pack-me :method-count-assert 9 :size-assert #x120 :flag-assert #x900000120 @@ -287,7 +290,7 @@ (debug-print-region-splitbox (_type_ vector object) none 20) (get-art-group-by-name (_type_ string) art-group 21) (level-method-22 () none 22) - (level-method-23 () none 23) + (lookup-text (_type_ game-text-id symbol) string 23) (level-method-24 () none 24) (birth (_type_) _type_ 25) (level-status-update! (_type_ symbol) _type_ 26) diff --git a/goal_src/jak2/engine/physics/trajectory-h.gc b/goal_src/jak2/engine/physics/trajectory-h.gc index 6fa9b9dac7..e2d5aea5f2 100644 --- a/goal_src/jak2/engine/physics/trajectory-h.gc +++ b/goal_src/jak2/engine/physics/trajectory-h.gc @@ -45,7 +45,7 @@ (new (symbol type process-drawable int float collide-spec) _type_ 0) (initialize (_type_ process-drawable int float collide-spec) impact-control :behavior process 9) (update-from-cspace (_type_) none 10) - (impact-control-method-11 () none 11) + (impact-control-method-11 (_type_) none 11) ) ) diff --git a/goal_src/jak2/engine/target/mech_suit/mech-h.gc b/goal_src/jak2/engine/target/mech_suit/mech-h.gc index a7941d1c84..97c6924ee0 100644 --- a/goal_src/jak2/engine/target/mech_suit/mech-h.gc +++ b/goal_src/jak2/engine/target/mech_suit/mech-h.gc @@ -7,3 +7,101 @@ ;; DECOMP BEGINS +(deftype mech-info (basic) + ((entity basic :offset-assert 4) + (hud uint64 1 :offset-assert 8) + (mech-trans vector :inline :offset-assert 16) + (mech-quat vector :inline :offset-assert 32) + (mech-scale vector :inline :offset-assert 48) + (engine-sound-id uint32 :offset-assert 64) + (engine-sound-volume float :offset-assert 68) + (engine-sound-pitch float :offset-assert 72) + (thrust-sound-id uint32 :offset-assert 76) + (drag-sound-id uint32 :offset-assert 80) + (whine-sound-id uint32 :offset-assert 84) + (mech-start-time time-frame :offset-assert 88) + (mech-time time-frame :offset-assert 96) + (no-get-off-time time-frame :offset-assert 104) + (stick-lock basic :offset-assert 112) + (stick-off basic :offset-assert 116) + (forward-vel meters :offset-assert 120) + (jump-thrust meters :offset-assert 124) + (jump-thrust-fuel float :offset-assert 128) + (unstuck-time time-frame :offset-assert 136) + (stuck-count int32 :offset-assert 144) + (back-touch-point vector :inline :offset-assert 160) + (back-touch-trans vector :inline :offset-assert 176) + (back-touch-time time-frame :offset-assert 192) + (attack-id uint32 :offset-assert 200) + (shield-value float :offset-assert 204) + (shield-max float :offset-assert 208) + (walk-anim-leg int32 :offset-assert 212) + (state-impact? symbol 1 :offset-assert 216) + (state-impact impact-control 1 :inline :offset-assert 224) + (thruster-flame-width meters :offset-assert 304) + (thruster-flame-length meters :offset-assert 308) + (thruster-local-pos vector 2 :inline :offset-assert 320) + (exhaust-local-pos vector 2 :inline :offset-assert 352) + (exhaust-local-dir vector 2 :inline :offset-assert 384) + (smoke-local-pos vector 2 :inline :offset-assert 416) + (smoke-local-vel vector 2 :inline :offset-assert 448) + (particle-system-2d basic :offset-assert 480) + (particle-system-3d basic :offset-assert 484) + (part-thruster basic :offset-assert 488) + (part-thruster-scale-x sp-field-init-spec :offset-assert 492) + (part-thruster-scale-y sp-field-init-spec :offset-assert 496) + (part-quat quaternion :offset-assert 500) + (part-vel vector :offset-assert 504) + ) + :method-count-assert 9 + :size-assert #x1fc + :flag-assert #x9000001fc + ) + +(let ((a0-2 (new 'static 'skeleton-group + :name "skel-mech" + :extra #f + :info #f + :art-group-name "mech" + :bounds (new 'static 'vector :w 18432.0) + :version #x7 + :shadow 2 + :origin-joint-index 3 + :shadow-joint-index 3 + ) + ) + ) + (set! (-> a0-2 jgeo) 0) + (set! (-> a0-2 janim) 3) + (set! (-> a0-2 mgeo 0) 1) + (set! (-> a0-2 lod-dist 0) 4095996000.0) + (add-to-loading-level a0-2) + ) + +(define *mech-shadow-control* + (new 'static 'shadow-control :settings (new 'static 'shadow-settings + :center (new 'static 'vector :w (the-as float #xa)) + :shadow-dir (new 'static 'vector :y -1.0 :w 614400.0) + :bot-plane (new 'static 'plane :y 1.0 :w 81920.0) + :top-plane (new 'static 'plane :y 1.0 :w 2048.0) + ) + ) + ) + +(let ((a0-3 (new 'static 'skeleton-group + :name "skel-mech-explode" + :extra #f + :info #f + :art-group-name "mech" + :bounds (new 'static 'vector :w 18432.0) + :version #x7 + :origin-joint-index 3 + ) + ) + ) + (set! (-> a0-3 jgeo) 39) + (set! (-> a0-3 janim) 41) + (set! (-> a0-3 mgeo 0) 40) + (set! (-> a0-3 lod-dist 0) 4095996000.0) + (add-to-loading-level a0-3) + ) diff --git a/goal_src/jak2/engine/ui/text-h.gc b/goal_src/jak2/engine/ui/text-h.gc index ae3ef9559d..f6f88428b3 100644 --- a/goal_src/jak2/engine/ui/text-h.gc +++ b/goal_src/jak2/engine/ui/text-h.gc @@ -18,10 +18,10 @@ ) (deftype game-text-info (basic) - ((length int32 :offset-assert 4) - (language-id int32 :offset-assert 8) - (group-name string :offset-assert 12) - (data game-text :dynamic :offset-assert 16) + ((length int32 :offset-assert 4) + (language-id int32 :offset-assert 8) + (group-name string :offset-assert 12) + (data game-text :inline :dynamic :offset-assert 16) ) :method-count-assert 10 :size-assert #x10 diff --git a/goal_src/jak2/engine/util/script-h.gc b/goal_src/jak2/engine/util/script-h.gc index 0c968da783..9a81c0e4a5 100644 --- a/goal_src/jak2/engine/util/script-h.gc +++ b/goal_src/jak2/engine/util/script-h.gc @@ -11,9 +11,9 @@ ;; DECOMP BEGINS (deftype script-form (structure) - ((name basic :offset-assert 0) - (spec basic :offset-assert 4) - (func basic :offset-assert 8) + ((name string :offset-assert 0) + (spec basic :offset-assert 4) + (func basic :offset-assert 8) ) :method-count-assert 10 :size-assert #xc diff --git a/goal_src/jak2/engine/util/sync-info-h.gc b/goal_src/jak2/engine/util/sync-info-h.gc index 099b3c8668..73b0636d4d 100644 --- a/goal_src/jak2/engine/util/sync-info-h.gc +++ b/goal_src/jak2/engine/util/sync-info-h.gc @@ -36,13 +36,13 @@ :size-assert #x10 :flag-assert #x1000000010 (:methods - (sync-info-method-9 () none 9) - (sync-info-method-10 () none 10) - (sync-info-method-11 () none 11) - (sync-info-method-12 () none 12) - (sync-info-method-13 () none 13) - (sync-info-method-14 () none 14) - (sync-info-method-15 () none 15) + (sync-info-method-9 (_type_) none 9) + (get-phase-offset (_type_) float 10) + (get-norm! (_type_) float 11) + (multiply-norm! (_type_ float object) float 12) + (initialize! () none 13) + (sync-info-method-14 (_type_ time-frame) time-frame 14) + (sync-info-method-15 (_type_ float) none 15) ) ) diff --git a/test/decompiler/reference/jak2/engine/data/font-data_REF.gc b/test/decompiler/reference/jak2/engine/data/font-data_REF.gc new file mode 100644 index 0000000000..c1ed64212e --- /dev/null +++ b/test/decompiler/reference/jak2/engine/data/font-data_REF.gc @@ -0,0 +1,516 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition for symbol *font12-table*, type (inline-array vector) +(define *font12-table* (new 'static 'inline-array vector 250 + (new 'static 'vector :x 0.0039 :y 0.0009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0976 :y 0.0009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.1914 :y 0.0009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.2851 :y 0.0009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.3789 :y 0.0009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.4726 :y 0.0009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.5664 :y 0.0009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.6601 :y 0.0009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.7539 :y 0.0009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.8476 :y 0.0009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0039 :y 0.0322 :z 1.0 :w 15.0) + (new 'static 'vector :x 0.0976 :y 0.0322 :z 1.0 :w 15.0) + (new 'static 'vector :x 0.1914 :y 0.0322 :z 1.0 :w 15.0) + (new 'static 'vector :x 0.2851 :y 0.0322 :z 1.0 :w 15.0) + (new 'static 'vector :x 0.3789 :y 0.0322 :z 1.0 :w 15.0) + (new 'static 'vector :x 0.4726 :y 0.0322 :z 1.0 :w 15.0) + (new 'static 'vector :x 0.5664 :y 0.0322 :z 1.0 :w 15.0) + (new 'static 'vector :x 0.6601 :y 0.0322 :z 1.0 :w 12.0) + (new 'static 'vector :x 0.7539 :y 0.0322 :z 1.0 :w 13.5) + (new 'static 'vector :x 0.8476 :y 0.0322 :z 1.0 :w 15.0) + (new 'static 'vector :x 0.0039 :y 0.0634 :z 1.0 :w 15.0) + (new 'static 'vector :x 0.0976 :y 0.0634 :z 1.0 :w 22.5) + (new 'static 'vector :x 0.1914 :y 0.0634 :z 1.0 :w 19.5) + (new 'static 'vector :x 0.2851 :y 0.0634 :z 1.0 :w 13.5) + (new 'static 'vector :x 0.3789 :y 0.0634 :z 1.0 :w 12.0) + (new 'static 'vector :x 0.4726 :y 0.0634 :z 1.0 :w 15.0) + (new 'static 'vector :x 0.5664 :y 0.0634 :z 1.0 :w 10.5) + (new 'static 'vector :x 0.6601 :y 0.0634 :z 1.0 :w 12.0) + (new 'static 'vector :x 0.7539 :y 0.0634 :z 1.0 :w 10.5) + (new 'static 'vector :x 0.8476 :y 0.0634 :z 1.0 :w 15.0) + (new 'static 'vector :x 0.0039 :y 0.0947 :z 1.0 :w 16.5) + (new 'static 'vector :x 0.0976 :y 0.0947 :z 1.0 :w 18.0) + (new 'static 'vector :x 0.1914 :y 0.0947 :z 1.0 :w 10.5) + (new 'static 'vector :x 0.2851 :y 0.0947 :z 1.0 :w 7.5) + (new 'static 'vector :x 0.3789 :y 0.0947 :z 1.0 :w 12.0) + (new 'static 'vector :x 0.4726 :y 0.0947 :z 1.0 :w 12.0) + (new 'static 'vector :x 0.5664 :y 0.0947 :z 1.0 :w 12.0) + (new 'static 'vector :x 0.6601 :y 0.0947 :z 1.0 :w 13.5) + (new 'static 'vector :x 0.7539 :y 0.0947 :z 1.0 :w 7.5) + (new 'static 'vector :x 0.8476 :y 0.0947 :z 1.0 :w 13.5) + (new 'static 'vector :x 0.0039 :y 0.1259 :z 1.0 :w 7.5) + (new 'static 'vector :x 0.0976 :y 0.1259 :z 1.0 :w 13.5) + (new 'static 'vector :x 0.1914 :y 0.1259 :z 1.0 :w 16.5) + (new 'static 'vector :x 0.2851 :y 0.1259 :z 1.0 :w 11.25) + (new 'static 'vector :x 0.3789 :y 0.1259 :z 1.0 :w 16.5) + (new 'static 'vector :x 0.4726 :y 0.1259 :z 1.0 :w 16.5) + (new 'static 'vector :x 0.5664 :y 0.1259 :z 1.0 :w 16.5) + (new 'static 'vector :x 0.6601 :y 0.1259 :z 1.0 :w 16.5) + (new 'static 'vector :x 0.7539 :y 0.1259 :z 1.0 :w 16.5) + (new 'static 'vector :x 0.8476 :y 0.1259 :z 1.0 :w 18.0) + (new 'static 'vector :x 0.0039 :y 0.1572 :z 1.0 :w 18.0) + (new 'static 'vector :x 0.0976 :y 0.1572 :z 1.0 :w 15.0) + (new 'static 'vector :x 0.1914 :y 0.1572 :z 1.0 :w 7.5) + (new 'static 'vector :x 0.2851 :y 0.1572 :z 1.0 :w 7.5) + (new 'static 'vector :x 0.3789 :y 0.1572 :z 1.0 :w 12.0) + (new 'static 'vector :x 0.4726 :y 0.1572 :z 1.0 :w 13.5) + (new 'static 'vector :x 0.5664 :y 0.1572 :z 1.0 :w 12.0) + (new 'static 'vector :x 0.6601 :y 0.1572 :z 1.0 :w 13.5) + (new 'static 'vector :x 0.7539 :y 0.1572 :z 1.0 :w 18.0) + (new 'static 'vector :x 0.8476 :y 0.1572 :z 1.0 :w 17.25) + (new 'static 'vector :x 0.0039 :y 0.1884 :z 1.0 :w 15.0) + (new 'static 'vector :x 0.0976 :y 0.1884 :z 1.0 :w 13.5) + (new 'static 'vector :x 0.1914 :y 0.1884 :z 1.0 :w 15.75) + (new 'static 'vector :x 0.2851 :y 0.1884 :z 1.0 :w 13.5) + (new 'static 'vector :x 0.3789 :y 0.1884 :z 1.0 :w 14.25) + (new 'static 'vector :x 0.4726 :y 0.1884 :z 1.0 :w 15.0) + (new 'static 'vector :x 0.5664 :y 0.1884 :z 1.0 :w 13.5) + (new 'static 'vector :x 0.6601 :y 0.1884 :z 1.0 :w 7.5) + (new 'static 'vector :x 0.7539 :y 0.1884 :z 1.0 :w 15.0) + (new 'static 'vector :x 0.8476 :y 0.1884 :z 1.0 :w 15.0) + (new 'static 'vector :x 0.0039 :y 0.2197 :z 1.0 :w 15.75) + (new 'static 'vector :x 0.0976 :y 0.2197 :z 1.0 :w 19.5) + (new 'static 'vector :x 0.1914 :y 0.2197 :z 1.0 :w 15.0) + (new 'static 'vector :x 0.2851 :y 0.2197 :z 1.0 :w 15.0) + (new 'static 'vector :x 0.3789 :y 0.2197 :z 1.0 :w 13.5) + (new 'static 'vector :x 0.4726 :y 0.2197 :z 1.0 :w 15.0) + (new 'static 'vector :x 0.5664 :y 0.2197 :z 1.0 :w 15.75) + (new 'static 'vector :x 0.6601 :y 0.2197 :z 1.0 :w 12.75) + (new 'static 'vector :x 0.7539 :y 0.2197 :z 1.0 :w 13.5) + (new 'static 'vector :x 0.8476 :y 0.2197 :z 1.0 :w 15.0) + (new 'static 'vector :x 0.0039 :y 0.2509 :z 1.0 :w 15.0) + (new 'static 'vector :x 0.0976 :y 0.2509 :z 1.0 :w 18.0) + (new 'static 'vector :x 0.1914 :y 0.2509 :z 1.0 :w 17.25) + (new 'static 'vector :x 0.2851 :y 0.2509 :z 1.0 :w 13.5) + (new 'static 'vector :x 0.3789 :y 0.2509 :z 1.0 :w 13.5) + (new 'static 'vector :x 0.4726 :y 0.2509 :z 1.0 :w 9.0) + (new 'static 'vector :x 0.5664 :y 0.2509 :z 1.0 :w 13.5) + (new 'static 'vector :x 0.6601 :y 0.2509 :z 1.0 :w 10.5) + (new 'static 'vector :x 0.7539 :y 0.2509 :z 1.0 :w 19.5) + (new 'static 'vector :x 0.8476 :y 0.2509 :z 1.0 :w 13.5) + (new 'static 'vector :x 0.0039 :y 0.2822 :z 1.0 :w 6.0) + (new 'static 'vector :x 0.0976 :y 0.2822 :z 1.0 :w 14.25) + (new 'static 'vector :x 0.1914 :y 0.2822 :z 1.0 :w 13.5) + (new 'static 'vector :x 0.2851 :y 0.2822 :z 1.0 :w 12.0) + (new 'static 'vector :x 0.3789 :y 0.2822 :z 1.0 :w 13.5) + (new 'static 'vector :x 0.4726 :y 0.2822 :z 1.0 :w 12.75) + (new 'static 'vector :x 0.5664 :y 0.2822 :z 1.0 :w 12.75) + (new 'static 'vector :x 0.6601 :y 0.2822 :z 1.0 :w 17.25) + (new 'static 'vector :x 0.7539 :y 0.2822 :z 1.0 :w 13.5) + (new 'static 'vector :x 0.8476 :y 0.2822 :z 1.0 :w 9.0) + (new 'static 'vector :x 0.0039 :y 0.3134 :z 1.0 :w 13.5) + (new 'static 'vector :x 0.0976 :y 0.3134 :z 1.0 :w 14.25) + (new 'static 'vector :x 0.1914 :y 0.3134 :z 1.0 :w 9.75) + (new 'static 'vector :x 0.2851 :y 0.3134 :z 1.0 :w 18.5) + (new 'static 'vector :x 0.3789 :y 0.3134 :z 1.0 :w 14.25) + (new 'static 'vector :x 0.4726 :y 0.3134 :z 1.0 :w 12.0) + (new 'static 'vector :x 0.5664 :y 0.3134 :z 1.0 :w 13.5) + (new 'static 'vector :x 0.6601 :y 0.3134 :z 1.0 :w 15.0) + (new 'static 'vector :x 0.7539 :y 0.3134 :z 1.0 :w 12.0) + (new 'static 'vector :x 0.8476 :y 0.3134 :z 1.0 :w 10.5) + (new 'static 'vector :x 0.0039 :y 0.3447 :z 1.0 :w 12.0) + (new 'static 'vector :x 0.0976 :y 0.3447 :z 1.0 :w 12.75) + (new 'static 'vector :x 0.1914 :y 0.3447 :z 1.0 :w 13.5) + (new 'static 'vector :x 0.2851 :y 0.3447 :z 1.0 :w 18.0) + (new 'static 'vector :x 0.3789 :y 0.3447 :z 1.0 :w 13.5) + (new 'static 'vector :x 0.4726 :y 0.3447 :z 1.0 :w 16.5) + (new 'static 'vector :x 0.5664 :y 0.3447 :z 1.0 :w 12.0) + (new 'static 'vector :x 0.6601 :y 0.3447 :z 1.0 :w 10.5) + (new 'static 'vector :x 0.7539 :y 0.3447 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.8476 :y 0.3447 :z 1.0 :w 12.0) + (new 'static 'vector :x 0.0039 :y 0.3759 :z 1.0 :w 13.5) + (new 'static 'vector :x 0.0976 :y 0.3759 :z 1.0 :w 13.5) + (new 'static 'vector :x 0.1914 :y 0.3759 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.2851 :y 0.3759 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.3789 :y 0.3759 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.4726 :y 0.3759 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.5664 :y 0.3759 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.6601 :y 0.3759 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.7539 :y 0.3759 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.8476 :y 0.3759 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0039 :y 0.4072 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0976 :y 0.4072 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.1914 :y 0.4072 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.2851 :y 0.4072 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.3789 :y 0.4072 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.4726 :y 0.4072 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.5664 :y 0.4072 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.6601 :y 0.4072 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.7539 :y 0.4072 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.8476 :y 0.4072 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0039 :y 0.4384 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0976 :y 0.4384 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.1914 :y 0.4384 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.2851 :y 0.4384 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.3789 :y 0.4384 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.4726 :y 0.4384 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.5664 :y 0.4384 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.6601 :y 0.4384 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.7539 :y 0.4384 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.8476 :y 0.4384 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0039 :y 0.4697 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0976 :y 0.4697 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.1914 :y 0.4697 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.2851 :y 0.4697 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.3789 :y 0.4697 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.4726 :y 0.4697 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.5664 :y 0.4697 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.6601 :y 0.4697 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.7539 :y 0.4697 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.8476 :y 0.4697 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0039 :y 0.5009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0976 :y 0.5009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.1914 :y 0.5009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.2851 :y 0.5009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.3789 :y 0.5009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.4726 :y 0.5009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.5664 :y 0.5009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.6601 :y 0.5009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.7539 :y 0.5009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.8476 :y 0.5009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0039 :y 0.5322 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0976 :y 0.5322 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.1914 :y 0.5322 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.2851 :y 0.5322 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.3789 :y 0.5322 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.4726 :y 0.5322 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.5664 :y 0.5322 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.6601 :y 0.5322 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.7539 :y 0.5322 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.8476 :y 0.5322 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0039 :y 0.5634 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0976 :y 0.5634 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.1914 :y 0.5634 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.2851 :y 0.5634 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.3789 :y 0.5634 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.4726 :y 0.5634 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.5664 :y 0.5634 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.6601 :y 0.5634 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.7539 :y 0.5634 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.8476 :y 0.5634 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0039 :y 0.5947 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0976 :y 0.5947 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.1914 :y 0.5947 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.2851 :y 0.5947 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.3789 :y 0.5947 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.4726 :y 0.5947 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.5664 :y 0.5947 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.6601 :y 0.5947 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.7539 :y 0.5947 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.8476 :y 0.5947 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0039 :y 0.6259 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0976 :y 0.6259 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.1914 :y 0.6259 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.2851 :y 0.6259 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.3789 :y 0.6259 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.4726 :y 0.6259 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.5664 :y 0.6259 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.6601 :y 0.6259 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.7539 :y 0.6259 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.8476 :y 0.6259 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0039 :y 0.6572 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0976 :y 0.6572 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.1914 :y 0.6572 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.2851 :y 0.6572 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.3789 :y 0.6572 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.4726 :y 0.6572 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.5664 :y 0.6572 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.6601 :y 0.6572 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.7539 :y 0.6572 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.8476 :y 0.6572 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0039 :y 0.6884 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0976 :y 0.6884 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.1914 :y 0.6884 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.2851 :y 0.6884 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.3789 :y 0.6884 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.4726 :y 0.6884 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.5664 :y 0.6884 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.6601 :y 0.6884 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.7539 :y 0.6884 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.8476 :y 0.6884 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0039 :y 0.7197 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0976 :y 0.7197 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.1914 :y 0.7197 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.2851 :y 0.7197 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.3789 :y 0.7197 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.4726 :y 0.7197 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.5664 :y 0.7197 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.6601 :y 0.7197 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.7539 :y 0.7197 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.8476 :y 0.7197 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0039 :y 0.7509 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0976 :y 0.7509 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.1914 :y 0.7509 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.2851 :y 0.7509 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.3789 :y 0.7509 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.4726 :y 0.7509 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.5664 :y 0.7509 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.6601 :y 0.7509 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.7539 :y 0.7509 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.8476 :y 0.7509 :z 1.0 :w 16.0) + ) + ) + +;; definition for symbol *font24-table*, type (inline-array vector) +(define *font24-table* (new 'static 'inline-array vector 250 + (new 'static 'vector :x 0.0039 :y 0.0009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0976 :y 0.0009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.1914 :y 0.0009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.2851 :y 0.0009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.3789 :y 0.0009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.4726 :y 0.0009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.5664 :y 0.0009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.6601 :y 0.0009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.7539 :y 0.0009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.8476 :y 0.0009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0039 :y 0.0322 :z 1.0 :w 12.0) + (new 'static 'vector :x 0.0976 :y 0.0322 :z 1.0 :w 12.0) + (new 'static 'vector :x 0.1914 :y 0.0322 :z 1.0 :w 19.5) + (new 'static 'vector :x 0.2851 :y 0.0322 :z 1.0 :w 15.0) + (new 'static 'vector :x 0.3789 :y 0.0322 :z 1.0 :w 12.0) + (new 'static 'vector :x 0.4726 :y 0.0322 :z 1.0 :w 12.0) + (new 'static 'vector :x 0.5664 :y 0.0322 :z 1.0 :w 12.0) + (new 'static 'vector :x 0.6601 :y 0.0322 :z 1.0 :w 11.0) + (new 'static 'vector :x 0.7539 :y 0.0322 :z 1.0 :w 21.0) + (new 'static 'vector :x 0.8476 :y 0.0322 :z 1.0 :w 12.0) + (new 'static 'vector :x 0.0039 :y 0.0634 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.0976 :y 0.0634 :z 1.0 :w 27.0) + (new 'static 'vector :x 0.1914 :y 0.0634 :z 1.0 :w 27.0) + (new 'static 'vector :x 0.2851 :y 0.0634 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.3789 :y 0.0634 :z 1.0 :w 27.0) + (new 'static 'vector :x 0.4726 :y 0.0634 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.5664 :y 0.0634 :z 1.0 :w 15.0) + (new 'static 'vector :x 0.6601 :y 0.0634 :z 1.0 :w 11.0) + (new 'static 'vector :x 0.7539 :y 0.0634 :z 1.0 :w 17.0) + (new 'static 'vector :x 0.8476 :y 0.0634 :z 1.0 :w 17.5) + (new 'static 'vector :x 0.0039 :y 0.0947 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.0976 :y 0.0947 :z 1.0 :w 26.0) + (new 'static 'vector :x 0.1914 :y 0.0947 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.2851 :y 0.0947 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.3789 :y 0.0947 :z 1.0 :w 14.0) + (new 'static 'vector :x 0.4726 :y 0.0947 :z 1.0 :w 14.0) + (new 'static 'vector :x 0.5664 :y 0.0947 :z 1.0 :w 22.5) + (new 'static 'vector :x 0.6601 :y 0.0947 :z 1.0 :w 22.0) + (new 'static 'vector :x 0.7539 :y 0.0947 :z 1.0 :w 11.0) + (new 'static 'vector :x 0.8476 :y 0.0947 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0039 :y 0.1259 :z 1.0 :w 11.0) + (new 'static 'vector :x 0.0976 :y 0.1259 :z 1.0 :w 18.0) + (new 'static 'vector :x 0.1914 :y 0.1259 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.2851 :y 0.1259 :z 1.0 :w 14.0) + (new 'static 'vector :x 0.3789 :y 0.1259 :z 1.0 :w 22.0) + (new 'static 'vector :x 0.4726 :y 0.1259 :z 1.0 :w 23.0) + (new 'static 'vector :x 0.5664 :y 0.1259 :z 1.0 :w 23.0) + (new 'static 'vector :x 0.6601 :y 0.1259 :z 1.0 :w 22.0) + (new 'static 'vector :x 0.7539 :y 0.1259 :z 1.0 :w 23.0) + (new 'static 'vector :x 0.8476 :y 0.1259 :z 1.0 :w 23.0) + (new 'static 'vector :x 0.0039 :y 0.1572 :z 1.0 :w 23.0) + (new 'static 'vector :x 0.0976 :y 0.1572 :z 1.0 :w 22.0) + (new 'static 'vector :x 0.1914 :y 0.1572 :z 1.0 :w 11.0) + (new 'static 'vector :x 0.2851 :y 0.1572 :z 1.0 :w 20.0) + (new 'static 'vector :x 0.3789 :y 0.1572 :z 1.0 :w 25.0) + (new 'static 'vector :x 0.4726 :y 0.1572 :z 1.0 :w 21.0) + (new 'static 'vector :x 0.5664 :y 0.1572 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.6601 :y 0.1572 :z 1.0 :w 22.0) + (new 'static 'vector :x 0.7539 :y 0.1572 :z 1.0 :w 21.0) + (new 'static 'vector :x 0.8476 :y 0.1572 :z 1.0 :w 26.0) + (new 'static 'vector :x 0.0039 :y 0.1884 :z 1.0 :w 22.0) + (new 'static 'vector :x 0.0976 :y 0.1884 :z 1.0 :w 27.0) + (new 'static 'vector :x 0.1914 :y 0.1884 :z 1.0 :w 25.0) + (new 'static 'vector :x 0.2851 :y 0.1884 :z 1.0 :w 19.0) + (new 'static 'vector :x 0.3789 :y 0.1884 :z 1.0 :w 18.0) + (new 'static 'vector :x 0.4726 :y 0.1884 :z 1.0 :w 26.0) + (new 'static 'vector :x 0.5664 :y 0.1884 :z 1.0 :w 25.0) + (new 'static 'vector :x 0.6601 :y 0.1884 :z 1.0 :w 10.0) + (new 'static 'vector :x 0.7539 :y 0.1884 :z 1.0 :w 19.0) + (new 'static 'vector :x 0.8476 :y 0.1884 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.0039 :y 0.2197 :z 1.0 :w 18.0) + (new 'static 'vector :x 0.0976 :y 0.2197 :z 1.0 :w 26.0) + (new 'static 'vector :x 0.1914 :y 0.2197 :z 1.0 :w 25.0) + (new 'static 'vector :x 0.2851 :y 0.2197 :z 1.0 :w 27.0) + (new 'static 'vector :x 0.3789 :y 0.2197 :z 1.0 :w 21.0) + (new 'static 'vector :x 0.4726 :y 0.2197 :z 1.0 :w 27.0) + (new 'static 'vector :x 0.5664 :y 0.2197 :z 1.0 :w 19.0) + (new 'static 'vector :x 0.6601 :y 0.2197 :z 1.0 :w 21.0) + (new 'static 'vector :x 0.7539 :y 0.2197 :z 1.0 :w 22.0) + (new 'static 'vector :x 0.8476 :y 0.2197 :z 1.0 :w 23.0) + (new 'static 'vector :x 0.0039 :y 0.2509 :z 1.0 :w 26.0) + (new 'static 'vector :x 0.0976 :y 0.2509 :z 1.0 :w 27.0) + (new 'static 'vector :x 0.1914 :y 0.2509 :z 1.0 :w 27.0) + (new 'static 'vector :x 0.2851 :y 0.2509 :z 1.0 :w 25.0) + (new 'static 'vector :x 0.3789 :y 0.2509 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.4726 :y 0.2509 :z 1.0 :w 15.0) + (new 'static 'vector :x 0.5664 :y 0.2509 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.6601 :y 0.2509 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.7539 :y 0.2509 :z 1.0 :w 27.0) + (new 'static 'vector :x 0.8476 :y 0.2509 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.0039 :y 0.2822 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.0976 :y 0.2822 :z 1.0 :w 25.0) + (new 'static 'vector :x 0.1914 :y 0.2822 :z 1.0 :w 25.0) + (new 'static 'vector :x 0.2851 :y 0.2822 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.3789 :y 0.2822 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.4726 :y 0.2822 :z 1.0 :w 25.0) + (new 'static 'vector :x 0.5664 :y 0.2822 :z 1.0 :w 17.0) + (new 'static 'vector :x 0.6601 :y 0.2822 :z 1.0 :w 25.0) + (new 'static 'vector :x 0.7539 :y 0.2822 :z 1.0 :w 22.0) + (new 'static 'vector :x 0.8476 :y 0.2822 :z 1.0 :w 10.0) + (new 'static 'vector :x 0.0039 :y 0.3134 :z 1.0 :w 18.0) + (new 'static 'vector :x 0.0976 :y 0.3134 :z 1.0 :w 23.0) + (new 'static 'vector :x 0.1914 :y 0.3134 :z 1.0 :w 10.0) + (new 'static 'vector :x 0.2851 :y 0.3134 :z 1.0 :w 27.0) + (new 'static 'vector :x 0.3789 :y 0.3134 :z 1.0 :w 22.0) + (new 'static 'vector :x 0.4726 :y 0.3134 :z 1.0 :w 25.0) + (new 'static 'vector :x 0.5664 :y 0.3134 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.6601 :y 0.3134 :z 1.0 :w 25.0) + (new 'static 'vector :x 0.7539 :y 0.3134 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.8476 :y 0.3134 :z 1.0 :w 17.0) + (new 'static 'vector :x 0.0039 :y 0.3447 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0976 :y 0.3447 :z 1.0 :w 22.0) + (new 'static 'vector :x 0.1914 :y 0.3447 :z 1.0 :w 21.0) + (new 'static 'vector :x 0.2851 :y 0.3447 :z 1.0 :w 27.0) + (new 'static 'vector :x 0.3789 :y 0.3447 :z 1.0 :w 23.0) + (new 'static 'vector :x 0.4726 :y 0.3447 :z 1.0 :w 23.0) + (new 'static 'vector :x 0.5664 :y 0.3447 :z 1.0 :w 20.0) + (new 'static 'vector :x 0.6601 :y 0.3447 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.7539 :y 0.3447 :z 1.0 :w 27.0) + (new 'static 'vector :x 0.8476 :y 0.3447 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.0039 :y 0.3759 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.0976 :y 0.3759 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.1914 :y 0.3759 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.2851 :y 0.3759 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.3789 :y 0.3759 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.4726 :y 0.3759 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.5664 :y 0.3759 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.6601 :y 0.3759 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.7539 :y 0.3759 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.8476 :y 0.3759 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.0039 :y 0.4072 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.0976 :y 0.4072 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.1914 :y 0.4072 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.2851 :y 0.4072 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.3789 :y 0.4072 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.4726 :y 0.4072 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.5664 :y 0.4072 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.6601 :y 0.4072 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.7539 :y 0.4072 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.8476 :y 0.4072 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.0039 :y 0.4384 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.0976 :y 0.4384 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.1914 :y 0.4384 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.2851 :y 0.4384 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.3789 :y 0.4384 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.4726 :y 0.4384 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.5664 :y 0.4384 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.6601 :y 0.4384 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.7539 :y 0.4384 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.8476 :y 0.4384 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.0039 :y 0.4697 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.0976 :y 0.4697 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.1914 :y 0.4697 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.2851 :y 0.4697 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.3789 :y 0.4697 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.4726 :y 0.4697 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.5664 :y 0.4697 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.6601 :y 0.4697 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.7539 :y 0.4697 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.8476 :y 0.4697 :z 1.0 :w 24.0) + (new 'static 'vector :x 0.0039 :y 0.5009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0976 :y 0.5009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.1914 :y 0.5009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.2851 :y 0.5009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.3789 :y 0.5009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.4726 :y 0.5009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.5664 :y 0.5009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.6601 :y 0.5009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.7539 :y 0.5009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.8476 :y 0.5009 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0039 :y 0.5322 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0976 :y 0.5322 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.1914 :y 0.5322 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.2851 :y 0.5322 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.3789 :y 0.5322 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.4726 :y 0.5322 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.5664 :y 0.5322 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.6601 :y 0.5322 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.7539 :y 0.5322 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.8476 :y 0.5322 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0039 :y 0.5634 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0976 :y 0.5634 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.1914 :y 0.5634 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.2851 :y 0.5634 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.3789 :y 0.5634 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.4726 :y 0.5634 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.5664 :y 0.5634 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.6601 :y 0.5634 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.7539 :y 0.5634 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.8476 :y 0.5634 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0039 :y 0.5947 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0976 :y 0.5947 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.1914 :y 0.5947 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.2851 :y 0.5947 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.3789 :y 0.5947 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.4726 :y 0.5947 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.5664 :y 0.5947 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.6601 :y 0.5947 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.7539 :y 0.5947 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.8476 :y 0.5947 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0039 :y 0.6259 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0976 :y 0.6259 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.1914 :y 0.6259 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.2851 :y 0.6259 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.3789 :y 0.6259 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.4726 :y 0.6259 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.5664 :y 0.6259 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.6601 :y 0.6259 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.7539 :y 0.6259 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.8476 :y 0.6259 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0039 :y 0.6572 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0976 :y 0.6572 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.1914 :y 0.6572 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.2851 :y 0.6572 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.3789 :y 0.6572 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.4726 :y 0.6572 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.5664 :y 0.6572 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.6601 :y 0.6572 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.7539 :y 0.6572 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.8476 :y 0.6572 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0039 :y 0.6884 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0976 :y 0.6884 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.1914 :y 0.6884 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.2851 :y 0.6884 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.3789 :y 0.6884 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.4726 :y 0.6884 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.5664 :y 0.6884 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.6601 :y 0.6884 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.7539 :y 0.6884 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.8476 :y 0.6884 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0039 :y 0.7197 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0976 :y 0.7197 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.1914 :y 0.7197 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.2851 :y 0.7197 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.3789 :y 0.7197 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.4726 :y 0.7197 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.5664 :y 0.7197 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.6601 :y 0.7197 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.7539 :y 0.7197 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.8476 :y 0.7197 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0039 :y 0.7509 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.0976 :y 0.7509 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.1914 :y 0.7509 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.2851 :y 0.7509 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.3789 :y 0.7509 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.4726 :y 0.7509 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.5664 :y 0.7509 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.6601 :y 0.7509 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.7539 :y 0.7509 :z 1.0 :w 16.0) + (new 'static 'vector :x 0.8476 :y 0.7509 :z 1.0 :w 16.0) + ) + ) + + + + diff --git a/test/decompiler/reference/jak2/engine/debug/history_REF.gc b/test/decompiler/reference/jak2/engine/debug/history_REF.gc new file mode 100644 index 0000000000..3914a5d448 --- /dev/null +++ b/test/decompiler/reference/jak2/engine/debug/history_REF.gc @@ -0,0 +1,951 @@ +;;-*-Lisp-*- +(in-package goal) + +;; this file is debug only +(declare-file (debug)) +(when *debug-segment* +;; definition for function history-channel->string +(defun history-channel->string ((arg0 history-channel)) + (case arg0 + (((history-channel friction)) + "friction" + ) + (((history-channel transv-out)) + "transv-out" + ) + (((history-channel pat)) + "pat" + ) + (((history-channel transv-in)) + "transv-in" + ) + (((history-channel trans)) + "trans" + ) + (((history-channel local-normal)) + "local-normal" + ) + (((history-channel collide-status)) + "collide-status" + ) + (((history-channel time)) + "time" + ) + (((history-channel intersect)) + "intersect" + ) + (((history-channel surface-normal)) + "surface-normal" + ) + (((history-channel transv)) + "transv" + ) + (else + "*unknown*" + ) + ) + ) + +;; definition of type history-elt +(deftype history-elt (structure) + ((record-tag-bytes uint8 4 :offset-assert 0) + (record-tag uint32 :offset 0) + (record-id uint16 :offset 0) + (owner uint8 :offset 2) + (channel history-channel :offset-assert 4) + (timestamp time-frame :offset-assert 8) + (origin vector :inline :offset-assert 16) + (bytes uint8 16 :offset-assert 32) + (vector vector :inline :offset 32) + (float float :offset 32) + (collide-status collide-status :offset 32) + (collide-reaction-flag uint32 :offset 40) + (pat pat-surface :offset 32) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) + +;; definition for method 3 of type history-elt +(defmethod inspect history-elt ((obj history-elt)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'history-elt) + (format #t "~1Trecord-tag-bytes[4] @ #x~X~%" (-> obj record-tag-bytes)) + (format #t "~1Trecord-tag: ~D~%" (-> obj record-tag)) + (format #t "~1Trecord-id: ~D~%" (-> obj record-id)) + (format #t "~1Towner: ~D~%" (-> obj owner)) + (format #t "~1Tchannel: ~D~%" (-> obj channel)) + (format #t "~1Ttimestamp: ~D~%" (-> obj timestamp)) + (format #t "~1Torigin: #~%" (-> obj origin)) + (format #t "~1Tbytes[16] @ #x~X~%" (-> obj bytes)) + (format #t "~1Tvector: #~%" (-> obj bytes)) + (format #t "~1Tfloat: ~f~%" (-> obj vector x)) + (format #t "~1Tcollide-status: ~D~%" (-> obj collide-status)) + (format #t "~1Tcollide-reaction-flag: ~D~%" (-> obj vector z)) + (format #t "~1Tpat: ~D~%" (-> obj vector x)) + (label cfg-4) + obj + ) + +;; definition of type history-iterator +(deftype history-iterator (basic) + ((max-age uint32 :offset-assert 4) + (owner uint8 :offset-assert 8) + (proc process :offset-assert 12) + (out basic :offset-assert 16) + (channel-mask uint64 :offset-assert 24) + (index int32 :offset-assert 32) + (done? symbol :offset-assert 36) + ) + :method-count-assert 12 + :size-assert #x28 + :flag-assert #xc00000028 + (:methods + (new (symbol type uint32) _type_ 0) + (frame-counter-delta (_type_ history-elt) time-frame 9) + (update-entries! (_type_) history-elt 10) + (history-iterator-method-11 (_type_ history-elt) float 11) + ) + ) + +;; definition for method 3 of type history-iterator +(defmethod inspect history-iterator ((obj history-iterator)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj (-> obj type)) + (format #t "~1Tmax-age: ~D~%" (-> obj max-age)) + (format #t "~1Towner: ~D~%" (-> obj owner)) + (format #t "~1Tproc: ~A~%" (-> obj proc)) + (format #t "~1Tout: ~A~%" (-> obj out)) + (format #t "~1Tchannel-mask: ~D~%" (-> obj channel-mask)) + (format #t "~1Tindex: ~D~%" (-> obj index)) + (format #t "~1Tdone?: ~A~%" (-> obj done?)) + (label cfg-4) + obj + ) + +;; definition of type history +(deftype history (basic) + ((alloc-index int32 :offset-assert 4) + (allocated-length int32 :offset-assert 8) + (elts history-elt :inline :dynamic :offset 16) + ) + :method-count-assert 11 + :size-assert #x10 + :flag-assert #xb00000010 + (:methods + (new (symbol type int) _type_ 0) + (clear-record-tags! (_type_ history-channel uint uint) history-elt 9) + (clear-history-entries! (_type_) none 10) + ) + ) + +;; definition for method 3 of type history +(defmethod inspect history ((obj history)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj (-> obj type)) + (format #t "~1Talloc-index: ~D~%" (-> obj alloc-index)) + (format #t "~1Tallocated-length: ~D~%" (-> obj allocated-length)) + (format #t "~1Telts[0] @ #x~X~%" (-> obj elts)) + (label cfg-4) + obj + ) + +;; definition for method 4 of type history +(defmethod length history ((obj history)) + (-> obj allocated-length) + ) + +;; definition for method 5 of type history +;; INFO: Return type mismatch uint vs int. +(defmethod asize-of history ((obj history)) + (the-as int (+ (-> obj type size) (* 48 (-> obj allocated-length)))) + ) + +;; definition for method 0 of type history +(defmethod new history ((allocation symbol) (type-to-make type) (arg0 int)) + (let ((v0-0 (object-new allocation type-to-make (the-as int (+ (-> type-to-make size) (* 48 arg0)))))) + (set! (-> v0-0 allocated-length) arg0) + v0-0 + ) + ) + +;; definition for method 10 of type history +;; INFO: Return type mismatch int vs none. +(defmethod clear-history-entries! history ((obj history)) + "Iterates through each [[history-elt]] in the `elt` dynamic array + For each entry: + - clear `timestamp` + - clear `record-tag`" + (set! (-> obj alloc-index) 0) + (countdown (v1-0 (-> obj allocated-length)) + (let ((a1-3 (-> obj elts v1-0))) + (set! (-> a1-3 record-tag) (the-as uint 0)) + (set! (-> a1-3 timestamp) 0) + ) + 0 + ) + 0 + (none) + ) + +;; definition (perm) for symbol *history*, type history +(define-perm *history* history (new 'debug 'history 4096)) + +;; failed to figure out what this is: +(clear-history-entries! *history*) + +;; definition for method 9 of type history +;; WARN: new jak 2 until loop case, check carefully +(defmethod clear-record-tags! history ((obj history) (arg0 history-channel) (arg1 uint) (arg2 uint)) + "First grab the latest [[history-elt]] at `alloc-index` + 1. update it's `channel`, `record-id` and `owner` from the provided args + 2. - if it's `record-tag` is zero -- return it + - otherwise, iterate through all `elts` until one is found that does not match it's `timestamp` + - if not `0` out the `record-tag` for that elt and continue iteration" + (let* ((t1-0 (-> obj alloc-index)) + (v1-0 (-> obj elts)) + (v0-0 (-> v1-0 t1-0)) + ) + (let ((t2-0 (-> v0-0 record-tag)) + (t0-2 (-> v0-0 timestamp)) + ) + (set! (-> v0-0 channel) arg0) + (set! (-> v0-0 record-id) arg1) + (set! (-> v0-0 owner) arg2) + (set! (-> v0-0 timestamp) (-> *display* base-clock frame-counter)) + (let* ((a1-4 (-> obj allocated-length)) + (a2-2 (mod (+ t1-0 1) a1-4)) + ) + (set! (-> obj alloc-index) a2-2) + (when (nonzero? t2-0) + (until #f + (let ((a0-4 (-> v1-0 a2-2))) + (if (!= t0-2 (-> a0-4 timestamp)) + (return v0-0) + ) + (set! (-> a0-4 record-tag) (the-as uint 0)) + ) + (set! a2-2 (mod (+ a2-2 1) a1-4)) + ) + #f + ) + ) + ) + v0-0 + ) + ) + +;; definition for method 0 of type history-iterator +(defmethod new history-iterator ((allocation symbol) (type-to-make type) (arg0 uint32)) + (let ((v0-0 (object-new allocation type-to-make (the-as int (-> type-to-make size))))) + (set! (-> v0-0 max-age) (the-as uint arg0)) + (set! (-> v0-0 owner) (the-as uint 1)) + (set! (-> v0-0 proc) #f) + (set! (-> v0-0 out) *stdcon*) + (set! (-> v0-0 channel-mask) (the-as uint -1)) + (set! (-> v0-0 index) (-> *history* alloc-index)) + (set! (-> v0-0 done?) #f) + v0-0 + ) + ) + +;; definition for method 10 of type history-iterator +(defmethod update-entries! history-iterator ((obj history-iterator)) + "Iterate through each [[history-elt]] in [[*history*]] + - If we hit the end set `done?` to true + - If the `timestamp` on the elt, minus the current framecounter exceeds `max-age`, we are also done, return #f + - However if we find an elt who's `owner` matches the iterator's, break out early returning that `elt`" + (let ((v1-0 *history*) + (a1-2 (-> *display* base-clock frame-counter)) + ) + (while (not (-> obj done?)) + (let ((a2-1 (+ (-> obj index) -1))) + (if (< a2-1 0) + (set! a2-1 (+ (-> v1-0 allocated-length) -1)) + ) + (set! (-> obj index) a2-1) + (if (= a2-1 (-> v1-0 alloc-index)) + (set! (-> obj done?) #t) + ) + (let ((a2-5 (-> v1-0 elts a2-1))) + (when (nonzero? (-> a2-5 record-tag)) + (when (< (the-as time-frame (-> obj max-age)) (- a1-2 (-> a2-5 timestamp))) + (set! (-> obj done?) #t) + (return (the-as history-elt #f)) + ) + (if (= (-> a2-5 owner) (-> obj owner)) + (return a2-5) + ) + ) + ) + ) + ) + ) + (the-as history-elt #f) + ) + +;; definition for method 11 of type history-iterator +(defmethod history-iterator-method-11 history-iterator ((obj history-iterator) (arg0 history-elt)) + "TODO - Unsure of the purpose + `min(1.0, ((history-elt.timestamp - 1) + frame-counter) / (max-age + 1)) - 1.0`" + (- 1.0 (fmin 1.0 (/ (the float (+ (- 1 (-> arg0 timestamp)) (-> *display* base-clock frame-counter))) + (the float (+ (-> obj max-age) 1)) + ) + ) + ) + ) + +;; definition for method 9 of type history-iterator +(defmethod frame-counter-delta history-iterator ((obj history-iterator) (arg0 history-elt)) + "Returns the difference between [[*display*]]'s `base-clock.frame-counter` and the elt's `timestamp`" + (- (-> *display* base-clock frame-counter) (-> arg0 timestamp)) + ) + +;; definition for function history-print +;; INFO: Used lq/sq +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; INFO: Return type mismatch int vs none. +;; WARN: new jak 2 until loop case, check carefully +(defun history-print ((arg0 history-iterator)) + (local-vars + (sv-16 basic) + (sv-24 int) + (sv-32 int) + (sv-40 history-elt) + (sv-48 time-frame) + (sv-56 uint) + (sv-64 collide-status) + (sv-72 float) + (sv-80 string) + (sv-96 string) + ) + (set! sv-16 (-> arg0 out)) + (set! sv-24 -1) + (set! sv-32 0) + (until #f + (set! sv-40 (update-entries! arg0)) + (if (not sv-40) + (goto cfg-71) + ) + (when (logtest? (-> arg0 channel-mask) (ash 1 (-> sv-40 channel))) + (set! sv-48 (frame-counter-delta arg0 sv-40)) + (set! sv-56 (-> sv-40 record-id)) + (cond + ((!= sv-24 sv-48) + (set! sv-24 (the-as int sv-48)) + (set! sv-32 (the-as int sv-56)) + (format sv-16 "~3D ~4X " sv-48 (-> sv-40 record-id)) + ) + ((!= sv-32 sv-56) + (set! sv-32 (the-as int sv-56)) + (format sv-16 " ~4X " (-> sv-40 record-id)) + ) + (else + (format sv-16 " ") + ) + ) + (let ((v1-22 (-> sv-40 channel))) + (cond + ((or (= v1-22 (history-channel trans)) + (or (= v1-22 (history-channel transv)) + (= v1-22 (history-channel transv-in)) + (= v1-22 (history-channel transv-out)) + (= v1-22 (history-channel intersect)) + ) + ) + (format + sv-16 + "~-15S: ~14Mm ~14Mm ~14Mm~%" + (history-channel->string (-> sv-40 channel)) + (-> sv-40 vector x) + (-> sv-40 vector y) + (-> sv-40 vector z) + ) + ) + ((or (= v1-22 (history-channel local-normal)) (= v1-22 (history-channel surface-normal))) + (format + sv-16 + "~-15S: ~14f ~14f ~14f~%" + (history-channel->string (-> sv-40 channel)) + (-> sv-40 vector x) + (-> sv-40 vector y) + (-> sv-40 vector z) + ) + ) + ((= v1-22 (history-channel pat)) + (let* ((s2-0 (-> sv-40 vector x)) + (s5-2 format) + (s4-2 sv-16) + (s3-2 "~-15S: #x~6X mode:~-8S material:~-10S event:~S~%") + (s1-0 (history-channel->string (-> sv-40 channel))) + (s0-0 s2-0) + ) + (set! sv-80 (pat-mode->string (the-as pat-surface s2-0))) + (set! sv-96 (pat-material->string (the-as pat-surface s2-0))) + (let ((t2-0 (pat-event->string (the-as pat-surface s2-0)))) + (s5-2 s4-2 s3-2 s1-0 s0-0 sv-80 sv-96 t2-0) + ) + ) + ) + ((= v1-22 (history-channel collide-status)) + (set! sv-64 (-> sv-40 collide-status)) + (set! sv-72 (-> sv-40 vector z)) + (format sv-16 "~-15S: #x~6X " (history-channel->string (-> sv-40 channel)) sv-64) + (let ((s5-4 sv-64)) + (if (= (logand s5-4 (collide-status touch-background)) (collide-status touch-background)) + (format sv-16 "touch-background ") + ) + (if (= (logand s5-4 (collide-status on-special-surface)) (collide-status on-special-surface)) + (format sv-16 "on-special-surface ") + ) + (if (= (logand s5-4 (collide-status touch-wall)) (collide-status touch-wall)) + (format sv-16 "touch-wall ") + ) + (if (= (logand s5-4 (collide-status on-surface)) (collide-status on-surface)) + (format sv-16 "on-surface ") + ) + (if (= (logand s5-4 (collide-status impact-surface)) (collide-status impact-surface)) + (format sv-16 "impact-surface ") + ) + (if (= (logand s5-4 (collide-status touch-ceiling)) (collide-status touch-ceiling)) + (format sv-16 "touch-ceiling ") + ) + (if (= (logand s5-4 (collide-status on-ground)) (collide-status on-ground)) + (format sv-16 "on-ground ") + ) + (if (= (logand s5-4 (collide-status glance)) (collide-status glance)) + (format sv-16 "glance ") + ) + (if (= (logand s5-4 (collide-status blocked)) (collide-status blocked)) + (format sv-16 "blocked ") + ) + (if (= (logand s5-4 (collide-status touch-edge)) (collide-status touch-edge)) + (format sv-16 "touch-edge ") + ) + (if (= (logand s5-4 (collide-status touch-ceiling-sticky)) (collide-status touch-ceiling-sticky)) + (format sv-16 "touch-ceiling-sticky ") + ) + (if (= (logand s5-4 (collide-status on-water)) (collide-status on-water)) + (format sv-16 "on-water ") + ) + (if (= (logand s5-4 (collide-status touch-actor)) (collide-status touch-actor)) + (format sv-16 "touch-actor ") + ) + (if (= (logand (collide-status probe-hit) s5-4) (collide-status probe-hit)) + (format sv-16 "probe-hit ") + ) + (if (= (logand s5-4 (collide-status stuck)) (collide-status stuck)) + (format sv-16 "stuck ") + ) + (if (= (logand s5-4 (collide-status no-touch)) (collide-status no-touch)) + (format sv-16 "no-touch ") + ) + (if (= (logand s5-4 (collide-status touch-surface)) (collide-status touch-surface)) + (format sv-16 "touch-surface ") + ) + ) + (format sv-16 " #x~6X~%" sv-72) + ) + ((= v1-22 (history-channel friction)) + (let ((f30-0 (-> sv-40 vector x))) + (format sv-16 "~-15S: ~f~%" (history-channel->string (-> sv-40 channel)) f30-0) + ) + ) + ) + ) + ) + ) + #f + (label cfg-71) + 0 + (none) + ) + +;; definition for function history-draw +;; INFO: Return type mismatch int vs none. +;; ERROR: Expression building failed: In history-draw: Unmatched field: start bit 24, size 40, signed? true, type rgba +(defun history-draw ((arg0 history-iterator)) + (local-vars + (v0-0 history-elt) + (v0-3 symbol) + (v0-4 symbol) + (v0-5 symbol) + (v0-6 symbol) + (v0-7 symbol) + (v0-8 symbol) + (v0-9 symbol) + (v0-10 symbol) + (v0-11 symbol) + (v0-12 int) + (v1-0 type) + (v1-8 int) + (v1-9 int) + (v1-11 int) + (v1-13 int) + (v1-15 int) + (v1-17 int) + (v1-18 int) + (v1-19 int) + (v1-20 int) + (v1-21 int) + (a0-1 history-iterator) + (a0-7 history-channel) + (a0-9 symbol) + (a0-10 symbol) + (a0-11 (pointer uint8)) + (a0-12 (pointer uint8)) + (a0-13 symbol) + (a0-14 symbol) + (a0-15 (pointer uint8)) + (a0-16 symbol) + (a0-18 symbol) + (a0-20 symbol) + (a0-22 number) + (a0-23 int) + (a0-24 int) + (a0-25 int) + (a0-26 pat-mode-info) + (a0-27 rgba) + (a0-28 rgba) + (a0-29 symbol) + (a0-31 float) + (a0-33 vector) + (a0-34 symbol) + (a1-5 int) + (a1-6 int) + (a1-7 int) + (a1-9 int) + (a1-10 int) + (a1-11 int) + (a1-13 int) + (a1-14 int) + (a1-16 int) + (a1-17 int) + (a1-19 int) + (a1-20 history-channel) + (a1-21 symbol) + (a1-23 (inline-array pat-mode-info)) + (a1-24 uint) + (a1-25 int) + (a1-26 int) + (a1-28 int) + (a1-29 float) + (a1-30 float) + (a1-31 int) + (a2-1 (pointer uint8)) + (a2-2 (pointer uint8)) + (a2-3 (pointer uint8)) + (a2-4 (pointer uint8)) + (a2-5 vector) + (a2-6 vector) + (a2-7 vector) + (a2-8 symbol) + (a2-9 history-channel) + (a2-10 vector) + (a2-11 vector) + (a3-0 (pointer uint8)) + (a3-1 int) + (a3-2 int) + (a3-3 (pointer uint8)) + (a3-4 int) + (a3-5 int) + (a3-6 (pointer uint8)) + (a3-7 (pointer uint8)) + (a3-8 (pointer uint8)) + (a3-9 (pointer uint8)) + (a3-10 vector) + (t0-0 int) + (t0-1 int) + (t0-2 int) + (t0-3 int) + (t0-4 int) + (t0-5 int) + (t0-6 int) + (t0-7 int) + (t0-8 int) + (t1-0 symbol) + (t1-1 symbol) + (t1-2 int) + (t1-3 int) + (t1-4 int) + (t1-5 int) + (t1-6 int) + (t1-7 rgba) + (t1-8 rgba) + (t1-9 int) + (t1-10 int) + (t2-0 int) + (t2-1 int) + (s5-0 history-elt) + (t9-0 (function history-iterator history-elt)) + (t9-3 (function symbol bucket-id vector vector rgba symbol rgba symbol)) + (t9-4 (function symbol bucket-id vector rgba symbol)) + (t9-5 (function symbol bucket-id vector vector rgba symbol rgba symbol)) + (t9-6 (function symbol bucket-id vector rgba symbol)) + (t9-7 (function symbol bucket-id vector vector meters rgba symbol)) + (t9-8 (function symbol bucket-id vector vector meters rgba symbol)) + (t9-9 (function symbol bucket-id vector vector meters rgba symbol)) + (t9-10 (function symbol bucket-id vector vector meters rgba symbol)) + (t9-11 (function symbol bucket-id vector vector meters rgba symbol)) + (f0-3 float) + (f0-4 float) + (f0-5 float) + (f0-6 float) + (f1-0 float) + (f1-1 float) + (sv-16 (pointer uint8)) + (sv-20 (pointer uint8)) + (sv-24 number) + ) + (set! sv-16 #f) + (set! sv-20 #f) + (set! sv-24 0) + (until (begin + (when (logtest? (-> arg0 channel-mask) (ash 1 (-> s5-0 channel))) + (cond + ((= a0-7 (history-channel trans)) + (cond + (sv-16 + (set! t9-3 add-debug-line) + (set! a0-9 #t) + (set! a1-5 318) + (set! a2-1 sv-16) + (set! a3-0 (-> s5-0 bytes)) + (set! t0-0 #xffff00) + (set! v1-9 (shl v1-8 24)) + (set! t0-1 (logior #xffff00 (shl v1-8 24))) + (set! t1-0 #f) + (set! t2-0 -1) + (call! a0-9 a1-5 a2-1 a3-0 t0-1 t1-0 t2-0) + (set! v1-10 v0-3) + ) + (else + (set! t9-4 add-debug-x) + (set! a0-10 #t) + (set! a1-6 318) + (set! a2-2 (-> s5-0 bytes)) + (set! a3-1 #xffff00) + (set! v1-11 (sll v1-8 24)) + (set! a3-2 (logior a3-1 v1-11)) + (call! a0-10 a1-6 a2-2 a3-2) + (set! v1-12 v0-4) + ) + ) + (set! a0-11 (-> s5-0 bytes)) + (set! sv-16 a0-11) + ) + ((begin (set! a1-7 4) (= a0-7 a1-7)) + (cond + ((begin (set! a0-12 sv-20) a0-12) + (set! t9-5 add-debug-line) + (set! a0-13 #t) + (set! a1-9 318) + (set! a2-3 sv-20) + (set! a3-3 (-> s5-0 bytes)) + (set! t0-2 #xffffff) + (set! v1-13 (sll v1-8 24)) + (set! t0-3 (logior t0-2 v1-13)) + (set! t1-1 #f) + (set! t2-1 -1) + (call! a0-13 a1-9 a2-3 a3-3 t0-3 t1-1 t2-1) + (set! v1-14 v0-5) + ) + (else + (set! t9-6 add-debug-x) + (set! a0-14 #t) + (set! a1-10 318) + (set! a2-4 (-> s5-0 bytes)) + (set! a3-4 #xffffff) + (set! v1-15 (sll v1-8 24)) + (set! a3-5 (logior a3-4 v1-15)) + (call! a0-14 a1-10 a2-4 a3-5) + (set! v1-16 v0-6) + ) + ) + (set! a0-15 (-> s5-0 bytes)) + (set! sv-20 a0-15) + ) + ((begin (set! a1-11 1) (= a0-7 a1-11)) + (set! t9-7 add-debug-vector) + (set! a0-16 #t) + (set! a1-13 318) + (set! a2-5 (-> s5-0 origin)) + (set! a3-6 (-> s5-0 bytes)) + (set! t0-4 #x3dcccccd) + (set! v1-17 (sll v1-8 24)) + (set! t1-2 (logior v1-17 #xff00)) + (call! a0-16 a1-13 a2-5 a3-6 t0-4 t1-2) + (set! a0-17 v0-7) + ) + ((begin (set! a1-14 2) (= a0-7 a1-14)) + (set! t9-8 add-debug-vector) + (set! a0-18 #t) + (set! a1-16 318) + (set! a2-6 (-> s5-0 origin)) + (set! a3-7 (-> s5-0 bytes)) + (set! t0-5 #x3dcccccd) + (set! t1-3 #x408040) + (set! v1-18 (sll v1-8 24)) + (set! t1-4 (logior t1-3 v1-18)) + (call! a0-18 a1-16 a2-6 a3-7 t0-5 t1-4) + (set! a0-19 v0-8) + ) + ((begin (set! a1-17 3) (= a0-7 a1-17)) + (set! t9-9 add-debug-vector) + (set! a0-20 #t) + (set! a1-19 318) + (set! a2-7 (-> s5-0 origin)) + (set! a3-8 (-> s5-0 bytes)) + (set! t0-6 #x3dcccccd) + (set! t1-5 #x404080) + (set! v1-19 (sll v1-8 24)) + (set! t1-6 (logior t1-5 v1-19)) + (call! a0-20 a1-19 a2-7 a3-8 t0-6 t1-6) + (set! a0-21 v0-9) + ) + ((begin + (or (begin (set! a1-20 (+ a0-7 -5)) (set! a2-8 (zero? a1-20)) a2-8) + (begin (set! a2-9 (+ a0-7 -6)) (set! a1-21 (zero? a2-9))) + ) + a1-21 + ) + (set! a0-22 sv-24) + (set! a0-23 (sll a0-22 54)) + (set! a0-24 (srl a0-23 61)) + (set! a0-25 (sll a0-24 4)) + (set! a1-23 *pat-mode-info*) + (set! a0-26 (+ a0-25 a1-23)) + (set! a0-27 (-> a0-26 hilite-color)) + (set! a1-24 (the-as uint #xffffffff00ffffff)) + (set! a0-28 (logand a0-27 a1-24)) + (set! t1-7 a0-28) + (set! t9-10 add-debug-vector) + (set! a0-29 #t) + (set! a1-25 318) + (set! a2-10 (-> s5-0 origin)) + (set! a3-9 (-> s5-0 bytes)) + (set! t0-7 #x45800000) + (set! v1-20 (sll v1-8 24)) + (set! t1-8 (logior t1-7 v1-20)) + (call! a0-29 a1-25 a2-10 a3-9 t0-7 t1-8) + (set! a0-30 v0-10) + ) + ((begin (set! a1-26 8) (= a0-7 a1-26)) + (set! a0-31 (-> s5-0 vector x)) + (set! sv-24 a0-31) + ) + ((begin (set! a1-28 10) (= a0-7 a1-28)) + (set! f0-3 (-> s5-0 vector x)) + (set! a3-10 (new 'stack-no-clear 'vector)) + (set! a0-33 a3-10) + (set! f1-0 0.0) + (set! (-> a0-33 x) f1-0) + (set! a1-29 -8192.0) + (set! f1-1 (gpr->fpr a1-29)) + (set! f0-4 (*.s f1-1 f0-3)) + (set! (-> a0-33 y) f0-4) + (set! f0-5 0.0) + (set! (-> a0-33 z) f0-5) + (set! a1-30 1.0) + (set! f0-6 (gpr->fpr a1-30)) + (set! (-> a0-33 w) f0-6) + (set! t9-11 add-debug-vector) + (set! a0-34 #t) + (set! a1-31 318) + (set! a2-11 (-> s5-0 origin)) + (set! t0-8 #x3f800000) + (set! t1-9 #xffffff) + (set! v1-21 (sll v1-8 24)) + (set! t1-10 (logior t1-9 v1-21)) + (call! a0-34 a1-31 a2-11 a3-10 t0-8 t1-10) + (set! a0-35 v0-11) + ) + ) + ) + #f + ) + (if (begin + (set! a0-1 arg0) + (set! v1-0 (-> a0-1 type)) + (set! t9-0 (method-of-type v1-0 update-entries!)) + (set! v0-0 (call! a0-1)) + (set! s5-0 v0-0) + (not s5-0) + ) + (begin (goto cfg-34)) + ) + ) + (label cfg-34) + (set! v0-12 0) + (ret-none) + ) + +;; failed to figure out what this is: +0 + +) diff --git a/test/decompiler/reference/jak2/engine/game/game-info-h_REF.gc b/test/decompiler/reference/jak2/engine/game/game-info-h_REF.gc index d54d586dc6..cf7226266a 100644 --- a/test/decompiler/reference/jak2/engine/game/game-info-h_REF.gc +++ b/test/decompiler/reference/jak2/engine/game/game-info-h_REF.gc @@ -188,7 +188,7 @@ (:methods (continue-point-method-9 () none 9) (continue-point-method-10 () none 10) - (continue-point-method-11 () none 11) + (continue-point-method-11 (_type_) none 11) ) ) @@ -222,100 +222,100 @@ ;; definition of type game-info (deftype game-info (basic) - ((mode symbol :offset-assert 4) - (save-name basic :offset-assert 8) - (life float :offset-assert 12) - (life-max float :offset-assert 16) - (money float :offset-assert 20) - (money-total float :offset-assert 24) - (money-per-level uint8 32 :offset-assert 28) - (deaths-per-level uint8 32 :offset-assert 60) - (buzzer-total float :offset-assert 92) - (fuel float :offset-assert 96) - (gem float :offset-assert 100) - (gem-total float :offset-assert 104) - (skill float :offset-assert 108) - (skill-total float :offset-assert 112) - (karma float :offset-assert 116) - (eco-pill-dark float :offset-assert 120) - (eco-pill-dark-total float :offset-assert 124) - (features uint64 :offset-assert 128) - (debug-features uint64 :offset-assert 136) - (secrets uint32 :offset-assert 144) - (unknown-pad1 uint32 :offset-assert 148) - (purchase-secrets uint32 :offset-assert 152) - (unknown-pad2 uint32 :offset-assert 156) - (gun-type int32 :offset-assert 160) - (gun-ammo float 4 :offset-assert 164) - (shield float :offset-assert 180) - (score float :offset-assert 184) - (score-owner uint64 :offset-assert 192) - (timer uint64 :offset-assert 200) - (timer-owner uint64 :offset-assert 208) - (timer-flash basic :offset-assert 216) - (counter float :offset-assert 220) - (counter-flash basic :offset-assert 224) - (attack-id uint32 :offset-assert 228) - (perm-list entity-perm-array :offset-assert 232) - (task-perm-list entity-perm-array :offset-assert 236) - (current-continue continue-point :offset-assert 240) - (last-continue basic :offset-assert 244) - (unknown-pad3 uint32 3 :offset-assert 248) - (task-counter uint32 :offset-assert 260) - (unknown-pad4 uint32 :offset-assert 264) - (level-opened uint8 32 :offset-assert 268) - (total-deaths int32 :offset-assert 300) - (continue-deaths int32 :offset-assert 304) - (task-deaths int32 :offset-assert 308) - (total-trys int32 :offset-assert 312) - (game-start-time time-frame :offset-assert 320) - (continue-time time-frame :offset-assert 328) - (death-time time-frame :offset-assert 336) - (hit-time time-frame :offset-assert 344) - (task-pickup-time time-frame :offset-assert 352) - (unknown-array1 (array uint64) :offset-assert 360) - (unknown-array2 (array uint64) :offset-assert 364) - (unknown-array3 (array uint64) :offset-assert 368) - (death-pos vector-array :offset 372) - (stop-watch-start uint64 :offset-assert 376) - (stop-watch-stop uint64 :offset-assert 384) - (blackout-time time-frame :offset-assert 392) - (letterbox-time time-frame :offset-assert 400) - (hint-play-time time-frame :offset-assert 408) - (display-text-time time-frame :offset-assert 416) - (display-text-handle uint64 :offset-assert 424) - (death-movie-tick int32 :offset-assert 432) - (want-auto-save symbol :offset-assert 436) - (auto-save-proc handle :offset-assert 440) - (auto-save-status mc-status-code :offset-assert 448) - (auto-save-card int32 :offset-assert 452) - (auto-save-which int32 :offset-assert 456) - (auto-save-count int32 :offset-assert 460) - (pov-camera-handle uint64 :offset-assert 464) - (other-camera-handle uint64 :offset-assert 472) - (controller uint64 2 :offset-assert 480) - (race-timer uint64 :offset-assert 496) - (race-current-lap-count int32 :offset-assert 504) - (race-total-lap-count int32 :offset-assert 508) - (race-position int32 :offset-assert 512) - (race-number-turbos int32 :offset-assert 516) - (bot-health uint32 3 :offset-assert 520) - (demo-state uint32 :offset-assert 532) - (wanted-flash basic :offset-assert 536) - (distance float :offset-assert 540) - (kiosk-timeout uint64 :offset-assert 544) - (pause-start-time time-frame :offset-assert 552) - (game-score basic :offset-assert 560) - (goal float :offset-assert 564) - (miss float :offset-assert 568) - (miss-max float :offset-assert 572) - (unknown-array4 (array uint64) :offset-assert 576) - (live-eco-pill-count int32 :offset-assert 580) - (live-gem-count int32 :offset-assert 584) - (air-supply float :offset-assert 588) - (homing-beacon int32 :offset-assert 592) - (dark-eco-pickup int32 :offset-assert 596) - (green-eco-pickup int32 :offset-assert 600) + ((mode symbol :offset-assert 4) + (save-name string :offset-assert 8) + (life float :offset-assert 12) + (life-max float :offset-assert 16) + (money float :offset-assert 20) + (money-total float :offset-assert 24) + (money-per-level uint8 32 :offset-assert 28) + (deaths-per-level uint8 32 :offset-assert 60) + (buzzer-total float :offset-assert 92) + (fuel float :offset-assert 96) + (gem float :offset-assert 100) + (gem-total float :offset-assert 104) + (skill float :offset-assert 108) + (skill-total float :offset-assert 112) + (karma float :offset-assert 116) + (eco-pill-dark float :offset-assert 120) + (eco-pill-dark-total float :offset-assert 124) + (features uint64 :offset-assert 128) + (debug-features uint64 :offset-assert 136) + (secrets uint32 :offset-assert 144) + (unknown-pad1 uint32 :offset-assert 148) + (purchase-secrets uint32 :offset-assert 152) + (unknown-pad2 uint32 :offset-assert 156) + (gun-type int32 :offset-assert 160) + (gun-ammo float 4 :offset-assert 164) + (shield float :offset-assert 180) + (score float :offset-assert 184) + (score-owner uint64 :offset-assert 192) + (timer uint64 :offset-assert 200) + (timer-owner uint64 :offset-assert 208) + (timer-flash basic :offset-assert 216) + (counter float :offset-assert 220) + (counter-flash basic :offset-assert 224) + (attack-id uint32 :offset-assert 228) + (perm-list entity-perm-array :offset-assert 232) + (task-perm-list entity-perm-array :offset-assert 236) + (current-continue continue-point :offset-assert 240) + (last-continue continue-point :offset-assert 244) + (unknown-pad3 uint32 3 :offset-assert 248) + (task-counter uint32 :offset-assert 260) + (unknown-pad4 uint32 :offset-assert 264) + (level-opened uint8 32 :offset-assert 268) + (total-deaths int32 :offset-assert 300) + (continue-deaths int32 :offset-assert 304) + (task-deaths int32 :offset-assert 308) + (total-trys int32 :offset-assert 312) + (game-start-time time-frame :offset-assert 320) + (continue-time time-frame :offset-assert 328) + (death-time time-frame :offset-assert 336) + (hit-time time-frame :offset-assert 344) + (task-pickup-time time-frame :offset-assert 352) + (unknown-array1 (array uint64) :offset-assert 360) + (unknown-array2 (array uint64) :offset-assert 364) + (unknown-array3 (array uint64) :offset-assert 368) + (death-pos vector-array :offset 372) + (stop-watch-start uint64 :offset-assert 376) + (stop-watch-stop uint64 :offset-assert 384) + (blackout-time time-frame :offset-assert 392) + (letterbox-time time-frame :offset-assert 400) + (hint-play-time time-frame :offset-assert 408) + (display-text-time time-frame :offset-assert 416) + (display-text-handle uint64 :offset-assert 424) + (death-movie-tick int32 :offset-assert 432) + (want-auto-save symbol :offset-assert 436) + (auto-save-proc handle :offset-assert 440) + (auto-save-status mc-status-code :offset-assert 448) + (auto-save-card int32 :offset-assert 452) + (auto-save-which int32 :offset-assert 456) + (auto-save-count int32 :offset-assert 460) + (pov-camera-handle uint64 :offset-assert 464) + (other-camera-handle uint64 :offset-assert 472) + (controller uint64 2 :offset-assert 480) + (race-timer uint64 :offset-assert 496) + (race-current-lap-count int32 :offset-assert 504) + (race-total-lap-count int32 :offset-assert 508) + (race-position int32 :offset-assert 512) + (race-number-turbos int32 :offset-assert 516) + (bot-health uint32 3 :offset-assert 520) + (demo-state uint32 :offset-assert 532) + (wanted-flash basic :offset-assert 536) + (distance float :offset-assert 540) + (kiosk-timeout uint64 :offset-assert 544) + (pause-start-time time-frame :offset-assert 552) + (game-score (array highscore-info) :offset-assert 560) + (goal float :offset-assert 564) + (miss float :offset-assert 568) + (miss-max float :offset-assert 572) + (unknown-array4 (array uint64) :offset-assert 576) + (live-eco-pill-count int32 :offset-assert 580) + (live-gem-count int32 :offset-assert 584) + (air-supply float :offset-assert 588) + (homing-beacon int32 :offset-assert 592) + (dark-eco-pickup int32 :offset-assert 596) + (green-eco-pickup int32 :offset-assert 600) ) :method-count-assert 31 :size-assert #x25c @@ -323,8 +323,8 @@ (:methods (initialize! (_type_ symbol game-save string) _type_ 9) (game-info-method-10 () none 10) - (game-info-method-11 () none 11) - (game-info-method-12 () none 12) + (task-complete? (_type_ game-task) symbol 11) + (game-info-method-12 (_type_) none 12) (game-info-method-13 () none 13) (game-info-method-14 () none 14) (game-info-method-15 () none 15) diff --git a/test/decompiler/reference/jak2/engine/geometry/cylinder_REF.gc b/test/decompiler/reference/jak2/engine/geometry/cylinder_REF.gc new file mode 100644 index 0000000000..bf131e0a09 --- /dev/null +++ b/test/decompiler/reference/jak2/engine/geometry/cylinder_REF.gc @@ -0,0 +1,415 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition for method 10 of type cylinder +(defmethod ray-capsule-intersect cylinder ((obj cylinder) (ray1 vector) (ray2 vector)) + (rlet ((acc :class vf) + (vf0 :class vf) + (vf1 :class vf) + (vf2 :class vf) + (vf3 :class vf) + (vf4 :class vf) + ) + (init-vf0-vector) + (let ((t2-0 (new 'stack-no-clear 'vector)) + (s4-0 (new 'stack-no-clear 'vector)) + ) + 0.0 + 0.0 + (let ((f30-0 (ray-cylinder-intersect ray1 ray2 (-> obj origin) (-> obj axis) (-> obj radius) (-> obj length) t2-0)) + ) + (let ((f0-5 (ray-sphere-intersect ray1 ray2 (-> obj origin) (-> obj radius)))) + (if (and (>= f0-5 0.0) (or (< f30-0 0.0) (< f0-5 f30-0))) + (set! f30-0 f0-5) + ) + ) + (let ((v1-5 s4-0)) + (let ((a0-3 (-> obj origin)) + (a1-3 (-> obj axis)) + (f0-6 (-> obj length)) + ) + (.lvf vf2 (&-> a1-3 quad)) + (.lvf vf1 (&-> a0-3 quad)) + (let ((a0-4 f0-6)) + (.mov vf3 a0-4) + ) + ) + (.add.x.vf vf4 vf0 vf0 :mask #b1000) + (.mul.x.vf acc vf2 vf3) + (.add.mul.w.vf vf4 vf1 vf0 acc :mask #b111) + (.svf (&-> v1-5 quad) vf4) + ) + (let ((f0-8 (ray-sphere-intersect ray1 ray2 s4-0 (-> obj radius)))) + (if (and (>= f0-8 0.0) (or (< f30-0 0.0) (< f0-8 f30-0))) + (set! f30-0 f0-8) + ) + ) + f30-0 + ) + ) + ) + ) + +;; definition of type cylinder-verts +(deftype cylinder-verts (structure) + ((vert vector 24 :inline :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #x180 + :flag-assert #x900000180 + ) + +;; definition for method 3 of type cylinder-verts +(defmethod inspect cylinder-verts ((obj cylinder-verts)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'cylinder-verts) + (format #t "~1Tvert[24] @ #x~X~%" (-> obj vert)) + (label cfg-4) + obj + ) + +;; definition for method 9 of type cylinder +;; INFO: Used lq/sq +;; INFO: Return type mismatch int vs none. +(defmethod debug-draw cylinder ((obj cylinder) (arg0 vector4w)) + (local-vars + (sv-896 matrix) + (sv-912 vector) + (sv-928 vector) + (sv-944 vector) + (sv-960 vector) + (sv-976 vector) + (sv-992 vector) + (sv-1008 vector) + (sv-1024 vector) + (sv-1040 vector) + (sv-1056 vector) + (sv-1072 vector) + (sv-1088 vector) + ) + (rlet ((acc :class vf) + (vf0 :class vf) + (vf1 :class vf) + (vf2 :class vf) + (vf3 :class vf) + (vf4 :class vf) + (vf5 :class vf) + (vf6 :class vf) + ) + (init-vf0-vector) + (let ((s1-0 (new 'stack-no-clear 'vector)) + (s0-0 (new 'stack-no-clear 'vector)) + ) + (if (< 0.999 (fabs (-> obj axis y))) + (vector-cross! s1-0 (-> obj axis) (new 'static 'vector :z 1.0)) + (vector-cross! s1-0 (-> obj axis) (new 'static 'vector :y 1.0)) + ) + (vector-normalize! s1-0 (-> obj radius)) + (vector-float*! s0-0 (-> obj axis) (* 0.125 (-> obj length))) + (let ((s5-0 (new 'stack-no-clear 'cylinder-verts)) + (s4-0 (new 'stack-no-clear 'cylinder-verts)) + (s3-0 (new 'stack-no-clear 'matrix)) + ) + (matrix-axis-angle! s3-0 (-> obj axis) 4096.0) + (set! sv-896 (new 'stack-no-clear 'matrix)) + (vector-matrix*! (the-as vector sv-896) (-> obj origin) s3-0) + (let ((v1-6 (-> s3-0 trans))) + (.lvf vf4 (&-> (-> obj origin) quad)) + (.lvf vf5 (&-> sv-896 vector 0 quad)) + (.mov.vf vf6 vf0 :mask #b1000) + (.sub.vf vf6 vf4 vf5 :mask #b111) + (.svf (&-> v1-6 quad) vf6) + ) + (dotimes (v1-7 8) + (vector+! (-> s5-0 vert (+ v1-7 8)) (-> obj origin) s1-0) + (let ((a0-16 (-> s5-0 vert (+ v1-7 8)))) + (let ((a1-13 (-> s5-0 vert (+ v1-7 8))) + (a2-4 s0-0) + (f0-5 (the float v1-7)) + ) + (.lvf vf2 (&-> a2-4 quad)) + (.lvf vf1 (&-> a1-13 quad)) + (let ((a1-14 f0-5)) + (.mov vf3 a1-14) + ) + ) + (.add.x.vf vf4 vf0 vf0 :mask #b1000) + (.mul.x.vf acc vf2 vf3) + (.add.mul.w.vf vf4 vf1 vf0 acc :mask #b111) + (.svf (&-> a0-16 quad) vf4) + ) + ) + (dotimes (s0-1 8) + (set! sv-944 (-> s5-0 vert s0-1)) + (set! sv-912 (-> obj origin)) + (set! sv-928 s1-0) + (let ((f0-8 (cos (* 2048.0 (the float (- 7 s0-1)))))) + (.lvf vf2 (&-> sv-928 quad)) + (.lvf vf1 (&-> sv-912 quad)) + (let ((v1-19 f0-8)) + (.mov vf3 v1-19) + ) + ) + (.add.x.vf vf4 vf0 vf0 :mask #b1000) + (.mul.x.vf acc vf2 vf3) + (.add.mul.w.vf vf4 vf1 vf0 acc :mask #b111) + (.svf (&-> sv-944 quad) vf4) + (set! sv-992 (-> s5-0 vert s0-1)) + (set! sv-960 (-> s5-0 vert s0-1)) + (set! sv-976 (-> obj axis)) + (let ((f0-13 (* (- (-> obj radius)) (sin (* 2048.0 (the float (- 7 s0-1))))))) + (.lvf vf2 (&-> sv-976 quad)) + (.lvf vf1 (&-> sv-960 quad)) + (let ((v1-33 f0-13)) + (.mov vf3 v1-33) + ) + ) + (.add.x.vf vf4 vf0 vf0 :mask #b1000) + (.mul.x.vf acc vf2 vf3) + (.add.mul.w.vf vf4 vf1 vf0 acc :mask #b111) + (.svf (&-> sv-992 quad) vf4) + (set! sv-1040 (-> s5-0 vert (+ s0-1 16))) + (set! sv-1008 (-> obj origin)) + (set! sv-1024 s1-0) + (let ((f0-16 (cos (* 2048.0 (the float s0-1))))) + (.lvf vf2 (&-> sv-1024 quad)) + (.lvf vf1 (&-> sv-1008 quad)) + (let ((v1-43 f0-16)) + (.mov vf3 v1-43) + ) + ) + (.add.x.vf vf4 vf0 vf0 :mask #b1000) + (.mul.x.vf acc vf2 vf3) + (.add.mul.w.vf vf4 vf1 vf0 acc :mask #b111) + (.svf (&-> sv-1040 quad) vf4) + (set! sv-1088 (-> s5-0 vert (+ s0-1 16))) + (set! sv-1056 (-> s5-0 vert (+ s0-1 16))) + (set! sv-1072 (-> obj axis)) + (let ((f0-21 (+ (-> obj length) (* (-> obj radius) (sin (* 2048.0 (the float s0-1))))))) + (.lvf vf2 (&-> sv-1072 quad)) + (.lvf vf1 (&-> sv-1056 quad)) + (let ((v1-57 f0-21)) + (.mov vf3 v1-57) + ) + ) + (.add.x.vf vf4 vf0 vf0 :mask #b1000) + (.mul.x.vf acc vf2 vf3) + (.add.mul.w.vf vf4 vf1 vf0 acc :mask #b111) + (.svf (&-> sv-1088 quad) vf4) + ) + (dotimes (s2-1 16) + (dotimes (s1-1 24) + (vector-matrix*! (-> s4-0 vert s1-1) (-> s5-0 vert s1-1) s3-0) + (camera-line (-> s5-0 vert s1-1) (-> s4-0 vert s1-1) arg0) + (if (nonzero? s1-1) + (camera-line (-> s5-0 vert s1-1) (-> s5-0 vert (+ s1-1 -1)) arg0) + ) + ) + (let ((v1-77 s5-0)) + (set! s5-0 s4-0) + (set! s4-0 v1-77) + ) + ) + ) + ) + 0 + (none) + ) + ) + +;; definition for function ray-arbitrary-circle-intersect +(defun ray-arbitrary-circle-intersect ((arg0 vector) (arg1 vector) (arg2 vector) (arg3 vector) (arg4 float)) + (let* ((v1-1 (vector-! (new 'stack-no-clear 'vector) arg2 arg0)) + (f0-2 (/ (vector-dot v1-1 arg3) (vector-dot arg1 arg3))) + ) + (cond + ((or (< 1.0 f0-2) (< f0-2 0.0)) + -100000000.0 + ) + ((let ((a0-8 (new 'stack-no-clear 'vector))) + (vector-float*! a0-8 arg1 f0-2) + (vector-! a0-8 a0-8 v1-1) + (< (vector-dot a0-8 a0-8) (* arg4 arg4)) + ) + f0-2 + ) + (else + -100000000.0 + ) + ) + ) + ) + +;; definition for method 10 of type cylinder-flat +;; INFO: Used lq/sq +(defmethod ray-flat-cyl-intersect cylinder-flat ((obj cylinder-flat) (arg0 vector) (arg1 vector)) + (rlet ((acc :class vf) + (vf0 :class vf) + (vf1 :class vf) + (vf2 :class vf) + (vf3 :class vf) + (vf4 :class vf) + ) + (init-vf0-vector) + (let ((gp-0 (new 'stack-no-clear 'vector)) + (s5-0 (new 'stack-no-clear 'vector)) + ) + 0.0 + 0.0 + (let ((f30-0 (ray-cylinder-intersect arg0 arg1 (-> obj origin) (-> obj axis) (-> obj radius) (-> obj length) gp-0)) + ) + (let ((f0-5 (ray-arbitrary-circle-intersect arg0 arg1 (-> obj origin) (-> obj axis) (-> obj radius)))) + (when (and (>= f0-5 0.0) (or (< f30-0 0.0) (< f0-5 f30-0))) + (set! f30-0 f0-5) + (set! (-> gp-0 quad) (-> obj origin quad)) + ) + ) + (let ((v1-5 s5-0)) + (let ((a0-5 (-> obj origin)) + (a1-3 (-> obj axis)) + (f0-6 (-> obj length)) + ) + (.lvf vf2 (&-> a1-3 quad)) + (.lvf vf1 (&-> a0-5 quad)) + (let ((a0-6 f0-6)) + (.mov vf3 a0-6) + ) + ) + (.add.x.vf vf4 vf0 vf0 :mask #b1000) + (.mul.x.vf acc vf2 vf3) + (.add.mul.w.vf vf4 vf1 vf0 acc :mask #b111) + (.svf (&-> v1-5 quad) vf4) + ) + (let ((f0-8 (ray-arbitrary-circle-intersect arg0 arg1 s5-0 (-> obj axis) (-> obj radius)))) + (when (and (>= f0-8 0.0) (or (< f30-0 0.0) (< f0-8 f30-0))) + (set! f30-0 f0-8) + (set! (-> gp-0 quad) (-> s5-0 quad)) + ) + ) + f30-0 + ) + ) + ) + ) + +;; definition of type cylinder-flat-verts +(deftype cylinder-flat-verts (structure) + ((vert vector 10 :inline :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #xa0 + :flag-assert #x9000000a0 + ) + +;; definition for method 3 of type cylinder-flat-verts +(defmethod inspect cylinder-flat-verts ((obj cylinder-flat-verts)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'cylinder-flat-verts) + (format #t "~1Tvert[10] @ #x~X~%" (-> obj vert)) + (label cfg-4) + obj + ) + +;; definition for method 9 of type cylinder-flat +;; INFO: Used lq/sq +;; INFO: Return type mismatch int vs none. +(defmethod debug-draw cylinder-flat ((obj cylinder-flat) (arg0 vector4w)) + (local-vars (sv-448 vector)) + (rlet ((acc :class vf) + (vf0 :class vf) + (vf1 :class vf) + (vf2 :class vf) + (vf3 :class vf) + (vf4 :class vf) + (vf5 :class vf) + (vf6 :class vf) + ) + (init-vf0-vector) + (let ((s1-0 (new 'stack-no-clear 'vector)) + (s0-0 (new 'stack-no-clear 'vector)) + ) + (if (< 0.999 (fabs (-> obj axis y))) + (vector-cross! s1-0 (-> obj axis) (new 'static 'vector :z 1.0)) + (vector-cross! s1-0 (-> obj axis) (new 'static 'vector :y 1.0)) + ) + (vector-normalize! s1-0 (-> obj radius)) + (vector-float*! s0-0 (-> obj axis) (* 0.14285715 (-> obj length))) + (let ((s5-0 (new 'stack-no-clear 'cylinder-flat-verts)) + (s4-0 (new 'stack-no-clear 'cylinder-flat-verts)) + (s3-0 (new 'stack-no-clear 'matrix)) + ) + (matrix-axis-angle! s3-0 (-> obj axis) 4096.0) + (set! sv-448 (new 'stack-no-clear 'vector)) + (vector-matrix*! sv-448 (-> obj origin) s3-0) + (let ((v1-6 (-> s3-0 trans))) + (.lvf vf4 (&-> (-> obj origin) quad)) + (.lvf vf5 (&-> sv-448 quad)) + (.mov.vf vf6 vf0 :mask #b1000) + (.sub.vf vf6 vf4 vf5 :mask #b111) + (.svf (&-> v1-6 quad) vf6) + ) + (dotimes (v1-7 8) + (vector+! (-> s5-0 vert (+ v1-7 1)) (-> obj origin) s1-0) + (let ((a0-16 (-> s5-0 vert (+ v1-7 1)))) + (let ((a1-13 (-> s5-0 vert (+ v1-7 1))) + (a2-4 s0-0) + (f0-5 (the float v1-7)) + ) + (.lvf vf2 (&-> a2-4 quad)) + (.lvf vf1 (&-> a1-13 quad)) + (let ((a1-14 f0-5)) + (.mov vf3 a1-14) + ) + ) + (.add.x.vf vf4 vf0 vf0 :mask #b1000) + (.mul.x.vf acc vf2 vf3) + (.add.mul.w.vf vf4 vf1 vf0 acc :mask #b111) + (.svf (&-> a0-16 quad) vf4) + ) + ) + (set! (-> s5-0 vert 0 quad) (-> obj origin quad)) + (let ((v1-11 (-> s5-0 vert 9))) + (let ((a0-19 (-> obj origin)) + (a1-15 (-> obj axis)) + (f0-6 (-> obj length)) + ) + (.lvf vf2 (&-> a1-15 quad)) + (.lvf vf1 (&-> a0-19 quad)) + (let ((a0-20 f0-6)) + (.mov vf3 a0-20) + ) + ) + (.add.x.vf vf4 vf0 vf0 :mask #b1000) + (.mul.x.vf acc vf2 vf3) + (.add.mul.w.vf vf4 vf1 vf0 acc :mask #b111) + (.svf (&-> v1-11 quad) vf4) + ) + (dotimes (s2-1 16) + (dotimes (s1-1 10) + (vector-matrix*! (-> s4-0 vert s1-1) (-> s5-0 vert s1-1) s3-0) + (camera-line (-> s5-0 vert s1-1) (-> s4-0 vert s1-1) arg0) + (if (nonzero? s1-1) + (camera-line (-> s5-0 vert s1-1) (-> s5-0 vert (+ s1-1 -1)) arg0) + ) + ) + (let ((v1-28 s5-0)) + (set! s5-0 s4-0) + (set! s4-0 v1-28) + ) + ) + ) + ) + 0 + (none) + ) + ) + + + + diff --git a/test/decompiler/reference/jak2/engine/level/level-h_REF.gc b/test/decompiler/reference/jak2/engine/level/level-h_REF.gc index 9c5059de71..28db62246b 100644 --- a/test/decompiler/reference/jak2/engine/level/level-h_REF.gc +++ b/test/decompiler/reference/jak2/engine/level/level-h_REF.gc @@ -164,14 +164,14 @@ (other-name-1 symbol :offset 24) (packages pair :offset-assert 32) (memory-mode uint32 :offset-assert 36) - (music-bank basic :offset-assert 40) - (ambient-sounds basic :offset-assert 44) + (music-bank symbol :offset-assert 40) + (ambient-sounds symbol :offset-assert 44) (sound-reverb float :offset-assert 48) (mood-func symbol :offset-assert 52) (mood-init symbol :offset-assert 56) - (ocean basic :offset-assert 60) - (sky basic :offset-assert 64) - (use-camera-other basic :offset-assert 68) + (ocean symbol :offset-assert 60) + (sky symbol :offset-assert 64) + (use-camera-other symbol :offset-assert 68) (part-engine-max int32 :offset-assert 72) (city-map-bits uint64 :offset-assert 80) (continues pair :offset-assert 88) @@ -192,7 +192,7 @@ (kill-func symbol :offset-assert 156) (borrow-size uint16 2 :offset-assert 160) (borrow-level symbol 2 :offset-assert 164) - (borrow-display? basic 2 :offset-assert 172) + (borrow-display? symbol 2 :offset-assert 172) (base-task-mask task-mask :offset-assert 180) (texture-anim symbol 10 :offset-assert 184) (texture-anim-tfrag symbol :offset 184) @@ -217,6 +217,7 @@ (ocean-alpha float :offset-assert 280) (extra-sound-bank pair :offset-assert 284) ) + :pack-me :method-count-assert 9 :size-assert #x120 :flag-assert #x900000120 @@ -484,7 +485,7 @@ (debug-print-region-splitbox (_type_ vector object) none 20) (get-art-group-by-name (_type_ string) art-group 21) (level-method-22 () none 22) - (level-method-23 () none 23) + (lookup-text (_type_ game-text-id symbol) string 23) (level-method-24 () none 24) (birth (_type_) _type_ 25) (level-status-update! (_type_ symbol) _type_ 26) diff --git a/test/decompiler/reference/jak2/engine/physics/trajectory-h_REF.gc b/test/decompiler/reference/jak2/engine/physics/trajectory-h_REF.gc index 0c02d2c345..d762274516 100644 --- a/test/decompiler/reference/jak2/engine/physics/trajectory-h_REF.gc +++ b/test/decompiler/reference/jak2/engine/physics/trajectory-h_REF.gc @@ -56,7 +56,7 @@ (new (symbol type process-drawable int float collide-spec) _type_ 0) (initialize (_type_ process-drawable int float collide-spec) impact-control :behavior process 9) (update-from-cspace (_type_) none 10) - (impact-control-method-11 () none 11) + (impact-control-method-11 (_type_) none 11) ) ) @@ -264,7 +264,3 @@ ;; failed to figure out what this is: 0 - - - - diff --git a/test/decompiler/reference/jak2/engine/target/mech_suit/mech-h_REF.gc b/test/decompiler/reference/jak2/engine/target/mech_suit/mech-h_REF.gc new file mode 100644 index 0000000000..4db11f727c --- /dev/null +++ b/test/decompiler/reference/jak2/engine/target/mech_suit/mech-h_REF.gc @@ -0,0 +1,163 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type mech-info +(deftype mech-info (basic) + ((entity basic :offset-assert 4) + (hud uint64 1 :offset-assert 8) + (mech-trans vector :inline :offset-assert 16) + (mech-quat vector :inline :offset-assert 32) + (mech-scale vector :inline :offset-assert 48) + (engine-sound-id uint32 :offset-assert 64) + (engine-sound-volume float :offset-assert 68) + (engine-sound-pitch float :offset-assert 72) + (thrust-sound-id uint32 :offset-assert 76) + (drag-sound-id uint32 :offset-assert 80) + (whine-sound-id uint32 :offset-assert 84) + (mech-start-time time-frame :offset-assert 88) + (mech-time time-frame :offset-assert 96) + (no-get-off-time time-frame :offset-assert 104) + (stick-lock basic :offset-assert 112) + (stick-off basic :offset-assert 116) + (forward-vel meters :offset-assert 120) + (jump-thrust meters :offset-assert 124) + (jump-thrust-fuel float :offset-assert 128) + (unstuck-time time-frame :offset-assert 136) + (stuck-count int32 :offset-assert 144) + (back-touch-point vector :inline :offset-assert 160) + (back-touch-trans vector :inline :offset-assert 176) + (back-touch-time time-frame :offset-assert 192) + (attack-id uint32 :offset-assert 200) + (shield-value float :offset-assert 204) + (shield-max float :offset-assert 208) + (walk-anim-leg int32 :offset-assert 212) + (state-impact? symbol 1 :offset-assert 216) + (state-impact impact-control 1 :inline :offset-assert 224) + (thruster-flame-width meters :offset-assert 304) + (thruster-flame-length meters :offset-assert 308) + (thruster-local-pos vector 2 :inline :offset-assert 320) + (exhaust-local-pos vector 2 :inline :offset-assert 352) + (exhaust-local-dir vector 2 :inline :offset-assert 384) + (smoke-local-pos vector 2 :inline :offset-assert 416) + (smoke-local-vel vector 2 :inline :offset-assert 448) + (particle-system-2d basic :offset-assert 480) + (particle-system-3d basic :offset-assert 484) + (part-thruster basic :offset-assert 488) + (part-thruster-scale-x sp-field-init-spec :offset-assert 492) + (part-thruster-scale-y sp-field-init-spec :offset-assert 496) + (part-quat quaternion :offset-assert 500) + (part-vel vector :offset-assert 504) + ) + :method-count-assert 9 + :size-assert #x1fc + :flag-assert #x9000001fc + ) + +;; definition for method 3 of type mech-info +(defmethod inspect mech-info ((obj mech-info)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj (-> obj type)) + (format #t "~1Tentity: ~A~%" (-> obj entity)) + (format #t "~1Thud[1] @ #x~X~%" (-> obj hud)) + (format #t "~1Tmech-trans: ~`vector`P~%" (-> obj mech-trans)) + (format #t "~1Tmech-quat: ~`vector`P~%" (-> obj mech-quat)) + (format #t "~1Tmech-scale: ~`vector`P~%" (-> obj mech-scale)) + (format #t "~1Tengine-sound-id: ~D~%" (-> obj engine-sound-id)) + (format #t "~1Tengine-sound-volume: ~f~%" (-> obj engine-sound-volume)) + (format #t "~1Tengine-sound-pitch: ~f~%" (-> obj engine-sound-pitch)) + (format #t "~1Tthrust-sound-id: ~D~%" (-> obj thrust-sound-id)) + (format #t "~1Tdrag-sound-id: ~D~%" (-> obj drag-sound-id)) + (format #t "~1Twhine-sound-id: ~D~%" (-> obj whine-sound-id)) + (format #t "~1Tmech-start-time: ~D~%" (-> obj mech-start-time)) + (format #t "~1Tmech-time: ~D~%" (-> obj mech-time)) + (format #t "~1Tno-get-off-time: ~D~%" (-> obj no-get-off-time)) + (format #t "~1Tstick-lock: ~A~%" (-> obj stick-lock)) + (format #t "~1Tstick-off: ~A~%" (-> obj stick-off)) + (format #t "~1Tforward-vel: (meters ~m)~%" (-> obj forward-vel)) + (format #t "~1Tjump-thrust: (meters ~m)~%" (-> obj jump-thrust)) + (format #t "~1Tjump-thrust-fuel: ~f~%" (-> obj jump-thrust-fuel)) + (format #t "~1Tunstuck-time: ~D~%" (-> obj unstuck-time)) + (format #t "~1Tstuck-count: ~D~%" (-> obj stuck-count)) + (format #t "~1Tback-touch-point: ~`vector`P~%" (-> obj back-touch-point)) + (format #t "~1Tback-touch-trans: ~`vector`P~%" (-> obj back-touch-trans)) + (format #t "~1Tback-touch-time: ~D~%" (-> obj back-touch-time)) + (format #t "~1Tattack-id: ~D~%" (-> obj attack-id)) + (format #t "~1Tshield-value: ~f~%" (-> obj shield-value)) + (format #t "~1Tshield-max: ~f~%" (-> obj shield-max)) + (format #t "~1Twalk-anim-leg: ~D~%" (-> obj walk-anim-leg)) + (format #t "~1Tstate-impact?[1] @ #x~X~%" (-> obj state-impact?)) + (format #t "~1Tstate-impact[1] @ #x~X~%" (-> obj state-impact)) + (format #t "~1Tthruster-flame-width: (meters ~m)~%" (-> obj thruster-flame-width)) + (format #t "~1Tthruster-flame-length: (meters ~m)~%" (-> obj thruster-flame-length)) + (format #t "~1Tthruster-local-pos[2] @ #x~X~%" (-> obj thruster-local-pos)) + (format #t "~1Texhaust-local-pos[2] @ #x~X~%" (-> obj exhaust-local-pos)) + (format #t "~1Texhaust-local-dir[2] @ #x~X~%" (-> obj exhaust-local-dir)) + (format #t "~1Tsmoke-local-pos[2] @ #x~X~%" (-> obj smoke-local-pos)) + (format #t "~1Tsmoke-local-vel[2] @ #x~X~%" (-> obj smoke-local-vel)) + (format #t "~1Tparticle-system-2d: ~A~%" (-> obj particle-system-2d)) + (format #t "~1Tparticle-system-3d: ~A~%" (-> obj particle-system-3d)) + (format #t "~1Tpart-thruster: ~A~%" (-> obj part-thruster)) + (format #t "~1Tpart-thruster-scale-x: #~%" (-> obj part-thruster-scale-x)) + (format #t "~1Tpart-thruster-scale-y: #~%" (-> obj part-thruster-scale-y)) + (format #t "~1Tpart-quat: #~%" (-> obj part-quat)) + (format #t "~1Tpart-vel: #~%" (-> obj part-vel)) + (label cfg-4) + obj + ) + +;; failed to figure out what this is: +(let ((a0-2 (new 'static 'skeleton-group + :name "skel-mech" + :extra #f + :info #f + :art-group-name "mech" + :bounds (new 'static 'vector :w 18432.0) + :version #x7 + :shadow 2 + :origin-joint-index 3 + :shadow-joint-index 3 + ) + ) + ) + (set! (-> a0-2 jgeo) 0) + (set! (-> a0-2 janim) 3) + (set! (-> a0-2 mgeo 0) 1) + (set! (-> a0-2 lod-dist 0) 4095996000.0) + (add-to-loading-level a0-2) + ) + +;; definition for symbol *mech-shadow-control*, type shadow-control +(define *mech-shadow-control* + (new 'static 'shadow-control :settings (new 'static 'shadow-settings + :center (new 'static 'vector :w (the-as float #xa)) + :shadow-dir (new 'static 'vector :y -1.0 :w 614400.0) + :bot-plane (new 'static 'plane :y 1.0 :w 81920.0) + :top-plane (new 'static 'plane :y 1.0 :w 2048.0) + ) + ) + ) + +;; failed to figure out what this is: +(let ((a0-3 (new 'static 'skeleton-group + :name "skel-mech-explode" + :extra #f + :info #f + :art-group-name "mech" + :bounds (new 'static 'vector :w 18432.0) + :version #x7 + :origin-joint-index 3 + ) + ) + ) + (set! (-> a0-3 jgeo) 39) + (set! (-> a0-3 janim) 41) + (set! (-> a0-3 mgeo 0) 40) + (set! (-> a0-3 lod-dist 0) 4095996000.0) + (add-to-loading-level a0-3) + ) + +;; failed to figure out what this is: +0 diff --git a/test/decompiler/reference/jak2/engine/ui/text-h_REF.gc b/test/decompiler/reference/jak2/engine/ui/text-h_REF.gc index 299a092517..761ade2929 100644 --- a/test/decompiler/reference/jak2/engine/ui/text-h_REF.gc +++ b/test/decompiler/reference/jak2/engine/ui/text-h_REF.gc @@ -27,10 +27,10 @@ ;; definition of type game-text-info (deftype game-text-info (basic) - ((length int32 :offset-assert 4) - (language-id int32 :offset-assert 8) - (group-name string :offset-assert 12) - (data game-text :dynamic :offset-assert 16) + ((length int32 :offset-assert 4) + (language-id int32 :offset-assert 8) + (group-name string :offset-assert 12) + (data game-text :inline :dynamic :offset-assert 16) ) :method-count-assert 10 :size-assert #x10 @@ -41,6 +41,7 @@ ) ;; 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)) (when (not obj) (set! obj obj) @@ -66,7 +67,3 @@ ;; failed to figure out what this is: 0 - - - - diff --git a/test/decompiler/reference/jak2/engine/ui/text_REF.gc b/test/decompiler/reference/jak2/engine/ui/text_REF.gc new file mode 100644 index 0000000000..952295918a --- /dev/null +++ b/test/decompiler/reference/jak2/engine/ui/text_REF.gc @@ -0,0 +1,652 @@ +;;-*-Lisp-*- +(in-package goal) + +;; failed to figure out what this is: +(kmemopen global "text") + +;; definition for symbol *expand-buf-number*, type int +(define *expand-buf-number* 0) + +;; definition for symbol *game-text-word*, type string +(define *game-text-word* (new 'global 'string 256 (the-as string #f))) + +;; definition for symbol *game-text-line*, type string +(define *game-text-line* (new 'global 'string 1024 (the-as string #f))) + +;; definition for symbol *expanded-text-line0*, type string +(define *expanded-text-line0* (new 'global 'string 1024 (the-as string #f))) + +;; definition for symbol *expanded-text-line1*, type string +(define *expanded-text-line1* (new 'global 'string 1024 (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) (kmalloc global #x10000 (kmalloc-flags) "heap")) + (set! (-> gp-0 current) (-> gp-0 base)) + (set! (-> gp-0 top-base) (&+ (-> gp-0 base) #x10000)) + (set! (-> gp-0 top) (-> gp-0 top-base)) + ) + ) + +;; failed to figure out what this is: +(kmemclose) + +;; definition for method 7 of type game-text-info +(defmethod relocate game-text-info ((obj game-text-info) (arg0 int)) + (let ((v1-1 (-> *level* loading-level))) + (when v1-1 + (set! (-> v1-1 loaded-text-info (-> v1-1 loaded-text-info-count)) obj) + (+! (-> v1-1 loaded-text-info-count) 1) + ) + ) + obj + ) + +;; 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 "~Tlanguage-id: ~D~%" (-> obj language-id)) + (format #t "~Tgroup-name: ~A~%" (-> obj group-name)) + (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 84 (-> arg0 length))) + (set! (-> arg0 data 83 name) "string") + (+! (-> arg0 data 83 count) 1) + (let ((v1-6 (asize-of obj))) + (+! (-> arg0 data 83 used) v1-6) + (+! (-> arg0 data 83 total) (logand -16 (+ v1-6 15))) + ) + (dotimes (s4-0 (-> obj length)) + (set! (-> arg0 length) (max 84 (-> arg0 length))) + (set! (-> arg0 data 83 name) "string") + (+! (-> arg0 data 83 count) 1) + (let ((v1-18 (asize-of (-> obj data s4-0 text)))) + (+! (-> arg0 data 83 used) v1-18) + (+! (-> arg0 data 83 total) (logand -16 (+ v1-18 15))) + ) + ) + obj + ) + +;; definition for function convert-korean-text +(defun convert-korean-text ((arg0 game-text)) + (local-vars (v1-21 int)) + "Converts the provided [[game-text]] into korean. Returns a [[string]]" + (let ((gp-0 (&-> arg0 text))) + *expanded-text-line0* + (let ((s4-0 0)) + 0 + (let ((s1-0 0) + (s5-0 ((method-of-type string length) (the-as string arg0))) + ) + (set! *expand-buf-number* (logxor *expand-buf-number* 1)) + (let ((s3-0 (if (zero? *expand-buf-number*) + *expanded-text-line0* + *expanded-text-line1* + ) + ) + ) + (let ((s2-0 (+ (-> s3-0 allocated-length) -1))) + (clear s3-0) + (while (< s4-0 s5-0) + (cond + ((= (-> (the-as (pointer uint8) (&+ gp-0 s4-0))) 3) + (+! s4-0 1) + (while (and (< s4-0 s5-0) + (!= (-> (the-as (pointer uint8) (&+ gp-0 s4-0))) 3) + (!= (-> (the-as (pointer uint8) (&+ gp-0 s4-0))) 4) + ) + (set! (-> s3-0 data s1-0) (-> (the-as (pointer uint8) (&+ gp-0 s4-0)))) + (+! s4-0 1) + (+! s1-0 1) + ) + ) + (else + (let ((v1-17 (+ s4-0 1))) + (-> (the-as (pointer uint8) (&+ gp-0 v1-17))) + (set! s4-0 (+ v1-17 1)) + ) + (set! (-> s3-0 data s1-0) (the-as uint 126)) + (let ((v1-19 (+ s1-0 1))) + (set! (-> s3-0 data v1-19) (the-as uint 89)) + (let ((v1-20 (+ v1-19 1))) + (while (and (< s4-0 s5-0) + (< v1-20 s2-0) + (!= (-> (the-as (pointer uint8) (&+ gp-0 s4-0))) 3) + (!= (-> (the-as (pointer uint8) (&+ gp-0 s4-0))) 4) + ) + (cond + ((= (-> (the-as (pointer uint8) (&+ gp-0 s4-0))) 5) + (set! (-> s3-0 data v1-20) (the-as uint 1)) + (+! s4-0 1) + (set! v1-21 (+ v1-20 1)) + ) + (else + (set! (-> s3-0 data v1-20) (the-as uint 3)) + (set! v1-21 (+ v1-20 1)) + ) + ) + (set! (-> s3-0 data v1-21) (-> (the-as (pointer uint8) (&+ gp-0 s4-0)))) + (+! s4-0 1) + (let ((v1-22 (+ v1-21 1))) + (set! (-> s3-0 data v1-22) (the-as uint 126)) + (let ((v1-23 (+ v1-22 1))) + (set! (-> s3-0 data v1-23) (the-as uint 90)) + (set! v1-20 (+ v1-23 1)) + ) + ) + ) + (set! (-> s3-0 data v1-20) (the-as uint 126)) + (let ((v1-24 (+ v1-20 1))) + (set! (-> s3-0 data v1-24) (the-as uint 43)) + (let ((v1-25 (+ v1-24 1))) + (set! (-> s3-0 data v1-25) (the-as uint 50)) + (let ((v1-26 (+ v1-25 1))) + (set! (-> s3-0 data v1-26) (the-as uint 54)) + (let ((v1-27 (+ v1-26 1))) + (set! (-> s3-0 data v1-27) (the-as uint 72)) + (set! s1-0 (+ v1-27 1)) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (set! (-> s3-0 data s1-0) (the-as uint 0)) + s3-0 + ) + ) + ) + ) + ) + +;; 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)) + (cond + ((= obj #f) + (cond + (arg1 + (the-as string #f) + ) + (else + (format (clear *temp-string*) "NO GAME TEXT") + *temp-string* + ) + ) + ) + (else + (let* ((a1-2 0) + (a3-0 (+ (-> obj length) 1)) + (v1-2 (/ (+ a1-2 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-2 v1-2) + ) + (set! t0-0 v1-2) + (set! v1-2 (/ (+ a1-2 a3-0) 2)) + ) + ) + (cond + ((!= (-> obj data v1-2 id) arg0) + (cond + (arg1 + (the-as string #f) + ) + (else + (format (clear *temp-string*) "UNKNOWN ID ~X" arg0) + *temp-string* + ) + ) + ) + ((= (-> obj language-id) 6) + (convert-korean-text (the-as game-text (-> obj data v1-2 text))) + ) + (else + (-> obj data v1-2 text) + ) + ) + ) + ) + ) + ) + +;; definition for method 23 of type level +(defmethod lookup-text level ((obj level) (arg0 game-text-id) (arg1 symbol)) + (let ((v1-0 *common-text*)) + (dotimes (a3-0 (-> obj loaded-text-info-count)) + (if (= (-> obj loaded-text-info a3-0 language-id) (-> *setting-control* user-current language)) + (set! v1-0 (-> obj loaded-text-info a3-0)) + ) + ) + (lookup-text! v1-0 arg0 arg1) + ) + ) + +;; definition for symbol text-is-loading, type symbol +(define text-is-loading #f) + +;; definition for function load-game-text-info +;; ERROR: function was not converted to expressions. Cannot decompile. + +;; definition for function load-level-text-files +;; INFO: Return type mismatch int vs none. +(defun load-level-text-files ((arg0 int)) + "Load the text files needed for level idx. + This function made more sense back when text files were split up, but in the end they put everything + in a single text group and file." + (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)) + "Draws some lines" + (when *cheat-mode* + (let ((s5-0 (new 'static 'vector4w)) + (gp-0 (new 'static 'matrix)) + ) + (let ((v1-2 (-> gp-0 data))) + (set! (-> v1-2 0) (the-as float (the int (+ -256.0 (-> arg0 origin x))))) + (set! (-> v1-2 1) (the-as float (the int (+ -208.0 (-> arg0 origin y))))) + (set! (-> v1-2 2) 0.0) + (set! (-> v1-2 3) (the-as float #x1)) + ) + (let ((v1-3 (&-> gp-0 data 4))) + (set! (-> v1-3 0) (the-as float (the int (+ -256.0 (-> arg0 width) (-> arg0 origin x))))) + (set! (-> v1-3 1) (the-as float (the int (+ -208.0 (-> arg0 origin y))))) + (set! (-> v1-3 2) 0.0) + (set! (-> v1-3 3) (the-as float #x1)) + ) + (let ((v1-4 (&-> gp-0 data 8))) + (set! (-> v1-4 0) (the-as float (the int (+ -256.0 (-> arg0 width) (-> arg0 origin x))))) + (set! (-> v1-4 1) (the-as float (the int (+ -208.0 (-> arg0 height) (-> arg0 origin y))))) + (set! (-> v1-4 2) 0.0) + (set! (-> v1-4 3) (the-as float #x1)) + ) + (set-vector! + (-> gp-0 trans) + (the-as float (the int (+ -256.0 (-> arg0 origin x)))) + (the-as float (the int (+ -208.0 (-> arg0 height) (-> arg0 origin y)))) + 0.0 + (the-as float #x1) + ) + (set-vector! s5-0 128 128 128 128) + (add-debug-line2d + #t + (bucket-id bucket-318) + (the-as vector (-> gp-0 data)) + (the-as vector (&-> gp-0 data 4)) + (the-as vector s5-0) + ) + (add-debug-line2d + #t + (bucket-id bucket-318) + (the-as vector (&-> gp-0 data 4)) + (the-as vector (&-> gp-0 data 8)) + (the-as vector s5-0) + ) + (add-debug-line2d + #t + (bucket-id bucket-318) + (the-as vector (&-> gp-0 data 8)) + (-> gp-0 trans) + (the-as vector s5-0) + ) + (add-debug-line2d + #t + (bucket-id bucket-318) + (-> gp-0 trans) + (the-as vector (-> gp-0 data)) + (the-as vector s5-0) + ) + ) + ) + 0 + (none) + ) + +;; definition for function print-game-text-scaled +;; INFO: Return type mismatch int vs none. +(defun print-game-text-scaled ((arg0 string) (arg1 float) (arg2 font-context) (arg3 int)) + "Print text, with a given scaling" + (let ((f26-0 (-> arg2 width)) + (f30-0 (-> arg2 height)) + (f24-0 (-> arg2 origin x)) + (f22-0 (-> arg2 origin y)) + (f28-0 (-> arg2 scale)) + ) + (let ((f0-1 (* (-> arg2 width) arg1)) + (f1-2 (* (-> arg2 height) arg1)) + ) + (if (logtest? (-> arg2 flags) (font-flags middle)) + (+! (-> arg2 origin x) (* 0.5 (- f26-0 f0-1))) + ) + (if (logtest? (-> arg2 flags) (font-flags left)) + (+! (-> arg2 origin y) (* 0.5 (- f30-0 f1-2))) + ) + (let ((v1-10 arg2)) + (set! (-> v1-10 scale) (* f28-0 arg1)) + ) + (set! (-> arg2 width) f0-1) + (set! (-> arg2 height) f1-2) + ) + (print-game-text arg0 arg2 #f 44 320) + (set! (-> arg2 origin x) f24-0) + (set! (-> arg2 origin y) f22-0) + (set! (-> arg2 width) f26-0) + (set! (-> arg2 height) f30-0) + (set! (-> arg2 scale) f28-0) + ) + 0 + (none) + ) + +;; definition for function print-game-text +;; WARN: Stack slot offset 48 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 20 signed mismatch +;; WARN: Stack slot offset 56 signed mismatch +;; WARN: Stack slot offset 52 signed mismatch +;; WARN: Stack slot offset 44 signed mismatch +;; WARN: Stack slot offset 36 signed mismatch +;; WARN: Stack slot offset 56 signed mismatch +;; WARN: Stack slot offset 40 signed mismatch +;; WARN: Stack slot offset 36 signed mismatch +;; WARN: Stack slot offset 48 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 20 signed mismatch +;; WARN: Stack slot offset 56 signed mismatch +;; WARN: Stack slot offset 52 signed mismatch +;; WARN: Stack slot offset 44 signed mismatch +;; WARN: Stack slot offset 36 signed mismatch +;; WARN: Stack slot offset 56 signed mismatch +;; WARN: Stack slot offset 40 signed mismatch +;; WARN: Stack slot offset 36 signed mismatch +;; WARN: Stack slot offset 48 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 20 signed mismatch +;; WARN: Stack slot offset 56 signed mismatch +;; WARN: Stack slot offset 52 signed mismatch +;; WARN: Stack slot offset 44 signed mismatch +;; WARN: Stack slot offset 36 signed mismatch +;; WARN: Stack slot offset 48 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 20 signed mismatch +;; WARN: Stack slot offset 56 signed mismatch +;; WARN: Stack slot offset 48 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 20 signed mismatch +;; WARN: Stack slot offset 56 signed mismatch +;; WARN: Stack slot offset 52 signed mismatch +;; WARN: Stack slot offset 44 signed mismatch +;; WARN: Stack slot offset 36 signed mismatch +;; WARN: Stack slot offset 56 signed mismatch +;; WARN: Stack slot offset 40 signed mismatch +;; WARN: Stack slot offset 36 signed mismatch +;; WARN: Stack slot offset 48 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 20 signed mismatch +;; WARN: Stack slot offset 56 signed mismatch +;; WARN: Stack slot offset 52 signed mismatch +;; WARN: Stack slot offset 44 signed mismatch +;; WARN: Stack slot offset 36 signed mismatch +;; WARN: Stack slot offset 56 signed mismatch +;; WARN: Stack slot offset 40 signed mismatch +;; WARN: Stack slot offset 36 signed mismatch +;; WARN: Stack slot offset 48 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 20 signed mismatch +;; WARN: Stack slot offset 56 signed mismatch +;; WARN: Stack slot offset 52 signed mismatch +;; WARN: Stack slot offset 44 signed mismatch +;; WARN: Stack slot offset 36 signed mismatch +;; WARN: Stack slot offset 48 signed mismatch +;; WARN: Stack slot offset 16 signed mismatch +;; WARN: Stack slot offset 20 signed mismatch +;; WARN: Stack slot offset 56 signed mismatch +(defun print-game-text ((arg0 string) (arg1 font-context) (arg2 symbol) (arg3 int) (arg4 int)) + (local-vars + (sv-16 float) + (sv-20 float) + (sv-24 font-flags) + (sv-28 font-color) + (sv-32 (pointer uint8)) + (sv-36 float) + (sv-40 float) + (sv-44 float) + (sv-48 float) + (sv-52 int) + (sv-56 float) + (sv-64 int) + (sv-72 uint) + (sv-80 int) + (sv-88 int) + (sv-96 int) + (sv-104 uint) + (sv-108 symbol) + (sv-112 int) + (sv-120 int) + ) + "Print text." + (cond + ((< 0.1 (-> arg1 scale)) + (set! sv-16 (-> arg1 origin x)) + (set! sv-20 (-> arg1 origin y)) + (set! sv-24 (-> arg1 flags)) + (set! sv-28 (-> arg1 color)) + (when (logtest? (-> arg1 flags) (font-flags left)) + (logclear! (-> arg1 flags) (font-flags left)) + (+! (-> arg1 origin y) + (the float (the int (* 0.5 (- (-> arg1 height) (print-game-text arg0 arg1 #t 44 320))))) + ) + ) + (set! sv-32 (-> arg0 data)) + (set! sv-36 (-> arg1 origin x)) + (set! sv-40 (-> arg1 origin x)) + (set! sv-44 (+ (-> arg1 origin x) (-> arg1 width))) + (set! sv-48 (+ (-> arg1 origin y) (-> arg1 height))) + (set! sv-52 (gpr->fpr (.asm.sllv.r0 (get-string-length " " arg1)))) + (set! sv-56 (* (if (logtest? (-> arg1 flags) (font-flags large)) + (the float arg3) + 28.0 + ) + (-> arg1 scale) + ) + ) + (set! sv-64 0) + (if (logtest? (-> arg1 flags) (font-flags middle)) + (+! (-> arg1 origin x) (* 0.5 (-> arg1 width))) + ) + (set! sv-72 (-> sv-32 0)) + (set! sv-80 0) + (set! sv-88 0) + (set! sv-96 0) + (set! sv-104 (-> sv-32 1)) + (set! sv-108 (the-as symbol #f)) + (set! sv-112 0) + (set! sv-120 0) + (set! (-> *game-text-line* data 0) (the-as uint 0)) + (while (and (not (and (zero? sv-72) (zero? sv-80) (zero? sv-88))) (>= sv-48 (-> arg1 origin y))) + (set! sv-120 0) + (set! sv-32 (&-> sv-32 1)) + (set! sv-104 (-> sv-32 0)) + (set! sv-32 (&-> sv-32 -1)) + (cond + ((and (> sv-72 0) (< sv-72 (the-as uint 4))) + (set! (-> *game-text-word* data sv-80) sv-72) + (set! sv-80 (+ sv-80 1)) + (set! (-> *game-text-word* data sv-80) sv-104) + (set! sv-80 (+ sv-80 1)) + (set! sv-32 (&-> sv-32 1)) + ) + ((= sv-72 32) + (set! (-> *game-text-word* data sv-80) sv-72) + (set! sv-80 (+ sv-80 1)) + (set! sv-108 #t) + ) + ((zero? sv-72) + (if (nonzero? sv-80) + (set! sv-108 #t) + ) + (set! sv-112 (+ sv-112 1)) + ) + ((and (= sv-72 92) (= sv-104 92)) + (set! sv-32 (&-> sv-32 1)) + (if (nonzero? sv-80) + (set! sv-108 #t) + ) + (set! sv-112 (+ sv-112 1)) + ) + ((and (= sv-72 95) (= sv-104 95)) + (set! sv-32 (&-> sv-32 1)) + (set! (-> *game-text-word* data sv-80) (the-as uint 32)) + (set! sv-80 (+ sv-80 1)) + ) + (else + (set! (-> *game-text-word* data sv-80) sv-72) + (set! sv-80 (+ sv-80 1)) + ) + ) + (when sv-108 + (set! (-> *game-text-word* data sv-80) (the-as uint 0)) + (let ((f30-1 sv-36)) + (set! sv-120 (the int (the-as float (.asm.sllv.r0 (get-string-length *game-text-word* arg1))))) + (let ((f0-26 (+ f30-1 (the float sv-120)))) + (if (= (-> *game-text-word* data (+ sv-80 -1)) 32) + (set! f0-26 (- f0-26 (the-as float sv-52))) + ) + (cond + ((< sv-44 f0-26) + (set! sv-112 (+ sv-112 1)) + ) + (else + (copy-charp<-charp (&-> *game-text-line* data sv-88) (-> *game-text-word* data)) + (set! sv-88 (+ sv-88 sv-80)) + (set! sv-80 0) + (set! sv-36 (+ sv-36 (the float sv-120))) + (set! sv-108 (the-as symbol #f)) + ) + ) + ) + ) + ) + (while (> sv-112 0) + (let ((f30-2 (+ (-> arg1 origin y) sv-56))) + (when (and (>= sv-96 (the-as int (-> arg1 start-line))) #t) + (when (= (-> *game-text-line* data (+ sv-88 -1)) 32) + (set! (-> *game-text-line* data (+ sv-88 -1)) (the-as uint 0)) + 0 + ) + (if (nonzero? (-> *game-text-line* data 0)) + (set! sv-64 (+ sv-64 1)) + ) + (when (not arg2) + (let* ((s2-1 (-> *display* frames (-> *display* on-screen) global-buf)) + (s3-1 (-> s2-1 base)) + ) + (draw-string *game-text-line* s2-1 arg1) + (set! (-> arg1 color) (-> *font-work* last-color)) + (let ((a3-2 (-> s2-1 base))) + (let ((v1-121 (-> s2-1 base))) + (set! (-> (the-as (pointer int64) v1-121)) #x20000000) + (s.w! (+ v1-121 8) 0) + (s.w! (+ v1-121 12) 0) + (set! (-> s2-1 base) (&+ v1-121 16)) + ) + (dma-bucket-insert-tag + (the-as (inline-array dma-bucket) (-> *display* frames (-> *display* on-screen) bucket-group)) + (the-as bucket-id arg4) + s3-1 + (the-as (pointer dma-tag) a3-2) + ) + ) + ) + ) + (set! (-> arg1 origin y) f30-2) + ) + ) + (set! sv-96 (+ sv-96 1)) + (set! (-> *game-text-line* data 0) (the-as uint 0)) + (set! sv-88 0) + (set! sv-112 (+ sv-112 -1)) + (set! sv-36 sv-40) + (when sv-108 + (copy-charp<-charp (&-> *game-text-line* data sv-88) (-> *game-text-word* data)) + (set! sv-88 (+ sv-88 sv-80)) + (set! sv-80 0) + (set! sv-108 (the-as symbol #f)) + (set! sv-36 (+ sv-36 (the float sv-120))) + ) + ) + (when (nonzero? sv-72) + (set! sv-32 (&-> sv-32 1)) + (set! sv-72 (-> sv-32 0)) + ) + ) + (set! (-> arg1 origin x) sv-16) + (set! (-> arg1 origin y) sv-20) + (set! (-> arg1 flags) sv-24) + (set! (-> arg1 color) sv-28) + (if (> sv-64 0) + (* sv-56 (the float sv-64)) + 0.0 + ) + ) + (else + 0.0 + ) + ) + ) + +;; definition for function disable-level-text-file-loading +;; INFO: Return type mismatch int vs none. +(defun disable-level-text-file-loading () + "Disables [[*level-text-file-load-flag*]]" + (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 () + "Disables [[*level-text-file-load-flag*]]" + (set! *level-text-file-load-flag* #t) + 0 + (none) + ) diff --git a/test/decompiler/reference/jak2/engine/util/script-h_REF.gc b/test/decompiler/reference/jak2/engine/util/script-h_REF.gc index e3952dc8e4..ac37f7e703 100644 --- a/test/decompiler/reference/jak2/engine/util/script-h_REF.gc +++ b/test/decompiler/reference/jak2/engine/util/script-h_REF.gc @@ -3,9 +3,9 @@ ;; definition of type script-form (deftype script-form (structure) - ((name basic :offset-assert 0) - (spec basic :offset-assert 4) - (func basic :offset-assert 8) + ((name string :offset-assert 0) + (spec basic :offset-assert 4) + (func basic :offset-assert 8) ) :method-count-assert 10 :size-assert #xc @@ -101,7 +101,3 @@ ;; failed to figure out what this is: 0 - - - - diff --git a/test/decompiler/reference/jak2/engine/util/sync-info-h_REF.gc b/test/decompiler/reference/jak2/engine/util/sync-info-h_REF.gc index 85d538c111..63df5a36d4 100644 --- a/test/decompiler/reference/jak2/engine/util/sync-info-h_REF.gc +++ b/test/decompiler/reference/jak2/engine/util/sync-info-h_REF.gc @@ -48,13 +48,13 @@ :size-assert #x10 :flag-assert #x1000000010 (:methods - (sync-info-method-9 () none 9) - (sync-info-method-10 () none 10) - (sync-info-method-11 () none 11) - (sync-info-method-12 () none 12) - (sync-info-method-13 () none 13) - (sync-info-method-14 () none 14) - (sync-info-method-15 () none 15) + (sync-info-method-9 (_type_) none 9) + (get-phase-offset (_type_) float 10) + (get-norm! (_type_) float 11) + (multiply-norm! (_type_ float object) float 12) + (initialize! () none 13) + (sync-info-method-14 (_type_ time-frame) time-frame 14) + (sync-info-method-15 (_type_ float) none 15) ) ) @@ -339,7 +339,3 @@ ;; failed to figure out what this is: 0 - - - - diff --git a/test/offline/config/jak2/config.jsonc b/test/offline/config/jak2/config.jsonc index 33cc65df85..af876eb207 100644 --- a/test/offline/config/jak2/config.jsonc +++ b/test/offline/config/jak2/config.jsonc @@ -36,8 +36,15 @@ // cache asm "invalidate-cache-line", // asm, weird vector dot - "(method 17 trsqv)" + "(method 17 trsqv)", + // history - rgba issues + "history-draw", + // text - cfg failure + "load-game-text-info", + // - never fixed this one in jak 1, assumed there was an original bug? + "print-game-text", + "i-hopefully-will-never-exist-dont-add-anything-after-me-please" ], "skip_compile_states": {}