diff --git a/decompiler/config/jak2/all-types.gc b/decompiler/config/jak2/all-types.gc index ee331fba7e..50a0f4c1dd 100644 --- a/decompiler/config/jak2/all-types.gc +++ b/decompiler/config/jak2/all-types.gc @@ -9087,8 +9087,8 @@ )) (define-extern *traffic-manager* process) -(define-extern *ctywide-entity* object) -(define-extern *lwide-entity* object) +(define-extern *ctywide-entity* entity) +(define-extern *lwide-entity* entity) (define-extern *race-vehicle-entity* entity-actor) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -30035,7 +30035,7 @@ (define-extern entity-count (function int)) (define-extern entity-remap-names (function pair none)) (define-extern process-status-bits (function process symbol none)) -(define-extern process-entity-set! (function process entity-actor entity-actor)) +(define-extern process-entity-set! (function process entity entity)) (define-extern process-task-mask (function process task-mask)) (define-extern update-actor-vis-box (function process-drawable vector vector none)) (define-extern expand-bounding-box (function vector vector vector vector none)) @@ -48417,6 +48417,19 @@ (phase-4a 7) ) +(defenum nav-branch-flags + :bitfield #t + :type uint8 + (nabflags-0) + (nabflags-1) + (nabflags-2) + (nabflags-3) + (nabflags-4) + (nabflags-5) + (nabflags-6) + (nabflags-7) + ) + (declare-type nav-node structure) (deftype nav-branch (structure) ((node nav-node 2 :offset-assert 0) @@ -48430,7 +48443,7 @@ (max-user-count uint8 :offset-assert 12) (user-count uint8 :offset-assert 13) (width uint8 :offset-assert 14) - (flags uint8 :offset-assert 15) + (flags nav-branch-flags :offset-assert 15) ) :method-count-assert 21 :size-assert #x10 @@ -48727,7 +48740,7 @@ (city-level-info-method-12 (_type_ vector nav-branch vector) vector 12) (lookup-cell-by-position (_type_ vector) vis-cell 13) (get-first-cell-in-box (_type_ vis-grid-box) vis-cell 14) - (sphere-in-grid? (_type_ int int) symbol 15) + (sphere-in-grid? (_type_ vector int) symbol 15) (callback-on-nav-segments-in-sphere (_type_ vector int traffic-find-segment-struct (function traffic-find-segment-struct nav-segment none)) none 16) (update-suppressions-from-traffic-engine (_type_ traffic-engine) none 17) (city-level-info-method-18 (_type_) none 18) @@ -48886,8 +48899,21 @@ ) ) +(defenum traffic-type-flags + :bitfield #t + :type uint8 + (trtflags-0) + (trtflags-1) + (trtflags-2) + (trtflags-3) + (trtflags-4) + (trtflags-5) + (trtflags-6) + (trtflags-7) + ) + (deftype traffic-object-type-info (structure) - ((flags uint8 :offset-assert 0) + ((flags traffic-type-flags :offset-assert 0) (target-count int8 :offset-assert 1) (active-count int8 :offset-assert 2) (inactive-count int8 :offset-assert 3) @@ -48898,7 +48924,7 @@ (parking-spot-prob uint8 :offset-assert 10) (guard-type uint8 :offset-assert 11) (array (pointer handle) :offset-assert 12) ;; this is a total guess TODO - (level level :offset-assert 16) + (level symbol :offset-assert 16) ) :method-count-assert 9 :size-assert #x14 @@ -49008,7 +49034,7 @@ (stop-alarm-sound (_type_) none 11) (debug-unused (_type_) none 12) (add-object (_type_ traffic-type process) none 13) - (sphere-in-loaded-city-infos? (_type_ int vector) symbol 14) + (sphere-in-loaded-city-infos? (_type_ vector int) symbol 14) (activate-one-citizen (_type_ nav-segment float) none 15) (activate-one-vehicle (_type_ nav-segment float) none 16) (can-dest-be-used? (_type_ nav-branch) symbol 17) @@ -49028,7 +49054,7 @@ (decrease-alert-level (_type_ int) none 31) (set-alert-level (_type_ int) none 32) (set-max-alert-level (_type_ int) none 33) - (set-alert-duration (_type_ int) none 34) + (set-alert-duration (_type_ time-frame) none 34) (get-alert-level (_type_) int 35) (get-target "@returns [[*target*]]" (_type_) target 36) (set-object-target-level (_type_ int float) none 37) @@ -49055,18 +49081,18 @@ (set-object-auto-activate (_type_ int object) none 58) (debug-check-proc-in-tracker (_type_ process int) none 59) (kill-traffic-sphere "Kill everything in the sphere with a traffic-off-force." (_type_ sphere) none 60) - (level-loaded "Call after loading a level to patch the data in the bsp" (_type_ level) none 61) - (level-killed "Call after removing a level. Kills processes and unlinks nav" (_type_ level) none 62) + (level-link "Call after loading a level to patch the data in the bsp" (_type_ level) none 61) + (level-unlink "Call after removing a level. Kills processes and unlinks nav" (_type_ level) none 62) (traffic-engine-method-63 (_type_) none 63) (traffic-engine-method-64 (_type_) none 64) (handle-new-vis-cell (_type_ vis-cell) none 65) (update-sync-from-frame-counter (_type_) none 66) - (per-frame-guard-update (_type_) none 67) - (per-frame-activate-deactivate "per-frame activate and deactivate processes." (_type_) none 68) - (per-frame-danger-update "see what's dangerous and make people avoid it." (_type_) none 69) + (update-guards (_type_) none 67) + (update-traffic-amount "kills inactive traffic and spawns more if needed." (_type_) none 68) + (update-danger "see what's dangerous and make people avoid it." (_type_) none 69) (update-danger-from-target "make people run away from jak when he is dangerous." (_type_) none 70) - (per-frame-alert-update (_type_) none 71) - (per-frame-suppressor-update (_type_) none 72) + (update-alert-state (_type_) none 71) + (update-suppressor (_type_) none 72) (recompute-supressions (_type_) none 73) ) ) @@ -51568,8 +51594,8 @@ :flag-assert #x900000020) (deftype traffic-manager (process) - ((traffic-engine traffic-engine :offset-assert 128) - (fast-spawn basic :offset-assert 132) + ((traffic-engine traffic-engine :offset-assert 128) + (fast-spawn symbol :offset-assert 132) (dark-guard-ratio int32 :offset-assert 136) (spawn-params traffic-object-spawn-params :inline :offset-assert 144) ) @@ -51579,12 +51605,12 @@ (:methods (idle () _type_ :state 14) (active () _type_ :state 15) - (traffic-manager-method-16 (_type_) none 16) + (update (_type_) none 16) (spawn-all (_type_) none 17) - (traffic-manager-method-18 (_type_) none 18) - (kill-all (_type_) none 19) - (traffic-manager-method-20 (_type_) none 20) - (traffic-manager-method-21 (_type_) none 21) + (kill-excess-once (_type_) none 18) + (kill-all-inactive (_type_) none 19) + (reset-and-init (_type_) none 20) + (init-params (_type_) none 21) ) ) diff --git a/decompiler/config/jak2/var_names.jsonc b/decompiler/config/jak2/var_names.jsonc index b791954e64..d7d51814f9 100644 --- a/decompiler/config/jak2/var_names.jsonc +++ b/decompiler/config/jak2/var_names.jsonc @@ -4137,5 +4137,26 @@ "vars": { "s4-0": "race-hash" } + }, + "(method 18 traffic-manager)": { + "vars": { + "s5-0": "type-i", + "v1-2": "traffic", + "a0-5": "total-count" + } + }, + "(method 21 traffic-manager)": { + "vars": { + "s5-0": "traffic-want-counts", + "s5-1": "params" + } + }, + "(method 70 traffic-engine)": { + "vars": { + "f0-0": "notify-radius", + "f2-0": "danger-level", + "f1-0": "danger-radius", + "f3-0": "decay-rate" + } } } diff --git a/game/graphics/opengl_renderer/foreground/Merc2.h b/game/graphics/opengl_renderer/foreground/Merc2.h index a660e14695..dae80c4032 100644 --- a/game/graphics/opengl_renderer/foreground/Merc2.h +++ b/game/graphics/opengl_renderer/foreground/Merc2.h @@ -66,7 +66,7 @@ class Merc2 : public BucketRenderer { GLuint vao, vertex; }; - static constexpr int kMaxEffect = 32; + static constexpr int kMaxEffect = 64; bool m_effect_debug_mask[kMaxEffect]; struct MercMat { diff --git a/game/graphics/opengl_renderer/sprite/GlowRenderer.h b/game/graphics/opengl_renderer/sprite/GlowRenderer.h index 6a70862c65..30d7b70972 100644 --- a/game/graphics/opengl_renderer/sprite/GlowRenderer.h +++ b/game/graphics/opengl_renderer/sprite/GlowRenderer.h @@ -76,7 +76,8 @@ class GlowRenderer { // max sprites should be 128 in simple sprite, plus 256 from aux = 384 // 20 width = 20 * 20 = 400 sprites > 384. - static constexpr int kDownsampleBatchWidth = 20; + // we multiply by 4 to get 16x as many max sprites (in-game the max is only 12x) + static constexpr int kDownsampleBatchWidth = 20 * 4; static constexpr int kMaxSprites = kDownsampleBatchWidth * kDownsampleBatchWidth; static constexpr int kMaxVertices = kMaxSprites * 32; // check. static constexpr int kMaxIndices = kMaxSprites * 32; // check. diff --git a/goal_src/jak1/engine/gfx/sprite/sprite-h.gc b/goal_src/jak1/engine/gfx/sprite/sprite-h.gc index d663f0c863..3d2c3d2d81 100644 --- a/goal_src/jak1/engine/gfx/sprite/sprite-h.gc +++ b/goal_src/jak1/engine/gfx/sprite/sprite-h.gc @@ -6,9 +6,7 @@ ;; dgos: GAME, ENGINE -(#if PC_BIG_MEMORY - (defconstant SPRITE_MAX_AMOUNT_MULT 12) - (none)) +(#when PC_BIG_MEMORY (defconstant SPRITE_MAX_AMOUNT_MULT 12)) (deftype sprite-vec-data-2d (structure) diff --git a/goal_src/jak1/engine/gfx/sprite/sprite.gc b/goal_src/jak1/engine/gfx/sprite/sprite.gc index 7c0df7a51e..b39f1d62aa 100644 --- a/goal_src/jak1/engine/gfx/sprite/sprite.gc +++ b/goal_src/jak1/engine/gfx/sprite/sprite.gc @@ -87,9 +87,10 @@ (defmethod new sprite-aux-list ((allocation symbol) (type-to-make type) (size int)) "Allocate a sprite-aux-list with room for size 4-byte entries" + (#when PC_BIG_MEMORY - (*! size SPRITE_MAX_AMOUNT_MULT) - ) + (*! size SPRITE_MAX_AMOUNT_MULT)) + (let ((v0-0 (object-new allocation type-to-make (the-as int (+ (-> type-to-make size) (the-as uint (* (+ size -1) 4)))) ) diff --git a/goal_src/jak2/engine/ai/enemy.gc b/goal_src/jak2/engine/ai/enemy.gc index cb41011f6f..164d4fa0c6 100644 --- a/goal_src/jak2/engine/ai/enemy.gc +++ b/goal_src/jak2/engine/ai/enemy.gc @@ -1183,7 +1183,7 @@ (defbehavior enemy-init-by-other enemy ((arg0 process-drawable) (arg1 transformq)) (let ((a1-1 (-> arg1 scale x))) (if a1-1 - (process-entity-set! self (the-as entity-actor a1-1)) + (process-entity-set! self (the-as entity a1-1)) ) ) (if (-> arg1 scale y) diff --git a/goal_src/jak2/engine/ai/traffic-h.gc b/goal_src/jak2/engine/ai/traffic-h.gc index 22e17c9830..ffa1496706 100644 --- a/goal_src/jak2/engine/ai/traffic-h.gc +++ b/goal_src/jak2/engine/ai/traffic-h.gc @@ -71,9 +71,9 @@ (define *traffic-manager* (the-as process #f)) -(define *ctywide-entity* (the-as object #f)) +(define *ctywide-entity* (the-as entity #f)) -(define *lwide-entity* (the-as object #f)) +(define *lwide-entity* (the-as entity #f)) (define *race-vehicle-entity* (the-as entity-actor #f)) diff --git a/goal_src/jak2/engine/collide/collide-shape-h.gc b/goal_src/jak2/engine/collide/collide-shape-h.gc index e66bef02f2..24cb16b972 100644 --- a/goal_src/jak2/engine/collide/collide-shape-h.gc +++ b/goal_src/jak2/engine/collide/collide-shape-h.gc @@ -293,9 +293,9 @@ (kmemopen global "collide-lists") -(define *collide-hit-by-player-list* (new 'global 'engine 'collide-hit-by-player-list 640 connection)) +(define *collide-hit-by-player-list* (new 'global 'engine 'collide-hit-by-player-list (* 640 PROCESS_HEAP_MULT) connection)) -(define *collide-hit-by-others-list* (new 'global 'engine 'collide-hit-by-others-list 768 connection)) +(define *collide-hit-by-others-list* (new 'global 'engine 'collide-hit-by-others-list PROCESS_HEAP_MAX connection)) (define *collide-player-list* (new 'global 'engine 'collide-player-list 32 connection)) diff --git a/goal_src/jak2/engine/common_objs/collectables.gc b/goal_src/jak2/engine/common_objs/collectables.gc index 2a3a27c1e9..10ca55ef4e 100644 --- a/goal_src/jak2/engine/common_objs/collectables.gc +++ b/goal_src/jak2/engine/common_objs/collectables.gc @@ -2273,7 +2273,7 @@ This commonly includes things such as: (logclear! (-> obj flags) (collectable-flag fadeout)) ) (((pickup-type board)) - (process-entity-set! obj (the-as entity-actor #f)) + (process-entity-set! obj (the-as entity #f)) (initialize-skeleton obj (the-as skeleton-group (art-group-get-by-name *level* "skel-board" (the-as (pointer uint32) #f))) diff --git a/goal_src/jak2/engine/common_objs/projectile.gc b/goal_src/jak2/engine/common_objs/projectile.gc index 0ed50d4edb..9c8892bc0b 100644 --- a/goal_src/jak2/engine/common_objs/projectile.gc +++ b/goal_src/jak2/engine/common_objs/projectile.gc @@ -456,7 +456,7 @@ If we've met or exceeded the projectiles maximum allowed hits, switch to the [[p (defbehavior projectile-init-by-other projectile ((arg0 projectile-init-by-other-params)) (stack-size-set! (-> self main-thread) 512) (logclear! (-> self mask) (process-mask actor-pause)) - (process-entity-set! self (the-as entity-actor (-> arg0 ent))) + (process-entity-set! self (-> arg0 ent)) (set! (-> self charge-level) (-> arg0 charge)) (set! (-> self options) (-> arg0 options)) (set! (-> self notify-handle) (-> arg0 notify-handle)) diff --git a/goal_src/jak2/engine/common_objs/voicebox.gc b/goal_src/jak2/engine/common_objs/voicebox.gc index 8528c43f83..28986f2579 100644 --- a/goal_src/jak2/engine/common_objs/voicebox.gc +++ b/goal_src/jak2/engine/common_objs/voicebox.gc @@ -572,7 +572,7 @@ This commonly includes things such as: ;; WARN: Return type mismatch object vs none. (defbehavior judge-init-by-other judge ((arg0 vector) (arg1 uint)) - (process-entity-set! self (the-as entity-actor #f)) + (process-entity-set! self (the-as entity #f)) (set! (-> self score) arg1) (setup-collision self) (init self) diff --git a/goal_src/jak2/engine/engine/engines.gc b/goal_src/jak2/engine/engine/engines.gc index 9b85eeff3b..cba5742180 100644 --- a/goal_src/jak2/engine/engine/engines.gc +++ b/goal_src/jak2/engine/engine/engines.gc @@ -9,7 +9,7 @@ (kmemopen global "engines") -(defconstant MATRIX_ENGINE_AMOUNT (* 1024 1)) +(defconstant MATRIX_ENGINE_AMOUNT (* 1024 PROCESS_HEAP_MULT)) (define *background-draw-engine* (new 'global 'engine 'draw 10 connection)) diff --git a/goal_src/jak2/engine/entity/entity-h.gc b/goal_src/jak2/engine/entity/entity-h.gc index aad855b202..3d1cc3837e 100644 --- a/goal_src/jak2/engine/entity/entity-h.gc +++ b/goal_src/jak2/engine/entity/entity-h.gc @@ -56,13 +56,10 @@ (define-extern reset-actors (function symbol none)) ;; NOTE - for projectile -(define-extern process-entity-set! (function process entity-actor entity-actor)) +(define-extern process-entity-set! (function process entity entity)) (define-extern process-by-ename (function string process)) (define-extern entity-birth-no-kill (function entity process)) -;; NOTE - for voicebox -(define-extern process-entity-set! (function process entity-actor entity-actor)) - ;; DECOMP BEGINS (define *generate-actor-vis* #f) diff --git a/goal_src/jak2/engine/entity/entity.gc b/goal_src/jak2/engine/entity/entity.gc index 78bfa8ff38..57cde65881 100644 --- a/goal_src/jak2/engine/entity/entity.gc +++ b/goal_src/jak2/engine/entity/entity.gc @@ -485,8 +485,8 @@ (none) ) -(defun process-entity-set! ((arg0 process) (arg1 entity-actor)) - (set! (-> arg0 entity) arg1) +(defun process-entity-set! ((arg0 process) (arg1 entity)) + (set! (-> arg0 entity) (the-as entity-actor arg1)) (if arg1 (set! (-> arg0 level) (-> arg1 extra level)) (set! (-> arg0 level) (-> *level* default-level)) @@ -2236,7 +2236,8 @@ (dotimes (s1-1 s2-3) (set! sv-48 (-> s3-4 data s1-1)) (cond - ((and (is-object-visible? s4-1 (-> sv-48 vis-id)) + ((and (#if PC_PORT (or (with-pc (-> *pc-settings* force-actors?)) (is-object-visible? s4-1 (-> sv-48 vis-id))) + (is-object-visible? s4-1 (-> sv-48 vis-id))) (not (logtest? (-> sv-48 perm status) (entity-perm-status bit-9 bit-10))) (not (logtest? (-> sv-48 kill-mask) sv-32)) (or (-> s4-1 vis-info 0) (< (vector-vector-distance (-> sv-48 trans) sv-16) (-> sv-48 vis-dist))) diff --git a/goal_src/jak2/engine/game/task/task-control.gc b/goal_src/jak2/engine/game/task/task-control.gc index 8253752d5f..0adad47228 100644 --- a/goal_src/jak2/engine/game/task/task-control.gc +++ b/goal_src/jak2/engine/game/task/task-control.gc @@ -1843,7 +1843,7 @@ ) ) (if a1-6 - (process-entity-set! self (the-as entity-actor a1-6)) + (process-entity-set! self a1-6) ) ) ) diff --git a/goal_src/jak2/engine/gfx/foreground/foreground.gc b/goal_src/jak2/engine/gfx/foreground/foreground.gc index 0904518752..cd7bdf4d5e 100644 --- a/goal_src/jak2/engine/gfx/foreground/foreground.gc +++ b/goal_src/jak2/engine/gfx/foreground/foreground.gc @@ -1280,5 +1280,5 @@ ;; todo foreground-draw-hud -;; changed to perm. -(define-perm *foreground-draw-engine* engine (new 'global 'engine 'draw 768 connection)) \ No newline at end of file +;; changed to perm and added multiplier. +(define-perm *foreground-draw-engine* engine (new 'global 'engine 'draw PROCESS_HEAP_MAX connection)) diff --git a/goal_src/jak2/engine/gfx/sprite/particles/sparticle-launcher.gc b/goal_src/jak2/engine/gfx/sprite/particles/sparticle-launcher.gc index faedee7ffa..cf4403a6e5 100644 --- a/goal_src/jak2/engine/gfx/sprite/particles/sparticle-launcher.gc +++ b/goal_src/jak2/engine/gfx/sprite/particles/sparticle-launcher.gc @@ -853,7 +853,15 @@ ) (add-debug-matrix *display-sprite-marks* (bucket-id debug2) (-> obj origin) (meters 2)) ) - (sphere-in-view-frustum? (the-as sphere s5-1)) + ;; can we see it? + (#if (not PC_PORT) + (sphere-in-view-frustum? (the-as sphere s5-1)) + (if (-> *pc-settings* ps2-parts?) + ;; pc port : launchers have larger bsphere if you have ps2 parts off + (sphere-in-view-frustum? (the-as sphere s5-1)) + (sphere-in-view-frustum? (the-as sphere (begin (*! (-> s5-1 w) 4.0) s5-1))) + ) + ) ) ) ) @@ -986,6 +994,12 @@ (if (nonzero? (-> obj matrix)) (set! f30-0 0.0) ) + + ;; if we have ps2 particles off, say we're at the camera + (with-pc + (if (not (-> *pc-settings* ps2-parts?)) + (set! f30-0 0.0))) + (let ((s2-1 (-> obj length))) (b! #t cfg-95 :delay (nop!)) (label cfg-19) diff --git a/goal_src/jak2/engine/gfx/sprite/particles/sparticle.gc b/goal_src/jak2/engine/gfx/sprite/particles/sparticle.gc index baf65d1983..463e46948c 100644 --- a/goal_src/jak2/engine/gfx/sprite/particles/sparticle.gc +++ b/goal_src/jak2/engine/gfx/sprite/particles/sparticle.gc @@ -54,6 +54,10 @@ (arg3 pointer) (arg4 (inline-array adgif-shader)) ) + (#when PC_BIG_MEMORY + (*! arg0 SPRITE_MAX_AMOUNT_MULT) + ; (*! arg1 SPRITE_MAX_AMOUNT_MULT) + ) (let ((gp-0 (object-new allocation type-to-make (the-as int (-> type-to-make size))))) (let* ((v1-3 (/ (+ arg0 63) 64)) (a0-2 (/ (+ arg1 63) 64)) diff --git a/goal_src/jak2/engine/gfx/sprite/sprite-h.gc b/goal_src/jak2/engine/gfx/sprite/sprite-h.gc index d894aa2789..ebdb7aba9b 100644 --- a/goal_src/jak2/engine/gfx/sprite/sprite-h.gc +++ b/goal_src/jak2/engine/gfx/sprite/sprite-h.gc @@ -10,6 +10,8 @@ (define-extern sprite-glow-init-engine (function dma-buffer none)) (define-extern sprite-glow-draw (function dma-buffer none)) +(#when PC_BIG_MEMORY (defconstant SPRITE_MAX_AMOUNT_MULT 12)) + ;; DECOMP BEGINS (deftype sprite-vec-data-2d (structure) diff --git a/goal_src/jak2/engine/gfx/sprite/sprite.gc b/goal_src/jak2/engine/gfx/sprite/sprite.gc index 42c0ed9e13..1a398dac29 100644 --- a/goal_src/jak2/engine/gfx/sprite/sprite.gc +++ b/goal_src/jak2/engine/gfx/sprite/sprite.gc @@ -145,6 +145,10 @@ the sprite renderer draw 2D or 3D sprites ) (defmethod new sprite-aux-list ((allocation symbol) (type-to-make type) (size int)) + + (#when PC_BIG_MEMORY + (*! size SPRITE_MAX_AMOUNT_MULT)) + (let ((v0-0 (object-new allocation type-to-make (the-as int (+ (-> type-to-make size) (* size 16)))))) (set! (-> v0-0 num-entries) size) (set! (-> v0-0 entry) 0) @@ -434,6 +438,12 @@ the sprite renderer draw 2D or 3D sprites (defmethod new sprite-array-2d ((allocation symbol) (type-to-make type) (group-0-size int) (group-1-size int)) "Allocate a sprite-array for 2d sprites. There are two groups, each can contain the given number." + + (#when PC_BIG_MEMORY + (*! group-0-size SPRITE_MAX_AMOUNT_MULT) + ; (*! group-1-size SPRITE_MAX_AMOUNT_MULT) + ) + (let* ((sprite-count (+ group-0-size group-1-size)) (vec-data-size (* 3 sprite-count)) ;; 3 quadwords of vec-data per sprite (adgif-data-size (* 5 sprite-count)) ;; 5 quadwords of adgif data per sprite @@ -458,6 +468,12 @@ the sprite renderer draw 2D or 3D sprites (defmethod new sprite-array-3d ((allocation symbol) (type-to-make type) (group-0-size int) (group-1-size int)) "Allocate a sprite-array for 3d sprites. There are two groups, each can contain the given number of sprites. Group 1 size is zero in practice for 3d." + + (#when PC_BIG_MEMORY + (*! group-0-size SPRITE_MAX_AMOUNT_MULT) + ; (*! group-1-size SPRITE_MAX_AMOUNT_MULT) + ) + (let* ((sprite-count (+ group-0-size group-1-size)) (vec-data-size (* 3 sprite-count)) (adgif-data-size (* 5 sprite-count)) diff --git a/goal_src/jak2/engine/level/level.gc b/goal_src/jak2/engine/level/level.gc index 05086d5b43..27f7a5969a 100644 --- a/goal_src/jak2/engine/level/level.gc +++ b/goal_src/jak2/engine/level/level.gc @@ -1763,6 +1763,9 @@ into 7 sections, which might explain the weird sizes in the center. (defmethod is-object-visible? level ((obj level) (arg0 int)) "Is drawable arg0 visible? Note that this will return #f if the visibility data is not loaded." + ;; note : pc port added option to show every actor regardless + (with-pc (if (-> *pc-settings* force-actors?) (return #t))) + ;; check the vis bits! (let* (;; lwu v1, 388(a0) (vis-data (-> obj vis-bits)) diff --git a/goal_src/jak2/engine/scene/scene.gc b/goal_src/jak2/engine/scene/scene.gc index f50f184c0d..4a409a3c6b 100644 --- a/goal_src/jak2/engine/scene/scene.gc +++ b/goal_src/jak2/engine/scene/scene.gc @@ -792,17 +792,9 @@ (when (and (>= f30-0 (-> v1-16 start-frame)) (< f30-0 (-> v1-16 end-frame))) (let ((s3-0 (-> v1-16 message s5-0))) (when (and s3-0 (nonzero? s3-0)) - (let ((s2-0 (new - 'stack - 'font-context - *font-default-matrix* - 20 - 290 - 0.0 - (font-color default) - (font-flags shadow kerning) - ) - ) + (let ((s2-0 + (new 'stack 'font-context *font-default-matrix* 20 290 0.0 (font-color default) (font-flags shadow kerning)) + ) ) (let ((v1-20 s2-0)) (set! (-> v1-20 width) (the float 465)) @@ -1445,17 +1437,9 @@ (when (and (< (- (-> self clock frame-counter) (-> self subtitle-change-time)) (seconds 2)) (< (mod (- (-> self clock frame-counter) (-> self subtitle-change-time)) 300) 210) ) - (let ((gp-6 (new - 'stack - 'font-context - *font-default-matrix* - 36 - 60 - 0.0 - (font-color default) - (font-flags shadow kerning) - ) - ) + (let ((gp-6 + (new 'stack 'font-context *font-default-matrix* 36 60 0.0 (font-color default) (font-flags shadow kerning)) + ) ) (let ((v1-121 gp-6)) (set! (-> v1-121 width) (the float 440)) @@ -1610,7 +1594,7 @@ ;; WARN: Using new Jak 2 rtype-of (defbehavior scene-player-init scene-player ((arg0 object) (arg1 symbol) (arg2 string)) "`object` arg can be an `(array scene)`, `pair of scene` or a `scene`" - (process-entity-set! self (the-as entity-actor #f)) + (process-entity-set! self (the-as entity #f)) (stack-size-set! (-> self main-thread) 1024) (set! (-> self root) (new 'process 'trsqv)) (case (rtype-of arg0) diff --git a/goal_src/jak2/engine/target/mech_suit/target-mech.gc b/goal_src/jak2/engine/target/mech_suit/target-mech.gc index baeccaa55d..067f2198cb 100644 --- a/goal_src/jak2/engine/target/mech_suit/target-mech.gc +++ b/goal_src/jak2/engine/target/mech_suit/target-mech.gc @@ -1169,7 +1169,7 @@ (let ((s4-1 (-> self entity)) (s3-0 (-> self level)) ) - (process-entity-set! self (the-as entity-actor (-> self mech entity))) + (process-entity-set! self (the-as entity (-> self mech entity))) (let ((s2-0 (get-process *16k-dead-pool* manipy #x4000))) (set! (-> self manipy) (the-as diff --git a/goal_src/jak2/kernel/gkernel-h.gc b/goal_src/jak2/kernel/gkernel-h.gc index 554a78962f..e5365df2d2 100644 --- a/goal_src/jak2/kernel/gkernel-h.gc +++ b/goal_src/jak2/kernel/gkernel-h.gc @@ -13,6 +13,14 @@ (defconstant DPROCESS_STACK_SIZE (#if PC_PORT #x8000 #x3800)) (defconstant PROCESS_STACK_SIZE (#if PC_PORT #x6000 #x1c00)) +;; the size of the shared heap used by dynamically sized processes +(#if PC_BIG_MEMORY + (defconstant PROCESS_HEAP_MULT 4) ;; 4x actors + (defconstant PROCESS_HEAP_MULT 1) + ) +(defconstant PROCESS_HEAP_SIZE (* PROCESS_HEAP_MULT 1540 1024)) +(defconstant PROCESS_HEAP_MAX (* PROCESS_HEAP_MULT 768)) + (defconstant *tab-size* (the binteger 8)) (defconstant *gtype-basic-offset* 4) diff --git a/goal_src/jak2/kernel/gkernel.gc b/goal_src/jak2/kernel/gkernel.gc index 0888a9d05a..32d25bc329 100644 --- a/goal_src/jak2/kernel/gkernel.gc +++ b/goal_src/jak2/kernel/gkernel.gc @@ -2449,7 +2449,7 @@ (when *debug-segment* (define *debug-dead-pool* (new 'debug 'dead-pool-heap "*debug-dead-pool*" 768 #x100000)) ) -(define *nk-dead-pool* (new 'global 'dead-pool-heap "*nk-dead-pool*" 768 #x181000)) +(define *nk-dead-pool* (new 'global 'dead-pool-heap "*nk-dead-pool*" PROCESS_HEAP_MAX PROCESS_HEAP_SIZE)) ;; more special dead pools (define *default-dead-pool* (the-as dead-pool *nk-dead-pool*)) (define *pickup-dead-pool* (the-as dead-pool *nk-dead-pool*)) diff --git a/goal_src/jak2/levels/city/common/nav-graph-h.gc b/goal_src/jak2/levels/city/common/nav-graph-h.gc index 14daa8a4ed..dcb9017481 100644 --- a/goal_src/jak2/levels/city/common/nav-graph-h.gc +++ b/goal_src/jak2/levels/city/common/nav-graph-h.gc @@ -40,6 +40,21 @@ (hidden 4)) ;; ---nav-node-flag-byte +;; +++nav-branch-flags +(defenum nav-branch-flags + :bitfield #t + :type uint8 + (nabflags-0) + (nabflags-1) + (nabflags-2) + (nabflags-3) + (nabflags-4) + (nabflags-5) + (nabflags-6) + (nabflags-7) + ) +;; ---nav-branch-flags + ;; DECOMP BEGINS (deftype nav-branch (structure) @@ -54,7 +69,7 @@ (max-user-count uint8 :offset-assert 12) (user-count uint8 :offset-assert 13) (width uint8 :offset-assert 14) - (flags uint8 :offset-assert 15) + (flags nav-branch-flags :offset-assert 15) ) :method-count-assert 21 :size-assert #x10 diff --git a/goal_src/jak2/levels/city/common/traffic-engine-h.gc b/goal_src/jak2/levels/city/common/traffic-engine-h.gc index 2ceb8aba0a..dea232324f 100644 --- a/goal_src/jak2/levels/city/common/traffic-engine-h.gc +++ b/goal_src/jak2/levels/city/common/traffic-engine-h.gc @@ -68,6 +68,19 @@ (tfs7 7) ) +(defenum traffic-type-flags + :bitfield #t + :type uint8 + (trtflags-0) + (trtflags-1) + (trtflags-2) + (trtflags-3) + (trtflags-4) + (trtflags-5) + (trtflags-6) + (trtflags-7) + ) + (declare-type traffic-find-segment-struct structure) @@ -191,7 +204,7 @@ (city-level-info-method-12 (_type_ vector nav-branch vector) vector 12) (lookup-cell-by-position (_type_ vector) vis-cell 13) (get-first-cell-in-box (_type_ vis-grid-box) vis-cell 14) - (sphere-in-grid? (_type_ int int) symbol 15) + (sphere-in-grid? (_type_ vector int) symbol 15) (callback-on-nav-segments-in-sphere (_type_ vector int traffic-find-segment-struct (function traffic-find-segment-struct nav-segment none)) none 16) (update-suppressions-from-traffic-engine (_type_ traffic-engine) none 17) (city-level-info-method-18 (_type_) none 18) @@ -318,18 +331,18 @@ (deftype traffic-object-type-info (structure) - ((flags uint8 :offset-assert 0) - (target-count int8 :offset-assert 1) - (active-count int8 :offset-assert 2) - (inactive-count int8 :offset-assert 3) - (reserve-count uint16 :offset-assert 4) - (killed-count uint16 :offset-assert 6) - (want-count int8 :offset-assert 8) - (tracker-index uint8 :offset-assert 9) - (parking-spot-prob uint8 :offset-assert 10) - (guard-type uint8 :offset-assert 11) - (array (pointer handle) :offset-assert 12) - (level level :offset-assert 16) + ((flags traffic-type-flags :offset-assert 0) + (target-count int8 :offset-assert 1) + (active-count int8 :offset-assert 2) + (inactive-count int8 :offset-assert 3) + (reserve-count uint16 :offset-assert 4) + (killed-count uint16 :offset-assert 6) + (want-count int8 :offset-assert 8) + (tracker-index uint8 :offset-assert 9) + (parking-spot-prob uint8 :offset-assert 10) + (guard-type uint8 :offset-assert 11) + (array (pointer handle) :offset-assert 12) + (level symbol :offset-assert 16) ) :method-count-assert 9 :size-assert #x14 @@ -423,7 +436,7 @@ (stop-alarm-sound (_type_) none 11) (debug-unused (_type_) none 12) (add-object (_type_ traffic-type process) none 13) - (sphere-in-loaded-city-infos? (_type_ int vector) symbol 14) + (sphere-in-loaded-city-infos? (_type_ vector int) symbol 14) (activate-one-citizen (_type_ nav-segment float) none 15) (activate-one-vehicle (_type_ nav-segment float) none 16) (can-dest-be-used? (_type_ nav-branch) symbol 17) @@ -443,7 +456,7 @@ (decrease-alert-level (_type_ int) none 31) (set-alert-level (_type_ int) none 32) (set-max-alert-level (_type_ int) none 33) - (set-alert-duration (_type_ int) none 34) + (set-alert-duration (_type_ time-frame) none 34) (get-alert-level (_type_) int 35) (get-target (_type_) target 36) (set-object-target-level (_type_ int float) none 37) @@ -470,18 +483,18 @@ (set-object-auto-activate (_type_ int object) none 58) (debug-check-proc-in-tracker (_type_ process int) none 59) (kill-traffic-sphere (_type_ sphere) none 60) - (level-loaded (_type_ level) none 61) - (level-killed (_type_ level) none 62) + (level-link (_type_ level) none 61) + (level-unlink (_type_ level) none 62) (traffic-engine-method-63 (_type_) none 63) (traffic-engine-method-64 (_type_) none 64) (handle-new-vis-cell (_type_ vis-cell) none 65) (update-sync-from-frame-counter (_type_) none 66) - (per-frame-guard-update (_type_) none 67) - (per-frame-activate-deactivate (_type_) none 68) - (per-frame-danger-update (_type_) none 69) + (update-guards (_type_) none 67) + (update-traffic-amount (_type_) none 68) + (update-danger (_type_) none 69) (update-danger-from-target (_type_) none 70) - (per-frame-alert-update (_type_) none 71) - (per-frame-suppressor-update (_type_) none 72) + (update-alert-state (_type_) none 71) + (update-suppressor (_type_) none 72) (recompute-supressions (_type_) none 73) ) ) diff --git a/goal_src/jak2/levels/city/common/traffic-engine.gc b/goal_src/jak2/levels/city/common/traffic-engine.gc index 2d95a9e9d4..63d7861d92 100644 --- a/goal_src/jak2/levels/city/common/traffic-engine.gc +++ b/goal_src/jak2/levels/city/common/traffic-engine.gc @@ -584,9 +584,9 @@ Process is recycled and moved to reserved, if it deactivates." (when (and (> (-> v1-2 inactive-count) 0) (> (-> v1-2 reserve-count) 0) (< (-> v1-2 active-count) (-> v1-2 target-count)) - (logtest? (-> v1-2 flags) 4) - (logtest? (-> v1-2 flags) 8) - (or (not (logtest? (-> v1-2 flags) 1)) + (logtest? (-> v1-2 flags) (traffic-type-flags trtflags-2)) + (logtest? (-> v1-2 flags) (traffic-type-flags trtflags-3)) + (or (not (logtest? (-> v1-2 flags) (traffic-type-flags trtflags-0))) (zero? (logand (-> obj traffic alert-state flags) (traffic-alert-flag alert-ending))) ) ) @@ -726,7 +726,7 @@ Process is recycled and moved to reserved, if it deactivates." (let ((v1-4 (-> obj inactive-object-array))) (dotimes (a0-5 21) (let ((a1-3 (-> obj object-type-info-array a0-5))) - (set! (-> a1-3 flags) (the-as uint 6)) + (set! (-> a1-3 flags) (traffic-type-flags trtflags-1 trtflags-2)) (set! (-> a1-3 inactive-count) 0) (set! (-> a1-3 active-count) 0) (set! (-> a1-3 target-count) 20) @@ -739,7 +739,7 @@ Process is recycled and moved to reserved, if it deactivates." ) ) (set! (-> obj object-type-info-array 6 guard-type) (the-as uint 0)) - (set! (-> obj object-type-info-array 20 level) (the-as level 'ctywide)) + (set! (-> obj object-type-info-array 20 level) 'ctywide) (let ((v1-8 11)) (dotimes (a0-6 10) (set! (-> obj object-type-info-array v1-8 tracker-index) (the-as uint 0)) @@ -782,7 +782,7 @@ Process is recycled and moved to reserved, if it deactivates." (dotimes (s5-2 (-> *level* length)) (let ((a1-12 (-> *level* level s5-2))) (if (= (-> a1-12 status) 'active) - (level-loaded obj a1-12) + (level-link obj a1-12) ) ) ) @@ -797,7 +797,7 @@ Process is recycled and moved to reserved, if it deactivates." (none) ) -(defmethod level-loaded traffic-engine ((obj traffic-engine) (arg0 level)) +(defmethod level-link traffic-engine ((obj traffic-engine) (arg0 level)) "Call after loading a level to patch the data in the bsp" (format #t "traffic-engine: level birth ~S~%" (-> arg0 nickname)) (cond @@ -929,7 +929,7 @@ Process is recycled and moved to reserved, if it deactivates." (none) ) -(defmethod level-killed traffic-engine ((obj traffic-engine) (arg0 level)) +(defmethod level-unlink traffic-engine ((obj traffic-engine) (arg0 level)) "Call after removing a level. Kills processes and unlinks nav" (let ((s4-0 (-> arg0 bsp city-level-info nav-graph))) (dotimes (v1-2 2) @@ -1170,11 +1170,11 @@ Process is recycled and moved to reserved, if it deactivates." (none) ) -(defmethod sphere-in-loaded-city-infos? traffic-engine ((obj traffic-engine) (arg0 int) (arg1 vector)) +(defmethod sphere-in-loaded-city-infos? traffic-engine ((obj traffic-engine) (arg0 vector) (arg1 int)) (dotimes (s3-0 2) (let ((v1-3 (-> obj level-data-array s3-0))) (when (nonzero? (-> v1-3 city-info)) - (if (sphere-in-grid? (-> v1-3 city-info) arg0 (the-as int arg1)) + (if (sphere-in-grid? (-> v1-3 city-info) arg0 arg1) (return #t) ) ) @@ -1185,7 +1185,7 @@ Process is recycled and moved to reserved, if it deactivates." (defmethod can-dest-be-used? traffic-engine ((obj traffic-engine) (arg0 nav-branch)) (let ((v1-0 (-> arg0 src-node))) - (or (logtest? (-> arg0 flags) 1) + (or (logtest? (-> arg0 flags) (nav-branch-flags nabflags-0)) (logtest? (-> v1-0 flags) (nav-node-flag-byte blocked)) (not (-> arg0 dest-node)) (>= (-> arg0 user-count) (-> arg0 max-user-count)) @@ -1294,44 +1294,44 @@ Process is recycled and moved to reserved, if it deactivates." (let ((v1-1 (-> obj danger-sphere-array))) (set! (-> v1-1 0 handle) (process->handle s5-0)) (let ((a0-4 (-> s5-0 focus-status)) - (f0-0 0.0) - (f1-0 0.0) - (f3-0 1.0) - (f2-0 0.0) + (notify-radius 0.0) + (danger-radius 0.0) + (decay-rate 1.0) + (danger-level 0.0) ) (cond ((logtest? (focus-status mech dark shooting) a0-4) - (set! f0-0 245760.0) - (set! f1-0 163840.0) - (set! f2-0 1.0) - (set! f3-0 0.0) + (set! notify-radius 245760.0) + (set! danger-radius 163840.0) + (set! danger-level 1.0) + (set! decay-rate 0.0) ) ((logtest? (focus-status gun) a0-4) - (set! f0-0 102400.0) - (set! f1-0 61440.0) - (set! f2-0 0.5) - (set! f3-0 0.5) + (set! notify-radius 102400.0) + (set! danger-radius 61440.0) + (set! danger-level 0.5) + (set! decay-rate 0.5) ) ((logtest? (focus-status board pilot) a0-4) - (set! f0-0 40960.0) - (set! f1-0 24576.0) - (set! f2-0 0.5) + (set! notify-radius 40960.0) + (set! danger-radius 24576.0) + (set! danger-level 0.5) ) ((logtest? a0-4 (focus-status dangerous)) - (set! f0-0 61440.0) - (set! f1-0 40960.0) - (set! f3-0 0.0) - (set! f2-0 0.5) + (set! notify-radius 61440.0) + (set! danger-radius 40960.0) + (set! decay-rate 0.0) + (set! danger-level 0.5) ) (else - (set! f3-0 1.5) + (set! decay-rate 1.5) ) ) - (set! (-> v1-1 0 decay-rate) (* 0.1 f3-0)) - (when (< (-> v1-1 0 danger-level) f2-0) - (set! (-> v1-1 0 danger-level) f2-0) - (set! (-> v1-1 0 sphere r) f1-0) - (set! (-> v1-1 0 notify-radius) f0-0) + (set! (-> v1-1 0 decay-rate) (* 0.1 decay-rate)) + (when (< (-> v1-1 0 danger-level) danger-level) + (set! (-> v1-1 0 danger-level) danger-level) + (set! (-> v1-1 0 sphere r) danger-radius) + (set! (-> v1-1 0 notify-radius) notify-radius) ) ) (let ((f0-1 (-> v1-1 0 sphere r))) @@ -1456,7 +1456,7 @@ Process is recycled and moved to reserved, if it deactivates." ) ) -(defmethod per-frame-danger-update traffic-engine ((obj traffic-engine)) +(defmethod update-danger traffic-engine ((obj traffic-engine)) "see what's dangerous and make people avoid it." (update-danger-from-target obj) (dotimes (s5-0 (-> obj danger-sphere-count)) @@ -1564,8 +1564,8 @@ Process is recycled and moved to reserved, if it deactivates." (none) ) -(defmethod per-frame-activate-deactivate traffic-engine ((obj traffic-engine)) - "per-frame activate and deactivate processes." +(defmethod update-traffic-amount traffic-engine ((obj traffic-engine)) + "kills inactive traffic and spawns more if needed." (local-vars (sv-48 int) (sv-64 nav-segment)) (set! (-> obj object-hash object-count) 0) (let* ((v1-1 (-> obj object-hash)) @@ -1622,7 +1622,7 @@ Process is recycled and moved to reserved, if it deactivates." (set! (-> s5-0 quad) (-> v1-33 trans quad)) (set! (-> s5-0 w) (-> v1-33 root-prim prim-core world-sphere w)) ) - (sphere-in-loaded-city-infos? obj (the-as int s5-0) (the-as vector 0)) + (sphere-in-loaded-city-infos? obj s5-0 0) ) (set! (-> (the-as vehicle s3-0) traffic-hash-id) (spatial-hash-method-39 (-> obj object-hash) s5-0 (the-as hash-object-info s3-0)) @@ -1652,7 +1652,7 @@ Process is recycled and moved to reserved, if it deactivates." (set! (-> s5-0 quad) (-> v1-54 trans quad)) (set! (-> s5-0 w) (-> v1-54 root-prim prim-core world-sphere w)) ) - (sphere-in-loaded-city-infos? obj (the-as int s5-0) (the-as vector 1)) + (sphere-in-loaded-city-infos? obj s5-0 1) ) (spatial-hash-method-39 (-> obj object-hash) s5-0 (the-as hash-object-info s3-1)) ) @@ -1730,7 +1730,7 @@ Process is recycled and moved to reserved, if it deactivates." (defmethod update-traffic traffic-engine ((obj traffic-engine)) (update-sync-from-frame-counter obj) - (per-frame-suppressor-update obj) + (update-suppressor obj) (let ((s5-0 (new 'stack-no-clear 'bounding-box))) (set-vector! (-> s5-0 min) @@ -1757,11 +1757,11 @@ Process is recycled and moved to reserved, if it deactivates." ) (update-grid-for-objects-in-box (-> obj object-hash) 253 (-> s5-0 min) (-> s5-0 max)) ) - (per-frame-activate-deactivate obj) + (update-traffic-amount obj) (set! (-> obj alert-state guard-aim-count) 0) - (per-frame-alert-update obj) - (per-frame-guard-update obj) - (per-frame-danger-update obj) + (update-alert-state obj) + (update-guards obj) + (update-danger obj) 0 (none) ) @@ -2142,7 +2142,7 @@ Process is recycled and moved to reserved, if it deactivates." (defmethod traffic-engine-method-49 traffic-engine ((obj traffic-engine) (los vector) (arg2 int) (target-status traffic-target-status)) (local-vars (guards (pointer crimson-guard)) - (guard-dists (pointer float)) + (guard-target-dists (pointer float)) (guard-idx int) (sv-208 int) (sv-216 float) @@ -2191,7 +2191,7 @@ Process is recycled and moved to reserved, if it deactivates." ) (when (update-guard-status-spots target-pos) (set! guards (new 'stack-no-clear 'array 'crimson-guard 16)) - (set! guard-dists (new 'stack-no-clear 'array 'float 16)) + (set! guard-target-dists (new 'stack-no-clear 'array 'float 16)) (set! guard-idx 0) (dotimes (guard-count (the-as int (-> obj vehicle-tracker-array active-object-count))) (case (-> obj vehicle-tracker-array active-object-type-list guard-count) @@ -2202,7 +2202,7 @@ Process is recycled and moved to reserved, if it deactivates." (= (-> (the-as crimson-guard guard) traffic-target-status handle) (-> target-status handle)) ) (set! (-> guards guard-idx) (the-as crimson-guard guard)) - (set! (-> guard-dists guard-idx) + (set! (-> guard-target-dists guard-idx) (vector-vector-distance (-> (the-as crimson-guard guard) root-override2 trans) target-pos) ) (set! guard-idx (+ guard-idx 1)) @@ -2216,14 +2216,14 @@ Process is recycled and moved to reserved, if it deactivates." (while a0-35 (set! a0-35 #f) (dotimes (v1-77 (+ guard-idx -1)) - (when (< (-> guard-dists (+ v1-77 1)) (-> guard-dists v1-77)) + (when (< (-> guard-target-dists (+ v1-77 1)) (-> guard-target-dists v1-77)) (let ((a0-38 (-> guards v1-77)) - (f0-2 (-> guard-dists v1-77)) + (f0-2 (-> guard-target-dists v1-77)) ) (set! (-> guards v1-77) (-> guards (+ v1-77 1))) (set! (-> guards (+ v1-77 1)) a0-38) - (set! (-> guard-dists v1-77) (-> guard-dists (+ v1-77 1))) - (set! (-> guard-dists (+ v1-77 1)) f0-2) + (set! (-> guard-target-dists v1-77) (-> guard-target-dists (+ v1-77 1))) + (set! (-> guard-target-dists (+ v1-77 1)) f0-2) ) (set! a0-35 #t) ) @@ -2285,7 +2285,7 @@ Process is recycled and moved to reserved, if it deactivates." ) ) -(defmethod set-alert-duration traffic-engine ((obj traffic-engine) (arg0 int)) +(defmethod set-alert-duration traffic-engine ((obj traffic-engine) (arg0 time-frame)) (set! (-> obj alert-state duration) (the-as uint arg0)) 0 (none) @@ -2599,7 +2599,7 @@ Process is recycled and moved to reserved, if it deactivates." (-> obj alert-state guard-type-info-array arg0 change-to-type) ) -(defmethod per-frame-guard-update traffic-engine ((obj traffic-engine)) +(defmethod update-guards traffic-engine ((obj traffic-engine)) (dotimes (v1-0 6) (set! (-> obj alert-state guard-type-info-array v1-0 count) 0) ) @@ -2730,7 +2730,7 @@ Process is recycled and moved to reserved, if it deactivates." (none) ) -(defmethod per-frame-alert-update traffic-engine ((obj traffic-engine)) +(defmethod update-alert-state traffic-engine ((obj traffic-engine)) (with-pp (if (and (logtest? (-> obj alert-state flags) (traffic-alert-flag target-jak)) *target*) (set! (-> obj alert-state target-status-array 0 handle) (process->handle *target*)) @@ -2893,7 +2893,7 @@ Process is recycled and moved to reserved, if it deactivates." *target* ) (for-all-active-processes obj (lambda ((arg0 process-focusable) (arg1 traffic-object-type-info)) - (if (logtest? (-> arg1 flags) 1) + (if (logtest? (-> arg1 flags) (traffic-type-flags trtflags-0)) (send-event arg0 'alert-begin *target*) ) (none) @@ -2903,7 +2903,7 @@ Process is recycled and moved to reserved, if it deactivates." ) (else (for-all-active-processes obj (lambda ((arg0 process-focusable) (arg1 traffic-object-type-info)) - (if (logtest? (-> arg1 flags) 1) + (if (logtest? (-> arg1 flags) (traffic-type-flags trtflags-0)) (send-event arg0 'alert-end) ) (none) @@ -2930,54 +2930,56 @@ Process is recycled and moved to reserved, if it deactivates." (logclear! (-> v1-6 0 flags) (traffic-target-flag force-visible)) ) (set-target-level obj 1.0) - (set-alert-duration obj 9000) + (set-alert-duration obj (seconds 30)) (set-max-alert-level obj 4) (let ((v1-13 42)) (dotimes (a0-7 21) (let ((a1-6 (-> obj object-type-info-array a0-7))) - (set! (-> a1-6 flags) (the-as uint 6)) + (set! (-> a1-6 flags) (traffic-type-flags trtflags-1 trtflags-2)) (set! (-> a1-6 reserve-count) (the-as uint (max 1000 (min #xfde8 (* 1000 (-> a1-6 want-count)))))) (set! (-> a1-6 killed-count) (the-as uint 0)) (set! (-> a1-6 parking-spot-prob) - (the-as uint (if (and (zero? (-> a1-6 tracker-index)) (zero? (logand (-> a1-6 flags) 1))) - v1-13 - 0 - ) - ) + (the-as + uint + (if (and (zero? (-> a1-6 tracker-index)) (zero? (logand (-> a1-6 flags) (traffic-type-flags trtflags-0)))) + v1-13 + 0 + ) + ) ) ) ) ) (let ((v1-16 (-> obj object-type-info-array 6))) - (logior! (-> v1-16 flags) 1) + (logior! (-> v1-16 flags) (traffic-type-flags trtflags-0)) ) (let ((v1-17 (-> obj object-type-info-array 7))) - (logior! (-> v1-17 flags) 1) + (logior! (-> v1-17 flags) (traffic-type-flags trtflags-0)) ) (let ((v1-18 (-> obj object-type-info-array 18))) - (logior! (-> v1-18 flags) 1) + (logior! (-> v1-18 flags) (traffic-type-flags trtflags-0)) ) (let ((v1-19 (-> obj object-type-info-array 19))) - (logior! (-> v1-19 flags) 1) + (logior! (-> v1-19 flags) (traffic-type-flags trtflags-0)) ) (let ((v1-20 (-> obj object-type-info-array 20))) - (logior! (-> v1-20 flags) 1) + (logior! (-> v1-20 flags) (traffic-type-flags trtflags-0)) ) (let ((v1-21 (-> obj object-type-info-array 5))) (set! (-> v1-21 target-count) 0) - (set! (-> v1-21 flags) (logand -7 (-> v1-21 flags))) + (logclear! (-> v1-21 flags) (traffic-type-flags trtflags-1 trtflags-2)) ) (let ((v1-22 (-> obj object-type-info-array 3))) (set! (-> v1-22 target-count) 0) - (set! (-> v1-22 flags) (logand -5 (-> v1-22 flags))) + (logclear! (-> v1-22 flags) (traffic-type-flags trtflags-2)) ) (let ((v1-23 (-> obj object-type-info-array 4))) (set! (-> v1-23 target-count) 0) - (set! (-> v1-23 flags) (logand -5 (-> v1-23 flags))) + (logclear! (-> v1-23 flags) (traffic-type-flags trtflags-2)) ) (let ((v1-24 (-> obj object-type-info-array 17))) (set! (-> v1-24 target-count) 0) - (set! (-> v1-24 flags) (logand -7 (-> v1-24 flags))) + (logclear! (-> v1-24 flags) (traffic-type-flags trtflags-1 trtflags-2)) ) (dotimes (v1-25 6) (let ((a0-28 (-> obj alert-state guard-type-info-array v1-25))) @@ -3041,8 +3043,8 @@ Process is recycled and moved to reserved, if it deactivates." (defmethod set-object-auto-activate traffic-engine ((obj traffic-engine) (arg0 int) (arg1 object)) (let ((v1-2 (-> obj object-type-info-array arg0))) (if arg1 - (logior! (-> v1-2 flags) 4) - (set! (-> v1-2 flags) (logand -5 (-> v1-2 flags))) + (logior! (-> v1-2 flags) (traffic-type-flags trtflags-2)) + (logclear! (-> v1-2 flags) (traffic-type-flags trtflags-2)) ) ) 0 @@ -3105,7 +3107,9 @@ Process is recycled and moved to reserved, if it deactivates." ) (while (< (the-as uint s5-0) (the-as uint 21)) (let ((s2-0 (-> obj object-type-info-array s5-0))) - (when (and (logtest? (-> s2-0 flags) 8) (= (level-status *level* (the-as symbol (-> s2-0 level))) 'active)) + (when (and (logtest? (-> s2-0 flags) (traffic-type-flags trtflags-3)) + (= (level-status *level* (-> s2-0 level)) 'active) + ) (+! s3-0 (-> s2-0 parking-spot-prob)) (b! (>= (the-as uint s3-0) (the-as uint s4-0)) cfg-10) ) @@ -3150,7 +3154,7 @@ Process is recycled and moved to reserved, if it deactivates." (none) ) -(defmethod per-frame-suppressor-update traffic-engine ((obj traffic-engine)) +(defmethod update-suppressor traffic-engine ((obj traffic-engine)) (let ((v1-3 (- (-> *display* game-clock frame-counter) (-> *display* game-clock old-frame-counter)))) (dotimes (a1-3 16) (let ((a2-2 (-> obj suppressor array a1-3))) @@ -3207,12 +3211,12 @@ Process is recycled and moved to reserved, if it deactivates." ) ) -(defmethod sphere-in-grid? city-level-info ((obj city-level-info) (arg0 int) (arg1 int)) +(defmethod sphere-in-grid? city-level-info ((obj city-level-info) (arg0 vector) (arg1 int)) (let ((gp-0 #f)) (let ((s3-0 (new 'stack-no-clear 'vis-grid-box)) (s2-0 (new 'stack-no-clear 'vis-grid-box)) ) - (lookup-box-for-sphere (-> obj grid-info) s2-0 (the-as vector arg0)) + (lookup-box-for-sphere (-> obj grid-info) s2-0 arg0) (set! (-> s3-0 min y) (-> s2-0 min y)) (let ((v1-6 (+ (- 1 (-> s2-0 min y)) (-> s2-0 max y)))) (b! #t cfg-13 :delay (nop!)) diff --git a/goal_src/jak2/levels/city/common/traffic-manager.gc b/goal_src/jak2/levels/city/common/traffic-manager.gc index a298d9702d..b91ff389b7 100644 --- a/goal_src/jak2/levels/city/common/traffic-manager.gc +++ b/goal_src/jak2/levels/city/common/traffic-manager.gc @@ -13,7 +13,7 @@ (deftype traffic-manager (process) ((traffic-engine traffic-engine :offset-assert 128) - (fast-spawn basic :offset-assert 132) + (fast-spawn symbol :offset-assert 132) (dark-guard-ratio int32 :offset-assert 136) (spawn-params traffic-object-spawn-params :inline :offset-assert 144) ) @@ -24,12 +24,12 @@ (:methods (idle () _type_ :state 14) (active () _type_ :state 15) - (traffic-manager-method-16 (_type_) none 16) + (update (_type_) none 16) (spawn-all (_type_) none 17) - (traffic-manager-method-18 (_type_) none 18) - (kill-all (_type_) none 19) - (traffic-manager-method-20 (_type_) none 20) - (traffic-manager-method-21 (_type_) none 21) + (kill-excess-once (_type_) none 18) + (kill-all-inactive (_type_) none 19) + (reset-and-init (_type_) none 20) + (init-params (_type_) none 21) ) ) @@ -54,9 +54,9 @@ (none) ) -(defmethod traffic-manager-method-16 traffic-manager ((obj traffic-manager)) +(defmethod update traffic-manager ((obj traffic-manager)) (update-traffic (-> obj traffic-engine)) - (traffic-manager-method-18 obj) + (kill-excess-once obj) (spawn-all obj) (if *debug-segment* (debug-unused (-> obj traffic-engine)) @@ -75,16 +75,16 @@ (none) ) -(defmethod traffic-manager-method-18 traffic-manager ((obj traffic-manager)) - (let ((s5-0 0)) - (while (< (the-as uint s5-0) (the-as uint 21)) - (let ((v1-2 (-> obj traffic-engine object-type-info-array s5-0))) - (when (logtest? (-> v1-2 flags) 2) - (let ((a0-5 (+ (-> v1-2 active-count) (-> v1-2 inactive-count)))) - (when (< (-> v1-2 want-count) a0-5) +(defmethod kill-excess-once traffic-manager ((obj traffic-manager)) + (let ((type-i 0)) + (while (< (the-as uint type-i) (the-as uint 21)) + (let ((traffic (-> obj traffic-engine object-type-info-array type-i))) + (when (logtest? (-> traffic flags) (traffic-type-flags trtflags-1)) + (let ((total-count (+ (-> traffic active-count) (-> traffic inactive-count)))) + (when (< (-> traffic want-count) total-count) (let ((a0-10 (handle->process (get-from-inactive-by-type - (-> obj traffic-engine tracker-array (-> v1-2 tracker-index)) - (the-as traffic-type s5-0) + (-> obj traffic-engine tracker-array (-> traffic tracker-index)) + (the-as traffic-type type-i) ) ) ) @@ -97,14 +97,14 @@ ) ) ) - (+! s5-0 1) + (+! type-i 1) ) ) 0 (none) ) -(defmethod kill-all traffic-manager ((obj traffic-manager)) +(defmethod kill-all-inactive traffic-manager ((obj traffic-manager)) (let ((s5-0 0)) (while (< (the-as uint s5-0) (the-as uint 21)) (let ((s4-0 (-> obj traffic-engine object-type-info-array s5-0))) @@ -134,9 +134,9 @@ (b! #t cfg-4 :delay (nop!)) (label cfg-1) (let ((s4-0 (-> obj traffic-engine object-type-info-array s5-0))) - (set! (-> s4-0 flags) (logand -9 (-> s4-0 flags))) - (if (= (level-status *level* (the-as symbol (-> s4-0 level))) 'active) - (logior! (-> s4-0 flags) 8) + (logclear! (-> s4-0 flags) (traffic-type-flags trtflags-3)) + (if (= (level-status *level* (-> s4-0 level)) 'active) + (logior! (-> s4-0 flags) (traffic-type-flags trtflags-3)) ) ) (+! s5-0 1) @@ -159,7 +159,11 @@ (let ((s0-0 (-> obj traffic-engine object-type-info-array s1-0))) (let ((v1-21 (+ (-> s0-0 active-count) (-> s0-0 inactive-count)))) (b! - (not (and (logtest? (-> s0-0 flags) 2) (logtest? (-> s0-0 flags) 8) (< v1-21 (-> s0-0 want-count)))) + (not (and (logtest? (-> s0-0 flags) (traffic-type-flags trtflags-1)) + (logtest? (-> s0-0 flags) (traffic-type-flags trtflags-3)) + (< v1-21 (-> s0-0 want-count)) + ) + ) cfg-29 :delay (nop!) ) @@ -356,7 +360,7 @@ ) ) -(defmethod traffic-manager-method-20 traffic-manager ((obj traffic-manager)) +(defmethod reset-and-init traffic-manager ((obj traffic-manager)) (set! (-> obj traffic-engine) *traffic-engine*) (reset-and-init-from-manager (-> obj traffic-engine) obj) (restore-city-speeches) @@ -383,54 +387,54 @@ (none) ) -(defmethod traffic-manager-method-21 traffic-manager ((obj traffic-manager)) - (let ((s5-0 (new 'stack-no-clear 'array 'int8 21))) - (set! (-> s5-0 11) 8) - (set! (-> s5-0 12) 8) - (set! (-> s5-0 13) 8) - (set! (-> s5-0 14) 7) - (set! (-> s5-0 15) 7) - (set! (-> s5-0 16) 7) - (set! (-> s5-0 18) 4) - (set! (-> s5-0 19) 3) - (set! (-> s5-0 20) 0) - (set! (-> s5-0 0) 15) - (set! (-> s5-0 1) 15) - (set! (-> s5-0 2) 14) - (set! (-> s5-0 3) 1) - (set! (-> s5-0 4) 1) - (set! (-> s5-0 6) 9) - (set! (-> s5-0 7) 0) - (set! (-> s5-0 8) 14) - (set! (-> s5-0 9) 14) - (set! (-> s5-0 10) 14) - (set! (-> obj fast-spawn) (the-as basic *traffic-fast-spawn*)) - (traffic-manager-method-20 obj) +(defmethod init-params traffic-manager ((obj traffic-manager)) + (let ((traffic-want-counts (new 'stack-no-clear 'array 'int8 21))) + (set! (-> traffic-want-counts 11) 8) + (set! (-> traffic-want-counts 12) 8) + (set! (-> traffic-want-counts 13) 8) + (set! (-> traffic-want-counts 14) 7) + (set! (-> traffic-want-counts 15) 7) + (set! (-> traffic-want-counts 16) 7) + (set! (-> traffic-want-counts 18) 4) + (set! (-> traffic-want-counts 19) 3) + (set! (-> traffic-want-counts 20) 0) + (set! (-> traffic-want-counts 0) 15) + (set! (-> traffic-want-counts 1) 15) + (set! (-> traffic-want-counts 2) 14) + (set! (-> traffic-want-counts 3) 1) + (set! (-> traffic-want-counts 4) 1) + (set! (-> traffic-want-counts 6) 9) + (set! (-> traffic-want-counts 7) 0) + (set! (-> traffic-want-counts 8) 14) + (set! (-> traffic-want-counts 9) 14) + (set! (-> traffic-want-counts 10) 14) + (set! (-> obj fast-spawn) *traffic-fast-spawn*) + (reset-and-init obj) (let ((v1-20 (-> obj traffic-engine))) (dotimes (a0-2 21) - (set! (-> v1-20 object-type-info-array a0-2 want-count) (-> s5-0 a0-2)) + (set! (-> v1-20 object-type-info-array a0-2 want-count) (-> traffic-want-counts a0-2)) ) ) ) - (let ((s5-1 (-> obj spawn-params))) - (set! (-> s5-1 object-type) (traffic-type crimson-guard-1)) - (set! (-> s5-1 behavior) (the-as uint 1)) - (set! (-> s5-1 id) (the-as uint 0)) - (set! (-> s5-1 nav-mesh) #f) - (set! (-> s5-1 nav-branch) #f) - (set! (-> s5-1 proc) #f) - (set! (-> s5-1 handle) (the-as handle #f)) - (set! (-> s5-1 user-data) (the-as uint 0)) - (set! (-> s5-1 flags) (the-as uint 2)) - (set! (-> s5-1 guard-type) (the-as uint 7)) - (vector-reset! (-> s5-1 velocity)) - (vector-reset! (-> s5-1 position)) + (let ((params (-> obj spawn-params))) + (set! (-> params object-type) (traffic-type crimson-guard-1)) + (set! (-> params behavior) (the-as uint 1)) + (set! (-> params id) (the-as uint 0)) + (set! (-> params nav-mesh) #f) + (set! (-> params nav-branch) #f) + (set! (-> params proc) #f) + (set! (-> params handle) (the-as handle #f)) + (set! (-> params user-data) (the-as uint 0)) + (set! (-> params flags) (the-as uint 2)) + (set! (-> params guard-type) (the-as uint 7)) + (vector-reset! (-> params velocity)) + (vector-reset! (-> params position)) (forward-up-nopitch->quaternion - (-> s5-1 rotation) + (-> params rotation) (new 'static 'vector :z 1.0 :w 1.0) (new 'static 'vector :y 1.0 :w 1.0) ) - (set! (-> s5-1 id) (the-as uint 1)) + (set! (-> params id) (the-as uint 1)) ) (set! (-> obj dark-guard-ratio) (if (task-node-closed? (game-task-node tomb-boss-resolution)) 5 @@ -476,7 +480,7 @@ ) (('set-alert-duration) (let ((a1-8 (-> arg3 param 0))) - (set-alert-duration (-> self traffic-engine) (the-as int a1-8)) + (set-alert-duration (-> self traffic-engine) (the-as time-frame a1-8)) ) ) (('deactivate-all) @@ -613,12 +617,12 @@ ) (('level-loaded) (let ((a1-29 (-> arg3 param 0))) - (level-loaded (-> self traffic-engine) (the-as level a1-29)) + (level-link (-> self traffic-engine) (the-as level a1-29)) ) ) (('level-killed) (let ((s5-1 (the-as object (-> arg3 param 0)))) - (level-killed (-> self traffic-engine) (the-as level s5-1)) + (level-unlink (-> self traffic-engine) (the-as level s5-1)) (format #t "traffic-manager : level killed ~S~%" (-> (the-as level s5-1) nickname)) ) ) @@ -632,11 +636,11 @@ (('kill-all) (format #t "traffic-manager::kill-all~%") (deactivate-all (-> self traffic-engine)) - (kill-all self) + (kill-all-inactive self) ) (('spawn-all) (format #t "traffic-manager::spawn-all~%") - (set! (-> self fast-spawn) (the-as basic #t)) + (set! (-> self fast-spawn) #t) (spawn-all self) ) (('set-density-factor) @@ -672,7 +676,7 @@ (defbehavior traffic-manager-init-by-other traffic-manager () (stack-size-set! (-> self main-thread) 128) (ctywide-entity-hack) - (traffic-manager-method-21 self) + (init-params self) (add-setting! 'task-mask 'clear 0 #x4000) (set! (-> self event-hook) traffic-manager-event-handler) (rigid-body-queue-manager-spawn *traffic-rigid-body-queue* self) @@ -713,7 +717,7 @@ :event traffic-manager-event-handler :code (the-as (function none :behavior traffic-manager) sleep-code) :post (behavior () - (traffic-manager-method-16 self) + (update self) (none) ) ) @@ -763,54 +767,54 @@ (when gp-0 (case (-> arg0 name) (('lwidea) - (set! (-> gp-0 object-type-info-array 0 level) (the-as level 'lwidea)) - (set! (-> gp-0 object-type-info-array 1 level) (the-as level 'lwidea)) - (set! (-> gp-0 object-type-info-array 2 level) (the-as level 'lwidea)) - (set! (-> gp-0 object-type-info-array 3 level) (the-as level 'lwidea)) - (set! (-> gp-0 object-type-info-array 4 level) (the-as level 'lwidea)) + (set! (-> gp-0 object-type-info-array 0 level) 'lwidea) + (set! (-> gp-0 object-type-info-array 1 level) 'lwidea) + (set! (-> gp-0 object-type-info-array 2 level) 'lwidea) + (set! (-> gp-0 object-type-info-array 3 level) 'lwidea) + (set! (-> gp-0 object-type-info-array 4 level) 'lwidea) (set! (-> gp-0 object-type-info-array 5 level) #f) - (set! (-> gp-0 object-type-info-array 6 level) (the-as level 'lwidea)) + (set! (-> gp-0 object-type-info-array 6 level) 'lwidea) (set! (-> gp-0 object-type-info-array 7 level) #f) (set! (-> gp-0 object-type-info-array 8 level) #f) (set! (-> gp-0 object-type-info-array 9 level) #f) (set! (-> gp-0 object-type-info-array 10 level) #f) - (set! (-> gp-0 object-type-info-array 11 level) (the-as level 'lwidea)) - (set! (-> gp-0 object-type-info-array 12 level) (the-as level 'lwidea)) - (set! (-> gp-0 object-type-info-array 13 level) (the-as level 'lwidea)) - (set! (-> gp-0 object-type-info-array 14 level) (the-as level 'lwidea)) - (set! (-> gp-0 object-type-info-array 15 level) (the-as level 'lwidea)) - (set! (-> gp-0 object-type-info-array 16 level) (the-as level 'lwidea)) + (set! (-> gp-0 object-type-info-array 11 level) 'lwidea) + (set! (-> gp-0 object-type-info-array 12 level) 'lwidea) + (set! (-> gp-0 object-type-info-array 13 level) 'lwidea) + (set! (-> gp-0 object-type-info-array 14 level) 'lwidea) + (set! (-> gp-0 object-type-info-array 15 level) 'lwidea) + (set! (-> gp-0 object-type-info-array 16 level) 'lwidea) (set! (-> gp-0 object-type-info-array 17 level) #f) - (set! (-> gp-0 object-type-info-array 18 level) (the-as level 'lwidea)) - (set! (-> gp-0 object-type-info-array 19 level) (the-as level 'lwidea)) + (set! (-> gp-0 object-type-info-array 18 level) 'lwidea) + (set! (-> gp-0 object-type-info-array 19 level) 'lwidea) (logior! (-> gp-0 alert-state flags) (traffic-alert-flag target-jak)) (set! *traffic-alert-level-force* #f) ) (('lwideb) - (set! (-> gp-0 object-type-info-array 0 level) (the-as level 'lwideb)) + (set! (-> gp-0 object-type-info-array 0 level) 'lwideb) (set! (-> gp-0 object-type-info-array 1 level) #f) (set! (-> gp-0 object-type-info-array 2 level) #f) - (set! (-> gp-0 object-type-info-array 3 level) (the-as level 'lwideb)) - (set! (-> gp-0 object-type-info-array 4 level) (the-as level 'lwideb)) + (set! (-> gp-0 object-type-info-array 3 level) 'lwideb) + (set! (-> gp-0 object-type-info-array 4 level) 'lwideb) (set! (-> gp-0 object-type-info-array 5 level) #f) - (set! (-> gp-0 object-type-info-array 6 level) (the-as level 'lwideb)) + (set! (-> gp-0 object-type-info-array 6 level) 'lwideb) (set! (-> gp-0 object-type-info-array 7 level) #f) - (set! (-> gp-0 object-type-info-array 8 level) (the-as level 'lwideb)) - (set! (-> gp-0 object-type-info-array 9 level) (the-as level 'lwideb)) - (set! (-> gp-0 object-type-info-array 10 level) (the-as level 'lwideb)) - (set! (-> gp-0 object-type-info-array 11 level) (the-as level 'lwideb)) + (set! (-> gp-0 object-type-info-array 8 level) 'lwideb) + (set! (-> gp-0 object-type-info-array 9 level) 'lwideb) + (set! (-> gp-0 object-type-info-array 10 level) 'lwideb) + (set! (-> gp-0 object-type-info-array 11 level) 'lwideb) (set! (-> gp-0 object-type-info-array 12 level) #f) (set! (-> gp-0 object-type-info-array 13 level) #f) - (set! (-> gp-0 object-type-info-array 14 level) (the-as level 'lwideb)) + (set! (-> gp-0 object-type-info-array 14 level) 'lwideb) (set! (-> gp-0 object-type-info-array 15 level) #f) (set! (-> gp-0 object-type-info-array 16 level) #f) (set! (-> gp-0 object-type-info-array 17 level) #f) - (set! (-> gp-0 object-type-info-array 18 level) (the-as level 'lwideb)) + (set! (-> gp-0 object-type-info-array 18 level) 'lwideb) (set! (-> gp-0 object-type-info-array 19 level) #f) (logclear! (-> gp-0 alert-state flags) (traffic-alert-flag target-jak)) (set-alert-level gp-0 3) (logior! (-> gp-0 alert-state flags) (traffic-alert-flag guard-multi-focus)) - (set-alert-duration gp-0 #x6c258c00) + (set-alert-duration gp-0 (seconds 6048000)) (set! *traffic-alert-level-force* #t) ) ) @@ -821,14 +825,14 @@ ) (defun lwide-deactivate () - (set! *lwide-entity* (the-as object #f)) + (set! *lwide-entity* #f) (send-event *traffic-manager* 'kill-all) 0 (none) ) (defun ctywide-deactivate () - (set! *ctywide-entity* (the-as object #f)) + (set! *ctywide-entity* #f) (set! *traffic-engine* #f) (set! *trail-graph* #f) (init *city-dead-pool* 'loading-level 0) @@ -847,7 +851,7 @@ ) ) (else - (process-entity-set! pp (the-as entity-actor *ctywide-entity*)) + (process-entity-set! pp *ctywide-entity*) ) ) 0 @@ -857,7 +861,7 @@ (defun lwide-entity-hack () (with-pp - (process-entity-set! pp (the-as entity-actor *lwide-entity*)) + (process-entity-set! pp *lwide-entity*) 0 (none) ) diff --git a/goal_src/jak2/levels/demo/demo-obs.gc b/goal_src/jak2/levels/demo/demo-obs.gc index 94895723d0..e54ef86658 100644 --- a/goal_src/jak2/levels/demo/demo-obs.gc +++ b/goal_src/jak2/levels/demo/demo-obs.gc @@ -523,16 +523,8 @@ (return (the-as object (-> self selected))) ) ) - (set! sv-112 (new - 'stack - 'font-context - *font-default-matrix* - 64 - 312 - 0.0 - (font-color default) - (font-flags shadow kerning) - ) + (set! sv-112 + (new 'stack 'font-context *font-default-matrix* 64 312 0.0 (font-color default) (font-flags shadow kerning)) ) (let ((v1-25 sv-112)) (set! (-> v1-25 width) (the float 384)) @@ -1036,7 +1028,7 @@ ) ) ) - (process-entity-set! self (the-as entity-actor a1-2)) + (process-entity-set! self a1-2) ) (set-setting! 'allow-pause #f 0 0) (set-setting! 'allow-progress #f 0 0) diff --git a/goal_src/jak2/levels/nest/nest-scenes.gc b/goal_src/jak2/levels/nest/nest-scenes.gc index c518317ea6..fbccf00257 100644 --- a/goal_src/jak2/levels/nest/nest-scenes.gc +++ b/goal_src/jak2/levels/nest/nest-scenes.gc @@ -183,7 +183,7 @@ ;; WARN: Return type mismatch object vs none. (defbehavior canyon-lightning-thingy-init-by-other canyon-lightning-thingy ((arg0 vector) (arg1 vector)) - (process-entity-set! self (the-as entity-actor #f)) + (process-entity-set! self (the-as entity #f)) (set! (-> self root) (new 'process 'trsqv)) (set! (-> self root trans quad) (-> arg0 quad)) (let ((a2-1 (vector-normalize-copy! (new 'stack-no-clear 'vector) arg1 1.0))) diff --git a/goal_src/jak2/levels/title/title-obs.gc b/goal_src/jak2/levels/title/title-obs.gc index 58c01214fc..2b546dc667 100644 --- a/goal_src/jak2/levels/title/title-obs.gc +++ b/goal_src/jak2/levels/title/title-obs.gc @@ -498,6 +498,7 @@ ) ) +;; WARN: Return type mismatch int vs object. ;; WARN: new jak 2 until loop case, check carefully (defbehavior title-menu title-control () (local-vars (sv-112 font-context)) @@ -528,16 +529,8 @@ ) ) (when (< (mod (-> self clock frame-counter) 300) 210) - (set! sv-112 (new - 'stack - 'font-context - *font-default-matrix* - 64 - 312 - 0.0 - (font-color default) - (font-flags shadow kerning) - ) + (set! sv-112 + (new 'stack 'font-context *font-default-matrix* 64 312 0.0 (font-color default) (font-flags shadow kerning)) ) (let ((v1-35 sv-112)) (set! (-> v1-35 width) (the float 384)) @@ -922,7 +915,7 @@ ) ) ) - (process-entity-set! self (the-as entity-actor a1-2)) + (process-entity-set! self a1-2) ) (set-setting! 'allow-pause #f 0 0) (set-setting! 'allow-progress #f 0 0) diff --git a/goal_src/jak2/pc/debug/default-menu-pc.gc b/goal_src/jak2/pc/debug/default-menu-pc.gc index d466934228..05b2c8ff7c 100644 --- a/goal_src/jak2/pc/debug/default-menu-pc.gc +++ b/goal_src/jak2/pc/debug/default-menu-pc.gc @@ -27,6 +27,13 @@ ,inc #t ,min ,max 1) ) +(defun dm-int-var-func ((var symbol) (msg debug-menu-msg) (val int) (undo-val int)) + (when (= msg (debug-menu-msg press)) + (set! (-> var value) val) + ) + (-> var value) + ) + ;; (defun dm-want-level-toggle-pick-func ((arg0 pair) (arg1 debug-menu-msg)) ;; (let* ((levname (the-as symbol (car arg0))) ;; (info (the-as level-load-info (-> levname value))) @@ -755,13 +762,13 @@ (flag "Discord RPC" #t ,(dm-lambda-boolean-flag (-> *pc-settings* discord-rpc?))) (flag "Jetboard Trick String" #t ,(dm-lambda-boolean-flag (-> *pc-settings* jetboard-trick-text?))) ;; (flag "Speedrunner Mode" #t ,(dm-lambda-boolean-flag (-> *pc-settings* speedrunner-mode?))) - ;; (menu "PS2 settings" - ;; ;(flag "PS2 Load speed" #f ,(dm-lambda-boolean-flag (-> *pc-settings* ps2-read-speed?))) - ;; (flag "PS2 Particles" #f ,(dm-lambda-boolean-flag (-> *pc-settings* ps2-parts?))) - ;; ;(flag "PS2 Music" #f ,(dm-lambda-boolean-flag (-> *pc-settings* ps2-music?))) - ;; ;(flag "PS2 Sound effects" #f ,(dm-lambda-boolean-flag (-> *pc-settings* ps2-se?))) - ;; ;(flag "PS2 Hints" #f ,(dm-lambda-boolean-flag (-> *pc-settings* ps2-hints?))) - ;; ) + (menu "PS2 settings" + ;(flag "PS2 Load speed" #f ,(dm-lambda-boolean-flag (-> *pc-settings* ps2-read-speed?))) + (flag "PS2 Particles" #f ,(dm-lambda-boolean-flag (-> *pc-settings* ps2-parts?))) + ;(flag "PS2 Music" #f ,(dm-lambda-boolean-flag (-> *pc-settings* ps2-music?))) + ;(flag "PS2 Sound effects" #f ,(dm-lambda-boolean-flag (-> *pc-settings* ps2-se?))) + ;(flag "PS2 Hints" #f ,(dm-lambda-boolean-flag (-> *pc-settings* ps2-hints?))) + ) (menu "Level of detail" (flag "PS2 LOD " #f ,(dm-lambda-boolean-flag (-> *pc-settings* ps2-lod-dist?))) ;(flag "Force Envmap" #f ,(dm-lambda-boolean-flag (-> *pc-settings* force-envmap?))) @@ -827,6 +834,10 @@ ;; (flag "Text boxes" #f ,(dm-lambda-boolean-flag (-> *pc-settings* display-text-box))) (float-var "Actor birth dist" #f ,(dm-lambda-meters-var (-> *ACTOR-bank* birth-dist)) 20 1 #t 0 10000 1) (float-var "Actor pause dist" #f ,(dm-lambda-meters-var (-> *ACTOR-bank* pause-dist)) 20 1 #t 0 10000 1) + (flag "Display city info" *display-city-info* dm-boolean-toggle-pick-func) + (int-var "City info x" *city-info-x* dm-int-var-func 10 1 #t 0 255 1) + (int-var "City info y" *city-info-y* dm-int-var-func 10 1 #t 0 255 1) + (int-var "City info z" *city-info-z* dm-int-var-func 10 1 #t 0 255 1) ;; (menu "Mood override" ;; (function "-- SIMPLE OVERRIDE" #f nothing) ;; (flag "Palette 0" 0 dm-mood-override-palette-pick-func) diff --git a/goal_src/jak2/pc/debug/pc-debug-methods.gc b/goal_src/jak2/pc/debug/pc-debug-methods.gc index 0f86df8017..3925840316 100644 --- a/goal_src/jak2/pc/debug/pc-debug-methods.gc +++ b/goal_src/jak2/pc/debug/pc-debug-methods.gc @@ -56,4 +56,9 @@ (define *region-debug-inspect* (the drawable-region-prim #f)) (define *display-region-inside* #f) +(define *display-city-info* #f) +(define *city-info-x* 0) +(define *city-info-y* 0) +(define *city-info-z* 0) + diff --git a/goal_src/jak2/pc/pckernel-impl.gc b/goal_src/jak2/pc/pckernel-impl.gc index 65cbe507f9..63e426bd8e 100644 --- a/goal_src/jak2/pc/pckernel-impl.gc +++ b/goal_src/jak2/pc/pckernel-impl.gc @@ -22,6 +22,7 @@ ;; The Jak 2 version of the pc-settings object. (deftype pc-settings-jak2 (pc-settings) ( + ;; debug (jetboard-trick-text? symbol) ;; enable rendering jetboard trick combo during minigame ) ) diff --git a/test/decompiler/reference/jak2/engine/ai/enemy_REF.gc b/test/decompiler/reference/jak2/engine/ai/enemy_REF.gc index 2ede3f2a08..8265bf8f81 100644 --- a/test/decompiler/reference/jak2/engine/ai/enemy_REF.gc +++ b/test/decompiler/reference/jak2/engine/ai/enemy_REF.gc @@ -1257,7 +1257,7 @@ (defbehavior enemy-init-by-other enemy ((arg0 process-drawable) (arg1 transformq)) (let ((a1-1 (-> arg1 scale x))) (if a1-1 - (process-entity-set! self (the-as entity-actor a1-1)) + (process-entity-set! self (the-as entity a1-1)) ) ) (if (-> arg1 scale y) diff --git a/test/decompiler/reference/jak2/engine/ai/traffic-h_REF.gc b/test/decompiler/reference/jak2/engine/ai/traffic-h_REF.gc index ac82769ba9..10e55d5192 100644 --- a/test/decompiler/reference/jak2/engine/ai/traffic-h_REF.gc +++ b/test/decompiler/reference/jak2/engine/ai/traffic-h_REF.gc @@ -4,11 +4,11 @@ ;; definition for symbol *traffic-manager*, type process (define *traffic-manager* (the-as process #f)) -;; definition for symbol *ctywide-entity*, type object -(define *ctywide-entity* (the-as object #f)) +;; definition for symbol *ctywide-entity*, type entity +(define *ctywide-entity* (the-as entity #f)) -;; definition for symbol *lwide-entity*, type object -(define *lwide-entity* (the-as object #f)) +;; definition for symbol *lwide-entity*, type entity +(define *lwide-entity* (the-as entity #f)) ;; definition for symbol *race-vehicle-entity*, type entity-actor (define *race-vehicle-entity* (the-as entity-actor #f)) diff --git a/test/decompiler/reference/jak2/engine/common_objs/collectables_REF.gc b/test/decompiler/reference/jak2/engine/common_objs/collectables_REF.gc index abf8542cfb..87ad14d9cd 100644 --- a/test/decompiler/reference/jak2/engine/common_objs/collectables_REF.gc +++ b/test/decompiler/reference/jak2/engine/common_objs/collectables_REF.gc @@ -2699,7 +2699,7 @@ This commonly includes things such as: (logclear! (-> obj flags) (collectable-flag fadeout)) ) (((pickup-type board)) - (process-entity-set! obj (the-as entity-actor #f)) + (process-entity-set! obj (the-as entity #f)) (initialize-skeleton obj (the-as skeleton-group (art-group-get-by-name *level* "skel-board" (the-as (pointer uint32) #f))) diff --git a/test/decompiler/reference/jak2/engine/common_objs/projectile_REF.gc b/test/decompiler/reference/jak2/engine/common_objs/projectile_REF.gc index 0d752a1d20..b353fbc197 100644 --- a/test/decompiler/reference/jak2/engine/common_objs/projectile_REF.gc +++ b/test/decompiler/reference/jak2/engine/common_objs/projectile_REF.gc @@ -496,7 +496,7 @@ If we've met or exceeded the projectiles maximum allowed hits, switch to the [[p (defbehavior projectile-init-by-other projectile ((arg0 projectile-init-by-other-params)) (stack-size-set! (-> self main-thread) 512) (logclear! (-> self mask) (process-mask actor-pause)) - (process-entity-set! self (the-as entity-actor (-> arg0 ent))) + (process-entity-set! self (-> arg0 ent)) (set! (-> self charge-level) (-> arg0 charge)) (set! (-> self options) (-> arg0 options)) (set! (-> self notify-handle) (-> arg0 notify-handle)) diff --git a/test/decompiler/reference/jak2/engine/common_objs/voicebox_REF.gc b/test/decompiler/reference/jak2/engine/common_objs/voicebox_REF.gc index 577658cb32..195333745b 100644 --- a/test/decompiler/reference/jak2/engine/common_objs/voicebox_REF.gc +++ b/test/decompiler/reference/jak2/engine/common_objs/voicebox_REF.gc @@ -657,7 +657,7 @@ This commonly includes things such as: ;; INFO: Used lq/sq ;; WARN: Return type mismatch object vs none. (defbehavior judge-init-by-other judge ((arg0 vector) (arg1 uint)) - (process-entity-set! self (the-as entity-actor #f)) + (process-entity-set! self (the-as entity #f)) (set! (-> self score) arg1) (setup-collision self) (init self) diff --git a/test/decompiler/reference/jak2/engine/entity/entity_REF.gc b/test/decompiler/reference/jak2/engine/entity/entity_REF.gc index a79a7b2269..2b788817f8 100644 --- a/test/decompiler/reference/jak2/engine/entity/entity_REF.gc +++ b/test/decompiler/reference/jak2/engine/entity/entity_REF.gc @@ -516,8 +516,8 @@ ) ;; definition for function process-entity-set! -(defun process-entity-set! ((arg0 process) (arg1 entity-actor)) - (set! (-> arg0 entity) arg1) +(defun process-entity-set! ((arg0 process) (arg1 entity)) + (set! (-> arg0 entity) (the-as entity-actor arg1)) (if arg1 (set! (-> arg0 level) (-> arg1 extra level)) (set! (-> arg0 level) (-> *level* default-level)) diff --git a/test/decompiler/reference/jak2/engine/game/task/task-control_REF.gc b/test/decompiler/reference/jak2/engine/game/task/task-control_REF.gc index 1e9ca5223d..8ce23b0d2d 100644 --- a/test/decompiler/reference/jak2/engine/game/task/task-control_REF.gc +++ b/test/decompiler/reference/jak2/engine/game/task/task-control_REF.gc @@ -1906,7 +1906,7 @@ ) ) (if a1-6 - (process-entity-set! self (the-as entity-actor a1-6)) + (process-entity-set! self a1-6) ) ) ) diff --git a/test/decompiler/reference/jak2/engine/scene/scene_REF.gc b/test/decompiler/reference/jak2/engine/scene/scene_REF.gc index 9f8fbbd6b6..9818ab9e05 100644 --- a/test/decompiler/reference/jak2/engine/scene/scene_REF.gc +++ b/test/decompiler/reference/jak2/engine/scene/scene_REF.gc @@ -1761,7 +1761,7 @@ ;; WARN: Using new Jak 2 rtype-of (defbehavior scene-player-init scene-player ((arg0 object) (arg1 symbol) (arg2 string)) "`object` arg can be an `(array scene)`, `pair of scene` or a `scene`" - (process-entity-set! self (the-as entity-actor #f)) + (process-entity-set! self (the-as entity #f)) (stack-size-set! (-> self main-thread) 512) (set! (-> self root) (new 'process 'trsqv)) (case (rtype-of arg0) diff --git a/test/decompiler/reference/jak2/engine/target/mech_suit/target-mech_REF.gc b/test/decompiler/reference/jak2/engine/target/mech_suit/target-mech_REF.gc index 893cb9fc2f..f66d28e8af 100644 --- a/test/decompiler/reference/jak2/engine/target/mech_suit/target-mech_REF.gc +++ b/test/decompiler/reference/jak2/engine/target/mech_suit/target-mech_REF.gc @@ -1171,7 +1171,7 @@ (let ((s4-1 (-> self entity)) (s3-0 (-> self level)) ) - (process-entity-set! self (the-as entity-actor (-> self mech entity))) + (process-entity-set! self (the-as entity (-> self mech entity))) (let ((s2-0 (get-process *16k-dead-pool* manipy #x4000))) (set! (-> self manipy) (the-as diff --git a/test/decompiler/reference/jak2/levels/city/common/nav-graph-h_REF.gc b/test/decompiler/reference/jak2/levels/city/common/nav-graph-h_REF.gc index 0c45a21145..17eb755020 100644 --- a/test/decompiler/reference/jak2/levels/city/common/nav-graph-h_REF.gc +++ b/test/decompiler/reference/jak2/levels/city/common/nav-graph-h_REF.gc @@ -14,7 +14,7 @@ (max-user-count uint8 :offset-assert 12) (user-count uint8 :offset-assert 13) (width uint8 :offset-assert 14) - (flags uint8 :offset-assert 15) + (flags nav-branch-flags :offset-assert 15) ) :method-count-assert 21 :size-assert #x10 diff --git a/test/decompiler/reference/jak2/levels/city/common/traffic-engine-h_REF.gc b/test/decompiler/reference/jak2/levels/city/common/traffic-engine-h_REF.gc index 01cd41cc6a..1157331fa7 100644 --- a/test/decompiler/reference/jak2/levels/city/common/traffic-engine-h_REF.gc +++ b/test/decompiler/reference/jak2/levels/city/common/traffic-engine-h_REF.gc @@ -248,7 +248,7 @@ (city-level-info-method-12 (_type_ vector nav-branch vector) vector 12) (lookup-cell-by-position (_type_ vector) vis-cell 13) (get-first-cell-in-box (_type_ vis-grid-box) vis-cell 14) - (sphere-in-grid? (_type_ int int) symbol 15) + (sphere-in-grid? (_type_ vector int) symbol 15) (callback-on-nav-segments-in-sphere (_type_ vector int traffic-find-segment-struct (function traffic-find-segment-struct nav-segment none)) none 16) (update-suppressions-from-traffic-engine (_type_ traffic-engine) none 17) (city-level-info-method-18 (_type_) none 18) @@ -561,18 +561,18 @@ ;; definition of type traffic-object-type-info (deftype traffic-object-type-info (structure) - ((flags uint8 :offset-assert 0) - (target-count int8 :offset-assert 1) - (active-count int8 :offset-assert 2) - (inactive-count int8 :offset-assert 3) - (reserve-count uint16 :offset-assert 4) - (killed-count uint16 :offset-assert 6) - (want-count int8 :offset-assert 8) - (tracker-index uint8 :offset-assert 9) - (parking-spot-prob uint8 :offset-assert 10) - (guard-type uint8 :offset-assert 11) - (array (pointer handle) :offset-assert 12) - (level level :offset-assert 16) + ((flags traffic-type-flags :offset-assert 0) + (target-count int8 :offset-assert 1) + (active-count int8 :offset-assert 2) + (inactive-count int8 :offset-assert 3) + (reserve-count uint16 :offset-assert 4) + (killed-count uint16 :offset-assert 6) + (want-count int8 :offset-assert 8) + (tracker-index uint8 :offset-assert 9) + (parking-spot-prob uint8 :offset-assert 10) + (guard-type uint8 :offset-assert 11) + (array (pointer handle) :offset-assert 12) + (level symbol :offset-assert 16) ) :method-count-assert 9 :size-assert #x14 @@ -722,7 +722,7 @@ (stop-alarm-sound (_type_) none 11) (debug-unused (_type_) none 12) (add-object (_type_ traffic-type process) none 13) - (sphere-in-loaded-city-infos? (_type_ int vector) symbol 14) + (sphere-in-loaded-city-infos? (_type_ vector int) symbol 14) (activate-one-citizen (_type_ nav-segment float) none 15) (activate-one-vehicle (_type_ nav-segment float) none 16) (can-dest-be-used? (_type_ nav-branch) symbol 17) @@ -742,7 +742,7 @@ (decrease-alert-level (_type_ int) none 31) (set-alert-level (_type_ int) none 32) (set-max-alert-level (_type_ int) none 33) - (set-alert-duration (_type_ int) none 34) + (set-alert-duration (_type_ time-frame) none 34) (get-alert-level (_type_) int 35) (get-target (_type_) target 36) (set-object-target-level (_type_ int float) none 37) @@ -769,18 +769,18 @@ (set-object-auto-activate (_type_ int object) none 58) (debug-check-proc-in-tracker (_type_ process int) none 59) (kill-traffic-sphere (_type_ sphere) none 60) - (level-loaded (_type_ level) none 61) - (level-killed (_type_ level) none 62) + (level-link (_type_ level) none 61) + (level-unlink (_type_ level) none 62) (traffic-engine-method-63 (_type_) none 63) (traffic-engine-method-64 (_type_) none 64) (handle-new-vis-cell (_type_ vis-cell) none 65) (update-sync-from-frame-counter (_type_) none 66) - (per-frame-guard-update (_type_) none 67) - (per-frame-activate-deactivate (_type_) none 68) - (per-frame-danger-update (_type_) none 69) + (update-guards (_type_) none 67) + (update-traffic-amount (_type_) none 68) + (update-danger (_type_) none 69) (update-danger-from-target (_type_) none 70) - (per-frame-alert-update (_type_) none 71) - (per-frame-suppressor-update (_type_) none 72) + (update-alert-state (_type_) none 71) + (update-suppressor (_type_) none 72) (recompute-supressions (_type_) none 73) ) ) diff --git a/test/decompiler/reference/jak2/levels/city/common/traffic-engine_REF.gc b/test/decompiler/reference/jak2/levels/city/common/traffic-engine_REF.gc index e068b0d474..13cdfe4204 100644 --- a/test/decompiler/reference/jak2/levels/city/common/traffic-engine_REF.gc +++ b/test/decompiler/reference/jak2/levels/city/common/traffic-engine_REF.gc @@ -636,9 +636,9 @@ Process is recycled and moved to reserved, if it deactivates." (when (and (> (-> v1-2 inactive-count) 0) (> (-> v1-2 reserve-count) 0) (< (-> v1-2 active-count) (-> v1-2 target-count)) - (logtest? (-> v1-2 flags) 4) - (logtest? (-> v1-2 flags) 8) - (or (not (logtest? (-> v1-2 flags) 1)) + (logtest? (-> v1-2 flags) (traffic-type-flags trtflags-2)) + (logtest? (-> v1-2 flags) (traffic-type-flags trtflags-3)) + (or (not (logtest? (-> v1-2 flags) (traffic-type-flags trtflags-0))) (zero? (logand (-> obj traffic alert-state flags) (traffic-alert-flag alert-ending))) ) ) @@ -789,7 +789,7 @@ Process is recycled and moved to reserved, if it deactivates." (let ((v1-4 (-> obj inactive-object-array))) (dotimes (a0-5 21) (let ((a1-3 (-> obj object-type-info-array a0-5))) - (set! (-> a1-3 flags) (the-as uint 6)) + (set! (-> a1-3 flags) (traffic-type-flags trtflags-1 trtflags-2)) (set! (-> a1-3 inactive-count) 0) (set! (-> a1-3 active-count) 0) (set! (-> a1-3 target-count) 20) @@ -802,7 +802,7 @@ Process is recycled and moved to reserved, if it deactivates." ) ) (set! (-> obj object-type-info-array 6 guard-type) (the-as uint 0)) - (set! (-> obj object-type-info-array 20 level) (the-as level 'ctywide)) + (set! (-> obj object-type-info-array 20 level) 'ctywide) (let ((v1-8 11)) (dotimes (a0-6 10) (set! (-> obj object-type-info-array v1-8 tracker-index) (the-as uint 0)) @@ -845,7 +845,7 @@ Process is recycled and moved to reserved, if it deactivates." (dotimes (s5-2 (-> *level* length)) (let ((a1-12 (-> *level* level s5-2))) (if (= (-> a1-12 status) 'active) - (level-loaded obj a1-12) + (level-link obj a1-12) ) ) ) @@ -864,7 +864,7 @@ Process is recycled and moved to reserved, if it deactivates." ;; definition for method 61 of type traffic-engine ;; WARN: Return type mismatch int vs none. -(defmethod level-loaded traffic-engine ((obj traffic-engine) (arg0 level)) +(defmethod level-link traffic-engine ((obj traffic-engine) (arg0 level)) "Call after loading a level to patch the data in the bsp" (format #t "traffic-engine: level birth ~S~%" (-> arg0 nickname)) (cond @@ -998,7 +998,7 @@ Process is recycled and moved to reserved, if it deactivates." ;; definition for method 62 of type traffic-engine ;; WARN: Return type mismatch int vs none. -(defmethod level-killed traffic-engine ((obj traffic-engine) (arg0 level)) +(defmethod level-unlink traffic-engine ((obj traffic-engine) (arg0 level)) "Call after removing a level. Kills processes and unlinks nav" (let ((s4-0 (-> arg0 bsp city-level-info nav-graph))) (dotimes (v1-2 2) @@ -1257,11 +1257,11 @@ Process is recycled and moved to reserved, if it deactivates." ) ;; definition for method 14 of type traffic-engine -(defmethod sphere-in-loaded-city-infos? traffic-engine ((obj traffic-engine) (arg0 int) (arg1 vector)) +(defmethod sphere-in-loaded-city-infos? traffic-engine ((obj traffic-engine) (arg0 vector) (arg1 int)) (dotimes (s3-0 2) (let ((v1-3 (-> obj level-data-array s3-0))) (when (nonzero? (-> v1-3 city-info)) - (if (sphere-in-grid? (-> v1-3 city-info) arg0 (the-as int arg1)) + (if (sphere-in-grid? (-> v1-3 city-info) arg0 arg1) (return #t) ) ) @@ -1273,7 +1273,7 @@ Process is recycled and moved to reserved, if it deactivates." ;; definition for method 17 of type traffic-engine (defmethod can-dest-be-used? traffic-engine ((obj traffic-engine) (arg0 nav-branch)) (let ((v1-0 (-> arg0 src-node))) - (or (logtest? (-> arg0 flags) 1) + (or (logtest? (-> arg0 flags) (nav-branch-flags nabflags-0)) (logtest? (-> v1-0 flags) (nav-node-flag-byte blocked)) (not (-> arg0 dest-node)) (>= (-> arg0 user-count) (-> arg0 max-user-count)) @@ -1387,44 +1387,44 @@ Process is recycled and moved to reserved, if it deactivates." (let ((v1-1 (-> obj danger-sphere-array))) (set! (-> v1-1 0 handle) (process->handle s5-0)) (let ((a0-4 (-> s5-0 focus-status)) - (f0-0 0.0) - (f1-0 0.0) - (f3-0 1.0) - (f2-0 0.0) + (notify-radius 0.0) + (danger-radius 0.0) + (decay-rate 1.0) + (danger-level 0.0) ) (cond ((logtest? (focus-status mech dark shooting) a0-4) - (set! f0-0 245760.0) - (set! f1-0 163840.0) - (set! f2-0 1.0) - (set! f3-0 0.0) + (set! notify-radius 245760.0) + (set! danger-radius 163840.0) + (set! danger-level 1.0) + (set! decay-rate 0.0) ) ((logtest? (focus-status gun) a0-4) - (set! f0-0 102400.0) - (set! f1-0 61440.0) - (set! f2-0 0.5) - (set! f3-0 0.5) + (set! notify-radius 102400.0) + (set! danger-radius 61440.0) + (set! danger-level 0.5) + (set! decay-rate 0.5) ) ((logtest? (focus-status board pilot) a0-4) - (set! f0-0 40960.0) - (set! f1-0 24576.0) - (set! f2-0 0.5) + (set! notify-radius 40960.0) + (set! danger-radius 24576.0) + (set! danger-level 0.5) ) ((logtest? a0-4 (focus-status dangerous)) - (set! f0-0 61440.0) - (set! f1-0 40960.0) - (set! f3-0 0.0) - (set! f2-0 0.5) + (set! notify-radius 61440.0) + (set! danger-radius 40960.0) + (set! decay-rate 0.0) + (set! danger-level 0.5) ) (else - (set! f3-0 1.5) + (set! decay-rate 1.5) ) ) - (set! (-> v1-1 0 decay-rate) (* 0.1 f3-0)) - (when (< (-> v1-1 0 danger-level) f2-0) - (set! (-> v1-1 0 danger-level) f2-0) - (set! (-> v1-1 0 sphere r) f1-0) - (set! (-> v1-1 0 notify-radius) f0-0) + (set! (-> v1-1 0 decay-rate) (* 0.1 decay-rate)) + (when (< (-> v1-1 0 danger-level) danger-level) + (set! (-> v1-1 0 danger-level) danger-level) + (set! (-> v1-1 0 sphere r) danger-radius) + (set! (-> v1-1 0 notify-radius) notify-radius) ) ) (let ((f0-1 (-> v1-1 0 sphere r))) @@ -1552,7 +1552,7 @@ Process is recycled and moved to reserved, if it deactivates." ;; definition for method 69 of type traffic-engine ;; INFO: Used lq/sq ;; WARN: Return type mismatch int vs none. -(defmethod per-frame-danger-update traffic-engine ((obj traffic-engine)) +(defmethod update-danger traffic-engine ((obj traffic-engine)) "see what's dangerous and make people avoid it." (update-danger-from-target obj) (dotimes (s5-0 (-> obj danger-sphere-count)) @@ -1667,8 +1667,8 @@ Process is recycled and moved to reserved, if it deactivates." ;; definition for method 68 of type traffic-engine ;; INFO: Used lq/sq ;; WARN: Return type mismatch int vs none. -(defmethod per-frame-activate-deactivate traffic-engine ((obj traffic-engine)) - "per-frame activate and deactivate processes." +(defmethod update-traffic-amount traffic-engine ((obj traffic-engine)) + "kills inactive traffic and spawns more if needed." (local-vars (sv-48 int) (sv-64 nav-segment)) (set! (-> obj object-hash object-count) 0) (let* ((v1-1 (-> obj object-hash)) @@ -1725,7 +1725,7 @@ Process is recycled and moved to reserved, if it deactivates." (set! (-> s5-0 quad) (-> v1-33 trans quad)) (set! (-> s5-0 w) (-> v1-33 root-prim prim-core world-sphere w)) ) - (sphere-in-loaded-city-infos? obj (the-as int s5-0) (the-as vector 0)) + (sphere-in-loaded-city-infos? obj s5-0 0) ) (set! (-> (the-as vehicle s3-0) traffic-hash-id) (spatial-hash-method-39 (-> obj object-hash) s5-0 (the-as hash-object-info s3-0)) @@ -1755,7 +1755,7 @@ Process is recycled and moved to reserved, if it deactivates." (set! (-> s5-0 quad) (-> v1-54 trans quad)) (set! (-> s5-0 w) (-> v1-54 root-prim prim-core world-sphere w)) ) - (sphere-in-loaded-city-infos? obj (the-as int s5-0) (the-as vector 1)) + (sphere-in-loaded-city-infos? obj s5-0 1) ) (spatial-hash-method-39 (-> obj object-hash) s5-0 (the-as hash-object-info s3-1)) ) @@ -1835,7 +1835,7 @@ Process is recycled and moved to reserved, if it deactivates." ;; WARN: Return type mismatch int vs none. (defmethod update-traffic traffic-engine ((obj traffic-engine)) (update-sync-from-frame-counter obj) - (per-frame-suppressor-update obj) + (update-suppressor obj) (let ((s5-0 (new 'stack-no-clear 'bounding-box))) (set-vector! (-> s5-0 min) @@ -1862,11 +1862,11 @@ Process is recycled and moved to reserved, if it deactivates." ) (update-grid-for-objects-in-box (-> obj object-hash) 253 (-> s5-0 min) (-> s5-0 max)) ) - (per-frame-activate-deactivate obj) + (update-traffic-amount obj) (set! (-> obj alert-state guard-aim-count) 0) - (per-frame-alert-update obj) - (per-frame-guard-update obj) - (per-frame-danger-update obj) + (update-alert-state obj) + (update-guards obj) + (update-danger obj) 0 (none) ) @@ -2438,7 +2438,7 @@ Process is recycled and moved to reserved, if it deactivates." ;; definition for method 34 of type traffic-engine ;; WARN: Return type mismatch int vs none. -(defmethod set-alert-duration traffic-engine ((obj traffic-engine) (arg0 int)) +(defmethod set-alert-duration traffic-engine ((obj traffic-engine) (arg0 time-frame)) (set! (-> obj alert-state duration) (the-as uint arg0)) 0 (none) @@ -2765,7 +2765,7 @@ Process is recycled and moved to reserved, if it deactivates." ;; definition for method 67 of type traffic-engine ;; WARN: Return type mismatch int vs none. -(defmethod per-frame-guard-update traffic-engine ((obj traffic-engine)) +(defmethod update-guards traffic-engine ((obj traffic-engine)) (dotimes (v1-0 6) (set! (-> obj alert-state guard-type-info-array v1-0 count) 0) ) @@ -2899,7 +2899,7 @@ Process is recycled and moved to reserved, if it deactivates." ;; definition for method 71 of type traffic-engine ;; INFO: Used lq/sq ;; WARN: Return type mismatch int vs none. -(defmethod per-frame-alert-update traffic-engine ((obj traffic-engine)) +(defmethod update-alert-state traffic-engine ((obj traffic-engine)) (with-pp (if (and (logtest? (-> obj alert-state flags) (traffic-alert-flag target-jak)) *target*) (set! (-> obj alert-state target-status-array 0 handle) (process->handle *target*)) @@ -3064,7 +3064,7 @@ Process is recycled and moved to reserved, if it deactivates." *target* ) (for-all-active-processes obj (lambda ((arg0 process-focusable) (arg1 traffic-object-type-info)) - (if (logtest? (-> arg1 flags) 1) + (if (logtest? (-> arg1 flags) (traffic-type-flags trtflags-0)) (send-event arg0 'alert-begin *target*) ) (none) @@ -3074,7 +3074,7 @@ Process is recycled and moved to reserved, if it deactivates." ) (else (for-all-active-processes obj (lambda ((arg0 process-focusable) (arg1 traffic-object-type-info)) - (if (logtest? (-> arg1 flags) 1) + (if (logtest? (-> arg1 flags) (traffic-type-flags trtflags-0)) (send-event arg0 'alert-end) ) (none) @@ -3103,54 +3103,56 @@ Process is recycled and moved to reserved, if it deactivates." (logclear! (-> v1-6 0 flags) (traffic-target-flag force-visible)) ) (set-target-level obj 1.0) - (set-alert-duration obj 9000) + (set-alert-duration obj (seconds 30)) (set-max-alert-level obj 4) (let ((v1-13 42)) (dotimes (a0-7 21) (let ((a1-6 (-> obj object-type-info-array a0-7))) - (set! (-> a1-6 flags) (the-as uint 6)) + (set! (-> a1-6 flags) (traffic-type-flags trtflags-1 trtflags-2)) (set! (-> a1-6 reserve-count) (the-as uint (max 1000 (min #xfde8 (* 1000 (-> a1-6 want-count)))))) (set! (-> a1-6 killed-count) (the-as uint 0)) (set! (-> a1-6 parking-spot-prob) - (the-as uint (if (and (zero? (-> a1-6 tracker-index)) (zero? (logand (-> a1-6 flags) 1))) - v1-13 - 0 - ) - ) + (the-as + uint + (if (and (zero? (-> a1-6 tracker-index)) (zero? (logand (-> a1-6 flags) (traffic-type-flags trtflags-0)))) + v1-13 + 0 + ) + ) ) ) ) ) (let ((v1-16 (-> obj object-type-info-array 6))) - (logior! (-> v1-16 flags) 1) + (logior! (-> v1-16 flags) (traffic-type-flags trtflags-0)) ) (let ((v1-17 (-> obj object-type-info-array 7))) - (logior! (-> v1-17 flags) 1) + (logior! (-> v1-17 flags) (traffic-type-flags trtflags-0)) ) (let ((v1-18 (-> obj object-type-info-array 18))) - (logior! (-> v1-18 flags) 1) + (logior! (-> v1-18 flags) (traffic-type-flags trtflags-0)) ) (let ((v1-19 (-> obj object-type-info-array 19))) - (logior! (-> v1-19 flags) 1) + (logior! (-> v1-19 flags) (traffic-type-flags trtflags-0)) ) (let ((v1-20 (-> obj object-type-info-array 20))) - (logior! (-> v1-20 flags) 1) + (logior! (-> v1-20 flags) (traffic-type-flags trtflags-0)) ) (let ((v1-21 (-> obj object-type-info-array 5))) (set! (-> v1-21 target-count) 0) - (set! (-> v1-21 flags) (logand -7 (-> v1-21 flags))) + (logclear! (-> v1-21 flags) (traffic-type-flags trtflags-1 trtflags-2)) ) (let ((v1-22 (-> obj object-type-info-array 3))) (set! (-> v1-22 target-count) 0) - (set! (-> v1-22 flags) (logand -5 (-> v1-22 flags))) + (logclear! (-> v1-22 flags) (traffic-type-flags trtflags-2)) ) (let ((v1-23 (-> obj object-type-info-array 4))) (set! (-> v1-23 target-count) 0) - (set! (-> v1-23 flags) (logand -5 (-> v1-23 flags))) + (logclear! (-> v1-23 flags) (traffic-type-flags trtflags-2)) ) (let ((v1-24 (-> obj object-type-info-array 17))) (set! (-> v1-24 target-count) 0) - (set! (-> v1-24 flags) (logand -7 (-> v1-24 flags))) + (logclear! (-> v1-24 flags) (traffic-type-flags trtflags-1 trtflags-2)) ) (dotimes (v1-25 6) (let ((a0-28 (-> obj alert-state guard-type-info-array v1-25))) @@ -3222,8 +3224,8 @@ Process is recycled and moved to reserved, if it deactivates." (defmethod set-object-auto-activate traffic-engine ((obj traffic-engine) (arg0 int) (arg1 object)) (let ((v1-2 (-> obj object-type-info-array arg0))) (if arg1 - (logior! (-> v1-2 flags) 4) - (set! (-> v1-2 flags) (logand -5 (-> v1-2 flags))) + (logior! (-> v1-2 flags) (traffic-type-flags trtflags-2)) + (logclear! (-> v1-2 flags) (traffic-type-flags trtflags-2)) ) ) 0 @@ -3299,7 +3301,9 @@ Process is recycled and moved to reserved, if it deactivates." ) (while (< (the-as uint s5-0) (the-as uint 21)) (let ((s2-0 (-> obj object-type-info-array s5-0))) - (when (and (logtest? (-> s2-0 flags) 8) (= (level-status *level* (the-as symbol (-> s2-0 level))) 'active)) + (when (and (logtest? (-> s2-0 flags) (traffic-type-flags trtflags-3)) + (= (level-status *level* (-> s2-0 level)) 'active) + ) (+! s3-0 (-> s2-0 parking-spot-prob)) (b! (>= (the-as uint s3-0) (the-as uint s4-0)) cfg-10) ) @@ -3353,7 +3357,7 @@ Process is recycled and moved to reserved, if it deactivates." ;; definition for method 72 of type traffic-engine ;; WARN: Return type mismatch int vs none. -(defmethod per-frame-suppressor-update traffic-engine ((obj traffic-engine)) +(defmethod update-suppressor traffic-engine ((obj traffic-engine)) (let ((v1-3 (- (-> *display* game-clock frame-counter) (-> *display* game-clock old-frame-counter)))) (dotimes (a1-3 16) (let ((a2-2 (-> obj suppressor array a1-3))) @@ -3415,12 +3419,12 @@ Process is recycled and moved to reserved, if it deactivates." ) ;; definition for method 15 of type city-level-info -(defmethod sphere-in-grid? city-level-info ((obj city-level-info) (arg0 int) (arg1 int)) +(defmethod sphere-in-grid? city-level-info ((obj city-level-info) (arg0 vector) (arg1 int)) (let ((gp-0 #f)) (let ((s3-0 (new 'stack-no-clear 'vis-grid-box)) (s2-0 (new 'stack-no-clear 'vis-grid-box)) ) - (lookup-box-for-sphere (-> obj grid-info) s2-0 (the-as vector arg0)) + (lookup-box-for-sphere (-> obj grid-info) s2-0 arg0) (set! (-> s3-0 min y) (-> s2-0 min y)) (let ((v1-6 (+ (- 1 (-> s2-0 min y)) (-> s2-0 max y)))) (b! #t cfg-13 :delay (nop!)) diff --git a/test/decompiler/reference/jak2/levels/city/common/traffic-manager_REF.gc b/test/decompiler/reference/jak2/levels/city/common/traffic-manager_REF.gc index af4763b015..2b21a4ae34 100644 --- a/test/decompiler/reference/jak2/levels/city/common/traffic-manager_REF.gc +++ b/test/decompiler/reference/jak2/levels/city/common/traffic-manager_REF.gc @@ -10,7 +10,7 @@ ;; definition of type traffic-manager (deftype traffic-manager (process) ((traffic-engine traffic-engine :offset-assert 128) - (fast-spawn basic :offset-assert 132) + (fast-spawn symbol :offset-assert 132) (dark-guard-ratio int32 :offset-assert 136) (spawn-params traffic-object-spawn-params :inline :offset-assert 144) ) @@ -21,12 +21,12 @@ (:methods (idle () _type_ :state 14) (active () _type_ :state 15) - (traffic-manager-method-16 (_type_) none 16) + (update (_type_) none 16) (spawn-all (_type_) none 17) - (traffic-manager-method-18 (_type_) none 18) - (kill-all (_type_) none 19) - (traffic-manager-method-20 (_type_) none 20) - (traffic-manager-method-21 (_type_) none 21) + (kill-excess-once (_type_) none 18) + (kill-all-inactive (_type_) none 19) + (reset-and-init (_type_) none 20) + (init-params (_type_) none 21) ) ) @@ -71,9 +71,9 @@ ;; definition for method 16 of type traffic-manager ;; WARN: Return type mismatch int vs none. -(defmethod traffic-manager-method-16 traffic-manager ((obj traffic-manager)) +(defmethod update traffic-manager ((obj traffic-manager)) (update-traffic (-> obj traffic-engine)) - (traffic-manager-method-18 obj) + (kill-excess-once obj) (spawn-all obj) (if *debug-segment* (debug-unused (-> obj traffic-engine)) @@ -94,16 +94,16 @@ ;; definition for method 18 of type traffic-manager ;; WARN: Return type mismatch int vs none. -(defmethod traffic-manager-method-18 traffic-manager ((obj traffic-manager)) - (let ((s5-0 0)) - (while (< (the-as uint s5-0) (the-as uint 21)) - (let ((v1-2 (-> obj traffic-engine object-type-info-array s5-0))) - (when (logtest? (-> v1-2 flags) 2) - (let ((a0-5 (+ (-> v1-2 active-count) (-> v1-2 inactive-count)))) - (when (< (-> v1-2 want-count) a0-5) +(defmethod kill-excess-once traffic-manager ((obj traffic-manager)) + (let ((type-i 0)) + (while (< (the-as uint type-i) (the-as uint 21)) + (let ((traffic (-> obj traffic-engine object-type-info-array type-i))) + (when (logtest? (-> traffic flags) (traffic-type-flags trtflags-1)) + (let ((total-count (+ (-> traffic active-count) (-> traffic inactive-count)))) + (when (< (-> traffic want-count) total-count) (let ((a0-10 (handle->process (get-from-inactive-by-type - (-> obj traffic-engine tracker-array (-> v1-2 tracker-index)) - (the-as traffic-type s5-0) + (-> obj traffic-engine tracker-array (-> traffic tracker-index)) + (the-as traffic-type type-i) ) ) ) @@ -116,7 +116,7 @@ ) ) ) - (+! s5-0 1) + (+! type-i 1) ) ) 0 @@ -125,7 +125,7 @@ ;; definition for method 19 of type traffic-manager ;; WARN: Return type mismatch int vs none. -(defmethod kill-all traffic-manager ((obj traffic-manager)) +(defmethod kill-all-inactive traffic-manager ((obj traffic-manager)) (let ((s5-0 0)) (while (< (the-as uint s5-0) (the-as uint 21)) (let ((s4-0 (-> obj traffic-engine object-type-info-array s5-0))) @@ -157,9 +157,9 @@ (b! #t cfg-4 :delay (nop!)) (label cfg-1) (let ((s4-0 (-> obj traffic-engine object-type-info-array s5-0))) - (set! (-> s4-0 flags) (logand -9 (-> s4-0 flags))) - (if (= (level-status *level* (the-as symbol (-> s4-0 level))) 'active) - (logior! (-> s4-0 flags) 8) + (logclear! (-> s4-0 flags) (traffic-type-flags trtflags-3)) + (if (= (level-status *level* (-> s4-0 level)) 'active) + (logior! (-> s4-0 flags) (traffic-type-flags trtflags-3)) ) ) (+! s5-0 1) @@ -182,7 +182,11 @@ (let ((s0-0 (-> obj traffic-engine object-type-info-array s1-0))) (let ((v1-21 (+ (-> s0-0 active-count) (-> s0-0 inactive-count)))) (b! - (not (and (logtest? (-> s0-0 flags) 2) (logtest? (-> s0-0 flags) 8) (< v1-21 (-> s0-0 want-count)))) + (not (and (logtest? (-> s0-0 flags) (traffic-type-flags trtflags-1)) + (logtest? (-> s0-0 flags) (traffic-type-flags trtflags-3)) + (< v1-21 (-> s0-0 want-count)) + ) + ) cfg-29 :delay (nop!) ) @@ -385,7 +389,7 @@ ;; definition for method 20 of type traffic-manager ;; WARN: Return type mismatch int vs none. -(defmethod traffic-manager-method-20 traffic-manager ((obj traffic-manager)) +(defmethod reset-and-init traffic-manager ((obj traffic-manager)) (set! (-> obj traffic-engine) *traffic-engine*) (reset-and-init-from-manager (-> obj traffic-engine) obj) (restore-city-speeches) @@ -416,54 +420,54 @@ ;; definition for method 21 of type traffic-manager ;; WARN: Return type mismatch int vs none. -(defmethod traffic-manager-method-21 traffic-manager ((obj traffic-manager)) - (let ((s5-0 (new 'stack-no-clear 'array 'int8 21))) - (set! (-> s5-0 11) 8) - (set! (-> s5-0 12) 8) - (set! (-> s5-0 13) 8) - (set! (-> s5-0 14) 7) - (set! (-> s5-0 15) 7) - (set! (-> s5-0 16) 7) - (set! (-> s5-0 18) 4) - (set! (-> s5-0 19) 3) - (set! (-> s5-0 20) 0) - (set! (-> s5-0 0) 15) - (set! (-> s5-0 1) 15) - (set! (-> s5-0 2) 14) - (set! (-> s5-0 3) 1) - (set! (-> s5-0 4) 1) - (set! (-> s5-0 6) 9) - (set! (-> s5-0 7) 0) - (set! (-> s5-0 8) 14) - (set! (-> s5-0 9) 14) - (set! (-> s5-0 10) 14) - (set! (-> obj fast-spawn) (the-as basic *traffic-fast-spawn*)) - (traffic-manager-method-20 obj) +(defmethod init-params traffic-manager ((obj traffic-manager)) + (let ((traffic-want-counts (new 'stack-no-clear 'array 'int8 21))) + (set! (-> traffic-want-counts 11) 8) + (set! (-> traffic-want-counts 12) 8) + (set! (-> traffic-want-counts 13) 8) + (set! (-> traffic-want-counts 14) 7) + (set! (-> traffic-want-counts 15) 7) + (set! (-> traffic-want-counts 16) 7) + (set! (-> traffic-want-counts 18) 4) + (set! (-> traffic-want-counts 19) 3) + (set! (-> traffic-want-counts 20) 0) + (set! (-> traffic-want-counts 0) 15) + (set! (-> traffic-want-counts 1) 15) + (set! (-> traffic-want-counts 2) 14) + (set! (-> traffic-want-counts 3) 1) + (set! (-> traffic-want-counts 4) 1) + (set! (-> traffic-want-counts 6) 9) + (set! (-> traffic-want-counts 7) 0) + (set! (-> traffic-want-counts 8) 14) + (set! (-> traffic-want-counts 9) 14) + (set! (-> traffic-want-counts 10) 14) + (set! (-> obj fast-spawn) *traffic-fast-spawn*) + (reset-and-init obj) (let ((v1-20 (-> obj traffic-engine))) (dotimes (a0-2 21) - (set! (-> v1-20 object-type-info-array a0-2 want-count) (-> s5-0 a0-2)) + (set! (-> v1-20 object-type-info-array a0-2 want-count) (-> traffic-want-counts a0-2)) ) ) ) - (let ((s5-1 (-> obj spawn-params))) - (set! (-> s5-1 object-type) (traffic-type crimson-guard-1)) - (set! (-> s5-1 behavior) (the-as uint 1)) - (set! (-> s5-1 id) (the-as uint 0)) - (set! (-> s5-1 nav-mesh) #f) - (set! (-> s5-1 nav-branch) #f) - (set! (-> s5-1 proc) #f) - (set! (-> s5-1 handle) (the-as handle #f)) - (set! (-> s5-1 user-data) (the-as uint 0)) - (set! (-> s5-1 flags) (the-as uint 2)) - (set! (-> s5-1 guard-type) (the-as uint 7)) - (vector-reset! (-> s5-1 velocity)) - (vector-reset! (-> s5-1 position)) + (let ((params (-> obj spawn-params))) + (set! (-> params object-type) (traffic-type crimson-guard-1)) + (set! (-> params behavior) (the-as uint 1)) + (set! (-> params id) (the-as uint 0)) + (set! (-> params nav-mesh) #f) + (set! (-> params nav-branch) #f) + (set! (-> params proc) #f) + (set! (-> params handle) (the-as handle #f)) + (set! (-> params user-data) (the-as uint 0)) + (set! (-> params flags) (the-as uint 2)) + (set! (-> params guard-type) (the-as uint 7)) + (vector-reset! (-> params velocity)) + (vector-reset! (-> params position)) (forward-up-nopitch->quaternion - (-> s5-1 rotation) + (-> params rotation) (new 'static 'vector :z 1.0 :w 1.0) (new 'static 'vector :y 1.0 :w 1.0) ) - (set! (-> s5-1 id) (the-as uint 1)) + (set! (-> params id) (the-as uint 1)) ) (set! (-> obj dark-guard-ratio) (if (task-node-closed? (game-task-node tomb-boss-resolution)) 5 @@ -510,7 +514,7 @@ ) (('set-alert-duration) (let ((a1-8 (-> arg3 param 0))) - (set-alert-duration (-> self traffic-engine) (the-as int a1-8)) + (set-alert-duration (-> self traffic-engine) (the-as time-frame a1-8)) ) ) (('deactivate-all) @@ -647,12 +651,12 @@ ) (('level-loaded) (let ((a1-29 (-> arg3 param 0))) - (level-loaded (-> self traffic-engine) (the-as level a1-29)) + (level-link (-> self traffic-engine) (the-as level a1-29)) ) ) (('level-killed) (let ((s5-1 (the-as object (-> arg3 param 0)))) - (level-killed (-> self traffic-engine) (the-as level s5-1)) + (level-unlink (-> self traffic-engine) (the-as level s5-1)) (format #t "traffic-manager : level killed ~S~%" (-> (the-as level s5-1) nickname)) ) ) @@ -666,11 +670,11 @@ (('kill-all) (format #t "traffic-manager::kill-all~%") (deactivate-all (-> self traffic-engine)) - (kill-all self) + (kill-all-inactive self) ) (('spawn-all) (format #t "traffic-manager::spawn-all~%") - (set! (-> self fast-spawn) (the-as basic #t)) + (set! (-> self fast-spawn) #t) (spawn-all self) ) (('set-density-factor) @@ -707,7 +711,7 @@ (defbehavior traffic-manager-init-by-other traffic-manager () (stack-size-set! (-> self main-thread) 128) (ctywide-entity-hack) - (traffic-manager-method-21 self) + (init-params self) (add-setting! 'task-mask 'clear 0 #x4000) (set! (-> self event-hook) traffic-manager-event-handler) (rigid-body-queue-manager-spawn *traffic-rigid-body-queue* self) @@ -753,7 +757,7 @@ :event traffic-manager-event-handler :code (the-as (function none :behavior traffic-manager) sleep-code) :post (behavior () - (traffic-manager-method-16 self) + (update self) (none) ) ) @@ -812,54 +816,54 @@ (when gp-0 (case (-> arg0 name) (('lwidea) - (set! (-> gp-0 object-type-info-array 0 level) (the-as level 'lwidea)) - (set! (-> gp-0 object-type-info-array 1 level) (the-as level 'lwidea)) - (set! (-> gp-0 object-type-info-array 2 level) (the-as level 'lwidea)) - (set! (-> gp-0 object-type-info-array 3 level) (the-as level 'lwidea)) - (set! (-> gp-0 object-type-info-array 4 level) (the-as level 'lwidea)) + (set! (-> gp-0 object-type-info-array 0 level) 'lwidea) + (set! (-> gp-0 object-type-info-array 1 level) 'lwidea) + (set! (-> gp-0 object-type-info-array 2 level) 'lwidea) + (set! (-> gp-0 object-type-info-array 3 level) 'lwidea) + (set! (-> gp-0 object-type-info-array 4 level) 'lwidea) (set! (-> gp-0 object-type-info-array 5 level) #f) - (set! (-> gp-0 object-type-info-array 6 level) (the-as level 'lwidea)) + (set! (-> gp-0 object-type-info-array 6 level) 'lwidea) (set! (-> gp-0 object-type-info-array 7 level) #f) (set! (-> gp-0 object-type-info-array 8 level) #f) (set! (-> gp-0 object-type-info-array 9 level) #f) (set! (-> gp-0 object-type-info-array 10 level) #f) - (set! (-> gp-0 object-type-info-array 11 level) (the-as level 'lwidea)) - (set! (-> gp-0 object-type-info-array 12 level) (the-as level 'lwidea)) - (set! (-> gp-0 object-type-info-array 13 level) (the-as level 'lwidea)) - (set! (-> gp-0 object-type-info-array 14 level) (the-as level 'lwidea)) - (set! (-> gp-0 object-type-info-array 15 level) (the-as level 'lwidea)) - (set! (-> gp-0 object-type-info-array 16 level) (the-as level 'lwidea)) + (set! (-> gp-0 object-type-info-array 11 level) 'lwidea) + (set! (-> gp-0 object-type-info-array 12 level) 'lwidea) + (set! (-> gp-0 object-type-info-array 13 level) 'lwidea) + (set! (-> gp-0 object-type-info-array 14 level) 'lwidea) + (set! (-> gp-0 object-type-info-array 15 level) 'lwidea) + (set! (-> gp-0 object-type-info-array 16 level) 'lwidea) (set! (-> gp-0 object-type-info-array 17 level) #f) - (set! (-> gp-0 object-type-info-array 18 level) (the-as level 'lwidea)) - (set! (-> gp-0 object-type-info-array 19 level) (the-as level 'lwidea)) + (set! (-> gp-0 object-type-info-array 18 level) 'lwidea) + (set! (-> gp-0 object-type-info-array 19 level) 'lwidea) (logior! (-> gp-0 alert-state flags) (traffic-alert-flag target-jak)) (set! *traffic-alert-level-force* #f) ) (('lwideb) - (set! (-> gp-0 object-type-info-array 0 level) (the-as level 'lwideb)) + (set! (-> gp-0 object-type-info-array 0 level) 'lwideb) (set! (-> gp-0 object-type-info-array 1 level) #f) (set! (-> gp-0 object-type-info-array 2 level) #f) - (set! (-> gp-0 object-type-info-array 3 level) (the-as level 'lwideb)) - (set! (-> gp-0 object-type-info-array 4 level) (the-as level 'lwideb)) + (set! (-> gp-0 object-type-info-array 3 level) 'lwideb) + (set! (-> gp-0 object-type-info-array 4 level) 'lwideb) (set! (-> gp-0 object-type-info-array 5 level) #f) - (set! (-> gp-0 object-type-info-array 6 level) (the-as level 'lwideb)) + (set! (-> gp-0 object-type-info-array 6 level) 'lwideb) (set! (-> gp-0 object-type-info-array 7 level) #f) - (set! (-> gp-0 object-type-info-array 8 level) (the-as level 'lwideb)) - (set! (-> gp-0 object-type-info-array 9 level) (the-as level 'lwideb)) - (set! (-> gp-0 object-type-info-array 10 level) (the-as level 'lwideb)) - (set! (-> gp-0 object-type-info-array 11 level) (the-as level 'lwideb)) + (set! (-> gp-0 object-type-info-array 8 level) 'lwideb) + (set! (-> gp-0 object-type-info-array 9 level) 'lwideb) + (set! (-> gp-0 object-type-info-array 10 level) 'lwideb) + (set! (-> gp-0 object-type-info-array 11 level) 'lwideb) (set! (-> gp-0 object-type-info-array 12 level) #f) (set! (-> gp-0 object-type-info-array 13 level) #f) - (set! (-> gp-0 object-type-info-array 14 level) (the-as level 'lwideb)) + (set! (-> gp-0 object-type-info-array 14 level) 'lwideb) (set! (-> gp-0 object-type-info-array 15 level) #f) (set! (-> gp-0 object-type-info-array 16 level) #f) (set! (-> gp-0 object-type-info-array 17 level) #f) - (set! (-> gp-0 object-type-info-array 18 level) (the-as level 'lwideb)) + (set! (-> gp-0 object-type-info-array 18 level) 'lwideb) (set! (-> gp-0 object-type-info-array 19 level) #f) (logclear! (-> gp-0 alert-state flags) (traffic-alert-flag target-jak)) (set-alert-level gp-0 3) (logior! (-> gp-0 alert-state flags) (traffic-alert-flag guard-multi-focus)) - (set-alert-duration gp-0 #x6c258c00) + (set-alert-duration gp-0 (seconds 6048000)) (set! *traffic-alert-level-force* #t) ) ) @@ -872,7 +876,7 @@ ;; definition for function lwide-deactivate ;; WARN: Return type mismatch int vs none. (defun lwide-deactivate () - (set! *lwide-entity* (the-as object #f)) + (set! *lwide-entity* #f) (send-event *traffic-manager* 'kill-all) 0 (none) @@ -881,7 +885,7 @@ ;; definition for function ctywide-deactivate ;; WARN: Return type mismatch int vs none. (defun ctywide-deactivate () - (set! *ctywide-entity* (the-as object #f)) + (set! *ctywide-entity* #f) (set! *traffic-engine* #f) (set! *trail-graph* #f) (init *city-dead-pool* 'loading-level 0) @@ -902,7 +906,7 @@ ) ) (else - (process-entity-set! pp (the-as entity-actor *ctywide-entity*)) + (process-entity-set! pp *ctywide-entity*) ) ) 0 @@ -914,7 +918,7 @@ ;; WARN: Return type mismatch int vs none. (defun lwide-entity-hack () (with-pp - (process-entity-set! pp (the-as entity-actor *lwide-entity*)) + (process-entity-set! pp *lwide-entity*) 0 (none) ) diff --git a/test/decompiler/reference/jak2/levels/demo/demo-obs_REF.gc b/test/decompiler/reference/jak2/levels/demo/demo-obs_REF.gc index abd59443fc..064abd502d 100644 --- a/test/decompiler/reference/jak2/levels/demo/demo-obs_REF.gc +++ b/test/decompiler/reference/jak2/levels/demo/demo-obs_REF.gc @@ -1059,7 +1059,7 @@ ) ) ) - (process-entity-set! self (the-as entity-actor a1-2)) + (process-entity-set! self a1-2) ) (set-setting! 'allow-pause #f 0 0) (set-setting! 'allow-progress #f 0 0) diff --git a/test/decompiler/reference/jak2/levels/nest/nest-scenes_REF.gc b/test/decompiler/reference/jak2/levels/nest/nest-scenes_REF.gc index e49f9f66f7..95dbb7301c 100644 --- a/test/decompiler/reference/jak2/levels/nest/nest-scenes_REF.gc +++ b/test/decompiler/reference/jak2/levels/nest/nest-scenes_REF.gc @@ -201,7 +201,7 @@ ;; INFO: Used lq/sq ;; WARN: Return type mismatch object vs none. (defbehavior canyon-lightning-thingy-init-by-other canyon-lightning-thingy ((arg0 vector) (arg1 vector)) - (process-entity-set! self (the-as entity-actor #f)) + (process-entity-set! self (the-as entity #f)) (set! (-> self root) (new 'process 'trsqv)) (set! (-> self root trans quad) (-> arg0 quad)) (let ((a2-1 (vector-normalize-copy! (new 'stack-no-clear 'vector) arg1 1.0))) diff --git a/test/decompiler/reference/jak2/levels/title/title-obs_REF.gc b/test/decompiler/reference/jak2/levels/title/title-obs_REF.gc index c17439f5c3..e72be3042e 100644 --- a/test/decompiler/reference/jak2/levels/title/title-obs_REF.gc +++ b/test/decompiler/reference/jak2/levels/title/title-obs_REF.gc @@ -955,7 +955,7 @@ ) ) ) - (process-entity-set! self (the-as entity-actor a1-2)) + (process-entity-set! self a1-2) ) (set-setting! 'allow-pause #f 0 0) (set-setting! 'allow-progress #f 0 0)