diff --git a/decompiler/config/all-types.gc b/decompiler/config/all-types.gc index 7d99cc3b6b..c75a94991c 100644 --- a/decompiler/config/all-types.gc +++ b/decompiler/config/all-types.gc @@ -19255,7 +19255,7 @@ (define-extern target-death-anim function) (define-extern death-movie-remap function) -(define-extern pov-camera-init-by-other function) +(define-extern pov-camera-init-by-other (function vector skeleton-group string int symbol pair none)) ;; TODO - not confirmed -- sunken-elevator (define-extern target-hit-effect function) (define-extern target-hit-setup-anim function) (define-extern target-hit-move function) @@ -22766,12 +22766,13 @@ ;; - Types (deftype plat-button (process-drawable) - ((go-back-if-lost-player? symbol :offset-assert 176) + ((root-override collide-shape-moving :score 100 :offset 112) + (go-back-if-lost-player? symbol :offset-assert 176) (grab-player? symbol :offset-assert 180) (should-grab-player? symbol :offset-assert 184) (path-pos float :offset-assert 188) (bidirectional? symbol :offset-assert 192) - (allow-auto-kill basic :offset-assert 196) + (allow-auto-kill symbol :offset-assert 196) (sound-id sound-id :offset-assert 200) (trans-off vector :inline :offset-assert 208) (spawn-pos vector :inline :offset-assert 224) @@ -22789,11 +22790,11 @@ (plat-button-move-upward () none 24) ;; state (dummy-25 () none 25) (dummy-26 () none 26) - (dummy-27 () none 27) + (TODO-RENAME-27 (_type_) none 27) (dummy-28 () none 28) - (dummy-29 () none 29) - (dummy-30 () none 30) - (dummy-31 () none 31) + (TODO-RENAME-29 (_type_) float 29) + (should-teleport? (_type_) symbol 30) + (TODO-RENAME-31 (_type_) none 31) ;; TODO - need to know super::14 (dummy-32 () none 32) ) ) @@ -34119,38 +34120,14 @@ ;; - Types -; (deftype village2cam (pov-camera) -; ((seq uint64 :offset-assert 224) -; ) -; :method-count-assert 30 -; :size-assert #xe8 -; :heap-base #x80 -; :flag-assert #x1e008000e8 -; ;; inherited inspect of pov-camera -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; (dummy-28 () none 28) -; (dummy-29 () none 29) -; ) -; ) +(deftype village2cam (pov-camera) + ((seq uint64 :offset-assert 224) + ) + :method-count-assert 30 + :heap-base #x80 + :size-assert #xe8 + :flag-assert #x1e008000e8 + ) (deftype pontoon (rigid-body-platform) ((anchor-point vector :inline :offset-assert 736) @@ -35154,43 +35131,16 @@ ;; - Types -; (deftype sunken-elevator (plat-button) -; ((play-at-top-going-up-camera? basic :offset-assert 240) -; (teleport-if-below-y float :offset-assert 244) -; (teleport-if-above-y float :offset-assert 248) -; ) -; :method-count-assert 33 -; :size-assert #xfc -; :heap-base #x90 -; :flag-assert #x21009000fc -; ;; inherited inspect of plat-button -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; (dummy-28 () none 28) -; (dummy-29 () none 29) -; (dummy-30 () none 30) -; (dummy-31 () none 31) -; (dummy-32 () none 32) -; ) -; ) +(deftype sunken-elevator (plat-button) + ((play-at-top-going-up-camera? symbol :offset-assert 240) + (teleport-if-below-y float :offset-assert 244) + (teleport-if-above-y float :offset-assert 248) + ) + :method-count-assert 33 + :heap-base #x90 + :size-assert #xfc + :flag-assert #x21009000fc + ) ;; - Unknowns diff --git a/decompiler/config/jak1_ntsc_black_label/anonymous_function_types.jsonc b/decompiler/config/jak1_ntsc_black_label/anonymous_function_types.jsonc index b8af2ca154..bbfc6d5c8c 100644 --- a/decompiler/config/jak1_ntsc_black_label/anonymous_function_types.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/anonymous_function_types.jsonc @@ -617,5 +617,12 @@ [9, "(function none :behavior plat-eco)"] ], + "sunken-elevator": [ + [3, "(function object :behavior sunken-elevator)"], + [4, "(function int :behavior sunken-elevator)"], + [5, "(function symbol :behavior sunken-elevator)"], + [6, "(function int :behavior sunken-elevator)"] + ], + "placeholder-do-not-add-below": [] } diff --git a/decompiler/config/jak1_ntsc_black_label/label_types.jsonc b/decompiler/config/jak1_ntsc_black_label/label_types.jsonc index 33110871f6..416edbae3c 100644 --- a/decompiler/config/jak1_ntsc_black_label/label_types.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/label_types.jsonc @@ -1549,6 +1549,19 @@ ["L10", "float", true] ], + "sunken-elevator": [ + ["L6", "_lambda_", true], + ["L9", "_lambda_", true], + ["L14", "_lambda_", true], + ["L16", "_lambda_", true], + ["L28", "state", true], + ["L29", "state", true], + ["L30", "state", true], + ["L32", "skeleton-group", true], + ["L35", "float", true], + ["L37", "float", true] + ], + // please do not add things after this entry! git is dumb. "object-file-that-doesnt-actually-exist-and-i-just-put-this-here-to-prevent-merge-conflicts-with-this-file": [] } diff --git a/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc b/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc index f1c2db344b..c15489868f 100644 --- a/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc @@ -917,5 +917,15 @@ [96, "vector"] ], + "(anon-function 3 sunken-elevator)": [ + [16, "vector"], + [32, "vector"], + [48, "event-message-block"] + ], + + "(method 29 sunken-elevator)": [ + [16, "vector"] + ], + "placeholder-do-not-add-below!": [] } diff --git a/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc b/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc index 5bfffac061..68b666b84d 100644 --- a/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc @@ -1889,6 +1889,35 @@ "(method 11 silostep)": [ [100, "v1", "art-joint-anim"] ], + + "(anon-function 6 sunken-elevator)": [ + [2, "v1", "(state none)"], + [2, "t9", "(function object)"], + [4, "t9", "(function object)"], + [40, "v1", "village2cam"], + [73, "v1", "village2cam"] + ], + + "(anon-function 5 sunken-elevator)": [ + [2, "v1", "(state none)"], + [2, "t9", "(function object)"], + [4, "t9", "(function object)"] + ], + + "(anon-function 4 sunken-elevator)": [ + [2, "v1", "(state none)"], + [2, "t9", "(function object)"], + [4, "t9", "(function object)"], + [49, "v1", "village2cam"] + ], + + "(anon-function 3 sunken-elevator)": [ + [13, "v0", "(state none)"] + ], + + "(method 27 sunken-elevator)": [ + [37, "v1", "art-joint-anim"] + ], "placeholder-do-not-add-below": [] } diff --git a/goal_src/engine/camera/pov-camera.gc b/goal_src/engine/camera/pov-camera.gc index 9552909341..10f2283cb2 100644 --- a/goal_src/engine/camera/pov-camera.gc +++ b/goal_src/engine/camera/pov-camera.gc @@ -5,3 +5,5 @@ ;; name in dgo: pov-camera ;; dgos: GAME, ENGINE +;; TODO - for sunken-elevator +(define-extern pov-camera-init-by-other (function vector skeleton-group string int symbol pair none)) ;; TODO - not confirmed -- sunken-elevator diff --git a/goal_src/engine/draw/process-drawable.gc b/goal_src/engine/draw/process-drawable.gc index 2beaa940de..560bad54c6 100644 --- a/goal_src/engine/draw/process-drawable.gc +++ b/goal_src/engine/draw/process-drawable.gc @@ -5,7 +5,7 @@ ;; name in dgo: process-drawable ;; dgos: GAME, ENGINE -;; TODO - for water-anim +;; TODO - for water-anim | sunken-elevator (define-extern ja-post (function int)) ;; TODO - for rigid-body (define-extern rider-post (function int)) diff --git a/goal_src/levels/common/plat-button.gc b/goal_src/levels/common/plat-button.gc index d00daa14f2..b216accab8 100644 --- a/goal_src/levels/common/plat-button.gc +++ b/goal_src/levels/common/plat-button.gc @@ -5,3 +5,37 @@ ;; name in dgo: plat-button ;; dgos: GAME, COMMON, L1 +;; TODO - for sunken-elevator +(deftype plat-button (process-drawable) + ((root-override collide-shape-moving :score 100 :offset 112) + (go-back-if-lost-player? symbol :offset-assert 176) + (grab-player? symbol :offset-assert 180) + (should-grab-player? symbol :offset-assert 184) + (path-pos float :offset-assert 188) + (bidirectional? symbol :offset-assert 192) + (allow-auto-kill symbol :offset-assert 196) + (sound-id sound-id :offset-assert 200) + (trans-off vector :inline :offset-assert 208) + (spawn-pos vector :inline :offset-assert 224) + ) + :method-count-assert 33 + :size-assert #xf0 + :heap-base #x80 + :flag-assert #x21008000f0 + ;; inherited inspect of process-drawable + (:methods + (plat-button-at-end () none 20) ;; state + (dummy-21 () none 21) + (plat-button-pressed () none 22) ;; state + (plat-button-move-downward () none 23) ;; state + (plat-button-move-upward () none 24) ;; state + (dummy-25 () none 25) + (dummy-26 () none 26) + (TODO-RENAME-27 (_type_) none 27) + (dummy-28 () none 28) + (TODO-RENAME-29 (_type_) float 29) + (should-teleport? (_type_) symbol 30) + (TODO-RENAME-31 (_type_) none 31) ;; TODO - need to know super::14 + (dummy-32 () none 32) + ) + ) diff --git a/goal_src/levels/village2/sunken-elevator.gc b/goal_src/levels/village2/sunken-elevator.gc index 9df4fe98e9..8a461e7ada 100644 --- a/goal_src/levels/village2/sunken-elevator.gc +++ b/goal_src/levels/village2/sunken-elevator.gc @@ -5,3 +5,401 @@ ;; name in dgo: sunken-elevator ;; dgos: L1, VI2 +;; definition of type sunken-elevator +(deftype sunken-elevator (plat-button) + ((play-at-top-going-up-camera? symbol :offset-assert 240) + (teleport-if-below-y float :offset-assert 244) + (teleport-if-above-y float :offset-assert 248) + ) + :heap-base #x90 + :method-count-assert 33 + :size-assert #xfc + :flag-assert #x21009000fc + ) + +(define-extern *sunken-elevator-sg* skeleton-group) + +;; failed to figure out what this is: +(let + ((v1-1 + (new 'static 'skeleton-group + :art-group-name "sunken-elevator" + :bounds + (new 'static 'vector :y -4096.0 :w 27033.6) + :version #x6 + ) + ) + ) + (set! (-> v1-1 jgeo) 0) + (set! (-> v1-1 janim) 2) + (set! (-> v1-1 mgeo 0) (the-as uint 1)) + (set! (-> v1-1 lod-dist 0) 4095996000.0) + (set! *sunken-elevator-sg* v1-1) + ) + +;; definition for method 30 of type sunken-elevator +(defmethod should-teleport? sunken-elevator ((obj sunken-elevator)) + (let ((f0-0 (-> (camera-pos) y))) + (case (-> obj path-pos) + ((0.0) + (if (< f0-0 (-> obj teleport-if-below-y)) + (return #t) + ) + ) + ((1.0) + (if (< (-> obj teleport-if-above-y) f0-0) + (return #t) + ) + ) + ) + ) + #f + ) + +;; failed to figure out what this is: +(let + ((gp-0 + (new 'static 'state + :name 'plat-button-pressed + :next #f + :exit #f + :code #f + :trans #f + :post #f + :enter #f + :event #f + ) + ) + ) + (inherit-state + gp-0 + (the-as state (method-of-type plat-button plat-button-pressed)) + ) + (method-set! sunken-elevator 22 (the-as function gp-0)) + (set! + (-> gp-0 enter) + (the-as + (function object object object object object object object) + (lambda :behavior sunken-elevator + () + (let + ((t9-0 + (the-as + function + (-> + (the-as (state none) (method-of-type plat-button plat-button-pressed)) + enter + ) + ) + ) + ) + (if + (the-as (function object object object object object object object) t9-0) + ((the-as (function object) t9-0)) + ) + ) + (case (-> self path-pos) + ((0.0) + (load-state-want-display-level 'sunken 'display) + (let ((gp-0 (get-process *default-dead-pool* village2cam #x4000))) + (set! (-> (the-as village2cam (-> (when gp-0 + (let + ((t9-3 + (method-of-type + village2cam + activate + ) + ) + ) + (t9-3 + (the-as village2cam gp-0) + self + 'village2cam + (the-as pointer #x70004000) + ) + ) + (run-function-in-process + gp-0 + pov-camera-init-by-other + (-> self spawn-pos) + *village2cam-sg* + "elevator-at-top-going-down" + 0 + #f + '() + ) + (-> gp-0 ppointer) + ) + 0 + ) + ) + seq + ) + (the-as uint 0) + ) + ) + 0 + ) + ((1.0) + (let* ((gp-1 (get-process *default-dead-pool* village2cam #x4000)) + (v1-10 (when gp-1 + (let ((t9-6 (method-of-type village2cam activate))) + (t9-6 + (the-as village2cam gp-1) + self + 'village2cam + (the-as pointer #x70004000) + ) + ) + (run-function-in-process + gp-1 + pov-camera-init-by-other + (-> self spawn-pos) + *village2cam-sg* + "elevator-at-top-going-down" + 0 + #f + '() + ) + (-> gp-1 ppointer) + ) + ) + (v0-5 1) + ) + (set! (-> (the-as village2cam (-> v1-10 0)) seq) (the-as uint v0-5)) + v0-5 + ) + ) + ) + ) + ) + ) + ) + +;; failed to figure out what this is: +(let + ((gp-1 + (new 'static 'state + :name 'plat-button-move-upward + :next #f + :exit #f + :code #f + :trans #f + :post #f + :enter #f + :event #f + ) + ) + ) + (inherit-state + gp-1 + (the-as state (method-of-type plat-button plat-button-move-upward)) + ) + (method-set! sunken-elevator 24 (the-as function gp-1)) + (set! + (-> gp-1 enter) + (the-as + (function object object object object object object object) + (lambda :behavior sunken-elevator + () + (let + ((t9-0 + (the-as + function + (-> + (the-as + (state none) + (method-of-type plat-button plat-button-move-upward) + ) + enter + ) + ) + ) + ) + (if + (the-as (function object object object object object object object) t9-0) + ((the-as (function object) t9-0)) + ) + ) + (let ((v0-1 #t)) + (set! (-> self play-at-top-going-up-camera?) v0-1) + v0-1 + ) + ) + ) + ) + (set! + (-> gp-1 trans) + (lambda :behavior sunken-elevator + () + (let + ((t9-0 + (-> + (the-as + (state none) + (method-of-type plat-button plat-button-move-upward) + ) + trans + ) + ) + ) + (if t9-0 + (t9-0) + ) + ) + (when + (and (-> self play-at-top-going-up-camera?) (>= 0.14 (-> self path-pos))) + (set! *teleport* #t) + (set! (-> self play-at-top-going-up-camera?) #f) + (load-state-want-display-level 'sunken 'special) + (let* ((gp-0 (get-process *default-dead-pool* village2cam #x4000)) + (v1-8 (when gp-0 + (let ((t9-3 (method-of-type village2cam activate))) + (t9-3 + (the-as village2cam gp-0) + self + 'village2cam + (the-as pointer #x70004000) + ) + ) + (run-function-in-process + gp-0 + pov-camera-init-by-other + (-> self spawn-pos) + *village2cam-sg* + "elevator-at-top-going-down" + 0 + #f + '() + ) + (-> gp-0 ppointer) + ) + ) + (v0-1 2) + ) + (set! (-> (the-as village2cam (-> v1-8 0)) seq) (the-as uint v0-1)) + v0-1 + ) + ) + ) + ) + ) + +;; failed to figure out what this is: +(let + ((gp-2 + (new 'static 'state + :name 'plat-button-move-downward + :next #f + :exit #f + :code #f + :trans #f + :post #f + :enter #f + :event #f + ) + ) + ) + (inherit-state + gp-2 + (the-as state (method-of-type plat-button plat-button-move-downward)) + ) + (method-set! sunken-elevator 23 (the-as function gp-2)) + (set! + (-> gp-2 trans) + (lambda :behavior sunken-elevator + () + (let ((s5-0 (new 'stack-no-clear 'vector)) + (gp-0 (new 'stack-no-clear 'vector)) + ) + (set! *teleport* #t) + (set! (-> s5-0 quad) (-> self root-override trans quad)) + (let + ((t9-1 + (-> (the-as (state none) (find-parent-method sunken-elevator 23)) trans) + ) + ) + (if t9-1 + (t9-1) + ) + ) + (vector-! gp-0 (-> self root-override trans) s5-0) + ) + (when (< (-> self path-pos) 0.9) + ((method-of-object (-> *target* control) dummy-28)) + (let ((a1-2 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-2 from) self) + (set! (-> a1-2 num-params) 0) + (set! (-> a1-2 message) 'reset-height) + (send-event-function *target* a1-2) + ) + ) + ) + ) + ) + +;; definition for method 29 of type sunken-elevator +(defmethod TODO-RENAME-29 sunken-elevator ((obj sunken-elevator)) + (set! (-> obj play-at-top-going-up-camera?) #f) + (let ((s5-0 (new 'stack-no-clear 'vector))) + (eval-path-curve! (-> obj path) s5-0 0.4 'interp) + (set! (-> obj teleport-if-above-y) (-> s5-0 y)) + (eval-path-curve! (-> obj path) s5-0 0.6 'interp) + (let ((f0-1 (-> s5-0 y))) + (set! (-> obj teleport-if-below-y) f0-1) + f0-1 + ) + ) + ) + +;; definition for method 27 of type sunken-elevator +(defmethod TODO-RENAME-27 sunken-elevator ((obj sunken-elevator)) + (ja-channel-set! 1) + (cond + (((method-of-object obj dummy-26)) + (let ((s5-0 (-> obj skel root-channel 0))) + (joint-control-channel-group-eval! + s5-0 + (the-as art-joint-anim (-> obj draw art-group data 2)) + num-func-identity + ) + (set! (-> s5-0 frame-num) 0.0) + ) + ) + (else + (let ((s5-1 (-> obj skel root-channel 0))) + (joint-control-channel-group-eval! + s5-1 + (the-as art-joint-anim (-> obj draw art-group data 2)) + num-func-identity + ) + (set! + (-> s5-1 frame-num) + (the + float + (+ + (-> + (the-as art-joint-anim (-> obj draw art-group data 2)) + data + 0 + length + ) + -1 + ) + ) + ) + ) + ) + ) + (ja-post) + (dummy-47 (-> obj root-override)) + (none) + ) + +;; definition for method 31 of type sunken-elevator +;; INFO: Return type mismatch int vs none. +(defmethod TODO-RENAME-31 sunken-elevator ((obj sunken-elevator)) + (dummy-14 obj *sunken-elevator-sg* '()) + 0 + (none) + ) diff --git a/goal_src/levels/village2/village2-obs.gc b/goal_src/levels/village2/village2-obs.gc index b814d73e23..e36c42bd1c 100644 --- a/goal_src/levels/village2/village2-obs.gc +++ b/goal_src/levels/village2/village2-obs.gc @@ -5,3 +5,13 @@ ;; name in dgo: village2-obs ;; dgos: L1, VI2 +;; TODO - for sunken-elevator +(deftype village2cam (pov-camera) + ((seq uint64 :offset-assert 224) + ) + :method-count-assert 30 + :heap-base #x80 + :size-assert #xe8 + :flag-assert #x1e008000e8 + ) +(define-extern *village2cam-sg* skeleton-group) diff --git a/test/decompiler/reference/levels/village2/sunken-elevator_REF.gc b/test/decompiler/reference/levels/village2/sunken-elevator_REF.gc new file mode 100644 index 0000000000..1af984e551 --- /dev/null +++ b/test/decompiler/reference/levels/village2/sunken-elevator_REF.gc @@ -0,0 +1,418 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type sunken-elevator +(deftype sunken-elevator (plat-button) + ((play-at-top-going-up-camera? symbol :offset-assert 240) + (teleport-if-below-y float :offset-assert 244) + (teleport-if-above-y float :offset-assert 248) + ) + :heap-base #x90 + :method-count-assert 33 + :size-assert #xfc + :flag-assert #x21009000fc + ) + +;; definition for method 3 of type sunken-elevator +(defmethod inspect sunken-elevator ((obj sunken-elevator)) + (let ((t9-0 (method-of-type plat-button inspect))) + (t9-0 obj) + ) + (format + #t + "~T~Tplay-at-top-going-up-camera?: ~A~%" + (-> obj play-at-top-going-up-camera?) + ) + (format #t "~T~Tteleport-if-below-y: ~f~%" (-> obj teleport-if-below-y)) + (format #t "~T~Tteleport-if-above-y: ~f~%" (-> obj teleport-if-above-y)) + obj + ) + +;; failed to figure out what this is: +(let + ((v1-1 + (new 'static 'skeleton-group + :art-group-name "sunken-elevator" + :bounds + (new 'static 'vector :y -4096.0 :w 27033.6) + :version #x6 + ) + ) + ) + (set! (-> v1-1 jgeo) 0) + (set! (-> v1-1 janim) 2) + (set! (-> v1-1 mgeo 0) (the-as uint 1)) + (set! (-> v1-1 lod-dist 0) 4095996000.0) + (set! *sunken-elevator-sg* v1-1) + ) + +;; definition for method 30 of type sunken-elevator +(defmethod should-teleport? sunken-elevator ((obj sunken-elevator)) + (let ((f0-0 (-> (camera-pos) y))) + (case (-> obj path-pos) + ((0.0) + (if (< f0-0 (-> obj teleport-if-below-y)) + (return #t) + ) + ) + ((1.0) + (if (< (-> obj teleport-if-above-y) f0-0) + (return #t) + ) + ) + ) + ) + #f + ) + +;; failed to figure out what this is: +(let + ((gp-0 + (new 'static 'state + :name 'plat-button-pressed + :next #f + :exit #f + :code #f + :trans #f + :post #f + :enter #f + :event #f + ) + ) + ) + (inherit-state + gp-0 + (the-as state (method-of-type plat-button plat-button-pressed)) + ) + (method-set! sunken-elevator 22 (the-as function gp-0)) + (set! + (-> gp-0 enter) + (the-as + (function object object object object object object object) + (lambda :behavior sunken-elevator + () + (let + ((t9-0 + (the-as + function + (-> + (the-as (state none) (method-of-type plat-button plat-button-pressed)) + enter + ) + ) + ) + ) + (if + (the-as (function object object object object object object object) t9-0) + ((the-as (function object) t9-0)) + ) + ) + (case (-> self path-pos) + ((0.0) + (load-state-want-display-level 'sunken 'display) + (let ((gp-0 (get-process *default-dead-pool* village2cam #x4000))) + (set! (-> (the-as village2cam (-> (when gp-0 + (let + ((t9-3 + (method-of-type + village2cam + activate + ) + ) + ) + (t9-3 + (the-as village2cam gp-0) + self + 'village2cam + (the-as pointer #x70004000) + ) + ) + (run-function-in-process + gp-0 + pov-camera-init-by-other + (-> self spawn-pos) + *village2cam-sg* + "elevator-at-top-going-down" + 0 + #f + '() + ) + (-> gp-0 ppointer) + ) + 0 + ) + ) + seq + ) + (the-as uint 0) + ) + ) + 0 + ) + ((1.0) + (let* ((gp-1 (get-process *default-dead-pool* village2cam #x4000)) + (v1-10 (when gp-1 + (let ((t9-6 (method-of-type village2cam activate))) + (t9-6 + (the-as village2cam gp-1) + self + 'village2cam + (the-as pointer #x70004000) + ) + ) + (run-function-in-process + gp-1 + pov-camera-init-by-other + (-> self spawn-pos) + *village2cam-sg* + "elevator-at-top-going-down" + 0 + #f + '() + ) + (-> gp-1 ppointer) + ) + ) + (v0-5 1) + ) + (set! (-> (the-as village2cam (-> v1-10 0)) seq) (the-as uint v0-5)) + v0-5 + ) + ) + ) + ) + ) + ) + ) + +;; failed to figure out what this is: +(let + ((gp-1 + (new 'static 'state + :name 'plat-button-move-upward + :next #f + :exit #f + :code #f + :trans #f + :post #f + :enter #f + :event #f + ) + ) + ) + (inherit-state + gp-1 + (the-as state (method-of-type plat-button plat-button-move-upward)) + ) + (method-set! sunken-elevator 24 (the-as function gp-1)) + (set! + (-> gp-1 enter) + (the-as + (function object object object object object object object) + (lambda :behavior sunken-elevator + () + (let + ((t9-0 + (the-as + function + (-> + (the-as + (state none) + (method-of-type plat-button plat-button-move-upward) + ) + enter + ) + ) + ) + ) + (if + (the-as (function object object object object object object object) t9-0) + ((the-as (function object) t9-0)) + ) + ) + (let ((v0-1 #t)) + (set! (-> self play-at-top-going-up-camera?) v0-1) + v0-1 + ) + ) + ) + ) + (set! + (-> gp-1 trans) + (lambda :behavior sunken-elevator + () + (let + ((t9-0 + (-> + (the-as + (state none) + (method-of-type plat-button plat-button-move-upward) + ) + trans + ) + ) + ) + (if t9-0 + (t9-0) + ) + ) + (when + (and (-> self play-at-top-going-up-camera?) (>= 0.14 (-> self path-pos))) + (set! *teleport* #t) + (set! (-> self play-at-top-going-up-camera?) #f) + (load-state-want-display-level 'sunken 'special) + (let* ((gp-0 (get-process *default-dead-pool* village2cam #x4000)) + (v1-8 (when gp-0 + (let ((t9-3 (method-of-type village2cam activate))) + (t9-3 + (the-as village2cam gp-0) + self + 'village2cam + (the-as pointer #x70004000) + ) + ) + (run-function-in-process + gp-0 + pov-camera-init-by-other + (-> self spawn-pos) + *village2cam-sg* + "elevator-at-top-going-down" + 0 + #f + '() + ) + (-> gp-0 ppointer) + ) + ) + (v0-1 2) + ) + (set! (-> (the-as village2cam (-> v1-8 0)) seq) (the-as uint v0-1)) + v0-1 + ) + ) + ) + ) + ) + +;; failed to figure out what this is: +(let + ((gp-2 + (new 'static 'state + :name 'plat-button-move-downward + :next #f + :exit #f + :code #f + :trans #f + :post #f + :enter #f + :event #f + ) + ) + ) + (inherit-state + gp-2 + (the-as state (method-of-type plat-button plat-button-move-downward)) + ) + (method-set! sunken-elevator 23 (the-as function gp-2)) + (set! + (-> gp-2 trans) + (lambda :behavior sunken-elevator + () + (let ((s5-0 (new 'stack-no-clear 'vector)) + (gp-0 (new 'stack-no-clear 'vector)) + ) + (set! *teleport* #t) + (set! (-> s5-0 quad) (-> self root-override trans quad)) + (let + ((t9-1 + (-> (the-as (state none) (find-parent-method sunken-elevator 23)) trans) + ) + ) + (if t9-1 + (t9-1) + ) + ) + (vector-! gp-0 (-> self root-override trans) s5-0) + ) + (when (< (-> self path-pos) 0.9) + ((method-of-object (-> *target* control) dummy-28)) + (let ((a1-2 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-2 from) self) + (set! (-> a1-2 num-params) 0) + (set! (-> a1-2 message) 'reset-height) + (send-event-function *target* a1-2) + ) + ) + ) + ) + ) + +;; definition for method 29 of type sunken-elevator +(defmethod TODO-RENAME-29 sunken-elevator ((obj sunken-elevator)) + (set! (-> obj play-at-top-going-up-camera?) #f) + (let ((s5-0 (new 'stack-no-clear 'vector))) + (eval-path-curve! (-> obj path) s5-0 0.4 'interp) + (set! (-> obj teleport-if-above-y) (-> s5-0 y)) + (eval-path-curve! (-> obj path) s5-0 0.6 'interp) + (let ((f0-1 (-> s5-0 y))) + (set! (-> obj teleport-if-below-y) f0-1) + f0-1 + ) + ) + ) + +;; definition for method 27 of type sunken-elevator +(defmethod TODO-RENAME-27 sunken-elevator ((obj sunken-elevator)) + (ja-channel-set! 1) + (cond + (((method-of-object obj dummy-26)) + (let ((s5-0 (-> obj skel root-channel 0))) + (joint-control-channel-group-eval! + s5-0 + (the-as art-joint-anim (-> obj draw art-group data 2)) + num-func-identity + ) + (set! (-> s5-0 frame-num) 0.0) + ) + ) + (else + (let ((s5-1 (-> obj skel root-channel 0))) + (joint-control-channel-group-eval! + s5-1 + (the-as art-joint-anim (-> obj draw art-group data 2)) + num-func-identity + ) + (set! + (-> s5-1 frame-num) + (the + float + (+ + (-> + (the-as art-joint-anim (-> obj draw art-group data 2)) + data + 0 + length + ) + -1 + ) + ) + ) + ) + ) + ) + (ja-post) + (dummy-47 (-> obj root-override)) + (none) + ) + +;; definition for method 31 of type sunken-elevator +;; INFO: Return type mismatch int vs none. +(defmethod TODO-RENAME-31 sunken-elevator ((obj sunken-elevator)) + (dummy-14 obj *sunken-elevator-sg* '()) + 0 + (none) + ) + + + +