diff --git a/goal_src/jak1/engine/gfx/sprite/sparticle/sparticle-launcher-h.gc b/goal_src/jak1/engine/gfx/sprite/sparticle/sparticle-launcher-h.gc index 821a3eccd5..dd5ce82f9a 100644 --- a/goal_src/jak1/engine/gfx/sprite/sparticle/sparticle-launcher-h.gc +++ b/goal_src/jak1/engine/gfx/sprite/sparticle/sparticle-launcher-h.gc @@ -359,7 +359,10 @@ (defmacro defpart (id &key (init-specs ())) "define a new sparticle-launcher" - (let ((last-field-id -1)) + (let ((last-field-id -1) + (param-float? (lambda (p) (or (float? p) (and (pair? p) (eq? 'meters (car p))) (and (pair? p) (eq? 'degrees (car p)))))) + (param-int? (lambda (p) (or (integer? p) (and (pair? p) (eq? 'seconds (car p)))))) + (param-symbol? (lambda (p) (and (pair? p) (eq? 'quote (car p)))))) `(set! (-> *part-id-table* ,id) (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec ,(1+ (length init-specs)) @@ -377,27 +380,27 @@ (let* ((field-id (cadr field)) (field-enum-name (caddr field)) (vel? (and #f (cadddr field))) - (param-float? (lambda (p) (or (float? p) (and (pair? p) (eq? 'meters (car p))) (and (pair? p) (eq? 'degrees (car p)))))) - (param-int? (lambda (p) (or (integer? p) (and (pair? p) (eq? 'seconds (car p)))))) - (param-symbol? (lambda (p) (and (pair? p) (eq? 'quote (car p))))) - (param-count (length params))) + (param-count (length params)) + (param0 (and (>= param-count 1) (first params))) + (param1 (and (>= param-count 2) (second params))) + (param2 (and (>= param-count 3) (third params)))) (when (>= last-field-id field-id) (fmt #t "field {} must come after field {}, not before\n" field-name (car (nth last-field-id *sparticle-fields*)))) (set! last-field-id field-id) (cond ((eq? field-name "flags") - `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :initial-value (sp-cpuinfo-flag ,@(car params)) :random-mult 1) + `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :initial-value (sp-cpuinfo-flag ,@param0) :random-mult 1) ) ((eq? field-name "texture") - `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :tex ,(car params) :flags (sp-flag int)) + `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :tex ,param0 :flags (sp-flag int)) ) ((eq? field-name "next-launcher") - `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :initial-value ,(car params) :flags (sp-flag launcher)) + `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :initial-value ,param0 :flags (sp-flag launcher)) ) ((eq? field-name "sound") - `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :sound ,(car params) :flags (sp-flag object)) + `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :sound ,param0 :flags (sp-flag object)) ) - ((and (= 2 param-count) (symbol? (car params)) (eq? (symbol->string (car params)) ":copy")) + ((and (= 2 param-count) (symbol? param0) (eq? (symbol->string param0) ":copy")) (let* ((other-field (assoc (symbol->string (cadr (member (string->symbol ":copy") params))) *sparticle-fields*)) (other-field-id (cadr other-field))) (when (>= other-field-id field-id) @@ -406,55 +409,55 @@ :initial-value ,(- other-field-id field-id) :random-mult 1) ) ) - ((and (= 2 param-count) (symbol? (car params)) (eq? (symbol->string (car params)) ":data")) + ((and (= 2 param-count) (symbol? param0) (eq? (symbol->string param0) ":data")) `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :flags (sp-flag object) :pntr (the-as pointer ,(cadr (member (string->symbol ":data") params)))) ) - ((and (= 1 param-count) (param-symbol? (first params))) + ((and (= 1 param-count) (param-symbol? param0)) `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :flags (sp-flag symbol) - :sym ,(first params)) + :sym ,param0) ) - ((and (= 1 param-count) (param-float? (first params))) + ((and (= 1 param-count) (param-float? param0)) `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :flags (sp-flag float) - :initial-valuef ,(if vel? `(/ ,(first params) 60.0) (first params)) + :initial-valuef ,(if vel? `(/ ,param0 60.0) param0) :random-rangef 0.0 :random-multf 1.0) ) - ((and (= 2 param-count) (param-float? (first params)) (param-float? (second params))) + ((and (= 2 param-count) (param-float? param0) (param-float? param1)) `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :flags (sp-flag float) - :initial-valuef ,(if vel? `(/ ,(first params) 60.0) (first params)) - :random-rangef ,(if vel? `(/ ,(second params) 60.0) (second params)) + :initial-valuef ,(if vel? `(/ ,param0 60.0) param0) + :random-rangef ,(if vel? `(/ ,param1 60.0) param1) :random-multf 1.0) ) - ((and (= 3 param-count) (param-float? (first params)) (param-float? (second params)) (param-float? (third params))) + ((and (= 3 param-count) (param-float? param0) (param-float? param1) (param-float? param2)) `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :flags (sp-flag float) - :initial-valuef ,(if vel? `(/ ,(first params) 60.0) (first params)) - :random-rangef ,(second params) - :random-multf ,(if vel? `(/ ,(third params) 60.0) (third params))) + :initial-valuef ,(if vel? `(/ ,param0 60.0) param0) + :random-rangef ,param1 + :random-multf ,(if vel? `(/ ,param2 60.0) param2)) ) - ((and (= 3 param-count) (param-float? (first params)) (param-int? (second params)) (param-float? (third params))) + ((and (= 3 param-count) (param-float? param0) (param-int? param1) (param-float? param2)) `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :flags (sp-flag float-int-rand) - :initial-valuef ,(if vel? `(/ ,(first params) 60.0) (first params)) - :random-range ,(second params) - :random-multf ,(if vel? `(/ ,(third params) 60.0) (third params))) + :initial-valuef ,(if vel? `(/ ,param0 60.0) param0) + :random-range ,param1 + :random-multf ,(if vel? `(/ ,param2 60.0) param2)) ) - ((and (= 1 param-count) (param-int? (first params))) + ((and (= 1 param-count) (param-int? param0)) `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :flags (sp-flag int) - :initial-value ,(first params) + :initial-value ,param0 :random-range 0 :random-mult 1) ) - ((and (= 2 param-count) (param-int? (first params)) (param-int? (second params))) + ((and (= 2 param-count) (param-int? param0) (param-int? param1)) `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :flags (sp-flag int) - :initial-value ,(first params) - :random-range ,(second params) + :initial-value ,param0 + :random-range ,param1 :random-mult 1) ) - ((and (= 3 param-count) (param-int? (first params)) (param-int? (second params)) (param-int? (third params))) + ((and (= 3 param-count) (param-int? param0) (param-int? param1) (param-int? param2)) `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :flags (sp-flag int) - :initial-value ,(first params) - :random-range ,(second params) - :random-mult ,(third params)) + :initial-value ,param0 + :random-range ,param1 + :random-mult ,param2) ) (#t `(new 'static 'sp-field-init-spec :field (sp-field-id spt-end)) diff --git a/goal_src/jak2/engine/gfx/sprite/particles/sparticle-launcher-h.gc b/goal_src/jak2/engine/gfx/sprite/particles/sparticle-launcher-h.gc index fe3730b531..a65cce0f59 100644 --- a/goal_src/jak2/engine/gfx/sprite/particles/sparticle-launcher-h.gc +++ b/goal_src/jak2/engine/gfx/sprite/particles/sparticle-launcher-h.gc @@ -225,7 +225,10 @@ (defmacro defpart (id &key (init-specs ())) "define a new sparticle-launcher" - (let ((last-field-id -1)) + (let ((last-field-id -1) + (param-float? (lambda (p) (or (float? p) (and (pair? p) (eq? 'meters (car p))) (and (pair? p) (eq? 'degrees (car p)))))) + (param-int? (lambda (p) (or (integer? p) (and (pair? p) (eq? 'seconds (car p)))))) + (param-symbol? (lambda (p) (and (pair? p) (eq? 'quote (car p)))))) `(set! (-> *part-id-table* ,id) (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec ,(1+ (length init-specs)) @@ -243,28 +246,28 @@ (let* ((field-id (cadr field)) (field-enum-name (caddr field)) (vel? (and #f (cadddr field))) - (param-float? (lambda (p) (or (float? p) (and (pair? p) (eq? 'meters (car p))) (and (pair? p) (eq? 'degrees (car p)))))) - (param-int? (lambda (p) (or (integer? p) (and (pair? p) (eq? 'seconds (car p)))))) - (param-symbol? (lambda (p) (and (pair? p) (eq? 'quote (car p))))) (store? (member (string->symbol ":store") params)) - (param-count (if store? (1- (length params)) (length params)))) + (param-count (if store? (1- (length params)) (length params))) + (param0 (and (>= param-count 1) (first params))) + (param1 (and (>= param-count 2) (second params))) + (param2 (and (>= param-count 3) (third params)))) (when (>= last-field-id field-id) (fmt #t "field {} must come after field {}, not before\n" field-name (car (nth last-field-id *sparticle-fields*)))) (set! last-field-id field-id) (cond ((eq? field-name "flags") - `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :initial-value (sp-cpuinfo-flag ,@(car params)) :random-mult 1) + `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :initial-value (sp-cpuinfo-flag ,@param0) :random-mult 1) ) ((eq? field-name "texture") - `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :tex ,(car params) :flags (sp-flag int)) + `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :tex ,param0 :flags (sp-flag int)) ) ((eq? field-name "next-launcher") - `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :initial-value ,(car params) :flags (sp-flag launcher)) + `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :initial-value ,param0 :flags (sp-flag launcher)) ) ((eq? field-name "sound") - `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :sound ,(car params) :flags (sp-flag object)) + `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :sound ,param0 :flags (sp-flag object)) ) - ((and (= 2 param-count) (symbol? (car params)) (eq? (symbol->string (car params)) ":copy")) + ((and (= 2 param-count) (symbol? param0) (eq? (symbol->string param0) ":copy")) (let* ((other-field (assoc (symbol->string (cadr (member (string->symbol ":copy") params))) *sparticle-fields*)) (other-field-id (cadr other-field))) (when (>= other-field-id field-id) @@ -273,55 +276,55 @@ :initial-value ,(- other-field-id field-id) :random-mult 1) ) ) - ((and (= 2 param-count) (symbol? (car params)) (eq? (symbol->string (car params)) ":data")) + ((and (= 2 param-count) (symbol? param0) (eq? (symbol->string param0) ":data")) `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :flags (sp-flag object) :object ,(cadr (member (string->symbol ":data") params))) ) - ((and (= 1 param-count) (param-symbol? (first params))) + ((and (= 1 param-count) (param-symbol? param0)) `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :flags (sp-flag symbol) - :sym ,(first params)) + :sym ,param0) ) - ((and (= 1 param-count) (param-float? (first params))) + ((and (= 1 param-count) (param-float? param0)) `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :flags (sp-flag ,(if store? 'float-store 'float)) - :initial-valuef ,(if vel? `(/ ,(first params) 60.0) (first params)) + :initial-valuef ,(if vel? `(/ ,param0 60.0) param0) :random-rangef 0.0 :random-multf 1.0) ) - ((and (= 2 param-count) (param-float? (first params)) (param-float? (second params))) + ((and (= 2 param-count) (param-float? param0) (param-float? param1)) `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :flags (sp-flag ,(if store? 'float-store 'float)) - :initial-valuef ,(if vel? `(/ ,(first params) 60.0) (first params)) - :random-rangef ,(if vel? `(/ ,(second params) 60.0) (second params)) + :initial-valuef ,(if vel? `(/ ,param0 60.0) param0) + :random-rangef ,(if vel? `(/ ,param1 60.0) param1) :random-multf 1.0) ) - ((and (= 3 param-count) (param-float? (first params)) (param-float? (second params)) (param-float? (third params))) + ((and (= 3 param-count) (param-float? param0) (param-float? param1) (param-float? param2)) `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :flags (sp-flag ,(if store? 'float-store 'float)) - :initial-valuef ,(if vel? `(/ ,(first params) 60.0) (first params)) - :random-rangef ,(second params) - :random-multf ,(if vel? `(/ ,(third params) 60.0) (third params))) + :initial-valuef ,(if vel? `(/ ,param0 60.0) param0) + :random-rangef ,param1 + :random-multf ,(if vel? `(/ ,param2 60.0) param2)) ) - ((and (= 3 param-count) (param-float? (first params)) (param-int? (second params)) (param-float? (third params))) + ((and (= 3 param-count) (param-float? param0) (param-int? param1) (param-float? param2)) `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :flags (sp-flag float-int-rand) - :initial-valuef ,(if vel? `(/ ,(first params) 60.0) (first params)) - :random-range ,(second params) - :random-multf ,(if vel? `(/ ,(third params) 60.0) (third params))) + :initial-valuef ,(if vel? `(/ ,param0 60.0) param0) + :random-range ,param1 + :random-multf ,(if vel? `(/ ,param2 60.0) param2)) ) - ((and (= 1 param-count) (param-int? (first params))) + ((and (= 1 param-count) (param-int? param0)) `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :flags (sp-flag int) - :initial-value ,(first params) + :initial-value ,param0 :random-range 0 :random-mult 1) ) - ((and (= 2 param-count) (param-int? (first params)) (param-int? (second params))) + ((and (= 2 param-count) (param-int? param0) (param-int? param1)) `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :flags (sp-flag int) - :initial-value ,(first params) - :random-range ,(second params) + :initial-value ,param0 + :random-range ,param1 :random-mult 1) ) - ((and (= 3 param-count) (param-int? (first params)) (param-int? (second params)) (param-int? (third params))) + ((and (= 3 param-count) (param-int? param0) (param-int? param1) (param-int? param2)) `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :flags (sp-flag int) - :initial-value ,(first params) - :random-range ,(second params) - :random-mult ,(third params)) + :initial-value ,param0 + :random-range ,param1 + :random-mult ,param2) ) (#t `(new 'static 'sp-field-init-spec :field (sp-field-id spt-end)) diff --git a/test/decompiler/reference/jak1/decompiler-macros.gc b/test/decompiler/reference/jak1/decompiler-macros.gc index b80e67884d..a3f492db3a 100644 --- a/test/decompiler/reference/jak1/decompiler-macros.gc +++ b/test/decompiler/reference/jak1/decompiler-macros.gc @@ -730,7 +730,10 @@ (defmacro defpart (id &key (init-specs ())) "define a new sparticle-launcher" - (let ((last-field-id -1)) + (let ((last-field-id -1) + (param-float? (lambda (p) (or (float? p) (and (pair? p) (eq? 'meters (car p))) (and (pair? p) (eq? 'degrees (car p)))))) + (param-int? (lambda (p) (or (integer? p) (and (pair? p) (eq? 'seconds (car p)))))) + (param-symbol? (lambda (p) (and (pair? p) (eq? 'quote (car p)))))) `(set! (-> *part-id-table* ,id) (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec ,(1+ (length init-specs)) @@ -748,27 +751,27 @@ (let* ((field-id (cadr field)) (field-enum-name (caddr field)) (vel? (and #f (cadddr field))) - (param-float? (lambda (p) (or (float? p) (and (pair? p) (eq? 'meters (car p))) (and (pair? p) (eq? 'degrees (car p)))))) - (param-int? (lambda (p) (or (integer? p) (and (pair? p) (eq? 'seconds (car p)))))) - (param-symbol? (lambda (p) (and (pair? p) (eq? 'quote (car p))))) - (param-count (length params))) + (param-count (length params)) + (param0 (and (>= param-count 1) (first params))) + (param1 (and (>= param-count 2) (second params))) + (param2 (and (>= param-count 3) (third params)))) (when (>= last-field-id field-id) (fmt #t "field {} must come after field {}, not before\n" field-name (car (nth last-field-id *sparticle-fields*)))) (set! last-field-id field-id) (cond ((eq? field-name "flags") - `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :initial-value (sp-cpuinfo-flag ,@(car params)) :random-mult 1) + `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :initial-value (sp-cpuinfo-flag ,@param0) :random-mult 1) ) ((eq? field-name "texture") - `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :tex ,(car params) :flags (sp-flag int)) + `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :tex ,param0 :flags (sp-flag int)) ) ((eq? field-name "next-launcher") - `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :initial-value ,(car params) :flags (sp-flag launcher)) + `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :initial-value ,param0 :flags (sp-flag launcher)) ) ((eq? field-name "sound") - `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :sound ,(car params) :flags (sp-flag object)) + `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :sound ,param0 :flags (sp-flag object)) ) - ((and (= 2 param-count) (symbol? (car params)) (eq? (symbol->string (car params)) ":copy")) + ((and (= 2 param-count) (symbol? param0) (eq? (symbol->string param0) ":copy")) (let* ((other-field (assoc (symbol->string (cadr (member (string->symbol ":copy") params))) *sparticle-fields*)) (other-field-id (cadr other-field))) (when (>= other-field-id field-id) @@ -777,55 +780,55 @@ :initial-value ,(- other-field-id field-id) :random-mult 1) ) ) - ((and (= 2 param-count) (symbol? (car params)) (eq? (symbol->string (car params)) ":data")) + ((and (= 2 param-count) (symbol? param0) (eq? (symbol->string param0) ":data")) `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :flags (sp-flag object) :pntr (the-as pointer ,(cadr (member (string->symbol ":data") params)))) ) - ((and (= 1 param-count) (param-symbol? (first params))) + ((and (= 1 param-count) (param-symbol? param0)) `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :flags (sp-flag symbol) - :sym ,(first params)) + :sym ,param0) ) - ((and (= 1 param-count) (param-float? (first params))) + ((and (= 1 param-count) (param-float? param0)) `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :flags (sp-flag float) - :initial-valuef ,(if vel? `(/ ,(first params) 60.0) (first params)) + :initial-valuef ,(if vel? `(/ ,param0 60.0) param0) :random-rangef 0.0 :random-multf 1.0) ) - ((and (= 2 param-count) (param-float? (first params)) (param-float? (second params))) + ((and (= 2 param-count) (param-float? param0) (param-float? param1)) `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :flags (sp-flag float) - :initial-valuef ,(if vel? `(/ ,(first params) 60.0) (first params)) - :random-rangef ,(if vel? `(/ ,(second params) 60.0) (second params)) + :initial-valuef ,(if vel? `(/ ,param0 60.0) param0) + :random-rangef ,(if vel? `(/ ,param1 60.0) param1) :random-multf 1.0) ) - ((and (= 3 param-count) (param-float? (first params)) (param-float? (second params)) (param-float? (third params))) + ((and (= 3 param-count) (param-float? param0) (param-float? param1) (param-float? param2)) `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :flags (sp-flag float) - :initial-valuef ,(if vel? `(/ ,(first params) 60.0) (first params)) - :random-rangef ,(second params) - :random-multf ,(if vel? `(/ ,(third params) 60.0) (third params))) + :initial-valuef ,(if vel? `(/ ,param0 60.0) param0) + :random-rangef ,param1 + :random-multf ,(if vel? `(/ ,param2 60.0) param2)) ) - ((and (= 3 param-count) (param-float? (first params)) (param-int? (second params)) (param-float? (third params))) + ((and (= 3 param-count) (param-float? param0) (param-int? param1) (param-float? param2)) `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :flags (sp-flag float-int-rand) - :initial-valuef ,(if vel? `(/ ,(first params) 60.0) (first params)) - :random-range ,(second params) - :random-multf ,(if vel? `(/ ,(third params) 60.0) (third params))) + :initial-valuef ,(if vel? `(/ ,param0 60.0) param0) + :random-range ,param1 + :random-multf ,(if vel? `(/ ,param2 60.0) param2)) ) - ((and (= 1 param-count) (param-int? (first params))) + ((and (= 1 param-count) (param-int? param0)) `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :flags (sp-flag int) - :initial-value ,(first params) + :initial-value ,param0 :random-range 0 :random-mult 1) ) - ((and (= 2 param-count) (param-int? (first params)) (param-int? (second params))) + ((and (= 2 param-count) (param-int? param0) (param-int? param1)) `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :flags (sp-flag int) - :initial-value ,(first params) - :random-range ,(second params) + :initial-value ,param0 + :random-range ,param1 :random-mult 1) ) - ((and (= 3 param-count) (param-int? (first params)) (param-int? (second params)) (param-int? (third params))) + ((and (= 3 param-count) (param-int? param0) (param-int? param1) (param-int? param2)) `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :flags (sp-flag int) - :initial-value ,(first params) - :random-range ,(second params) - :random-mult ,(third params)) + :initial-value ,param0 + :random-range ,param1 + :random-mult ,param2) ) (#t `(new 'static 'sp-field-init-spec :field (sp-field-id spt-end)) diff --git a/test/decompiler/reference/jak2/decompiler-macros.gc b/test/decompiler/reference/jak2/decompiler-macros.gc index 4601cbd76e..1d34764a5c 100644 --- a/test/decompiler/reference/jak2/decompiler-macros.gc +++ b/test/decompiler/reference/jak2/decompiler-macros.gc @@ -1074,7 +1074,10 @@ (defmacro defpart (id &key (init-specs ())) "define a new sparticle-launcher" - (let ((last-field-id -1)) + (let ((last-field-id -1) + (param-float? (lambda (p) (or (float? p) (and (pair? p) (eq? 'meters (car p))) (and (pair? p) (eq? 'degrees (car p)))))) + (param-int? (lambda (p) (or (integer? p) (and (pair? p) (eq? 'seconds (car p)))))) + (param-symbol? (lambda (p) (and (pair? p) (eq? 'quote (car p)))))) `(set! (-> *part-id-table* ,id) (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec ,(1+ (length init-specs)) @@ -1092,28 +1095,28 @@ (let* ((field-id (cadr field)) (field-enum-name (caddr field)) (vel? (and #f (cadddr field))) - (param-float? (lambda (p) (or (float? p) (and (pair? p) (eq? 'meters (car p))) (and (pair? p) (eq? 'degrees (car p)))))) - (param-int? (lambda (p) (or (integer? p) (and (pair? p) (eq? 'seconds (car p)))))) - (param-symbol? (lambda (p) (and (pair? p) (eq? 'quote (car p))))) (store? (member (string->symbol ":store") params)) - (param-count (if store? (1- (length params)) (length params)))) + (param-count (if store? (1- (length params)) (length params))) + (param0 (and (>= param-count 1) (first params))) + (param1 (and (>= param-count 2) (second params))) + (param2 (and (>= param-count 3) (third params)))) (when (>= last-field-id field-id) (fmt #t "field {} must come after field {}, not before\n" field-name (car (nth last-field-id *sparticle-fields*)))) (set! last-field-id field-id) (cond ((eq? field-name "flags") - `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :initial-value (sp-cpuinfo-flag ,@(car params)) :random-mult 1) + `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :initial-value (sp-cpuinfo-flag ,@param0) :random-mult 1) ) ((eq? field-name "texture") - `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :tex ,(car params) :flags (sp-flag int)) + `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :tex ,param0 :flags (sp-flag int)) ) ((eq? field-name "next-launcher") - `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :initial-value ,(car params) :flags (sp-flag launcher)) + `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :initial-value ,param0 :flags (sp-flag launcher)) ) ((eq? field-name "sound") - `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :sound ,(car params) :flags (sp-flag object)) + `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :sound ,param0 :flags (sp-flag object)) ) - ((and (= 2 param-count) (symbol? (car params)) (eq? (symbol->string (car params)) ":copy")) + ((and (= 2 param-count) (symbol? param0) (eq? (symbol->string param0) ":copy")) (let* ((other-field (assoc (symbol->string (cadr (member (string->symbol ":copy") params))) *sparticle-fields*)) (other-field-id (cadr other-field))) (when (>= other-field-id field-id) @@ -1122,55 +1125,55 @@ :initial-value ,(- other-field-id field-id) :random-mult 1) ) ) - ((and (= 2 param-count) (symbol? (car params)) (eq? (symbol->string (car params)) ":data")) + ((and (= 2 param-count) (symbol? param0) (eq? (symbol->string param0) ":data")) `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :flags (sp-flag object) :object ,(cadr (member (string->symbol ":data") params))) ) - ((and (= 1 param-count) (param-symbol? (first params))) + ((and (= 1 param-count) (param-symbol? param0)) `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :flags (sp-flag symbol) - :sym ,(first params)) + :sym ,param0) ) - ((and (= 1 param-count) (param-float? (first params))) + ((and (= 1 param-count) (param-float? param0)) `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :flags (sp-flag ,(if store? 'float-store 'float)) - :initial-valuef ,(if vel? `(/ ,(first params) 60.0) (first params)) + :initial-valuef ,(if vel? `(/ ,param0 60.0) param0) :random-rangef 0.0 :random-multf 1.0) ) - ((and (= 2 param-count) (param-float? (first params)) (param-float? (second params))) + ((and (= 2 param-count) (param-float? param0) (param-float? param1)) `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :flags (sp-flag ,(if store? 'float-store 'float)) - :initial-valuef ,(if vel? `(/ ,(first params) 60.0) (first params)) - :random-rangef ,(if vel? `(/ ,(second params) 60.0) (second params)) + :initial-valuef ,(if vel? `(/ ,param0 60.0) param0) + :random-rangef ,(if vel? `(/ ,param1 60.0) param1) :random-multf 1.0) ) - ((and (= 3 param-count) (param-float? (first params)) (param-float? (second params)) (param-float? (third params))) + ((and (= 3 param-count) (param-float? param0) (param-float? param1) (param-float? param2)) `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :flags (sp-flag ,(if store? 'float-store 'float)) - :initial-valuef ,(if vel? `(/ ,(first params) 60.0) (first params)) - :random-rangef ,(second params) - :random-multf ,(if vel? `(/ ,(third params) 60.0) (third params))) + :initial-valuef ,(if vel? `(/ ,param0 60.0) param0) + :random-rangef ,param1 + :random-multf ,(if vel? `(/ ,param2 60.0) param2)) ) - ((and (= 3 param-count) (param-float? (first params)) (param-int? (second params)) (param-float? (third params))) + ((and (= 3 param-count) (param-float? param0) (param-int? param1) (param-float? param2)) `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :flags (sp-flag float-int-rand) - :initial-valuef ,(if vel? `(/ ,(first params) 60.0) (first params)) - :random-range ,(second params) - :random-multf ,(if vel? `(/ ,(third params) 60.0) (third params))) + :initial-valuef ,(if vel? `(/ ,param0 60.0) param0) + :random-range ,param1 + :random-multf ,(if vel? `(/ ,param2 60.0) param2)) ) - ((and (= 1 param-count) (param-int? (first params))) + ((and (= 1 param-count) (param-int? param0)) `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :flags (sp-flag int) - :initial-value ,(first params) + :initial-value ,param0 :random-range 0 :random-mult 1) ) - ((and (= 2 param-count) (param-int? (first params)) (param-int? (second params))) + ((and (= 2 param-count) (param-int? param0) (param-int? param1)) `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :flags (sp-flag int) - :initial-value ,(first params) - :random-range ,(second params) + :initial-value ,param0 + :random-range ,param1 :random-mult 1) ) - ((and (= 3 param-count) (param-int? (first params)) (param-int? (second params)) (param-int? (third params))) + ((and (= 3 param-count) (param-int? param0) (param-int? param1) (param-int? param2)) `(new 'static 'sp-field-init-spec :field (sp-field-id ,field-enum-name) :flags (sp-flag int) - :initial-value ,(first params) - :random-range ,(second params) - :random-mult ,(third params)) + :initial-value ,param0 + :random-range ,param1 + :random-mult ,param2) ) (#t `(new 'static 'sp-field-init-spec :field (sp-field-id spt-end))