diff --git a/decompiler/config/all-types.gc b/decompiler/config/all-types.gc index 2bf1cd1d25..fbd2e08124 100644 --- a/decompiler/config/all-types.gc +++ b/decompiler/config/all-types.gc @@ -865,6 +865,8 @@ (misty-bike-jump #x266) (misty-eco-challenge #x267) + (misty-teetertotter-bonk-dax-tutorial #x2a4) + (village2-gambler-money #x300) (village2-geologist-money #x301) (village2-warrior-money #x302) @@ -9901,15 +9903,15 @@ (attacker uint64 :offset-assert 48) ;; handle (invinc-time uint64 :offset-assert 56) (mask uint32 :offset-assert 64) - (mode basic :offset-assert 68) + (mode symbol :offset-assert 68) (shove-back meters :offset-assert 72) (shove-up meters :offset-assert 76) (speed meters :offset-assert 80) (dist meters :offset-assert 84) (control float :offset-assert 88) - (angle basic :offset-assert 92) + (angle symbol :offset-assert 92) (rotate-to degrees :offset-assert 96) - (prev-state basic :offset-assert 100) + (prev-state state :offset-assert 100) ) :method-count-assert 10 :size-assert #x68 @@ -17583,7 +17585,7 @@ (define-extern target-attack-up function) (define-extern find-ground-point function) -(define-extern default-collision-reaction function) +(define-extern default-collision-reaction (function collide-shape-moving collide-shape-intersect vector vector none)) ;; TODO - not completely confirmed (define-extern simple-collision-reaction function) (define-extern collide-shape-draw-debug-marks (function none)) (define-extern debug-report-col-stats function) @@ -33650,40 +33652,27 @@ ;; - Types -; (deftype teetertotter (process-drawable) -; ((launched-player basic :offset-assert 176) -; (in-launch-window basic :offset-assert 180) -; (rock-is-dangerous basic :offset-assert 184) -; ) -; :method-count-assert 20 -; :size-assert #xbc -; :flag-assert #x14005000bc -; ;; inherited inspect of process-drawable -; (: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) -; ) -; ) +(deftype teetertotter (process-drawable) + ((launched-player basic :offset-assert 176) + (in-launch-window basic :offset-assert 180) + (rock-is-dangerous basic :offset-assert 184) + ) + :method-count-assert 20 + :heap-base #x50 + :size-assert #xbc + :flag-assert #x14005000bc + ) ;; - Functions -(define-extern target-on-end-of-teetertotter? function) +(define-extern target-on-end-of-teetertotter? (function teetertotter symbol)) ;; - Unknowns (define-extern *teetertotter-sg* skeleton-group) -;;(define-extern teetertotter-idle object) ;; unknown type -;;(define-extern teetertotter-launch object) ;; unknown type -;;(define-extern teetertotter-bend object) ;; unknown type +(define-extern teetertotter-idle (state none)) ;; unknown type +(define-extern teetertotter-launch (state none)) ;; unknown type +(define-extern teetertotter-bend (state none)) ;; unknown type ;; ---------------------- 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 ba08ea0877..4f420a569f 100644 --- a/decompiler/config/jak1_ntsc_black_label/anonymous_function_types.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/anonymous_function_types.jsonc @@ -584,5 +584,13 @@ [2, "(function basic int basic event-message-block object :behavior camera-combiner)"] ], + "misty-teetertotter": [ + [1, "(function none :behavior teetertotter)"], + [2, "(function none :behavior teetertotter)"], + [3, "(function process int symbol event-message-block symbol :behavior teetertotter)"], + [4, "(function none :behavior teetertotter)"], + [5, "(function process int symbol event-message-block object :behavior teetertotter)"] + ], + "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 538426c8c4..f4322d8dfb 100644 --- a/decompiler/config/jak1_ntsc_black_label/label_types.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/label_types.jsonc @@ -1413,6 +1413,20 @@ ["L508", "float", true] ], + "misty-teetertotter": [ + ["L2", "_lambda_", true], + ["L4", "_lambda_", true], + ["L10", "_lambda_", true], + ["L15", "_lambda_", true], + ["L17", "_lambda_", true], + ["L24", "state", true], + ["L25", "state", true], + ["L26", "attack-info", true], + ["L27", "attack-info", true], + ["L28", "state", true], + ["L30", "skeleton-group", 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 7789fb60ad..6adaab310e 100644 --- a/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc @@ -820,6 +820,15 @@ "draw-ocean-transition-seams": [ [16, "sphere"] ], - + + "target-on-end-of-teetertotter?": [ + [16, "vector"], + [32, "vector"] + ], + + "(anon-function 3 misty-teetertotter)": [ + [16, "event-message-block"] + ], + "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 8ab0548d7a..28cca55245 100644 --- a/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc @@ -1787,9 +1787,13 @@ "draw-ocean-transition": [[255, "v1", "ocean-mid-mask"]], - // "ocean-trans-mask-ptrs-bit?": [ - // [[32, 41], "a0", "(pointer ocean-trans-mask)"] - // ], + "(anon-function 2 misty-teetertotter)": [ + [11, "v1", "art-joint-anim"] + ], + + "(anon-function 1 misty-teetertotter)": [ + [10, "v1", "art-joint-anim"] + ], "placeholder-do-not-add-below": [] } diff --git a/goal_src/engine/collide/collide-shape.gc b/goal_src/engine/collide/collide-shape.gc index 12d5f368c4..f86e799d3a 100644 --- a/goal_src/engine/collide/collide-shape.gc +++ b/goal_src/engine/collide/collide-shape.gc @@ -5,3 +5,5 @@ ;; name in dgo: collide-shape ;; dgos: GAME, ENGINE +;; TODO - for misty-teetertotter +(define-extern default-collision-reaction (function collide-shape-moving collide-shape-intersect vector vector none)) ;; TODO - not completely confirmed diff --git a/goal_src/engine/draw/process-drawable.gc b/goal_src/engine/draw/process-drawable.gc index 04c4d966d2..7e951a11ab 100644 --- a/goal_src/engine/draw/process-drawable.gc +++ b/goal_src/engine/draw/process-drawable.gc @@ -5,3 +5,7 @@ ;; name in dgo: process-drawable ;; dgos: GAME, ENGINE +;; TODO - for misty-teetertotter +(define-extern transform-post (function int)) +(define-extern ja-done? (function int symbol)) +(define-extern rider-post (function int)) diff --git a/goal_src/engine/entity/entity.gc b/goal_src/engine/entity/entity.gc index b2d79afba8..35b3dc49e2 100644 --- a/goal_src/engine/entity/entity.gc +++ b/goal_src/engine/entity/entity.gc @@ -117,3 +117,6 @@ ) (the-as entity-actor #f) ) + +;; TODO - for misty-teetertotter +(define-extern process-drawable-from-entity! (function process-drawable object none)) diff --git a/goal_src/engine/game/game-h.gc b/goal_src/engine/game/game-h.gc index 407fd8bd2e..9254b14a41 100644 --- a/goal_src/engine/game/game-h.gc +++ b/goal_src/engine/game/game-h.gc @@ -110,21 +110,21 @@ ) (deftype attack-info (structure) - ((trans vector :inline :offset-assert 0) - (vector vector :inline :offset-assert 16) - (intersection vector :inline :offset-assert 32) - (attacker uint64 :offset-assert 48) ;; handle - (invinc-time uint64 :offset-assert 56) - (mask uint32 :offset-assert 64) - (mode basic :offset-assert 68) - (shove-back meters :offset-assert 72) - (shove-up meters :offset-assert 76) - (speed meters :offset-assert 80) - (dist meters :offset-assert 84) - (control float :offset-assert 88) - (angle basic :offset-assert 92) - (rotate-to degrees :offset-assert 96) - (prev-state basic :offset-assert 100) + ((trans vector :inline :offset-assert 0) + (vector vector :inline :offset-assert 16) + (intersection vector :inline :offset-assert 32) + (attacker uint64 :offset-assert 48) ;; handle + (invinc-time uint64 :offset-assert 56) + (mask uint32 :offset-assert 64) + (mode symbol :offset-assert 68) + (shove-back meters :offset-assert 72) + (shove-up meters :offset-assert 76) + (speed meters :offset-assert 80) + (dist meters :offset-assert 84) + (control float :offset-assert 88) + (angle symbol :offset-assert 92) + (rotate-to degrees :offset-assert 96) + (prev-state state :offset-assert 100) ) :method-count-assert 10 :size-assert #x68 diff --git a/goal_src/engine/ui/text-h.gc b/goal_src/engine/ui/text-h.gc index fd5327f1cd..8c0663c823 100644 --- a/goal_src/engine/ui/text-h.gc +++ b/goal_src/engine/ui/text-h.gc @@ -88,6 +88,8 @@ (jungle-temple-door #x265) (misty-bike-jump #x266) (misty-eco-challenge #x267) + + (misty-teetertotter-bonk-dax-tutorial #x2a4) (village2-gambler-money #x300) (village2-geologist-money #x301) diff --git a/goal_src/levels/misty/misty-teetertotter.gc b/goal_src/levels/misty/misty-teetertotter.gc index c43589170d..332846954a 100644 --- a/goal_src/levels/misty/misty-teetertotter.gc +++ b/goal_src/levels/misty/misty-teetertotter.gc @@ -5,3 +5,475 @@ ;; name in dgo: misty-teetertotter ;; dgos: L1, MIS +;; definition of type teetertotter +(deftype teetertotter (process-drawable) + ((launched-player basic :offset-assert 176) + (in-launch-window basic :offset-assert 180) + (rock-is-dangerous basic :offset-assert 184) + ) + :heap-base #x50 + :method-count-assert 20 + :size-assert #xbc + :flag-assert #x14005000bc + ) + +(define-extern *teetertotter-sg* skeleton-group) +(define-extern teetertotter-idle (state none)) ;; unknown type +(define-extern teetertotter-launch (state none)) ;; unknown type +(define-extern teetertotter-bend (state none)) ;; unknown type + +;; failed to figure out what this is: +(let + ((v1-1 + (new 'static 'skeleton-group + :art-group-name "teetertotter" + :bounds (new 'static 'vector :w 32768.0) + :max-lod 2 + :version #x6 + ) + ) + ) + (set! (-> v1-1 jgeo) 0) + (set! (-> v1-1 janim) 4) + (set! (-> v1-1 mgeo 0) (the-as uint 1)) + (set! (-> v1-1 lod-dist 0) 81920.0) + (set! (-> v1-1 mgeo 1) (the-as uint 2)) + (set! (-> v1-1 lod-dist 1) 163840.0) + (set! (-> v1-1 mgeo 2) (the-as uint 3)) + (set! (-> v1-1 lod-dist 2) 4095996000.0) + (set! *teetertotter-sg* v1-1) + ) + +;; definition for function target-on-end-of-teetertotter? +;; Used lq/sq +(defun target-on-end-of-teetertotter? ((arg0 teetertotter)) + (let + ((gp-1 + (vector-! + (new-stack-vector0) + (-> *target* control trans) + (-> arg0 root trans) + ) + ) + ) + (if + (< + (vector-dot + (vector-x-quaternion! (new-stack-vector0) (-> arg0 root quat)) + gp-1 + ) + -8192.0 + ) + #t + ) + ) + ) + +;; failed to figure out what this is: +(let + ((v1-3 + (new 'static 'state + :name 'teetertotter-idle + :next #f + :exit #f + :code #f + :trans #f + :post #f + :enter #f + :event #f + ) + ) + ) + (set! teetertotter-idle (the-as (state none) v1-3)) + (set! + (-> v1-3 event) + (lambda :behavior teetertotter + ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (cond + ((= v1-0 'attack) + (case (-> arg3 param 1) + (('flop) + (when (target-on-end-of-teetertotter? self) + (set! (-> self in-launch-window) #f) + (increment-success-for-hint + (the-as level-hint-control 676) + ) + (go teetertotter-launch) + ) + ) + ) + ) + ((= v1-0 'bonk) + (when (target-on-end-of-teetertotter? self) + (level-hint-spawn + (game-text-id misty-teetertotter-bonk-dax-tutorial) + "sksp0070" + #f + *entity-pool* + 0 + ) + (go teetertotter-bend) + ) + ) + ) + ) + ) + ) + ) + (set! + (-> v1-3 code) + (lambda :behavior teetertotter () (let ((gp-0 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-0 + (the-as + art-joint-anim + (-> self draw art-group data 4) + ) + num-func-identity + ) + (set! (-> gp-0 frame-num) 0.0) + ) + (while #t + (suspend) + ) + (none) + ) + ) + (set! (-> v1-3 post) transform-post) + ) + +;; failed to figure out what this is: +(let + ((v1-4 + (new 'static 'state + :name 'teetertotter-launch + :next #f + :exit #f + :code #f + :trans #f + :post #f + :enter #f + :event #f + ) + ) + ) + (set! teetertotter-launch (the-as (state none) v1-4)) + (set! + (-> v1-4 event) + (lambda :behavior teetertotter + ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (when (= arg2 'touch) + (-> arg3 param 0) + (let ((t9-0 (method-of-type touching-shapes-entry dummy-12))) + (-> self root) + 1 + (when (and (t9-0) (-> self rock-is-dangerous)) + (let ((a1-2 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-2 from) self) + (set! (-> a1-2 num-params) 2) + (set! (-> a1-2 message) 'attack) + (set! (-> a1-2 param 0) (-> arg3 param 0)) + (let ((a0-2 (new 'static 'attack-info :mask #x20))) + (set! (-> a0-2 mode) 'deadly) + (set! (-> a1-2 param 1) (the-as uint a0-2)) + ) + (send-event-function arg0 a1-2) + ) + ) + ) + (-> arg3 param 0) + (let ((t9-2 (method-of-type touching-shapes-entry dummy-12))) + (-> self root) + 2 + (when + (and + (t9-2) + (target-on-end-of-teetertotter? self) + (not (-> self launched-player)) + (-> self in-launch-window) + ) + (let ((a1-4 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-4 from) self) + (set! (-> a1-4 num-params) 2) + (set! (-> a1-4 message) 'shove) + (set! (-> a1-4 param 0) (the-as uint #f)) + (let ((v1-16 (new 'static 'attack-info :mask #xcc0))) + (set! (-> v1-16 shove-back) 0.0) + (set! (-> v1-16 shove-up) 53248.0) + (set! (-> v1-16 angle) 'jump) + (set! (-> v1-16 control) 1.0) + (set! (-> a1-4 param 1) (the-as uint v1-16)) + ) + (when (send-event-function arg0 a1-4) + (let ((v0-0 #t)) + (set! (-> self launched-player) v0-0) + v0-0 + ) + ) + ) + ) + ) + ) + ) + ) + (set! + (-> v1-4 code) + (lambda :behavior teetertotter + () + (local-vars (v1-16 symbol) (f0-4 float)) + (set! (-> self launched-player) #f) + (let ((a0-0 (-> self skel root-channel 0))) + (set! + (-> a0-0 frame-group) + (the-as art-joint-anim (-> self draw art-group data 4)) + ) + (set! + (-> a0-0 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 4)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-0 param 1) 1.0) + (set! (-> a0-0 frame-num) 0.0) + (joint-control-channel-group! + a0-0 + (the-as art-joint-anim (-> self draw art-group data 4)) + num-func-seek! + ) + ) + (until (begin + (set! (-> self rock-is-dangerous) (and v1-16 (>= 76.0 f0-4))) + (suspend) + (let ((a0-2 (-> self skel root-channel 0))) + (set! + (-> a0-2 param 0) + (the float (+ (-> a0-2 frame-group data 0 length) -1)) + ) + (set! (-> a0-2 param 1) 1.0) + (joint-control-channel-group-eval! + a0-2 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (ja-done? 0) + ) + (set! f0-4 (ja-aframe-num 0)) + (set! (-> self in-launch-window) (and (>= f0-4 76.0) (>= 82.0 f0-4))) + (set! v1-16 (>= f0-4 12.0)) + ) + (go teetertotter-idle) + (none) + ) + ) + (set! (-> v1-4 post) rider-post) + ) + +;; failed to figure out what this is: +(let + ((v1-5 + (new 'static 'state + :name 'teetertotter-bend + :next #f + :exit #f + :code #f + :trans #f + :post #f + :enter #f + :event #f + ) + ) + ) + (set! teetertotter-bend (the-as (state none) v1-5)) + (set! + (-> v1-5 code) + (lambda :behavior teetertotter () (let ((a0-0 (-> self skel root-channel 0))) + (set! + (-> a0-0 frame-group) + (the-as + art-joint-anim + (-> self draw art-group data 5) + ) + ) + (set! + (-> a0-0 param 0) + (the + float + (+ + (-> + (the-as + art-joint-anim + (-> self draw art-group data 5) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-0 param 1) 1.0) + (set! (-> a0-0 frame-num) 0.0) + (joint-control-channel-group! + a0-0 + (the-as + art-joint-anim + (-> self draw art-group data 5) + ) + num-func-seek! + ) + ) + (until (begin + (suspend) + (let ((a0-1 (-> self skel root-channel 0))) + (set! + (-> a0-1 param 0) + (the float (+ (-> a0-1 frame-group data 0 length) -1)) + ) + (set! (-> a0-1 param 1) 1.0) + (joint-control-channel-group-eval! + a0-1 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (ja-done? 0) + ) + (empty) + ) + (go teetertotter-idle) + (none) + ) + ) + (set! (-> v1-5 post) rider-post) + ) + +;; definition for method 11 of type teetertotter +(defmethod dummy-method-11 teetertotter ((obj teetertotter) (arg0 object)) + (let + ((s4-0 + (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player)) + ) + ) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) default-collision-reaction) + (set! (-> s4-0 no-reaction) nothing) + (let ((t9-2 (method-of-object s4-0 dummy-29))) + 1 + (t9-2) + ) + (let ((s3-0 (new 'process 'collide-shape-prim-group s4-0 (the-as uint 5) 0))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 2048)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 1)) + (set-vector! (-> s3-0 local-sphere) 0.0 12288.0 0.0 36864.0) + ((method-of-object s4-0 dummy-46)) + (let ((s2-0 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 1)))) + (set! (-> s2-0 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-0 collide-with) (the-as uint 16)) + (set! (-> s2-0 prim-core action) (the-as uint 1)) + (set! (-> s2-0 prim-core offense) 4) + (set! (-> s2-0 transform-index) 5) + (set-vector! (-> s2-0 local-sphere) -4096.0 2048.0 0.0 5120.0) + ) + ((method-of-object s3-0 dummy-28)) + (let + ((s2-1 + (new + 'process + 'collide-shape-prim-mesh + s4-0 + (the-as uint 0) + (the-as uint 2) + ) + ) + ) + (set! (-> s2-1 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-1 collide-with) (the-as uint 16)) + (set! (-> s2-1 prim-core action) (the-as uint 3)) + (set! (-> s2-1 prim-core offense) 4) + (set! (-> s2-1 transform-index) 7) + (set-vector! (-> s2-1 local-sphere) 0.0 0.0 0.0 32768.0) + ) + ((method-of-object s3-0 dummy-28)) + (let + ((s2-2 + (new + 'process + 'collide-shape-prim-mesh + s4-0 + (the-as uint 1) + (the-as uint 0) + ) + ) + ) + (set! (-> s2-2 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-2 collide-with) (the-as uint 16)) + (set! (-> s2-2 prim-core action) (the-as uint 1)) + (set! (-> s2-2 prim-core offense) 4) + (set! (-> s2-2 transform-index) 4) + (set-vector! (-> s2-2 local-sphere) 0.0 0.0 0.0 32768.0) + ) + ((method-of-object s3-0 dummy-28)) + (let + ((s2-3 + (new + 'process + 'collide-shape-prim-mesh + s4-0 + (the-as uint 2) + (the-as uint 0) + ) + ) + ) + (set! (-> s2-3 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-3 collide-with) (the-as uint 16)) + (set! (-> s2-3 prim-core action) (the-as uint 1)) + (set! (-> s2-3 prim-core offense) 4) + (set! (-> s2-3 transform-index) 3) + (set-vector! (-> s2-3 local-sphere) 0.0 0.0 0.0 32768.0) + ) + ((method-of-object s3-0 dummy-28)) + (let + ((s2-4 + (new + 'process + 'collide-shape-prim-mesh + s4-0 + (the-as uint 3) + (the-as uint 2) + ) + ) + ) + (set! (-> s2-4 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-4 collide-with) (the-as uint 16)) + (set! (-> s2-4 prim-core action) (the-as uint 3)) + (set! (-> s2-4 prim-core offense) 4) + (set! (-> s2-4 transform-index) 3) + (set-vector! (-> s2-4 local-sphere) 0.0 0.0 0.0 32768.0) + ) + ((method-of-object s3-0 dummy-28)) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + ((method-of-object s4-0 dummy-50)) + (set! (-> obj root) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (dummy-14 obj *teetertotter-sg* '()) + (set! (-> obj launched-player) #f) + (set! (-> obj in-launch-window) #f) + (set! (-> obj rock-is-dangerous) #f) + (go teetertotter-idle) + (none) + ) diff --git a/test/decompiler/reference/engine/game/game-h_REF.gc b/test/decompiler/reference/engine/game/game-h_REF.gc index 04155d0695..b5c0922cd5 100644 --- a/test/decompiler/reference/engine/game/game-h_REF.gc +++ b/test/decompiler/reference/engine/game/game-h_REF.gc @@ -126,15 +126,15 @@ (attacker uint64 :offset-assert 48) (invinc-time uint64 :offset-assert 56) (mask uint32 :offset-assert 64) - (mode basic :offset-assert 68) + (mode symbol :offset-assert 68) (shove-back meters :offset-assert 72) (shove-up meters :offset-assert 76) (speed meters :offset-assert 80) (dist meters :offset-assert 84) (control float :offset-assert 88) - (angle basic :offset-assert 92) + (angle symbol :offset-assert 92) (rotate-to degrees :offset-assert 96) - (prev-state basic :offset-assert 100) + (prev-state state :offset-assert 100) ) :method-count-assert 10 :size-assert #x68 diff --git a/test/decompiler/reference/levels/misty/misty-teetertotter_REF.gc b/test/decompiler/reference/levels/misty/misty-teetertotter_REF.gc new file mode 100644 index 0000000000..5dde03778a --- /dev/null +++ b/test/decompiler/reference/levels/misty/misty-teetertotter_REF.gc @@ -0,0 +1,485 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type teetertotter +(deftype teetertotter (process-drawable) + ((launched-player basic :offset-assert 176) + (in-launch-window basic :offset-assert 180) + (rock-is-dangerous basic :offset-assert 184) + ) + :heap-base #x50 + :method-count-assert 20 + :size-assert #xbc + :flag-assert #x14005000bc + ) + +;; definition for method 3 of type teetertotter +(defmethod inspect teetertotter ((obj teetertotter)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tlaunched-player: ~A~%" (-> obj launched-player)) + (format #t "~T~Tin-launch-window: ~A~%" (-> obj in-launch-window)) + (format #t "~T~Trock-is-dangerous: ~A~%" (-> obj rock-is-dangerous)) + obj + ) + +;; failed to figure out what this is: +(let + ((v1-1 + (new 'static 'skeleton-group + :art-group-name "teetertotter" + :bounds (new 'static 'vector :w 32768.0) + :max-lod 2 + :version #x6 + ) + ) + ) + (set! (-> v1-1 jgeo) 0) + (set! (-> v1-1 janim) 4) + (set! (-> v1-1 mgeo 0) (the-as uint 1)) + (set! (-> v1-1 lod-dist 0) 81920.0) + (set! (-> v1-1 mgeo 1) (the-as uint 2)) + (set! (-> v1-1 lod-dist 1) 163840.0) + (set! (-> v1-1 mgeo 2) (the-as uint 3)) + (set! (-> v1-1 lod-dist 2) 4095996000.0) + (set! *teetertotter-sg* v1-1) + ) + +;; definition for function target-on-end-of-teetertotter? +;; Used lq/sq +(defun target-on-end-of-teetertotter? ((arg0 teetertotter)) + (let + ((gp-1 + (vector-! + (new-stack-vector0) + (-> *target* control trans) + (-> arg0 root trans) + ) + ) + ) + (if + (< + (vector-dot + (vector-x-quaternion! (new-stack-vector0) (-> arg0 root quat)) + gp-1 + ) + -8192.0 + ) + #t + ) + ) + ) + +;; failed to figure out what this is: +(let + ((v1-3 + (new 'static 'state + :name 'teetertotter-idle + :next #f + :exit #f + :code #f + :trans #f + :post #f + :enter #f + :event #f + ) + ) + ) + (set! teetertotter-idle (the-as (state none) v1-3)) + (set! + (-> v1-3 event) + (lambda :behavior teetertotter + ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (cond + ((= v1-0 'attack) + (case (-> arg3 param 1) + (('flop) + (when (target-on-end-of-teetertotter? self) + (set! (-> self in-launch-window) #f) + (increment-success-for-hint + (the-as level-hint-control 676) + ) + (go teetertotter-launch) + ) + ) + ) + ) + ((= v1-0 'bonk) + (when (target-on-end-of-teetertotter? self) + (level-hint-spawn + (game-text-id misty-teetertotter-bonk-dax-tutorial) + "sksp0070" + #f + *entity-pool* + 0 + ) + (go teetertotter-bend) + ) + ) + ) + ) + ) + ) + ) + (set! + (-> v1-3 code) + (lambda :behavior teetertotter () (let ((gp-0 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-0 + (the-as + art-joint-anim + (-> self draw art-group data 4) + ) + num-func-identity + ) + (set! (-> gp-0 frame-num) 0.0) + ) + (while #t + (suspend) + ) + (none) + ) + ) + (set! (-> v1-3 post) transform-post) + ) + +;; failed to figure out what this is: +(let + ((v1-4 + (new 'static 'state + :name 'teetertotter-launch + :next #f + :exit #f + :code #f + :trans #f + :post #f + :enter #f + :event #f + ) + ) + ) + (set! teetertotter-launch (the-as (state none) v1-4)) + (set! + (-> v1-4 event) + (lambda :behavior teetertotter + ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (when (= arg2 'touch) + (-> arg3 param 0) + (let ((t9-0 (method-of-type touching-shapes-entry dummy-12))) + (-> self root) + 1 + (when (and (t9-0) (-> self rock-is-dangerous)) + (let ((a1-2 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-2 from) self) + (set! (-> a1-2 num-params) 2) + (set! (-> a1-2 message) 'attack) + (set! (-> a1-2 param 0) (-> arg3 param 0)) + (let ((a0-2 (new 'static 'attack-info :mask #x20))) + (set! (-> a0-2 mode) 'deadly) + (set! (-> a1-2 param 1) (the-as uint a0-2)) + ) + (send-event-function arg0 a1-2) + ) + ) + ) + (-> arg3 param 0) + (let ((t9-2 (method-of-type touching-shapes-entry dummy-12))) + (-> self root) + 2 + (when + (and + (t9-2) + (target-on-end-of-teetertotter? self) + (not (-> self launched-player)) + (-> self in-launch-window) + ) + (let ((a1-4 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-4 from) self) + (set! (-> a1-4 num-params) 2) + (set! (-> a1-4 message) 'shove) + (set! (-> a1-4 param 0) (the-as uint #f)) + (let ((v1-16 (new 'static 'attack-info :mask #xcc0))) + (set! (-> v1-16 shove-back) 0.0) + (set! (-> v1-16 shove-up) 53248.0) + (set! (-> v1-16 angle) 'jump) + (set! (-> v1-16 control) 1.0) + (set! (-> a1-4 param 1) (the-as uint v1-16)) + ) + (when (send-event-function arg0 a1-4) + (let ((v0-0 #t)) + (set! (-> self launched-player) v0-0) + v0-0 + ) + ) + ) + ) + ) + ) + ) + ) + (set! + (-> v1-4 code) + (lambda :behavior teetertotter + () + (local-vars (v1-16 symbol) (f0-4 float)) + (set! (-> self launched-player) #f) + (let ((a0-0 (-> self skel root-channel 0))) + (set! + (-> a0-0 frame-group) + (the-as art-joint-anim (-> self draw art-group data 4)) + ) + (set! + (-> a0-0 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 4)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-0 param 1) 1.0) + (set! (-> a0-0 frame-num) 0.0) + (joint-control-channel-group! + a0-0 + (the-as art-joint-anim (-> self draw art-group data 4)) + num-func-seek! + ) + ) + (until (begin + (set! (-> self rock-is-dangerous) (and v1-16 (>= 76.0 f0-4))) + (suspend) + (let ((a0-2 (-> self skel root-channel 0))) + (set! + (-> a0-2 param 0) + (the float (+ (-> a0-2 frame-group data 0 length) -1)) + ) + (set! (-> a0-2 param 1) 1.0) + (joint-control-channel-group-eval! + a0-2 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (ja-done? 0) + ) + (set! f0-4 (ja-aframe-num 0)) + (set! (-> self in-launch-window) (and (>= f0-4 76.0) (>= 82.0 f0-4))) + (set! v1-16 (>= f0-4 12.0)) + ) + (go teetertotter-idle) + (none) + ) + ) + (set! (-> v1-4 post) rider-post) + ) + +;; failed to figure out what this is: +(let + ((v1-5 + (new 'static 'state + :name 'teetertotter-bend + :next #f + :exit #f + :code #f + :trans #f + :post #f + :enter #f + :event #f + ) + ) + ) + (set! teetertotter-bend (the-as (state none) v1-5)) + (set! + (-> v1-5 code) + (lambda :behavior teetertotter () (let ((a0-0 (-> self skel root-channel 0))) + (set! + (-> a0-0 frame-group) + (the-as + art-joint-anim + (-> self draw art-group data 5) + ) + ) + (set! + (-> a0-0 param 0) + (the + float + (+ + (-> + (the-as + art-joint-anim + (-> self draw art-group data 5) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-0 param 1) 1.0) + (set! (-> a0-0 frame-num) 0.0) + (joint-control-channel-group! + a0-0 + (the-as + art-joint-anim + (-> self draw art-group data 5) + ) + num-func-seek! + ) + ) + (until (begin + (suspend) + (let ((a0-1 (-> self skel root-channel 0))) + (set! + (-> a0-1 param 0) + (the float (+ (-> a0-1 frame-group data 0 length) -1)) + ) + (set! (-> a0-1 param 1) 1.0) + (joint-control-channel-group-eval! + a0-1 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (ja-done? 0) + ) + (empty) + ) + (go teetertotter-idle) + (none) + ) + ) + (set! (-> v1-5 post) rider-post) + ) + +;; definition for method 11 of type teetertotter +(defmethod dummy-method-11 teetertotter ((obj teetertotter) (arg0 object)) + (let + ((s4-0 + (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player)) + ) + ) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) default-collision-reaction) + (set! (-> s4-0 no-reaction) nothing) + (let ((t9-2 (method-of-object s4-0 dummy-29))) + 1 + (t9-2) + ) + (let ((s3-0 (new 'process 'collide-shape-prim-group s4-0 (the-as uint 5) 0))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 2048)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 1)) + (set-vector! (-> s3-0 local-sphere) 0.0 12288.0 0.0 36864.0) + ((method-of-object s4-0 dummy-46)) + (let ((s2-0 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 1)))) + (set! (-> s2-0 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-0 collide-with) (the-as uint 16)) + (set! (-> s2-0 prim-core action) (the-as uint 1)) + (set! (-> s2-0 prim-core offense) 4) + (set! (-> s2-0 transform-index) 5) + (set-vector! (-> s2-0 local-sphere) -4096.0 2048.0 0.0 5120.0) + ) + ((method-of-object s3-0 dummy-28)) + (let + ((s2-1 + (new + 'process + 'collide-shape-prim-mesh + s4-0 + (the-as uint 0) + (the-as uint 2) + ) + ) + ) + (set! (-> s2-1 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-1 collide-with) (the-as uint 16)) + (set! (-> s2-1 prim-core action) (the-as uint 3)) + (set! (-> s2-1 prim-core offense) 4) + (set! (-> s2-1 transform-index) 7) + (set-vector! (-> s2-1 local-sphere) 0.0 0.0 0.0 32768.0) + ) + ((method-of-object s3-0 dummy-28)) + (let + ((s2-2 + (new + 'process + 'collide-shape-prim-mesh + s4-0 + (the-as uint 1) + (the-as uint 0) + ) + ) + ) + (set! (-> s2-2 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-2 collide-with) (the-as uint 16)) + (set! (-> s2-2 prim-core action) (the-as uint 1)) + (set! (-> s2-2 prim-core offense) 4) + (set! (-> s2-2 transform-index) 4) + (set-vector! (-> s2-2 local-sphere) 0.0 0.0 0.0 32768.0) + ) + ((method-of-object s3-0 dummy-28)) + (let + ((s2-3 + (new + 'process + 'collide-shape-prim-mesh + s4-0 + (the-as uint 2) + (the-as uint 0) + ) + ) + ) + (set! (-> s2-3 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-3 collide-with) (the-as uint 16)) + (set! (-> s2-3 prim-core action) (the-as uint 1)) + (set! (-> s2-3 prim-core offense) 4) + (set! (-> s2-3 transform-index) 3) + (set-vector! (-> s2-3 local-sphere) 0.0 0.0 0.0 32768.0) + ) + ((method-of-object s3-0 dummy-28)) + (let + ((s2-4 + (new + 'process + 'collide-shape-prim-mesh + s4-0 + (the-as uint 3) + (the-as uint 2) + ) + ) + ) + (set! (-> s2-4 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-4 collide-with) (the-as uint 16)) + (set! (-> s2-4 prim-core action) (the-as uint 3)) + (set! (-> s2-4 prim-core offense) 4) + (set! (-> s2-4 transform-index) 3) + (set-vector! (-> s2-4 local-sphere) 0.0 0.0 0.0 32768.0) + ) + ((method-of-object s3-0 dummy-28)) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + ((method-of-object s4-0 dummy-50)) + (set! (-> obj root) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (dummy-14 obj *teetertotter-sg* '()) + (set! (-> obj launched-player) #f) + (set! (-> obj in-launch-window) #f) + (set! (-> obj rock-is-dangerous) #f) + (go teetertotter-idle) + (none) + ) + + + + diff --git a/test/offline/offline_test_main.cpp b/test/offline/offline_test_main.cpp index 3d6acd37e6..e566af7ce8 100644 --- a/test/offline/offline_test_main.cpp +++ b/test/offline/offline_test_main.cpp @@ -268,7 +268,7 @@ class OfflineDecompilation : public ::testing::Test { config->generate_symbol_definition_map = false; std::vector dgos = {"CGO/KERNEL.CGO", "CGO/ENGINE.CGO", "CGO/GAME.CGO", - "DGO/BEA.DGO"}; + "DGO/BEA.DGO", "CGO/L1.CGO"}; std::vector dgo_paths; if (g_iso_data_path.empty()) { for (auto& x : dgos) {