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

;; name: temple-mood.gc
;; name in dgo: temple-mood
;; dgos: TEMA

;; DECOMP BEGINS

(deftype templea-states (structure)
  ((flame  flames-state  :inline)
   (rot    float)
   )
  )


(defun init-mood-templea ((arg0 mood-context))
  (let ((v1-0 (-> arg0 light-group 3)))
    (set-vector! (-> v1-0 ambi color) 1.2556 1.0533 1.0163 1.0)
    (let ((a1-1 (-> v1-0 dir0)))
      (set! (-> a1-1 direction x) 0.5773)
      (set! (-> a1-1 direction y) 0.5773)
      (set! (-> a1-1 direction z) 0.5773)
      (set! (-> a1-1 direction w) 0.0)
      )
    (set-vector! (-> v1-0 dir0 color) 1.2556 1.0533 1.0163 1.0)
    (let ((a1-3 (-> v1-0 dir1)))
      (set! (-> a1-3 direction x) -0.5773)
      (set! (-> a1-3 direction y) 0.5773)
      (set! (-> a1-3 direction z) -0.5773)
      (set! (-> a1-3 direction w) 0.0)
      )
    (set-vector! (-> v1-0 dir1 color) 1.1556 1.0533 0.9163 1.0)
    (set! (-> v1-0 dir0 extra x) 0.5)
    (set! (-> v1-0 dir1 extra x) 1.15)
    (set! (-> v1-0 dir2 extra x) 0.0)
    (set! (-> v1-0 ambi extra x) 0.1)
    )
  (let ((v1-2 (-> arg0 light-group 4)))
    (set-vector! (-> v1-2 ambi color) 1.2556 1.0533 1.0163 1.0)
    (let ((a1-9 (-> v1-2 dir0)))
      (set! (-> a1-9 direction x) 0.0)
      (set! (-> a1-9 direction y) 0.7071)
      (set! (-> a1-9 direction z) 0.7071)
      (set! (-> a1-9 direction w) 0.0)
      )
    (set-vector! (-> v1-2 dir0 color) 1.2556 1.0533 1.0163 1.0)
    (let ((a1-11 (-> v1-2 dir1)))
      (set! (-> a1-11 direction x) 0.0)
      (set! (-> a1-11 direction y) 0.7071)
      (set! (-> a1-11 direction z) -0.7071)
      (set! (-> a1-11 direction w) 0.0)
      )
    (set-vector! (-> v1-2 dir1 color) 1.2556 1.0533 1.0163 1.0)
    (set! (-> v1-2 dir0 extra x) 0.75)
    (set! (-> v1-2 dir1 extra x) 0.7)
    (set! (-> v1-2 dir2 extra x) 0.0)
    (set! (-> v1-2 ambi extra x) 0.1)
    )
  (let ((v1-4 (-> arg0 light-group 5)))
    (let ((a1-16 (-> v1-4 dir0)))
      (set! (-> a1-16 direction x) 0.0)
      (set! (-> a1-16 direction y) -1.0)
      (set! (-> a1-16 direction z) 0.0)
      (set! (-> a1-16 direction w) 0.0)
      )
    (set-vector! (-> v1-4 dir0 color) 0.667 0.667 0.667 1.0)
    (let ((a1-18 (-> v1-4 dir1)))
      (set! (-> a1-18 direction x) 0.0)
      (set! (-> a1-18 direction y) 1.0)
      (set! (-> a1-18 direction z) 0.0)
      (set! (-> a1-18 direction w) 0.0)
      )
    (set-vector! (-> v1-4 dir1 color) 0.667 0.667 0.667 1.0)
    (set-vector! (-> v1-4 ambi color) 0.333 0.333 0.333 1.0)
    (set! (-> v1-4 dir0 extra x) 1.0)
    (set! (-> v1-4 dir1 extra x) 0.5)
    (set! (-> v1-4 dir2 extra x) 0.0)
    (set! (-> v1-4 ambi extra x) 1.0)
    )
  (let ((v1-6 (-> arg0 light-group 6)))
    (set-vector! (-> v1-6 ambi color) 1.2556 1.0533 1.0163 1.0)
    (let ((a0-2 (-> v1-6 dir0)))
      (set! (-> a0-2 direction x) 0.5773)
      (set! (-> a0-2 direction y) 0.5773)
      (set! (-> a0-2 direction z) 0.5773)
      (set! (-> a0-2 direction w) 0.0)
      )
    (set-vector! (-> v1-6 dir0 color) 1.4556 1.1533 0.8163 1.0)
    (let ((a0-4 (-> v1-6 dir1)))
      (set! (-> a0-4 direction x) -0.5773)
      (set! (-> a0-4 direction y) 0.5773)
      (set! (-> a0-4 direction z) -0.5773)
      (set! (-> a0-4 direction w) 0.0)
      )
    (set-vector! (-> v1-6 dir1 color) 1.4 1.2 0.8 1.0)
    (set! (-> v1-6 dir0 extra x) 0.55)
    (set! (-> v1-6 dir1 extra x) 0.7)
    (set! (-> v1-6 dir2 extra x) 0.0)
    (set! (-> v1-6 ambi extra x) 0.1)
    )
  )

