decomp: add a bunch of enemy files (#2101)

Adds the following files:

- `amphibian`
- `centurion`
- `ginsu`
- `grenadier`
- `hopper`
- `metalmonk`
- `monster-frog`
- `predator-graph`
- `predator-h`
- `predator`
- `rapid-gunner`
- `rhino`
- `rhino-wall`
- `tomb-baby-spider`

Also adds the DGOs for the following levels:

- Mar's Tomb
- Mountain Temple
- Drill Platform
- Sacred Site (Sage Hut)

Manual patches:

- The decompiler emits `(b! #t cfg-17)` in `(trans hostile hopper)`
without putting a `(label cfg-17)` anywhere
- Added cast to `art-joint-anim` in `(code broken rhino-wall)` and
`(code hit rhino-wall)`

Other notes:

- `amphibian` seems to occasionally crash when using its tongue attack.
Haven't investigated this yet
- `ginsu` crashes after being killed somewhere in the `deactivate`
method, possibly because of its `part-spawner`
- Predators aren't spawning in the forest hunt mission, not sure if
`forest-obs` might be needed for that or if it's something else
- The `rhino-wall` STR animation seems to load (albeit a bit broken due
to missing VAG stream playback), but causes the viewport to shrink as
soon as it's played
- I added `pegasus::74` to the `event_handler_hack` bool in
`variable_naming.cpp` because I got a `none` cast after changing the
return value of `enemy::74`
This commit is contained in:
Hat Kid
2023-01-07 23:14:12 +01:00
committed by GitHub
parent 00ac12094e
commit bdee98323d
60 changed files with 37190 additions and 1196 deletions
+3 -3
View File
@@ -438,12 +438,12 @@
(enemy-method-55 (_type_) none 55)
(enemy-method-56 (_type_ process event-message-block) int 56)
(enemy-method-57 (_type_ process-focusable enemy-best-focus) enemy-aware 57)
(enemy-method-58 (_type_) symbol 58)
(enemy-method-58 (_type_ process event-message-block) symbol 58)
(enemy-method-59 (_type_) penetrate 59)
(coin-flip? (_type_) symbol 60)
(enemy-method-61 (_type_ int) int :behavior enemy 61)
(enemy-method-62 (_type_) none 62)
(enemy-method-63 (_type_ process-focusable symbol) none 63)
(enemy-method-63 (_type_ process-focusable symbol) symbol 63)
(enemy-method-64 (_type_) none 64)
(enemy-method-65 (_type_) none 65)
(go-ambush (_type_) none 66)
@@ -454,7 +454,7 @@
(go-flee (_type_) none 71)
(enemy-method-72 (_type_) none 72)
(enemy-method-73 (_type_) none 73)
(enemy-method-74 (_type_ process object symbol event-message-block) none 74)
(enemy-method-74 (_type_ process object symbol event-message-block) object 74)
(enemy-method-75 (_type_ process touching-shapes-entry) none 75)
(enemy-method-76 (_type_ process event-message-block) symbol 76)
(enemy-method-77 (_type_ (pointer float)) symbol 77)
+327 -314
View File
@@ -426,13 +426,11 @@
)
;; definition for method 63 of type enemy
;; WARN: Return type mismatch symbol vs none.
(defmethod enemy-method-63 enemy ((obj enemy) (arg0 process-focusable) (arg1 symbol))
(if arg1
(enemy-focus-method-13 (-> obj focus) arg0 (the-as enemy-aware arg1))
(try-update-focus (-> obj focus) arg0 obj)
)
(none)
)
;; definition for method 62 of type enemy
@@ -1678,124 +1676,162 @@
;; definition for method 74 of type enemy
;; INFO: Used lq/sq
;; WARN: Return type mismatch none vs object.
;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 17]
;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 28]
;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 89]
;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 202]
;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 274]
;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 346]
;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 413]
;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 490]
;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 493]
;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 530]
;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 560]
;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 610]
;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 641]
;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 774]
;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 807]
;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 814]
;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 850]
;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 933]
(defmethod enemy-method-74 enemy ((obj enemy) (arg0 process) (arg1 object) (arg2 symbol) (arg3 event-message-block))
(local-vars (s5-5 rgbaf) (sv-432 process) (sv-448 event-message-block))
(with-pp
(cond
((= arg2 'track)
(and (nonzero? (-> obj hit-points))
(logtest? (-> obj enemy-flags) (enemy-flag enable-on-active))
(logtest? (enemy-flag check-water-backup) (-> obj enemy-flags))
)
)
((= arg2 'combo)
(and (not (logtest? (enemy-flag multi-focus) (-> obj enemy-flags))) (nonzero? (-> obj hit-points)))
)
((= arg2 'touch)
(enemy-method-75 obj arg0 (the-as touching-shapes-entry arg3))
)
((= arg2 'touched)
(when (logtest? (-> obj enemy-flags) (enemy-flag attackable-backup))
(let* ((s3-1 arg0)
(v1-20 (if (type? s3-1 process-drawable)
(the-as process-drawable s3-1)
)
)
)
(when v1-20
(let* ((s3-2 (-> v1-20 root))
(a1-4 (if (type? s3-2 collide-shape)
s3-2
)
)
(s3-3 (-> arg3 param 0))
)
(if (and a1-4
s3-3
((method-of-type touching-shapes-entry prims-touching-action?)
(the-as touching-shapes-entry s3-3)
(the-as collide-shape a1-4)
(collide-action solid)
(collide-action)
)
((method-of-type touching-shapes-entry prims-touching-action?)
(the-as touching-shapes-entry s3-3)
(-> obj root-override2)
(collide-action solid)
(collide-action)
)
)
(set! (-> obj auto-reset-penetrate-time) (the-as uint (-> pp clock frame-counter)))
)
)
)
)
)
(enemy-method-76 obj arg0 arg3)
)
((= arg2 'attack-invinc)
(case (-> (the-as attack-info (-> arg3 param 1)) mode)
(('endlessfall)
(let ((v1-31 (-> obj root-override2 root-prim)))
(set! (-> v1-31 prim-core collide-as) (collide-spec))
(set! (-> v1-31 prim-core collide-with) (collide-spec))
)
0
(enemy-method-73 obj)
)
)
)
((= arg2 'attack)
(let ((s2-0 (the-as object (-> arg3 param 1))))
(when (!= (-> (the-as attack-info s2-0) id) (-> obj incoming attack-id))
(cond
((and (logtest? (-> obj enemy-flags) (enemy-flag enable-on-active))
(zero? (logand (-> obj focus-status) (focus-status grabbed)))
)
(let* ((s1-0 obj)
(s0-0 (method-of-object s1-0 enemy-method-106))
)
(set! sv-432 arg0)
(set! sv-448 arg3)
(let ((a3-3 (get-penetrate-using-from-attack-event (the-as process-drawable arg0) arg3)))
(s0-0 s1-0 sv-432 sv-448 (the-as int a3-3) (the-as attack-info s2-0))
)
)
(send-event (ppointer->process (-> obj parent)) 'child-hit)
0
(if (not *debug-unkillable*)
(enemy-method-48 obj arg0 arg3)
)
(let ((s2-1 (the-as attack-info (enemy-method-58 obj))))
(when s2-1
(logclear! (-> obj enemy-flags) (enemy-flag called-dying))
(enemy-method-108 obj (the-as enemy arg0) arg3)
(let ((a1-13 (new 'stack-no-clear 'event-message-block)))
(set! (-> a1-13 from) (process->ppointer arg0))
(set! (-> a1-13 num-params) (the-as int arg1))
(set! (-> a1-13 message) (the-as symbol s2-1))
(set! (-> a1-13 param 0) (-> arg3 param 0))
(set! (-> a1-13 param 1) (-> arg3 param 1))
(set! (-> a1-13 param 2) (-> arg3 param 2))
(set! (-> a1-13 param 3) (-> arg3 param 3))
(set! (-> a1-13 param 4) (-> arg3 param 4))
(set! (-> a1-13 param 5) (-> arg3 param 5))
(send-event-function obj a1-13)
)
)
)
(the-as
object
(cond
((= arg2 'track)
(and (nonzero? (-> obj hit-points))
(logtest? (-> obj enemy-flags) (enemy-flag enable-on-active))
(logtest? (enemy-flag check-water-backup) (-> obj enemy-flags))
)
(else
(set! (-> obj incoming attack-id) (-> (the-as attack-info s2-0) id))
(enemy-method-75 obj arg0 (the-as touching-shapes-entry arg3))
)
((= arg2 'combo)
(and (not (logtest? (enemy-flag multi-focus) (-> obj enemy-flags))) (nonzero? (-> obj hit-points)))
)
((= arg2 'touch)
(enemy-method-75 obj arg0 (the-as touching-shapes-entry arg3))
)
((= arg2 'touched)
(when (logtest? (-> obj enemy-flags) (enemy-flag attackable-backup))
(let* ((s3-1 arg0)
(v1-20 (if (type? s3-1 process-drawable)
(the-as process-drawable s3-1)
)
)
)
(when v1-20
(let* ((s3-2 (-> v1-20 root))
(a1-4 (if (type? s3-2 collide-shape)
s3-2
)
)
(s3-3 (-> arg3 param 0))
)
(if (and a1-4
s3-3
((method-of-type touching-shapes-entry prims-touching-action?)
(the-as touching-shapes-entry s3-3)
(the-as collide-shape a1-4)
(collide-action solid)
(collide-action)
)
((method-of-type touching-shapes-entry prims-touching-action?)
(the-as touching-shapes-entry s3-3)
(-> obj root-override2)
(collide-action solid)
(collide-action)
)
)
(set! (-> obj auto-reset-penetrate-time) (the-as uint (-> pp clock frame-counter)))
)
)
)
)
)
(enemy-method-76 obj arg0 arg3)
)
((= arg2 'attack-invinc)
(case (-> (the-as attack-info (-> arg3 param 1)) mode)
(('endlessfall)
(let ((v1-31 (-> obj root-override2 root-prim)))
(set! (-> v1-31 prim-core collide-as) (collide-spec))
(set! (-> v1-31 prim-core collide-with) (collide-spec))
)
0
(enemy-method-73 obj)
)
)
)
((= arg2 'attack)
(let ((s2-0 (the-as object (-> arg3 param 1))))
(when (!= (-> (the-as attack-info s2-0) id) (-> obj incoming attack-id))
(cond
((and (logtest? (-> obj enemy-flags) (enemy-flag enable-on-active))
(zero? (logand (-> obj focus-status) (focus-status grabbed)))
)
(let* ((s1-0 obj)
(s0-0 (method-of-object s1-0 enemy-method-106))
)
(set! sv-432 arg0)
(set! sv-448 arg3)
(let ((a3-3 (get-penetrate-using-from-attack-event (the-as process-drawable arg0) arg3)))
(s0-0 s1-0 sv-432 sv-448 (the-as int a3-3) (the-as attack-info s2-0))
)
)
(send-event (ppointer->process (-> obj parent)) 'child-hit)
0
(if (not *debug-unkillable*)
(enemy-method-48 obj arg0 arg3)
)
(let ((s2-1 (the-as attack-info (enemy-method-58 obj arg0 arg3))))
(when s2-1
(logclear! (-> obj enemy-flags) (enemy-flag called-dying))
(enemy-method-108 obj (the-as enemy arg0) arg3)
(let ((a1-13 (new 'stack-no-clear 'event-message-block)))
(set! (-> a1-13 from) (process->ppointer arg0))
(set! (-> a1-13 num-params) (the-as int arg1))
(set! (-> a1-13 message) (the-as symbol s2-1))
(set! (-> a1-13 param 0) (-> arg3 param 0))
(set! (-> a1-13 param 1) (-> arg3 param 1))
(set! (-> a1-13 param 2) (-> arg3 param 2))
(set! (-> a1-13 param 3) (-> arg3 param 3))
(set! (-> a1-13 param 4) (-> arg3 param 4))
(set! (-> a1-13 param 5) (-> arg3 param 5))
(send-event-function obj a1-13)
)
)
)
)
(else
(set! (-> obj incoming attack-id) (-> (the-as attack-info s2-0) id))
(enemy-method-75 obj arg0 (the-as touching-shapes-entry arg3))
)
)
)
)
)
)
((= arg2 'hit-flinch)
(when (zero? (-> obj hit-points))
((= arg2 'hit-flinch)
(when (zero? (-> obj hit-points))
(logclear! (-> obj mask) (process-mask actor-pause))
(logclear! (-> obj focus-status) (focus-status dangerous))
(logclear! (-> obj enemy-flags) (enemy-flag enable-on-notice))
(logior! (-> obj enemy-flags) (enemy-flag chase-startup))
(logior! (-> obj focus-status) (focus-status hit))
(if (zero? (-> obj hit-points))
(logior! (-> obj focus-status) (focus-status dead))
)
(logclear! (-> obj enemy-flags) (enemy-flag actor-pause-backup))
(enemy-method-62 obj)
(set! (-> obj enemy-flags) (logior (enemy-flag actor-pause-backup) (-> obj enemy-flags)))
(process-contact-action arg0)
(send-event arg0 'get-attack-count 1)
(enemy-method-73 obj)
)
#t
)
((= arg2 'hit-knocked)
(logclear! (-> obj mask) (process-mask actor-pause))
(logclear! (-> obj focus-status) (focus-status dangerous))
(logclear! (-> obj enemy-flags) (enemy-flag enable-on-notice))
@@ -1809,138 +1845,17 @@
(set! (-> obj enemy-flags) (logior (enemy-flag actor-pause-backup) (-> obj enemy-flags)))
(process-contact-action arg0)
(send-event arg0 'get-attack-count 1)
(enemy-method-73 obj)
)
#t
)
((= arg2 'hit-knocked)
(logclear! (-> obj mask) (process-mask actor-pause))
(logclear! (-> obj focus-status) (focus-status dangerous))
(logclear! (-> obj enemy-flags) (enemy-flag enable-on-notice))
(logior! (-> obj enemy-flags) (enemy-flag chase-startup))
(logior! (-> obj focus-status) (focus-status hit))
(if (zero? (-> obj hit-points))
(logior! (-> obj focus-status) (focus-status dead))
)
(logclear! (-> obj enemy-flags) (enemy-flag actor-pause-backup))
(enemy-method-62 obj)
(set! (-> obj enemy-flags) (logior (enemy-flag actor-pause-backup) (-> obj enemy-flags)))
(process-contact-action arg0)
(send-event arg0 'get-attack-count 1)
(when (zero? (-> obj hit-points))
(case (-> obj incoming knocked-type)
(((knocked-type knocked-type-4) (knocked-type knocked-type-6))
(set! (-> obj incoming knocked-type) (knocked-type knocked-type-0))
0
)
)
)
(go (method-of-object obj knocked))
)
((= arg2 'hit)
(logclear! (-> obj mask) (process-mask actor-pause))
(logclear! (-> obj focus-status) (focus-status dangerous))
(logclear! (-> obj enemy-flags) (enemy-flag enable-on-notice))
(logior! (-> obj enemy-flags) (enemy-flag chase-startup))
(logior! (-> obj focus-status) (focus-status hit))
(if (zero? (-> obj hit-points))
(logior! (-> obj focus-status) (focus-status dead))
)
(logclear! (-> obj enemy-flags) (enemy-flag actor-pause-backup))
(enemy-method-62 obj)
(set! (-> obj enemy-flags) (logior (enemy-flag actor-pause-backup) (-> obj enemy-flags)))
(process-contact-action arg0)
(send-event arg0 'get-attack-count 1)
(if (zero? (-> obj hit-points))
(enemy-method-73 obj)
(go (method-of-object obj hit))
)
)
((= arg2 'cue-chase)
(when (and (> (-> obj hit-points) 0)
(zero? (-> obj fated-time))
(zero? (logand (-> obj focus-status) (focus-status grabbed)))
)
(let ((v1-162 (logtest? (enemy-flag alert) (-> obj enemy-flags))))
(logclear! (-> obj enemy-flags) (enemy-flag enable-on-notice alert victory called-dying))
(set! (-> obj enemy-flags) (logior (enemy-flag dangerous-backup) (-> obj enemy-flags)))
(logclear! (-> obj mask) (process-mask actor-pause))
(cond
(v1-162
(if (logtest? (enemy-option ambush) (-> obj fact-info-override enemy-options))
(go-ambush obj)
(go-hostile obj)
)
)
((and (-> obj next-state) (let ((v1-173 (-> obj next-state name)))
(or (= v1-173 'dormant) (= v1-173 'dormant-aware))
)
)
(if (logtest? (enemy-option ambush) (-> obj fact-info-override enemy-options))
(go-ambush obj)
(go (method-of-object obj notice))
)
(when (zero? (-> obj hit-points))
(case (-> obj incoming knocked-type)
(((knocked-type knocked-type-4) (knocked-type knocked-type-6))
(set! (-> obj incoming knocked-type) (knocked-type knocked-type-0))
0
)
)
)
#t
(go (method-of-object obj knocked))
)
)
((= arg2 'cue-wake)
(when (and (> (-> obj hit-points) 0)
(zero? (-> obj fated-time))
(zero? (logand (-> obj focus-status) (focus-status grabbed)))
)
(logclear! (-> obj enemy-flags) (enemy-flag alert victory called-dying))
(if (logtest? (enemy-option ambush) (-> obj fact-info-override enemy-options))
(go-ambush obj)
(enemy-method-72 obj)
)
#t
)
)
((= arg2 'jump)
(when (and (> (-> obj hit-points) 0)
(zero? (-> obj fated-time))
(zero? (logand (-> obj focus-status) (focus-status grabbed)))
)
(logclear! (-> obj mask) (process-mask actor-pause))
(set! (-> obj jump-why) (-> arg3 param 0))
(set! (-> obj event-param-point quad) (-> (the-as vector (-> arg3 param 1)) quad))
(go (method-of-object obj jump))
)
)
((= arg2 'death-start)
(set! (-> obj enemy-flags) (the-as enemy-flag (logior (enemy-flag recover) (-> obj enemy-flags))))
(send-event (ppointer->process (-> obj parent)) 'child-die)
(drop-pickup (-> obj fact-info-override) #t *entity-pool* (-> obj fact-info-override) 0)
(let ((s5-1 (-> obj on-death)))
(if s5-1
(eval!
(new 'stack 'script-context (the-as basic (process->ppointer pp)) pp (-> obj root-override2 trans))
(the-as pair s5-1)
)
)
)
)
((= arg2 'death-end)
(if (-> obj skel effect)
(logior! (-> obj skel effect flags) (effect-control-flag ecf2))
)
(logior! (-> obj draw status) (draw-control-status no-draw))
(logclear! (-> obj enemy-flags) (enemy-flag enable-on-active checking-water))
(logclear! (-> obj focus-status) (focus-status dangerous))
(logclear! (-> obj enemy-flags) (enemy-flag check-water))
)
((= arg2 'instant-death)
(when (and (> (-> obj hit-points) 0) (zero? (-> obj fated-time)))
(set! (-> obj hit-points) 0)
(set! (-> obj root-override2 penetrated-by) (enemy-method-59 obj))
(let ((s5-2 (enemy-method-50 obj (new 'stack-no-clear 'vector))))
(vector-z-quaternion! s5-2 (-> obj root-override2 quat))
(vector-float*! s5-2 s5-2 -1.0)
(vector-normalize! s5-2 1.0)
)
((= arg2 'hit)
(logclear! (-> obj mask) (process-mask actor-pause))
(logclear! (-> obj focus-status) (focus-status dangerous))
(logclear! (-> obj enemy-flags) (enemy-flag enable-on-notice))
@@ -1952,88 +1867,187 @@
(logclear! (-> obj enemy-flags) (enemy-flag actor-pause-backup))
(enemy-method-62 obj)
(set! (-> obj enemy-flags) (logior (enemy-flag actor-pause-backup) (-> obj enemy-flags)))
(enemy-method-73 obj)
(process-contact-action arg0)
(send-event arg0 'get-attack-count 1)
(if (zero? (-> obj hit-points))
(enemy-method-73 obj)
(go (method-of-object obj hit))
)
)
)
((= arg2 'die-fast)
(logior! (-> obj draw status) (draw-control-status no-draw))
(enemy-method-132 obj)
(send-event (ppointer->process (-> obj parent)) 'child-die)
(let ((s5-3 (-> obj on-death)))
(if s5-3
(eval!
(new 'stack 'script-context (the-as basic (process->ppointer pp)) pp (-> obj root-override2 trans))
(the-as pair s5-3)
((= arg2 'cue-chase)
(when (and (> (-> obj hit-points) 0)
(zero? (-> obj fated-time))
(zero? (logand (-> obj focus-status) (focus-status grabbed)))
)
(let ((v1-162 (logtest? (enemy-flag alert) (-> obj enemy-flags))))
(logclear! (-> obj enemy-flags) (enemy-flag enable-on-notice alert victory called-dying))
(set! (-> obj enemy-flags) (logior (enemy-flag dangerous-backup) (-> obj enemy-flags)))
(logclear! (-> obj mask) (process-mask actor-pause))
(cond
(v1-162
(if (logtest? (enemy-option ambush) (-> obj fact-info-override enemy-options))
(go-ambush obj)
(go-hostile obj)
)
)
((and (-> obj next-state) (let ((v1-173 (-> obj next-state name)))
(or (= v1-173 'dormant) (= v1-173 'dormant-aware))
)
)
(if (logtest? (enemy-option ambush) (-> obj fact-info-override enemy-options))
(go-ambush obj)
(go (method-of-object obj notice))
)
)
)
)
)
(cleanup-for-death obj)
(go (method-of-object obj die-fast))
)
((= arg2 'victory)
(if (and (-> obj enemy-info use-victory)
(not (and (-> obj next-state) (= (-> obj next-state name) 'victory)))
(> (-> obj hit-points) 0)
(zero? (-> obj fated-time))
(zero? (logand (-> obj focus-status) (focus-status grabbed)))
)
(go (method-of-object obj victory))
)
)
((= arg2 'nav-control)
(if (nonzero? (-> obj nav))
(-> obj nav)
)
)
((= arg2 'push-trans)
(move-by-vector! (-> obj root-override2) (the-as vector (-> arg3 param 0)))
)
((= arg2 'move-trans)
(move-to-point! (-> obj root-override2) (the-as vector (-> arg3 param 0)))
)
((= arg2 'shadow)
(cond
((-> arg3 param 0)
(let ((v1-320 (-> obj draw shadow-ctrl)))
(logclear! (-> v1-320 settings flags) (shadow-flags disable-draw))
)
0
)
(else
(let ((v1-323 (-> obj draw shadow-ctrl)))
(logior! (-> v1-323 settings flags) (shadow-flags disable-draw))
)
0
#t
)
)
)
((= arg2 'color-effect)
(let ((v1-325 (-> arg3 param 0)))
(set! s5-5
(cond
((= v1-325 'dark)
(let ((f30-0 (rand-vu-float-range 0.2 1.0)))
(set-vector! (-> obj draw color-mult) (lerp 1.0 1.0 f30-0) (lerp 1.0 0.0 f30-0) (lerp 1.0 1.0 f30-0) 1.0)
(set! s5-5 (-> obj draw color-emissive))
(set! (-> s5-5 x) (lerp 0.0 0.3 f30-0))
(set! (-> s5-5 y) (lerp 0.0 0.0 f30-0))
(set! (-> s5-5 z) (lerp 0.0 0.3 f30-0))
((= arg2 'cue-wake)
(when (and (> (-> obj hit-points) 0)
(zero? (-> obj fated-time))
(zero? (logand (-> obj focus-status) (focus-status grabbed)))
)
(set! (-> s5-5 w) 1.0)
s5-5
)
((= v1-325 #f)
(set-vector! (-> obj draw color-mult) 1.0 1.0 1.0 1.0)
(set! s5-5 (-> obj draw color-emissive))
(set! (-> s5-5 quad) (the-as uint128 0))
s5-5
)
(logclear! (-> obj enemy-flags) (enemy-flag alert victory called-dying))
(if (logtest? (enemy-option ambush) (-> obj fact-info-override enemy-options))
(go-ambush obj)
(enemy-method-72 obj)
)
#t
)
)
((= arg2 'jump)
(when (and (> (-> obj hit-points) 0)
(zero? (-> obj fated-time))
(zero? (logand (-> obj focus-status) (focus-status grabbed)))
)
(logclear! (-> obj mask) (process-mask actor-pause))
(set! (-> obj jump-why) (-> arg3 param 0))
(set! (-> obj event-param-point quad) (-> (the-as vector (-> arg3 param 1)) quad))
(go (method-of-object obj jump))
)
)
((= arg2 'death-start)
(set! (-> obj enemy-flags) (the-as enemy-flag (logior (enemy-flag recover) (-> obj enemy-flags))))
(send-event (ppointer->process (-> obj parent)) 'child-die)
(drop-pickup (-> obj fact-info-override) #t *entity-pool* (-> obj fact-info-override) 0)
(let ((s5-1 (-> obj on-death)))
(if s5-1
(eval!
(new 'stack 'script-context (the-as basic (process->ppointer pp)) pp (-> obj root-override2 trans))
(the-as pair s5-1)
)
)
)
)
)
((= arg2 'death-end)
(if (-> obj skel effect)
(logior! (-> obj skel effect flags) (effect-control-flag ecf2))
)
(logior! (-> obj draw status) (draw-control-status no-draw))
(logclear! (-> obj enemy-flags) (enemy-flag enable-on-active checking-water))
(logclear! (-> obj focus-status) (focus-status dangerous))
(set! (-> obj enemy-flags) (logclear (-> obj enemy-flags) (enemy-flag check-water)))
)
((= arg2 'instant-death)
(when (and (> (-> obj hit-points) 0) (zero? (-> obj fated-time)))
(set! (-> obj hit-points) 0)
(set! (-> obj root-override2 penetrated-by) (enemy-method-59 obj))
(let ((s5-2 (enemy-method-50 obj (new 'stack-no-clear 'vector))))
(vector-z-quaternion! s5-2 (-> obj root-override2 quat))
(vector-float*! s5-2 s5-2 -1.0)
(vector-normalize! s5-2 1.0)
)
(logclear! (-> obj mask) (process-mask actor-pause))
(logclear! (-> obj focus-status) (focus-status dangerous))
(logclear! (-> obj enemy-flags) (enemy-flag enable-on-notice))
(logior! (-> obj enemy-flags) (enemy-flag chase-startup))
(logior! (-> obj focus-status) (focus-status hit))
(if (zero? (-> obj hit-points))
(logior! (-> obj focus-status) (focus-status dead))
)
(logclear! (-> obj enemy-flags) (enemy-flag actor-pause-backup))
(enemy-method-62 obj)
(set! (-> obj enemy-flags) (logior (enemy-flag actor-pause-backup) (-> obj enemy-flags)))
(enemy-method-73 obj)
)
)
((= arg2 'die-fast)
(logior! (-> obj draw status) (draw-control-status no-draw))
(enemy-method-132 obj)
(send-event (ppointer->process (-> obj parent)) 'child-die)
(let ((s5-3 (-> obj on-death)))
(if s5-3
(eval!
(new 'stack 'script-context (the-as basic (process->ppointer pp)) pp (-> obj root-override2 trans))
(the-as pair s5-3)
)
)
)
(cleanup-for-death obj)
(go (method-of-object obj die-fast))
)
((= arg2 'victory)
(if (and (-> obj enemy-info use-victory)
(not (and (-> obj next-state) (= (-> obj next-state name) 'victory)))
(> (-> obj hit-points) 0)
(zero? (-> obj fated-time))
(zero? (logand (-> obj focus-status) (focus-status grabbed)))
)
(go (method-of-object obj victory))
)
)
((= arg2 'nav-control)
(if (nonzero? (-> obj nav))
(-> obj nav)
)
)
((= arg2 'push-trans)
(move-by-vector! (-> obj root-override2) (the-as vector (-> arg3 param 0)))
)
((= arg2 'move-trans)
(move-to-point! (-> obj root-override2) (the-as vector (-> arg3 param 0)))
)
((= arg2 'shadow)
(cond
((-> arg3 param 0)
(let ((v1-320 (-> obj draw shadow-ctrl)))
(logclear! (-> v1-320 settings flags) (shadow-flags disable-draw))
)
0
)
(else
(let ((v1-323 (-> obj draw shadow-ctrl)))
(logior! (-> v1-323 settings flags) (shadow-flags disable-draw))
)
0
)
)
)
((= arg2 'color-effect)
(case (-> arg3 param 0)
(('dark)
(let ((f30-0 (rand-vu-float-range 0.2 1.0)))
(set-vector! (-> obj draw color-mult) (lerp 1.0 1.0 f30-0) (lerp 1.0 0.0 f30-0) (lerp 1.0 1.0 f30-0) 1.0)
(set! s5-5 (-> obj draw color-emissive))
(set! (-> s5-5 x) (lerp 0.0 0.3 f30-0))
(set! (-> s5-5 y) (lerp 0.0 0.0 f30-0))
(set! (-> s5-5 z) (lerp 0.0 0.3 f30-0))
)
(set! (-> s5-5 w) 1.0)
s5-5
)
((#f)
(set-vector! (-> obj draw color-mult) 1.0 1.0 1.0 1.0)
(set! s5-5 (-> obj draw color-emissive))
(set! (-> s5-5 quad) (the-as uint128 0))
s5-5
)
)
)
)
)
(none)
)
)
@@ -2048,7 +2062,7 @@
)
;; definition for method 58 of type enemy
(defmethod enemy-method-58 enemy ((obj enemy))
(defmethod enemy-method-58 enemy ((obj enemy) (arg0 process) (arg1 event-message-block))
(let ((v1-0 (-> obj incoming penetrate-using)))
(cond
((logtest? (the-as penetrate v1-0) (-> obj penetrated-flinch))
@@ -2188,9 +2202,8 @@
)
;; definition for function enemy-event-handler
;; WARN: Return type mismatch none vs object.
(defbehavior enemy-event-handler enemy ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block))
(the-as object (enemy-method-74 self arg0 arg1 arg2 arg3))
(enemy-method-74 self arg0 arg1 arg2 arg3)
)
;; definition for function enemy-simple-post
+1 -1
View File
@@ -304,7 +304,7 @@
(clamp-vector-to-mesh-no-gaps (_type_ vector nav-poly vector clamp-travel-vector-to-mesh-return-info) none 21)
(find-first-sphere-and-update-avoid-params (_type_ vector nav-avoid-spheres-params) float 22)
(set-spheres-from-nav-ids (_type_) none 23)
(add-root-sphere-to-hash! (_type_ vector int) none 24)
(add-root-sphere-to-hash! (_type_ vector int) symbol 24)
(get-max-rotation-rate (_type_) float 25)
(get-sphere-mask (_type_) uint 26)
(get-target-speed (_type_) meters 27)
+6 -5
View File
@@ -949,12 +949,14 @@
(a1-31 (-> s5-0 temp-dir v1-30))
(a0-39 (-> s5-0 in-dir))
(a2-14 (-> s5-0 right-dir))
(a3-7 (vector-dot a1-31 a2-14))
(a3-7 (the-as number (vector-dot a1-31 a2-14)))
(t0-1 #xffffffff80000000)
(a2-16 #x3f800000)
(f0-30
(* f0-29 (* (the-as float (logior (logand a3-7 (the-as uint t0-1)) a2-16)) (- 1.0 (vector-dot a1-31 a0-39))))
)
(f0-30 (* f0-29 (* (the-as float (logior (logand (the-as uint a3-7) (the-as uint t0-1)) a2-16))
(- 1.0 (vector-dot a1-31 a0-39))
)
)
)
)
(when (< (-> s5-0 best-dir-angle s3-0) f0-30)
(set! (-> s5-0 best-dir s3-0 quad) (-> s5-0 temp-dir v1-30 quad))
@@ -2120,7 +2122,6 @@
(the-as int (-> obj root-sphere-id))
)
)
(none)
)
;; definition for method 47 of type nav-state
+27 -21
View File
@@ -23,27 +23,34 @@
)
;; definition for method 74 of type nav-enemy
;; WARN: Return type mismatch none vs object.
;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 7]
;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 15]
;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 23]
;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 33]
(defmethod enemy-method-74 nav-enemy ((obj nav-enemy) (arg0 process) (arg1 object) (arg2 symbol) (arg3 event-message-block))
(case arg2
(('nav-mesh-kill)
(deactivate obj)
#t
)
(('nav-mesh-new)
(set! (-> obj water-max-height) (-> obj nav state mesh water-max-height))
#t
)
(('debug-control-on)
(go (method-of-object obj debug-control))
)
(('debug-control-off)
(enemy-method-72 obj)
)
(else
((method-of-type enemy enemy-method-74) obj arg0 arg1 arg2 arg3)
)
(let ((v1-0 arg2))
(the-as object (cond
((= v1-0 'nav-mesh-kill)
(deactivate obj)
#t
)
((= v1-0 'nav-mesh-new)
(set! (-> obj water-max-height) (-> obj nav state mesh water-max-height))
#t
)
((= v1-0 'debug-control-on)
(go (method-of-object obj debug-control))
)
((= v1-0 'debug-control-off)
(enemy-method-72 obj)
)
(else
((method-of-type enemy enemy-method-74) obj arg0 arg1 arg2 arg3)
)
)
)
)
(none)
)
;; definition for symbol *nav-enemy-dummy-shadow-control*, type shadow-control
@@ -2827,13 +2834,12 @@
;; definition for method 82 of type nav-enemy
;; INFO: Used lq/sq
;; WARN: Return type mismatch none vs symbol.
(defmethod enemy-method-82 nav-enemy ((obj nav-enemy) (arg0 enemy-jump-info))
"@abstract"
(let ((v1-0 (new 'stack-no-clear 'vector)))
(set! (-> v1-0 quad) (-> arg0 dest-pos quad))
(set! (-> v1-0 w) (-> obj nav-radius-backup))
(the-as symbol (add-root-sphere-to-hash! (-> obj nav) v1-0 #x80068))
(add-root-sphere-to-hash! (-> obj nav) v1-0 #x80068)
)
)
+1 -1
View File
@@ -155,7 +155,7 @@
(update-from-spheres (_type_) none 28)
(sphere-hash-method-29 (_type_ find-nav-sphere-ids-params int int int) none 29)
(find-nav-sphere-ids (_type_ find-nav-sphere-ids-params) none 30)
(add-sphere-with-mask-and-id (_type_ vector int int) none 31)
(add-sphere-with-mask-and-id (_type_ vector int int) symbol 31)
(sphere-hash-method-32 (_type_ vector vector float int) symbol 32)
(remove-by-id (_type_ sphere int) none 33)
)