decomp: finish effect-control -- fixed ambient-sound type def (#876)

This commit is contained in:
Tyler Wilding 2021-10-10 18:44:47 -04:00 committed by GitHub
parent 277e3a3dd7
commit 28e3ba4863
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
16 changed files with 2908 additions and 70 deletions

View file

@ -2687,13 +2687,8 @@ void FunctionCallElement::update_from_stack(const Env& env,
std::swap(all_pop_vars.at(0), all_pop_vars.at(1));
}
if (tp_type.kind == TP_Type::Kind::RUN_FUNCTION_IN_PROCESS_FUNCTION) {
if (unstacked.at(0)->to_string(env) != "run-function-in-process") {
throw std::runtime_error(
fmt::format("Expression pass could not find the run-function-in-process function. Found "
"{} instead. Make sure there are no casts on this function.",
all_pop_vars.at(0).to_string(env)));
}
if (tp_type.kind == TP_Type::Kind::RUN_FUNCTION_IN_PROCESS_FUNCTION &&
unstacked.at(0)->to_string(env) == "run-function-in-process") {
unstacked.at(0) = pool.form<ConstantTokenElement>("run-now-in-process");
}

View file

@ -2962,7 +2962,7 @@
(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)
(params (pointer float) :offset-assert 92)
(param-count int32 :offset-assert 96)
(entity entity :offset-assert 100)
(sound-count int32 :offset-assert 104)
@ -11556,7 +11556,7 @@
(last-frame-num float :offset-assert 16)
(channel-offset int32 :offset-assert 20)
(res res-lump :offset-assert 24)
(name uint32 :offset-assert 28)
(name (pointer res-tag) :offset-assert 28)
(param uint32 :offset-assert 32)
)
:method-count-assert 15
@ -11564,12 +11564,12 @@
:flag-assert #xf00000024
(:methods
(new (symbol type process-drawable) _type_)
(dummy-9 () none 9)
(dummy-10 (_type_ symbol float int) none 10)
(dummy-11 () none 11)
(dummy-12 () none 12)
(TODO-RENAME-9 (_type_) none 9)
(dummy-10 (_type_ symbol float int) object 10)
(dummy-11 (_type_ symbol basic int basic int) none 11)
(dummy-12 (_type_ symbol basic int basic sound-name) int 12)
(set-channel-offset! (_type_ int) none 13)
(dummy-14 () none 14)
(TODO-RENAME-14 (_type_ float float float) none 14)
)
)
@ -15141,7 +15141,7 @@
(define-extern get-sound-buffer-entry (function pointer))
(define-extern sound-trans-convert (function vector3w vector int))
(define-extern sound-stop (function sound-id int))
(define-extern effect-param->sound-spec (function sound-spec sound-play-parms int sound-spec))
(define-extern effect-param->sound-spec (function sound-spec (pointer float) int sound-spec))
(define-extern ear-trans (function vector))
(define-extern sound-play-by-spec (function sound-spec sound-id vector sound-id))
(define-extern sound-play-by-name (function sound-name sound-id int int int uint vector sound-id))
@ -16631,7 +16631,7 @@
(define-extern sp-get-particle (function sparticle-system int sparticle-launch-state sparticle-cpuinfo))
(define-extern particle-adgif (function adgif-shader texture-id none))
(define-extern lookup-part-group-by-name (function string basic))
(define-extern lookup-part-group-pointer-by-name (function string (pointer sparticle-launch-group)))
(define-extern lookup-part-group-pointer-by-name (function string (pointer sparticle-launch-group))) ;; this can actually be a pointer to way more than just a SLG - can be - SLG | sparticle-launcher | sound-spec | death-info. See effect-control::10
(define-extern unlink-part-group-by-heap (function kheap int))
(define-extern particle-setup-adgif (function adgif-shader texture-id none))
(define-extern sp-queue-launch (function sparticle-system sparticle-launcher vector int))
@ -19560,7 +19560,7 @@
;; - Functions
(define-extern target-land-effect function)
(define-extern target-land-effect (function none :behavior target))
(define-extern target-hit-ground-anim function)
(define-extern mod-var-jump function)
(define-extern init-var-jump function)
@ -20298,11 +20298,11 @@
;; - Functions
(define-extern sound-name-with-material function)
(define-extern sound-name-with-material (function symbol int string sound-name))
;; - Unknowns
;;(define-extern *footstep-surface* object) ;; unknown type
(define-extern *footstep-surface* int) ;; unknown type
;; ----------------------