;; WARN: Return type mismatch float vs none.
(defun update-templea-lights ((arg0 mood-context))
  (let ((v1-0 (-> arg0 current-fog)))
    (set-vector! (-> v1-0 fog-color) 0.0 44.7999 57.5999 1.0)
    (set-vector! (-> v1-0 fog-dists) -131072.0 1843200.0 255.0 128.0)
    (set-vector! (-> v1-0 erase-color) 0.0 0.0 0.0 128.0)
    )
  (let ((s5-0 (-> arg0 light-group 1)))
    (mem-copy! (the-as pointer s5-0) (the-as pointer (-> *level* level-default mood-context light-group)) 192)
    (set! (-> s5-0 ambi extra x) 0.8)
    )
  (let ((v1-5 (-> arg0 light-group 2)))
    (set-vector! (-> v1-5 ambi color) 1.8556 1.0533 0.1163 1.0)
    (set! (-> v1-5 dir0 color quad) (-> arg0 times 0 quad))
    (set-vector! (-> v1-5 dir1 color) 1.0 0.85 0.85 1.0)
    (vector-float*! (the-as vector (-> v1-5 ambi color)) (the-as vector (-> v1-5 ambi color)) 0.135)
    (vector-float*! (the-as vector (-> v1-5 dir1 color)) (the-as vector (-> v1-5 dir1 color)) 0.35)
    (vector-!
      (the-as vector (-> v1-5 dir1 color))
      (the-as vector (-> v1-5 dir1 color))
      (the-as vector (-> v1-5 ambi color))
      )
    (let ((a0-13 (-> v1-5 dir0)))
      (set! (-> a0-13 direction x) 0.0)
      (set! (-> a0-13 direction y) 1.0)
      (set! (-> a0-13 direction z) 0.0)
      (set! (-> a0-13 direction w) 0.0)
      )
    (let ((a0-14 (-> v1-5 dir1)))
      (set! (-> a0-14 direction x) 0.0)
      (set! (-> a0-14 direction y) 1.0)
      (set! (-> a0-14 direction z) 0.0)
      (set! (-> a0-14 direction w) 0.0)
      )
    (set! (-> v1-5 ambi extra x) 1.0)
    (set! (-> v1-5 dir0 extra x) 0.8)
    (set! (-> v1-5 dir1 extra x) 1.0)
    )
  (none)
  )

