mirror of
https://github.com/open-goal/jak-project.git
synced 2024-11-23 14:20:07 +00:00
fix many instances of bad bone data being used (#2580)
Fixes cutscenes starting way too early and various cutscene softlocks. Fixes #2579 Fixes #2577 Supersedes #2578
This commit is contained in:
parent
aff67d6bb7
commit
0d3e272876
@ -12,7 +12,7 @@
|
||||
"CGO/KERNEL.CGO",
|
||||
"CGO/ENGINE.CGO",
|
||||
"CGO/GAME.CGO",
|
||||
"CGO/COMMON.CGO",
|
||||
// "CGO/COMMON.CGO",
|
||||
"DGO/LWIDEB.DGO",
|
||||
"DGO/LMEETBRT.DGO",
|
||||
"DGO/CTA.DGO",
|
||||
|
@ -4212,5 +4212,11 @@
|
||||
"vars": {
|
||||
"gp-0": "charp"
|
||||
}
|
||||
},
|
||||
"(method 55 enemy)": {
|
||||
"args": ["self"]
|
||||
},
|
||||
"(method 55 nav-enemy)": {
|
||||
"args": ["self"]
|
||||
}
|
||||
}
|
||||
|
@ -1,38 +0,0 @@
|
||||
("COMMON.CGO"
|
||||
("los-control-h.o"
|
||||
"airlock.o"
|
||||
"water-anim.o"
|
||||
"blocking-plane.o"
|
||||
"idle-control.o"
|
||||
"dark-eco-pool.o"
|
||||
"enemy-h.o"
|
||||
"nav-enemy-h.o"
|
||||
"rigid-body-h.o"
|
||||
"enemy.o"
|
||||
"nav-enemy.o"
|
||||
"base-plat.o"
|
||||
"plat.o"
|
||||
"basebutton.o"
|
||||
"bouncer.o"
|
||||
"conveyor.o"
|
||||
"elevator.o"
|
||||
"rigid-body.o"
|
||||
"rigid-body-queue.o"
|
||||
"rigid-body-plat.o"
|
||||
"joint-exploder.o"
|
||||
"simple-focus.o"
|
||||
"simple-nav-sphere.o"
|
||||
"process-taskable.o"
|
||||
"scene-actor.o"
|
||||
"scene-looper.o"
|
||||
"warp-gate.o"
|
||||
"guard-projectile.o"
|
||||
"metalhead-projectile.o"
|
||||
"los-control.o"
|
||||
"grunt.o"
|
||||
"flitter.o"
|
||||
"battle.o"
|
||||
"elec-gate.o"
|
||||
"cty-guard-turret-button.o"
|
||||
"entity-debug.o" ;; added
|
||||
))
|
@ -289,60 +289,54 @@
|
||||
)
|
||||
)
|
||||
|
||||
(defmethod track-target! enemy ((obj enemy))
|
||||
(defmethod track-target! enemy ((self enemy))
|
||||
"Does a lot of various things relating to interacting with the target
|
||||
- tracks when the enemy was last drawn
|
||||
- looks at the target and handles attacking
|
||||
@TODO Not extremely well understood yet"
|
||||
(with-pp
|
||||
(if (and (nonzero? (-> obj draw)) (logtest? (-> obj draw status) (draw-control-status on-screen)))
|
||||
(set! (-> obj last-draw-time) (-> pp clock frame-counter))
|
||||
(if (and (nonzero? (-> self draw)) (logtest? (-> self draw status) (draw-control-status on-screen)))
|
||||
(set! (-> self last-draw-time) (-> pp clock frame-counter))
|
||||
)
|
||||
(enemy-method-129 obj)
|
||||
(if (logtest? (enemy-flag use-trigger) (-> obj enemy-flags))
|
||||
(enemy-method-100 obj)
|
||||
(enemy-method-129 self)
|
||||
(if (logtest? (enemy-flag use-trigger) (-> self enemy-flags))
|
||||
(enemy-method-100 self)
|
||||
)
|
||||
(when *target*
|
||||
(if *target*
|
||||
(look-at!
|
||||
(-> *target* neck)
|
||||
(the-as vector (-> obj root-override2 root-prim prim-core))
|
||||
(if (logtest? (-> obj enemy-flags) (enemy-flag use-notice-distance))
|
||||
'attacking
|
||||
)
|
||||
obj
|
||||
)
|
||||
)
|
||||
(target-look-at-me! :trans (the-as vector (-> self root-override2 root-prim prim-core))
|
||||
:message (if (logtest? (-> self enemy-flags) (enemy-flag use-notice-distance))
|
||||
'attacking
|
||||
))
|
||||
)
|
||||
(when (nonzero? (-> obj neck))
|
||||
(when (logtest? (-> obj enemy-flags) (enemy-flag lock-focus))
|
||||
(let ((a0-9 (handle->process (-> obj focus handle))))
|
||||
(when (nonzero? (-> self neck))
|
||||
(when (logtest? (-> self enemy-flags) (enemy-flag lock-focus))
|
||||
(let ((a0-9 (handle->process (-> self focus handle))))
|
||||
(if a0-9
|
||||
(target-set! (-> obj neck) (get-trans (the-as process-focusable a0-9) 2))
|
||||
(target-set! (-> self neck) (get-trans (the-as process-focusable a0-9) 2))
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(when (and (logtest? (-> obj enemy-flags) (enemy-flag attackable-backup))
|
||||
(>= (- (-> pp clock frame-counter) (-> obj auto-reset-penetrate-time)) (seconds 0.1))
|
||||
(when (and (logtest? (-> self enemy-flags) (enemy-flag attackable-backup))
|
||||
(>= (- (-> pp clock frame-counter) (-> self auto-reset-penetrate-time)) (seconds 0.1))
|
||||
)
|
||||
(logclear! (-> obj enemy-flags) (enemy-flag attackable-backup))
|
||||
(set! (-> obj root-override2 penetrated-by) (get-penetrate-info obj))
|
||||
(logclear! (-> self enemy-flags) (enemy-flag attackable-backup))
|
||||
(set! (-> self root-override2 penetrated-by) (get-penetrate-info self))
|
||||
(let ((v1-48 0))
|
||||
(if (logtest? (penetrate knocked) (-> obj root-override2 penetrate-using))
|
||||
(if (logtest? (penetrate knocked) (-> self root-override2 penetrate-using))
|
||||
(set! v1-48 (logior (shl 1 32) v1-48))
|
||||
)
|
||||
(set! (-> obj root-override2 penetrate-using) (the-as penetrate v1-48))
|
||||
(set! (-> self root-override2 penetrate-using) (the-as penetrate v1-48))
|
||||
)
|
||||
)
|
||||
(if (logtest? (-> obj enemy-flags) (enemy-flag look-at-focus))
|
||||
(enemy-method-136 obj)
|
||||
(if (logtest? (-> self enemy-flags) (enemy-flag look-at-focus))
|
||||
(enemy-method-136 self)
|
||||
)
|
||||
(if (logtest? (enemy-flag trackable-backup directed-ready) (-> obj enemy-flags))
|
||||
(enemy-method-54 obj)
|
||||
(if (logtest? (enemy-flag trackable-backup directed-ready) (-> self enemy-flags))
|
||||
(enemy-method-54 self)
|
||||
)
|
||||
(if (and *debug-segment* (-> obj enemy-info debug-draw-neck) (nonzero? (-> obj neck)))
|
||||
(joint-mod-debug-draw (-> obj neck))
|
||||
(if (and *debug-segment* (-> self enemy-info debug-draw-neck) (nonzero? (-> self neck)))
|
||||
(joint-mod-debug-draw (-> self neck))
|
||||
)
|
||||
(ja-post)
|
||||
0
|
||||
|
@ -639,3 +639,10 @@
|
||||
(enable-set! (_type_ symbol) none 10)
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
(defmacro target-look-at-me! (&key trans &key (message 'nothing-special))
|
||||
"make target look at a trans in self. PC PORT NOTE : added check to see if lods have been set"
|
||||
`(if (and (logtest? (-> self draw status) (draw-control-status lod-set)) *target*)
|
||||
(look-at! (-> *target* neck) ,trans ,message self)))
|
||||
|
||||
|
@ -1205,9 +1205,10 @@
|
||||
;; PC port note : we ALWAYS disable the envmap hack when a process-drawable has warp effect enabled
|
||||
(when (or (= lod-idx (-> dc cur-lod)) (logtest? (-> dc status) (draw-control-status lod-set)))
|
||||
(protect ((-> *pc-settings* force-envmap?))
|
||||
(dotimes (eff-i (-> dc mgeo header effect-count))
|
||||
(if (logtest? (effect-bits cross-fade) (-> dc mgeo effect eff-i effect-bits))
|
||||
(false! (-> *pc-settings* force-envmap?))))
|
||||
(when (not (movie?))
|
||||
(dotimes (eff-i (-> dc mgeo header effect-count))
|
||||
(if (logtest? (effect-bits cross-fade) (-> dc mgeo effect eff-i effect-bits))
|
||||
(false! (-> *pc-settings* force-envmap?)))))
|
||||
(foreground-draw dc dma-buf dist-w)
|
||||
)
|
||||
)
|
||||
|
@ -3514,7 +3514,7 @@
|
||||
)
|
||||
:on-open #f
|
||||
:info #f
|
||||
:borrow '((hiphog 0 ltess special)) ;; (ctywide 0 lsack display) PC PORT NOTE : removed bad borrow!!
|
||||
:borrow '((hiphog 0 ltess special) (ctywide 0 lsack display))
|
||||
:open? #f
|
||||
:on-close #f
|
||||
:description (text-id text-x202)
|
||||
|
@ -217,48 +217,42 @@
|
||||
)
|
||||
)
|
||||
|
||||
(defmethod track-target! nav-enemy ((obj nav-enemy))
|
||||
(defmethod track-target! nav-enemy ((self nav-enemy))
|
||||
"Does a lot of various things relating to interacting with the target
|
||||
- tracks when the enemy was last drawn
|
||||
- looks at the target and handles attacking
|
||||
@TODO Not extremely well understood yet"
|
||||
(with-pp
|
||||
(if (and (nonzero? (-> obj draw)) (logtest? (-> obj draw status) (draw-control-status on-screen)))
|
||||
(set! (-> obj last-draw-time) (-> pp clock frame-counter))
|
||||
(if (and (nonzero? (-> self draw)) (logtest? (-> self draw status) (draw-control-status on-screen)))
|
||||
(set! (-> self last-draw-time) (-> pp clock frame-counter))
|
||||
)
|
||||
(enemy-method-129 obj)
|
||||
(when (logtest? (enemy-flag use-trigger) (-> obj enemy-flags))
|
||||
(if (-> obj nav)
|
||||
(enemy-method-100 obj)
|
||||
(enemy-method-103 obj)
|
||||
(enemy-method-129 self)
|
||||
(when (logtest? (enemy-flag use-trigger) (-> self enemy-flags))
|
||||
(if (-> self nav)
|
||||
(enemy-method-100 self)
|
||||
(enemy-method-103 self)
|
||||
)
|
||||
)
|
||||
(when *target*
|
||||
(if *target*
|
||||
(look-at!
|
||||
(-> *target* neck)
|
||||
(the-as vector (-> obj root-override2 root-prim prim-core))
|
||||
(if (logtest? (-> obj enemy-flags) (enemy-flag use-notice-distance))
|
||||
'attacking
|
||||
)
|
||||
obj
|
||||
)
|
||||
)
|
||||
(target-look-at-me! :trans (the-as vector (-> self root-override2 root-prim prim-core))
|
||||
:message (if (logtest? (-> self enemy-flags) (enemy-flag use-notice-distance))
|
||||
'attacking
|
||||
))
|
||||
)
|
||||
(when (nonzero? (-> obj neck))
|
||||
(when (nonzero? (-> self neck))
|
||||
(cond
|
||||
((logtest? (-> obj enemy-flags) (enemy-flag lock-focus))
|
||||
(let ((a0-10 (handle->process (-> obj focus handle))))
|
||||
((logtest? (-> self enemy-flags) (enemy-flag lock-focus))
|
||||
(let ((a0-10 (handle->process (-> self focus handle))))
|
||||
(if a0-10
|
||||
(target-set! (-> obj neck) (get-trans (the-as process-focusable a0-10) 2))
|
||||
(target-set! (-> self neck) (get-trans (the-as process-focusable a0-10) 2))
|
||||
)
|
||||
)
|
||||
)
|
||||
((logtest? (-> obj enemy-flags) (enemy-flag death-start))
|
||||
(let ((s5-1 (-> obj move-dest))
|
||||
((logtest? (-> self enemy-flags) (enemy-flag death-start))
|
||||
(let ((s5-1 (-> self move-dest))
|
||||
(v1-47 (vector<-cspace!
|
||||
(new 'stack-no-clear 'vector)
|
||||
(-> obj node-list data (-> obj enemy-info-override neck-joint))
|
||||
(-> self node-list data (-> self enemy-info-override neck-joint))
|
||||
)
|
||||
)
|
||||
(a1-6 (new 'stack-no-clear 'vector))
|
||||
@ -267,39 +261,39 @@
|
||||
(set! (-> a1-6 y) (-> v1-47 y))
|
||||
(set! (-> a1-6 z) (-> s5-1 z))
|
||||
(set! (-> a1-6 w) 1.0)
|
||||
(target-set! (-> obj neck) a1-6)
|
||||
(target-set! (-> self neck) a1-6)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(when (and (logtest? (-> obj enemy-flags) (enemy-flag attackable-backup))
|
||||
(>= (- (-> pp clock frame-counter) (-> obj auto-reset-penetrate-time)) (seconds 0.1))
|
||||
(when (and (logtest? (-> self enemy-flags) (enemy-flag attackable-backup))
|
||||
(>= (- (-> pp clock frame-counter) (-> self auto-reset-penetrate-time)) (seconds 0.1))
|
||||
)
|
||||
(logclear! (-> obj enemy-flags) (enemy-flag attackable-backup))
|
||||
(set! (-> obj root-override2 penetrated-by) (get-penetrate-info obj))
|
||||
(logclear! (-> self enemy-flags) (enemy-flag attackable-backup))
|
||||
(set! (-> self root-override2 penetrated-by) (get-penetrate-info self))
|
||||
(let ((v1-62 0))
|
||||
(if (logtest? (penetrate knocked) (-> obj root-override2 penetrate-using))
|
||||
(if (logtest? (penetrate knocked) (-> self root-override2 penetrate-using))
|
||||
(set! v1-62 (logior (shl 1 32) v1-62))
|
||||
)
|
||||
(set! (-> obj root-override2 penetrate-using) (the-as penetrate v1-62))
|
||||
(set! (-> self root-override2 penetrate-using) (the-as penetrate v1-62))
|
||||
)
|
||||
)
|
||||
(if (logtest? (-> obj enemy-flags) (enemy-flag look-at-focus))
|
||||
(enemy-method-136 obj)
|
||||
(if (logtest? (-> self enemy-flags) (enemy-flag look-at-focus))
|
||||
(enemy-method-136 self)
|
||||
)
|
||||
(if (logtest? (enemy-flag trackable-backup directed-ready) (-> obj enemy-flags))
|
||||
(enemy-method-54 obj)
|
||||
(if (logtest? (enemy-flag trackable-backup directed-ready) (-> self enemy-flags))
|
||||
(enemy-method-54 self)
|
||||
)
|
||||
(let ((v1-73 (-> obj restore-nav-radius-time)))
|
||||
(let ((v1-73 (-> self restore-nav-radius-time)))
|
||||
(when (nonzero? v1-73)
|
||||
(when (>= (-> pp clock frame-counter) v1-73)
|
||||
(set! (-> obj restore-nav-radius-time) 0)
|
||||
(set! (-> obj root-override2 nav-radius) (-> obj nav-radius-backup))
|
||||
(set! (-> self restore-nav-radius-time) 0)
|
||||
(set! (-> self root-override2 nav-radius) (-> self nav-radius-backup))
|
||||
)
|
||||
)
|
||||
)
|
||||
(if (and *debug-segment* (-> obj enemy-info-override debug-draw-neck) (nonzero? (-> obj neck)))
|
||||
(joint-mod-debug-draw (-> obj neck))
|
||||
(if (and *debug-segment* (-> self enemy-info-override debug-draw-neck) (nonzero? (-> self neck)))
|
||||
(joint-mod-debug-draw (-> self neck))
|
||||
)
|
||||
(ja-post)
|
||||
0
|
||||
|
@ -76,7 +76,10 @@
|
||||
(-> (the-as collide-shape-moving gp-0) gspot-pos)
|
||||
)
|
||||
((and (or (= arg0 2) (= arg0 3)) (type? gp-0 collide-shape))
|
||||
(-> gp-0 root-prim prim-core)
|
||||
;; PC PORT NOTE : added lod-set check so we don't use invalid bones
|
||||
(if (not (logtest? (-> obj draw status) (draw-control-status lod-set)))
|
||||
(-> gp-0 trans)
|
||||
(-> gp-0 root-prim prim-core))
|
||||
)
|
||||
(else
|
||||
(-> gp-0 trans)
|
||||
|
@ -308,9 +308,7 @@ Seen take in - `true-func` which takes no args TODO - seems fishy
|
||||
(logclear! (-> self draw status) (draw-control-status no-draw))
|
||||
)
|
||||
(when (-> self look-at-me)
|
||||
(if *target*
|
||||
(look-at! (-> *target* neck) (get-trans self 2) 'nothing-special self)
|
||||
)
|
||||
(target-look-at-me! :trans (get-trans self 2))
|
||||
)
|
||||
(transform-post)
|
||||
(none)
|
||||
|
@ -200,18 +200,7 @@
|
||||
(go-virtual pickup (method-of-object self wait-for-return))
|
||||
)
|
||||
)
|
||||
(if *target*
|
||||
(look-at!
|
||||
(-> *target* neck)
|
||||
(vector+!
|
||||
(new 'stack-no-clear 'vector)
|
||||
(the-as vector (-> self root-override root-prim prim-core))
|
||||
(new 'static 'vector :y 2048.0 :w 1.0)
|
||||
)
|
||||
'nothing-special
|
||||
self
|
||||
)
|
||||
)
|
||||
(target-look-at-me! :trans (vector+! (new 'stack-no-clear 'vector) (the-as vector (-> self root-override root-prim prim-core)) (new 'static 'vector :y 2048.0 :w 1.0)))
|
||||
(mech-method-24 self)
|
||||
(suspend)
|
||||
)
|
||||
|
@ -990,18 +990,7 @@
|
||||
(go-virtual setup)
|
||||
)
|
||||
)
|
||||
(if *target*
|
||||
(look-at!
|
||||
(-> *target* neck)
|
||||
(vector+!
|
||||
(new 'stack-no-clear 'vector)
|
||||
(the-as vector (-> self root-override root-prim prim-core))
|
||||
(new 'static 'vector :y 2048.0 :w 1.0)
|
||||
)
|
||||
'nothing-special
|
||||
self
|
||||
)
|
||||
)
|
||||
(target-look-at-me! :trans (vector+! (new 'stack-no-clear 'vector) (the-as vector (-> self root-override root-prim prim-core)) (new 'static 'vector :y 2048.0 :w 1.0)))
|
||||
(base-turret-method-36 self)
|
||||
(suspend)
|
||||
)
|
||||
@ -1427,18 +1416,7 @@
|
||||
(ja :group! (-> self draw art-group data 2))
|
||||
(until #f
|
||||
(base-turret-method-37 self)
|
||||
(if *target*
|
||||
(look-at!
|
||||
(-> *target* neck)
|
||||
(vector+!
|
||||
(new 'stack-no-clear 'vector)
|
||||
(the-as vector (-> self root-override root-prim prim-core))
|
||||
(new 'static 'vector :y 2048.0 :w 1.0)
|
||||
)
|
||||
'nothing-special
|
||||
self
|
||||
)
|
||||
)
|
||||
(target-look-at-me! :trans (vector+! (new 'stack-no-clear 'vector) (the-as vector (-> self root-override root-prim prim-core)) (new 'static 'vector :y 2048.0 :w 1.0)))
|
||||
(suspend)
|
||||
)
|
||||
#f
|
||||
|
@ -2700,6 +2700,12 @@ This commonly includes things such as:
|
||||
)
|
||||
)
|
||||
|
||||
;; PC PORT NOTE : added complete hook for collection bbush tasks where we wait for the hud to die first
|
||||
(set-subtask-hook! *game-info* 269 4
|
||||
(lambda :behavior task-manager ()
|
||||
(while (handle->process (-> self hud-counter))
|
||||
(suspend))))
|
||||
|
||||
(copy-hooks! (-> *game-info* sub-task-list 287) (-> *game-info* sub-task-list 269))
|
||||
|
||||
(copy-hooks! (-> *game-info* sub-task-list 305) (-> *game-info* sub-task-list 269))
|
||||
|
@ -872,9 +872,7 @@
|
||||
(if (logtest? (-> self flags) 512)
|
||||
(los-control-method-9 (-> self los) gp-0 (the-as vector #f) 1638.4)
|
||||
)
|
||||
(if *target*
|
||||
(look-at! (-> *target* neck) (the-as vector (-> self root-override root-prim prim-core)) 'attacking self)
|
||||
)
|
||||
(target-look-at-me! :trans (the-as vector (-> self root-override root-prim prim-core)) :message 'attacking)
|
||||
(set! (-> self aim-pos 0 quad) (-> self aim-pos-2 quad))
|
||||
(set! (-> self aim-pos-2 quad) (-> (get-trans gp-0 0) quad))
|
||||
(let ((s5-2 (-> self aim-pos-1))
|
||||
|
54
test/decompiler/reference/jak2/engine/ai/enemy_REF.gc
generated
vendored
54
test/decompiler/reference/jak2/engine/ai/enemy_REF.gc
generated
vendored
@ -305,60 +305,60 @@
|
||||
|
||||
;; definition for method 55 of type enemy
|
||||
;; WARN: Return type mismatch int vs none.
|
||||
(defmethod track-target! enemy ((obj enemy))
|
||||
(defmethod track-target! enemy ((self enemy))
|
||||
"Does a lot of various things relating to interacting with the target
|
||||
- tracks when the enemy was last drawn
|
||||
- looks at the target and handles attacking
|
||||
@TODO Not extremely well understood yet"
|
||||
(with-pp
|
||||
(if (and (nonzero? (-> obj draw)) (logtest? (-> obj draw status) (draw-control-status on-screen)))
|
||||
(set! (-> obj last-draw-time) (-> pp clock frame-counter))
|
||||
(if (and (nonzero? (-> self draw)) (logtest? (-> self draw status) (draw-control-status on-screen)))
|
||||
(set! (-> self last-draw-time) (-> pp clock frame-counter))
|
||||
)
|
||||
(enemy-method-129 obj)
|
||||
(if (logtest? (enemy-flag use-trigger) (-> obj enemy-flags))
|
||||
(enemy-method-100 obj)
|
||||
(enemy-method-129 self)
|
||||
(if (logtest? (enemy-flag use-trigger) (-> self enemy-flags))
|
||||
(enemy-method-100 self)
|
||||
)
|
||||
(when *target*
|
||||
(if *target*
|
||||
(look-at!
|
||||
(-> *target* neck)
|
||||
(the-as vector (-> obj root-override2 root-prim prim-core))
|
||||
(if (logtest? (-> obj enemy-flags) (enemy-flag use-notice-distance))
|
||||
(the-as vector (-> self root-override2 root-prim prim-core))
|
||||
(if (logtest? (-> self enemy-flags) (enemy-flag use-notice-distance))
|
||||
'attacking
|
||||
)
|
||||
obj
|
||||
self
|
||||
)
|
||||
)
|
||||
)
|
||||
(when (nonzero? (-> obj neck))
|
||||
(when (logtest? (-> obj enemy-flags) (enemy-flag lock-focus))
|
||||
(let ((a0-9 (handle->process (-> obj focus handle))))
|
||||
(when (nonzero? (-> self neck))
|
||||
(when (logtest? (-> self enemy-flags) (enemy-flag lock-focus))
|
||||
(let ((a0-9 (handle->process (-> self focus handle))))
|
||||
(if a0-9
|
||||
(target-set! (-> obj neck) (get-trans (the-as process-focusable a0-9) 2))
|
||||
(target-set! (-> self neck) (get-trans (the-as process-focusable a0-9) 2))
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(when (and (logtest? (-> obj enemy-flags) (enemy-flag attackable-backup))
|
||||
(>= (- (-> pp clock frame-counter) (-> obj auto-reset-penetrate-time)) (seconds 0.1))
|
||||
(when (and (logtest? (-> self enemy-flags) (enemy-flag attackable-backup))
|
||||
(>= (- (-> pp clock frame-counter) (-> self auto-reset-penetrate-time)) (seconds 0.1))
|
||||
)
|
||||
(logclear! (-> obj enemy-flags) (enemy-flag attackable-backup))
|
||||
(set! (-> obj root-override2 penetrated-by) (get-penetrate-info obj))
|
||||
(logclear! (-> self enemy-flags) (enemy-flag attackable-backup))
|
||||
(set! (-> self root-override2 penetrated-by) (get-penetrate-info self))
|
||||
(let ((v1-48 0))
|
||||
(if (logtest? (penetrate knocked) (-> obj root-override2 penetrate-using))
|
||||
(if (logtest? (penetrate knocked) (-> self root-override2 penetrate-using))
|
||||
(set! v1-48 (logior (shl 1 32) v1-48))
|
||||
)
|
||||
(set! (-> obj root-override2 penetrate-using) (the-as penetrate v1-48))
|
||||
(set! (-> self root-override2 penetrate-using) (the-as penetrate v1-48))
|
||||
)
|
||||
)
|
||||
(if (logtest? (-> obj enemy-flags) (enemy-flag look-at-focus))
|
||||
(enemy-method-136 obj)
|
||||
(if (logtest? (-> self enemy-flags) (enemy-flag look-at-focus))
|
||||
(enemy-method-136 self)
|
||||
)
|
||||
(if (logtest? (enemy-flag trackable-backup directed-ready) (-> obj enemy-flags))
|
||||
(enemy-method-54 obj)
|
||||
(if (logtest? (enemy-flag trackable-backup directed-ready) (-> self enemy-flags))
|
||||
(enemy-method-54 self)
|
||||
)
|
||||
(if (and *debug-segment* (-> obj enemy-info debug-draw-neck) (nonzero? (-> obj neck)))
|
||||
(joint-mod-debug-draw (-> obj neck))
|
||||
(if (and *debug-segment* (-> self enemy-info debug-draw-neck) (nonzero? (-> self neck)))
|
||||
(joint-mod-debug-draw (-> self neck))
|
||||
)
|
||||
(ja-post)
|
||||
0
|
||||
@ -3901,7 +3901,3 @@ This commonly includes things such as:
|
||||
(defbehavior ja-group-index? enemy ((arg0 int))
|
||||
(ja-group? (-> self draw art-group data arg0))
|
||||
)
|
||||
|
||||
|
||||
|
||||
|
||||
|
68
test/decompiler/reference/jak2/engine/nav/nav-enemy_REF.gc
generated
vendored
68
test/decompiler/reference/jak2/engine/nav/nav-enemy_REF.gc
generated
vendored
@ -225,48 +225,48 @@
|
||||
|
||||
;; definition for method 55 of type nav-enemy
|
||||
;; WARN: Return type mismatch int vs none.
|
||||
(defmethod track-target! nav-enemy ((obj nav-enemy))
|
||||
(defmethod track-target! nav-enemy ((self nav-enemy))
|
||||
"Does a lot of various things relating to interacting with the target
|
||||
- tracks when the enemy was last drawn
|
||||
- looks at the target and handles attacking
|
||||
@TODO Not extremely well understood yet"
|
||||
(with-pp
|
||||
(if (and (nonzero? (-> obj draw)) (logtest? (-> obj draw status) (draw-control-status on-screen)))
|
||||
(set! (-> obj last-draw-time) (-> pp clock frame-counter))
|
||||
(if (and (nonzero? (-> self draw)) (logtest? (-> self draw status) (draw-control-status on-screen)))
|
||||
(set! (-> self last-draw-time) (-> pp clock frame-counter))
|
||||
)
|
||||
(enemy-method-129 obj)
|
||||
(when (logtest? (enemy-flag use-trigger) (-> obj enemy-flags))
|
||||
(if (-> obj nav)
|
||||
(enemy-method-100 obj)
|
||||
(enemy-method-103 obj)
|
||||
(enemy-method-129 self)
|
||||
(when (logtest? (enemy-flag use-trigger) (-> self enemy-flags))
|
||||
(if (-> self nav)
|
||||
(enemy-method-100 self)
|
||||
(enemy-method-103 self)
|
||||
)
|
||||
)
|
||||
(when *target*
|
||||
(if *target*
|
||||
(look-at!
|
||||
(-> *target* neck)
|
||||
(the-as vector (-> obj root-override2 root-prim prim-core))
|
||||
(if (logtest? (-> obj enemy-flags) (enemy-flag use-notice-distance))
|
||||
(the-as vector (-> self root-override2 root-prim prim-core))
|
||||
(if (logtest? (-> self enemy-flags) (enemy-flag use-notice-distance))
|
||||
'attacking
|
||||
)
|
||||
obj
|
||||
self
|
||||
)
|
||||
)
|
||||
)
|
||||
(when (nonzero? (-> obj neck))
|
||||
(when (nonzero? (-> self neck))
|
||||
(cond
|
||||
((logtest? (-> obj enemy-flags) (enemy-flag lock-focus))
|
||||
(let ((a0-10 (handle->process (-> obj focus handle))))
|
||||
((logtest? (-> self enemy-flags) (enemy-flag lock-focus))
|
||||
(let ((a0-10 (handle->process (-> self focus handle))))
|
||||
(if a0-10
|
||||
(target-set! (-> obj neck) (get-trans (the-as process-focusable a0-10) 2))
|
||||
(target-set! (-> self neck) (get-trans (the-as process-focusable a0-10) 2))
|
||||
)
|
||||
)
|
||||
)
|
||||
((logtest? (-> obj enemy-flags) (enemy-flag death-start))
|
||||
(let ((s5-1 (-> obj move-dest))
|
||||
((logtest? (-> self enemy-flags) (enemy-flag death-start))
|
||||
(let ((s5-1 (-> self move-dest))
|
||||
(v1-47 (vector<-cspace!
|
||||
(new 'stack-no-clear 'vector)
|
||||
(-> obj node-list data (-> obj enemy-info-override neck-joint))
|
||||
(-> self node-list data (-> self enemy-info-override neck-joint))
|
||||
)
|
||||
)
|
||||
(a1-6 (new 'stack-no-clear 'vector))
|
||||
@ -275,39 +275,39 @@
|
||||
(set! (-> a1-6 y) (-> v1-47 y))
|
||||
(set! (-> a1-6 z) (-> s5-1 z))
|
||||
(set! (-> a1-6 w) 1.0)
|
||||
(target-set! (-> obj neck) a1-6)
|
||||
(target-set! (-> self neck) a1-6)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(when (and (logtest? (-> obj enemy-flags) (enemy-flag attackable-backup))
|
||||
(>= (- (-> pp clock frame-counter) (-> obj auto-reset-penetrate-time)) (seconds 0.1))
|
||||
(when (and (logtest? (-> self enemy-flags) (enemy-flag attackable-backup))
|
||||
(>= (- (-> pp clock frame-counter) (-> self auto-reset-penetrate-time)) (seconds 0.1))
|
||||
)
|
||||
(logclear! (-> obj enemy-flags) (enemy-flag attackable-backup))
|
||||
(set! (-> obj root-override2 penetrated-by) (get-penetrate-info obj))
|
||||
(logclear! (-> self enemy-flags) (enemy-flag attackable-backup))
|
||||
(set! (-> self root-override2 penetrated-by) (get-penetrate-info self))
|
||||
(let ((v1-62 0))
|
||||
(if (logtest? (penetrate knocked) (-> obj root-override2 penetrate-using))
|
||||
(if (logtest? (penetrate knocked) (-> self root-override2 penetrate-using))
|
||||
(set! v1-62 (logior (shl 1 32) v1-62))
|
||||
)
|
||||
(set! (-> obj root-override2 penetrate-using) (the-as penetrate v1-62))
|
||||
(set! (-> self root-override2 penetrate-using) (the-as penetrate v1-62))
|
||||
)
|
||||
)
|
||||
(if (logtest? (-> obj enemy-flags) (enemy-flag look-at-focus))
|
||||
(enemy-method-136 obj)
|
||||
(if (logtest? (-> self enemy-flags) (enemy-flag look-at-focus))
|
||||
(enemy-method-136 self)
|
||||
)
|
||||
(if (logtest? (enemy-flag trackable-backup directed-ready) (-> obj enemy-flags))
|
||||
(enemy-method-54 obj)
|
||||
(if (logtest? (enemy-flag trackable-backup directed-ready) (-> self enemy-flags))
|
||||
(enemy-method-54 self)
|
||||
)
|
||||
(let ((v1-73 (-> obj restore-nav-radius-time)))
|
||||
(let ((v1-73 (-> self restore-nav-radius-time)))
|
||||
(when (nonzero? v1-73)
|
||||
(when (>= (-> pp clock frame-counter) v1-73)
|
||||
(set! (-> obj restore-nav-radius-time) 0)
|
||||
(set! (-> obj root-override2 nav-radius) (-> obj nav-radius-backup))
|
||||
(set! (-> self restore-nav-radius-time) 0)
|
||||
(set! (-> self root-override2 nav-radius) (-> self nav-radius-backup))
|
||||
)
|
||||
)
|
||||
)
|
||||
(if (and *debug-segment* (-> obj enemy-info-override debug-draw-neck) (nonzero? (-> obj neck)))
|
||||
(joint-mod-debug-draw (-> obj neck))
|
||||
(if (and *debug-segment* (-> self enemy-info-override debug-draw-neck) (nonzero? (-> self neck)))
|
||||
(joint-mod-debug-draw (-> self neck))
|
||||
)
|
||||
(ja-post)
|
||||
0
|
||||
|
Loading…
Reference in New Issue
Block a user