mirror of
https://github.com/open-goal/jak-project.git
synced 2024-10-20 21:27:52 -04:00
1e11a588f5
* [decomp] `loader` prelim work + some cleanup * more things * more * even more * yet even more * minor fixes * decompiler fix + use behaviors for two funcs * last functions * Create loader_REF.gc * more work * change vag tool config format + unrelated farmer and yakow stuff * update some things * fix some decomp * cleanup things i came across + make dgo compileable * fix consistency test * update refs * offline test: skip buggy `external-art-buffer` method * fix test
416 lines
12 KiB
Common Lisp
416 lines
12 KiB
Common Lisp
;;-*-Lisp-*-
|
|
(in-package goal)
|
|
|
|
;; name: gsound-h.gc
|
|
;; name in dgo: gsound-h
|
|
;; dgos: GAME, ENGINE
|
|
|
|
;; Type definitions for sound.
|
|
;; Sound is handled on the IOP, a separate processor.
|
|
;; The EE sends commands using the IOP RPC system to the OVERLORD IOP driver telling it to load and play sounds.
|
|
;; There is also some sort of per-frame status update, that is not included here.
|
|
|
|
(deftype sound-id (uint32)
|
|
()
|
|
(:methods
|
|
(dummy-9 () none 9)
|
|
)
|
|
:flag-assert #xa00000004
|
|
)
|
|
|
|
(deftype sound-bank-id (uint32)
|
|
()
|
|
:flag-assert #x900000004
|
|
)
|
|
|
|
;; Sound names were sometimes packed into a uint128
|
|
;; this is also used for dgo names sent to the IOP.
|
|
;; fields added by us
|
|
(deftype sound-name (uint128)
|
|
((lo uint64 :offset 0)
|
|
(hi uint64 :offset 64)
|
|
)
|
|
:flag-assert #x900000010
|
|
)
|
|
|
|
(defmacro static-sound-name (str)
|
|
"Convert a string constant to a static sound-name."
|
|
|
|
;; all this is done at compile-time so we can come up with 2
|
|
;; 64-bit constants to use
|
|
(when (> (string-length str) 16)
|
|
(error "static-sound-name got a string that is too long")
|
|
)
|
|
(let ((lo-val 0)
|
|
(hi-val 0)
|
|
)
|
|
(dotimes (i (string-length str))
|
|
(if (>= i 8)
|
|
(+! hi-val (ash (string-ref str i) (* 8 (- i 8))))
|
|
(+! lo-val (ash (string-ref str i) (* 8 i)))
|
|
)
|
|
)
|
|
`(new 'static 'sound-name :lo ,lo-val :hi ,hi-val)
|
|
)
|
|
)
|
|
|
|
;; command types that can be sent to the IOP.
|
|
(defenum sound-command
|
|
:type uint16
|
|
(load-bank)
|
|
(load-music)
|
|
(unload-bank)
|
|
(play)
|
|
(pause-sound)
|
|
(stop-sound)
|
|
(continue-sound)
|
|
(set-param)
|
|
(set-master-volume)
|
|
(pause-group)
|
|
(stop-group)
|
|
(continue-group)
|
|
(get-irx-version)
|
|
(set-falloff-curve)
|
|
(set-sound-falloff)
|
|
(reload-info)
|
|
(set-language)
|
|
(set-flava)
|
|
(set-reverb)
|
|
(set-ear-trans)
|
|
(shutdown)
|
|
(list-sounds)
|
|
(unload-music)
|
|
)
|
|
|
|
;; like should match the sound type in OVERLORD
|
|
;; This is shared between all sound RPCs and acts like the header for the sound messages
|
|
(deftype sound-rpc-cmd (structure)
|
|
((rsvd1 uint16 :offset-assert 0)
|
|
(command sound-command :offset-assert 2)
|
|
)
|
|
:method-count-assert 9
|
|
:size-assert #x4
|
|
:flag-assert #x900000004
|
|
)
|
|
|
|
(deftype sound-play-parms (structure)
|
|
((mask uint16 :offset-assert 0)
|
|
(pitch-mod int16 :offset-assert 2)
|
|
(bend int16 :offset-assert 4)
|
|
(fo-min int16 :offset-assert 6)
|
|
(fo-max int16 :offset-assert 8)
|
|
(fo-curve int8 :offset-assert 10)
|
|
(priority int8 :offset-assert 11)
|
|
(volume int32 :offset-assert 12)
|
|
(trans vector3w :inline :offset-assert 16)
|
|
(group uint8 :offset-assert 28)
|
|
)
|
|
:pack-me
|
|
:method-count-assert 9
|
|
:size-assert #x1d
|
|
:flag-assert #x90000001d
|
|
)
|
|
|
|
(deftype sound-rpc-bank-cmd (sound-rpc-cmd)
|
|
((bank-name sound-name :offset-assert 16)
|
|
)
|
|
:method-count-assert 9
|
|
:size-assert #x20
|
|
:flag-assert #x900000020
|
|
)
|
|
|
|
(deftype sound-rpc-sound-cmd (sound-rpc-cmd)
|
|
((id sound-id :offset-assert 4)
|
|
)
|
|
:method-count-assert 9
|
|
:size-assert #x8
|
|
:flag-assert #x900000008
|
|
)
|
|
|
|
(deftype sound-rpc-group-cmd (sound-rpc-cmd)
|
|
((group uint8 :offset-assert 4)
|
|
)
|
|
:method-count-assert 9
|
|
:size-assert #x5
|
|
:flag-assert #x900000005
|
|
)
|
|
|
|
(deftype sound-rpc-load-bank (sound-rpc-bank-cmd)
|
|
()
|
|
:method-count-assert 9
|
|
:size-assert #x20
|
|
:flag-assert #x900000020
|
|
)
|
|
|
|
(deftype sound-rpc-load-music (sound-rpc-bank-cmd)
|
|
()
|
|
:method-count-assert 9
|
|
:size-assert #x20
|
|
:flag-assert #x900000020
|
|
)
|
|
|
|
(deftype sound-rpc-unload-bank (sound-rpc-bank-cmd)
|
|
()
|
|
:method-count-assert 9
|
|
:size-assert #x20
|
|
:flag-assert #x900000020
|
|
)
|
|
|
|
(deftype sound-rpc-play (sound-rpc-sound-cmd)
|
|
((name sound-name :offset-assert 16)
|
|
(parms sound-play-parms :inline :offset-assert 32)
|
|
)
|
|
:method-count-assert 9
|
|
:size-assert #x3d
|
|
:flag-assert #x90000003d
|
|
)
|
|
|
|
(deftype sound-rpc-pause-sound (sound-rpc-sound-cmd)
|
|
()
|
|
:method-count-assert 9
|
|
:size-assert #x8
|
|
:flag-assert #x900000008
|
|
)
|
|
|
|
(deftype sound-rpc-stop-sound (sound-rpc-sound-cmd)
|
|
()
|
|
:method-count-assert 9
|
|
:size-assert #x8
|
|
:flag-assert #x900000008
|
|
)
|
|
|
|
(deftype sound-rpc-continue-sound (sound-rpc-sound-cmd)
|
|
()
|
|
:method-count-assert 9
|
|
:size-assert #x8
|
|
:flag-assert #x900000008
|
|
)
|
|
|
|
(deftype sound-rpc-set-param (sound-rpc-sound-cmd)
|
|
((parms sound-play-parms :inline :offset-assert 8)
|
|
(auto-time int32 :offset-assert 40)
|
|
(auto-from int32 :offset-assert 44)
|
|
)
|
|
:method-count-assert 9
|
|
:size-assert #x30
|
|
:flag-assert #x900000030
|
|
)
|
|
|
|
(deftype sound-rpc-set-master-volume (sound-rpc-group-cmd)
|
|
((volume int32 :offset-assert 8)
|
|
)
|
|
:method-count-assert 9
|
|
:size-assert #xc
|
|
:flag-assert #x90000000c
|
|
)
|
|
|
|
(deftype sound-rpc-pause-group (sound-rpc-group-cmd)
|
|
()
|
|
:method-count-assert 9
|
|
:size-assert #x5
|
|
:flag-assert #x900000005
|
|
)
|
|
|
|
(deftype sound-rpc-stop-group (sound-rpc-group-cmd)
|
|
()
|
|
:method-count-assert 9
|
|
:size-assert #x5
|
|
:flag-assert #x900000005
|
|
)
|
|
|
|
(deftype sound-rpc-continue-group (sound-rpc-group-cmd)
|
|
()
|
|
:method-count-assert 9
|
|
:size-assert #x5
|
|
:flag-assert #x900000005
|
|
)
|
|
|
|
(deftype sound-rpc-get-irx-version (sound-rpc-cmd)
|
|
((major uint32 :offset-assert 4)
|
|
(minor uint32 :offset-assert 8)
|
|
(ee-addr pointer :offset-assert 12)
|
|
)
|
|
:method-count-assert 9
|
|
:size-assert #x10
|
|
:flag-assert #x900000010
|
|
)
|
|
|
|
(deftype sound-rpc-set-language (sound-rpc-cmd)
|
|
((lang uint32 :offset-assert 4)
|
|
)
|
|
:method-count-assert 9
|
|
:size-assert #x8
|
|
:flag-assert #x900000008
|
|
)
|
|
|
|
(deftype sound-rpc-set-falloff-curve (sound-rpc-cmd)
|
|
((curve int32 :offset-assert 4)
|
|
(falloff int32 :offset-assert 8)
|
|
(ease int32 :offset-assert 12)
|
|
)
|
|
:method-count-assert 9
|
|
:size-assert #x10
|
|
:flag-assert #x900000010
|
|
)
|
|
|
|
(deftype sound-rpc-set-sound-falloff (sound-rpc-cmd)
|
|
((name sound-name :offset-assert 16)
|
|
(curve int32 :offset-assert 32)
|
|
(min int32 :offset-assert 36)
|
|
(max int32 :offset-assert 40)
|
|
)
|
|
:method-count-assert 9
|
|
:size-assert #x2c
|
|
:flag-assert #x90000002c
|
|
)
|
|
|
|
(deftype sound-rpc-reload-info (sound-rpc-cmd)
|
|
()
|
|
:method-count-assert 9
|
|
:size-assert #x4
|
|
:flag-assert #x900000004
|
|
)
|
|
|
|
(deftype sound-rpc-set-reverb (sound-rpc-cmd)
|
|
((core uint8 :offset-assert 4)
|
|
(reverb int32 :offset-assert 8)
|
|
(left uint32 :offset-assert 12)
|
|
(right uint32 :offset-assert 16)
|
|
)
|
|
:method-count-assert 9
|
|
:size-assert #x14
|
|
:flag-assert #x900000014
|
|
)
|
|
|
|
(deftype sound-rpc-set-ear-trans (sound-rpc-cmd)
|
|
((ear-trans vector3w :inline :offset-assert 4)
|
|
(cam-trans vector3w :inline :offset-assert 16)
|
|
(cam-angle int32 :offset-assert 28)
|
|
)
|
|
:method-count-assert 9
|
|
:size-assert #x20
|
|
:flag-assert #x900000020
|
|
)
|
|
|
|
(deftype sound-rpc-set-flava (sound-rpc-cmd)
|
|
((flava uint8 :offset-assert 4)
|
|
)
|
|
:method-count-assert 9
|
|
:size-assert #x5
|
|
:flag-assert #x900000005
|
|
)
|
|
|
|
(deftype sound-rpc-shutdown (sound-rpc-cmd)
|
|
()
|
|
:method-count-assert 9
|
|
:size-assert #x4
|
|
:flag-assert #x900000004
|
|
)
|
|
|
|
(deftype sound-rpc-list-sounds (sound-rpc-cmd)
|
|
()
|
|
:method-count-assert 9
|
|
:size-assert #x4
|
|
:flag-assert #x900000004
|
|
)
|
|
|
|
(deftype sound-rpc-unload-music (sound-rpc-cmd)
|
|
()
|
|
:method-count-assert 9
|
|
:size-assert #x4
|
|
:flag-assert #x900000004
|
|
)
|
|
|
|
;; union of all the possible sound commands.
|
|
(deftype sound-rpc-union (structure)
|
|
((data uint32 20 :offset-assert 0)
|
|
(load-bank sound-rpc-load-bank :offset 0)
|
|
(unload-bank sound-rpc-unload-bank :offset 0)
|
|
(play sound-rpc-play :offset 0)
|
|
(pause-sound sound-rpc-pause-sound :offset 0)
|
|
(stop-sound sound-rpc-stop-sound :offset 0)
|
|
(continue-sound sound-rpc-continue-sound :offset 0)
|
|
(set-param sound-rpc-set-param :offset 0)
|
|
(set-master-volume sound-rpc-set-master-volume :offset 0)
|
|
(pause-group sound-rpc-pause-group :offset 0)
|
|
(stop-group sound-rpc-stop-group :offset 0)
|
|
(continue-group sound-rpc-continue-group :offset 0)
|
|
(get-irx-version sound-rpc-get-irx-version :offset 0)
|
|
(set-falloff-curve sound-rpc-set-falloff-curve :offset 0)
|
|
(set-sound-falloff sound-rpc-set-sound-falloff :offset 0)
|
|
(reload-info sound-rpc-reload-info :offset 0)
|
|
(set-language sound-rpc-set-language :offset 0)
|
|
(set-reverb sound-rpc-set-reverb :offset 0)
|
|
(set-ear-trans sound-rpc-set-ear-trans :offset 0)
|
|
(set-flava sound-rpc-set-flava :offset 0)
|
|
(shutdown sound-rpc-shutdown :offset 0)
|
|
(list-sounds sound-rpc-list-sounds :offset 0)
|
|
(unload-music sound-rpc-unload-music :offset 0)
|
|
)
|
|
:method-count-assert 9
|
|
:size-assert #x50
|
|
:flag-assert #x900000050
|
|
)
|
|
|
|
(deftype sound-spec (basic)
|
|
((mask uint16 :offset-assert 4)
|
|
(num float :offset-assert 8)
|
|
(group uint8 :offset-assert 12)
|
|
(sound-name-char uint8 16 :offset 16)
|
|
(sound-name sound-name :offset 16)
|
|
(trans float 4 :offset-assert 32) ;; guess
|
|
(volume int32 :offset-assert 48)
|
|
(pitch-mod int32 :offset-assert 52)
|
|
(bend int32 :offset-assert 56)
|
|
(fo-min int16 :offset-assert 60)
|
|
(fo-max int16 :offset-assert 62)
|
|
(fo-curve int8 :offset-assert 64)
|
|
(priority int8 :offset-assert 65)
|
|
(auto-time int32 :offset-assert 68)
|
|
(auto-from int32 :offset-assert 72)
|
|
)
|
|
:method-count-assert 9
|
|
:size-assert #x4c
|
|
:flag-assert #x90000004c
|
|
)
|
|
|
|
(define *current-sound-id* (the sound-id #x10000))
|
|
|
|
(deftype ambient-sound (basic)
|
|
((spec sound-spec :offset-assert 4)
|
|
(playing-id sound-id :offset-assert 8)
|
|
(trans vector :inline :offset-assert 16)
|
|
(name sound-name :offset-assert 32)
|
|
(play-time uint64 :offset-assert 48)
|
|
(time-base uint64 :offset-assert 56)
|
|
(time-random uint64 :offset-assert 64)
|
|
(volume int32 :offset-assert 72)
|
|
(pitch int32 :offset-assert 76)
|
|
(falloff-near int32 :offset-assert 80)
|
|
(falloff-far int32 :offset-assert 84)
|
|
(falloff-mode int32 :offset-assert 88)
|
|
(params sound-play-parms :offset-assert 92)
|
|
(param-count int32 :offset-assert 96)
|
|
(entity entity :offset-assert 100)
|
|
(sound-count int32 :offset-assert 104)
|
|
)
|
|
:method-count-assert 14
|
|
:size-assert #x6c
|
|
:flag-assert #xe0000006c
|
|
(:methods
|
|
(new (symbol type basic vector) _type_ 0)
|
|
(update! (_type_) int 9)
|
|
(change-sound! (_type_ sound-name) int 10)
|
|
(update-trans! (_type_ vector) int 11)
|
|
(update-vol! (_type_ int) int 12)
|
|
(stop! (_type_) int 13)
|
|
)
|
|
)
|
|
|
|
(define *sound-bank-1* #f)
|
|
(define *sound-bank-2* #f)
|
|
|
|
(defun-extern string->sound-name string sound-name)
|
|
(defun-extern sound-set-ear-trans vector vector float int)
|
|
(defun-extern ear-trans vector)
|