Cleanup sparticle, add ref tests, name a few methods (#863)

* temp

* add reference tests
This commit is contained in:
water111
2021-09-28 21:17:38 -04:00
committed by GitHub
parent e31609d74f
commit 7ebbe812b1
15 changed files with 2598 additions and 137 deletions
+7 -9
View File
@@ -4604,8 +4604,8 @@
(:methods
(new (symbol type int basic) _type_ 0)
;; these methods dont exist
(dummy-9 (_type_ string symbol kheap int) art-group 9)
(dummy-10 (_type_ art-group) art-group 10)
(load-to-heap-by-name (_type_ string symbol kheap int) art-group 9)
(set-loaded-art (_type_ art-group) art-group 10)
)
)
@@ -4616,8 +4616,6 @@
:flag-assert #xb00000010
(:methods
(new (symbol type int basic) _type_ 0)
(dummy-9 (_type_ string symbol kheap int) art-group 9)
(dummy-10 (_type_ art-group) art-group 10)
)
)
@@ -9065,11 +9063,11 @@
(want-display-level (_type_ symbol symbol) int 12)
(want-vis (_type_ symbol) int 13)
(want-force-vis (_type_ symbol symbol) int 14)
(dummy-15 (_type_ pair) none 15)
(dummy-16 (_type_ float) int 16)
(dummy-17 (_type_ pair) int 17)
(dummy-18 (_type_) int 18)
(dummy-19 (_type_) int 19)
(execute-command (_type_ pair) none 15)
(execute-commands-up-to (_type_ float) int 16)
(backup-load-state-and-set-cmds (_type_ pair) int 17)
(restore-load-state-and-cleanup (_type_) int 18)
(restore-load-state (_type_) int 19)
(dummy-20 () none 20)
)
)
@@ -215,6 +215,10 @@
"memcpy",
"sp-process-block-3d",
"sp-process-block-2d",
"sp-launch-particles-var",
"particle-adgif",
"sp-init-fields!",
// mood BUG
"update-mood-lava", // BUG:
@@ -3531,5 +3531,9 @@
}
},
"(method 9 load-dir-art-group)":{
"args":["obj", "art-name", "do-reload", "heap", "version"]
},
"aaaaaaaaaaaaaaaaaaaaaaa": {}
}
+5 -5
View File
@@ -64,11 +64,11 @@
(want-display-level (_type_ symbol symbol) int 12)
(want-vis (_type_ symbol) int 13)
(want-force-vis (_type_ symbol symbol) int 14)
(dummy-15 (_type_ pair) none 15)
(dummy-16 (_type_ float) int 16)
(dummy-17 (_type_ pair) int 17)
(dummy-18 (_type_) int 18)
(dummy-19 (_type_) int 19)
(execute-command (_type_ pair) none 15)
(execute-commands-up-to (_type_ float) int 16)
(backup-load-state-and-set-cmds (_type_ pair) int 17)
(restore-load-state-and-cleanup (_type_) int 18)
(restore-load-state (_type_) int 19)
(dummy-20 () none 20)
)
)
+3 -4
View File
@@ -15,6 +15,7 @@
(defconstant SPOOL_PRIORITY_HIGH -10.0)
;; A load-dir is a collection of references to loaded art.
;; This type didn't have an inspect method, so these field names are made up.
(declare-type art-group basic)
(deftype load-dir (basic)
@@ -25,8 +26,8 @@
:flag-assert #xb00000010
(:methods
(new (symbol type int basic) _type_ 0)
(dummy-9 (_type_ string symbol kheap int) art-group 9)
(dummy-10 (_type_ art-group) art-group 10)
(load-to-heap-by-name (_type_ string symbol kheap int) art-group 9)
(set-loaded-art (_type_ art-group) art-group 10)
)
)
@@ -37,8 +38,6 @@
:flag-assert #xb00000010
(:methods
(new (symbol type int basic) _type_ 0)
(dummy-9 (_type_ string symbol kheap int) art-group 9)
(dummy-10 (_type_ art-group) art-group 10)
)
)
+45 -28
View File
@@ -57,36 +57,42 @@
(the-as load-dir #f)
)
(defmethod dummy-9 load-dir-art-group ((obj load-dir-art-group) (arg0 string) (arg1 symbol) (arg2 kheap) (arg3 int))
"This is not understood."
(defmethod load-to-heap-by-name load-dir-art-group ((obj load-dir-art-group) (art-name string) (do-reload symbol) (heap kheap) (version int))
"Load the art with the given name to the heap and return the art.
Won't load a thing if it's already loaded, unless you set do-reload.
This is intended for debug only."
;; see if we already have it.
(let ((s5-0 (-> obj string-array)))
(dotimes (s3-0 (-> s5-0 length))
(when (string= arg0 (-> s5-0 s3-0))
(when arg1
(let ((v1-4 (art-group-load-check arg0 arg2 arg3)))
(if v1-4
(set! (-> obj art-group-array s3-0) v1-4)
(dotimes (s3-0 (-> s5-0 length))
(when (string= art-name (-> s5-0 s3-0))
(when do-reload
;; we have it, reload it if requested
(let ((v1-4 (art-group-load-check art-name heap version)))
(if v1-4
(set! (-> obj art-group-array s3-0) v1-4)
)
)
)
(return (-> obj art-group-array s3-0))
)
)
)
(return (-> obj art-group-array s3-0))
)
;; nope, we don't have it,add it to the list.
(let ((v0-2 (art-group-load-check art-name heap version)))
(when v0-2
(set! (-> s5-0 (-> s5-0 length)) art-name)
(set! (-> obj art-group-array (-> s5-0 length)) v0-2)
(+! (-> s5-0 length) 1)
(+! (-> obj art-group-array length) 1)
)
v0-2
)
)
(let ((v0-2 (art-group-load-check arg0 arg2 arg3)))
(when v0-2
(set! (-> s5-0 (-> s5-0 length)) arg0)
(set! (-> obj art-group-array (-> s5-0 length)) v0-2)
(1+! (-> s5-0 length))
(1+! (-> obj art-group-array length))
)
v0-2
)
)
)
(defmethod dummy-10 load-dir-art-group ((obj load-dir-art-group) (arg0 art-group))
"This is not understood."
(defmethod set-loaded-art load-dir-art-group ((obj load-dir-art-group) (arg0 art-group))
"Add some already loaded art to the load-dir."
(let ((s4-0 (-> obj string-array)))
(dotimes (s3-0 (-> s4-0 length))
@@ -160,6 +166,7 @@
(the-as art-group #f)
)
((not (file-info-correct-version? (-> s3-1 info) (file-kind art-group) arg2))
;; ^ prints a detailed error if it fails.
;;(format 0 "ERROR: art-group ~A is not the correct version.~%" arg0)
(the-as art-group #f)
)
@@ -541,7 +548,7 @@
)
(defmethod update external-art-control ((obj external-art-control) (debug-print symbol))
"Update this external-art-control. This validates the spool buffers, sorts the spools, and does some other things.
"Update this external-art-control. This validates the spool buffers, sorts the spools, advances str-play-queue, and does some other things.
If debug-print, also prints some text to the display console"
(if (nonzero? (-> obj reserve-buffer-count))
@@ -842,13 +849,15 @@
(sv-56 0)
(spool-sound (new-sound-id))
)
(dummy-17 *load-state* (-> arg0 command-list))
(backup-load-state-and-set-cmds *load-state* (-> arg0 command-list))
(set-setting! *setting-control* self 'spooling (the-as symbol (process->ppointer self)) 0.0 0)
(logior! (-> self skel status) #x7)
(kill-current-level-hint '() '() 'die)
(level-hint-surpress!)
(copy-settings-from-target! *setting-control*)
;; the spool lock is active (or we're not in game mode for some reason?)
;; we can't nest or do multiple spooled joint animations.
(when (or (handle->process (-> *art-control* spool-lock))
(!= *master-mode* 'game)
)
@@ -889,9 +898,14 @@
)
)
)
;; grab the lock
(set! (-> *art-control* spool-lock) (process->handle self))
(set! sv-48 (the-as int (-> *display* base-frame-counter)))
;; iterate through parts (this loop suspends, so it lasts the whole animation)
(while (< spool-part (-> arg0 parts))
;; run the loader
(spool-push *art-control* (-> arg0 name) spool-part self -20.0)
(update *art-control* #f)
(spool-push *art-control* (-> arg0 name) spool-part self -20.0)
@@ -961,7 +975,10 @@
(logclear! (-> self skel status) #x4)
)
)
(dummy-16 *load-state* (ja-aframe-num 0))
;; execute sequence commands for loading/spawning/etc.
(execute-commands-up-to *load-state* (ja-aframe-num 0))
(cond
((and (< sv-32 sv-72) (= (current-str-id) spool-sound))
(+! sv-56 (the-as int (- (-> *display* base-frame-counter) (-> *display* old-base-frame-counter))))
@@ -1021,7 +1038,7 @@
(defbehavior ja-abort-spooled-anim process-drawable ((arg0 spool-anim) (arg1 art-joint-anim) (arg2 int))
"Abort a spooled animation."
(dummy-18 *load-state*)
(restore-load-state-and-cleanup *load-state*)
(str-play-stop (-> arg0 name))
(set! (-> *art-control* active-stream) #f)
(logclear! (-> self skel status) #x6) ;; #x4 and #x2
+15 -71
View File
@@ -419,55 +419,6 @@
;; TODO memcpy (unused)
; (defun sp-process-block ((arg0 sparticle-system) (arg1 int) (arg2 sprite-array-2d) (arg3 int))
; "update the given block of particles"
; (local-vars
; (sv-16 int)
; (sv-32 int)
; (sv-80 int)
; (sv-96 int)
; )
; (let ((s3-0 16)
; (s2-0 (* 144 arg3))
; (s5-0 (* 48 arg3))
; )
; (set! sv-32 (* 80 arg3))
; (let ((s1-0 (+ s3-0 s2-0)))
; (set! sv-16 (+ s1-0 s5-0))
; (sp-copy-to-spr s3-0 (the-as pointer (-> arg0 cpuinfo-table arg1)) s2-0)
; (sp-copy-to-spr s1-0 (&+ (-> arg0 vecdata-table) (* 48 arg1)) s5-0)
; (let ((t9-2 sp-copy-to-spr)
; (a1-7 (-> arg0 adgifdata-table arg1))
; )
; (t9-2 sv-16 (the-as pointer a1-7) sv-32)
; )
; (set! sv-80 (+ (the int (scratchpad-start)) s3-0)) ;; spad
; (set! sv-96 (+ (the int (scratchpad-start)) s1-0)) ;; spad
; (cond
; ((-> arg0 is-3d)
; (sp-process-block-3d arg0 sv-80 sv-96 arg1 arg3 (paused?))
; )
; (else
; (sp-process-block-2d arg0 sv-80 sv-96 arg1 arg3 (paused?))
; )
; )
; (sp-copy-from-spr s3-0 (the-as pointer (-> arg0 cpuinfo-table arg1)) s2-0)
; (sp-copy-from-spr s1-0 (&+ (-> arg0 vecdata-table) (* 48 arg1)) s5-0)
; )
; )
; ; (dotimes (i arg3)
; ; (let ((cpuinfo (-> arg0 cpuinfo-table (+ i arg1))))
; ; (when (and cpuinfo (-> cpuinfo valid))
; ; (inspect cpuinfo)
; ; (inspect (-> cpuinfo sprite r-g-b-a))
; ; )
; ; )
; ; )
; 0
; (none)
; )
(defun sp-process-block ((arg0 sparticle-system) (arg1 int) (arg2 sprite-array-2d) (arg3 int))
"update the given block of particles"
(local-vars
@@ -483,17 +434,19 @@
(set! sv-32 (* 80 arg3))
(let ((s1-0 (+ s3-0 s2-0)))
(set! sv-16 (+ s1-0 s5-0))
; (sp-copy-to-spr s3-0 (the-as pointer (-> arg0 cpuinfo-table arg1)) s2-0)
; (sp-copy-to-spr s1-0 (&+ (-> arg0 vecdata-table) (* 48 arg1)) s5-0)
; (let ((t9-2 sp-copy-to-spr)
; (a1-7 (-> arg0 adgifdata-table arg1))
; )
; (t9-2 sv-16 (the-as pointer a1-7) sv-32)
; )
(set! sv-80 (the-as int (-> arg0 cpuinfo-table arg1)))
(set! sv-96 (the-as int (&+ (-> arg0 vecdata-table) (* 48 arg1))))
; (set! sv-80 (+ (the int (scratchpad-start)) s3-0)) ;; spad
; (set! sv-96 (+ (the int (scratchpad-start)) s1-0)) ;; spad
(sp-copy-to-spr s3-0 (the-as pointer (-> arg0 cpuinfo-table arg1)) s2-0)
(sp-copy-to-spr s1-0 (&+ (-> arg0 vecdata-table) (* 48 arg1)) s5-0)
(let ((t9-2 sp-copy-to-spr)
(a1-7 (-> arg0 adgifdata-table arg1))
)
(t9-2 sv-16 (the-as pointer a1-7) sv-32)
)
;; alternate to run without doing scratchpad (will change behavior of kill, but at least works for hud)
; (set! sv-80 (the-as int (-> arg0 cpuinfo-table arg1)))
; (set! sv-96 (the-as int (&+ (-> arg0 vecdata-table) (* 48 arg1))))
(set! sv-80 (+ (the int (scratchpad-start)) s3-0)) ;; spad
(set! sv-96 (+ (the int (scratchpad-start)) s1-0)) ;; spad
(cond
((-> arg0 is-3d)
(sp-process-block-3d arg0 sv-80 sv-96 arg1 arg3 (paused?))
@@ -502,19 +455,10 @@
(sp-process-block-2d arg0 sv-80 sv-96 arg1 arg3 (paused?))
)
)
; (sp-copy-from-spr s3-0 (the-as pointer (-> arg0 cpuinfo-table arg1)) s2-0)
; (sp-copy-from-spr s1-0 (&+ (-> arg0 vecdata-table) (* 48 arg1)) s5-0)
(sp-copy-from-spr s3-0 (the-as pointer (-> arg0 cpuinfo-table arg1)) s2-0)
(sp-copy-from-spr s1-0 (&+ (-> arg0 vecdata-table) (* 48 arg1)) s5-0)
)
)
; (dotimes (i arg3)
; (let ((cpuinfo (-> arg0 cpuinfo-table (+ i arg1))))
; (when (and cpuinfo (-> cpuinfo valid))
; (inspect cpuinfo)
; (inspect (-> cpuinfo sprite r-g-b-a))
; )
; )
; )
0
(none)
)
+18
View File
@@ -511,6 +511,24 @@
`(set! ,result (sext32 (sar (logand #xffffffff (the-as int ,in)) ,sa)))
)
(defmacro .movn (result value check original)
`(if (!= ,check 0)
(set! ,result (the-as int ,value))
(set! ,result (the-as int ,original))
)
)
(defmacro .movz (result value check original)
`(if (= ,check 0)
(set! ,result (the-as int ,value))
(set! ,result (the-as int ,original))
)
)
(defmacro .mfc0 (&rest stuff)
`(empty)
)
(defmacro res-lump-data (lump name type &key (tag-ptr (the-as (pointer res-tag) #f)) &key (time -1000000000.0))
"Helper macro to get data from a res-lump without interpolation."
`(the-as ,type ((method-of-type res-lump get-property-data)
+5 -5
View File
@@ -89,11 +89,11 @@
(want-display-level (_type_ symbol symbol) int 12)
(want-vis (_type_ symbol) int 13)
(want-force-vis (_type_ symbol symbol) int 14)
(dummy-15 (_type_ pair) none 15)
(dummy-16 (_type_ float) int 16)
(dummy-17 (_type_ pair) int 17)
(dummy-18 (_type_) int 18)
(dummy-19 (_type_) int 19)
(execute-command (_type_ pair) none 15)
(execute-commands-up-to (_type_ float) int 16)
(backup-load-state-and-set-cmds (_type_ pair) int 17)
(restore-load-state-and-cleanup (_type_) int 18)
(restore-load-state (_type_) int 19)
(dummy-20 () none 20)
)
)
@@ -53,6 +53,7 @@
)
;; definition for method 3 of type sparticle-launcher
;; INFO: this function exists in multiple non-identical object files
(defmethod inspect sparticle-launcher ((obj sparticle-launcher))
(format #t "[~8x] ~A~%" obj (-> obj type))
(format #t "~Tbirthaccum: ~f~%" (-> obj birthaccum))
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,869 @@
;;-*-Lisp-*-
(in-package goal)
;; definition for method 2 of type sparticle-cpuinfo
;; INFO: Return type mismatch object vs sparticle-cpuinfo.
(defmethod print sparticle-cpuinfo ((obj sparticle-cpuinfo))
(format #t "<sparticle-cpuinfo>~%")
(dotimes (s5-0 16)
(format #t "~D:~F~%" s5-0 (the-as float (-> obj data s5-0)))
)
(format #t "TIMER:~D~%" (-> obj timer))
(the-as sparticle-cpuinfo (format #t "FLAGS:~X~%" (-> obj flags)))
)
;; definition for function sp-particle-copy!
;; INFO: Return type mismatch basic vs none.
;; Used lq/sq
(defun sp-particle-copy! ((arg0 sparticle-cpuinfo) (arg1 sparticle-cpuinfo))
(let ((v1-1 (-> arg1 sprite x-y-z-sx quad)))
(set! (-> arg0 sprite x-y-z-sx quad) v1-1)
)
(let ((v1-3 (-> arg1 sprite flag-rot-sy quad)))
(set! (-> arg0 sprite flag-rot-sy quad) v1-3)
)
(let ((v1-5 (-> arg1 sprite color quad)))
(set! (-> arg0 sprite color quad) v1-5)
)
(dotimes (v1-6 10)
(set! (-> arg0 adgif prims v1-6) (-> arg1 adgif prims v1-6))
)
(set! (-> arg0 vel-sxvel quad) (-> arg1 vel-sxvel quad))
(set! (-> arg0 rot-syvel quad) (-> arg1 rot-syvel quad))
(set! (-> arg0 fade quad) (-> arg1 fade quad))
(set! (-> arg0 acc quad) (-> arg1 acc quad))
(set! (-> arg0 friction) (-> arg1 friction))
(set! (-> arg0 timer) (-> arg1 timer))
(set! (-> arg0 flags) (-> arg1 flags))
(set! (-> arg0 user-float) (-> arg1 user-float))
(set! (-> arg0 func) (-> arg1 func))
(none)
)
;; definition for method 0 of type sparticle-system
(defmethod
new
sparticle-system
((allocation symbol)
(type-to-make type)
(arg0 int)
(arg1 int)
(arg2 symbol)
(arg3 pointer)
(arg4 (inline-array adgif-shader))
)
(let
((gp-0
(object-new allocation type-to-make (the-as int (-> type-to-make size)))
)
)
(let* ((v1-3 (/ (+ arg0 63) 64))
(a0-2 (/ (+ arg1 63) 64))
(a1-2 (* v1-3 64))
(a2-2 (* a0-2 64))
(s2-1 (+ v1-3 a0-2))
(s5-1 (+ a1-2 a2-2))
)
(set! (-> gp-0 blocks 0) v1-3)
(set! (-> gp-0 length 0) a1-2)
(set! (-> gp-0 num-alloc 0) 0)
(set! (-> gp-0 blocks 1) a0-2)
(set! (-> gp-0 length 1) a2-2)
(set! (-> gp-0 num-alloc 1) 0)
(set! (-> gp-0 is-3d) arg2)
(set!
(-> gp-0 alloc-table)
(the-as (pointer uint64) (malloc 'global (* s2-1 8)))
)
(set!
(-> gp-0 cpuinfo-table)
(the-as (inline-array sparticle-cpuinfo) (malloc 'global (* 144 s5-1)))
)
(set! (-> gp-0 vecdata-table) arg3)
(set! (-> gp-0 adgifdata-table) arg4)
(dotimes (v1-5 s2-1)
(set! (-> gp-0 alloc-table v1-5) (the-as uint -1))
)
(dotimes (s4-1 s5-1)
(set! (-> gp-0 cpuinfo-table s4-1 valid) #f)
(set!
(-> gp-0 cpuinfo-table s4-1 sprite)
(the-as sprite-vec-data-2d (&+ (-> gp-0 vecdata-table) (* 48 s4-1)))
)
(set! (-> gp-0 cpuinfo-table s4-1 adgif) (-> gp-0 adgifdata-table s4-1))
(adgif-shader<-texture-simple!
(-> gp-0 adgifdata-table s4-1)
(the-as texture #f)
)
(set!
(-> gp-0 adgifdata-table s4-1 alpha)
(new 'static 'gs-miptbp :tbp1 #x48)
)
)
)
gp-0
)
)
;; definition for symbol *sp-particle-system-2d*, type sparticle-system
(define
*sp-particle-system-2d*
(new
'global
'sparticle-system
1920
128
#f
(-> *sprite-array-2d* vec-data)
(-> *sprite-array-2d* adgif-data)
)
)
;; definition for symbol *sp-particle-system-3d*, type sparticle-system
(define
*sp-particle-system-3d*
(new
'global
'sparticle-system
256
0
#t
(-> *sprite-array-3d* vec-data)
(-> *sprite-array-3d* adgif-data)
)
)
;; definition for function sp-get-block-size
(defun sp-get-block-size ((arg0 sparticle-system) (arg1 int))
(let ((v0-0 0))
(let ((v1-0 0)
(a2-0 (-> arg0 blocks 0))
)
(when (= arg1 1)
(set! v1-0 a2-0)
(set! a2-0 (-> arg0 blocks 1))
)
(dotimes (a1-3 a2-0)
(if (!= (-> arg0 alloc-table (+ v1-0 a1-3)) -1)
(set! v0-0 (+ a1-3 1))
)
)
)
v0-0
)
)
;; definition for function sp-get-approx-alloc-size
(defun sp-get-approx-alloc-size ((arg0 sparticle-system) (arg1 int))
(let ((a3-0 arg1)
(v1-0 0)
)
(let ((a1-1 0)
(a2-0 (-> arg0 blocks 0))
)
(when (= a3-0 1)
(set! a1-1 a2-0)
(set! a2-0 (-> arg0 blocks 1))
)
(dotimes (a3-3 a2-0)
(if (!= (-> arg0 alloc-table (+ a1-1 a3-3)) -1)
(set! v1-0 (+ a3-3 1))
)
)
)
(* v1-0 64)
)
)
;; definition for function sp-free-particle
;; INFO: Return type mismatch int vs none.
(defun
sp-free-particle
((arg0 sparticle-system)
(arg1 int)
(arg2 sparticle-cpuinfo)
(arg3 sprite-vec-data-2d)
)
(if (and (-> arg2 binding) (nonzero? (-> arg2 binding)))
(logclear!
(-> arg2 binding flags)
(sp-launch-state-flags launcher-active particles-active)
)
)
(let ((v1-6 (/ arg1 64))
(t0-4 (logand arg1 63))
)
(logior! (-> arg0 alloc-table v1-6) (ash 1 t0-4))
)
(if (< arg1 (-> arg0 length 0))
(+! (-> arg0 num-alloc 0) -1)
(+! (-> arg0 num-alloc 1) -1)
)
(set! (-> arg2 valid) #f)
(set! (-> arg3 a) 0.0)
0
(none)
)
;; definition for function sp-get-particle
;; WARN: Unsupported inline assembly instruction kind - [movn t1, t2, t2]
;; WARN: Unsupported inline assembly instruction kind - [movz a2, t3, t2]
;; WARN: Unsupported inline assembly instruction kind - [movn t1, t2, t2]
;; WARN: Unsupported inline assembly instruction kind - [movz a2, t3, t2]
;; WARN: Unsupported inline assembly instruction kind - [movn t1, t2, t2]
;; WARN: Unsupported inline assembly instruction kind - [movz a2, t3, t2]
;; WARN: Unsupported inline assembly instruction kind - [movn t1, t2, t2]
;; WARN: Unsupported inline assembly instruction kind - [movz a2, t3, t2]
;; WARN: Unsupported inline assembly instruction kind - [movn t1, t2, t2]
;; WARN: Unsupported inline assembly instruction kind - [movz a2, t3, t2]
;; WARN: Unsupported inline assembly instruction kind - [movn t3, t1, t1]
;; WARN: Unsupported inline assembly instruction kind - [movz a2, t2, t1]
(defun
sp-get-particle
((arg0 sparticle-system) (arg1 int) (arg2 sparticle-launch-state))
(local-vars
(a2-3 int)
(a2-4 int)
(a2-5 int)
(a2-6 int)
(a2-7 int)
(a2-8 int)
(t1-16 int)
(t1-17 int)
(t1-18 int)
(t1-19 int)
(t1-20 int)
(t3-5 int)
)
(let ((v1-0 0)
(t0-0 (-> arg0 blocks 0))
(a3-0 0)
)
(when (= arg1 1)
(set! v1-0 t0-0)
(set! t0-0 (-> arg0 blocks 1))
)
(when arg2
(set! a3-0 (the-as int (-> arg2 randomize)))
(+! (-> arg2 randomize) 1)
(when (= (-> arg2 randomize) t0-0)
(set! (-> arg2 randomize) (the-as uint 0))
0
)
)
(dotimes (a2-1 t0-0)
(when (nonzero? (-> arg0 alloc-table (+ v1-0 a3-0)))
(let ((a2-2 0)
(t1-15 (-> arg0 alloc-table (+ v1-0 a3-0)))
(t0-4 (* (+ v1-0 a3-0) 64))
)
0
0
(let ((t2-4 (shl t1-15 32))
(t3-0 (+ a2-2 32))
)
(.movn t1-16 t2-4 t2-4 t1-15)
(.movz a2-3 t3-0 t2-4 a2-2)
)
(let ((t2-5 (shl t1-16 16))
(t3-1 (+ a2-3 16))
)
(.movn t1-17 t2-5 t2-5 t1-16)
(.movz a2-4 t3-1 t2-5 a2-3)
)
(let ((t2-6 (* t1-17 256))
(t3-2 (+ a2-4 8))
)
(.movn t1-18 t2-6 t2-6 t1-17)
(.movz a2-5 t3-2 t2-6 a2-4)
)
(let ((t2-7 (* t1-18 16))
(t3-3 (+ a2-5 4))
)
(.movn t1-19 t2-7 t2-7 t1-18)
(.movz a2-6 t3-3 t2-7 a2-5)
)
(let ((t2-8 (* t1-19 4))
(t3-4 (+ a2-6 2))
)
(.movn t1-20 t2-8 t2-8 t1-19)
(.movz a2-7 t3-4 t2-8 a2-6)
(let ((t1-21 (* t1-20 2))
(t2-9 (+ a2-7 1))
)
(.movn t3-5 t1-21 t1-21 t3-4)
(.movz a2-8 t2-9 t1-21 a2-7)
)
)
(let ((t0-5 (+ t0-4 a2-8)))
(set!
(-> arg0 alloc-table (+ v1-0 a3-0))
(logxor (-> arg0 alloc-table (+ v1-0 a3-0)) (the-as uint (ash 1 a2-8)))
)
(+! (-> arg0 num-alloc arg1) 1)
(let ((v1-9 (-> arg0 cpuinfo-table t0-5)))
(set! (-> v1-9 valid) #t)
(return v1-9)
)
)
)
)
(+! a3-0 1)
(if (= a3-0 t0-0)
(set! a3-0 0)
)
)
)
(the-as sparticle-cpuinfo #f)
)
;; definition for function sp-kill-particle
;; INFO: Return type mismatch symbol vs none.
;; WARN: Expression building failed: Function sp-kill-particle has a return type of none, but the expression builder found a return statement.
(defun sp-kill-particle ((arg0 sparticle-system) (arg1 sparticle-cpuinfo))
(cond
((>= (the-as int arg1) #x70000000)
(set! (-> arg1 timer) 0)
0
)
(else
(let
((a2-1
(/
(the-as
int
(- (the-as uint arg1) (the-as uint (-> arg0 cpuinfo-table 0)))
)
144
)
)
)
(when (or (< a2-1 0) (>= a2-1 (+ (-> arg0 length 0) (-> arg0 length 1))))
(format 0 "Tried to release particle ~D~%" a2-1)
(return #f)
)
(sp-free-particle arg0 a2-1 arg1 (-> arg1 sprite))
)
)
)
#t
(none)
)
;; definition for function sp-orbiter
;; INFO: Return type mismatch int vs none.
(defun
sp-orbiter
((arg0 sparticle-system) (arg1 sparticle-cpuinfo) (arg2 vector))
(let* ((f2-0 (-> arg1 omega))
(f0-0 (-> arg1 radius))
(f4-0 (-> arg1 vel-sxvel x))
(f24-0 (-> arg1 vel-sxvel y))
(f1-0 (-> arg1 vel-sxvel z))
(f3-0 (-> *sp-frame-time* y))
(f28-0 (+ f2-0 (* f4-0 f3-0)))
)
(set! (-> arg1 omega) f28-0)
(let ((f30-0 (+ f0-0 (* f1-0 f3-0))))
(set! (-> arg1 radius) f30-0)
(let ((f26-0 (sin f28-0))
(f28-1 (cos f28-0))
(f22-0 (sin (* 0.5 f24-0)))
(f0-5 (cos (* 0.5 f24-0)))
(a1-1 (new 'stack-no-clear 'vector))
(s4-0 (new 'stack-no-clear 'vector))
)
(let ((s3-0 (new 'stack-no-clear 'matrix)))
(set-vector! a1-1 (* f22-0 f28-1) 0.0 (* f22-0 f26-0) f0-5)
(quaternion*!
(-> arg1 rotvel3d)
(the-as quaternion a1-1)
(-> arg1 rotvel3d)
)
(quaternion-normalize! (-> arg1 rotvel3d))
(set-vector! s4-0 (* f26-0 f30-0) 0.0 (* f28-1 f30-0) 1.0)
(quaternion->matrix s3-0 (-> arg1 rotvel3d))
(vector-matrix*! s4-0 s4-0 s3-0)
)
(let ((v1-3 (the-as object (-> arg1 user-float))))
(set! (-> arg2 x) (+ (-> s4-0 x) (-> (the-as sprite-vec-data-2d v1-3) x)))
(set! (-> arg2 y) (+ (-> s4-0 y) (-> (the-as sprite-vec-data-2d v1-3) y)))
(set! (-> arg2 z) (+ (-> s4-0 z) (-> (the-as sprite-vec-data-2d v1-3) z)))
)
)
)
)
0
(none)
)
;; definition for function sp-process-block-2d
;; ERROR: function was not converted to expressions. Cannot decompile.
;; definition for function sp-process-block-3d
;; ERROR: function was not converted to expressions. Cannot decompile.
;; definition for function sp-copy-to-spr
;; INFO: Return type mismatch int vs none.
(defun sp-copy-to-spr ((arg0 int) (arg1 pointer) (arg2 int))
(let ((a2-1 (/ (+ arg2 15) 16)))
(dma-send-to-spr-no-flush
(the-as uint arg0)
(the-as uint arg1)
(the-as uint a2-1)
#t
)
)
0
(none)
)
;; definition for function sp-copy-from-spr
;; INFO: Return type mismatch int vs none.
(defun sp-copy-from-spr ((arg0 int) (arg1 pointer) (arg2 int))
(let ((a2-1 (/ (+ arg2 15) 16)))
(dma-send-from-spr-no-flush
(the-as uint arg1)
(the-as uint arg0)
(the-as uint a2-1)
#t
)
)
0
(none)
)
;; definition for function memcpy
;; ERROR: function was not converted to expressions. Cannot decompile.
;; definition for function sp-process-block
;; INFO: Return type mismatch int vs none.
;; Used lq/sq
(defun
sp-process-block
((arg0 sparticle-system) (arg1 int) (arg2 sprite-array-2d) (arg3 int))
(local-vars
(sv-16 int)
(sv-32 int)
(sv-48 (function sparticle-system int int int int symbol none))
(sv-64 sparticle-system)
(sv-80 int)
(sv-96 int)
(sv-112 int)
(sv-128 (function sparticle-system int int int int symbol none))
(sv-144 sparticle-system)
(sv-160 int)
(sv-176 int)
(sv-192 int)
)
(let ((s3-0 16)
(s2-0 (* 144 arg3))
(s5-0 (* 48 arg3))
)
(set! sv-32 (* 80 arg3))
(let ((s1-0 (+ s3-0 s2-0)))
(set! sv-16 (+ s1-0 s5-0))
(sp-copy-to-spr s3-0 (the-as pointer (-> arg0 cpuinfo-table arg1)) s2-0)
(sp-copy-to-spr s1-0 (&+ (-> arg0 vecdata-table) (* 48 arg1)) s5-0)
(let ((t9-2 sp-copy-to-spr)
(a1-7 (-> arg0 adgifdata-table arg1))
)
(t9-2 sv-16 (the-as pointer a1-7) sv-32)
)
(set! sv-80 (+ #x70000000 s3-0))
(set! sv-96 (+ #x70000000 s1-0))
(cond
((-> arg0 is-3d)
(set! sv-48 sp-process-block-3d)
(set! sv-64 arg0)
(set! sv-112 arg1)
(let ((t1-0 (paused?)))
(sv-48 sv-64 sv-80 sv-96 sv-112 arg3 t1-0)
)
)
(else
(set! sv-128 sp-process-block-2d)
(set! sv-144 arg0)
(set! sv-160 sv-80)
(set! sv-176 sv-96)
(set! sv-192 arg1)
(let ((t1-1 (paused?)))
(sv-128 sv-144 sv-160 sv-176 sv-192 arg3 t1-1)
)
)
)
(sp-copy-from-spr s3-0 (the-as pointer (-> arg0 cpuinfo-table arg1)) s2-0)
(sp-copy-from-spr s1-0 (&+ (-> arg0 vecdata-table) (* 48 arg1)) s5-0)
)
)
0
(none)
)
;; definition for function sp-process-particle-system
;; INFO: Return type mismatch int vs none.
(defun
sp-process-particle-system
((arg0 sparticle-system) (arg1 int) (arg2 sprite-array-2d))
(let* ((v1-0 16)
(s1-0 (/ (- #x4000 v1-0) 272))
(s3-0 0)
(s4-0 (sp-get-approx-alloc-size arg0 arg1))
)
(if (= arg1 1)
(set! s3-0 (* (-> arg0 blocks 0) 64))
)
(set! (-> arg2 num-valid arg1) s4-0)
(flush-cache 0)
(while (>= s4-0 s1-0)
(sp-process-block arg0 s3-0 arg2 s1-0)
(set! s4-0 (- s4-0 s1-0))
(+! s3-0 s1-0)
)
(if (> s4-0 0)
(sp-process-block arg0 s3-0 arg2 s4-0)
)
)
0
(none)
)
;; definition (perm) for symbol *particles-flag*, type symbol
(define-perm *particles-flag* symbol #t)
;; definition for function forall-particles-with-key-runner
;; INFO: Return type mismatch int vs none.
;; Used lq/sq
(defun
forall-particles-with-key-runner
((arg0 sparticle-launch-control)
(arg1 (function sparticle-system sparticle-cpuinfo none))
(arg2 sparticle-system)
)
(local-vars (sv-16 int))
(let ((s3-0 (the-as object (-> arg2 cpuinfo-table 0)))
(s2-0 (&+ (-> arg2 vecdata-table) 0))
(s1-0 (+ (-> arg2 blocks 0) (-> arg2 blocks 1)))
)
(dotimes (s0-0 s1-0)
(cond
((!= (-> arg2 alloc-table s0-0) -1)
(set! sv-16 0)
(while (< sv-16 64)
(if
(and
(-> (the-as sparticle-cpuinfo s3-0) valid)
(= (-> (the-as sparticle-cpuinfo s3-0) key) arg0)
)
(arg1 arg2 (the-as sparticle-cpuinfo s3-0))
)
(set! s3-0 (-> (the-as (inline-array sparticle-cpuinfo) s3-0) 1))
(&+! s2-0 48)
(set! sv-16 (+ sv-16 1))
)
)
(else
(set! s3-0 (-> (the-as (inline-array sparticle-cpuinfo) s3-0) 64))
(&+! s2-0 3072)
)
)
)
)
0
(none)
)
;; definition for function forall-particles-with-key
;; INFO: Return type mismatch int vs none.
(defun
forall-particles-with-key
((arg0 sparticle-launch-control)
(arg1 (function sparticle-system sparticle-cpuinfo none))
(arg2 symbol)
(arg3 symbol)
)
(if arg2
(forall-particles-with-key-runner arg0 arg1 *sp-particle-system-2d*)
)
(if arg3
(forall-particles-with-key-runner arg0 arg1 *sp-particle-system-3d*)
)
0
(none)
)
;; definition for function sparticle-kill-it
;; INFO: Return type mismatch int vs none.
(defun sparticle-kill-it ((arg0 sparticle-system) (arg1 sparticle-cpuinfo))
(set! (-> arg1 timer) 0)
(set! (-> arg1 func) (the-as basic 0))
(when (and (-> arg1 binding) (nonzero? (-> arg1 binding)))
(logclear!
(-> arg1 binding flags)
(sp-launch-state-flags launcher-active particles-active)
)
(set! (-> arg1 binding) #f)
)
0
(none)
)
;; definition for function sparticle-kill-it-level0
;; INFO: Return type mismatch int vs none.
(defun
sparticle-kill-it-level0
((arg0 sparticle-system) (arg1 sparticle-cpuinfo))
(if (logtest? (-> arg1 flags) (sp-cpuinfo-flag level0))
(sparticle-kill-it arg0 arg1)
)
0
(none)
)
;; definition for function sparticle-kill-it-level1
;; INFO: Return type mismatch int vs none.
(defun
sparticle-kill-it-level1
((arg0 sparticle-system) (arg1 sparticle-cpuinfo))
(if (logtest? (-> arg1 flags) (sp-cpuinfo-flag level1))
(sparticle-kill-it arg0 arg1)
)
0
(none)
)
;; definition for function sparticle-60-to-50
;; INFO: Return type mismatch int vs none.
(defun
sparticle-60-to-50
((arg0 sparticle-system) (arg1 sparticle-cpuinfo) (arg2 pointer))
(let ((gp-0 (-> arg1 rotvel3d))
(s5-0 (new 'stack-no-clear 'quaternion))
)
(vector-angle<-quaternion! (the-as vector s5-0) gp-0)
(set! (-> s5-0 w) (* 12516.455 (-> s5-0 w)))
(quaternion-vector-angle! gp-0 (the-as vector s5-0) (-> s5-0 w))
)
0
(none)
)
;; definition for function sparticle-50-to-60
;; INFO: Return type mismatch int vs none.
(defun
sparticle-50-to-60
((arg0 sparticle-system) (arg1 sparticle-cpuinfo) (arg2 pointer))
(let ((gp-0 (-> arg1 rotvel3d))
(s5-0 (new 'stack-no-clear 'quaternion))
)
(vector-angle<-quaternion! (the-as vector s5-0) gp-0)
(set! (-> s5-0 w) (* 8691.982 (-> s5-0 w)))
(quaternion-vector-angle! gp-0 (the-as vector s5-0) (-> s5-0 w))
)
0
(none)
)
;; definition for function kill-all-particles-with-key
;; INFO: Return type mismatch int vs none.
(defun kill-all-particles-with-key ((arg0 sparticle-launch-control))
(forall-particles-with-key arg0 sparticle-kill-it #t #t)
0
(none)
)
;; definition for function forall-particles-runner
;; INFO: Return type mismatch int vs none.
(defun
forall-particles-runner
((arg0 (function sparticle-system sparticle-cpuinfo pointer none))
(arg1 sparticle-system)
)
(let ((s4-0 (the-as object (-> arg1 cpuinfo-table 0)))
(s3-0 (&+ (-> arg1 vecdata-table) 0))
(s2-0 (+ (-> arg1 blocks 0) (-> arg1 blocks 1)))
)
(dotimes (s1-0 s2-0)
(cond
((!= (-> arg1 alloc-table s1-0) -1)
(dotimes (s0-0 64)
(if (-> (the-as sparticle-cpuinfo s4-0) valid)
(arg0 arg1 (the-as sparticle-cpuinfo s4-0) s3-0)
)
(set! s4-0 (+ (the-as uint s4-0) 144))
(&+! s3-0 48)
)
)
(else
(set! s4-0 (&+ (the-as pointer s4-0) 9216))
(&+! s3-0 3072)
)
)
)
)
0
(none)
)
;; definition for function forall-particles
;; INFO: Return type mismatch int vs none.
(defun forall-particles ((arg0 function) (arg1 symbol) (arg2 symbol))
(if arg1
(forall-particles-runner
(the-as (function sparticle-system sparticle-cpuinfo pointer none) arg0)
*sp-particle-system-2d*
)
)
(if arg2
(forall-particles-runner
(the-as (function sparticle-system sparticle-cpuinfo pointer none) arg0)
*sp-particle-system-3d*
)
)
0
(none)
)
;; definition for function kill-all-particles-in-level
(defun kill-all-particles-in-level ((arg0 level))
(forall-particles (if (zero? (-> arg0 index))
sparticle-kill-it-level0
sparticle-kill-it-level1
)
#t
#t
)
0
)
;; definition for function all-particles-50-to-60
(defun all-particles-50-to-60 ()
(forall-particles-runner sparticle-50-to-60 *sp-particle-system-3d*)
(none)
)
;; definition for function all-particles-60-to-50
(defun all-particles-60-to-50 ()
(forall-particles-runner sparticle-60-to-50 *sp-particle-system-3d*)
(none)
)
;; definition for function set-particle-frame-time
;; INFO: Return type mismatch int vs none.
(defun set-particle-frame-time ((arg0 int))
(cond
((= arg0 5)
(set-vector!
*sp-frame-time*
0.00000000000000000000000000000000000001175495
5.0
1.0
1.0
)
)
((= arg0 6)
(set-vector!
*sp-frame-time*
0.000000000000000000000000000000000000011754952
6.0
1.2
1.2
)
)
((= arg0 10)
(set-vector!
*sp-frame-time*
0.000000000000000000000000000000000000011754958
10.0
2.0
2.0
)
)
((= arg0 12)
(set-vector!
*sp-frame-time*
0.00000000000000000000000000000000000001175496
12.0
2.4
2.4
)
)
)
0
(none)
)
;; definition for function process-particles
;; INFO: Return type mismatch int vs none.
;; WARN: Unsupported inline assembly instruction kind - [mfc0 gp, Count]
;; WARN: Unsupported inline assembly instruction kind - [mfc0 v1, Count]
(defun process-particles ()
(local-vars (v1-29 int) (gp-0 int))
(when *particles-flag*
0
0
(.mfc0 gp-0 Count)
(set! *sp-launcher-lock* #t)
(if *debug-segment*
(add-frame
(-> *display* frames (-> *display* on-screen) frame profile-bar 0)
'draw
(new 'static 'rgba :r #x40 :b #x40 :a #x80)
)
)
(let ((v1-14 (logand (the-as int (-> *sp-frame-time* x)) 255)))
(set! *particle-300hz-timer* (+ *particle-300hz-timer* v1-14))
(cond
(*sp-60-hz*
(when (or (= v1-14 6) (= v1-14 12))
(set! *sp-60-hz* #f)
(all-particles-60-to-50)
)
)
(else
(when (or (= v1-14 5) (= v1-14 10))
(set! *sp-60-hz* #t)
(all-particles-50-to-60)
)
)
)
)
(clear-sprite-aux-list)
(sp-process-particle-system *sp-particle-system-2d* 0 *sprite-array-2d*)
(sp-process-particle-system *sp-particle-system-2d* 1 *sprite-array-2d*)
(sp-process-particle-system
*sp-particle-system-3d*
0
(the-as sprite-array-2d *sprite-array-3d*)
)
(if *debug-segment*
(add-frame
(-> *display* frames (-> *display* on-screen) frame profile-bar 0)
'draw
(new 'static 'rgba :r #x80 :g #x80 :b #xff :a #x80)
)
)
(set! *sp-launcher-lock* #f)
(sp-clear-queue)
(.mfc0 v1-29 Count)
(let ((a2-5 (- v1-29 gp-0)))
(if *display-sprite-info*
(format
*stdcon*
"Particle time = ~D cycles for ~D 2D [~D warp] and ~D HUD and ~D 3D~%"
a2-5
(-> *sp-particle-system-2d* num-alloc 0)
(-> *sprite-aux-list* entry)
(-> *sp-particle-system-2d* num-alloc 1)
(-> *sp-particle-system-3d* num-alloc 0)
)
)
)
)
0
(none)
)
+2 -2
View File
@@ -12,8 +12,8 @@
:flag-assert #xb00000010
(:methods
(new (symbol type int basic) _type_ 0)
(dummy-9 (_type_ string symbol kheap int) art-group 9)
(dummy-10 (_type_ art-group) art-group 10)
(load-to-heap-by-name (_type_ string symbol kheap int) art-group 9)
(set-loaded-art (_type_ art-group) art-group 10)
)
)
+16 -11
View File
@@ -60,14 +60,19 @@
;; definition for method 9 of type load-dir-art-group
(defmethod
dummy-9
load-to-heap-by-name
load-dir-art-group
((obj load-dir-art-group) (arg0 string) (arg1 symbol) (arg2 kheap) (arg3 int))
((obj load-dir-art-group)
(art-name string)
(do-reload symbol)
(heap kheap)
(version int)
)
(let ((s5-0 (-> obj string-array)))
(dotimes (s3-0 (-> s5-0 length))
(when (string= arg0 (-> s5-0 s3-0))
(when arg1
(let ((v1-4 (art-group-load-check arg0 arg2 arg3)))
(when (string= art-name (-> s5-0 s3-0))
(when do-reload
(let ((v1-4 (art-group-load-check art-name heap version)))
(if v1-4
(set! (-> obj art-group-array s3-0) v1-4)
)
@@ -76,9 +81,9 @@
(return (-> obj art-group-array s3-0))
)
)
(let ((v0-2 (art-group-load-check arg0 arg2 arg3)))
(let ((v0-2 (art-group-load-check art-name heap version)))
(when v0-2
(set! (-> s5-0 (-> s5-0 length)) arg0)
(set! (-> s5-0 (-> s5-0 length)) art-name)
(set! (-> obj art-group-array (-> s5-0 length)) v0-2)
(+! (-> s5-0 length) 1)
(+! (-> obj art-group-array length) 1)
@@ -90,7 +95,7 @@
;; definition for method 10 of type load-dir-art-group
(defmethod
dummy-10
set-loaded-art
load-dir-art-group
((obj load-dir-art-group) (arg0 art-group))
(let ((s4-0 (-> obj string-array)))
@@ -1073,7 +1078,7 @@
(set! sv-48 0)
(set! sv-56 0)
(set! spool-sound (new-sound-id))
(dummy-17 *load-state* (-> arg0 command-list))
(backup-load-state-and-set-cmds *load-state* (-> arg0 command-list))
(set-setting!
*setting-control*
self
@@ -1236,7 +1241,7 @@
(spool-push *art-control* (-> arg0 name) (+ spool-part 1) self -10.0)
(set! (-> self skel status) (logand -5 (-> self skel status)))
)
(dummy-16 *load-state* (ja-aframe-num 0))
(execute-commands-up-to *load-state* (ja-aframe-num 0))
(cond
((and (< sv-32 sv-72) (= (current-str-id) spool-sound))
(set!
@@ -1305,7 +1310,7 @@
(defbehavior
ja-abort-spooled-anim process-drawable
((arg0 spool-anim) (arg1 art-joint-anim) (arg2 int))
(dummy-18 *load-state*)
(restore-load-state-and-cleanup *load-state*)
(str-play-stop (-> arg0 name))
(set! (-> *art-control* active-stream) #f)
(set! (-> self skel status) (logand -7 (-> self skel status)))
+6 -2
View File
@@ -63,8 +63,9 @@ const std::unordered_set<std::string> g_functions_expected_to_reject = {
// display
"vblank-handler", // asm
"vif1-handler", "vif1-handler-debug",
// sprite. Don't know types yet.
"add-to-sprite-aux-list",
// sparticle
"sp-launch-particles-var", "particle-adgif", "sp-init-fields!", "memcpy", "sp-process-block-2d",
"sp-process-block-3d",
// ripple - asm
"ripple-execute-init", "ripple-create-wave-table", "ripple-apply-wave-table",
"ripple-matrix-scale",
@@ -145,6 +146,9 @@ const std::unordered_set<std::string> g_functions_to_skip_compiling = {
"(method 15 sync-info-eased)", // needs display stuff first
"(method 15 sync-info-paused)", // needs display stuff first
// sparticle
"lookup-part-group-pointer-by-name", // address of element in array issue
// ripple - calls an asm function
"ripple-execute",