View file

@ -803,6 +803,18 @@
["L733", "uint64", true]
],
"effect-control": [
["L300", "float", true],
["L301", "float", true],
["L302", "float", true],
["L306", "float", true],
["L307", "float", true],
["L309", "float", true],
["L310", "float", true],
["L312", "float", true],
["L314", "float", true]
],
// please do not add things after this entry! git is dumb.
"object-file-that-doesnt-actually-exist-and-i-just-put-this-here-to-prevent-merge-conflicts-with-this-file": []
}

View file

@ -2733,5 +2733,23 @@
[16, "event-message-block"]
],
"(method 10 effect-control)": [
[16, "event-message-block"],
[96, "vector"],
[112, "vector"],
[128, "vector"],
[144, "vector"]
],
"(method 11 effect-control)": [
[16, "vector"],
[32, "vector"]
],
"(method 12 effect-control)": [
[16, "sound-spec"],
[96, "vector"]
],
"placeholder-do-not-add-below!": []
}

View file

@ -3911,5 +3911,18 @@
[2, "v1", "(pointer process-drawable)"]
],
"(method 10 effect-control)": [
[88, "v1", "collide-shape-moving"],
[143, "s3", "(pointer sparticle-launch-group)"],
[147, "s3", "sparticle-launch-group"],
[199, "s3", "sparticle-launch-group"],
[240, "s3", "basic"],
[286, "s3", "basic"],
[346, "s3", "basic"],
[367, "s3", "basic"],
[367, "s3", "basic"],
[[371, 451], "s3", "death-info"]
],
"placeholder-do-not-add-below": []
}

View file

@ -1063,7 +1063,7 @@
(if a1-7
(effect-param->sound-spec
s4-2
(the-as sound-play-parms a1-7)
(the-as (pointer float) a1-7)
(the-as int (-> sv-112 elt-count))
)
)
@ -1115,7 +1115,7 @@
)
(t9-2
a0-5
(the-as sound-play-parms (&+ (-> v1-8 data-base) (-> a1-2 data-offset)))
(the-as (pointer float) (&+ (-> v1-8 data-base) (-> a1-2 data-offset)))
(the-as int (-> (the-as (pointer res-tag) s3-0) 0 elt-count))
)
)

View file

