mirror of
https://github.com/open-goal/jak-project
synced 2026-07-25 22:31:06 -04:00
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:
+3
-3
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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)
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user