diff --git a/decompiler/config/all-types.gc b/decompiler/config/all-types.gc index b70d7b51db..f6beb0adce 100644 --- a/decompiler/config/all-types.gc +++ b/decompiler/config/all-types.gc @@ -17741,7 +17741,7 @@ (:methods (water-vol-idle () none 20) ;; state (water-vol-startup () none 21) ;; state - (TODO-RENAME-22 (_type_) none 22) + (TODO-RENAME-22 (_type_) ripple-wave-set 22) (dummy-23 () none 23) (dummy-24 () none 24) (TODO-RENAME-25 (_type_) quaternion 25) @@ -33250,41 +33250,18 @@ ;; - Types -; (deftype mud (water-anim) -; () -; :method-count-assert 30 -; :size-assert #xdc -; :flag-assert #x1e007000dc -; ;; not enough basic ops -; (: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 mud (water-anim) + () + :method-count-assert 30 + :heap-base #x70 + :size-assert #xdc + :flag-assert #x1e007000dc + ) ;; - Unknowns -;;(define-extern ripple-for-mud object) ;; unknown type -;;(define-extern ripple-for-small-mud object) ;; unknown type +(define-extern ripple-for-mud ripple-wave-set) ;; unknown type +(define-extern ripple-for-small-mud ripple-wave-set) ;; unknown type ;; ---------------------- diff --git a/decompiler/config/jak1_ntsc_black_label/label_types.jsonc b/decompiler/config/jak1_ntsc_black_label/label_types.jsonc index 4227027ff8..171c0678c4 100644 --- a/decompiler/config/jak1_ntsc_black_label/label_types.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/label_types.jsonc @@ -1486,6 +1486,12 @@ ["L165", "float", true] ], + "mud": [ + ["L8", "ripple-wave-set", true], + ["L9", "ripple-wave-set", true], + ["L10", "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/type_casts.jsonc b/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc index 85335c425a..e16422c779 100644 --- a/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc @@ -1851,5 +1851,9 @@ [5, "v1", "process-mask"] ], + "(method 22 mud)": [ + [[37, 41], "v1", "ripple-control"] + ], + "placeholder-do-not-add-below": [] } diff --git a/goal_src/engine/gfx/water/water-h.gc b/goal_src/engine/gfx/water/water-h.gc index 09c56e6cd9..4cb008d0de 100644 --- a/goal_src/engine/gfx/water/water-h.gc +++ b/goal_src/engine/gfx/water/water-h.gc @@ -101,7 +101,7 @@ (:methods (water-vol-idle () none 20) ;; state (water-vol-startup () none 21) ;; state - (TODO-RENAME-22 (_type_) none 22) + (TODO-RENAME-22 (_type_) ripple-wave-set 22) (dummy-23 () none 23) (dummy-24 () none 24) (TODO-RENAME-25 (_type_) quaternion 25) diff --git a/goal_src/levels/common/water-anim.gc b/goal_src/levels/common/water-anim.gc index 7955d33350..0fa04b5a75 100644 --- a/goal_src/levels/common/water-anim.gc +++ b/goal_src/levels/common/water-anim.gc @@ -1926,7 +1926,7 @@ ) ;; definition for method 22 of type water-anim -;; INFO: Return type mismatch int vs none. +;; INFO: Return type mismatch int vs ripple-wave-set. (defmethod TODO-RENAME-22 water-anim ((obj water-anim)) (with-pp (let ((s5-0 (-> obj look))) @@ -1980,7 +1980,6 @@ ) ) ) - (ja-post) - (none) + (the-as ripple-wave-set (ja-post)) ) ) diff --git a/goal_src/levels/misty/mud.gc b/goal_src/levels/misty/mud.gc index ebf980b9f4..9053353d7f 100644 --- a/goal_src/levels/misty/mud.gc +++ b/goal_src/levels/misty/mud.gc @@ -5,3 +5,100 @@ ;; name in dgo: mud ;; dgos: L1, MIS +;; definition of type mud +(deftype mud (water-anim) + () + :heap-base #x70 + :method-count-assert 30 + :size-assert #xdc + :flag-assert #x1e007000dc + ) + +;; definition for symbol ripple-for-mud, type ripple-wave-set +(define + ripple-for-mud + (new 'static 'ripple-wave-set + :count 3 + :converted #f + :normal-scale 1.0 + :wave + (new 'static 'inline-array ripple-wave 4 + (new 'static 'ripple-wave :scale 40.0 :xdiv 1 :speed 1.5) + (new 'static 'ripple-wave :scale 40.0 :xdiv -1 :zdiv 1 :speed 1.5) + (new 'static 'ripple-wave :scale 20.0 :xdiv 5 :zdiv 3 :speed 0.75) + (new 'static 'ripple-wave) + ) + ) + ) + +;; definition for symbol ripple-for-small-mud, type ripple-wave-set +(define + ripple-for-small-mud + (new 'static 'ripple-wave-set + :count 3 + :converted #f + :normal-scale 1.0 + :wave + (new 'static 'inline-array ripple-wave 4 + (new 'static 'ripple-wave :scale 20.0 :xdiv 2 :speed 0.5) + (new 'static 'ripple-wave :scale 20.0 :xdiv -2 :zdiv 2 :speed 0.5) + (new 'static 'ripple-wave :scale 20.0 :xdiv 5 :zdiv 3 :speed 0.75) + (new 'static 'ripple-wave) + ) + ) + ) + +;; definition for method 22 of type mud +(defmethod TODO-RENAME-22 mud ((obj mud)) + (let ((t9-0 (method-of-type water-anim TODO-RENAME-22))) + (t9-0 obj) + ) + (set! (-> obj flags) (logand -8388609 (-> obj flags))) + (set! (-> obj flags) (logior #x40000 (-> obj flags))) + (let ((gp-0 (new 'process 'ripple-control))) + (set! (-> obj draw ripple) gp-0) + (set! (-> gp-0 global-scale) 3072.0) + (set! (-> gp-0 waveform) ripple-for-mud) + (let + ((v1-9 + (the-as + object + ((method-of-type res-lump get-property-data) + (-> obj entity) + 'water-anim-fade-dist + 'interp + -1000000000.0 + (the-as pointer #f) + (the-as (pointer res-tag) #f) + *res-static-buf* + ) + ) + ) + ) + (when (the-as pointer v1-9) + (set! + (-> gp-0 close-fade-dist) + (-> (the-as ripple-control v1-9) global-scale) + ) + (set! + (-> gp-0 far-fade-dist) + (-> (the-as ripple-control v1-9) last-frame-scale) + ) + ) + ) + (case (-> obj look) + ((21 25 29) + (set! (-> gp-0 close-fade-dist) 4096000000.0) + (set! (-> gp-0 far-fade-dist) 8192000000.0) + ) + ) + (case (-> obj look) + ((22 25 24 27 26 31) + (let ((v0-3 ripple-for-small-mud)) + (set! (-> gp-0 waveform) v0-3) + v0-3 + ) + ) + ) + ) + ) diff --git a/test/decompiler/reference/engine/gfx/water/water-h_REF.gc b/test/decompiler/reference/engine/gfx/water/water-h_REF.gc index a81318caa8..c3b1627885 100644 --- a/test/decompiler/reference/engine/gfx/water/water-h_REF.gc +++ b/test/decompiler/reference/engine/gfx/water/water-h_REF.gc @@ -151,7 +151,7 @@ (:methods (water-vol-idle () none 20) (water-vol-startup () none 21) - (TODO-RENAME-22 (_type_) none 22) + (TODO-RENAME-22 (_type_) ripple-wave-set 22) (dummy-23 () none 23) (dummy-24 () none 24) (TODO-RENAME-25 (_type_) quaternion 25) diff --git a/test/decompiler/reference/levels/common/water-anim_REF.gc b/test/decompiler/reference/levels/common/water-anim_REF.gc index 6c584bc949..cb32f8b9ea 100644 --- a/test/decompiler/reference/levels/common/water-anim_REF.gc +++ b/test/decompiler/reference/levels/common/water-anim_REF.gc @@ -1941,7 +1941,7 @@ ) ;; definition for method 22 of type water-anim -;; INFO: Return type mismatch int vs none. +;; INFO: Return type mismatch int vs ripple-wave-set. (defmethod TODO-RENAME-22 water-anim ((obj water-anim)) (with-pp (let ((s5-0 (-> obj look))) @@ -1995,7 +1995,6 @@ ) ) ) - (ja-post) - (none) + (the-as ripple-wave-set (ja-post)) ) ) diff --git a/test/decompiler/reference/levels/misty/mud_REF.gc b/test/decompiler/reference/levels/misty/mud_REF.gc new file mode 100644 index 0000000000..341536e634 --- /dev/null +++ b/test/decompiler/reference/levels/misty/mud_REF.gc @@ -0,0 +1,112 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type mud +(deftype mud (water-anim) + () + :heap-base #x70 + :method-count-assert 30 + :size-assert #xdc + :flag-assert #x1e007000dc + ) + +;; definition for method 3 of type mud +(defmethod inspect mud ((obj mud)) + (let ((t9-0 (method-of-type water-anim inspect))) + (t9-0 obj) + ) + obj + ) + +;; definition for symbol ripple-for-mud, type ripple-wave-set +(define + ripple-for-mud + (new 'static 'ripple-wave-set + :count 3 + :converted #f + :normal-scale 1.0 + :wave + (new 'static 'inline-array ripple-wave 4 + (new 'static 'ripple-wave :scale 40.0 :xdiv 1 :speed 1.5) + (new 'static 'ripple-wave :scale 40.0 :xdiv -1 :zdiv 1 :speed 1.5) + (new 'static 'ripple-wave :scale 20.0 :xdiv 5 :zdiv 3 :speed 0.75) + (new 'static 'ripple-wave) + ) + ) + ) + +;; definition for symbol ripple-for-small-mud, type ripple-wave-set +(define + ripple-for-small-mud + (new 'static 'ripple-wave-set + :count 3 + :converted #f + :normal-scale 1.0 + :wave + (new 'static 'inline-array ripple-wave 4 + (new 'static 'ripple-wave :scale 20.0 :xdiv 2 :speed 0.5) + (new 'static 'ripple-wave :scale 20.0 :xdiv -2 :zdiv 2 :speed 0.5) + (new 'static 'ripple-wave :scale 20.0 :xdiv 5 :zdiv 3 :speed 0.75) + (new 'static 'ripple-wave) + ) + ) + ) + +;; definition for method 22 of type mud +(defmethod TODO-RENAME-22 mud ((obj mud)) + (let ((t9-0 (method-of-type water-anim TODO-RENAME-22))) + (t9-0 obj) + ) + (set! (-> obj flags) (logand -8388609 (-> obj flags))) + (set! (-> obj flags) (logior #x40000 (-> obj flags))) + (let ((gp-0 (new 'process 'ripple-control))) + (set! (-> obj draw ripple) gp-0) + (set! (-> gp-0 global-scale) 3072.0) + (set! (-> gp-0 waveform) ripple-for-mud) + (let + ((v1-9 + (the-as + object + ((method-of-type res-lump get-property-data) + (-> obj entity) + 'water-anim-fade-dist + 'interp + -1000000000.0 + (the-as pointer #f) + (the-as (pointer res-tag) #f) + *res-static-buf* + ) + ) + ) + ) + (when (the-as pointer v1-9) + (set! + (-> gp-0 close-fade-dist) + (-> (the-as ripple-control v1-9) global-scale) + ) + (set! + (-> gp-0 far-fade-dist) + (-> (the-as ripple-control v1-9) last-frame-scale) + ) + ) + ) + (case (-> obj look) + ((21 25 29) + (set! (-> gp-0 close-fade-dist) 4096000000.0) + (set! (-> gp-0 far-fade-dist) 8192000000.0) + ) + ) + (case (-> obj look) + ((22 25 24 27 26 31) + (let ((v0-3 ripple-for-small-mud)) + (set! (-> gp-0 waveform) v0-3) + v0-3 + ) + ) + ) + ) + ) + + + + 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) {