From 2d1b5fa57c1d419cf7ce3ce37de1fe84a50ee303 Mon Sep 17 00:00:00 2001 From: Tyler Wilding Date: Sat, 8 Oct 2022 11:45:41 -0400 Subject: [PATCH] d/jak2: finish `region` as well as some typedef files - `ctywide-obs-h` | `vehicle-h` | `rigid-body-h` (#1935) --- decompiler/config/jak2/all-types.gc | 847 +++++++++------- .../jak2/anonymous_function_types.jsonc | 3 +- decompiler/config/jak2/hacks.jsonc | 10 +- decompiler/config/jak2/stack_structures.jsonc | 11 +- decompiler/config/jak2/type_casts.jsonc | 74 ++ decompiler/config/jak2/var_names.jsonc | 47 + decompiler/util/data_decompile.cpp | 16 + goal_src/jak2/engine/ai/traffic-h.gc | 6 + goal_src/jak2/engine/anim/joint-exploder.gc | 21 + goal_src/jak2/engine/entity/entity.gc | 1 - goal_src/jak2/engine/game/game-info-h.gc | 5 +- goal_src/jak2/engine/game/main-h.gc | 17 +- .../jak2/engine/gfx/background/subdivide-h.gc | 51 +- goal_src/jak2/engine/level/region-h.gc | 41 +- goal_src/jak2/engine/level/region.gc | 703 +++++++++++++ goal_src/jak2/engine/nav/nav-mesh-h.gc | 9 +- goal_src/jak2/engine/physics/rigid-body-h.gc | 385 +++++++ goal_src/jak2/engine/scene/scene-h.gc | 125 +-- goal_src/jak2/engine/util/script.gc | 21 +- goal_src/jak2/kernel/gkernel-h.gc | 4 +- .../jak2/levels/city/common/ctywide-obs-h.gc | 36 + .../jak2/levels/city/common/nav-graph-h.gc | 161 ++- goal_src/jak2/levels/city/common/vehicle-h.gc | 429 ++++++++ scripts/gsrc/update-from-decomp.py | 1 - scripts/gsrc/update-gsrc-via-refs.py | 1 - .../jak2/engine/entity/entity_REF.gc | 2 - .../engine/gfx/background/subdivide-h_REF.gc | 44 +- .../reference/jak2/engine/level/bsp_REF.gc | 5 + .../jak2/engine/level/region-h_REF.gc | 8 +- .../reference/jak2/engine/level/region_REF.gc | 752 ++++++++++++++ .../jak2/engine/nav/nav-mesh-h_REF.gc | 2 +- .../jak2/engine/physics/rigid-body-h_REF.gc | 600 +++++++++++ .../jak2/engine/scene/scene-h_REF.gc | 122 +-- .../levels/city/common/ctywide-obs-h_REF.gc | 88 ++ .../levels/city/common/nav-graph-h_REF.gc | 155 +-- .../jak2/levels/city/common/vehicle-h_REF.gc | 952 ++++++++++++++++++ 36 files changed, 5016 insertions(+), 739 deletions(-) create mode 100644 test/decompiler/reference/jak2/engine/level/region_REF.gc create mode 100644 test/decompiler/reference/jak2/engine/physics/rigid-body-h_REF.gc create mode 100644 test/decompiler/reference/jak2/levels/city/common/ctywide-obs-h_REF.gc create mode 100644 test/decompiler/reference/jak2/levels/city/common/vehicle-h_REF.gc diff --git a/decompiler/config/jak2/all-types.gc b/decompiler/config/jak2/all-types.gc index d60f0b33a3..54b9b9210b 100644 --- a/decompiler/config/jak2/all-types.gc +++ b/decompiler/config/jak2/all-types.gc @@ -576,7 +576,7 @@ (post-hook function :offset-assert 76) (event-hook (function process int symbol event-message-block object) :offset-assert 80) (allocated-length int32 :offset-assert 84) - (pad0 uint32 2) + (pad-unknown-0 uint32 2) ;; had to rename this unfortunately, there is a type that uses this same name "vehicle" (heap-base pointer :offset-assert 96) (heap-top pointer :offset-assert 100) (heap-cur pointer :offset-assert 104) @@ -8111,15 +8111,14 @@ ;; +++main-h:scene-controls (defenum scene-controls :type int64 - (all-off 0) - (channel 1) - (anim-name 2) - (dma-size 4) - (bounds-spheres 8) - (actors 16) - (actor-marks 32) - (special-fma-spheres 64) - (all-on 95)) + :bitfield #t + (channel) + (anim-name) + (dma-size) + (bounds-spheres) + (actors) + (actor-marks) + (special-fma-spheres)) ;; ---main-h:scene-controls (define-extern *display-scene-control* scene-controls) @@ -8311,7 +8310,13 @@ (collect-stats (_type_) none 13) ;; (collide-ray (_type_ int collide-list) none 13) (debug-draw (_type_ drawable display-frame) none 14) (unpack-vis (_type_ (pointer int8) (pointer int8)) (pointer int8) 15) ;; - (collect-regions (_type_ sphere int region-prim-list) none 16) + (collect-regions + "Determines the number of [[drawable]]s in the `obj` that overlap the given `area-of-interest` this number is stored in the `region-list`'s item count + @param area-of-interest The area defined by a sphere that we care about overlaps + @param _count The amount of [[drawable]]s in the object to enumerate through + @param! region-list Stores the overlapping regions and a count for how many were found + @returns none" + (_type_ sphere int region-prim-list) none 16) ) ) @@ -8474,9 +8479,8 @@ :method-count-assert 10 :size-assert #x10 :flag-assert #xa00000010 - ;; field on-enter uses ~A with a signed load field on-inside uses ~A with a signed load field on-exit uses ~A with a signed load (:methods - (region-method-9 () none 9) + (region-method-9 (_type_ vector) symbol 9) ) ) @@ -8489,7 +8493,7 @@ :flag-assert #x900000010 ) - +(declare-type region-prim-area structure) (deftype drawable-region-prim (drawable) ((region region :offset 8) ) @@ -8498,8 +8502,10 @@ :flag-assert #x1400000020 (:methods (debug-draw-region (_type_ int) none 17) - (drawable-region-prim-method-18 () none 18) - (drawable-region-prim-method-19 () none 19) + (track-region "TODO" (_type_ region-prim-area) symbol 18) + (within-area? + "@returns Whether or not the object overlaps with the provided [[region-prim-area]]'s extent" + (_type_ region-prim-area) symbol 19) ) ) @@ -8511,16 +8517,15 @@ :method-count-assert 19 :size-assert #x20 :flag-assert #x1300000020 - ;; Failed to read fields. (:methods - (drawable-tree-region-prim-method-17 () none 17) + (drawable-tree-region-prim-method-17 (_type_ vector) symbol 17) (debug-print (_type_ vector object) none 18) ) ) (deftype drawable-inline-array-region-prim (drawable-inline-array) - ((data drawable-region-prim 1 :inline) + ((data drawable-region-prim 1 :inline :offset-assert 32) (pad uint8 4)) :flag-assert #x1100000044 ) @@ -12456,6 +12461,7 @@ (declare-type continue-point basic) (declare-type game-save basic) +;; +++game-info-h:game-secrets (defenum game-secrets :type uint32 :bitfield #t @@ -12476,7 +12482,9 @@ (reverse-races) (hero-mode) (big-head) - (little-head)) + (little-head) + (game-secret-unknown)) +;; ---game-info-h:game-secrets (defenum game-score (none) @@ -14834,13 +14842,14 @@ ;; scene-h ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +(declare-type scene-player basic) (deftype scene-actor (basic) - ((name basic :offset-assert 4) + ((name string :offset-assert 4) (level basic :offset-assert 8) - (art-group basic :offset-assert 12) - (prefix basic :offset-assert 16) - (draw-frames basic :offset-assert 20) - (scissor-frames basic :offset-assert 24) + (art-group string :offset-assert 12) + (prefix string :offset-assert 16) + (draw-frames pair :offset-assert 20) ;; some form of pair? + (scissor-frames pair :offset-assert 24) (camera int16 :offset-assert 28) (light-index uint8 :offset-assert 30) (shadow-mask uint8 :offset-assert 31) @@ -14851,36 +14860,36 @@ (shadow-volume-joint basic :offset-assert 48) (draw-seg uint64 :offset-assert 56) (no-draw-seg uint64 :offset-assert 64) - (process uint64 :offset-assert 72) + (process handle :offset-assert 72) ) :method-count-assert 10 :size-assert #x50 :flag-assert #xa00000050 (:methods - (scene-actor-method-9 () none 9) + (scene-actor-method-9 (_type_ scene-player) (pointer process) 9) ) ) (deftype scene (art-group) ((mask-to-clear uint32 :offset-assert 32) - (entity basic :offset-assert 36) - (art-group basic :offset-assert 40) - (anim basic :offset-assert 44) + (entity string :offset-assert 36) + (art-group string :offset-assert 40) + (anim string :offset-assert 44) (parts int32 :offset-assert 48) (command-list basic :offset-assert 52) - (cut-list basic :offset-assert 56) + (cut-list pair :offset-assert 56) (wait-max-time time-frame :offset-assert 64) (wait-air-time time-frame :offset-assert 72) (wait-ground-time time-frame :offset-assert 80) - (draw-target basic :offset-assert 88) + (draw-target level-load-info :offset-assert 88) (abort basic :offset-assert 92) - (actor basic :offset-assert 96) - (load-point basic :offset-assert 100) - (end-point basic :offset-assert 104) + (actor (array scene-actor) :offset-assert 96) + (load-point string :offset-assert 100) + (end-point string :offset-assert 104) (borrow basic :offset-assert 108) (sfx-volume float :offset-assert 112) (ambient-volume float :offset-assert 116) - (music-volume float :offset-assert 120) + (music-volume float :offset-assert 120) (blackout-end basic :offset-assert 124) (peaceful basic :offset-assert 128) (music-delay float :offset-assert 132) @@ -14891,26 +14900,26 @@ :size-assert #x8e :flag-assert #x110000008e (:methods - (scene-method-15 () none 15) - (scene-method-16 () none 16) + (scene-method-15 (_type_ spool-anim) none 15) + (scene-method-16 (_type_) _type_ 16) ) ) (deftype scene-player (process-drawable) - ((scene-list basic :offset-assert 200) - (scene basic :offset-assert 204) + ((scene-list (pointer symbol) :offset-assert 200) + (scene scene :offset-assert 204) (scene-index int32 :offset-assert 208) - (anim basic :offset-assert 212) - (next-anim basic :offset-assert 216) - (camera uint64 :offset-assert 224) - (main-entity basic :offset-assert 232) + (anim spool-anim :offset-assert 212) + (next-anim spool-anim :offset-assert 216) + (camera handle :offset-assert 224) + (main-entity entity-actor :offset-assert 232) (wait basic :offset-assert 236) (old-target-pos transformq :inline :offset-assert 240) (pre-cut-frame basic :offset-assert 288) - (preload-continue basic :offset-assert 292) + (preload-continue string :offset-assert 292) (dma-max uint32 :offset-assert 296) (gui-id uint32 :offset-assert 300) - (aborted? basic :offset-assert 304) + (aborted? symbol :offset-assert 304) (scene-start-time time-frame :offset-assert 312) (targ-speed float :offset-assert 320) (cur-speed float :offset-assert 324) @@ -14924,12 +14933,12 @@ :size-assert #x178 :flag-assert #x1a01000178 (:methods - (scene-player-method-20 () none 20) - (scene-player-method-21 () none 21) - (scene-player-method-22 () none 22) - (scene-player-method-23 () none 23) - (scene-player-method-24 () none 24) - (scene-player-method-25 () none 25) + (wait (symbol) _type_ :state 20) + (release () _type_ :state 21) + (play-anim () _type_ :state 22) + (scene-player-method-23 (_type_ string symbol) none 23) + (scene-player-method-24 (_type_ basic symbol) scene 24) + (scene-player-method-25 (_type_ float) none 25) ) ) @@ -18943,28 +18952,54 @@ (deftype region-prim-area (structure) ((region-prim-list region-prim-list :inline :offset-assert 0) (pos vector :inline :offset-assert 1296) + (unknown-vector-uiyb1 vector :inline :offset-assert 1312) (ray vector :inline :offset 1328) + (unknown-vector-t3edh vector :inline :offset-assert 1344) (region-enter-count int32 :offset 1360) - (region-enter-list uint32 320 :offset-assert 1364) - (region-enter-prim-list uint32 320 :offset-assert 2644) + (region-enter-list region-prim-area 320 :offset-assert 1364) + (region-enter-prim-list drawable-region-sphere 320 :offset-assert 2644) (region-exit-count int32 :offset-assert 3924) - (region-exit-list uint32 320 :offset-assert 3928) - (region-exit-prim-list uint32 320 :offset-assert 5208) + (region-exit-list region-prim-area 320 :offset-assert 3928) + (region-exit-prim-list drawable-region-sphere 320 :offset-assert 5208) (region-inside-count int32 :offset-assert 6488) - (region-inside-list uint32 320 :offset-assert 6492) - (region-inside-prim-list uint32 320 :offset-assert 7772) + (region-inside-list region-prim-area 320 :offset-assert 6492) + (region-inside-prim-list drawable-region-sphere 320 :offset-assert 7772) (region-start-count int32 :offset-assert 9052) - (region-start-list uint32 320 :offset-assert 9056) - (region-start-prim-list uint32 320 :offset-assert 10336) + (region-start-list region-prim-area 320 :offset-assert 9056) + (region-start-prim-list drawable-region-sphere 320 :offset-assert 10336) ) :method-count-assert 13 :size-assert #x2d60 :flag-assert #xd00002d60 (:methods - (region-prim-area-method-9 () none 9) - (region-prim-area-method-10 () none 10) - (region-prim-area-method-11 () none 11) - (region-prim-area-method-12 () none 12) + (track-entered-region! + "Enumerates through the objects `region-enter-list`, if we find the provided `region`, do nothing and exit + otherwise, add the [[drawable-region-sphere]] to `region-enter-prim-list` and increment `region-enter-count` + + @param region-sphere Defines the region in question + @returns nothing" + (_type_ drawable-region-sphere) none 9) + (track-exited-region! + "Enumerates through the objects `region-exit-list`, if we find the provided `region`, do nothing and exit + otherwise, add the [[drawable-region-sphere]] to `region-exit-prim-list` and increment `region-exit-count` + + @param region-sphere Defines the region in question + @returns nothing" + (_type_ drawable-region-sphere) none 10) + (track-inside-region! + "Enumerates through the objects `region-inside-list`, if we find the provided `region`, do nothing and exit + otherwise, add the [[drawable-region-sphere]] to `region-inside-prim-list` and increment `region-inside-count` + + @param region-sphere Defines the region in question + @returns nothing" + (_type_ drawable-region-sphere) none 11) + (track-start-region! + "Enumerates through the objects `region-start-list`, if we find the provided `region`, do nothing and exit + otherwise, add the [[drawable-region-sphere]] to `region-start-prim-list` and increment `region-start-count` + + @param region-sphere Defines the region in question + @returns nothing" + (_type_ drawable-region-sphere) none 12) ) ) @@ -21722,7 +21757,7 @@ (user-list engine :offset-assert 36) (next-nav-mesh surface :offset-assert 40) (prev-nav-mesh surface :offset-assert 44) - (bounds sphere :inline :offset-assert 48) + (bounds vector :inline :offset-assert 48) ;; actually a sphere (origin vector :inline :offset 48) (entity entity :offset-assert 64) (link-array (array nav-mesh-link) :offset-assert 68) @@ -22432,7 +22467,7 @@ (define-extern ray-sphere-intersect (function vector vector vector float float)) (define-extern ray-circle-intersect (function vector vector vector float 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-plane-intersect (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) (define-extern moving-sphere-triangle-intersect (function vector vector float collide-cache-tri vector vector float)) ;; @@ -24533,7 +24568,7 @@ ;; (define-extern auto-save-init-by-other function) ;; (function symbol process-tree int int none :behavior auto-save) (define-extern auto-save-command (function symbol int int process-tree symbol none)) (define-extern auto-save-check (function none)) -;; (define-extern auto-save-user function) +(define-extern auto-save-user (function none)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; settings ;; @@ -26997,7 +27032,7 @@ (define-extern can-display-query? (function symbol)) (define-extern talker-surpress! (function none)) (define-extern talker-displayed? (function symbol)) -(define-extern kill-current-talker (function none)) +(define-extern kill-current-talker (function symbol pair symbol none)) ;; see (exit play-anim scene-player) (define-extern string->talker-speech (function string talker-speech-class)) (define-extern talker-spawn-func (function talker-speech-class process-tree vector region int)) (define-extern talker-init (function talker-speech-class vector region none :behavior talker)) @@ -27012,9 +27047,9 @@ ;; region ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; (define-extern region-tree-execute function) +(define-extern region-tree-execute (function symbol vector vector none)) (define-extern region-execute (function none)) -(define-extern region-prim-lookup-by-id (function int drawable-region-prim)) +(define-extern region-prim-lookup-by-id (function int symbol symbol drawable-region-prim)) (define-extern region-lookup-by-id (function int region)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -29127,7 +29162,7 @@ (define-extern entity-task-complete-off (function entity none)) (define-extern process-entity-status! (function process entity-perm-status symbol int)) ;; (define-extern find-nearest-entity (function vector type entity)) -(define-extern entity-speed-test (function string none)) +(define-extern entity-speed-test (function string entity)) (define-extern dump-entity-remap (function object object none)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -29623,19 +29658,12 @@ ;; scene ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -#| (deftype scene-stage (process-hidden) () :method-count-assert 15 :size-assert #x80 - :flag-assert #xf00000080 - ;; Failed to read fields. - (:methods - ) - ) -|# + :flag-assert #xf00000080) -#| (deftype subtitle-work (structure) ((draw-tmpl dma-gif-packet :inline :offset-assert 0) (color0 vector4w :inline :offset-assert 32) @@ -29645,13 +29673,12 @@ :size-assert #x40 :flag-assert #x900000040 ) -|# -;; (define-extern scene-decode-continue function) -;; (define-extern scene-lookup function) -;; (define-extern *subtitle-work* object) -;; (define-extern draw-subtitle-image function) -;; (define-extern process-drawable-draw-subtitles function) +(define-extern scene-decode-continue (function basic continue-point)) +(define-extern scene-lookup "TODO - basic can be a string or a scene" (function basic scene)) +(define-extern *subtitle-work* subtitle-work) +(define-extern draw-subtitle-image (function subtitle-image font-context pointer)) +(define-extern process-drawable-draw-subtitles (function none :behavior process-drawable)) (define-extern scene-player-init (function string symbol object none :behavior scene-player)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -32218,6 +32245,7 @@ :flag-assert #x900000040 ) +;; +++rigid-body-h:rigid-body-flag (defenum rigid-body-flag :bitfield #t :type uint32 @@ -32228,6 +32256,7 @@ (debug 4) (blocker 5) ) +;; ---rigid-body-h:rigid-body-flag (deftype rigid-body (structure) ((work basic :offset-assert 0) @@ -32253,9 +32282,9 @@ :size-assert #x120 :flag-assert #x2000000120 (:methods - (rigid-body-method-9 () none 9) - (rigid-body-method-10 () none 10) - (rigid-body-method-11 () none 11) + (rigid-body-method-9 (_type_) none 9) + (rigid-body-method-10 (_type_) none 10) + (rigid-body-method-11 (_type_) none 11) (rigid-body-method-12 (_type_ float) none 12) (rigid-body-method-13 (_type_) none 13) (rigid-body-method-14 (_type_ float) none 14) @@ -32305,12 +32334,12 @@ :size-assert #x130 :flag-assert #x1a00000130 (:methods - (rigid-body-control-method-9 () none 9) - (rigid-body-control-method-10 () none 10) - (rigid-body-control-method-11 () none 11) + (rigid-body-control-method-9 (_type_) none 9) + (rigid-body-control-method-10 (_type_) none 10) + (rigid-body-control-method-11 (_type_) none 11) (rigid-body-control-method-12 (_type_ float) none 12) (rigid-body-control-method-13 (_type_) none 13) - (rigid-body-control-method-14 () none 14) + (rigid-body-control-method-14 (_type_ float) none 14) (clear-force-torque! (_type_) none 15) (clear-momentum! (_type_) none 16) (rigid-body-control-method-17 (_type_ vector vector) none 17) @@ -32325,6 +32354,7 @@ ) ) +;; +++rigid-body-h:rigid-body-object-flag (defenum rigid-body-object-flag :bitfield #t :type uint64 @@ -32337,7 +32367,43 @@ (player-standing-on 6) (player-impulse-force 7) (player-contact-force 8) + (persistent 9) + (in-air 10) + (on-ground 11) + (on-flight-level 12) + (riding 13) + (player-driving 14) + (waiting-for-player 15) + (ignition 16) + (turbo-boost 17) + (reverse-gear 18) + (slide 19) + (hard-turn 20) + (jump 21) + (jump-sound 22) + (ai-driving 23) + (traffic-managed 24) + (flight-level-transition 25) + (flight-level-transition-ending 26) + (camera-bike-mode 27) + (camera-rapid-track-mode 28) + (camera 29) + (alert 30) + (in-pursuit 31) + (target-in-sight 32) + (rammed-target 33) + (draw-marks 34) + (hack-edit-graph-mode 35) + (measure-control-parameters 36) + (lights-on 37) + (lights-update 38) + (lights-dead 39) + (no-hijack 40) + (player-grabbed 41) + (nav-spheres 42) + (idle-sound 43) ) +;; ---rigid-body-h:rigid-body-object-flag (deftype rigid-body-object (process-focusable) ((info rigid-body-object-constants :offset-assert 204) @@ -32899,7 +32965,6 @@ ) |# -#| (deftype joint-exploder-static-joint-params (structure) ((joint-index int16 :offset-assert 0) (parent-joint-index int16 :offset-assert 2) @@ -32908,9 +32973,7 @@ :size-assert #x4 :flag-assert #x900000004 ) -|# -#| (deftype joint-exploder-static-params (basic) ((joints (array joint-exploder-static-joint-params) :offset-assert 4) ;; guessed by decompiler (collide-spec uint32 :offset-assert 8) @@ -32920,7 +32983,6 @@ :size-assert #x10 :flag-assert #x900000010 ) -|# #| (deftype joint-exploder-joint (structure) @@ -48375,25 +48437,25 @@ (declare-type nav-node structure) (deftype nav-branch (structure) - ((node nav-node 2 :offset-assert 0) - (src-node nav-node :offset 0) - (dest-node nav-node :offset 4) - (temp-dest-node-id int32 :offset 4) - (speed-limit uint8 :offset-assert 8) - (density uint8 :offset-assert 9) - (clock-type uint8 :offset-assert 10) - (clock-mask uint8 :offset-assert 11) - (max-user-count uint8 :offset-assert 12) - (user-count uint8 :offset-assert 13) - (width uint8 :offset-assert 14) - (flags uint8 :offset-assert 15) + ((node int32 2 :offset-assert 0) + (src-node nav-node :offset 0) + (dest-node nav-node :offset 4) + (temp-dest-node-id int32 :offset 4) + (speed-limit uint8 :offset-assert 8) + (density uint8 :offset-assert 9) + (clock-type uint8 :offset-assert 10) + (clock-mask uint8 :offset-assert 11) + (max-user-count uint8 :offset-assert 12) + (user-count uint8 :offset-assert 13) + (width uint8 :offset-assert 14) + (flags uint8 :offset-assert 15) ) :method-count-assert 21 :size-assert #x10 :flag-assert #x1500000010 (:methods - (nav-branch-method-9 () none 9) - (nav-branch-method-10 () none 10) + (nav-branch-method-9 (_type_) none 9) + (nav-branch-method-10 (_type_ object int) none 10) (nav-branch-method-11 "TODO @returns `density * 0.0078125` - is this some kind of trick?" @@ -48408,11 +48470,11 @@ (_type_) float 13) (user-limit-reached? (_type_) symbol 14) (nav-branch-method-15 "TODO - checks that `dest-node`'s `id` isn't #FFFF" (_type_) symbol 15) - (nav-branch-method-16 () none 16) - (nav-branch-method-17 () none 17) - (nav-branch-method-18 () none 18) - (nav-branch-method-19 () none 19) - (nav-branch-method-20 () none 20) + (nav-branch-method-16 (_type_ float) none 16) + (nav-branch-method-17 (_type_ float) none 17) + (nav-branch-method-18 (_type_ float) none 18) + (nav-branch-method-19 (_type_ nav-node) none 19) + (nav-branch-method-20 (_type_ nav-node) none 20) ) ) @@ -48429,35 +48491,34 @@ ;; ---nav-graph-h:nav-node-flag-byte (deftype nav-node (structure) - ( - (data uint32 8 :offset-assert 0 :score -999) - (position vector :inline :offset 0) - (pos-x float :offset 0) - (pos-y float :offset 4) - (pos-z float :offset 8) - (angle uint16 :offset 12) - (id uint16 :offset 14) - (radius uint8 :offset 16) - (branch-count int8 :offset 17) - (flags nav-node-flag-byte :offset 18) - (pad0 int8 1 :offset 19) - (branch-array uint32 :offset 20) - (nav-mesh-id uint32 :offset 24) - (level level :offset 28) - ) + ((data uint32 8 :offset-assert 0 :score -999) + (position vector :inline :offset 0) + (pos-x float :offset 0) + (pos-y float :offset 4) + (pos-z float :offset 8) + (angle uint16 :offset 12) + (id uint16 :offset 14) + (radius uint8 :offset 16) + (branch-count int8 :offset 17) + (flags nav-node-flag-byte :offset 18) + (pad0 int8 1 :offset 19) + (branch-array (inline-array nav-branch) :offset 20) + (nav-mesh-id uint32 :offset 24) + (level symbol :offset 28) + ) :method-count-assert 22 :size-assert #x20 :flag-assert #x1600000020 (:methods - (nav-node-method-9 () none 9) - (nav-node-method-10 () none 10) - (nav-node-method-11 () none 11) - (nav-node-method-12 () none 12) - (nav-node-method-13 () none 13) - (nav-node-method-14 () none 14) - (nav-node-method-15 () none 15) - (nav-node-method-16 () none 16) - (nav-node-method-17 () none 17) + (nav-node-method-9 (_type_) none 9) + (nav-node-method-10 (_type_ symbol string) none 10) + (nav-node-method-11 (_type_ int) none 11) + (nav-node-method-12 (_type_ vector nav-node) none 12) + (nav-node-method-13 (_type_ vector) none 13) + (nav-node-method-14 (_type_ nav-node) none 14) + (nav-node-method-15 (_type_ uint) none 15) + (nav-node-method-16 (_type_ float) none 16) + (nav-node-method-17 (_type_ float) none 17) (get-position "@param! ret The [[vector]] that is modified to hold the result @returns the `position` [[vector]] with a `w` component of `1.0`" @@ -48489,63 +48550,64 @@ ) (deftype nav-graph (basic) - ((node-count int16 :offset-assert 4) - (branch-count int16 :offset-assert 6) - (node-array (inline-array nav-node) :offset-assert 8) - (branch-array uint32 :offset-assert 12) - (link-count int16 :offset-assert 16) - (pad2 uint16 :offset-assert 18) - (link-array uint32 :offset-assert 20) - (first-node int16 :offset-assert 24) - (pad0 uint16 :offset-assert 26) - (patched basic :offset-assert 28) - (id uint32 :offset-assert 32) - (pad1 uint32 6 :offset-assert 36) + ((node-count int16 :offset-assert 4) + (branch-count int16 :offset-assert 6) + (node-array (inline-array nav-node) :offset-assert 8) + (branch-array (inline-array nav-branch) :offset-assert 12) + (link-count int16 :offset-assert 16) + (pad2 uint16 :offset-assert 18) + (link-array (inline-array nav-graph-link) :offset-assert 20) + (first-node int16 :offset-assert 24) + (pad0 uint16 :offset-assert 26) + (patched symbol :offset-assert 28) + (id uint32 :offset-assert 32) + (pad1 uint32 6 :offset-assert 36) ) :method-count-assert 45 :size-assert #x3c :flag-assert #x2d0000003c (:methods - (nav-graph-method-9 () none 9) - (nav-graph-method-10 () none 10) - (nav-graph-method-11 () none 11) - (nav-graph-method-12 () none 12) - (nav-graph-method-13 () none 13) - (nav-graph-method-14 () none 14) - (nav-graph-method-15 () none 15) - (nav-graph-method-16 () none 16) - (nav-graph-method-17 () none 17) - (nav-graph-method-18 () none 18) - (nav-graph-method-19 () none 19) - (nav-graph-method-20 () none 20) - (nav-graph-method-21 () none 21) - (nav-graph-method-22 () none 22) - (nav-graph-method-23 () none 23) - (nav-graph-method-24 () none 24) - (nav-graph-method-25 () none 25) - (nav-graph-method-26 () none 26) - (nav-graph-method-27 () none 27) - (nav-graph-method-28 () none 28) - (nav-graph-method-29 () none 29) - (nav-graph-method-30 () none 30) - (nav-graph-method-31 () none 31) - (nav-graph-method-32 () none 32) - (nav-graph-method-33 () none 33) - (nav-graph-method-34 () none 34) - (nav-graph-method-35 () none 35) - (nav-graph-method-36 () none 36) - (nav-graph-method-37 () none 37) + (new (symbol type int int int uint) _type_ 0) + (nav-graph-method-9 (_type_) none 9) + (nav-graph-method-10 (_type_ vector int) none 10) + (nav-graph-method-11 (_type_) none 11) + (nav-graph-method-12 (_type_) none 12) + (nav-graph-method-13 (_type_ int int) none 13) + (nav-graph-method-14 (_type_ int int) none 14) + (nav-graph-method-15 (_type_) none 15) + (nav-graph-method-16 (_type_ int) nav-node 16) + (nav-graph-method-17 (_type_ nav-node) none 17) + (nav-graph-method-18 (_type_ nav-node int) none 18) + (nav-graph-method-19 (_type_ int int int int int int) none 19) + (nav-graph-method-20 (_type_ int int) none 20) + (nav-graph-method-21 (_type_) none 21) + (nav-graph-method-22 (_type_ int int) none 22) + (nav-graph-method-23 (_type_ int int) none 23) + (nav-graph-method-24 (_type_ int int) none 24) + (nav-graph-method-25 (_type_ symbol symbol) none 25) + (nav-graph-method-26 (_type_ symbol symbol) none 26) + (nav-graph-method-27 (_type_) none 27) + (nav-graph-method-28 (_type_) none 28) + (nav-graph-method-29 (_type_ symbol) none 29) + (nav-graph-method-30 (_type_ uint) none 30) + (nav-graph-method-31 (_type_ float) none 31) + (nav-graph-method-32 (_type_ float) none 32) + (nav-graph-method-33 (_type_ float) none 33) + (nav-graph-method-34 (_type_ float) none 34) + (nav-graph-method-35 (_type_ int) none 35) + (nav-graph-method-36 (_type_ int) none 36) + (nav-graph-method-37 (_type_ vector) none 37) (nav-graph-method-38 () none 38) - (nav-graph-method-39 () none 39) - (nav-graph-method-40 () none 40) + (nav-graph-method-39 (_type_) none 39) + (nav-graph-method-40 (_type_ int) int 40) (node-at-idx "Get the `nav-node` at a given position. @param idx The position in the `node-array` to return @returns the [[nav-node]] if it can be found, otherwise return [[#f]]" (_type_ int) nav-node 41) - (nav-graph-method-42 () none 42) - (nav-graph-method-43 () none 43) - (nav-graph-method-44 () none 44) + (nav-graph-method-42 (_type_) none 42) + (nav-graph-method-43 (_type_ nav-graph-link string) none 43) + (from-editor () none 44) ) ) @@ -48554,11 +48616,10 @@ ;; traffic-engine-h ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -#| (deftype nav-segment (structure) - ((vertex UNKNOWN 2 :offset-assert 0) - (length float :offset-assert 12) - (spawn-spacing float :offset-assert 28) + ((vertex vector 2 :inline :offset-assert 0) + (length float :offset 12) + (spawn-spacing float :offset 28) (branch nav-branch :offset-assert 32) (nav-mesh-id uint32 :offset-assert 36) (id uint16 :offset-assert 40) @@ -48571,36 +48632,49 @@ :size-assert #x30 :flag-assert #x900000030 ) -|# -#| +(defenum vis-cell-flag + :type uint8 + :bitfield #t + (active-vehicle) + (active-pedestrian) + (suppress) + ) + (deftype vis-cell (structure) - () + ( + (sphere sphere :inline :offset-assert 0) + (segment-array uint32 :offset-assert 16) + (vis-id uint16 :offset-assert 20) + (id uint16 :offset-assert 22) + (incoming-segment-count int8 :offset-assert 24) + (segment-count int8 :offset-assert 25) + (flags vis-cell-flag :offset-assert 26) + (alloc-segment-count int8 :offset 26) + (prev-flags vis-cell-flag :offset-assert 27) + (pad0 uint32 :offset 28) + ) :method-count-assert 11 :size-assert #x20 :flag-assert #xb00000020 - ;; Failed to read fields. (:methods (vis-cell-method-9 () none 9) (vis-cell-method-10 () none 10) ) ) -|# -#| (deftype vis-grid-pos (structure) - ((data UNKNOWN 3 :offset-assert 0) - (x int8 :offset-assert 0) - (y int8 :offset-assert 1) - (z int8 :offset-assert 2) + ((data int8 3 :offset-assert 0 :score -999) + (x int8 :offset 0) + (y int8 :offset 1) + (z int8 :offset 2) ) + :pack-me :method-count-assert 9 :size-assert #x3 :flag-assert #x900000003 ) -|# -#| (deftype vis-grid-box (structure) ((min vis-grid-pos :inline :offset-assert 0) (max vis-grid-pos :inline :offset-assert 3) @@ -48609,9 +48683,7 @@ :size-assert #x6 :flag-assert #x900000006 ) -|# -#| (deftype vis-ray (structure) ((pos vector :inline :offset-assert 0) (dir vector :inline :offset-assert 16) @@ -48625,13 +48697,11 @@ :size-assert #x4c :flag-assert #x90000004c ) -|# -#| (deftype grid-info (structure) - ((axis-scale UNKNOWN 3 :offset-assert 0) - (dimension-array UNKNOWN 3 :offset-assert 12) - (pad0 UNKNOWN 1 :offset-assert 15) + ((axis-scale float 3 :offset-assert 0) + (dimension-array uint8 3 :offset-assert 12) + (pad0 uint8 1 :offset-assert 15) (box bounding-box :inline :offset-assert 16) (cell-size vector :inline :offset-assert 48) ) @@ -48646,9 +48716,7 @@ (grid-info-method-13 () none 13) ) ) -|# -#| (deftype city-level-info (structure) ((grid-info grid-info :inline :offset-assert 0) (cell-array uint32 :offset-assert 64) @@ -48657,7 +48725,7 @@ (segment-array uint32 :offset-assert 72) (nav-graph basic :offset-assert 76) (camera-ceiling meters :offset-assert 80) - (pad-array UNKNOWN 56 :offset-assert 84) + (pad-array int8 56 :offset-assert 84) ) :method-count-assert 19 :size-assert #x8c @@ -48675,15 +48743,13 @@ (city-level-info-method-18 () none 18) ) ) -|# -#| (deftype traffic-level-data (structure) ((city-info city-level-info :offset-assert 0) (active-cell-count uint8 :offset-assert 4) (newly-active-cell-count uint8 :offset-assert 5) - (active-cell-list UNKNOWN 255 :offset-assert 8) - (newly-active-cell-list UNKNOWN 255 :offset-assert 1028) + (active-cell-list vis-cell 255 :offset-assert 8) + (newly-active-cell-list vis-cell 255 :offset-assert 1028) (active-cell-box bounding-box :inline :offset-assert 2048) ) :method-count-assert 15 @@ -48698,22 +48764,18 @@ (traffic-level-data-method-14 () none 14) ) ) -|# -#| (deftype traffic-suppression-box (structure) - ((data UNKNOWN 32 :offset-assert 0) - (bbox bounding-box :inline :offset-assert 0) - (flags uint8 :offset-assert 12) - (duration uint32 :offset-assert 28) + ((data uint8 32 :offset-assert 0 :score -999) + (bbox bounding-box :inline :offset 0) + (flags uint8 :offset 12) + (duration uint32 :offset 28) ) :method-count-assert 9 :size-assert #x20 :flag-assert #x900000020 ) -|# -#| (deftype traffic-guard-type-info (structure) ((object-type uint8 :offset-assert 0) (max-target-count int8 :offset-assert 1) @@ -48726,9 +48788,7 @@ :size-assert #x6 :flag-assert #x900000006 ) -|# -#| (deftype traffic-guard-type-settings (structure) ((target-count int8 :offset-assert 0) (inaccuracy float :offset-assert 4) @@ -48742,48 +48802,82 @@ :size-assert #x10 :flag-assert #x900000010 ) -|# -#| (deftype traffic-alert-state-settings (structure) - ((guard-settings-array UNKNOWN 6 :offset-assert 0) - (ped-tazer traffic-guard-type-settings :inline :offset-assert 0) - (ped-rifle traffic-guard-type-settings :inline :offset-assert 16) - (ped-grenade traffic-guard-type-settings :inline :offset-assert 32) - (ped-roboguard traffic-guard-type-settings :inline :offset-assert 48) - (bike-turret traffic-guard-type-settings :inline :offset-assert 64) - (hellcat-turret traffic-guard-type-settings :inline :offset-assert 80) + ((guard-settings-array traffic-guard-type-settings 6 :offset-assert 0 :score -999) + (ped-tazer traffic-guard-type-settings :inline :offset 0) + (ped-rifle traffic-guard-type-settings :inline :offset 16) + (ped-grenade traffic-guard-type-settings :inline :offset 32) + (ped-roboguard traffic-guard-type-settings :inline :offset 48) + (bike-turret traffic-guard-type-settings :inline :offset 64) + (hellcat-turret traffic-guard-type-settings :inline :offset 80) ) :method-count-assert 9 :size-assert #x60 :flag-assert #x900000060 ) -|# -#| +(defenum traffic-target-flag + :type uint8 + :bitfield #t + (visible-now) + (visible-recently) + (visible-ever) + (updated) + (force-visible) + ) + (deftype traffic-target-status (structure) - () + ( + (flags traffic-target-flag :offset-assert 0) + (handle handle :offset-assert 8) + (last-seen-time time-frame :offset-assert 16) + (position vector :inline :offset-assert 32) + (velocity vector :inline :offset-assert 48) + (move-position vector :inline :offset-assert 64) + ) :method-count-assert 9 :size-assert #x50 :flag-assert #x900000050 - ;; Failed to read fields. ) -|# -#| +(defenum traffic-alert-flag + :type uint8 + :bitfield #t + (alert-ending) + (alarm-on) + (guard-multi-focus) + (sticky-guard-settings) + (disable-pursuit-control) + (target-jak) + ) + (deftype traffic-alert-state (structure) - () + ( + (flags traffic-alert-flag :offset-assert 0) + (level uint8 :offset-assert 1) + (max-level uint8 :offset-assert 2) + (guards-in-sight-of-target int8 :offset-assert 3) + (guard-aim-count int8 :offset-assert 4) + (guard-inaccuracy-factor float :offset-assert 8) + (guard-target-level float :offset-assert 12) + (duration uint32 :offset-assert 16) + (start-time time-frame :offset-assert 24) + (notify-time time-frame :offset-assert 32) + (alarm-sound-id uint32 :offset-assert 40) + (target-status-array traffic-target-status 3 :inline :offset-assert 48) + (settings traffic-alert-state-settings :inline :offset-assert 288) + (guard-type-info-array traffic-guard-type-info 6 :inline :offset-assert 384) + (guard-type-mask-from-object-type int32 126 :offset-assert 480) + ) :method-count-assert 10 :size-assert #x3d8 :flag-assert #xa000003d8 - ;; Failed to read fields. (:methods (traffic-alert-state-method-9 () none 9) ) ) -|# -#| (deftype traffic-object-type-info (structure) ((flags uint8 :offset-assert 0) (target-count int8 :offset-assert 1) @@ -48802,13 +48896,11 @@ :size-assert #x14 :flag-assert #x900000014 ) -|# -#| (deftype traffic-suppressor (structure) ((flags uint8 :offset-assert 0) (bbox bounding-box :inline :offset-assert 16) - (array UNKNOWN 16 :offset-assert 48) + (array traffic-suppression-box 16 :inline :offset-assert 48) ) :method-count-assert 14 :size-assert #x230 @@ -48821,9 +48913,7 @@ (traffic-suppressor-method-13 () none 13) ) ) -|# -#| (deftype traffic-tracker (structure) ((traffic basic :offset-assert 0) (object-hash basic :offset-assert 4) @@ -48831,8 +48921,8 @@ (id uint8 :offset-assert 12) (active-object-count uint8 :offset-assert 13) (inactive-object-count int8 :offset-assert 14) - (active-object-list UNKNOWN 126 :offset-assert 16) - (active-object-type-list UNKNOWN 126 :offset-assert 1024) + (active-object-list int64 126 :offset-assert 16) + (active-object-type-list int8 126 :offset-assert 1024) ) :method-count-assert 27 :size-assert #x47e @@ -48858,9 +48948,7 @@ (traffic-tracker-method-26 () none 26) ) ) -|# -#| (deftype traffic-engine (basic) ((object-hash basic :offset-assert 4) (manager uint64 :offset-assert 8) @@ -48869,16 +48957,17 @@ (sync-mask-8 uint8 :offset-assert 21) (sync-mask-16 uint16 :offset-assert 22) (sync-mask-32 uint32 :offset-assert 24) - (sync-array UNKNOWN 4 :offset-assert 28) + (sync-array uint8 4 :offset-assert 28) (flags uint8 :offset-assert 32) (alert-state traffic-alert-state :inline :offset-assert 48) - (level-data-array UNKNOWN 2 :offset-assert 1040) - (object-type-info-array UNKNOWN 21 :offset-assert 5200) - (tracker-array UNKNOWN 2 :offset-assert 5872) - (inactive-object-array UNKNOWN 420 :offset-assert 8176) + (level-data-array traffic-level-data 2 :inline :offset-assert 1040) + (object-type-info-array traffic-object-type-info 21 :inline :offset-assert 5200) + (tracker-array traffic-tracker 2 :inline :offset-assert 5872) + (inactive-object-array uint64 420 :offset-assert 8176) (suppressor traffic-suppressor :inline :offset-assert 11536) (danger-sphere-count int8 :offset-assert 12096) - (danger-sphere-array UNKNOWN 4 :offset-assert 12112) + (pad int8 15 :offset-assert 12097) + (danger-sphere-array matrix 4 :inline :offset-assert 12112) ) :method-count-assert 74 :size-assert #x3050 @@ -48951,14 +49040,12 @@ (traffic-engine-method-73 () none 73) ) ) -|# ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; vehicle-h ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -#| (deftype vehicle-lookup-info (structure) ((turn-radius meters :offset-assert 0) (throttle-turning float :offset-assert 4) @@ -48968,9 +49055,7 @@ :size-assert #xc :flag-assert #x90000000c ) -|# -#| (deftype vehicle-control-point (structure) ((local-pos vector :inline :offset-assert 0) (normal vector :inline :offset-assert 16) @@ -48979,36 +49064,30 @@ :size-assert #x20 :flag-assert #x900000020 ) -|# -#| (deftype vehicle-section-info (structure) - ((damage-seg-array UNKNOWN 3 :offset-assert 0) + ((damage-seg-array uint64 3 :offset-assert 0) (damage-seg-count int8 :offset-assert 24) ) :method-count-assert 9 :size-assert #x19 :flag-assert #x900000019 ) -|# -#| (deftype vehicle-seat-info (structure) - ((data UNKNOWN 16 :offset-assert 0) - (position vector :inline :offset-assert 0) - (pos-x float :offset-assert 0) - (pos-y float :offset-assert 4) - (pos-z float :offset-assert 8) - (angle int16 :offset-assert 12) - (flags uint8 :offset-assert 14) + ((data uint8 16 :offset-assert 0 :score -999) + (position vector :inline :offset 0) + (pos-x float :offset 0) + (pos-y float :offset 4) + (pos-z float :offset 8) + (angle int16 :offset 12) + (flags uint8 :offset 14) ) :method-count-assert 9 :size-assert #x10 :flag-assert #x900000010 ) -|# -#| (deftype vehicle-explosion-info (joint-exploder-static-params) ((skel basic :offset-assert 16) (skel-name basic :offset-assert 20) @@ -49018,20 +49097,16 @@ :size-assert #x1c :flag-assert #x90000001c ) -|# -#| (deftype vehicle-grab-rail-info (structure) - ((local-pos UNKNOWN 2 :offset-assert 0) + ((local-pos vector 2 :inline :offset-assert 0) (normal vector :inline :offset-assert 32) ) :method-count-assert 9 :size-assert #x30 :flag-assert #x900000030 ) -|# -#| (deftype rigid-body-vehicle-constants (rigid-body-object-constants) ((flags uint32 :offset-assert 208) (object-type uint8 :offset-assert 212) @@ -49092,15 +49167,15 @@ (rider-stance uint8 :offset-assert 422) (grab-rail-count int8 :offset-assert 423) (grab-rail-array uint32 :offset-assert 424) - (seat-array UNKNOWN 4 :offset-assert 432) - (rider-hand-offset UNKNOWN 2 :offset-assert 496) - (section-array UNKNOWN 4 :offset-assert 528) - (section-bike-front vehicle-section-info :inline :offset-assert 528) - (section-bike-rear vehicle-section-info :inline :offset-assert 560) - (section-car-front-left vehicle-section-info :inline :offset-assert 528) - (section-car-rear-left vehicle-section-info :inline :offset-assert 560) - (section-car-front-right vehicle-section-info :inline :offset-assert 592) - (section-car-rear-right vehicle-section-info :inline :offset-assert 624) + (seat-array vehicle-seat-info 4 :inline :offset-assert 432) + (rider-hand-offset vector 2 :inline :offset-assert 496) + (section-array vehicle-section-info 4 :inline :offset-assert 528 :score -999) + (section-bike-front vehicle-section-info :inline :offset 528) + (section-bike-rear vehicle-section-info :inline :offset 560) + (section-car-front-left vehicle-section-info :inline :offset 528) + (section-car-rear-left vehicle-section-info :inline :offset 560) + (section-car-front-right vehicle-section-info :inline :offset 592) + (section-car-rear-right vehicle-section-info :inline :offset 624) (explosion basic :offset-assert 656) (engine-pitch-scale float :offset-assert 660) (engine-pitch-offset float :offset-assert 664) @@ -49117,22 +49192,23 @@ (taillight-count int8 :offset-assert 789) (thruster-flame-width meters :offset-assert 792) (thruster-flame-length meters :offset-assert 796) - (thruster-local-pos UNKNOWN 2 :offset-assert 800) - (exhaust-local-pos UNKNOWN 2 :offset-assert 832) - (exhaust-local-dir UNKNOWN 2 :offset-assert 864) - (smoke-local-pos UNKNOWN 2 :offset-assert 896) - (smoke-local-vel UNKNOWN 2 :offset-assert 928) - (headlight-local-pos UNKNOWN 3 :offset-assert 960) - (taillight-local-pos UNKNOWN 2 :offset-assert 1008) + (thruster-local-pos vector 2 :inline :offset-assert 800) + (exhaust-local-pos vector 2 :inline :offset-assert 832) + (exhaust-local-dir vector 2 :inline :offset-assert 864) + (smoke-local-pos vector 2 :inline :offset-assert 896) + (smoke-local-vel vector 2 :inline :offset-assert 928) + (headlight-local-pos vector 3 :inline :offset-assert 960) + (taillight-local-pos vector 2 :inline :offset-assert 1008) (lift-thruster-count int8 :offset-assert 1040) (roll-thruster-count int8 :offset-assert 1041) (steering-thruster-count int8 :offset-assert 1042) (stabilizer-count int8 :offset-assert 1043) (inv-lift-thruster-count float :offset-assert 1044) - (lift-thruster-array UNKNOWN 2 :offset-assert 1056) - (roll-thruster-array UNKNOWN 2 :offset-assert 1120) - (steering-thruster-array UNKNOWN 2 :offset-assert 1184) - (stabilizer-array UNKNOWN 6 :offset-assert 1248) + (pad int8 8 :offset-assert 1048) + (lift-thruster-array vector4w-2 2 :inline :offset-assert 1056) + (roll-thruster-array vector4w-2 2 :inline :offset-assert 1120) + (steering-thruster-array vector4w-2 2 :inline :offset-assert 1184) + (stabilizer-array vector4w-2 6 :inline :offset-assert 1248) (engine-thrust-local-pos vector :inline :offset-assert 1440) (brake-local-pos vector :inline :offset-assert 1456) (particle-system-2d basic :offset-assert 1472) @@ -49157,11 +49233,44 @@ (rigid-body-vehicle-constants-method-10 () none 10) ) ) -|# -#| +;; +++vehicle-h:vehicle-controller-flag +(defenum vehicle-controller-flag + :type uint32 + :bitfield #t + (debug) + (draw-marks) + (left-turn) + (on-straightaway) + (do-turn) + (blocking-dest-node) + (attached) + (off-path) + (ignore-others) + (direct-mode) + (recovery-mode) + (no-slowing-for-turns)) +;; ---vehicle-h:vehicle-controller-flag + (deftype vehicle-controller (structure) - () + ( + (flags vehicle-controller-flag :offset-assert 0) + (traffic symbol :offset-assert 4) + (branch nav-branch :offset-assert 8) + (target-speed-offset meters :offset-assert 12) + (target-speed meters :offset-assert 16) + (choose-branch-callback symbol :offset-assert 20) + (turn-accel meters :offset-assert 24) + (max-turn-speed meters :offset-assert 28) + (path-prev-point vector :inline :offset-assert 32) + (turn-enter-point vector :inline :offset-assert 48) + (turn-exit-point vector :inline :offset-assert 64) + (path-dest-point vector :inline :offset 64) + (turn-enter-dir vector :inline :offset-assert 80) + (turn-exit-dir vector :inline :offset-assert 96) + (dest-circle vector :inline :offset-assert 112) + (target-point vector :inline :offset-assert 128) + ) :method-count-assert 22 :size-assert #x90 :flag-assert #x1600000090 @@ -49182,9 +49291,7 @@ (vehicle-controller-method-21 () none 21) ) ) -|# -#| (deftype vehicle-section (structure) ((damage float :offset-assert 0) ) @@ -49192,15 +49299,80 @@ :size-assert #x4 :flag-assert #x900000004 ) -|# -#| (deftype vehicle (rigid-body-object) - () + ( + (pad uint32 4 :offset-assert 272) + (controls vehicle-controls :inline :offset-assert 288) + (prev-controls vehicle-controls :inline :offset-assert 304) + (up-dir vector :inline :offset-assert 320) + (jump-time float :offset-assert 336) + (jump-thrust float :offset-assert 340) + (engine-thrust float :offset-assert 344) + (engine-power-factor float :offset-assert 348) + (force-scale float :offset-assert 352) + (target-distance2 meters :offset-assert 356) + (pad0 uint32 :offset-assert 360) + (target-acceleration vector :inline :offset-assert 368) + (impact-pos vector :inline :offset-assert 384) + (lin-acceleration vector :inline :offset-assert 400) + (hit-points float :offset-assert 416) + (damage-factor float :offset-assert 420) + (crash-level int8 :offset-assert 424) + (force-level int8 :offset-assert 425) + (traffic-hash-id int8 :offset-assert 426) + (traffic-priority-id int8 :offset-assert 427) + (power-fluctuation-factor float :offset-assert 428) + (power-level float :offset-assert 432) + (flight-level-index int8 :offset-assert 436) + (flight-level-index-prev int8 :offset-assert 437) + (overlap-player-counter uint8 :offset-assert 438) + (physics-counter uint8 :offset-assert 439) + (flight-level float :offset-assert 440) + (brake-factor float :offset-assert 444) + (cam-speed-interp float :offset-assert 448) + (camera-dist2 float :offset-assert 452) + (player-dist2 float :offset-assert 456) + (bound-radius float :offset-assert 460) + (rider-array int64 4 :offset-assert 464) + (lift-thrust float 2 :offset-assert 496) + (roll-thrust float 2 :offset-assert 504) + (sent-attack-time time-frame :offset-assert 512) + (air-time time-frame :offset-assert 520) + (turn-time time-frame :offset-assert 528) + (crash-time time-frame :offset-assert 536) + (transition-time time-frame :offset-assert 544) + (transition-end-time time-frame :offset-assert 552) + (turbo-boost-time time-frame :offset-assert 560) + (crash-duration uint16 :offset-assert 568) + (turbo-boost-duration uint16 :offset-assert 570) + (turbo-boost-factor float :offset-assert 572) + (crash-impulse float :offset-assert 576) + (water-height float :offset-assert 580) + (lights-factor float :offset-assert 584) + (outgoing-attack-id uint32 :offset-assert 588) + (scrape-sound-id sound-id :offset-assert 592) + (engine-sound-id sound-id :offset-assert 596) + (thrust-sound-id sound-id :offset-assert 600) + (roll-sound-id sound-id :offset-assert 604) + (damage-pop-sound-id sound-id :offset-assert 608) + (damage-zap-sound-id sound-id :offset-assert 612) + (extra-sound-id sound-id :offset-assert 616) + (fog-fade float :offset-assert 620) + (scrape-sound-envelope float :offset-assert 624) + (engine-sound-envelope float :offset-assert 628) + (engine-sound-factor float :offset-assert 632) + (sputter-sound-envelope float :offset-assert 636) + (rudder-sound-envelope float :offset-assert 640) + (fins-sound-envelope float :offset-assert 644) + (exhaust-part-accum basic 2 :offset-assert 648) + (smoke-part-accum basic 2 :offset-assert 656) + (controller vehicle-controller :inline :offset-assert 672) + (section-array vehicle-section 4 :inline :offset-assert 816) + ) :method-count-assert 144 :size-assert #x370 :flag-assert #x9002f00370 - ;; Failed to read fields. (:methods (vehicle-method-53 () none 53) (vehicle-method-54 () none 54) @@ -49295,7 +49467,6 @@ (vehicle-method-143 () none 143) ) ) -|# ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -49341,44 +49512,45 @@ ;; height-map-h ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -#| (deftype xz-height-map (structure) - ((offset UNKNOWN 3 :offset-assert 0) - (x-offset float :offset-assert 0) - (y-offset float :offset-assert 4) - (z-offset float :offset-assert 8) + ((offset float 3 :offset-assert 0) + (x-offset float :offset 0) + (y-offset float :offset 4) + (z-offset float :offset 8) (x-inv-spacing float :offset-assert 12) (z-inv-spacing float :offset-assert 16) (y-scale float :offset-assert 20) - (dim UNKNOWN 2 :offset-assert 24) - (x-dim int16 :offset-assert 24) - (z-dim int16 :offset-assert 26) - (data uint32 :offset-assert 28) + (dim int16 2 :offset-assert 24) + (x-dim int16 :offset 24) + (z-dim int16 :offset 26) + (data (pointer int8) :offset-assert 28) ;; 2240 words for the traffic-height-map - this could be so many things, but its something with an `int8` at offset 0 ) :method-count-assert 15 :size-assert #x20 :flag-assert #xf00000020 (:methods - (xz-height-map-method-9 () none 9) - (xz-height-map-method-10 () none 10) - (xz-height-map-method-11 () none 11) - (xz-height-map-method-12 () none 12) - (xz-height-map-method-13 () none 13) - (xz-height-map-method-14 () none 14) + (xz-height-map-method-9 (_type_ vector) float 9) + (xz-height-map-method-10 (_type_ vector) none 10) + (xz-height-map-method-11 (_type_) none 11) + (xz-height-map-method-12 (_type_ vector) none 12) + (xz-height-map-method-13 (_type_ vector) none 13) + (xz-height-map-method-14 (_type_ vector int) none 14) ) ) -|# -;; (define-extern get-traffic-height function) +(define-extern get-traffic-height + "@returns The value of [[xz-height-map::9]] using [[*traffic-height-map*]] and the [[vector]] provided + @see [[xz-height-map::9]]" + (function vector float)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ctywide-obs-h ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -#| + (deftype city-race-ring-info (structure) ((pos vector :inline :offset-assert 0) - (angle float :offset-assert 12) + (angle float :offset 12) (boost float :offset-assert 16) (dist float :offset-assert 20) ) @@ -49389,9 +49561,7 @@ (city-race-ring-info-method-9 () none 9) ) ) -|# -#| (deftype city-ambush-spot (structure) ((pos vector :inline :offset-assert 0) (obj-type uint8 :offset-assert 16) @@ -49400,9 +49570,7 @@ :size-assert #x11 :flag-assert #x900000011 ) -|# -#| (deftype city-ambush-info (structure) ((count int16 :offset-assert 0) (array uint32 :offset-assert 4) @@ -49414,26 +49582,25 @@ (city-ambush-info-method-9 () none 9) ) ) -|# ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; height-map ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; (define-extern point-in-bbox? function) +(define-extern point-in-bbox? (function bounding-box vector symbol)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; traffic-height-map ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; (define-extern *traffic-height-map* object) +(define-extern *traffic-height-map* xz-height-map) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; nav-graph ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; (define-extern make-nav-graph function) +(define-extern make-nav-graph (function nav-graph object none)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; vehicle-rider ;; diff --git a/decompiler/config/jak2/anonymous_function_types.jsonc b/decompiler/config/jak2/anonymous_function_types.jsonc index 77dbcdd939..4f252379a3 100644 --- a/decompiler/config/jak2/anonymous_function_types.jsonc +++ b/decompiler/config/jak2/anonymous_function_types.jsonc @@ -397,5 +397,6 @@ [44, "(function surface surface surface int none :behavior target)"], [45, "(function surface object object int float :behavior target)"], [76, "(function surface surface surface int float :behavior target)"] - ] + ], + "scene": [[4, "(function symbol)"]] } diff --git a/decompiler/config/jak2/hacks.jsonc b/decompiler/config/jak2/hacks.jsonc index 5399a55879..63a8122cfc 100644 --- a/decompiler/config/jak2/hacks.jsonc +++ b/decompiler/config/jak2/hacks.jsonc @@ -37,7 +37,6 @@ // checking boxed type is different now - these make the cfg stuff sad "name=", "cspace-inspect-tree", - "scene-player-init", "(method 77 spyder)", "(method 77 flamer)", "(method 77 grenadier)", @@ -123,7 +122,6 @@ "(method 12 effect-control)", "(method 11 effect-control)", "(method 10 effect-control)", - "(anon-function 2 scene)", "progress-trans", "(method 10 bigmap)", "(method 9 editable-region)", // condition branch assert hit @@ -223,7 +221,10 @@ "bg", "update-sound-banks", "entity-remap-names", - "(method 8 process-tree)" + "(method 8 process-tree)", + "(post play-anim scene-player)", + "(method 25 scene-player)", + "(method 25 scene-player)" ], // If format is used with the wrong number of arguments, @@ -333,7 +334,8 @@ 39, // branch fwd no delay 43, // goto 18 45 // goto 6 -] +], + "(method 44 nav-graph)": [1, 3, 6, 13, 17] }, // Sometimes the game might use format strings that are fetched dynamically, diff --git a/decompiler/config/jak2/stack_structures.jsonc b/decompiler/config/jak2/stack_structures.jsonc index a533ca6363..95148fc835 100644 --- a/decompiler/config/jak2/stack_structures.jsonc +++ b/decompiler/config/jak2/stack_structures.jsonc @@ -908,5 +908,14 @@ [32, "vector"], [48, "vector"] ], - "target-board-pre-move": [[112, "vector"]] + "target-board-pre-move": [[112, "vector"]], + "(method 10 nav-node)": [[16, "vector"]], + "(method 9 nav-graph)": [[16, "matrix"]], + "(method 10 xz-height-map)": [[16, "matrix"]], + "(method 13 xz-height-map)": [[16, "vector4w-2"]], + "(method 9 nav-node)": [[48, "nav-graph-link"]], + "(method 18 drawable-region-face)": [ + [16, "vector"], + [32, "vector"] + ] } diff --git a/decompiler/config/jak2/type_casts.jsonc b/decompiler/config/jak2/type_casts.jsonc index 75b7832b06..0a7f9cc741 100644 --- a/decompiler/config/jak2/type_casts.jsonc +++ b/decompiler/config/jak2/type_casts.jsonc @@ -2778,5 +2778,79 @@ ], "unpack-comp-huf": [ [[21,23], "t3", "(pointer uint16)"] + ], + "(method 24 scene-player)": [[38, "gp", "scene"]], + "process-drawable-draw-subtitles": [[26, "v0", "(pointer vector)"]], + "(post play-anim scene-player)": [ + [192, "s4", "process-drawable"], + [243, "s4", "process-drawable"], + [306, "s5", "process-drawable"] + ], + "(method 9 scene-actor)": [ + [43, "s4", "skeleton-group"], + [258, "a0", "process-drawable"], + [262, "v1", "process-drawable"], + [266, "a0", "process-drawable"], + [346, "a0", "scene-player"], + [355, "v1", "manipy"], + [361, "v1", "manipy"], + [376, "v1", "manipy"], + [382, "v1", "manipy"], + [533, "a0", "process-drawable"], + [537, "v1", "process-drawable"], + [541, "a0", "process-drawable"] + ], + "(method 25 scene-player)": [ + [99, "s2", "process-drawable"], + [152, "s2", "process-drawable"], + [155, "s2", "process-drawable"], + [158, "s2", "process-drawable"], + [161, "s2", "process-drawable"] + ], + "(method 16 drawable-inline-array-region-prim)": [ + [[1, 7], "v1", "drawable-region-prim"] + ], + "(method 18 drawable-region-face)": [ + [[33, 84], "v1", "(inline-array vector)"] + ], + "(method 18 drawable-tree-region-prim)": [ + [[22, 49], "s2", "drawable-region-prim"] + ], + "(method 9 region)": [ + [[55, 60], "a0", "drawable-region-prim"], + [58, "v1", "region-prim-area"], + [4, "a0", "region-prim-area"], + [50, "v1", "drawable-region-prim"] + ], + "(method 17 drawable-tree-region-prim)": [ + [[23, 28], "a0", "drawable-region-prim"], + [4, "a0", "region-prim-area"] + ], + "(method 19 drawable-region-volume)": [[8, "a3", "drawable-region-face"]], + "(method 18 drawable-region-volume)": [ + [[23, 27], "a0", "drawable-region-face"] + ], + "(method 17 drawable-region-volume)": [ + [[12, 21], "a0", "drawable-region-face"] + ], + "region-prim-lookup-by-id": [[45, "t6", "drawable-region-prim"]], + "region-tree-execute": [ + [114, "v1", "region-prim-area"], + [107, "v1", "region-prim-area"], + [97, "v1", "region-prim-area"], + [159, "v1", "region-prim-area"], + [204, "v1", "region-prim-area"], + [210, "v1", "region-prim-area"], + [221, "v1", "region-prim-area"], + [165, "v1", "region-prim-area"], + [169, "v1", "region-prim-area"], + [175, "a0", "region-prim-area"], + [191, "v1", "region-prim-area"], + [120, "v1", "region-prim-area"], + [124, "v1", "region-prim-area"], + [146, "v1", "region-prim-area"], + [129, "a1", "region-prim-area"], + [103, "v1", "region-prim-area"], + [[19, 29], "v1", "region-prim-area"] ] } diff --git a/decompiler/config/jak2/var_names.jsonc b/decompiler/config/jak2/var_names.jsonc index c9414df3f9..3a81d37957 100644 --- a/decompiler/config/jak2/var_names.jsonc +++ b/decompiler/config/jak2/var_names.jsonc @@ -1565,5 +1565,52 @@ "a1-22":"all-vis", "a2-11":"vis-qwc" } + }, + "(method 16 drawable-region-prim)": { + "args": ["obj", "area-of-interest", "_count", "region-list"], + "vars": { + "s2-0": "count" + } + }, + "(method 9 region-prim-area)": { + "args": ["obj", "region-sphere"], + "vars": { + "v1-0": "regions-entered", + "a2-0": "region", + "a3-0": "idx" + } + }, + "(method 10 region-prim-area)": { + "vars": { + "v1-0": "regions-exited", + "a2-0": "region", + "a3-0": "idx" + } + }, + "(method 11 region-prim-area)": { + "vars": { + "v1-0": "regions-inside", + "a2-0": "region", + "a3-0": "idx" + } + }, + "(method 12 region-prim-area)": { + "vars": { + "v1-0": "regions-started", + "a2-0": "region", + "a3-0": "idx" + } + }, + "(method 18 drawable-region-sphere)": { + "vars": { + "s4-0": "area-of-interest" + }, + "args": ["obj", "area"] + }, + "(method 19 drawable-region-sphere)": { + "args": ["obj", "area"] + }, + "(method 18 drawable-region-volume)": { + "args": ["obj", "area"] } } diff --git a/decompiler/util/data_decompile.cpp b/decompiler/util/data_decompile.cpp index a5c096005d..09c00dfe73 100644 --- a/decompiler/util/data_decompile.cpp +++ b/decompiler/util/data_decompile.cpp @@ -604,6 +604,17 @@ goos::Object nav_mesh_nav_control_arr_decompile( file, TypeSpec("nav-control"), 288); } +goos::Object xz_height_map_data_arr_decompile(const std::vector& words, + const std::vector& labels, + int my_seg, + int field_location, + const TypeSystem& ts, + const std::vector>& all_words, + const LinkedObjectFile* file) { + return decomp_ref_to_inline_array_guess_size(words, labels, my_seg, field_location, ts, all_words, + file, TypeSpec("vector4b"), 4); +} + goos::Object nav_mesh_route_arr_decompile(const std::vector& words, const std::vector& labels, int my_seg, @@ -1030,6 +1041,11 @@ goos::Object decompile_structure(const TypeSpec& type, field_defs_out.emplace_back(field.name(), nav_mesh_nav_control_arr_decompile( obj_words, labels, label.target_segment, field_start, ts, words, file)); + } else if (field.name() == "data" && type.print() == "xz-height-map" && + file->version == GameVersion::Jak2) { + field_defs_out.emplace_back(field.name(), xz_height_map_data_arr_decompile( + obj_words, labels, label.target_segment, + field_start, ts, words, file)); } else if (field.name() == "route" && type.print() == "nav-mesh" && file->version == GameVersion::Jak1) { field_defs_out.emplace_back( diff --git a/goal_src/jak2/engine/ai/traffic-h.gc b/goal_src/jak2/engine/ai/traffic-h.gc index 427e460a7a..1e85951d4d 100644 --- a/goal_src/jak2/engine/ai/traffic-h.gc +++ b/goal_src/jak2/engine/ai/traffic-h.gc @@ -14,8 +14,11 @@ ;; DECOMP BEGINS (define *traffic-manager* (the-as process #f)) + (define *ctywide-entity* (the-as object #f)) + (define *lwide-entity* (the-as object #f)) + (define *race-vehicle-entity* (the-as object #f)) (deftype traffic-danger-info (structure) @@ -33,6 +36,7 @@ :flag-assert #x900000036 ) + (deftype traffic-suppression-params (structure) ((bbox bounding-box :inline :offset-assert 0) (duration uint64 :offset-assert 32) @@ -49,6 +53,8 @@ ) ) + +;; WARN: Return type mismatch symbol vs none. (defmethod has-valid-id? traffic-suppression-params ((obj traffic-suppression-params)) (!= (-> obj id) -1) (none) diff --git a/goal_src/jak2/engine/anim/joint-exploder.gc b/goal_src/jak2/engine/anim/joint-exploder.gc index 4ec9f67865..c1cbf44b63 100644 --- a/goal_src/jak2/engine/anim/joint-exploder.gc +++ b/goal_src/jak2/engine/anim/joint-exploder.gc @@ -5,5 +5,26 @@ ;; name in dgo: joint-exploder ;; dgos: GAME, COMMON +;; TODO - for vehicle-h + +(deftype joint-exploder-static-joint-params (structure) + ((joint-index int16 :offset-assert 0) + (parent-joint-index int16 :offset-assert 2) + ) + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) + +(deftype joint-exploder-static-params (basic) + ((joints (array joint-exploder-static-joint-params) :offset-assert 4) ;; guessed by decompiler + (collide-spec uint32 :offset-assert 8) + (art-level basic :offset-assert 12) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + ;; DECOMP BEGINS diff --git a/goal_src/jak2/engine/entity/entity.gc b/goal_src/jak2/engine/entity/entity.gc index 124882d030..f152825862 100644 --- a/goal_src/jak2/engine/entity/entity.gc +++ b/goal_src/jak2/engine/entity/entity.gc @@ -2447,7 +2447,6 @@ (kill! gp-0) ) ) - (none) ) (defun-debug dump-entity-remap ((arg0 object) (arg1 object)) diff --git a/goal_src/jak2/engine/game/game-info-h.gc b/goal_src/jak2/engine/game/game-info-h.gc index 58142c3401..0d9bc71d63 100644 --- a/goal_src/jak2/engine/game/game-info-h.gc +++ b/goal_src/jak2/engine/game/game-info-h.gc @@ -68,6 +68,7 @@ (cf30 30) ) +;; +++game-secrets (defenum game-secrets :type uint32 :bitfield #t @@ -88,7 +89,9 @@ (reverse-races) (hero-mode) (big-head) - (little-head)) + (little-head) + (game-secret-unknown)) +;; ---game-secrets (defenum game-score (none) diff --git a/goal_src/jak2/engine/game/main-h.gc b/goal_src/jak2/engine/game/main-h.gc index 1b83581bf1..120206cdfc 100644 --- a/goal_src/jak2/engine/game/main-h.gc +++ b/goal_src/jak2/engine/game/main-h.gc @@ -27,15 +27,14 @@ ;; +++scene-controls (defenum scene-controls :type int64 - (all-off 0) - (channel 1) - (anim-name 2) - (dma-size 4) - (bounds-spheres 8) - (actors 16) - (actor-marks 32) - (special-fma-spheres 64) - (all-on 95)) + :bitfield #t + (channel) + (anim-name) + (dma-size) + (bounds-spheres) + (actors) + (actor-marks) + (special-fma-spheres)) ;; ---scene-controls ;; +++bot-marks-controls diff --git a/goal_src/jak2/engine/gfx/background/subdivide-h.gc b/goal_src/jak2/engine/gfx/background/subdivide-h.gc index 7f822a6f57..621b76f6dd 100644 --- a/goal_src/jak2/engine/gfx/background/subdivide-h.gc +++ b/goal_src/jak2/engine/gfx/background/subdivide-h.gc @@ -30,6 +30,7 @@ ) ) + (defmethod new subdivide-settings ((allocation symbol) (type-to-make type) (arg0 meters) (arg1 meters)) (let ((v0-0 (object-new allocation type-to-make (the-as int (-> type-to-make size))))) (dotimes (v1-2 6) @@ -51,6 +52,7 @@ :flag-assert #x900000080 ) + (deftype terrain-stats (structure) ((pris tr-stat :inline :offset-assert 0) (tie-generic tr-stat :inline :offset-assert 16) @@ -88,6 +90,7 @@ :flag-assert #x9000001e0 ) + (deftype dma-area (structure) ((instance-shrub-dma instance-shrub-dma :inline :offset 0) (draw-node-dma draw-node-dma :inline :offset 0) @@ -104,6 +107,7 @@ :flag-assert #x9000038a0 ) + (deftype background-area (structure) ((dma-area dma-area :inline :offset-assert 0) (vis-list uint8 2048 :offset-assert 14496) @@ -113,6 +117,7 @@ :flag-assert #x9000040a0 ) + (deftype foreground-area (structure) ((generic-work generic-work :inline :offset-assert 0) (foreground-work foreground-work :inline :offset 0) @@ -125,34 +130,38 @@ :flag-assert #x900003fe0 ) + (deftype region-prim-area (structure) - ((region-prim-list region-prim-list :inline :offset-assert 0) - (pos vector :inline :offset-assert 1296) - (ray vector :inline :offset 1328) - (region-enter-count int32 :offset 1360) - (region-enter-list uint32 320 :offset-assert 1364) - (region-enter-prim-list uint32 320 :offset-assert 2644) - (region-exit-count int32 :offset-assert 3924) - (region-exit-list uint32 320 :offset-assert 3928) - (region-exit-prim-list uint32 320 :offset-assert 5208) - (region-inside-count int32 :offset-assert 6488) - (region-inside-list uint32 320 :offset-assert 6492) - (region-inside-prim-list uint32 320 :offset-assert 7772) - (region-start-count int32 :offset-assert 9052) - (region-start-list uint32 320 :offset-assert 9056) - (region-start-prim-list uint32 320 :offset-assert 10336) + ((region-prim-list region-prim-list :inline :offset-assert 0) + (pos vector :inline :offset-assert 1296) + (unknown-vector-uiyb1 vector :inline :offset-assert 1312) + (ray vector :inline :offset 1328) + (unknown-vector-t3edh vector :inline :offset-assert 1344) + (region-enter-count int32 :offset 1360) + (region-enter-list region-prim-area 320 :offset-assert 1364) + (region-enter-prim-list drawable-region-sphere 320 :offset-assert 2644) + (region-exit-count int32 :offset-assert 3924) + (region-exit-list region-prim-area 320 :offset-assert 3928) + (region-exit-prim-list drawable-region-sphere 320 :offset-assert 5208) + (region-inside-count int32 :offset-assert 6488) + (region-inside-list region-prim-area 320 :offset-assert 6492) + (region-inside-prim-list drawable-region-sphere 320 :offset-assert 7772) + (region-start-count int32 :offset-assert 9052) + (region-start-list region-prim-area 320 :offset-assert 9056) + (region-start-prim-list drawable-region-sphere 320 :offset-assert 10336) ) :method-count-assert 13 :size-assert #x2d60 :flag-assert #xd00002d60 (:methods - (region-prim-area-method-9 () none 9) - (region-prim-area-method-10 () none 10) - (region-prim-area-method-11 () none 11) - (region-prim-area-method-12 () none 12) + (track-entered-region! (_type_ drawable-region-sphere) none 9) + (track-exited-region! (_type_ drawable-region-sphere) none 10) + (track-inside-region! (_type_ drawable-region-sphere) none 11) + (track-start-region! (_type_ drawable-region-sphere) none 12) ) ) + (deftype sprite-area (structure) ((clock-data vector 13 :inline :offset-assert 0) (buffer uint8 :dynamic :offset-assert 208) @@ -162,6 +171,7 @@ :flag-assert #x9000000d0 ) + (deftype work-area (structure) ((background background-area :inline :offset-assert 0) (foreground foreground-area :inline :offset 0) @@ -173,6 +183,7 @@ :flag-assert #x9000040a0 ) + (deftype terrain-context (structure) ((work work-area :inline :offset-assert 0) ) @@ -181,7 +192,7 @@ :flag-assert #x9000040a0 ) + (define *terrain-stats* (new 'global 'terrain-stats)) (define *collide-stats* (new 'global 'collide-stats)) - diff --git a/goal_src/jak2/engine/level/region-h.gc b/goal_src/jak2/engine/level/region-h.gc index 9802c3e757..b0a056e98e 100644 --- a/goal_src/jak2/engine/level/region-h.gc +++ b/goal_src/jak2/engine/level/region-h.gc @@ -5,6 +5,8 @@ ;; name in dgo: region-h ;; dgos: ENGINE, GAME +(declare-type region-prim-area structure) + ;; DECOMP BEGINS (deftype region (structure) @@ -17,10 +19,11 @@ :size-assert #x10 :flag-assert #xa00000010 (:methods - (region-method-9 () none 9) + (region-method-9 (_type_ vector) symbol 9) ) ) + (deftype region-array (inline-array-class) ((data region :inline :dynamic :offset-assert 16) ) @@ -28,6 +31,8 @@ :size-assert #x10 :flag-assert #x900000010 ) + + (set! (-> region-array heap-base) (the-as uint 16)) (deftype drawable-region-prim (drawable) @@ -38,11 +43,12 @@ :flag-assert #x1400000020 (:methods (debug-draw-region (_type_ int) none 17) - (drawable-region-prim-method-18 () none 18) - (drawable-region-prim-method-19 () none 19) + (track-region (_type_ region-prim-area) symbol 18) + (within-area? (_type_ region-prim-area) symbol 19) ) ) + (deftype drawable-tree-region-prim (drawable-tree) ((name basic :offset 8) (data2 drawable-inline-array :dynamic :offset 32) @@ -51,27 +57,11 @@ :size-assert #x20 :flag-assert #x1300000020 (:methods - (drawable-tree-region-prim-method-17 () none 17) + (drawable-tree-region-prim-method-17 (_type_ vector) symbol 17) (debug-print (_type_ vector object) none 18) ) ) -(defmethod inspect drawable-tree-region-prim ((obj drawable-tree-region-prim)) - (when (not obj) - (return obj) - ) - (format #t "[~8x] ~A~%" obj (-> obj type)) - (format #t "~1Tid: ~D~%" (-> obj id)) - (format #t "~1Tbsphere: ~`vector`P~%" (-> obj bsphere)) - (format #t "~1Tlength: ~D~%" (-> obj length)) - (format #t "~1Tdata[0] @ #x~X~%" (-> obj data)) - (dotimes (s5-0 (-> obj length)) - (format #t "~T [~D]~1Tdata: ~A~%" s5-0 (-> obj data s5-0)) - ) - (format #t "~1Tname: ~A~%" (-> obj name)) - obj - ) - (deftype drawable-inline-array-region-prim (drawable-inline-array) ((data drawable-region-prim 1 :inline :offset-assert 32) @@ -89,6 +79,7 @@ :flag-assert #x1400000020 ) + (deftype region-face-data (structure) ((normal vector :inline :offset-assert 0) (normal-offset float :offset 12) @@ -100,6 +91,7 @@ :flag-assert #x900000020 ) + (deftype drawable-region-face (drawable-region-prim) ((data region-face-data :offset 12) ) @@ -108,6 +100,7 @@ :flag-assert #x1400000020 ) + (deftype region-face-array (inline-array-class) ((data region-face-data :dynamic :offset 20) ) @@ -115,6 +108,8 @@ :size-assert #x14 :flag-assert #x900000014 ) + + (set! (-> region-face-array heap-base) (the-as uint 32)) (deftype drawable-region-volume (drawable-region-prim) @@ -125,6 +120,7 @@ :flag-assert #x1400000020 ) + (deftype region-prim-list (structure) ((num-items int32 :offset-assert 0) (items drawable-region-prim 320 :offset-assert 4) @@ -133,8 +129,3 @@ :size-assert #x504 :flag-assert #x900000504 ) - - -(define-extern region-prim-lookup-by-id (function int drawable-region-prim)) -(define-extern region-lookup-by-id (function int region)) - diff --git a/goal_src/jak2/engine/level/region.gc b/goal_src/jak2/engine/level/region.gc index 7023cffacd..432898e292 100644 --- a/goal_src/jak2/engine/level/region.gc +++ b/goal_src/jak2/engine/level/region.gc @@ -7,3 +7,706 @@ ;; DECOMP BEGINS +;; WARN: Return type mismatch int vs drawable-region-prim. +(defmethod mem-usage drawable-region-prim ((obj drawable-region-prim) (arg0 memory-usage-block) (arg1 int)) + (set! (-> arg0 length) (max 50 (-> arg0 length))) + (set! (-> arg0 data 49 name) "region") + (+! (-> arg0 data 49 count) 1) + (let ((v1-6 (asize-of obj))) + (+! (-> arg0 data 49 used) v1-6) + (+! (-> arg0 data 49 total) (logand -16 (+ v1-6 15))) + ) + (mem-usage (-> obj region) arg0 (logior arg1 128)) + (the-as drawable-region-prim 0) + ) + +;; WARN: Return type mismatch int vs drawable-inline-array-region-prim. +(defmethod mem-usage drawable-inline-array-region-prim ((obj drawable-inline-array-region-prim) (arg0 memory-usage-block) (arg1 int)) + (set! (-> arg0 length) (max 1 (-> arg0 length))) + (set! (-> arg0 data 0 name) (symbol->string 'drawable-group)) + (+! (-> arg0 data 0 count) 1) + (let ((v1-7 32)) + (+! (-> arg0 data 0 used) v1-7) + (+! (-> arg0 data 0 total) (logand -16 (+ v1-7 15))) + ) + (dotimes (s3-0 (-> obj length)) + (mem-usage (-> obj data s3-0) arg0 arg1) + ) + (the-as drawable-inline-array-region-prim 0) + ) + +(defmethod draw drawable-tree-region-prim ((obj drawable-tree-region-prim) (arg0 drawable-tree-region-prim) (arg1 display-frame)) + 0 + (none) + ) + +(defmethod unpack-vis drawable-tree-region-prim ((obj drawable-tree-region-prim) (arg0 (pointer int8)) (arg1 (pointer int8))) + arg1 + ) + +(defmethod collect-regions drawable-region-prim ((obj drawable-region-prim) (area-of-interest sphere) (_count int) (region-list region-prim-list)) + "Determines the number of [[drawable]]s in the `obj` that overlap the given `area-of-interest` this number is stored in the `region-list`'s item count + @param area-of-interest The area defined by a sphere that we care about overlaps + @param _count The amount of [[drawable]]s in the object to enumerate through + @param! region-list Stores the overlapping regions and a count for how many were found + @returns none" + (dotimes (count _count) + (when (spheres-overlap? area-of-interest (the-as sphere (-> obj bsphere))) + (set! (-> region-list items (-> region-list num-items)) obj) + (+! (-> region-list num-items) 1) + ) + (&+! obj 32) + ) + 0 + (none) + ) + +(defmethod collect-regions drawable-inline-array-region-prim ((obj drawable-inline-array-region-prim) (arg0 sphere) (arg1 int) (arg2 region-prim-list)) + "Determines the number of [[drawable]]s in the `obj` that overlap the given `area-of-interest` this number is stored in the `region-list`'s item count + @param area-of-interest The area defined by a sphere that we care about overlaps + @param _count The amount of [[drawable]]s in the object to enumerate through + @param! region-list Stores the overlapping regions and a count for how many were found + @returns none" + (collect-regions (the-as drawable-region-prim (-> obj data)) arg0 (-> obj length) arg2) + 0 + (none) + ) + +(defmethod collect-regions drawable-tree-region-prim ((obj drawable-tree-region-prim) (arg0 sphere) (arg1 int) (arg2 region-prim-list)) + "Determines the number of [[drawable]]s in the `obj` that overlap the given `area-of-interest` this number is stored in the `region-list`'s item count + @param area-of-interest The area defined by a sphere that we care about overlaps + @param _count The amount of [[drawable]]s in the object to enumerate through + @param! region-list Stores the overlapping regions and a count for how many were found + @returns none" + (collect-regions (-> obj data2 0) arg0 (-> obj length) arg2) + 0 + (none) + ) + +(defmethod debug-draw-region drawable-region-prim ((obj drawable-region-prim) (arg0 int)) + (local-vars (sv-32 vector2h) (sv-36 vector)) + (set! sv-32 (new 'stack 'vector2h)) + (set! sv-36 (-> obj bsphere)) + (add-debug-x #t (bucket-id debug-no-zbuf1) sv-36 (new 'static 'rgba :r #xff :g #xff :a #x80)) + (when (nonzero? (-> obj region)) + (let ((s5-0 add-debug-text-3d) + (s4-0 #t) + (s3-0 318) + ) + (format (clear *temp-string*) "region-~D~%" (-> obj region id)) + (s5-0 s4-0 (the-as bucket-id s3-0) *temp-string* sv-36 (font-color #dadada) sv-32) + ) + (set! (-> sv-32 y) (the-as int (+ (-> sv-32 y) 8))) + (let ((s5-1 (-> obj region on-enter))) + (when s5-1 + (let ((s4-1 add-debug-text-3d) + (s3-1 #t) + (s2-1 318) + ) + (format (clear *temp-string*) "(on-enter ~S)" s5-1) + (s4-1 s3-1 (the-as bucket-id s2-1) *temp-string* sv-36 (font-color #dadada) sv-32) + ) + (set! (-> sv-32 y) (the-as int (+ (-> sv-32 y) 8))) + ) + ) + (let ((s5-2 (-> obj region on-inside))) + (when s5-2 + (let ((s4-2 add-debug-text-3d) + (s3-2 #t) + (s2-2 318) + ) + (format (clear *temp-string*) "(on-inside ~S)" s5-2) + (s4-2 s3-2 (the-as bucket-id s2-2) *temp-string* sv-36 (font-color #dadada) sv-32) + ) + (set! (-> sv-32 y) (the-as int (+ (-> sv-32 y) 8))) + ) + ) + (let ((gp-1 (-> obj region on-exit))) + (when gp-1 + (let ((s5-3 add-debug-text-3d) + (s4-3 #t) + (s3-3 318) + ) + (format (clear *temp-string*) "(on-exit ~S)" gp-1) + (s5-3 s4-3 (the-as bucket-id s3-3) *temp-string* sv-36 (font-color #dadada) sv-32) + ) + (set! (-> sv-32 y) (the-as int (+ (-> sv-32 y) 8))) + ) + ) + ) + 0 + (none) + ) + +(defmethod track-region drawable-region-prim ((obj drawable-region-prim) (arg0 region-prim-area)) + "TODO" + #f + ) + +(defmethod within-area? drawable-region-prim ((obj drawable-region-prim) (arg0 region-prim-area)) + "@returns Whether or not the object overlaps with the provided [[region-prim-area]]'s extent" + #f + ) + +;; WARN: Function (method 9 region-prim-area) has a return type of none, but the expression builder found a return statement. +(defmethod track-entered-region! region-prim-area ((obj region-prim-area) (region-sphere drawable-region-sphere)) + "Enumerates through the objects `region-enter-list`, if we find the provided `region`, do nothing and exit + otherwise, add the [[drawable-region-sphere]] to `region-enter-prim-list` and increment `region-enter-count` + + @param region-sphere Defines the region in question + @returns nothing" + (let ((regions-entered (-> obj region-enter-count))) + (let ((region (-> region-sphere region))) + (countdown (idx regions-entered) + (if (= (-> obj region-enter-list idx) region) + (return #f) + ) + ) + (set! (-> obj region-enter-list regions-entered) (the-as region-prim-area region)) + ) + (set! (-> obj region-enter-prim-list regions-entered) region-sphere) + (set! (-> obj region-enter-count) (+ regions-entered 1)) + ) + 0 + (none) + ) + +;; WARN: Function (method 10 region-prim-area) has a return type of none, but the expression builder found a return statement. +(defmethod track-exited-region! region-prim-area ((obj region-prim-area) (arg0 drawable-region-sphere)) + "Enumerates through the objects `region-exit-list`, if we find the provided `region`, do nothing and exit + otherwise, add the [[drawable-region-sphere]] to `region-exit-prim-list` and increment `region-exit-count` + + @param region-sphere Defines the region in question + @returns nothing" + (let ((regions-exited (-> obj region-exit-count))) + (let ((region (-> arg0 region))) + (countdown (idx regions-exited) + (if (= (-> obj region-exit-list idx) region) + (return #f) + ) + ) + (set! (-> obj region-exit-list regions-exited) (the-as region-prim-area region)) + ) + (set! (-> obj region-exit-prim-list regions-exited) arg0) + (set! (-> obj region-exit-count) (+ regions-exited 1)) + ) + 0 + (none) + ) + +;; WARN: Function (method 11 region-prim-area) has a return type of none, but the expression builder found a return statement. +(defmethod track-inside-region! region-prim-area ((obj region-prim-area) (arg0 drawable-region-sphere)) + "Enumerates through the objects `region-inside-list`, if we find the provided `region`, do nothing and exit + otherwise, add the [[drawable-region-sphere]] to `region-inside-prim-list` and increment `region-inside-count` + + @param region-sphere Defines the region in question + @returns nothing" + (let ((regions-inside (-> obj region-inside-count))) + (let ((region (-> arg0 region))) + (countdown (idx regions-inside) + (if (= (-> obj region-inside-list idx) region) + (return #f) + ) + ) + (set! (-> obj region-inside-list regions-inside) (the-as region-prim-area region)) + ) + (set! (-> obj region-inside-prim-list regions-inside) arg0) + (set! (-> obj region-inside-count) (+ regions-inside 1)) + ) + 0 + (none) + ) + +;; WARN: Function (method 12 region-prim-area) has a return type of none, but the expression builder found a return statement. +(defmethod track-start-region! region-prim-area ((obj region-prim-area) (arg0 drawable-region-sphere)) + "Enumerates through the objects `region-start-list`, if we find the provided `region`, do nothing and exit + otherwise, add the [[drawable-region-sphere]] to `region-start-prim-list` and increment `region-start-count` + + @param region-sphere Defines the region in question + @returns nothing" + (let ((regions-started (-> obj region-start-count))) + (let ((region (-> arg0 region))) + (countdown (idx regions-started) + (if (= (-> obj region-start-list idx) region) + (return #f) + ) + ) + (set! (-> obj region-start-list regions-started) (the-as region-prim-area region)) + ) + (set! (-> obj region-start-prim-list regions-started) arg0) + (set! (-> obj region-start-count) (+ regions-started 1)) + ) + 0 + (none) + ) + +(defmethod debug-draw-region drawable-region-sphere ((obj drawable-region-sphere) (arg0 int)) + (let ((t9-0 (method-of-type drawable-region-prim debug-draw-region))) + (t9-0 obj arg0) + ) + (let ((a2-0 (-> obj bsphere))) + (add-debug-sphere #t (bucket-id debug2) a2-0 (-> obj bsphere w) (new 'static 'rgba :r #xff :a #x80)) + ) + 0 + (none) + ) + +(defmethod track-region drawable-region-sphere ((obj drawable-region-sphere) (area region-prim-area)) + "TODO" + (-> obj region) + (let ((area-of-interest (-> obj bsphere))) + (if (< 0.0 (ray-sphere-intersect (-> area pos) (-> area ray) area-of-interest (-> area-of-interest w))) + (track-entered-region! area obj) + ) + (if (< 0.0 (ray-sphere-intersect + (-> area unknown-vector-uiyb1) + (-> area unknown-vector-t3edh) + area-of-interest + (-> area-of-interest w) + ) + ) + (track-exited-region! area obj) + ) + (if (spheres-overlap? (the-as sphere (-> area pos)) (the-as sphere area-of-interest)) + (track-start-region! area obj) + ) + (when (spheres-overlap? (the-as sphere (-> area unknown-vector-uiyb1)) (the-as sphere area-of-interest)) + (track-inside-region! area obj) + #t + ) + ) + ) + +(defmethod within-area? drawable-region-sphere ((obj drawable-region-sphere) (area region-prim-area)) + "@returns Whether or not the object overlaps with the provided [[region-prim-area]]'s extent" + (spheres-overlap? (the-as sphere (-> area pos)) (the-as sphere (-> obj bsphere))) + ) + +(defmethod debug-draw-region drawable-region-face ((obj drawable-region-face) (arg0 int)) + (when (zero? arg0) + (let ((t9-0 (method-of-type drawable-region-prim debug-draw-region))) + (t9-0 obj arg0) + ) + ) + (let ((s5-0 (-> obj bsphere))) + (add-debug-vector + #t + (bucket-id debug-no-zbuf1) + s5-0 + (-> obj data normal) + (meters 2) + (new 'static 'rgba :r #xff :g #xff :a #x80) + ) + (add-debug-sphere #t (bucket-id debug2) s5-0 (-> obj bsphere w) (new 'static 'rgba :r #xff :a #x30)) + ) + (add-debug-bound + 324 + (the-as transform (-> obj data points)) + (the-as int (-> obj data num-points)) + (new 'static 'rgba :r #xff :g #xff :a #x80) + (new 'static 'rgba :r #xff :a #x80) + 0 + ) + 0 + (none) + ) + +(defmethod track-region drawable-region-face ((obj drawable-region-face) (arg0 region-prim-area)) + "TODO" + (local-vars (sv-48 vector) (sv-52 vector) (sv-56 object)) + (-> obj region) + (let* ((s4-0 (-> obj data)) + (v1-1 (-> s4-0 normal)) + (a0-3 (>= 0.0 (- (vector-dot (-> arg0 pos) v1-1) (-> v1-1 w)))) + (s3-0 (>= 0.0 (- (vector-dot (-> arg0 unknown-vector-uiyb1) v1-1) (-> v1-1 w)))) + ) + (when (!= a0-3 s3-0) + (when (nonzero? (-> s4-0 num-points)) + (set! sv-48 (new 'stack-no-clear 'vector)) + (set! sv-52 (new 'stack-no-clear 'vector)) + (set! sv-56 (the-as (inline-array vector) (-> s4-0 points))) + (ray-plane-intersect + sv-48 + sv-52 + (-> arg0 pos) + (-> arg0 ray) + (-> (the-as (inline-array vector) sv-56) 0) + (-> (the-as (inline-array vector) sv-56) 1) + (-> (the-as (inline-array vector) sv-56) 2) + ) + (let ((s4-1 (-> s4-0 num-points)) + (s2-0 0) + (s1-0 (vector-negate! (new 'stack-no-clear 'vector) sv-52)) + ) + (while (< (+ s2-0 2) (the-as int s4-1)) + (if (the-as + (inline-array vector) + (or (point-in-triangle-cross + sv-48 + sv-52 + (-> (the-as (inline-array vector) sv-56) 0) + (-> (the-as (inline-array vector) sv-56) 1) + (-> (the-as (inline-array vector) sv-56) 2) + ) + (the-as (inline-array vector) (point-in-triangle-cross + sv-48 + s1-0 + (-> (the-as (inline-array vector) sv-56) 0) + (-> (the-as (inline-array vector) sv-56) 1) + (-> (the-as (inline-array vector) sv-56) 2) + ) + ) + ) + ) + (goto cfg-17) + ) + (+! s2-0 1) + (set! sv-56 (-> (the-as (inline-array vector) sv-56) 1)) + ) + ) + (set! s3-0 s3-0) + (goto cfg-20) + ) + (label cfg-17) + (if s3-0 + (track-entered-region! arg0 (the-as drawable-region-sphere obj)) + (track-exited-region! arg0 (the-as drawable-region-sphere obj)) + ) + ) + (label cfg-20) + s3-0 + ) + ) + +(defmethod debug-draw-region drawable-region-volume ((obj drawable-region-volume) (arg0 int)) + (let ((t9-0 (method-of-type drawable-region-prim debug-draw-region))) + (t9-0 obj arg0) + ) + (let* ((s5-0 (-> obj faces length)) + (s4-0 0) + (a0-3 (the-as object (+ (+ (* s4-0 32) 16) (the-as int (-> obj faces))))) + ) + (while (< s4-0 s5-0) + (debug-draw-region (the-as drawable-region-face a0-3) 1) + (+! s4-0 1) + (set! a0-3 (+ (+ (* s4-0 32) 16) (the-as int (-> obj faces)))) + ) + ) + 0 + (none) + ) + +(defmethod track-region drawable-region-volume ((obj drawable-region-volume) (area region-prim-area)) + "TODO" + (if (within-area? obj area) + (track-start-region! area (the-as drawable-region-sphere obj)) + ) + (let* ((s4-0 (-> obj faces length)) + (s3-0 0) + (a0-4 (the-as object (+ (+ (* s3-0 32) 16) (the-as int (-> obj faces))))) + ) + (while (< s3-0 s4-0) + (if (not (track-region (the-as drawable-region-face a0-4) area)) + (return #f) + ) + (+! s3-0 1) + (set! a0-4 (+ (+ (* s3-0 32) 16) (the-as int (-> obj faces)))) + ) + ) + (track-inside-region! area (the-as drawable-region-sphere obj)) + #t + ) + +(defmethod within-area? drawable-region-volume ((obj drawable-region-volume) (arg0 region-prim-area)) + "@returns Whether or not the object overlaps with the provided [[region-prim-area]]'s extent" + (let* ((v1-1 (-> obj faces length)) + (a2-0 0) + (a3-2 (the-as object (+ (+ (* a2-0 32) 16) (the-as int (-> obj faces))))) + ) + (while (< a2-0 v1-1) + (let ((a3-4 (-> (the-as drawable-region-face a3-2) data normal))) + (if (< 0.0 (- (vector-dot (-> arg0 pos) a3-4) (-> a3-4 w))) + (return #f) + ) + ) + (+! a2-0 1) + (set! a3-2 (+ (+ (* a2-0 32) 16) (the-as int (-> obj faces)))) + ) + ) + #t + ) + +(defmethod drawable-tree-region-prim-method-17 drawable-tree-region-prim ((obj drawable-tree-region-prim) (arg0 vector)) + (sphere<-vector+r! (the-as sphere (-> (the-as region-prim-area #x70000000) pos)) arg0 0.0) + (let* ((s5-0 (-> obj data2 (+ (-> obj length) -1) length)) + (s4-0 0) + (a0-8 (the-as object (+ (+ (* s4-0 32) 32) (the-as int (-> obj data2 (+ (-> obj length) -1)))))) + ) + (while (< s4-0 s5-0) + (if (within-area? (the-as drawable-region-prim a0-8) (the-as region-prim-area (+ #x70000000 0))) + (return #t) + ) + (+! s4-0 1) + (set! a0-8 (+ (+ (* s4-0 32) 32) (the-as int (-> obj data2 (+ (-> obj length) -1))))) + ) + ) + #f + ) + +;; WARN: Return type mismatch int vs symbol. +(defmethod region-method-9 region ((obj region) (arg0 vector)) + (local-vars (sv-16 int) (sv-32 int)) + (sphere<-vector+r! (the-as sphere (-> (the-as region-prim-area #x70000000) pos)) arg0 0.0) + (dotimes (s5-0 (-> *level* length)) + (let ((s4-0 (-> *level* level s5-0))) + (when (= (-> s4-0 status) 'active) + (when (nonzero? (-> s4-0 bsp region-trees)) + (let* ((s3-0 (-> s4-0 bsp region-trees length)) + (s2-0 0) + (s1-0 (-> s4-0 bsp region-trees s2-0)) + ) + (while (< s2-0 s3-0) + (let ((s0-0 (-> s1-0 data2 (+ (-> s1-0 length) -1) length))) + (set! sv-16 0) + (set! sv-32 (+ (+ (* sv-16 32) 32) (the-as int (-> s1-0 data2 (+ (-> s1-0 length) -1))))) + (while (< sv-16 s0-0) + (if (and (= (-> (the-as drawable-region-prim sv-32) region) obj) + (within-area? + (the-as drawable-region-prim sv-32) + (the-as region-prim-area (-> (the-as region-prim-area #x70000000) region-prim-list)) + ) + ) + (return (the-as symbol sv-32)) + ) + (set! sv-16 (+ sv-16 1)) + (set! sv-32 (+ (+ (* sv-16 32) 32) (the-as int (-> s1-0 data2 (+ (-> s1-0 length) -1))))) + ) + ) + (+! s2-0 1) + (set! s1-0 (-> s4-0 bsp region-trees s2-0)) + ) + ) + ) + ) + ) + ) + (the-as symbol #f) + ) + +(defmethod debug-print drawable-tree-region-prim ((obj drawable-tree-region-prim) (arg0 vector) (arg1 object)) + (sphere<-vector+r! (the-as sphere (+ 1296 #x70000000)) arg0 0.0) + (let* ((s4-0 (-> obj data2 (+ (-> obj length) -1) length)) + (s3-0 0) + (s2-0 (the-as object (+ (+ (* s3-0 32) 32) (the-as int (-> obj data2 (+ (-> obj length) -1)))))) + ) + (while (< s3-0 s4-0) + (if (within-area? (the-as drawable-region-prim s2-0) (the-as region-prim-area (+ #x70000000 0))) + (format + arg1 + " splitbox-~D ~A~%" + (-> (the-as drawable-region-prim s2-0) id) + (the-as drawable-region-prim s2-0) + ) + ) + (+! s3-0 1) + (set! s2-0 (+ (+ (* s3-0 32) 32) (the-as int (-> obj data2 (+ (-> obj length) -1))))) + ) + ) + 0 + (none) + ) + +(defun region-tree-execute ((arg0 symbol) (arg1 vector) (arg2 vector)) + (local-vars (sv-32 vector)) + (with-pp + (set! sv-32 (vector-average! (new 'stack-no-clear 'vector) arg1 arg2)) + (set! (-> sv-32 w) (* 0.5 (vector-vector-distance arg1 arg2))) + (set! (-> (the-as region-prim-area #x70000000) region-prim-list num-items) 0) + (set! (-> (the-as region-prim-area #x70000000) region-enter-count) 0) + (set! (-> (the-as region-prim-area #x70000000) region-exit-count) 0) + (set! (-> (the-as region-prim-area #x70000000) region-inside-count) 0) + (set! (-> (the-as region-prim-area #x70000000) region-start-count) 0) + (sphere<-vector+r! (the-as sphere (+ 1296 #x70000000)) arg1 0.0) + (sphere<-vector+r! (the-as sphere (+ 1312 #x70000000)) arg2 0.0) + (vector-! (the-as vector (+ 1328 #x70000000)) arg2 arg1) + (vector-! (the-as vector (+ 1344 #x70000000)) arg1 arg2) + (dotimes (s5-1 (-> *level* length)) + (let ((v1-17 (-> *level* level s5-1))) + (when (= (-> v1-17 status) 'active) + (let ((s4-1 (-> v1-17 bsp region-trees))) + (when (nonzero? s4-1) + (let* ((s3-0 (-> s4-1 length)) + (s2-0 0) + (a0-14 (-> s4-1 s2-0)) + ) + (while (< s2-0 s3-0) + (if (= (-> a0-14 name) arg0) + (collect-regions a0-14 (the-as sphere sv-32) 0 (the-as region-prim-list (+ #x70000000 0))) + ) + (+! s2-0 1) + (set! a0-14 (-> s4-1 s2-0)) + ) + ) + ) + ) + ) + ) + ) + (countdown (gp-1 (-> (the-as region-prim-area #x70000000) region-prim-list num-items)) + (track-region + (-> (the-as region-prim-area (+ (* gp-1 4) #x70000000)) region-prim-list items 0) + (the-as region-prim-area (-> (the-as region-prim-area #x70000000) region-prim-list)) + ) + ) + (let ((gp-2 (-> (the-as region-prim-area #x70000000) region-enter-count))) + (while (begin (label cfg-22) (nonzero? gp-2)) + (+! gp-2 -1) + (let* ((a2-5 (-> (the-as region-prim-area (+ (* gp-2 4) #x70000000)) region-enter-list 0)) + (s5-2 (-> a2-5 region-prim-list items 0)) + ) + (when s5-2 + (countdown (v1-47 (-> (the-as region-prim-area #x70000000) region-start-count)) + (if (= a2-5 (-> (the-as region-prim-area #x70000000) region-start-list v1-47)) + (goto cfg-22) + ) + ) + (eval! + (new + 'stack + 'script-context + (the-as basic a2-5) + pp + (-> (the-as region-prim-area (+ (* gp-2 4) #x70000000)) region-enter-prim-list 0 bsphere) + ) + (the-as pair s5-2) + ) + ) + ) + ) + ) + (let ((gp-3 (-> (the-as region-prim-area #x70000000) region-exit-count))) + (while (begin (label cfg-31) (nonzero? gp-3)) + (+! gp-3 -1) + (let* ((a2-6 (-> (the-as region-prim-area (+ (* gp-3 4) #x70000000)) region-exit-list 0)) + (s5-3 (-> a2-6 region-prim-list items 2)) + ) + (when s5-3 + (countdown (v1-64 (-> (the-as region-prim-area #x70000000) region-inside-count)) + (if (= a2-6 (-> (the-as region-prim-area (+ (* v1-64 4) #x70000000)) region-inside-list 0)) + (goto cfg-31) + ) + ) + (eval! + (new + 'stack + 'script-context + (the-as basic a2-6) + pp + (-> (the-as region-prim-area (+ (* gp-3 4) #x70000000)) region-exit-prim-list 0 bsphere) + ) + (the-as pair s5-3) + ) + ) + ) + ) + ) + (countdown (gp-4 (-> (the-as region-prim-area #x70000000) region-inside-count)) + (let* ((a2-7 (-> (the-as region-prim-area (+ (* gp-4 4) #x70000000)) region-inside-list 0)) + (s5-4 (-> a2-7 region-prim-list items 1)) + ) + (if s5-4 + (eval! + (new + 'stack + 'script-context + (the-as basic a2-7) + pp + (-> (the-as region-prim-area (+ (* gp-4 4) #x70000000)) region-inside-prim-list 0 bsphere) + ) + (the-as pair s5-4) + ) + ) + ) + ) + 0 + (none) + ) + ) + +(defun region-execute () + (set! (-> *level* camera-pos 1 quad) (-> *level* camera-pos 0 quad)) + (set! (-> *level* camera-pos 0 quad) (-> (camera-pos) quad)) + (set! (-> *level* target-pos 1 quad) (-> *level* target-pos 0 quad)) + (set! (-> *level* target-pos 0 quad) (-> (target-pos 0) quad)) + (when (and *execute-regions* (-> *setting-control* user-current region-mode) (not (paused?))) + (region-tree-execute 'camera (-> *level* camera-pos 1) (the-as vector (-> *level* camera-pos))) + (region-tree-execute 'target (-> *level* target-pos 1) (the-as vector (-> *level* target-pos))) + ) + 0 + (none) + ) + +;; WARN: Return type mismatch int vs drawable-region-prim. +(defun region-prim-lookup-by-id ((arg0 int) (arg1 symbol) (arg2 symbol)) + (let ((v1-0 -1)) + (dotimes (a3-0 (-> *level* length)) + (let ((t0-3 (-> *level* level a3-0))) + (when (= (-> t0-3 status) 'active) + (when (nonzero? (-> t0-3 bsp region-trees)) + (let* ((t1-8 (-> t0-3 bsp region-trees length)) + (t2-1 0) + (t3-2 (-> t0-3 bsp region-trees t2-1)) + ) + (while (< t2-1 t1-8) + (when (or (not arg1) (= (-> t3-2 name) arg1)) + (let* ((t4-10 (-> t3-2 data2 (+ (-> t3-2 length) -1) length)) + (t5-0 0) + (t6-2 (the-as object (+ (+ (* t5-0 32) 32) (the-as int (-> t3-2 data2 (+ (-> t3-2 length) -1)))))) + ) + (while (< t5-0 t4-10) + (when (= (-> (the-as drawable-region-prim t6-2) region id) arg0) + (+! v1-0 1) + (if (= v1-0 arg2) + (return (the-as drawable-region-prim t6-2)) + ) + ) + (+! t5-0 1) + (set! t6-2 (+ (+ (* t5-0 32) 32) (the-as int (-> t3-2 data2 (+ (-> t3-2 length) -1))))) + ) + ) + ) + (+! t2-1 1) + (set! t3-2 (-> t0-3 bsp region-trees t2-1)) + ) + ) + ) + ) + ) + ) + ) + (the-as drawable-region-prim #f) + ) + +(defun region-lookup-by-id ((arg0 int)) + (dotimes (v1-0 (-> *level* length)) + (let ((a1-3 (-> *level* level v1-0))) + (when (= (-> a1-3 status) 'active) + (when (nonzero? (-> a1-3 bsp region-array)) + (let* ((a2-8 (-> a1-3 bsp region-array length)) + (a3-1 0) + (t0-2 (-> a1-3 bsp region-array data a3-1)) + ) + (while (< a3-1 a2-8) + (if (= (-> t0-2 id) arg0) + (return t0-2) + ) + (+! a3-1 1) + (set! t0-2 (-> a1-3 bsp region-array data a3-1)) + ) + ) + ) + ) + ) + ) + (the-as region #f) + ) diff --git a/goal_src/jak2/engine/nav/nav-mesh-h.gc b/goal_src/jak2/engine/nav/nav-mesh-h.gc index 58ffd5e4d4..e1a98e448e 100644 --- a/goal_src/jak2/engine/nav/nav-mesh-h.gc +++ b/goal_src/jak2/engine/nav/nav-mesh-h.gc @@ -203,7 +203,7 @@ (user-list engine :offset-assert 36) (next-nav-mesh surface :offset-assert 40) (prev-nav-mesh surface :offset-assert 44) - (bounds sphere :inline :offset-assert 48) + (bounds vector :inline :offset-assert 48) (origin vector :inline :offset 48) (entity entity :offset-assert 64) (link-array (array nav-mesh-link) :offset-assert 68) @@ -329,7 +329,6 @@ #f ) -;; WARN: Return type mismatch int vs none. (defun init-ray ((arg0 nav-ray)) (rlet ((acc :class vf) (Q :class vf) @@ -532,7 +531,6 @@ ;; WARN: Stack slot offset 64 signed mismatch ;; WARN: Stack slot offset 44 signed mismatch ;; WARN: Stack slot offset 48 signed mismatch -;; WARN: Return type mismatch int vs none. (defmethod move-along-nav-ray! nav-mesh ((obj nav-mesh) (ray nav-ray)) (local-vars (next-poly-idx int) @@ -617,7 +615,6 @@ (none) ) -;; WARN: Return type mismatch int vs none. (defun-debug nav-sphere-from-cam () (let ((v1-0 (camera-pos))) (format #t "SPHEREM(~4,,1M, ~4,,1M, ~4,,1M, 1.0)~%" (-> v1-0 x) (-> v1-0 y) (-> v1-0 z)) @@ -625,7 +622,3 @@ 0 (none) ) - - - - diff --git a/goal_src/jak2/engine/physics/rigid-body-h.gc b/goal_src/jak2/engine/physics/rigid-body-h.gc index 9b20342342..b0a0d755da 100644 --- a/goal_src/jak2/engine/physics/rigid-body-h.gc +++ b/goal_src/jak2/engine/physics/rigid-body-h.gc @@ -5,5 +5,390 @@ ;; name in dgo: rigid-body-h ;; dgos: GAME, COMMON +;; +++rigid-body-flag +(defenum rigid-body-flag + :bitfield #t + :type uint32 + (display-marks 0) + (enable-physics 1) + (enable-collision 2) + (active 3) + (debug 4) + (blocker 5) + ) +;; ---rigid-body-flag + +;; +++rigid-body-object-flag +(defenum rigid-body-object-flag + :bitfield #t + :type uint64 + (enable-collision 0) + (disturbed 1) + (damaged 2) + (dead 3) + (player-touching 4) + (player-edge-grabbing 5) + (player-standing-on 6) + (player-impulse-force 7) + (player-contact-force 8) + (persistent 9) + (in-air 10) + (on-ground 11) + (on-flight-level 12) + (riding 13) + (player-driving 14) + (waiting-for-player 15) + (ignition 16) + (turbo-boost 17) + (reverse-gear 18) + (slide 19) + (hard-turn 20) + (jump 21) + (jump-sound 22) + (ai-driving 23) + (traffic-managed 24) + (flight-level-transition 25) + (flight-level-transition-ending 26) + (camera-bike-mode 27) + (camera-rapid-track-mode 28) + (camera 29) + (alert 30) + (in-pursuit 31) + (target-in-sight 32) + (rammed-target 33) + (draw-marks 34) + (hack-edit-graph-mode 35) + (measure-control-parameters 36) + (lights-on 37) + (lights-update 38) + (lights-dead 39) + (no-hijack 40) + (player-grabbed 41) + (nav-spheres 42) + (idle-sound 43) + ) +;; ---rigid-body-object-flag + ;; DECOMP BEGINS +(deftype rigid-body-info (structure) + ((mass float :offset-assert 0) + (inv-mass float :offset-assert 4) + (linear-damping float :offset-assert 8) + (angular-damping float :offset-assert 12) + (bounce-factor float :offset-assert 16) + (friction-factor float :offset-assert 20) + (bounce-mult-factor float :offset-assert 24) + (cm-offset-joint vector :inline :offset-assert 32) + (inv-inertial-tensor matrix :inline :offset-assert 48) + (inertial-tensor matrix :inline :offset-assert 112) + (inertial-tensor-box meters 3 :offset-assert 176) + ) + :method-count-assert 10 + :size-assert #xbc + :flag-assert #xa000000bc + (:methods + (rigid-body-info-method-9 (_type_) none 9) + ) + ) + + +(deftype rigid-body-object-extra-info (structure) + ((max-time-step float :offset-assert 0) + (gravity meters :offset-assert 4) + (idle-distance meters :offset-assert 8) + (attack-force-scale float :offset-assert 12) + ) + :pack-me + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + + +(deftype rigid-body-object-constants (structure) + ((info rigid-body-info :inline :offset-assert 0) + (mass float :offset 0) + (inv-mass float :offset 4) + (cm-joint-x meters :offset 32) + (cm-joint-y meters :offset 36) + (cm-joint-z meters :offset 40) + (linear-damping float :offset 8) + (angular-damping float :offset 12) + (bounce-factor float :offset 16) + (friction-factor float :offset 20) + (inertial-tensor-x meters :offset 176) + (inertial-tensor-y meters :offset 180) + (inertial-tensor-z meters :offset 184) + (extra rigid-body-object-extra-info :inline :offset-assert 188) + (max-time-step float :offset 188) + (gravity meters :offset 192) + (idle-distance meters :offset 196) + (attack-force-scale float :offset 200) + (name basic :offset-assert 204) + ) + :method-count-assert 9 + :size-assert #xd0 + :flag-assert #x9000000d0 + ) + + +(deftype rigid-body-impact (structure) + ((point vector :inline :offset-assert 0) + (normal vector :inline :offset-assert 16) + (velocity vector :inline :offset-assert 32) + (impulse float :offset-assert 48) + (pat uint32 :offset-assert 52) + (rbody basic :offset-assert 56) + (prim-id uint32 :offset-assert 60) + ) + :method-count-assert 9 + :size-assert #x40 + :flag-assert #x900000040 + ) + + +(deftype rigid-body (structure) + ((work basic :offset-assert 0) + (info rigid-body-info :offset-assert 4) + (flags rigid-body-flag :offset-assert 8) + (force-callback basic :offset-assert 12) + (blocked-by basic :offset-assert 16) + (time-remaining float :offset-assert 20) + (step-count int16 :offset-assert 24) + (position vector :inline :offset-assert 32) + (rot vector :inline :offset-assert 48) + (rotation quaternion :inline :offset 48) + (lin-momentum vector :inline :offset-assert 64) + (ang-momentum vector :inline :offset-assert 80) + (force vector :inline :offset-assert 96) + (torque vector :inline :offset-assert 112) + (lin-velocity vector :inline :offset-assert 128) + (ang-velocity vector :inline :offset-assert 144) + (matrix matrix :inline :offset-assert 160) + (inv-i-world matrix :inline :offset-assert 224) + ) + :method-count-assert 32 + :size-assert #x120 + :flag-assert #x2000000120 + (:methods + (rigid-body-method-9 (_type_) none 9) + (rigid-body-method-10 (_type_) none 10) + (rigid-body-method-11 (_type_) none 11) + (rigid-body-method-12 (_type_ float) none 12) + (rigid-body-method-13 (_type_) none 13) + (rigid-body-method-14 (_type_ float) none 14) + (rigid-body-method-15 () none 15) + (clear-force-torque! (_type_) none 16) + (clear-momentum! (_type_) none 17) + (rigid-body-method-18 (_type_ vector vector) none 18) + (rigid-body-method-19 (_type_ vector vector) none 19) + (rigid-body-method-20 (_type_ vector) none 20) + (rigid-body-method-21 (_type_ vector vector float) none 21) + (rigid-body-method-22 (_type_ vector vector) vector 22) + (rigid-body-method-23 (_type_ vector) vector 23) + (rigid-body-method-24 (_type_) none 24) + (rigid-body-method-25 (_type_ rigid-body-info vector quaternion basic) none 25) + (rigid-body-method-26 (_type_ vector quaternion) none 26) + (print-physics (_type_ object) none 27) + (print-force-torque (_type_ object) none 28) + (print-position-rotation (_type_ object) none 29) + (print-momentum (_type_ object) none 30) + (print-velocity (_type_ object) none 31) + ) + ) + + +(deftype rigid-body-control (basic) + ((process process :offset-assert 4) + (state rigid-body :inline :offset-assert 16) + (work basic :offset 16) + (info rigid-body-info :offset 20) + (flags rigid-body-flag :offset 24) + (force-callback basic :offset 28) + (blocked-by basic :offset 32) + (time-remaining float :offset 36) + (step-count int16 :offset 40) + (position vector :inline :offset 48) + (rot vector :inline :offset 64) + (rotation quaternion :inline :offset 64) + (lin-momentum vector :inline :offset 80) + (ang-momentum vector :inline :offset 96) + (force vector :inline :offset 112) + (torque vector :inline :offset 128) + (lin-velocity vector :inline :offset 144) + (ang-velocity vector :inline :offset 160) + (matrix matrix :inline :offset 176) + (inv-i-world matrix :inline :offset 240) + ) + :method-count-assert 26 + :size-assert #x130 + :flag-assert #x1a00000130 + (:methods + (rigid-body-control-method-9 (_type_) none 9) + (rigid-body-control-method-10 (_type_) none 10) + (rigid-body-control-method-11 (_type_) none 11) + (rigid-body-control-method-12 (_type_ float) none 12) + (rigid-body-control-method-13 (_type_) none 13) + (rigid-body-control-method-14 (_type_ float) none 14) + (clear-force-torque! (_type_) none 15) + (clear-momentum! (_type_) none 16) + (rigid-body-control-method-17 (_type_ vector vector) none 17) + (rigid-body-control-method-18 (_type_ vector vector) none 18) + (rigid-body-control-method-19 (_type_ vector) none 19) + (rigid-body-control-method-20 (_type_ vector vector float) none 20) + (rigid-body-control-method-21 (_type_ vector vector) vector 21) + (rigid-body-control-method-22 (_type_ vector) vector 22) + (rigid-body-control-method-23 (_type_) none 23) + (rigid-body-control-method-24 (_type_ rigid-body-info vector quaternion basic) none 24) + (rigid-body-control-method-25 (_type_ vector quaternion) none 25) + ) + ) + + +(defmethod rigid-body-control-method-9 rigid-body-control ((obj rigid-body-control)) + (rigid-body-method-9 (-> obj state)) + (none) + ) + +(defmethod rigid-body-control-method-10 rigid-body-control ((obj rigid-body-control)) + (rigid-body-method-10 (-> obj state)) + (none) + ) + +(defmethod rigid-body-control-method-11 rigid-body-control ((obj rigid-body-control)) + (rigid-body-method-11 (-> obj state)) + (none) + ) + +(defmethod rigid-body-control-method-12 rigid-body-control ((obj rigid-body-control) (arg0 float)) + (rigid-body-method-12 (-> obj state) arg0) + (none) + ) + +(defmethod rigid-body-control-method-13 rigid-body-control ((obj rigid-body-control)) + (rigid-body-method-13 (-> obj state)) + (none) + ) + +(defmethod rigid-body-control-method-14 rigid-body-control ((obj rigid-body-control) (arg0 float)) + (rigid-body-method-14 (-> obj state) arg0) + (none) + ) + +(defmethod clear-force-torque! rigid-body-control ((obj rigid-body-control)) + (clear-force-torque! (-> obj state)) + (none) + ) + +(defmethod clear-momentum! rigid-body-control ((obj rigid-body-control)) + (clear-momentum! (-> obj state)) + (none) + ) + +(defmethod rigid-body-control-method-17 rigid-body-control ((obj rigid-body-control) (arg0 vector) (arg1 vector)) + (rigid-body-method-18 (-> obj state) arg0 arg1) + (none) + ) + +(defmethod rigid-body-control-method-18 rigid-body-control ((obj rigid-body-control) (arg0 vector) (arg1 vector)) + (rigid-body-method-19 (-> obj state) arg0 arg1) + (none) + ) + +(defmethod rigid-body-control-method-19 rigid-body-control ((obj rigid-body-control) (arg0 vector)) + (rigid-body-method-20 (-> obj state) arg0) + (none) + ) + +(defmethod rigid-body-control-method-20 rigid-body-control ((obj rigid-body-control) (arg0 vector) (arg1 vector) (arg2 float)) + (rigid-body-method-21 (-> obj state) arg0 arg1 arg2) + (none) + ) + +(defmethod rigid-body-control-method-21 rigid-body-control ((obj rigid-body-control) (arg0 vector) (arg1 vector)) + (rigid-body-method-22 (-> obj state) arg0 arg1) + ) + +(defmethod rigid-body-control-method-22 rigid-body-control ((obj rigid-body-control) (arg0 vector)) + (rigid-body-method-23 (-> obj state) arg0) + ) + +(defmethod rigid-body-control-method-23 rigid-body-control ((obj rigid-body-control)) + (rigid-body-method-24 (-> obj state)) + (none) + ) + +(defmethod rigid-body-control-method-24 rigid-body-control ((obj rigid-body-control) (arg0 rigid-body-info) (arg1 vector) (arg2 quaternion) (arg3 basic)) + (rigid-body-method-25 (-> obj state) arg0 arg1 arg2 arg3) + (none) + ) + +(defmethod rigid-body-control-method-25 rigid-body-control ((obj rigid-body-control) (arg0 vector) (arg1 quaternion)) + (rigid-body-method-26 (-> obj state) arg0 arg1) + (none) + ) + +(deftype rigid-body-object (process-focusable) + ((info rigid-body-object-constants :offset-assert 204) + (flags rigid-body-object-flag :offset-assert 208) + (max-time-step float :offset-assert 216) + (incoming-attack-id uint32 :offset-assert 220) + (player-touch-time time-frame :offset-assert 224) + (disturbed-time time-frame :offset-assert 232) + (player-force-position vector :inline :offset-assert 240) + (player-force vector :inline :offset-assert 256) + ) + :heap-base #x90 + :method-count-assert 53 + :size-assert #x110 + :flag-assert #x3500900110 + (:methods + (rigid-body-object-method-27 () none 27) + (rigid-body-object-method-28 () none 28) + (rigid-body-object-method-29 () none 29) + (rigid-body-object-method-30 () none 30) + (rigid-body-object-method-31 () none 31) + (rigid-body-object-method-32 () none 32) + (rigid-body-object-method-33 () none 33) + (rigid-body-object-method-34 () none 34) + (rigid-body-object-method-35 () none 35) + (rigid-body-object-method-36 () none 36) + (rigid-body-object-method-37 () none 37) + (rigid-body-object-method-38 () none 38) + (rigid-body-object-method-39 () none 39) + (rigid-body-object-method-40 () none 40) + (rigid-body-object-method-41 () none 41) + (rigid-body-object-method-42 () none 42) + (rigid-body-object-method-43 () none 43) + (rigid-body-object-method-44 () none 44) + (rigid-body-object-method-45 () none 45) + (rigid-body-object-method-46 () none 46) + (rigid-body-object-method-47 () none 47) + (rigid-body-object-method-48 () none 48) + (rigid-body-object-method-49 () none 49) + (rigid-body-object-method-50 () none 50) + (rigid-body-object-method-51 () none 51) + (rigid-body-object-method-52 () none 52) + ) + ) + + +(deftype rigid-body-queue (structure) + ((count int8 :offset-assert 0) + (array uint64 128 :offset 8) + ) + :method-count-assert 17 + :size-assert #x408 + :flag-assert #x1100000408 + (:methods + (rigid-body-queue-method-9 () none 9) + (rigid-body-queue-method-10 () none 10) + (rigid-body-queue-method-11 () none 11) + (rigid-body-queue-method-12 () none 12) + (rigid-body-queue-method-13 () none 13) + (rigid-body-queue-method-14 () none 14) + (rigid-body-queue-method-15 () none 15) + (rigid-body-queue-method-16 () none 16) + ) + ) diff --git a/goal_src/jak2/engine/scene/scene-h.gc b/goal_src/jak2/engine/scene/scene-h.gc index 25b7b5a55c..276c0bb806 100644 --- a/goal_src/jak2/engine/scene/scene-h.gc +++ b/goal_src/jak2/engine/scene/scene-h.gc @@ -12,12 +12,12 @@ ;; DECOMP BEGINS (deftype scene-actor (basic) - ((name basic :offset-assert 4) + ((name string :offset-assert 4) (level basic :offset-assert 8) - (art-group basic :offset-assert 12) - (prefix basic :offset-assert 16) - (draw-frames basic :offset-assert 20) - (scissor-frames basic :offset-assert 24) + (art-group string :offset-assert 12) + (prefix string :offset-assert 16) + (draw-frames pair :offset-assert 20) + (scissor-frames pair :offset-assert 24) (camera int16 :offset-assert 28) (light-index uint8 :offset-assert 30) (shadow-mask uint8 :offset-assert 31) @@ -28,89 +28,90 @@ (shadow-volume-joint basic :offset-assert 48) (draw-seg uint64 :offset-assert 56) (no-draw-seg uint64 :offset-assert 64) - (process uint64 :offset-assert 72) + (process handle :offset-assert 72) ) :method-count-assert 10 :size-assert #x50 :flag-assert #xa00000050 (:methods - (scene-actor-method-9 () none 9) + (scene-actor-method-9 (_type_ scene-player) (pointer process) 9) ) ) (deftype scene (art-group) - ((mask-to-clear uint32 :offset-assert 32) - (entity basic :offset-assert 36) - (art-group basic :offset-assert 40) - (anim basic :offset-assert 44) - (parts int32 :offset-assert 48) - (command-list basic :offset-assert 52) - (cut-list basic :offset-assert 56) - (wait-max-time time-frame :offset-assert 64) - (wait-air-time time-frame :offset-assert 72) - (wait-ground-time time-frame :offset-assert 80) - (draw-target basic :offset-assert 88) - (abort basic :offset-assert 92) - (actor basic :offset-assert 96) - (load-point basic :offset-assert 100) - (end-point basic :offset-assert 104) - (borrow basic :offset-assert 108) - (sfx-volume float :offset-assert 112) - (ambient-volume float :offset-assert 116) - (music-volume float :offset-assert 120) - (blackout-end basic :offset-assert 124) - (peaceful basic :offset-assert 128) - (music-delay float :offset-assert 132) - (save basic :offset-assert 136) - (scene-task uint16 :offset-assert 140) + ((mask-to-clear uint32 :offset-assert 32) + (entity string :offset-assert 36) + (art-group string :offset-assert 40) + (anim string :offset-assert 44) + (parts int32 :offset-assert 48) + (command-list basic :offset-assert 52) + (cut-list pair :offset-assert 56) + (wait-max-time time-frame :offset-assert 64) + (wait-air-time time-frame :offset-assert 72) + (wait-ground-time time-frame :offset-assert 80) + (draw-target level-load-info :offset-assert 88) + (abort basic :offset-assert 92) + (actor (array scene-actor) :offset-assert 96) + (load-point string :offset-assert 100) + (end-point string :offset-assert 104) + (borrow basic :offset-assert 108) + (sfx-volume float :offset-assert 112) + (ambient-volume float :offset-assert 116) + (music-volume float :offset-assert 120) + (blackout-end basic :offset-assert 124) + (peaceful basic :offset-assert 128) + (music-delay float :offset-assert 132) + (save basic :offset-assert 136) + (scene-task uint16 :offset-assert 140) ) :method-count-assert 17 :size-assert #x8e :flag-assert #x110000008e (:methods - (scene-method-15 () none 15) - (scene-method-16 () none 16) + (scene-method-15 (_type_ spool-anim) none 15) + (scene-method-16 (_type_) _type_ 16) ) ) + (deftype scene-player (process-drawable) - ((scene-list basic :offset-assert 200) - (scene basic :offset-assert 204) - (scene-index int32 :offset-assert 208) - (anim basic :offset-assert 212) - (next-anim basic :offset-assert 216) - (camera uint64 :offset-assert 224) - (main-entity basic :offset-assert 232) - (wait basic :offset-assert 236) - (old-target-pos transformq :inline :offset-assert 240) - (pre-cut-frame basic :offset-assert 288) - (preload-continue basic :offset-assert 292) - (dma-max uint32 :offset-assert 296) - (gui-id uint32 :offset-assert 300) - (aborted? basic :offset-assert 304) - (scene-start-time time-frame :offset-assert 312) - (targ-speed float :offset-assert 320) - (cur-speed float :offset-assert 324) - (speed-change-time time-frame :offset-assert 328) - (speed-press-time time-frame :offset-assert 336) - (speed-change-speed float :offset-assert 344) - (subtitle-change-time time-frame :offset-assert 352) - (user-sound uint32 4 :offset-assert 360) + ((scene-list (pointer symbol) :offset-assert 200) + (scene scene :offset-assert 204) + (scene-index int32 :offset-assert 208) + (anim spool-anim :offset-assert 212) + (next-anim spool-anim :offset-assert 216) + (camera handle :offset-assert 224) + (main-entity entity-actor :offset-assert 232) + (wait basic :offset-assert 236) + (old-target-pos transformq :inline :offset-assert 240) + (pre-cut-frame basic :offset-assert 288) + (preload-continue string :offset-assert 292) + (dma-max uint32 :offset-assert 296) + (gui-id uint32 :offset-assert 300) + (aborted? symbol :offset-assert 304) + (scene-start-time time-frame :offset-assert 312) + (targ-speed float :offset-assert 320) + (cur-speed float :offset-assert 324) + (speed-change-time time-frame :offset-assert 328) + (speed-press-time time-frame :offset-assert 336) + (speed-change-speed float :offset-assert 344) + (subtitle-change-time time-frame :offset-assert 352) + (user-sound uint32 4 :offset-assert 360) ) :heap-base #x100 :method-count-assert 26 :size-assert #x178 :flag-assert #x1a01000178 (:methods - (scene-player-method-20 () none 20) - (scene-player-method-21 () none 21) - (scene-player-method-22 () none 22) - (scene-player-method-23 () none 23) - (scene-player-method-24 () none 24) - (scene-player-method-25 () none 25) + (wait (symbol) _type_ :state 20) + (release () _type_ :state 21) + (play-anim () _type_ :state 22) + (scene-player-method-23 (_type_ string symbol) none 23) + (scene-player-method-24 (_type_ basic symbol) scene 24) + (scene-player-method-25 (_type_ float) none 25) ) ) -(define *scene-player* (the-as scene-player #f)) +(define *scene-player* (the-as scene-player #f)) diff --git a/goal_src/jak2/engine/util/script.gc b/goal_src/jak2/engine/util/script.gc index fee1ffe9be..4e243e024a 100644 --- a/goal_src/jak2/engine/util/script.gc +++ b/goal_src/jak2/engine/util/script.gc @@ -5,10 +5,13 @@ ;; name in dgo: script ;; dgos: ENGINE, GAME -;; DECOMP BEGINS +(declare-type script-form structure) +(define-extern *script-form* (inline-array script-form)) (with-pp +;; DECOMP BEGINS + (defun command-get-int ((arg0 object) (arg1 int)) (cond ((null? arg0) @@ -570,8 +573,6 @@ (not sv-16) ) -(define-extern *script-form* (inline-array script-form)) - ;; WARN: Using new Jak 2 rtype-of (defmethod eval! script-context ((obj script-context) (arg0 pair)) (let ((s4-0 (the-as object #f))) @@ -1959,15 +1960,11 @@ (set! (-> v1-109 spec) '((return macro (drawable-region-prim)) (function macro (symbol)) (id eval (binteger))) ) - (set! (-> v1-109 func) (lambda ((arg0 script-context)) - "lookup a region by number and return the region-prim." - (let ((gp-0 region-prim-lookup-by-id) - (a0-2 (command-get-int (-> arg0 param 1) 0)) - ) - 0 - (gp-0 a0-2) - ) - ) + (set! (-> v1-109 func) + (lambda ((arg0 script-context)) + "lookup a region by number and return the region-prim." + (region-prim-lookup-by-id (command-get-int (-> arg0 param 1) 0) #f (the-as symbol 0)) + ) ) ) diff --git a/goal_src/jak2/kernel/gkernel-h.gc b/goal_src/jak2/kernel/gkernel-h.gc index a45b48a116..221019f106 100644 --- a/goal_src/jak2/kernel/gkernel-h.gc +++ b/goal_src/jak2/kernel/gkernel-h.gc @@ -287,7 +287,7 @@ (allocated-length int32 :offset-assert 84) ;; ?? - (pad0 uint32 2) + (pad-unknown-0 uint32 2) ;; had to rename this unfortunately, there is a type that uses this same name "vehicle" ;; process heap (heap-base pointer :offset-assert 96) @@ -728,4 +728,4 @@ (defmacro scratchpad-ptr (type &key (offset 0)) "Create a pointer to an object on the scratchpad." `(the-as (pointer ,type) (&+ *fake-scratchpad-data* ,offset)) - ) \ No newline at end of file + ) diff --git a/goal_src/jak2/levels/city/common/ctywide-obs-h.gc b/goal_src/jak2/levels/city/common/ctywide-obs-h.gc index 5e7c096316..44a3065770 100644 --- a/goal_src/jak2/levels/city/common/ctywide-obs-h.gc +++ b/goal_src/jak2/levels/city/common/ctywide-obs-h.gc @@ -7,3 +7,39 @@ ;; DECOMP BEGINS +(deftype city-race-ring-info (structure) + ((pos vector :inline :offset-assert 0) + (angle float :offset 12) + (boost float :offset-assert 16) + (dist float :offset-assert 20) + ) + :method-count-assert 10 + :size-assert #x18 + :flag-assert #xa00000018 + (:methods + (city-race-ring-info-method-9 () none 9) + ) + ) + + +(deftype city-ambush-spot (structure) + ((pos vector :inline :offset-assert 0) + (obj-type uint8 :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x11 + :flag-assert #x900000011 + ) + + +(deftype city-ambush-info (structure) + ((count int16 :offset-assert 0) + (array uint32 :offset-assert 4) + ) + :method-count-assert 10 + :size-assert #x8 + :flag-assert #xa00000008 + (:methods + (city-ambush-info-method-9 () none 9) + ) + ) diff --git a/goal_src/jak2/levels/city/common/nav-graph-h.gc b/goal_src/jak2/levels/city/common/nav-graph-h.gc index be4899aae4..4de3ba0b83 100644 --- a/goal_src/jak2/levels/city/common/nav-graph-h.gc +++ b/goal_src/jak2/levels/city/common/nav-graph-h.gc @@ -23,7 +23,7 @@ ;; DECOMP BEGINS (deftype nav-branch (structure) - ((node nav-node 2 :offset-assert 0) + ((node int32 2 :offset-assert 0) (src-node nav-node :offset 0) (dest-node nav-node :offset 4) (temp-dest-node-id int32 :offset 4) @@ -40,51 +40,51 @@ :size-assert #x10 :flag-assert #x1500000010 (:methods - (nav-branch-method-9 () none 9) - (nav-branch-method-10 () none 10) + (nav-branch-method-9 (_type_) none 9) + (nav-branch-method-10 (_type_ object int) none 10) (nav-branch-method-11 (_type_) float 11) (nav-branch-method-12 (_type_) float 12) (nav-branch-method-13 (_type_) float 13) (user-limit-reached? (_type_) symbol 14) (nav-branch-method-15 (_type_) symbol 15) - (nav-branch-method-16 () none 16) - (nav-branch-method-17 () none 17) - (nav-branch-method-18 () none 18) - (nav-branch-method-19 () none 19) - (nav-branch-method-20 () none 20) + (nav-branch-method-16 (_type_ float) none 16) + (nav-branch-method-17 (_type_ float) none 17) + (nav-branch-method-18 (_type_ float) none 18) + (nav-branch-method-19 (_type_ nav-node) none 19) + (nav-branch-method-20 (_type_ nav-node) none 20) ) ) (deftype nav-node (structure) - ((data uint32 8 :offset-assert 0) - (position vector :inline :offset 0) - (pos-x float :offset 0) - (pos-y float :offset 4) - (pos-z float :offset 8) - (angle uint16 :offset 12) - (id uint16 :offset 14) - (radius uint8 :offset 16) - (branch-count int8 :offset 17) - (flags nav-node-flag-byte :offset 18) - (pad0 int8 1 :offset 19) - (branch-array uint32 :offset 20) - (nav-mesh-id uint32 :offset 24) - (level level :offset 28) + ((data uint32 8 :offset-assert 0) + (position vector :inline :offset 0) + (pos-x float :offset 0) + (pos-y float :offset 4) + (pos-z float :offset 8) + (angle uint16 :offset 12) + (id uint16 :offset 14) + (radius uint8 :offset 16) + (branch-count int8 :offset 17) + (flags nav-node-flag-byte :offset 18) + (pad0 int8 1 :offset 19) + (branch-array (inline-array nav-branch) :offset 20) + (nav-mesh-id uint32 :offset 24) + (level symbol :offset 28) ) :method-count-assert 22 :size-assert #x20 :flag-assert #x1600000020 (:methods - (nav-node-method-9 () none 9) - (nav-node-method-10 () none 10) - (nav-node-method-11 () none 11) - (nav-node-method-12 () none 12) - (nav-node-method-13 () none 13) - (nav-node-method-14 () none 14) - (nav-node-method-15 () none 15) - (nav-node-method-16 () none 16) - (nav-node-method-17 () none 17) + (nav-node-method-9 (_type_) none 9) + (nav-node-method-10 (_type_ symbol string) none 10) + (nav-node-method-11 (_type_ int) none 11) + (nav-node-method-12 (_type_ vector nav-node) none 12) + (nav-node-method-13 (_type_ vector) none 13) + (nav-node-method-14 (_type_ nav-node) none 14) + (nav-node-method-15 (_type_ uint) none 15) + (nav-node-method-16 (_type_ float) none 16) + (nav-node-method-17 (_type_ float) none 17) (get-position (_type_ vector) vector 18) (calc-sine-and-cosine! (_type_ vector) vector 19) (get-angle (_type_) float 20) @@ -169,59 +169,60 @@ (deftype nav-graph (basic) - ((node-count int16 :offset-assert 4) - (branch-count int16 :offset-assert 6) - (node-array (inline-array nav-node) :offset-assert 8) - (branch-array uint32 :offset-assert 12) - (link-count int16 :offset-assert 16) - (pad2 uint16 :offset-assert 18) - (link-array uint32 :offset-assert 20) - (first-node int16 :offset-assert 24) - (pad0 uint16 :offset-assert 26) - (patched basic :offset-assert 28) - (id uint32 :offset-assert 32) - (pad1 uint32 6 :offset-assert 36) + ((node-count int16 :offset-assert 4) + (branch-count int16 :offset-assert 6) + (node-array (inline-array nav-node) :offset-assert 8) + (branch-array (inline-array nav-branch) :offset-assert 12) + (link-count int16 :offset-assert 16) + (pad2 uint16 :offset-assert 18) + (link-array (inline-array nav-graph-link) :offset-assert 20) + (first-node int16 :offset-assert 24) + (pad0 uint16 :offset-assert 26) + (patched symbol :offset-assert 28) + (id uint32 :offset-assert 32) + (pad1 uint32 6 :offset-assert 36) ) :method-count-assert 45 :size-assert #x3c :flag-assert #x2d0000003c (:methods - (nav-graph-method-9 () none 9) - (nav-graph-method-10 () none 10) - (nav-graph-method-11 () none 11) - (nav-graph-method-12 () none 12) - (nav-graph-method-13 () none 13) - (nav-graph-method-14 () none 14) - (nav-graph-method-15 () none 15) - (nav-graph-method-16 () none 16) - (nav-graph-method-17 () none 17) - (nav-graph-method-18 () none 18) - (nav-graph-method-19 () none 19) - (nav-graph-method-20 () none 20) - (nav-graph-method-21 () none 21) - (nav-graph-method-22 () none 22) - (nav-graph-method-23 () none 23) - (nav-graph-method-24 () none 24) - (nav-graph-method-25 () none 25) - (nav-graph-method-26 () none 26) - (nav-graph-method-27 () none 27) - (nav-graph-method-28 () none 28) - (nav-graph-method-29 () none 29) - (nav-graph-method-30 () none 30) - (nav-graph-method-31 () none 31) - (nav-graph-method-32 () none 32) - (nav-graph-method-33 () none 33) - (nav-graph-method-34 () none 34) - (nav-graph-method-35 () none 35) - (nav-graph-method-36 () none 36) - (nav-graph-method-37 () none 37) + (new (symbol type int int int uint) _type_ 0) + (nav-graph-method-9 (_type_) none 9) + (nav-graph-method-10 (_type_ vector int) none 10) + (nav-graph-method-11 (_type_) none 11) + (nav-graph-method-12 (_type_) none 12) + (nav-graph-method-13 (_type_ int int) none 13) + (nav-graph-method-14 (_type_ int int) none 14) + (nav-graph-method-15 (_type_) none 15) + (nav-graph-method-16 (_type_ int) nav-node 16) + (nav-graph-method-17 (_type_ nav-node) none 17) + (nav-graph-method-18 (_type_ nav-node int) none 18) + (nav-graph-method-19 (_type_ int int int int int int) none 19) + (nav-graph-method-20 (_type_ int int) none 20) + (nav-graph-method-21 (_type_) none 21) + (nav-graph-method-22 (_type_ int int) none 22) + (nav-graph-method-23 (_type_ int int) none 23) + (nav-graph-method-24 (_type_ int int) none 24) + (nav-graph-method-25 (_type_ symbol symbol) none 25) + (nav-graph-method-26 (_type_ symbol symbol) none 26) + (nav-graph-method-27 (_type_) none 27) + (nav-graph-method-28 (_type_) none 28) + (nav-graph-method-29 (_type_ symbol) none 29) + (nav-graph-method-30 (_type_ uint) none 30) + (nav-graph-method-31 (_type_ float) none 31) + (nav-graph-method-32 (_type_ float) none 32) + (nav-graph-method-33 (_type_ float) none 33) + (nav-graph-method-34 (_type_ float) none 34) + (nav-graph-method-35 (_type_ int) none 35) + (nav-graph-method-36 (_type_ int) none 36) + (nav-graph-method-37 (_type_ vector) none 37) (nav-graph-method-38 () none 38) - (nav-graph-method-39 () none 39) - (nav-graph-method-40 () none 40) + (nav-graph-method-39 (_type_) none 39) + (nav-graph-method-40 (_type_ int) int 40) (node-at-idx (_type_ int) nav-node 41) - (nav-graph-method-42 () none 42) - (nav-graph-method-43 () none 43) - (nav-graph-method-44 () none 44) + (nav-graph-method-42 (_type_) none 42) + (nav-graph-method-43 (_type_ nav-graph-link string) none 43) + (from-editor () none 44) ) ) @@ -237,9 +238,3 @@ v0-0 ) ) - -0 - - - - diff --git a/goal_src/jak2/levels/city/common/vehicle-h.gc b/goal_src/jak2/levels/city/common/vehicle-h.gc index 85c19246a8..fa8c8cb802 100644 --- a/goal_src/jak2/levels/city/common/vehicle-h.gc +++ b/goal_src/jak2/levels/city/common/vehicle-h.gc @@ -5,5 +5,434 @@ ;; name in dgo: vehicle-h ;; dgos: CWI +;; +++vehicle-controller-flag +(defenum vehicle-controller-flag + :type uint32 + :bitfield #t + (debug) + (draw-marks) + (left-turn) + (on-straightaway) + (do-turn) + (blocking-dest-node) + (attached) + (off-path) + (ignore-others) + (direct-mode) + (recovery-mode) + (no-slowing-for-turns)) +;; ---vehicle-controller-flag + + ;; DECOMP BEGINS +(deftype vehicle-lookup-info (structure) + ((turn-radius meters :offset-assert 0) + (throttle-turning float :offset-assert 4) + (throttle-straight float :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ) + + +(deftype vehicle-control-point (structure) + ((local-pos vector :inline :offset-assert 0) + (normal vector :inline :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) + + +(deftype vehicle-section-info (structure) + ((damage-seg-array uint64 3 :offset-assert 0) + (damage-seg-count int8 :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x19 + :flag-assert #x900000019 + ) + + +(deftype vehicle-seat-info (structure) + ((data uint8 16 :offset-assert 0) + (position vector :inline :offset 0) + (pos-x float :offset 0) + (pos-y float :offset 4) + (pos-z float :offset 8) + (angle int16 :offset 12) + (flags uint8 :offset 14) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + + +(deftype vehicle-explosion-info (joint-exploder-static-params) + ((skel basic :offset-assert 16) + (skel-name basic :offset-assert 20) + (anim int32 :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x1c + :flag-assert #x90000001c + ) + + +(deftype vehicle-grab-rail-info (structure) + ((local-pos vector 2 :inline :offset-assert 0) + (normal vector :inline :offset-assert 32) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) + + +(deftype rigid-body-vehicle-constants (rigid-body-object-constants) + ((flags uint32 :offset-assert 208) + (object-type uint8 :offset-assert 212) + (guard-type uint8 :offset-assert 213) + (max-engine-thrust meters :offset-assert 216) + (inv-max-engine-thrust float :offset-assert 220) + (engine-response-rate float :offset-assert 224) + (engine-intake-factor float :offset-assert 228) + (brake-factor float :offset-assert 232) + (turbo-boost-factor float :offset-assert 236) + (max-xz-speed meters :offset-assert 240) + (ground-probe-distance meters :offset-assert 244) + (ground-probe-offset meters :offset-assert 248) + (cos-ground-effect-angle float :offset-assert 252) + (spring-lift-factor float :offset-assert 256) + (air-steering-factor float :offset-assert 260) + (air-drag-factor float :offset-assert 264) + (steering-fin-angle float :offset-assert 268) + (steering-thruster-factor float :offset-assert 272) + (steering-thruster-max-gain float :offset-assert 276) + (steering-thruster-half-gain-speed meters :offset-assert 280) + (tire-steering-angle float :offset-assert 284) + (tire-friction-factor float :offset-assert 288) + (tire-static-friction float :offset-assert 292) + (tire-static-friction-speed meters :offset-assert 296) + (tire-dynamic-friction float :offset-assert 300) + (tire-dynamic-friction-speed meters :offset-assert 304) + (tire-inv-max-friction-speed float :offset-assert 308) + (airfoil-factor float :offset-assert 312) + (drag-force-factor float :offset-assert 316) + (speed-scrubbing-drag float :offset-assert 320) + (speed-limiting-drag float :offset-assert 324) + (pitch-control-factor float :offset-assert 328) + (roll-control-factor float :offset-assert 332) + (roll-angle float :offset-assert 336) + (jump-thrust-factor float :offset-assert 340) + (buoyancy-factor float :offset-assert 344) + (player-weight float :offset-assert 348) + (player-shift-x meters :offset-assert 352) + (player-shift-z meters :offset-assert 356) + (target-speed-offset meters :offset-assert 360) + (turning-accel meters :offset-assert 364) + (toughness-factor float :offset-assert 368) + (damage-factor float :offset-assert 372) + (camera-string-min-height meters :offset-assert 376) + (camera-string-max-height meters :offset-assert 380) + (camera-string-min-length meters :offset-assert 384) + (camera-string-max-length meters :offset-assert 388) + (camera-min-fov float :offset-assert 392) + (camera-max-fov float :offset-assert 396) + (camera-head-offset float :offset-assert 400) + (camera-foot-offset float :offset-assert 404) + (camera-normal-max-angle-offset float :offset-assert 408) + (camera-air-max-angle-offset float :offset-assert 412) + (camera-max-lookaround-speed float :offset-assert 416) + (seat-count int8 :offset-assert 420) + (section-count int8 :offset-assert 421) + (rider-stance uint8 :offset-assert 422) + (grab-rail-count int8 :offset-assert 423) + (grab-rail-array uint32 :offset-assert 424) + (seat-array vehicle-seat-info 4 :inline :offset-assert 432) + (rider-hand-offset vector 2 :inline :offset-assert 496) + (section-array vehicle-section-info 4 :inline :offset-assert 528) + (section-bike-front vehicle-section-info :inline :offset 528) + (section-bike-rear vehicle-section-info :inline :offset 560) + (section-car-front-left vehicle-section-info :inline :offset 528) + (section-car-rear-left vehicle-section-info :inline :offset 560) + (section-car-front-right vehicle-section-info :inline :offset 592) + (section-car-rear-right vehicle-section-info :inline :offset 624) + (explosion basic :offset-assert 656) + (engine-pitch-scale float :offset-assert 660) + (engine-pitch-offset float :offset-assert 664) + (engine-pitch-mod-amp float :offset-assert 668) + (engine-sound-select int8 :offset-assert 672) + (engine-sound uint128 :offset-assert 688) + (thrust-sound uint128 :offset-assert 704) + (scrape-sound uint128 :offset-assert 720) + (glance-sound uint128 :offset-assert 736) + (impact-sound uint128 :offset-assert 752) + (extra-sound uint128 :offset-assert 768) + (explosion-part int32 :offset-assert 784) + (headlight-count int8 :offset-assert 788) + (taillight-count int8 :offset-assert 789) + (thruster-flame-width meters :offset-assert 792) + (thruster-flame-length meters :offset-assert 796) + (thruster-local-pos vector 2 :inline :offset-assert 800) + (exhaust-local-pos vector 2 :inline :offset-assert 832) + (exhaust-local-dir vector 2 :inline :offset-assert 864) + (smoke-local-pos vector 2 :inline :offset-assert 896) + (smoke-local-vel vector 2 :inline :offset-assert 928) + (headlight-local-pos vector 3 :inline :offset-assert 960) + (taillight-local-pos vector 2 :inline :offset-assert 1008) + (lift-thruster-count int8 :offset-assert 1040) + (roll-thruster-count int8 :offset-assert 1041) + (steering-thruster-count int8 :offset-assert 1042) + (stabilizer-count int8 :offset-assert 1043) + (inv-lift-thruster-count float :offset-assert 1044) + (pad int8 8 :offset-assert 1048) + (lift-thruster-array vector4w-2 2 :inline :offset-assert 1056) + (roll-thruster-array vector4w-2 2 :inline :offset-assert 1120) + (steering-thruster-array vector4w-2 2 :inline :offset-assert 1184) + (stabilizer-array vector4w-2 6 :inline :offset-assert 1248) + (engine-thrust-local-pos vector :inline :offset-assert 1440) + (brake-local-pos vector :inline :offset-assert 1456) + (particle-system-2d basic :offset-assert 1472) + (particle-system-3d basic :offset-assert 1476) + (part-thruster basic :offset-assert 1480) + (part-thruster-scale-x sp-field-init-spec :offset-assert 1484) + (part-thruster-scale-y sp-field-init-spec :offset-assert 1488) + (part-quat quaternion :offset-assert 1492) + (part-vel vector :offset-assert 1496) + (color-option-count int8 :offset-assert 1500) + (color-option-select int8 :offset-assert 1501) + (color-option-array uint32 :offset-assert 1504) + (sample-dir vector :inline :offset-assert 1520) + (sample-time time-frame :offset-assert 1536) + (sample-index int32 :offset-assert 1544) + ) + :method-count-assert 11 + :size-assert #x60c + :flag-assert #xb0000060c + (:methods + (rigid-body-vehicle-constants-method-9 () none 9) + (rigid-body-vehicle-constants-method-10 () none 10) + ) + ) + + +(deftype vehicle-controller (structure) + ((flags vehicle-controller-flag :offset-assert 0) + (traffic symbol :offset-assert 4) + (branch nav-branch :offset-assert 8) + (target-speed-offset meters :offset-assert 12) + (target-speed meters :offset-assert 16) + (choose-branch-callback symbol :offset-assert 20) + (turn-accel meters :offset-assert 24) + (max-turn-speed meters :offset-assert 28) + (path-prev-point vector :inline :offset-assert 32) + (turn-enter-point vector :inline :offset-assert 48) + (turn-exit-point vector :inline :offset-assert 64) + (path-dest-point vector :inline :offset 64) + (turn-enter-dir vector :inline :offset-assert 80) + (turn-exit-dir vector :inline :offset-assert 96) + (dest-circle vector :inline :offset-assert 112) + (target-point vector :inline :offset-assert 128) + ) + :method-count-assert 22 + :size-assert #x90 + :flag-assert #x1600000090 + (:methods + (vehicle-controller-method-9 () none 9) + (vehicle-controller-method-10 () none 10) + (vehicle-controller-method-11 () none 11) + (vehicle-controller-method-12 () none 12) + (vehicle-controller-method-13 () none 13) + (vehicle-controller-method-14 () none 14) + (vehicle-controller-method-15 () none 15) + (vehicle-controller-method-16 () none 16) + (vehicle-controller-method-17 () none 17) + (vehicle-controller-method-18 () none 18) + (vehicle-controller-method-19 () none 19) + (vehicle-controller-method-20 () none 20) + (vehicle-controller-method-21 () none 21) + ) + ) + + +(deftype vehicle-section (structure) + ((damage float :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) + + +(deftype vehicle (rigid-body-object) + ((pad uint32 4 :offset-assert 272) + (controls vehicle-controls :inline :offset-assert 288) + (prev-controls vehicle-controls :inline :offset-assert 304) + (up-dir vector :inline :offset-assert 320) + (jump-time float :offset-assert 336) + (jump-thrust float :offset-assert 340) + (engine-thrust float :offset-assert 344) + (engine-power-factor float :offset-assert 348) + (force-scale float :offset-assert 352) + (target-distance2 meters :offset-assert 356) + (pad0 uint32 :offset-assert 360) + (target-acceleration vector :inline :offset-assert 368) + (impact-pos vector :inline :offset-assert 384) + (lin-acceleration vector :inline :offset-assert 400) + (hit-points float :offset-assert 416) + (damage-factor float :offset-assert 420) + (crash-level int8 :offset-assert 424) + (force-level int8 :offset-assert 425) + (traffic-hash-id int8 :offset-assert 426) + (traffic-priority-id int8 :offset-assert 427) + (power-fluctuation-factor float :offset-assert 428) + (power-level float :offset-assert 432) + (flight-level-index int8 :offset-assert 436) + (flight-level-index-prev int8 :offset-assert 437) + (overlap-player-counter uint8 :offset-assert 438) + (physics-counter uint8 :offset-assert 439) + (flight-level float :offset-assert 440) + (brake-factor float :offset-assert 444) + (cam-speed-interp float :offset-assert 448) + (camera-dist2 float :offset-assert 452) + (player-dist2 float :offset-assert 456) + (bound-radius float :offset-assert 460) + (rider-array int64 4 :offset-assert 464) + (lift-thrust float 2 :offset-assert 496) + (roll-thrust float 2 :offset-assert 504) + (sent-attack-time time-frame :offset-assert 512) + (air-time time-frame :offset-assert 520) + (turn-time time-frame :offset-assert 528) + (crash-time time-frame :offset-assert 536) + (transition-time time-frame :offset-assert 544) + (transition-end-time time-frame :offset-assert 552) + (turbo-boost-time time-frame :offset-assert 560) + (crash-duration uint16 :offset-assert 568) + (turbo-boost-duration uint16 :offset-assert 570) + (turbo-boost-factor float :offset-assert 572) + (crash-impulse float :offset-assert 576) + (water-height float :offset-assert 580) + (lights-factor float :offset-assert 584) + (outgoing-attack-id uint32 :offset-assert 588) + (scrape-sound-id sound-id :offset-assert 592) + (engine-sound-id sound-id :offset-assert 596) + (thrust-sound-id sound-id :offset-assert 600) + (roll-sound-id sound-id :offset-assert 604) + (damage-pop-sound-id sound-id :offset-assert 608) + (damage-zap-sound-id sound-id :offset-assert 612) + (extra-sound-id sound-id :offset-assert 616) + (fog-fade float :offset-assert 620) + (scrape-sound-envelope float :offset-assert 624) + (engine-sound-envelope float :offset-assert 628) + (engine-sound-factor float :offset-assert 632) + (sputter-sound-envelope float :offset-assert 636) + (rudder-sound-envelope float :offset-assert 640) + (fins-sound-envelope float :offset-assert 644) + (exhaust-part-accum basic 2 :offset-assert 648) + (smoke-part-accum basic 2 :offset-assert 656) + (controller vehicle-controller :inline :offset-assert 672) + (section-array vehicle-section 4 :inline :offset-assert 816) + ) + :heap-base #x2f0 + :method-count-assert 144 + :size-assert #x370 + :flag-assert #x9002f00370 + (:methods + (vehicle-method-53 () none 53) + (vehicle-method-54 () none 54) + (vehicle-method-55 () none 55) + (vehicle-method-56 () none 56) + (vehicle-method-57 () none 57) + (vehicle-method-58 () none 58) + (vehicle-method-59 () none 59) + (vehicle-method-60 () none 60) + (vehicle-method-61 () none 61) + (vehicle-method-62 () none 62) + (vehicle-method-63 () none 63) + (vehicle-method-64 () none 64) + (vehicle-method-65 () none 65) + (vehicle-method-66 () none 66) + (vehicle-method-67 () none 67) + (vehicle-method-68 () none 68) + (vehicle-method-69 () none 69) + (vehicle-method-70 () none 70) + (vehicle-method-71 () none 71) + (vehicle-method-72 () none 72) + (vehicle-method-73 () none 73) + (vehicle-method-74 () none 74) + (vehicle-method-75 () none 75) + (vehicle-method-76 () none 76) + (vehicle-method-77 () none 77) + (vehicle-method-78 () none 78) + (vehicle-method-79 () none 79) + (vehicle-method-80 () none 80) + (vehicle-method-81 () none 81) + (vehicle-method-82 () none 82) + (vehicle-method-83 () none 83) + (vehicle-method-84 () none 84) + (vehicle-method-85 () none 85) + (vehicle-method-86 () none 86) + (vehicle-method-87 () none 87) + (vehicle-method-88 () none 88) + (vehicle-method-89 () none 89) + (vehicle-method-90 () none 90) + (vehicle-method-91 () none 91) + (vehicle-method-92 () none 92) + (vehicle-method-93 () none 93) + (vehicle-method-94 () none 94) + (vehicle-method-95 () none 95) + (vehicle-method-96 () none 96) + (vehicle-method-97 () none 97) + (vehicle-method-98 () none 98) + (vehicle-method-99 () none 99) + (vehicle-method-100 () none 100) + (vehicle-method-101 () none 101) + (vehicle-method-102 () none 102) + (vehicle-method-103 () none 103) + (vehicle-method-104 () none 104) + (vehicle-method-105 () none 105) + (vehicle-method-106 () none 106) + (vehicle-method-107 () none 107) + (vehicle-method-108 () none 108) + (vehicle-method-109 () none 109) + (vehicle-method-110 () none 110) + (vehicle-method-111 () none 111) + (vehicle-method-112 () none 112) + (vehicle-method-113 () none 113) + (vehicle-method-114 () none 114) + (vehicle-method-115 () none 115) + (vehicle-method-116 () none 116) + (vehicle-method-117 () none 117) + (vehicle-method-118 () none 118) + (vehicle-method-119 () none 119) + (vehicle-method-120 () none 120) + (vehicle-method-121 () none 121) + (vehicle-method-122 () none 122) + (vehicle-method-123 () none 123) + (vehicle-method-124 () none 124) + (vehicle-method-125 () none 125) + (vehicle-method-126 () none 126) + (vehicle-method-127 () none 127) + (vehicle-method-128 () none 128) + (vehicle-method-129 () none 129) + (vehicle-method-130 () none 130) + (vehicle-method-131 () none 131) + (vehicle-method-132 () none 132) + (vehicle-method-133 () none 133) + (vehicle-method-134 () none 134) + (vehicle-method-135 () none 135) + (vehicle-method-136 () none 136) + (vehicle-method-137 () none 137) + (vehicle-method-138 () none 138) + (vehicle-method-139 () none 139) + (vehicle-method-140 () none 140) + (vehicle-method-141 () none 141) + (vehicle-method-142 () none 142) + (vehicle-method-143 () none 143) + ) + ) diff --git a/scripts/gsrc/update-from-decomp.py b/scripts/gsrc/update-from-decomp.py index bcb1db64ae..85ca3e7a88 100644 --- a/scripts/gsrc/update-from-decomp.py +++ b/scripts/gsrc/update-from-decomp.py @@ -185,7 +185,6 @@ if args.preserve: lines_to_ignore = 0 i = len(final_lines) - 1 while i > 0 and (final_lines[i] == "\n" or final_lines[i] == "0\n"): - print(final_lines[i]) lines_to_ignore = lines_to_ignore + 1 i = i - 1 diff --git a/scripts/gsrc/update-gsrc-via-refs.py b/scripts/gsrc/update-gsrc-via-refs.py index f48cb80c46..701283c6b1 100644 --- a/scripts/gsrc/update-gsrc-via-refs.py +++ b/scripts/gsrc/update-gsrc-via-refs.py @@ -1,6 +1,5 @@ # Updates files in gsrc if they are modified in the reference test folder # Uses git -# TODO - get new untracked files as well import subprocess from git import Repo diff --git a/test/decompiler/reference/jak2/engine/entity/entity_REF.gc b/test/decompiler/reference/jak2/engine/entity/entity_REF.gc index 30caf091c7..6e7eaf5b8d 100644 --- a/test/decompiler/reference/jak2/engine/entity/entity_REF.gc +++ b/test/decompiler/reference/jak2/engine/entity/entity_REF.gc @@ -2625,7 +2625,6 @@ ) ;; definition (debug) for function entity-speed-test -;; WARN: Return type mismatch entity vs none. ;; ERROR: Unsupported inline assembly instruction kind - [mtc0 Count, r0] ;; ERROR: Unsupported inline assembly instruction kind - [sync.p] ;; ERROR: Unsupported inline assembly instruction kind - [mfc0 s4, Count] @@ -2646,7 +2645,6 @@ (kill! gp-0) ) ) - (none) ) ;; definition (debug) for function dump-entity-remap diff --git a/test/decompiler/reference/jak2/engine/gfx/background/subdivide-h_REF.gc b/test/decompiler/reference/jak2/engine/gfx/background/subdivide-h_REF.gc index 0106268c33..b588e5b330 100644 --- a/test/decompiler/reference/jak2/engine/gfx/background/subdivide-h_REF.gc +++ b/test/decompiler/reference/jak2/engine/gfx/background/subdivide-h_REF.gc @@ -239,30 +239,32 @@ ;; definition of type region-prim-area (deftype region-prim-area (structure) - ((region-prim-list region-prim-list :inline :offset-assert 0) - (pos vector :inline :offset-assert 1296) - (ray vector :inline :offset 1328) - (region-enter-count int32 :offset 1360) - (region-enter-list uint32 320 :offset-assert 1364) - (region-enter-prim-list uint32 320 :offset-assert 2644) - (region-exit-count int32 :offset-assert 3924) - (region-exit-list uint32 320 :offset-assert 3928) - (region-exit-prim-list uint32 320 :offset-assert 5208) - (region-inside-count int32 :offset-assert 6488) - (region-inside-list uint32 320 :offset-assert 6492) - (region-inside-prim-list uint32 320 :offset-assert 7772) - (region-start-count int32 :offset-assert 9052) - (region-start-list uint32 320 :offset-assert 9056) - (region-start-prim-list uint32 320 :offset-assert 10336) + ((region-prim-list region-prim-list :inline :offset-assert 0) + (pos vector :inline :offset-assert 1296) + (unknown-vector-uiyb1 vector :inline :offset-assert 1312) + (ray vector :inline :offset 1328) + (unknown-vector-t3edh vector :inline :offset-assert 1344) + (region-enter-count int32 :offset 1360) + (region-enter-list region-prim-area 320 :offset-assert 1364) + (region-enter-prim-list drawable-region-sphere 320 :offset-assert 2644) + (region-exit-count int32 :offset-assert 3924) + (region-exit-list region-prim-area 320 :offset-assert 3928) + (region-exit-prim-list drawable-region-sphere 320 :offset-assert 5208) + (region-inside-count int32 :offset-assert 6488) + (region-inside-list region-prim-area 320 :offset-assert 6492) + (region-inside-prim-list drawable-region-sphere 320 :offset-assert 7772) + (region-start-count int32 :offset-assert 9052) + (region-start-list region-prim-area 320 :offset-assert 9056) + (region-start-prim-list drawable-region-sphere 320 :offset-assert 10336) ) :method-count-assert 13 :size-assert #x2d60 :flag-assert #xd00002d60 (:methods - (region-prim-area-method-9 () none 9) - (region-prim-area-method-10 () none 10) - (region-prim-area-method-11 () none 11) - (region-prim-area-method-12 () none 12) + (track-entered-region! (_type_ drawable-region-sphere) none 9) + (track-exited-region! (_type_ drawable-region-sphere) none 10) + (track-inside-region! (_type_ drawable-region-sphere) none 11) + (track-start-region! (_type_ drawable-region-sphere) none 12) ) ) @@ -371,7 +373,3 @@ ;; failed to figure out what this is: 0 - - - - diff --git a/test/decompiler/reference/jak2/engine/level/bsp_REF.gc b/test/decompiler/reference/jak2/engine/level/bsp_REF.gc index 465b4371d8..2abec4a786 100644 --- a/test/decompiler/reference/jak2/engine/level/bsp_REF.gc +++ b/test/decompiler/reference/jak2/engine/level/bsp_REF.gc @@ -494,6 +494,11 @@ ;; definition for method 16 of type bsp-header ;; WARN: Return type mismatch int vs none. (defmethod collect-regions bsp-header ((obj bsp-header) (arg0 sphere) (arg1 int) (arg2 region-prim-list)) + "Determines the number of [[drawable]]s in the `obj` that overlap the given `area-of-interest` this number is stored in the `region-list`'s item count + @param area-of-interest The area defined by a sphere that we care about overlaps + @param _count The amount of [[drawable]]s in the object to enumerate through + @param! region-list Stores the overlapping regions and a count for how many were found + @returns none" (let ((s3-0 (-> obj region-trees))) (dotimes (s2-0 (-> s3-0 length)) (collect-regions (-> s3-0 s2-0) arg0 arg1 arg2) diff --git a/test/decompiler/reference/jak2/engine/level/region-h_REF.gc b/test/decompiler/reference/jak2/engine/level/region-h_REF.gc index 357de84b7d..c8d25e9da5 100644 --- a/test/decompiler/reference/jak2/engine/level/region-h_REF.gc +++ b/test/decompiler/reference/jak2/engine/level/region-h_REF.gc @@ -12,7 +12,7 @@ :size-assert #x10 :flag-assert #xa00000010 (:methods - (region-method-9 () none 9) + (region-method-9 (_type_ vector) symbol 9) ) ) @@ -66,8 +66,8 @@ :flag-assert #x1400000020 (:methods (debug-draw-region (_type_ int) none 17) - (drawable-region-prim-method-18 () none 18) - (drawable-region-prim-method-19 () none 19) + (track-region (_type_ region-prim-area) symbol 18) + (within-area? (_type_ region-prim-area) symbol 19) ) ) @@ -94,7 +94,7 @@ :size-assert #x20 :flag-assert #x1300000020 (:methods - (drawable-tree-region-prim-method-17 () none 17) + (drawable-tree-region-prim-method-17 (_type_ vector) symbol 17) (debug-print (_type_ vector object) none 18) ) ) diff --git a/test/decompiler/reference/jak2/engine/level/region_REF.gc b/test/decompiler/reference/jak2/engine/level/region_REF.gc new file mode 100644 index 0000000000..bc8b369437 --- /dev/null +++ b/test/decompiler/reference/jak2/engine/level/region_REF.gc @@ -0,0 +1,752 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition for method 8 of type drawable-region-prim +;; WARN: Return type mismatch int vs drawable-region-prim. +(defmethod mem-usage drawable-region-prim ((obj drawable-region-prim) (arg0 memory-usage-block) (arg1 int)) + (set! (-> arg0 length) (max 50 (-> arg0 length))) + (set! (-> arg0 data 49 name) "region") + (+! (-> arg0 data 49 count) 1) + (let ((v1-6 (asize-of obj))) + (+! (-> arg0 data 49 used) v1-6) + (+! (-> arg0 data 49 total) (logand -16 (+ v1-6 15))) + ) + (mem-usage (-> obj region) arg0 (logior arg1 128)) + (the-as drawable-region-prim 0) + ) + +;; definition for method 8 of type drawable-inline-array-region-prim +;; WARN: Return type mismatch int vs drawable-inline-array-region-prim. +(defmethod mem-usage drawable-inline-array-region-prim ((obj drawable-inline-array-region-prim) (arg0 memory-usage-block) (arg1 int)) + (set! (-> arg0 length) (max 1 (-> arg0 length))) + (set! (-> arg0 data 0 name) (symbol->string 'drawable-group)) + (+! (-> arg0 data 0 count) 1) + (let ((v1-7 32)) + (+! (-> arg0 data 0 used) v1-7) + (+! (-> arg0 data 0 total) (logand -16 (+ v1-7 15))) + ) + (dotimes (s3-0 (-> obj length)) + (mem-usage (-> obj data s3-0) arg0 arg1) + ) + (the-as drawable-inline-array-region-prim 0) + ) + +;; definition for method 10 of type drawable-tree-region-prim +;; WARN: Return type mismatch int vs none. +(defmethod draw drawable-tree-region-prim ((obj drawable-tree-region-prim) (arg0 drawable-tree-region-prim) (arg1 display-frame)) + 0 + (none) + ) + +;; definition for method 15 of type drawable-tree-region-prim +(defmethod unpack-vis drawable-tree-region-prim ((obj drawable-tree-region-prim) (arg0 (pointer int8)) (arg1 (pointer int8))) + arg1 + ) + +;; definition for method 16 of type drawable-region-prim +;; WARN: Return type mismatch int vs none. +(defmethod collect-regions drawable-region-prim ((obj drawable-region-prim) (area-of-interest sphere) (_count int) (region-list region-prim-list)) + "Determines the number of [[drawable]]s in the `obj` that overlap the given `area-of-interest` this number is stored in the `region-list`'s item count + @param area-of-interest The area defined by a sphere that we care about overlaps + @param _count The amount of [[drawable]]s in the object to enumerate through + @param! region-list Stores the overlapping regions and a count for how many were found + @returns none" + (dotimes (count _count) + (when (spheres-overlap? area-of-interest (the-as sphere (-> obj bsphere))) + (set! (-> region-list items (-> region-list num-items)) obj) + (+! (-> region-list num-items) 1) + ) + (&+! obj 32) + ) + 0 + (none) + ) + +;; definition for method 16 of type drawable-inline-array-region-prim +;; WARN: Return type mismatch int vs none. +(defmethod collect-regions drawable-inline-array-region-prim ((obj drawable-inline-array-region-prim) (arg0 sphere) (arg1 int) (arg2 region-prim-list)) + "Determines the number of [[drawable]]s in the `obj` that overlap the given `area-of-interest` this number is stored in the `region-list`'s item count + @param area-of-interest The area defined by a sphere that we care about overlaps + @param _count The amount of [[drawable]]s in the object to enumerate through + @param! region-list Stores the overlapping regions and a count for how many were found + @returns none" + (collect-regions (the-as drawable-region-prim (-> obj data)) arg0 (-> obj length) arg2) + 0 + (none) + ) + +;; definition for method 16 of type drawable-tree-region-prim +;; WARN: Return type mismatch int vs none. +(defmethod collect-regions drawable-tree-region-prim ((obj drawable-tree-region-prim) (arg0 sphere) (arg1 int) (arg2 region-prim-list)) + "Determines the number of [[drawable]]s in the `obj` that overlap the given `area-of-interest` this number is stored in the `region-list`'s item count + @param area-of-interest The area defined by a sphere that we care about overlaps + @param _count The amount of [[drawable]]s in the object to enumerate through + @param! region-list Stores the overlapping regions and a count for how many were found + @returns none" + (collect-regions (-> obj data2 0) arg0 (-> obj length) arg2) + 0 + (none) + ) + +;; definition for method 17 of type drawable-region-prim +;; WARN: Return type mismatch int vs none. +(defmethod debug-draw-region drawable-region-prim ((obj drawable-region-prim) (arg0 int)) + (local-vars (sv-32 vector2h) (sv-36 vector)) + (set! sv-32 (new 'stack 'vector2h)) + (set! sv-36 (-> obj bsphere)) + (add-debug-x #t (bucket-id debug-no-zbuf1) sv-36 (new 'static 'rgba :r #xff :g #xff :a #x80)) + (when (nonzero? (-> obj region)) + (let ((s5-0 add-debug-text-3d) + (s4-0 #t) + (s3-0 318) + ) + (format (clear *temp-string*) "region-~D~%" (-> obj region id)) + (s5-0 s4-0 (the-as bucket-id s3-0) *temp-string* sv-36 (font-color #dadada) sv-32) + ) + (set! (-> sv-32 y) (the-as int (+ (-> sv-32 y) 8))) + (let ((s5-1 (-> obj region on-enter))) + (when s5-1 + (let ((s4-1 add-debug-text-3d) + (s3-1 #t) + (s2-1 318) + ) + (format (clear *temp-string*) "(on-enter ~S)" s5-1) + (s4-1 s3-1 (the-as bucket-id s2-1) *temp-string* sv-36 (font-color #dadada) sv-32) + ) + (set! (-> sv-32 y) (the-as int (+ (-> sv-32 y) 8))) + ) + ) + (let ((s5-2 (-> obj region on-inside))) + (when s5-2 + (let ((s4-2 add-debug-text-3d) + (s3-2 #t) + (s2-2 318) + ) + (format (clear *temp-string*) "(on-inside ~S)" s5-2) + (s4-2 s3-2 (the-as bucket-id s2-2) *temp-string* sv-36 (font-color #dadada) sv-32) + ) + (set! (-> sv-32 y) (the-as int (+ (-> sv-32 y) 8))) + ) + ) + (let ((gp-1 (-> obj region on-exit))) + (when gp-1 + (let ((s5-3 add-debug-text-3d) + (s4-3 #t) + (s3-3 318) + ) + (format (clear *temp-string*) "(on-exit ~S)" gp-1) + (s5-3 s4-3 (the-as bucket-id s3-3) *temp-string* sv-36 (font-color #dadada) sv-32) + ) + (set! (-> sv-32 y) (the-as int (+ (-> sv-32 y) 8))) + ) + ) + ) + 0 + (none) + ) + +;; definition for method 18 of type drawable-region-prim +(defmethod track-region drawable-region-prim ((obj drawable-region-prim) (arg0 region-prim-area)) + "TODO" + #f + ) + +;; definition for method 19 of type drawable-region-prim +(defmethod within-area? drawable-region-prim ((obj drawable-region-prim) (arg0 region-prim-area)) + "@returns Whether or not the object overlaps with the provided [[region-prim-area]]'s extent" + #f + ) + +;; definition for method 9 of type region-prim-area +;; WARN: Return type mismatch int vs none. +;; WARN: Function (method 9 region-prim-area) has a return type of none, but the expression builder found a return statement. +(defmethod track-entered-region! region-prim-area ((obj region-prim-area) (region-sphere drawable-region-sphere)) + "Enumerates through the objects `region-enter-list`, if we find the provided `region`, do nothing and exit + otherwise, add the [[drawable-region-sphere]] to `region-enter-prim-list` and increment `region-enter-count` + + @param region-sphere Defines the region in question + @returns nothing" + (let ((regions-entered (-> obj region-enter-count))) + (let ((region (-> region-sphere region))) + (countdown (idx regions-entered) + (if (= (-> obj region-enter-list idx) region) + (return #f) + ) + ) + (set! (-> obj region-enter-list regions-entered) (the-as region-prim-area region)) + ) + (set! (-> obj region-enter-prim-list regions-entered) region-sphere) + (set! (-> obj region-enter-count) (+ regions-entered 1)) + ) + 0 + (none) + ) + +;; definition for method 10 of type region-prim-area +;; WARN: Return type mismatch int vs none. +;; WARN: Function (method 10 region-prim-area) has a return type of none, but the expression builder found a return statement. +(defmethod track-exited-region! region-prim-area ((obj region-prim-area) (arg0 drawable-region-sphere)) + "Enumerates through the objects `region-exit-list`, if we find the provided `region`, do nothing and exit + otherwise, add the [[drawable-region-sphere]] to `region-exit-prim-list` and increment `region-exit-count` + + @param region-sphere Defines the region in question + @returns nothing" + (let ((regions-exited (-> obj region-exit-count))) + (let ((region (-> arg0 region))) + (countdown (idx regions-exited) + (if (= (-> obj region-exit-list idx) region) + (return #f) + ) + ) + (set! (-> obj region-exit-list regions-exited) (the-as region-prim-area region)) + ) + (set! (-> obj region-exit-prim-list regions-exited) arg0) + (set! (-> obj region-exit-count) (+ regions-exited 1)) + ) + 0 + (none) + ) + +;; definition for method 11 of type region-prim-area +;; WARN: Return type mismatch int vs none. +;; WARN: Function (method 11 region-prim-area) has a return type of none, but the expression builder found a return statement. +(defmethod track-inside-region! region-prim-area ((obj region-prim-area) (arg0 drawable-region-sphere)) + "Enumerates through the objects `region-inside-list`, if we find the provided `region`, do nothing and exit + otherwise, add the [[drawable-region-sphere]] to `region-inside-prim-list` and increment `region-inside-count` + + @param region-sphere Defines the region in question + @returns nothing" + (let ((regions-inside (-> obj region-inside-count))) + (let ((region (-> arg0 region))) + (countdown (idx regions-inside) + (if (= (-> obj region-inside-list idx) region) + (return #f) + ) + ) + (set! (-> obj region-inside-list regions-inside) (the-as region-prim-area region)) + ) + (set! (-> obj region-inside-prim-list regions-inside) arg0) + (set! (-> obj region-inside-count) (+ regions-inside 1)) + ) + 0 + (none) + ) + +;; definition for method 12 of type region-prim-area +;; WARN: Return type mismatch int vs none. +;; WARN: Function (method 12 region-prim-area) has a return type of none, but the expression builder found a return statement. +(defmethod track-start-region! region-prim-area ((obj region-prim-area) (arg0 drawable-region-sphere)) + "Enumerates through the objects `region-start-list`, if we find the provided `region`, do nothing and exit + otherwise, add the [[drawable-region-sphere]] to `region-start-prim-list` and increment `region-start-count` + + @param region-sphere Defines the region in question + @returns nothing" + (let ((regions-started (-> obj region-start-count))) + (let ((region (-> arg0 region))) + (countdown (idx regions-started) + (if (= (-> obj region-start-list idx) region) + (return #f) + ) + ) + (set! (-> obj region-start-list regions-started) (the-as region-prim-area region)) + ) + (set! (-> obj region-start-prim-list regions-started) arg0) + (set! (-> obj region-start-count) (+ regions-started 1)) + ) + 0 + (none) + ) + +;; definition for method 17 of type drawable-region-sphere +;; WARN: Return type mismatch int vs none. +(defmethod debug-draw-region drawable-region-sphere ((obj drawable-region-sphere) (arg0 int)) + (let ((t9-0 (method-of-type drawable-region-prim debug-draw-region))) + (t9-0 obj arg0) + ) + (let ((a2-0 (-> obj bsphere))) + (add-debug-sphere #t (bucket-id debug2) a2-0 (-> obj bsphere w) (new 'static 'rgba :r #xff :a #x80)) + ) + 0 + (none) + ) + +;; definition for method 18 of type drawable-region-sphere +(defmethod track-region drawable-region-sphere ((obj drawable-region-sphere) (area region-prim-area)) + "TODO" + (-> obj region) + (let ((area-of-interest (-> obj bsphere))) + (if (< 0.0 (ray-sphere-intersect (-> area pos) (-> area ray) area-of-interest (-> area-of-interest w))) + (track-entered-region! area obj) + ) + (if (< 0.0 (ray-sphere-intersect + (-> area unknown-vector-uiyb1) + (-> area unknown-vector-t3edh) + area-of-interest + (-> area-of-interest w) + ) + ) + (track-exited-region! area obj) + ) + (if (spheres-overlap? (the-as sphere (-> area pos)) (the-as sphere area-of-interest)) + (track-start-region! area obj) + ) + (when (spheres-overlap? (the-as sphere (-> area unknown-vector-uiyb1)) (the-as sphere area-of-interest)) + (track-inside-region! area obj) + #t + ) + ) + ) + +;; definition for method 19 of type drawable-region-sphere +(defmethod within-area? drawable-region-sphere ((obj drawable-region-sphere) (area region-prim-area)) + "@returns Whether or not the object overlaps with the provided [[region-prim-area]]'s extent" + (spheres-overlap? (the-as sphere (-> area pos)) (the-as sphere (-> obj bsphere))) + ) + +;; definition for method 17 of type drawable-region-face +;; WARN: Return type mismatch int vs none. +(defmethod debug-draw-region drawable-region-face ((obj drawable-region-face) (arg0 int)) + (when (zero? arg0) + (let ((t9-0 (method-of-type drawable-region-prim debug-draw-region))) + (t9-0 obj arg0) + ) + ) + (let ((s5-0 (-> obj bsphere))) + (add-debug-vector + #t + (bucket-id debug-no-zbuf1) + s5-0 + (-> obj data normal) + (meters 2) + (new 'static 'rgba :r #xff :g #xff :a #x80) + ) + (add-debug-sphere #t (bucket-id debug2) s5-0 (-> obj bsphere w) (new 'static 'rgba :r #xff :a #x30)) + ) + (add-debug-bound + 324 + (the-as transform (-> obj data points)) + (the-as int (-> obj data num-points)) + (new 'static 'rgba :r #xff :g #xff :a #x80) + (new 'static 'rgba :r #xff :a #x80) + 0 + ) + 0 + (none) + ) + +;; definition for method 18 of type drawable-region-face +(defmethod track-region drawable-region-face ((obj drawable-region-face) (arg0 region-prim-area)) + "TODO" + (local-vars (sv-48 vector) (sv-52 vector) (sv-56 object)) + (-> obj region) + (let* ((s4-0 (-> obj data)) + (v1-1 (-> s4-0 normal)) + (a0-3 (>= 0.0 (- (vector-dot (-> arg0 pos) v1-1) (-> v1-1 w)))) + (s3-0 (>= 0.0 (- (vector-dot (-> arg0 unknown-vector-uiyb1) v1-1) (-> v1-1 w)))) + ) + (when (!= a0-3 s3-0) + (when (nonzero? (-> s4-0 num-points)) + (set! sv-48 (new 'stack-no-clear 'vector)) + (set! sv-52 (new 'stack-no-clear 'vector)) + (set! sv-56 (the-as (inline-array vector) (-> s4-0 points))) + (ray-plane-intersect + sv-48 + sv-52 + (-> arg0 pos) + (-> arg0 ray) + (-> (the-as (inline-array vector) sv-56) 0) + (-> (the-as (inline-array vector) sv-56) 1) + (-> (the-as (inline-array vector) sv-56) 2) + ) + (let ((s4-1 (-> s4-0 num-points)) + (s2-0 0) + (s1-0 (vector-negate! (new 'stack-no-clear 'vector) sv-52)) + ) + (while (< (+ s2-0 2) (the-as int s4-1)) + (if (the-as + (inline-array vector) + (or (point-in-triangle-cross + sv-48 + sv-52 + (-> (the-as (inline-array vector) sv-56) 0) + (-> (the-as (inline-array vector) sv-56) 1) + (-> (the-as (inline-array vector) sv-56) 2) + ) + (the-as (inline-array vector) (point-in-triangle-cross + sv-48 + s1-0 + (-> (the-as (inline-array vector) sv-56) 0) + (-> (the-as (inline-array vector) sv-56) 1) + (-> (the-as (inline-array vector) sv-56) 2) + ) + ) + ) + ) + (goto cfg-17) + ) + (+! s2-0 1) + (set! sv-56 (-> (the-as (inline-array vector) sv-56) 1)) + ) + ) + (set! s3-0 s3-0) + (goto cfg-20) + ) + (label cfg-17) + (if s3-0 + (track-entered-region! arg0 (the-as drawable-region-sphere obj)) + (track-exited-region! arg0 (the-as drawable-region-sphere obj)) + ) + ) + (label cfg-20) + s3-0 + ) + ) + +;; definition for method 17 of type drawable-region-volume +;; WARN: Return type mismatch int vs none. +(defmethod debug-draw-region drawable-region-volume ((obj drawable-region-volume) (arg0 int)) + (let ((t9-0 (method-of-type drawable-region-prim debug-draw-region))) + (t9-0 obj arg0) + ) + (let* ((s5-0 (-> obj faces length)) + (s4-0 0) + (a0-3 (the-as object (+ (+ (* s4-0 32) 16) (the-as int (-> obj faces))))) + ) + (while (< s4-0 s5-0) + (debug-draw-region (the-as drawable-region-face a0-3) 1) + (+! s4-0 1) + (set! a0-3 (+ (+ (* s4-0 32) 16) (the-as int (-> obj faces)))) + ) + ) + 0 + (none) + ) + +;; definition for method 18 of type drawable-region-volume +(defmethod track-region drawable-region-volume ((obj drawable-region-volume) (area region-prim-area)) + "TODO" + (if (within-area? obj area) + (track-start-region! area (the-as drawable-region-sphere obj)) + ) + (let* ((s4-0 (-> obj faces length)) + (s3-0 0) + (a0-4 (the-as object (+ (+ (* s3-0 32) 16) (the-as int (-> obj faces))))) + ) + (while (< s3-0 s4-0) + (if (not (track-region (the-as drawable-region-face a0-4) area)) + (return #f) + ) + (+! s3-0 1) + (set! a0-4 (+ (+ (* s3-0 32) 16) (the-as int (-> obj faces)))) + ) + ) + (track-inside-region! area (the-as drawable-region-sphere obj)) + #t + ) + +;; definition for method 19 of type drawable-region-volume +(defmethod within-area? drawable-region-volume ((obj drawable-region-volume) (arg0 region-prim-area)) + "@returns Whether or not the object overlaps with the provided [[region-prim-area]]'s extent" + (let* ((v1-1 (-> obj faces length)) + (a2-0 0) + (a3-2 (the-as object (+ (+ (* a2-0 32) 16) (the-as int (-> obj faces))))) + ) + (while (< a2-0 v1-1) + (let ((a3-4 (-> (the-as drawable-region-face a3-2) data normal))) + (if (< 0.0 (- (vector-dot (-> arg0 pos) a3-4) (-> a3-4 w))) + (return #f) + ) + ) + (+! a2-0 1) + (set! a3-2 (+ (+ (* a2-0 32) 16) (the-as int (-> obj faces)))) + ) + ) + #t + ) + +;; definition for method 17 of type drawable-tree-region-prim +(defmethod drawable-tree-region-prim-method-17 drawable-tree-region-prim ((obj drawable-tree-region-prim) (arg0 vector)) + (sphere<-vector+r! (the-as sphere (-> (the-as region-prim-area #x70000000) pos)) arg0 0.0) + (let* ((s5-0 (-> obj data2 (+ (-> obj length) -1) length)) + (s4-0 0) + (a0-8 (the-as object (+ (+ (* s4-0 32) 32) (the-as int (-> obj data2 (+ (-> obj length) -1)))))) + ) + (while (< s4-0 s5-0) + (if (within-area? (the-as drawable-region-prim a0-8) (the-as region-prim-area (+ #x70000000 0))) + (return #t) + ) + (+! s4-0 1) + (set! a0-8 (+ (+ (* s4-0 32) 32) (the-as int (-> obj data2 (+ (-> obj length) -1))))) + ) + ) + #f + ) + +;; definition for method 9 of type region +;; INFO: Used lq/sq +;; WARN: Return type mismatch int vs symbol. +(defmethod region-method-9 region ((obj region) (arg0 vector)) + (local-vars (sv-16 int) (sv-32 int)) + (sphere<-vector+r! (the-as sphere (-> (the-as region-prim-area #x70000000) pos)) arg0 0.0) + (dotimes (s5-0 (-> *level* length)) + (let ((s4-0 (-> *level* level s5-0))) + (when (= (-> s4-0 status) 'active) + (when (nonzero? (-> s4-0 bsp region-trees)) + (let* ((s3-0 (-> s4-0 bsp region-trees length)) + (s2-0 0) + (s1-0 (-> s4-0 bsp region-trees s2-0)) + ) + (while (< s2-0 s3-0) + (let ((s0-0 (-> s1-0 data2 (+ (-> s1-0 length) -1) length))) + (set! sv-16 0) + (set! sv-32 (+ (+ (* sv-16 32) 32) (the-as int (-> s1-0 data2 (+ (-> s1-0 length) -1))))) + (while (< sv-16 s0-0) + (if (and (= (-> (the-as drawable-region-prim sv-32) region) obj) + (within-area? + (the-as drawable-region-prim sv-32) + (the-as region-prim-area (-> (the-as region-prim-area #x70000000) region-prim-list)) + ) + ) + (return (the-as symbol sv-32)) + ) + (set! sv-16 (+ sv-16 1)) + (set! sv-32 (+ (+ (* sv-16 32) 32) (the-as int (-> s1-0 data2 (+ (-> s1-0 length) -1))))) + ) + ) + (+! s2-0 1) + (set! s1-0 (-> s4-0 bsp region-trees s2-0)) + ) + ) + ) + ) + ) + ) + (the-as symbol #f) + ) + +;; definition for method 18 of type drawable-tree-region-prim +;; WARN: Return type mismatch int vs none. +(defmethod debug-print drawable-tree-region-prim ((obj drawable-tree-region-prim) (arg0 vector) (arg1 object)) + (sphere<-vector+r! (the-as sphere (+ 1296 #x70000000)) arg0 0.0) + (let* ((s4-0 (-> obj data2 (+ (-> obj length) -1) length)) + (s3-0 0) + (s2-0 (the-as object (+ (+ (* s3-0 32) 32) (the-as int (-> obj data2 (+ (-> obj length) -1)))))) + ) + (while (< s3-0 s4-0) + (if (within-area? (the-as drawable-region-prim s2-0) (the-as region-prim-area (+ #x70000000 0))) + (format + arg1 + " splitbox-~D ~A~%" + (-> (the-as drawable-region-prim s2-0) id) + (the-as drawable-region-prim s2-0) + ) + ) + (+! s3-0 1) + (set! s2-0 (+ (+ (* s3-0 32) 32) (the-as int (-> obj data2 (+ (-> obj length) -1))))) + ) + ) + 0 + (none) + ) + +;; definition for function region-tree-execute +;; WARN: Return type mismatch int vs none. +(defun region-tree-execute ((arg0 symbol) (arg1 vector) (arg2 vector)) + (local-vars (sv-32 vector)) + (with-pp + (set! sv-32 (vector-average! (new 'stack-no-clear 'vector) arg1 arg2)) + (set! (-> sv-32 w) (* 0.5 (vector-vector-distance arg1 arg2))) + (set! (-> (the-as region-prim-area #x70000000) region-prim-list num-items) 0) + (set! (-> (the-as region-prim-area #x70000000) region-enter-count) 0) + (set! (-> (the-as region-prim-area #x70000000) region-exit-count) 0) + (set! (-> (the-as region-prim-area #x70000000) region-inside-count) 0) + (set! (-> (the-as region-prim-area #x70000000) region-start-count) 0) + (sphere<-vector+r! (the-as sphere (+ 1296 #x70000000)) arg1 0.0) + (sphere<-vector+r! (the-as sphere (+ 1312 #x70000000)) arg2 0.0) + (vector-! (the-as vector (+ 1328 #x70000000)) arg2 arg1) + (vector-! (the-as vector (+ 1344 #x70000000)) arg1 arg2) + (dotimes (s5-1 (-> *level* length)) + (let ((v1-17 (-> *level* level s5-1))) + (when (= (-> v1-17 status) 'active) + (let ((s4-1 (-> v1-17 bsp region-trees))) + (when (nonzero? s4-1) + (let* ((s3-0 (-> s4-1 length)) + (s2-0 0) + (a0-14 (-> s4-1 s2-0)) + ) + (while (< s2-0 s3-0) + (if (= (-> a0-14 name) arg0) + (collect-regions a0-14 (the-as sphere sv-32) 0 (the-as region-prim-list (+ #x70000000 0))) + ) + (+! s2-0 1) + (set! a0-14 (-> s4-1 s2-0)) + ) + ) + ) + ) + ) + ) + ) + (countdown (gp-1 (-> (the-as region-prim-area #x70000000) region-prim-list num-items)) + (track-region + (-> (the-as region-prim-area (+ (* gp-1 4) #x70000000)) region-prim-list items 0) + (the-as region-prim-area (-> (the-as region-prim-area #x70000000) region-prim-list)) + ) + ) + (let ((gp-2 (-> (the-as region-prim-area #x70000000) region-enter-count))) + (while (begin (label cfg-22) (nonzero? gp-2)) + (+! gp-2 -1) + (let* ((a2-5 (-> (the-as region-prim-area (+ (* gp-2 4) #x70000000)) region-enter-list 0)) + (s5-2 (-> a2-5 region-prim-list items 0)) + ) + (when s5-2 + (countdown (v1-47 (-> (the-as region-prim-area #x70000000) region-start-count)) + (if (= a2-5 (-> (the-as region-prim-area #x70000000) region-start-list v1-47)) + (goto cfg-22) + ) + ) + (eval! + (new + 'stack + 'script-context + (the-as basic a2-5) + pp + (-> (the-as region-prim-area (+ (* gp-2 4) #x70000000)) region-enter-prim-list 0 bsphere) + ) + (the-as pair s5-2) + ) + ) + ) + ) + ) + (let ((gp-3 (-> (the-as region-prim-area #x70000000) region-exit-count))) + (while (begin (label cfg-31) (nonzero? gp-3)) + (+! gp-3 -1) + (let* ((a2-6 (-> (the-as region-prim-area (+ (* gp-3 4) #x70000000)) region-exit-list 0)) + (s5-3 (-> a2-6 region-prim-list items 2)) + ) + (when s5-3 + (countdown (v1-64 (-> (the-as region-prim-area #x70000000) region-inside-count)) + (if (= a2-6 (-> (the-as region-prim-area (+ (* v1-64 4) #x70000000)) region-inside-list 0)) + (goto cfg-31) + ) + ) + (eval! + (new + 'stack + 'script-context + (the-as basic a2-6) + pp + (-> (the-as region-prim-area (+ (* gp-3 4) #x70000000)) region-exit-prim-list 0 bsphere) + ) + (the-as pair s5-3) + ) + ) + ) + ) + ) + (countdown (gp-4 (-> (the-as region-prim-area #x70000000) region-inside-count)) + (let* ((a2-7 (-> (the-as region-prim-area (+ (* gp-4 4) #x70000000)) region-inside-list 0)) + (s5-4 (-> a2-7 region-prim-list items 1)) + ) + (if s5-4 + (eval! + (new + 'stack + 'script-context + (the-as basic a2-7) + pp + (-> (the-as region-prim-area (+ (* gp-4 4) #x70000000)) region-inside-prim-list 0 bsphere) + ) + (the-as pair s5-4) + ) + ) + ) + ) + 0 + (none) + ) + ) + +;; definition for function region-execute +;; INFO: Used lq/sq +;; WARN: Return type mismatch int vs none. +(defun region-execute () + (set! (-> *level* camera-pos 1 quad) (-> *level* camera-pos 0 quad)) + (set! (-> *level* camera-pos 0 quad) (-> (camera-pos) quad)) + (set! (-> *level* target-pos 1 quad) (-> *level* target-pos 0 quad)) + (set! (-> *level* target-pos 0 quad) (-> (target-pos 0) quad)) + (when (and *execute-regions* (-> *setting-control* user-current region-mode) (not (paused?))) + (region-tree-execute 'camera (-> *level* camera-pos 1) (the-as vector (-> *level* camera-pos))) + (region-tree-execute 'target (-> *level* target-pos 1) (the-as vector (-> *level* target-pos))) + ) + 0 + (none) + ) + +;; definition for function region-prim-lookup-by-id +;; WARN: Return type mismatch int vs drawable-region-prim. +(defun region-prim-lookup-by-id ((arg0 int) (arg1 symbol) (arg2 symbol)) + (let ((v1-0 -1)) + (dotimes (a3-0 (-> *level* length)) + (let ((t0-3 (-> *level* level a3-0))) + (when (= (-> t0-3 status) 'active) + (when (nonzero? (-> t0-3 bsp region-trees)) + (let* ((t1-8 (-> t0-3 bsp region-trees length)) + (t2-1 0) + (t3-2 (-> t0-3 bsp region-trees t2-1)) + ) + (while (< t2-1 t1-8) + (when (or (not arg1) (= (-> t3-2 name) arg1)) + (let* ((t4-10 (-> t3-2 data2 (+ (-> t3-2 length) -1) length)) + (t5-0 0) + (t6-2 (the-as object (+ (+ (* t5-0 32) 32) (the-as int (-> t3-2 data2 (+ (-> t3-2 length) -1)))))) + ) + (while (< t5-0 t4-10) + (when (= (-> (the-as drawable-region-prim t6-2) region id) arg0) + (+! v1-0 1) + (if (= v1-0 arg2) + (return (the-as drawable-region-prim t6-2)) + ) + ) + (+! t5-0 1) + (set! t6-2 (+ (+ (* t5-0 32) 32) (the-as int (-> t3-2 data2 (+ (-> t3-2 length) -1))))) + ) + ) + ) + (+! t2-1 1) + (set! t3-2 (-> t0-3 bsp region-trees t2-1)) + ) + ) + ) + ) + ) + ) + ) + (the-as drawable-region-prim #f) + ) + +;; definition for function region-lookup-by-id +(defun region-lookup-by-id ((arg0 int)) + (dotimes (v1-0 (-> *level* length)) + (let ((a1-3 (-> *level* level v1-0))) + (when (= (-> a1-3 status) 'active) + (when (nonzero? (-> a1-3 bsp region-array)) + (let* ((a2-8 (-> a1-3 bsp region-array length)) + (a3-1 0) + (t0-2 (-> a1-3 bsp region-array data a3-1)) + ) + (while (< a3-1 a2-8) + (if (= (-> t0-2 id) arg0) + (return t0-2) + ) + (+! a3-1 1) + (set! t0-2 (-> a1-3 bsp region-array data a3-1)) + ) + ) + ) + ) + ) + ) + (the-as region #f) + ) diff --git a/test/decompiler/reference/jak2/engine/nav/nav-mesh-h_REF.gc b/test/decompiler/reference/jak2/engine/nav/nav-mesh-h_REF.gc index d81d50f721..b02fd9ead4 100644 --- a/test/decompiler/reference/jak2/engine/nav/nav-mesh-h_REF.gc +++ b/test/decompiler/reference/jak2/engine/nav/nav-mesh-h_REF.gc @@ -396,7 +396,7 @@ (user-list engine :offset-assert 36) (next-nav-mesh surface :offset-assert 40) (prev-nav-mesh surface :offset-assert 44) - (bounds sphere :inline :offset-assert 48) + (bounds vector :inline :offset-assert 48) (origin vector :inline :offset 48) (entity entity :offset-assert 64) (link-array (array nav-mesh-link) :offset-assert 68) diff --git a/test/decompiler/reference/jak2/engine/physics/rigid-body-h_REF.gc b/test/decompiler/reference/jak2/engine/physics/rigid-body-h_REF.gc new file mode 100644 index 0000000000..1f1bbd1248 --- /dev/null +++ b/test/decompiler/reference/jak2/engine/physics/rigid-body-h_REF.gc @@ -0,0 +1,600 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type rigid-body-info +(deftype rigid-body-info (structure) + ((mass float :offset-assert 0) + (inv-mass float :offset-assert 4) + (linear-damping float :offset-assert 8) + (angular-damping float :offset-assert 12) + (bounce-factor float :offset-assert 16) + (friction-factor float :offset-assert 20) + (bounce-mult-factor float :offset-assert 24) + (cm-offset-joint vector :inline :offset-assert 32) + (inv-inertial-tensor matrix :inline :offset-assert 48) + (inertial-tensor matrix :inline :offset-assert 112) + (inertial-tensor-box meters 3 :offset-assert 176) + ) + :method-count-assert 10 + :size-assert #xbc + :flag-assert #xa000000bc + (:methods + (rigid-body-info-method-9 (_type_) none 9) + ) + ) + +;; definition for method 3 of type rigid-body-info +(defmethod inspect rigid-body-info ((obj rigid-body-info)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'rigid-body-info) + (format #t "~1Tmass: ~f~%" (-> obj mass)) + (format #t "~1Tinv-mass: ~f~%" (-> obj inv-mass)) + (format #t "~1Tlinear-damping: ~f~%" (-> obj linear-damping)) + (format #t "~1Tangular-damping: ~f~%" (-> obj angular-damping)) + (format #t "~1Tbounce-factor: ~f~%" (-> obj bounce-factor)) + (format #t "~1Tfriction-factor: ~f~%" (-> obj friction-factor)) + (format #t "~1Tbounce-mult-factor: ~f~%" (-> obj bounce-mult-factor)) + (format #t "~1Tcm-offset-joint: ~`vector`P~%" (-> obj cm-offset-joint)) + (format #t "~1Tinv-inertial-tensor: #~%" (-> obj inv-inertial-tensor)) + (format #t "~1Tinertial-tensor: #~%" (-> obj inertial-tensor)) + (format #t "~1Tinertial-tensor-box[3] @ #x~X~%" (-> obj inertial-tensor-box)) + (label cfg-4) + obj + ) + +;; definition of type rigid-body-object-extra-info +(deftype rigid-body-object-extra-info (structure) + ((max-time-step float :offset-assert 0) + (gravity meters :offset-assert 4) + (idle-distance meters :offset-assert 8) + (attack-force-scale float :offset-assert 12) + ) + :pack-me + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +;; definition for method 3 of type rigid-body-object-extra-info +(defmethod inspect rigid-body-object-extra-info ((obj rigid-body-object-extra-info)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'rigid-body-object-extra-info) + (format #t "~1Tmax-time-step: ~f~%" (-> obj max-time-step)) + (format #t "~1Tgravity: (meters ~m)~%" (-> obj gravity)) + (format #t "~1Tidle-distance: (meters ~m)~%" (-> obj idle-distance)) + (format #t "~1Tattack-force-scale: ~f~%" (-> obj attack-force-scale)) + (label cfg-4) + obj + ) + +;; definition of type rigid-body-object-constants +(deftype rigid-body-object-constants (structure) + ((info rigid-body-info :inline :offset-assert 0) + (mass float :offset 0) + (inv-mass float :offset 4) + (cm-joint-x meters :offset 32) + (cm-joint-y meters :offset 36) + (cm-joint-z meters :offset 40) + (linear-damping float :offset 8) + (angular-damping float :offset 12) + (bounce-factor float :offset 16) + (friction-factor float :offset 20) + (inertial-tensor-x meters :offset 176) + (inertial-tensor-y meters :offset 180) + (inertial-tensor-z meters :offset 184) + (extra rigid-body-object-extra-info :inline :offset-assert 188) + (max-time-step float :offset 188) + (gravity meters :offset 192) + (idle-distance meters :offset 196) + (attack-force-scale float :offset 200) + (name basic :offset-assert 204) + ) + :method-count-assert 9 + :size-assert #xd0 + :flag-assert #x9000000d0 + ) + +;; definition for method 3 of type rigid-body-object-constants +(defmethod inspect rigid-body-object-constants ((obj rigid-body-object-constants)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'rigid-body-object-constants) + (format #t "~1Tinfo: #~%" (&-> obj mass)) + (format #t "~1Tmass: ~f~%" (-> obj mass)) + (format #t "~1Tinv-mass: ~f~%" (-> obj inv-mass)) + (format #t "~1Tcm-joint-x: (meters ~m)~%" (-> obj cm-joint-x)) + (format #t "~1Tcm-joint-y: (meters ~m)~%" (-> obj cm-joint-y)) + (format #t "~1Tcm-joint-z: (meters ~m)~%" (-> obj cm-joint-z)) + (format #t "~1Tlinear-damping: ~f~%" (-> obj linear-damping)) + (format #t "~1Tangular-damping: ~f~%" (-> obj angular-damping)) + (format #t "~1Tbounce-factor: ~f~%" (-> obj bounce-factor)) + (format #t "~1Tfriction-factor: ~f~%" (-> obj friction-factor)) + (format #t "~1Tinertial-tensor-x: (meters ~m)~%" (-> obj inertial-tensor-x)) + (format #t "~1Tinertial-tensor-y: (meters ~m)~%" (-> obj inertial-tensor-y)) + (format #t "~1Tinertial-tensor-z: (meters ~m)~%" (-> obj inertial-tensor-z)) + (format #t "~1Textra: #~%" (&-> obj max-time-step)) + (format #t "~1Tmax-time-step: ~f~%" (-> obj max-time-step)) + (format #t "~1Tgravity: (meters ~m)~%" (-> obj gravity)) + (format #t "~1Tidle-distance: (meters ~m)~%" (-> obj idle-distance)) + (format #t "~1Tattack-force-scale: ~f~%" (-> obj attack-force-scale)) + (format #t "~1Tname: ~A~%" (-> obj name)) + (label cfg-4) + obj + ) + +;; definition of type rigid-body-impact +(deftype rigid-body-impact (structure) + ((point vector :inline :offset-assert 0) + (normal vector :inline :offset-assert 16) + (velocity vector :inline :offset-assert 32) + (impulse float :offset-assert 48) + (pat uint32 :offset-assert 52) + (rbody basic :offset-assert 56) + (prim-id uint32 :offset-assert 60) + ) + :method-count-assert 9 + :size-assert #x40 + :flag-assert #x900000040 + ) + +;; definition for method 3 of type rigid-body-impact +(defmethod inspect rigid-body-impact ((obj rigid-body-impact)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'rigid-body-impact) + (format #t "~1Tpoint: ~`vector`P~%" (-> obj point)) + (format #t "~1Tnormal: ~`vector`P~%" (-> obj normal)) + (format #t "~1Tvelocity: ~`vector`P~%" (-> obj velocity)) + (format #t "~1Timpulse: ~f~%" (-> obj impulse)) + (format #t "~1Tpat: ~D~%" (-> obj pat)) + (format #t "~1Trbody: ~A~%" (-> obj rbody)) + (format #t "~1Tprim-id: ~D~%" (-> obj prim-id)) + (label cfg-4) + obj + ) + +;; definition of type rigid-body +(deftype rigid-body (structure) + ((work basic :offset-assert 0) + (info rigid-body-info :offset-assert 4) + (flags rigid-body-flag :offset-assert 8) + (force-callback basic :offset-assert 12) + (blocked-by basic :offset-assert 16) + (time-remaining float :offset-assert 20) + (step-count int16 :offset-assert 24) + (position vector :inline :offset-assert 32) + (rot vector :inline :offset-assert 48) + (rotation quaternion :inline :offset 48) + (lin-momentum vector :inline :offset-assert 64) + (ang-momentum vector :inline :offset-assert 80) + (force vector :inline :offset-assert 96) + (torque vector :inline :offset-assert 112) + (lin-velocity vector :inline :offset-assert 128) + (ang-velocity vector :inline :offset-assert 144) + (matrix matrix :inline :offset-assert 160) + (inv-i-world matrix :inline :offset-assert 224) + ) + :method-count-assert 32 + :size-assert #x120 + :flag-assert #x2000000120 + (:methods + (rigid-body-method-9 (_type_) none 9) + (rigid-body-method-10 (_type_) none 10) + (rigid-body-method-11 (_type_) none 11) + (rigid-body-method-12 (_type_ float) none 12) + (rigid-body-method-13 (_type_) none 13) + (rigid-body-method-14 (_type_ float) none 14) + (rigid-body-method-15 () none 15) + (clear-force-torque! (_type_) none 16) + (clear-momentum! (_type_) none 17) + (rigid-body-method-18 (_type_ vector vector) none 18) + (rigid-body-method-19 (_type_ vector vector) none 19) + (rigid-body-method-20 (_type_ vector) none 20) + (rigid-body-method-21 (_type_ vector vector float) none 21) + (rigid-body-method-22 (_type_ vector vector) vector 22) + (rigid-body-method-23 (_type_ vector) vector 23) + (rigid-body-method-24 (_type_) none 24) + (rigid-body-method-25 (_type_ rigid-body-info vector quaternion basic) none 25) + (rigid-body-method-26 (_type_ vector quaternion) none 26) + (print-physics (_type_ object) none 27) + (print-force-torque (_type_ object) none 28) + (print-position-rotation (_type_ object) none 29) + (print-momentum (_type_ object) none 30) + (print-velocity (_type_ object) none 31) + ) + ) + +;; definition for method 3 of type rigid-body +(defmethod inspect rigid-body ((obj rigid-body)) + (when (not obj) + (set! obj obj) + (goto cfg-16) + ) + (format #t "[~8x] ~A~%" obj 'rigid-body) + (format #t "~1Twork: ~A~%" (-> obj work)) + (format #t "~1Tinfo: #~%" (-> obj info)) + (format #t "~1Tflags: #x~X : (rigid-body-flag " (-> obj flags)) + (let ((s5-0 (-> obj flags))) + (if (= (logand s5-0 (rigid-body-flag active)) (rigid-body-flag active)) + (format #t "active ") + ) + (if (= (logand s5-0 (rigid-body-flag blocker)) (rigid-body-flag blocker)) + (format #t "blocker ") + ) + (if (= (logand s5-0 (rigid-body-flag enable-physics)) (rigid-body-flag enable-physics)) + (format #t "enable-physics ") + ) + (if (= (logand s5-0 (rigid-body-flag display-marks)) (rigid-body-flag display-marks)) + (format #t "display-marks ") + ) + (if (= (logand s5-0 (rigid-body-flag enable-collision)) (rigid-body-flag enable-collision)) + (format #t "enable-collision ") + ) + (if (= (logand s5-0 (rigid-body-flag debug)) (rigid-body-flag debug)) + (format #t "debug ") + ) + ) + (format #t ")~%") + (format #t "~1Tforce-callback: ~A~%" (-> obj force-callback)) + (format #t "~1Tblocked-by: ~A~%" (-> obj blocked-by)) + (format #t "~1Ttime-remaining: ~f~%" (-> obj time-remaining)) + (format #t "~1Tstep-count: ~D~%" (-> obj step-count)) + (format #t "~1Tposition: ~`vector`P~%" (-> obj position)) + (format #t "~1Trot: ~`vector`P~%" (-> obj rotation)) + (format #t "~1Trotation: #~%" (-> obj rotation)) + (format #t "~1Tlin-momentum: ~`vector`P~%" (-> obj lin-momentum)) + (format #t "~1Tang-momentum: ~`vector`P~%" (-> obj ang-momentum)) + (format #t "~1Tforce: ~`vector`P~%" (-> obj force)) + (format #t "~1Ttorque: ~`vector`P~%" (-> obj torque)) + (format #t "~1Tlin-velocity: ~`vector`P~%" (-> obj lin-velocity)) + (format #t "~1Tang-velocity: ~`vector`P~%" (-> obj ang-velocity)) + (format #t "~1Tmatrix: #~%" (-> obj matrix)) + (format #t "~1Tinv-i-world: #~%" (-> obj inv-i-world)) + (label cfg-16) + obj + ) + +;; definition of type rigid-body-control +(deftype rigid-body-control (basic) + ((process process :offset-assert 4) + (state rigid-body :inline :offset-assert 16) + (work basic :offset 16) + (info rigid-body-info :offset 20) + (flags rigid-body-flag :offset 24) + (force-callback basic :offset 28) + (blocked-by basic :offset 32) + (time-remaining float :offset 36) + (step-count int16 :offset 40) + (position vector :inline :offset 48) + (rot vector :inline :offset 64) + (rotation quaternion :inline :offset 64) + (lin-momentum vector :inline :offset 80) + (ang-momentum vector :inline :offset 96) + (force vector :inline :offset 112) + (torque vector :inline :offset 128) + (lin-velocity vector :inline :offset 144) + (ang-velocity vector :inline :offset 160) + (matrix matrix :inline :offset 176) + (inv-i-world matrix :inline :offset 240) + ) + :method-count-assert 26 + :size-assert #x130 + :flag-assert #x1a00000130 + (:methods + (rigid-body-control-method-9 (_type_) none 9) + (rigid-body-control-method-10 (_type_) none 10) + (rigid-body-control-method-11 (_type_) none 11) + (rigid-body-control-method-12 (_type_ float) none 12) + (rigid-body-control-method-13 (_type_) none 13) + (rigid-body-control-method-14 (_type_ float) none 14) + (clear-force-torque! (_type_) none 15) + (clear-momentum! (_type_) none 16) + (rigid-body-control-method-17 (_type_ vector vector) none 17) + (rigid-body-control-method-18 (_type_ vector vector) none 18) + (rigid-body-control-method-19 (_type_ vector) none 19) + (rigid-body-control-method-20 (_type_ vector vector float) none 20) + (rigid-body-control-method-21 (_type_ vector vector) vector 21) + (rigid-body-control-method-22 (_type_ vector) vector 22) + (rigid-body-control-method-23 (_type_) none 23) + (rigid-body-control-method-24 (_type_ rigid-body-info vector quaternion basic) none 24) + (rigid-body-control-method-25 (_type_ vector quaternion) none 25) + ) + ) + +;; definition for method 3 of type rigid-body-control +(defmethod inspect rigid-body-control ((obj rigid-body-control)) + (when (not obj) + (set! obj obj) + (goto cfg-16) + ) + (format #t "[~8x] ~A~%" obj (-> obj type)) + (format #t "~1Tprocess: ~A~%" (-> obj process)) + (format #t "~1Tstate: #~%" (-> obj state)) + (format #t "~1Twork: ~A~%" (-> obj state work)) + (format #t "~1Tinfo: #~%" (-> obj state info)) + (format #t "~1Tflags: #x~X : (rigid-body-flag " (-> obj state flags)) + (let ((s5-0 (-> obj state flags))) + (if (= (logand s5-0 (rigid-body-flag active)) (rigid-body-flag active)) + (format #t "active ") + ) + (if (= (logand s5-0 (rigid-body-flag blocker)) (rigid-body-flag blocker)) + (format #t "blocker ") + ) + (if (= (logand s5-0 (rigid-body-flag enable-physics)) (rigid-body-flag enable-physics)) + (format #t "enable-physics ") + ) + (if (= (logand s5-0 (rigid-body-flag display-marks)) (rigid-body-flag display-marks)) + (format #t "display-marks ") + ) + (if (= (logand s5-0 (rigid-body-flag enable-collision)) (rigid-body-flag enable-collision)) + (format #t "enable-collision ") + ) + (if (= (logand s5-0 (rigid-body-flag debug)) (rigid-body-flag debug)) + (format #t "debug ") + ) + ) + (format #t ")~%") + (format #t "~1Tforce-callback: ~A~%" (-> obj state force-callback)) + (format #t "~1Tblocked-by: ~A~%" (-> obj state blocked-by)) + (format #t "~1Ttime-remaining: ~f~%" (-> obj state time-remaining)) + (format #t "~1Tstep-count: ~D~%" (-> obj state step-count)) + (format #t "~1Tposition: ~`vector`P~%" (-> obj state position)) + (format #t "~1Trot: ~`vector`P~%" (-> obj state rotation)) + (format #t "~1Trotation: #~%" (-> obj state rotation)) + (format #t "~1Tlin-momentum: ~`vector`P~%" (-> obj state lin-momentum)) + (format #t "~1Tang-momentum: ~`vector`P~%" (-> obj state ang-momentum)) + (format #t "~1Tforce: ~`vector`P~%" (-> obj state force)) + (format #t "~1Ttorque: ~`vector`P~%" (-> obj state torque)) + (format #t "~1Tlin-velocity: ~`vector`P~%" (-> obj state lin-velocity)) + (format #t "~1Tang-velocity: ~`vector`P~%" (-> obj state ang-velocity)) + (format #t "~1Tmatrix: #~%" (-> obj state matrix)) + (format #t "~1Tinv-i-world: #~%" (-> obj state inv-i-world)) + (label cfg-16) + obj + ) + +;; definition for method 9 of type rigid-body-control +(defmethod rigid-body-control-method-9 rigid-body-control ((obj rigid-body-control)) + (rigid-body-method-9 (-> obj state)) + (none) + ) + +;; definition for method 10 of type rigid-body-control +(defmethod rigid-body-control-method-10 rigid-body-control ((obj rigid-body-control)) + (rigid-body-method-10 (-> obj state)) + (none) + ) + +;; definition for method 11 of type rigid-body-control +(defmethod rigid-body-control-method-11 rigid-body-control ((obj rigid-body-control)) + (rigid-body-method-11 (-> obj state)) + (none) + ) + +;; definition for method 12 of type rigid-body-control +(defmethod rigid-body-control-method-12 rigid-body-control ((obj rigid-body-control) (arg0 float)) + (rigid-body-method-12 (-> obj state) arg0) + (none) + ) + +;; definition for method 13 of type rigid-body-control +(defmethod rigid-body-control-method-13 rigid-body-control ((obj rigid-body-control)) + (rigid-body-method-13 (-> obj state)) + (none) + ) + +;; definition for method 14 of type rigid-body-control +(defmethod rigid-body-control-method-14 rigid-body-control ((obj rigid-body-control) (arg0 float)) + (rigid-body-method-14 (-> obj state) arg0) + (none) + ) + +;; definition for method 15 of type rigid-body-control +(defmethod clear-force-torque! rigid-body-control ((obj rigid-body-control)) + (clear-force-torque! (-> obj state)) + (none) + ) + +;; definition for method 16 of type rigid-body-control +(defmethod clear-momentum! rigid-body-control ((obj rigid-body-control)) + (clear-momentum! (-> obj state)) + (none) + ) + +;; definition for method 17 of type rigid-body-control +(defmethod rigid-body-control-method-17 rigid-body-control ((obj rigid-body-control) (arg0 vector) (arg1 vector)) + (rigid-body-method-18 (-> obj state) arg0 arg1) + (none) + ) + +;; definition for method 18 of type rigid-body-control +(defmethod rigid-body-control-method-18 rigid-body-control ((obj rigid-body-control) (arg0 vector) (arg1 vector)) + (rigid-body-method-19 (-> obj state) arg0 arg1) + (none) + ) + +;; definition for method 19 of type rigid-body-control +(defmethod rigid-body-control-method-19 rigid-body-control ((obj rigid-body-control) (arg0 vector)) + (rigid-body-method-20 (-> obj state) arg0) + (none) + ) + +;; definition for method 20 of type rigid-body-control +(defmethod rigid-body-control-method-20 rigid-body-control ((obj rigid-body-control) (arg0 vector) (arg1 vector) (arg2 float)) + (rigid-body-method-21 (-> obj state) arg0 arg1 arg2) + (none) + ) + +;; definition for method 21 of type rigid-body-control +(defmethod rigid-body-control-method-21 rigid-body-control ((obj rigid-body-control) (arg0 vector) (arg1 vector)) + (rigid-body-method-22 (-> obj state) arg0 arg1) + ) + +;; definition for method 22 of type rigid-body-control +(defmethod rigid-body-control-method-22 rigid-body-control ((obj rigid-body-control) (arg0 vector)) + (rigid-body-method-23 (-> obj state) arg0) + ) + +;; definition for method 23 of type rigid-body-control +(defmethod rigid-body-control-method-23 rigid-body-control ((obj rigid-body-control)) + (rigid-body-method-24 (-> obj state)) + (none) + ) + +;; definition for method 24 of type rigid-body-control +(defmethod rigid-body-control-method-24 rigid-body-control ((obj rigid-body-control) (arg0 rigid-body-info) (arg1 vector) (arg2 quaternion) (arg3 basic)) + (rigid-body-method-25 (-> obj state) arg0 arg1 arg2 arg3) + (none) + ) + +;; definition for method 25 of type rigid-body-control +(defmethod rigid-body-control-method-25 rigid-body-control ((obj rigid-body-control) (arg0 vector) (arg1 quaternion)) + (rigid-body-method-26 (-> obj state) arg0 arg1) + (none) + ) + +;; definition of type rigid-body-object +(deftype rigid-body-object (process-focusable) + ((info rigid-body-object-constants :offset-assert 204) + (flags rigid-body-object-flag :offset-assert 208) + (max-time-step float :offset-assert 216) + (incoming-attack-id uint32 :offset-assert 220) + (player-touch-time time-frame :offset-assert 224) + (disturbed-time time-frame :offset-assert 232) + (player-force-position vector :inline :offset-assert 240) + (player-force vector :inline :offset-assert 256) + ) + :heap-base #x90 + :method-count-assert 53 + :size-assert #x110 + :flag-assert #x3500900110 + (:methods + (rigid-body-object-method-27 () none 27) + (rigid-body-object-method-28 () none 28) + (rigid-body-object-method-29 () none 29) + (rigid-body-object-method-30 () none 30) + (rigid-body-object-method-31 () none 31) + (rigid-body-object-method-32 () none 32) + (rigid-body-object-method-33 () none 33) + (rigid-body-object-method-34 () none 34) + (rigid-body-object-method-35 () none 35) + (rigid-body-object-method-36 () none 36) + (rigid-body-object-method-37 () none 37) + (rigid-body-object-method-38 () none 38) + (rigid-body-object-method-39 () none 39) + (rigid-body-object-method-40 () none 40) + (rigid-body-object-method-41 () none 41) + (rigid-body-object-method-42 () none 42) + (rigid-body-object-method-43 () none 43) + (rigid-body-object-method-44 () none 44) + (rigid-body-object-method-45 () none 45) + (rigid-body-object-method-46 () none 46) + (rigid-body-object-method-47 () none 47) + (rigid-body-object-method-48 () none 48) + (rigid-body-object-method-49 () none 49) + (rigid-body-object-method-50 () none 50) + (rigid-body-object-method-51 () none 51) + (rigid-body-object-method-52 () none 52) + ) + ) + +;; definition for method 3 of type rigid-body-object +(defmethod inspect rigid-body-object ((obj rigid-body-object)) + (when (not obj) + (set! obj obj) + (goto cfg-22) + ) + (let ((t9-0 (method-of-type process-focusable inspect))) + (t9-0 obj) + ) + (format #t "~2Tinfo: #~%" (-> obj info)) + (format #t "~2Tflags: #x~X : (rigid-body-object-flag " (-> obj flags)) + (let ((s5-0 (-> obj flags))) + (if (= (logand s5-0 (rigid-body-object-flag dead)) (rigid-body-object-flag dead)) + (format #t "dead ") + ) + (if (= (logand s5-0 (rigid-body-object-flag damaged)) (rigid-body-object-flag damaged)) + (format #t "damaged ") + ) + (if (= (logand s5-0 (rigid-body-object-flag player-contact-force)) (rigid-body-object-flag player-contact-force)) + (format #t "player-contact-force ") + ) + (if (= (logand s5-0 (rigid-body-object-flag disturbed)) (rigid-body-object-flag disturbed)) + (format #t "disturbed ") + ) + (if (= (logand s5-0 (rigid-body-object-flag enable-collision)) (rigid-body-object-flag enable-collision)) + (format #t "enable-collision ") + ) + (if (= (logand s5-0 (rigid-body-object-flag player-edge-grabbing)) (rigid-body-object-flag player-edge-grabbing)) + (format #t "player-edge-grabbing ") + ) + (if (= (logand s5-0 (rigid-body-object-flag player-touching)) (rigid-body-object-flag player-touching)) + (format #t "player-touching ") + ) + (if (= (logand s5-0 (rigid-body-object-flag player-standing-on)) (rigid-body-object-flag player-standing-on)) + (format #t "player-standing-on ") + ) + (if (= (logand s5-0 (rigid-body-object-flag player-impulse-force)) (rigid-body-object-flag player-impulse-force)) + (format #t "player-impulse-force ") + ) + ) + (format #t ")~%") + (format #t "~2Tmax-time-step: ~f~%" (-> obj max-time-step)) + (format #t "~2Tincoming-attack-id: ~D~%" (-> obj incoming-attack-id)) + (format #t "~2Tplayer-touch-time: ~D~%" (-> obj player-touch-time)) + (format #t "~2Tdisturbed-time: ~D~%" (-> obj disturbed-time)) + (format #t "~2Tplayer-force-position: #~%" (-> obj player-force-position)) + (format #t "~2Tplayer-force: #~%" (-> obj player-force)) + (label cfg-22) + obj + ) + +;; definition of type rigid-body-queue +(deftype rigid-body-queue (structure) + ((count int8 :offset-assert 0) + (array uint64 128 :offset 8) + ) + :method-count-assert 17 + :size-assert #x408 + :flag-assert #x1100000408 + (:methods + (rigid-body-queue-method-9 () none 9) + (rigid-body-queue-method-10 () none 10) + (rigid-body-queue-method-11 () none 11) + (rigid-body-queue-method-12 () none 12) + (rigid-body-queue-method-13 () none 13) + (rigid-body-queue-method-14 () none 14) + (rigid-body-queue-method-15 () none 15) + (rigid-body-queue-method-16 () none 16) + ) + ) + +;; definition for method 3 of type rigid-body-queue +(defmethod inspect rigid-body-queue ((obj rigid-body-queue)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'rigid-body-queue) + (format #t "~1Tcount: ~D~%" (-> obj count)) + (format #t "~1Tarray[128] @ #x~X~%" (-> obj array)) + (label cfg-4) + obj + ) + +;; failed to figure out what this is: +0 + + + + diff --git a/test/decompiler/reference/jak2/engine/scene/scene-h_REF.gc b/test/decompiler/reference/jak2/engine/scene/scene-h_REF.gc index 401f60c10a..11fd905036 100644 --- a/test/decompiler/reference/jak2/engine/scene/scene-h_REF.gc +++ b/test/decompiler/reference/jak2/engine/scene/scene-h_REF.gc @@ -3,12 +3,12 @@ ;; definition of type scene-actor (deftype scene-actor (basic) - ((name basic :offset-assert 4) + ((name string :offset-assert 4) (level basic :offset-assert 8) - (art-group basic :offset-assert 12) - (prefix basic :offset-assert 16) - (draw-frames basic :offset-assert 20) - (scissor-frames basic :offset-assert 24) + (art-group string :offset-assert 12) + (prefix string :offset-assert 16) + (draw-frames pair :offset-assert 20) + (scissor-frames pair :offset-assert 24) (camera int16 :offset-assert 28) (light-index uint8 :offset-assert 30) (shadow-mask uint8 :offset-assert 31) @@ -19,13 +19,13 @@ (shadow-volume-joint basic :offset-assert 48) (draw-seg uint64 :offset-assert 56) (no-draw-seg uint64 :offset-assert 64) - (process uint64 :offset-assert 72) + (process handle :offset-assert 72) ) :method-count-assert 10 :size-assert #x50 :flag-assert #xa00000050 (:methods - (scene-actor-method-9 () none 9) + (scene-actor-method-9 (_type_ scene-player) (pointer process) 9) ) ) @@ -59,37 +59,37 @@ ;; definition of type scene (deftype scene (art-group) - ((mask-to-clear uint32 :offset-assert 32) - (entity basic :offset-assert 36) - (art-group basic :offset-assert 40) - (anim basic :offset-assert 44) - (parts int32 :offset-assert 48) - (command-list basic :offset-assert 52) - (cut-list basic :offset-assert 56) - (wait-max-time time-frame :offset-assert 64) - (wait-air-time time-frame :offset-assert 72) - (wait-ground-time time-frame :offset-assert 80) - (draw-target basic :offset-assert 88) - (abort basic :offset-assert 92) - (actor basic :offset-assert 96) - (load-point basic :offset-assert 100) - (end-point basic :offset-assert 104) - (borrow basic :offset-assert 108) - (sfx-volume float :offset-assert 112) - (ambient-volume float :offset-assert 116) - (music-volume float :offset-assert 120) - (blackout-end basic :offset-assert 124) - (peaceful basic :offset-assert 128) - (music-delay float :offset-assert 132) - (save basic :offset-assert 136) - (scene-task uint16 :offset-assert 140) + ((mask-to-clear uint32 :offset-assert 32) + (entity string :offset-assert 36) + (art-group string :offset-assert 40) + (anim string :offset-assert 44) + (parts int32 :offset-assert 48) + (command-list basic :offset-assert 52) + (cut-list pair :offset-assert 56) + (wait-max-time time-frame :offset-assert 64) + (wait-air-time time-frame :offset-assert 72) + (wait-ground-time time-frame :offset-assert 80) + (draw-target level-load-info :offset-assert 88) + (abort basic :offset-assert 92) + (actor (array scene-actor) :offset-assert 96) + (load-point string :offset-assert 100) + (end-point string :offset-assert 104) + (borrow basic :offset-assert 108) + (sfx-volume float :offset-assert 112) + (ambient-volume float :offset-assert 116) + (music-volume float :offset-assert 120) + (blackout-end basic :offset-assert 124) + (peaceful basic :offset-assert 128) + (music-delay float :offset-assert 132) + (save basic :offset-assert 136) + (scene-task uint16 :offset-assert 140) ) :method-count-assert 17 :size-assert #x8e :flag-assert #x110000008e (:methods - (scene-method-15 () none 15) - (scene-method-16 () none 16) + (scene-method-15 (_type_ spool-anim) none 15) + (scene-method-16 (_type_) _type_ 16) ) ) @@ -135,40 +135,40 @@ ;; definition of type scene-player (deftype scene-player (process-drawable) - ((scene-list basic :offset-assert 200) - (scene basic :offset-assert 204) - (scene-index int32 :offset-assert 208) - (anim basic :offset-assert 212) - (next-anim basic :offset-assert 216) - (camera uint64 :offset-assert 224) - (main-entity basic :offset-assert 232) - (wait basic :offset-assert 236) - (old-target-pos transformq :inline :offset-assert 240) - (pre-cut-frame basic :offset-assert 288) - (preload-continue basic :offset-assert 292) - (dma-max uint32 :offset-assert 296) - (gui-id uint32 :offset-assert 300) - (aborted? basic :offset-assert 304) - (scene-start-time time-frame :offset-assert 312) - (targ-speed float :offset-assert 320) - (cur-speed float :offset-assert 324) - (speed-change-time time-frame :offset-assert 328) - (speed-press-time time-frame :offset-assert 336) - (speed-change-speed float :offset-assert 344) - (subtitle-change-time time-frame :offset-assert 352) - (user-sound uint32 4 :offset-assert 360) + ((scene-list (pointer symbol) :offset-assert 200) + (scene scene :offset-assert 204) + (scene-index int32 :offset-assert 208) + (anim spool-anim :offset-assert 212) + (next-anim spool-anim :offset-assert 216) + (camera handle :offset-assert 224) + (main-entity entity-actor :offset-assert 232) + (wait basic :offset-assert 236) + (old-target-pos transformq :inline :offset-assert 240) + (pre-cut-frame basic :offset-assert 288) + (preload-continue string :offset-assert 292) + (dma-max uint32 :offset-assert 296) + (gui-id uint32 :offset-assert 300) + (aborted? symbol :offset-assert 304) + (scene-start-time time-frame :offset-assert 312) + (targ-speed float :offset-assert 320) + (cur-speed float :offset-assert 324) + (speed-change-time time-frame :offset-assert 328) + (speed-press-time time-frame :offset-assert 336) + (speed-change-speed float :offset-assert 344) + (subtitle-change-time time-frame :offset-assert 352) + (user-sound uint32 4 :offset-assert 360) ) :heap-base #x100 :method-count-assert 26 :size-assert #x178 :flag-assert #x1a01000178 (:methods - (scene-player-method-20 () none 20) - (scene-player-method-21 () none 21) - (scene-player-method-22 () none 22) - (scene-player-method-23 () none 23) - (scene-player-method-24 () none 24) - (scene-player-method-25 () none 25) + (wait (symbol) _type_ :state 20) + (release () _type_ :state 21) + (play-anim () _type_ :state 22) + (scene-player-method-23 (_type_ string symbol) none 23) + (scene-player-method-24 (_type_ basic symbol) scene 24) + (scene-player-method-25 (_type_ float) none 25) ) ) diff --git a/test/decompiler/reference/jak2/levels/city/common/ctywide-obs-h_REF.gc b/test/decompiler/reference/jak2/levels/city/common/ctywide-obs-h_REF.gc new file mode 100644 index 0000000000..16c4983ce7 --- /dev/null +++ b/test/decompiler/reference/jak2/levels/city/common/ctywide-obs-h_REF.gc @@ -0,0 +1,88 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type city-race-ring-info +(deftype city-race-ring-info (structure) + ((pos vector :inline :offset-assert 0) + (angle float :offset 12) + (boost float :offset-assert 16) + (dist float :offset-assert 20) + ) + :method-count-assert 10 + :size-assert #x18 + :flag-assert #xa00000018 + (:methods + (city-race-ring-info-method-9 () none 9) + ) + ) + +;; definition for method 3 of type city-race-ring-info +(defmethod inspect city-race-ring-info ((obj city-race-ring-info)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'city-race-ring-info) + (format #t "~1Tpos: #~%" (-> obj pos)) + (format #t "~1Tangle: ~f~%" (-> obj pos w)) + (format #t "~1Tboost: ~f~%" (-> obj boost)) + (format #t "~1Tdist: ~f~%" (-> obj dist)) + (label cfg-4) + obj + ) + +;; definition of type city-ambush-spot +(deftype city-ambush-spot (structure) + ((pos vector :inline :offset-assert 0) + (obj-type uint8 :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x11 + :flag-assert #x900000011 + ) + +;; definition for method 3 of type city-ambush-spot +(defmethod inspect city-ambush-spot ((obj city-ambush-spot)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'city-ambush-spot) + (format #t "~1Tpos: #~%" (-> obj pos)) + (format #t "~1Tobj-type: ~D~%" (-> obj obj-type)) + (label cfg-4) + obj + ) + +;; definition of type city-ambush-info +(deftype city-ambush-info (structure) + ((count int16 :offset-assert 0) + (array uint32 :offset-assert 4) + ) + :method-count-assert 10 + :size-assert #x8 + :flag-assert #xa00000008 + (:methods + (city-ambush-info-method-9 () none 9) + ) + ) + +;; definition for method 3 of type city-ambush-info +(defmethod inspect city-ambush-info ((obj city-ambush-info)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'city-ambush-info) + (format #t "~1Tcount: ~D~%" (-> obj count)) + (format #t "~1Tarray: #x~X~%" (-> obj array)) + (label cfg-4) + obj + ) + +;; failed to figure out what this is: +0 + + + + diff --git a/test/decompiler/reference/jak2/levels/city/common/nav-graph-h_REF.gc b/test/decompiler/reference/jak2/levels/city/common/nav-graph-h_REF.gc index cb71fdabcd..4ff2fadb12 100644 --- a/test/decompiler/reference/jak2/levels/city/common/nav-graph-h_REF.gc +++ b/test/decompiler/reference/jak2/levels/city/common/nav-graph-h_REF.gc @@ -3,7 +3,7 @@ ;; definition of type nav-branch (deftype nav-branch (structure) - ((node nav-node 2 :offset-assert 0) + ((node int32 2 :offset-assert 0) (src-node nav-node :offset 0) (dest-node nav-node :offset 4) (temp-dest-node-id int32 :offset 4) @@ -20,18 +20,18 @@ :size-assert #x10 :flag-assert #x1500000010 (:methods - (nav-branch-method-9 () none 9) - (nav-branch-method-10 () none 10) + (nav-branch-method-9 (_type_) none 9) + (nav-branch-method-10 (_type_ object int) none 10) (nav-branch-method-11 (_type_) float 11) (nav-branch-method-12 (_type_) float 12) (nav-branch-method-13 (_type_) float 13) (user-limit-reached? (_type_) symbol 14) (nav-branch-method-15 (_type_) symbol 15) - (nav-branch-method-16 () none 16) - (nav-branch-method-17 () none 17) - (nav-branch-method-18 () none 18) - (nav-branch-method-19 () none 19) - (nav-branch-method-20 () none 20) + (nav-branch-method-16 (_type_ float) none 16) + (nav-branch-method-17 (_type_ float) none 17) + (nav-branch-method-18 (_type_ float) none 18) + (nav-branch-method-19 (_type_ nav-node) none 19) + (nav-branch-method-20 (_type_ nav-node) none 20) ) ) @@ -60,34 +60,34 @@ ;; definition of type nav-node (deftype nav-node (structure) - ((data uint32 8 :offset-assert 0) - (position vector :inline :offset 0) - (pos-x float :offset 0) - (pos-y float :offset 4) - (pos-z float :offset 8) - (angle uint16 :offset 12) - (id uint16 :offset 14) - (radius uint8 :offset 16) - (branch-count int8 :offset 17) - (flags nav-node-flag-byte :offset 18) - (pad0 int8 1 :offset 19) - (branch-array uint32 :offset 20) - (nav-mesh-id uint32 :offset 24) - (level level :offset 28) + ((data uint32 8 :offset-assert 0) + (position vector :inline :offset 0) + (pos-x float :offset 0) + (pos-y float :offset 4) + (pos-z float :offset 8) + (angle uint16 :offset 12) + (id uint16 :offset 14) + (radius uint8 :offset 16) + (branch-count int8 :offset 17) + (flags nav-node-flag-byte :offset 18) + (pad0 int8 1 :offset 19) + (branch-array (inline-array nav-branch) :offset 20) + (nav-mesh-id uint32 :offset 24) + (level symbol :offset 28) ) :method-count-assert 22 :size-assert #x20 :flag-assert #x1600000020 (:methods - (nav-node-method-9 () none 9) - (nav-node-method-10 () none 10) - (nav-node-method-11 () none 11) - (nav-node-method-12 () none 12) - (nav-node-method-13 () none 13) - (nav-node-method-14 () none 14) - (nav-node-method-15 () none 15) - (nav-node-method-16 () none 16) - (nav-node-method-17 () none 17) + (nav-node-method-9 (_type_) none 9) + (nav-node-method-10 (_type_ symbol string) none 10) + (nav-node-method-11 (_type_ int) none 11) + (nav-node-method-12 (_type_ vector nav-node) none 12) + (nav-node-method-13 (_type_ vector) none 13) + (nav-node-method-14 (_type_ nav-node) none 14) + (nav-node-method-15 (_type_ uint) none 15) + (nav-node-method-16 (_type_ float) none 16) + (nav-node-method-17 (_type_ float) none 17) (get-position (_type_ vector) vector 18) (calc-sine-and-cosine! (_type_ vector) vector 19) (get-angle (_type_) float 20) @@ -242,59 +242,60 @@ ;; definition of type nav-graph (deftype nav-graph (basic) - ((node-count int16 :offset-assert 4) - (branch-count int16 :offset-assert 6) - (node-array (inline-array nav-node) :offset-assert 8) - (branch-array uint32 :offset-assert 12) - (link-count int16 :offset-assert 16) - (pad2 uint16 :offset-assert 18) - (link-array uint32 :offset-assert 20) - (first-node int16 :offset-assert 24) - (pad0 uint16 :offset-assert 26) - (patched basic :offset-assert 28) - (id uint32 :offset-assert 32) - (pad1 uint32 6 :offset-assert 36) + ((node-count int16 :offset-assert 4) + (branch-count int16 :offset-assert 6) + (node-array (inline-array nav-node) :offset-assert 8) + (branch-array (inline-array nav-branch) :offset-assert 12) + (link-count int16 :offset-assert 16) + (pad2 uint16 :offset-assert 18) + (link-array (inline-array nav-graph-link) :offset-assert 20) + (first-node int16 :offset-assert 24) + (pad0 uint16 :offset-assert 26) + (patched symbol :offset-assert 28) + (id uint32 :offset-assert 32) + (pad1 uint32 6 :offset-assert 36) ) :method-count-assert 45 :size-assert #x3c :flag-assert #x2d0000003c (:methods - (nav-graph-method-9 () none 9) - (nav-graph-method-10 () none 10) - (nav-graph-method-11 () none 11) - (nav-graph-method-12 () none 12) - (nav-graph-method-13 () none 13) - (nav-graph-method-14 () none 14) - (nav-graph-method-15 () none 15) - (nav-graph-method-16 () none 16) - (nav-graph-method-17 () none 17) - (nav-graph-method-18 () none 18) - (nav-graph-method-19 () none 19) - (nav-graph-method-20 () none 20) - (nav-graph-method-21 () none 21) - (nav-graph-method-22 () none 22) - (nav-graph-method-23 () none 23) - (nav-graph-method-24 () none 24) - (nav-graph-method-25 () none 25) - (nav-graph-method-26 () none 26) - (nav-graph-method-27 () none 27) - (nav-graph-method-28 () none 28) - (nav-graph-method-29 () none 29) - (nav-graph-method-30 () none 30) - (nav-graph-method-31 () none 31) - (nav-graph-method-32 () none 32) - (nav-graph-method-33 () none 33) - (nav-graph-method-34 () none 34) - (nav-graph-method-35 () none 35) - (nav-graph-method-36 () none 36) - (nav-graph-method-37 () none 37) + (new (symbol type int int int uint) _type_ 0) + (nav-graph-method-9 (_type_) none 9) + (nav-graph-method-10 (_type_ vector int) none 10) + (nav-graph-method-11 (_type_) none 11) + (nav-graph-method-12 (_type_) none 12) + (nav-graph-method-13 (_type_ int int) none 13) + (nav-graph-method-14 (_type_ int int) none 14) + (nav-graph-method-15 (_type_) none 15) + (nav-graph-method-16 (_type_ int) nav-node 16) + (nav-graph-method-17 (_type_ nav-node) none 17) + (nav-graph-method-18 (_type_ nav-node int) none 18) + (nav-graph-method-19 (_type_ int int int int int int) none 19) + (nav-graph-method-20 (_type_ int int) none 20) + (nav-graph-method-21 (_type_) none 21) + (nav-graph-method-22 (_type_ int int) none 22) + (nav-graph-method-23 (_type_ int int) none 23) + (nav-graph-method-24 (_type_ int int) none 24) + (nav-graph-method-25 (_type_ symbol symbol) none 25) + (nav-graph-method-26 (_type_ symbol symbol) none 26) + (nav-graph-method-27 (_type_) none 27) + (nav-graph-method-28 (_type_) none 28) + (nav-graph-method-29 (_type_ symbol) none 29) + (nav-graph-method-30 (_type_ uint) none 30) + (nav-graph-method-31 (_type_ float) none 31) + (nav-graph-method-32 (_type_ float) none 32) + (nav-graph-method-33 (_type_ float) none 33) + (nav-graph-method-34 (_type_ float) none 34) + (nav-graph-method-35 (_type_ int) none 35) + (nav-graph-method-36 (_type_ int) none 36) + (nav-graph-method-37 (_type_ vector) none 37) (nav-graph-method-38 () none 38) - (nav-graph-method-39 () none 39) - (nav-graph-method-40 () none 40) + (nav-graph-method-39 (_type_) none 39) + (nav-graph-method-40 (_type_ int) int 40) (node-at-idx (_type_ int) nav-node 41) - (nav-graph-method-42 () none 42) - (nav-graph-method-43 () none 43) - (nav-graph-method-44 () none 44) + (nav-graph-method-42 (_type_) none 42) + (nav-graph-method-43 (_type_ nav-graph-link string) none 43) + (from-editor () none 44) ) ) diff --git a/test/decompiler/reference/jak2/levels/city/common/vehicle-h_REF.gc b/test/decompiler/reference/jak2/levels/city/common/vehicle-h_REF.gc new file mode 100644 index 0000000000..32b0261615 --- /dev/null +++ b/test/decompiler/reference/jak2/levels/city/common/vehicle-h_REF.gc @@ -0,0 +1,952 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type vehicle-lookup-info +(deftype vehicle-lookup-info (structure) + ((turn-radius meters :offset-assert 0) + (throttle-turning float :offset-assert 4) + (throttle-straight float :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ) + +;; definition for method 3 of type vehicle-lookup-info +(defmethod inspect vehicle-lookup-info ((obj vehicle-lookup-info)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'vehicle-lookup-info) + (format #t "~1Tturn-radius: (meters ~m)~%" (-> obj turn-radius)) + (format #t "~1Tthrottle-turning: ~f~%" (-> obj throttle-turning)) + (format #t "~1Tthrottle-straight: ~f~%" (-> obj throttle-straight)) + (label cfg-4) + obj + ) + +;; definition of type vehicle-control-point +(deftype vehicle-control-point (structure) + ((local-pos vector :inline :offset-assert 0) + (normal vector :inline :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) + +;; definition for method 3 of type vehicle-control-point +(defmethod inspect vehicle-control-point ((obj vehicle-control-point)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'vehicle-control-point) + (format #t "~1Tlocal-pos: #~%" (-> obj local-pos)) + (format #t "~1Tnormal: #~%" (-> obj normal)) + (label cfg-4) + obj + ) + +;; definition of type vehicle-section-info +(deftype vehicle-section-info (structure) + ((damage-seg-array uint64 3 :offset-assert 0) + (damage-seg-count int8 :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x19 + :flag-assert #x900000019 + ) + +;; definition for method 3 of type vehicle-section-info +(defmethod inspect vehicle-section-info ((obj vehicle-section-info)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'vehicle-section-info) + (format #t "~1Tdamage-seg-array[3] @ #x~X~%" (-> obj damage-seg-array)) + (format #t "~1Tdamage-seg-count: ~D~%" (-> obj damage-seg-count)) + (label cfg-4) + obj + ) + +;; definition of type vehicle-seat-info +(deftype vehicle-seat-info (structure) + ((data uint8 16 :offset-assert 0) + (position vector :inline :offset 0) + (pos-x float :offset 0) + (pos-y float :offset 4) + (pos-z float :offset 8) + (angle int16 :offset 12) + (flags uint8 :offset 14) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +;; definition for method 3 of type vehicle-seat-info +(defmethod inspect vehicle-seat-info ((obj vehicle-seat-info)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'vehicle-seat-info) + (format #t "~1Tdata[16] @ #x~X~%" (-> obj position)) + (format #t "~1Tposition: #~%" (-> obj position)) + (format #t "~1Tpos-x: ~f~%" (-> obj position x)) + (format #t "~1Tpos-y: ~f~%" (-> obj position y)) + (format #t "~1Tpos-z: ~f~%" (-> obj position z)) + (format #t "~1Tangle: ~D~%" (-> obj angle)) + (format #t "~1Tflags: ~D~%" (-> obj flags)) + (label cfg-4) + obj + ) + +;; definition of type vehicle-explosion-info +(deftype vehicle-explosion-info (joint-exploder-static-params) + ((skel basic :offset-assert 16) + (skel-name basic :offset-assert 20) + (anim int32 :offset-assert 24) + ) + :method-count-assert 9 + :size-assert #x1c + :flag-assert #x90000001c + ) + +;; definition for method 3 of type vehicle-explosion-info +(defmethod inspect vehicle-explosion-info ((obj vehicle-explosion-info)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj (-> obj type)) + (format #t "~1Tjoints: ~A~%" (-> obj joints)) + (format #t "~1Tcollide-spec: ~D~%" (-> obj collide-spec)) + (format #t "~1Tart-level: ~A~%" (-> obj art-level)) + (format #t "~1Tskel: ~A~%" (-> obj skel)) + (format #t "~1Tskel-name: ~A~%" (-> obj skel-name)) + (format #t "~1Tanim: ~D~%" (-> obj anim)) + (label cfg-4) + obj + ) + +;; definition of type vehicle-grab-rail-info +(deftype vehicle-grab-rail-info (structure) + ((local-pos vector 2 :inline :offset-assert 0) + (normal vector :inline :offset-assert 32) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) + +;; definition for method 3 of type vehicle-grab-rail-info +(defmethod inspect vehicle-grab-rail-info ((obj vehicle-grab-rail-info)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'vehicle-grab-rail-info) + (format #t "~1Tlocal-pos[2] @ #x~X~%" (-> obj local-pos)) + (format #t "~1Tnormal: #~%" (-> obj normal)) + (label cfg-4) + obj + ) + +;; definition of type rigid-body-vehicle-constants +(deftype rigid-body-vehicle-constants (rigid-body-object-constants) + ((flags uint32 :offset-assert 208) + (object-type uint8 :offset-assert 212) + (guard-type uint8 :offset-assert 213) + (max-engine-thrust meters :offset-assert 216) + (inv-max-engine-thrust float :offset-assert 220) + (engine-response-rate float :offset-assert 224) + (engine-intake-factor float :offset-assert 228) + (brake-factor float :offset-assert 232) + (turbo-boost-factor float :offset-assert 236) + (max-xz-speed meters :offset-assert 240) + (ground-probe-distance meters :offset-assert 244) + (ground-probe-offset meters :offset-assert 248) + (cos-ground-effect-angle float :offset-assert 252) + (spring-lift-factor float :offset-assert 256) + (air-steering-factor float :offset-assert 260) + (air-drag-factor float :offset-assert 264) + (steering-fin-angle float :offset-assert 268) + (steering-thruster-factor float :offset-assert 272) + (steering-thruster-max-gain float :offset-assert 276) + (steering-thruster-half-gain-speed meters :offset-assert 280) + (tire-steering-angle float :offset-assert 284) + (tire-friction-factor float :offset-assert 288) + (tire-static-friction float :offset-assert 292) + (tire-static-friction-speed meters :offset-assert 296) + (tire-dynamic-friction float :offset-assert 300) + (tire-dynamic-friction-speed meters :offset-assert 304) + (tire-inv-max-friction-speed float :offset-assert 308) + (airfoil-factor float :offset-assert 312) + (drag-force-factor float :offset-assert 316) + (speed-scrubbing-drag float :offset-assert 320) + (speed-limiting-drag float :offset-assert 324) + (pitch-control-factor float :offset-assert 328) + (roll-control-factor float :offset-assert 332) + (roll-angle float :offset-assert 336) + (jump-thrust-factor float :offset-assert 340) + (buoyancy-factor float :offset-assert 344) + (player-weight float :offset-assert 348) + (player-shift-x meters :offset-assert 352) + (player-shift-z meters :offset-assert 356) + (target-speed-offset meters :offset-assert 360) + (turning-accel meters :offset-assert 364) + (toughness-factor float :offset-assert 368) + (damage-factor float :offset-assert 372) + (camera-string-min-height meters :offset-assert 376) + (camera-string-max-height meters :offset-assert 380) + (camera-string-min-length meters :offset-assert 384) + (camera-string-max-length meters :offset-assert 388) + (camera-min-fov float :offset-assert 392) + (camera-max-fov float :offset-assert 396) + (camera-head-offset float :offset-assert 400) + (camera-foot-offset float :offset-assert 404) + (camera-normal-max-angle-offset float :offset-assert 408) + (camera-air-max-angle-offset float :offset-assert 412) + (camera-max-lookaround-speed float :offset-assert 416) + (seat-count int8 :offset-assert 420) + (section-count int8 :offset-assert 421) + (rider-stance uint8 :offset-assert 422) + (grab-rail-count int8 :offset-assert 423) + (grab-rail-array uint32 :offset-assert 424) + (seat-array vehicle-seat-info 4 :inline :offset-assert 432) + (rider-hand-offset vector 2 :inline :offset-assert 496) + (section-array vehicle-section-info 4 :inline :offset-assert 528) + (section-bike-front vehicle-section-info :inline :offset 528) + (section-bike-rear vehicle-section-info :inline :offset 560) + (section-car-front-left vehicle-section-info :inline :offset 528) + (section-car-rear-left vehicle-section-info :inline :offset 560) + (section-car-front-right vehicle-section-info :inline :offset 592) + (section-car-rear-right vehicle-section-info :inline :offset 624) + (explosion basic :offset-assert 656) + (engine-pitch-scale float :offset-assert 660) + (engine-pitch-offset float :offset-assert 664) + (engine-pitch-mod-amp float :offset-assert 668) + (engine-sound-select int8 :offset-assert 672) + (engine-sound uint128 :offset-assert 688) + (thrust-sound uint128 :offset-assert 704) + (scrape-sound uint128 :offset-assert 720) + (glance-sound uint128 :offset-assert 736) + (impact-sound uint128 :offset-assert 752) + (extra-sound uint128 :offset-assert 768) + (explosion-part int32 :offset-assert 784) + (headlight-count int8 :offset-assert 788) + (taillight-count int8 :offset-assert 789) + (thruster-flame-width meters :offset-assert 792) + (thruster-flame-length meters :offset-assert 796) + (thruster-local-pos vector 2 :inline :offset-assert 800) + (exhaust-local-pos vector 2 :inline :offset-assert 832) + (exhaust-local-dir vector 2 :inline :offset-assert 864) + (smoke-local-pos vector 2 :inline :offset-assert 896) + (smoke-local-vel vector 2 :inline :offset-assert 928) + (headlight-local-pos vector 3 :inline :offset-assert 960) + (taillight-local-pos vector 2 :inline :offset-assert 1008) + (lift-thruster-count int8 :offset-assert 1040) + (roll-thruster-count int8 :offset-assert 1041) + (steering-thruster-count int8 :offset-assert 1042) + (stabilizer-count int8 :offset-assert 1043) + (inv-lift-thruster-count float :offset-assert 1044) + (pad int8 8 :offset-assert 1048) + (lift-thruster-array vector4w-2 2 :inline :offset-assert 1056) + (roll-thruster-array vector4w-2 2 :inline :offset-assert 1120) + (steering-thruster-array vector4w-2 2 :inline :offset-assert 1184) + (stabilizer-array vector4w-2 6 :inline :offset-assert 1248) + (engine-thrust-local-pos vector :inline :offset-assert 1440) + (brake-local-pos vector :inline :offset-assert 1456) + (particle-system-2d basic :offset-assert 1472) + (particle-system-3d basic :offset-assert 1476) + (part-thruster basic :offset-assert 1480) + (part-thruster-scale-x sp-field-init-spec :offset-assert 1484) + (part-thruster-scale-y sp-field-init-spec :offset-assert 1488) + (part-quat quaternion :offset-assert 1492) + (part-vel vector :offset-assert 1496) + (color-option-count int8 :offset-assert 1500) + (color-option-select int8 :offset-assert 1501) + (color-option-array uint32 :offset-assert 1504) + (sample-dir vector :inline :offset-assert 1520) + (sample-time time-frame :offset-assert 1536) + (sample-index int32 :offset-assert 1544) + ) + :method-count-assert 11 + :size-assert #x60c + :flag-assert #xb0000060c + (:methods + (rigid-body-vehicle-constants-method-9 () none 9) + (rigid-body-vehicle-constants-method-10 () none 10) + ) + ) + +;; definition for method 3 of type rigid-body-vehicle-constants +;; INFO: Used lq/sq +(defmethod inspect rigid-body-vehicle-constants ((obj rigid-body-vehicle-constants)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'rigid-body-vehicle-constants) + (format #t "~1Tinfo: #~%" (&-> obj mass)) + (format #t "~1Tmass: ~f~%" (-> obj mass)) + (format #t "~1Tinv-mass: ~f~%" (-> obj inv-mass)) + (format #t "~1Tcm-joint-x: (meters ~m)~%" (-> obj cm-joint-x)) + (format #t "~1Tcm-joint-y: (meters ~m)~%" (-> obj cm-joint-y)) + (format #t "~1Tcm-joint-z: (meters ~m)~%" (-> obj cm-joint-z)) + (format #t "~1Tlinear-damping: ~f~%" (-> obj linear-damping)) + (format #t "~1Tangular-damping: ~f~%" (-> obj angular-damping)) + (format #t "~1Tbounce-factor: ~f~%" (-> obj bounce-factor)) + (format #t "~1Tfriction-factor: ~f~%" (-> obj friction-factor)) + (format #t "~1Tinertial-tensor-x: (meters ~m)~%" (-> obj inertial-tensor-x)) + (format #t "~1Tinertial-tensor-y: (meters ~m)~%" (-> obj inertial-tensor-y)) + (format #t "~1Tinertial-tensor-z: (meters ~m)~%" (-> obj inertial-tensor-z)) + (format #t "~1Textra: #~%" (&-> obj max-time-step)) + (format #t "~1Tmax-time-step: ~f~%" (-> obj max-time-step)) + (format #t "~1Tgravity: (meters ~m)~%" (-> obj gravity)) + (format #t "~1Tidle-distance: (meters ~m)~%" (-> obj idle-distance)) + (format #t "~1Tattack-force-scale: ~f~%" (-> obj attack-force-scale)) + (format #t "~1Tname: ~A~%" (-> obj name)) + (format #t "~1Tflags: ~D~%" (-> obj flags)) + (format #t "~1Tobject-type: ~D~%" (-> obj object-type)) + (format #t "~1Tguard-type: ~D~%" (-> obj guard-type)) + (format #t "~1Tmax-engine-thrust: (meters ~m)~%" (-> obj max-engine-thrust)) + (format #t "~1Tinv-max-engine-thrust: ~f~%" (-> obj inv-max-engine-thrust)) + (format #t "~1Tengine-response-rate: ~f~%" (-> obj engine-response-rate)) + (format #t "~1Tengine-intake-factor: ~f~%" (-> obj engine-intake-factor)) + (format #t "~1Tbrake-factor: ~f~%" (-> obj brake-factor)) + (format #t "~1Tturbo-boost-factor: ~f~%" (-> obj turbo-boost-factor)) + (format #t "~1Tmax-xz-speed: (meters ~m)~%" (-> obj max-xz-speed)) + (format #t "~1Tground-probe-distance: (meters ~m)~%" (-> obj ground-probe-distance)) + (format #t "~1Tground-probe-offset: (meters ~m)~%" (-> obj ground-probe-offset)) + (format #t "~1Tcos-ground-effect-angle: ~f~%" (-> obj cos-ground-effect-angle)) + (format #t "~1Tspring-lift-factor: ~f~%" (-> obj spring-lift-factor)) + (format #t "~1Tair-steering-factor: ~f~%" (-> obj air-steering-factor)) + (format #t "~1Tair-drag-factor: ~f~%" (-> obj air-drag-factor)) + (format #t "~1Tsteering-fin-angle: ~f~%" (-> obj steering-fin-angle)) + (format #t "~1Tsteering-thruster-factor: ~f~%" (-> obj steering-thruster-factor)) + (format #t "~1Tsteering-thruster-max-gain: ~f~%" (-> obj steering-thruster-max-gain)) + (format #t "~1Tsteering-thruster-half-gain-speed: (meters ~m)~%" (-> obj steering-thruster-half-gain-speed)) + (format #t "~1Ttire-steering-angle: ~f~%" (-> obj tire-steering-angle)) + (format #t "~1Ttire-friction-factor: ~f~%" (-> obj tire-friction-factor)) + (format #t "~1Ttire-static-friction: ~f~%" (-> obj tire-static-friction)) + (format #t "~1Ttire-static-friction-speed: (meters ~m)~%" (-> obj tire-static-friction-speed)) + (format #t "~1Ttire-dynamic-friction: ~f~%" (-> obj tire-dynamic-friction)) + (format #t "~1Ttire-dynamic-friction-speed: (meters ~m)~%" (-> obj tire-dynamic-friction-speed)) + (format #t "~1Ttire-inv-max-friction-speed: ~f~%" (-> obj tire-inv-max-friction-speed)) + (format #t "~1Tairfoil-factor: ~f~%" (-> obj airfoil-factor)) + (format #t "~1Tdrag-force-factor: ~f~%" (-> obj drag-force-factor)) + (format #t "~1Tspeed-scrubbing-drag: ~f~%" (-> obj speed-scrubbing-drag)) + (format #t "~1Tspeed-limiting-drag: ~f~%" (-> obj speed-limiting-drag)) + (format #t "~1Tpitch-control-factor: ~f~%" (-> obj pitch-control-factor)) + (format #t "~1Troll-control-factor: ~f~%" (-> obj roll-control-factor)) + (format #t "~1Troll-angle: ~f~%" (-> obj roll-angle)) + (format #t "~1Tjump-thrust-factor: ~f~%" (-> obj jump-thrust-factor)) + (format #t "~1Tbuoyancy-factor: ~f~%" (-> obj buoyancy-factor)) + (format #t "~1Tplayer-weight: ~f~%" (-> obj player-weight)) + (format #t "~1Tplayer-shift-x: (meters ~m)~%" (-> obj player-shift-x)) + (format #t "~1Tplayer-shift-z: (meters ~m)~%" (-> obj player-shift-z)) + (format #t "~1Ttarget-speed-offset: (meters ~m)~%" (-> obj target-speed-offset)) + (format #t "~1Tturning-accel: (meters ~m)~%" (-> obj turning-accel)) + (format #t "~1Ttoughness-factor: ~f~%" (-> obj toughness-factor)) + (format #t "~1Tdamage-factor: ~f~%" (-> obj damage-factor)) + (format #t "~1Tcamera-string-min-height: (meters ~m)~%" (-> obj camera-string-min-height)) + (format #t "~1Tcamera-string-max-height: (meters ~m)~%" (-> obj camera-string-max-height)) + (format #t "~1Tcamera-string-min-length: (meters ~m)~%" (-> obj camera-string-min-length)) + (format #t "~1Tcamera-string-max-length: (meters ~m)~%" (-> obj camera-string-max-length)) + (format #t "~1Tcamera-min-fov: ~f~%" (-> obj camera-min-fov)) + (format #t "~1Tcamera-max-fov: ~f~%" (-> obj camera-max-fov)) + (format #t "~1Tcamera-head-offset: ~f~%" (-> obj camera-head-offset)) + (format #t "~1Tcamera-foot-offset: ~f~%" (-> obj camera-foot-offset)) + (format #t "~1Tcamera-normal-max-angle-offset: ~f~%" (-> obj camera-normal-max-angle-offset)) + (format #t "~1Tcamera-air-max-angle-offset: ~f~%" (-> obj camera-air-max-angle-offset)) + (format #t "~1Tcamera-max-lookaround-speed: ~f~%" (-> obj camera-max-lookaround-speed)) + (format #t "~1Tseat-count: ~D~%" (-> obj seat-count)) + (format #t "~1Tsection-count: ~D~%" (-> obj section-count)) + (format #t "~1Trider-stance: ~D~%" (-> obj rider-stance)) + (format #t "~1Tgrab-rail-count: ~D~%" (-> obj grab-rail-count)) + (format #t "~1Tgrab-rail-array: #x~X~%" (-> obj grab-rail-array)) + (format #t "~1Tseat-array[4] @ #x~X~%" (-> obj seat-array)) + (format #t "~1Trider-hand-offset[2] @ #x~X~%" (-> obj rider-hand-offset)) + (format #t "~1Tsection-array[4] @ #x~X~%" (-> obj section-bike-front)) + (format #t "~1Tsection-bike-front: #~%" (-> obj section-bike-front)) + (format #t "~1Tsection-bike-rear: #~%" (-> obj section-bike-rear)) + (format #t "~1Tsection-car-front-left: #~%" (-> obj section-bike-front)) + (format #t "~1Tsection-car-rear-left: #~%" (-> obj section-bike-rear)) + (format #t "~1Tsection-car-front-right: #~%" (-> obj section-car-front-right)) + (format #t "~1Tsection-car-rear-right: #~%" (-> obj section-car-rear-right)) + (format #t "~1Texplosion: ~A~%" (-> obj explosion)) + (format #t "~1Tengine-pitch-scale: ~f~%" (-> obj engine-pitch-scale)) + (format #t "~1Tengine-pitch-offset: ~f~%" (-> obj engine-pitch-offset)) + (format #t "~1Tengine-pitch-mod-amp: ~f~%" (-> obj engine-pitch-mod-amp)) + (format #t "~1Tengine-sound-select: ~D~%" (-> obj engine-sound-select)) + (format #t "~1Tengine-sound: ~D~%" (-> obj engine-sound)) + (format #t "~1Tthrust-sound: ~D~%" (-> obj thrust-sound)) + (format #t "~1Tscrape-sound: ~D~%" (-> obj scrape-sound)) + (format #t "~1Tglance-sound: ~D~%" (-> obj glance-sound)) + (format #t "~1Timpact-sound: ~D~%" (-> obj impact-sound)) + (format #t "~1Textra-sound: ~D~%" (-> obj extra-sound)) + (format #t "~1Texplosion-part: ~D~%" (-> obj explosion-part)) + (format #t "~1Theadlight-count: ~D~%" (-> obj headlight-count)) + (format #t "~1Ttaillight-count: ~D~%" (-> obj taillight-count)) + (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 "~1Theadlight-local-pos[3] @ #x~X~%" (-> obj headlight-local-pos)) + (format #t "~1Ttaillight-local-pos[2] @ #x~X~%" (-> obj taillight-local-pos)) + (format #t "~1Tlift-thruster-count: ~D~%" (-> obj lift-thruster-count)) + (format #t "~1Troll-thruster-count: ~D~%" (-> obj roll-thruster-count)) + (format #t "~1Tsteering-thruster-count: ~D~%" (-> obj steering-thruster-count)) + (format #t "~1Tstabilizer-count: ~D~%" (-> obj stabilizer-count)) + (format #t "~1Tinv-lift-thruster-count: ~f~%" (-> obj inv-lift-thruster-count)) + (format #t "~1Tlift-thruster-array[2] @ #x~X~%" (-> obj lift-thruster-array)) + (format #t "~1Troll-thruster-array[2] @ #x~X~%" (-> obj roll-thruster-array)) + (format #t "~1Tsteering-thruster-array[2] @ #x~X~%" (-> obj steering-thruster-array)) + (format #t "~1Tstabilizer-array[6] @ #x~X~%" (-> obj stabilizer-array)) + (format #t "~1Tengine-thrust-local-pos: #~%" (-> obj engine-thrust-local-pos)) + (format #t "~1Tbrake-local-pos: #~%" (-> obj brake-local-pos)) + (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)) + (format #t "~1Tcolor-option-count: ~D~%" (-> obj color-option-count)) + (format #t "~1Tcolor-option-select: ~D~%" (-> obj color-option-select)) + (format #t "~1Tcolor-option-array: #x~X~%" (-> obj color-option-array)) + (format #t "~1Tsample-dir: #~%" (-> obj sample-dir)) + (format #t "~1Tsample-time: ~D~%" (-> obj sample-time)) + (format #t "~1Tsample-index: ~D~%" (-> obj sample-index)) + (label cfg-4) + obj + ) + +;; definition of type vehicle-controller +(deftype vehicle-controller (structure) + ((flags vehicle-controller-flag :offset-assert 0) + (traffic symbol :offset-assert 4) + (branch nav-branch :offset-assert 8) + (target-speed-offset meters :offset-assert 12) + (target-speed meters :offset-assert 16) + (choose-branch-callback symbol :offset-assert 20) + (turn-accel meters :offset-assert 24) + (max-turn-speed meters :offset-assert 28) + (path-prev-point vector :inline :offset-assert 32) + (turn-enter-point vector :inline :offset-assert 48) + (turn-exit-point vector :inline :offset-assert 64) + (path-dest-point vector :inline :offset 64) + (turn-enter-dir vector :inline :offset-assert 80) + (turn-exit-dir vector :inline :offset-assert 96) + (dest-circle vector :inline :offset-assert 112) + (target-point vector :inline :offset-assert 128) + ) + :method-count-assert 22 + :size-assert #x90 + :flag-assert #x1600000090 + (:methods + (vehicle-controller-method-9 () none 9) + (vehicle-controller-method-10 () none 10) + (vehicle-controller-method-11 () none 11) + (vehicle-controller-method-12 () none 12) + (vehicle-controller-method-13 () none 13) + (vehicle-controller-method-14 () none 14) + (vehicle-controller-method-15 () none 15) + (vehicle-controller-method-16 () none 16) + (vehicle-controller-method-17 () none 17) + (vehicle-controller-method-18 () none 18) + (vehicle-controller-method-19 () none 19) + (vehicle-controller-method-20 () none 20) + (vehicle-controller-method-21 () none 21) + ) + ) + +;; definition for method 3 of type vehicle-controller +(defmethod inspect vehicle-controller ((obj vehicle-controller)) + (when (not obj) + (set! obj obj) + (goto cfg-28) + ) + (format #t "[~8x] ~A~%" obj 'vehicle-controller) + (format #t "~1Tflags: #x~X : (vehicle-controller-flag " (-> obj flags)) + (let ((s5-0 (-> obj flags))) + (if (= (logand s5-0 (vehicle-controller-flag do-turn)) (vehicle-controller-flag do-turn)) + (format #t "do-turn ") + ) + (if (= (logand s5-0 (vehicle-controller-flag off-path)) (vehicle-controller-flag off-path)) + (format #t "off-path ") + ) + (if (= (logand s5-0 (vehicle-controller-flag attached)) (vehicle-controller-flag attached)) + (format #t "attached ") + ) + (if (= (logand s5-0 (vehicle-controller-flag no-slowing-for-turns)) + (vehicle-controller-flag no-slowing-for-turns) + ) + (format #t "no-slowing-for-turns ") + ) + (if (= (logand s5-0 (vehicle-controller-flag recovery-mode)) (vehicle-controller-flag recovery-mode)) + (format #t "recovery-mode ") + ) + (if (= (logand s5-0 (vehicle-controller-flag blocking-dest-node)) (vehicle-controller-flag blocking-dest-node)) + (format #t "blocking-dest-node ") + ) + (if (= (logand s5-0 (vehicle-controller-flag direct-mode)) (vehicle-controller-flag direct-mode)) + (format #t "direct-mode ") + ) + (if (= (logand s5-0 (vehicle-controller-flag ignore-others)) (vehicle-controller-flag ignore-others)) + (format #t "ignore-others ") + ) + (if (= (logand s5-0 (vehicle-controller-flag debug)) (vehicle-controller-flag debug)) + (format #t "debug ") + ) + (if (= (logand s5-0 (vehicle-controller-flag on-straightaway)) (vehicle-controller-flag on-straightaway)) + (format #t "on-straightaway ") + ) + (if (= (logand s5-0 (vehicle-controller-flag draw-marks)) (vehicle-controller-flag draw-marks)) + (format #t "draw-marks ") + ) + (if (= (logand s5-0 (vehicle-controller-flag left-turn)) (vehicle-controller-flag left-turn)) + (format #t "left-turn ") + ) + ) + (format #t ")~%") + (format #t "~1Ttraffic: ~A~%" (-> obj traffic)) + (format #t "~1Tbranch: #~%" (-> obj branch)) + (format #t "~1Ttarget-speed-offset: (meters ~m)~%" (-> obj target-speed-offset)) + (format #t "~1Ttarget-speed: (meters ~m)~%" (-> obj target-speed)) + (format #t "~1Tchoose-branch-callback: ~A~%" (-> obj choose-branch-callback)) + (format #t "~1Tturn-accel: (meters ~m)~%" (-> obj turn-accel)) + (format #t "~1Tmax-turn-speed: (meters ~m)~%" (-> obj max-turn-speed)) + (format #t "~1Tpath-prev-point: ~`vector`P~%" (-> obj path-prev-point)) + (format #t "~1Tturn-enter-point: ~`vector`P~%" (-> obj turn-enter-point)) + (format #t "~1Tturn-exit-point: ~`vector`P~%" (-> obj turn-exit-point)) + (format #t "~1Tpath-dest-point: #~%" (-> obj turn-exit-point)) + (format #t "~1Tturn-enter-dir: ~`vector`P~%" (-> obj turn-enter-dir)) + (format #t "~1Tturn-exit-dir: ~`vector`P~%" (-> obj turn-exit-dir)) + (format #t "~1Tdest-circle: ~`vector`P~%" (-> obj dest-circle)) + (format #t "~1Ttarget-point: ~`vector`P~%" (-> obj target-point)) + (label cfg-28) + obj + ) + +;; definition of type vehicle-section +(deftype vehicle-section (structure) + ((damage float :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) + +;; definition for method 3 of type vehicle-section +(defmethod inspect vehicle-section ((obj vehicle-section)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'vehicle-section) + (format #t "~1Tdamage: ~f~%" (-> obj damage)) + (label cfg-4) + obj + ) + +;; definition of type vehicle +(deftype vehicle (rigid-body-object) + ((pad uint32 4 :offset-assert 272) + (controls vehicle-controls :inline :offset-assert 288) + (prev-controls vehicle-controls :inline :offset-assert 304) + (up-dir vector :inline :offset-assert 320) + (jump-time float :offset-assert 336) + (jump-thrust float :offset-assert 340) + (engine-thrust float :offset-assert 344) + (engine-power-factor float :offset-assert 348) + (force-scale float :offset-assert 352) + (target-distance2 meters :offset-assert 356) + (pad0 uint32 :offset-assert 360) + (target-acceleration vector :inline :offset-assert 368) + (impact-pos vector :inline :offset-assert 384) + (lin-acceleration vector :inline :offset-assert 400) + (hit-points float :offset-assert 416) + (damage-factor float :offset-assert 420) + (crash-level int8 :offset-assert 424) + (force-level int8 :offset-assert 425) + (traffic-hash-id int8 :offset-assert 426) + (traffic-priority-id int8 :offset-assert 427) + (power-fluctuation-factor float :offset-assert 428) + (power-level float :offset-assert 432) + (flight-level-index int8 :offset-assert 436) + (flight-level-index-prev int8 :offset-assert 437) + (overlap-player-counter uint8 :offset-assert 438) + (physics-counter uint8 :offset-assert 439) + (flight-level float :offset-assert 440) + (brake-factor float :offset-assert 444) + (cam-speed-interp float :offset-assert 448) + (camera-dist2 float :offset-assert 452) + (player-dist2 float :offset-assert 456) + (bound-radius float :offset-assert 460) + (rider-array int64 4 :offset-assert 464) + (lift-thrust float 2 :offset-assert 496) + (roll-thrust float 2 :offset-assert 504) + (sent-attack-time time-frame :offset-assert 512) + (air-time time-frame :offset-assert 520) + (turn-time time-frame :offset-assert 528) + (crash-time time-frame :offset-assert 536) + (transition-time time-frame :offset-assert 544) + (transition-end-time time-frame :offset-assert 552) + (turbo-boost-time time-frame :offset-assert 560) + (crash-duration uint16 :offset-assert 568) + (turbo-boost-duration uint16 :offset-assert 570) + (turbo-boost-factor float :offset-assert 572) + (crash-impulse float :offset-assert 576) + (water-height float :offset-assert 580) + (lights-factor float :offset-assert 584) + (outgoing-attack-id uint32 :offset-assert 588) + (scrape-sound-id sound-id :offset-assert 592) + (engine-sound-id sound-id :offset-assert 596) + (thrust-sound-id sound-id :offset-assert 600) + (roll-sound-id sound-id :offset-assert 604) + (damage-pop-sound-id sound-id :offset-assert 608) + (damage-zap-sound-id sound-id :offset-assert 612) + (extra-sound-id sound-id :offset-assert 616) + (fog-fade float :offset-assert 620) + (scrape-sound-envelope float :offset-assert 624) + (engine-sound-envelope float :offset-assert 628) + (engine-sound-factor float :offset-assert 632) + (sputter-sound-envelope float :offset-assert 636) + (rudder-sound-envelope float :offset-assert 640) + (fins-sound-envelope float :offset-assert 644) + (exhaust-part-accum basic 2 :offset-assert 648) + (smoke-part-accum basic 2 :offset-assert 656) + (controller vehicle-controller :inline :offset-assert 672) + (section-array vehicle-section 4 :inline :offset-assert 816) + ) + :heap-base #x2f0 + :method-count-assert 144 + :size-assert #x370 + :flag-assert #x9002f00370 + (:methods + (vehicle-method-53 () none 53) + (vehicle-method-54 () none 54) + (vehicle-method-55 () none 55) + (vehicle-method-56 () none 56) + (vehicle-method-57 () none 57) + (vehicle-method-58 () none 58) + (vehicle-method-59 () none 59) + (vehicle-method-60 () none 60) + (vehicle-method-61 () none 61) + (vehicle-method-62 () none 62) + (vehicle-method-63 () none 63) + (vehicle-method-64 () none 64) + (vehicle-method-65 () none 65) + (vehicle-method-66 () none 66) + (vehicle-method-67 () none 67) + (vehicle-method-68 () none 68) + (vehicle-method-69 () none 69) + (vehicle-method-70 () none 70) + (vehicle-method-71 () none 71) + (vehicle-method-72 () none 72) + (vehicle-method-73 () none 73) + (vehicle-method-74 () none 74) + (vehicle-method-75 () none 75) + (vehicle-method-76 () none 76) + (vehicle-method-77 () none 77) + (vehicle-method-78 () none 78) + (vehicle-method-79 () none 79) + (vehicle-method-80 () none 80) + (vehicle-method-81 () none 81) + (vehicle-method-82 () none 82) + (vehicle-method-83 () none 83) + (vehicle-method-84 () none 84) + (vehicle-method-85 () none 85) + (vehicle-method-86 () none 86) + (vehicle-method-87 () none 87) + (vehicle-method-88 () none 88) + (vehicle-method-89 () none 89) + (vehicle-method-90 () none 90) + (vehicle-method-91 () none 91) + (vehicle-method-92 () none 92) + (vehicle-method-93 () none 93) + (vehicle-method-94 () none 94) + (vehicle-method-95 () none 95) + (vehicle-method-96 () none 96) + (vehicle-method-97 () none 97) + (vehicle-method-98 () none 98) + (vehicle-method-99 () none 99) + (vehicle-method-100 () none 100) + (vehicle-method-101 () none 101) + (vehicle-method-102 () none 102) + (vehicle-method-103 () none 103) + (vehicle-method-104 () none 104) + (vehicle-method-105 () none 105) + (vehicle-method-106 () none 106) + (vehicle-method-107 () none 107) + (vehicle-method-108 () none 108) + (vehicle-method-109 () none 109) + (vehicle-method-110 () none 110) + (vehicle-method-111 () none 111) + (vehicle-method-112 () none 112) + (vehicle-method-113 () none 113) + (vehicle-method-114 () none 114) + (vehicle-method-115 () none 115) + (vehicle-method-116 () none 116) + (vehicle-method-117 () none 117) + (vehicle-method-118 () none 118) + (vehicle-method-119 () none 119) + (vehicle-method-120 () none 120) + (vehicle-method-121 () none 121) + (vehicle-method-122 () none 122) + (vehicle-method-123 () none 123) + (vehicle-method-124 () none 124) + (vehicle-method-125 () none 125) + (vehicle-method-126 () none 126) + (vehicle-method-127 () none 127) + (vehicle-method-128 () none 128) + (vehicle-method-129 () none 129) + (vehicle-method-130 () none 130) + (vehicle-method-131 () none 131) + (vehicle-method-132 () none 132) + (vehicle-method-133 () none 133) + (vehicle-method-134 () none 134) + (vehicle-method-135 () none 135) + (vehicle-method-136 () none 136) + (vehicle-method-137 () none 137) + (vehicle-method-138 () none 138) + (vehicle-method-139 () none 139) + (vehicle-method-140 () none 140) + (vehicle-method-141 () none 141) + (vehicle-method-142 () none 142) + (vehicle-method-143 () none 143) + ) + ) + +;; definition for method 3 of type vehicle +(defmethod inspect vehicle ((obj vehicle)) + (when (not obj) + (set! obj obj) + (goto cfg-92) + ) + (let ((t9-0 (method-of-type rigid-body-object inspect))) + (t9-0 obj) + ) + (format #t "~2Tflags: #x~X : (vehicle-flag " (-> obj flags)) + (let ((s5-0 (-> obj flags))) + (if (= (logand (rigid-body-object-flag lights-update) s5-0) (shl 64 32)) + (format #t "lights-update ") + ) + (if (= (logand (rigid-body-object-flag camera-bike-mode) s5-0) (rigid-body-object-flag camera-bike-mode)) + (format #t "camera-bike-mode ") + ) + (if (= (logand (rigid-body-object-flag jump-sound) s5-0) (rigid-body-object-flag jump-sound)) + (format #t "jump-sound ") + ) + (if (= (logand s5-0 (rigid-body-object-flag dead)) (rigid-body-object-flag dead)) + (format #t "dead ") + ) + (if (= (logand s5-0 (rigid-body-object-flag waiting-for-player)) (rigid-body-object-flag waiting-for-player)) + (format #t "waiting-for-player ") + ) + (if (= (logand (rigid-body-object-flag no-hijack) s5-0) (shl 256 32)) + (format #t "no-hijack ") + ) + (if (= (logand (rigid-body-object-flag hard-turn) s5-0) (rigid-body-object-flag hard-turn)) + (format #t "hard-turn ") + ) + (if (= (logand (rigid-body-object-flag turbo-boost) s5-0) (rigid-body-object-flag turbo-boost)) + (format #t "turbo-boost ") + ) + (if (= (logand (rigid-body-object-flag in-pursuit) s5-0) (shl #x8000 16)) + (format #t "in-pursuit ") + ) + (if (= (logand (rigid-body-object-flag traffic-managed) s5-0) (rigid-body-object-flag traffic-managed)) + (format #t "traffic-managed ") + ) + (if (= (logand s5-0 (rigid-body-object-flag damaged)) (rigid-body-object-flag damaged)) + (format #t "damaged ") + ) + (if (= (logand s5-0 (rigid-body-object-flag player-contact-force)) (rigid-body-object-flag player-contact-force)) + (format #t "player-contact-force ") + ) + (if (= (logand (rigid-body-object-flag player-grabbed) s5-0) (shl 512 32)) + (format #t "player-grabbed ") + ) + (if (= (logand (rigid-body-object-flag flight-level-transition-ending) s5-0) + (rigid-body-object-flag flight-level-transition-ending) + ) + (format #t "flight-level-transition-ending ") + ) + (if (= (logand (rigid-body-object-flag alert) s5-0) (rigid-body-object-flag alert)) + (format #t "alert ") + ) + (if (= (logand s5-0 (rigid-body-object-flag disturbed)) (rigid-body-object-flag disturbed)) + (format #t "disturbed ") + ) + (if (= (logand s5-0 (rigid-body-object-flag enable-collision)) (rigid-body-object-flag enable-collision)) + (format #t "enable-collision ") + ) + (if (= (logand s5-0 (rigid-body-object-flag player-edge-grabbing)) (rigid-body-object-flag player-edge-grabbing)) + (format #t "player-edge-grabbing ") + ) + (if (= (logand (rigid-body-object-flag lights-on) s5-0) (shl 32 32)) + (format #t "lights-on ") + ) + (if (= (logand (rigid-body-object-flag reverse-gear) s5-0) (rigid-body-object-flag reverse-gear)) + (format #t "reverse-gear ") + ) + (if (= (logand (rigid-body-object-flag ai-driving) s5-0) (rigid-body-object-flag ai-driving)) + (format #t "ai-driving ") + ) + (if (= (logand s5-0 (rigid-body-object-flag persistent)) (rigid-body-object-flag persistent)) + (format #t "persistent ") + ) + (if (= (logand (rigid-body-object-flag jump) s5-0) (rigid-body-object-flag jump)) + (format #t "jump ") + ) + (if (= (logand s5-0 (rigid-body-object-flag riding)) (rigid-body-object-flag riding)) + (format #t "riding ") + ) + (if (= (logand s5-0 (rigid-body-object-flag on-flight-level)) (rigid-body-object-flag on-flight-level)) + (format #t "on-flight-level ") + ) + (if (= (logand (rigid-body-object-flag nav-spheres) s5-0) (shl 1024 32)) + (format #t "nav-spheres ") + ) + (if (= (logand s5-0 (rigid-body-object-flag player-driving)) (rigid-body-object-flag player-driving)) + (format #t "player-driving ") + ) + (if (= (logand (rigid-body-object-flag hack-edit-graph-mode) s5-0) (shl 8 32)) + (format #t "hack-edit-graph-mode ") + ) + (if (= (logand (rigid-body-object-flag camera-rapid-track-mode) s5-0) + (rigid-body-object-flag camera-rapid-track-mode) + ) + (format #t "camera-rapid-tracking-mode ") + ) + (if (= (logand (rigid-body-object-flag ignition) s5-0) (rigid-body-object-flag ignition)) + (format #t "ignition ") + ) + (if (= (logand (rigid-body-object-flag slide) s5-0) (rigid-body-object-flag slide)) + (format #t "slide ") + ) + (if (= (logand s5-0 (rigid-body-object-flag on-ground)) (rigid-body-object-flag on-ground)) + (format #t "on-ground ") + ) + (if (= (logand (rigid-body-object-flag flight-level-transition) s5-0) + (rigid-body-object-flag flight-level-transition) + ) + (format #t "flight-level-transition ") + ) + (if (= (logand (rigid-body-object-flag lights-dead) s5-0) (shl 128 32)) + (format #t "lights-dead ") + ) + (if (= (logand s5-0 (rigid-body-object-flag player-touching)) (rigid-body-object-flag player-touching)) + (format #t "player-touching ") + ) + (if (= (logand (rigid-body-object-flag target-in-sight) s5-0) (shl 1 32)) + (format #t "target-in-sight ") + ) + (if (= (logand (rigid-body-object-flag idle-sound) s5-0) (shl 2048 32)) + (format #t "idle-sound ") + ) + (if (= (logand s5-0 (rigid-body-object-flag in-air)) (rigid-body-object-flag in-air)) + (format #t "in-air ") + ) + (if (= (logand (rigid-body-object-flag draw-marks) s5-0) (shl 4 32)) + (format #t "draw-marks ") + ) + (if (= (logand (rigid-body-object-flag camera) s5-0) (rigid-body-object-flag camera)) + (format #t "camera ") + ) + (if (= (logand s5-0 (rigid-body-object-flag player-standing-on)) (rigid-body-object-flag player-standing-on)) + (format #t "player-standing-on ") + ) + (if (= (logand (rigid-body-object-flag measure-control-parameters) s5-0) (shl 16 32)) + (format #t "measure-control-parameters ") + ) + (if (= (logand s5-0 (rigid-body-object-flag player-impulse-force)) (rigid-body-object-flag player-impulse-force)) + (format #t "player-impulse-force ") + ) + (if (= (logand (rigid-body-object-flag rammed-target) s5-0) (shl 2 32)) + (format #t "rammed-target ") + ) + ) + (format #t ")~%") + (format #t "~2Tcontrols: #~%" (-> obj controls)) + (format #t "~2Tprev-controls: #~%" (-> obj prev-controls)) + (format #t "~2Tup-dir: #~%" (-> obj up-dir)) + (format #t "~2Tjump-time: ~f~%" (-> obj jump-time)) + (format #t "~2Tjump-thrust: ~f~%" (-> obj jump-thrust)) + (format #t "~2Tengine-thrust: ~f~%" (-> obj engine-thrust)) + (format #t "~2Tengine-power-factor: ~f~%" (-> obj engine-power-factor)) + (format #t "~2Tforce-scale: ~f~%" (-> obj force-scale)) + (format #t "~2Ttarget-distance2: (meters ~m)~%" (-> obj target-distance2)) + (format #t "~2Tpad0: ~D~%" (-> obj pad0)) + (format #t "~2Ttarget-acceleration: #~%" (-> obj target-acceleration)) + (format #t "~2Timpact-pos: #~%" (-> obj impact-pos)) + (format #t "~2Tlin-acceleration: #~%" (-> obj lin-acceleration)) + (format #t "~2Thit-points: ~f~%" (-> obj hit-points)) + (format #t "~2Tdamage-factor: ~f~%" (-> obj damage-factor)) + (format #t "~2Tcrash-level: ~D~%" (-> obj crash-level)) + (format #t "~2Tforce-level: ~D~%" (-> obj force-level)) + (format #t "~2Ttraffic-hash-id: ~D~%" (-> obj traffic-hash-id)) + (format #t "~2Ttraffic-priority-id: ~D~%" (-> obj traffic-priority-id)) + (format #t "~2Tpower-fluctuation-factor: ~f~%" (-> obj power-fluctuation-factor)) + (format #t "~2Tpower-level: ~f~%" (-> obj power-level)) + (format #t "~2Tflight-level-index: ~D~%" (-> obj flight-level-index)) + (format #t "~2Tflight-level-index-prev: ~D~%" (-> obj flight-level-index-prev)) + (format #t "~2Toverlap-player-counter: ~D~%" (-> obj overlap-player-counter)) + (format #t "~2Tphysics-counter: ~D~%" (-> obj physics-counter)) + (format #t "~2Tflight-level: ~f~%" (-> obj flight-level)) + (format #t "~2Tbrake-factor: ~f~%" (-> obj brake-factor)) + (format #t "~2Tcam-speed-interp: ~f~%" (-> obj cam-speed-interp)) + (format #t "~2Tcamera-dist2: ~f~%" (-> obj camera-dist2)) + (format #t "~2Tplayer-dist2: ~f~%" (-> obj player-dist2)) + (format #t "~2Tbound-radius: ~f~%" (-> obj bound-radius)) + (format #t "~2Trider-array[4] @ #x~X~%" (-> obj rider-array)) + (format #t "~2Tlift-thrust[2] @ #x~X~%" (-> obj lift-thrust)) + (format #t "~2Troll-thrust[2] @ #x~X~%" (-> obj roll-thrust)) + (format #t "~2Tsent-attack-time: ~D~%" (-> obj sent-attack-time)) + (format #t "~2Tair-time: ~D~%" (-> obj air-time)) + (format #t "~2Tturn-time: ~D~%" (-> obj turn-time)) + (format #t "~2Tcrash-time: ~D~%" (-> obj crash-time)) + (format #t "~2Ttransition-time: ~D~%" (-> obj transition-time)) + (format #t "~2Ttransition-end-time: ~D~%" (-> obj transition-end-time)) + (format #t "~2Tturbo-boost-time: ~D~%" (-> obj turbo-boost-time)) + (format #t "~2Tcrash-duration: ~D~%" (-> obj crash-duration)) + (format #t "~2Tturbo-boost-duration: ~D~%" (-> obj turbo-boost-duration)) + (format #t "~2Tturbo-boost-factor: ~f~%" (-> obj turbo-boost-factor)) + (format #t "~2Tcrash-impulse: ~f~%" (-> obj crash-impulse)) + (format #t "~2Twater-height: ~f~%" (-> obj water-height)) + (format #t "~2Tlights-factor: ~f~%" (-> obj lights-factor)) + (format #t "~2Toutgoing-attack-id: ~D~%" (-> obj outgoing-attack-id)) + (format #t "~2Tscrape-sound-id: ~D~%" (-> obj scrape-sound-id)) + (format #t "~2Tengine-sound-id: ~D~%" (-> obj engine-sound-id)) + (format #t "~2Tthrust-sound-id: ~D~%" (-> obj thrust-sound-id)) + (format #t "~2Troll-sound-id: ~D~%" (-> obj roll-sound-id)) + (format #t "~2Tdamage-pop-sound-id: ~D~%" (-> obj damage-pop-sound-id)) + (format #t "~2Tdamage-zap-sound-id: ~D~%" (-> obj damage-zap-sound-id)) + (format #t "~2Textra-sound-id: ~D~%" (-> obj extra-sound-id)) + (format #t "~2Tfog-fade: ~f~%" (-> obj fog-fade)) + (format #t "~2Tscrape-sound-envelope: ~f~%" (-> obj scrape-sound-envelope)) + (format #t "~2Tengine-sound-envelope: ~f~%" (-> obj engine-sound-envelope)) + (format #t "~2Tengine-sound-factor: ~f~%" (-> obj engine-sound-factor)) + (format #t "~2Tsputter-sound-envelope: ~f~%" (-> obj sputter-sound-envelope)) + (format #t "~2Trudder-sound-envelope: ~f~%" (-> obj rudder-sound-envelope)) + (format #t "~2Tfins-sound-envelope: ~f~%" (-> obj fins-sound-envelope)) + (format #t "~2Texhaust-part-accum[2] @ #x~X~%" (-> obj exhaust-part-accum)) + (format #t "~2Tsmoke-part-accum[2] @ #x~X~%" (-> obj smoke-part-accum)) + (format #t "~2Tcontroller: #~%" (-> obj controller)) + (format #t "~2Tsection-array[4] @ #x~X~%" (-> obj section-array)) + (label cfg-92) + obj + ) + +;; failed to figure out what this is: +0