From 2bfe13d0be5c9caf3b8c5c80e8995c5a00260fbc Mon Sep 17 00:00:00 2001 From: Tyler Wilding Date: Wed, 2 Jun 2021 20:09:04 -0400 Subject: [PATCH] decomp: `entity-h`, `camera-h`, `cam-update-h` and `cam-interface[-h]` (#501) * waiting for `entity-camera` / `entity-ambient` issue * stash * add missing definitions * decomp: `cam-interface` * as far as i can get with `path-h`, how do you specify pointers on the stack? * correction, no way these are just simple integers but `etype`is still a mystery... * decomp: `camera-h` | `cam-interface` | `cam-interface-h` and `entity-h` * revert change to `process` doesn't seem likely --- Taskfile.yml | 2 +- decompiler/config/all-types.gc | 542 ++++++----- .../jak1_ntsc_black_label/label_types.jsonc | 8 + .../jak1_ntsc_black_label/stack_vars.jsonc | 9 + .../jak1_ntsc_black_label/type_casts.jsonc | 4 + goal_src/engine/camera/cam-interface-h.gc | 4 + goal_src/engine/camera/cam-interface.gc | 123 +++ goal_src/engine/camera/camera-h.gc | 530 +++++++++++ goal_src/engine/entity/entity-h.gc | 204 +++++ .../reference/all_forward_declarations.gc | 46 + .../engine/camera/cam-interface-h_REF.gc | 31 + .../engine/camera/cam-interface_REF.gc | 133 +++ .../reference/engine/camera/camera-h_REF.gc | 854 ++++++++++++++++++ .../reference/engine/entity/entity-h_REF.gc | 318 +++++++ 14 files changed, 2533 insertions(+), 275 deletions(-) create mode 100644 test/decompiler/reference/engine/camera/cam-interface-h_REF.gc create mode 100644 test/decompiler/reference/engine/camera/cam-interface_REF.gc create mode 100644 test/decompiler/reference/engine/camera/camera-h_REF.gc create mode 100644 test/decompiler/reference/engine/entity/entity-h_REF.gc diff --git a/Taskfile.yml b/Taskfile.yml index 91f13f4acd..57374cfe11 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -52,7 +52,7 @@ tasks: - ./out/build/Release/bin/offline-test.exe "./iso_data/jak1" update-reference-tests: cmds: - - ./out/build/Debug/bin/offline-test.exe "./iso_data/jak1" --dump-mode + - ./out/build/Release/bin/offline-test.exe "./iso_data/jak1" --dump-mode - python .\scripts\update_decomp_reference.py .\failures\ .\test\decompiler\reference\ - task: offline-tests diff --git a/decompiler/config/all-types.gc b/decompiler/config/all-types.gc index 1f26d90106..08361219f4 100644 --- a/decompiler/config/all-types.gc +++ b/decompiler/config/all-types.gc @@ -751,7 +751,6 @@ ;; - Types (declare-type connectable structure) -(declare-type entity basic) (define-extern process type) ; deftype provided by C Kernel (deftype process (process-tree) ((pool dead-pool :offset-assert #x20) @@ -8881,13 +8880,12 @@ (data-base pointer :offset-assert 12) (data-top pointer :offset-assert 16) (data-size int32 :offset-assert 20) - (extra basic :offset-assert 24) + (extra basic :offset-assert 24) ;; NOTE - can be anything it seems (tag (pointer res-tag) :offset-assert 28) ) :method-count-assert 22 :size-assert #x20 :flag-assert #x1600000020 - ;; field extra is a basic loaded with a signed load (:methods (new (symbol type int int) _type_ 0) (get-property-data (_type_ symbol symbol float pointer (pointer res-tag) pointer) pointer 9) @@ -12471,113 +12469,83 @@ ) ) -; (deftype entity-perm-array (inline-array-class) -; ((length int32 :offset-assert 4) -; (allocated-length int32 :offset-assert 8) -; (data UNKNOWN :dynamic :offset-assert 16) -; ) -; :method-count-assert 9 -; :size-assert #x10 -; :flag-assert #x900000010 -; ) +(deftype entity-perm-array (inline-array-class) + () + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) -; (deftype entity-links-array (inline-array-class) -; ((length int32 :offset-assert 4) -; (allocated-length int32 :offset-assert 8) -; (data UNKNOWN :dynamic :offset-assert 16) -; ) -; :method-count-assert 9 -; :size-assert #x10 -; :flag-assert #x900000010 -; ) +(deftype entity-links-array (inline-array-class) + () + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) -; (deftype entity (res-lump) -; () -; :method-count-assert 27 -; :size-assert #x34 -; :flag-assert #x1b00000034 -; ;; unrecognized get op: (set! t9 find-parent-method) parent was res-lump -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; ) -; ) +(deftype entity (res-lump) + ( + (trans vector :inline :offset-assert 32) + (aid uint32 :offset-assert 48) ; prints with ~A but other entity types use uint32 :shrug: for now + ) + :method-count-assert 27 + :size-assert #x34 + :flag-assert #x1b00000034 + ;; unrecognized get op: (set! t9 find-parent-method) parent was res-lump + (:methods + (dummy-22 () none 22) + (dummy-23 () none 23) + (dummy-24 () none 24) + (dummy-25 () none 25) + (dummy-26 () none 26) + ) + ) -; (deftype entity-ambient-data (structure) -; ((user-object UNKNOWN 3 :offset-assert 0) -; (function basic :offset-assert 12) -; (quad uint128 :offset-assert 0) -; (user-uint64 UNKNOWN 1 :offset-assert 0) -; (user-float UNKNOWN 3 :offset-assert 0) -; (user-int32 UNKNOWN 3 :offset-assert 0) -; (user-uint32 UNKNOWN 3 :offset-assert 0) -; (user-int16 UNKNOWN 6 :offset-assert 0) -; (user-uint16 UNKNOWN 6 :offset-assert 0) -; (user-int8 UNKNOWN 12 :offset-assert 0) -; (user-uint8 UNKNOWN 12 :offset-assert 0) -; ) -; :method-count-assert 9 -; :size-assert #x10 -; :flag-assert #x900000010 -; ) +(deftype entity-ambient-data (structure) + ((user-object object 3 :offset-assert 0) + (function basic :offset-assert 12) + (quad uint128 :offset 0) + (user-uint64 uint64 1 :offset 0) + (user-float float 3 :offset 0) + (user-int32 int32 3 :offset 0) + (user-uint32 uint32 3 :offset 0) + (user-int16 int16 6 :offset 0) + (user-uint16 uint16 6 :offset 0) + (user-int8 int8 12 :offset 0) + (user-uint8 uint8 12 :offset 0) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) -; (deftype entity-ambient-data-array (inline-array-class) -; ((length int32 :offset-assert 4) -; (allocated-length int32 :offset-assert 8) -; (data UNKNOWN :dynamic :offset-assert 16) -; ) -; :method-count-assert 9 -; :size-assert #x10 -; :flag-assert #x900000010 -; ) +(deftype entity-ambient-data-array (inline-array-class) + () + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) -; (deftype entity-actor (entity) -; () -; :method-count-assert 31 -; :size-assert #x50 -; :flag-assert #x1f00000050 -; ;; unrecognized get op: (set! t9 find-parent-method) parent was entity -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; (dummy-28 () none 28) -; (dummy-29 () none 29) -; (dummy-30 () none 30) -; ) -; ) +(declare-type nav-mesh basic) +(deftype entity-actor (entity) + ( + (nav-mesh nav-mesh :offset-assert 52) + (etype basic :offset-assert 56) + (task uint8 :offset-assert 60) + (vis-id uint16 :offset-assert 62) + (quat quaternion :inline :offset-assert 64) + ) + :method-count-assert 31 + :size-assert #x50 + :flag-assert #x1f00000050 + ;; unrecognized get op: (set! t9 find-parent-method) parent was entity + (:methods + (dummy-27 () none 27) + (dummy-28 () none 28) + (dummy-29 () none 29) + (dummy-30 () none 30) + ) + ) (deftype entity-info (basic) ((ptype basic :offset-assert 4) @@ -12601,18 +12569,35 @@ :flag-assert #x900000010 ) +(deftype entity-ambient (entity) + () + :method-count-assert 29 + :size-assert #x34 + :flag-assert #x1d00000034 + (:methods + (dummy-27 () none 27) + (dummy-28 () none 28) + ) + ) + +(deftype entity-camera (entity) + ( + (connect connectable :inline :offset-assert 64) + ) + :method-count-assert 27 + :size-assert #x50 + :flag-assert #x1b00000050 + (:methods + ) + ) + ;; - Symbols -(define-extern entity-nav-login function) -(define-extern entity-camera type) -(define-extern entity-ambient type) - -;; - Unknowns - -;;(define-extern *generate-actor-vis* object) ;; unknown type -;;(define-extern *generate-actor-vis-start* object) ;; unknown type -;;(define-extern *generate-actor-vis-output* object) ;; unknown type -;;(define-extern *ACTOR-bank* object) ;; unknown type +(define-extern entity-nav-login function) ;; only called in `level` in an asm function...tough, returns nothing +(define-extern *generate-actor-vis-start* symbol) +(define-extern *ACTOR-bank* actor-bank) +(define-extern *generate-actor-vis-output* symbol) +(define-extern *generate-actor-vis* symbol) ;; ---------------------- @@ -13044,13 +13029,16 @@ ;; - Symbols (define-extern entity-actor-count function) -(define-extern entity-actor-lookup function) (define-extern entity-by-name function) (define-extern entity-by-aid function) (define-extern actor-link-subtask-complete-hook function) (define-extern actor-link-dead-hook function) (define-extern alt-actor-list-subtask-incomplete-count function) +;; - Functions + +(define-extern entity-actor-lookup (function entity symbol int process-drawable)) ;; NOTE - return value is not confirmed + ;; ---------------------- ;; File - camera-h @@ -13060,22 +13048,22 @@ ;; - Types -; (deftype camera-bank (basic) -; ((collide-move-rad float :offset-assert 4) -; (joypad uint32 :offset-assert 8) -; (min-detectable-velocity float :offset-assert 12) -; (attack-timeout uint64 :offset-assert 16) -; (default-string-max-y meters :offset-assert 24) -; (default-string-min-y meters :offset-assert 28) -; (default-string-max-z meters :offset-assert 32) -; (default-string-min-z meters :offset-assert 36) -; (default-string-push-z meters :offset-assert 40) -; (default-tilt-adjust deg :offset-assert 44) -; ) -; :method-count-assert 9 -; :size-assert #x30 -; :flag-assert #x900000030 -; ) +(deftype camera-bank (basic) + ((collide-move-rad float :offset-assert 4) + (joypad uint32 :offset-assert 8) + (min-detectable-velocity float :offset-assert 12) + (attack-timeout uint64 :offset-assert 16) + (default-string-max-y float :offset-assert 24) ; meters + (default-string-min-y float :offset-assert 28) ; meters + (default-string-max-z float :offset-assert 32) ; meters + (default-string-min-z float :offset-assert 36) ; meters + (default-string-push-z float :offset-assert 40) ; meters + (default-tilt-adjust float :offset-assert 44) ; deg + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) (deftype cam-index (structure) ((flags uint32 :offset-assert 0) @@ -13162,10 +13150,10 @@ :size-assert #x18 :flag-assert #xd00000018 (:methods - (dummy-9 () none 9) - (dummy-10 () none 10) - (dummy-11 () none 11) - (dummy-12 () none 12) + (init-cam-float-seeker (_type_ float float float float) none 9) + (copy-cam-float-seeker (_type_ _type_) none 10) + (TODO-RENAME-11 (_type_ float) none 11) + (TODO-RENAME-12 (_type_ float) float 12) ) ) @@ -13181,8 +13169,8 @@ :size-assert #x3c :flag-assert #xb0000003c (:methods - (dummy-9 () none 9) - (dummy-10 () none 10) + (TODO-RENAME-9 (_type_ vector float float float) none 9) + (TODO-RENAME-10 (_type_ vector) none 10) ) ) @@ -13204,18 +13192,18 @@ ) (deftype camera-combiner (process) - ((~Ttrans vector :inline :offset-assert 112) - (~Tinv-camera-rot matrix :inline :offset-assert 128) - (~Tfov float :offset-assert 192) - (~Tinterp-val float :offset-assert 196) - (~Tinterp-step float :offset-assert 200) - (~Tdist-from-src float :offset-assert 204) - (~Tdist-from-dest float :offset-assert 208) - (~Tflip-control-axis vector :inline :offset-assert 224) - (~Tvelocity vector :inline :offset-assert 240) - (~Ttracking-status uint64 :offset-assert 256) - (~Ttracking-options int32 :offset-assert 264) - (~Ttracking cam-rotation-tracker :inline :offset-assert 272) + ((trans vector :inline :offset-assert 112) + (inv-camera-rot matrix :inline :offset-assert 128) + (fov float :offset-assert 192) + (interp-val float :offset-assert 196) + (interp-step float :offset-assert 200) + (dist-from-src float :offset-assert 204) + (dist-from-dest float :offset-assert 208) + (flip-control-axis vector :inline :offset-assert 224) + (velocity vector :inline :offset-assert 240) + (tracking-status uint64 :offset-assert 256) + (tracking-options int32 :offset-assert 264) + (tracking cam-rotation-tracker :inline :offset-assert 272) ) :heap-base #x170 :method-count-assert 14 @@ -13225,56 +13213,56 @@ ) (deftype camera-slave (process) - ((~Ttrans vector :inline :offset-assert 112) - (~Tfov float :offset-assert 128) - (~Tfov0 float :offset-assert 132) - (~Tfov1 float :offset-assert 136) - (~Tfov-index cam-index :inline :offset-assert 144) - (~Ttracking cam-rotation-tracker :inline :offset-assert 192) - (~Tview-off-param float :offset-assert 400) - (~Tview-off vector :inline :offset-assert 416) - (~Tmin-z-override float :offset-assert 432) - (~Tview-flat vector :inline :offset-assert 448) - (~Tstring-vel-dir uint32 :offset-assert 464) - (~Tstring-trans vector :inline :offset-assert 480) - (~Tposition-spline tracking-spline :inline :offset-assert 496) - (~Tpivot-pt vector :inline :offset-assert 2144) - (~Tpivot-rad float :offset-assert 2160) - (~Tcircular-follow vector :inline :offset-assert 2176) - (~Tmax-angle-offset float :offset-assert 2192) - (~Tmax-angle-curr float :offset-assert 2196) - (~Toptions uint32 :offset-assert 2200) - (~Tcam-entity basic :offset-assert 2204) - (~Tvelocity vector :inline :offset-assert 2208) - (~Tdesired-pos vector :inline :offset-assert 2224) - (~Ttime-dist-too-far uint32 :offset-assert 2240) - (~Tlos-state uint32 :offset-assert 2244) - (~Tgood-point vector :inline :offset-assert 2256) - (~Tlos-tgt-spline-pt int32 :offset-assert 2272) - (~Tlos-tgt-spline-pt-incarnation int32 :offset-assert 2276) - (~Tlos-last-pos vector :inline :offset-assert 2288) - (~Tintro-curve curve :inline :offset-assert 2304) - (~Tintro-offset vector :inline :offset-assert 2336) - (~Tintro-t float :offset-assert 2352) - (~Tintro-t-step float :offset-assert 2356) - (~Toutro-exit-value float :offset-assert 2360) - (~Tspline-exists basic :offset-assert 2364) - (~Tspline-curve curve :inline :offset-assert 2368) - (~Tspline-offset vector :inline :offset-assert 2400) - (~Tindex cam-index :inline :offset-assert 2416) - (~Tsaved-pt vector :inline :offset-assert 2464) - (~Tspline-tt float :offset-assert 2480) - (~Tspline-follow-dist float :offset-assert 2484) - (~Tchange-event-from uint32 :offset-assert 2488) - (~Tenter-has-run basic :offset-assert 2492) - (~Tblend-from-type uint64 :offset-assert 2496) - (~Tblend-to-type uint64 :offset-assert 2504) - (~Thave-phony-joystick basic :offset-assert 2512) - (~Tphony-joystick-x float :offset-assert 2516) - (~Tphony-joystick-y float :offset-assert 2520) - (~Tstring-min-val vector :inline :offset-assert 2528) - (~Tstring-max-val vector :inline :offset-assert 2544) - (~Tstring-val-locked basic :offset-assert 2560) + ((trans vector :inline :offset-assert 112) + (fov float :offset-assert 128) + (fov0 float :offset-assert 132) + (fov1 float :offset-assert 136) + (fov-index cam-index :inline :offset-assert 144) + (tracking cam-rotation-tracker :inline :offset-assert 192) + (view-off-param float :offset-assert 400) + (view-off vector :inline :offset-assert 416) + (min-z-override float :offset-assert 432) + (view-flat vector :inline :offset-assert 448) + (string-vel-dir uint32 :offset-assert 464) + (string-trans vector :inline :offset-assert 480) + (position-spline tracking-spline :inline :offset-assert 496) + (pivot-pt vector :inline :offset-assert 2144) + (pivot-rad float :offset-assert 2160) + (circular-follow vector :inline :offset-assert 2176) + (max-angle-offset float :offset-assert 2192) + (max-angle-curr float :offset-assert 2196) + (options uint32 :offset-assert 2200) + (cam-entity basic :offset-assert 2204) + (velocity vector :inline :offset-assert 2208) + (desired-pos vector :inline :offset-assert 2224) + (time-dist-too-far uint32 :offset-assert 2240) + (los-state uint32 :offset-assert 2244) + (good-point vector :inline :offset-assert 2256) + (los-tgt-spline-pt int32 :offset-assert 2272) + (los-tgt-spline-pt-incarnation int32 :offset-assert 2276) + (los-last-pos vector :inline :offset-assert 2288) + (intro-curve curve :inline :offset-assert 2304) + (intro-offset vector :inline :offset-assert 2336) + (intro-t float :offset-assert 2352) + (intro-t-step float :offset-assert 2356) + (outro-exit-value float :offset-assert 2360) + (spline-exists basic :offset-assert 2364) + (spline-curve curve :inline :offset-assert 2368) + (spline-offset vector :inline :offset-assert 2400) + (index cam-index :inline :offset-assert 2416) + (saved-pt vector :inline :offset-assert 2464) + (spline-tt float :offset-assert 2480) + (spline-follow-dist float :offset-assert 2484) + (change-event-from uint32 :offset-assert 2488) + (enter-has-run basic :offset-assert 2492) + (blend-from-type uint64 :offset-assert 2496) + (blend-to-type uint64 :offset-assert 2504) + (have-phony-joystick basic :offset-assert 2512) + (phony-joystick-x float :offset-assert 2516) + (phony-joystick-y float :offset-assert 2520) + (string-min-val vector :inline :offset-assert 2528) + (string-max-val vector :inline :offset-assert 2544) + (string-val-locked basic :offset-assert 2560) ) :heap-base #x9a0 :method-count-assert 14 @@ -13284,59 +13272,59 @@ ) (deftype camera-master (process) - ((~Tmaster-options uint32 :offset-assert 112) - (~Tnum-slaves int32 :offset-assert 116) - (~Tslave basic 2 :offset-assert 120) - (~Tslave-options uint32 :offset-assert 128) - (~Tview-off-param-save float :offset-assert 132) - (~Tchanger uint32 :offset-assert 136) - (~Tcam-entity basic :offset-assert 140) - (~TstringMinLength float :offset-assert 144) - (~TstringMaxLength float :offset-assert 148) - (~TstringMinHeight float :offset-assert 152) - (~TstringMaxHeight float :offset-assert 156) - (~Tstring-min cam-vector-seeker :inline :offset-assert 160) - (~Tstring-max cam-vector-seeker :inline :offset-assert 224) - (~Tstring-push-z float :offset-assert 284) - (~TstringCliffHeight float :offset-assert 288) - (~Tno-intro uint32 :offset-assert 292) - (~Tforce-blend uint32 :offset-assert 296) - (~Tforce-blend-time uint32 :offset-assert 300) - (~Tlocal-down vector :inline :offset-assert 304) - (~Tdrawable-target uint64 :offset-assert 320) - (~Twhich-bone int32 :offset-assert 328) - (~Tpov-handle uint64 :offset-assert 336) - (~Tpov-bone int32 :offset-assert 344) - (~Tbeing-attacked basic :offset-assert 348) - (~Tattack-start uint64 :offset-assert 352) - (~Ton-ground basic :offset-assert 360) - (~Tunder-water int32 :offset-assert 364) - (~Ton-pole basic :offset-assert 368) - (~Ttgt-rot-mat matrix :inline :offset-assert 384) - (~Ttgt-face-mat matrix :inline :offset-assert 448) - (~Ttpos-old vector :inline :offset-assert 512) - (~Ttpos-curr vector :inline :offset-assert 528) - (~Ttarget-height float :offset-assert 544) - (~Ttpos-old-adj vector :inline :offset-assert 560) - (~Ttpos-curr-adj vector :inline :offset-assert 576) - (~Ttpos-tgt vector :inline :offset-assert 592) - (~Tupspeed float :offset-assert 608) - (~Tpitch-off vector :inline :offset-assert 624) - (~Tfoot-offset float :offset-assert 640) - (~Thead-offset float :offset-assert 644) - (~Ttarget-spline tracking-spline :inline :offset-assert 656) - (~Tease-from vector :inline :offset-assert 2304) - (~Tease-t float :offset-assert 2320) - (~Tease-step float :offset-assert 2324) - (~Tease-to vector :inline :offset-assert 2336) - (~Toutro-curve curve :inline :offset-assert 2352) - (~Toutro-t float :offset-assert 2372) - (~Toutro-t-step float :offset-assert 2376) - (~Toutro-exit-value float :offset-assert 2380) - (~Twater-drip-time uint64 :offset-assert 2384) - (~Twater-drip basic :offset-assert 2392) - (~Twater-drip-mult float :offset-assert 2396) - (~Twater-drip-speed float :offset-assert 2400) + ((master-options uint32 :offset-assert 112) + (num-slaves int32 :offset-assert 116) + (slave basic 2 :offset-assert 120) + (slave-options uint32 :offset-assert 128) + (view-off-param-save float :offset-assert 132) + (changer uint32 :offset-assert 136) + (cam-entity basic :offset-assert 140) + (stringMinLength float :offset-assert 144) + (stringMaxLength float :offset-assert 148) + (stringMinHeight float :offset-assert 152) + (stringMaxHeight float :offset-assert 156) + (string-min cam-vector-seeker :inline :offset-assert 160) + (string-max cam-vector-seeker :inline :offset-assert 224) + (string-push-z float :offset-assert 284) + (stringCliffHeight float :offset-assert 288) + (no-intro uint32 :offset-assert 292) + (force-blend uint32 :offset-assert 296) + (force-blend-time uint32 :offset-assert 300) + (local-down vector :inline :offset-assert 304) + (drawable-target uint64 :offset-assert 320) + (which-bone int32 :offset-assert 328) + (pov-handle uint64 :offset-assert 336) + (pov-bone int32 :offset-assert 344) + (being-attacked basic :offset-assert 348) + (attack-start uint64 :offset-assert 352) + (on-ground basic :offset-assert 360) + (under-water int32 :offset-assert 364) + (on-pole basic :offset-assert 368) + (tgt-rot-mat matrix :inline :offset-assert 384) + (tgt-face-mat matrix :inline :offset-assert 448) + (tpos-old vector :inline :offset-assert 512) + (tpos-curr vector :inline :offset-assert 528) + (target-height float :offset-assert 544) + (tpos-old-adj vector :inline :offset-assert 560) + (tpos-curr-adj vector :inline :offset-assert 576) + (tpos-tgt vector :inline :offset-assert 592) + (upspeed float :offset-assert 608) + (pitch-off vector :inline :offset-assert 624) + (foot-offset float :offset-assert 640) + (head-offset float :offset-assert 644) + (target-spline tracking-spline :inline :offset-assert 656) + (ease-from vector :inline :offset-assert 2304) + (ease-t float :offset-assert 2320) + (ease-step float :offset-assert 2324) + (ease-to vector :inline :offset-assert 2336) + (outro-curve curve :inline :offset-assert 2352) + (outro-t float :offset-assert 2372) + (outro-t-step float :offset-assert 2376) + (outro-exit-value float :offset-assert 2380) + (water-drip-time uint64 :offset-assert 2384) + (water-drip basic :offset-assert 2392) + (water-drip-mult float :offset-assert 2396) + (water-drip-speed float :offset-assert 2400) ) :heap-base #x900 :method-count-assert 14 @@ -13345,9 +13333,9 @@ ;; inherited inspect of process ) -;; - Unknowns +;; - Symbols -;;(define-extern *CAMERA-bank* object) ;; unknown type +(define-extern *CAMERA-bank* camera-bank) ;; ---------------------- @@ -13390,15 +13378,15 @@ ;; Containing DGOs - ['GAME', 'ENGINE'] ;; Version - 3 -;; - Unknowns +;; - Symbols -;;(define-extern *camera-read-analog* object) ;; unknown type -;;(define-extern *camera-read-buttons* object) ;; unknown type -;;(define-extern *cam-free-move-along-z* object) ;; unknown type -;;(define-extern *camera-init-mat* object) ;; unknown type -;;(define-extern *camera* object) ;; unknown type -;;(define-extern *camera-combiner* object) ;; unknown type -;;(define-extern *camera-orbit-target* object) ;; unknown type +(define-extern *camera-read-analog* symbol) +(define-extern *camera-read-buttons* symbol) +(define-extern *cam-free-move-along-z* symbol) +(define-extern *camera-init-mat* matrix) +(define-extern *camera* camera-master) +(define-extern *camera-combiner* camera-combiner) +(define-extern *camera-orbit-target* process-drawable) ;; ---------------------- @@ -14292,9 +14280,7 @@ ;; - Symbols -(define-extern math-camera-pos function) (define-extern target-pos function) -(define-extern camera-pos function) (define-extern new-sound-id function) (define-extern get-sound-buffer-entry function) (define-extern sound-trans-convert function) @@ -14341,6 +14327,11 @@ (define-extern make-sqrt-table function) (define-extern flava-lookup function) +;; - Functions + +(define-extern math-camera-pos (function vector)) +(define-extern camera-pos (function vector)) + ;; - Unknowns ;;(define-extern *flava-table* object) ;; unknown type @@ -16021,6 +16012,7 @@ ;; - Functions +(define-extern position-in-front-of-camera! (function vector float float vector)) (define-extern set-blackout-frames (function int int)) (define-extern set-master-mode (function symbol none)) (define-extern stop (function int)) ;; logic-target @@ -16036,7 +16028,6 @@ (define-extern *kernel-boot-message* symbol) (define-extern reset-actors function) (define-extern start function) -(define-extern position-in-front-of-camera! function) (define-extern *level-load-list* pair) (define-extern game-task->string function) (define-extern trsq->continue-point function) @@ -16586,13 +16577,16 @@ ;; - Symbols -(define-extern matrix-local->world function) (define-extern update-snow function) (define-extern check-drop-level-rain function) (define-extern update-rain function) (define-extern cam-master-effect function) (define-extern sparticle-track-sun function) +;; - Functions + +(define-extern matrix-local->world (function symbol matrix)) + ;; - Unknowns ;;(define-extern group-rain-screend-drop object) ;; unknown type @@ -17356,15 +17350,15 @@ ;; Containing DGOs - ['GAME', 'ENGINE'] ;; Version - 3 +;; - Functions + +(define-extern camera-teleport-to-entity (function entity-actor none)) +(define-extern matrix-world->local (function matrix)) +(define-extern camera-angle (function float)) + ;; - Symbols -(define-extern matrix-world->local function) -(define-extern camera-angle function) -(define-extern camera-teleport-to-entity function) - -;; - Unknowns - -;;(define-extern *camera-dummy-vector* object) ;; unknown type +(define-extern *camera-dummy-vector* vector) ;; ---------------------- diff --git a/decompiler/config/jak1_ntsc_black_label/label_types.jsonc b/decompiler/config/jak1_ntsc_black_label/label_types.jsonc index e0eb4ebe27..544184c832 100644 --- a/decompiler/config/jak1_ntsc_black_label/label_types.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/label_types.jsonc @@ -460,5 +460,13 @@ "smush-control-h": [ ["L20", "float", true] + ], + + "entity-h": [ + ["L2", "actor-bank", true] + ], + + "camera-h": [ + ["L14", "camera-bank", true] ] } diff --git a/decompiler/config/jak1_ntsc_black_label/stack_vars.jsonc b/decompiler/config/jak1_ntsc_black_label/stack_vars.jsonc index a23c222f2e..2bce771f31 100644 --- a/decompiler/config/jak1_ntsc_black_label/stack_vars.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/stack_vars.jsonc @@ -253,5 +253,14 @@ "ripple-add-debug-sphere": [ [16, "vector"] + ], + + "camera-teleport-to-entity": [ + [16, "transformq"], + [64, "event-message-block"] + ], + + "(method 10 cam-vector-seeker)": [ + [16, "vector"] ] } diff --git a/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc b/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc index 38d8f9eb0a..eeb019daf3 100644 --- a/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc @@ -459,5 +459,9 @@ "ripple-find-height": [ [[22, 72], "s4", "mei-ripple"] + ], + + "camera-teleport-to-entity": [ + [9, "a0", "transform"] ] } diff --git a/goal_src/engine/camera/cam-interface-h.gc b/goal_src/engine/camera/cam-interface-h.gc index 563124fd43..5e4e07e6ea 100644 --- a/goal_src/engine/camera/cam-interface-h.gc +++ b/goal_src/engine/camera/cam-interface-h.gc @@ -5,3 +5,7 @@ ;; name in dgo: cam-interface-h ;; dgos: GAME, ENGINE +;; NOTE - forward declaration needed for cam-interface +(define-extern *camera-dummy-vector* vector) +(define-extern *camera* camera-master) ;; unknown type +(define-extern *camera-combiner* camera-combiner) ;; unknown type diff --git a/goal_src/engine/camera/cam-interface.gc b/goal_src/engine/camera/cam-interface.gc index 78a4fdf553..8bf24be0c6 100644 --- a/goal_src/engine/camera/cam-interface.gc +++ b/goal_src/engine/camera/cam-interface.gc @@ -5,3 +5,126 @@ ;; name in dgo: cam-interface ;; dgos: GAME, ENGINE +(rlet ((vf0 :class vf)) +(init-vf0-vector) + +;; definition for function position-in-front-of-camera! +(defun position-in-front-of-camera! ((arg0 vector) (arg1 float) (arg2 float)) + (rlet ((vf0 :class vf) + (vf1 :class vf) + (vf2 :class vf) + (vf4 :class vf) + (vf5 :class vf) + (vf6 :class vf) + ) + (init-vf0-vector) + (let ((v1-0 arg0)) + (let ((a0-2 (&-> *math-camera* inv-camera-rot data 8)) + (f0-0 arg1) + ) + (.lvf vf1 a0-2) + (let ((a0-3 f0-0)) + (.mov vf2 a0-3) + ) + ) + (.add.x.vf vf1 vf0 vf0 :mask #b1000) + (.mul.x.vf vf1 vf1 vf2 :mask #b111) + (.svf (&-> v1-0 quad) vf1) + ) + (vector+float*! + arg0 + arg0 + (the-as vector (&-> *math-camera* inv-camera-rot data 4)) + arg2 + ) + (let ((a0-5 arg0)) + (let ((v1-3 arg0) + (a1-3 (-> *math-camera* trans)) + ) + (.mov.vf vf6 vf0 :mask #b1000) + (.lvf vf4 (&-> v1-3 quad)) + (.lvf vf5 (&-> a1-3 quad)) + ) + (.add.vf vf6 vf4 vf5 :mask #b111) + (.svf (&-> a0-5 quad) vf6) + ) + arg0 + ) + ) + +;; definition for function matrix-local->world +(defun matrix-local->world ((arg0 symbol)) + (if arg0 + (-> *math-camera* inv-camera-rot-smooth) + (-> *math-camera* inv-camera-rot) + ) + ) + +;; definition for function matrix-world->local +(defun matrix-world->local () + (-> *math-camera* camera-rot) + ) + +;; failed to figure out what this is: +(when (or (not *camera-dummy-vector*) (zero? *camera-dummy-vector*)) + (let ((v1-8 (new 'global 'vector))) + (.svf (&-> v1-8 quad) vf0) + (set! *camera-dummy-vector* v1-8) + ) + ) + +;; definition for function camera-pos +;; INFO: Return type mismatch object vs vector. +(defun camera-pos () + (the-as vector (cond + (*camera-combiner* + (-> *camera-combiner* stack) + ) + (*math-camera* + (-> *math-camera* trans) + ) + (else + *camera-dummy-vector* + ) + ) + ) + ) + +;; definition for function math-camera-pos +(defun math-camera-pos () + (-> *math-camera* trans) + ) + +;; definition for function camera-angle +(defun camera-angle () + (let ((f0-0 (-> *math-camera* camera-rot data 0)) + (f1-0 (-> *math-camera* camera-rot data 2)) + ) + (atan f1-0 f0-0) + ) + ) + +;; definition for function camera-teleport-to-entity +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defun camera-teleport-to-entity ((arg0 entity-actor)) + (local-vars (pp process)) + (let ((gp-0 (new 'stack 'transformq))) + (let ((v1-1 (-> gp-0 trans))) + (set! (-> v1-1 quad) (-> (the-as transform (-> arg0 extra)) scale quad)) + ) + (quaternion-copy! (the-as quaternion (-> gp-0 rot)) (-> arg0 quat)) + (vector-identity! (-> gp-0 scale)) + (let ((a1-2 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-2 from) pp) + (set! (-> a1-2 num-params) 1) + (set! (-> a1-2 message) 'teleport-to-transformq) + (set! (-> a1-2 param 0) (the-as uint gp-0)) + (send-event-function *camera* a1-2) + ) + ) + (none) + ) + +) + diff --git a/goal_src/engine/camera/camera-h.gc b/goal_src/engine/camera/camera-h.gc index 52909130e2..d87195f1e2 100644 --- a/goal_src/engine/camera/camera-h.gc +++ b/goal_src/engine/camera/camera-h.gc @@ -5,3 +5,533 @@ ;; name in dgo: camera-h ;; dgos: GAME, ENGINE +;; definition of type camera-bank +(deftype camera-bank (basic) + ((collide-move-rad float :offset-assert 4) + (joypad uint32 :offset-assert 8) + (min-detectable-velocity float :offset-assert 12) + (attack-timeout uint64 :offset-assert 16) + (default-string-max-y float :offset-assert 24) + (default-string-min-y float :offset-assert 28) + (default-string-max-z float :offset-assert 32) + (default-string-min-z float :offset-assert 36) + (default-string-push-z float :offset-assert 40) + (default-tilt-adjust float :offset-assert 44) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) + +;; definition for symbol *CAMERA-bank*, type camera-bank +(define + *CAMERA-bank* + (new 'static 'camera-bank + :collide-move-rad 1638.4 + :min-detectable-velocity 40.96 + :attack-timeout #x4b + :default-string-max-y 12288.0 + :default-string-min-y 4096.0 + :default-string-max-z 51200.0 + :default-string-min-z 20480.0 + :default-string-push-z 40960.0 + :default-tilt-adjust -1183.289 + ) + ) + +;; definition of type cam-index +(deftype cam-index (structure) + ((flags uint32 :offset-assert 0) + (vec uint128 2 :offset-assert 16) + ) + :method-count-assert 11 + :size-assert #x30 + :flag-assert #xb00000030 + (:methods + (dummy-9 () none 9) + (dummy-10 () none 10) + ) + ) +;; definition of type tracking-point +(deftype tracking-point (structure) + ((position vector :inline :offset-assert 0) + (direction vector :inline :offset-assert 16) + (tp-length float :offset-assert 32) + (next int32 :offset-assert 36) + (incarnation int32 :offset-assert 40) + ) + :method-count-assert 9 + :size-assert #x2c + :flag-assert #x90000002c + ) + +;; definition of type tracking-spline-sampler +(deftype tracking-spline-sampler (structure) + ((cur-pt int32 :offset-assert 0) + (partial-pt float :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) + +;; definition of type tracking-spline +(deftype tracking-spline (structure) + ((point tracking-point 32 :inline :offset-assert 0) + (summed-len float :offset-assert 1536) + (free-point int32 :offset-assert 1540) + (used-point int32 :offset-assert 1544) + (partial-point float :offset-assert 1548) + (end-point int32 :offset-assert 1552) + (next-to-last-point int32 :offset-assert 1556) + (max-move float :offset-assert 1560) + (sample-len float :offset-assert 1564) + (used-count int32 :offset-assert 1568) + (old-position vector :inline :offset-assert 1584) + (debug-old-position vector :inline :offset-assert 1600) + (debug-out-position vector :inline :offset-assert 1616) + (debug-last-point int32 :offset-assert 1632) + ) + :method-count-assert 24 + :size-assert #x664 + :flag-assert #x1800000664 + (:methods + (dummy-9 () none 9) + (dummy-10 () none 10) + (dummy-11 () none 11) + (dummy-12 () none 12) + (dummy-13 () none 13) + (dummy-14 () none 14) + (dummy-15 () none 15) + (dummy-16 () none 16) + (dummy-17 () none 17) + (dummy-18 () none 18) + (dummy-19 () none 19) + (dummy-20 () none 20) + (dummy-21 () none 21) + (dummy-22 () none 22) + (dummy-23 () none 23) + ) + ) + +;; definition of type cam-float-seeker +(deftype cam-float-seeker (structure) + ((target float :offset-assert 0) + (value float :offset-assert 4) + (vel float :offset-assert 8) + (accel float :offset-assert 12) + (max-vel float :offset-assert 16) + (max-partial float :offset-assert 20) + ) + :pack-me + :method-count-assert 13 + :size-assert #x18 + :flag-assert #xd00000018 + (:methods + (init-cam-float-seeker (_type_ float float float float) none 9) + (copy-cam-float-seeker (_type_ _type_) none 10) + (TODO-RENAME-11 (_type_ float) none 11) + (TODO-RENAME-12 (_type_ float) float 12) + ) + ) + +;; definition for method 9 of type cam-float-seeker +;; INFO: Return type mismatch int vs none. +(defmethod + init-cam-float-seeker + cam-float-seeker + ((obj cam-float-seeker) (arg0 float) (arg1 float) (arg2 float) (arg3 float)) + (set! (-> obj target) arg0) + (set! (-> obj value) arg0) + (set! (-> obj vel) 0.0) + (set! (-> obj accel) arg1) + (set! (-> obj max-vel) arg2) + (set! (-> obj max-partial) arg3) + (none) + ) + +;; definition for method 10 of type cam-float-seeker +;; INFO: Return type mismatch int vs none. +(defmethod + copy-cam-float-seeker + cam-float-seeker + ((obj cam-float-seeker) (arg0 cam-float-seeker)) + (set! (-> obj target) (-> arg0 target)) + (set! (-> obj value) (-> arg0 value)) + (set! (-> obj vel) (-> arg0 vel)) + (set! (-> obj accel) (-> arg0 accel)) + (set! (-> obj max-vel) (-> arg0 max-vel)) + (set! (-> obj max-partial) (-> arg0 max-partial)) + (none) + ) + +;; definition for method 11 of type cam-float-seeker +;; INFO: Return type mismatch int vs none. +(defmethod TODO-RENAME-11 cam-float-seeker ((obj cam-float-seeker) (arg0 float)) + (let ((f0-0 0.0)) + ) + (let ((f0-1 0.0)) + ) + (let* ((f1-2 (- (+ (-> obj target) arg0) (-> obj value))) + (f0-5 (* (-> obj max-partial) (fabs f1-2))) + ) + (let ((f1-3 (* f1-2 (* (-> obj accel) (-> *display* time-adjust-ratio))))) + (set! (-> obj vel) (+ (-> obj vel) f1-3)) + ) + (let ((f1-6 (fabs (-> obj vel))) + (f0-6 (fmin f0-5 (-> obj max-vel))) + ) + (if (< f0-6 f1-6) + (set! (-> obj vel) (* (-> obj vel) (/ f0-6 f1-6))) + ) + ) + ) + (let ((f0-10 (* (-> obj vel) (-> *display* time-adjust-ratio)))) + (set! (-> obj value) (+ (-> obj value) f0-10)) + ) + (none) + ) + +;; definition for method 12 of type cam-float-seeker +(defmethod TODO-RENAME-12 cam-float-seeker ((obj cam-float-seeker) (arg0 float)) + (set! (-> obj value) (+ (-> obj target) arg0)) + (let ((f0-2 0.0)) + (set! (-> obj vel) f0-2) + f0-2 + ) + ) + +;; definition of type cam-vector-seeker +(deftype cam-vector-seeker (structure) + ((target vector :inline :offset-assert 0) + (value vector :inline :offset-assert 16) + (vel vector :inline :offset-assert 32) + (accel float :offset-assert 48) + (max-vel float :offset-assert 52) + (max-partial float :offset-assert 56) + ) + :method-count-assert 11 + :size-assert #x3c + :flag-assert #xb0000003c + (:methods + (TODO-RENAME-9 (_type_ vector float float float) none 9) + (TODO-RENAME-10 (_type_ vector) none 10) + ) + ) + +;; definition for method 9 of type cam-vector-seeker +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defmethod + TODO-RENAME-9 + cam-vector-seeker + ((obj cam-vector-seeker) (arg0 vector) (arg1 float) (arg2 float) (arg3 float)) + (rlet ((vf0 :class vf)) + (init-vf0-vector) + (cond + (arg0 + (let ((v1-0 (-> obj target))) + (set! (-> v1-0 quad) (-> arg0 quad)) + ) + (let ((v1-1 (-> obj value))) + (set! (-> v1-1 quad) (-> arg0 quad)) + ) + ) + (else + (.svf (&-> (-> obj target) quad) vf0) + (.svf (&-> (-> obj value) quad) vf0) + ) + ) + (.svf (&-> (-> obj vel) quad) vf0) + (set! (-> obj accel) arg1) + (set! (-> obj max-vel) arg2) + (set! (-> obj max-partial) arg3) + (none) + ) + ) + +;; definition for method 10 of type cam-vector-seeker +;; INFO: Return type mismatch int vs none. +(defmethod + TODO-RENAME-10 + cam-vector-seeker + ((obj cam-vector-seeker) (arg0 vector)) + (rlet ((vf0 :class vf) + (vf1 :class vf) + (vf2 :class vf) + (vf4 :class vf) + (vf5 :class vf) + (vf6 :class vf) + ) + (init-vf0-vector) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (let ((f0-0 0.0)) + ) + (cond + (arg0 + (let ((a0-1 gp-0)) + (let ((v1-0 (-> obj target))) + (.mov.vf vf6 vf0 :mask #b1000) + (.lvf vf4 (&-> v1-0 quad)) + ) + (.lvf vf5 (&-> arg0 quad)) + (.add.vf vf6 vf4 vf5 :mask #b111) + (.svf (&-> a0-1 quad) vf6) + ) + (let ((a1-1 gp-0)) + (let ((v1-1 gp-0) + (a0-2 (-> obj value)) + ) + (.lvf vf4 (&-> v1-1 quad)) + (.lvf vf5 (&-> a0-2 quad)) + ) + (.mov.vf vf6 vf0 :mask #b1000) + (.sub.vf vf6 vf4 vf5 :mask #b111) + (.svf (&-> a1-1 quad) vf6) + ) + ) + (else + (let ((a1-2 gp-0)) + (let ((v1-2 (-> obj target)) + (a0-3 (-> obj value)) + ) + (.lvf vf4 (&-> v1-2 quad)) + (.lvf vf5 (&-> a0-3 quad)) + ) + (.mov.vf vf6 vf0 :mask #b1000) + (.sub.vf vf6 vf4 vf5 :mask #b111) + (.svf (&-> a1-2 quad) vf6) + ) + ) + ) + (let ((f30-1 (* (-> obj max-partial) (vector-length gp-0)))) + (let ((v1-3 gp-0)) + (let ((a0-5 gp-0) + (f0-3 (* (-> obj accel) (-> *display* time-adjust-ratio))) + ) + (.lvf vf1 (&-> a0-5 quad)) + (let ((a0-6 f0-3)) + (.mov vf2 a0-6) + ) + ) + (.add.x.vf vf1 vf0 vf0 :mask #b1000) + (.mul.x.vf vf1 vf1 vf2 :mask #b111) + (.svf (&-> v1-3 quad) vf1) + ) + (let ((a1-4 (-> obj vel))) + (let ((v1-4 (-> obj vel)) + (a0-7 gp-0) + ) + (.mov.vf vf6 vf0 :mask #b1000) + (.lvf vf4 (&-> v1-4 quad)) + (.lvf vf5 (&-> a0-7 quad)) + ) + (.add.vf vf6 vf4 vf5 :mask #b111) + (.svf (&-> a1-4 quad) vf6) + ) + (let ((f0-4 (vector-length (-> obj vel))) + (f1-2 (fmin f30-1 (-> obj max-vel))) + ) + (when (< f1-2 f0-4) + (let ((v1-6 (-> obj vel))) + (let ((a0-9 (-> obj vel)) + (f0-5 (/ f1-2 f0-4)) + ) + (.lvf vf1 (&-> a0-9 quad)) + (let ((a0-10 f0-5)) + (.mov vf2 a0-10) + ) + ) + (.add.x.vf vf1 vf0 vf0 :mask #b1000) + (.mul.x.vf vf1 vf1 vf2 :mask #b111) + (.svf (&-> v1-6 quad) vf1) + ) + ) + ) + ) + (let ((v1-7 gp-0)) + (let ((a0-11 (-> obj vel)) + (f0-6 (-> *display* time-adjust-ratio)) + ) + (.lvf vf1 (&-> a0-11 quad)) + (let ((a0-12 f0-6)) + (.mov vf2 a0-12) + ) + ) + (.add.x.vf vf1 vf0 vf0 :mask #b1000) + (.mul.x.vf vf1 vf1 vf2 :mask #b111) + (.svf (&-> v1-7 quad) vf1) + ) + (let ((v1-8 (-> obj value))) + (let ((a0-13 (-> obj value))) + (.mov.vf vf6 vf0 :mask #b1000) + (.lvf vf4 (&-> a0-13 quad)) + ) + (.lvf vf5 (&-> gp-0 quad)) + (.add.vf vf6 vf4 vf5 :mask #b111) + (.svf (&-> v1-8 quad) vf6) + ) + ) + (none) + ) + ) + +;; definition of type cam-rotation-tracker +(deftype cam-rotation-tracker (structure) + ((inv-mat matrix :inline :offset-assert 0) + (no-follow basic :offset-assert 64) + (follow-pt vector :inline :offset-assert 80) + (follow-off vector :inline :offset-assert 96) + (follow-blend float :offset-assert 112) + (tilt-adjust cam-float-seeker :inline :offset-assert 116) + (use-point-of-interest basic :offset-assert 140) + (point-of-interest vector :inline :offset-assert 144) + (point-of-interest-blend cam-float-seeker :inline :offset-assert 160) + (underwater-blend cam-float-seeker :inline :offset-assert 184) + ) + :method-count-assert 9 + :size-assert #xd0 + :flag-assert #x9000000d0 + ) + +;; definition of type camera-combiner +(deftype camera-combiner (process) + ((trans vector :inline :offset-assert 112) + (inv-camera-rot matrix :inline :offset-assert 128) + (fov float :offset-assert 192) + (interp-val float :offset-assert 196) + (interp-step float :offset-assert 200) + (dist-from-src float :offset-assert 204) + (dist-from-dest float :offset-assert 208) + (flip-control-axis vector :inline :offset-assert 224) + (velocity vector :inline :offset-assert 240) + (tracking-status uint64 :offset-assert 256) + (tracking-options int32 :offset-assert 264) + (tracking cam-rotation-tracker :inline :offset-assert 272) + ) + :heap-base #x170 + :method-count-assert 14 + :size-assert #x1e0 + :flag-assert #xe017001e0 + ) + +;; definition of type camera-slave +(deftype camera-slave (process) + ((trans vector :inline :offset-assert 112) + (fov float :offset-assert 128) + (fov0 float :offset-assert 132) + (fov1 float :offset-assert 136) + (fov-index cam-index :inline :offset-assert 144) + (tracking cam-rotation-tracker :inline :offset-assert 192) + (view-off-param float :offset-assert 400) + (view-off vector :inline :offset-assert 416) + (min-z-override float :offset-assert 432) + (view-flat vector :inline :offset-assert 448) + (string-vel-dir uint32 :offset-assert 464) + (string-trans vector :inline :offset-assert 480) + (position-spline tracking-spline :inline :offset-assert 496) + (pivot-pt vector :inline :offset-assert 2144) + (pivot-rad float :offset-assert 2160) + (circular-follow vector :inline :offset-assert 2176) + (max-angle-offset float :offset-assert 2192) + (max-angle-curr float :offset-assert 2196) + (options uint32 :offset-assert 2200) + (cam-entity basic :offset-assert 2204) + (velocity vector :inline :offset-assert 2208) + (desired-pos vector :inline :offset-assert 2224) + (time-dist-too-far uint32 :offset-assert 2240) + (los-state uint32 :offset-assert 2244) + (good-point vector :inline :offset-assert 2256) + (los-tgt-spline-pt int32 :offset-assert 2272) + (los-tgt-spline-pt-incarnation int32 :offset-assert 2276) + (los-last-pos vector :inline :offset-assert 2288) + (intro-curve curve :inline :offset-assert 2304) + (intro-offset vector :inline :offset-assert 2336) + (intro-t float :offset-assert 2352) + (intro-t-step float :offset-assert 2356) + (outro-exit-value float :offset-assert 2360) + (spline-exists basic :offset-assert 2364) + (spline-curve curve :inline :offset-assert 2368) + (spline-offset vector :inline :offset-assert 2400) + (index cam-index :inline :offset-assert 2416) + (saved-pt vector :inline :offset-assert 2464) + (spline-tt float :offset-assert 2480) + (spline-follow-dist float :offset-assert 2484) + (change-event-from uint32 :offset-assert 2488) + (enter-has-run basic :offset-assert 2492) + (blend-from-type uint64 :offset-assert 2496) + (blend-to-type uint64 :offset-assert 2504) + (have-phony-joystick basic :offset-assert 2512) + (phony-joystick-x float :offset-assert 2516) + (phony-joystick-y float :offset-assert 2520) + (string-min-val vector :inline :offset-assert 2528) + (string-max-val vector :inline :offset-assert 2544) + (string-val-locked basic :offset-assert 2560) + ) + :heap-base #x9a0 + :method-count-assert 14 + :size-assert #xa04 + :flag-assert #xe09a00a04 + ) + +;; definition of type camera-master +(deftype camera-master (process) + ((master-options uint32 :offset-assert 112) + (num-slaves int32 :offset-assert 116) + (slave basic 2 :offset-assert 120) + (slave-options uint32 :offset-assert 128) + (view-off-param-save float :offset-assert 132) + (changer uint32 :offset-assert 136) + (cam-entity basic :offset-assert 140) + (stringMinLength float :offset-assert 144) + (stringMaxLength float :offset-assert 148) + (stringMinHeight float :offset-assert 152) + (stringMaxHeight float :offset-assert 156) + (string-min cam-vector-seeker :inline :offset-assert 160) + (string-max cam-vector-seeker :inline :offset-assert 224) + (string-push-z float :offset-assert 284) + (stringCliffHeight float :offset-assert 288) + (no-intro uint32 :offset-assert 292) + (force-blend uint32 :offset-assert 296) + (force-blend-time uint32 :offset-assert 300) + (local-down vector :inline :offset-assert 304) + (drawable-target uint64 :offset-assert 320) + (which-bone int32 :offset-assert 328) + (pov-handle uint64 :offset-assert 336) + (pov-bone int32 :offset-assert 344) + (being-attacked basic :offset-assert 348) + (attack-start uint64 :offset-assert 352) + (on-ground basic :offset-assert 360) + (under-water int32 :offset-assert 364) + (on-pole basic :offset-assert 368) + (tgt-rot-mat matrix :inline :offset-assert 384) + (tgt-face-mat matrix :inline :offset-assert 448) + (tpos-old vector :inline :offset-assert 512) + (tpos-curr vector :inline :offset-assert 528) + (target-height float :offset-assert 544) + (tpos-old-adj vector :inline :offset-assert 560) + (tpos-curr-adj vector :inline :offset-assert 576) + (tpos-tgt vector :inline :offset-assert 592) + (upspeed float :offset-assert 608) + (pitch-off vector :inline :offset-assert 624) + (foot-offset float :offset-assert 640) + (head-offset float :offset-assert 644) + (target-spline tracking-spline :inline :offset-assert 656) + (ease-from vector :inline :offset-assert 2304) + (ease-t float :offset-assert 2320) + (ease-step float :offset-assert 2324) + (ease-to vector :inline :offset-assert 2336) + (outro-curve curve :inline :offset-assert 2352) + (outro-t float :offset-assert 2372) + (outro-t-step float :offset-assert 2376) + (outro-exit-value float :offset-assert 2380) + (water-drip-time uint64 :offset-assert 2384) + (water-drip basic :offset-assert 2392) + (water-drip-mult float :offset-assert 2396) + (water-drip-speed float :offset-assert 2400) + ) + :heap-base #x900 + :method-count-assert 14 + :size-assert #x964 + :flag-assert #xe09000964 + ) diff --git a/goal_src/engine/entity/entity-h.gc b/goal_src/engine/entity/entity-h.gc index 7639198253..dec48318ad 100644 --- a/goal_src/engine/entity/entity-h.gc +++ b/goal_src/engine/entity/entity-h.gc @@ -5,3 +5,207 @@ ;; name in dgo: entity-h ;; dgos: GAME, ENGINE +;; definition for symbol *generate-actor-vis*, type symbol +(define *generate-actor-vis* #f) + +;; definition for symbol *generate-actor-vis-start*, type symbol +(define *generate-actor-vis-start* #f) + +;; definition for symbol *generate-actor-vis-output*, type symbol +(define *generate-actor-vis-output* #f) + +;; definition of type entity-perm +(deftype entity-perm (structure) + ((user-object object 2 :offset-assert 0) + (user-uint64 uint64 :offset 0) + (user-float float 2 :offset 0) + (user-int32 int32 2 :offset 0) + (user-uint32 uint32 2 :offset 0) + (user-int16 int16 4 :offset 0) + (user-uint16 uint16 4 :offset 0) + (user-int8 int8 8 :offset 0) + (user-uint8 uint8 8 :offset 0) + (status uint16 :offset-assert 8) + (dummy uint8 1 :offset-assert 10) + (task uint8 :offset-assert 11) + (aid uint32 :offset-assert 12) + (quad uint128 :offset 0) + ) + :pack-me + :method-count-assert 10 + :size-assert #x10 + :flag-assert #xa00000010 + (:methods + (dummy-9 () none 9) + ) + ) + +;; definition of type entity-links +(deftype entity-links (structure) + ((prev-link entity-links :offset-assert 0) + (next-link entity-links :offset-assert 4) + (entity basic :offset-assert 8) + (process basic :offset-assert 12) + (level basic :offset-assert 16) + (vis-id int32 :offset-assert 20) + (trans vector :inline :offset-assert 32) + (perm entity-perm :inline :offset-assert 48) + (status uint16 :offset 56) + (aid uint32 :offset 60) + (task uint8 :offset 59) + ) + :method-count-assert 10 + :size-assert #x40 + :flag-assert #xa00000040 + (:methods + (dummy-9 () none 9) + ) + ) + +;; definition of type entity-perm-array +(deftype entity-perm-array (inline-array-class) + () + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(set! (-> entity-perm-array heap-base) (the-as uint 16)) + +;; definition of type entity-links-array +(deftype entity-links-array (inline-array-class) + () + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(set! (-> entity-links-array heap-base) (the-as uint 64)) + +;; definition of type entity +(deftype entity (res-lump) + ((trans vector :inline :offset-assert 32) + (aid uint32 :offset-assert 48) + ) + :method-count-assert 27 + :size-assert #x34 + :flag-assert #x1b00000034 + (:methods + (dummy-22 () none 22) + (dummy-23 () none 23) + (dummy-24 () none 24) + (dummy-25 () none 25) + (dummy-26 () none 26) + ) + ) + +;; definition of type entity-camera +(deftype entity-camera (entity) + ((connect connectable :inline :offset-assert 64) + ) + :method-count-assert 27 + :size-assert #x50 + :flag-assert #x1b00000050 + ) + +;; definition of type entity-ambient-data +(deftype entity-ambient-data (structure) + ((user-object object 3 :offset-assert 0) + (function basic :offset-assert 12) + (quad uint128 :offset 0) + (user-uint64 uint64 1 :offset 0) + (user-float float 3 :offset 0) + (user-int32 int32 3 :offset 0) + (user-uint32 uint32 3 :offset 0) + (user-int16 int16 6 :offset 0) + (user-uint16 uint16 6 :offset 0) + (user-int8 int8 12 :offset 0) + (user-uint8 uint8 12 :offset 0) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +;; definition of type entity-ambient-data-array +(deftype entity-ambient-data-array (inline-array-class) + () + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +(set! (-> entity-ambient-data-array heap-base) (the-as uint 16)) + +;; definition of type entity-ambient +(deftype entity-ambient (entity) + () + :method-count-assert 29 + :size-assert #x34 + :flag-assert #x1d00000034 + (:methods + (dummy-27 () none 27) + (dummy-28 () none 28) + ) + ) + +;; definition of type entity-actor +(declare-type nav-mesh basic) +(deftype entity-actor (entity) + ((nav-mesh nav-mesh :offset-assert 52) + (etype basic :offset-assert 56) + (task uint8 :offset-assert 60) + (vis-id uint16 :offset-assert 62) + (quat quaternion :inline :offset-assert 64) + ) + :method-count-assert 31 + :size-assert #x50 + :flag-assert #x1f00000050 + (:methods + (dummy-27 () none 27) + (dummy-28 () none 28) + (dummy-29 () none 29) + (dummy-30 () none 30) + ) + ) + +;; definition of type entity-info +(deftype entity-info (basic) + ((ptype basic :offset-assert 4) + (package basic :offset-assert 8) + (art-group basic :offset-assert 12) + (pool basic :offset-assert 16) + (heap-size int32 :offset-assert 20) + ) + :method-count-assert 9 + :size-assert #x18 + :flag-assert #x900000018 + ) + +;; NOTE - this is a strange pattern...this symbol isn't defined until a later file 'navigate' +;; But this seems to be setting the symbol to nothing if it's not found, but of course, our compiler freaks out +(define-extern entity-nav-login function) +(if (zero? entity-nav-login) + (set! entity-nav-login nothing) + ) + +;; definition of type actor-bank +(deftype actor-bank (basic) + ((pause-dist float :offset-assert 4) + (birth-dist float :offset-assert 8) + (birth-max int32 :offset-assert 12) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +;; definition for symbol *ACTOR-bank*, type actor-bank +(define + *ACTOR-bank* + (new 'static 'actor-bank + :pause-dist 204800.0 + :birth-dist 901120.0 + :birth-max 10 + ) + ) diff --git a/test/decompiler/reference/all_forward_declarations.gc b/test/decompiler/reference/all_forward_declarations.gc index 63b8b56722..e3d1bcf67b 100644 --- a/test/decompiler/reference/all_forward_declarations.gc +++ b/test/decompiler/reference/all_forward_declarations.gc @@ -718,3 +718,49 @@ vec ) ) + +;; TODO - for entity-h +(declare-type nav-mesh basic) +(define-extern entity-nav-login function) +(deftype res-tag (uint128) + ((unk0 uint32 :offset 0 :size 32) + (unk1 uint16 :offset 32 :size 16) + (unk2 uint64 :offset 64 :size 64) + ) + :flag-assert #x900000010 + ) + +(deftype res-lump (basic) + ((length int32 :offset-assert 4) + (allocated-length int32 :offset-assert 8) + (data-base pointer :offset-assert 12) + (data-top pointer :offset-assert 16) + (data-size int32 :offset-assert 20) + (extra basic :offset-assert 24) + (tag (pointer res-tag) :offset-assert 28) + ) + :method-count-assert 22 + :size-assert #x20 + :flag-assert #x1600000020 + ;; field extra is a basic loaded with a signed load + (:methods + (new (symbol type int int) _type_ 0) + (dummy-9 (_type_ symbol symbol int symbol (pointer res-tag) pointer) symbol 9) + (dummy-10 (_type_ symbol symbol int symbol symbol pointer) int 10) + (dummy-11 (_type_ symbol symbol int int symbol pointer) int 11) + (dummy-12 (_type_ symbol symbol float float symbol pointer) float 12) + (dummy-13 (_type_ int) pointer 13) ;; advance tag pointer + (dummy-14 (_type_ uint) pointer 14) + (dummy-15 (_type_) none 15) + (dummy-16 (_type_ int int int int) none 16) + (dummy-17 (_type_ int int) res-lump 17) + (dummy-18 (_type_ int int) none 18) + (dummy-19 (_type_ symbol symbol int) int 19) + (dummy-20 (_type_ int int) none 20) + (dummy-21 (_type_ int int int int int) none 21) + ) + ) + +;; NOTE - forward declaration needed for cam-interface +(define-extern *camera-dummy-vector* vector) +(define-extern send-event-function (function process event-message-block object)) diff --git a/test/decompiler/reference/engine/camera/cam-interface-h_REF.gc b/test/decompiler/reference/engine/camera/cam-interface-h_REF.gc new file mode 100644 index 0000000000..f3be3c33c8 --- /dev/null +++ b/test/decompiler/reference/engine/camera/cam-interface-h_REF.gc @@ -0,0 +1,31 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition for symbol *camera-read-analog*, type symbol +(define *camera-read-analog* #t) + +;; definition for symbol *camera-read-buttons*, type symbol +(define *camera-read-buttons* #t) + +;; definition for symbol *cam-free-move-along-z*, type symbol +(define *cam-free-move-along-z* #t) + +;; definition (perm) for symbol *camera-init-mat*, type matrix +(define-perm *camera-init-mat* matrix #f) + +;; definition (perm) for symbol *camera*, type camera-master +(define-perm *camera* camera-master #f) + +;; definition (perm) for symbol *camera-combiner*, type camera-combiner +(define-perm *camera-combiner* camera-combiner #f) + +;; definition (perm) for symbol *camera-orbit-target*, type process-drawable +(define-perm *camera-orbit-target* process-drawable #f) + +;; failed to figure out what this is: +(let ((v0-0 0)) + ) + + + + diff --git a/test/decompiler/reference/engine/camera/cam-interface_REF.gc b/test/decompiler/reference/engine/camera/cam-interface_REF.gc new file mode 100644 index 0000000000..11b26b9b1a --- /dev/null +++ b/test/decompiler/reference/engine/camera/cam-interface_REF.gc @@ -0,0 +1,133 @@ +;;-*-Lisp-*- +(in-package goal) + +(rlet ((vf0 :class vf)) +(init-vf0-vector) + +;; definition for function position-in-front-of-camera! +(defun position-in-front-of-camera! ((arg0 vector) (arg1 float) (arg2 float)) + (rlet ((vf0 :class vf) + (vf1 :class vf) + (vf2 :class vf) + (vf4 :class vf) + (vf5 :class vf) + (vf6 :class vf) + ) + (init-vf0-vector) + (let ((v1-0 arg0)) + (let ((a0-2 (&-> *math-camera* inv-camera-rot data 8)) + (f0-0 arg1) + ) + (.lvf vf1 a0-2) + (let ((a0-3 f0-0)) + (.mov vf2 a0-3) + ) + ) + (.add.x.vf vf1 vf0 vf0 :mask #b1000) + (.mul.x.vf vf1 vf1 vf2 :mask #b111) + (.svf (&-> v1-0 quad) vf1) + ) + (vector+float*! + arg0 + arg0 + (the-as vector (&-> *math-camera* inv-camera-rot data 4)) + arg2 + ) + (let ((a0-5 arg0)) + (let ((v1-3 arg0) + (a1-3 (-> *math-camera* trans)) + ) + (.mov.vf vf6 vf0 :mask #b1000) + (.lvf vf4 (&-> v1-3 quad)) + (.lvf vf5 (&-> a1-3 quad)) + ) + (.add.vf vf6 vf4 vf5 :mask #b111) + (.svf (&-> a0-5 quad) vf6) + ) + arg0 + ) + ) + +;; definition for function matrix-local->world +(defun matrix-local->world ((arg0 symbol)) + (if arg0 + (-> *math-camera* inv-camera-rot-smooth) + (-> *math-camera* inv-camera-rot) + ) + ) + +;; definition for function matrix-world->local +(defun matrix-world->local () + (-> *math-camera* camera-rot) + ) + +;; failed to figure out what this is: +(when (or (not *camera-dummy-vector*) (zero? *camera-dummy-vector*)) + (let ((v1-8 (new 'global 'vector))) + (.svf (&-> v1-8 quad) vf0) + (set! *camera-dummy-vector* v1-8) + ) + ) + +;; definition for function camera-pos +;; INFO: Return type mismatch object vs vector. +(defun camera-pos () + (the-as vector (cond + (*camera-combiner* + (-> *camera-combiner* stack) + ) + (*math-camera* + (-> *math-camera* trans) + ) + (else + *camera-dummy-vector* + ) + ) + ) + ) + +;; definition for function math-camera-pos +(defun math-camera-pos () + (-> *math-camera* trans) + ) + +;; definition for function camera-angle +(defun camera-angle () + (let ((f0-0 (-> *math-camera* camera-rot data 0)) + (f1-0 (-> *math-camera* camera-rot data 2)) + ) + (atan f1-0 f0-0) + ) + ) + +;; definition for function camera-teleport-to-entity +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defun camera-teleport-to-entity ((arg0 entity-actor)) + (local-vars (pp process)) + (let ((gp-0 (new 'stack 'transformq))) + (let ((v1-1 (-> gp-0 trans))) + (set! (-> v1-1 quad) (-> (the-as transform (-> arg0 extra)) scale quad)) + ) + (quaternion-copy! (the-as quaternion (-> gp-0 rot)) (-> arg0 quat)) + (vector-identity! (-> gp-0 scale)) + (let ((a1-2 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-2 from) pp) + (set! (-> a1-2 num-params) 1) + (set! (-> a1-2 message) 'teleport-to-transformq) + (set! (-> a1-2 param 0) (the-as uint gp-0)) + (send-event-function *camera* a1-2) + ) + ) + (let ((v0-4 0)) + ) + (none) + ) + +;; failed to figure out what this is: +(none) + +) + + + diff --git a/test/decompiler/reference/engine/camera/camera-h_REF.gc b/test/decompiler/reference/engine/camera/camera-h_REF.gc new file mode 100644 index 0000000000..d4551e1c12 --- /dev/null +++ b/test/decompiler/reference/engine/camera/camera-h_REF.gc @@ -0,0 +1,854 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type camera-bank +(deftype camera-bank (basic) + ((collide-move-rad float :offset-assert 4) + (joypad uint32 :offset-assert 8) + (min-detectable-velocity float :offset-assert 12) + (attack-timeout uint64 :offset-assert 16) + (default-string-max-y float :offset-assert 24) + (default-string-min-y float :offset-assert 28) + (default-string-max-z float :offset-assert 32) + (default-string-min-z float :offset-assert 36) + (default-string-push-z float :offset-assert 40) + (default-tilt-adjust float :offset-assert 44) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) + +;; definition for method 3 of type camera-bank +(defmethod inspect camera-bank ((obj camera-bank)) + (format #t "[~8x] ~A~%" obj (-> obj type)) + (format #t "~Tcollide-move-rad: ~f~%" (-> obj collide-move-rad)) + (format #t "~Tjoypad: ~D~%" (-> obj joypad)) + (format #t "~Tmin-detectable-velocity: ~f~%" (-> obj min-detectable-velocity)) + (format #t "~Tattack-timeout: ~D~%" (-> obj attack-timeout)) + (format + #t + "~Tdefault-string-max-y: (meters ~m)~%" + (-> obj default-string-max-y) + ) + (format + #t + "~Tdefault-string-min-y: (meters ~m)~%" + (-> obj default-string-min-y) + ) + (format + #t + "~Tdefault-string-max-z: (meters ~m)~%" + (-> obj default-string-max-z) + ) + (format + #t + "~Tdefault-string-min-z: (meters ~m)~%" + (-> obj default-string-min-z) + ) + (format + #t + "~Tdefault-string-push-z: (meters ~m)~%" + (-> obj default-string-push-z) + ) + (format #t "~Tdefault-tilt-adjust: (deg ~r)~%" (-> obj default-tilt-adjust)) + obj + ) + +;; definition for symbol *CAMERA-bank*, type camera-bank +(define + *CAMERA-bank* + (new 'static 'camera-bank + :collide-move-rad 1638.4 + :min-detectable-velocity 40.96 + :attack-timeout #x4b + :default-string-max-y 12288.0 + :default-string-min-y 4096.0 + :default-string-max-z 51200.0 + :default-string-min-z 20480.0 + :default-string-push-z 40960.0 + :default-tilt-adjust -1183.289 + ) + ) + +;; definition of type cam-index +(deftype cam-index (structure) + ((flags uint32 :offset-assert 0) + (vec uint128 2 :offset-assert 16) + ) + :method-count-assert 11 + :size-assert #x30 + :flag-assert #xb00000030 + (:methods + (dummy-9 () none 9) + (dummy-10 () none 10) + ) + ) + +;; definition for method 3 of type cam-index +(defmethod inspect cam-index ((obj cam-index)) + (format #t "[~8x] ~A~%" obj 'cam-index) + (format #t "~Tflags: ~D~%" (-> obj flags)) + (format #t "~Tvec[2] @ #x~X~%" (-> obj vec)) + obj + ) + +;; definition of type tracking-point +(deftype tracking-point (structure) + ((position vector :inline :offset-assert 0) + (direction vector :inline :offset-assert 16) + (tp-length float :offset-assert 32) + (next int32 :offset-assert 36) + (incarnation int32 :offset-assert 40) + ) + :method-count-assert 9 + :size-assert #x2c + :flag-assert #x90000002c + ) + +;; definition for method 3 of type tracking-point +(defmethod inspect tracking-point ((obj tracking-point)) + (format #t "[~8x] ~A~%" obj 'tracking-point) + (format #t "~Tposition: #~%" (-> obj position)) + (format #t "~Tdirection: #~%" (-> obj direction)) + (format #t "~Ttp-length: ~f~%" (-> obj tp-length)) + (format #t "~Tnext: ~D~%" (-> obj next)) + (format #t "~Tincarnation: ~D~%" (-> obj incarnation)) + obj + ) + +;; definition of type tracking-spline-sampler +(deftype tracking-spline-sampler (structure) + ((cur-pt int32 :offset-assert 0) + (partial-pt float :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) + +;; definition for method 3 of type tracking-spline-sampler +(defmethod inspect tracking-spline-sampler ((obj tracking-spline-sampler)) + (format #t "[~8x] ~A~%" obj 'tracking-spline-sampler) + (format #t "~Tcur-pt: ~D~%" (-> obj cur-pt)) + (format #t "~Tpartial-pt: ~f~%" (-> obj partial-pt)) + obj + ) + +;; definition of type tracking-spline +(deftype tracking-spline (structure) + ((point tracking-point 32 :inline :offset-assert 0) + (summed-len float :offset-assert 1536) + (free-point int32 :offset-assert 1540) + (used-point int32 :offset-assert 1544) + (partial-point float :offset-assert 1548) + (end-point int32 :offset-assert 1552) + (next-to-last-point int32 :offset-assert 1556) + (max-move float :offset-assert 1560) + (sample-len float :offset-assert 1564) + (used-count int32 :offset-assert 1568) + (old-position vector :inline :offset-assert 1584) + (debug-old-position vector :inline :offset-assert 1600) + (debug-out-position vector :inline :offset-assert 1616) + (debug-last-point int32 :offset-assert 1632) + ) + :method-count-assert 24 + :size-assert #x664 + :flag-assert #x1800000664 + (:methods + (dummy-9 () none 9) + (dummy-10 () none 10) + (dummy-11 () none 11) + (dummy-12 () none 12) + (dummy-13 () none 13) + (dummy-14 () none 14) + (dummy-15 () none 15) + (dummy-16 () none 16) + (dummy-17 () none 17) + (dummy-18 () none 18) + (dummy-19 () none 19) + (dummy-20 () none 20) + (dummy-21 () none 21) + (dummy-22 () none 22) + (dummy-23 () none 23) + ) + ) + +;; definition for method 3 of type tracking-spline +(defmethod inspect tracking-spline ((obj tracking-spline)) + (format #t "[~8x] ~A~%" obj 'tracking-spline) + (format #t "~Tpoint[32] @ #x~X~%" (-> obj point)) + (format #t "~Tsummed-len: ~f~%" (-> obj summed-len)) + (format #t "~Tfree-point: ~D~%" (-> obj free-point)) + (format #t "~Tused-point: ~D~%" (-> obj used-point)) + (format #t "~Tpartial-point: ~f~%" (-> obj partial-point)) + (format #t "~Tend-point: ~D~%" (-> obj end-point)) + (format #t "~Tnext-to-last-point: ~D~%" (-> obj next-to-last-point)) + (format #t "~Tmax-move: ~f~%" (-> obj max-move)) + (format #t "~Tsample-len: ~f~%" (-> obj sample-len)) + (format #t "~Tused-count: ~D~%" (-> obj used-count)) + (format #t "~Told-position: #~%" (-> obj old-position)) + (format + #t + "~Tdebug-old-position: #~%" + (-> obj debug-old-position) + ) + (format + #t + "~Tdebug-out-position: #~%" + (-> obj debug-out-position) + ) + (format #t "~Tdebug-last-point: ~D~%" (-> obj debug-last-point)) + obj + ) + +;; definition of type cam-float-seeker +(deftype cam-float-seeker (structure) + ((target float :offset-assert 0) + (value float :offset-assert 4) + (vel float :offset-assert 8) + (accel float :offset-assert 12) + (max-vel float :offset-assert 16) + (max-partial float :offset-assert 20) + ) + :pack-me + :method-count-assert 13 + :size-assert #x18 + :flag-assert #xd00000018 + (:methods + (init-cam-float-seeker (_type_ float float float float) none 9) + (copy-cam-float-seeker (_type_ _type_) none 10) + (TODO-RENAME-11 (_type_ float) none 11) + (TODO-RENAME-12 (_type_ float) float 12) + ) + ) + +;; definition for method 3 of type cam-float-seeker +(defmethod inspect cam-float-seeker ((obj cam-float-seeker)) + (format #t "[~8x] ~A~%" obj 'cam-float-seeker) + (format #t "~Ttarget: ~f~%" (-> obj target)) + (format #t "~Tvalue: ~f~%" (-> obj value)) + (format #t "~Tvel: ~f~%" (-> obj vel)) + (format #t "~Taccel: ~f~%" (-> obj accel)) + (format #t "~Tmax-vel: ~f~%" (-> obj max-vel)) + (format #t "~Tmax-partial: ~f~%" (-> obj max-partial)) + obj + ) + +;; definition for method 9 of type cam-float-seeker +;; INFO: Return type mismatch int vs none. +(defmethod + init-cam-float-seeker + cam-float-seeker + ((obj cam-float-seeker) (arg0 float) (arg1 float) (arg2 float) (arg3 float)) + (set! (-> obj target) arg0) + (set! (-> obj value) arg0) + (set! (-> obj vel) 0.0) + (set! (-> obj accel) arg1) + (set! (-> obj max-vel) arg2) + (set! (-> obj max-partial) arg3) + (let ((v0-0 0)) + ) + (none) + ) + +;; definition for method 10 of type cam-float-seeker +;; INFO: Return type mismatch int vs none. +(defmethod + copy-cam-float-seeker + cam-float-seeker + ((obj cam-float-seeker) (arg0 cam-float-seeker)) + (set! (-> obj target) (-> arg0 target)) + (set! (-> obj value) (-> arg0 value)) + (set! (-> obj vel) (-> arg0 vel)) + (set! (-> obj accel) (-> arg0 accel)) + (set! (-> obj max-vel) (-> arg0 max-vel)) + (set! (-> obj max-partial) (-> arg0 max-partial)) + (let ((v0-0 0)) + ) + (none) + ) + +;; definition for method 11 of type cam-float-seeker +;; INFO: Return type mismatch int vs none. +(defmethod TODO-RENAME-11 cam-float-seeker ((obj cam-float-seeker) (arg0 float)) + (let ((f0-0 0.0)) + ) + (let ((f0-1 0.0)) + ) + (let* ((f1-2 (- (+ (-> obj target) arg0) (-> obj value))) + (f0-5 (* (-> obj max-partial) (fabs f1-2))) + ) + (let ((f1-3 (* f1-2 (* (-> obj accel) (-> *display* time-adjust-ratio))))) + (set! (-> obj vel) (+ (-> obj vel) f1-3)) + ) + (let ((f1-6 (fabs (-> obj vel))) + (f0-6 (fmin f0-5 (-> obj max-vel))) + ) + (if (< f0-6 f1-6) + (set! (-> obj vel) (* (-> obj vel) (/ f0-6 f1-6))) + ) + ) + ) + (let ((f0-10 (* (-> obj vel) (-> *display* time-adjust-ratio)))) + (set! (-> obj value) (+ (-> obj value) f0-10)) + ) + (let ((v0-0 0)) + ) + (none) + ) + +;; definition for method 12 of type cam-float-seeker +(defmethod TODO-RENAME-12 cam-float-seeker ((obj cam-float-seeker) (arg0 float)) + (set! (-> obj value) (+ (-> obj target) arg0)) + (let ((f0-2 0.0)) + (set! (-> obj vel) f0-2) + f0-2 + ) + ) + +;; definition of type cam-vector-seeker +(deftype cam-vector-seeker (structure) + ((target vector :inline :offset-assert 0) + (value vector :inline :offset-assert 16) + (vel vector :inline :offset-assert 32) + (accel float :offset-assert 48) + (max-vel float :offset-assert 52) + (max-partial float :offset-assert 56) + ) + :method-count-assert 11 + :size-assert #x3c + :flag-assert #xb0000003c + (:methods + (TODO-RENAME-9 (_type_ vector float float float) none 9) + (TODO-RENAME-10 (_type_ vector) none 10) + ) + ) + +;; definition for method 3 of type cam-vector-seeker +(defmethod inspect cam-vector-seeker ((obj cam-vector-seeker)) + (format #t "[~8x] ~A~%" obj 'cam-vector-seeker) + (format #t "~Ttarget: #~%" (-> obj target)) + (format #t "~Tvalue: #~%" (-> obj value)) + (format #t "~Tvel: #~%" (-> obj vel)) + (format #t "~Taccel: ~f~%" (-> obj accel)) + (format #t "~Tmax-vel: ~f~%" (-> obj max-vel)) + (format #t "~Tmax-partial: ~f~%" (-> obj max-partial)) + obj + ) + +;; definition for method 9 of type cam-vector-seeker +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defmethod + TODO-RENAME-9 + cam-vector-seeker + ((obj cam-vector-seeker) (arg0 vector) (arg1 float) (arg2 float) (arg3 float)) + (rlet ((vf0 :class vf)) + (init-vf0-vector) + (cond + (arg0 + (let ((v1-0 (-> obj target))) + (set! (-> v1-0 quad) (-> arg0 quad)) + ) + (let ((v1-1 (-> obj value))) + (set! (-> v1-1 quad) (-> arg0 quad)) + ) + ) + (else + (.svf (&-> (-> obj target) quad) vf0) + (.svf (&-> (-> obj value) quad) vf0) + ) + ) + (.svf (&-> (-> obj vel) quad) vf0) + (set! (-> obj accel) arg1) + (set! (-> obj max-vel) arg2) + (set! (-> obj max-partial) arg3) + (let ((v0-0 0)) + ) + (none) + ) + ) + +;; definition for method 10 of type cam-vector-seeker +;; INFO: Return type mismatch int vs none. +(defmethod + TODO-RENAME-10 + cam-vector-seeker + ((obj cam-vector-seeker) (arg0 vector)) + (rlet ((vf0 :class vf) + (vf1 :class vf) + (vf2 :class vf) + (vf4 :class vf) + (vf5 :class vf) + (vf6 :class vf) + ) + (init-vf0-vector) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (let ((f0-0 0.0)) + ) + (cond + (arg0 + (let ((a0-1 gp-0)) + (let ((v1-0 (-> obj target))) + (.mov.vf vf6 vf0 :mask #b1000) + (.lvf vf4 (&-> v1-0 quad)) + ) + (.lvf vf5 (&-> arg0 quad)) + (.add.vf vf6 vf4 vf5 :mask #b111) + (.svf (&-> a0-1 quad) vf6) + ) + (let ((a1-1 gp-0)) + (let ((v1-1 gp-0) + (a0-2 (-> obj value)) + ) + (.lvf vf4 (&-> v1-1 quad)) + (.lvf vf5 (&-> a0-2 quad)) + ) + (.mov.vf vf6 vf0 :mask #b1000) + (.sub.vf vf6 vf4 vf5 :mask #b111) + (.svf (&-> a1-1 quad) vf6) + ) + ) + (else + (let ((a1-2 gp-0)) + (let ((v1-2 (-> obj target)) + (a0-3 (-> obj value)) + ) + (.lvf vf4 (&-> v1-2 quad)) + (.lvf vf5 (&-> a0-3 quad)) + ) + (.mov.vf vf6 vf0 :mask #b1000) + (.sub.vf vf6 vf4 vf5 :mask #b111) + (.svf (&-> a1-2 quad) vf6) + ) + ) + ) + (let ((f30-1 (* (-> obj max-partial) (vector-length gp-0)))) + (let ((v1-3 gp-0)) + (let ((a0-5 gp-0) + (f0-3 (* (-> obj accel) (-> *display* time-adjust-ratio))) + ) + (.lvf vf1 (&-> a0-5 quad)) + (let ((a0-6 f0-3)) + (.mov vf2 a0-6) + ) + ) + (.add.x.vf vf1 vf0 vf0 :mask #b1000) + (.mul.x.vf vf1 vf1 vf2 :mask #b111) + (.svf (&-> v1-3 quad) vf1) + ) + (let ((a1-4 (-> obj vel))) + (let ((v1-4 (-> obj vel)) + (a0-7 gp-0) + ) + (.mov.vf vf6 vf0 :mask #b1000) + (.lvf vf4 (&-> v1-4 quad)) + (.lvf vf5 (&-> a0-7 quad)) + ) + (.add.vf vf6 vf4 vf5 :mask #b111) + (.svf (&-> a1-4 quad) vf6) + ) + (let ((f0-4 (vector-length (-> obj vel))) + (f1-2 (fmin f30-1 (-> obj max-vel))) + ) + (when (< f1-2 f0-4) + (let ((v1-6 (-> obj vel))) + (let ((a0-9 (-> obj vel)) + (f0-5 (/ f1-2 f0-4)) + ) + (.lvf vf1 (&-> a0-9 quad)) + (let ((a0-10 f0-5)) + (.mov vf2 a0-10) + ) + ) + (.add.x.vf vf1 vf0 vf0 :mask #b1000) + (.mul.x.vf vf1 vf1 vf2 :mask #b111) + (.svf (&-> v1-6 quad) vf1) + ) + ) + ) + ) + (let ((v1-7 gp-0)) + (let ((a0-11 (-> obj vel)) + (f0-6 (-> *display* time-adjust-ratio)) + ) + (.lvf vf1 (&-> a0-11 quad)) + (let ((a0-12 f0-6)) + (.mov vf2 a0-12) + ) + ) + (.add.x.vf vf1 vf0 vf0 :mask #b1000) + (.mul.x.vf vf1 vf1 vf2 :mask #b111) + (.svf (&-> v1-7 quad) vf1) + ) + (let ((v1-8 (-> obj value))) + (let ((a0-13 (-> obj value))) + (.mov.vf vf6 vf0 :mask #b1000) + (.lvf vf4 (&-> a0-13 quad)) + ) + (.lvf vf5 (&-> gp-0 quad)) + (.add.vf vf6 vf4 vf5 :mask #b111) + (.svf (&-> v1-8 quad) vf6) + ) + ) + (let ((v0-2 0)) + ) + (none) + ) + ) + +;; definition of type cam-rotation-tracker +(deftype cam-rotation-tracker (structure) + ((inv-mat matrix :inline :offset-assert 0) + (no-follow basic :offset-assert 64) + (follow-pt vector :inline :offset-assert 80) + (follow-off vector :inline :offset-assert 96) + (follow-blend float :offset-assert 112) + (tilt-adjust cam-float-seeker :inline :offset-assert 116) + (use-point-of-interest basic :offset-assert 140) + (point-of-interest vector :inline :offset-assert 144) + (point-of-interest-blend cam-float-seeker :inline :offset-assert 160) + (underwater-blend cam-float-seeker :inline :offset-assert 184) + ) + :method-count-assert 9 + :size-assert #xd0 + :flag-assert #x9000000d0 + ) + +;; definition for method 3 of type cam-rotation-tracker +(defmethod inspect cam-rotation-tracker ((obj cam-rotation-tracker)) + (format #t "[~8x] ~A~%" obj 'cam-rotation-tracker) + (format #t "~Tinv-mat: ~`matrix`P~%" (-> obj inv-mat)) + (format #t "~Tno-follow: ~A~%" (-> obj no-follow)) + (format #t "~Tfollow-pt: ~`vector`P~%" (-> obj follow-pt)) + (format #t "~Tfollow-off: ~`vector`P~%" (-> obj follow-off)) + (format #t "~Tfollow-blend: ~f~%" (-> obj follow-blend)) + (format #t "~Ttilt-adjust: #~%" (-> obj tilt-adjust)) + (format #t "~Tuse-point-of-interest: ~A~%" (-> obj use-point-of-interest)) + (format #t "~Tpoint-of-interest: ~`vector`P~%" (-> obj point-of-interest)) + (format + #t + "~Tpoint-of-interest-blend: #~%" + (-> obj point-of-interest-blend) + ) + (format + #t + "~Tunderwater-blend: #~%" + (-> obj underwater-blend) + ) + obj + ) + +;; definition of type camera-combiner +(deftype camera-combiner (process) + ((trans vector :inline :offset-assert 112) + (inv-camera-rot matrix :inline :offset-assert 128) + (fov float :offset-assert 192) + (interp-val float :offset-assert 196) + (interp-step float :offset-assert 200) + (dist-from-src float :offset-assert 204) + (dist-from-dest float :offset-assert 208) + (flip-control-axis vector :inline :offset-assert 224) + (velocity vector :inline :offset-assert 240) + (tracking-status uint64 :offset-assert 256) + (tracking-options int32 :offset-assert 264) + (tracking cam-rotation-tracker :inline :offset-assert 272) + ) + :heap-base #x170 + :method-count-assert 14 + :size-assert #x1e0 + :flag-assert #xe017001e0 + ) + +;; definition for method 3 of type camera-combiner +(defmethod inspect camera-combiner ((obj camera-combiner)) + (let ((t9-0 (method-of-type process inspect))) + (t9-0 obj) + ) + (format #t "~T~Ttrans: ~`vector`P~%" (-> obj stack)) + (format #t "~T~Tinv-camera-rot: ~`matrix`P~%" (&-> obj stack 16)) + (format #t "~T~Tfov: ~f~%" (-> obj fov)) + (format #t "~T~Tinterp-val: ~f~%" (-> obj interp-val)) + (format #t "~T~Tinterp-step: ~f~%" (-> obj interp-step)) + (format #t "~T~Tdist-from-src: ~f~%" (-> obj dist-from-src)) + (format #t "~T~Tdist-from-dest: ~f~%" (-> obj dist-from-dest)) + (format #t "~T~Tflip-control-axis: #~%" (&-> obj stack 112)) + (format #t "~T~Tvelocity: #~%" (&-> obj stack 128)) + (format #t "~T~Ttracking-status: ~D~%" (-> obj tracking-status)) + (format #t "~T~Ttracking-options: ~D~%" (-> obj tracking-options)) + (format + #t + "~T~Ttracking: #~%" + (&-> obj stack 160) + ) + obj + ) + +;; definition of type camera-slave +(deftype camera-slave (process) + ((trans vector :inline :offset-assert 112) + (fov float :offset-assert 128) + (fov0 float :offset-assert 132) + (fov1 float :offset-assert 136) + (fov-index cam-index :inline :offset-assert 144) + (tracking cam-rotation-tracker :inline :offset-assert 192) + (view-off-param float :offset-assert 400) + (view-off vector :inline :offset-assert 416) + (min-z-override float :offset-assert 432) + (view-flat vector :inline :offset-assert 448) + (string-vel-dir uint32 :offset-assert 464) + (string-trans vector :inline :offset-assert 480) + (position-spline tracking-spline :inline :offset-assert 496) + (pivot-pt vector :inline :offset-assert 2144) + (pivot-rad float :offset-assert 2160) + (circular-follow vector :inline :offset-assert 2176) + (max-angle-offset float :offset-assert 2192) + (max-angle-curr float :offset-assert 2196) + (options uint32 :offset-assert 2200) + (cam-entity basic :offset-assert 2204) + (velocity vector :inline :offset-assert 2208) + (desired-pos vector :inline :offset-assert 2224) + (time-dist-too-far uint32 :offset-assert 2240) + (los-state uint32 :offset-assert 2244) + (good-point vector :inline :offset-assert 2256) + (los-tgt-spline-pt int32 :offset-assert 2272) + (los-tgt-spline-pt-incarnation int32 :offset-assert 2276) + (los-last-pos vector :inline :offset-assert 2288) + (intro-curve curve :inline :offset-assert 2304) + (intro-offset vector :inline :offset-assert 2336) + (intro-t float :offset-assert 2352) + (intro-t-step float :offset-assert 2356) + (outro-exit-value float :offset-assert 2360) + (spline-exists basic :offset-assert 2364) + (spline-curve curve :inline :offset-assert 2368) + (spline-offset vector :inline :offset-assert 2400) + (index cam-index :inline :offset-assert 2416) + (saved-pt vector :inline :offset-assert 2464) + (spline-tt float :offset-assert 2480) + (spline-follow-dist float :offset-assert 2484) + (change-event-from uint32 :offset-assert 2488) + (enter-has-run basic :offset-assert 2492) + (blend-from-type uint64 :offset-assert 2496) + (blend-to-type uint64 :offset-assert 2504) + (have-phony-joystick basic :offset-assert 2512) + (phony-joystick-x float :offset-assert 2516) + (phony-joystick-y float :offset-assert 2520) + (string-min-val vector :inline :offset-assert 2528) + (string-max-val vector :inline :offset-assert 2544) + (string-val-locked basic :offset-assert 2560) + ) + :heap-base #x9a0 + :method-count-assert 14 + :size-assert #xa04 + :flag-assert #xe09a00a04 + ) + +;; definition for method 3 of type camera-slave +(defmethod inspect camera-slave ((obj camera-slave)) + (let ((t9-0 (method-of-type process inspect))) + (t9-0 obj) + ) + (format #t "~T~Ttrans: ~`vector`P~%" (-> obj stack)) + (format #t "~T~Tfov: ~f~%" (-> obj fov)) + (format #t "~T~Tfov0: ~f~%" (-> obj fov0)) + (format #t "~T~Tfov1: ~f~%" (-> obj fov1)) + (format #t "~T~Tfov-index: #~%" (&-> obj stack 32)) + (format + #t + "~T~Ttracking: #~%" + (&-> obj stack 80) + ) + (format #t "~T~Tview-off-param: ~f~%" (-> obj view-off-param)) + (format #t "~T~Tview-off: ~`vector`P~%" (&-> obj stack 304)) + (format #t "~T~Tmin-z-override: ~f~%" (-> obj min-z-override)) + (format #t "~T~Tview-flat: ~`vector`P~%" (&-> obj stack 336)) + (format #t "~T~Tstring-vel-dir: ~D~%" (-> obj string-vel-dir)) + (format #t "~T~Tstring-trans: ~`vector`P~%" (&-> obj stack 368)) + (format + #t + "~T~Tposition-spline: #~%" + (&-> obj stack 384) + ) + (format #t "~T~Tpivot-pt: ~`vector`P~%" (&-> obj stack 2032)) + (format #t "~T~Tpivot-rad: ~f~%" (-> obj pivot-rad)) + (format #t "~T~Tcircular-follow: #~%" (&-> obj stack 2064)) + (format #t "~T~Tmax-angle-offset: ~f~%" (-> obj max-angle-offset)) + (format #t "~T~Tmax-angle-curr: ~f~%" (-> obj max-angle-curr)) + (format #t "~T~Toptions: ~D~%" (-> obj options)) + (format #t "~T~Tcam-entity: ~A~%" (-> obj cam-entity)) + (format #t "~T~Tvelocity: ~`vector`P~%" (&-> obj stack 2096)) + (format #t "~T~Tdesired-pos: ~`vector`P~%" (&-> obj stack 2112)) + (format #t "~T~Ttime-dist-too-far: ~D~%" (-> obj time-dist-too-far)) + (format #t "~T~Tlos-state: ~D~%" (-> obj los-state)) + (format #t "~T~Tgood-point: ~`vector`P~%" (&-> obj stack 2144)) + (format #t "~T~Tlos-tgt-spline-pt: ~D~%" (-> obj los-tgt-spline-pt)) + (format + #t + "~T~Tlos-tgt-spline-pt-incarnation: ~D~%" + (-> obj los-tgt-spline-pt-incarnation) + ) + (format #t "~T~Tlos-last-pos: ~`vector`P~%" (&-> obj stack 2176)) + (format #t "~T~Tintro-curve: #~%" (&-> obj stack 2192)) + (format #t "~T~Tintro-offset: #~%" (&-> obj stack 2224)) + (format #t "~T~Tintro-t: ~f~%" (-> obj intro-t)) + (format #t "~T~Tintro-t-step: ~f~%" (-> obj intro-t-step)) + (format #t "~T~Toutro-exit-value: ~f~%" (-> obj outro-exit-value)) + (format #t "~T~Tspline-exists: ~A~%" (-> obj spline-exists)) + (format #t "~T~Tspline-curve: #~%" (&-> obj stack 2256)) + (format #t "~T~Tspline-offset: #~%" (&-> obj stack 2288)) + (format #t "~T~Tindex: #~%" (&-> obj stack 2304)) + (format #t "~T~Tsaved-pt: #~%" (&-> obj stack 2352)) + (format #t "~T~Tspline-tt: ~f~%" (-> obj spline-tt)) + (format #t "~T~Tspline-follow-dist: ~f~%" (-> obj spline-follow-dist)) + (format #t "~T~Tchange-event-from: #x~X~%" (-> obj change-event-from)) + (format #t "~T~Tenter-has-run: ~A~%" (-> obj enter-has-run)) + (format #t "~T~Tblend-from-type: ~D~%" (-> obj blend-from-type)) + (format #t "~T~Tblend-to-type: ~D~%" (-> obj blend-to-type)) + (format #t "~T~Thave-phony-joystick: ~A~%" (-> obj have-phony-joystick)) + (format #t "~T~Tphony-joystick-x: ~f~%" (-> obj phony-joystick-x)) + (format #t "~T~Tphony-joystick-y: ~f~%" (-> obj phony-joystick-y)) + (format #t "~T~Tstring-min-val: #~%" (&-> obj stack 2416)) + (format #t "~T~Tstring-max-val: #~%" (&-> obj stack 2432)) + (format #t "~T~Tstring-val-locked: ~A~%" (-> obj string-val-locked)) + obj + ) + +;; definition of type camera-master +(deftype camera-master (process) + ((master-options uint32 :offset-assert 112) + (num-slaves int32 :offset-assert 116) + (slave basic 2 :offset-assert 120) + (slave-options uint32 :offset-assert 128) + (view-off-param-save float :offset-assert 132) + (changer uint32 :offset-assert 136) + (cam-entity basic :offset-assert 140) + (stringMinLength float :offset-assert 144) + (stringMaxLength float :offset-assert 148) + (stringMinHeight float :offset-assert 152) + (stringMaxHeight float :offset-assert 156) + (string-min cam-vector-seeker :inline :offset-assert 160) + (string-max cam-vector-seeker :inline :offset-assert 224) + (string-push-z float :offset-assert 284) + (stringCliffHeight float :offset-assert 288) + (no-intro uint32 :offset-assert 292) + (force-blend uint32 :offset-assert 296) + (force-blend-time uint32 :offset-assert 300) + (local-down vector :inline :offset-assert 304) + (drawable-target uint64 :offset-assert 320) + (which-bone int32 :offset-assert 328) + (pov-handle uint64 :offset-assert 336) + (pov-bone int32 :offset-assert 344) + (being-attacked basic :offset-assert 348) + (attack-start uint64 :offset-assert 352) + (on-ground basic :offset-assert 360) + (under-water int32 :offset-assert 364) + (on-pole basic :offset-assert 368) + (tgt-rot-mat matrix :inline :offset-assert 384) + (tgt-face-mat matrix :inline :offset-assert 448) + (tpos-old vector :inline :offset-assert 512) + (tpos-curr vector :inline :offset-assert 528) + (target-height float :offset-assert 544) + (tpos-old-adj vector :inline :offset-assert 560) + (tpos-curr-adj vector :inline :offset-assert 576) + (tpos-tgt vector :inline :offset-assert 592) + (upspeed float :offset-assert 608) + (pitch-off vector :inline :offset-assert 624) + (foot-offset float :offset-assert 640) + (head-offset float :offset-assert 644) + (target-spline tracking-spline :inline :offset-assert 656) + (ease-from vector :inline :offset-assert 2304) + (ease-t float :offset-assert 2320) + (ease-step float :offset-assert 2324) + (ease-to vector :inline :offset-assert 2336) + (outro-curve curve :inline :offset-assert 2352) + (outro-t float :offset-assert 2372) + (outro-t-step float :offset-assert 2376) + (outro-exit-value float :offset-assert 2380) + (water-drip-time uint64 :offset-assert 2384) + (water-drip basic :offset-assert 2392) + (water-drip-mult float :offset-assert 2396) + (water-drip-speed float :offset-assert 2400) + ) + :heap-base #x900 + :method-count-assert 14 + :size-assert #x964 + :flag-assert #xe09000964 + ) + +;; definition for method 3 of type camera-master +(defmethod inspect camera-master ((obj camera-master)) + (let ((t9-0 (method-of-type process inspect))) + (t9-0 obj) + ) + (format #t "~T~Tmaster-options: ~D~%" (-> obj master-options)) + (format #t "~T~Tnum-slaves: ~D~%" (-> obj num-slaves)) + (format #t "~T~Tslave[2] @ #x~X~%" (&-> obj stack 8)) + (format #t "~T~Tslave-options: ~D~%" (-> obj slave-options)) + (format #t "~T~Tview-off-param-save: ~f~%" (-> obj view-off-param-save)) + (format #t "~T~Tchanger: #x~X~%" (-> obj changer)) + (format #t "~T~Tcam-entity: ~A~%" (-> obj cam-entity)) + (format #t "~T~TstringMinLength: ~f~%" (-> obj stringMinLength)) + (format #t "~T~TstringMaxLength: ~f~%" (-> obj stringMaxLength)) + (format #t "~T~TstringMinHeight: ~f~%" (-> obj stringMinHeight)) + (format #t "~T~TstringMaxHeight: ~f~%" (-> obj stringMaxHeight)) + (format #t "~T~Tstring-min: #~%" (&-> obj stack 48)) + (format + #t + "~T~Tstring-max: #~%" + (&-> obj stack 112) + ) + (format #t "~T~Tstring-push-z: ~f~%" (-> obj string-push-z)) + (format #t "~T~TstringCliffHeight: ~f~%" (-> obj stringCliffHeight)) + (format #t "~T~Tno-intro: ~D~%" (-> obj no-intro)) + (format #t "~T~Tforce-blend: ~D~%" (-> obj force-blend)) + (format #t "~T~Tforce-blend-time: ~D~%" (-> obj force-blend-time)) + (format #t "~T~Tlocal-down: ~`vector`P~%" (&-> obj stack 192)) + (format #t "~T~Tdrawable-target: ~D~%" (-> obj drawable-target)) + (format #t "~T~Twhich-bone: ~D~%" (-> obj which-bone)) + (format #t "~T~Tpov-handle: ~D~%" (-> obj pov-handle)) + (format #t "~T~Tpov-bone: ~D~%" (-> obj pov-bone)) + (format #t "~T~Tbeing-attacked: ~A~%" (-> obj being-attacked)) + (format #t "~T~Tattack-start: ~D~%" (-> obj attack-start)) + (format #t "~T~Ton-ground: ~A~%" (-> obj on-ground)) + (format #t "~T~Tunder-water: ~D~%" (-> obj under-water)) + (format #t "~T~Ton-pole: ~A~%" (-> obj on-pole)) + (format #t "~T~Ttgt-rot-mat: ~`matrix`P~%" (&-> obj stack 272)) + (format #t "~T~Ttgt-face-mat: ~`matrix`P~%" (&-> obj stack 336)) + (format #t "~T~Ttpos-old: ~`vector`P~%" (&-> obj stack 400)) + (format #t "~T~Ttpos-curr: ~`vector`P~%" (&-> obj stack 416)) + (format #t "~T~Ttarget-height: ~f~%" (-> obj target-height)) + (format #t "~T~Ttpos-old-adj: ~`vector`P~%" (&-> obj stack 448)) + (format #t "~T~Ttpos-curr-adj: ~`vector`P~%" (&-> obj stack 464)) + (format #t "~T~Ttpos-tgt: ~`vector`P~%" (&-> obj stack 480)) + (format #t "~T~Tupspeed: ~f~%" (-> obj upspeed)) + (format #t "~T~Tpitch-off: ~`vector`P~%" (&-> obj stack 512)) + (format #t "~T~Tfoot-offset: ~f~%" (-> obj foot-offset)) + (format #t "~T~Thead-offset: ~f~%" (-> obj head-offset)) + (format + #t + "~T~Ttarget-spline: #~%" + (&-> obj stack 544) + ) + (format #t "~T~Tease-from: #~%" (&-> obj stack 2192)) + (format #t "~T~Tease-t: ~f~%" (-> obj ease-t)) + (format #t "~T~Tease-step: ~f~%" (-> obj ease-step)) + (format #t "~T~Tease-to: #~%" (&-> obj stack 2224)) + (format #t "~T~Toutro-curve: #~%" (&-> obj stack 2240)) + (format #t "~T~Toutro-t: ~f~%" (-> obj outro-t)) + (format #t "~T~Toutro-t-step: ~f~%" (-> obj outro-t-step)) + (format #t "~T~Toutro-exit-value: ~f~%" (-> obj outro-exit-value)) + (format #t "~T~Twater-drip-time: ~D~%" (-> obj water-drip-time)) + (format #t "~T~Twater-drip: ~A~%" (-> obj water-drip)) + (format #t "~T~Twater-drip-mult: ~f~%" (-> obj water-drip-mult)) + (format #t "~T~Twater-drip-speed: ~f~%" (-> obj water-drip-speed)) + obj + ) + +;; failed to figure out what this is: +(let ((v0-11 0)) + ) + + + + diff --git a/test/decompiler/reference/engine/entity/entity-h_REF.gc b/test/decompiler/reference/engine/entity/entity-h_REF.gc new file mode 100644 index 0000000000..984a914815 --- /dev/null +++ b/test/decompiler/reference/engine/entity/entity-h_REF.gc @@ -0,0 +1,318 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition for symbol *generate-actor-vis*, type symbol +(define *generate-actor-vis* #f) + +;; definition for symbol *generate-actor-vis-start*, type symbol +(define *generate-actor-vis-start* #f) + +;; definition for symbol *generate-actor-vis-output*, type symbol +(define *generate-actor-vis-output* #f) + +;; definition of type entity-perm +(deftype entity-perm (structure) + ((user-object object 2 :offset-assert 0) + (user-uint64 uint64 :offset 0) + (user-float float 2 :offset 0) + (user-int32 int32 2 :offset 0) + (user-uint32 uint32 2 :offset 0) + (user-int16 int16 4 :offset 0) + (user-uint16 uint16 4 :offset 0) + (user-int8 int8 8 :offset 0) + (user-uint8 uint8 8 :offset 0) + (status uint16 :offset-assert 8) + (dummy uint8 1 :offset-assert 10) + (task uint8 :offset-assert 11) + (aid uint32 :offset-assert 12) + (quad uint128 :offset 0) + ) + :pack-me + :method-count-assert 10 + :size-assert #x10 + :flag-assert #xa00000010 + (:methods + (dummy-9 () none 9) + ) + ) + +;; definition for method 3 of type entity-perm +;; Used lq/sq +(defmethod inspect entity-perm ((obj entity-perm)) + (format #t "[~8x] ~A~%" obj 'entity-perm) + (format #t "~Tuser-object[2] @ #x~X~%" (-> obj user-object)) + (format #t "~Tuser-uint64: ~D~%" (-> obj user-uint64)) + (format #t "~Tuser-float[2] @ #x~X~%" (-> obj user-object)) + (format #t "~Tuser-int32[2] @ #x~X~%" (-> obj user-object)) + (format #t "~Tuser-uint32[2] @ #x~X~%" (-> obj user-object)) + (format #t "~Tuser-int16[4] @ #x~X~%" (-> obj user-object)) + (format #t "~Tuser-uint16[4] @ #x~X~%" (-> obj user-object)) + (format #t "~Tuser-int8[8] @ #x~X~%" (-> obj user-object)) + (format #t "~Tuser-uint8[8] @ #x~X~%" (-> obj user-object)) + (format #t "~Tstatus: ~D~%" (-> obj status)) + (format #t "~Tdummy[1] @ #x~X~%" (-> obj dummy)) + (format #t "~Ttask: ~D~%" (-> obj task)) + (format #t "~Taid: ~D~%" (-> obj aid)) + (format #t "~Tquad: ~D~%" (-> obj quad)) + obj + ) + +;; definition of type entity-links +(deftype entity-links (structure) + ((prev-link entity-links :offset-assert 0) + (next-link entity-links :offset-assert 4) + (entity basic :offset-assert 8) + (process basic :offset-assert 12) + (level basic :offset-assert 16) + (vis-id int32 :offset-assert 20) + (trans vector :inline :offset-assert 32) + (perm entity-perm :inline :offset-assert 48) + (status uint16 :offset 56) + (aid uint32 :offset 60) + (task uint8 :offset 59) + ) + :method-count-assert 10 + :size-assert #x40 + :flag-assert #xa00000040 + (:methods + (dummy-9 () none 9) + ) + ) + +;; definition for method 3 of type entity-links +(defmethod inspect entity-links ((obj entity-links)) + (format #t "[~8x] ~A~%" obj 'entity-links) + (format #t "~Tprev-link: #~%" (-> obj prev-link)) + (format #t "~Tnext-link: #~%" (-> obj next-link)) + (format #t "~Tentity: ~A~%" (-> obj entity)) + (format #t "~Tprocess: ~A~%" (-> obj process)) + (format #t "~Tlevel: ~A~%" (-> obj level)) + (format #t "~Tvis-id: ~D~%" (-> obj vis-id)) + (format #t "~Ttrans: ~`vector`P~%" (-> obj trans)) + (format #t "~Tperm: ~`entity-perm`P~%" (-> obj perm)) + (format #t "~Tstatus: ~D~%" (-> obj perm status)) + (format #t "~Taid: ~D~%" (-> obj perm aid)) + (format #t "~Ttask: ~D~%" (-> obj perm task)) + obj + ) + +;; definition of type entity-perm-array +(deftype entity-perm-array (inline-array-class) + () + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +;; definition for method 3 of type entity-perm-array +(defmethod inspect entity-perm-array ((obj entity-perm-array)) + (format #t "[~8x] ~A~%" obj (-> obj type)) + (format #t "~Tlength: ~D~%" (-> obj length)) + (format #t "~Tallocated-length: ~D~%" (-> obj allocated-length)) + (format #t "~Tdata[0] @ #x~X~%" (&-> obj data 4)) + obj + ) + +;; failed to figure out what this is: +(set! (-> entity-perm-array heap-base) (the-as uint 16)) + +;; definition of type entity-links-array +(deftype entity-links-array (inline-array-class) + () + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +;; definition for method 3 of type entity-links-array +(defmethod inspect entity-links-array ((obj entity-links-array)) + (format #t "[~8x] ~A~%" obj (-> obj type)) + (format #t "~Tlength: ~D~%" (-> obj length)) + (format #t "~Tallocated-length: ~D~%" (-> obj allocated-length)) + (format #t "~Tdata[0] @ #x~X~%" (&-> obj data 4)) + obj + ) + +;; failed to figure out what this is: +(set! (-> entity-links-array heap-base) (the-as uint 64)) + +;; definition of type entity +(deftype entity (res-lump) + ((trans vector :inline :offset-assert 32) + (aid uint32 :offset-assert 48) + ) + :method-count-assert 27 + :size-assert #x34 + :flag-assert #x1b00000034 + (:methods + (dummy-22 () none 22) + (dummy-23 () none 23) + (dummy-24 () none 24) + (dummy-25 () none 25) + (dummy-26 () none 26) + ) + ) + +;; definition of type entity-camera +(deftype entity-camera (entity) + ((connect connectable :inline :offset-assert 64) + ) + :method-count-assert 27 + :size-assert #x50 + :flag-assert #x1b00000050 + ) + +;; definition of type entity-ambient-data +(deftype entity-ambient-data (structure) + ((user-object object 3 :offset-assert 0) + (function basic :offset-assert 12) + (quad uint128 :offset 0) + (user-uint64 uint64 1 :offset 0) + (user-float float 3 :offset 0) + (user-int32 int32 3 :offset 0) + (user-uint32 uint32 3 :offset 0) + (user-int16 int16 6 :offset 0) + (user-uint16 uint16 6 :offset 0) + (user-int8 int8 12 :offset 0) + (user-uint8 uint8 12 :offset 0) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +;; definition for method 3 of type entity-ambient-data +;; Used lq/sq +(defmethod inspect entity-ambient-data ((obj entity-ambient-data)) + (format #t "[~8x] ~A~%" obj 'entity-ambient-data) + (format #t "~Tuser-object[3] @ #x~X~%" (-> obj user-object)) + (format #t "~Tfunction: ~A~%" (-> obj function)) + (format #t "~Tquad: ~D~%" (-> obj quad)) + (format #t "~Tuser-uint64[1] @ #x~X~%" (-> obj user-object)) + (format #t "~Tuser-float[3] @ #x~X~%" (-> obj user-object)) + (format #t "~Tuser-int32[3] @ #x~X~%" (-> obj user-object)) + (format #t "~Tuser-uint32[3] @ #x~X~%" (-> obj user-object)) + (format #t "~Tuser-int16[6] @ #x~X~%" (-> obj user-object)) + (format #t "~Tuser-uint16[6] @ #x~X~%" (-> obj user-object)) + (format #t "~Tuser-int8[12] @ #x~X~%" (-> obj user-object)) + (format #t "~Tuser-uint8[12] @ #x~X~%" (-> obj user-object)) + obj + ) + +;; definition of type entity-ambient-data-array +(deftype entity-ambient-data-array (inline-array-class) + () + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +;; definition for method 3 of type entity-ambient-data-array +(defmethod inspect entity-ambient-data-array ((obj entity-ambient-data-array)) + (format #t "[~8x] ~A~%" obj (-> obj type)) + (format #t "~Tlength: ~D~%" (-> obj length)) + (format #t "~Tallocated-length: ~D~%" (-> obj allocated-length)) + (format #t "~Tdata[0] @ #x~X~%" (&-> obj data 4)) + obj + ) + +;; failed to figure out what this is: +(set! (-> entity-ambient-data-array heap-base) (the-as uint 16)) + +;; definition of type entity-ambient +(deftype entity-ambient (entity) + () + :method-count-assert 29 + :size-assert #x34 + :flag-assert #x1d00000034 + (:methods + (dummy-27 () none 27) + (dummy-28 () none 28) + ) + ) + +;; definition of type entity-actor +(deftype entity-actor (entity) + ((nav-mesh nav-mesh :offset-assert 52) + (etype basic :offset-assert 56) + (task uint8 :offset-assert 60) + (vis-id uint16 :offset-assert 62) + (quat quaternion :inline :offset-assert 64) + ) + :method-count-assert 31 + :size-assert #x50 + :flag-assert #x1f00000050 + (:methods + (dummy-27 () none 27) + (dummy-28 () none 28) + (dummy-29 () none 29) + (dummy-30 () none 30) + ) + ) + +;; definition of type entity-info +(deftype entity-info (basic) + ((ptype basic :offset-assert 4) + (package basic :offset-assert 8) + (art-group basic :offset-assert 12) + (pool basic :offset-assert 16) + (heap-size int32 :offset-assert 20) + ) + :method-count-assert 9 + :size-assert #x18 + :flag-assert #x900000018 + ) + +;; definition for method 3 of type entity-info +(defmethod inspect entity-info ((obj entity-info)) + (format #t "[~8x] ~A~%" obj (-> obj type)) + (format #t "~Tptype: ~A~%" (-> obj ptype)) + (format #t "~Tpackage: ~A~%" (-> obj package)) + (format #t "~Tart-group: ~A~%" (-> obj art-group)) + (format #t "~Tpool: ~A~%" (-> obj pool)) + (format #t "~Theap-size: ~D~%" (-> obj heap-size)) + obj + ) + +;; failed to figure out what this is: +(if (zero? entity-nav-login) + (set! entity-nav-login nothing) + ) + +;; definition of type actor-bank +(deftype actor-bank (basic) + ((pause-dist float :offset-assert 4) + (birth-dist float :offset-assert 8) + (birth-max int32 :offset-assert 12) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +;; definition for method 3 of type actor-bank +(defmethod inspect actor-bank ((obj actor-bank)) + (format #t "[~8x] ~A~%" obj (-> obj type)) + (format #t "~Tpause-dist: ~f~%" (-> obj pause-dist)) + (format #t "~Tbirth-dist: ~f~%" (-> obj birth-dist)) + (format #t "~Tbirth-max: ~D~%" (-> obj birth-max)) + obj + ) + +;; definition for symbol *ACTOR-bank*, type actor-bank +(define + *ACTOR-bank* + (new 'static 'actor-bank + :pause-dist 204800.0 + :birth-dist 901120.0 + :birth-max 10 + ) + ) + +;; failed to figure out what this is: +(let ((v0-12 0)) + ) + + + +