From 78e5fc0deb21d8d74b30b0c61d5301a8446cf65f Mon Sep 17 00:00:00 2001 From: Hat Kid <6624576+Hat-Kid@users.noreply.github.com> Date: Thu, 17 Feb 2022 01:26:05 +0100 Subject: [PATCH] decomp: `ocean-near` and `ocean-vu0` (#1177) --- decompiler/config/all-types.gc | 24 ++++----- .../jak1_ntsc_black_label/label_types.jsonc | 15 ++++++ .../stack_structures.jsonc | 4 ++ .../jak1_ntsc_black_label/type_casts.jsonc | 50 +++++++++++++++++++ goal_src/engine/gfx/ocean/ocean-vu0.gc | 15 ++++++ .../engine/gfx/ocean/ocean-vu0_REF.gc | 26 ++++++++++ 6 files changed, 122 insertions(+), 12 deletions(-) create mode 100644 test/decompiler/reference/engine/gfx/ocean/ocean-vu0_REF.gc diff --git a/decompiler/config/all-types.gc b/decompiler/config/all-types.gc index 83201160d1..06edbfe62c 100644 --- a/decompiler/config/all-types.gc +++ b/decompiler/config/all-types.gc @@ -21718,8 +21718,8 @@ ;; - Unknowns -;;(define-extern *ocean-vu0-work* object) ;; unknown type -;;(define-extern ocean-vu0-block object) ;; unknown type +(define-extern *ocean-vu0-work* ocean-vu0-work) ;; unknown type +(define-extern ocean-vu0-block vu-function) ;; unknown type ;; ---------------------- @@ -21769,13 +21769,13 @@ (define-extern ocean-mid-camera-masks-set! function) (define-extern ocean-mid-add-matrices (function dma-buffer none)) ;; not verified (define-extern ocean-mid-check function) -(define-extern ocean-matrix*! function) +(define-extern ocean-matrix*! (function matrix matrix matrix matrix)) (define-extern ocean-mid-setup-constants function) (define-extern ocean-vector-matrix*! function) ;; - Unknowns -;;(define-extern ocean-mid-block object) ;; unknown type +(define-extern ocean-mid-block vu-function) ;; unknown type ;; ---------------------- @@ -21806,17 +21806,17 @@ ;; - Functions -(define-extern ocean-near-add-constants function) -(define-extern ocean-near-add-heights function) -(define-extern ocean-near-add-call function) -(define-extern ocean-near-add-upload function) -(define-extern ocean-near-add-matrices function) -(define-extern ocean-near-setup-constants function) -(define-extern ocean-near-add-call-flush function) +(define-extern ocean-near-add-constants (function dma-buffer none)) +(define-extern ocean-near-add-heights (function dma-buffer ocean-wave-info)) +(define-extern ocean-near-add-call (function dma-buffer int none)) +(define-extern ocean-near-add-upload (function dma-buffer float float ocean-near-upload)) +(define-extern ocean-near-add-matrices (function dma-buffer matrix none)) +(define-extern ocean-near-setup-constants (function (inline-array vector) vector)) +(define-extern ocean-near-add-call-flush (function dma-buffer int none)) ;; - Unknowns -;;(define-extern ocean-near-block object) ;; unknown type +(define-extern ocean-near-block vu-function) ;; 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 01f39d007f..1e1cd6b019 100644 --- a/decompiler/config/jak1_ntsc_black_label/label_types.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/label_types.jsonc @@ -2072,6 +2072,21 @@ "snow-bunny": [["L190", "attack-info"]], + "ocean-vu0": [ + ["L8", "vu-function"], + ["L9", "ocean-vu0-work"] + ], + + "ocean-near": [ + ["L35", "vu-function"], + ["L37", "float", true], + ["L44", "float", true] + ], + + "ocean-mid": [ + ["L150", "vu-function"] + ], + // 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 7b706b4118..fb36685cb4 100644 --- a/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc @@ -5472,5 +5472,9 @@ [48, "eye"] ], + "ocean-near-add-matrices": [ + [16, "matrix"] + ], + "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 b99422ed70..1af8b643fb 100644 --- a/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc @@ -7250,5 +7250,55 @@ // [[128, 134], "v1", "(pointer int64)"] ], + "ocean-near-add-call": [ + [3, "a0", "dma-packet"], + [8, "a0", "dma-packet"], + [10, "a0", "dma-packet"] + ], + + "ocean-near-add-call-flush": [ + [3, "a0", "dma-packet"], + [8, "a0", "dma-packet"], + [10, "a0", "dma-packet"] + ], + + "ocean-near-add-matrices": [ + [7, "a0", "dma-packet"], + [12, "a0", "dma-packet"], + [14, "a0", "dma-packet"], + [19, "a0", "dma-packet"], + [20, "a0", "vector"], + [22, "s4", "matrix"], + [23, "s4", "matrix"], + [47, "v1", "matrix"] + ], + + "ocean-near-add-constants": [ + [3, "a0", "dma-packet"] + ], + + "draw-ocean-near": [ + [2, "a0", "dma-packet"], + [4, "a0", "dma-packet"], + [5, "a0", "dma-packet"], + [7, "a0", "dma-packet"], + [8, "a0", "dma-packet"], + [11, "a0", "dma-packet"], + [14, "a0", "dma-packet"], + [16, "a0", "dma-packet"], + [17, "a0", "dma-packet"], + [18, "a0", "dma-packet"], + [20, "a0", "dma-packet"], + [22, "a0", "dma-packet"], + [24, "a0", "dma-packet"], + [25, "a0", "dma-packet"], + [26, "a0", "dma-packet"], + [35, "a0", "dma-packet"], + [37, "a0", "dma-packet"], + [39, "a0", "dma-packet"], + [40, "a0", "dma-packet"], + [41, "a0", "dma-packet"] + ], + "placeholder-do-not-add-below": [] } diff --git a/goal_src/engine/gfx/ocean/ocean-vu0.gc b/goal_src/engine/gfx/ocean/ocean-vu0.gc index bbcd2d0052..2730ba812c 100644 --- a/goal_src/engine/gfx/ocean/ocean-vu0.gc +++ b/goal_src/engine/gfx/ocean/ocean-vu0.gc @@ -5,3 +5,18 @@ ;; name in dgo: ocean-vu0 ;; dgos: GAME, ENGINE +(define *ocean-vu0-work* (new 'static 'ocean-vu0-work + :scales + (new 'static 'vector :x -0.00006975447 :y 255.0 :z -0.00006975447) + :mask-hi + (new 'static 'vector4w :x -65536 :y -65536 :z -65536 :w -65536) + :mask-lo + (new 'static 'vector4w :x #xffff :y #xffff :z #xffff :w #xffff) + ) + ) + +;; (def-mips2c ocean-interp-wave (function ocean-wave-info uint none)) ;; TODO mips2c + +(define ocean-vu0-block (new 'static 'vu-function :length #x0 :qlength #x0)) + +;; (def-mips2c ocean-generate-verts (function (pointer vector) ocean-wave-info none)) ;; TODO mips2c \ No newline at end of file diff --git a/test/decompiler/reference/engine/gfx/ocean/ocean-vu0_REF.gc b/test/decompiler/reference/engine/gfx/ocean/ocean-vu0_REF.gc new file mode 100644 index 0000000000..28ea0b2159 --- /dev/null +++ b/test/decompiler/reference/engine/gfx/ocean/ocean-vu0_REF.gc @@ -0,0 +1,26 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition for symbol *ocean-vu0-work*, type ocean-vu0-work +(define *ocean-vu0-work* (new 'static 'ocean-vu0-work + :scales + (new 'static 'vector :x -0.00006975447 :y 255.0 :z -0.00006975447) + :mask-hi + (new 'static 'vector4w :x -65536 :y -65536 :z -65536 :w -65536) + :mask-lo + (new 'static 'vector4w :x #xffff :y #xffff :z #xffff :w #xffff) + ) + ) + +;; definition for function ocean-interp-wave +;; ERROR: function was not converted to expressions. Cannot decompile. + +;; definition for symbol ocean-vu0-block, type vu-function +(define ocean-vu0-block (new 'static 'vu-function :length 72 :qlength 36)) + +;; definition for function ocean-generate-verts +;; ERROR: function was not converted to expressions. Cannot decompile. + + + +