(defbehavior update-mood-templea time-of-day-proc ((arg0 mood-context) (arg1 float) (arg2 int))
  (update-mood-interior-ambient arg0 #f 0.5)
  (update-templea-lights arg0)
  (cond
    ((< (the-as uint 8) (the-as uint (-> *time-of-day-context* mode)))
     (palette-select-special arg0)
     )
    (else
      (let ((s5-0 (the-as object (-> arg0 state))))
        (set! (-> arg0 times 0 w) 1.0)
        (update-mood-flames arg0 1 2 0 0.5 0.0009765625 1.5)
        (update-mood-caustics arg0 3 (-> (the-as templea-states s5-0) rot) 0.0 0.66 0.4)
        (update-mood-caustics arg0 4 (-> (the-as templea-states s5-0) rot) 21845.334 0.66 0.4)
        (update-mood-caustics arg0 5 (-> (the-as templea-states s5-0) rot) 43690.668 0.66 0.4)
        (if (not (paused?))
            (+! (-> (the-as templea-states s5-0) rot) (* 65536.0 (seconds-per-frame)))
            )
        )
      (set! (-> arg0 times 6 w) 1.0)
      (set! (-> arg0 times 7 w) 1.0)
      )
    )
  0
  (none)
  )

(deftype templed-states (structure)
  ((light  light-state   :inline)
   (flame  flames-state  :inline)
   )
  )


;; WARN: Return type mismatch float vs none.
(defun update-templed-lights ((arg0 mood-context))
  (let ((v1-0 (-> arg0 current-fog)))
    (set-vector! (-> v1-0 fog-color) 0.0 44.7999 57.5999 1.0)
    (set-vector! (-> v1-0 fog-dists) 131072.0 1843200.0 255.0 128.0)
    (set-vector! (-> v1-0 erase-color) 0.0 0.0 0.0 128.0)
    )
  (let ((s5-0 (-> arg0 light-group 1)))
    (mem-copy! (the-as pointer s5-0) (the-as pointer (-> *level* level-default mood-context light-group)) 192)
    (set! (-> s5-0 ambi extra x) 0.8)
    )
  (let ((s5-1 (-> arg0 light-group 2)))
    (let ((s4-0 (new 'static 'vector :x 1.0 :y 0.65 :z 0.4 :w 1.0)))
      (mem-copy! (the-as pointer s5-1) (the-as pointer (-> *level* level-default mood-context light-group)) 192)
      (vector*! (the-as vector (-> s5-1 dir0 color)) (the-as vector (-> s5-1 dir0 color)) s4-0)
      (vector*! (the-as vector (-> s5-1 dir1 color)) (the-as vector (-> s5-1 dir1 color)) s4-0)
      )
    (set! (-> s5-1 ambi extra x) 0.8)
    )
  (let ((v1-10 (-> arg0 light-group 3)))
    (vector-float*! (the-as vector (-> v1-10 ambi color)) (-> arg0 times 0) 0.55)
    (vector+!
      (the-as vector (-> v1-10 ambi color))
      (the-as vector (-> v1-10 ambi color))
      (new 'static 'vector :x 0.4253 :y 0.39 :z 0.45 :w 1.0)
      )
    (set! (-> v1-10 dir0 color quad) (-> arg0 times 0 quad))
    (let ((a0-13 (-> v1-10 dir0)))
      (set! (-> a0-13 direction x) 0.0)
      (set! (-> a0-13 direction y) 1.0)
      (set! (-> a0-13 direction z) 0.0)
      (set! (-> a0-13 direction w) 0.0)
      )
    (set! (-> v1-10 ambi extra x) 0.8)
    (set! (-> v1-10 dir0 extra x) 0.8)
    (set! (-> v1-10 dir1 extra x) 0.0)
    (set! (-> v1-10 dir2 extra x) 0.0)
    )
  (none)
  )

(defun init-mood-templed ((arg0 mood-context))
  (let ((v1-0 (-> arg0 light-group 4)))
    (let ((a0-1 (-> v1-0 dir0)))
      (set! (-> a0-1 direction x) 0.0)
      (set! (-> a0-1 direction y) 1.0)
      (set! (-> a0-1 direction z) 0.0)
      (set! (-> a0-1 direction w) 0.0)
      )
    (set-vector! (-> v1-0 dir0 color) 0.667 0.667 0.667 1.0)
    (set-vector! (-> v1-0 ambi color) 0.333 0.333 0.333 1.0)
    (set! (-> v1-0 dir0 extra x) 0.75)
    (set! (-> v1-0 dir1 extra x) 0.0)
    (set! (-> v1-0 dir2 extra x) 0.0)
    (set! (-> v1-0 ambi extra x) 0.25)
    )
  )

(defbehavior update-mood-templed time-of-day-proc ((arg0 mood-context) (arg1 float) (arg2 int))
  (copy-mood-exterior arg0)
  (update-templed-lights arg0)
  (when (and (= (-> *level* level arg2 status) 'active)
             (< (the-as uint (-> *time-of-day-context* mode)) (the-as uint 9))
             )
    (-> arg0 state)
    (set! (-> arg0 times 5 w) 1.0)
    (update-mood-flames arg0 6 2 8 0.5 0.0009765625 1.5)
    )
  0
  (none)
  )
