mirror of
https://github.com/open-goal/jak-project
synced 2026-06-21 16:46:55 -04:00
93afb02cf4
This includes all the collision stuff needed to spawn `target`, decompiles the sparticle code and adds some of the PC hacks needed for merc to run (it doesn't work quite right and looks bad, likely due to a combination of code copied from Jak 2 and the time of day hacks). There are a bunch of temporary hacks (see commits) in place to prevent the game from crashing quite as much, but it is still extremely prone to doing so due to lots of missing functions/potentially bad decomp. --------- Co-authored-by: water <awaterford111445@gmail.com>
1101 lines
42 KiB
Common Lisp
Vendored
Generated
1101 lines
42 KiB
Common Lisp
Vendored
Generated
;;-*-Lisp-*-
|
|
(in-package goal)
|
|
|
|
;; definition for symbol *footstep-surface*, type pat-surface
|
|
(define *footstep-surface* (new 'static 'pat-surface :material (pat-material grass)))
|
|
|
|
;; definition for symbol *debug-effect-control*, type symbol
|
|
(define *debug-effect-control* #f)
|
|
|
|
;; definition for function sound-name-with-material
|
|
(defun sound-name-with-material ((arg0 string) (arg1 pat-surface) (arg2 string))
|
|
(format
|
|
(clear *temp-string*)
|
|
"~S~S~S"
|
|
arg0
|
|
(-> (new 'static 'boxed-array :type string
|
|
"-unk"
|
|
"-ice"
|
|
"-qsd"
|
|
"-wtr"
|
|
"-tar"
|
|
"-san"
|
|
"-wod"
|
|
"-grs"
|
|
"-pmt"
|
|
"-snw"
|
|
"-dsn"
|
|
"-unk"
|
|
"-lav"
|
|
"-cwd"
|
|
"-grv"
|
|
"-drt"
|
|
"-mtl"
|
|
"-str"
|
|
"-pmt"
|
|
"-swm"
|
|
"-unk"
|
|
"-mtl"
|
|
"-neu"
|
|
"-stn"
|
|
"-cmt"
|
|
"-car"
|
|
"-gmt"
|
|
"-smt"
|
|
"-hwd"
|
|
"-sqi"
|
|
"-mhm"
|
|
"-for"
|
|
"-mhs"
|
|
"-dma"
|
|
)
|
|
(-> arg1 material)
|
|
)
|
|
arg2
|
|
)
|
|
(string->sound-name *temp-string*)
|
|
)
|
|
|
|
;; definition for function effect-param->sound-spec
|
|
(defun effect-param->sound-spec ((arg0 sound-spec) (arg1 (pointer float)) (arg2 int) (arg3 process-focusable))
|
|
(while (> arg2 0)
|
|
(case (the int (-> arg1 0))
|
|
((3)
|
|
(logior! (-> arg0 mask) (sound-mask volume))
|
|
(set! (-> arg0 volume) (the int (* 1024.0 (-> arg1 1))))
|
|
)
|
|
((4)
|
|
(logior! (-> arg0 mask) (sound-mask volume))
|
|
(+! (-> arg0 volume) (the int (* 1024.0 (* (-> arg1 1) (rand-vu)))))
|
|
)
|
|
((5)
|
|
(logior! (-> arg0 mask) (sound-mask pitch))
|
|
(set! (-> arg0 pitch-mod) (the int (* 1524.0 (-> arg1 1))))
|
|
)
|
|
((6)
|
|
(logior! (-> arg0 mask) (sound-mask pitch))
|
|
(+! (-> arg0 pitch-mod) (the int (* 1524.0 (* (-> arg1 1) (rand-vu)))))
|
|
)
|
|
((9)
|
|
(logior! (-> arg0 mask) (sound-mask bend))
|
|
(set! (-> arg0 bend) (the int (* 327.66998 (-> arg1 1))))
|
|
)
|
|
((10)
|
|
(logior! (-> arg0 mask) (sound-mask bend))
|
|
(+! (-> arg0 bend) (the int (* 327.66998 (* (-> arg1 1) (rand-vu)))))
|
|
)
|
|
((11)
|
|
(logior! (-> arg0 mask) (sound-mask fo-min))
|
|
(set! (-> arg0 fo-min) (the int (-> arg1 1)))
|
|
)
|
|
((12)
|
|
(logior! (-> arg0 mask) (sound-mask fo-max))
|
|
(set! (-> arg0 fo-max) (the int (-> arg1 1)))
|
|
)
|
|
((13)
|
|
(logior! (-> arg0 mask) (sound-mask fo-curve))
|
|
(set! (-> arg0 fo-curve) (the int (-> arg1 1)))
|
|
)
|
|
((19)
|
|
(set! (-> arg0 priority) (the int (-> arg1 1)))
|
|
)
|
|
((25)
|
|
(logior! (-> arg0 mask) (sound-mask reg0))
|
|
(set! (-> arg0 reg 0) (the-as uint (-> *footstep-surface* material)))
|
|
(let* ((s2-3 arg3)
|
|
(v1-33 (if (type? s2-3 process-focusable)
|
|
s2-3
|
|
)
|
|
)
|
|
)
|
|
(when v1-33
|
|
(cond
|
|
((focus-test? v1-33 in-air)
|
|
(set! (-> arg0 reg 0) (the-as uint 126))
|
|
)
|
|
((focus-test? v1-33 touch-water)
|
|
(set! (-> arg0 reg 0) (the-as uint 127))
|
|
)
|
|
(else
|
|
(let* ((s2-4 (-> v1-33 root))
|
|
(v1-34 (if (type? s2-4 collide-shape-moving)
|
|
s2-4
|
|
)
|
|
)
|
|
)
|
|
(if v1-34
|
|
(set! (-> arg0 reg 0) (the-as uint (-> (the-as collide-shape-moving v1-34) ground-pat material)))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
((21)
|
|
(logior! (-> arg0 mask) (sound-mask reg0))
|
|
(set! (-> arg0 reg 0) (the-as uint (the int (-> arg1 1))))
|
|
)
|
|
((22)
|
|
(logior! (-> arg0 mask) (sound-mask reg1))
|
|
(set! (-> arg0 reg 1) (the-as uint (the int (-> arg1 1))))
|
|
)
|
|
((23)
|
|
(logior! (-> arg0 mask) (sound-mask reg2))
|
|
(set! (-> arg0 reg 2) (the-as uint (the int (-> arg1 1))))
|
|
)
|
|
)
|
|
(+! arg2 -2)
|
|
(set! arg1 (&-> arg1 2))
|
|
)
|
|
arg0
|
|
)
|
|
|
|
;; definition for method 9 of type effect-control
|
|
;; INFO: Used lq/sq
|
|
;; WARN: Return type mismatch int vs none.
|
|
(defmethod effect-control-method-9 ((this effect-control))
|
|
(let* ((a0-1 (-> this process skel))
|
|
(v1-3 (if (< (the-as uint (-> this channel-offset)) (-> a0-1 active-channels))
|
|
(-> a0-1 root-channel (-> this channel-offset))
|
|
(the-as joint-control-channel #f)
|
|
)
|
|
)
|
|
)
|
|
(cond
|
|
((and v1-3 (-> v1-3 frame-group))
|
|
(let* ((s5-0 (-> v1-3 frame-group))
|
|
(f30-0 (+ (* (-> v1-3 frame-num) (-> s5-0 artist-step)) (-> s5-0 artist-base)))
|
|
)
|
|
(let ((a0-3 (-> a0-1 root-channel 0 num-func)))
|
|
(cond
|
|
((!= s5-0 (-> this last-frame-group))
|
|
(set! (-> this res) (-> s5-0 extra))
|
|
(let ((v1-6 (-> (lookup-tag-idx (-> s5-0 extra) 'effect-name 'base -1000000000.0) lo)))
|
|
(set! (-> this name) (if (>= (the-as int v1-6) 0)
|
|
(&-> (-> s5-0 extra tag) v1-6)
|
|
(the-as (pointer res-tag) #f)
|
|
)
|
|
)
|
|
)
|
|
(if (and (-> this name) (= (-> this name 0 key-frame) -1000000000.0))
|
|
(set! (-> this name) (&-> (-> this name) 1))
|
|
)
|
|
(play-effects-from-res-lump this f30-0 f30-0 f30-0)
|
|
)
|
|
((or (not (-> this name)) (= f30-0 (-> this last-frame-num)))
|
|
)
|
|
(else
|
|
(let ((f28-0 (-> this last-frame-num))
|
|
(f26-0 f30-0)
|
|
)
|
|
(cond
|
|
((= a0-3 num-func-seek!)
|
|
(let ((f0-6 (+ (* (-> v1-3 param 0) (-> s5-0 artist-step)) (-> s5-0 artist-base))))
|
|
(cond
|
|
((< f26-0 f28-0)
|
|
(if (>= f28-0 f0-6)
|
|
(play-effects-from-res-lump this f26-0 f28-0 f30-0)
|
|
)
|
|
)
|
|
(else
|
|
(if (>= f0-6 f28-0)
|
|
(play-effects-from-res-lump this f28-0 f26-0 f30-0)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
((or (= a0-3 num-func-loop!) (= a0-3 num-func-loop-speedless!) (= a0-3 num-func-loop-set!))
|
|
(cond
|
|
((>= (-> v1-3 param 0) 0.0)
|
|
(cond
|
|
((< f26-0 f28-0)
|
|
(play-effects-from-res-lump this f28-0 9999999.0 f30-0)
|
|
(play-effects-from-res-lump this -100000000.0 f26-0 9999999.0)
|
|
)
|
|
(else
|
|
(play-effects-from-res-lump this f28-0 f26-0 f30-0)
|
|
)
|
|
)
|
|
)
|
|
((< f28-0 f26-0)
|
|
(play-effects-from-res-lump this f26-0 9999999.0 f30-0)
|
|
(play-effects-from-res-lump this -100000000.0 f28-0 9999999.0)
|
|
)
|
|
(else
|
|
(play-effects-from-res-lump this f26-0 f28-0 f30-0)
|
|
)
|
|
)
|
|
)
|
|
((= a0-3 num-func-+!)
|
|
(if (>= (-> v1-3 param 0) 0.0)
|
|
(play-effects-from-res-lump this f28-0 f26-0 f30-0)
|
|
(play-effects-from-res-lump this f26-0 f28-0 f30-0)
|
|
)
|
|
)
|
|
((= a0-3 num-func-identity)
|
|
(play-effects-from-res-lump this f30-0 f30-0 f30-0)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(set! (-> this last-frame-group) s5-0)
|
|
(set! (-> this last-frame-num) f30-0)
|
|
)
|
|
)
|
|
(else
|
|
(set! (-> this last-frame-group) #f)
|
|
)
|
|
)
|
|
)
|
|
0
|
|
(none)
|
|
)
|
|
|
|
;; definition for method 14 of type effect-control
|
|
;; INFO: Used lq/sq
|
|
;; WARN: Return type mismatch int vs none.
|
|
(defmethod play-effects-from-res-lump ((this effect-control) (arg0 float) (arg1 float) (arg2 float))
|
|
(let ((s2-0 (-> this name)))
|
|
(while (= (-> s2-0 0 name) 'effect-name)
|
|
(let ((f0-0 (-> s2-0 0 key-frame)))
|
|
(when (or (and (< f0-0 arg1) (< arg0 f0-0)) (= f0-0 arg2))
|
|
(let* ((a0-1 this)
|
|
(t9-0 (method-of-object a0-1 do-effect))
|
|
(v1-7 (-> this res))
|
|
(a1-1 (-> s2-0 0))
|
|
)
|
|
(t9-0
|
|
a0-1
|
|
(the-as symbol (-> (the-as (pointer int32) (&+ (-> v1-7 data-base) (-> a1-1 data-offset)))))
|
|
f0-0
|
|
-1
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(set! s2-0 (&-> s2-0 1))
|
|
)
|
|
)
|
|
0
|
|
(none)
|
|
)
|
|
|
|
;; definition for method 10 of type effect-control
|
|
;; INFO: Used lq/sq
|
|
;; WARN: Return type mismatch int vs none.
|
|
;; WARN: Function (method 10 effect-control) has a return type of none, but the expression builder found a return statement.
|
|
(defmethod do-effect ((this effect-control) (arg0 symbol) (arg1 float) (arg2 int))
|
|
(local-vars (sv-288 res-lump))
|
|
(let* ((v1-2 (rtype-of arg0))
|
|
(s3-0 (the-as string (cond
|
|
((= v1-2 symbol)
|
|
(symbol->string arg0)
|
|
)
|
|
((= v1-2 string)
|
|
arg0
|
|
)
|
|
(else
|
|
#f
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(cond
|
|
((logtest? (-> this flags) (effect-control-flag ecf2))
|
|
(return #f)
|
|
)
|
|
((string= s3-0 "script")
|
|
(let ((gp-1 (get-property-struct
|
|
(-> this res)
|
|
'effect-script
|
|
'exact
|
|
arg1
|
|
(the-as structure #f)
|
|
(the-as (pointer res-tag) #f)
|
|
*res-static-buf*
|
|
)
|
|
)
|
|
)
|
|
(script-eval (the-as pair gp-1))
|
|
)
|
|
(return #f)
|
|
)
|
|
)
|
|
(set! arg2 (cond
|
|
((< arg2 0)
|
|
(let ((v0-7 (get-property-value
|
|
(-> this res)
|
|
'effect-joint
|
|
'exact
|
|
arg1
|
|
(the-as uint128 0)
|
|
(the-as (pointer res-tag) #f)
|
|
*res-static-buf*
|
|
)
|
|
)
|
|
)
|
|
(if (zero? v0-7)
|
|
0
|
|
(the-as int (+ v0-7 1))
|
|
)
|
|
)
|
|
)
|
|
(else
|
|
(empty)
|
|
arg2
|
|
)
|
|
)
|
|
)
|
|
(when (logtest? (-> this flags) (effect-control-flag ecf0))
|
|
(if (send-event (-> this process) 'effect-control s3-0 arg1 arg2)
|
|
(return 0)
|
|
)
|
|
)
|
|
(cond
|
|
((and (= (-> s3-0 data 0) 101)
|
|
(= (-> s3-0 data 1) 102)
|
|
(= (-> s3-0 data 2) 102)
|
|
(= (-> s3-0 data 3) 101)
|
|
(= (-> s3-0 data 4) 99)
|
|
(= (-> s3-0 data 5) 116)
|
|
(= (-> s3-0 data 6) 45)
|
|
)
|
|
(let* ((s2-0 (-> this process root))
|
|
(v1-38 (if (type? s2-0 collide-shape-moving)
|
|
s2-0
|
|
)
|
|
)
|
|
(t1-2 (if v1-38
|
|
(-> (the-as collide-shape-moving v1-38) ground-pat)
|
|
*footstep-surface*
|
|
)
|
|
)
|
|
)
|
|
(do-effect-for-surface this (the-as symbol s3-0) arg1 arg2 (-> this res) t1-2)
|
|
)
|
|
)
|
|
((and (= (-> s3-0 data 0) 103)
|
|
(= (-> s3-0 data 1) 114)
|
|
(= (-> s3-0 data 2) 111)
|
|
(= (-> s3-0 data 3) 117)
|
|
(= (-> s3-0 data 4) 112)
|
|
(= (-> s3-0 data 5) 45)
|
|
)
|
|
(let ((s2-1 (lookup-part-group-by-name s3-0)))
|
|
(when (and (nonzero? s2-1) s2-1 (= (-> s2-1 type) sparticle-launch-group))
|
|
(if *debug-effect-control*
|
|
(format
|
|
#t
|
|
"(~5D) effect group ~A ~A frame ~F joint ~D~%"
|
|
(current-time)
|
|
(-> this process name)
|
|
s3-0
|
|
arg1
|
|
arg2
|
|
)
|
|
)
|
|
(cond
|
|
((logtest? (-> s2-1 flags) (sp-group-flag sp13))
|
|
(set! (-> *launch-matrix* trans quad)
|
|
(-> (vector<-cspace! (new 'stack-no-clear 'vector) (-> this process node-list data arg2)) quad)
|
|
)
|
|
(part-tracker-spawn part-tracker-subsampler :to (-> this process) :group s2-1)
|
|
)
|
|
(else
|
|
(set! (-> *launch-matrix* trans quad)
|
|
(-> (vector<-cspace! (new 'stack-no-clear 'vector) (-> this process node-list data arg2)) quad)
|
|
)
|
|
(part-tracker-spawn part-tracker :to (-> this process) :group s2-1)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
((and (= (-> s3-0 data 0) 101)
|
|
(= (-> s3-0 data 1) 118)
|
|
(= (-> s3-0 data 2) 101)
|
|
(= (-> s3-0 data 3) 110)
|
|
(= (-> s3-0 data 4) 116)
|
|
(= (-> s3-0 data 5) 45)
|
|
)
|
|
(send-event (-> this process) (string->symbol s3-0) arg1 arg2)
|
|
)
|
|
((string= s3-0 "camera-shake")
|
|
(activate! *camera-smush-control* 819.2 15 75 1.0 0.9 (-> *display* camera-clock))
|
|
)
|
|
((and (= (-> s3-0 data 0) 100)
|
|
(= (-> s3-0 data 1) 101)
|
|
(= (-> s3-0 data 2) 97)
|
|
(= (-> s3-0 data 3) 116)
|
|
(= (-> s3-0 data 4) 104)
|
|
(= (-> s3-0 data 5) 45)
|
|
)
|
|
(let ((s3-1 (-> (string->symbol s3-0) value)))
|
|
(when (and (logtest? (-> this flags) (effect-control-flag ecf1))
|
|
(zero? (-> this process draw death-timer))
|
|
(= (-> (the-as death-info s3-1) type) death-info)
|
|
)
|
|
(let ((v1-131 (-> this process draw)))
|
|
(let ((a1-25 (-> (the-as death-info s3-1) vertex-skip))
|
|
(a0-59
|
|
(max
|
|
2
|
|
(the-as int (/ (-> (the-as death-info s3-1) timer) (the-as uint (the int (-> *display* time-factor)))))
|
|
)
|
|
)
|
|
)
|
|
(when (= (-> *setting-control* user-current video-mode) 'pal)
|
|
(if (< (the-as uint 1) a1-25)
|
|
(set! a1-25 (/ (the-as uint (* (the-as uint 50) a1-25)) (the-as uint 60)))
|
|
)
|
|
)
|
|
(let ((a2-29 (-> *display* frames (-> *display* last-screen) run-time)))
|
|
(cond
|
|
((< 9000 (the-as int a2-29))
|
|
(set! a1-25 (* a1-25 4))
|
|
)
|
|
((< 7000 (the-as int a2-29))
|
|
(set! a1-25 (* a1-25 2))
|
|
)
|
|
)
|
|
)
|
|
(set! (-> v1-131 death-vertex-skip) a1-25)
|
|
(set! (-> v1-131 death-effect) (-> (the-as death-info s3-1) effect))
|
|
(set! (-> v1-131 death-timer) (the-as uint (+ a0-59 1)))
|
|
)
|
|
(set! (-> v1-131 death-timer-org) (-> v1-131 death-timer))
|
|
(set! (-> v1-131 death-draw-overlap) (-> (the-as death-info s3-1) overlap))
|
|
)
|
|
(when (-> (the-as death-info s3-1) sound)
|
|
(let* ((s2-3 this)
|
|
(s1-0 (method-of-object s2-3 play-effect-sound))
|
|
(s0-0 (-> (the-as death-info s3-1) sound))
|
|
)
|
|
(set! sv-288 (-> this res))
|
|
(let ((t1-5 (string->sound-name (the-as string (-> (the-as death-info s3-1) sound)))))
|
|
(s1-0 s2-3 s0-0 arg1 arg2 sv-288 t1-5)
|
|
)
|
|
)
|
|
)
|
|
(send-event (-> this process) 'death-start (the-as death-info s3-1))
|
|
)
|
|
)
|
|
)
|
|
(else
|
|
(play-effect-sound this (the-as symbol s3-0) arg1 arg2 (-> this res) (string->sound-name s3-0))
|
|
)
|
|
)
|
|
)
|
|
0
|
|
(none)
|
|
)
|
|
|
|
;; definition for method 11 of type effect-control
|
|
;; INFO: Used lq/sq
|
|
;; WARN: Return type mismatch int vs none.
|
|
(defmethod do-effect-for-surface ((this effect-control) (arg0 symbol) (arg1 float) (arg2 int) (arg3 basic) (arg4 pat-surface))
|
|
(local-vars
|
|
(sv-64
|
|
(function sparticle-system sparticle-launcher matrix sparticle-launch-state sparticle-launch-control float none)
|
|
)
|
|
(sv-80 sparticle-system)
|
|
(sv-96 vector)
|
|
(sv-112 matrix)
|
|
(sv-128
|
|
(function sparticle-system sparticle-launcher matrix sparticle-launch-state sparticle-launch-control float none)
|
|
)
|
|
(sv-144 sparticle-system)
|
|
(sv-160 vector)
|
|
(sv-176 matrix)
|
|
(sv-192 symbol)
|
|
(sv-208
|
|
(function sparticle-system sparticle-launcher matrix sparticle-launch-state sparticle-launch-control float none)
|
|
)
|
|
(sv-224 sparticle-system)
|
|
(sv-240 vector)
|
|
(sv-256 matrix)
|
|
)
|
|
(let ((s1-0 (the-as sound-name #f)))
|
|
(-> *display* frames (-> *display* last-screen) run-time)
|
|
(set! sv-192 arg0)
|
|
(cond
|
|
((string= (the-as string sv-192) "effect-walk-step-left")
|
|
(set! s1-0 (sound-name-with-material "walk" arg4 "1"))
|
|
)
|
|
((string= (the-as string sv-192) "effect-run-step-left")
|
|
(set! s1-0 (sound-name-with-material "run" arg4 "1"))
|
|
)
|
|
((string= (the-as string sv-192) "effect-mech-step-left")
|
|
(set! s1-0 (sound-name-with-material "mwlk" arg4 "1"))
|
|
)
|
|
((string= (the-as string sv-192) "effect-walk-step-right")
|
|
(set! s1-0 (sound-name-with-material "walk" arg4 "2"))
|
|
)
|
|
((string= (the-as string sv-192) "effect-run-step-right")
|
|
(set! s1-0 (sound-name-with-material "run" arg4 "2"))
|
|
)
|
|
((string= (the-as string sv-192) "effect-mech-step-right")
|
|
(set! s1-0 (sound-name-with-material "mwlk" arg4 "2"))
|
|
)
|
|
((string= (the-as string sv-192) "effect-roll")
|
|
(set! s1-0 (sound-name-with-material "roll" arg4 ""))
|
|
)
|
|
((string= (the-as string sv-192) "effect-slide")
|
|
(set! s1-0 (sound-name-with-material "slide" arg4 ""))
|
|
)
|
|
((string= (the-as string sv-192) "effect-land")
|
|
(set! s1-0 (sound-name-with-material "land" arg4 ""))
|
|
)
|
|
((string= (the-as string sv-192) "effect-zoom-land")
|
|
(set! s1-0 (sound-name-with-material "zoom-land" arg4 ""))
|
|
)
|
|
((string= (the-as string sv-192) "effect-zoom-hit")
|
|
(set! s1-0 (sound-name-with-material "zoom-hit" arg4 ""))
|
|
)
|
|
((string= (the-as string sv-192) "effect-flut-land")
|
|
(set! s1-0 (sound-name-with-material "flut-land" arg4 ""))
|
|
)
|
|
((string= (the-as string sv-192) "effect-land-poof")
|
|
(do-effect
|
|
this
|
|
(the-as symbol (-> (new 'static 'boxed-array :type string
|
|
"group-land-poof-unk"
|
|
"group-land-poof-ice"
|
|
"group-land-poof-qsd"
|
|
"group-land-poof-wtr"
|
|
"group-land-poof-tar"
|
|
"group-land-poof-san"
|
|
"group-land-poof-wod"
|
|
"group-land-poof-grs"
|
|
"group-land-poof-pmt"
|
|
"group-land-poof-snw"
|
|
"group-land-poof-dsn"
|
|
"group-land-poof-unk"
|
|
"group-land-poof-lav"
|
|
"group-land-poof-cwd"
|
|
"group-land-poof-grv"
|
|
"group-land-poof-drt"
|
|
"group-land-poof-mtl"
|
|
"group-land-poof-str"
|
|
"group-land-poof-pmt"
|
|
"group-land-poof-swm"
|
|
"group-land-poof-unk"
|
|
"group-land-poof-mtl"
|
|
"group-land-poof-neu"
|
|
"group-land-poof-stn"
|
|
"group-land-poof-cmt"
|
|
"group-land-poof-car"
|
|
"group-land-poof-gmt"
|
|
"group-land-poof-smt"
|
|
"group-land-poof-hwd"
|
|
"group-land-poof-sqi"
|
|
"group-land-poof-mhm"
|
|
"group-land-poof-for"
|
|
"group-land-poof-mhs"
|
|
"group-land-poof-dma"
|
|
)
|
|
(-> arg4 material)
|
|
)
|
|
)
|
|
arg1
|
|
-1
|
|
)
|
|
)
|
|
((string= (the-as string sv-192) "effect-run-poof")
|
|
(do-effect
|
|
this
|
|
(the-as symbol (-> (new 'static 'boxed-array :type string
|
|
"group-run-poof-unk"
|
|
"group-run-poof-ice"
|
|
"group-run-poof-qsd"
|
|
"group-run-poof-wtr"
|
|
"group-run-poof-tar"
|
|
"group-run-poof-san"
|
|
"group-run-poof-wod"
|
|
"group-run-poof-grs"
|
|
"group-run-poof-pmt"
|
|
"group-run-poof-snw"
|
|
"group-run-poof-dsn"
|
|
"group-run-poof-unk"
|
|
"group-run-poof-lav"
|
|
"group-run-poof-cwd"
|
|
"group-run-poof-grv"
|
|
"group-run-poof-drt"
|
|
"group-run-poof-mtl"
|
|
"group-run-poof-str"
|
|
"group-run-poof-pmt"
|
|
"group-run-poof-swm"
|
|
"group-run-poof-unk"
|
|
"group-run-poof-mtl"
|
|
"group-run-poof-neu"
|
|
"group-run-poof-stn"
|
|
"group-run-poof-cmt"
|
|
"group-run-poof-car"
|
|
"group-run-poof-gmt"
|
|
"group-run-poof-smt"
|
|
"group-run-poof-hwd"
|
|
"group-run-poof-sqi"
|
|
"group-run-poof-mhm"
|
|
"group-run-poof-for"
|
|
"group-run-poof-mhs"
|
|
"group-run-poof-dma"
|
|
)
|
|
(-> arg4 material)
|
|
)
|
|
)
|
|
arg1
|
|
-1
|
|
)
|
|
)
|
|
((string= (the-as string sv-192) "effect-just-footprint")
|
|
(do-effect
|
|
this
|
|
(the-as symbol (-> (new 'static 'boxed-array :type string
|
|
"group-just-footprint-unk"
|
|
"group-just-footprint-ice"
|
|
"group-just-footprint-qsd"
|
|
"group-just-footprint-wtr"
|
|
"group-just-footprint-tar"
|
|
"group-just-footprint-san"
|
|
"group-just-footprint-wod"
|
|
"group-just-footprint-grs"
|
|
"group-just-footprint-pmt"
|
|
"group-just-footprint-snw"
|
|
"group-just-footprint-dsn"
|
|
"group-just-footprint-unk"
|
|
"group-just-footprint-lav"
|
|
"group-just-footprint-cwd"
|
|
"group-just-footprint-grv"
|
|
"group-just-footprint-drt"
|
|
"group-just-footprint-mtl"
|
|
"group-just-footprint-str"
|
|
"group-just-footprint-pmt"
|
|
"group-just-footprint-swm"
|
|
"group-just-footprint-unk"
|
|
"group-just-footprint-mtl"
|
|
"group-just-footprint-neu"
|
|
"group-just-footprint-stn"
|
|
"group-just-footprint-cmt"
|
|
"group-just-footprint-car"
|
|
"group-just-footprint-gmt"
|
|
"group-just-footprint-smt"
|
|
"group-just-footprint-hwd"
|
|
"group-just-footprint-sqi"
|
|
"group-just-footprint-mhm"
|
|
"group-just-footprint-for"
|
|
"group-just-footprint-mhs"
|
|
"group-just-footprint-dma"
|
|
)
|
|
(-> arg4 material)
|
|
)
|
|
)
|
|
arg1
|
|
-1
|
|
)
|
|
)
|
|
((string= (the-as string sv-192) "effect-just-poof")
|
|
(do-effect
|
|
this
|
|
(the-as symbol (-> (new 'static 'boxed-array :type string
|
|
"group-just-poof-unk"
|
|
"group-just-poof-ice"
|
|
"group-just-poof-qsd"
|
|
"group-just-poof-wtr"
|
|
"group-just-poof-tar"
|
|
"group-just-poof-san"
|
|
"group-just-poof-wod"
|
|
"group-just-poof-grs"
|
|
"group-just-poof-pmt"
|
|
"group-just-poof-snw"
|
|
"group-just-poof-dsn"
|
|
"group-just-poof-unk"
|
|
"group-just-poof-lav"
|
|
"group-just-poof-cwd"
|
|
"group-just-poof-grv"
|
|
"group-just-poof-drt"
|
|
"group-just-poof-mtl"
|
|
"group-just-poof-str"
|
|
"group-just-poof-pmt"
|
|
"group-just-poof-swm"
|
|
"group-just-poof-unk"
|
|
"group-just-poof-mtl"
|
|
"group-just-poof-neu"
|
|
"group-just-poof-stn"
|
|
"group-just-poof-cmt"
|
|
"group-just-poof-car"
|
|
"group-just-poof-gmt"
|
|
"group-just-poof-smt"
|
|
"group-just-poof-hwd"
|
|
"group-just-poof-sqi"
|
|
"group-just-poof-mhm"
|
|
"group-just-poof-for"
|
|
"group-just-poof-mhs"
|
|
"group-just-poof-dma"
|
|
)
|
|
(-> arg4 material)
|
|
)
|
|
)
|
|
arg1
|
|
-1
|
|
)
|
|
)
|
|
((string= (the-as string sv-192) "effect-slide-poof")
|
|
(do-effect
|
|
this
|
|
(the-as symbol (-> (new 'static 'boxed-array :type string
|
|
"group-slide-poof-unk"
|
|
"group-slide-poof-ice"
|
|
"group-slide-poof-qsd"
|
|
"group-slide-poof-wtr"
|
|
"group-slide-poof-tar"
|
|
"group-slide-poof-san"
|
|
"group-slide-poof-wod"
|
|
"group-slide-poof-grs"
|
|
"group-slide-poof-pmt"
|
|
"group-slide-poof-snw"
|
|
"group-slide-poof-dsn"
|
|
"group-slide-poof-unk"
|
|
"group-slide-poof-lav"
|
|
"group-slide-poof-cwd"
|
|
"group-slide-poof-grv"
|
|
"group-slide-poof-drt"
|
|
"group-slide-poof-mtl"
|
|
"group-slide-poof-str"
|
|
"group-slide-poof-pmt"
|
|
"group-slide-poof-swm"
|
|
"group-slide-poof-unk"
|
|
"group-slide-poof-mtl"
|
|
"group-slide-poof-neu"
|
|
"group-slide-poof-stn"
|
|
"group-slide-poof-cmt"
|
|
"group-slide-poof-car"
|
|
"group-slide-poof-gmt"
|
|
"group-slide-poof-smt"
|
|
"group-slide-poof-hwd"
|
|
"group-slide-poof-sqi"
|
|
"group-slide-poof-mhm"
|
|
"group-slide-poof-for"
|
|
"group-slide-poof-mhs"
|
|
"group-slide-poof-dma"
|
|
)
|
|
(-> arg4 material)
|
|
)
|
|
)
|
|
arg1
|
|
-1
|
|
)
|
|
)
|
|
((string= (the-as string sv-192) "effect-droppings")
|
|
(let ((s0-1 (-> *part-id-table* (-> (new 'static 'boxed-array :type uint32
|
|
#x8e
|
|
#x2a9
|
|
#x2aa
|
|
#x2ab
|
|
#x2ac
|
|
#x75
|
|
#x8b
|
|
#x77
|
|
#x2ad
|
|
#x79
|
|
#x2ae
|
|
#x8e
|
|
#x2af
|
|
#x8d
|
|
#x2b0
|
|
#x76
|
|
#x2b1
|
|
#x2b2
|
|
#x2ad
|
|
#x2b3
|
|
#x8e
|
|
#x2b1
|
|
#x2b4
|
|
#x8c
|
|
#x2b5
|
|
#x2b6
|
|
#x2b7
|
|
#x2b8
|
|
#x2b9
|
|
#x2ba
|
|
#x2bb
|
|
#x78
|
|
#x2bc
|
|
#x2bd
|
|
)
|
|
(-> arg4 material)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(when (nonzero? s0-1)
|
|
(set! sv-64 sp-launch-particles-var)
|
|
(set! sv-80 *sp-particle-system-2d*)
|
|
(set! sv-112 *launch-matrix*)
|
|
(set! sv-96 (-> sv-112 trans))
|
|
(let ((v1-80 (-> (vector<-cspace! (new 'stack-no-clear 'vector) (-> this process node-list data arg2)) quad)))
|
|
(set! (-> sv-96 quad) v1-80)
|
|
)
|
|
(let ((a3-6 #f)
|
|
(t0-1 #f)
|
|
(t1-1 1.0)
|
|
)
|
|
(sv-64 sv-80 s0-1 sv-112 (the-as sparticle-launch-state a3-6) (the-as sparticle-launch-control t0-1) t1-1)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
((string= (the-as string sv-192) "effect-jump-droppings")
|
|
(let ((s0-2 (-> *part-id-table* (-> (new 'static 'boxed-array :type uint32
|
|
#x2be
|
|
#x2bf
|
|
#x2c0
|
|
#x2c1
|
|
#x2c2
|
|
#x86
|
|
#x2c3
|
|
#x89
|
|
#x2c4
|
|
#x88
|
|
#x2c5
|
|
#x2be
|
|
#x2c6
|
|
#x2c7
|
|
#x2c8
|
|
#x87
|
|
#x2c9
|
|
#x2ca
|
|
#x2c4
|
|
#x2cb
|
|
#x2be
|
|
#x2c9
|
|
#x2cc
|
|
#x2cd
|
|
#x2ce
|
|
#x2cf
|
|
#x2d0
|
|
#x2d1
|
|
#x2d2
|
|
#x2d3
|
|
#x2d4
|
|
#x8a
|
|
#x2d5
|
|
#x2d6
|
|
)
|
|
(-> arg4 material)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(when (nonzero? s0-2)
|
|
(set! sv-128 sp-launch-particles-var)
|
|
(set! sv-144 *sp-particle-system-2d*)
|
|
(set! sv-176 *launch-matrix*)
|
|
(set! sv-160 (-> sv-176 trans))
|
|
(let ((v1-97 (-> (vector<-cspace! (new 'stack-no-clear 'vector) (-> this process node-list data arg2)) quad)))
|
|
(set! (-> sv-160 quad) v1-97)
|
|
)
|
|
(let ((a3-7 #f)
|
|
(t0-2 #f)
|
|
(t1-2 1.0)
|
|
)
|
|
(sv-128 sv-144 s0-2 sv-176 (the-as sparticle-launch-state a3-7) (the-as sparticle-launch-control t0-2) t1-2)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
((let ((t9-40 string=)
|
|
(a1-45 "effect-board-poof")
|
|
)
|
|
(t9-40 (the-as string sv-192) a1-45)
|
|
)
|
|
(let ((s0-3 (-> *part-id-table* (-> (new 'static 'boxed-array :type uint32
|
|
#x2d7
|
|
#x2d8
|
|
#x2d9
|
|
#x2da
|
|
#x2db
|
|
#x2dc
|
|
#x2dd
|
|
#x2de
|
|
#x2df
|
|
#x2e0
|
|
#x2e1
|
|
#x2d7
|
|
#x2e2
|
|
#x2e3
|
|
#x2e4
|
|
#x2e5
|
|
#x2e6
|
|
#x2e7
|
|
#x2df
|
|
#x2e8
|
|
#x2d7
|
|
#x2e6
|
|
#x2e9
|
|
#x2a2
|
|
#x2ea
|
|
#x2eb
|
|
#x2ec
|
|
#x2ed
|
|
#x2ee
|
|
#x2ef
|
|
#x2f0
|
|
#x2f1
|
|
#x2f2
|
|
#x2f3
|
|
)
|
|
(-> arg4 material)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(when (nonzero? s0-3)
|
|
(set! sv-208 sp-launch-particles-var)
|
|
(set! sv-224 *sp-particle-system-2d*)
|
|
(set! sv-256 *launch-matrix*)
|
|
(set! sv-240 (-> sv-256 trans))
|
|
(let ((v1-114 (-> (vector<-cspace! (new 'stack-no-clear 'vector) (-> this process node-list data arg2)) quad)))
|
|
(set! (-> sv-240 quad) v1-114)
|
|
)
|
|
(let ((a3-8 #f)
|
|
(t0-3 #f)
|
|
(t1-3 1.0)
|
|
)
|
|
(sv-208 sv-224 s0-3 sv-256 (the-as sparticle-launch-state a3-8) (the-as sparticle-launch-control t0-3) t1-3)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(if s1-0
|
|
(play-effect-sound this arg0 arg1 arg2 arg3 s1-0)
|
|
)
|
|
)
|
|
0
|
|
(none)
|
|
)
|
|
|
|
;; definition for method 12 of type effect-control
|
|
;; INFO: Used lq/sq
|
|
(defmethod play-effect-sound ((this effect-control) (arg0 symbol) (arg1 float) (arg2 int) (arg3 basic) (arg4 sound-name))
|
|
(local-vars (sv-112 res-tag) (sv-128 sound-name) (sv-144 basic) (sv-160 (function vector vector float)))
|
|
(set! sv-144 arg3)
|
|
(let ((s0-0 arg4)
|
|
(gp-0 (the-as object (new 'stack 'sound-spec)))
|
|
(s5-0 (if (< arg2 0)
|
|
(the-as vector #f)
|
|
(vector<-cspace! (new 'stack-no-clear 'vector) (-> this process node-list data arg2))
|
|
)
|
|
)
|
|
)
|
|
(set! (-> (the-as sound-spec gp-0) sound-name) s0-0)
|
|
(logior! (-> (the-as sound-spec gp-0) mask) (sound-mask volume))
|
|
(set! (-> (the-as sound-spec gp-0) pitch-mod) 0)
|
|
(set! (-> (the-as sound-spec gp-0) volume) 1024)
|
|
(set! sv-112 (new 'static 'res-tag))
|
|
(let* ((t9-2 (method-of-type res-lump get-property-data))
|
|
(a1-5 'effect-param)
|
|
(a2-1 'exact)
|
|
(a3-1 arg1)
|
|
(t0-1 #f)
|
|
(t1-1 (the-as (pointer res-tag) (& sv-112)))
|
|
(t2-0 *res-static-buf*)
|
|
(a1-6 (t9-2 (the-as res-lump sv-144) a1-5 a2-1 a3-1 (the-as pointer t0-1) t1-1 t2-0))
|
|
)
|
|
(when a1-6
|
|
(effect-param->sound-spec
|
|
(the-as sound-spec gp-0)
|
|
(the-as (pointer float) a1-6)
|
|
(the-as int (-> sv-112 elt-count))
|
|
(the-as process-focusable (-> this process))
|
|
)
|
|
(if (logtest? (-> (the-as sound-spec gp-0) mask) (sound-mask unk))
|
|
(return 0)
|
|
)
|
|
)
|
|
)
|
|
(let ((f0-0 (-> *setting-control* user-current under-water-pitch-mod)))
|
|
(when (!= f0-0 0.0)
|
|
(logior! (-> (the-as sound-spec gp-0) mask) (sound-mask pitch))
|
|
(let ((f0-1 (* 2.0 f0-0)))
|
|
(set! (-> (the-as sound-spec gp-0) pitch-mod)
|
|
(- (-> (the-as sound-spec gp-0) pitch-mod) (the int (* 1524.0 f0-1)))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(if (or (and (nonzero? (-> (the-as sound-spec gp-0) fo-max))
|
|
(let ((f30-0 (* 4096.0 (the float (-> (the-as sound-spec gp-0) fo-max)))))
|
|
(set! sv-160 vector-vector-distance)
|
|
(let ((a0-8 (ear-trans 0))
|
|
(a1-7 s5-0)
|
|
)
|
|
(< f30-0 (sv-160 a0-8 a1-7))
|
|
)
|
|
)
|
|
)
|
|
(= (-> (the-as (pointer int8) gp-0) 9) 126)
|
|
)
|
|
(return 0)
|
|
)
|
|
(when *debug-effect-control*
|
|
(set! sv-128 s0-0)
|
|
(string<-charp (clear *temp-string*) (the-as (pointer uint8) (& sv-128)))
|
|
(format
|
|
#t
|
|
"(~5D) effect sound ~A ~S (~S) frame ~F joint ~D "
|
|
(current-time)
|
|
(-> this process name)
|
|
arg0
|
|
*temp-string*
|
|
arg1
|
|
arg2
|
|
)
|
|
(format
|
|
#t
|
|
"volume: ~f pitch-mod: ~f~%"
|
|
(* 0.09765625 (the float (-> (the-as sound-spec gp-0) volume)))
|
|
(* 0.000656168 (the float (-> (the-as sound-spec gp-0) pitch-mod)))
|
|
)
|
|
)
|
|
(sound-play-by-spec (the-as sound-spec gp-0) (new-sound-id) s5-0)
|
|
)
|
|
0
|
|
)
|
|
|
|
;; definition for function target-land-effect
|
|
;; WARN: Return type mismatch int vs none.
|
|
(defbehavior target-land-effect target ()
|
|
(cond
|
|
((focus-test? self flut)
|
|
(do-effect (-> self skel effect) (the-as symbol "effect-land-poof") -1.0 -1)
|
|
(do-effect (-> self skel effect) (the-as symbol "effect-flut-land") -1.0 -1)
|
|
)
|
|
((focus-test? self pilot)
|
|
(sound-play-by-name
|
|
(sound-name-with-material "zoom-land" (-> self control ground-pat) "")
|
|
(new-sound-id)
|
|
(the int (* 1024.0 (* 0.000016276043 (-> self control ground-impact-vel))))
|
|
0
|
|
0
|
|
(sound-group)
|
|
#t
|
|
)
|
|
)
|
|
((logtest? (water-flag touch-water) (-> self water flags))
|
|
(do-effect (-> self skel effect) (the-as symbol "effect-land-water") -1.0 -1)
|
|
)
|
|
(else
|
|
(do-effect (-> self skel effect) (the-as symbol "effect-land-poof") -1.0 -1)
|
|
(do-effect (-> self skel effect) (the-as symbol "effect-land") -1.0 -1)
|
|
)
|
|
)
|
|
0
|
|
(none)
|
|
)
|