[jak2] allow going to metal head nest after winning game (#2753)

This is a major deviation from the original game, which did not have any
way to access the nest after beating Metal Kor as the air train gets
hidden when he is beaten. This was mostly annoying because there are
precursor orbs in that level that you might miss.

This makes it so the air train can once again be used to enter the nest
even after beating Metal Kor. The rest of the level remains mostly the
same, except the Rift Ring does not spawn and an invisible wall is added
to the Metal Kor arena to prevent you from entering it as you are
normally unable to leave it anyway.
This commit is contained in:
ManDude 2023-06-19 19:58:01 +01:00 committed by GitHub
parent 910681bde8
commit 53050fabc1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
12 changed files with 76 additions and 36 deletions

View file

@ -5735,7 +5735,7 @@
(deftype level-vis-info (basic)
((level level :offset-assert 4)
(from-level level :offset-assert 8)
(from-level symbol :offset-assert 8)
(from-bsp bsp-header :offset-assert 12)
(flags vis-info-flag :offset-assert 16)
(length uint32 :offset-assert 20)
@ -5928,8 +5928,8 @@
(declare-type text-id uint32)
(deftype level (basic)
((name symbol :offset-assert 4)
(load-name string :offset-assert 8)
(nickname string :offset-assert 12)
(load-name symbol :offset-assert 8)
(nickname symbol :offset-assert 12)
(index int32 :offset-assert 16)
(status symbol :offset-assert 20)
(borrow-level level 2 :offset-assert 24)
@ -6060,7 +6060,7 @@
(heap kheap :inline :offset-assert 112)
(sound-bank basic 4 :offset-assert 128)
(disk-load-timing? symbol :offset-assert 144)
(load-level basic :offset-assert 148)
(load-level symbol :offset-assert 148)
(load-size uint32 :offset-assert 152)
(load-time float :offset-assert 156)
(load-login-time float :offset-assert 160)

View file

@ -546,13 +546,13 @@
(a1-5 "~8D ~3D ~-8S #x~4X")
(a2-4 (-> obj extra perm aid))
(a3-3 (-> obj extra perm task))
(t0-3 (the-as object (-> obj extra level nickname)))
(t0-3 (-> obj extra level nickname))
)
(set! t0-3 (cond
((the-as string t0-3)
(empty)
t0-3
)
(t0-3
(empty)
t0-3
)
(else
(-> obj extra level name)
)

View file

@ -2618,7 +2618,12 @@
(set! (-> arg0 times 1 w) 1.0)
(update-mood-caustics arg0 2 (-> gp-1 rot) 10922.667 0.75 0.25)
(update-mood-caustics arg0 3 (-> gp-1 rot) 0.0 0.75 0.25)
(update-mood-pulse arg0 4 0 0.875 0.125 (* 196608.0 (-> self clock seconds-per-frame)) 0.0)
;; note : updated for pc port for nest revisit
(#if PC_PORT
(if (process-by-name "blocking-plane-nestb" *active-pool*)
(set! (-> arg0 times 4 w) 0.0)
(update-mood-pulse arg0 4 0 0.875 0.125 (* 196608.0 (-> self clock seconds-per-frame)) 0.0))
(update-mood-pulse arg0 4 0 0.875 0.125 (* 196608.0 (-> self clock seconds-per-frame)) 0.0))
(set! (-> arg0 times 5 w) (+ (-> gp-1 purple) (-> gp-1 purple-noise)))
(when (not (paused?))
(seek! (-> gp-1 purple) 0.0 (* 4.0 (-> self clock seconds-per-frame)))

View file

@ -152,7 +152,7 @@
(deftype level-vis-info (basic)
((level level :offset-assert 4)
(from-level level :offset-assert 8)
(from-level symbol :offset-assert 8)
(from-bsp bsp-header :offset-assert 12)
(flags vis-info-flag :offset-assert 16)
(length uint32 :offset-assert 20)
@ -262,8 +262,8 @@
(deftype level (basic)
((name symbol :offset-assert 4)
(load-name string :offset-assert 8)
(nickname string :offset-assert 12)
(load-name symbol :offset-assert 8)
(nickname symbol :offset-assert 12)
(index int32 :offset-assert 16)
(status symbol :offset-assert 20)
(borrow-level level 2 :offset-assert 24)
@ -380,7 +380,7 @@
(heap kheap :inline :offset-assert 112)
(sound-bank basic 4 :offset-assert 128)
(disk-load-timing? symbol :offset-assert 144)
(load-level basic :offset-assert 148)
(load-level symbol :offset-assert 148)
(load-size uint32 :offset-assert 152)
(load-time float :offset-assert 156)
(load-login-time float :offset-assert 160)

View file

@ -374,7 +374,7 @@ into 7 sections, which might explain the weird sizes in the center.
;; set up the level info
(set! (-> s5-1 info) s2-0)
(set! (-> s5-1 name) arg0)
(set! (-> s5-1 load-name) (the-as string s1-0))
(set! (-> s5-1 load-name) s1-0)
)
;; other setup from level-info
@ -1341,11 +1341,11 @@ into 7 sections, which might explain the weird sizes in the center.
;; final!
;; name
(set! (-> lev nickname) (the-as string (-> lev bsp nickname)))
(set! (-> lev nickname) (-> lev bsp nickname))
;; added: tombc has the wrong nickname in the bsp file...
(if (and (= (-> lev bsp name) 'tombc) (= (-> lev bsp nickname) 'toa))
(set! (-> lev nickname) (the-as string 'toc))
(set! (-> lev nickname) 'toc)
)
;; subdivide distances
@ -2808,7 +2808,7 @@ into 7 sections, which might explain the weird sizes in the center.
(set! (-> s2-1 from-bsp) (-> s4-3 bsp))
)
(else
(let ((v1-114 (level-get obj (the-as symbol (-> s2-1 from-level)))))
(let ((v1-114 (level-get obj (-> s2-1 from-level))))
(set! (-> s2-1 from-bsp) (if v1-114
(-> v1-114 bsp)
)
@ -2928,7 +2928,7 @@ into 7 sections, which might explain the weird sizes in the center.
(s4-5 *stdcon*)
(s3-2 "~0Kload ~16S ~5S ~5DK ~5,,2fs ~5,,2fs~1K ~5,,0f k/s~%")
(s2-2 (-> obj load-level))
(v1-180 (lookup-level-info (the-as symbol (-> obj load-level))))
(v1-180 (lookup-level-info (-> obj load-level)))
)
(s5-6
s4-5

View file

@ -770,6 +770,17 @@
(set! (-> self root-override trans quad) (-> arg1 quad))
)
(logior! (-> self mask) (process-mask actor-pause))
(#when PC_PORT
(when (string= (-> self name) "air-train-1")
(set! (-> (the (pointer pair) (get-tag-index-data arg0 2)))
'(cond
((task-closed? "nest-boss-resolution") '("nest-warp" (scene-play '("city-air-train-in-nest" "nest-air-train-out")) #f (want-anim "city-air-train-in-nest")))
((task-closed? "nest-get-to-gun-introduction") '("nest-warp" (scene-play '("city-air-train-in-nest" "nest-air-train-out")) #f (want-anim "city-air-train-in-nest")))
((task-closed? "dig-find-totem-introduction") '("caspad-warp" (scene-play '("city-air-train-in-caspad" "caspad-air-train-out")) #f (want-anim "city-air-train-in-caspad")))
((task-closed? "dig-knock-down-introduction") '("caspad-warp" (scene-play '("city-air-train-in-caspad" "caspad-air-train-out")) #f (want-anim "city-air-train-in-caspad"))))
)
)
)
(setup-fields self)
(go-virtual idle)
(none)

View file

@ -1751,12 +1751,38 @@ This commonly includes things such as:
(set-time-for-random-weather! *mood-control* 0.0 0.0)
)
(set! *nav-network* (the-as nav-network 0))
(#when PC_PORT
;; for nest revisit
(kill-by-name "blocking-plane-nestb" *active-pool*)
)
0
(none)
)
(defun nestb-activate ((arg0 level))
(nav-network-method-10 *nav-network* arg0 *nestb-adjacency*)
(#when PC_PORT
;; for nest revisit
(when (task-node-closed? (game-task-node nest-boss-resolution))
(script-eval '(begin
(kill "metalkor-1")
(kill "rift-ring-ingame-1")
(kill "crate-942")
(kill "crate-943")
(kill "crate-944")
(kill "crate-945")
(kill "crate-946")
(kill "crate-947")
(kill "crate-948")
(kill "crate-949")
))
(let ((wall-pts (new 'stack-no-clear 'inline-array 'vector 2)))
(set-vector! (-> wall-pts 0) (meters 172.4628) (meters 32) (meters -380.7990) 1.0)
(set-vector! (-> wall-pts 1) (meters 151.7022) (meters 32) (meters -417.1884) 1.0)
(process-spawn blocking-plane wall-pts (meters 60) :name "blocking-plane-nestb")
)
)
)
0
(none)
)

View file

@ -43,12 +43,12 @@
)
;; start writing text
(let* ((begin-y (- LINE_HEIGHT (* (-> inspect-info scroll-y) LINE_HEIGHT))) (cur-y begin-y) (y-adv 16))
(let* ((begin-y (- (* 2 LINE_HEIGHT) (* (-> inspect-info scroll-y) LINE_HEIGHT))) (cur-y begin-y) (y-adv LINE_HEIGHT))
(with-dma-buffer-add-bucket ((debug-buf (-> (current-frame) debug-buf))
(bucket-id debug-no-zbuf1))
;; basic info, actor id, etc
(draw-string-xy
(string-format "~3L~A~0L ~A~%tags: ~D size: ~D aid: #x~x~%R1/L1 scroll L3 toggle display-actor-info~%--------------------" (-> e type) name (length e) (asize-of e) (-> e aid))
(string-format "~3L~A~0L ~A~%tags: ~D size: ~D aid: #x~x level: ~S~%R1/L1 scroll L3 toggle display-actor-info~%--------------------" (-> e type) name (length e) (asize-of e) (-> e aid) (aif (-> e extra) (-> it level name)))
debug-buf 352 cur-y (font-color default) (font-flags shadow kerning middle))
(+! cur-y (* LINE_HEIGHT 4))
(cond

View file

@ -643,8 +643,6 @@
)
(when (-> self movie-mode?)
(if *debug-segment*
(format *stdcon* "subtitle2 movie-mode~%"))
(set! (-> self movie-gui) #f)
(set! (-> self movie-mode?) #f)
(clear (-> self movie-line))

View file

@ -667,13 +667,13 @@
(a1-5 "~8D ~3D ~-8S #x~4X")
(a2-4 (-> obj extra perm aid))
(a3-3 (-> obj extra perm task))
(t0-3 (the-as object (-> obj extra level nickname)))
(t0-3 (-> obj extra level nickname))
)
(set! t0-3 (cond
((the-as string t0-3)
(empty)
t0-3
)
(t0-3
(empty)
t0-3
)
(else
(-> obj extra level name)
)

View file

@ -4,7 +4,7 @@
;; definition of type level-vis-info
(deftype level-vis-info (basic)
((level level :offset-assert 4)
(from-level level :offset-assert 8)
(from-level symbol :offset-assert 8)
(from-bsp bsp-header :offset-assert 12)
(flags vis-info-flag :offset-assert 16)
(length uint32 :offset-assert 20)
@ -395,8 +395,8 @@
;; definition of type level
(deftype level (basic)
((name symbol :offset-assert 4)
(load-name string :offset-assert 8)
(nickname string :offset-assert 12)
(load-name symbol :offset-assert 8)
(nickname symbol :offset-assert 12)
(index int32 :offset-assert 16)
(status symbol :offset-assert 20)
(borrow-level level 2 :offset-assert 24)
@ -660,7 +660,7 @@
(heap kheap :inline :offset-assert 112)
(sound-bank basic 4 :offset-assert 128)
(disk-load-timing? symbol :offset-assert 144)
(load-level basic :offset-assert 148)
(load-level symbol :offset-assert 148)
(load-size uint32 :offset-assert 152)
(load-time float :offset-assert 156)
(load-login-time float :offset-assert 160)

View file

@ -242,7 +242,7 @@
)
(set! (-> s5-1 info) s2-0)
(set! (-> s5-1 name) arg0)
(set! (-> s5-1 load-name) (the-as string s1-0))
(set! (-> s5-1 load-name) s1-0)
)
(set! (-> s5-1 mood-func) (the-as (function mood-context float int none) (-> s5-1 info mood-func value)))
(set! (-> s5-1 mood-init) (the-as (function mood-context none) (-> s5-1 info mood-init value)))
@ -1033,7 +1033,7 @@
)
)
)
(set! (-> lev nickname) (the-as string (-> lev bsp nickname)))
(set! (-> lev nickname) (-> lev bsp nickname))
(let ((close-dist (-> lev bsp subdivide-close))
(far-dist (-> lev bsp subdivide-far))
)
@ -2339,7 +2339,7 @@
(set! (-> s2-1 from-bsp) (-> s4-3 bsp))
)
(else
(let ((v1-114 (level-get obj (the-as symbol (-> s2-1 from-level)))))
(let ((v1-114 (level-get obj (-> s2-1 from-level))))
(set! (-> s2-1 from-bsp) (if v1-114
(-> v1-114 bsp)
)
@ -2459,7 +2459,7 @@
(s4-5 *stdcon*)
(s3-2 "~0Kload ~16S ~5S ~5DK ~5,,2fs ~5,,2fs~1K ~5,,0f k/s~%")
(s2-2 (-> obj load-level))
(v1-180 (lookup-level-info (the-as symbol (-> obj load-level))))
(v1-180 (lookup-level-info (-> obj load-level)))
)
(s5-6
s4-5