jak-project/goal_src/jak1/levels/ogre/ogre-obs.gc
Tyler Wilding c162c66118
g/j1: Cleanup all main issues in the formatter and format all of goal_src/jak1 (#3535)
This PR does two main things:
1. Work through the main low-hanging fruit issues in the formatter
keeping it from feeling mature and usable
2. Iterate and prove that point by formatting all of the Jak 1 code
base. **This has removed around 100K lines in total.**
- The decompiler will now format it's results for jak 1 to keep things
from drifting back to where they were. This is controlled by a new
config flag `format_code`.

How am I confident this hasn't broken anything?:
- I compiled the entire project and stored it's `out/jak1/obj` files
separately
- I then recompiled the project after formatting and wrote a script that
md5's each file and compares it (`compare-compilation-outputs.py`
- The results (eventually) were the same:

![Screenshot 2024-05-25
132900](https://github.com/open-goal/jak-project/assets/13153231/015e6f20-8d19-49b7-9951-97fa88ddc6c2)
> This proves that the only difference before and after is non-critical
whitespace for all code/macros that is actually in use.

I'm still aware of improvements that could be made to the formatter, as
well as general optimization of it's performance. But in general these
are for rare or non-critical situations in my opinion and I'll work
through them before doing Jak 2. The vast majority looks great and is
working properly at this point. Those known issues are the following if
you are curious:

![image](https://github.com/open-goal/jak-project/assets/13153231/0edfaba1-6d36-40f5-ab23-0642209867c4)
2024-06-05 22:17:31 -04:00

1160 lines
42 KiB
Common Lisp

;;-*-Lisp-*-
(in-package goal)
(bundles "OGR.DGO")
(require "engine/anim/joint-mod-h.gc")
(require "engine/game/projectiles.gc")
(require "engine/common-obs/rigid-body.gc")
;; DECOMP BEGINS
(defskelgroup *med-res-snow-sg*
medres-snow
medres-snow-lod0-jg
medres-snow-idle-ja
((medres-snow-lod0-mg (meters 999999)))
:bounds (static-spherem -390 150 70 410))
(defpartgroup group-tntbarrel-BIG-explosion
:id 473
:flags (use-local-clock)
:bounds (static-bspherem 0 0 0 64)
:parts
((sp-item 2234 :period (seconds 10) :length (seconds 0.017))
(sp-item 2235 :period (seconds 10) :length (seconds 0.017))
(sp-item 2236 :period (seconds 10) :length (seconds 0.135))
(sp-item 2237 :period (seconds 10) :length (seconds 0.135))
(sp-item 2238 :period (seconds 10) :length (seconds 0.135))))
(defpart 2236
:init-specs
((:texture (new 'static 'texture-id :index #xf :page #x2))
(:num 32.0)
(:y (meters 0) (meters 1))
(:scale-x (meters 2.4) (meters 1.8))
(:scale-y :copy scale-x)
(:r 192.0 64.0)
(:g 192.0 64.0)
(:b 128.0)
(:a 32.0 96.0)
(:vel-y (meters 0.32) (meters 0.42666668))
(:scalevel-x (meters -0.009333333))
(:scalevel-y :copy scalevel-x)
(:fade-g -2.1333334)
(:fade-b -1.4222223)
(:accel-y (meters -0.0005) (meters -0.0005))
(:friction 0.9)
(:timer (seconds 1))
(:flags (bit2 bit14))
(:next-time (seconds 0.1) (seconds 0.297))
(:next-launcher 2239)
(:conerot-x (degrees 0) (degrees 120))
(:conerot-y (degrees 0) (degrees 360))
(:conerot-radius (meters 2) (meters 12))))
(defpart 2239
:init-specs ((:fade-r 0.0) (:fade-g 0.0) (:fade-b 0.0) (:fade-a -1.0666667)))
(defpart 2238
:init-specs
((:texture (new 'static 'texture-id :index #xf :page #x2))
(:num 6.0)
(:y (meters 0) (meters 1))
(:scale-x (meters 0.5))
(:rot-z (degrees 0) (degrees 180))
(:scale-y (meters 32))
(:r 255.0)
(:g 196.0)
(:b 64.0)
(:a 32.0 64.0)
(:scalevel-y (meters 3.4133334))
(:fade-g -3.2666667)
(:fade-b -1.0666667)
(:fade-a -1.6)
(:timer (seconds 0.2))
(:flags (bit2 bit3 bit14))))
(defpart 2234
:init-specs
((:texture (new 'static 'texture-id :index #x12 :page #x2))
(:num 1.0)
(:y (meters 2))
(:scale-x (meters 128))
(:scale-y :copy scale-x)
(:r 255.0)
(:g 192.0 32.0)
(:b 128.0)
(:a 128.0)
(:timer (seconds 3))
(:flags (bit2 bit3 bit14))))
(defpart 2235
:init-specs
((:texture (new 'static 'texture-id :index #x12 :page #x2))
(:num 1.0)
(:y (meters 2))
(:scale-x (meters 32))
(:scale-y :copy scale-x)
(:r 255.0)
(:g 192.0 32.0)
(:b 128.0)
(:a 128.0)
(:timer (seconds 3))
(:flags (bit2 bit3 bit14))))
(defpart 2237
:init-specs
((:texture (new 'static 'texture-id :page #x2))
(:num 48.0)
(:y (meters 0) (meters 1))
(:scale-x (meters 16) (meters 10))
(:rot-z (degrees 0) (degrees 360))
(:scale-y :copy scale-x)
(:r 255.0)
(:g 128.0 64.0)
(:b 128.0)
(:a 48.0 48.0)
(:vel-y (meters 0.32) (meters 0.21333334))
(:scalevel-x (meters 0.053333335))
(:rotvel-z (degrees -0.6) (degrees 1.2))
(:scalevel-y :copy scalevel-x)
(:fade-a -0.08533333)
(:accel-y (meters 0.0005) (meters 0.0005))
(:friction 0.85)
(:timer (seconds 1.7))
(:flags (bit2 bit14))
(:next-time (seconds 0.14))
(:next-launcher 2240)
(:conerot-x (degrees 0) (degrees 160))
(:conerot-y (degrees 0) (degrees 360))
(:conerot-radius (meters 0) (meters 8))))
(defpart 2240
:init-specs ((:fade-r -0.26666668) (:fade-g -0.26666668) (:fade-b -0.52916664) (:next-time (seconds 0.8)) (:next-launcher 2241)))
(defpart 2241
:init-specs
((:fade-r -0.24380952)
(:fade-g -0.12190476)
(:fade-b 0.0)
(:fade-a -0.09142857)
(:next-time (seconds 1.75))
(:next-launcher 2242)))
(defpart 2242
:init-specs ((:fade-r 0.0) (:fade-g 0.0) (:fade-b 0.0)))
(defpartgroup group-tntbarrel-explosion
:id 474
:duration (seconds 2)
:flags (use-local-clock)
:bounds (static-bspherem 0 0 0 12)
:parts
((sp-item 2079 :period (seconds 2) :length (seconds 0.017))
(sp-item 2080 :period (seconds 2) :length (seconds 0.135))
(sp-item 2081 :period (seconds 2) :length (seconds 0.067))
(sp-item 2082 :period (seconds 2) :length (seconds 0.067))))
(defpart 2080
:init-specs
((:texture (new 'static 'texture-id :index #xf :page #x2))
(:num 8.0)
(:y (meters 0) (meters 1))
(:scale-x (meters 0.4) (meters 0.8))
(:scale-y :copy scale-x)
(:r 192.0 64.0)
(:g 192.0 64.0)
(:b 128.0)
(:a 32.0 96.0)
(:vel-y (meters 0.04) (meters 0.16))
(:scalevel-x (meters -0.0026666666))
(:scalevel-y :copy scalevel-x)
(:fade-g -2.1333334)
(:fade-b -1.4222223)
(:accel-y (meters -0.00016666666) (meters -0.00016666666))
(:friction 0.9)
(:timer (seconds 1))
(:flags (bit2 bit14))
(:next-time (seconds 0.1) (seconds 0.297))
(:next-launcher 2083)
(:conerot-x (degrees 0) (degrees 120))
(:conerot-y (degrees 0) (degrees 360))
(:conerot-radius (meters 2) (meters 4))))
(defpart 2083
:init-specs ((:fade-r 0.0) (:fade-g 0.0) (:fade-b 0.0) (:fade-a -1.0666667)))
(defpart 2082
:init-specs
((:texture (new 'static 'texture-id :index #xf :page #x2))
(:num 6.0)
(:y (meters 0) (meters 1))
(:scale-x (meters 0.3))
(:rot-z (degrees 0) (degrees 180))
(:scale-y (meters 12))
(:r 255.0)
(:g 196.0)
(:b 64.0)
(:a 32.0 64.0)
(:scalevel-y (meters 0.85333335))
(:fade-g -3.2666667)
(:fade-b -1.0666667)
(:fade-a -1.6)
(:timer (seconds 0.2))
(:flags (bit2 bit3 bit14))))
(defpart 2079
:init-specs
((:texture (new 'static 'texture-id :index #x12 :page #x2))
(:num 1.0)
(:y (meters 2))
(:scale-x (meters 24))
(:scale-y :copy scale-x)
(:r 255.0)
(:g 192.0 32.0)
(:b 128.0)
(:a 128.0)
(:fade-a -2.3272727)
(:timer (seconds 0.18))
(:flags (bit2 bit3 bit14))))
(defpart 2081
:init-specs
((:texture (new 'static 'texture-id :page #x2))
(:num 16.0)
(:y (meters 0) (meters 1))
(:scale-x (meters 3) (meters 1.5))
(:rot-z (degrees 0) (degrees 360))
(:scale-y :copy scale-x)
(:r 255.0)
(:g 128.0 64.0)
(:b 128.0)
(:a 64.0 64.0)
(:vel-y (meters 0.08) (meters 0.04))
(:scalevel-x (meters 0.02))
(:rotvel-z (degrees -0.6) (degrees 1.2))
(:scalevel-y :copy scalevel-x)
(:fade-a -0.28444445)
(:accel-y (meters 0.00016666666) (meters 0.00016666666))
(:friction 0.8)
(:timer (seconds 1.7))
(:flags (bit2 bit14))
(:next-time (seconds 0.14))
(:next-launcher 2084)
(:conerot-x (degrees 0) (degrees 120))
(:conerot-y (degrees 0) (degrees 360))
(:conerot-radius (meters 0) (meters 3))))
(defpart 2084
:init-specs ((:fade-r -1.0666667) (:fade-g -1.0666667) (:fade-b -2.1166666) (:next-time (seconds 0.2)) (:next-launcher 2085)))
(defpart 2085
:init-specs
((:fade-r -0.5688889)
(:fade-g -0.28444445)
(:fade-b 0.0)
(:fade-a -0.21333334)
(:next-time (seconds 0.75))
(:next-launcher 2086)))
(defpart 2086
:init-specs ((:fade-r 0.0) (:fade-g 0.0) (:fade-b 0.0)))
(defskelgroup *tntbarrel-sg*
tntbarrel
tntbarrel-lod0-jg
tntbarrel-idle-ja
((tntbarrel-lod0-mg (meters 999999)))
:bounds (static-spherem 0 2 0 4))
(deftype tntbarrel (process-drawable)
((root collide-shape :override))
(:state-methods
idle
(die symbol)))
(defstate die (tntbarrel)
:virtual #t
:code
(behavior ((arg0 symbol))
(ja-channel-set! 0)
(clear-collide-with-as (-> self root))
(ja-post)
(sound-play "dcrate-break")
(if arg0
(process-spawn part-tracker
:init
part-tracker-init
(-> *part-group-id-table* 473)
-1
#f
#f
#f
(-> self root trans)
:to
*entity-pool*)
(process-spawn part-tracker
:init
part-tracker-init
(-> *part-group-id-table* 474)
-1
#f
#f
#f
(-> self root trans)
:to
*entity-pool*))
(suspend)
(cleanup-for-death self)
(deactivate self)))
(defstate idle (tntbarrel)
:virtual #t
:event
(behavior ((proc process) (argc int) (message symbol) (block event-message-block))
(case message
(('die-big) (go-virtual die #t))
(('die) (go-virtual die #f))
(('attack 'touch)
(send-event proc 'attack-invinc (-> block param 0) (static-attack-info ((mode 'death))))
(go-virtual die #f))))
:code
(behavior ()
(transform-post)
(logior! (-> self mask) (process-mask sleep))
(suspend)
0))
(defmethod init-from-entity! ((this tntbarrel) (arg0 entity-actor))
(let ((s4-0 (new 'process 'collide-shape this (collide-list-enum usually-hit-by-player))))
(let ((s3-0 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 0))))
(set! (-> s3-0 prim-core collide-as) (collide-kind crate))
(set! (-> s3-0 collide-with) (collide-kind target))
(set! (-> s3-0 prim-core action) (collide-action solid))
(set! (-> s3-0 prim-core offense) (collide-offense touch))
(set! (-> s3-0 transform-index) 3)
(set-vector! (-> s3-0 local-sphere) 0.0 9216.0 0.0 14336.0)
(set-root-prim! s4-0 s3-0))
(set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w)))
(backup-collide-with-as s4-0)
(set! (-> this root) s4-0))
(process-drawable-from-entity! this arg0)
(initialize-skeleton this *tntbarrel-sg* '())
(set-vector! (-> this draw color-mult) 1.3 1.3 1.3 1.0)
(go (method-of-object this idle))
(none))
(defskelgroup *ogre-step-a-sg*
ogre-step
ogre-step-a-lod0-jg
ogre-step-a-idle-ja
((ogre-step-a-lod0-mg (meters 999999)))
:bounds (static-spherem 0 3 0 5))
(defskelgroup *ogre-step-b-sg*
ogre-step
ogre-step-b-lod0-jg
ogre-step-b-idle-ja
((ogre-step-b-lod0-mg (meters 999999)))
:bounds (static-spherem 0 3 0 5))
(defskelgroup *ogre-step-c-sg*
ogre-step
ogre-step-c-lod0-jg
ogre-step-c-idle-ja
((ogre-step-c-lod0-mg (meters 999999)))
:bounds (static-spherem 0 3 0 6.5))
(defskelgroup *ogre-isle-a-sg*
ogre-isle
ogre-isle-a-lod0-jg
ogre-isle-a-idle-ja
((ogre-isle-a-lod0-mg (meters 999999)))
:bounds (static-spherem 0 0 0 8))
(defskelgroup *ogre-isle-b-sg*
ogre-isle
ogre-isle-b-lod0-jg
ogre-isle-b-idle-ja
((ogre-isle-b-lod0-mg (meters 999999)))
:bounds (static-spherem 0 0 0 8))
(defskelgroup *ogre-isle-c-sg*
ogre-isle
ogre-isle-c-lod0-jg
ogre-isle-c-idle-ja
((ogre-isle-c-lod0-mg (meters 999999)))
:bounds (static-spherem 0 0 0 8))
(defskelgroup *ogre-isle-d-sg*
ogre-isle
ogre-isle-d-lod0-jg
ogre-isle-d-idle-ja
((ogre-isle-d-lod0-mg (meters 999999)))
:bounds (static-spherem 0 0 0 8))
(deftype ogre-plat (rigid-body-platform)
((anchor-point vector :inline)
(idle-y-offset float)
(float-y-offset float)
(delay time-frame)
(active symbol)
(triggered entity-actor)))
(defmethod rigid-body-platform-method-23 ((this ogre-plat) (arg0 float))
(call-parent-method this arg0)
(rigid-body-platform-method-27 this (-> this anchor-point))
0
(none))
(defstate rigid-body-platform-idle (ogre-plat)
:virtual #t
:event
(behavior ((proc process) (argc int) (message symbol) (block event-message-block))
(case message
(('trigger)
(set! (-> self triggered) (the-as entity-actor #t))
(set! (-> self delay) (the-as time-frame (-> block param 0)))
(let ((v0-0 (current-time))) (set! (-> self state-time) v0-0) v0-0))))
:trans
(behavior ()
(cond
((-> self active)
(when (and *target*
(>= (-> self info idle-distance) (vector-vector-distance (-> self root-overlay trans) (-> *target* control trans))))
(if (-> self triggered) (sound-play "rock-in-lava"))
(go-virtual rigid-body-platform-float)))
(else (if (and (-> self triggered) (time-elapsed? (-> self state-time) (-> self delay))) (set! (-> self active) #t)))))
:code
(behavior ()
(logior! (-> self draw status) (draw-status hidden))
(loop
(suspend)))
:post ja-post)
(defstate rigid-body-platform-float (ogre-plat)
:virtual #t
:event rigid-body-platform-event-handler
:trans
(behavior ()
(cond
((or (not *target*)
(< (-> self info idle-distance) (vector-vector-distance (-> self root-overlay trans) (-> *target* control trans))))
(let ((f30-1 (-> self idle-y-offset)))
(seek! (-> self float-height-offset) f30-1 (* 2048.0 (seconds-per-frame)))
(if (= (-> self float-height-offset) f30-1) (go-virtual rigid-body-platform-idle))))
(else (seek! (-> self float-height-offset) (-> self float-y-offset) (* 32768.0 (seconds-per-frame))))))
:code
(behavior ()
(logclear! (-> self draw status) (draw-status hidden))
(loop
(suspend)))
:post rigid-body-platform-post)
(defmethod rigid-body-platform-method-30 ((this ogre-plat))
(let ((s5-0 (new 'process 'collide-shape-moving this (collide-list-enum usually-hit-by-player))))
(set! (-> s5-0 dynam) (copy *standard-dynamics* 'process))
(set! (-> s5-0 reaction) default-collision-reaction)
(set! (-> s5-0 no-reaction) (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing))
(alloc-riders s5-0 1)
(let ((s4-0 (new 'process 'collide-shape-prim-mesh s5-0 (the-as uint 0) (the-as uint 0))))
(set! (-> s4-0 prim-core collide-as) (collide-kind ground-object))
(set! (-> s4-0 collide-with) (collide-kind target))
(set! (-> s4-0 prim-core action) (collide-action solid rider-plat-sticky))
(set! (-> s4-0 prim-core offense) (collide-offense indestructible))
(set! (-> s4-0 transform-index) 0)
(set-vector! (-> s4-0 local-sphere) 0.0 8192.0 0.0 32768.0)
(set-root-prim! s5-0 s4-0))
(set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w)))
(backup-collide-with-as s5-0)
(set! (-> this root-overlay) s5-0))
0
(none))
(defmethod rigid-body-platform-method-31 ((this ogre-plat))
(set! (-> this float-height-offset) (-> this idle-y-offset))
(let ((s5-0 (-> this info control-point-count)))
(dotimes (s4-0 s5-0)
(let ((s3-0 (-> this control-point-array data s4-0)))
(let ((f30-0 (* 65536.0 (/ (the float s4-0) (the float s5-0))))
(f28-0 (-> this root-overlay root-prim local-sphere w)))
(set! (-> s3-0 local-pos x) (* f28-0 (sin f30-0)))
(set! (-> s3-0 local-pos y) 0.0)
(set! (-> s3-0 local-pos z) (* f28-0 (cos f30-0))))
(set! (-> s3-0 local-pos w) 1.0))))
(set! (-> this anchor-point quad) (-> this root-overlay trans quad))
(set! (-> this active) #f)
(set! (-> this triggered) #f)
0
(none))
(define *ogre-step-constants*
(new 'static
'rigid-body-platform-constants
:drag-factor 2.0
:buoyancy-factor 2.0
:max-buoyancy-depth (meters 4)
:gravity-factor 1.0
:gravity (meters 80)
:player-weight (meters 35)
:player-bonk-factor 0.5
:player-dive-factor 1.0
:player-force-distance (meters 5)
:player-force-clamp (meters 1000000)
:player-force-timeout (seconds 0.1)
:explosion-force (meters 100)
:linear-damping 0.9
:angular-damping 0.9
:control-point-count 6
:mass 2.0
:inertial-tensor-x (meters 4)
:inertial-tensor-y (meters 10)
:inertial-tensor-z (meters 4)
:idle-distance (meters 150)
:platform #t
:sound-name "lava-plat"))
(deftype ogre-step (ogre-plat) ())
(defmethod rigid-body-platform-method-31 ((this ogre-step))
(set! (-> this idle-y-offset) -28672.0)
(set! (-> this float-y-offset) 0.0)
(+! (-> this root-overlay trans y) (-> this idle-y-offset))
(rigid-body-platform-method-29 this *ogre-step-constants*)
(call-parent-method this)
(let ((a0-5 (entity-actor-lookup (-> this entity) 'alt-actor 0)))
(if (and a0-5 (logtest? (-> a0-5 extra perm status) (entity-perm-status complete))) (set! (-> this active) #t)))
0
(none))
(defmethod rigid-body-platform-method-34 ((this ogre-step))
(if (-> this active)
(go (method-of-object this rigid-body-platform-float))
(go (method-of-object this rigid-body-platform-idle)))
0
(none))
(deftype ogre-step-a (ogre-step) ())
(deftype ogre-step-b (ogre-step) ())
(deftype ogre-step-c (ogre-step) ())
(deftype ogre-step-d (ogre-step) ())
(defmethod rigid-body-platform-method-31 ((this ogre-step-a))
(set-vector! (-> this root-overlay root-prim local-sphere) 0.0 12288.0 0.0 20480.0)
(initialize-skeleton this *ogre-step-a-sg* '())
(call-parent-method this)
0
(none))
(defmethod rigid-body-platform-method-31 ((this ogre-step-b))
(set-vector! (-> this root-overlay root-prim local-sphere) 0.0 12288.0 0.0 20480.0)
(initialize-skeleton this *ogre-step-b-sg* '())
(call-parent-method this)
0
(none))
(defmethod rigid-body-platform-method-31 ((this ogre-step-c))
(set-vector! (-> this root-overlay root-prim local-sphere) 0.0 12288.0 0.0 26624.0)
(initialize-skeleton this *ogre-step-c-sg* '())
(call-parent-method this)
0
(none))
(defmethod rigid-body-platform-method-31 ((this ogre-step-d))
(set-vector! (-> this root-overlay root-prim local-sphere) 0.0 12288.0 0.0 20480.0)
(initialize-skeleton this *ogre-step-b-sg* '())
(call-parent-method this)
0
(none))
(define *ogre-isle-constants*
(new 'static
'rigid-body-platform-constants
:drag-factor 2.0
:buoyancy-factor 2.0
:max-buoyancy-depth (meters 2)
:gravity-factor 1.0
:gravity (meters 80)
:player-weight (meters 35)
:player-bonk-factor 0.5
:player-dive-factor 1.0
:player-force-distance (meters 2)
:player-force-clamp (meters 1000000)
:player-force-timeout (seconds 0.1)
:explosion-force (meters 4000)
:linear-damping 0.9
:angular-damping 0.9
:control-point-count 6
:mass 2.0
:inertial-tensor-x (meters 10)
:inertial-tensor-y (meters 2)
:inertial-tensor-z (meters 10)
:cm-joint-y (meters 1)
:idle-distance (meters 150)
:platform #t
:sound-name #f))
(deftype ogre-isle (ogre-plat) ())
(defmethod rigid-body-platform-method-31 ((this ogre-isle))
(set! (-> this idle-y-offset) -6144.0)
(set! (-> this float-y-offset) 4096.0)
(rigid-body-platform-method-29 this *ogre-isle-constants*)
(call-parent-method this)
(set! (-> this active) #t)
0
(none))
(deftype ogre-isle-b (ogre-isle) ())
(deftype ogre-isle-c (ogre-isle) ())
(deftype ogre-isle-d (ogre-isle) ())
(defmethod rigid-body-platform-method-31 ((this ogre-isle-b))
(+! (-> this root-overlay trans x) -8192.0)
(set-vector! (-> this root-overlay root-prim local-sphere) 0.0 8192.0 0.0 24576.0)
(initialize-skeleton this *ogre-isle-b-sg* '())
(call-parent-method this)
0
(none))
(defmethod rigid-body-platform-method-31 ((this ogre-isle-c))
(+! (-> this root-overlay trans x) -8192.0)
(set-vector! (-> this root-overlay root-prim local-sphere) 0.0 8192.0 0.0 24576.0)
(initialize-skeleton this *ogre-isle-b-sg* '())
(call-parent-method this)
0
(none))
(defmethod rigid-body-platform-method-31 ((this ogre-isle-d))
(+! (-> this root-overlay trans x) -8192.0)
(+! (-> this root-overlay trans z) -8192.0)
(set-vector! (-> this root-overlay root-prim local-sphere) 0.0 8192.0 0.0 22528.0)
(initialize-skeleton this *ogre-isle-d-sg* '())
(call-parent-method this)
0
(none))
(defskelgroup *ogre-bridge-sg*
ogre-bridge
ogre-bridge-lod0-jg
ogre-bridge-idle-ja
((ogre-bridge-lod0-mg (meters 999999)))
:bounds (static-spherem 0 0 0 52)
:longest-edge (meters 4.5))
(deftype ogre-bridge (process-drawable)
((root collide-shape-moving :override)
(joint-mod-array joint-mod 8)
(dead-joint-count int8))
(:states
ogre-bridge-activate
ogre-bridge-activated
ogre-bridge-break
ogre-bridge-idle))
(defmethod relocate ((this ogre-bridge) (arg0 int))
(dotimes (v1-0 8)
(if (nonzero? (-> this joint-mod-array v1-0)) (&+! (-> this joint-mod-array v1-0) arg0)))
(call-parent-method this arg0))
(defbehavior ogre-bridge-update-joints ogre-bridge ()
(let ((v1-1 (min 8 (-> self dead-joint-count))))
(dotimes (a0-1 v1-1)
(let ((a1-2 (-> self joint-mod-array a0-1)))
(set! (-> a1-2 trans z) (the-as float #t))
(set! (-> a1-2 trans x) (the-as float #t))
(set! (-> a1-2 trans y) (the-as float #t)))))
0
(none))
(defstate ogre-bridge-idle (ogre-bridge)
:exit
(behavior ()
(ogre-bridge-update-joints))
:trans
(behavior ()
(if (and (and *target* (>= 286720.0 (vector-vector-distance (-> self root trans) (-> *target* control trans))))
(send-event *target* 'query 'powerup (pickup-type eco-blue)))
(go ogre-bridge-activate))
0)
:code
(behavior ()
(ja-post)
(loop
(suspend))))
(defstate ogre-bridge-activate (ogre-bridge)
:code
(behavior ()
(let ((v1-0 (entity-actor-lookup (-> self entity) 'alt-actor 0)))
(when (if v1-0 (not (send-event (if v1-0 (-> v1-0 extra process)) 'next-stage)))
(suspend)
0))
(ja-no-eval :group! ogre-bridge-assemble-ja :num! (seek!) :frame-num 0.0)
(until (ja-done? 0)
(if (rand-vu-percent? 0.2) (spawn-projectile-blue *target*))
(suspend)
(ja :num! (seek!)))
(go ogre-bridge-activated))
:post rider-post)
(defstate ogre-bridge-activated (ogre-bridge)
:event
(behavior ((proc process) (argc int) (message symbol) (block event-message-block))
(case message
(('break) (+! (-> self dead-joint-count) 4) (go ogre-bridge-break))
(('break-no-damage) (go ogre-bridge-break))
(('complete) (process-entity-status! self (entity-perm-status complete) #t) #t)))
:code
(behavior ()
(ja :group! ogre-bridge-assemble-ja :num! max)
(transform-post)
(loop
(suspend)))
:post ja-post)
(defstate ogre-bridge-break (ogre-bridge)
:event
(behavior ((proc process) (argc int) (message symbol) (block event-message-block))
(case message
(('effect)
(when (= (-> block param 0) 'splash)
(let ((gp-0 (new 'stack-no-clear 'vector)))
(let ((a1-1 (-> block param 2))) (set! (-> gp-0 quad) (-> self node-list data a1-1 bone transform vector 3 quad)))
(set! (-> gp-0 y) 118784.0)
(process-spawn part-tracker :init part-tracker-init (-> *part-group-id-table* 466) -1 #f #f #f gp-0 :to *entity-pool*))))))
:code
(behavior ()
(ja-no-eval :group! ogre-bridge-break-ja :num! (seek!) :frame-num 0.0)
(until (ja-done? 0)
(suspend)
(ja :num! (seek!)))
(go ogre-bridge-idle))
:post rider-post)
(define *ogre-bridge-joint-array* (new 'static 'boxed-array :type uint8 #x4 #x9 #xc #x11 #x7 #xa #xf #x12))
(defmethod init-from-entity! ((this ogre-bridge) (arg0 entity-actor))
(stack-size-set! (-> this main-thread) 512)
(logior! (-> this mask) (process-mask platform))
(let ((s4-0 (new 'process 'collide-shape-moving this (collide-list-enum usually-hit-by-player))))
(set! (-> s4-0 dynam) (copy *standard-dynamics* 'process))
(set! (-> s4-0 reaction) default-collision-reaction)
(set! (-> s4-0 no-reaction) (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing))
(alloc-riders s4-0 1)
(let ((s3-0 (new 'process 'collide-shape-prim-group s4-0 (the-as uint 17) 0)))
(set! (-> s3-0 prim-core collide-as) (collide-kind ground-object))
(set! (-> s3-0 collide-with) (collide-kind target))
(set! (-> s3-0 prim-core action) (collide-action solid rider-plat-sticky))
(set! (-> s3-0 transform-index) 0)
(set-vector! (-> s3-0 local-sphere) 0.0 0.0 0.0 143360.0)
(set-root-prim! s4-0 s3-0)
(let ((s2-0 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 0))))
(set! (-> s2-0 prim-core collide-as) (collide-kind ground-object))
(set! (-> s2-0 collide-with) (collide-kind target))
(set! (-> s2-0 prim-core action) (collide-action solid rider-plat-sticky))
(set! (-> s2-0 prim-core offense) (collide-offense indestructible))
(set! (-> s2-0 transform-index) 4)
(set-vector! (-> s2-0 local-sphere) 0.0 0.0 0.0 20480.0)
(append-prim s3-0 s2-0))
(let ((s2-1 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 1) (the-as uint 1))))
(set! (-> s2-1 prim-core collide-as) (collide-kind ground-object))
(set! (-> s2-1 collide-with) (collide-kind target))
(set! (-> s2-1 prim-core action) (collide-action solid rider-plat-sticky))
(set! (-> s2-1 prim-core offense) (collide-offense indestructible))
(set! (-> s2-1 transform-index) 5)
(set-vector! (-> s2-1 local-sphere) 0.0 0.0 0.0 20480.0)
(append-prim s3-0 s2-1))
(let ((s2-2 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 1))))
(set! (-> s2-2 prim-core collide-as) (collide-kind ground-object))
(set! (-> s2-2 collide-with) (collide-kind target))
(set! (-> s2-2 prim-core action) (collide-action solid rider-plat-sticky))
(set! (-> s2-2 prim-core offense) (collide-offense indestructible))
(set! (-> s2-2 transform-index) 6)
(set-vector! (-> s2-2 local-sphere) 0.0 0.0 0.0 20480.0)
(append-prim s3-0 s2-2))
(let ((s2-3 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 1) (the-as uint 1))))
(set! (-> s2-3 prim-core collide-as) (collide-kind ground-object))
(set! (-> s2-3 collide-with) (collide-kind target))
(set! (-> s2-3 prim-core action) (collide-action solid rider-plat-sticky))
(set! (-> s2-3 prim-core offense) (collide-offense indestructible))
(set! (-> s2-3 transform-index) 7)
(set-vector! (-> s2-3 local-sphere) 0.0 0.0 0.0 20480.0)
(append-prim s3-0 s2-3))
(let ((s2-4 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 1))))
(set! (-> s2-4 prim-core collide-as) (collide-kind ground-object))
(set! (-> s2-4 collide-with) (collide-kind target))
(set! (-> s2-4 prim-core action) (collide-action solid rider-plat-sticky))
(set! (-> s2-4 prim-core offense) (collide-offense indestructible))
(set! (-> s2-4 transform-index) 8)
(set-vector! (-> s2-4 local-sphere) 0.0 0.0 0.0 20480.0)
(append-prim s3-0 s2-4))
(let ((s2-5 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 1) (the-as uint 1))))
(set! (-> s2-5 prim-core collide-as) (collide-kind ground-object))
(set! (-> s2-5 collide-with) (collide-kind target))
(set! (-> s2-5 prim-core action) (collide-action solid rider-plat-sticky))
(set! (-> s2-5 prim-core offense) (collide-offense indestructible))
(set! (-> s2-5 transform-index) 9)
(set-vector! (-> s2-5 local-sphere) 0.0 0.0 0.0 20480.0)
(append-prim s3-0 s2-5))
(let ((s2-6 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 1))))
(set! (-> s2-6 prim-core collide-as) (collide-kind ground-object))
(set! (-> s2-6 collide-with) (collide-kind target))
(set! (-> s2-6 prim-core action) (collide-action solid rider-plat-sticky))
(set! (-> s2-6 prim-core offense) (collide-offense indestructible))
(set! (-> s2-6 transform-index) 10)
(set-vector! (-> s2-6 local-sphere) 0.0 0.0 0.0 20480.0)
(append-prim s3-0 s2-6))
(let ((s2-7 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 1) (the-as uint 1))))
(set! (-> s2-7 prim-core collide-as) (collide-kind ground-object))
(set! (-> s2-7 collide-with) (collide-kind target))
(set! (-> s2-7 prim-core action) (collide-action solid rider-plat-sticky))
(set! (-> s2-7 prim-core offense) (collide-offense indestructible))
(set! (-> s2-7 transform-index) 11)
(set-vector! (-> s2-7 local-sphere) 0.0 0.0 0.0 20480.0)
(append-prim s3-0 s2-7))
(let ((s2-8 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 0))))
(set! (-> s2-8 prim-core collide-as) (collide-kind ground-object))
(set! (-> s2-8 collide-with) (collide-kind target))
(set! (-> s2-8 prim-core action) (collide-action solid rider-plat-sticky))
(set! (-> s2-8 prim-core offense) (collide-offense indestructible))
(set! (-> s2-8 transform-index) 12)
(set-vector! (-> s2-8 local-sphere) 0.0 0.0 0.0 20480.0)
(append-prim s3-0 s2-8))
(let ((s2-9 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 1) (the-as uint 1))))
(set! (-> s2-9 prim-core collide-as) (collide-kind ground-object))
(set! (-> s2-9 collide-with) (collide-kind target))
(set! (-> s2-9 prim-core action) (collide-action solid rider-plat-sticky))
(set! (-> s2-9 prim-core offense) (collide-offense indestructible))
(set! (-> s2-9 transform-index) 13)
(set-vector! (-> s2-9 local-sphere) 0.0 0.0 0.0 20480.0)
(append-prim s3-0 s2-9))
(let ((s2-10 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 1))))
(set! (-> s2-10 prim-core collide-as) (collide-kind ground-object))
(set! (-> s2-10 collide-with) (collide-kind target))
(set! (-> s2-10 prim-core action) (collide-action solid rider-plat-sticky))
(set! (-> s2-10 prim-core offense) (collide-offense indestructible))
(set! (-> s2-10 transform-index) 14)
(set-vector! (-> s2-10 local-sphere) 0.0 0.0 0.0 20480.0)
(append-prim s3-0 s2-10))
(let ((s2-11 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 1) (the-as uint 1))))
(set! (-> s2-11 prim-core collide-as) (collide-kind ground-object))
(set! (-> s2-11 collide-with) (collide-kind target))
(set! (-> s2-11 prim-core action) (collide-action solid rider-plat-sticky))
(set! (-> s2-11 prim-core offense) (collide-offense indestructible))
(set! (-> s2-11 transform-index) 15)
(set-vector! (-> s2-11 local-sphere) 0.0 0.0 0.0 20480.0)
(append-prim s3-0 s2-11))
(let ((s2-12 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 1))))
(set! (-> s2-12 prim-core collide-as) (collide-kind ground-object))
(set! (-> s2-12 collide-with) (collide-kind target))
(set! (-> s2-12 prim-core action) (collide-action solid rider-plat-sticky))
(set! (-> s2-12 prim-core offense) (collide-offense indestructible))
(set! (-> s2-12 transform-index) 16)
(set-vector! (-> s2-12 local-sphere) 0.0 0.0 0.0 20480.0)
(append-prim s3-0 s2-12))
(let ((s2-13 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 1) (the-as uint 1))))
(set! (-> s2-13 prim-core collide-as) (collide-kind ground-object))
(set! (-> s2-13 collide-with) (collide-kind target))
(set! (-> s2-13 prim-core action) (collide-action solid rider-plat-sticky))
(set! (-> s2-13 prim-core offense) (collide-offense indestructible))
(set! (-> s2-13 transform-index) 17)
(set-vector! (-> s2-13 local-sphere) 0.0 0.0 0.0 20480.0)
(append-prim s3-0 s2-13))
(let ((s2-14 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 1))))
(set! (-> s2-14 prim-core collide-as) (collide-kind ground-object))
(set! (-> s2-14 collide-with) (collide-kind target))
(set! (-> s2-14 prim-core action) (collide-action solid rider-plat-sticky))
(set! (-> s2-14 prim-core offense) (collide-offense indestructible))
(set! (-> s2-14 transform-index) 18)
(set-vector! (-> s2-14 local-sphere) 0.0 0.0 0.0 20480.0)
(append-prim s3-0 s2-14))
(let ((s2-15 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 1) (the-as uint 1))))
(set! (-> s2-15 prim-core collide-as) (collide-kind ground-object))
(set! (-> s2-15 collide-with) (collide-kind target))
(set! (-> s2-15 prim-core action) (collide-action solid rider-plat-sticky))
(set! (-> s2-15 prim-core offense) (collide-offense indestructible))
(set! (-> s2-15 transform-index) 19)
(set-vector! (-> s2-15 local-sphere) 0.0 0.0 0.0 20480.0)
(append-prim s3-0 s2-15))
(let ((s2-16 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 2) (the-as uint 1))))
(set! (-> s2-16 prim-core collide-as) (collide-kind ground-object))
(set! (-> s2-16 collide-with) (collide-kind target))
(set! (-> s2-16 prim-core action) (collide-action solid rider-plat-sticky))
(set! (-> s2-16 prim-core offense) (collide-offense indestructible))
(set! (-> s2-16 transform-index) 20)
(set-vector! (-> s2-16 local-sphere) 0.0 0.0 0.0 45056.0)
(append-prim s3-0 s2-16)))
(set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w)))
(backup-collide-with-as s4-0)
(set! (-> this root) s4-0))
(process-drawable-from-entity! this arg0)
(logclear! (-> this mask) (process-mask actor-pause))
(initialize-skeleton this *ogre-bridge-sg* '())
(logior! (-> this skel effect flags) 1)
(dotimes (s5-1 8)
(let ((v1-185 (new 'process 'joint-mod-set-local this (the-as int (-> *ogre-bridge-joint-array* s5-1)) #f #f #f)))
(set! (-> this joint-mod-array s5-1) (the-as joint-mod v1-185))
(vector-reset! (-> v1-185 transform scale))))
(cond
((and (-> this entity) (logtest? (-> this entity extra perm status) (entity-perm-status complete)))
(set! (-> this dead-joint-count) 8)
(ogre-bridge-update-joints)
(go ogre-bridge-activated))
(else (go ogre-bridge-idle)))
(none))
(defskelgroup *ogre-bridgeend-sg*
ogre-bridgeend
ogre-bridgeend-lod0-jg
ogre-bridgeend-idle-ja
((ogre-bridgeend-lod0-mg (meters 999999)))
:bounds (static-spherem 0 0 -3 8.2))
(deftype ogre-bridgeend (process-drawable)
((root collide-shape :override))
(:states
ogre-bridgeend-idle))
(defstate ogre-bridgeend-idle (ogre-bridgeend)
:code
(behavior ()
(transform-post)
(anim-loop)))
(defmethod init-from-entity! ((this ogre-bridgeend) (arg0 entity-actor))
(let ((s4-0 (new 'process 'collide-shape this (collide-list-enum usually-hit-by-player))))
(let ((s3-0 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 0))))
(set! (-> s3-0 prim-core collide-as) (collide-kind ground-object))
(set! (-> s3-0 collide-with) (collide-kind target))
(set! (-> s3-0 prim-core action) (collide-action solid))
(set! (-> s3-0 prim-core offense) (collide-offense indestructible))
(set! (-> s3-0 transform-index) 3)
(set-vector! (-> s3-0 local-sphere) 0.0 0.0 12288.0 32768.0)
(set-root-prim! s4-0 s3-0))
(set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w)))
(backup-collide-with-as s4-0)
(set! (-> this root) s4-0))
(process-drawable-from-entity! this arg0)
(initialize-skeleton this *ogre-bridgeend-sg* '())
(go ogre-bridgeend-idle)
(none))
(deftype ogre-lava (water-anim)
((idle-anim int32)
(anim int32)))
(defstate water-vol-idle (ogre-lava)
:virtual #t
:event
(behavior ((proc process) (argc int) (message symbol) (block event-message-block))
(case message
(('submerge1) (set! (-> self anim) 3) (go-virtual water-vol-idle))
(('submerge2) (set! (-> self anim) 5) (go-virtual water-vol-idle))
(('emerge1) (set! (-> self anim) 4) (go-virtual water-vol-idle))
(('emerge2) (set! (-> self anim) 6) (go-virtual water-vol-idle))
(('boulder) (set! (-> self anim) 7) (go-virtual water-vol-idle))
(else ((-> (method-of-type water-anim water-vol-idle) event) proc argc message block))))
:code
(behavior ()
(ja-channel-push! 2 (seconds 0.1))
(ja :chan 1 :group! (-> self draw art-group data (-> self idle-anim)) :num! min)
(ja-no-eval :group! (-> self draw art-group data (-> self anim)) :num! (seek! max 0.5) :frame-num 0.0)
(until (ja-done? 0)
(ja :chan 1 :frame-interp 0.5)
(ja-post)
(suspend)
(ja :num! (seek! max 0.5)))
(ja :group! (-> self draw art-group data (-> self idle-anim)))
(ja :num-func num-func-identity :frame-num 0.0)
(loop
(suspend)))
:post #f)
(defstate water-vol-startup (ogre-lava)
:virtual #t
:code
(behavior ()
(set! (-> self idle-anim) 2)
(set! (-> self anim) (-> self idle-anim))
(go-virtual water-vol-idle)))
(define ripple-for-ogre-lava
(new 'static
'ripple-wave-set
:count 2
:converted #f
:wave
(new 'static
'inline-array
ripple-wave
4
(new 'static 'ripple-wave :scale 40.0 :xdiv 2 :speed 3.0)
(new 'static 'ripple-wave :scale 40.0 :xdiv -2 :zdiv 2 :speed 1.8)
(new 'static 'ripple-wave)
(new 'static 'ripple-wave))))
(defmethod water-vol-method-22 ((this ogre-lava))
(let ((t9-0 (method-of-type water-anim water-vol-method-22))) (t9-0 this))
(let ((v1-2 (new 'process 'ripple-control)))
(set! (-> this draw ripple) v1-2)
(set! (-> v1-2 global-scale) 2048.0)
(set! (-> v1-2 waveform) ripple-for-ogre-lava))
(logclear! (-> this flags) (water-flags wt23))
(logior! (-> this flags) (water-flags wt25))
(set! (-> this attack-event) 'lava)
(none))
(deftype shortcut-boulder (process-drawable)
((root collide-shape :override)
(broken-look lod-set :inline))
(:states
shortcut-boulder-break
shortcut-boulder-idle))
(defskelgroup *shortcut-boulder-whole-sg*
shortcut-boulder
shortcut-boulder-whole-lod0-jg
shortcut-boulder-idle-ja
((shortcut-boulder-whole-lod0-mg (meters 999999)))
:bounds (static-spherem 0 5.5 0 7.5))
(defskelgroup *shortcut-boulder-broken-sg*
shortcut-boulder
shortcut-boulder-broken-lod0-jg
shortcut-boulder-idle-ja
((shortcut-boulder-broken-lod0-mg (meters 999999)))
:bounds (static-spherem 0 5.5 0 20))
(defpartgroup group-shortcut-boulder-explosion
:id 475
:duration (seconds 1)
:flags (use-local-clock)
:bounds (static-bspherem 0 0 0 8)
:parts
((sp-item 2149 :period (seconds 5) :length (seconds 0.017))
(sp-item 2150 :period (seconds 5) :length (seconds 0.017))
(sp-item 2151 :period (seconds 5) :length (seconds 0.05))))
(defpart 2150
:init-specs
((:texture (new 'static 'texture-id :index #x12 :page #x2))
(:num 1.0)
(:scale-x (meters 15))
(:scale-y :copy scale-x)
(:r 130.0)
(:g 64.0)
(:b 54.0)
(:a 128.0)
(:fade-a -2.1333334)
(:timer (seconds 0.2))
(:flags (bit2 bit3))))
(defpart 2149
:init-specs
((:texture (new 'static 'texture-id :index #x1d :page #x2))
(:num 16.0 16.0)
(:scale-x (meters 0.1) (meters 0.3))
(:rot-z (degrees 0) (degrees 360))
(:scale-y :copy scale-x)
(:r 70.0 16.0)
(:g 70.0 16.0)
(:b 70.0)
(:a 128.0)
(:vel-y (meters 0.04) (meters 0.04))
(:rotvel-z (degrees -1.2) (degrees 2.4))
(:accel-y (meters -0.0026666666))
(:friction 0.99)
(:timer (seconds 1))
(:flags (bit2))
(:userdata 0.0)
(:func 'check-water-level-drop)
(:conerot-x (degrees 20) (degrees 50.000004))
(:conerot-y (degrees 0) (degrees 360))))
(defpart 2151
:init-specs
((:texture (new 'static 'texture-id :page #x2))
(:num 16.0)
(:y (meters 0.5) (meters 1))
(:scale-x (meters 2.5) (meters 1.5))
(:scale-y :copy scale-x)
(:r 96.0 64.0)
(:g 64.0 48.0)
(:b 64.0 16.0)
(:a 16.0 32.0)
(:vel-y (meters 0.016666668) (meters 0.016666668))
(:scalevel-x (meters 0.013333334))
(:scalevel-y (meters 0.0033333334))
(:accel-y (meters -0.00026666667))
(:friction 0.95)
(:timer (seconds 2))
(:flags (bit2))
(:next-time (seconds 0.1) (seconds 0.997))
(:next-launcher 2152)
(:conerot-x (degrees 70) (degrees 20))
(:conerot-y (degrees 0) (degrees 360))))
(defpart 2152
:init-specs ((:fade-a -0.2)))
(defstate shortcut-boulder-break (shortcut-boulder)
:code
(behavior ()
(process-entity-status! self (entity-perm-status complete) #t)
(lods-assign! (-> self draw) (-> self broken-look))
(process-spawn part-tracker
:init
part-tracker-init
(-> *part-group-id-table* 475)
-1
#f
#f
#f
(-> self root trans)
:to
*entity-pool*)
(ja-no-eval :group! (ja-group) :num! (seek!) :frame-num 0.0)
(until (ja-done? 0)
(suspend)
(ja :num! (seek!)))
(cleanup-for-death self)
(deactivate self))
:post ja-post)
(defstate shortcut-boulder-idle (shortcut-boulder)
:event
(behavior ((proc process) (argc int) (message symbol) (block event-message-block))
(case message
(('attack) (if (and (>= argc 2) (= (-> block param 1) 'eco-yellow)) (go shortcut-boulder-break)))))
:code
(behavior ()
(transform-post)
(loop
(logior! (-> self mask) (process-mask sleep))
(suspend))))
(defmethod init-from-entity! ((this shortcut-boulder) (arg0 entity-actor))
(let ((s4-0 (new 'process 'collide-shape this (collide-list-enum hit-by-others))))
(let ((s3-0 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 0))))
(set! (-> s3-0 prim-core collide-as) (collide-kind wall-object))
(set! (-> s3-0 collide-with) (collide-kind target))
(set! (-> s3-0 prim-core action) (collide-action solid))
(set! (-> s3-0 prim-core offense) (collide-offense indestructible))
(set! (-> s3-0 transform-index) 3)
(set-vector! (-> s3-0 local-sphere) 0.0 22528.0 0.0 30720.0)
(set-root-prim! s4-0 s3-0))
(set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w)))
(backup-collide-with-as s4-0)
(set! (-> this root) s4-0))
(process-drawable-from-entity! this arg0)
(initialize-skeleton this *shortcut-boulder-whole-sg* '())
(setup-lods! (-> this broken-look) *shortcut-boulder-broken-sg* (-> this draw art-group) (-> this entity))
(set-vector! (-> this draw color-emissive) 0.125 0.0625 0.0 0.0)
(go shortcut-boulder-idle)
(none))