Files
ManDude cd68cb671e deftype and defmethod syntax major changes (#3094)
Major change to how `deftype` shows up in our code:
- the decompiler will no longer emit the `offset-assert`,
`method-count-assert`, `size-assert` and `flag-assert` parameters. There
are extremely few cases where having this in the decompiled code is
helpful, as the types there come from `all-types` which already has
those parameters. This also doesn't break type consistency because:
  - the asserts aren't compared.
- the first step of the test uses `all-types`, which has the asserts,
which will throw an error if they're bad.
- the decompiler won't emit the `heap-base` parameter unless necessary
now.
- the decompiler will try its hardest to turn a fixed-offset field into
an `overlay-at` field. It falls back to the old offset if all else
fails.
- `overlay-at` now supports field "dereferencing" to specify the offset
that's within a field that's a structure, e.g.:
```lisp
(deftype foobar (structure)
  ((vec    vector  :inline)
   (flags  int32   :overlay-at (-> vec w))
   )
  )
```
in this structure, the offset of `flags` will be 12 because that is the
final offset of `vec`'s `w` field within this structure.
- **removed ID from all method declarations.** IDs are only ever
automatically assigned now. Fixes #3068.
- added an `:overlay` parameter to method declarations, in order to
declare a new method that goes on top of a previously-defined method.
Syntax is `:overlay <method-name>`. Please do not ever use this.
- added `state-methods` list parameter. This lets you quickly specify a
list of states to be put in the method table. Same syntax as the
`states` list parameter. The decompiler will try to put as many states
in this as it can without messing with the method ID order.

Also changes `defmethod` to make the first type definition (before the
arguments) optional. The type can now be inferred from the first
argument. Fixes #3093.

---------

Co-authored-by: Hat Kid <6624576+Hat-Kid@users.noreply.github.com>
2023-10-30 03:20:02 +00:00

436 lines
17 KiB
Common Lisp
Vendored
Generated

;;-*-Lisp-*-
(in-package goal)
;; definition for method 9 of type setting-data
(defmethod update-from-engine ((this setting-data) (arg0 engine))
(let ((conn (the-as connection (-> arg0 alive-list-end)))
(s4-0 (-> arg0 alive-list-end prev0))
)
(while (!= (the-as connectable conn) (-> arg0 alive-list))
(case (-> conn param0)
(('border-mode)
(set! (-> this border-mode) (the-as symbol (-> conn param1)))
)
(('allow-look-around)
(set! (-> this allow-look-around) (the-as symbol (-> conn param1)))
)
(('ocean-off)
(set! (-> this ocean-off) (the-as symbol (-> conn param1)))
)
(('music)
(set! (-> this music) (the-as symbol (-> conn param1)))
)
(('process-mask)
(case (the-as object (-> conn param1))
(('set)
(logior! (-> this process-mask) (the-as int (-> conn param3)))
)
(('clear)
(logclear! (-> this process-mask) (the-as uint (-> conn param3)))
)
(('abs)
(set! (-> this process-mask) (the-as process-mask (the-as int (-> conn param3))))
)
)
)
(('sfx-volume)
(when (or (not (logtest? (-> *kernel-context* prevent-from-run) (process-mask progress)))
(= (get-process conn) (ppointer->process *progress-process*))
)
(case (the-as symbol (-> conn param1))
(('rel)
(set! (-> this sfx-volume) (* 0.01 (the-as float (-> conn param2)) (-> this sfx-volume)))
)
(else
(set! (-> this sfx-volume) (the-as float (-> conn param2)))
)
)
)
)
(('music-volume)
(case (the-as symbol (-> conn param1))
(('rel)
(set! (-> this music-volume) (* 0.01 (the-as float (-> conn param2)) (-> this music-volume)))
)
(else
(set! (-> this music-volume) (the-as float (-> conn param2)))
)
)
)
(('ambient-volume)
(case (the-as symbol (-> conn param1))
(('rel)
(set! (-> this ambient-volume) (* 0.01 (the-as float (-> conn param2)) (-> this ambient-volume)))
)
(else
(set! (-> this ambient-volume) (the-as float (-> conn param2)))
)
)
)
(('dialog-volume)
(case (the-as symbol (-> conn param1))
(('rel)
(set! (-> this dialog-volume) (* 0.01 (the-as float (-> conn param2)) (-> this dialog-volume)))
)
(else
(set! (-> this dialog-volume) (the-as float (-> conn param2)))
)
)
)
(('sfx-volume-movie)
(case (the-as symbol (-> conn param1))
(('rel)
(set! (-> this sfx-volume-movie) (* 0.01 (the-as float (-> conn param2)) (-> this sfx-volume-movie)))
)
(else
(set! (-> this sfx-volume-movie) (the-as float (-> conn param2)))
)
)
)
(('music-volume-movie)
(case (the-as symbol (-> conn param1))
(('rel)
(set! (-> this music-volume-movie) (* 0.01 (the-as float (-> conn param2)) (-> this music-volume-movie)))
)
(else
(set! (-> this music-volume-movie) (the-as float (-> conn param2)))
)
)
)
(('ambient-volume-movie)
(case (the-as symbol (-> conn param1))
(('rel)
(set! (-> this ambient-volume-movie) (* 0.01 (the-as float (-> conn param2)) (-> this ambient-volume-movie)))
)
(else
(set! (-> this ambient-volume-movie) (the-as float (-> conn param2)))
)
)
)
(('dialog-volume-hint)
(case (the-as symbol (-> conn param1))
(('rel)
(set! (-> this dialog-volume-hint) (* 0.01 (the-as float (-> conn param2)) (-> this dialog-volume-hint)))
)
(else
(set! (-> this dialog-volume-hint) (the-as float (-> conn param2)))
)
)
)
(('sound-flava)
(when (>= (the-as float (-> conn param2)) (-> this sound-flava-priority))
(set! (-> this sound-flava) (the-as uint (the-as int (-> conn param3))))
(set! (-> this sound-flava-priority) (the-as float (-> conn param2)))
)
)
(('bg-r)
(set! (-> this bg-r) (the-as float (-> conn param2)))
)
(('bg-g)
(set! (-> this bg-g) (the-as float (-> conn param2)))
)
(('bg-b)
(set! (-> this bg-b) (the-as float (-> conn param2)))
)
(('bg-a)
(set! (-> this bg-a) (the-as float (-> conn param2)))
)
(('bg-a-speed)
(set! (-> this bg-a-speed) (the-as float (-> conn param2)))
)
(('bg-a-force)
(set! (-> this bg-a-force) (the-as float (-> conn param2)))
)
(('language)
(set! (-> this language) (the-as language-enum (the-as int (-> conn param3))))
)
(('vibration)
(set! (-> this vibration) (the-as symbol (-> conn param1)))
)
(('auto-save)
(set! (-> this auto-save) (the-as symbol (-> conn param1)))
)
(('allow-pause)
(set! (-> this allow-pause) (the-as symbol (-> conn param1)))
)
(('allow-progress)
(set! (-> this allow-progress) (the-as symbol (-> conn param1)))
)
(('play-hints)
(set! (-> this play-hints) (the-as symbol (-> conn param1)))
)
(('movie)
(set! (-> this movie) (the-as (pointer progress) (-> conn param1)))
)
(('talking)
(set! (-> this talking) (the-as (pointer progress) (-> conn param1)))
)
(('spooling)
(set! (-> this spooling) (the-as (pointer progress) (-> conn param1)))
)
(('hint)
(set! (-> this hint) (the-as (pointer process) (-> conn param1)))
)
(('ambient)
(set! (-> this ambient) (the-as (pointer progress) (-> conn param1)))
)
(('common-page)
(case (the-as object (-> conn param1))
(('set)
(logior! (-> this common-page) (the-as int (-> conn param3)))
)
(('clear)
(logclear! (-> this common-page) (the-as uint (-> conn param3)))
)
)
)
)
(set! conn (the-as connection s4-0))
(set! s4-0 (-> (the-as connectable conn) prev0))
)
)
this
)
;; definition for method 9 of type setting-control
;; INFO: Return type mismatch int vs none.
(defmethod add-setting ((this setting-control) (arg0 process) (arg1 symbol) (arg2 object) (arg3 object) (arg4 object))
(add-connection (-> this engine) arg0 arg1 arg2 arg3 arg4)
0
(none)
)
;; definition for method 10 of type setting-control
;; INFO: Return type mismatch int vs none.
(defmethod set-setting ((this setting-control) (arg0 process) (arg1 symbol) (arg2 object) (arg3 object) (arg4 object))
(remove-setting this arg0 arg1)
(add-connection (-> this engine) arg0 arg1 arg2 arg3 arg4)
0
(none)
)
;; definition for method 11 of type setting-control
;; INFO: Return type mismatch int vs none.
(defmethod remove-setting ((this setting-control) (arg0 process) (arg1 symbol))
(when arg0
(let ((s5-0 (-> this engine))
(s4-0 (-> arg0 connection-list next1))
)
(while s4-0
(if (and (belongs-to-engine? (the-as connection s4-0) s5-0)
(or (= arg1 #t) (= arg1 (-> (the-as connection s4-0) param0)))
)
(move-to-dead (the-as connection s4-0))
)
(set! s4-0 (-> s4-0 next1))
)
)
)
0
(none)
)
;; definition for method 12 of type setting-control
(defmethod apply-settings ((this setting-control))
(let ((gp-0 (-> this current)))
(let ((s5-0 (-> this target)))
(mem-copy! (the-as pointer s5-0) (the-as pointer (-> this default)) 196)
(set! (-> s5-0 ambient-volume) (* 0.01 (-> this default ambient-volume) (-> this default sfx-volume)))
(update-from-engine s5-0 (-> this engine))
(set! (-> gp-0 border-mode) (-> s5-0 border-mode))
(set! (-> gp-0 common-page) (-> s5-0 common-page))
(set! (-> gp-0 vibration) (-> s5-0 vibration))
(set! (-> gp-0 auto-save) (-> s5-0 auto-save))
(set! (-> gp-0 play-hints) (-> s5-0 play-hints))
(set! (-> gp-0 movie) (-> s5-0 movie))
(set! (-> gp-0 talking) (-> s5-0 talking))
(set! (-> gp-0 spooling) (-> s5-0 spooling))
(set! (-> gp-0 hint) (-> s5-0 hint))
(set! (-> gp-0 ambient) (-> s5-0 ambient))
(set! (-> gp-0 allow-pause) (-> s5-0 allow-pause))
(set! (-> gp-0 allow-progress) (-> s5-0 allow-progress))
(set! (-> gp-0 allow-look-around) (-> s5-0 allow-look-around))
(set! (-> gp-0 ocean-off) (-> s5-0 ocean-off))
(set! (-> gp-0 ambient-volume-movie) (-> s5-0 ambient-volume-movie))
(set! (-> gp-0 music-volume-movie) (-> s5-0 music-volume-movie))
(set! (-> gp-0 sfx-volume-movie) (-> s5-0 sfx-volume-movie))
(set! (-> gp-0 dialog-volume-hint) (-> s5-0 dialog-volume-hint))
(set! (-> gp-0 process-mask) (-> s5-0 process-mask))
)
(set! (-> *kernel-context* prevent-from-run) (-> gp-0 process-mask))
gp-0
)
)
;; definition for method 13 of type setting-control
(defmethod update ((this setting-control))
(apply-settings this)
(let ((gp-0 (-> this current)))
(let ((s5-1 (-> this target)))
(when *sound-player-enable*
(when (!= (-> gp-0 sfx-volume) (-> s5-1 sfx-volume))
(seek! (-> gp-0 sfx-volume) (-> s5-1 sfx-volume) (* 100.0 (seconds-per-frame)))
(sound-set-volume (sound-group sfx) (-> gp-0 sfx-volume))
)
(when (!= (-> gp-0 music-volume) (-> s5-1 music-volume))
(seek! (-> gp-0 music-volume) (-> s5-1 music-volume) (* 100.0 (seconds-per-frame)))
(sound-set-volume (sound-group music) (-> gp-0 music-volume))
)
(when (!= (-> gp-0 dialog-volume) (-> s5-1 dialog-volume))
(seek! (-> gp-0 dialog-volume) (-> s5-1 dialog-volume) (* 100.0 (seconds-per-frame)))
(sound-set-volume (sound-group dialog) (-> gp-0 dialog-volume))
)
(when (!= (-> gp-0 ambient-volume) (-> s5-1 ambient-volume))
(seek! (-> gp-0 ambient-volume) (-> s5-1 ambient-volume) (* 100.0 (seconds-per-frame)))
(sound-set-volume (sound-group ambient) (-> gp-0 ambient-volume))
)
)
(when (!= (-> gp-0 language) (-> s5-1 language))
(set! (-> gp-0 language) (-> s5-1 language))
(set-language (-> gp-0 language))
)
(when (and (!= (-> s5-1 music) (-> gp-0 music))
(and (< 0.0 (-> *setting-control* current music-volume)) (zero? (rpc-busy? 1)) *sound-bank-1* *sound-bank-2*)
)
(cond
((-> s5-1 music)
(format 0 "Load music ~A~%" (-> s5-1 music))
(sound-music-load (string->sound-name (symbol->string (-> s5-1 music))))
)
(else
(format 0 "Unload music~%")
(sound-music-unload)
)
)
(set! (-> gp-0 music) (-> s5-1 music))
)
(set! (-> s5-1 sound-flava)
(the-as uint (flava-lookup (-> gp-0 music) (the-as music-flava (-> s5-1 sound-flava))))
)
(set! (-> gp-0 sound-flava) (-> s5-1 sound-flava))
(if *sound-player-enable*
(sound-set-flava (-> gp-0 sound-flava))
)
(when (!= (-> gp-0 aspect-ratio) (-> s5-1 aspect-ratio))
(set! (-> gp-0 aspect-ratio) (-> s5-1 aspect-ratio))
(set-aspect-ratio (-> gp-0 aspect-ratio))
)
(when (!= (-> gp-0 video-mode) (-> s5-1 video-mode))
(set! (-> gp-0 video-mode) (-> s5-1 video-mode))
(set-video-mode (-> gp-0 video-mode))
)
(when (!= (-> gp-0 screenx) (-> s5-1 screenx))
(set! (-> gp-0 screenx) (-> s5-1 screenx))
(set! (-> *video-parms* display-dx) (/ (-> s5-1 screenx) 2))
(set! (-> *video-parms* set-video-mode) #t)
)
(when (!= (-> gp-0 screeny) (-> s5-1 screeny))
(set! (-> gp-0 screeny) (-> s5-1 screeny))
(set! (-> *video-parms* display-dy) (* (/ (-> s5-1 screeny) 2) 2))
(set! (-> *video-parms* set-video-mode) #t)
)
(set! (-> gp-0 bg-a-speed) (-> s5-1 bg-a-speed))
(set! (-> gp-0 bg-a-force) (-> s5-1 bg-a-force))
(set! (-> gp-0 bg-r) (-> s5-1 bg-r))
(set! (-> gp-0 bg-g) (-> s5-1 bg-g))
(set! (-> gp-0 bg-b) (-> s5-1 bg-b))
(seek! (-> gp-0 bg-a) (-> s5-1 bg-a) (* (-> s5-1 bg-a-speed) (seconds-per-frame)))
)
(let ((v1-60 (-> *display* frames (-> *display* on-screen) display))
(f0-39 (-> gp-0 bg-a))
)
(if (!= (-> gp-0 bg-a-force) 0.0)
(set! f0-39 (-> gp-0 bg-a-force))
)
(set! (-> v1-60 bgcolor r) (the int (* 255.0 (-> gp-0 bg-r))))
(set! (-> v1-60 bgcolor g) (the int (* 255.0 (-> gp-0 bg-g))))
(set! (-> v1-60 bgcolor b) (the int (* 255.0 (-> gp-0 bg-b))))
(set! (-> v1-60 pmode alp) (the int (* 255.0 (- 1.0 f0-39))))
)
(set! (-> *level* border?) (-> gp-0 border-mode))
(set! (-> *texture-pool* common-page-mask) (-> gp-0 common-page))
(set! (-> *cpad-list* cpads 0 buzz) (-> gp-0 vibration))
(case (-> gp-0 ocean-off)
((#t)
(set! *ocean-off* #t)
)
(('mid)
(set! *ocean-mid-off* #t)
)
(('near)
(set! *ocean-near-off* #t)
)
)
gp-0
)
)
;; failed to figure out what this is:
(when (zero? *setting-control*)
(set! *setting-control* (new 'global 'setting-control 32))
(let ((gp-0 (-> *setting-control* default))
(s5-0 (-> *setting-control* current))
)
(let ((f0-2 (* 0.01 (the float (scf-get-volume)))))
(set! (-> gp-0 ocean-off) #f)
(set! (-> gp-0 allow-look-around) #t)
(set! (-> gp-0 border-mode) #f)
(set! (-> gp-0 sfx-volume) (the float (* 5 (the int (+ 0.5 (* 15.0 f0-2))))))
(set! (-> gp-0 music-volume) (the float (* 5 (the int (+ 0.5 (* 13.0 f0-2))))))
(set! (-> gp-0 dialog-volume) (the float (* 5 (the int (+ 0.5 (* 20.0 f0-2))))))
(set! (-> gp-0 ambient-volume) (the float (* 5 (the int (+ 0.5 (* 15.0 f0-2))))))
(set! (-> gp-0 sfx-volume-movie) (the float (* 5 (the int (+ 0.5 (* 11.0 f0-2))))))
(set! (-> gp-0 music-volume-movie) (the float (* 5 (the int (+ 0.5 (* 13.0 f0-2))))))
(set! (-> gp-0 ambient-volume-movie) (the float (* 5 (the int (+ 0.5 (* 11.0 f0-2))))))
(set! (-> gp-0 dialog-volume-hint) (the float (* 5 (the int (+ 0.5 (* 16.0 f0-2))))))
)
(set! (-> gp-0 language) (scf-get-language))
(set! (-> gp-0 process-mask) (process-mask execute sleep))
(set! (-> gp-0 screenx) 0)
(set! (-> gp-0 screeny) 0)
(set! (-> gp-0 vibration) #t)
(set! (-> gp-0 auto-save) #f)
(set! (-> gp-0 play-hints) #t)
(set! (-> gp-0 movie) (the-as (pointer process) #f))
(set! (-> gp-0 talking) (the-as (pointer process) #f))
(set! (-> gp-0 spooling) (the-as (pointer process) #f))
(set! (-> gp-0 hint) (the-as (pointer process) #f))
(set! (-> gp-0 ambient) (the-as (pointer process) #f))
(set! (-> gp-0 sound-flava) (the-as uint 49))
(set! (-> gp-0 sound-flava-priority) 0.0)
(set! (-> gp-0 music) #f)
(set! (-> gp-0 bg-a-speed) 8.0)
(set! (-> gp-0 allow-pause) #t)
(set! (-> gp-0 allow-progress) #t)
(case (scf-get-aspect)
((2)
(set! (-> gp-0 aspect-ratio) 'aspect16x9)
)
(else
(set! (-> gp-0 aspect-ratio) 'aspect4x3)
)
)
(if (zero? *boot-video-mode*)
(set! (-> gp-0 video-mode) 'ntsc)
(set! (-> gp-0 video-mode) 'pal)
)
(set! (-> s5-0 sfx-volume) (+ -1.0 (-> gp-0 sfx-volume)))
(set! (-> s5-0 music-volume) (+ -1.0 (-> gp-0 music-volume)))
(set! (-> s5-0 dialog-volume) (+ -1.0 (-> gp-0 dialog-volume)))
(set! (-> s5-0 ambient-volume) (+ -1.0 (-> gp-0 ambient-volume)))
(set! (-> s5-0 sfx-volume-movie) (-> gp-0 sfx-volume-movie))
(set! (-> s5-0 music-volume-movie) (-> gp-0 music-volume-movie))
(set! (-> s5-0 ambient-volume-movie) (-> gp-0 ambient-volume-movie))
(set! (-> s5-0 dialog-volume-hint) (-> gp-0 dialog-volume-hint))
(set! (-> s5-0 language) (+ (-> gp-0 language) -1))
(set! (-> s5-0 aspect-ratio) #f)
(set! (-> s5-0 video-mode) #f)
(set! (-> s5-0 music) #f)
(set! (-> s5-0 bg-a-speed) (-> gp-0 bg-a-speed))
(set! (-> s5-0 allow-pause) (-> gp-0 allow-pause))
(set! (-> s5-0 allow-progress) (-> gp-0 allow-progress))
(set! (-> s5-0 allow-look-around) (-> gp-0 allow-look-around))
(set! (-> s5-0 ocean-off) (-> gp-0 ocean-off))
)
)