diff --git a/decompiler/config/jak2/all-types.gc b/decompiler/config/jak2/all-types.gc index e473345fb2..7db65e0cc0 100644 --- a/decompiler/config/jak2/all-types.gc +++ b/decompiler/config/jak2/all-types.gc @@ -32287,8 +32287,8 @@ (deftype com-airlock (process-drawable) ((child-override basic :offset 24) ;; what is this! (root-override collide-shape :offset 128 :score 999) - (level-name string :offset-assert 200) - (open-test symbol :offset-assert 204) + (level-name pair :offset-assert 200) + (open-test pair :offset-assert 204) (were-behind? symbol :offset-assert 208) (inner? symbol :offset-assert 212) (sound-behind? symbol :offset-assert 216) @@ -50475,6 +50475,7 @@ :method-count-assert 9 :size-assert #x4 :flag-assert #x900000004 + :pack-me ) (deftype race-mesh-hash-cell (structure) @@ -50516,9 +50517,9 @@ :size-assert #x1c :flag-assert #x140000001c (:methods - (race-mesh-method-9 (_type_ int int rgba rgba) none 9) - (race-mesh-method-10 (_type_ int int) symbol 10) - (race-mesh-method-11 (_type_ int) none 11) + (debug-draw-path (_type_ int int rgba rgba) none 9) + (debug-draw-path-from-history (_type_ int int) symbol 10) + (debug-draw-slice (_type_ int) none 11) (debug-draw-edges (_type_) none 12) (race-mesh-method-13 (_type_ race-mesh-slice-query) none 13) (race-mesh-method-14 (_type_ race-mesh-slice-query) none 14) diff --git a/decompiler/config/jak2/ntsc_v1/inputs.jsonc b/decompiler/config/jak2/ntsc_v1/inputs.jsonc index 6fe420f298..dac9dc1617 100644 --- a/decompiler/config/jak2/ntsc_v1/inputs.jsonc +++ b/decompiler/config/jak2/ntsc_v1/inputs.jsonc @@ -403,7 +403,7 @@ "STR/YOLYSAMS.STR", "STR/YOLYSKDC.STR", "STR/YOONINTE.STR", - "STR/YOTOMBD.STR" + "STR/YOTOMBD.STR" ], // some objects are directly stored as files on the DVD. This is just text files. diff --git a/decompiler/config/jak2/ntsc_v1/type_casts.jsonc b/decompiler/config/jak2/ntsc_v1/type_casts.jsonc index 05b599c1d7..d0e2ca0929 100644 --- a/decompiler/config/jak2/ntsc_v1/type_casts.jsonc +++ b/decompiler/config/jak2/ntsc_v1/type_casts.jsonc @@ -11015,7 +11015,5 @@ [[68, 75], "a0", "dma-packet"], [[79, 86], "a0", "(pointer uint32)"], [[87, 94], "a0", "(pointer vif-tag)"] - - ] } diff --git a/decompiler/config/jak2/ntsc_v1/var_names.jsonc b/decompiler/config/jak2/ntsc_v1/var_names.jsonc index 9d84f6179d..6e26f9b13b 100644 --- a/decompiler/config/jak2/ntsc_v1/var_names.jsonc +++ b/decompiler/config/jak2/ntsc_v1/var_names.jsonc @@ -4158,5 +4158,19 @@ "f1-0": "danger-radius", "f3-0": "decay-rate" } + }, + "(method 24 com-airlock)": { + "vars": { + "gp-1": ["level-list", "pair"], + "s4-0": "borrow-lev-name", + "s3-0": ["level-list-iter", "pair"], + "s2-0": "lev-name" + }, + "args": ["obj", "display?"] + }, + "(method 23 com-airlock)": { + "vars": { + "s4-0": "tgt" + } } } diff --git a/goal_src/jak2/engine/debug/default-menu.gc b/goal_src/jak2/engine/debug/default-menu.gc index d22df34816..e7489ff902 100644 --- a/goal_src/jak2/engine/debug/default-menu.gc +++ b/goal_src/jak2/engine/debug/default-menu.gc @@ -4012,10 +4012,10 @@ ) (menu "Gun" - (flag "yellow" 2 dm-game-inventory-toggle-pick-func) - (flag "red" 4 dm-game-inventory-toggle-pick-func) - (flag "blue" 8 dm-game-inventory-toggle-pick-func) - (flag "dark" 16 dm-game-inventory-toggle-pick-func) + (flag "yellow" (the binteger (game-feature gun-yellow)) dm-game-feature-toggle-pick-func) + (flag "red" (the binteger (game-feature gun-red)) dm-game-feature-toggle-pick-func) + (flag "blue" (the binteger (game-feature gun-blue)) dm-game-feature-toggle-pick-func) + (flag "dark" (the binteger (game-feature gun-dark)) dm-game-feature-toggle-pick-func) (flag "gun-upgrade-speed" 16384 dm-game-feature-toggle-pick-func) (flag "gun-upgrade-ammo" 32768 dm-game-feature-toggle-pick-func) (flag "gun-upgrade-damage" 65536 dm-game-feature-toggle-pick-func) diff --git a/goal_src/jak2/engine/draw/drawable.gc b/goal_src/jak2/engine/draw/drawable.gc index 223af661dd..3bfdbe5b5b 100644 --- a/goal_src/jak2/engine/draw/drawable.gc +++ b/goal_src/jak2/engine/draw/drawable.gc @@ -1743,6 +1743,8 @@ (tick! (-> arg0 bg-clock)) (set! (-> arg0 bg-clock frame-counter) (the-as time-frame (mod (-> arg0 bg-clock frame-counter) #x69780))) (tick! (-> arg0 part-clock)) + (#when PC_PORT + (tick! *airlock-clock*)) ; (when (and (nonzero? *screen-shot-work*) (!= (-> *screen-shot-work* count) -1)) ; (let ((v1-43 (-> *screen-shot-work* size))) diff --git a/goal_src/jak2/engine/gfx/hw/display.gc b/goal_src/jak2/engine/gfx/hw/display.gc index 19cd011dd6..2ba32ac70c 100644 --- a/goal_src/jak2/engine/gfx/hw/display.gc +++ b/goal_src/jak2/engine/gfx/hw/display.gc @@ -41,6 +41,11 @@ (-> obj dog-ratio) ) +(#when PC_PORT +(define *airlock-clock* (new 'global 'clock 13)) +(set! (-> *airlock-clock* clock-ratio) 1.5) +) + (defun set-display ((arg0 display)) "Allocate and initialize clocks for the display." (dotimes (s5-0 13) diff --git a/goal_src/jak2/levels/common/airlock.gc b/goal_src/jak2/levels/common/airlock.gc index c063871513..eb5bee3cde 100644 --- a/goal_src/jak2/levels/common/airlock.gc +++ b/goal_src/jak2/levels/common/airlock.gc @@ -12,8 +12,8 @@ (deftype com-airlock (process-drawable) ((child-override basic :offset 24) (root-override collide-shape :offset 128) - (level-name string :offset-assert 200) - (open-test symbol :offset-assert 204) + (level-name pair :offset-assert 200) + (open-test pair :offset-assert 204) (were-behind? symbol :offset-assert 208) (inner? symbol :offset-assert 212) (sound-behind? symbol :offset-assert 216) @@ -106,17 +106,17 @@ (res-lump-float (-> obj entity) 'idle-distance :default (+ 143360.0 (-> obj open-distance))) ) (set! (-> obj y-height) (res-lump-data (-> obj entity) 'height vector)) - (set! (-> obj level-name) (res-lump-struct (-> obj entity) 'on-notice string)) + (set! (-> obj level-name) (res-lump-struct (-> obj entity) 'on-notice pair)) (set! (-> obj open-test) - (the-as symbol ((method-of-type res-lump get-property-struct) - (-> obj entity) - 'open-test - 'interp - -1000000000.0 - (the-as structure '(not (or (scene-player?) (focus-test? *target* grabbed)))) - (the-as (pointer res-tag) #f) - *res-static-buf* - ) + (the-as pair ((method-of-type res-lump get-property-struct) + (-> obj entity) + 'open-test + 'interp + -1000000000.0 + (the-as structure '(not (or (scene-player?) (focus-test? *target* grabbed)))) + (the-as (pointer res-tag) #f) + *res-static-buf* + ) ) ) (set! (-> obj sound-gear) #f) @@ -172,15 +172,15 @@ ;; WARN: Return type mismatch object vs symbol. (defmethod want-cross-airlock? com-airlock ((obj com-airlock)) (local-vars (a0-12 entity-actor)) - (let* ((s4-0 (target-pos 0)) - (f30-0 (check-crossing-distance obj s4-0 #t)) + (let* ((tgt (target-pos 0)) + (f30-0 (check-crossing-distance obj tgt #t)) (s5-0 (>= (-> obj latch-open-time) (-> self clock frame-counter))) ) (the-as symbol - (and (or s5-0 (< (vector-vector-xz-distance (-> obj root-override trans) s4-0) (-> obj active-distance))) - (or s5-0 (not (-> obj y-height)) (and (>= (-> s4-0 y) (- (-> obj root-override trans y) (-> obj y-height y))) - (< (-> s4-0 y) (+ (-> obj root-override trans y) (-> obj y-height x))) + (and (or s5-0 (< (vector-vector-xz-distance (-> obj root-override trans) tgt) (-> obj active-distance))) + (or s5-0 (not (-> obj y-height)) (and (>= (-> tgt y) (- (-> obj root-override trans y) (-> obj y-height y))) + (< (-> tgt y) (+ (-> obj root-override trans y) (-> obj y-height x))) ) ) (begin @@ -200,7 +200,7 @@ ) (logtest? (-> a0-12 extra perm status) (entity-perm-status subtask-complete)) ) - (and (script-eval (the-as pair (-> obj open-test))) (-> *setting-control* user-current airlock)) + (and (script-eval (-> obj open-test)) (-> *setting-control* user-current airlock)) ) ) s5-0 @@ -221,59 +221,59 @@ ) ) -(defmethod destination-loaded? com-airlock ((obj com-airlock) (arg0 symbol)) - (let ((gp-1 (script-eval (the-as pair (-> obj level-name)))) - (s4-0 #f) +(defmethod destination-loaded? com-airlock ((obj com-airlock) (display? symbol)) + (let ((level-list (the-as pair (script-eval (-> obj level-name)))) + (borrow-lev-name #f) ) (cond - ((not gp-1) - (if arg0 + ((not (the-as object level-list)) + (if display? 'unknown #f ) ) - (arg0 - (let* ((s3-0 gp-1) - (s2-0 (car s3-0)) + (display? + (let* ((level-list-iter level-list) + (lev-name (car (the-as object level-list-iter))) ) - (while (not (null? s3-0)) - (let ((v1-4 (level-status *level* (the-as symbol s2-0)))) + (while (not (null? (the-as object level-list-iter))) + (let ((v1-4 (level-status *level* (the-as symbol lev-name)))) (if (not (or (= v1-4 'loaded) (= v1-4 'active))) (return #f) ) ) - (if (= s2-0 'ctywide) - (set! s4-0 (-> ctywide borrow-level 1)) + (if (= lev-name 'ctywide) + (set! borrow-lev-name (-> ctywide borrow-level 1)) ) - (set! s3-0 (cdr s3-0)) - (set! s2-0 (car (the-as pair s3-0))) + (set! level-list-iter (cdr (the-as object level-list-iter))) + (set! lev-name (car level-list-iter)) ) ) - (when s4-0 - (let ((v1-17 (level-status *level* s4-0))) + (when borrow-lev-name + (let ((v1-17 (level-status *level* borrow-lev-name))) (if (not (or (= v1-17 'loaded) (= v1-17 'active))) (return #f) ) ) ) - (if (!= arg0 'display) + (if (!= display? 'display) (return #t) ) - (let ((a1-7 (car gp-1))) - (while (not (null? gp-1)) + (let ((a1-7 (car (the-as object level-list)))) + (while (not (null? (the-as object level-list))) (let ((v1-26 (level-get *level* (the-as symbol a1-7)))) (if (not (and v1-26 (= (-> v1-26 status) 'active) (-> v1-26 display?))) (return #f) ) ) - (set! gp-1 (cdr gp-1)) - (set! a1-7 (car (the-as pair gp-1))) + (set! level-list (cdr (the-as object level-list))) + (set! a1-7 (car level-list)) ) ) #t ) (else - (let* ((v1-33 gp-1) + (let* ((v1-33 (the-as object level-list)) (a0-11 (car v1-33)) ) (while (not (null? v1-33)) @@ -412,6 +412,7 @@ ) ) :enter (behavior ((arg0 symbol)) + (#when PC_PORT (set! (-> self clock) (-> self parent 0 clock))) (set! (-> self visible-move?) #f) (none) ) @@ -616,6 +617,7 @@ :virtual #t :event (-> (method-of-type com-airlock close) event) :enter (behavior ((arg0 symbol)) + (#when PC_PORT (set! (-> self clock) *airlock-clock*)) (set! (-> self visible-move?) #f) (none) ) diff --git a/goal_src/jak2/levels/common/races/race-manager.gc b/goal_src/jak2/levels/common/races/race-manager.gc index 42e599559f..87dd9acd42 100644 --- a/goal_src/jak2/levels/common/races/race-manager.gc +++ b/goal_src/jak2/levels/common/races/race-manager.gc @@ -948,7 +948,7 @@ (let ((s3-0 8)) (dotimes (s2-0 8) (if (logtest? s5-0 s3-0) - (race-mesh-method-10 s4-0 s2-0 0) + (debug-draw-path-from-history s4-0 s2-0 0) ) (set! s3-0 (* s3-0 2)) ) diff --git a/goal_src/jak2/levels/common/races/race-mesh.gc b/goal_src/jak2/levels/common/races/race-mesh.gc index 6f26387002..4c6e85a802 100644 --- a/goal_src/jak2/levels/common/races/race-mesh.gc +++ b/goal_src/jak2/levels/common/races/race-mesh.gc @@ -110,6 +110,7 @@ :method-count-assert 9 :size-assert #x4 :flag-assert #x900000004 + :pack-me ) @@ -154,9 +155,9 @@ :size-assert #x1c :flag-assert #x140000001c (:methods - (race-mesh-method-9 (_type_ int int rgba rgba) none 9) - (race-mesh-method-10 (_type_ int int) symbol 10) - (race-mesh-method-11 (_type_ int) none 11) + (debug-draw-path (_type_ int int rgba rgba) none 9) + (debug-draw-path-from-history (_type_ int int) symbol 10) + (debug-draw-slice (_type_ int) none 11) (debug-draw-edges (_type_) none 12) (race-mesh-method-13 (_type_ race-mesh-slice-query) none 13) (race-mesh-method-14 (_type_ race-mesh-slice-query) none 14) @@ -311,7 +312,7 @@ (none) ) -(defmethod race-mesh-method-9 race-mesh ((obj race-mesh) (arg0 int) (arg1 int) (arg2 rgba) (arg3 rgba)) +(defmethod debug-draw-path race-mesh ((obj race-mesh) (arg0 int) (arg1 int) (arg2 rgba) (arg3 rgba)) (when (< arg1 (the-as int (-> obj path-group-count))) (let ((v1-2 (-> obj path-groups arg1))) (if (< arg0 (-> v1-2 path-count)) @@ -322,7 +323,7 @@ (none) ) -(defmethod race-mesh-method-10 race-mesh ((obj race-mesh) (arg0 int) (arg1 int)) +(defmethod debug-draw-path-from-history race-mesh ((obj race-mesh) (arg0 int) (arg1 int)) (when (< arg1 (the-as int (-> obj path-group-count))) (let ((v1-2 (-> obj path-groups arg1))) (countdown (a2-1 (-> v1-2 path-count)) @@ -361,10 +362,10 @@ ) ;; WARN: Return type mismatch symbol vs none. -(defmethod race-mesh-method-11 race-mesh ((obj race-mesh) (arg0 int)) - (let* ((v1-1 (the-as object (+ (the-as uint (-> obj slices)) (* arg0 4)))) - (s3-0 (-> obj edges (-> (the-as race-mesh-slice v1-1) start-edge))) - (s4-0 (-> obj edges (-> (the-as race-mesh-slice v1-1) end-edge))) +(defmethod debug-draw-slice race-mesh ((obj race-mesh) (arg0 int)) + (let* ((v1-1 (-> obj slices arg0)) + (s3-0 (-> obj edges (-> v1-1 start-edge))) + (s4-0 (-> obj edges (-> v1-1 end-edge))) ) (add-debug-line #t diff --git a/goal_src/jak2/levels/stadium/stadium-obs.gc b/goal_src/jak2/levels/stadium/stadium-obs.gc index 6b0c05b06f..41cfdbd493 100644 --- a/goal_src/jak2/levels/stadium/stadium-obs.gc +++ b/goal_src/jak2/levels/stadium/stadium-obs.gc @@ -2103,6 +2103,7 @@ This commonly includes things such as: - loading the skeleton group / bones - sounds" (with-pp + (stack-size-set! (-> obj main-thread) #x180) ;; added (let ((s4-0 (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-others)))) (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) (set! (-> s4-0 reaction) cshape-reaction-default) diff --git a/goal_src/jak2/pc/debug/default-menu-pc.gc b/goal_src/jak2/pc/debug/default-menu-pc.gc index 7e97364af0..3eda1d7b9c 100644 --- a/goal_src/jak2/pc/debug/default-menu-pc.gc +++ b/goal_src/jak2/pc/debug/default-menu-pc.gc @@ -204,7 +204,11 @@ (= (-> *entity-debug-inspect* entity) e) ) -(define *entity-debug-display-part* #t) +(define *entity-debug-include-part-spawner* #t) +(define *entity-debug-part-spawner-list* '(stadiumb-part)) +(define *entity-debug-include-cameras* #t) +(define *entity-debug-include-nav-meshes* #t) +(define *entity-debug-include-race-meshes* #t) (defun build-entity-list () "Fill the entity pick menu" ;; clear old list @@ -218,7 +222,9 @@ (when (nonzero? s3-0) (dotimes (s2-0 (-> s3-0 length)) (let ((s1-0 (-> s3-0 data s2-0 actor))) - (unless (and (not *entity-debug-display-part*) (type-type? (-> s1-0 etype) part-spawner)) + (unless (and (not *entity-debug-include-part-spawner*) + (or (type-type? (-> s1-0 etype) part-spawner) + (assoc (-> s1-0 etype symbol) *entity-debug-part-spawner-list*))) (debug-menu-append-item *entity-pick-menu* (new-dm-flag (res-lump-struct s1-0 'name string) s1-0 dm-entity-flag-func)) ) ) @@ -226,11 +232,37 @@ ) ) ;; camera entities - (let ((s4-1 (-> s4-0 bsp cameras))) - (when (nonzero? s4-1) - (dotimes (s3-2 (-> s4-1 length)) - (let ((s2-2 (-> s4-1 s3-2))) - (debug-menu-append-item *entity-pick-menu* (new-dm-flag (res-lump-struct s2-2 'name string) s2-2 dm-entity-flag-func)) + (when *entity-debug-include-cameras* + (let ((s4-1 (-> s4-0 bsp cameras))) + (when (nonzero? s4-1) + (dotimes (s3-2 (-> s4-1 length)) + (let ((s2-2 (-> s4-1 s3-2))) + (debug-menu-append-item *entity-pick-menu* (new-dm-flag (res-lump-struct s2-2 'name string) s2-2 dm-entity-flag-func)) + ) + ) + ) + ) + ) + ;; nav mesh entities + (when *entity-debug-include-nav-meshes* + (let ((s4-1 (-> s4-0 bsp nav-meshes))) + (when (nonzero? s4-1) + (dotimes (s3-2 (-> s4-1 length)) + (let ((s2-2 (-> s4-1 s3-2))) + (debug-menu-append-item *entity-pick-menu* (new-dm-flag (res-lump-struct s2-2 'name string) s2-2 dm-entity-flag-func)) + ) + ) + ) + ) + ) + ;; race mesh entities + (when *entity-debug-include-race-meshes* + (let ((s4-1 (-> s4-0 bsp race-meshes))) + (when (nonzero? s4-1) + (dotimes (s3-2 (-> s4-1 length)) + (let ((s2-2 (-> s4-1 s3-2))) + (debug-menu-append-item *entity-pick-menu* (new-dm-flag (res-lump-struct s2-2 'name string) s2-2 dm-entity-flag-func)) + ) ) ) ) @@ -274,7 +306,10 @@ (debug-menu-append-item entity-menu (new-dm-func "Print entity info (ag)" 'art-group dm-display-entities-pick-func)) (debug-menu-append-item entity-menu (new-dm-func "Print entity info (meters)" 'entity-meters dm-display-entities-pick-func)) (debug-menu-append-item entity-menu (new-dm-func "Print entity info (perm)" 'entity-perm dm-display-entities-pick-func)) - (debug-menu-append-item entity-menu (new-dm-bool "Show part entities" *entity-debug-display-part* dm-boolean-toggle-pick-func)) + (debug-menu-append-item entity-menu (new-dm-bool "Include part-spawner" *entity-debug-include-part-spawner* dm-boolean-toggle-pick-func)) + (debug-menu-append-item entity-menu (new-dm-bool "Include cameras" *entity-debug-include-cameras* dm-boolean-toggle-pick-func)) + (debug-menu-append-item entity-menu (new-dm-bool "Include nav meshes" *entity-debug-include-nav-meshes* dm-boolean-toggle-pick-func)) + (debug-menu-append-item entity-menu (new-dm-bool "Include race meshes" *entity-debug-include-race-meshes* dm-boolean-toggle-pick-func)) (new-dm-submenu "Entity" entity-menu) ) diff --git a/goal_src/jak2/pc/debug/entity-debug.gc b/goal_src/jak2/pc/debug/entity-debug.gc index cabc6147ec..fc86a6a0b3 100644 --- a/goal_src/jak2/pc/debug/entity-debug.gc +++ b/goal_src/jak2/pc/debug/entity-debug.gc @@ -25,10 +25,21 @@ (update-pad inspect-info 0) (let* ((e (-> inspect-info entity)) (name (res-lump-struct e 'name string))) - (set! *debug-actor* (the string (and (-> inspect-info show-actor-info) name))) - ;; draw trans - (add-debug-x #t (bucket-id debug-no-zbuf1) (-> e trans) (static-rgba 255 255 0 128)) - (add-debug-text-3d #t (bucket-id debug-no-zbuf1) name (-> e trans) (font-color red) (new 'static 'vector2h :y 8)) + (set! *debug-actor* (the string (and (type-type? (-> e type) entity-actor) (-> inspect-info show-actor-info) name))) + (set! *display-race-marks* (race-marks-controls all-off)) + (case (-> e type) + ((entity-race-mesh) + (set! *display-race-marks* (race-marks-controls all-paths-on)) + ;(debug-draw-edges (-> (the entity-race-mesh e) race-mesh)) + ) + ((entity-nav-mesh) + (debug-draw (the entity-nav-mesh e))) + (else + ;; draw trans + (add-debug-x #t (bucket-id debug-no-zbuf1) (-> e trans) (static-rgba 255 255 0 128)) + (add-debug-text-3d #t (bucket-id debug-no-zbuf1) name (-> e trans) (font-color red) (new 'static 'vector2h :y 8)) + ) + ) ;; start writing text (let* ((begin-y (- 16 (* (-> inspect-info scroll-y) 16))) (cur-y begin-y) (y-adv 16)) @@ -199,12 +210,17 @@ ((uint32) (case (-> e tag i name) ;; actually actor-id - (('nav-mesh-actor 'open-actor 'trigger-actor 'path-actor 'state-actor 'alt-actor 'next-actor 'prev-actor + (('open-actor 'trigger-actor 'path-actor 'state-actor 'alt-actor 'next-actor 'prev-actor 'spawner-blocker-actor 'spawner-trigger-actor 'kill-actor 'fade-actor 'water-actor 'target-actor 'formation-actor) (format *debug-temp-string* "~%#x~x (~S)" (-> (the (pointer uint32) data) ii) (res-lump-struct (entity-by-aid (-> (the (pointer uint32) data) ii)) 'name string)) (+! y-adv 14) ) + (('nav-mesh-actor) + (format *debug-temp-string* "~%#x~x (~S)" (-> (the (pointer uint32) data) ii) + (res-lump-struct (entity-nav-mesh-by-aid (-> (the (pointer actor-id) data) ii)) 'name string)) + (+! y-adv 14) + ) (('enemy-options) (format *debug-temp-string* "~%(~S)" (begin (bit-enum->string enemy-option (-> (the (pointer uint32) data) ii) (clear *temp-string*)) *temp-string*)) (+! y-adv 14) diff --git a/test/decompiler/reference/jak2/levels/common/airlock_REF.gc b/test/decompiler/reference/jak2/levels/common/airlock_REF.gc index 15474f5f7f..2157027afd 100644 --- a/test/decompiler/reference/jak2/levels/common/airlock_REF.gc +++ b/test/decompiler/reference/jak2/levels/common/airlock_REF.gc @@ -5,8 +5,8 @@ (deftype com-airlock (process-drawable) ((child-override basic :offset 24) (root-override collide-shape :offset 128) - (level-name string :offset-assert 200) - (open-test symbol :offset-assert 204) + (level-name pair :offset-assert 200) + (open-test pair :offset-assert 204) (were-behind? symbol :offset-assert 208) (inner? symbol :offset-assert 212) (sound-behind? symbol :offset-assert 216) @@ -151,17 +151,17 @@ (res-lump-float (-> obj entity) 'idle-distance :default (+ 143360.0 (-> obj open-distance))) ) (set! (-> obj y-height) (res-lump-data (-> obj entity) 'height vector)) - (set! (-> obj level-name) (res-lump-struct (-> obj entity) 'on-notice string)) + (set! (-> obj level-name) (res-lump-struct (-> obj entity) 'on-notice pair)) (set! (-> obj open-test) - (the-as symbol ((method-of-type res-lump get-property-struct) - (-> obj entity) - 'open-test - 'interp - -1000000000.0 - (the-as structure '(not (or (scene-player?) (focus-test? *target* grabbed)))) - (the-as (pointer res-tag) #f) - *res-static-buf* - ) + (the-as pair ((method-of-type res-lump get-property-struct) + (-> obj entity) + 'open-test + 'interp + -1000000000.0 + (the-as structure '(not (or (scene-player?) (focus-test? *target* grabbed)))) + (the-as (pointer res-tag) #f) + *res-static-buf* + ) ) ) (set! (-> obj sound-gear) #f) @@ -219,15 +219,15 @@ ;; WARN: Return type mismatch object vs symbol. (defmethod want-cross-airlock? com-airlock ((obj com-airlock)) (local-vars (a0-12 entity-actor)) - (let* ((s4-0 (target-pos 0)) - (f30-0 (check-crossing-distance obj s4-0 #t)) + (let* ((tgt (target-pos 0)) + (f30-0 (check-crossing-distance obj tgt #t)) (s5-0 (>= (-> obj latch-open-time) (-> self clock frame-counter))) ) (the-as symbol - (and (or s5-0 (< (vector-vector-xz-distance (-> obj root-override trans) s4-0) (-> obj active-distance))) - (or s5-0 (not (-> obj y-height)) (and (>= (-> s4-0 y) (- (-> obj root-override trans y) (-> obj y-height y))) - (< (-> s4-0 y) (+ (-> obj root-override trans y) (-> obj y-height x))) + (and (or s5-0 (< (vector-vector-xz-distance (-> obj root-override trans) tgt) (-> obj active-distance))) + (or s5-0 (not (-> obj y-height)) (and (>= (-> tgt y) (- (-> obj root-override trans y) (-> obj y-height y))) + (< (-> tgt y) (+ (-> obj root-override trans y) (-> obj y-height x))) ) ) (begin @@ -247,7 +247,7 @@ ) (logtest? (-> a0-12 extra perm status) (entity-perm-status subtask-complete)) ) - (and (script-eval (the-as pair (-> obj open-test))) (-> *setting-control* user-current airlock)) + (and (script-eval (-> obj open-test)) (-> *setting-control* user-current airlock)) ) ) s5-0 @@ -269,59 +269,59 @@ ) ;; definition for method 24 of type com-airlock -(defmethod destination-loaded? com-airlock ((obj com-airlock) (arg0 symbol)) - (let ((gp-1 (script-eval (the-as pair (-> obj level-name)))) - (s4-0 #f) +(defmethod destination-loaded? com-airlock ((obj com-airlock) (display? symbol)) + (let ((level-list (the-as pair (script-eval (-> obj level-name)))) + (borrow-lev-name #f) ) (cond - ((not gp-1) - (if arg0 + ((not (the-as object level-list)) + (if display? 'unknown #f ) ) - (arg0 - (let* ((s3-0 gp-1) - (s2-0 (car s3-0)) + (display? + (let* ((level-list-iter level-list) + (lev-name (car (the-as object level-list-iter))) ) - (while (not (null? s3-0)) - (let ((v1-4 (level-status *level* (the-as symbol s2-0)))) + (while (not (null? (the-as object level-list-iter))) + (let ((v1-4 (level-status *level* (the-as symbol lev-name)))) (if (not (or (= v1-4 'loaded) (= v1-4 'active))) (return #f) ) ) - (if (= s2-0 'ctywide) - (set! s4-0 (-> ctywide borrow-level 1)) + (if (= lev-name 'ctywide) + (set! borrow-lev-name (-> ctywide borrow-level 1)) ) - (set! s3-0 (cdr s3-0)) - (set! s2-0 (car (the-as pair s3-0))) + (set! level-list-iter (cdr (the-as object level-list-iter))) + (set! lev-name (car level-list-iter)) ) ) - (when s4-0 - (let ((v1-17 (level-status *level* s4-0))) + (when borrow-lev-name + (let ((v1-17 (level-status *level* borrow-lev-name))) (if (not (or (= v1-17 'loaded) (= v1-17 'active))) (return #f) ) ) ) - (if (!= arg0 'display) + (if (!= display? 'display) (return #t) ) - (let ((a1-7 (car gp-1))) - (while (not (null? gp-1)) + (let ((a1-7 (car (the-as object level-list)))) + (while (not (null? (the-as object level-list))) (let ((v1-26 (level-get *level* (the-as symbol a1-7)))) (if (not (and v1-26 (= (-> v1-26 status) 'active) (-> v1-26 display?))) (return #f) ) ) - (set! gp-1 (cdr gp-1)) - (set! a1-7 (car (the-as pair gp-1))) + (set! level-list (cdr (the-as object level-list))) + (set! a1-7 (car level-list)) ) ) #t ) (else - (let* ((v1-33 gp-1) + (let* ((v1-33 (the-as object level-list)) (a0-11 (car v1-33)) ) (while (not (null? v1-33)) @@ -1600,3 +1600,7 @@ This commonly includes things such as: (go (method-of-object obj close) #t) (none) ) + + + + diff --git a/test/decompiler/reference/jak2/levels/common/races/race-manager_REF.gc b/test/decompiler/reference/jak2/levels/common/races/race-manager_REF.gc index 715c27c7d6..f45028404f 100644 --- a/test/decompiler/reference/jak2/levels/common/races/race-manager_REF.gc +++ b/test/decompiler/reference/jak2/levels/common/races/race-manager_REF.gc @@ -973,7 +973,7 @@ (let ((s3-0 8)) (dotimes (s2-0 8) (if (logtest? s5-0 s3-0) - (race-mesh-method-10 s4-0 s2-0 0) + (debug-draw-path-from-history s4-0 s2-0 0) ) (set! s3-0 (* s3-0 2)) ) diff --git a/test/decompiler/reference/jak2/levels/common/races/race-mesh_REF.gc b/test/decompiler/reference/jak2/levels/common/races/race-mesh_REF.gc index b041e687b9..9489972aed 100644 --- a/test/decompiler/reference/jak2/levels/common/races/race-mesh_REF.gc +++ b/test/decompiler/reference/jak2/levels/common/races/race-mesh_REF.gc @@ -212,6 +212,7 @@ (start-edge int16 :offset 0) (end-edge int16 :offset 2) ) + :pack-me :method-count-assert 9 :size-assert #x4 :flag-assert #x900000004 @@ -304,9 +305,9 @@ :size-assert #x1c :flag-assert #x140000001c (:methods - (race-mesh-method-9 (_type_ int int rgba rgba) none 9) - (race-mesh-method-10 (_type_ int int) symbol 10) - (race-mesh-method-11 (_type_ int) none 11) + (debug-draw-path (_type_ int int rgba rgba) none 9) + (debug-draw-path-from-history (_type_ int int) symbol 10) + (debug-draw-slice (_type_ int) none 11) (debug-draw-edges (_type_) none 12) (race-mesh-method-13 (_type_ race-mesh-slice-query) none 13) (race-mesh-method-14 (_type_ race-mesh-slice-query) none 14) @@ -491,7 +492,7 @@ ) ;; definition for method 9 of type race-mesh -(defmethod race-mesh-method-9 race-mesh ((obj race-mesh) (arg0 int) (arg1 int) (arg2 rgba) (arg3 rgba)) +(defmethod debug-draw-path race-mesh ((obj race-mesh) (arg0 int) (arg1 int) (arg2 rgba) (arg3 rgba)) (when (< arg1 (the-as int (-> obj path-group-count))) (let ((v1-2 (-> obj path-groups arg1))) (if (< arg0 (-> v1-2 path-count)) @@ -503,7 +504,7 @@ ) ;; definition for method 10 of type race-mesh -(defmethod race-mesh-method-10 race-mesh ((obj race-mesh) (arg0 int) (arg1 int)) +(defmethod debug-draw-path-from-history race-mesh ((obj race-mesh) (arg0 int) (arg1 int)) (when (< arg1 (the-as int (-> obj path-group-count))) (let ((v1-2 (-> obj path-groups arg1))) (countdown (a2-1 (-> v1-2 path-count)) @@ -543,10 +544,10 @@ ;; definition for method 11 of type race-mesh ;; WARN: Return type mismatch symbol vs none. -(defmethod race-mesh-method-11 race-mesh ((obj race-mesh) (arg0 int)) - (let* ((v1-1 (the-as object (+ (the-as uint (-> obj slices)) (* arg0 4)))) - (s3-0 (-> obj edges (-> (the-as race-mesh-slice v1-1) start-edge))) - (s4-0 (-> obj edges (-> (the-as race-mesh-slice v1-1) end-edge))) +(defmethod debug-draw-slice race-mesh ((obj race-mesh) (arg0 int)) + (let* ((v1-1 (-> obj slices arg0)) + (s3-0 (-> obj edges (-> v1-1 start-edge))) + (s4-0 (-> obj edges (-> v1-1 end-edge))) ) (add-debug-line #t @@ -608,9 +609,9 @@ (slice-cnt (+ (-> obj slice-count) -1)) ) (while (>= slice-cnt idx) - (let* ((v1-2 (the-as object (+ (the-as uint (-> obj slices)) (* idx 4)))) - (s3-0 (-> obj edges (-> (the-as (pointer int16) v1-2)))) - (s2-0 (-> obj edges (-> (the-as race-mesh-slice v1-2) end-edge))) + (let* ((v1-2 (-> obj slices idx)) + (s3-0 (-> obj edges (-> v1-2 start-edge))) + (s2-0 (-> obj edges (-> v1-2 end-edge))) ) (add-debug-line #t (bucket-id debug-no-zbuf1) (-> s3-0 left) (-> s2-0 left) *color-white* #f (the-as rgba -1)) (add-debug-line @@ -660,9 +661,9 @@ ;; INFO: Used lq/sq (defmethod race-mesh-method-19 race-mesh ((obj race-mesh) (arg0 int) (arg1 race-mesh-slice-query)) (set! (-> arg1 slice-id) -1) - (let* ((v1-2 (the-as object (+ (the-as uint (-> obj slices)) (* arg0 4)))) - (a1-3 (-> obj edges (-> (the-as (pointer int16) v1-2)))) - (v1-5 (-> obj edges (-> (the-as race-mesh-slice v1-2) end-edge))) + (let* ((v1-2 (-> obj slices arg0)) + (a1-3 (-> obj edges (-> v1-2 start-edge))) + (v1-5 (-> obj edges (-> v1-2 end-edge))) ) (set! (-> arg1 slice-corners 0 quad) (-> a1-3 left quad)) (set! (-> arg1 slice-corners 1 quad) (-> a1-3 right quad)) @@ -770,9 +771,9 @@ (defmethod race-mesh-method-15 race-mesh ((obj race-mesh) (id int) (slice-query race-mesh-slice-query)) (local-vars (v1-8 symbol)) (set! (-> slice-query slice-id) id) - (let* ((v1-1 (the-as object (+ (the-as uint (-> obj slices)) (* id 4)))) - (a1-3 (-> obj edges (-> (the-as (pointer int16) v1-1)))) - (v1-4 (-> obj edges (-> (the-as race-mesh-slice v1-1) end-edge))) + (let* ((v1-1 (-> obj slices id)) + (a1-3 (-> obj edges (-> v1-1 start-edge))) + (v1-4 (-> obj edges (-> v1-1 end-edge))) ) (set! (-> slice-query slice-corners 0 quad) (-> a1-3 left quad)) (set! (-> slice-query slice-corners 1 quad) (-> a1-3 right quad)) @@ -995,7 +996,7 @@ ) ) (f0-0 (+ f30-0 f1-0)) - (v1-1 (the-as race-mesh-slice (+ (the-as uint (-> obj slices)) (* (-> arg0 slice-id) 4)))) + (v1-1 (-> obj slices (-> arg0 slice-id))) (f2-0 (-> obj edges (-> v1-1 start-edge) left w)) (f3-0 (-> obj edges (-> v1-1 end-edge) left w)) ) diff --git a/test/decompiler/reference/jak2/levels/common/races/vehicle-racer_REF.gc b/test/decompiler/reference/jak2/levels/common/races/vehicle-racer_REF.gc index 120c2e684b..65dc35f87a 100644 --- a/test/decompiler/reference/jak2/levels/common/races/vehicle-racer_REF.gc +++ b/test/decompiler/reference/jak2/levels/common/races/vehicle-racer_REF.gc @@ -103,17 +103,11 @@ (set! (-> s3-0 search-sphere r) 61440.0) (race-mesh-method-13 (-> obj mesh) (the-as race-mesh-slice-query (&-> s3-0 slice-id))) (when (!= (-> s3-0 slice-id) -1) - (let* ((v1-12 (the-as object (+ (the-as uint (-> obj mesh slices)) (* (-> s3-0 slice-id) 4)))) - (f0-1 - (-> (the-as (pointer float) (+ (* (-> (the-as (pointer int16) v1-12)) 4) (the-as int (-> s4-0 edge-infos))))) + (let* ((v1-12 (-> obj mesh slices (-> s3-0 slice-id))) + (f0-1 (-> (the-as (pointer float) (+ (* (-> v1-12 start-edge) 4) (the-as int (-> s4-0 edge-infos)))))) + (f1-0 + (-> (the-as race-path-edge-info (+ (* (-> v1-12 end-edge) 4) (the-as int (-> s4-0 edge-infos)))) sample-t) ) - (f1-0 (-> (the-as - race-path-edge-info - (+ (* (-> (the-as race-mesh-slice v1-12) end-edge) 4) (the-as int (-> s4-0 edge-infos))) - ) - sample-t - ) - ) ) (when (and (>= f0-1 0.0) (>= f1-0 0.0)) (let ((f0-2 (race-path-method-12 s4-0 arg1 f0-1 f1-0)))