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

;; definition of type setting-data
(deftype setting-data (structure)
  ((border-mode          symbol               :offset-assert   0)
   (sfx-volume           float                :offset-assert   4)
   (music-volume         float                :offset-assert   8)
   (dialog-volume        float                :offset-assert  12)
   (process-mask         process-mask         :offset-assert  16)
   (common-page          int32                :offset-assert  20)
   (language             language-enum        :offset-assert  24)
   (screenx              int32                :offset-assert  32)
   (screeny              int32                :offset-assert  36)
   (vibration            symbol               :offset-assert  40)
   (play-hints           symbol               :offset-assert  44)
   (movie                (pointer process)    :offset-assert  48)
   (talking              (pointer process)    :offset-assert  52)
   (spooling             (pointer process)    :offset-assert  56)
   (hint                 (pointer process)    :offset-assert  60)
   (ambient              (pointer process)    :offset-assert  64)
   (video-mode           symbol               :offset-assert  68)
   (aspect-ratio         symbol               :offset-assert  72)
   (sound-flava          uint8                :offset-assert  76)
   (auto-save            symbol               :offset-assert  80)
   (music-volume-movie   float                :offset-assert  84)
   (sfx-volume-movie     float                :offset-assert  88)
   (music                symbol               :offset-assert  92)
   (bg-r                 float                :offset-assert  96)
   (bg-g                 float                :offset-assert 100)
   (bg-b                 float                :offset-assert 104)
   (bg-a                 float                :offset-assert 108)
   (bg-a-speed           float                :offset-assert 112)
   (bg-a-force           float                :offset-assert 116)
   (allow-progress       symbol               :offset-assert 120)
   (allow-pause          symbol               :offset-assert 124)
   (sound-flava-priority float                :offset-assert 128)
   (ocean-off            symbol               :offset-assert 132)
   (allow-look-around    symbol               :offset-assert 136)
   (ambient-volume       float                :offset-assert 140)
   (ambient-volume-movie float                :offset-assert 144)
   (dialog-volume-hint   float                :offset-assert 148)
   (dummy                uint32            11 :offset-assert 152)
   )
  :method-count-assert 10
  :size-assert         #xc4
  :flag-assert         #xa000000c4
  (:methods
    (update-from-engine (_type_ engine) setting-data 9)
    )
  )

