diff --git a/decompiler/config/jak2/all-types.gc b/decompiler/config/jak2/all-types.gc index 26ba6525f7..b49e92cc10 100644 --- a/decompiler/config/jak2/all-types.gc +++ b/decompiler/config/jak2/all-types.gc @@ -51185,6 +51185,14 @@ ) ) +(deftype mystery-traffic-object-spawn-params-2 (structure) + "(anon-function 5 helldog)" + ((params traffic-object-spawn-params :inline) + (vec vector :inline) + (something-else int64) + ) + ) + (define-extern *paddywagon-constants* rigid-body-vehicle-constants) (define-extern pw-iter-seg-new-dir-level (function pw-iter-seg nav-segment none)) (define-extern choose-next-branch-no-exit-level (function vehicle-controller paddywagon nav-branch)) diff --git a/decompiler/config/jak2/ntsc_v1/label_types.jsonc b/decompiler/config/jak2/ntsc_v1/label_types.jsonc index bb10569827..73d3ebace0 100644 --- a/decompiler/config/jak2/ntsc_v1/label_types.jsonc +++ b/decompiler/config/jak2/ntsc_v1/label_types.jsonc @@ -1879,7 +1879,10 @@ "race-manager": [["L459", "attack-info"]], "palcab-obs": [["L146", "attack-info"]], "forest-obs": [["L240", "(pointer int32)", 4]], - "helldog": [["L72", "vector"]], + "helldog": [ + ["L72", "vector"], + ["L68", "vector"] + ], "hosehead": [ ["L261", "vector"], ["L260", "vector"], diff --git a/decompiler/config/jak2/ntsc_v1/stack_structures.jsonc b/decompiler/config/jak2/ntsc_v1/stack_structures.jsonc index 1c1f4f556e..bcfa2ab8f2 100644 --- a/decompiler/config/jak2/ntsc_v1/stack_structures.jsonc +++ b/decompiler/config/jak2/ntsc_v1/stack_structures.jsonc @@ -2239,5 +2239,6 @@ [112, "vector"], [128, "quaternion"], [48, "quaternion"] - ] + ], + "(anon-function 5 helldog)": [[16, "mystery-traffic-object-spawn-params-2"]] } diff --git a/decompiler/config/jak2/ntsc_v1/type_casts.jsonc b/decompiler/config/jak2/ntsc_v1/type_casts.jsonc index 4a5dfd609a..d5b4f09856 100644 --- a/decompiler/config/jak2/ntsc_v1/type_casts.jsonc +++ b/decompiler/config/jak2/ntsc_v1/type_casts.jsonc @@ -11116,5 +11116,12 @@ [1081, "s2", "process-drawable"], [1094, "s2", "process-drawable"], [1126, "s4", "citizen-rebel"] - ] + ], + "(anon-function 3 helldog)": [ + [[19, 36], "s4", "helldog"], + [64, "s4", "process-drawable"], + [70, "s4", "process-drawable"], + [80, "s4", "helldog"] + ], + "(anon-function 5 helldog)": [[181, "v0", "helldog"]] } diff --git a/goal_src/jak2/levels/common/enemy/hellcat/helldog.gc b/goal_src/jak2/levels/common/enemy/hellcat/helldog.gc index 5b50559c43..ba009d664d 100644 --- a/goal_src/jak2/levels/common/enemy/hellcat/helldog.gc +++ b/goal_src/jak2/levels/common/enemy/hellcat/helldog.gc @@ -5,5 +5,634 @@ ;; name in dgo: helldog ;; dgos: LHELLDOG +(deftype mystery-traffic-object-spawn-params-2 (structure) + "(anon-function 5 helldog)" + ((params traffic-object-spawn-params :inline) + (vec vector :inline) + (something-else int64) + ) + ) + +;; og:update-with-merge + ;; DECOMP BEGINS +(defmethod draw hud-helldog ((obj hud-helldog)) + (set-hud-piece-position! + (the-as hud-sprite (-> obj sprites)) + (the int (+ 457.0 (* 130.0 (-> obj offset)))) + 195 + ) + (format (clear (-> obj strings 0 text)) "~D" (-> obj values 0 current)) + (set-as-offset-from! (the-as hud-sprite (-> obj strings 0 pos)) (the-as vector4w (-> obj sprites)) -18 25) + ((method-of-type hud draw) obj) + 0 + (none) + ) + +(defmethod update-values hud-helldog ((obj hud-helldog)) + (set! (-> obj values 0 target) (the int (-> *game-info* counter))) + ((method-of-type hud update-values) obj) + 0 + (none) + ) + +(defmethod init-callback hud-helldog ((obj hud-helldog)) + (set! (-> obj level) (level-get *level* 'ctywide)) + (set! (-> obj gui-id) + (add-process *gui-control* obj (gui-channel hud-middle-right) (gui-action hidden) (-> obj name) 81920.0 0) + ) + (logior! (-> obj flags) (hud-flags show)) + (set! (-> obj sprites 0 tex) (lookup-texture-by-id (new 'static 'texture-id :index #x5 :page #x679))) + (set! (-> obj sprites 0 scale-x) 1.2) + (set! (-> obj sprites 0 scale-y) 1.2) + (set! (-> obj sprites 0 flags) (the-as uint 4)) + (alloc-string-if-needed obj 0) + (set! (-> obj strings 0 scale) 0.6) + (set! (-> obj strings 0 flags) (font-flags kerning middle large)) + 0 + (none) + ) + +(defskelgroup skel-helldog helldog helldog-lod0-jg helldog-idle-ja + ((helldog-lod0-mg (meters 20)) (helldog-lod1-mg (meters 40)) (helldog-lod2-mg (meters 999999))) + :bounds (static-spherem 0 0 0 6.6) + :shadow helldog-shadow-mg + ) + +(define *helldog-constants* + (new 'static 'rigid-body-vehicle-constants + :info (new 'static 'rigid-body-info + :mass 20.0 + :inv-mass 0.05 + :linear-damping 0.995 + :angular-damping 0.995 + :bounce-factor 0.1 + :friction-factor 0.05 + :cm-offset-joint (new 'static 'vector :y 2048.0 :z -2048.0 :w 1.0) + :inertial-tensor-box (new 'static 'array meters 3 (meters 6) (meters 3) (meters 7)) + ) + :extra (new 'static 'rigid-body-object-extra-info + :max-time-step 0.033333335 + :gravity (meters 40) + :idle-distance (meters 50) + :attack-force-scale 1.0 + ) + :name '*helldog-constants* + :flags #xc + :object-type #x13 + :guard-type #x5 + :max-engine-thrust (meters 50) + :inv-max-engine-thrust 0.0000048828124 + :engine-response-rate 60.0 + :engine-intake-factor 1.5 + :brake-factor 3.5 + :turbo-boost-factor 1.0 + :max-xz-speed (meters 40) + :ground-probe-distance (meters 4.5) + :cos-ground-effect-angle 0.42261824 + :spring-lift-factor 0.3 + :air-drag-factor 1.0 + :steering-thruster-factor 5.0 + :steering-thruster-max-gain 4.0 + :steering-thruster-half-gain-speed (meters 15) + :tire-friction-factor 0.5 + :tire-static-friction 0.55 + :tire-dynamic-friction 0.4 + :tire-dynamic-friction-speed (meters 2) + :tire-inv-max-friction-speed 0.000034877234 + :airfoil-factor 1.0 + :drag-force-factor 1.0 + :speed-scrubbing-drag 10.0 + :speed-limiting-drag 0.5 + :pitch-control-factor 0.5 + :roll-control-factor 1.0 + :jump-thrust-factor 0.5 + :buoyancy-factor 1.0 + :player-weight 163840.0 + :player-shift-x (meters 0.6) + :player-shift-z (meters 1) + :target-speed-offset (meters -2) + :turning-accel (meters 45) + :toughness-factor 1.0 + :damage-factor 2.0 + :camera-string-min-height (meters 4.5) + :camera-string-max-height (meters 4.5) + :camera-string-min-length (meters 5) + :camera-string-max-length (meters 12.5) + :camera-min-fov 15109.688 + :camera-max-fov 17476.268 + :camera-head-offset 8192.0 + :camera-foot-offset 4096.0 + :camera-air-max-angle-offset 5461.3335 + :camera-max-lookaround-speed 40960.0 + :seat-count 2 + :section-count 4 + :rider-stance #x1 + :grab-rail-array #f + :seat-array (new 'static 'inline-array vehicle-seat-info 4 + (new 'static 'vehicle-seat-info + :position (new 'static 'vector :x 5120.0 :y 819.2 :z 2457.6 :w (the-as float #x10000)) + ) + (new 'static 'vehicle-seat-info + :position (new 'static 'vector :x -5120.0 :y 819.2 :z 2457.6 :w (the-as float #x20000)) + ) + (new 'static 'vehicle-seat-info) + (new 'static 'vehicle-seat-info) + ) + :rider-hand-offset (new 'static 'inline-array vector 2 + (new 'static 'vector :x 2457.6 :y 409.6 :z 4710.4 :w 1.0) + (new 'static 'vector :x -2457.6 :y 409.6 :z 4710.4 :w 1.0) + ) + :section-bike-front (new 'static 'vehicle-section-info + :damage-seg-array (new 'static 'array uint64 3 #x200 #x20 #x2) + :damage-seg-count 3 + ) + :section-bike-rear (new 'static 'vehicle-section-info + :damage-seg-array (new 'static 'array uint64 3 #x400 #x40 #x4) + :damage-seg-count 3 + ) + :section-car-front-right (new 'static 'vehicle-section-info + :damage-seg-array (new 'static 'array uint64 3 #x800 #x80 #x8) + :damage-seg-count 3 + ) + :section-car-rear-right (new 'static 'vehicle-section-info + :damage-seg-array (new 'static 'array uint64 3 #x1000 #x100 #x10) + :damage-seg-count 3 + ) + :explosion #f + :engine-pitch-scale 0.25 + :engine-pitch-mod-amp 0.025 + :engine-sound-select #x8 + :engine-sound (static-sound-name "vehicle-engine") + :thrust-sound (static-sound-name "bike-thrust") + :scrape-sound (static-sound-name "car-scrape-stn") + :glance-sound (static-sound-name "car-glance-stn") + :impact-sound (static-sound-name "car-impact-stn") + :extra-sound (static-sound-name "car-by-1") + :explosion-part #xa1 + :headlight-count 3 + :taillight-count 2 + :thruster-flame-width (meters 0.6) + :thruster-flame-length (meters 2) + :thruster-local-pos (new 'static 'inline-array vector 2 + (new 'static 'vector :x 6144.0 :y 4096.0 :z -17612.8 :w 1.0) + (new 'static 'vector :x -6144.0 :y 4096.0 :z -17612.8 :w 1.0) + ) + :exhaust-local-pos (new 'static 'inline-array vector 2 + (new 'static 'vector :x 6144.0 :y 5529.6 :z -17612.8 :w 1.0) + (new 'static 'vector :x -6144.0 :y 5529.6 :z -17612.8 :w 1.0) + ) + :exhaust-local-dir (new 'static 'inline-array vector 2 (new 'static 'vector :z -1.0 :w 1.0) (new 'static 'vector :z -1.0 :w 1.0)) + :smoke-local-pos (new 'static 'inline-array vector 2 + (new 'static 'vector :x 2048.0 :y 4096.0 :z -16384.0 :w 1.0) + (new 'static 'vector :x -2048.0 :y 4096.0 :z -16384.0 :w 1.0) + ) + :smoke-local-vel (new 'static 'inline-array vector 2 + (new 'static 'vector :x 2048.0 :w 1.0) + (new 'static 'vector :x -2048.0 :w 1.0) + ) + :headlight-local-pos (new 'static 'inline-array vector 3 + (new 'static 'vector :x 5734.4 :y 1843.2 :z 15769.6 :w 1.0) + (new 'static 'vector :x -5734.4 :y 1843.2 :z 15769.6 :w 1.0) + (new 'static 'vector :y 6963.2 :z 6922.24 :w 1.0) + ) + :taillight-local-pos (new 'static 'inline-array vector 2 + (new 'static 'vector :x 10362.88 :y 4710.4 :z -16998.4 :w 1.0) + (new 'static 'vector :x -10362.88 :y 4710.4 :z -16998.4 :w 1.0) + ) + :lift-thruster-count 2 + :roll-thruster-count 2 + :steering-thruster-count 2 + :stabilizer-count 4 + :inv-lift-thruster-count 0.5 + :lift-thruster-array (new 'static 'inline-array vehicle-control-point 2 + (new 'static 'vehicle-control-point + :local-pos (new 'static 'vector :y 2048.0 :z 8192.0 :w 1.0) + :normal (new 'static 'vector :y -1.0 :w 1.0) + ) + (new 'static 'vehicle-control-point + :local-pos (new 'static 'vector :y 2048.0 :z -12288.0 :w 1.0) + :normal (new 'static 'vector :y -1.0 :w 1.0) + ) + ) + :roll-thruster-array (new 'static 'inline-array vehicle-control-point 2 + (new 'static 'vehicle-control-point + :local-pos (new 'static 'vector :x 6963.2 :y 2867.2 :z -2048.0 :w 1.0) + :normal (new 'static 'vector :x 0.3 :y -0.6 :w 1.0) + ) + (new 'static 'vehicle-control-point + :local-pos (new 'static 'vector :x -6963.2 :y 2867.2 :z -2048.0 :w 1.0) + :normal (new 'static 'vector :x -0.3 :y -0.6 :w 1.0) + ) + ) + :steering-thruster-array (new 'static 'inline-array vehicle-control-point 2 + (new 'static 'vehicle-control-point + :local-pos (new 'static 'vector :y 2048.0 :z 5734.4 :w 1.0) + :normal (new 'static 'vector :x 1.0 :w 1.0) + ) + (new 'static 'vehicle-control-point + :local-pos (new 'static 'vector :y 2048.0 :z -9830.4 :w 1.0) + :normal (new 'static 'vector :x -1.0 :w 1.0) + ) + ) + :stabilizer-array (new 'static 'inline-array vehicle-control-point 6 + (new 'static 'vehicle-control-point + :local-pos (new 'static 'vector :y 2048.0 :z -10240.0 :w 1.0) + :normal (new 'static 'vector :x 1.0 :w 1.0) + ) + (new 'static 'vehicle-control-point + :local-pos (new 'static 'vector :y 2048.0 :z 6144.0 :w 1.0) + :normal (new 'static 'vector :x 1.0 :w 0.5) + ) + (new 'static 'vehicle-control-point + :local-pos (new 'static 'vector :y 2048.0 :z -2048.0 :w 1.0) + :normal (new 'static 'vector :x 1.0 :w 2.0) + ) + (new 'static 'vehicle-control-point + :local-pos (new 'static 'vector :y 2048.0 :z -10240.0 :w 1.0) + :normal (new 'static 'vector :y 1.0 :w 1.0) + ) + (new 'static 'vehicle-control-point) + (new 'static 'vehicle-control-point) + ) + :engine-thrust-local-pos (new 'static 'vector :y 2048.0 :z -7782.4 :w 1.0) + :brake-local-pos (new 'static 'vector :z -5734.4 :w 1.0) + :color-option-count 1 + :color-option-array (new 'static 'inline-array vector 1 (new 'static 'vector :x 1.0 :y 1.0 :z 1.0 :w 1.0)) + ) + ) + +(define *helldog-front-turret-control-info* (new 'static 'turret-control-info + :joint-index 4 + :barrel-count 1 + :shot-speed 819200.0 + :attack-range 286720.0 + :rot-min (new 'static 'array float 2 -16384.0 -21845.334) + :rot-max (new 'static 'array float 2 0.0 21845.334) + :local-pos (new 'static 'vector :y -1433.6 :z 4096.0 :w 1.0) + :local-dir (new 'static 'vector :z 1.0 :w 1.0) + :barrel-array (new 'static 'inline-array turret-barrel-info 4 + (new 'static 'turret-barrel-info + :local-pos (new 'static 'vector :y -1433.6 :z 4096.0 :w 1.0) + :local-dir (new 'static 'vector :z 1.0 :w 1.0) + ) + (new 'static 'turret-barrel-info) + (new 'static 'turret-barrel-info) + (new 'static 'turret-barrel-info) + ) + ) + ) + +(define *helldog-top-turret-control-info* (new 'static 'turret-control-info + :joint-index #x6 + :barrel-count 2 + :shot-speed 819200.0 + :attack-range 286720.0 + :rot-min (new 'static 'array float 2 -1820.4445 -65536.0) + :rot-max (new 'static 'array float 2 1820.4445 65536.0) + :local-pos (new 'static 'vector :y -1433.6 :z 4096.0 :w 1.0) + :local-dir (new 'static 'vector :z 1.0 :w 1.0) + :barrel-array (new 'static 'inline-array turret-barrel-info 4 + (new 'static 'turret-barrel-info + :local-pos (new 'static 'vector :x 5734.4 :y -819.2 :z 6144.0 :w 1.0) + :local-dir (new 'static 'vector :z 1.0 :w 1.0) + ) + (new 'static 'turret-barrel-info + :local-pos (new 'static 'vector :x -5734.4 :y -819.2 :z 6144.0 :w 1.0) + :local-dir (new 'static 'vector :z 1.0 :w 1.0) + ) + (new 'static 'turret-barrel-info) + (new 'static 'turret-barrel-info) + ) + ) + ) + +(deftype helldog (hellcat) + ((current-level level :offset-assert 1080) + ) + :heap-base #x3c0 + :method-count-assert 159 + :size-assert #x43c + :flag-assert #x9f03c0043c + ) + + +(defmethod init-skel-and-rigid-body helldog ((obj helldog)) + (with-pp + (set! (-> pp level) (level-get *level* 'lhelldog)) + (initialize-skeleton + obj + (the-as skeleton-group (art-group-get-by-name *level* "skel-helldog" (the-as (pointer uint32) #f))) + (the-as pair 0) + ) + (alloc-and-init-rigid-body-control obj *helldog-constants*) + (set-info (-> obj turret) *helldog-top-turret-control-info*) + (set! (-> obj turret guard-settings) + (the-as + traffic-guard-type-settings + (new 'static 'vector :y 0.125 :z (the-as float #x3c004b) :w 0.0000000000000000000000000000000000015517602) + ) + ) + (logior! (-> obj turret flags) (turret-flag no-rot-y-clamp)) + (set! (-> obj turret-jm) (new 'process 'joint-mod-rotate-local obj (-> obj turret info joint-index) #t)) + (set! (-> obj flags) + (the-as rigid-body-object-flag (logior (rigid-body-object-flag no-hijack) (-> obj flags))) + ) + (if (not (-> obj minimap)) + (set! (-> obj minimap) (add-icon! *minimap* obj (the-as uint 15) (the-as int #f) (the-as vector #t) 0)) + ) + 0 + (none) + ) + ) + +(defmethod vehicle-method-82 helldog ((obj helldog)) + ((method-of-type vehicle vehicle-method-82) obj) + (none) + ) + +(defmethod vehicle-method-120 helldog ((obj helldog)) + (let ((t9-0 (method-of-type hellcat vehicle-method-120))) + (t9-0 obj) + ) + (if (logtest? (-> obj controller flags) (vehicle-controller-flag attached)) + (set! (-> obj current-level) (the-as level (-> obj controller branch dest-node level))) + (set! (-> obj current-level) #f) + ) + 0 + (none) + ) + +(defmethod vehicle-method-128 helldog ((obj helldog)) + (let ((t9-0 (method-of-type vehicle vehicle-method-128))) + (t9-0 obj) + ) + (logior! (-> obj flags) (rigid-body-object-flag persistent)) + 0 + (none) + ) + +(defmethod vehicle-method-127 helldog ((obj helldog)) + ((method-of-type vehicle vehicle-method-127) obj) + 0 + (none) + ) + +(defmethod vehicle-method-129 helldog ((obj helldog)) + (when (-> obj minimap) + (logior! (-> obj minimap flags) (minimap-flag fade-out)) + (set! (-> obj minimap) #f) + ) + ((method-of-type vehicle vehicle-method-129) obj) + 0 + (none) + ) + +(defmethod vehicle-method-134 helldog ((obj helldog) (arg0 process)) + "Stubbed" + (logior! (-> obj controller flags) (vehicle-controller-flag ignore-others)) + (set! (-> obj controller target-speed-offset) 81920.0) + (let ((t9-0 (method-of-type vehicle-guard vehicle-method-134))) + (t9-0 obj arg0) + ) + (vehicle-method-111 obj 2 (the-as target arg0)) + (go (method-of-object obj hostile)) + 0 + (none) + ) + +(defmethod vehicle-method-108 helldog ((obj helldog)) + (set! (-> obj flags) + (the-as rigid-body-object-flag (logior (rigid-body-object-flag persistent in-pursuit) (-> obj flags))) + ) + (logior! (-> obj controller flags) (vehicle-controller-flag ignore-others)) + 0 + (none) + ) + +(defstate active (helldog) + :virtual #t + :enter (behavior () + (vehicle-method-107 self) + (let ((t9-1 (-> (method-of-type hellcat active) enter))) + (if t9-1 + (t9-1) + ) + ) + (none) + ) + ) + +(defstate hostile (helldog) + :virtual #t + :enter (behavior () + (set! (-> self ai-hook) (method-of-object self vehicle-method-93)) + (none) + ) + :trans (the-as (function none :behavior helldog) #f) + :code (the-as (function none :behavior helldog) sleep-code) + :post (behavior () + (vehicle-guard-method-158 self) + (none) + ) + ) + +(defstate die (helldog) + :virtual #t + :code (behavior () + (cleanup-for-death self) + (none) + ) + ) + +(set-subtask-hook! + *game-info* + 147 + 0 + (the-as + (function object) + (lambda :behavior task-manager + () + (change-parent self *traffic-manager*) + (set! (-> self end-pos quad) (-> (new 'static 'vector :x 4136960.0 :y 32768.0 :z 4677632.0 :w 1.0) quad)) + (set-setting! 'minimap 'clear 0 32) + (set-setting! 'exclusive-task #f 0 (-> self node-info task)) + (until (= (level-status *level* 'lwidea) 'active) + (suspend) + ) + (if (task-node-closed? (game-task-node city-destroy-guard-vehicles-destroy)) + (go-virtual complete) + ) + (set! (-> self start-time) 0) + (set! (-> self max-count) 5) + (set! (-> self count) (-> self max-count)) + (set-vector! (-> self data-vector 0) 3284992.0 73728.0 2019328.0 0.0) + (set-vector! (-> self data-vector 1) 4653056.0 69632.0 2519040.0 31857.777) + (set-vector! (-> self data-vector 2) 4366336.0 73728.0 323584.0 0.0) + (set-vector! (-> self data-vector 3) 2101248.0 73728.0 -114688.0 27852.8) + (set-vector! (-> self data-vector 4) 1687552.0 73728.0 -819200.0 2366.578) + (let ((gp-1 (new 'stack-no-clear 'mystery-traffic-object-spawn-params-2))) + (set! (-> gp-1 something-else) 0) + (set! (-> gp-1 params object-type) (traffic-type tt17)) + (set! (-> gp-1 params behavior) (the-as uint 1)) + (set! (-> gp-1 params id) (the-as uint 0)) + (set! (-> gp-1 params nav-mesh) #f) + (set! (-> gp-1 params nav-branch) #f) + (set! (-> gp-1 params proc) #f) + (set! (-> gp-1 params handle) (the-as handle #f)) + (set! (-> gp-1 params user-data) (the-as uint 0)) + (set! (-> gp-1 params flags) (traffic-spawn-flags)) + (set! (-> gp-1 params guard-type) (the-as uint 7)) + (vector-reset! (-> gp-1 params velocity)) + (vector-reset! (-> gp-1 params position)) + (vector-reset! (-> gp-1 params velocity)) + (countdown (s5-0 (-> self count)) + (set! (-> gp-1 params id) (the-as uint (+ (-> gp-1 something-else) 122))) + (set! (-> gp-1 params position quad) (-> self data-vector (-> gp-1 something-else) quad)) + (let ((f30-0 (-> gp-1 params position w))) + (set-vector! (-> gp-1 vec) (sin f30-0) 0.0 (cos f30-0) 1.0) + ) + (set! (-> gp-1 params position w) 1.0) + (forward-up-nopitch->quaternion (-> gp-1 params rotation) (-> gp-1 vec) (new 'static 'vector :y 1.0 :w 1.0)) + (let ((s4-1 (the-as helldog (vehicle-spawn self helldog (-> gp-1 params))))) + (when s4-1 + (let ((v1-32 (-> gp-1 something-else))) + (set! (-> s4-1 current-level) (the-as level (cond + ((zero? v1-32) + 'ctyindb + ) + ((= v1-32 1) + 'ctyindb + ) + ((= v1-32 2) + 'ctysluma + ) + ((= v1-32 3) + 'ctyslumb + ) + ((= v1-32 4) + 'ctyslumb + ) + (else + #f + ) + ) + ) + ) + ) + (set! (-> self slave (-> gp-1 something-else)) (process->handle s4-1)) + (send-event *traffic-manager* 'add-object (-> gp-1 params object-type) s4-1) + (+! (-> gp-1 something-else) 1) + ) + (if (not s4-1) + (format 0 "failed to spawn helldog~%") + ) + ) + ) + (send-event *traffic-manager* 'set-object-target-count (-> gp-1 params object-type) 0) + ) + (send-event *traffic-manager* 'set-guard-target-count-range 5 0 0) + (set! (-> *game-info* counter) (the float (-> self max-count))) + (none) + ) + ) + ) + +(set-subtask-hook! *game-info* 147 1 (the-as (function object) (lambda :behavior task-manager () (none)))) + +(set-subtask-hook! + *game-info* + 147 + 2 + (the-as + (function object) + (lambda :behavior task-manager + () + (let ((gp-0 0)) + (dotimes (s5-0 (-> self max-count)) + (let ((s4-0 (handle->process (-> self slave s5-0)))) + (when (and s4-0 (not (logtest? (-> (the-as helldog s4-0) focus-status) (focus-status dead)))) + (cond + ((or (not (-> (the-as helldog s4-0) current-level)) + (= (level-status *level* (the-as symbol (-> (the-as helldog s4-0) current-level))) 'active) + ) + (when (focus-test? (the-as helldog s4-0) inactive) + (let ((s3-0 (new 'stack 'traffic-object-spawn-params))) + (set! (-> s3-0 object-type) (traffic-type tt17)) + (set! (-> s3-0 behavior) (the-as uint 2)) + (set! (-> s3-0 id) (the-as uint 0)) + (set! (-> s3-0 nav-mesh) #f) + (set! (-> s3-0 nav-branch) #f) + (set! (-> s3-0 proc) #f) + (set! (-> s3-0 handle) (-> self slave s5-0)) + (set! (-> s3-0 user-data) (the-as uint 0)) + (set! (-> s3-0 flags) (traffic-spawn-flags trsflags-01)) + (set! (-> s3-0 guard-type) (the-as uint 7)) + (vector-reset! (-> s3-0 velocity)) + (set! (-> s3-0 position quad) (-> (the-as process-drawable s4-0) root trans quad)) + (quaternion-copy! (-> s3-0 rotation) (-> (the-as process-drawable s4-0) root quat)) + (activate-by-handle *traffic-engine* s3-0) + ) + ) + ) + (else + (if (not (focus-test? (the-as helldog s4-0) inactive)) + (send-event s4-0 'traffic-off-force) + ) + ) + ) + (+! gp-0 1) + ) + ) + ) + (set! (-> self count) gp-0) + (set! (-> *game-info* counter) (the float gp-0)) + (if (zero? gp-0) + (go-virtual complete) + ) + ) + (none) + ) + ) + ) + +(set-subtask-hook! + *game-info* + 147 + 3 + (the-as + (function object) + (lambda :behavior task-manager + () + (set! (-> self hud-counter) (ppointer->handle (process-spawn hud-helldog :init hud-init-by-other :to self))) + (none) + ) + ) + ) + +(set-subtask-hook! *game-info* 147 5 (the-as (function object) (lambda :behavior task-manager () (none)))) + +(set-subtask-hook! + *game-info* + 147 + 4 + (the-as + (function object) + (lambda :behavior task-manager + () + (task-node-close! (game-task-node city-destroy-guard-vehicles-destroy)) + (talker-spawn-func (-> *talker-speech* 98) *entity-pool* (target-pos 0) (the-as region #f)) + (while (let ((a0-3 (the-as process #f))) + (dotimes (v1-1 (-> self max-count)) + (set! a0-3 (the-as process (or a0-3 (handle->process (-> self slave v1-1))))) + ) + a0-3 + ) + (suspend) + ) + (task-node-close! (game-task-node city-destroy-guard-vehicles-resolution)) + (none) + ) + ) + ) diff --git a/test/offline/config/jak2/config.jsonc b/test/offline/config/jak2/config.jsonc index ba3d49b7cc..07d51b5b9f 100644 --- a/test/offline/config/jak2/config.jsonc +++ b/test/offline/config/jak2/config.jsonc @@ -8,6 +8,7 @@ "DGO/ATO.DGO", "DGO/CAB.DGO", "DGO/CAP.DGO", + "DGO/CAS.DGO", "DGO/CFB.DGO", "DGO/CGA.DGO", "DGO/CGB.DGO", @@ -18,17 +19,17 @@ "DGO/COA.DGO", "DGO/COB.DGO", "DGO/CPA.DGO", - "DGO/CTA.DGO", - "DGO/LPROTECT.DGO", "DGO/CPO.DGO", + "DGO/CTA.DGO", "DGO/CTB.DGO", "DGO/CTC.DGO", "DGO/CTYASHA.DGO", "DGO/CTYKORA.DGO", "DGO/CWI.DGO", + "DGO/DEMO.DGO", "DGO/DG1.DGO", - "DGO/DRB.DGO", "DGO/DMI.DGO", + "DGO/DRB.DGO", "DGO/FDA.DGO", "DGO/FDB.DGO", "DGO/FEA.DGO", @@ -43,12 +44,16 @@ "DGO/INTROCST.DGO", "DGO/KIOSK.DGO", "DGO/LBBUSH.DGO", - "DGO/LBRNERMK.DGO", "DGO/LBOMBBOT.DGO", + "DGO/LBRNERMK.DGO", "DGO/LERLCHAL.DGO", + "DGO/LHELLDOG.DGO", "DGO/LKIDDOGE.DGO", "DGO/LMEETBRT.DGO", + "DGO/LPACKAGE.DGO", "DGO/LPORTRUN.DGO", + "DGO/LPOWER.DGO", + "DGO/LPROTECT.DGO", "DGO/LSACK.DGO", "DGO/LSHUTTLE.DGO", "DGO/MCN.DGO", @@ -58,15 +63,11 @@ "DGO/ONINTENT.DGO", "DGO/ORACLE.DGO", "DGO/OUTROCST.DGO", - "DGO/CAS.DGO", - "DGO/LPACKAGE.DGO", - "DGO/LPOWER.DGO", "DGO/PAC.DGO", "DGO/PAE.DGO", - "DGO/PALOUT.DGO", "DGO/PALBOSS.DGO", + "DGO/PALOUT.DGO", "DGO/PAR.DGO", - "DGO/DEMO.DGO", "DGO/PAS.DGO", "DGO/PRI.DGO", "DGO/RUI.DGO",