;;-*-Lisp-*-
(in-package goal)

;; name: ocean.gc
;; name in dgo: ocean
;; dgos: ENGINE, GAME

;; og:ignore-form:(defmethod ocean-method-18

;; DECOMP BEGINS

(defmethod set-corners! ((this ocean) (corner-x float) (corner-z float))
  (let* ((f2-0 (/ corner-x (meters 3)))
         (f3-0 (/ corner-z (meters 3)))
         (f0-2 f2-0)
         (f0-4 (- f0-2 (the float (the int f0-2))))
         (f1-6 f3-0)
         (f1-8 (- f1-6 (the float (the int f1-6))))
         (a1-1 (logand (the int f2-0) 31))
         (a3-0 (logand (the int f3-0) 31))
         (v1-9 (logand (+ a1-1 1) 31))
         (a2-2 (logand (+ a3-0 1) 31))
         (f2-3 (-> this heights data (+ (* a3-0 32) a1-1)))
         (f3-1 (-> this heights data (+ (* a3-0 32) v1-9)))
         (f4-4 (-> this heights data (+ (* a2-2 32) a1-1)))
         (f5-0 (-> this heights data (+ (* a2-2 32) v1-9)))
         (f6-1 (+ (* f3-1 f0-4) (* f2-3 (- 1.0 f0-4))))
         (f0-9 (+ (* (+ (* f5-0 f0-4) (* f4-4 (- 1.0 f0-4))) f1-8) (* f6-1 (- 1.0 f1-8))))
         )
    (set! (-> this corner00) f2-3)
    (set! (-> this corner01) f3-1)
    (set! (-> this corner10) f4-4)
    (set! (-> this corner11) f5-0)
    f0-9
    )
  )

(defmethod get-height ((this ocean) (arg0 vector) (arg1 symbol))
  (local-vars (v1-12 int))
  (cond
    ((and (-> this heights) *ocean-map*)
     (let* ((f30-0 (- (-> arg0 x) (-> this start-corner x)))
            (f28-0 (- (-> arg0 z) (-> this start-corner z)))
            (v1-3 (the int (/ f30-0 (meters 96))))
            (a0-2 (the int (/ f28-0 (meters 96))))
            (v1-7 (-> this ocean-trans-indices data (+ (* 48 a0-2) v1-3)))
            )
       (cond
         ((= (-> v1-7 parent) -1)
          (if arg1
              (-> this start-corner y)
              4095996000.0
              )
          )
         ((begin
            (let ((a0-8 (logand (the int (/ f30-0 (meters 24))) 3))
                  (a3-4 (logand (the int (/ f28-0 (meters 24))) 3))
                  (v1-10 (-> this ocean-near-indices data (-> v1-7 child)))
                  )
              (set! v1-12 (-> (the-as (pointer int16) (+ (* (+ (* a3-4 4) a0-8) 2) (the-as int v1-10)))))
              )
            (= v1-12 -1)
            )
          (if arg1
              (-> this start-corner y)
              4095996000.0
              )
          )
         (else
           (let ((a0-14 (logand (the int (/ f30-0 (meters 3))) 7)))
             (cond
               ((not (logtest? (-> this ocean-mid-masks data v1-12 mask (logand (the int (/ f28-0 (meters 3))) 7)) (ash 1 a0-14))
                     )
                (let* ((f1-2 (vector-vector-distance arg0 (math-camera-pos)))
                       (f26-0 (- 1.0 (fmin 1.0 (/ f1-2 (meters 24)))))
                       )
                  (if (-> this ocean-near-translucent?)
                      (+ (* f26-0 (set-corners! this f30-0 f28-0)) (-> this start-corner y))
                      (-> this start-corner y)
                      )
                  )
                )
               (arg1
                 (-> this start-corner y)
                 )
               (else
                 4095996000.0
                 )
               )
             )
           )
         )
       )
     )
    (arg1
      0.0
      )
    (else
      4095996000.0
      )
    )
  )

(def-mips2c init-ocean-far-regs (function none))

(def-mips2c draw-large-polygon-ocean (function none))

(def-mips2c render-ocean-quad (function (inline-array ocean-vertex) dma-buffer symbol))

(defmethod add-colors! ((this ocean) (arg0 vector) (arg1 ocean-vertex))
  (let ((s3-0 (new 'stack-no-clear 'vector))
        (s4-0 (-> this haze-lights))
        )
    (set! (-> s3-0 quad) (-> arg1 pos quad))
    (set! (-> s3-0 y) 0.0)
    (vector-normalize! s3-0 1.0)
    (+! (-> s3-0 y) 0.1)
    (vector-normalize! s3-0 1.0)
    (let ((s5-0 (new 'stack-no-clear 'vector4)))
      (let* ((f0-4 (vector-dot (-> s4-0 sun0-normal) s3-0))
             (f1-2 (vector-dot (-> s4-0 sun1-normal) s3-0))
             (f2-1 (vector-dot (-> s4-0 moon-normal) s3-0))
             (f0-5 (fmax 0.0 f0-4))
             (f30-0 (fmax 0.0 f1-2))
             (f28-0 (fmax 0.0 f2-1))
             )
        (set! (-> s5-0 quad) (-> s4-0 ambi-color quad))
        (vector4-madd! s5-0 s5-0 (the-as vector4 (-> s4-0 sun0-color)) f0-5)
        (vector4-madd! s5-0 s5-0 (the-as vector4 (-> s4-0 sun1-color)) f30-0)
        (vector4-madd! s5-0 s5-0 (the-as vector4 (-> s4-0 moon-color)) f28-0)
        )
      (vector4-scale! s5-0 s5-0 128.0)
      (set! (-> arg0 x) (fmax 0.0 (fmin 255.0 (-> s5-0 x))))
      (set! (-> arg0 y) (fmax 0.0 (fmin 255.0 (-> s5-0 y))))
      (set! (-> arg0 z) (fmax 0.0 (fmin 255.0 (-> s5-0 z))))
      )
    )
  0
  (none)
  )

(defmethod ocean-method-60 ((this ocean) (arg0 dma-buffer))
  (local-vars (sv-48 float) (sv-52 vector) (sv-56 vector))
  ;; og:preserve-this scratchpad
  (let ((vertices (scratchpad-object (inline-array ocean-vertex))))
    (let ((f0-0 (-> this start-corner z)))
      (let ((f1-1 (+ -5898240.0 f0-0)))
        (set! (-> vertices 0 pos z) f1-1)
        (set! (-> vertices 1 pos z) f1-1)
        )
      (set! (-> vertices 2 pos z) f0-0)
      (set! (-> vertices 3 pos z) f0-0)
      )
    (set! (-> vertices 0 pos w) 0.5)
    (set! (-> vertices 1 pos w) 0.5)
    (set! (-> vertices 2 pos w) 1.0)
    (set! (-> vertices 3 pos w) 1.0)
    (set! sv-48 (-> this start-corner x))
    (set! sv-52 (new 'stack-no-clear 'vector))
    (set! sv-56 (new 'stack-no-clear 'vector))
    (let ((s3-0 (-> this ocean-colors)))
      (let ((s2-0 #f))
        (rgba-to-vector! this sv-52 (-> s3-0 colors))
        (dotimes (s1-0 48)
          (let ((f0-8 (+ (* 393216.0 (the float s1-0)) sv-48)))
            (let ((f1-6 (+ 393216.0 f0-8)))
              (set! (-> vertices 0 pos x) f0-8)
              (set! (-> vertices 1 pos x) f1-6)
              (set! (-> vertices 2 pos x) f1-6)
              )
            (set! (-> vertices 3 pos x) f0-8)
            )
          (rgba-to-vector! this sv-56 (&+ (-> s3-0 colors) (* (+ s1-0 1) 4)))
          (set! (-> vertices 0 col quad) (-> sv-52 quad))
          (set! (-> vertices 1 col quad) (-> sv-56 quad))
          (set! (-> vertices 2 col quad) (-> sv-56 quad))
          (set! (-> vertices 3 col quad) (-> sv-52 quad))
          (set! (-> sv-52 quad) (-> sv-56 quad))
          (cond
            ((render-ocean-quad vertices arg0)
             (set! s2-0 #t)
             )
            (else
              (if s2-0
                  (goto cfg-9)
                  )
              )
            )
          )
        )
      )
    (label cfg-9)
    (let ((f0-10 (+ -5898240.0 (-> this start-corner z))))
      (let ((f1-9 (+ -5898240.0 f0-10)))
        (set! (-> vertices 0 pos z) f1-9)
        (set! (-> vertices 1 pos z) f1-9)
        )
      (set! (-> vertices 2 pos z) f0-10)
      (set! (-> vertices 3 pos z) f0-10)
      )
    (set! (-> vertices 0 pos w) 0.0)
    (set! (-> vertices 1 pos w) 0.0)
    (set! (-> vertices 2 pos w) 0.5)
    (set! (-> vertices 3 pos w) 0.5)
    (let ((s3-1 (-> this ocean-colors)))
      (let ((s2-1 #f))
        (rgba-to-vector! this sv-52 (-> s3-1 colors))
        (dotimes (s1-1 48)
          (let ((f0-17 (+ (* 393216.0 (the float s1-1)) sv-48)))
            (let ((f1-14 (+ 393216.0 f0-17)))
              (set! (-> vertices 0 pos x) f0-17)
              (set! (-> vertices 1 pos x) f1-14)
              (set! (-> vertices 2 pos x) f1-14)
              )
            (set! (-> vertices 3 pos x) f0-17)
            )
          (rgba-to-vector! this sv-56 (&+ (-> s3-1 colors) (* (+ s1-1 1) 4)))
          (add-colors! this (-> vertices 0 col) (-> vertices 0))
          (add-colors! this (-> vertices 1 col) (-> vertices 1))
          (set! (-> vertices 2 col quad) (-> sv-56 quad))
          (set! (-> vertices 3 col quad) (-> sv-52 quad))
          (set! (-> sv-52 quad) (-> sv-56 quad))
          (cond
            ((render-ocean-quad vertices arg0)
             (set! s2-1 #t)
             )
            (else
              (if s2-1
                  (goto cfg-18)
                  )
              )
            )
          )
        )
      )
    )
  (label cfg-18)
  0
  (none)
  )

(defmethod ocean-method-61 ((this ocean) (arg0 dma-buffer))
  (local-vars (sv-48 float) (sv-52 vector) (sv-56 vector))
  ;; og:preserve-this scratchpad
  (let ((vertices (scratchpad-object (inline-array ocean-vertex))))
    (let* ((f0-1 (+ 18874368.0 (-> this start-corner z)))
           (f1-2 (+ 5898240.0 f0-1))
           )
      (set! (-> vertices 0 pos z) f0-1)
      (set! (-> vertices 1 pos z) f0-1)
      (set! (-> vertices 2 pos z) f1-2)
      (set! (-> vertices 3 pos z) f1-2)
      )
    (set! (-> vertices 0 pos w) 1.0)
    (set! (-> vertices 1 pos w) 1.0)
    (set! (-> vertices 2 pos w) 0.5)
    (set! (-> vertices 3 pos w) 0.5)
    (set! sv-48 (-> this start-corner x))
    (set! sv-52 (new 'stack-no-clear 'vector))
    (set! sv-56 (new 'stack-no-clear 'vector))
    (let ((s3-0 (-> this ocean-colors)))
      (let ((s2-0 #f))
        (rgba-to-vector! this sv-52 (&-> s3-0 colors 2444))
        (dotimes (s1-0 48)
          (let ((f0-9 (+ (* 393216.0 (the float s1-0)) sv-48)))
            (let ((f1-7 (+ 393216.0 f0-9)))
              (set! (-> vertices 0 pos x) f0-9)
              (set! (-> vertices 1 pos x) f1-7)
              (set! (-> vertices 2 pos x) f1-7)
              )
            (set! (-> vertices 3 pos x) f0-9)
            )
          (rgba-to-vector! this sv-56 (&+ (-> s3-0 colors) (* (+ s1-0 2445) 4)))
          (set! (-> vertices 0 col quad) (-> sv-52 quad))
          (set! (-> vertices 1 col quad) (-> sv-56 quad))
          (set! (-> vertices 2 col quad) (-> sv-56 quad))
          (set! (-> vertices 3 col quad) (-> sv-52 quad))
          (set! (-> sv-52 quad) (-> sv-56 quad))
          (cond
            ((render-ocean-quad vertices arg0)
             (set! s2-0 #t)
             )
            (else
              (if s2-0
                  (goto cfg-9)
                  )
              )
            )
          )
        )
      )
    (label cfg-9)
    (let* ((f0-11 (+ 24772608.0 (-> this start-corner z)))
           (f1-10 (+ 5898240.0 f0-11))
           )
      (set! (-> vertices 0 pos z) f0-11)
      (set! (-> vertices 1 pos z) f0-11)
      (set! (-> vertices 2 pos z) f1-10)
      (set! (-> vertices 3 pos z) f1-10)
      )
    (set! (-> vertices 0 pos w) 0.5)
    (set! (-> vertices 1 pos w) 0.5)
    (set! (-> vertices 2 pos w) 0.0)
    (set! (-> vertices 3 pos w) 0.0)
    (let ((s3-1 (-> this ocean-colors)))
      (let ((s2-1 #f))
        (rgba-to-vector! this sv-52 (&-> s3-1 colors 2444))
        (dotimes (s1-1 48)
          (let ((f0-18 (+ (* 393216.0 (the float s1-1)) sv-48)))
            (let ((f1-15 (+ 393216.0 f0-18)))
              (set! (-> vertices 0 pos x) f0-18)
              (set! (-> vertices 1 pos x) f1-15)
              (set! (-> vertices 2 pos x) f1-15)
              )
            (set! (-> vertices 3 pos x) f0-18)
            )
          (rgba-to-vector! this sv-56 (&+ (-> s3-1 colors) (* (+ s1-1 2445) 4)))
          (set! (-> vertices 0 col quad) (-> sv-52 quad))
          (set! (-> vertices 1 col quad) (-> sv-56 quad))
          (add-colors! this (-> vertices 2 col) (-> vertices 2))
          (add-colors! this (-> vertices 3 col) (-> vertices 3))
          (set! (-> sv-52 quad) (-> sv-56 quad))
          (cond
            ((render-ocean-quad vertices arg0)
             (set! s2-1 #t)
             )
            (else
              (if s2-1
                  (goto cfg-18)
                  )
              )
            )
          )
        )
      )
    )
  (label cfg-18)
  0
  (none)
  )

(defmethod ocean-method-62 ((this ocean) (arg0 dma-buffer))
  (local-vars (sv-48 float) (sv-52 vector) (sv-56 vector))
  ;; og:preserve-this scratchpad
  (let ((vertices (scratchpad-object (inline-array ocean-vertex))))
    (let* ((f0-0 (-> this start-corner x))
           (f1-1 (+ -5898240.0 f0-0))
           )
      (set! (-> vertices 0 pos x) f1-1)
      (set! (-> vertices 1 pos x) f0-0)
      (set! (-> vertices 2 pos x) f0-0)
      (set! (-> vertices 3 pos x) f1-1)
      )
    (set! (-> vertices 0 pos w) 0.5)
    (set! (-> vertices 1 pos w) 1.0)
    (set! (-> vertices 2 pos w) 1.0)
    (set! (-> vertices 3 pos w) 0.5)
    (set! sv-48 (-> this start-corner z))
    (set! sv-52 (new 'stack-no-clear 'vector))
    (set! sv-56 (new 'stack-no-clear 'vector))
    (let ((s3-0 (-> this ocean-colors)))
      (let ((s2-0 #f))
        (rgba-to-vector! this sv-52 (-> s3-0 colors))
        (dotimes (s1-0 48)
          (let* ((f0-8 (+ (* 393216.0 (the float s1-0)) sv-48))
                 (f1-6 (+ 393216.0 f0-8))
                 )
            (set! (-> vertices 0 pos z) f0-8)
            (set! (-> vertices 1 pos z) f0-8)
            (set! (-> vertices 2 pos z) f1-6)
            (set! (-> vertices 3 pos z) f1-6)
            )
          (rgba-to-vector! this sv-56 (&+ (-> s3-0 colors) (* 208 (+ s1-0 1))))
          (set! (-> vertices 0 col quad) (-> sv-52 quad))
          (set! (-> vertices 1 col quad) (-> sv-52 quad))
          (set! (-> vertices 2 col quad) (-> sv-56 quad))
          (set! (-> vertices 3 col quad) (-> sv-56 quad))
          (set! (-> sv-52 quad) (-> sv-56 quad))
          (cond
            ((render-ocean-quad vertices arg0)
             (set! s2-0 #t)
             )
            (else
              (if s2-0
                  (goto cfg-9)
                  )
              )
            )
          )
        )
      )
    (label cfg-9)
    (let* ((f0-10 (+ -5898240.0 (-> this start-corner x)))
           (f1-9 (+ -5898240.0 f0-10))
           )
      (set! (-> vertices 0 pos x) f1-9)
      (set! (-> vertices 1 pos x) f0-10)
      (set! (-> vertices 2 pos x) f0-10)
      (set! (-> vertices 3 pos x) f1-9)
      )
    (set! (-> vertices 0 pos w) 0.0)
    (set! (-> vertices 1 pos w) 0.5)
    (set! (-> vertices 2 pos w) 0.5)
    (set! (-> vertices 3 pos w) 0.0)
    (let ((s3-1 (-> this ocean-colors)))
      (let ((s2-1 #f))
        (rgba-to-vector! this sv-52 (-> s3-1 colors))
        (dotimes (s1-1 48)
          (let* ((f0-17 (+ (* 393216.0 (the float s1-1)) sv-48))
                 (f1-14 (+ 393216.0 f0-17))
                 )
            (set! (-> vertices 0 pos z) f0-17)
            (set! (-> vertices 1 pos z) f0-17)
            (set! (-> vertices 2 pos z) f1-14)
            (set! (-> vertices 3 pos z) f1-14)
            )
          (rgba-to-vector! this sv-56 (&+ (-> s3-1 colors) (* 208 (+ s1-1 1))))
          (add-colors! this (-> vertices 0 col) (-> vertices 0))
          (set! (-> vertices 1 col quad) (-> sv-52 quad))
          (set! (-> vertices 2 col quad) (-> sv-56 quad))
          (add-colors! this (-> vertices 3 col) (-> vertices 3))
          (set! (-> sv-52 quad) (-> sv-56 quad))
          (cond
            ((render-ocean-quad vertices arg0)
             (set! s2-1 #t)
             )
            (else
              (if s2-1
                  (goto cfg-18)
                  )
              )
            )
          )
        )
      )
    )
  (label cfg-18)
  0
  (none)
  )

(defmethod ocean-method-63 ((this ocean) (arg0 dma-buffer))
  (local-vars (sv-48 float) (sv-52 vector) (sv-56 vector))
  ;; og:preserve-this scratchpad
  (let ((vertices (scratchpad-object (inline-array ocean-vertex))))
    (let ((f0-1 (+ 18874368.0 (-> this start-corner x))))
      (let ((f1-2 (+ 5898240.0 f0-1)))
        (set! (-> vertices 0 pos x) f0-1)
        (set! (-> vertices 1 pos x) f1-2)
        (set! (-> vertices 2 pos x) f1-2)
        )
      (set! (-> vertices 3 pos x) f0-1)
      )
    (set! (-> vertices 0 pos w) 1.0)
    (set! (-> vertices 1 pos w) 0.5)
    (set! (-> vertices 2 pos w) 0.5)
    (set! (-> vertices 3 pos w) 1.0)
    (set! sv-48 (-> this start-corner z))
    (set! sv-52 (new 'stack-no-clear 'vector))
    (set! sv-56 (new 'stack-no-clear 'vector))
    (let ((s3-0 (-> this ocean-colors)))
      (let ((s2-0 #f))
        (rgba-to-vector! this sv-52 (&-> s3-0 colors 47))
        (dotimes (s1-0 48)
          (let* ((f0-9 (+ (* 393216.0 (the float s1-0)) sv-48))
                 (f1-7 (+ 393216.0 f0-9))
                 )
            (set! (-> vertices 0 pos z) f0-9)
            (set! (-> vertices 1 pos z) f0-9)
            (set! (-> vertices 2 pos z) f1-7)
            (set! (-> vertices 3 pos z) f1-7)
            )
          (rgba-to-vector! this sv-56 (&+ (-> s3-0 colors) (* (+ (* 52 (+ s1-0 1)) 47) 4)))
          (set! (-> vertices 0 col quad) (-> sv-52 quad))
          (set! (-> vertices 1 col quad) (-> sv-52 quad))
          (set! (-> vertices 2 col quad) (-> sv-56 quad))
          (set! (-> vertices 3 col quad) (-> sv-56 quad))
          (set! (-> sv-52 quad) (-> sv-56 quad))
          (cond
            ((render-ocean-quad vertices arg0)
             (set! s2-0 #t)
             )
            (else
              (if s2-0
                  (goto cfg-9)
                  )
              )
            )
          )
        )
      )
    (label cfg-9)
    (let ((f0-11 (+ 24772608.0 (-> this start-corner x))))
      (let ((f1-10 (+ 5898240.0 f0-11)))
        (set! (-> vertices 0 pos x) f0-11)
        (set! (-> vertices 1 pos x) f1-10)
        (set! (-> vertices 2 pos x) f1-10)
        )
      (set! (-> vertices 3 pos x) f0-11)
      )
    (set! (-> vertices 0 pos w) 0.5)
    (set! (-> vertices 1 pos w) 0.0)
    (set! (-> vertices 2 pos w) 0.0)
    (set! (-> vertices 3 pos w) 0.5)
    (let ((s3-1 (-> this ocean-colors)))
      (let ((s2-1 #f))
        (rgba-to-vector! this sv-52 (&-> s3-1 colors 47))
        (dotimes (s1-1 48)
          (let* ((f0-18 (+ (* 393216.0 (the float s1-1)) sv-48))
                 (f1-15 (+ 393216.0 f0-18))
                 )
            (set! (-> vertices 0 pos z) f0-18)
            (set! (-> vertices 1 pos z) f0-18)
            (set! (-> vertices 2 pos z) f1-15)
            (set! (-> vertices 3 pos z) f1-15)
            )
          (rgba-to-vector! this sv-56 (&+ (-> s3-1 colors) (* (+ (* 52 (+ s1-1 1)) 47) 4)))
          (set! (-> vertices 0 col quad) (-> sv-52 quad))
          (add-colors! this (-> vertices 1 col) (-> vertices 1))
          (add-colors! this (-> vertices 2 col) (-> vertices 2))
          (set! (-> vertices 3 col quad) (-> sv-56 quad))
          (set! (-> sv-52 quad) (-> sv-56 quad))
          (cond
            ((render-ocean-quad vertices arg0)
             (set! s2-1 #t)
             )
            (else
              (if s2-1
                  (goto cfg-18)
                  )
              )
            )
          )
        )
      )
    )
  (label cfg-18)
  0
  (none)
  )

(defmethod ocean-method-64 ((this ocean) (arg0 dma-buffer))
  ;; og:preserve-this scratchpad
  (let ((vertices (scratchpad-object (inline-array ocean-vertex))))
    (let* ((v1-1 (-> this ocean-colors))
           (f30-0 (-> this start-corner x))
           (f28-0 (-> this start-corner z))
           (f26-0 (+ -5898240.0 f30-0))
           (f24-0 (+ -5898240.0 f28-0))
           (s3-0 (new 'stack-no-clear 'vector))
           )
      (rgba-to-vector! this s3-0 (-> v1-1 colors))
      (set! (-> vertices 0 pos x) f26-0)
      (set! (-> vertices 1 pos x) f30-0)
      (set! (-> vertices 2 pos x) f30-0)
      (set! (-> vertices 3 pos x) f26-0)
      (set! (-> vertices 0 pos z) f24-0)
      (set! (-> vertices 1 pos z) f24-0)
      (set! (-> vertices 2 pos z) f28-0)
      (set! (-> vertices 3 pos z) f28-0)
      (set! (-> vertices 0 pos w) 0.5)
      (set! (-> vertices 1 pos w) 0.5)
      (set! (-> vertices 2 pos w) 1.0)
      (set! (-> vertices 3 pos w) 0.5)
      (set! (-> vertices 0 col quad) (-> s3-0 quad))
      (set! (-> vertices 1 col quad) (-> s3-0 quad))
      (set! (-> vertices 2 col quad) (-> s3-0 quad))
      (set! (-> vertices 3 col quad) (-> s3-0 quad))
      (render-ocean-quad vertices arg0)
      (let ((f0-7 (+ -5898240.0 (-> this start-corner x)))
            (f1-1 (-> this start-corner z))
            )
        (let ((f2-1 (+ -5898240.0 f0-7))
              (f3-1 (+ -5898240.0 f1-1))
              )
          (set! (-> vertices 0 pos x) f2-1)
          (set! (-> vertices 1 pos x) f0-7)
          (set! (-> vertices 2 pos x) f0-7)
          (set! (-> vertices 3 pos x) f2-1)
          (set! (-> vertices 0 pos z) f3-1)
          (set! (-> vertices 1 pos z) f3-1)
          )
        (set! (-> vertices 2 pos z) f1-1)
        (set! (-> vertices 3 pos z) f1-1)
        )
      (set! (-> vertices 0 pos w) 0.0)
      (set! (-> vertices 1 pos w) 0.5)
      (set! (-> vertices 2 pos w) 0.5)
      (set! (-> vertices 3 pos w) 0.0)
      (add-colors! this (-> vertices 0 col) (-> vertices 0))
      (set! (-> vertices 1 col quad) (-> s3-0 quad))
      (set! (-> vertices 2 col quad) (-> s3-0 quad))
      (add-colors! this (-> vertices 3 col) (-> vertices 3))
      (render-ocean-quad vertices arg0)
      (let ((f0-13 (+ -5898240.0 (-> this start-corner x)))
            (f1-4 (+ -5898240.0 (-> this start-corner z)))
            )
        (let ((f2-4 (+ -5898240.0 f0-13))
              (f3-3 (+ -5898240.0 f1-4))
              )
          (set! (-> vertices 0 pos x) f2-4)
          (set! (-> vertices 1 pos x) f0-13)
          (set! (-> vertices 2 pos x) f0-13)
          (set! (-> vertices 3 pos x) f2-4)
          (set! (-> vertices 0 pos z) f3-3)
          (set! (-> vertices 1 pos z) f3-3)
          )
        (set! (-> vertices 2 pos z) f1-4)
        (set! (-> vertices 3 pos z) f1-4)
        )
      (set! (-> vertices 0 pos w) 0.0)
      (set! (-> vertices 1 pos w) 0.0)
      (set! (-> vertices 2 pos w) 0.5)
      (set! (-> vertices 3 pos w) 0.0)
      (add-colors! this (-> vertices 0 col) (-> vertices 0))
      (add-colors! this (-> vertices 1 col) (-> vertices 1))
      (set! (-> vertices 2 col quad) (-> s3-0 quad))
      (add-colors! this (-> vertices 3 col) (-> vertices 3))
      (render-ocean-quad vertices arg0)
      (let ((f0-18 (-> this start-corner x))
            (f1-6 (+ -5898240.0 (-> this start-corner z)))
            )
        (let ((f2-7 (+ -5898240.0 f0-18))
              (f3-5 (+ -5898240.0 f1-6))
              )
          (set! (-> vertices 0 pos x) f2-7)
          (set! (-> vertices 1 pos x) f0-18)
          (set! (-> vertices 2 pos x) f0-18)
          (set! (-> vertices 3 pos x) f2-7)
          (set! (-> vertices 0 pos z) f3-5)
          (set! (-> vertices 1 pos z) f3-5)
          )
        (set! (-> vertices 2 pos z) f1-6)
        (set! (-> vertices 3 pos z) f1-6)
        )
      (set! (-> vertices 0 pos w) 0.0)
      (set! (-> vertices 1 pos w) 0.0)
      (set! (-> vertices 2 pos w) 0.5)
      (set! (-> vertices 3 pos w) 0.5)
      (add-colors! this (-> vertices 0 col) (-> vertices 0))
      (add-colors! this (-> vertices 1 col) (-> vertices 2))
      (set! (-> vertices 2 col quad) (-> s3-0 quad))
      (set! (-> vertices 3 col quad) (-> s3-0 quad))
      )
    (render-ocean-quad vertices arg0)
    )
  0
  (none)
  )

(defmethod ocean-method-65 ((this ocean) (arg0 dma-buffer))
  ;; og:preserve-this scratchpad
  (let ((vertices (scratchpad-object (inline-array ocean-vertex))))
    (let* ((v1-1 (-> this ocean-colors))
           (f30-0 (+ 18874368.0 (-> this start-corner x)))
           (f28-0 (-> this start-corner z))
           (f26-0 (+ 5898240.0 f30-0))
           (f24-0 (+ -5898240.0 f28-0))
           (s3-0 (new 'stack-no-clear 'vector))
           )
      (rgba-to-vector! this s3-0 (&-> v1-1 colors 47))
      (set! (-> vertices 0 pos x) f30-0)
      (set! (-> vertices 1 pos x) f26-0)
      (set! (-> vertices 2 pos x) f26-0)
      (set! (-> vertices 3 pos x) f30-0)
      (set! (-> vertices 0 pos z) f24-0)
      (set! (-> vertices 1 pos z) f24-0)
      (set! (-> vertices 2 pos z) f28-0)
      (set! (-> vertices 3 pos z) f28-0)
      (set! (-> vertices 0 pos w) 0.5)
      (set! (-> vertices 1 pos w) 0.5)
      (set! (-> vertices 2 pos w) 0.5)
      (set! (-> vertices 3 pos w) 1.0)
      (set! (-> vertices 0 col quad) (-> s3-0 quad))
      (set! (-> vertices 1 col quad) (-> s3-0 quad))
      (set! (-> vertices 2 col quad) (-> s3-0 quad))
      (set! (-> vertices 3 col quad) (-> s3-0 quad))
      (render-ocean-quad vertices arg0)
      (let ((f0-8 (+ 24772608.0 (-> this start-corner x)))
            (f1-2 (-> this start-corner z))
            )
        (let ((f2-1 (+ 5898240.0 f0-8))
              (f3-1 (+ -5898240.0 f1-2))
              )
          (set! (-> vertices 0 pos x) f0-8)
          (set! (-> vertices 1 pos x) f2-1)
          (set! (-> vertices 2 pos x) f2-1)
          (set! (-> vertices 3 pos x) f0-8)
          (set! (-> vertices 0 pos z) f3-1)
          (set! (-> vertices 1 pos z) f3-1)
          )
        (set! (-> vertices 2 pos z) f1-2)
        (set! (-> vertices 3 pos z) f1-2)
        )
      (set! (-> vertices 0 pos w) 0.5)
      (set! (-> vertices 1 pos w) 0.0)
      (set! (-> vertices 2 pos w) 0.0)
      (set! (-> vertices 3 pos w) 0.5)
      (set! (-> vertices 0 col quad) (-> s3-0 quad))
      (add-colors! this (-> vertices 1 col) (-> vertices 1))
      (add-colors! this (-> vertices 2 col) (-> vertices 2))
      (set! (-> vertices 3 col quad) (-> s3-0 quad))
      (render-ocean-quad vertices arg0)
      (let ((f0-14 (+ 18874368.0 (-> this start-corner x)))
            (f1-5 (+ -5898240.0 (-> this start-corner z)))
            )
        (let ((f2-4 (+ 5898240.0 f0-14))
              (f3-3 (+ -5898240.0 f1-5))
              )
          (set! (-> vertices 0 pos x) f0-14)
          (set! (-> vertices 1 pos x) f2-4)
          (set! (-> vertices 2 pos x) f2-4)
          (set! (-> vertices 3 pos x) f0-14)
          (set! (-> vertices 0 pos z) f3-3)
          (set! (-> vertices 1 pos z) f3-3)
          )
        (set! (-> vertices 2 pos z) f1-5)
        (set! (-> vertices 3 pos z) f1-5)
        )
      (set! (-> vertices 0 pos w) 0.0)
      (set! (-> vertices 1 pos w) 0.0)
      (set! (-> vertices 2 pos w) 0.5)
      (set! (-> vertices 3 pos w) 0.5)
      (add-colors! this (-> vertices 0 col) (-> vertices 0))
      (add-colors! this (-> vertices 1 col) (-> vertices 1))
      (set! (-> vertices 2 col quad) (-> s3-0 quad))
      (set! (-> vertices 3 col quad) (-> s3-0 quad))
      (render-ocean-quad vertices arg0)
      (let ((f0-20 (+ 24772608.0 (-> this start-corner x)))
            (f1-8 (+ -5898240.0 (-> this start-corner z)))
            )
        (let ((f2-7 (+ 5898240.0 f0-20))
              (f3-5 (+ -5898240.0 f1-8))
              )
          (set! (-> vertices 0 pos x) f0-20)
          (set! (-> vertices 1 pos x) f2-7)
          (set! (-> vertices 2 pos x) f2-7)
          (set! (-> vertices 3 pos x) f0-20)
          (set! (-> vertices 0 pos z) f3-5)
          (set! (-> vertices 1 pos z) f3-5)
          )
        (set! (-> vertices 2 pos z) f1-8)
        (set! (-> vertices 3 pos z) f1-8)
        )
      (set! (-> vertices 0 pos w) 0.0)
      (set! (-> vertices 1 pos w) 0.0)
      (set! (-> vertices 2 pos w) 0.0)
      (set! (-> vertices 3 pos w) 0.5)
      (add-colors! this (-> vertices 0 col) (-> vertices 0))
      (add-colors! this (-> vertices 1 col) (-> vertices 1))
      (add-colors! this (-> vertices 2 col) (-> vertices 2))
      (set! (-> vertices 3 col quad) (-> s3-0 quad))
      )
    (render-ocean-quad vertices arg0)
    )
  0
  (none)
  )

(defmethod ocean-method-66 ((this ocean) (arg0 dma-buffer))
  ;; og:preserve-this scratchpad
  (let ((vertices (scratchpad-object (inline-array ocean-vertex))))
    (let* ((v1-1 (-> this ocean-colors))
           (f30-0 (-> this start-corner x))
           (f28-0 (+ 18874368.0 (-> this start-corner z)))
           (f26-0 (+ -5898240.0 f30-0))
           (f24-0 (+ 5898240.0 f28-0))
           (s3-0 (new 'stack-no-clear 'vector))
           )
      (rgba-to-vector! this s3-0 (&-> v1-1 colors 2444))
      (set! (-> vertices 0 pos x) f26-0)
      (set! (-> vertices 1 pos x) f30-0)
      (set! (-> vertices 2 pos x) f30-0)
      (set! (-> vertices 3 pos x) f26-0)
      (set! (-> vertices 0 pos z) f28-0)
      (set! (-> vertices 1 pos z) f28-0)
      (set! (-> vertices 2 pos z) f24-0)
      (set! (-> vertices 3 pos z) f24-0)
      (set! (-> vertices 0 pos w) 0.5)
      (set! (-> vertices 1 pos w) 1.0)
      (set! (-> vertices 2 pos w) 0.5)
      (set! (-> vertices 3 pos w) 0.5)
      (set! (-> vertices 0 col quad) (-> s3-0 quad))
      (set! (-> vertices 1 col quad) (-> s3-0 quad))
      (set! (-> vertices 2 col quad) (-> s3-0 quad))
      (set! (-> vertices 3 col quad) (-> s3-0 quad))
      (render-ocean-quad vertices arg0)
      (let* ((f0-8 (+ -5898240.0 (-> this start-corner x)))
             (f1-3 (+ 18874368.0 (-> this start-corner z)))
             (f2-2 (+ -5898240.0 f0-8))
             (f3-1 (+ 5898240.0 f1-3))
             )
        (set! (-> vertices 0 pos x) f2-2)
        (set! (-> vertices 1 pos x) f0-8)
        (set! (-> vertices 2 pos x) f0-8)
        (set! (-> vertices 3 pos x) f2-2)
        (set! (-> vertices 0 pos z) f1-3)
        (set! (-> vertices 1 pos z) f1-3)
        (set! (-> vertices 2 pos z) f3-1)
        (set! (-> vertices 3 pos z) f3-1)
        )
      (set! (-> vertices 0 pos w) 0.0)
      (set! (-> vertices 1 pos w) 0.5)
      (set! (-> vertices 2 pos w) 0.5)
      (set! (-> vertices 3 pos w) 0.0)
      (add-colors! this (-> vertices 0 col) (-> vertices 0))
      (set! (-> vertices 1 col quad) (-> s3-0 quad))
      (set! (-> vertices 2 col quad) (-> s3-0 quad))
      (add-colors! this (-> vertices 3 col) (-> vertices 3))
      (render-ocean-quad vertices arg0)
      (let* ((f0-14 (+ -5898240.0 (-> this start-corner x)))
             (f1-6 (+ 24772608.0 (-> this start-corner z)))
             (f2-5 (+ -5898240.0 f0-14))
             (f3-3 (+ 5898240.0 f1-6))
             )
        (set! (-> vertices 0 pos x) f2-5)
        (set! (-> vertices 1 pos x) f0-14)
        (set! (-> vertices 2 pos x) f0-14)
        (set! (-> vertices 3 pos x) f2-5)
        (set! (-> vertices 0 pos z) f1-6)
        (set! (-> vertices 1 pos z) f1-6)
        (set! (-> vertices 2 pos z) f3-3)
        (set! (-> vertices 3 pos z) f3-3)
        )
      (set! (-> vertices 0 pos w) 0.0)
      (set! (-> vertices 1 pos w) 0.5)
      (set! (-> vertices 2 pos w) 0.0)
      (set! (-> vertices 3 pos w) 0.0)
      (add-colors! this (-> vertices 0 col) (-> vertices 0))
      (set! (-> vertices 1 col quad) (-> s3-0 quad))
      (add-colors! this (-> vertices 2 col) (-> vertices 2))
      (add-colors! this (-> vertices 3 col) (-> vertices 3))
      (render-ocean-quad vertices arg0)
      (let* ((f0-19 (-> this start-corner x))
             (f1-8 (+ 24772608.0 (-> this start-corner z)))
             (f2-8 (+ -5898240.0 f0-19))
             (f3-5 (+ 5898240.0 f1-8))
             )
        (set! (-> vertices 0 pos x) f2-8)
        (set! (-> vertices 1 pos x) f0-19)
        (set! (-> vertices 2 pos x) f0-19)
        (set! (-> vertices 3 pos x) f2-8)
        (set! (-> vertices 0 pos z) f1-8)
        (set! (-> vertices 1 pos z) f1-8)
        (set! (-> vertices 2 pos z) f3-5)
        (set! (-> vertices 3 pos z) f3-5)
        )
      (set! (-> vertices 0 pos w) 0.5)
      (set! (-> vertices 1 pos w) 0.5)
      (set! (-> vertices 2 pos w) 0.0)
      (set! (-> vertices 3 pos w) 0.0)
      (set! (-> vertices 0 col quad) (-> s3-0 quad))
      (set! (-> vertices 1 col quad) (-> s3-0 quad))
      )
    (add-colors! this (-> vertices 2 col) (-> vertices 2))
    (add-colors! this (-> vertices 3 col) (-> vertices 3))
    (render-ocean-quad vertices arg0)
    )
  0
  (none)
  )

(defmethod ocean-method-67 ((this ocean) (arg0 dma-buffer))
  ;; og:preserve-this scratchpad
  (let ((vertices (scratchpad-object (inline-array ocean-vertex))))
    (let* ((v1-1 (-> this ocean-colors))
           (f30-0 (+ 18874368.0 (-> this start-corner x)))
           (f28-0 (+ 18874368.0 (-> this start-corner z)))
           (f26-0 (+ 5898240.0 f30-0))
           (f24-0 (+ 5898240.0 f28-0))
           (s3-0 (new 'stack-no-clear 'vector))
           )
      (rgba-to-vector! this s3-0 (&-> v1-1 colors 2491))
      (set! (-> vertices 0 pos x) f30-0)
      (set! (-> vertices 1 pos x) f26-0)
      (set! (-> vertices 2 pos x) f26-0)
      (set! (-> vertices 3 pos x) f30-0)
      (set! (-> vertices 0 pos z) f28-0)
      (set! (-> vertices 1 pos z) f28-0)
      (set! (-> vertices 2 pos z) f24-0)
      (set! (-> vertices 3 pos z) f24-0)
      (set! (-> vertices 0 pos w) 1.0)
      (set! (-> vertices 1 pos w) 0.5)
      (set! (-> vertices 2 pos w) 0.5)
      (set! (-> vertices 3 pos w) 0.5)
      (set! (-> vertices 0 col quad) (-> s3-0 quad))
      (set! (-> vertices 1 col quad) (-> s3-0 quad))
      (set! (-> vertices 2 col quad) (-> s3-0 quad))
      (set! (-> vertices 3 col quad) (-> s3-0 quad))
      (render-ocean-quad vertices arg0)
      (let* ((f0-9 (+ 24772608.0 (-> this start-corner x)))
             (f1-4 (+ 18874368.0 (-> this start-corner z)))
             (f2-2 (+ 5898240.0 f0-9))
             (f3-1 (+ 5898240.0 f1-4))
             )
        (set! (-> vertices 0 pos x) f0-9)
        (set! (-> vertices 1 pos x) f2-2)
        (set! (-> vertices 2 pos x) f2-2)
        (set! (-> vertices 3 pos x) f0-9)
        (set! (-> vertices 0 pos z) f1-4)
        (set! (-> vertices 1 pos z) f1-4)
        (set! (-> vertices 2 pos z) f3-1)
        (set! (-> vertices 3 pos z) f3-1)
        )
      (set! (-> vertices 0 pos w) 0.5)
      (set! (-> vertices 1 pos w) 0.0)
      (set! (-> vertices 2 pos w) 0.0)
      (set! (-> vertices 3 pos w) 0.5)
      (set! (-> vertices 0 col quad) (-> s3-0 quad))
      (add-colors! this (-> vertices 1 col) (-> vertices 1))
      (add-colors! this (-> vertices 2 col) (-> vertices 2))
      (set! (-> vertices 3 col quad) (-> s3-0 quad))
      (render-ocean-quad vertices arg0)
      (let* ((f0-15 (+ 18874368.0 (-> this start-corner x)))
             (f1-7 (+ 24772608.0 (-> this start-corner z)))
             (f2-5 (+ 5898240.0 f0-15))
             (f3-3 (+ 5898240.0 f1-7))
             )
        (set! (-> vertices 0 pos x) f0-15)
        (set! (-> vertices 1 pos x) f2-5)
        (set! (-> vertices 2 pos x) f2-5)
        (set! (-> vertices 3 pos x) f0-15)
        (set! (-> vertices 0 pos z) f1-7)
        (set! (-> vertices 1 pos z) f1-7)
        (set! (-> vertices 2 pos z) f3-3)
        (set! (-> vertices 3 pos z) f3-3)
        )
      (set! (-> vertices 0 pos w) 0.5)
      (set! (-> vertices 1 pos w) 0.5)
      (set! (-> vertices 2 pos w) 0.0)
      (set! (-> vertices 3 pos w) 0.0)
      (set! (-> vertices 0 col quad) (-> s3-0 quad))
      (set! (-> vertices 1 col quad) (-> s3-0 quad))
      (add-colors! this (-> vertices 2 col) (-> vertices 2))
      (add-colors! this (-> vertices 3 col) (-> vertices 3))
      (render-ocean-quad vertices arg0)
      (let* ((f0-21 (+ 24772608.0 (-> this start-corner x)))
             (f1-10 (+ 24772608.0 (-> this start-corner z)))
             (f2-8 (+ 5898240.0 f0-21))
             (f3-5 (+ 5898240.0 f1-10))
             )
        (set! (-> vertices 0 pos x) f0-21)
        (set! (-> vertices 1 pos x) f2-8)
        (set! (-> vertices 2 pos x) f2-8)
        (set! (-> vertices 3 pos x) f0-21)
        (set! (-> vertices 0 pos z) f1-10)
        (set! (-> vertices 1 pos z) f1-10)
        (set! (-> vertices 2 pos z) f3-5)
        (set! (-> vertices 3 pos z) f3-5)
        )
      (set! (-> vertices 0 pos w) 0.5)
      (set! (-> vertices 1 pos w) 0.0)
      (set! (-> vertices 2 pos w) 0.0)
      (set! (-> vertices 3 pos w) 0.0)
      (set! (-> vertices 0 col quad) (-> s3-0 quad))
      )
    (add-colors! this (-> vertices 1 col) (-> vertices 1))
    (add-colors! this (-> vertices 2 col) (-> vertices 2))
    (add-colors! this (-> vertices 3 col) (-> vertices 3))
    (render-ocean-quad vertices arg0)
    )
  0
  (none)
  )

(defmethod render-ocean-far ((this ocean) (arg1 dma-buffer) (facing int))
  ;; og:preserve-this scratchpad
  (let ((vertices (scratchpad-object (inline-array ocean-vertex))))
    (let ((f0-0 (-> this start-corner y)))
      (set! (-> vertices 0 pos y) f0-0)
      (set! (-> vertices 1 pos y) f0-0)
      (set! (-> vertices 2 pos y) f0-0)
      (set! (-> vertices 3 pos y) f0-0)
      )
    (set-vector! (-> vertices 0 stq) 0.0 0.0 1.0 1.0)
    (set-vector! (-> vertices 1 stq) 1.0 0.0 1.0 1.0)
    (set-vector! (-> vertices 2 stq) 1.0 15.0 1.0 1.0)
    (set-vector! (-> vertices 3 stq) 0.0 15.0 1.0 1.0)
    (if (not (logtest? facing 2))
        (ocean-method-60 this arg1)
        )
    (if (not (logtest? facing 4))
        (ocean-method-61 this arg1)
        )
    (set-vector! (-> vertices 0 stq) 0.0 0.0 1.0 1.0)
    (set-vector! (-> vertices 1 stq) 15.0 0.0 1.0 1.0)
    (set-vector! (-> vertices 2 stq) 15.0 1.0 1.0 1.0)
    (set-vector! (-> vertices 3 stq) 0.0 1.0 1.0 1.0)
    (if (not (logtest? facing 16))
        (ocean-method-62 this arg1)
        )
    (if (not (logtest? facing 8))
        (ocean-method-63 this arg1)
        )
    (set-vector! (-> vertices 0 stq) 0.0 0.0 1.0 1.0)
    (set-vector! (-> vertices 1 stq) 15.0 0.0 1.0 1.0)
    (set-vector! (-> vertices 2 stq) 15.0 15.0 1.0 1.0)
    (set-vector! (-> vertices 3 stq) 0.0 15.0 1.0 1.0)
    )
  (if (not (or (logtest? facing 2) (logtest? facing 16)))
      (ocean-method-64 this arg1)
      )
  (if (not (or (logtest? facing 2) (logtest? facing 8)))
      (ocean-method-65 this arg1)
      )
  (if (not (or (logtest? facing 4) (logtest? facing 16)))
      (ocean-method-66 this arg1)
      )
  (if (not (or (logtest? facing 4) (logtest? facing 8)))
      (ocean-method-67 this arg1)
      )
  0
  (none)
  )

;; WARN: Return type mismatch uint vs none.
(defmethod draw-ocean-far ((this ocean) (arg0 dma-buffer))
  (init-ocean-far-regs)
  (let ((gp-0 (the-as object (-> arg0 base))))
    (&+! (-> arg0 base) 16)
    (let ((v1-2 (-> this ocean-facing)))
      (cond
        ((zero? v1-2)
         (render-ocean-far this arg0 4)
         )
        ((= v1-2 1)
         (render-ocean-far this arg0 2)
         )
        ((= v1-2 3)
         (render-ocean-far this arg0 8)
         )
        ((= v1-2 2)
         (render-ocean-far this arg0 16)
         )
        )
      )
    (close-sky-buffer arg0)
    (let ((v1-15 (/ (the-as int (+ (- -16 (the-as int gp-0)) (the-as int (-> arg0 base)))) 16)))
      (set! (-> (the-as dma-packet gp-0) dma) (new 'static 'dma-tag :id (dma-tag-id cnt) :qwc v1-15))
      (set! (-> (the-as dma-packet gp-0) vif0) (new 'static 'vif-tag))
      (set! (-> (the-as dma-packet gp-0) vif1) (new 'static 'vif-tag :cmd (vif-cmd direct) :msk #x1 :imm v1-15))
      )
    )
  (none)
  )

;; WARN: Return type mismatch pointer vs none.
(defmethod init-buffer! ((this ocean) (arg0 dma-buffer))
  "Initialize [[ocean]] DMA buffer."
  (dma-buffer-add-gs-set arg0
                         (test-1 (new 'static 'gs-test :ate #x1 :atst (gs-atest always) :zte #x1 :ztst (gs-ztest always)))
                         (alpha-1 (new 'static 'gs-alpha :b #x1 :d #x1))
                         (tex0-1 (new 'static 'gs-tex0 :tbp0 #x2a0 :tbw #x2 :th (log2 128) :tw (log2 128)))
                         (tex1-1 (-> this tex1))
                         (texa (new 'static 'gs-texa :ta0 #x80 :ta1 #x80))
                         (miptbp1-1 (new 'static 'gs-miptbp :tbp1 #x6a0 :tbw1 #x1 :tbp2 #x7a0 :tbp3 #x7e0))
                         (miptbp2-1 (new 'static 'gs-miptbp :tbp1 #x800 :tbp2 #x820 :tbp3 #x840))
                         (clamp-1 (new 'static 'gs-clamp))
                         (fogcol *fog-color*)
                         )
  (none)
  )

(defmethod end-buffer! ((this ocean) (arg0 dma-buffer))
  (dma-buffer-add-gs-set arg0 (texa (new 'static 'gs-texa :ta1 #x80)))
  0
  (none)
  )

(defmethod set-height! ((this ocean-map) (arg0 float))
  (if this
      (set! (-> this start-corner y) arg0)
      )
  0
  (none)
  )

(defmethod get-base-height ((this ocean-map))
  (if this
      (-> this start-corner y)
      0.0
      )
  )

(defmethod rgba-to-vector! ((this ocean) (arg0 vector) (arg1 (pointer rgba)))
  "Pack an [[rgba]]'s bytes into a vector."
  (local-vars (v1-1 uint128) (v1-2 uint128))
  (rlet ((vf1 :class vf))
    (let ((v1-0 (the-as uint128 (-> (the-as (pointer int32) arg1) 0))))
      (.pextlb v1-1 0 v1-0)
      )
    (.pextlh v1-2 0 v1-1)
    (.mov vf1 v1-2)
    (.itof.vf vf1 vf1)
    (.svf (&-> arg0 quad) vf1)
    0
    (none)
    )
  )

;; ERROR: Unsupported inline assembly instruction kind - [psrah a2, a2, 8]

(defmethod update-map ((this ocean))
  (set! (-> this heights) #f)
  (set! (-> this verts) #f)
  (let ((s5-0 *mood-control*))
    (set! (-> this constant w) (if (and (-> s5-0 overide-weather-flag) (not (movie?)))
                                   (-> s5-0 overide cloud)
                                   (-> s5-0 current-interp cloud)
                                   )
          )
    )
  (set! (-> this constant w) (fmin 1.0 (* 2.0 (-> this constant w))))
  (let ((f0-5 1.0)
        (f30-0 1.0)
        )
    (when (= (-> *bigmap* bigmap-index) 13)
      (set! f0-5 0.333)
      (set! f30-0 0.75)
      )
    (set! (-> this frame-speed) (* (+ 4.0 (-> *setting-control* user-current rain)) f0-5))
    (set! (-> this frame-speed2) (* (+ 5.0 (-> *setting-control* user-current rain)) f0-5))
    (when (not (paused?))
      (let ((f0-8 (+ (-> this frame-num) (* (-> this frame-speed) (seconds-per-frame)))))
        (set! (-> this frame-num) (- f0-8 (* (the float (the int (/ f0-8 64.0))) 64.0)))
        )
      (let ((f0-11 (+ (-> this frame-num2) (* (-> this frame-speed2) (seconds-per-frame)))))
        (set! (-> this frame-num2) (- f0-11 (* (the float (the int (/ f0-11 64.0))) 64.0)))
        )
      )
    (let ((s5-1 (-> *display* frames (-> *display* on-screen) global-buf)))
      (set! (-> this heights) (the-as ocean-height-array (-> s5-1 base)))
      (interp-wave
        this
        (the-as ocean-wave-info (-> this heights))
        (the-as uint (-> this frame-num))
        (* 0.08325 f30-0)
        )
      (&+! (-> s5-1 base) 4096)
      (set! (-> this heights2) (the-as ocean-height-array (-> s5-1 base)))
      (interp-wave
        this
        (the-as ocean-wave-info (-> this heights2))
        (the-as uint (-> this frame-num2))
        (* 0.01665 f30-0)
        )
      (&+! (-> s5-1 base) 4096)
      (ocean-method-15 this (the-as matrix (-> this heights)) (the-as matrix (-> this heights2)))
      (set! (-> this verts) (the-as ocean-vert-array (-> s5-1 base)))
      (&+! (-> s5-1 base) #x8000)
      )
    )
  (when (not (or (-> this off) (-> *blit-displays-work* menu-mode)))
    (when (logtest? (-> *display* vu1-enable-user) (vu1-renderer-mask ocean))
      (mem-copy! (the-as pointer (-> this cloud-lights)) (the-as pointer (-> *sky-work* cloud-lights)) 156)
      (mem-copy! (the-as pointer (-> this haze-lights)) (the-as pointer (-> *sky-work* haze-lights)) 124)
      (vector4-scale!
        (the-as vector4 (-> this sky-color))
        (the-as vector4 (-> *time-of-day-context* current-sky-color))
        0.0078125
        )
      (generate-verts this (-> this verts) (-> this heights))
      (let* ((s4-0 (-> *display* frames (-> *display* on-screen) global-buf))
             (s5-2 (-> s4-0 base))
             )
          ;; TODO handle ocean::79 and ocean::89
          ;; diasble tod ocean stuff
          ;; (if (-> *time-of-day-context* sky)
          ;;     (ocean-method-89 this s4-0)
          ;;     )
        (draw-ocean-texture this s4-0 (the-as int (-> this verts)))
          ;; disable whatever this is
          ;; (ocean-method-79 this s4-0)
        (init-buffer! this s4-0)
        (if (-> this far-on)
            (draw-ocean-far this s4-0)
            )
        (if (not (-> this mid-off))
            (draw-ocean-mid this s4-0)
            )
        (end-buffer! this s4-0)
        (set-dirty-mask! (-> *level* default-level) 9 #xc0000 #x2a000)
        (let ((a3-3 (-> s4-0 base)))
          (let ((v1-87 (the-as object (-> s4-0 base))))
            (set! (-> (the-as dma-packet v1-87) dma) (new 'static 'dma-tag :id (dma-tag-id next)))
            (set! (-> (the-as dma-packet v1-87) vif0) (new 'static 'vif-tag))
            (set! (-> (the-as dma-packet v1-87) vif1) (new 'static 'vif-tag))
            (set! (-> s4-0 base) (&+ (the-as pointer v1-87) 16))
            )
          (dma-bucket-insert-tag
            (-> *display* frames (-> *display* on-screen) bucket-group)
            (bucket-id ocean-mid-far)
            s5-2
            (the-as (pointer dma-tag) a3-3)
            )
          )
        )
      (when (not (or (-> this near-off)
                     (or (-> this mid-off) (< 196608.0 (fabs (- (-> this start-corner y) (-> *math-camera* trans y)))))
                     )
                 )
        (let* ((s4-1 (-> *display* frames (-> *display* on-screen) global-buf))
               (s5-3 (-> s4-1 base))
               )
          (draw-ocean-texture this s4-1 (the-as int (-> this verts)))
          (draw-ocean-near this s4-1)
          (end-buffer! this s4-1)
          (set-dirty-mask! (-> *level* default-level) 7 #xc0000 #x2a000)
          (let ((a3-5 (-> s4-1 base)))
            (let ((v1-113 (the-as object (-> s4-1 base))))
              (set! (-> (the-as dma-packet v1-113) dma) (new 'static 'dma-tag :id (dma-tag-id next)))
              (set! (-> (the-as dma-packet v1-113) vif0) (new 'static 'vif-tag))
              (set! (-> (the-as dma-packet v1-113) vif1) (new 'static 'vif-tag))
              (set! (-> s4-1 base) (&+ (the-as pointer v1-113) 16))
              )
            (dma-bucket-insert-tag
              (-> *display* frames (-> *display* on-screen) bucket-group)
              (bucket-id ocean-near)
              s5-3
              (the-as (pointer dma-tag) a3-5)
              )
            )
          )
        )
      )
    )
  (when (not (paused?))
    (set! (-> this off) #f)
    (set! (-> this mid-off) #f)
    (set! (-> this near-off) (if this
                                 (not (-> this ocean-near-translucent?))
                                 #f
                                 )
          )
    )
  0
  (none)
  )

;; og:preserve-this PC Port hack
(define *ocean-generate-verts-vector* (new 'global 'vector))

(set-vector! *ocean-generate-verts-vector*
             (the-as float #x43000000) ;; in jak1, this component was different!
             (the-as float #x43000000)
             (the-as float #x43000000)
             (the-as float #x43000000)
             )

(defmethod draw! ((this ocean))
  (do-tex-scroll! this)
  (set! *ocean-map* #f)
  (set! (-> this far-on) #f)
  (dotimes (v1-2 (-> *level* length))
    (let ((a0-5 (-> *level* level v1-2)))
      (when (= (-> a0-5 status) 'active)
        (if (-> a0-5 info ocean-far?)
            (set! (-> this far-on) #t)
            )
        (let ((a1-7 (-> a0-5 info ocean)))
          (cond
            ((= a1-7 'none)
             (when (-> a0-5 meta-inside?)
               (set! *ocean-map* #f)
               (goto cfg-17)
               )
             )
            ((and a1-7 (nonzero? (-> a1-7 value)))
             (set! *ocean-map* (the-as ocean-map (-> a1-7 value)))
             (set! (-> this ocean-near-translucent?) (-> a0-5 info ocean-near-translucent?))
             )
            )
          )
        )
      )
    )
  (label cfg-17)
  (if *ocean-map*
      (mem-copy! (the-as pointer this) (the-as pointer *ocean-map*) 56)
      )
  (let ((v1-9 (new 'stack-no-clear 'vector)))
    (if (-> *time-of-day-context* use-camera-other)
        (set! (-> v1-9 quad) (-> *math-camera* inv-camera-rot-other vector 2 quad))
        (set! (-> v1-9 quad) (-> *math-camera* inv-camera-rot vector 2 quad))
        )
    (cond
      ((< (fabs (-> v1-9 z)) (fabs (-> v1-9 x)))
       (if (< (-> v1-9 x) 0.0)
           (set! (-> this ocean-facing) (the-as uint 3))
           (set! (-> this ocean-facing) (the-as uint 2))
           )
       )
      ((< (-> v1-9 z) 0.0)
       (set! (-> this ocean-facing) (the-as uint 0))
       0
       )
      (else
        (set! (-> this ocean-facing) (the-as uint 1))
        )
      )
    )
  0
  (none)
  )