@ -5,27 +5,31 @@
;; name in dgo: effect-control-h
;; dgos: GAME, ENGINE
(define-extern effect-param->sound-spec (function sound-spec (pointer float) int sound-spec))
;; decomp begins
(deftype effect-control (basic)
((process process-drawable :offset-assert 4)
(flags uint32 :offset-assert 8)
(last-frame-group art-joint-anim :offset-assert 12)
(last-frame-num float :offset-assert 16)
(channel-offset int32 :offset-assert 20)
(res res-lump :offset-assert 24)
(name uint32 :offset-assert 28)
(param uint32 :offset-assert 32)
((process process-drawable :offset-assert 4)
(flags uint32 :offset-assert 8)
(last-frame-group art-joint-anim :offset-assert 12)
(last-frame-num float :offset-assert 16)
(channel-offset int32 :offset-assert 20)
(res res-lump :offset-assert 24)
(name (pointer res-tag) :offset-assert 28)
(param uint32 :offset-assert 32)
)
:method-count-assert 15
:size-assert #x24
:flag-assert #xf00000024
(:methods
(new (symbol type process-drawable) _type_ 0)
(dummy-9 () none 9)
(dummy-10 (_type_ symbol float int) none 10)
(dummy-11 () none 11)
(dummy-12 () none 12)
(new (symbol type process-drawable) _type_)
(TODO-RENAME-9 (_type_) none 9)
(dummy-10 (_type_ symbol float int) object 10)
(dummy-11 (_type_ symbol basic int basic int) none 11)
(dummy-12 (_type_ symbol basic int basic sound-name) int 12)
(set-channel-offset! (_type_ int) none 13)
(dummy-14 () none 14)
(TODO-RENAME-14 (_type_ float float float) none 14)
)
)

File diff suppressed because it is too large Load diff

View file

@ -74,7 +74,7 @@
(dummy-17 self)
(let ((a0-22 (-> self skel effect)))
(if a0-22
((method-of-object a0-22 dummy-9))
(TODO-RENAME-9 a0-22)
)
)
(if (logtest? (-> self skel status) 72)

View file

@ -5,3 +5,15 @@
;; name in dgo: merc-death
;; dgos: GAME, ENGINE
;; TODO - for effect-control
(deftype death-info (basic)
((vertex-skip uint16 :offset-assert 4)
(timer uint8 :offset-assert 6)
(overlap uint8 :offset-assert 7)
(effect uint32 :offset-assert 8)
(sound basic :offset-assert 12)
)
:method-count-assert 9
:size-assert #x10
:flag-assert #x900000010
)

View file

@ -389,7 +389,7 @@
(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)
(params (pointer float) :offset-assert 92)
(param-count int32 :offset-assert 96)
(entity entity :offset-assert 100)
(sound-count int32 :offset-assert 104)

View file

@ -583,7 +583,7 @@
(set! (-> obj spec) spec)
(set! (-> obj name) name)
(set! (-> obj playing-id) (new-sound-id))
(set! (-> obj params) params)
(set! (-> obj params) (the-as (pointer float) params))
(set! (-> obj param-count) param-count)
(set! (-> obj entity) #f)
(set! (-> obj sound-count) 1)
@ -616,7 +616,6 @@
)
(defun-extern effect-param->sound-spec sound-spec sound-play-parms int sound-spec)
(define-extern *debug-effect-control* symbol)
(defmethod update! ambient-sound ((obj ambient-sound))
"Called once per frame to update the sound playback"
@ -645,7 +644,11 @@
(set! (-> spec fo-max) (-> obj falloff-far))
(set! (-> spec mask) (the-as uint 0))
(if (-> obj params)
(effect-param->sound-spec spec (-> obj params) (-> obj param-count))
(effect-param->sound-spec
spec
(the-as (pointer float) (-> obj params))
(-> obj param-count)
)
)
)
(if (and (nonzero? (-> spec fo-max))

View file

@ -3,26 +3,26 @@
;; definition of type effect-control
(deftype effect-control (basic)
((process process-drawable :offset-assert 4)
(flags uint32 :offset-assert 8)
(last-frame-group art-joint-anim :offset-assert 12)
(last-frame-num float :offset-assert 16)
(channel-offset int32 :offset-assert 20)
(res res-lump :offset-assert 24)
(name uint32 :offset-assert 28)
(param uint32 :offset-assert 32)
((process process-drawable :offset-assert 4)
(flags uint32 :offset-assert 8)
(last-frame-group art-joint-anim :offset-assert 12)
(last-frame-num float :offset-assert 16)
(channel-offset int32 :offset-assert 20)
(res res-lump :offset-assert 24)
(name (pointer res-tag) :offset-assert 28)
(param uint32 :offset-assert 32)
)
:method-count-assert 15
:size-assert #x24
:flag-assert #xf00000024
(:methods
(new (symbol type process-drawable) _type_ 0)
(dummy-9 () none 9)
(dummy-10 (_type_ symbol float int) none 10)
(dummy-11 () none 11)
(dummy-12 () none 12)
(TODO-RENAME-9 (_type_) none 9)
(dummy-10 (_type_ symbol float int) object 10)
(dummy-11 (_type_ symbol basic int basic int) none 11)
(dummy-12 (_type_ symbol basic int basic sound-name) int 12)
(set-channel-offset! (_type_ int) none 13)
(dummy-14 () none 14)
(TODO-RENAME-14 (_type_ float float float) none 14)
)
)

File diff suppressed because it is too large Load diff

View file

@ -760,22 +760,22 @@
;; definition of type ambient-sound
(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 int64 :offset-assert 48)
(time-base int64 :offset-assert 56)
(time-random int64 :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)
((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 int64 :offset-assert 48)
(time-base int64 :offset-assert 56)
(time-random int64 :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 (pointer float) :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

View file

@ -762,7 +762,7 @@
(set! (-> obj spec) sv-16)
(set! (-> obj name) sv-32)
(set! (-> obj playing-id) (new-sound-id))
(set! (-> obj params) sv-52)
(set! (-> obj params) (the-as (pointer float) sv-52))
(set! (-> obj param-count) sv-56)
(set! (-> obj entity) #f)
(set! (-> obj sound-count) 1)