jak-project/goal_src/levels/finalboss/robotboss-h.gc
ManDude caac740aff
[decomp] fisher and FIN.DGO (finalboss) level (#899)
* decomp `fisher`, `robotboss`, `light-eco`, `green-eco-lurker`, `sage-finalboss`, `robotboss-weapon`, `robotboss-misc`

* fixes

* add files

* add `:states` list to `deftype` and fix files

* test state forward decl's on a few more types

* also the refs

* add light-eco

* whatever
2021-10-16 14:06:33 -04:00

151 lines
5.1 KiB
Common Lisp

;;-*-Lisp-*-
(in-package goal)
;; name: robotboss-h.gc
;; name in dgo: robotboss-h
;; dgos: FIN, L1
(define-extern *robotboss-sg* skeleton-group)
;; DECOMP BEGINS
(deftype robotboss-dda (structure)
((blue-bomb-time float :offset-assert 0)
(num-blobs int32 :offset-assert 4)
(green-bomb-time float :offset-assert 8)
(red-shots-min int32 :offset-assert 12)
(red-shots-rnd int32 :offset-assert 16)
(red-shot-time-min float :offset-assert 20)
(red-shot-time-rnd float :offset-assert 24)
(red-bomb-time float :offset-assert 28)
(yellow-shot-time-min float :offset-assert 32)
(yellow-shot-time-rnd float :offset-assert 36)
(yellow-gun-hits int32 :offset-assert 40)
(yellow-bomb-time float :offset-assert 44)
)
:method-count-assert 9
:size-assert #x30
:flag-assert #x900000030
)
(deftype robotboss (process-drawable)
((root-override collide-shape-moving :offset 112)
(alts entity-actor 13 :offset-assert 176)
(desired-loc vector :inline :offset-assert 240)
(old-loc vector :inline :offset-assert 256)
(loc-t float :offset-assert 272)
(loc-t-start int64 :offset-assert 280)
(loc-t-duration int64 :offset-assert 288)
(hits-to-go int32 :offset-assert 296)
(took-hit symbol :offset-assert 300)
(children-spawned int32 :offset-assert 304)
(vulnerable int64 :offset-assert 312)
(till-next-shot int64 :offset-assert 320)
(shot-attractor handle :offset-assert 328)
(desired-pool-y float :offset-assert 336)
(particle sparticle-launch-control 7 :offset-assert 340)
(blue-smoke symbol :offset-assert 368)
(red-smoke symbol :offset-assert 372)
(yellow-smoke symbol :offset-assert 376)
(white-eco handle :offset-assert 384)
(des-cam-entity string :offset-assert 392)
(use-interesting symbol :offset-assert 396)
(ignore-camera symbol :offset-assert 400)
(ambient ambient-control :offset 408)
(yellow-gun joint-mod :offset 424)
(palette-val float :offset 428)
(looping-sound ambient-sound 4 :offset 432)
(dda robotboss-dda :offset 448)
(valid-frames int32 :offset 452)
(skip-cut symbol :offset 456)
(keep-charging symbol :offset 460)
)
:heap-base #x16
:method-count-assert 21
:size-assert #x1d0
:flag-assert #x15001601d0
(:methods
(ease-loc-t (_type_) float 20)
)
)
(defmethod relocate robotboss ((obj robotboss) (arg0 int))
(dotimes (v1-0 7)
(if (nonzero? (-> obj particle v1-0))
(&+! (-> obj particle v1-0) arg0)
)
)
(dotimes (v1-3 4)
(if (nonzero? (-> obj looping-sound v1-3))
(&+! (-> obj looping-sound v1-3) arg0)
)
)
(if (nonzero? (-> obj yellow-gun))
(&+! (-> obj yellow-gun) arg0)
)
(the-as robotboss ((method-of-type process-drawable relocate) obj arg0))
)
(defmethod deactivate robotboss ((obj robotboss))
(dotimes (s5-0 7)
(let ((a0-1 (-> obj particle s5-0)))
(if (nonzero? a0-1)
(kill-and-free-particles a0-1)
)
)
)
(dotimes (s5-1 4)
(let ((a0-2 (-> obj looping-sound s5-1)))
(if (nonzero? a0-2)
(stop! a0-2)
)
)
)
((method-of-type process-drawable deactivate) obj)
(none)
)
(defun target-has-all-the-cells? ()
(with-pp
(the-as
symbol
(and *target* (let ((a1-0 (new 'stack-no-clear 'event-message-block)))
(set! (-> a1-0 from) pp)
(set! (-> a1-0 num-params) 2)
(set! (-> a1-0 message) 'query)
(set! (-> a1-0 param 0) (the-as uint 'pickup))
(set! (-> a1-0 param 1) (the-as uint 6))
(>=
(the int (the-as float (send-event-function *target* a1-0)))
100
)
)
)
)
)
)
(let
((v0-6
(new 'static 'skeleton-group
:art-group-name "robotboss"
:bounds
(new 'static 'vector :y -40960.0 :w 327680.0)
:longest-edge (meters 19.9)
:version #x6
)
)
)
(set! (-> v0-6 jgeo) 0)
(set! (-> v0-6 janim) 2)
(set! (-> v0-6 mgeo 0) (the-as uint 1))
(set! (-> v0-6 lod-dist 0) 4095996000.0)
(set! *robotboss-sg* v0-6)
)