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

;; definition of type static-screen
(deftype static-screen (process)
  ((part       sparticle-launch-control 1 :offset-assert 112)
   (state-time time-frame                 :offset-assert 120)
   )
  :heap-base #x10
  :method-count-assert 15
  :size-assert         #x80
  :flag-assert         #xf00100080
  (:methods
    (idle (int time-frame symbol) _type_ :state 14)
    )
  )

;; definition for method 3 of type static-screen
(defmethod inspect static-screen ((obj static-screen))
  (let ((t9-0 (method-of-type process inspect)))
    (t9-0 obj)
    )
  (format #t "~T~Tpart[1] @ #x~X~%" (-> obj stack))
  (format #t "~T~Tstate-time: ~D~%" (-> obj state-time))
  obj
  )

;; definition for method 7 of type static-screen
;; INFO: Return type mismatch process vs static-screen.
(defmethod relocate static-screen ((obj static-screen) (arg0 int))
  (let ((v1-0 *kernel-context*))
    (set! (-> v1-0 relocating-process) obj)
    (set! (-> v1-0 relocating-min) (the-as int (&-> obj type)))
    (set! (-> v1-0 relocating-max)
          (the-as int (+ (+ (-> obj allocated-length) -4 (-> process size)) (the-as int obj)))
          )
    (set! (-> v1-0 relocating-offset) arg0)
    )
  (dotimes (v1-2 1)
    (if (nonzero? (-> obj part v1-2))
        (&+! (-> obj part v1-2) arg0)
        )
    )
  (the-as static-screen ((method-of-type process relocate) obj arg0))
  )

;; definition for method 10 of type static-screen
(defmethod deactivate static-screen ((obj static-screen))
  (dotimes (s5-0 1)
    (if (nonzero? (-> obj part s5-0))
        (kill-and-free-particles (-> obj part s5-0))
        )
    )
  ((method-of-type process deactivate) obj)
  (none)
  )

;; failed to figure out what this is:
(defpart 2966
  :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #x5c6))
    (sp-flt spt-num 1.0)
    (sp-flt spt-y (meters 1.18))
    (sp-flt spt-scale-x (meters 15))
    (sp-flt spt-scale-y (meters 6.5))
    (sp-flt spt-r 128.0)
    (sp-flt spt-g 128.0)
    (sp-flt spt-b 128.0)
    (sp-flt spt-a 128.0)
    (sp-int spt-timer -1)
    (sp-cpuinfo-flags bit2 bit9 bit13)
    )
  )

;; failed to figure out what this is:
(defpart 2967
  :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x1 :page #x5c6))
    (sp-flt spt-num 1.0)
    (sp-flt spt-y (meters -1.264))
    (sp-flt spt-scale-x (meters 15))
    (sp-flt spt-scale-y (meters 3.25))
    (sp-flt spt-r 128.0)
    (sp-flt spt-g 128.0)
    (sp-flt spt-b 128.0)
    (sp-flt spt-a 128.0)
    (sp-int spt-timer -1)
    (sp-cpuinfo-flags bit2 bit9 bit13)
    )
  )

;; failed to figure out what this is:
(defpart 2968
  :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x2 :page #x5c6))
    (sp-flt spt-num 1.0)
    (sp-flt spt-y (meters -2.482))
    (sp-flt spt-scale-x (meters 15))
    (sp-flt spt-scale-y (meters 1.625))
    (sp-flt spt-r 128.0)
    (sp-flt spt-g 128.0)
    (sp-flt spt-b 128.0)
    (sp-flt spt-a 128.0)
    (sp-int spt-timer -1)
    (sp-cpuinfo-flags bit2 bit9 bit13)
    )
  )

;; failed to figure out what this is:
(defpartgroup group-part-screen1
  :id 707
  :flags (screen-space)
  :bounds (static-bspherem 0 0 0 1)
  :parts ((sp-item 2966 :flags (launch-asap)) (sp-item 2967 :flags (launch-asap)) (sp-item 2968 :flags (launch-asap)))
  )

;; failed to figure out what this is:
(defstate idle (static-screen)
  :virtual #t
  :enter (behavior ((arg0 int) (arg1 time-frame) (arg2 symbol))
    (set! (-> *setting-control* current bg-a) 1.0)
    (set! (-> *setting-control* default bg-a) 0.0)
    (add-setting! 'common-page 'set 0.0 (ash 1 (+ arg0 1)))
    (none)
    )
  :trans (behavior ()
    (hide-hud-quick)
    (spawn (-> self part 0) *zero-vector*)
    0
    (none)
    )
  :code (behavior ((arg0 int) (arg1 time-frame) (arg2 symbol))
    (local-vars (v1-6 symbol))
    (set! (-> self state-time) (-> *display* base-frame-counter))
    (until v1-6
      (suspend)
      (set! v1-6 (or (and (> arg1 0) (>= (- (-> *display* base-frame-counter) (-> self state-time)) arg1))
                     (and arg2
                          (>= (- (-> *display* base-frame-counter) (-> self state-time)) (seconds 1))
                          (cpad-pressed? 0 select start triangle circle x square)
                          )
                     )
            )
      )
    (set! (-> *setting-control* default bg-a) 1.0)
    (while (!= (-> *setting-control* current bg-a) (-> *setting-control* default bg-a))
      (suspend)
      )
    (remove-setting! 'common-page)
    (suspend)
    0
    (none)
    )
  )

;; definition for function static-screen-init-by-other
;; INFO: Return type mismatch int vs none.
(defbehavior static-screen-init-by-other static-screen ((arg0 int) (arg1 texture-id) (arg2 texture-id) (arg3 texture-id) (arg4 time-frame) (arg5 symbol))
  (let ((s3-0 (lookup-part-group-by-name "group-part-screen1")))
    (when (and s3-0 (nonzero? s3-0) (type-type? (-> s3-0 type) sparticle-launch-group))
      (set! (-> *part-id-table* 2966 init-specs 0 initial-valuef) (the-as float arg1))
      (set! (-> *part-id-table* 2967 init-specs 0 initial-valuef) (the-as float arg2))
      (set! (-> *part-id-table* 2968 init-specs 0 initial-valuef) (the-as float arg3))
      (set! (-> self part 0) (create-launch-control (the-as sparticle-launch-group s3-0) self))
      (go-virtual idle arg0 arg4 arg5)
      )
    )
  0
  (none)
  )

;; definition for function static-screen-spawn
;; INFO: Used lq/sq
;; INFO: Return type mismatch (pointer process) vs (pointer static-screen).
(defun static-screen-spawn ((arg0 int)
                   (arg1 texture-id)
                   (arg2 texture-id)
                   (arg3 texture-id)
                   (arg4 time-frame)
                   (arg5 symbol)
                   (arg6 process-tree)
                   )
  (local-vars (sv-16 process))
  (set! sv-16 (get-process *default-dead-pool* static-screen #x4000))
  (the-as
    (pointer static-screen)
    (when sv-16
      (let ((t9-1 (method-of-type static-screen activate)))
        (t9-1 (the-as static-screen sv-16) arg6 'static-screen (the-as pointer #x70004000))
        )
      (run-now-in-process sv-16 static-screen-init-by-other arg0 arg1 arg2 arg3 arg4 arg5)
      (-> sv-16 ppointer)
      )
    )
  )