;; definition for method 3 of type setting-data
(defmethod inspect setting-data ((obj setting-data))
  (format #t "[~8x] ~A~%" obj 'setting-data)
  (format #t "~Tborder-mode: ~A~%" (-> obj border-mode))
  (format #t "~Tsfx-volume: ~f~%" (-> obj sfx-volume))
  (format #t "~Tmusic-volume: ~f~%" (-> obj music-volume))
  (format #t "~Tdialog-volume: ~f~%" (-> obj dialog-volume))
  (format #t "~Tprocess-mask: ~D~%" (-> obj process-mask))
  (format #t "~Tcommon-page: ~D~%" (-> obj common-page))
  (format #t "~Tlanguage: ~D~%" (-> obj language))
  (format #t "~Tscreenx: ~D~%" (-> obj screenx))
  (format #t "~Tscreeny: ~D~%" (-> obj screeny))
  (format #t "~Tvibration: ~A~%" (-> obj vibration))
  (format #t "~Tplay-hints: ~A~%" (-> obj play-hints))
  (format #t "~Tmovie: ~A~%" (ppointer->process (-> obj movie)))
  (format #t "~Ttalking: ~A~%" (ppointer->process (-> obj talking)))
  (format #t "~Tspooling: ~A~%" (ppointer->process (-> obj spooling)))
  (format #t "~Thint: ~A~%" (ppointer->process (-> obj hint)))
  (format #t "~Tambient: ~A~%" (ppointer->process (-> obj ambient)))
  (format #t "~Tvideo-mode: ~A~%" (-> obj video-mode))
  (format #t "~Taspect-ratio: ~A~%" (-> obj aspect-ratio))
  (format #t "~Tsound-flava: ~D~%" (-> obj sound-flava))
  (format #t "~Tauto-save: ~A~%" (-> obj auto-save))
  (format #t "~Tmusic-volume-movie: ~f~%" (-> obj music-volume-movie))
  (format #t "~Tsfx-volume-movie: ~f~%" (-> obj sfx-volume-movie))
  (format #t "~Tmusic: ~A~%" (-> obj music))
  (format #t "~Tbg-r: ~f~%" (-> obj bg-r))
  (format #t "~Tbg-g: ~f~%" (-> obj bg-g))
  (format #t "~Tbg-b: ~f~%" (-> obj bg-b))
  (format #t "~Tbg-a: ~f~%" (-> obj bg-a))
  (format #t "~Tbg-a-speed: ~f~%" (-> obj bg-a-speed))
  (format #t "~Tbg-a-force: ~f~%" (-> obj bg-a-force))
  (format #t "~Tallow-progress: ~A~%" (-> obj allow-progress))
  (format #t "~Tallow-pause: ~A~%" (-> obj allow-pause))
  (format #t "~Tsound-flava-priority: ~f~%" (-> obj sound-flava-priority))
  (format #t "~Tocean-off: ~A~%" (-> obj ocean-off))
  (format #t "~Tallow-look-around: ~A~%" (-> obj allow-look-around))
  (format #t "~Tambient-volume: ~f~%" (-> obj ambient-volume))
  (format #t "~Tambient-volume-movie: ~f~%" (-> obj ambient-volume-movie))
  (format #t "~Tdialog-volume-hint: ~f~%" (-> obj dialog-volume-hint))
  (format #t "~Tdummy[11] @ #x~X~%" (-> obj dummy))
  obj
  )

;; definition of type setting-control
(deftype setting-control (basic)
  ((current setting-data :inline :offset-assert  16)
   (target  setting-data :inline :offset-assert 224)
   (default setting-data :inline :offset-assert 432)
   (engine  engine               :offset-assert 628)
   )
  :method-count-assert 14
  :size-assert         #x278
  :flag-assert         #xe00000278
  (:methods
    (new (symbol type int) _type_ 0)
    (add-setting (_type_ process symbol object object object) none 9)
    (set-setting (_type_ process symbol object object object) none 10)
    (remove-setting (_type_ process symbol) none 11)
    (apply-settings (_type_) setting-data 12)
    (update (_type_) setting-data 13)
    )
  )

;; definition for method 3 of type setting-control
(defmethod inspect setting-control ((obj setting-control))
  (format #t "[~8x] ~A~%" obj (-> obj type))
  (format #t "~Tcurrent: #<setting-data @ #x~X>~%" (-> obj current))
  (format #t "~Ttarget: #<setting-data @ #x~X>~%" (-> obj target))
  (format #t "~Tdefault: #<setting-data @ #x~X>~%" (-> obj default))
  (format #t "~Tengine: ~A~%" (-> obj engine))
  obj
  )

;; definition for method 0 of type setting-control
(defmethod new setting-control ((allocation symbol) (type-to-make type) (arg0 int))
  (let ((s4-0 (object-new allocation type-to-make (the-as int (-> type-to-make size)))))
    (set! (-> s4-0 engine) ((method-of-type engine new) allocation engine 'setting-control arg0))
    s4-0
    )
  )

;; definition of type scf-time
(deftype scf-time (structure)
  ((stat   uint8  :offset-assert   0)
   (second uint8  :offset-assert   1)
   (minute uint8  :offset-assert   2)
   (hour   uint8  :offset-assert   3)
   (week   uint8  :offset-assert   4)
   (day    uint8  :offset-assert   5)
   (month  uint8  :offset-assert   6)
   (year   uint8  :offset-assert   7)
   )
  :method-count-assert 9
  :size-assert         #x8
  :flag-assert         #x900000008
  )

;; definition for method 3 of type scf-time
(defmethod inspect scf-time ((obj scf-time))
  (format #t "[~8x] ~A~%" obj 'scf-time)
  (format #t "~Tstat: ~D~%" (-> obj stat))
  (format #t "~Tsecond: #x~X~%" (-> obj second))
  (format #t "~Tminute: #x~X~%" (-> obj minute))
  (format #t "~Thour: #x~X~%" (-> obj hour))
  (format #t "~Tweek: #x~X~%" (-> obj week))
  (format #t "~Tday: #x~X~%" (-> obj day))
  (format #t "~Tmonth: #x~X~%" (-> obj month))
  (format #t "~Tyear: #x~X~%" (-> obj year))
  obj
  )

;; failed to figure out what this is:
0
