From 2cb00f4a023cabe177f744341c347032ca51187a Mon Sep 17 00:00:00 2001 From: Tyler Wilding Date: Sun, 10 Oct 2021 19:53:19 -0400 Subject: [PATCH] decomp: `anim-tester` and a bunch of progress on files that are blocked (#884) * blocked: `puffer` has state decomp issues * blocked: decomp crash when adding process-drawble cast in `helix-water` * blocked: `green-eco-lurker` no nice way to cast value out of EMB * decomp: started on `citadel-sages` * decomp: `seagull` blocked state decomp * blocked: `sunken-pipegame` runs into handle related issues * blocked: `snow-ram` and `snow-ram-boss` state decomp * decomp: `rolling-race-ring` blocked, handle casts * blocked: state decomp in `part-tester` * decomp: started `joint-exploder` * blocked: `anim-tester` has rare cmove-#f-zero usage * decomp: I lied! `anim-tester` finished * config: update banned list --- decompiler/config/all-types.gc | 1552 +++---- decompiler/config/jak1_ntsc_black_label.jsonc | 13 +- .../jak1_ntsc_black_label/label_types.jsonc | 46 +- .../stack_structures.jsonc | 32 + .../jak1_ntsc_black_label/type_casts.jsonc | 92 +- .../jak1_ntsc_black_label/var_names.jsonc | 6 + goal_src/engine/camera/cam-states-dbg.gc | 2 + goal_src/engine/debug/anim-tester.gc | 3791 +++++++++++++++- goal_src/engine/debug/debug-h.gc | 4 +- goal_src/engine/debug/default-menu.gc | 1 - goal_src/engine/draw/drawable-h.gc | 3 + goal_src/engine/draw/process-drawable.gc | 6 +- goal_src/engine/ui/text-h.gc | 4 + goal_src/kernel/gcommon.gc | 6 + .../decompiler/reference/decompiler-macros.gc | 7 + .../reference/engine/debug/anim-tester_REF.gc | 3955 +++++++++++++++++ test/offline/offline_test_main.cpp | 25 +- 17 files changed, 8396 insertions(+), 1149 deletions(-) create mode 100644 test/decompiler/reference/engine/debug/anim-tester_REF.gc diff --git a/decompiler/config/all-types.gc b/decompiler/config/all-types.gc index 37ec2c2df9..50480a6df7 100644 --- a/decompiler/config/all-types.gc +++ b/decompiler/config/all-types.gc @@ -987,6 +987,10 @@ (rolling-ring-chase-1 #x324) (rolling-ring-chase-2 #x325) + (rolling-ring-hint-one-ring-down #x33f) + (rolling-ring-hint-be-quick-to-next #x340) + (rolling-ring-hint-be-quick-all #x341) + (sunken-blue-eco-charger-hint #x345) (sunken-qbert-hint #x34a) @@ -21481,34 +21485,34 @@ (define-extern anim-test-edit-sequence-list-handler (function int list-control symbol)) (define-extern anim-test-seq-mark-as-edited (function anim-test-sequence none)) -(define-extern anim-tester-start (function none)) -(define-extern anim-tester-add-newobj (function anim-tester string art-group none)) -(define-extern anim-tester-stop (function none)) +(define-extern anim-tester-start (function symbol)) +(define-extern anim-tester-add-newobj (function anim-tester string art-group object)) +(define-extern anim-tester-stop (function symbol)) (define-extern initialize-anim-tester (function none :behavior anim-tester)) -(define-extern anim-tester-save-object-seqs (function anim-test-obj none)) +(define-extern anim-tester-save-object-seqs (function anim-test-obj file-stream)) (define-extern anim-tester-num-print (function basic float none)) (define-extern anim-test-obj-list-handler (function int list-control symbol)) (define-extern anim-tester-standard-event-handler (function process int symbol event-message-block object :behavior anim-tester)) (define-extern anim-tester-reset (function none :behavior anim-tester)) (define-extern anim-tester-get-playing-item (function anim-test-sequence anim-test-seq-item)) -(define-extern anim-tester-update-anim-info (function anim-test-seq-item none :behavior anim-tester)) +(define-extern anim-tester-update-anim-info (function anim-test-seq-item float :behavior anim-tester)) (define-extern anim-tester-interface (function none :behavior anim-tester)) (define-extern display-list-control (function list-control none)) (define-extern anim-test-anim-list-handler (function int list-control symbol)) (define-extern anim-test-sequence-list-handler (function int list-control symbol)) -(define-extern anim-tester-disp-frame-num (function string float float font-context none)) -(define-extern anim-test-seq-item-copy! (function anim-test-seq-item anim-test-seq-item none)) -(define-extern anim-tester-adjust-frame (function float float none)) +(define-extern anim-tester-disp-frame-num (function string float float font-context pointer)) +(define-extern anim-test-seq-item-copy! (function anim-test-seq-item anim-test-seq-item anim-test-sequence)) +(define-extern anim-tester-adjust-frame (function float float float)) (define-extern anim-test-edit-seq-insert-item (function anim-test-seq-item anim-test-sequence none)) (define-extern anim-tester-pick-item-setup (function anim-test-seq-item anim-test-sequence none)) -(define-extern anim-tester-save-all-objects (function anim-tester none)) +(define-extern anim-tester-save-all-objects (function anim-tester symbol)) (define-extern anim-tester-real-post (function none :behavior anim-tester)) (define-extern anim-test-obj-item-valid? (function anim-test-obj anim-test-seq-item symbol)) (define-extern anim-test-obj-init (function anim-test-obj list-control none)) (define-extern anim-test-sequence-init (function anim-test-sequence anim-test-obj none)) -(define-extern anim-test-obj-remove-invalid (function anim-test-obj none)) +(define-extern anim-test-obj-remove-invalid (function anim-test-obj symbol)) (define-extern anim-tester-post (function none :behavior anim-tester)) -(define-extern anim-tester-string-get-frame!! (function list-field string none)) +(define-extern anim-tester-string-get-frame!! (function list-field string symbol)) (define-extern anim-tester-load-object-seqs (function symbol)) (define-extern anim-tester-add-object (function string none)) (define-extern anim-tester-set-name (function string object)) @@ -21518,7 +21522,7 @@ (define-extern *anim-tester* (pointer anim-tester)) ;; unknown type (define-extern *ANIM_TESTER-bank* anim-tester-bank) ;; unknown type -(define-extern anim-tester-process (state none)) ;; unknown type +(define-extern anim-tester-process (state anim-tester)) ;; unknown type (define-extern anim-test-field-highlight-lw (inline-array list-field)) (define-extern *DISP_LIST-bank* DISP_LIST-bank) ;; unknown type (define-extern *debug-menu-context* debug-menu-context) @@ -21568,13 +21572,15 @@ ;; - Types -; (deftype part-tester (UNKNOWN) -; () -; :method-count-assert 0 -; :size-assert #x0 -; :flag-assert #x0 -; ;; unrecognized get op: (set! v1 process) parent was UNKNOWN -; ) +(deftype part-tester (process) + ((root basic :offset-assert 112) + (part basic :offset-assert 116) + (old-group basic :offset-assert 120)) + :method-count-assert 14 + :size-assert #x7c + :heap-base #x100 + :flag-assert #xe0100007c + ) ;; - Functions @@ -21583,10 +21589,10 @@ ;; - Unknowns -;;(define-extern *debug-part-dead-pool* object) ;; unknown type -;;(define-extern *part-tester* object) ;; unknown type -;;(define-extern part-tester-idle object) ;; unknown type -;;(define-extern *part-tester-name* object) ;; unknown type +(define-extern *debug-part-dead-pool* dead-pool) ;; unknown type +(define-extern *part-tester* part-tester) ;; unknown type +(define-extern part-tester-idle (state part-tester)) ;; unknown type +(define-extern *part-tester-name* string) ;; unknown type ;; ---------------------- @@ -22402,7 +22408,7 @@ (dummy-69 (_type_) none 69) (dummy-70 (_type_) none 70) (dummy-71 (_type_) none 71) - (dummy-72 (_type_ process event-message-block) object 72) ;; TODO - args unknown, 3rd arg contains a touching-shapes-entry offset 16/20 + (dummy-72 (_type_ process event-message-block) object 72) ;; 3rd arg contains a touching-shapes-entry offset 16/20 (TODO-RENAME-73 (_type_ process) symbol 73) (nav-enemy-jump-blocked () _type_ :state 74) (dummy-75 (_type_) none 75) @@ -22651,32 +22657,32 @@ ;; - Types -; (deftype joint-exploder-tuning (structure) -; ((explosion uint64 :offset-assert 0) -; (duration uint64 :offset-assert 8) -; (gravity float :offset-assert 16) -; (rot-speed float :offset-assert 20) -; (fountain-rand-transv-lo vector :inline :offset-assert 32) -; (fountain-rand-transv-hi vector :inline :offset-assert 48) -; (away-from-focal-pt vector :inline :offset-assert 32) -; (away-from-rand-transv-xz-lo float :offset-assert 48) -; (away-from-rand-transv-xz-hi float :offset-assert 52) -; (away-from-rand-transv-y-lo float :offset-assert 56) -; (away-from-rand-transv-y-hi float :offset-assert 60) -; ) -; :method-count-assert 9 -; :size-assert #x40 -; :flag-assert #x900000040 -; ) +(deftype joint-exploder-tuning (structure) + ((explosion uint64 :offset-assert 0) + (duration uint64 :offset-assert 8) + (gravity float :offset-assert 16) + (rot-speed float :offset-assert 20) + (fountain-rand-transv-lo vector :inline :offset-assert 32) + (fountain-rand-transv-hi vector :inline :offset-assert 48) + (away-from-focal-pt vector :inline :offset 32) + (away-from-rand-transv-xz-lo float :offset 48) + (away-from-rand-transv-xz-hi float :offset 52) + (away-from-rand-transv-y-lo float :offset 56) + (away-from-rand-transv-y-hi float :offset 60) + ) + :method-count-assert 9 + :size-assert #x40 + :flag-assert #x900000040 + ) -; (deftype joint-exploder-static-joint-params (structure) -; ((joint-index int16 :offset-assert 0) -; (parent-joint-index int16 :offset-assert 2) -; ) -; :method-count-assert 9 -; :size-assert #x4 -; :flag-assert #x900000004 -; ) +(deftype joint-exploder-static-joint-params (structure) + ((joint-index int16 :offset-assert 0) + (parent-joint-index int16 :offset-assert 2) + ) + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) (deftype joint-exploder-static-params (basic) ((joints array :offset-assert 4) ;; an array of...what? @@ -22686,88 +22692,78 @@ :flag-assert #x900000008 ) -; (deftype joint-exploder-joint (structure) -; ((next int16 :offset-assert 0) -; (prev int16 :offset-assert 2) -; (joint-index int16 :offset-assert 4) -; (rspeed float :offset-assert 8) -; (mat matrix :inline :offset-assert 16) -; (rmat matrix :inline :offset-assert 80) -; (transv vector :inline :offset-assert 144) -; (prev-pos vector :inline :offset-assert 160) -; ) -; :method-count-assert 9 -; :size-assert #xb0 -; :flag-assert #x9000000b0 -; ) +(deftype joint-exploder-joint (structure) + ((next int16 :offset-assert 0) + (prev int16 :offset-assert 2) + (joint-index int16 :offset-assert 4) + (rspeed float :offset-assert 8) + (mat matrix :inline :offset-assert 16) + (rmat matrix :inline :offset-assert 80) + (transv vector :inline :offset-assert 144) + (prev-pos vector :inline :offset-assert 160) + ) + :method-count-assert 9 + :size-assert #xb0 + :flag-assert #x9000000b0 + ) -; (deftype joint-exploder-joints (basic) -; ((num-joints int32 :offset-assert 4) -; (joint UNKNOWN :dynamic :offset-assert 16) -; ) -; :method-count-assert 9 -; :size-assert #x10 -; :flag-assert #x900000010 -; ) +(deftype joint-exploder-joints (basic) + ((num-joints int32 :offset-assert 4) + (joint joint-exploder-joint :dynamic :offset 16) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + (:methods + (new (symbol _type_ int) _type_ 0)) + ) -; (deftype joint-exploder-list (structure) -; ((head int32 :offset-assert 0) -; (pre-moved? basic :offset-assert 4) -; (bbox-valid? basic :offset-assert 8) -; (bbox bounding-box :inline :offset-assert 16) -; ) -; :method-count-assert 9 -; :size-assert #x30 -; :flag-assert #x900000030 -; ) +(deftype joint-exploder-list (structure) + ((head int32 :offset-assert 0) + (pre-moved? symbol :offset-assert 4) + (bbox-valid? symbol :offset-assert 8) + (bbox bounding-box :inline :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) -; (deftype joint-exploder (process-drawable) -; ((die-if-below-y float :offset-assert 176) -; (die-if-beyond-xz-dist-sqrd float :offset-assert 180) -; (joints basic :offset-assert 184) -; (static-params basic :offset-assert 188) -; (anim basic :offset-assert 192) -; (scale-vector vector :inline :offset-assert 208) -; (tuning joint-exploder-tuning :inline :offset-assert 224) -; (lists UNKNOWN 5 :offset-assert 288) -; ) -; :method-count-assert 29 -; :size-assert #x210 -; :heap-base #x1a0 -; :flag-assert #x1d01a00210 -; ;; inherited inspect of process-drawable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; (dummy-28 () none 28) -; ) -; ) +(deftype joint-exploder (process-drawable) + ((die-if-below-y float :offset-assert 176) + (die-if-beyond-xz-dist-sqrd float :offset-assert 180) + (joints joint-exploder-joints :offset-assert 184) + (static-params joint-exploder-static-params :offset-assert 188) + (anim art-joint-anim :offset-assert 192) + (scale-vector vector :inline :offset-assert 208) + (tuning joint-exploder-tuning :inline :offset-assert 224) + (lists joint-exploder-list 5 :inline :offset-assert 288) + ) + :method-count-assert 29 + :size-assert #x210 + :heap-base #x1a0 + :flag-assert #x1d01a00210 + (:methods + (dummy-20 (_type_) none 20) + (dummy-21 (_type_) none 21) + (dummy-22 () none 22) + (dummy-23 () none 23) + (dummy-24 (_type_) none 24) + (dummy-25 () none 25) + (dummy-26 (_type_) none 26) + (dummy-27 (_type_) none 27) + (dummy-28 () none 28) + ) + ) ;; - Functions -(define-extern joint-exploder-joint-callback function) +(define-extern joint-exploder-joint-callback (function joint-exploder none)) (define-extern joint-exploder-init-by-other function) ;; - Unknowns -;;(define-extern joint-exploder-shatter object) ;; unknown type +(define-extern joint-exploder-shatter (state joint-exploder)) ;; unknown type ;; ---------------------- @@ -24045,39 +24041,33 @@ ) ) -; (deftype seagullflock (process) -; ((path basic :offset-assert 112) -; (trans vector :inline :offset-assert 128) -; (bird UNKNOWN 64 :offset-assert 144) -; (birds int32 :offset-assert 400) -; (link basic :offset-assert 404) -; (bird-at-waterfall uint64 :offset-assert 408) -; (birds-at-waterfall int32 :offset-assert 416) -; (target vector :inline :offset-assert 432) -; (targetnum int32 :offset-assert 448) -; (alert-time uint64 :offset-assert 456) -; (teleport-frames int32 :offset-assert 464) -; (cam-tracker uint64 :offset-assert 472) -; (state-time uint64 :offset-assert 480) -; (squall basic :offset-assert 488) -; (max-lift float :offset-assert 492) -; ) -; :method-count-assert 17 -; :size-assert #x1f0 -; :heap-base #x180 -; :flag-assert #x11018001f0 -; ;; inherited inspect of process -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; ) -; ) +(deftype seagullflock (process) + ((path basic :offset-assert 112) + (trans vector :inline :offset-assert 128) + (bird seagull 64 :offset-assert 144) + (birds int32 :offset-assert 400) + (link basic :offset-assert 404) + (bird-at-waterfall uint64 :offset-assert 408) + (birds-at-waterfall int32 :offset-assert 416) + (target vector :inline :offset-assert 432) + (targetnum int32 :offset-assert 448) + (alert-time uint64 :offset-assert 456) + (teleport-frames int32 :offset-assert 464) + (cam-tracker uint64 :offset-assert 472) + (state-time uint64 :offset-assert 480) + (squall basic :offset-assert 488) + (max-lift float :offset-assert 492) + ) + :method-count-assert 17 + :size-assert #x1f0 + :heap-base #x180 + :flag-assert #x11018001f0 + (:methods + (dummy-14 () none 14) + (dummy-15 () none 15) + (dummy-16 () none 16) + ) + ) ;; - Functions @@ -24088,17 +24078,17 @@ ;; - Unknowns -;;(define-extern sound-seagull-squall object) ;; unknown type -;;(define-extern seagullflock-idle object) ;; unknown type -;;(define-extern seagullflock-at-waterfall object) ;; unknown type +(define-extern sound-seagull-squall sound-spec) ;; unknown type +(define-extern seagullflock-idle (state seagullflock)) ;; unknown type +(define-extern seagullflock-at-waterfall (state seagullflock)) ;; unknown type (define-extern aybabtu (function int int)) ;; this is just sceCdMmode (define-extern *seagull-sg* skeleton-group) -;;(define-extern seagull-idle object) ;; unknown type -;;(define-extern seagull-soaring object) ;; unknown type -;;(define-extern seagull-flying object) ;; unknown type -;;(define-extern seagull-landing object) ;; unknown type +(define-extern seagull-idle (state seagull)) ;; unknown type +(define-extern seagull-soaring (state seagull)) ;; unknown type +(define-extern seagull-flying (state seagull)) ;; unknown type +(define-extern seagull-landing (state seagull)) ;; unknown type (define-extern *seagull-boxes* (inline-array air-box)) ;; unknown type -;;(define-extern seagull-takeoff object) ;; unknown type +(define-extern seagull-takeoff (state seagull)) ;; unknown type ;; ---------------------- @@ -25569,336 +25559,90 @@ ;; - Types -; (deftype citb-sagecage (process-drawable) -; ((bar-array UNKNOWN 12 :offset-assert 176) -; (angle-offset float :offset-assert 368) -; (bars-on basic :offset-assert 372) -; (cloning basic :offset-assert 376) -; ) -; :method-count-assert 22 -; :size-assert #x17c -; :heap-base #x110 -; :flag-assert #x160110017c -; ;; inherited inspect of process-drawable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; ) -; ) +(deftype citb-sagecage (process-drawable) + ((root-override collide-shape-moving :score 100 :offset 112) + (bar-array vector 12 :inline :offset-assert 176) + (angle-offset float :offset-assert 368) + (bars-on symbol :offset-assert 372) + (cloning symbol :offset-assert 376) + ) + :method-count-assert 22 + :size-assert #x17c + :heap-base #x110 + :flag-assert #x160110017c + (:methods + (dummy-20 () none 20) + (dummy-21 () none 21) + ) + ) -; (deftype citb-sage (process-taskable) -; ((spawn-pos vector :inline :offset-assert 384) -; (target-pos vector :inline :offset-assert 400) -; (dir vector :inline :offset-assert 416) -; (rot-y float :offset-assert 432) -; (rot-x float :offset-assert 436) -; (idle-anim int32 :offset-assert 440) -; (attack-start-anim int32 :offset-assert 444) -; (attack-anim int32 :offset-assert 448) -; (beam-joint int32 :offset-assert 452) -; (cage uint64 :offset-assert 456) -; (part-impact basic :offset-assert 464) -; (beam-on basic :offset-assert 468) -; (resolution-anim basic :offset-assert 472) -; (sound-name basic :offset-assert 476) -; (sound-id sound-id :offset-assert 480) -; (alt-actor basic :offset-assert 484) -; ) -; :method-count-assert 53 -; :size-assert #x1e8 -; :heap-base #x180 -; :flag-assert #x35018001e8 -; ;; inherited inspect of process-taskable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; (dummy-28 () none 28) -; (dummy-29 () none 29) -; (dummy-30 () none 30) -; (dummy-31 () none 31) -; (dummy-32 () none 32) -; (dummy-33 () none 33) -; (dummy-34 () none 34) -; (dummy-35 () none 35) -; (dummy-36 () none 36) -; (dummy-37 () none 37) -; (dummy-38 () none 38) -; (dummy-39 () none 39) -; (dummy-40 () none 40) -; (dummy-41 () none 41) -; (dummy-42 () none 42) -; (dummy-43 () none 43) -; (dummy-44 () none 44) -; (dummy-45 () none 45) -; (dummy-46 () none 46) -; (dummy-47 () none 47) -; (dummy-48 () none 48) -; (dummy-49 () none 49) -; (dummy-50 () none 50) -; (dummy-51 () none 51) -; (dummy-52 () none 52) -; ) -; ) +(deftype citb-sage (process-taskable) + ((spawn-pos vector :inline :offset-assert 384) + (target-pos vector :inline :offset-assert 400) + (dir vector :inline :offset-assert 416) + (rot-y float :offset-assert 432) + (rot-x float :offset-assert 436) + (idle-anim int32 :offset-assert 440) + (attack-start-anim int32 :offset-assert 444) + (attack-anim int32 :offset-assert 448) + (beam-joint int32 :offset-assert 452) + (cage uint64 :offset-assert 456) + (part-impact sparticle-launch-control :offset-assert 464) + (beam-on symbol :offset-assert 468) + (resolution-anim spool-anim :offset-assert 472) + (sound-name string :offset-assert 476) + (sound-id sound-id :offset-assert 480) + (alt-actor entity-actor :offset-assert 484) + ) + :method-count-assert 53 + :size-assert #x1e8 + :heap-base #x180 + :flag-assert #x35018001e8 + ) -; (deftype red-sagecage (citb-sage) -; () -; :method-count-assert 53 -; :size-assert #x1e8 -; :heap-base #x180 -; :flag-assert #x35018001e8 -; ;; not enough basic ops -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; (dummy-28 () none 28) -; (dummy-29 () none 29) -; (dummy-30 () none 30) -; (dummy-31 () none 31) -; (dummy-32 () none 32) -; (dummy-33 () none 33) -; (dummy-34 () none 34) -; (dummy-35 () none 35) -; (dummy-36 () none 36) -; (dummy-37 () none 37) -; (dummy-38 () none 38) -; (dummy-39 () none 39) -; (dummy-40 () none 40) -; (dummy-41 () none 41) -; (dummy-42 () none 42) -; (dummy-43 () none 43) -; (dummy-44 () none 44) -; (dummy-45 () none 45) -; (dummy-46 () none 46) -; (dummy-47 () none 47) -; (dummy-48 () none 48) -; (dummy-49 () none 49) -; (dummy-50 () none 50) -; (dummy-51 () none 51) -; (dummy-52 () none 52) -; ) -; ) +(deftype red-sagecage (citb-sage) + () + :method-count-assert 53 + :size-assert #x1e8 + :heap-base #x180 + :flag-assert #x35018001e8 + ) -; (deftype blue-sagecage (citb-sage) -; () -; :method-count-assert 53 -; :size-assert #x1e8 -; :heap-base #x180 -; :flag-assert #x35018001e8 -; ;; not enough basic ops -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; (dummy-28 () none 28) -; (dummy-29 () none 29) -; (dummy-30 () none 30) -; (dummy-31 () none 31) -; (dummy-32 () none 32) -; (dummy-33 () none 33) -; (dummy-34 () none 34) -; (dummy-35 () none 35) -; (dummy-36 () none 36) -; (dummy-37 () none 37) -; (dummy-38 () none 38) -; (dummy-39 () none 39) -; (dummy-40 () none 40) -; (dummy-41 () none 41) -; (dummy-42 () none 42) -; (dummy-43 () none 43) -; (dummy-44 () none 44) -; (dummy-45 () none 45) -; (dummy-46 () none 46) -; (dummy-47 () none 47) -; (dummy-48 () none 48) -; (dummy-49 () none 49) -; (dummy-50 () none 50) -; (dummy-51 () none 51) -; (dummy-52 () none 52) -; ) -; ) +(deftype blue-sagecage (citb-sage) + () + :method-count-assert 53 + :size-assert #x1e8 + :heap-base #x180 + :flag-assert #x35018001e8 + ) -; (deftype yellow-sagecage (citb-sage) -; () -; :method-count-assert 53 -; :size-assert #x1e8 -; :heap-base #x180 -; :flag-assert #x35018001e8 -; ;; not enough basic ops -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; (dummy-28 () none 28) -; (dummy-29 () none 29) -; (dummy-30 () none 30) -; (dummy-31 () none 31) -; (dummy-32 () none 32) -; (dummy-33 () none 33) -; (dummy-34 () none 34) -; (dummy-35 () none 35) -; (dummy-36 () none 36) -; (dummy-37 () none 37) -; (dummy-38 () none 38) -; (dummy-39 () none 39) -; (dummy-40 () none 40) -; (dummy-41 () none 41) -; (dummy-42 () none 42) -; (dummy-43 () none 43) -; (dummy-44 () none 44) -; (dummy-45 () none 45) -; (dummy-46 () none 46) -; (dummy-47 () none 47) -; (dummy-48 () none 48) -; (dummy-49 () none 49) -; (dummy-50 () none 50) -; (dummy-51 () none 51) -; (dummy-52 () none 52) -; ) -; ) +(deftype yellow-sagecage (citb-sage) + () + :method-count-assert 53 + :size-assert #x1e8 + :heap-base #x180 + :flag-assert #x35018001e8 + ) -; (deftype green-sagecage (citb-sage) -; ((which-movie int32 :offset-assert 488) -; (evilbro uint64 :offset-assert 496) -; (evilsis uint64 :offset-assert 504) -; (robotboss uint64 :offset-assert 512) -; (exitplat uint64 :offset-assert 520) -; ) -; :method-count-assert 53 -; :size-assert #x210 -; :heap-base #x1a0 -; :flag-assert #x3501a00210 -; ;; inherited inspect of citb-sage -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; (dummy-28 () none 28) -; (dummy-29 () none 29) -; (dummy-30 () none 30) -; (dummy-31 () none 31) -; (dummy-32 () none 32) -; (dummy-33 () none 33) -; (dummy-34 () none 34) -; (dummy-35 () none 35) -; (dummy-36 () none 36) -; (dummy-37 () none 37) -; (dummy-38 () none 38) -; (dummy-39 () none 39) -; (dummy-40 () none 40) -; (dummy-41 () none 41) -; (dummy-42 () none 42) -; (dummy-43 () none 43) -; (dummy-44 () none 44) -; (dummy-45 () none 45) -; (dummy-46 () none 46) -; (dummy-47 () none 47) -; (dummy-48 () none 48) -; (dummy-49 () none 49) -; (dummy-50 () none 50) -; (dummy-51 () none 51) -; (dummy-52 () none 52) -; ) -; ) +(deftype green-sagecage (citb-sage) + ((which-movie int32 :offset-assert 488) + (evilbro handle :offset-assert 496) + (evilsis handle :offset-assert 504) + (robotboss handle :offset-assert 512) + (exitplat handle :offset-assert 520) + ) + :method-count-assert 53 + :size-assert #x210 + :heap-base #x1a0 + :flag-assert #x3501a00210 + ) ;; - Functions (define-extern citb-sage-draw-beam function) (define-extern citb-sagecage-init-by-other function) -(define-extern citb-sagecage-update-collision function) -(define-extern citb-sagecage-draw-bars function) +(define-extern citb-sagecage-update-collision (function none :behavior citb-sagecage)) +(define-extern citb-sagecage-draw-bars (function none :behavior citb-sagecage)) ;; - Unknowns @@ -25909,7 +25653,7 @@ (define-extern *yellowsage-sg* skeleton-group) (define-extern *bluesage-sg* skeleton-group) (define-extern *redsage-sg* skeleton-group) -;;(define-extern citb-sagecage-idle object) ;; unknown type +(define-extern citb-sagecage-idle (state citb-sagecage)) ;; unknown type (define-extern *citb-sagecage-sg* skeleton-group) @@ -27531,112 +27275,28 @@ ;; - Types -; (deftype green-eco-lurker (nav-enemy) -; ((played-sound? basic :offset-assert 400) -; (sound-delay int32 :offset-assert 404) -; (appear-dest vector :inline :offset-assert 416) -; (traj trajectory :inline :offset-assert 432) -; ) -; :method-count-assert 76 -; :size-assert #x1d8 -; :heap-base #x170 -; :flag-assert #x4c017001d8 -; ;; inherited inspect of nav-enemy -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; (dummy-28 () none 28) -; (dummy-29 () none 29) -; (dummy-30 () none 30) -; (dummy-31 () none 31) -; (dummy-32 () none 32) -; (dummy-33 () none 33) -; (dummy-34 () none 34) -; (dummy-35 () none 35) -; (dummy-36 () none 36) -; (dummy-37 () none 37) -; (dummy-38 () none 38) -; (dummy-39 () none 39) -; (dummy-40 () none 40) -; (dummy-41 () none 41) -; (dummy-42 () none 42) -; (dummy-43 () none 43) -; (dummy-44 () none 44) -; (dummy-45 () none 45) -; (dummy-46 () none 46) -; (dummy-47 () none 47) -; (dummy-48 () none 48) -; (dummy-49 () none 49) -; (dummy-50 () none 50) -; (dummy-51 () none 51) -; (dummy-52 () none 52) -; (dummy-53 () none 53) -; (dummy-54 () none 54) -; (dummy-55 () none 55) -; (dummy-56 () none 56) -; (dummy-57 () none 57) -; (dummy-58 () none 58) -; (dummy-59 () none 59) -; (dummy-60 () none 60) -; (dummy-61 () none 61) -; (dummy-62 () none 62) -; (dummy-63 () none 63) -; (dummy-64 () none 64) -; (dummy-65 () none 65) -; (dummy-66 () none 66) -; (dummy-67 () none 67) -; (dummy-68 () none 68) -; (dummy-69 () none 69) -; (dummy-70 () none 70) -; (dummy-71 () none 71) -; (dummy-72 () none 72) -; (dummy-73 () none 73) -; (dummy-74 () none 74) -; (dummy-75 () none 75) -; ) -; ) +(deftype green-eco-lurker (nav-enemy) + ((played-sound? symbol :offset-assert 400) + (sound-delay int32 :offset-assert 404) + (appear-dest vector :inline :offset-assert 416) + (traj trajectory :inline :offset-assert 432) + ) + :method-count-assert 76 + :size-assert #x1d8 + :heap-base #x170 + :flag-assert #x4c017001d8 + ) -; (deftype green-eco-lurker-gen (process-drawable) -; ((num-to-spawn int32 :offset-assert 176) -; (num-spawned int32 :offset-assert 180) -; (num-alive int32 :offset-assert 184) -; ) -; :method-count-assert 20 -; :size-assert #xbc -; :heap-base #x50 -; :flag-assert #x14005000bc -; ;; inherited inspect of process-drawable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; ) -; ) +(deftype green-eco-lurker-gen (process-drawable) + ((num-to-spawn int32 :offset-assert 176) + (num-spawned int32 :offset-assert 180) + (num-alive int32 :offset-assert 184) + ) + :method-count-assert 20 + :size-assert #xbc + :heap-base #x50 + :flag-assert #x14005000bc + ) ;; - Functions @@ -27645,13 +27305,13 @@ ;; - Unknowns -;;(define-extern spawn-minions object) ;; unknown type -;;(define-extern green-eco-lurker-wait-to-appear object) ;; unknown type +(define-extern spawn-minions (state green-eco-lurker-gen)) ;; unknown type +(define-extern green-eco-lurker-wait-to-appear (state green-eco-lurker)) ;; unknown type (define-extern *green-eco-lurker-sg* skeleton-group) (define-extern *green-eco-lurker-nav-enemy-info* nav-enemy-info) -;;(define-extern green-eco-lurker-appear-land object) ;; unknown type -;;(define-extern green-eco-lurker-appear object) ;; unknown type -;;(define-extern green-eco-lurker-tune-spheres object) ;; unknown type +(define-extern green-eco-lurker-appear-land (state green-eco-lurker)) ;; unknown type +(define-extern green-eco-lurker-appear (state green-eco-lurker)) ;; unknown type +(define-extern green-eco-lurker-tune-spheres (state green-eco-lurker)) ;; unknown type ;; ---------------------- @@ -35579,89 +35239,51 @@ ;; - Types -; (deftype sunken-pipegame-button (basebutton) -; () -; :method-count-assert 32 -; :size-assert #x100 -; :heap-base #x90 -; :flag-assert #x2000900100 -; ;; not enough basic ops -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; (dummy-28 () none 28) -; (dummy-29 () none 29) -; (dummy-30 () none 30) -; (dummy-31 () none 31) -; ) -; ) +(deftype sunken-pipegame-button (basebutton) + () + :method-count-assert 32 + :size-assert #x100 + :heap-base #x90 + :flag-assert #x2000900100 + ) -; (deftype sunken-pipegame-prize (structure) -; ((puzzle-delay uint64 :offset-assert 0) -; (pipe-travel-time-to-far uint64 :offset-assert 8) -; (pipe-travel-time-to-jar uint64 :offset-assert 16) -; (actor-handle uint64 :offset-assert 24) -; (jar-pos vector :inline :offset-assert 32) -; (far-pos vector :inline :offset-assert 48) -; (sucked-up-jar-part-pos vector :inline :offset-assert 64) -; (sucked-up-far-part-pos vector :inline :offset-assert 80) -; (blown-out-jar-part-pos vector :inline :offset-assert 96) -; (blown-out-far-part-pos vector :inline :offset-assert 112) -; (sucked-up-part basic :offset-assert 128) -; (blown-out-part basic :offset-assert 132) -; ) -; :method-count-assert 9 -; :size-assert #x88 -; :flag-assert #x900000088 -; ) +(deftype sunken-pipegame-prize (structure) + ((puzzle-delay uint64 :offset-assert 0) + (pipe-travel-time-to-far uint64 :offset-assert 8) + (pipe-travel-time-to-jar uint64 :offset-assert 16) + (actor-handle handle :offset-assert 24) + (jar-pos vector :inline :offset-assert 32) + (far-pos vector :inline :offset-assert 48) + (sucked-up-jar-part-pos vector :inline :offset-assert 64) + (sucked-up-far-part-pos vector :inline :offset-assert 80) + (blown-out-jar-part-pos vector :inline :offset-assert 96) + (blown-out-far-part-pos vector :inline :offset-assert 112) + (sucked-up-part basic :offset-assert 128) + (blown-out-part basic :offset-assert 132) + ) + :method-count-assert 9 + :size-assert #x88 + :flag-assert #x900000088 + ) -; (deftype sunken-pipegame (process-drawable) -; ((abort-audio-if-beaten? basic :offset-assert 176) -; (challenges-mask uint32 :offset-assert 180) -; (challenge int32 :offset-assert 184) -; (ticker ticky :inline :offset-assert 192) -; (button UNKNOWN 3 :offset-assert 224) -; (prize UNKNOWN 3 :offset-assert 240) -; ) -; :method-count-assert 23 -; :size-assert #x2a0 -; :heap-base #x230 -; :flag-assert #x17023002a0 -; ;; inherited inspect of process-drawable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; ) -; ) +(deftype sunken-pipegame (process-drawable) + ((abort-audio-if-beaten? basic :offset-assert 176) + (challenges-mask uint32 :offset-assert 180) + (challenge int32 :offset-assert 184) + (ticker ticky :inline :offset-assert 192) + (button sunken-pipegame-button 3 :offset-assert 224) + (prize sunken-pipegame-prize 3 :inline :offset-assert 240) + ) + :method-count-assert 23 + :size-assert #x2a0 + :heap-base #x230 + :flag-assert #x17023002a0 + (:methods + (dummy-20 () none 20) + (dummy-21 () none 21) + (dummy-22 () none 22) + ) + ) ;; - Functions @@ -35669,11 +35291,11 @@ ;; - Unknowns -;;(define-extern sunken-pipegame-start-up object) ;; unknown type -;;(define-extern sunken-pipegame-idle object) ;; unknown type -;;(define-extern sunken-pipegame-end-play object) ;; unknown type -;;(define-extern sunken-pipegame-beat-challenge object) ;; unknown type -;;(define-extern sunken-pipegame-begin-play object) ;; unknown type +(define-extern sunken-pipegame-start-up (state sunken-pipegame)) ;; unknown type +(define-extern sunken-pipegame-idle (state sunken-pipegame)) ;; unknown type +(define-extern sunken-pipegame-end-play (state sunken-pipegame)) ;; unknown type +(define-extern sunken-pipegame-beat-challenge (state sunken-pipegame)) ;; unknown type +(define-extern sunken-pipegame-begin-play (state sunken-pipegame)) ;; unknown type ;; ---------------------- @@ -35964,134 +35586,71 @@ ;; - Types -; (deftype helix-slide-door (process-drawable) -; () -; :method-count-assert 20 -; :size-assert #xb0 -; :heap-base #x40 -; :flag-assert #x14004000b0 -; ;; not enough basic ops -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; ) -; ) +(deftype helix-slide-door (process-drawable) + ((root-override collide-shape :score 100 :offset 112)) + :method-count-assert 20 + :size-assert #xb0 + :heap-base #x40 + :flag-assert #x14004000b0 + ) -; (deftype helix-button (process-drawable) -; ((my-water basic :offset-assert 176) -; (my-door basic :offset-assert 180) -; (fcell-handle uint64 :offset-assert 184) -; (down-y float :offset-assert 192) -; (spawn-trans vector :inline :offset-assert 208) -; ) -; :method-count-assert 20 -; :size-assert #xe0 -; :heap-base #x70 -; :flag-assert #x14007000e0 -; ;; inherited inspect of process-drawable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; ) -; ) +(deftype helix-button (process-drawable) + ((root-override collide-shape-moving :score 100 :offset 112) + (my-water entity-actor :offset-assert 176) + (my-door entity-actor :offset-assert 180) + (fcell-handle uint64 :offset-assert 184) + (down-y float :offset-assert 192) + (spawn-trans vector :inline :offset-assert 208) + ) + :method-count-assert 20 + :size-assert #xe0 + :heap-base #x70 + :flag-assert #x14007000e0 + ) -; (deftype helix-dark-eco (dark-eco-pool) -; () -; :method-count-assert 30 -; :size-assert #xdc -; :heap-base #x70 -; :flag-assert #x1e007000dc -; ;; not enough basic ops -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; (dummy-28 () none 28) -; (dummy-29 () none 29) -; ) -; ) +(deftype helix-dark-eco (dark-eco-pool) + () + :method-count-assert 30 + :size-assert #xdc + :heap-base #x70 + :flag-assert #x1e007000dc + ) -; (deftype helix-water (process-drawable) -; ((last-alt-actor-consumed int32 :offset-assert 176) -; (alt-actors basic :offset-assert 180) -; (transv-y float :offset-assert 184) -; (start-y float :offset-assert 188) -; (end-y float :offset-assert 192) -; (dark-eco uint32 :offset-assert 196) -; ) -; :method-count-assert 22 -; :size-assert #xc8 -; :heap-base #x60 -; :flag-assert #x16006000c8 -; ;; inherited inspect of process-drawable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; ) -; ) +(deftype helix-water (process-drawable) + ((last-alt-actor-consumed int32 :offset-assert 176) + (alt-actors (array entity-actor) :offset-assert 180) + (transv-y float :offset-assert 184) + (start-y float :offset-assert 188) + (end-y float :offset-assert 192) + (dark-eco uint32 :offset-assert 196) + ) + :method-count-assert 22 + :size-assert #xc8 + :heap-base #x60 + :flag-assert #x16006000c8 + (:methods + (dummy-20 () none 20) + (dummy-21 () none 21) + ) + ) ;; - Unknowns -;;(define-extern *helix-water* object) ;; unknown type -;;(define-extern helix-water-idle object) ;; unknown type -;;(define-extern helix-water-activated object) ;; unknown type +(define-extern *helix-water* helix-water) ;; unknown type +(define-extern helix-water-idle (state helix-water)) ;; unknown type +(define-extern helix-water-activated (state helix-water)) ;; unknown type (define-extern *helix-button-sg* skeleton-group) -;;(define-extern *helix-button* object) ;; unknown type -;;(define-extern helix-button-startup object) ;; unknown type -;;(define-extern helix-button-idle-down object) ;; unknown type -;;(define-extern helix-button-quick-activate object) ;; unknown type -;;(define-extern helix-button-activate object) ;; unknown type -;;(define-extern helix-button-idle-up object) ;; unknown type +(define-extern *helix-button* helix-button) ;; unknown type +(define-extern helix-button-startup (state helix-button)) ;; unknown type +(define-extern helix-button-idle-down (state helix-button)) ;; unknown type +(define-extern helix-button-quick-activate (state helix-button)) ;; unknown type +(define-extern helix-button-activate (state helix-button)) ;; unknown type +(define-extern helix-button-idle-up (state helix-button)) ;; unknown type (define-extern *helix-slide-door-sg* skeleton-group) -;;(define-extern *helix-slide-door* object) ;; unknown type -;;(define-extern helix-slide-door-idle-open object) ;; unknown type -;;(define-extern helix-slide-door-idle-closed object) ;; unknown type -;;(define-extern helix-slide-door-close object) ;; unknown type +(define-extern *helix-slide-door* helix-slide-door) ;; unknown type +(define-extern helix-slide-door-idle-open (state helix-slide-door)) ;; unknown type +(define-extern helix-slide-door-idle-closed (state helix-slide-door)) ;; unknown type +(define-extern helix-slide-door-close (state helix-slide-door)) ;; unknown type ;; ---------------------- @@ -36102,79 +35661,67 @@ ;; - Types -; (deftype puffer (process-drawable) -; ((path-index int32 :offset-assert 176) -; (facing-ry float :offset-assert 180) -; (travel-ry float :offset-assert 184) -; (travel-speed float :offset-assert 188) -; (attack-bottom-y float :offset-assert 192) -; (patrol-bottom-y float :offset-assert 196) -; (top-y float :offset-assert 200) -; (targ-trans-y float :offset-assert 204) -; (acc-y float :offset-assert 208) -; (travel-turn-speed float :offset-assert 212) -; (notice-dist float :offset-assert 216) -; (give-up-dist float :offset-assert 220) -; (attacking? basic :offset-assert 224) -; (hit-player? basic :offset-assert 228) -; (look-mean? basic :offset-assert 232) -; (cprims-type uint64 :offset-assert 240) -; (neck basic :offset-assert 248) -; (hit-player-time uint64 :offset-assert 256) -; (reaction-delay uint64 :offset-assert 264) -; (picked-point-time uint64 :offset-assert 272) -; (pick-new-point-delay uint64 :offset-assert 280) -; (last-on-screen-time uint64 :offset-assert 288) -; (buddy basic :offset-assert 296) -; (nice-look lod-set :inline :offset-assert 300) -; (mean-look lod-set :inline :offset-assert 336) -; (dest-pos vector :inline :offset-assert 384) -; (sync sync-info :inline :offset-assert 400) -; ) -; :method-count-assert 32 -; :size-assert #x198 -; :heap-base #x130 -; :flag-assert #x2001300198 -; ;; inherited inspect of process-drawable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; (dummy-28 () none 28) -; (dummy-29 () none 29) -; (dummy-30 () none 30) -; (dummy-31 () none 31) -; ) -; ) +(deftype puffer (process-drawable) + ((path-index int32 :offset-assert 176) + (facing-ry float :offset-assert 180) + (travel-ry float :offset-assert 184) + (travel-speed float :offset-assert 188) + (attack-bottom-y float :offset-assert 192) + (patrol-bottom-y float :offset-assert 196) + (top-y float :offset-assert 200) + (targ-trans-y float :offset-assert 204) + (acc-y float :offset-assert 208) + (travel-turn-speed float :offset-assert 212) + (notice-dist float :offset-assert 216) + (give-up-dist float :offset-assert 220) + (attacking? symbol :offset-assert 224) + (hit-player? symbol :offset-assert 228) + (look-mean? symbol :offset-assert 232) + (cprims-type uint64 :offset-assert 240) + (neck joint-mod :offset-assert 248) + (hit-player-time uint64 :offset-assert 256) + (reaction-delay uint64 :offset-assert 264) + (picked-point-time uint64 :offset-assert 272) + (pick-new-point-delay uint64 :offset-assert 280) + (last-on-screen-time uint64 :offset-assert 288) + (buddy basic :offset-assert 296) + (nice-look lod-set :inline :offset-assert 300) + (mean-look lod-set :inline :offset-assert 336) + (dest-pos vector :inline :offset-assert 384) + (sync sync-info :inline :offset-assert 400) + ) + :method-count-assert 32 + :size-assert #x198 + :heap-base #x130 + :flag-assert #x2001300198 + (:methods + (dummy-20 () none 20) + (dummy-21 () none 21) + (dummy-22 () none 22) + (dummy-23 () none 23) + (dummy-24 () none 24) + (dummy-25 () none 25) + (dummy-26 () none 26) + (dummy-27 () none 27) + (dummy-28 () none 28) + (dummy-29 () none 29) + (dummy-30 () none 30) + (dummy-31 () none 31) + ) + ) -; (deftype pick-patrol-point-away-from-buddy-work (structure) -; ((best-path-index int32 :offset-assert 0) -; (best-rating float :offset-assert 4) -; (best-dest vector :inline :offset-assert 16) -; (pt-dir vector :inline :offset-assert 32) -; (buddy-dir vector :inline :offset-assert 48) -; (dest vector :inline :offset-assert 64) -; ) -; :method-count-assert 9 -; :size-assert #x50 -; :flag-assert #x900000050 -; ) +(deftype pick-patrol-point-away-from-buddy-work (structure) + ((best-path-index int32 :offset-assert 0) + (best-rating float :offset-assert 4) + (best-dest vector :inline :offset-assert 16) + (pt-dir vector :inline :offset-assert 32) + (buddy-dir vector :inline :offset-assert 48) + (dest vector :inline :offset-assert 64) + ) + :method-count-assert 9 + :size-assert #x50 + :flag-assert #x900000050 + ) ;; - Functions @@ -36185,10 +35732,10 @@ (define-extern *puffer-sg* skeleton-group) (define-extern *puffer-mean-sg* skeleton-group) -;;(define-extern puffer-idle object) ;; unknown type -;;(define-extern puffer-patrol object) ;; unknown type -;;(define-extern puffer-attack object) ;; unknown type -;;(define-extern puffer-die object) ;; unknown type +(define-extern puffer-idle (state puffer)) ;; unknown type +(define-extern puffer-patrol (state puffer)) ;; unknown type +(define-extern puffer-attack (state puffer)) ;; unknown type +(define-extern puffer-die (state puffer)) ;; unknown type ;; ---------------------- @@ -36913,50 +36460,36 @@ ;; - Types -; (deftype race-ring (process-drawable) -; ((rot-y float :offset-assert 176) -; (face-vec vector :inline :offset-assert 192) -; (part-track uint64 :offset-assert 208) -; (keep-part-track-alive basic :offset-assert 216) -; (timeout uint64 :offset-assert 224) -; (alt-actor basic :offset-assert 232) -; (alt-task uint8 :offset-assert 236) -; (cyl cylinder-flat :inline :offset-assert 240) -; (old-hips vector :inline :offset-assert 288) -; ) -; :method-count-assert 20 -; :size-assert #x130 -; :heap-base #xc0 -; :flag-assert #x1400c00130 -; ;; inherited inspect of process-drawable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; ) -; ) +(deftype race-ring (process-drawable) + ((rot-y float :offset-assert 176) + (face-vec vector :inline :offset-assert 192) + (part-track handle :offset-assert 208) + (keep-part-track-alive symbol :offset-assert 216) + (timeout uint64 :offset-assert 224) + (alt-actor entity-actor :offset-assert 232) + (alt-task uint8 :offset-assert 236) + (cyl cylinder-flat :inline :offset-assert 240) + (old-hips vector :inline :offset-assert 288) + ) + :method-count-assert 20 + :size-assert #x130 + :heap-base #xc0 + :flag-assert #x1400c00130 + ) ;; - Functions -(define-extern first-ring? function) -(define-extern last-ring? function) -(define-extern race-ring-blue-set-particle-rotation-callback function) -(define-extern race-ring-set-particle-rotation-callback function) +(define-extern first-ring? (function race-ring symbol)) +(define-extern last-ring? (function race-ring symbol)) +(define-extern race-ring-blue-set-particle-rotation-callback (function part-tracker none)) +(define-extern race-ring-set-particle-rotation-callback (function part-tracker none)) ;; - Unknowns (define-extern *race-ring-sg* skeleton-group) -;;(define-extern race-ring-active object) ;; unknown type -;;(define-extern race-ring-wait object) ;; unknown type -;;(define-extern race-ring-idle object) ;; unknown type +(define-extern race-ring-active (state race-ring)) ;; unknown type +(define-extern race-ring-wait (state race-ring)) ;; unknown type +(define-extern race-ring-idle (state race-ring)) ;; unknown type ;; ---------------------- @@ -38925,134 +38458,41 @@ ;; - Types -; (deftype ram-boss-proj (projectile) -; ((part2 basic :offset-assert 412) -; (launched? basic :offset-assert 416) -; (growth float :offset-assert 420) -; (charge-sound-id sound-id :offset-assert 424) -; (launch-time uint64 :offset-assert 432) -; (facing-dir vector :inline :offset-assert 448) -; ) -; :method-count-assert 29 -; :size-assert #x1d0 -; :heap-base #x160 -; :flag-assert #x1d016001d0 -; ;; inherited inspect of projectile -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; (dummy-28 () none 28) -; ) -; ) +(deftype ram-boss-proj (projectile) + ((part2 basic :offset-assert 412) + (launched? basic :offset-assert 416) + (growth float :offset-assert 420) + (charge-sound-id sound-id :offset-assert 424) + (launch-time uint64 :offset-assert 432) + (facing-dir vector :inline :offset-assert 448) + ) + :method-count-assert 29 + :size-assert #x1d0 + :heap-base #x160 + :flag-assert #x1d016001d0 + ) -; (deftype ram-boss (nav-enemy) -; ((facing-y float :offset-assert 400) -; (player-dir-y float :offset-assert 404) -; (last-turn-speed float :offset-assert 408) -; (frustration int32 :offset-assert 412) -; (dead? basic :offset-assert 416) -; (has-shield? basic :offset-assert 420) -; (proj-stoked basic :offset-assert 424) -; (proj-status uint64 :offset-assert 432) -; (part2 basic :offset-assert 440) -; (proj-last-thrown-time uint64 :offset-assert 448) -; (nav-enemy-patrol-timeout uint64 :offset-assert 456) -; (proj-launch-vec vector :inline :offset-assert 464) -; (local-throw-point vector :inline :offset-assert 480) -; (shield-jmod basic :offset-assert 496) -; ) -; :method-count-assert 76 -; :size-assert #x1f4 -; :heap-base #x190 -; :flag-assert #x4c019001f4 -; ;; inherited inspect of nav-enemy -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; (dummy-28 () none 28) -; (dummy-29 () none 29) -; (dummy-30 () none 30) -; (dummy-31 () none 31) -; (dummy-32 () none 32) -; (dummy-33 () none 33) -; (dummy-34 () none 34) -; (dummy-35 () none 35) -; (dummy-36 () none 36) -; (dummy-37 () none 37) -; (dummy-38 () none 38) -; (dummy-39 () none 39) -; (dummy-40 () none 40) -; (dummy-41 () none 41) -; (dummy-42 () none 42) -; (dummy-43 () none 43) -; (dummy-44 () none 44) -; (dummy-45 () none 45) -; (dummy-46 () none 46) -; (dummy-47 () none 47) -; (dummy-48 () none 48) -; (dummy-49 () none 49) -; (dummy-50 () none 50) -; (dummy-51 () none 51) -; (dummy-52 () none 52) -; (dummy-53 () none 53) -; (dummy-54 () none 54) -; (dummy-55 () none 55) -; (dummy-56 () none 56) -; (dummy-57 () none 57) -; (dummy-58 () none 58) -; (dummy-59 () none 59) -; (dummy-60 () none 60) -; (dummy-61 () none 61) -; (dummy-62 () none 62) -; (dummy-63 () none 63) -; (dummy-64 () none 64) -; (dummy-65 () none 65) -; (dummy-66 () none 66) -; (dummy-67 () none 67) -; (dummy-68 () none 68) -; (dummy-69 () none 69) -; (dummy-70 () none 70) -; (dummy-71 () none 71) -; (dummy-72 () none 72) -; (dummy-73 () none 73) -; (dummy-74 () none 74) -; (dummy-75 () none 75) -; ) -; ) +(deftype ram-boss (nav-enemy) + ((facing-y float :offset-assert 400) + (player-dir-y float :offset-assert 404) + (last-turn-speed float :offset-assert 408) + (frustration int32 :offset-assert 412) + (dead? basic :offset-assert 416) + (has-shield? basic :offset-assert 420) + (proj-stoked basic :offset-assert 424) + (proj-status uint64 :offset-assert 432) + (part2 basic :offset-assert 440) + (proj-last-thrown-time uint64 :offset-assert 448) + (nav-enemy-patrol-timeout uint64 :offset-assert 456) + (proj-launch-vec vector :inline :offset-assert 464) + (local-throw-point vector :inline :offset-assert 480) + (shield-jmod basic :offset-assert 496) + ) + :method-count-assert 76 + :size-assert #x1f4 + :heap-base #x190 + :flag-assert #x4c019001f4 + ) ;; - Functions @@ -39062,23 +38502,23 @@ ;; - Unknowns -;;(define-extern ram-boss-tracking object) ;; unknown type +(define-extern ram-boss-tracking (state ram-boss)) ;; unknown type ;;(define-extern *ram-boss-nav-enemy-info-no-shield* object) ;; unknown type -;;(define-extern ram-boss-nav-resume object) ;; unknown type -;;(define-extern ram-boss-throw object) ;; unknown type -;;(define-extern ram-boss-nav-start object) ;; unknown type -;;(define-extern ram-boss-jump-down-hit-ground object) ;; unknown type -;;(define-extern ram-boss-jump-down object) ;; unknown type -;;(define-extern ram-boss-already-down object) ;; unknown type -;;(define-extern ram-boss-idle object) ;; unknown type +(define-extern ram-boss-nav-resume (state ram-boss)) ;; unknown type +(define-extern ram-boss-throw (state ram-boss)) ;; unknown type +(define-extern ram-boss-nav-start (state ram-boss)) ;; unknown type +(define-extern ram-boss-jump-down-hit-ground (state ram-boss)) ;; unknown type +(define-extern ram-boss-jump-down (state ram-boss)) ;; unknown type +(define-extern ram-boss-already-down (state ram-boss)) ;; unknown type +(define-extern ram-boss-idle (state ram-boss)) ;; unknown type (define-extern *ram-boss-sg* skeleton-group) (define-extern *ram-boss-nav-enemy-info* nav-enemy-info) -;;(define-extern ram-boss-lose-shield object) ;; unknown type -;;(define-extern ram-boss-up-defend-block object) ;; unknown type -;;(define-extern ram-boss-forward-defend-block object) ;; unknown type -;;(define-extern ram-boss-proj-launch object) ;; unknown type -;;(define-extern ram-boss-proj-growing object) ;; unknown type -;;(define-extern ram-boss-show-anims object) ;; unknown type +(define-extern ram-boss-lose-shield (state ram-boss)) ;; unknown type +(define-extern ram-boss-up-defend-block (state ram-boss)) ;; unknown type +(define-extern ram-boss-forward-defend-block (state ram-boss)) ;; unknown type +(define-extern ram-boss-proj-launch (state ram-boss)) ;; unknown type +(define-extern ram-boss-proj-growing (state ram-boss)) ;; unknown type +(define-extern ram-boss-show-anims (state ram-boss)) ;; unknown type ;; ---------------------- @@ -39090,9 +38530,9 @@ ;; - Unknowns (define-extern *ram-sg* skeleton-group) -;;(define-extern ram-fun-idle object) ;; unknown type -;;(define-extern ram-idle object) ;; unknown type -;;(define-extern ram-give-fuel-cell object) ;; unknown type +(define-extern ram-fun-idle (state ram)) ;; unknown type +(define-extern ram-idle (state ram)) ;; unknown type +(define-extern ram-give-fuel-cell (state ram)) ;; unknown type ;; ---------------------- diff --git a/decompiler/config/jak1_ntsc_black_label.jsonc b/decompiler/config/jak1_ntsc_black_label.jsonc index c9bb64ad67..b21df3a194 100644 --- a/decompiler/config/jak1_ntsc_black_label.jsonc +++ b/decompiler/config/jak1_ntsc_black_label.jsonc @@ -4,7 +4,18 @@ // if you want to filter to only some object names. // it will make the decompiler much faster. "allowed_objects": [], - "banned_objects": ["crates"], + "banned_objects": [ + "crates", + "puffer", + "helix-water", + "green-eco-lurker", + "seagull", + "sunken-pipegame", + "snow-ram", + "snow-ram-boss", + "rolling-race-ring", + "part-tester" + ], //////////////////////////// // CODE ANALYSIS OPTIONS diff --git a/decompiler/config/jak1_ntsc_black_label/label_types.jsonc b/decompiler/config/jak1_ntsc_black_label/label_types.jsonc index ab86963b9c..6ddf2e252f 100644 --- a/decompiler/config/jak1_ntsc_black_label/label_types.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/label_types.jsonc @@ -380,10 +380,6 @@ ["L327", "(inline-array lbvtx)", 3] ], - "anim-tester": [ - ["L509", "(inline-array list-field)", 12] - ], - "default-menu": [ ["L6251", "float", true], ["L6252", "float", true], @@ -815,6 +811,48 @@ ["L314", "float", true] ], + "seagull": [ + ["L226", "(inline-array air-box)", 20] + ], + + "rolling-race-ring": [ + ["L94", "vector"], + ["L95", "vector"], + ["L96", "vector"], + ["L97", "vector"], + ["L98", "vector"], + ["L99", "vector"], + ["L100", "vector"] + ], + + "part-tester": [ + ["L32", "uint64", true] + ], + + "anim-tester": [ + ["L509", "(inline-array list-field)", 12], + ["L523", "vector"], + ["L524", "vector"], + ["L649", "(pointer float)", 1], + ["L650", "(pointer float)", 1], + ["L651", "(pointer float)", 1], + ["L652", "(pointer float)", 1], + ["L653", "(pointer float)", 1], + ["L654", "(pointer float)", 1], + ["L655", "(pointer float)", 1], + ["L656", "(pointer float)", 1], + ["L657", "uint64", true], + ["L658", "uint64", true], + ["L663", "uint64", true], + ["L664", "uint64", true], + ["L665", "uint64", true], + ["L666", "uint64", true], + ["L667", "uint64", true], + ["L668", "uint64", true], + ["L669", "uint64", true], + ["L670", "uint64", true] + ], + // please do not add things after this entry! git is dumb. "object-file-that-doesnt-actually-exist-and-i-just-put-this-here-to-prevent-merge-conflicts-with-this-file": [] } diff --git a/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc b/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc index a3da69c315..fa36e34c8b 100644 --- a/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc @@ -2751,5 +2751,37 @@ [96, "vector"] ], + "(code helix-button-startup)": [ + [16, "vector"] + ], + + "(method 43 green-eco-lurker)": [ + [16, "event-message-block"] + ], + + "(method 73 green-eco-lurker)": [ + [16, "event-message-block"] + ], + + "citb-sagecage-draw-bars": [ + [16, "vector"], + [32, "vector"], + [48, "vector"] + ], + + "(code sunken-pipegame-start-up)": [ + [16, "event-message-block"] + ], + + "(code race-ring-active)": [ + [16, "event-message-block"], + [96, "vector"] + ], + + "(method 11 race-ring)": [ + [16, "vector"], + [32, "vector"] + ], + "placeholder-do-not-add-below!": [] } diff --git a/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc b/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc index d8db28d037..e78d810f45 100644 --- a/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc @@ -1334,6 +1334,7 @@ ], "(method 0 anim-test-seq-item)": [ + [7, "v0", "anim-test-seq-item"], [8, "v1", "anim-test-seq-item"], [10, "v0", "anim-test-seq-item"], [11, "v0", "anim-test-seq-item"], @@ -1443,14 +1444,17 @@ "anim-test-obj-list-handler": [ [25, "s5", "anim-test-obj"], [31, "s5", "anim-test-obj"], + [[50, 53], "v1", "dma-packet"], [110, "s5", "anim-test-obj"], [166, "s5", "anim-test-obj"], - [112, "v1", "anim-tester"] + [112, "v1", "anim-tester"], + [[202, 205], "v1", "dma-packet"] ], "anim-test-anim-list-handler": [ [2, "s5", "anim-test-obj"], [25, "s5", "anim-test-obj"], + [[44, 47], "v1", "dma-packet"], [65, "s5", "anim-test-obj"], [227, "s5", "anim-test-obj"], [90, "v1", "anim-test-obj"], @@ -1464,13 +1468,15 @@ [167, "v1", "anim-test-obj"], [169, "v1", "anim-test-obj"], [171, "v1", "anim-test-obj"], - [173, "v1", "anim-test-obj"] + [173, "v1", "anim-test-obj"], + [[263, 266], "v1", "dma-packet"] ], "anim-test-sequence-list-handler": [ [2, "s5", "anim-test-sequence"], [25, "s5", "anim-test-sequence"], [31, "s5", "anim-test-sequence"], + [[50, 53], "v1", "dma-packet"], [71, "s5", "anim-test-sequence"], [231, "s5", "anim-test-sequence"], [96, "v1", "anim-test-sequence"], @@ -1480,10 +1486,16 @@ [136, "v1", "anim-test-sequence"], [137, "v1", "anim-test-sequence"], [146, "v1", "anim-test-sequence"], - [151, "v1", "anim-test-sequence"] + [151, "v1", "anim-test-sequence"], + [[267, 270], "v1", "dma-packet"] ], "anim-test-edit-sequence-list-handler": [ + [[82, 85], "v1", "dma-packet"], + [[148, 151], "v1", "dma-packet"], + [[323, 326], "v1", "dma-packet"], + [[979, 982], "v1", "dma-packet"], + [[1028, 1031], "v1", "dma-packet"], [[122, 965], "s4", "anim-test-sequence"], [129, "v1", "glst-named-node"], [[128, 909], "gp", "anim-test-seq-item"], @@ -1498,26 +1510,37 @@ "anim-tester-interface": [ [[34, 48], "gp", "anim-test-obj"], + [[70, 73], "v1", "dma-packet"], + [[131, 134], "v1", "dma-packet"], + [[189, 192], "v1", "dma-packet"], + [[228, 231], "v1", "dma-packet"], [[95, 109], "gp", "anim-test-obj"], [[156, 160], "v1", "anim-test-obj"], [[162, 165], "v1", "anim-test-sequence"] ], "anim-tester-get-playing-item": [ - [7, "v0", "anim-test-seq-item"], + [4, "t9", "(function glst-list int anim-test-seq-item)"], + [20, "t9", "(function glst-list int anim-test-seq-item)"], [[5, 22], "s5", "anim-test-seq-item"], [21, "v0", "anim-test-seq-item"], - [25, "v0", "anim-test-seq-item"] + [25, "v0", "anim-test-seq-item"], + [5, "v0", "anim-test-seq-item"] ], "anim-tester-add-newobj": [ + ["_stack_", 128, "anim-test-obj"], [[2, 185], "s2", "anim-test-obj"], [[70, 193], "s5", "anim-test-obj"], [149, "v1", "anim-test-sequence"], [154, "v1", "anim-test-sequence"], [160, "v1", "anim-test-sequence"], [164, "a0", "art-joint-anim"], - [170, "a0", "art-joint-anim"] + [168, "v1", "anim-test-seq-item"], + [168, "v1", "anim-test-seq-item"], + [170, "a0", "art-joint-anim"], + [171, "v1", "anim-test-seq-item"], + [173, "v1", "anim-test-seq-item"] ], "anim-tester-start": [[20, "t9", "(function process function none)"]], @@ -3924,5 +3947,62 @@ [[371, 451], "s3", "death-info"] ], + "(post water-vol-idle helix-dark-eco)": [ + [4, "t9", "(function none :behavior helix-dark-eco)"] + ], + + "(code helix-slide-door-close)": [ + [10, "v1", "art-joint-anim"] + ], + + "(code helix-button-startup)": [ + [39, "v1", "process-drawable"] + ], + + "(method 73 green-eco-lurker)": [ + [6, "a1", "touching-shapes-entry"] + ], + + "citb-sagecage-update-collision": [ + [2, "a0", "collide-shape-prim-group"] + ], + + "race-ring-set-particle-rotation-callback": [ + [1, "v1", "(pointer race-ring)"] + ], + + "race-ring-blue-set-particle-rotation-callback": [ + [1, "v1", "(pointer race-ring)"] + ], + + "(code race-ring-active)": [ + [242, "v1", "handle"], + [245, "v1", "handle"], + [253, "gp", "handle"], + [269, "s5", "handle"], + [272, "s5", "handle"] + ], + + "(trans race-ring-active)": [ + [26, "a0", "part-tracker"] + ], + + "(code anim-tester-process)": [ + [41, "v1", "anim-test-obj"], + [45, "v1", "anim-test-obj"], + [[40, 114], "s4", "anim-test-obj"], + [82, "v0", "anim-test-sequence"], + [119, "v0", "art-joint-anim"] + ], + + "display-list-control": [ + [[194, 197], "v1", "dma-packet"], + [[423, 426], "v1", "dma-packet"] + ], + + "anim-tester-disp-frame-num": [ + [[75, 78], "v1", "dma-packet"] + ], + "placeholder-do-not-add-below": [] } diff --git a/decompiler/config/jak1_ntsc_black_label/var_names.jsonc b/decompiler/config/jak1_ntsc_black_label/var_names.jsonc index e6de3e7f2a..ed591b7a83 100644 --- a/decompiler/config/jak1_ntsc_black_label/var_names.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/var_names.jsonc @@ -3547,5 +3547,11 @@ } }, + "anim-tester-get-playing-item": { + "vars": { + "v0-0": ["v0-0", "anim-test-seq-item"] + } + }, + "aaaaaaaaaaaaaaaaaaaaaaa": {} } diff --git a/goal_src/engine/camera/cam-states-dbg.gc b/goal_src/engine/camera/cam-states-dbg.gc index dc88e09cf6..ae3cdfffed 100644 --- a/goal_src/engine/camera/cam-states-dbg.gc +++ b/goal_src/engine/camera/cam-states-dbg.gc @@ -5,3 +5,5 @@ ;; name in dgo: cam-states-dbg ;; dgos: GAME, ENGINE +;; TODO - for anim-tester +(define-extern cam-orbit state) diff --git a/goal_src/engine/debug/anim-tester.gc b/goal_src/engine/debug/anim-tester.gc index d9f7854db9..77da303568 100644 --- a/goal_src/engine/debug/anim-tester.gc +++ b/goal_src/engine/debug/anim-tester.gc @@ -5,108 +5,3755 @@ ;; name in dgo: anim-tester ;; dgos: GAME, ENGINE +;; NOTES - removed one of the 2 inspects +;; - also fixed up a basic file-stream constructor on the stack + +(declare-type list-control structure) +(define-extern anim-test-anim-list-handler (function int list-control symbol)) +(define-extern anim-test-edit-sequence-list-handler (function int list-control symbol)) + +(declare-type anim-tester process-drawable) +(define-extern anim-tester-process (state anim-tester)) ;; unknown type + +(define-extern anim-tester-save-all-objects (function anim-tester symbol)) + +;; DECOMP BEGINS + +;; this file is debug only +(when *debug-segment* (deftype list-control (structure) - ((listfunc (function int list-control symbol) :offset-assert 0) - (list-owner uint32 :offset-assert 4) - (top int32 :offset-assert 8) - (left int32 :offset-assert 12) - (list glst-list :offset-assert 16) - (the-node glst-node :offset-assert 20) - (top-index int32 :offset-assert 24) - (the-index int32 :offset-assert 28) - (the-disp-line int32 :offset-assert 32) - (highlight-index int32 :offset-assert 36) - (current-index int32 :offset-assert 40) - (numlines int32 :offset-assert 44) - (lines-to-disp int32 :offset-assert 48) - (charswide int32 :offset-assert 52) - (highlight-disp-line int32 :offset-assert 56) - (field-id int32 :offset-assert 60) - (xpos int32 :offset-assert 64) - (ypos int32 :offset-assert 68) - (user-info int32 :offset-assert 72) - (user-info-u uint32 :offset 72) ;; custom - (return-int int32 :offset-assert 76) + ((listfunc (function int list-control symbol) :offset-assert 0) + (list-owner uint32 :offset-assert 4) + (top int32 :offset-assert 8) + (left int32 :offset-assert 12) + (list glst-list :offset-assert 16) + (the-node glst-node :offset-assert 20) + (top-index int32 :offset-assert 24) + (the-index int32 :offset-assert 28) + (the-disp-line int32 :offset-assert 32) + (highlight-index int32 :offset-assert 36) + (current-index int32 :offset-assert 40) + (numlines int32 :offset-assert 44) + (lines-to-disp int32 :offset-assert 48) + (charswide int32 :offset-assert 52) + (highlight-disp-line int32 :offset-assert 56) + (field-id int32 :offset-assert 60) + (xpos int32 :offset-assert 64) + (ypos int32 :offset-assert 68) + (user-info int32 :offset-assert 72) + (user-info-u uint32 :offset 72) + (return-int int32 :offset-assert 76) ) - :allow-misaligned - :method-count-assert 9 + :allow-misaligned :method-count-assert 9 :size-assert #x50 :flag-assert #x900000050 ) + (deftype list-field (structure) - ((left int32 :offset-assert 0) - (width int32 :offset-assert 4) + ((left int32 :offset-assert 0) + (width int32 :offset-assert 4) ) :method-count-assert 9 :size-assert #x8 :flag-assert #x900000008 ) + (deftype DISP_LIST-bank (basic) - ((TV_SPACING int32 :offset-assert 4) - (BORDER_WIDTH int32 :offset-assert 8) - (BORDER_HEIGHT int32 :offset-assert 12) - (MAX_LINES int32 :offset-assert 16) - (CHAR_WIDTH int32 :offset-assert 20) - (INC_DELAY int32 :offset-assert 24) - (BORDER_LINES int32 :offset-assert 28) - (CXOFF int32 :offset-assert 32) - (CYOFF int32 :offset-assert 36) - (BXOFF int32 :offset-assert 40) - (BYOFF int32 :offset-assert 44) + ((TV_SPACING int32 :offset-assert 4) + (BORDER_WIDTH int32 :offset-assert 8) + (BORDER_HEIGHT int32 :offset-assert 12) + (MAX_LINES int32 :offset-assert 16) + (CHAR_WIDTH int32 :offset-assert 20) + (INC_DELAY int32 :offset-assert 24) + (BORDER_LINES int32 :offset-assert 28) + (CXOFF int32 :offset-assert 32) + (CYOFF int32 :offset-assert 36) + (BXOFF int32 :offset-assert 40) + (BYOFF int32 :offset-assert 44) ) :method-count-assert 9 :size-assert #x30 :flag-assert #x900000030 ) + +(define + *DISP_LIST-bank* + (new 'static 'DISP_LIST-bank + :TV_SPACING 8 + :BORDER_WIDTH 4 + :BORDER_HEIGHT 4 + :MAX_LINES 12 + :CHAR_WIDTH 10 + :INC_DELAY 20 + :BORDER_LINES 3 + ) + ) + +(defun display-list-control ((arg0 list-control)) + (when (< (-> arg0 current-index) 0) + (set! (-> arg0 current-index) 0) + 0 + ) + (if (>= (-> arg0 current-index) (glst-num-elements (-> arg0 list))) + (set! (-> arg0 current-index) -1) + ) + (when (< (-> arg0 highlight-index) 0) + (set! (-> arg0 highlight-index) 0) + 0 + ) + (if (>= (-> arg0 highlight-index) (glst-num-elements (-> arg0 list))) + (set! (-> arg0 highlight-index) (+ (glst-num-elements (-> arg0 list)) -1)) + ) + (set! (-> arg0 the-index) (-> arg0 highlight-index)) + (set! + (-> arg0 the-node) + (glst-get-node-by-index (-> arg0 list) (-> arg0 highlight-index)) + ) + (when (not ((-> arg0 listfunc) 1 arg0)) + (set! (-> arg0 the-index) 0) + (let ((v1-12 (-> arg0 list))) + "return the start of the list" + (set! (-> arg0 the-node) (-> v1-12 head)) + ) + (while (let ((v1-22 (-> arg0 the-node))) + "is this node the end of the list. #t = end" + (not (not (-> v1-22 next))) + ) + (when ((-> arg0 listfunc) 1 arg0) + (set! (-> arg0 highlight-index) (-> arg0 the-index)) + (goto cfg-18) + ) + (+! (-> arg0 the-index) 1) + (let ((v1-20 (-> arg0 the-node))) + "return the next node in the list" + (set! (-> arg0 the-node) (-> v1-20 next)) + ) + ) + (set! (-> arg0 highlight-index) 0) + 0 + ) + (label cfg-18) + (set! (-> arg0 the-index) (-> arg0 highlight-index)) + (set! + (-> arg0 the-node) + (glst-get-node-by-index (-> arg0 list) (-> arg0 the-index)) + ) + ((-> arg0 listfunc) 4 arg0) + (let ((s5-2 #f) + (s4-0 #f) + ) + (set! (-> arg0 numlines) 0) + (set! (-> arg0 charswide) 0) + (set! (-> arg0 the-index) 0) + (set! (-> arg0 the-disp-line) 0) + (let ((v1-29 (-> arg0 list))) + "return the start of the list" + (set! (-> arg0 the-node) (-> v1-29 head)) + ) + (while (let ((v1-52 (-> arg0 the-node))) + "is this node the end of the list. #t = end" + (not (not (-> v1-52 next))) + ) + (when ((-> arg0 listfunc) 1 arg0) + (if (and (not s5-2) (>= (-> arg0 the-index) (-> arg0 top-index))) + (set! s5-2 #t) + ) + (when (and (not s4-0) (>= (-> arg0 the-index) (-> arg0 highlight-index))) + (set! s4-0 #t) + (set! (-> arg0 highlight-disp-line) (-> arg0 the-disp-line)) + ) + ((-> arg0 listfunc) 2 arg0) + (if (< (-> arg0 charswide) (-> arg0 return-int)) + (set! (-> arg0 charswide) (-> arg0 return-int)) + ) + (if s5-2 + (+! (-> arg0 the-disp-line) 1) + ) + (+! (-> arg0 numlines) 1) + ) + (+! (-> arg0 the-index) 1) + (let ((v1-50 (-> arg0 the-node))) + "return the next node in the list" + (set! (-> arg0 the-node) (-> v1-50 next)) + ) + ) + ) + (set! + (-> arg0 lines-to-disp) + (if (< (-> *DISP_LIST-bank* MAX_LINES) (-> arg0 numlines)) + (-> *DISP_LIST-bank* MAX_LINES) + (-> arg0 numlines) + ) + ) + (if (> (-> arg0 lines-to-disp) 0) + (-> arg0 lines-to-disp) + 1 + ) + (let* ((s4-1 (-> *display* frames (-> *display* on-screen) frame debug-buf)) + (s5-3 (-> s4-1 base)) + ) + (draw-sprite2d-xy + s4-1 + (-> arg0 left) + (-> arg0 top) + (+ + (* (-> arg0 charswide) (-> *DISP_LIST-bank* CHAR_WIDTH)) + (* (-> *DISP_LIST-bank* BORDER_WIDTH) 2) + ) + (+ + (* (+ (-> arg0 lines-to-disp) 1) (-> *DISP_LIST-bank* TV_SPACING)) + (* (-> *DISP_LIST-bank* BORDER_WIDTH) 2) + ) + (new 'static 'rgba :a #x40) + ) + (let ((a3-6 (-> s4-1 base))) + (let ((v1-72 (the-as object (-> s4-1 base)))) + (set! + (-> (the-as dma-packet v1-72) dma) + (new 'static 'dma-tag :id (dma-tag-id next)) + ) + (set! (-> (the-as dma-packet v1-72) vif0) (new 'static 'vif-tag)) + (set! (-> (the-as dma-packet v1-72) vif1) (new 'static 'vif-tag)) + (set! (-> s4-1 base) (&+ (the-as pointer v1-72) 16)) + ) + (dma-bucket-insert-tag + (-> *display* frames (-> *display* on-screen) frame bucket-group) + (bucket-id debug-draw0) + s5-3 + (the-as (pointer dma-tag) a3-6) + ) + ) + ) + (set! (-> arg0 xpos) (+ (-> arg0 left) (-> *DISP_LIST-bank* BORDER_WIDTH))) + (set! (-> arg0 ypos) (+ (-> arg0 top) (-> *DISP_LIST-bank* BORDER_HEIGHT))) + ((-> arg0 listfunc) 3 arg0) + (cond + ((> (-> arg0 lines-to-disp) 0) + (cond + ((< (-> arg0 highlight-disp-line) (-> *DISP_LIST-bank* BORDER_LINES)) + (let + ((s5-4 + (- (-> *DISP_LIST-bank* BORDER_LINES) (-> arg0 highlight-disp-line)) + ) + ) + (set! + (-> arg0 the-node) + (glst-get-node-by-index (-> arg0 list) (-> arg0 top-index)) + ) + (set! (-> arg0 the-index) (-> arg0 top-index)) + (let ((v1-88 (-> arg0 the-node))) + "is this node the start of the list. #t = start" + (when (not (not (-> v1-88 prev))) + (while #t + (let ((v1-92 (-> arg0 the-node))) + "return the previous node in the list" + (let ((v1-93 (-> v1-92 prev))) + (let ((a0-41 v1-93)) + "is this node the start of the list. #t = start" + (if (not (-> a0-41 prev)) + (goto cfg-61) + ) + ) + (set! (-> arg0 the-node) v1-93) + ) + ) + (+! (-> arg0 the-index) -1) + (when ((-> arg0 listfunc) 1 arg0) + (set! (-> arg0 top-index) (-> arg0 the-index)) + (+! s5-4 -1) + (if (<= s5-4 0) + (goto cfg-61) + ) + ) + ) + ) + ) + ) + (label cfg-61) + ) + ((>= + (-> arg0 highlight-disp-line) + (- (-> *DISP_LIST-bank* MAX_LINES) (-> *DISP_LIST-bank* BORDER_LINES)) + ) + (let + ((s5-5 + (- + (-> arg0 highlight-disp-line) + (- (-> *DISP_LIST-bank* MAX_LINES) (-> *DISP_LIST-bank* BORDER_LINES)) + ) + ) + ) + (set! + (-> arg0 the-node) + (glst-get-node-by-index (-> arg0 list) (-> arg0 top-index)) + ) + (set! (-> arg0 the-index) (-> arg0 top-index)) + (let ((v1-107 (-> arg0 the-node))) + "is this node the end of the list. #t = end" + (when (not (not (-> v1-107 next))) + (while #t + (let ((v1-111 (-> arg0 the-node))) + "return the next node in the list" + (let ((v1-112 (-> v1-111 next))) + (let ((a0-55 v1-112)) + "is this node the end of the list. #t = end" + (if (not (-> a0-55 next)) + (goto cfg-77) + ) + ) + (set! (-> arg0 the-node) v1-112) + ) + ) + (+! (-> arg0 the-index) 1) + (when ((-> arg0 listfunc) 1 arg0) + (set! (-> arg0 top-index) (-> arg0 the-index)) + (+! s5-5 -1) + (if (<= s5-5 0) + (goto cfg-77) + ) + ) + ) + ) + ) + ) + ) + ) + (label cfg-77) + (set! (-> arg0 the-disp-line) 0) + (set! (-> arg0 the-index) (-> arg0 top-index)) + (set! + (-> arg0 the-node) + (glst-get-node-by-index (-> arg0 list) (-> arg0 top-index)) + ) + (while (let ((v1-135 (-> arg0 the-node))) + "is this node the end of the list. #t = end" + (not + (or + (not (-> v1-135 next)) + (>= (-> arg0 the-disp-line) (-> *DISP_LIST-bank* MAX_LINES)) + ) + ) + ) + (when ((-> arg0 listfunc) 1 arg0) + (set! + (-> arg0 xpos) + (+ (-> arg0 left) (-> *DISP_LIST-bank* BORDER_WIDTH)) + ) + (set! + (-> arg0 ypos) + (+ + (-> arg0 top) + (-> *DISP_LIST-bank* BORDER_HEIGHT) + (* (+ (-> arg0 the-disp-line) 1) (-> *DISP_LIST-bank* TV_SPACING)) + ) + ) + ((-> arg0 listfunc) 0 arg0) + (+! (-> arg0 the-disp-line) 1) + ) + (+! (-> arg0 the-index) 1) + (let ((v1-133 (-> arg0 the-node))) + "return the next node in the list" + (set! (-> arg0 the-node) (-> v1-133 next)) + ) + ) + ) + (else + (let* ((s4-2 (-> *display* frames (-> *display* on-screen) frame debug-buf)) + (s5-6 (-> s4-2 base)) + ) + (draw-string-xy + "**NONE**" + s4-2 + (+ (-> arg0 left) (-> *DISP_LIST-bank* BORDER_WIDTH)) + (+ + (-> arg0 top) + (-> *DISP_LIST-bank* BORDER_HEIGHT) + (-> *DISP_LIST-bank* TV_SPACING) + ) + (font-color dim-white) + (font-flags shadow kerning) + ) + (let ((a3-12 (-> s4-2 base))) + (let ((v1-147 (the-as object (-> s4-2 base)))) + (set! + (-> (the-as dma-packet v1-147) dma) + (new 'static 'dma-tag :id (dma-tag-id next)) + ) + (set! (-> (the-as dma-packet v1-147) vif0) (new 'static 'vif-tag)) + (set! (-> (the-as dma-packet v1-147) vif1) (new 'static 'vif-tag)) + (set! (-> s4-2 base) (&+ (the-as pointer v1-147) 16)) + ) + (dma-bucket-insert-tag + (-> *display* frames (-> *display* on-screen) frame bucket-group) + (bucket-id debug-draw0) + s5-6 + (the-as (pointer dma-tag) a3-12) + ) + ) + ) + ) + ) + (none) + ) + (deftype anim-tester-bank (basic) - ((ANIM_SPEED float :offset-assert 4) - (BLEND float :offset-assert 8) - (OBJECT_LIST_X int32 :offset-assert 12) - (OBJECT_LIST_Y int32 :offset-assert 16) - (OBJECT_LIST_MIN_WIDTH int32 :offset-assert 20) - (ANIM_LIST_X int32 :offset-assert 24) - (ANIM_LIST_Y int32 :offset-assert 28) - (ANIM_LIST_MIN_WIDTH int32 :offset-assert 32) - (PICK_LIST_X int32 :offset-assert 36) - (PICK_LIST_Y int32 :offset-assert 40) - (PICK_LIST_MIN_WIDTH int32 :offset-assert 44) - (EDIT_LIST_X int32 :offset-assert 48) - (EDIT_LIST_Y int32 :offset-assert 52) - (EDIT_STATS_X int32 :offset-assert 56) - (EDIT_LIST_MIN_WIDTH int32 :offset-assert 60) - (EDIT_PICK_X int32 :offset-assert 64) + ((ANIM_SPEED float :offset-assert 4) + (BLEND float :offset-assert 8) + (OBJECT_LIST_X int32 :offset-assert 12) + (OBJECT_LIST_Y int32 :offset-assert 16) + (OBJECT_LIST_MIN_WIDTH int32 :offset-assert 20) + (ANIM_LIST_X int32 :offset-assert 24) + (ANIM_LIST_Y int32 :offset-assert 28) + (ANIM_LIST_MIN_WIDTH int32 :offset-assert 32) + (PICK_LIST_X int32 :offset-assert 36) + (PICK_LIST_Y int32 :offset-assert 40) + (PICK_LIST_MIN_WIDTH int32 :offset-assert 44) + (EDIT_LIST_X int32 :offset-assert 48) + (EDIT_LIST_Y int32 :offset-assert 52) + (EDIT_STATS_X int32 :offset-assert 56) + (EDIT_LIST_MIN_WIDTH int32 :offset-assert 60) + (EDIT_PICK_X int32 :offset-assert 64) ) :method-count-assert 9 :size-assert #x44 :flag-assert #x900000044 ) -(deftype anim-tester (process-drawable) - ((flags int32 :offset-assert 176) - (obj-list glst-list :inline :offset-assert 180) - (current-obj string :offset-assert 196) - (speed int32 :offset-assert 200) - (list-con list-control :inline :offset-assert 204) - (pick-con list-control :inline :offset-assert 284) - (item-field int64 :offset-assert 368) - (inc-delay int32 :offset-assert 376) - (inc-timer int32 :offset-assert 380) - (edit-mode int32 :offset-assert 384) - (old-mode int32 :offset-assert 388) - (anim-speed float :offset-assert 392) - (anim-gspeed float :offset-assert 396) - (anim-first float :offset-assert 400) - (anim-last float :offset-assert 404) + +(define + *ANIM_TESTER-bank* + (new 'static 'anim-tester-bank + :ANIM_SPEED 1.0 + :BLEND 1.0 + :OBJECT_LIST_X 10 + :OBJECT_LIST_Y 50 + :OBJECT_LIST_MIN_WIDTH 18 + :ANIM_LIST_X 10 + :ANIM_LIST_Y 50 + :ANIM_LIST_MIN_WIDTH 17 + :PICK_LIST_X 10 + :PICK_LIST_Y 50 + :PICK_LIST_MIN_WIDTH 21 + :EDIT_LIST_X 10 + :EDIT_LIST_Y 50 + :EDIT_STATS_X 30 + :EDIT_LIST_MIN_WIDTH 64 + :EDIT_PICK_X 30 ) + ) + +(deftype anim-tester (process-drawable) + ((flags int32 :offset-assert 176) + (obj-list glst-list :inline :offset-assert 180) + (current-obj string :offset-assert 196) + (speed int32 :offset-assert 200) + (list-con list-control :inline :offset-assert 204) + (pick-con list-control :inline :offset-assert 284) + (item-field int64 :offset-assert 368) + (inc-delay int32 :offset-assert 376) + (inc-timer int32 :offset-assert 380) + (edit-mode int32 :offset-assert 384) + (old-mode int32 :offset-assert 388) + (anim-speed float :offset-assert 392) + (anim-gspeed float :offset-assert 396) + (anim-first float :offset-assert 400) + (anim-last float :offset-assert 404) + ) + :heap-base #x130 :method-count-assert 20 :size-assert #x198 - :heap-base #x130 :flag-assert #x1401300198 ) -(define-extern *anim-tester* (pointer anim-tester)) -;; TODO temporary. -(set! *anim-tester* #f) \ No newline at end of file +(defun anim-tester-num-print ((arg0 basic) (arg1 float)) + (cond + ((= arg1 (-> (new 'static 'array float 1 -2.0) 0)) + (format arg0 "max") + ) + ((= arg1 (-> (new 'static 'array float 1 -1.0) 0)) + (format arg0 "min") + ) + (else + (format arg0 "~f" arg1) + ) + ) + (none) + ) + +(define-perm *anim-tester* (pointer anim-tester) #f) + +(deftype anim-test-obj (glst-named-node) + ((obj-art-group art-group :offset-assert 12) + (seq-list glst-list :inline :offset-assert 16) + (flags int32 :offset-assert 32) + (mesh-geo merc-ctrl :offset-assert 36) + (joint-geo art-joint-geo :offset-assert 40) + (list-con list-control :inline :offset-assert 44) + (parent uint32 :offset-assert 124) + (anim-index int32 :offset-assert 128) + (anim-hindex int32 :offset-assert 132) + (seq-index int32 :offset-assert 136) + (seq-hindex int32 :offset-assert 140) + ) + :method-count-assert 9 + :size-assert #x90 + :flag-assert #x900000090 + (:methods + (new (symbol type int string basic) _type_ 0) + ) + ) + + +(defun anim-test-obj-init ((arg0 anim-test-obj) (arg1 list-control)) + (set! (-> arg0 mesh-geo) #f) + (set! (-> arg0 joint-geo) #f) + (set! (-> arg0 list-con listfunc) anim-test-anim-list-handler) + (set! (-> arg0 list-con left) (-> *ANIM_TESTER-bank* ANIM_LIST_X)) + (set! (-> arg0 list-con top) (-> *ANIM_TESTER-bank* ANIM_LIST_Y)) + (set! (-> arg0 list-con list) (-> arg0 seq-list)) + (set! (-> arg0 list-con list-owner) (the-as uint arg0)) + (let ((v1-6 arg1)) + (set! (-> arg0 parent) (the-as uint (if v1-6 + (-> v1-6 the-node) + ) + ) + ) + ) + (none) + ) + +(defmethod + new + anim-test-obj + ((allocation symbol) + (type-to-make type) + (arg0 int) + (arg1 string) + (arg2 basic) + ) + (let ((t9-0 (method-of-type structure new)) + (v1-1 type-to-make) + ) + (-> type-to-make size) + (let ((s4-0 (the-as anim-test-obj (t9-0 allocation v1-1)))) + (set! (-> s4-0 obj-art-group) (the-as art-group arg2)) + (set! (-> s4-0 privname) arg1) + (glst-init-list! (-> s4-0 seq-list)) + s4-0 + ) + ) + ) + +(deftype anim-test-sequence (glst-named-node) + ((item-list glst-list :inline :offset-assert 12) + (playing-item int32 :offset-assert 28) + (flags int32 :offset-assert 32) + (list-con list-control :inline :offset-assert 36) + (parent anim-test-obj :offset-assert 116) + ) + :method-count-assert 9 + :size-assert #x78 + :flag-assert #x900000078 + (:methods + (new (symbol type int string) _type_ 0) + ) + ) + + +(defun anim-test-sequence-init ((arg0 anim-test-sequence) (arg1 anim-test-obj)) + (set! (-> arg0 list-con listfunc) anim-test-edit-sequence-list-handler) + (set! (-> arg0 list-con left) (-> *ANIM_TESTER-bank* EDIT_LIST_X)) + (set! (-> arg0 list-con top) (-> *ANIM_TESTER-bank* EDIT_LIST_Y)) + (set! (-> arg0 list-con list) (-> arg0 item-list)) + (set! (-> arg0 list-con list-owner) (the-as uint arg0)) + (set! (-> arg0 parent) arg1) + (none) + ) + +(defmethod + new + anim-test-sequence + ((allocation symbol) (type-to-make type) (arg0 int) (arg1 string)) + (let ((t9-0 (method-of-type structure new)) + (v1-1 type-to-make) + ) + (-> type-to-make size) + (let ((s5-0 (the-as anim-test-sequence (t9-0 allocation v1-1)))) + (set! (-> s5-0 privname) arg1) + (glst-init-list! (-> s5-0 item-list)) + s5-0 + ) + ) + ) + +(deftype anim-test-seq-item (glst-named-node) + ((speed int32 :offset-assert 12) + (blend int32 :offset-assert 16) + (first-frame float :offset-assert 20) + (last-frame float :offset-assert 24) + (num-frames float :offset-assert 28) + (artist-base float :offset-assert 32) + (flags int32 :offset-assert 36) + (parent anim-test-sequence :offset-assert 40) + ) + :method-count-assert 9 + :size-assert #x2c + :flag-assert #x90000002c + (:methods + (new (symbol type int string) _type_ 0) + ) + ) + + +(defmethod + new + anim-test-seq-item + ((allocation symbol) (type-to-make type) (arg0 int) (arg1 string)) + (let ((t9-0 (method-of-type structure new)) + (v1-1 type-to-make) + ) + (-> type-to-make size) + (let ((v0-0 (t9-0 allocation v1-1))) + (set! (-> (the-as anim-test-seq-item v0-0) privname) arg1) + (set! (-> (the-as anim-test-seq-item v0-0) speed) 100) + (set! (-> (the-as anim-test-seq-item v0-0) blend) 0) + (set! + (-> (the-as anim-test-seq-item v0-0) first-frame) + (-> (new 'static 'array float 1 -1.0) 0) + ) + (set! + (-> (the-as anim-test-seq-item v0-0) last-frame) + (-> (new 'static 'array float 1 -2.0) 0) + ) + (the-as anim-test-seq-item v0-0) + ) + ) + ) + +(defun + anim-test-seq-item-copy! + ((arg0 anim-test-seq-item) (arg1 anim-test-seq-item)) + (let ((v1-0 arg0)) + (set! (-> v1-0 privname) (-> arg1 privname)) + ) + (set! (-> arg0 speed) (-> arg1 speed)) + (set! (-> arg0 blend) (-> arg1 blend)) + (set! (-> arg0 first-frame) (-> arg1 first-frame)) + (set! (-> arg0 last-frame) (-> arg1 last-frame)) + (set! (-> arg0 num-frames) (-> arg1 num-frames)) + (set! (-> arg0 artist-base) (-> arg1 artist-base)) + (set! (-> arg0 flags) (-> arg1 flags)) + (let ((v0-0 (-> arg1 parent))) + (set! (-> arg0 parent) v0-0) + v0-0 + ) + ) + + +(defun anim-test-obj-item-valid? ((arg0 anim-test-obj) (arg1 anim-test-seq-item)) + (let ((v1-0 (-> arg0 seq-list))) + "return the start of the list" + (let ((s5-0 (the-as anim-test-sequence (-> v1-0 head)))) + (while (let ((v1-13 s5-0)) + "is this node the end of the list. #t = end" + (not (not (-> v1-13 next))) + ) + (when + (and + (logtest? (-> s5-0 flags) 2) + (name= (-> arg1 privname) (-> s5-0 privname)) + ) + (let ((v1-7 (-> s5-0 item-list))) + "return the start of the list" + (let* ((v1-8 (the-as anim-test-seq-item (-> v1-7 head))) + (a0-4 v1-8) + ) + "is this node the end of the list. #t = end" + (when (not (not (-> a0-4 next))) + (set! (-> arg1 num-frames) (-> v1-8 num-frames)) + (set! (-> arg1 artist-base) (-> v1-8 artist-base)) + ) + ) + ) + (return #t) + ) + "return the next node in the list" + (set! s5-0 (the-as anim-test-sequence (-> s5-0 next))) + ) + ) + ) + #f + ) + +(defun anim-test-obj-remove-invalid ((arg0 anim-test-obj)) + (local-vars (v1-19 symbol)) + (let ((v1-0 (-> arg0 seq-list))) + "return the start of the list" + (let ((s5-0 (-> v1-0 head))) + (while (let ((v1-25 (the-as anim-test-sequence s5-0))) + "is this node the end of the list. #t = end" + (not (not (-> v1-25 next))) + ) + (let ((v1-1 (the-as anim-test-sequence s5-0))) + "return the next node in the list" + (let ((s4-0 (-> v1-1 next))) + (when (zero? (logand (-> (the-as anim-test-sequence s5-0) flags) 2)) + (let ((v1-5 (-> (the-as anim-test-sequence s5-0) item-list))) + "return the start of the list" + (let ((s3-0 (the-as anim-test-seq-item (-> v1-5 head)))) + (while (let ((v1-13 s3-0)) + "is this node the end of the list. #t = end" + (not (not (-> v1-13 next))) + ) + (let ((v1-6 s3-0)) + "return the next node in the list" + (let ((s2-0 (the-as anim-test-seq-item (-> v1-6 next)))) + (if + (and + (zero? (logand (-> s3-0 flags) 1)) + (not (anim-test-obj-item-valid? arg0 s3-0)) + ) + (glst-remove (-> (the-as anim-test-sequence s5-0) item-list) s3-0) + ) + (set! s3-0 s2-0) + ) + ) + ) + ) + ) + ) + (let ((v1-18 (-> (the-as anim-test-sequence s5-0) item-list))) + "is the list empty, #t = empty" + (if + (or + (= (-> v1-18 tailpred) v1-18) + (and + (= + (glst-num-elements (-> (the-as anim-test-sequence s5-0) item-list)) + 1 + ) + (begin + (let ((v1-21 #t) + (a0-13 (-> (the-as anim-test-sequence s5-0) item-list)) + ) + "return the start of the list" + (let + ((a0-16 + (the-as + int + (logand + (-> (the-as anim-test-seq-item (-> a0-13 head)) flags) + 1 + ) + ) + ) + ) + (cmove-#f-zero v1-19 a0-16 v1-21) + ) + ) + v1-19 + ) + ) + ) + (glst-remove (-> arg0 seq-list) (the-as anim-test-sequence s5-0)) + ) + ) + (set! s5-0 (the-as anim-test-sequence s4-0)) + ) + ) + ) + ) + ) + (let ((v1-30 (-> arg0 seq-list))) + "return the start of the list" + (let ((v1-31 (the-as anim-test-sequence (-> v1-30 head)))) + (while (let ((a0-23 v1-31)) + "is this node the end of the list. #t = end" + (not (not (-> a0-23 next))) + ) + (let ((a0-20 v1-31)) + "return the next node in the list" + (let ((a0-21 (-> a0-20 next))) + (set! (-> v1-31 flags) (logand -3 (-> v1-31 flags))) + (set! v1-31 (the-as anim-test-sequence a0-21)) + ) + ) + ) + ) + ) + #f + ) + +(defbehavior anim-tester-real-post anim-tester () + (when (logtest? (-> self flags) 1) + (if (logtest? (-> self flags) 32) + (vector-v+! (-> self root trans) (-> self root trans) (-> self root transv)) + ) + (ja-post) + (when (logtest? (-> self flags) 16) + (draw-joint-spheres self) + (dummy-10 (-> self skel) (the-as symbol *stdcon*)) + ) + ) + (none) + ) + +(defbehavior anim-tester-post anim-tester () + (anim-tester-real-post) + (none) + ) + +(defbehavior anim-tester-update-anim-info anim-tester ((arg0 anim-test-seq-item)) + (set! (-> self anim-first) (-> arg0 first-frame)) + (set! (-> self anim-last) (-> arg0 last-frame)) + (set! + (-> self anim-gspeed) + (* (-> (new 'static 'array float 1 0.01) 0) (the float (-> self speed))) + ) + (set! + (-> self anim-speed) + (* + (-> (new 'static 'array float 1 0.01) 0) + (-> self anim-gspeed) + (the float (-> arg0 speed)) + ) + ) + (when (< (-> self anim-speed) 0.0) + (set! (-> self anim-first) (-> arg0 last-frame)) + (set! (-> self anim-last) (-> arg0 first-frame)) + ) + (set! (-> self anim-gspeed) (fabs (-> self anim-gspeed))) + (let ((f0-13 (fabs (-> self anim-speed)))) + (set! (-> self anim-speed) f0-13) + f0-13 + ) + ) + +(defbehavior anim-tester-reset anim-tester () + (let ((v1-0 (-> self obj-list))) + "is the list empty, #t = empty" + (cond + ((= (-> v1-0 tailpred) v1-0) + (set! (-> self list-con current-index) 0) + (set! (-> self current-obj) "") + ) + (else + (let + ((v1-1 + (the-as + anim-test-obj + (glst-find-node-by-name (-> self obj-list) (-> self current-obj)) + ) + ) + ) + (when (not v1-1) + (if + (>= + (-> self list-con current-index) + (glst-num-elements (-> self obj-list)) + ) + (set! + (-> self list-con current-index) + (+ (glst-num-elements (-> self obj-list)) -1) + ) + ) + (set! + v1-1 + (the-as + anim-test-obj + (glst-get-node-by-index + (-> self obj-list) + (-> self list-con current-index) + ) + ) + ) + (set! (-> self current-obj) (-> v1-1 privname)) + ) + (cond + ((or (not (-> v1-1 joint-geo)) (not (-> v1-1 mesh-geo))) + (format #t "what's this? ~A~%" (-> v1-1 privname)) + (format #t "it's missing a joint-geo, or a mesh-geo or a mesh-anim~%") + ) + (else + (let ((a0-15 (-> v1-1 joint-geo))) + (let ((a1-4 (-> v1-1 mesh-geo))) + (set! (-> self draw art-group) (-> v1-1 obj-art-group)) + (set! (-> self draw cur-lod) -1) + (set! (-> self draw jgeo) a0-15) + (set! + (-> self draw sink-group) + (-> *level* level-default foreground-sink-group 1) + ) + (set! (-> self draw lod-set lod 0 geo) a1-4) + ) + (set! + (-> self draw lod-set lod 0 dist) + (-> (new 'static 'array float 1 4095996000.0) 0) + ) + (set! + (-> self draw bounds w) + (-> (new 'static 'array float 1 40960.0) 0) + ) + (set! (-> self draw data-format) (the-as uint 1)) + (let + ((v1-16 (-> (new 'static 'vector :x 1.0 :y 1.0 :z 1.0 :w 1.0) quad))) + (set! (-> self draw color-mult quad) v1-16) + ) + (let ((v1-18 (-> (new 'static 'vector) quad))) + (set! (-> self draw color-emissive quad) v1-18) + ) + (set! (-> self draw secondary-interp) 0.0) + (set! (-> self draw shadow) #f) + (set! (-> self draw shadow-ctrl) #f) + (set! (-> self draw ripple) #f) + (set! (-> self draw level-index) (the-as uint 2)) + (set! + (-> self node-list) + (the-as + cspace-array + (make-nodes-from-jg a0-15 *default-skel-template* 'debug) + ) + ) + ) + (set! (-> self skel effect) (new 'process 'effect-control self)) + (fill-skeleton-cache self) + (dummy-10 (-> self draw) 0) + (ja-channel-set! 0) + (ja-post) + ) + ) + ) + ) + ) + ) + (none) + ) + +(defun + anim-tester-disp-frame-num + ((arg0 string) (arg1 float) (arg2 float) (arg3 font-context)) + (local-vars (sv-16 (function _varargs_ object))) + (let* ((s3-0 (-> *display* frames (-> *display* on-screen) frame debug-buf)) + (gp-0 (-> s3-0 base)) + ) + (cond + ((= arg1 (-> (new 'static 'array float 1 -1.0) 0)) + (let ((s2-1 draw-string-adv)) + (format (clear *temp-string*) "~Smin" arg0) + (s2-1 *temp-string* s3-0 arg3) + ) + ) + ((= arg1 (-> (new 'static 'array float 1 -2.0) 0)) + (let ((s2-2 draw-string-adv)) + (format (clear *temp-string*) "~Smax" arg0) + (s2-2 *temp-string* s3-0 arg3) + ) + ) + (else + (let ((s0-0 draw-string-adv)) + (set! sv-16 format) + (let ((a0-11 (clear *temp-string*)) + (a1-5 "~S~3,,0f") + (a2-5 arg0) + (a3-1 (+ arg1 arg2)) + ) + (sv-16 a0-11 a1-5 a2-5 a3-1) + ) + (s0-0 *temp-string* s3-0 arg3) + ) + ) + ) + (let ((a3-2 (-> s3-0 base))) + (let ((v1-6 (the-as object (-> s3-0 base)))) + (set! + (-> (the-as dma-packet v1-6) dma) + (new 'static 'dma-tag :id (dma-tag-id next)) + ) + (set! (-> (the-as dma-packet v1-6) vif0) (new 'static 'vif-tag)) + (set! (-> (the-as dma-packet v1-6) vif1) (new 'static 'vif-tag)) + (set! (-> s3-0 base) (&+ (the-as pointer v1-6) 16)) + ) + (dma-bucket-insert-tag + (-> *display* frames (-> *display* on-screen) frame bucket-group) + (bucket-id debug-draw0) + gp-0 + (the-as (pointer dma-tag) a3-2) + ) + ) + ) + ) + +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? +(defbehavior + anim-tester-standard-event-handler anim-tester + ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (cond + ((= v1-0 'reset) + (process-disconnect self) + (set! (-> self flags) (logand -2 (-> self flags))) + (when (!= (-> *anim-tester* 0 edit-mode) 1) + (set! (-> *debug-menu-context* is-hidden) #f) + (set! (-> *anim-tester* 0 edit-mode) 0) + (set! *camera-read-buttons* #t) + ) + (anim-tester-reset) + (go anim-tester-process) + ) + ((= v1-0 'change-anim) + (go anim-tester-process) + ) + ((= v1-0 'pick-object) + (set! (-> self edit-mode) 1) + (set! *camera-read-buttons* #f) + #f + ) + ((= v1-0 'pick-joint-anim) + (set! (-> self edit-mode) 2) + (set! *camera-read-buttons* #f) + #f + ) + ((= v1-0 'pick-sequence) + (set! (-> self edit-mode) 3) + (set! *camera-read-buttons* #f) + #f + ) + ((= v1-0 'edit-sequence) + (set! (-> self edit-mode) 4) + (set! *camera-read-buttons* #f) + #f + ) + ((= v1-0 'save-sequences) + (anim-tester-save-all-objects self) + ) + ) + ) + ) + ) + +(defun anim-test-obj-list-handler ((arg0 int) (arg1 list-control)) + (with-pp + (let ((s5-0 (-> arg1 the-node)) + (v1-0 arg0) + ) + (cond + ((zero? v1-0) + (let* + ((s3-0 (-> *display* frames (-> *display* on-screen) frame debug-buf)) + (s4-0 (-> s3-0 base)) + ) + (let ((s2-0 draw-string-xy)) + (format + (clear *temp-string*) + "~S~S~S" + (if (= (-> arg1 the-index) (-> arg1 highlight-index)) + ">" + " " + ) + (if (logtest? (-> (the-as anim-test-obj s5-0) flags) 1) + "*" + " " + ) + (-> (the-as anim-test-obj s5-0) privname) + ) + (s2-0 + *temp-string* + s3-0 + (-> arg1 xpos) + (-> arg1 ypos) + (the-as font-color (if (= (-> arg1 the-index) (-> arg1 current-index)) + 15 + 12 + ) + ) + (font-flags shadow kerning) + ) + ) + (let ((a3-2 (-> s3-0 base))) + (let ((v1-8 (the-as object (-> s3-0 base)))) + (set! + (-> (the-as dma-packet v1-8) dma) + (new 'static 'dma-tag :id (dma-tag-id next)) + ) + (set! (-> (the-as dma-packet v1-8) vif0) (new 'static 'vif-tag)) + (set! (-> (the-as dma-packet v1-8) vif1) (new 'static 'vif-tag)) + (set! (-> s3-0 base) (&+ (the-as pointer v1-8) 16)) + ) + (dma-bucket-insert-tag + (-> *display* frames (-> *display* on-screen) frame bucket-group) + (bucket-id debug-draw0) + s4-0 + (the-as (pointer dma-tag) a3-2) + ) + ) + ) + ) + ((= v1-0 1) + (return #t) + ) + ((= v1-0 4) + (cond + ((logtest? (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons up)) + (if (> (-> arg1 highlight-index) 0) + (+! (-> arg1 highlight-index) -1) + ) + ) + ((logtest? (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons down)) + (if (< (-> arg1 highlight-index) (glst-num-elements (-> arg1 list))) + (+! (-> arg1 highlight-index) 1) + ) + ) + ((logtest? (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons x)) + (let ((v1-38 (the-as object (-> arg1 list-owner)))) + (set! (-> arg1 current-index) (-> arg1 the-index)) + (set! + (-> (the-as anim-tester v1-38) current-obj) + (-> (the-as anim-test-obj s5-0) privname) + ) + ) + (let ((a1-4 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-4 from) pp) + (set! (-> a1-4 num-params) 1) + (set! (-> a1-4 message) 'reset) + (set! (-> a1-4 param 0) (the-as uint #f)) + (send-event-function (ppointer->process *anim-tester*) a1-4) + ) + ) + ((logtest? (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons square)) + (logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons square)) + (logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons square)) + (set! (-> *debug-menu-context* is-hidden) #f) + (set! (-> *anim-tester* 0 edit-mode) 0) + (set! *camera-read-buttons* #t) + (logior! (-> *anim-tester* 0 flags) 4) + ) + ) + ) + ((= v1-0 2) + (let ((v1-64 (+ (length (-> (the-as anim-test-obj s5-0) privname)) 2))) + (set! v1-64 (cond + ((< (-> *ANIM_TESTER-bank* OBJECT_LIST_MIN_WIDTH) v1-64) + (empty) + v1-64 + ) + (else + (-> *ANIM_TESTER-bank* OBJECT_LIST_MIN_WIDTH) + ) + ) + ) + (set! (-> arg1 return-int) v1-64) + ) + ) + ((= v1-0 3) + (let* + ((s4-1 (-> *display* frames (-> *display* on-screen) frame debug-buf)) + (s5-2 (-> s4-1 base)) + ) + (draw-string-xy + "----pick-object---" + s4-1 + (-> arg1 xpos) + (-> arg1 ypos) + (font-color dim-white) + (font-flags shadow kerning) + ) + (let ((a3-4 (-> s4-1 base))) + (let ((v1-70 (the-as object (-> s4-1 base)))) + (set! + (-> (the-as dma-packet v1-70) dma) + (new 'static 'dma-tag :id (dma-tag-id next)) + ) + (set! (-> (the-as dma-packet v1-70) vif0) (new 'static 'vif-tag)) + (set! (-> (the-as dma-packet v1-70) vif1) (new 'static 'vif-tag)) + (set! (-> s4-1 base) (&+ (the-as pointer v1-70) 16)) + ) + (dma-bucket-insert-tag + (-> *display* frames (-> *display* on-screen) frame bucket-group) + (bucket-id debug-draw0) + s5-2 + (the-as (pointer dma-tag) a3-4) + ) + ) + ) + ) + ) + ) + #f + ) + ) + +(defun anim-test-anim-list-handler ((arg0 int) (arg1 list-control)) + (with-pp + (let* ((s5-0 (the-as anim-test-obj (-> arg1 the-node))) + (v1-0 (the-as object (-> s5-0 list-con user-info-u))) + ) + (cond + ((zero? arg0) + (let* + ((s3-0 (-> *display* frames (-> *display* on-screen) frame debug-buf)) + (s4-0 (-> s3-0 base)) + ) + (let ((s2-0 draw-string-xy)) + (format + (clear *temp-string*) + "~S~S" + (if (= (-> arg1 the-index) (-> arg1 highlight-index)) + "> " + " " + ) + (-> s5-0 privname) + ) + (s2-0 + *temp-string* + s3-0 + (-> arg1 xpos) + (-> arg1 ypos) + (the-as font-color (if (= (-> arg1 the-index) (-> arg1 current-index)) + 15 + 12 + ) + ) + (font-flags shadow kerning) + ) + ) + (let ((a3-2 (-> s3-0 base))) + (let ((v1-6 (the-as object (-> s3-0 base)))) + (set! + (-> (the-as dma-packet v1-6) dma) + (new 'static 'dma-tag :id (dma-tag-id next)) + ) + (set! (-> (the-as dma-packet v1-6) vif0) (new 'static 'vif-tag)) + (set! (-> (the-as dma-packet v1-6) vif1) (new 'static 'vif-tag)) + (set! (-> s3-0 base) (&+ (the-as pointer v1-6) 16)) + ) + (dma-bucket-insert-tag + (-> *display* frames (-> *display* on-screen) frame bucket-group) + (bucket-id debug-draw0) + s4-0 + (the-as (pointer dma-tag) a3-2) + ) + ) + ) + ) + ((= arg0 1) + (return (zero? (logand (-> s5-0 flags) 1))) + ) + ((= arg0 4) + (cond + ((logtest? (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons up)) + (let ((v1-15 (-> arg1 list))) + "is the list empty, #t = empty" + (when (not (= (-> v1-15 tailpred) v1-15)) + (let + ((v1-17 + (glst-get-node-by-index (-> arg1 list) (-> arg1 highlight-index)) + ) + ) + (while #t + "return the previous node in the list" + (set! v1-17 (-> (the-as anim-test-obj v1-17) prev)) + (let ((a0-23 (the-as anim-test-obj v1-17))) + "is this node the start of the list. #t = start" + (if (not (-> a0-23 prev)) + (goto cfg-25) + ) + ) + (when (zero? (logand (-> (the-as anim-test-obj v1-17) flags) 1)) + (set! + (-> arg1 highlight-index) + (glst-get-node-index (-> arg1 list) (the-as anim-test-obj v1-17)) + ) + (goto cfg-25) + ) + ) + ) + ) + ) + (label cfg-25) + ) + ((logtest? (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons down)) + (let ((v1-21 (-> arg1 list))) + "is the list empty, #t = empty" + (when (not (= (-> v1-21 tailpred) v1-21)) + (let + ((v1-23 + (glst-get-node-by-index (-> arg1 list) (-> arg1 highlight-index)) + ) + ) + (while #t + "return the next node in the list" + (set! v1-23 (-> (the-as anim-test-obj v1-23) next)) + (let ((a0-40 (the-as anim-test-obj v1-23))) + "is this node the end of the list. #t = end" + (if (not (-> a0-40 next)) + (goto cfg-39) + ) + ) + (when (zero? (logand (-> (the-as anim-test-obj v1-23) flags) 1)) + (set! + (-> arg1 highlight-index) + (glst-get-node-index (-> arg1 list) (the-as anim-test-obj v1-23)) + ) + (goto cfg-39) + ) + ) + ) + ) + ) + (label cfg-39) + ) + ((= (-> arg1 user-info) 1) + ) + (else + (cond + ((logtest? (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons x)) + (set! (-> arg1 current-index) (-> arg1 the-index)) + (set! + (-> (the-as anim-test-obj v1-0) anim-index) + (-> arg1 current-index) + ) + (set! + (-> (the-as anim-test-obj v1-0) anim-hindex) + (-> arg1 highlight-index) + ) + (set! + (-> (the-as anim-test-obj v1-0) flags) + (logand -3 (-> (the-as anim-test-obj v1-0) flags)) + ) + (let ((a1-17 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-17 from) pp) + (set! (-> a1-17 num-params) 1) + (set! (-> a1-17 message) 'change-anim) + (set! (-> a1-17 param 0) (the-as uint #f)) + (send-event-function (ppointer->process *anim-tester*) a1-17) + ) + ) + ((logtest? (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons square)) + (logclear! + (-> *cpad-list* cpads 0 button0-abs 0) + (pad-buttons square) + ) + (logclear! + (-> *cpad-list* cpads 0 button0-rel 0) + (pad-buttons square) + ) + (set! (-> *debug-menu-context* is-hidden) #f) + (set! (-> *anim-tester* 0 edit-mode) 0) + (set! *camera-read-buttons* #t) + (logior! (-> *anim-tester* 0 flags) 4) + ) + ) + ) + ) + ) + ((= arg0 2) + (let ((v1-55 (+ (length (-> s5-0 privname)) 2))) + (set! v1-55 (cond + ((< (-> *ANIM_TESTER-bank* ANIM_LIST_MIN_WIDTH) v1-55) + (empty) + v1-55 + ) + (else + (-> *ANIM_TESTER-bank* ANIM_LIST_MIN_WIDTH) + ) + ) + ) + (set! (-> arg1 return-int) v1-55) + ) + ) + ((= arg0 3) + (let* + ((s4-1 (-> *display* frames (-> *display* on-screen) frame debug-buf)) + (s5-1 (-> s4-1 base)) + ) + (draw-string-xy + "----pick-joint-anim----" + s4-1 + (-> arg1 xpos) + (-> arg1 ypos) + (font-color dim-white) + (font-flags shadow kerning) + ) + (let ((a3-4 (-> s4-1 base))) + (let ((v1-62 (the-as object (-> s4-1 base)))) + (set! + (-> (the-as dma-packet v1-62) dma) + (new 'static 'dma-tag :id (dma-tag-id next)) + ) + (set! (-> (the-as dma-packet v1-62) vif0) (new 'static 'vif-tag)) + (set! (-> (the-as dma-packet v1-62) vif1) (new 'static 'vif-tag)) + (set! (-> s4-1 base) (&+ (the-as pointer v1-62) 16)) + ) + (dma-bucket-insert-tag + (-> *display* frames (-> *display* on-screen) frame bucket-group) + (bucket-id debug-draw0) + s5-1 + (the-as (pointer dma-tag) a3-4) + ) + ) + ) + ) + ) + ) + #f + ) + ) + +(defun anim-test-sequence-list-handler ((arg0 int) (arg1 list-control)) + (with-pp + (let* ((s5-0 (the-as anim-test-sequence (-> arg1 the-node))) + (v1-0 (-> s5-0 parent)) + ) + (cond + ((zero? arg0) + (let* + ((s3-0 (-> *display* frames (-> *display* on-screen) frame debug-buf)) + (s4-0 (-> s3-0 base)) + ) + (let ((s2-0 draw-string-xy)) + (format + (clear *temp-string*) + "~S~S~S" + (if (= (-> arg1 the-index) (-> arg1 highlight-index)) + ">" + " " + ) + (if (logtest? (-> s5-0 flags) 4) + "*" + " " + ) + (-> s5-0 privname) + ) + (s2-0 + *temp-string* + s3-0 + (-> arg1 xpos) + (-> arg1 ypos) + (the-as font-color (if (= (-> arg1 the-index) (-> arg1 current-index)) + 15 + 12 + ) + ) + (font-flags shadow kerning) + ) + ) + (let ((a3-2 (-> s3-0 base))) + (let ((v1-8 (the-as object (-> s3-0 base)))) + (set! + (-> (the-as dma-packet v1-8) dma) + (new 'static 'dma-tag :id (dma-tag-id next)) + ) + (set! (-> (the-as dma-packet v1-8) vif0) (new 'static 'vif-tag)) + (set! (-> (the-as dma-packet v1-8) vif1) (new 'static 'vif-tag)) + (set! (-> s3-0 base) (&+ (the-as pointer v1-8) 16)) + ) + (dma-bucket-insert-tag + (-> *display* frames (-> *display* on-screen) frame bucket-group) + (bucket-id debug-draw0) + s4-0 + (the-as (pointer dma-tag) a3-2) + ) + ) + ) + ) + ((= arg0 1) + (return (logtest? (-> s5-0 flags) 1)) + ) + ((= arg0 4) + (cond + ((logtest? (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons up)) + (let ((v1-17 (-> arg1 list))) + "is the list empty, #t = empty" + (when (not (= (-> v1-17 tailpred) v1-17)) + (let + ((v1-19 + (glst-get-node-by-index (-> arg1 list) (-> arg1 highlight-index)) + ) + ) + (while #t + "return the previous node in the list" + (set! v1-19 (-> (the-as anim-test-sequence v1-19) prev)) + (let ((a0-24 (the-as anim-test-sequence v1-19))) + "is this node the start of the list. #t = start" + (if (not (-> a0-24 prev)) + (goto cfg-28) + ) + ) + (when (logtest? (-> (the-as anim-test-sequence v1-19) flags) 1) + (set! + (-> arg1 highlight-index) + (glst-get-node-index + (-> arg1 list) + (the-as anim-test-sequence v1-19) + ) + ) + (goto cfg-28) + ) + ) + ) + ) + ) + (label cfg-28) + ) + ((logtest? (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons down)) + (let ((v1-23 (-> arg1 list))) + "is the list empty, #t = empty" + (when (not (= (-> v1-23 tailpred) v1-23)) + (let + ((v1-25 + (glst-get-node-by-index (-> arg1 list) (-> arg1 highlight-index)) + ) + ) + (while #t + "return the next node in the list" + (set! v1-25 (-> (the-as anim-test-sequence v1-25) next)) + (let ((a0-42 (the-as anim-test-sequence v1-25))) + "is this node the end of the list. #t = end" + (if (not (-> a0-42 next)) + (goto cfg-42) + ) + ) + (when (logtest? (-> (the-as anim-test-sequence v1-25) flags) 1) + (set! + (-> arg1 highlight-index) + (glst-get-node-index + (-> arg1 list) + (the-as anim-test-sequence v1-25) + ) + ) + (goto cfg-42) + ) + ) + ) + ) + ) + (label cfg-42) + ) + ((logtest? (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons x)) + (set! (-> arg1 current-index) (-> arg1 the-index)) + (set! (-> v1-0 seq-index) (-> arg1 current-index)) + (set! (-> v1-0 seq-hindex) (-> arg1 highlight-index)) + (logior! (-> v1-0 flags) 2) + (set! (-> *anim-tester* 0 edit-mode) 4) + (let ((a1-15 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-15 from) pp) + (set! (-> a1-15 num-params) 1) + (set! (-> a1-15 message) 'change-anim) + (set! (-> a1-15 param 0) (the-as uint #f)) + (send-event-function (ppointer->process *anim-tester*) a1-15) + ) + ) + ((logtest? (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons square)) + (logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons square)) + (logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons square)) + (set! (-> *debug-menu-context* is-hidden) #f) + (set! (-> *anim-tester* 0 edit-mode) 0) + (set! *camera-read-buttons* #t) + (logior! (-> *anim-tester* 0 flags) 4) + ) + ) + ) + ((= arg0 2) + (let ((v1-57 (+ (length (-> s5-0 privname)) 2))) + (set! v1-57 (cond + ((< (-> *ANIM_TESTER-bank* PICK_LIST_MIN_WIDTH) v1-57) + (empty) + v1-57 + ) + (else + (-> *ANIM_TESTER-bank* PICK_LIST_MIN_WIDTH) + ) + ) + ) + (set! (-> arg1 return-int) v1-57) + ) + ) + ((= arg0 3) + (let* + ((s4-1 (-> *display* frames (-> *display* on-screen) frame debug-buf)) + (s5-1 (-> s4-1 base)) + ) + (draw-string-xy + "----pick-sequence---" + s4-1 + (-> arg1 xpos) + (-> arg1 ypos) + (font-color dim-white) + (font-flags shadow kerning) + ) + (let ((a3-4 (-> s4-1 base))) + (let ((v1-64 (the-as object (-> s4-1 base)))) + (set! + (-> (the-as dma-packet v1-64) dma) + (new 'static 'dma-tag :id (dma-tag-id next)) + ) + (set! (-> (the-as dma-packet v1-64) vif0) (new 'static 'vif-tag)) + (set! (-> (the-as dma-packet v1-64) vif1) (new 'static 'vif-tag)) + (set! (-> s4-1 base) (&+ (the-as pointer v1-64) 16)) + ) + (dma-bucket-insert-tag + (-> *display* frames (-> *display* on-screen) frame bucket-group) + (bucket-id debug-draw0) + s5-1 + (the-as (pointer dma-tag) a3-4) + ) + ) + ) + ) + ) + ) + #f + ) + ) + +(define + anim-test-field-highlight-lw + (new 'static 'inline-array list-field 12 + (new 'static 'list-field :left 2 :width 20) + (new 'static 'list-field :left 30 :width 4) + (new 'static 'list-field :left 35 :width 4) + (new 'static 'list-field :left 40 :width 3) + (new 'static 'list-field :left 44 :width 3) + (new 'static 'list-field :left 48 :width 1) + (new 'static 'list-field :left 49 :width 1) + (new 'static 'list-field :left 50 :width 1) + (new 'static 'list-field :left 51 :width 1) + (new 'static 'list-field :left 53 :width 1) + (new 'static 'list-field :left 54 :width 1) + (new 'static 'list-field :left 55 :width 1) + ) + ) + +(defun anim-tester-adjust-frame ((arg0 float) (arg1 float)) + (cond + ((logtest? (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons down)) + (cond + ((= arg0 (-> (new 'static 'array float 1 -2.0) 0)) + (set! arg0 (+ (-> (new 'static 'array float 1 -1.0) 0) arg1)) + ) + ((!= arg0 (-> (new 'static 'array float 1 -1.0) 0)) + (set! arg0 (+ (-> (new 'static 'array float 1 -1.0) 0) arg0)) + (if (< arg0 0.0) + (set! arg0 (-> (new 'static 'array float 1 -1.0) 0)) + ) + ) + ) + ) + ((logtest? (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons up)) + (cond + ((= arg0 (-> (new 'static 'array float 1 -1.0) 0)) + (set! arg0 (-> (new 'static 'array float 1 0.0) 0)) + ) + ((!= arg0 (-> (new 'static 'array float 1 -2.0) 0)) + (set! arg0 (+ (-> (new 'static 'array float 1 1.0) 0) arg0)) + (if (>= arg0 arg1) + (set! arg0 (-> (new 'static 'array float 1 -2.0) 0)) + ) + ) + ) + ) + ) + arg0 + ) + +(defun + anim-tester-pick-item-setup + ((arg0 anim-test-seq-item) (arg1 anim-test-sequence)) + (let ((gp-0 (-> arg1 parent))) + (set! (-> *anim-tester* 0 pick-con listfunc) anim-test-anim-list-handler) + (set! + (-> *anim-tester* 0 pick-con left) + (+ + (-> *ANIM_TESTER-bank* EDIT_LIST_X) + (* (-> *ANIM_TESTER-bank* EDIT_PICK_X) (-> *DISP_LIST-bank* CHAR_WIDTH)) + ) + ) + (set! (-> *anim-tester* 0 pick-con top) (-> *ANIM_TESTER-bank* EDIT_LIST_Y)) + (set! (-> *anim-tester* 0 pick-con list) (-> gp-0 seq-list)) + (set! (-> *anim-tester* 0 pick-con list-owner) (the-as uint gp-0)) + (set! (-> *anim-tester* 0 pick-con user-info) 1) + (let ((v1-10 (-> gp-0 seq-list))) + "return the start of the list" + (let ((v1-11 (-> v1-10 head))) + (while (let ((a1-16 v1-11)) + "is this node the end of the list. #t = end" + (not (not (-> a1-16 next))) + ) + "return the next node in the list" + (set! v1-11 (-> v1-11 next)) + ) + ) + ) + (let ((a1-20 (glst-find-node-by-name (-> gp-0 seq-list) (-> arg0 privname)))) + (when a1-20 + (set! + (-> *anim-tester* 0 pick-con highlight-index) + (glst-get-node-index (-> gp-0 seq-list) a1-20) + ) + (set! + (-> *anim-tester* 0 pick-con current-index) + (-> *anim-tester* 0 pick-con highlight-index) + ) + ) + ) + ) + (logior! (-> *anim-tester* 0 flags) 8) + (none) + ) + +(defun anim-test-seq-mark-as-edited ((arg0 anim-test-sequence)) + (logior! (-> arg0 parent flags) 1) + (logior! (-> arg0 flags) 1) + (none) + ) + +(defun + anim-test-edit-seq-insert-item + ((arg0 anim-test-seq-item) (arg1 anim-test-sequence)) + (with-pp + (let ((s4-0 (new 'debug 'anim-test-seq-item 1 ""))) + (anim-test-seq-item-copy! s4-0 arg0) + (when (logtest? (-> s4-0 flags) 1) + (set! (-> s4-0 flags) (logand -2 (-> s4-0 flags))) + (logior! (-> s4-0 flags) 4) + (let ((v1-8 s4-0)) + (set! (-> v1-8 privname) "--blank--") + ) + ) + (glst-insert-before (-> arg1 item-list) arg0 s4-0) + ) + (anim-test-seq-mark-as-edited arg1) + (let ((a1-4 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-4 from) pp) + (set! (-> a1-4 num-params) 0) + (set! (-> a1-4 message) 'change-anim) + (send-event-function (ppointer->process *anim-tester*) a1-4) + ) + (none) + ) + ) + +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? +(defun anim-test-edit-sequence-list-handler ((arg0 int) (arg1 list-control)) + (local-vars + (sv-192 (function string dma-buffer int int font-color font-flags none)) + (sv-208 (function _varargs_ object)) + ) + (with-pp + (let ((gp-0 (-> arg1 the-node)) + (s4-0 (the-as object (-> arg1 list-owner))) + (s2-0 + (and + (logtest? (-> *anim-tester* 0 flags) 8) + (zero? (-> *anim-tester* 0 item-field)) + ) + ) + ) + (cond + ((zero? arg0) + (let + ((s3-0 + (new + 'stack + 'font-context + *font-default-matrix* + (-> arg1 xpos) + (-> arg1 ypos) + (-> (new 'static 'array float 1 0.0) 0) + (the-as font-color (if (= (-> arg1 the-index) (-> arg1 current-index)) + 15 + 12 + ) + ) + (font-flags shadow kerning) + ) + ) + ) + (when (not s2-0) + (when (= (-> arg1 the-index) (-> arg1 highlight-index)) + (let* + ((a1-2 + (-> + anim-test-field-highlight-lw + (-> *anim-tester* 0 item-field) + left + ) + ) + (v1-24 + (-> + anim-test-field-highlight-lw + (-> *anim-tester* 0 item-field) + width + ) + ) + (s0-0 (-> *display* frames (-> *display* on-screen) frame debug-buf)) + (s1-0 (-> s0-0 base)) + ) + (draw-sprite2d-xy + s0-0 + (+ (* a1-2 (-> *DISP_LIST-bank* CHAR_WIDTH)) 2 (-> arg1 xpos)) + (+ (-> arg1 ypos) -1) + (+ (* v1-24 (-> *DISP_LIST-bank* CHAR_WIDTH)) 4) + (+ (-> *DISP_LIST-bank* TV_SPACING) 1) + (new 'static 'rgba :r #xc0 :g #xc0 :a #xff) + ) + (let ((a3-4 (-> s0-0 base))) + (let ((v1-29 (the-as object (-> s0-0 base)))) + (set! + (-> (the-as dma-packet v1-29) dma) + (new 'static 'dma-tag :id (dma-tag-id next)) + ) + (set! (-> (the-as dma-packet v1-29) vif0) (new 'static 'vif-tag)) + (set! (-> (the-as dma-packet v1-29) vif1) (new 'static 'vif-tag)) + (set! (-> s0-0 base) (&+ (the-as pointer v1-29) 16)) + ) + (dma-bucket-insert-tag + (-> *display* frames (-> *display* on-screen) frame bucket-group) + (bucket-id debug-draw0) + s1-0 + (the-as (pointer dma-tag) a3-4) + ) + ) + ) + ) + ) + (let* + ((s0-1 (-> *display* frames (-> *display* on-screen) frame debug-buf)) + (s1-1 (-> s0-1 base)) + ) + (set! sv-192 draw-string-xy) + (set! sv-208 format) + (let ((a0-18 (clear *temp-string*)) + (a1-7 "~S~S~-27S") + (a2-11 (if (= (-> arg1 the-index) (-> arg1 highlight-index)) + ">" + " " + ) + ) + (a3-6 + (if + (= + (-> arg1 the-index) + (-> (the-as anim-test-sequence s4-0) playing-item) + ) + "*" + " " + ) + ) + (t0-2 (-> (the-as anim-test-seq-item gp-0) privname)) + ) + (sv-208 a0-18 a1-7 a2-11 a3-6 t0-2) + ) + (let ((a0-19 *temp-string*) + (a1-8 s0-1) + (a2-12 (-> arg1 xpos)) + (a3-7 (-> arg1 ypos)) + (t0-4 (if (= (-> arg1 the-index) (-> arg1 current-index)) + 15 + 12 + ) + ) + (t1-2 3) + ) + (sv-192 + a0-19 + a1-8 + a2-12 + a3-7 + (the-as font-color t0-4) + (the-as font-flags t1-2) + ) + ) + (let ((a3-8 (-> s0-1 base))) + (let ((v1-44 (the-as object (-> s0-1 base)))) + (set! + (-> (the-as dma-packet v1-44) dma) + (new 'static 'dma-tag :id (dma-tag-id next)) + ) + (set! (-> (the-as dma-packet v1-44) vif0) (new 'static 'vif-tag)) + (set! (-> (the-as dma-packet v1-44) vif1) (new 'static 'vif-tag)) + (set! (-> s0-1 base) (&+ (the-as pointer v1-44) 16)) + ) + (dma-bucket-insert-tag + (-> *display* frames (-> *display* on-screen) frame bucket-group) + (bucket-id debug-draw0) + s1-1 + (the-as (pointer dma-tag) a3-8) + ) + ) + ) + (when (not s2-0) + (let* + ((s2-2 (-> *display* frames (-> *display* on-screen) frame debug-buf)) + (s4-1 (the-as anim-test-sequence (-> s2-2 base))) + ) + (when (zero? (logand (-> (the-as anim-test-seq-item gp-0) flags) 1)) + (let ((v1-57 s3-0) + (a1-13 + (+ + (-> arg1 xpos) + (* + (-> *ANIM_TESTER-bank* EDIT_STATS_X) + (-> *DISP_LIST-bank* CHAR_WIDTH) + ) + ) + ) + (a0-29 (-> arg1 ypos)) + ) + (set! (-> v1-57 origin x) (the float a1-13)) + (set! (-> v1-57 origin y) (the float a0-29)) + ) + (cond + ((and + (< (-> (the-as anim-test-seq-item gp-0) speed) 0) + (< -100 (-> (the-as anim-test-seq-item gp-0) speed)) + ) + (let ((s1-2 draw-string-adv)) + (let ((s0-2 format) + (a0-33 (clear *temp-string*)) + (a1-14 "-0.~1d") + (v1-61 (abs (-> (the-as anim-test-seq-item gp-0) speed))) + ) + (s0-2 a0-33 a1-14 (/ (mod v1-61 100) 10)) + ) + (s1-2 *temp-string* s2-2 s3-0) + ) + ) + (else + (let ((s1-3 draw-string-adv)) + (let ((s0-3 format) + (a0-36 (clear *temp-string*)) + (a1-16 "~2d.~1d") + (a2-21 (/ (-> (the-as anim-test-seq-item gp-0) speed) 100)) + (v1-64 (abs (-> (the-as anim-test-seq-item gp-0) speed))) + ) + (s0-3 a0-36 a1-16 a2-21 (/ (mod v1-64 100) 10)) + ) + (s1-3 *temp-string* s2-2 s3-0) + ) + ) + ) + (let ((s1-4 draw-string-adv)) + (format + (clear *temp-string*) + " ~4d" + (-> (the-as anim-test-seq-item gp-0) blend) + ) + (s1-4 *temp-string* s2-2 s3-0) + ) + (anim-tester-disp-frame-num + " " + (-> (the-as anim-test-seq-item gp-0) first-frame) + (-> (the-as anim-test-seq-item gp-0) artist-base) + s3-0 + ) + (anim-tester-disp-frame-num + " " + (-> (the-as anim-test-seq-item gp-0) last-frame) + (-> (the-as anim-test-seq-item gp-0) artist-base) + s3-0 + ) + (let ((s1-5 draw-string-adv)) + (format + (clear *temp-string*) + " ~S~S~S~S" + (if (logtest? (-> (the-as anim-test-seq-item gp-0) flags) 2) + "B" + "-" + ) + "-" + "-" + "-" + ) + (s1-5 *temp-string* s2-2 s3-0) + ) + ) + (let* ((a1-24 (-> anim-test-field-highlight-lw 9 left)) + (v1-69 s3-0) + (a1-26 + (+ (-> arg1 xpos) (* a1-24 (-> *DISP_LIST-bank* CHAR_WIDTH))) + ) + (a0-47 (-> arg1 ypos)) + ) + (set! (-> v1-69 origin x) (the float a1-26)) + (set! (-> v1-69 origin y) (the float a0-47)) + ) + (draw-string-adv "MID" s2-2 s3-0) + (let ((a3-15 (-> s2-2 base))) + (let ((v1-70 (the-as object (-> s2-2 base)))) + (set! + (-> (the-as dma-packet v1-70) dma) + (new 'static 'dma-tag :id (dma-tag-id next)) + ) + (set! (-> (the-as dma-packet v1-70) vif0) (new 'static 'vif-tag)) + (set! (-> (the-as dma-packet v1-70) vif1) (new 'static 'vif-tag)) + (set! (-> s2-2 base) (&+ (the-as pointer v1-70) 16)) + ) + (dma-bucket-insert-tag + (-> *display* frames (-> *display* on-screen) frame bucket-group) + (bucket-id debug-draw0) + (the-as pointer s4-1) + (the-as (pointer dma-tag) a3-15) + ) + ) + ) + ) + ) + ) + ((= arg0 1) + (return #t) + ) + ((= arg0 4) + (cond + ((logtest? (-> *anim-tester* 0 flags) 8) + (let ((v1-88 (-> *anim-tester* 0 item-field))) + (cond + ((zero? v1-88) + (cond + ((logtest? (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons x)) + (set! + (-> *anim-tester* 0 flags) + (logand -9 (-> *anim-tester* 0 flags)) + ) + (let + ((v0-24 + (the-as + anim-test-obj + (glst-get-node-by-index + (-> *anim-tester* 0 pick-con list) + (-> *anim-tester* 0 pick-con highlight-index) + ) + ) + ) + ) + (when (and v0-24 (let ((v1-101 (&-> v0-24 obj-art-group))) + "is the list empty, #t = empty" + (not (= (-> v1-101 2) v1-101)) + ) + ) + (let ((v1-103 (&-> v0-24 obj-art-group))) + "return the start of the list" + (let ((a1-30 (-> v1-103 0))) + (anim-test-seq-item-copy! + (the-as anim-test-seq-item gp-0) + (the-as anim-test-seq-item a1-30) + ) + ) + ) + (anim-test-seq-mark-as-edited (the-as anim-test-sequence s4-0)) + ) + ) + ) + ((logtest? + (-> *cpad-list* cpads 0 button0-rel 0) + (pad-buttons square) + ) + (set! + (-> *anim-tester* 0 flags) + (logand -9 (-> *anim-tester* 0 flags)) + ) + ) + ) + ) + ((= v1-88 9) + (cond + ((zero? + (logand (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons x)) + ) + (set! + (-> *anim-tester* 0 flags) + (logand -9 (-> *anim-tester* 0 flags)) + ) + ) + ((logtest? (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons up)) + (let ((v1-124 (the-as anim-test-seq-item gp-0))) + "return the previous node in the list" + (let* ((s3-1 (-> v1-124 prev)) + (v1-125 s3-1) + ) + "is this node the start of the list. #t = start" + (when (not (not (-> v1-125 prev))) + (glst-remove + (-> (the-as anim-test-sequence s4-0) item-list) + (the-as anim-test-seq-item gp-0) + ) + (glst-insert-before + (-> (the-as anim-test-sequence s4-0) item-list) + s3-1 + (the-as anim-test-seq-item gp-0) + ) + (+! (-> arg1 current-index) -1) + (+! (-> arg1 highlight-index) -1) + (anim-test-seq-mark-as-edited (the-as anim-test-sequence s4-0)) + (let ((a1-33 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-33 from) pp) + (set! (-> a1-33 num-params) 0) + (set! (-> a1-33 message) 'change-anim) + (send-event-function (ppointer->process *anim-tester*) a1-33) + ) + ) + ) + ) + ) + ((logtest? + (-> *cpad-list* cpads 0 button0-rel 0) + (pad-buttons down) + ) + (let ((v1-142 (the-as anim-test-seq-item gp-0))) + "return the next node in the list" + (let* ((s3-2 (the-as anim-test-seq-item (-> v1-142 next))) + (v1-143 s3-2) + ) + "is this node the end of the list. #t = end" + (when + (and + (not (not (-> v1-143 next))) + (zero? (logand (-> s3-2 flags) 1)) + ) + (glst-remove + (-> (the-as anim-test-sequence s4-0) item-list) + (the-as anim-test-seq-item gp-0) + ) + (glst-insert-after + (-> (the-as anim-test-sequence s4-0) item-list) + s3-2 + (the-as anim-test-seq-item gp-0) + ) + (+! (-> arg1 current-index) 1) + (+! (-> arg1 highlight-index) 1) + (anim-test-seq-mark-as-edited (the-as anim-test-sequence s4-0)) + (let ((a1-36 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-36 from) pp) + (set! (-> a1-36 num-params) 0) + (set! (-> a1-36 message) 'change-anim) + (send-event-function (ppointer->process *anim-tester*) a1-36) + ) + ) + ) + ) + ) + ) + ) + ((or (= v1-88 1) (= v1-88 2) (= v1-88 3) (= v1-88 4)) + (cond + ((zero? + (logand (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons x)) + ) + (set! + (-> *anim-tester* 0 flags) + (logand -9 (-> *anim-tester* 0 flags)) + ) + ) + ((begin + (set! (-> arg1 current-index) (-> arg1 the-index)) + (<= (-> *anim-tester* 0 inc-timer) 0) + ) + (if (> (-> *anim-tester* 0 inc-delay) 0) + (+! (-> *anim-tester* 0 inc-delay) -1) + ) + (set! + (-> *anim-tester* 0 inc-timer) + (-> *anim-tester* 0 inc-delay) + ) + (case (-> *anim-tester* 0 item-field) + ((1) + (cond + ((logtest? + (-> *cpad-list* cpads 0 button0-abs 0) + (pad-buttons down) + ) + (+! (-> (the-as anim-test-seq-item gp-0) speed) -10) + (anim-test-seq-mark-as-edited + (the-as anim-test-sequence s4-0) + ) + (if (< (-> (the-as anim-test-seq-item gp-0) speed) -300) + (set! (-> (the-as anim-test-seq-item gp-0) speed) -300) + ) + ) + ((logtest? + (-> *cpad-list* cpads 0 button0-abs 0) + (pad-buttons up) + ) + (+! (-> (the-as anim-test-seq-item gp-0) speed) 10) + (anim-test-seq-mark-as-edited + (the-as anim-test-sequence s4-0) + ) + (if (< 1000 (-> (the-as anim-test-seq-item gp-0) speed)) + (set! (-> (the-as anim-test-seq-item gp-0) speed) 1000) + ) + ) + ) + ) + ((2) + (cond + ((logtest? + (-> *cpad-list* cpads 0 button0-abs 0) + (pad-buttons down) + ) + (+! (-> (the-as anim-test-seq-item gp-0) blend) -1) + (anim-test-seq-mark-as-edited (the-as anim-test-sequence s4-0)) + (when (< (-> (the-as anim-test-seq-item gp-0) blend) 0) + (set! (-> (the-as anim-test-seq-item gp-0) blend) 0) + 0 + ) + ) + ((logtest? + (-> *cpad-list* cpads 0 button0-abs 0) + (pad-buttons up) + ) + (+! (-> (the-as anim-test-seq-item gp-0) blend) 1) + (anim-test-seq-mark-as-edited (the-as anim-test-sequence s4-0)) + (if (< 9999 (-> (the-as anim-test-seq-item gp-0) blend)) + (set! (-> (the-as anim-test-seq-item gp-0) blend) 9999) + ) + ) + ) + ) + ((3) + (let ((f30-0 (-> (the-as anim-test-seq-item gp-0) first-frame))) + (set! + (-> (the-as anim-test-seq-item gp-0) first-frame) + (anim-tester-adjust-frame + (-> (the-as anim-test-seq-item gp-0) first-frame) + (-> (the-as anim-test-seq-item gp-0) num-frames) + ) + ) + (if (!= f30-0 (-> (the-as anim-test-seq-item gp-0) first-frame)) + (anim-test-seq-mark-as-edited (the-as anim-test-sequence s4-0)) + ) + ) + ) + ((4) + (let ((f30-1 (-> (the-as anim-test-seq-item gp-0) last-frame))) + (set! + (-> (the-as anim-test-seq-item gp-0) last-frame) + (anim-tester-adjust-frame + (-> (the-as anim-test-seq-item gp-0) last-frame) + (-> (the-as anim-test-seq-item gp-0) num-frames) + ) + ) + (if (!= f30-1 (-> (the-as anim-test-seq-item gp-0) last-frame)) + (anim-test-seq-mark-as-edited (the-as anim-test-sequence s4-0)) + ) + ) + ) + ) + ) + (else + (+! (-> *anim-tester* 0 inc-timer) -1) + ) + ) + (when + (or + (logtest? + (-> *cpad-list* cpads 0 button0-rel 0) + (pad-buttons down) + ) + (logtest? (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons up)) + ) + (set! + (-> *anim-tester* 0 inc-delay) + (-> *DISP_LIST-bank* INC_DELAY) + ) + (set! (-> *anim-tester* 0 inc-timer) 0) + 0 + ) + ) + ) + ) + ) + (else + (cond + ((logtest? (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons up)) + (if (> (-> arg1 highlight-index) 0) + (+! (-> arg1 highlight-index) -1) + ) + ) + ((logtest? (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons down)) + (if + (< + (the-as int (the-as anim-test-seq-item (-> arg1 highlight-index))) + (glst-num-elements (-> arg1 list)) + ) + (+! (-> arg1 highlight-index) 1) + ) + ) + ((logtest? (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons left)) + (+! (-> *anim-tester* 0 item-field) -1) + (if (< (-> *anim-tester* 0 item-field) 0) + (set! (-> *anim-tester* 0 item-field) 11) + ) + (if (= (-> *anim-tester* 0 item-field) 8) + (set! (-> *anim-tester* 0 item-field) 5) + ) + ) + ((logtest? (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons right)) + (+! (-> *anim-tester* 0 item-field) 1) + (when (>= (-> *anim-tester* 0 item-field) 12) + (set! (-> *anim-tester* 0 item-field) 0) + 0 + ) + (if (= (-> *anim-tester* 0 item-field) 6) + (set! (-> *anim-tester* 0 item-field) 9) + ) + ) + ((logtest? (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons square)) + (logclear! + (-> *cpad-list* cpads 0 button0-abs 0) + (pad-buttons square) + ) + (logclear! + (-> *cpad-list* cpads 0 button0-rel 0) + (pad-buttons square) + ) + (set! (-> *anim-tester* 0 edit-mode) 3) + (logior! (-> *anim-tester* 0 flags) 4) + ) + ((logtest? (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons x)) + (cond + ((logtest? (-> (the-as anim-test-seq-item gp-0) flags) 1) + (let ((v1-318 (-> *anim-tester* 0 item-field))) + (if (= v1-318 10) + (anim-test-edit-seq-insert-item + (the-as anim-test-seq-item gp-0) + (the-as anim-test-sequence s4-0) + ) + ) + ) + ) + (else + (let ((v1-322 (-> *anim-tester* 0 item-field))) + (cond + ((zero? v1-322) + (anim-tester-pick-item-setup + (the-as anim-test-seq-item gp-0) + (the-as anim-test-sequence s4-0) + ) + ) + ((= v1-322 10) + (anim-test-edit-seq-insert-item + (the-as anim-test-seq-item gp-0) + (the-as anim-test-sequence s4-0) + ) + ) + ((= v1-322 11) + (when + (zero? (logand (-> (the-as anim-test-seq-item gp-0) flags) 1)) + (anim-test-seq-mark-as-edited (the-as anim-test-sequence s4-0)) + (glst-remove + (-> (the-as anim-test-sequence s4-0) item-list) + (the-as anim-test-seq-item gp-0) + ) + ) + (let ((a1-46 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-46 from) pp) + (set! (-> a1-46 num-params) 0) + (set! (-> a1-46 message) 'change-anim) + (send-event-function (ppointer->process *anim-tester*) a1-46) + ) + ) + (else + (when + (zero? (logand (-> (the-as anim-test-seq-item gp-0) flags) 4)) + (let ((v1-334 (-> *anim-tester* 0 item-field))) + (the-as int (cond + ((= v1-334 5) + (anim-test-seq-mark-as-edited + (the-as anim-test-sequence s4-0) + ) + (let + ((v1-331 + (logxor + (-> (the-as anim-test-seq-item gp-0) flags) + 2 + ) + ) + ) + (set! + (-> (the-as anim-test-seq-item gp-0) flags) + v1-331 + ) + v1-331 + ) + ) + ((= v1-334 6) + (the-as int #f) + ) + ((= v1-334 7) + (the-as int #f) + ) + ((= v1-334 8) + (the-as int #f) + ) + (else + (logior! (-> *anim-tester* 0 flags) 8) + (set! + (-> *anim-tester* 0 inc-delay) + (-> *DISP_LIST-bank* INC_DELAY) + ) + (set! (-> *anim-tester* 0 inc-timer) 0) + 0 + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ((= arg0 2) + (set! (-> arg1 return-int) (-> *ANIM_TESTER-bank* EDIT_LIST_MIN_WIDTH)) + ) + ((= arg0 3) + (let* + ((s3-3 (-> *display* frames (-> *display* on-screen) frame debug-buf)) + (gp-2 (-> s3-3 base)) + ) + (let ((s1-6 draw-string-xy)) + (format + (clear *temp-string*) + "--Seq--(~-17S)--" + (-> (the-as anim-test-sequence s4-0) privname) + ) + (s1-6 + *temp-string* + s3-3 + (-> arg1 xpos) + (-> arg1 ypos) + (font-color dim-white) + (font-flags shadow kerning) + ) + ) + (let ((a3-17 (-> s3-3 base))) + (let ((v1-355 (the-as object (-> s3-3 base)))) + (set! + (-> (the-as dma-packet v1-355) dma) + (new 'static 'dma-tag :id (dma-tag-id next)) + ) + (set! (-> (the-as dma-packet v1-355) vif0) (new 'static 'vif-tag)) + (set! (-> (the-as dma-packet v1-355) vif1) (new 'static 'vif-tag)) + (set! (-> s3-3 base) (&+ (the-as pointer v1-355) 16)) + ) + (dma-bucket-insert-tag + (-> *display* frames (-> *display* on-screen) frame bucket-group) + (bucket-id debug-draw0) + gp-2 + (the-as (pointer dma-tag) a3-17) + ) + ) + ) + (the-as none (cond + (s2-0 + (display-list-control (-> *anim-tester* 0 pick-con)) + ) + (else + (let* + ((s4-2 + (-> + *display* + frames + (-> *display* on-screen) + frame + debug-buf + ) + ) + (gp-3 (-> s4-2 base)) + ) + (draw-string-xy + "-spd-blnd-1st-lst-flgs-mov-" + s4-2 + (+ + (-> arg1 xpos) + (* + (-> *ANIM_TESTER-bank* EDIT_STATS_X) + (-> *DISP_LIST-bank* CHAR_WIDTH) + ) + ) + (-> arg1 ypos) + (font-color dim-white) + (font-flags shadow kerning) + ) + (let ((a3-21 (-> s4-2 base))) + (let ((v1-367 (the-as object (-> s4-2 base)))) + (set! + (-> (the-as dma-packet v1-367) dma) + (new 'static 'dma-tag :id (dma-tag-id next)) + ) + (set! + (-> (the-as dma-packet v1-367) vif0) + (new 'static 'vif-tag) + ) + (set! + (-> (the-as dma-packet v1-367) vif1) + (new 'static 'vif-tag) + ) + (set! (-> s4-2 base) (&+ (the-as pointer v1-367) 16)) + ) + (dma-bucket-insert-tag + (-> + *display* + frames + (-> *display* on-screen) + frame + bucket-group + ) + (bucket-id debug-draw0) + gp-3 + (the-as (pointer dma-tag) a3-21) + ) + ) + ) + ) + ) + ) + ) + ) + ) + #f + ) + ) + +(defbehavior anim-tester-interface anim-tester () + (let ((v1-0 (-> self edit-mode))) + (cond + ((zero? v1-0) + (when (logtest? (-> *anim-tester* 0 flags) 4) + (set! (-> *anim-tester* 0 flags) (logand -5 (-> *anim-tester* 0 flags))) + (set-master-mode 'menu) + ) + ) + ((= v1-0 1) + (display-list-control (-> self list-con)) + ) + ((= v1-0 2) + (let + ((gp-0 + (the-as + anim-test-obj + (glst-find-node-by-name (-> self obj-list) (-> self current-obj)) + ) + ) + ) + (cond + (gp-0 + (set! (-> gp-0 list-con listfunc) anim-test-anim-list-handler) + (set! (-> gp-0 list-con current-index) (-> gp-0 anim-index)) + (set! (-> gp-0 list-con highlight-index) (-> gp-0 anim-hindex)) + (display-list-control (-> gp-0 list-con)) + (set! (-> gp-0 anim-index) (-> gp-0 list-con current-index)) + (set! (-> gp-0 anim-hindex) (-> gp-0 list-con highlight-index)) + ) + (else + (let* + ((s5-0 (-> *display* frames (-> *display* on-screen) frame debug-buf)) + (gp-1 (-> s5-0 base)) + ) + (draw-string-xy + "ERROR: current object not found" + s5-0 + (-> *ANIM_TESTER-bank* ANIM_LIST_X) + (-> *ANIM_TESTER-bank* ANIM_LIST_Y) + (font-color orange-red-2) + (font-flags shadow kerning) + ) + (let ((a3-1 (-> s5-0 base))) + (let ((v1-20 (the-as object (-> s5-0 base)))) + (set! + (-> (the-as dma-packet v1-20) dma) + (new 'static 'dma-tag :id (dma-tag-id next)) + ) + (set! (-> (the-as dma-packet v1-20) vif0) (new 'static 'vif-tag)) + (set! (-> (the-as dma-packet v1-20) vif1) (new 'static 'vif-tag)) + (set! (-> s5-0 base) (&+ (the-as pointer v1-20) 16)) + ) + (dma-bucket-insert-tag + (-> *display* frames (-> *display* on-screen) frame bucket-group) + (bucket-id debug-draw0) + gp-1 + (the-as (pointer dma-tag) a3-1) + ) + ) + ) + ) + ) + ) + ) + ((= v1-0 3) + (let + ((gp-2 + (the-as + anim-test-obj + (glst-find-node-by-name (-> self obj-list) (-> self current-obj)) + ) + ) + ) + (cond + (gp-2 + (set! (-> gp-2 list-con listfunc) anim-test-sequence-list-handler) + (set! (-> gp-2 list-con current-index) (-> gp-2 seq-index)) + (set! (-> gp-2 list-con highlight-index) (-> gp-2 seq-hindex)) + (display-list-control (-> gp-2 list-con)) + (set! (-> gp-2 seq-index) (-> gp-2 list-con current-index)) + (set! (-> gp-2 seq-hindex) (-> gp-2 list-con highlight-index)) + ) + (else + (let* + ((s5-1 (-> *display* frames (-> *display* on-screen) frame debug-buf)) + (gp-3 (-> s5-1 base)) + ) + (draw-string-xy + "ERROR: current object not found" + s5-1 + (-> *ANIM_TESTER-bank* ANIM_LIST_X) + (-> *ANIM_TESTER-bank* ANIM_LIST_Y) + (font-color orange-red-2) + (font-flags shadow kerning) + ) + (let ((a3-3 (-> s5-1 base))) + (let ((v1-36 (the-as object (-> s5-1 base)))) + (set! + (-> (the-as dma-packet v1-36) dma) + (new 'static 'dma-tag :id (dma-tag-id next)) + ) + (set! (-> (the-as dma-packet v1-36) vif0) (new 'static 'vif-tag)) + (set! (-> (the-as dma-packet v1-36) vif1) (new 'static 'vif-tag)) + (set! (-> s5-1 base) (&+ (the-as pointer v1-36) 16)) + ) + (dma-bucket-insert-tag + (-> *display* frames (-> *display* on-screen) frame bucket-group) + (bucket-id debug-draw0) + gp-3 + (the-as (pointer dma-tag) a3-3) + ) + ) + ) + ) + ) + ) + ) + ((= v1-0 4) + (let + ((v1-43 + (the-as + anim-test-obj + (glst-find-node-by-name (-> self obj-list) (-> self current-obj)) + ) + ) + ) + (cond + (v1-43 + (let + ((v1-44 + (the-as + anim-test-sequence + (glst-get-node-by-index + (-> v1-43 seq-list) + (-> v1-43 list-con current-index) + ) + ) + ) + ) + (cond + (v1-44 + (display-list-control (-> v1-44 list-con)) + ) + (else + (let* + ((s5-2 + (-> *display* frames (-> *display* on-screen) frame debug-buf) + ) + (gp-4 (-> s5-2 base)) + ) + (draw-string-xy + "ERROR: current sequence not found" + s5-2 + (-> *ANIM_TESTER-bank* EDIT_LIST_X) + (-> *ANIM_TESTER-bank* EDIT_LIST_Y) + (font-color orange-red-2) + (font-flags shadow kerning) + ) + (let ((a3-5 (-> s5-2 base))) + (let ((v1-51 (the-as object (-> s5-2 base)))) + (set! + (-> (the-as dma-packet v1-51) dma) + (new 'static 'dma-tag :id (dma-tag-id next)) + ) + (set! (-> (the-as dma-packet v1-51) vif0) (new 'static 'vif-tag)) + (set! (-> (the-as dma-packet v1-51) vif1) (new 'static 'vif-tag)) + (set! (-> s5-2 base) (&+ (the-as pointer v1-51) 16)) + ) + (dma-bucket-insert-tag + (-> *display* frames (-> *display* on-screen) frame bucket-group) + (bucket-id debug-draw0) + gp-4 + (the-as (pointer dma-tag) a3-5) + ) + ) + ) + ) + ) + ) + ) + (else + (let* + ((s5-3 (-> *display* frames (-> *display* on-screen) frame debug-buf)) + (gp-5 (-> s5-3 base)) + ) + (draw-string-xy + "ERROR: current object not found" + s5-3 + (-> *ANIM_TESTER-bank* EDIT_LIST_X) + (-> *ANIM_TESTER-bank* EDIT_LIST_Y) + (font-color orange-red-2) + (font-flags shadow kerning) + ) + (let ((a3-7 (-> s5-3 base))) + (let ((v1-62 (the-as object (-> s5-3 base)))) + (set! + (-> (the-as dma-packet v1-62) dma) + (new 'static 'dma-tag :id (dma-tag-id next)) + ) + (set! (-> (the-as dma-packet v1-62) vif0) (new 'static 'vif-tag)) + (set! (-> (the-as dma-packet v1-62) vif1) (new 'static 'vif-tag)) + (set! (-> s5-3 base) (&+ (the-as pointer v1-62) 16)) + ) + (dma-bucket-insert-tag + (-> *display* frames (-> *display* on-screen) frame bucket-group) + (bucket-id debug-draw0) + gp-5 + (the-as (pointer dma-tag) a3-7) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (set! (-> self old-mode) (-> self edit-mode)) + (none) + ) + +(defun anim-tester-get-playing-item ((arg0 anim-test-sequence)) + (let + ((v0-0 + ((the-as + (function glst-list int anim-test-seq-item) + glst-get-node-by-index + ) + (-> arg0 item-list) + (-> arg0 playing-item) + ) + ) + ) + (let ((s5-0 v0-0) + (s4-0 (-> arg0 playing-item)) + ) + (when (logtest? (-> v0-0 flags) 5) + (while #t + (+! s4-0 1) + (if (>= s4-0 (glst-num-elements (-> arg0 item-list))) + (set! s4-0 0) + ) + (set! + v0-0 + ((the-as + (function glst-list int anim-test-seq-item) + glst-get-node-by-index + ) + (-> arg0 item-list) + s4-0 + ) + ) + (when (or (= v0-0 s5-0) (zero? (logand (-> v0-0 flags) 5))) + (set! (-> arg0 playing-item) s4-0) + (return v0-0) + ) + ) + ) + ) + v0-0 + ) + ) + +(defstate anim-tester-process (anim-tester) + :event + anim-tester-standard-event-handler + :enter + (behavior () + (logior! (-> self flags) 2) + (none) + ) + :trans + (behavior () + (if (and (zero? (logand (-> self flags) 2)) (= *master-mode* 'menu)) + (anim-tester-interface) + ) + (set! (-> self flags) (logand -3 (-> self flags))) + (when (!= *master-mode* 'menu) + (dummy-10 (-> self skel) (the-as symbol *stdcon*)) + (add-debug-x + #t + (bucket-id debug-draw1) + (-> self root trans) + (new 'static 'rgba :r #xff :g #xff :b #xff :a #x80) + ) + ) + (none) + ) + :code + (behavior () + (local-vars + (s4-0 glst-node) + (s5-1 anim-test-seq-item) + (gp-2 anim-test-sequence) + ) + (while #t + (set! (-> self flags) (logand -2 (-> self flags))) + (let ((v1-2 (-> self obj-list))) + "is the list empty, #t = empty" + (cond + ((= (-> v1-2 tailpred) v1-2) + (format *stdcon* "anim-tester:no objects loaded~%") + (set! (-> self list-con current-index) 0) + (set! (-> self current-obj) "") + (suspend) + 0 + ) + ((begin + (set! + s4-0 + (glst-find-node-by-name (-> self obj-list) (-> self current-obj)) + ) + (when (not s4-0) + (if + (>= + (-> self list-con current-index) + (glst-num-elements (-> self obj-list)) + ) + (set! + (-> self list-con current-index) + (+ (glst-num-elements (-> self obj-list)) -1) + ) + ) + (set! + s4-0 + (glst-get-node-by-index + (-> self obj-list) + (-> self list-con current-index) + ) + ) + (set! (-> self current-obj) (-> (the-as anim-test-obj s4-0) privname)) + ) + (let + ((v1-10 (the-as structure (-> (the-as anim-test-obj s4-0) seq-list)))) + "is the list empty, #t = empty" + (= (-> (the-as anim-test-obj v1-10) privname) (the-as glst-list v1-10)) + ) + ) + (format *stdcon* "anim-tester:no anims loaded~%") + (format *stdcon* "displaying without anim not yet implement~%") + (set! (-> self flags) (logand -2 (-> self flags))) + (suspend) + 0 + ) + ((begin + (if + (>= + (-> (the-as anim-test-obj s4-0) list-con current-index) + (glst-num-elements (-> (the-as anim-test-obj s4-0) seq-list)) + ) + (set! + (-> (the-as anim-test-obj s4-0) list-con current-index) + (+ (glst-num-elements (-> (the-as anim-test-obj s4-0) seq-list)) -1) + ) + ) + (set! + gp-2 + (the-as + anim-test-sequence + (glst-get-node-by-index + (-> (the-as anim-test-obj s4-0) seq-list) + (if (logtest? (-> (the-as anim-test-obj s4-0) flags) 2) + (-> (the-as anim-test-obj s4-0) seq-index) + (-> (the-as anim-test-obj s4-0) anim-index) + ) + ) + ) + ) + (let ((v1-18 (-> gp-2 item-list))) + "is the list empty, #t = empty" + (= (-> v1-18 tailpred) v1-18) + ) + ) + (format + *stdcon* + "anim-tester:no items in sequence ~A~%" + (-> gp-2 privname) + ) + (format *stdcon* "displaying without anim not yet implement~%") + (suspend) + 0 + ) + ((begin + (when + (>= (-> gp-2 playing-item) (glst-num-elements (-> gp-2 item-list))) + (set! (-> gp-2 playing-item) 0) + 0 + ) + (set! s5-1 (anim-tester-get-playing-item gp-2)) + s5-1 + ) + (let + ((s4-1 + (the-as + art-joint-anim + (dummy-10 + (-> (the-as anim-test-obj s4-0) obj-art-group) + (-> s5-1 privname) + art-joint-anim + ) + ) + ) + ) + (anim-tester-update-anim-info s5-1) + (cond + (s4-1 + (logior! (-> self flags) 1) + (if (nonzero? (-> s5-1 blend)) + (ja-channel-push! + 1 + (the int (* (the float (-> s5-1 blend)) (-> self anim-gspeed))) + ) + (ja-channel-set! 1) + ) + (cond + ((= (-> self anim-first) (-> (new 'static 'array float 1 -1.0) 0)) + (let ((s3-0 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! s3-0 s4-1 num-func-identity) + (set! (-> s3-0 frame-num) 0.0) + ) + ) + ((= (-> self anim-first) (-> (new 'static 'array float 1 -2.0) 0)) + (let ((s3-1 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! s3-1 s4-1 num-func-identity) + (set! + (-> s3-1 frame-num) + (the float (+ (-> s4-1 data 0 length) -1)) + ) + ) + ) + (else + (let ((s3-2 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! s3-2 s4-1 num-func-identity) + (set! (-> s3-2 frame-num) (-> self anim-first)) + ) + ) + ) + (when (nonzero? (-> s5-1 blend)) + (while + (and + (!= (-> self skel root-channel 0) (-> self skel channel)) + (logtest? (-> s5-1 flags) 2) + ) + (when (logtest? (-> self flags) 32) + (TODO-RENAME-9 (-> self align)) + (TODO-RENAME-10 + (-> self align) + 31 + (-> (new 'static 'array float 1 1.0) 0) + (-> (new 'static 'array float 1 1.0) 0) + (-> (new 'static 'array float 1 1.0) 0) + ) + ) + (suspend) + ) + ) + (until (ja-done? 0) + (when (logtest? (-> self flags) 32) + (TODO-RENAME-9 (-> self align)) + (TODO-RENAME-10 + (-> self align) + 31 + (-> (new 'static 'array float 1 1.0) 0) + (-> (new 'static 'array float 1 1.0) 0) + (-> (new 'static 'array float 1 1.0) 0) + ) + ) + (suspend) + (anim-tester-update-anim-info s5-1) + (let + ((v1-73 + (= (-> self anim-last) (-> (new 'static 'array float 1 -2.0) 0)) + ) + ) + (cond + ((or v1-73 (>= (-> self anim-last) (-> self anim-first))) + (cond + ((= (-> self anim-last) (-> (new 'static 'array float 1 -2.0) 0)) + (let ((a0-42 (-> self skel root-channel 0))) + (set! + (-> a0-42 param 0) + (the float (+ (-> a0-42 frame-group data 0 length) -1)) + ) + (set! (-> a0-42 param 1) (-> self anim-speed)) + (joint-control-channel-group-eval! + a0-42 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (else + (let ((a0-43 (-> self skel root-channel 0))) + (set! (-> a0-43 param 0) (-> self anim-last)) + (set! (-> a0-43 param 1) (-> self anim-speed)) + (joint-control-channel-group-eval! + a0-43 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + ) + ((= (-> self anim-last) (-> (new 'static 'array float 1 -1.0) 0)) + (let ((a0-44 (-> self skel root-channel 0))) + (set! (-> a0-44 param 0) 0.0) + (set! (-> a0-44 param 1) (-> self anim-speed)) + (joint-control-channel-group-eval! + a0-44 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (else + (let ((a0-45 (-> self skel root-channel 0))) + (set! (-> a0-45 param 0) (-> self anim-last)) + (set! (-> a0-45 param 1) (-> self anim-speed)) + (joint-control-channel-group-eval! + a0-45 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + ) + ) + (+! (-> gp-2 playing-item) 1) + ) + (else + (format *stdcon* "anim ~A not found~%" (-> s5-1 privname)) + (suspend) + 0 + ) + ) + ) + ) + (else + (format *stdcon* "no anims~%") + (suspend) + 0 + ) + ) + ) + ) + (none) + ) + :post + anim-tester-post + ) + +(defbehavior initialize-anim-tester anim-tester () + (glst-init-list! (-> self obj-list)) + (logclear! (-> self mask) (process-mask menu)) + (set! (-> self speed) 100) + (set! (-> self current-obj) "") + (set! (-> self root) (new 'process 'trsqv)) + (set! + (-> self draw) + (new 'process 'draw-control self (the-as art-joint-geo #f)) + ) + (set! (-> self draw dma-add-func) dma-add-process-drawable) + (set! (-> self skel) (new 'process 'joint-control 24)) + (set! (-> self align) (new 'process 'align-control self)) + (set! (-> self list-con listfunc) anim-test-obj-list-handler) + (set! (-> self list-con left) (-> *ANIM_TESTER-bank* OBJECT_LIST_X)) + (set! (-> self list-con top) (-> *ANIM_TESTER-bank* OBJECT_LIST_Y)) + (set! (-> self list-con list) (-> self obj-list)) + (set! (-> self list-con list-owner) (the-as uint self)) + (quaternion-identity! (-> self root quat)) + (vector-identity! (-> self root scale)) + (position-in-front-of-camera! + (-> self root trans) + (-> (new 'static 'array float 1 40960.0) 0) + (-> (new 'static 'array float 1 4096.0) 0) + ) + (set! (-> self event-hook) anim-tester-standard-event-handler) + (anim-tester-reset) + (go anim-tester-process) + (none) + ) + +(defun anim-tester-string-get-frame!! ((arg0 list-field) (arg1 string)) + (cond + ((string-get-arg!! *temp-string* arg1) + (cond + ((or (string= *temp-string* "max") (string= *temp-string* "MAX")) + (set! (-> arg0 left) -2) + ) + ((or (string= *temp-string* "min") (string= *temp-string* "MIN")) + (set! (-> arg0 left) -1) + ) + (else + (set! (-> arg0 left) (string->int *temp-string*)) + ) + ) + #t + ) + (else + #f + ) + ) + ) + +(defun anim-tester-load-object-seqs () + #f + ) + +(defun anim-tester-save-object-seqs ((arg0 anim-test-obj)) + (let ((gp-0 format) + (s4-0 0) + (s3-0 "saving object ~s to ~s~%") + (s2-0 (-> arg0 privname)) + ) + (format (clear *temp-string*) "data/~s.obinf" (-> arg0 privname)) + (gp-0 s4-0 s3-0 s2-0 *temp-string*) + ) + ;; TODO - manually fixed + (format (clear *temp-string*) "data/~s.obinf" (-> arg0 privname)) + (let ((gp-2 (new 'stack 'file-stream *temp-string* 'write))) + (format gp-2 "major-version 0~%") + (format gp-2 "minor-version 0~%") + (format gp-2 "Object \"~S\" ~d~%" (-> arg0 privname) 0) + (let ((v1-5 (-> arg0 seq-list))) + "return the start of the list" + (let ((s5-1 (-> v1-5 head))) + (while (let ((v1-30 (the-as anim-test-sequence s5-1))) + "is this node the end of the list. #t = end" + (not (not (-> v1-30 next))) + ) + (set! + (-> (the-as anim-test-sequence s5-1) flags) + (logand -5 (-> (the-as anim-test-sequence s5-1) flags)) + ) + (format + gp-2 + " ~S \"~S\" ~d~%" + (if (logtest? (-> (the-as anim-test-sequence s5-1) flags) 1) + "Sequence" + "Anim" + ) + (-> (the-as anim-test-sequence s5-1) privname) + 0 + ) + (let ((v1-11 (-> (the-as anim-test-sequence s5-1) item-list))) + "return the start of the list" + (let ((s4-2 (the-as anim-test-seq-item (-> v1-11 head)))) + (while (let ((v1-21 s4-2)) + "is this node the end of the list. #t = end" + (not (not (-> v1-21 next))) + ) + (when (zero? (logand (-> s4-2 flags) 5)) + (format + gp-2 + " Item \"~S\" ~d ~d " + (-> s4-2 privname) + (-> s4-2 speed) + (-> s4-2 blend) + ) + (anim-tester-num-print gp-2 (-> s4-2 first-frame)) + (format gp-2 " ") + (anim-tester-num-print gp-2 (-> s4-2 last-frame)) + (format gp-2 " ~S~%" (if (logtest? (-> s4-2 flags) 2) + "B" + "-" + ) + ) + ) + "return the next node in the list" + (set! s4-2 (the-as anim-test-seq-item (-> s4-2 next))) + ) + ) + ) + (format + gp-2 + " ~S~%" + (if (logtest? (-> (the-as anim-test-sequence s5-1) flags) 1) + "EndSequence" + "EndAnim" + ) + ) + "return the next node in the list" + (set! s5-1 (-> (the-as anim-test-sequence s5-1) next)) + ) + ) + ) + (format gp-2 "EndObject~%") + (file-stream-close gp-2) + ) + ) + +(defun anim-tester-save-all-objects ((arg0 anim-tester)) + (let ((v1-0 (-> arg0 obj-list))) + "return the start of the list" + (let ((gp-0 (-> v1-0 head))) + (while (let ((v1-9 (the-as anim-test-obj gp-0))) + "is this node the end of the list. #t = end" + (not (not (-> v1-9 next))) + ) + (when (logtest? (-> (the-as anim-test-obj gp-0) flags) 1) + (set! + (-> (the-as anim-test-obj gp-0) flags) + (logand -2 (-> (the-as anim-test-obj gp-0) flags)) + ) + (anim-tester-save-object-seqs (the-as anim-test-obj gp-0)) + ) + "return the next node in the list" + (set! gp-0 (-> (the-as anim-test-obj gp-0) next)) + ) + ) + ) + #f + ) + +(defun anim-tester-add-newobj ((arg0 anim-tester) (arg1 string) (arg2 art-group)) + (local-vars (sv-96 art-element) (sv-112 art-element) (sv-128 anim-test-obj)) + (with-pp + (let ((s2-0 (the-as anim-test-obj #f)) + (s5-0 (the-as anim-test-obj #f)) + ) + (let ((s1-0 (the-as art-element #f)) + (s0-0 (the-as structure #f)) + ) + (dotimes (s3-0 (-> arg2 length)) + (cond + ((and (= (-> arg2 data s3-0 type) merc-ctrl) (not s2-0)) + (set! sv-96 (-> arg2 data s3-0)) + (set! s0-0 (and s2-0 s0-0)) + (if s0-0 + (anim-test-obj-remove-invalid s2-0) + ) + (let ((t9-1 anim-tester-load-object-seqs)) + (-> sv-96 name) + (t9-1) + ) + (set! + s2-0 + (the-as + anim-test-obj + (glst-find-node-by-name (-> arg0 obj-list) (-> sv-96 name)) + ) + ) + (set! s0-0 (if s2-0 + #t + #f + ) + ) + (cond + ((the-as symbol s0-0) + ) + (else + (set! s2-0 (new 'global 'anim-test-obj 1 (-> sv-96 name) arg2)) + (glst-add-tail (-> arg0 obj-list) s2-0) + ) + ) + (anim-test-obj-init s2-0 (the-as list-control arg0)) + (set! (-> s2-0 obj-art-group) arg2) + (set! (-> s2-0 mesh-geo) (the-as merc-ctrl sv-96)) + (set! (-> s2-0 joint-geo) (the-as art-joint-geo s1-0)) + (if (not s5-0) + (set! s5-0 s2-0) + ) + ) + ((= (-> arg2 data s3-0 type) art-joint-geo) + (if (and s2-0 (not (-> s2-0 joint-geo))) + (set! (-> s2-0 joint-geo) (the-as art-joint-geo (-> arg2 data s3-0))) + ) + (if (not s1-0) + (set! s1-0 (-> arg2 data s3-0)) + ) + ) + ((= (-> arg2 data s3-0 type) art-joint-anim) + (when s2-0 + (set! sv-112 (-> arg2 data s3-0)) + (set! + sv-128 + (the-as + anim-test-obj + (glst-find-node-by-name (-> s2-0 seq-list) (-> sv-112 name)) + ) + ) + (when (not sv-128) + (set! + sv-128 + (the-as + anim-test-obj + (new 'debug 'anim-test-sequence 1 (-> sv-112 name)) + ) + ) + (glst-add-tail (-> s2-0 seq-list) sv-128) + (anim-test-sequence-init (the-as anim-test-sequence sv-128) s2-0) + (let ((a1-11 (new 'debug 'anim-test-seq-item 1 (-> sv-112 name)))) + (glst-add-tail (the-as glst-list (&-> sv-128 obj-art-group)) a1-11) + ) + ) + (set! (-> sv-128 list-con user-info) (the-as int s2-0)) + (set! + (-> sv-128 flags) + (logior (-> (the-as anim-test-sequence sv-128) flags) 2) + ) + (let ((v1-48 (-> (the-as anim-test-sequence sv-128) item-list))) + "is the list empty, #t = empty" + (when (not (= (-> v1-48 tailpred) v1-48)) + (let ((v1-51 (-> (the-as anim-test-sequence sv-128) item-list))) + "return the start of the list" + (let ((v1-52 (-> v1-51 head))) + (set! + (-> (the-as anim-test-seq-item v1-52) num-frames) + (the float (-> (the-as art-joint-anim sv-112) data 0 length)) + ) + (set! + (-> (the-as anim-test-seq-item v1-52) artist-base) + (-> (the-as art-joint-anim sv-112) artist-base) + ) + (set! + (-> (the-as anim-test-seq-item v1-52) parent) + (the-as anim-test-sequence sv-128) + ) + ) + ) + sv-128 + ) + ) + ) + ) + (else + ) + ) + ) + ) + (if s2-0 + (anim-test-obj-remove-invalid s2-0) + ) + (when s5-0 + (set! (-> arg0 current-obj) (-> s5-0 privname)) + (set! + (-> arg0 list-con current-index) + (glst-get-node-index (-> arg0 obj-list) s5-0) + ) + ) + ) + (let ((a1-13 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-13 from) pp) + (set! (-> a1-13 num-params) 1) + (set! (-> a1-13 message) 'reset) + (set! (-> a1-13 param 0) (the-as uint #f)) + (send-event-function arg0 a1-13) + ) + ) + ) + +(defun anim-tester-stop () + (when *anim-tester* + (kill-by-name 'anim-tester *active-pool*) + (set! *anim-tester* (the-as (pointer anim-tester) #f)) + #f + ) + ) + +(defun anim-tester-start () + (with-pp + (anim-tester-stop) + (let ((gp-0 (get-process *16k-dead-pool* anim-tester #x4000))) + (set! *anim-tester* (the-as (pointer anim-tester) (when gp-0 + (let + ((t9-2 + (method-of-type + anim-tester + activate + ) + ) + ) + (t9-2 + (the-as + anim-tester + gp-0 + ) + *default-pool* + 'anim-tester + (the-as + pointer + #x70004000 + ) + ) + ) + ((the-as + (function process function none) + run-function-in-process + ) + gp-0 + initialize-anim-tester + ) + (-> gp-0 ppointer) + ) + ) + ) + ) + (set! *camera-orbit-target* *anim-tester*) + (let ((a1-3 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-3 from) pp) + (set! (-> a1-3 num-params) 2) + (set! (-> a1-3 message) 'change-state) + (set! (-> a1-3 param 0) (the-as uint cam-orbit)) + (set! (-> a1-3 param 1) (the-as uint 0)) + (send-event-function *camera* a1-3) + ) + #f + ) + ) + +(defun anim-tester-add-object ((arg0 string)) + (let + ((s5-0 + (load-to-heap-by-name + (-> *level* level-default art-group) + arg0 + #t + global + 0 + ) + ) + ) + (cond + (s5-0 + (if (not *anim-tester*) + (anim-tester-start) + ) + (if *anim-tester* + (anim-tester-add-newobj + (the-as anim-tester (ppointer->process *anim-tester*)) + arg0 + s5-0 + ) + ) + ) + (else + (format 0 "ERROR:no object (~A)n" arg0) + ) + ) + ) + (none) + ) + +(defun anim-tester-set-name ((arg0 string)) + (cond + ((zero? (length arg0)) + (format #t "ERROR: no name~%") + ) + ((and *anim-tester* (let ((v1-6 (-> *anim-tester* 0 obj-list))) + "is the list empty, #t = empty" + (not (= (-> v1-6 tailpred) v1-6)) + ) + ) + (let + ((s3-0 + (the-as + anim-test-obj + (glst-find-node-by-name + (-> *anim-tester* 0 obj-list) + (-> *anim-tester* 0 current-obj) + ) + ) + ) + ) + (cond + (s3-0 + (let + ((s5-0 + (the-as + anim-test-sequence + (glst-get-node-by-index + (-> s3-0 seq-list) + (-> s3-0 list-con current-index) + ) + ) + ) + ) + (cond + (s5-0 + (cond + ((logtest? (-> s5-0 flags) 1) + (let ((s4-0 (the-as object (-> s5-0 privname)))) + (let ((v1-14 s5-0)) + (set! (-> v1-14 privname) "") + ) + (cond + ((glst-find-node-by-name (-> s3-0 seq-list) arg0) + (format + #t + "ERROR: another sequence is already using that name (~S)~%" + arg0 + ) + (set! (-> s5-0 privname) (the-as string s4-0)) + ) + (else + (set! s4-0 arg0) + (set! (-> s5-0 privname) (the-as string s4-0)) + ) + ) + s4-0 + ) + ) + (else + (format #t "ERROR: no sequence selected~%") + ) + ) + ) + (else + (format #t "ERROR: no sequence selected~%") + ) + ) + ) + ) + (else + (format #t "ERROR:no object selected~%") + ) + ) + ) + ) + (else + (format #t "ERROR:no object loaded~%") + ) + ) + ) + +(defun anim-tester-add-sequence ((arg0 string)) + (with-pp + (cond + ((zero? (length arg0)) + (format #t "ERROR: no name~%") + ) + ((and *anim-tester* (let ((v1-6 (-> *anim-tester* 0 obj-list))) + "is the list empty, #t = empty" + (not (= (-> v1-6 tailpred) v1-6)) + ) + ) + (let + ((s5-0 + (the-as + anim-test-obj + (glst-find-node-by-name + (-> *anim-tester* 0 obj-list) + (-> *anim-tester* 0 current-obj) + ) + ) + ) + ) + (cond + (s5-0 + (let ((s4-0 (glst-find-node-by-name (-> s5-0 seq-list) arg0))) + (cond + (s4-0 + (format + #t + "ERROR: there is already a sequence with the name ~S~%" + arg0 + ) + (set! + (-> s5-0 list-con current-index) + (glst-get-node-index (-> s5-0 seq-list) s4-0) + ) + (let ((a1-5 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-5 from) pp) + (set! (-> a1-5 num-params) 0) + (set! (-> a1-5 message) 'edit-sequence) + (send-event-function (ppointer->process *anim-tester*) a1-5) + ) + ) + (else + (let ((gp-1 (new 'global 'anim-test-sequence 1 arg0))) + (glst-add-tail (-> s5-0 seq-list) gp-1) + (set! + (-> gp-1 list-con listfunc) + anim-test-edit-sequence-list-handler + ) + (set! (-> gp-1 list-con left) (-> *ANIM_TESTER-bank* EDIT_LIST_X)) + (set! (-> gp-1 list-con top) (-> *ANIM_TESTER-bank* EDIT_LIST_Y)) + (set! (-> gp-1 list-con list) (-> gp-1 item-list)) + (set! (-> gp-1 list-con list-owner) (the-as uint gp-1)) + (set! (-> gp-1 parent) s5-0) + (anim-test-seq-mark-as-edited gp-1) + (logior! (-> gp-1 flags) 1) + (set! + (-> s5-0 list-con current-index) + (glst-get-node-index (-> s5-0 seq-list) gp-1) + ) + (set! (-> s5-0 seq-index) (-> s5-0 list-con current-index)) + (set! (-> s5-0 seq-hindex) (-> s5-0 list-con current-index)) + (let ((s5-1 (new 'debug 'anim-test-seq-item 1 "**END**"))) + (logior! (-> s5-1 flags) 1) + (glst-add-tail (-> gp-1 item-list) s5-1) + (set! (-> s5-1 parent) gp-1) + ) + ) + (let ((a1-11 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-11 from) pp) + (set! (-> a1-11 num-params) 0) + (set! (-> a1-11 message) 'edit-sequence) + (send-event-function (ppointer->process *anim-tester*) a1-11) + ) + ) + ) + ) + ) + (else + (format #t "ERROR:no object selected~%") + ) + ) + ) + ) + (else + (format #t "ERROR:no object loaded~%") + ) + ) + (none) + ) + ) + +) + +(defmethod inspect anim-tester ((obj anim-tester)) + (format #t "--anim-tester--~%") + (let ((v1-0 (-> obj obj-list))) + "return the start of the list" + (let ((s5-0 (the-as anim-test-obj (-> v1-0 head)))) + (while (let ((v1-36 s5-0)) + "is this node the end of the list. #t = end" + (not (not (-> v1-36 next))) + ) + (format #t "object ~A~%" (-> s5-0 privname)) + (let ((v1-2 (-> s5-0 seq-list))) + "return the start of the list" + (let ((s4-0 (the-as anim-test-sequence (-> v1-2 head)))) + (while (let ((v1-29 s4-0)) + "is this node the end of the list. #t = end" + (not (not (-> v1-29 next))) + ) + (format #t " seq ~A" (-> s4-0 privname)) + (format #t " ~S" (if (logtest? (-> s4-0 flags) 2) + "VALID" + "-" + ) + ) + (format #t " ~S" (if (logtest? (-> s4-0 flags) 4) + "EDITED" + "-" + ) + ) + (format #t " ~S" (if (logtest? (-> s4-0 flags) 1) + "USER_GENERATED" + "-" + ) + ) + (format #t "~%") + (let ((v1-10 (-> s4-0 item-list))) + "return the start of the list" + (let ((s3-0 (the-as anim-test-seq-item (-> v1-10 head)))) + (while (let ((v1-22 s3-0)) + "is this node the end of the list. #t = end" + (not (not (-> v1-22 next))) + ) + (format + #t + " item ~A SP=~f BL=~d FIRST=" + (-> s3-0 privname) + (* + (-> (new 'static 'array float 1 0.01) 0) + (the float (-> s3-0 speed)) + ) + (-> s3-0 blend) + ) + (anim-tester-num-print #t (-> s3-0 first-frame)) + (format #t " LAST=") + (anim-tester-num-print #t (-> s3-0 last-frame)) + (format #t " ~S" (if (logtest? (-> s3-0 flags) 1) + "END_MARKER" + "-" + ) + ) + (format #t " ~S" (if (logtest? (-> s3-0 flags) 2) + "WAIT_FOR_BLEND" + "-" + ) + ) + (format #t " ~S" (if (logtest? (-> s3-0 flags) 4) + "BLANK" + "-" + ) + ) + (format #t "~%") + "return the next node in the list" + (set! s3-0 (the-as anim-test-seq-item (-> s3-0 next))) + ) + ) + ) + "return the next node in the list" + (set! s4-0 (the-as anim-test-sequence (-> s4-0 next))) + ) + ) + ) + "return the next node in the list" + (set! s5-0 (the-as anim-test-obj (-> s5-0 next))) + ) + ) + ) + (format #t "-------------~%") + (format #t "current-obj=~A~%" (-> obj current-obj)) + (format + #t + "speed=~f~%" + (* (-> (new 'static 'array float 1 0.01) 0) (the float (-> obj speed))) + ) + (format #t "--flags:--~%") + (the-as + anim-tester + (format #t " CONNECTED: ~A~%" (if (logtest? (-> obj flags) 1) + "TRUE" + "f" + ) + ) + ) + ) + +;; TODO - manually added +(set! *anim-tester* #f) diff --git a/goal_src/engine/debug/debug-h.gc b/goal_src/engine/debug/debug-h.gc index 755310f02d..4cb051d1f8 100644 --- a/goal_src/engine/debug/debug-h.gc +++ b/goal_src/engine/debug/debug-h.gc @@ -5,6 +5,8 @@ ;; name in dgo: debug-h ;; dgos: GAME, ENGINE +;; TODO - for anim-tester +(define-extern *debug-menu-context* debug-menu-context) (deftype pos-history (structure) ((points (inline-array vector) :offset-assert 0) @@ -44,4 +46,4 @@ ;; TODO - for trajectory.gc (define-extern add-debug-line (function symbol bucket-id vector vector rgba symbol rgba symbol)) -(defun-extern add-debug-sphere symbol bucket-id vector float rgba symbol) \ No newline at end of file +(defun-extern add-debug-sphere symbol bucket-id vector float rgba symbol) diff --git a/goal_src/engine/debug/default-menu.gc b/goal_src/engine/debug/default-menu.gc index 449b4adc38..ee1230cb8e 100644 --- a/goal_src/engine/debug/default-menu.gc +++ b/goal_src/engine/debug/default-menu.gc @@ -30,7 +30,6 @@ (define-extern cam-layout-stop (function none)) (define-extern cam-layout-start (function none)) (define-extern prototype-bucket-recalc-fields (function instance none)) -(define-extern anim-tester-start (function none)) (define-extern auto-save-command (function symbol int int process-tree none)) ;; this file is debug only diff --git a/goal_src/engine/draw/drawable-h.gc b/goal_src/engine/draw/drawable-h.gc index 48c3c35d73..a62d1c93c1 100644 --- a/goal_src/engine/draw/drawable-h.gc +++ b/goal_src/engine/draw/drawable-h.gc @@ -50,3 +50,6 @@ (define-extern process-drawable-art-error (state string process-drawable)) (define-extern foreground-engine-execute (function engine display-frame int int none)) (define-extern sphere-in-view-frustum? (function sphere symbol)) + +;; for anim-tester +(define-extern dma-add-process-drawable function) diff --git a/goal_src/engine/draw/process-drawable.gc b/goal_src/engine/draw/process-drawable.gc index a85850b0db..c881dd30cb 100644 --- a/goal_src/engine/draw/process-drawable.gc +++ b/goal_src/engine/draw/process-drawable.gc @@ -32,7 +32,11 @@ (define-extern ja-group-size (function int)) ;; TODO - for yakow (define-extern ja-frame-num (function int float)) - +;; TODO - for anim-tester +(define-extern draw-joint-spheres (function process-drawable symbol)) +(define-extern *default-skel-template* pair) +(define-extern make-nodes-from-jg (function object pair symbol int)) +(define-extern fill-skeleton-cache (function process-drawable int)) (defun vector<-cspace! ((arg0 vector) (arg1 cspace)) (rlet ((Q :class vf) diff --git a/goal_src/engine/ui/text-h.gc b/goal_src/engine/ui/text-h.gc index 8cea26f48b..cb316ae9dc 100644 --- a/goal_src/engine/ui/text-h.gc +++ b/goal_src/engine/ui/text-h.gc @@ -203,6 +203,10 @@ (rolling-ring-chase-1 #x324) (rolling-ring-chase-2 #x325) + (rolling-ring-hint-one-ring-down #x33f) + (rolling-ring-hint-be-quick-to-next #x340) + (rolling-ring-hint-be-quick-all #x341) + (sunken-blue-eco-charger-hint #x345) (sunken-qbert-hint #x34a) diff --git a/goal_src/kernel/gcommon.gc b/goal_src/kernel/gcommon.gc index 625175501d..3573c7b550 100644 --- a/goal_src/kernel/gcommon.gc +++ b/goal_src/kernel/gcommon.gc @@ -1391,3 +1391,9 @@ ) ) +(defmacro cmove-#f-zero (dest condition src) + `(if (zero? ,condition) + (set! ,dest #f) + (set! ,dest ,src) + ) + ) diff --git a/test/decompiler/reference/decompiler-macros.gc b/test/decompiler/reference/decompiler-macros.gc index 62dc1959d9..d8ac32995d 100644 --- a/test/decompiler/reference/decompiler-macros.gc +++ b/test/decompiler/reference/decompiler-macros.gc @@ -755,3 +755,10 @@ :flags (sp-flag copy-from-other-field) ) ) + +(defmacro cmove-#f-zero (dest condition src) + `(if (zero? ,condition) + (set! ,dest #f) + (set! ,dest ,src) + ) + ) diff --git a/test/decompiler/reference/engine/debug/anim-tester_REF.gc b/test/decompiler/reference/engine/debug/anim-tester_REF.gc new file mode 100644 index 0000000000..5188af2090 --- /dev/null +++ b/test/decompiler/reference/engine/debug/anim-tester_REF.gc @@ -0,0 +1,3955 @@ +;;-*-Lisp-*- +(in-package goal) + +;; this file is debug only +(when *debug-segment* +;; definition of type list-control +(deftype list-control (structure) + ((listfunc (function int list-control symbol) :offset-assert 0) + (list-owner uint32 :offset-assert 4) + (top int32 :offset-assert 8) + (left int32 :offset-assert 12) + (list glst-list :offset-assert 16) + (the-node glst-node :offset-assert 20) + (top-index int32 :offset-assert 24) + (the-index int32 :offset-assert 28) + (the-disp-line int32 :offset-assert 32) + (highlight-index int32 :offset-assert 36) + (current-index int32 :offset-assert 40) + (numlines int32 :offset-assert 44) + (lines-to-disp int32 :offset-assert 48) + (charswide int32 :offset-assert 52) + (highlight-disp-line int32 :offset-assert 56) + (field-id int32 :offset-assert 60) + (xpos int32 :offset-assert 64) + (ypos int32 :offset-assert 68) + (user-info int32 :offset-assert 72) + (user-info-u uint32 :offset 72) + (return-int int32 :offset-assert 76) + ) + :allow-misaligned :method-count-assert 9 + :size-assert #x50 + :flag-assert #x900000050 + ) + +;; definition for method 3 of type list-control +(defmethod inspect list-control ((obj list-control)) + (format #t "[~8x] ~A~%" obj 'list-control) + (format #t "~Tlistfunc: ~A~%" (-> obj listfunc)) + (format #t "~Tlist-owner: #x~X~%" (-> obj list-owner)) + (format #t "~Ttop: ~D~%" (-> obj top)) + (format #t "~Tleft: ~D~%" (-> obj left)) + (format #t "~Tlist: #~%" (-> obj list)) + (format #t "~Tthe-node: #~%" (-> obj the-node)) + (format #t "~Ttop-index: ~D~%" (-> obj top-index)) + (format #t "~Tthe-index: ~D~%" (-> obj the-index)) + (format #t "~Tthe-disp-line: ~D~%" (-> obj the-disp-line)) + (format #t "~Thighlight-index: ~D~%" (-> obj highlight-index)) + (format #t "~Tcurrent-index: ~D~%" (-> obj current-index)) + (format #t "~Tnumlines: ~D~%" (-> obj numlines)) + (format #t "~Tlines-to-disp: ~D~%" (-> obj lines-to-disp)) + (format #t "~Tcharswide: ~D~%" (-> obj charswide)) + (format #t "~Thighlight-disp-line: ~D~%" (-> obj highlight-disp-line)) + (format #t "~Tfield-id: ~D~%" (-> obj field-id)) + (format #t "~Txpos: ~D~%" (-> obj xpos)) + (format #t "~Typos: ~D~%" (-> obj ypos)) + (format #t "~Tuser-info: ~D~%" (-> obj user-info)) + (format #t "~Treturn-int: ~D~%" (-> obj return-int)) + obj + ) + +;; definition of type list-field +(deftype list-field (structure) + ((left int32 :offset-assert 0) + (width int32 :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) + +;; definition for method 3 of type list-field +(defmethod inspect list-field ((obj list-field)) + (format #t "[~8x] ~A~%" obj 'list-field) + (format #t "~Tleft: ~D~%" (-> obj left)) + (format #t "~Twidth: ~D~%" (-> obj width)) + obj + ) + +;; definition of type DISP_LIST-bank +(deftype DISP_LIST-bank (basic) + ((TV_SPACING int32 :offset-assert 4) + (BORDER_WIDTH int32 :offset-assert 8) + (BORDER_HEIGHT int32 :offset-assert 12) + (MAX_LINES int32 :offset-assert 16) + (CHAR_WIDTH int32 :offset-assert 20) + (INC_DELAY int32 :offset-assert 24) + (BORDER_LINES int32 :offset-assert 28) + (CXOFF int32 :offset-assert 32) + (CYOFF int32 :offset-assert 36) + (BXOFF int32 :offset-assert 40) + (BYOFF int32 :offset-assert 44) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) + +;; definition for method 3 of type DISP_LIST-bank +(defmethod inspect DISP_LIST-bank ((obj DISP_LIST-bank)) + (format #t "[~8x] ~A~%" obj (-> obj type)) + (format #t "~TV_SPACING: ~D~%" (-> obj TV_SPACING)) + (format #t "~TBORDER_WIDTH: ~D~%" (-> obj BORDER_WIDTH)) + (format #t "~TBORDER_HEIGHT: ~D~%" (-> obj BORDER_HEIGHT)) + (format #t "~TMAX_LINES: ~D~%" (-> obj MAX_LINES)) + (format #t "~TCHAR_WIDTH: ~D~%" (-> obj CHAR_WIDTH)) + (format #t "~TINC_DELAY: ~D~%" (-> obj INC_DELAY)) + (format #t "~TBORDER_LINES: ~D~%" (-> obj BORDER_LINES)) + (format #t "~TCXOFF: ~D~%" (-> obj CXOFF)) + (format #t "~TCYOFF: ~D~%" (-> obj CYOFF)) + (format #t "~TBXOFF: ~D~%" (-> obj BXOFF)) + (format #t "~TBYOFF: ~D~%" (-> obj BYOFF)) + obj + ) + +;; definition for symbol *DISP_LIST-bank*, type DISP_LIST-bank +(define + *DISP_LIST-bank* + (new 'static 'DISP_LIST-bank + :TV_SPACING 8 + :BORDER_WIDTH 4 + :BORDER_HEIGHT 4 + :MAX_LINES 12 + :CHAR_WIDTH 10 + :INC_DELAY 20 + :BORDER_LINES 3 + ) + ) + +;; definition for function display-list-control +;; INFO: Return type mismatch pointer vs none. +(defun display-list-control ((arg0 list-control)) + (when (< (-> arg0 current-index) 0) + (set! (-> arg0 current-index) 0) + 0 + ) + (if (>= (-> arg0 current-index) (glst-num-elements (-> arg0 list))) + (set! (-> arg0 current-index) -1) + ) + (when (< (-> arg0 highlight-index) 0) + (set! (-> arg0 highlight-index) 0) + 0 + ) + (if (>= (-> arg0 highlight-index) (glst-num-elements (-> arg0 list))) + (set! (-> arg0 highlight-index) (+ (glst-num-elements (-> arg0 list)) -1)) + ) + (set! (-> arg0 the-index) (-> arg0 highlight-index)) + (set! + (-> arg0 the-node) + (glst-get-node-by-index (-> arg0 list) (-> arg0 highlight-index)) + ) + (when (not ((-> arg0 listfunc) 1 arg0)) + (set! (-> arg0 the-index) 0) + (let ((v1-12 (-> arg0 list))) + "return the start of the list" + (set! (-> arg0 the-node) (-> v1-12 head)) + ) + (while (let ((v1-22 (-> arg0 the-node))) + "is this node the end of the list. #t = end" + (not (not (-> v1-22 next))) + ) + (when ((-> arg0 listfunc) 1 arg0) + (set! (-> arg0 highlight-index) (-> arg0 the-index)) + (goto cfg-18) + ) + (+! (-> arg0 the-index) 1) + (let ((v1-20 (-> arg0 the-node))) + "return the next node in the list" + (set! (-> arg0 the-node) (-> v1-20 next)) + ) + ) + (set! (-> arg0 highlight-index) 0) + 0 + ) + (label cfg-18) + (set! (-> arg0 the-index) (-> arg0 highlight-index)) + (set! + (-> arg0 the-node) + (glst-get-node-by-index (-> arg0 list) (-> arg0 the-index)) + ) + ((-> arg0 listfunc) 4 arg0) + (let ((s5-2 #f) + (s4-0 #f) + ) + (set! (-> arg0 numlines) 0) + (set! (-> arg0 charswide) 0) + (set! (-> arg0 the-index) 0) + (set! (-> arg0 the-disp-line) 0) + (let ((v1-29 (-> arg0 list))) + "return the start of the list" + (set! (-> arg0 the-node) (-> v1-29 head)) + ) + (while (let ((v1-52 (-> arg0 the-node))) + "is this node the end of the list. #t = end" + (not (not (-> v1-52 next))) + ) + (when ((-> arg0 listfunc) 1 arg0) + (if (and (not s5-2) (>= (-> arg0 the-index) (-> arg0 top-index))) + (set! s5-2 #t) + ) + (when (and (not s4-0) (>= (-> arg0 the-index) (-> arg0 highlight-index))) + (set! s4-0 #t) + (set! (-> arg0 highlight-disp-line) (-> arg0 the-disp-line)) + ) + ((-> arg0 listfunc) 2 arg0) + (if (< (-> arg0 charswide) (-> arg0 return-int)) + (set! (-> arg0 charswide) (-> arg0 return-int)) + ) + (if s5-2 + (+! (-> arg0 the-disp-line) 1) + ) + (+! (-> arg0 numlines) 1) + ) + (+! (-> arg0 the-index) 1) + (let ((v1-50 (-> arg0 the-node))) + "return the next node in the list" + (set! (-> arg0 the-node) (-> v1-50 next)) + ) + ) + ) + (set! + (-> arg0 lines-to-disp) + (if (< (-> *DISP_LIST-bank* MAX_LINES) (-> arg0 numlines)) + (-> *DISP_LIST-bank* MAX_LINES) + (-> arg0 numlines) + ) + ) + (if (> (-> arg0 lines-to-disp) 0) + (-> arg0 lines-to-disp) + 1 + ) + (let* ((s4-1 (-> *display* frames (-> *display* on-screen) frame debug-buf)) + (s5-3 (-> s4-1 base)) + ) + (draw-sprite2d-xy + s4-1 + (-> arg0 left) + (-> arg0 top) + (+ + (* (-> arg0 charswide) (-> *DISP_LIST-bank* CHAR_WIDTH)) + (* (-> *DISP_LIST-bank* BORDER_WIDTH) 2) + ) + (+ + (* (+ (-> arg0 lines-to-disp) 1) (-> *DISP_LIST-bank* TV_SPACING)) + (* (-> *DISP_LIST-bank* BORDER_WIDTH) 2) + ) + (new 'static 'rgba :a #x40) + ) + (let ((a3-6 (-> s4-1 base))) + (let ((v1-72 (the-as object (-> s4-1 base)))) + (set! + (-> (the-as dma-packet v1-72) dma) + (new 'static 'dma-tag :id (dma-tag-id next)) + ) + (set! (-> (the-as dma-packet v1-72) vif0) (new 'static 'vif-tag)) + (set! (-> (the-as dma-packet v1-72) vif1) (new 'static 'vif-tag)) + (set! (-> s4-1 base) (&+ (the-as pointer v1-72) 16)) + ) + (dma-bucket-insert-tag + (-> *display* frames (-> *display* on-screen) frame bucket-group) + (bucket-id debug-draw0) + s5-3 + (the-as (pointer dma-tag) a3-6) + ) + ) + ) + (set! (-> arg0 xpos) (+ (-> arg0 left) (-> *DISP_LIST-bank* BORDER_WIDTH))) + (set! (-> arg0 ypos) (+ (-> arg0 top) (-> *DISP_LIST-bank* BORDER_HEIGHT))) + ((-> arg0 listfunc) 3 arg0) + (cond + ((> (-> arg0 lines-to-disp) 0) + (cond + ((< (-> arg0 highlight-disp-line) (-> *DISP_LIST-bank* BORDER_LINES)) + (let + ((s5-4 + (- (-> *DISP_LIST-bank* BORDER_LINES) (-> arg0 highlight-disp-line)) + ) + ) + (set! + (-> arg0 the-node) + (glst-get-node-by-index (-> arg0 list) (-> arg0 top-index)) + ) + (set! (-> arg0 the-index) (-> arg0 top-index)) + (let ((v1-88 (-> arg0 the-node))) + "is this node the start of the list. #t = start" + (when (not (not (-> v1-88 prev))) + (while #t + (let ((v1-92 (-> arg0 the-node))) + "return the previous node in the list" + (let ((v1-93 (-> v1-92 prev))) + (let ((a0-41 v1-93)) + "is this node the start of the list. #t = start" + (if (not (-> a0-41 prev)) + (goto cfg-61) + ) + ) + (set! (-> arg0 the-node) v1-93) + ) + ) + (+! (-> arg0 the-index) -1) + (when ((-> arg0 listfunc) 1 arg0) + (set! (-> arg0 top-index) (-> arg0 the-index)) + (+! s5-4 -1) + (if (<= s5-4 0) + (goto cfg-61) + ) + ) + ) + ) + ) + ) + (label cfg-61) + ) + ((>= + (-> arg0 highlight-disp-line) + (- (-> *DISP_LIST-bank* MAX_LINES) (-> *DISP_LIST-bank* BORDER_LINES)) + ) + (let + ((s5-5 + (- + (-> arg0 highlight-disp-line) + (- (-> *DISP_LIST-bank* MAX_LINES) (-> *DISP_LIST-bank* BORDER_LINES)) + ) + ) + ) + (set! + (-> arg0 the-node) + (glst-get-node-by-index (-> arg0 list) (-> arg0 top-index)) + ) + (set! (-> arg0 the-index) (-> arg0 top-index)) + (let ((v1-107 (-> arg0 the-node))) + "is this node the end of the list. #t = end" + (when (not (not (-> v1-107 next))) + (while #t + (let ((v1-111 (-> arg0 the-node))) + "return the next node in the list" + (let ((v1-112 (-> v1-111 next))) + (let ((a0-55 v1-112)) + "is this node the end of the list. #t = end" + (if (not (-> a0-55 next)) + (goto cfg-77) + ) + ) + (set! (-> arg0 the-node) v1-112) + ) + ) + (+! (-> arg0 the-index) 1) + (when ((-> arg0 listfunc) 1 arg0) + (set! (-> arg0 top-index) (-> arg0 the-index)) + (+! s5-5 -1) + (if (<= s5-5 0) + (goto cfg-77) + ) + ) + ) + ) + ) + ) + ) + ) + (label cfg-77) + (set! (-> arg0 the-disp-line) 0) + (set! (-> arg0 the-index) (-> arg0 top-index)) + (set! + (-> arg0 the-node) + (glst-get-node-by-index (-> arg0 list) (-> arg0 top-index)) + ) + (while (let ((v1-135 (-> arg0 the-node))) + "is this node the end of the list. #t = end" + (not + (or + (not (-> v1-135 next)) + (>= (-> arg0 the-disp-line) (-> *DISP_LIST-bank* MAX_LINES)) + ) + ) + ) + (when ((-> arg0 listfunc) 1 arg0) + (set! + (-> arg0 xpos) + (+ (-> arg0 left) (-> *DISP_LIST-bank* BORDER_WIDTH)) + ) + (set! + (-> arg0 ypos) + (+ + (-> arg0 top) + (-> *DISP_LIST-bank* BORDER_HEIGHT) + (* (+ (-> arg0 the-disp-line) 1) (-> *DISP_LIST-bank* TV_SPACING)) + ) + ) + ((-> arg0 listfunc) 0 arg0) + (+! (-> arg0 the-disp-line) 1) + ) + (+! (-> arg0 the-index) 1) + (let ((v1-133 (-> arg0 the-node))) + "return the next node in the list" + (set! (-> arg0 the-node) (-> v1-133 next)) + ) + ) + ) + (else + (let* ((s4-2 (-> *display* frames (-> *display* on-screen) frame debug-buf)) + (s5-6 (-> s4-2 base)) + ) + (draw-string-xy + "**NONE**" + s4-2 + (+ (-> arg0 left) (-> *DISP_LIST-bank* BORDER_WIDTH)) + (+ + (-> arg0 top) + (-> *DISP_LIST-bank* BORDER_HEIGHT) + (-> *DISP_LIST-bank* TV_SPACING) + ) + (font-color dim-white) + (font-flags shadow kerning) + ) + (let ((a3-12 (-> s4-2 base))) + (let ((v1-147 (the-as object (-> s4-2 base)))) + (set! + (-> (the-as dma-packet v1-147) dma) + (new 'static 'dma-tag :id (dma-tag-id next)) + ) + (set! (-> (the-as dma-packet v1-147) vif0) (new 'static 'vif-tag)) + (set! (-> (the-as dma-packet v1-147) vif1) (new 'static 'vif-tag)) + (set! (-> s4-2 base) (&+ (the-as pointer v1-147) 16)) + ) + (dma-bucket-insert-tag + (-> *display* frames (-> *display* on-screen) frame bucket-group) + (bucket-id debug-draw0) + s5-6 + (the-as (pointer dma-tag) a3-12) + ) + ) + ) + ) + ) + (none) + ) + +;; definition of type anim-tester-bank +(deftype anim-tester-bank (basic) + ((ANIM_SPEED float :offset-assert 4) + (BLEND float :offset-assert 8) + (OBJECT_LIST_X int32 :offset-assert 12) + (OBJECT_LIST_Y int32 :offset-assert 16) + (OBJECT_LIST_MIN_WIDTH int32 :offset-assert 20) + (ANIM_LIST_X int32 :offset-assert 24) + (ANIM_LIST_Y int32 :offset-assert 28) + (ANIM_LIST_MIN_WIDTH int32 :offset-assert 32) + (PICK_LIST_X int32 :offset-assert 36) + (PICK_LIST_Y int32 :offset-assert 40) + (PICK_LIST_MIN_WIDTH int32 :offset-assert 44) + (EDIT_LIST_X int32 :offset-assert 48) + (EDIT_LIST_Y int32 :offset-assert 52) + (EDIT_STATS_X int32 :offset-assert 56) + (EDIT_LIST_MIN_WIDTH int32 :offset-assert 60) + (EDIT_PICK_X int32 :offset-assert 64) + ) + :method-count-assert 9 + :size-assert #x44 + :flag-assert #x900000044 + ) + +;; definition for method 3 of type anim-tester-bank +(defmethod inspect anim-tester-bank ((obj anim-tester-bank)) + (format #t "[~8x] ~A~%" obj (-> obj type)) + (format #t "~TANIM_SPEED: ~f~%" (-> obj ANIM_SPEED)) + (format #t "~TBLEND: ~f~%" (-> obj BLEND)) + (format #t "~TOBJECT_LIST_X: ~D~%" (-> obj OBJECT_LIST_X)) + (format #t "~TOBJECT_LIST_Y: ~D~%" (-> obj OBJECT_LIST_Y)) + (format #t "~TOBJECT_LIST_MIN_WIDTH: ~D~%" (-> obj OBJECT_LIST_MIN_WIDTH)) + (format #t "~TANIM_LIST_X: ~D~%" (-> obj ANIM_LIST_X)) + (format #t "~TANIM_LIST_Y: ~D~%" (-> obj ANIM_LIST_Y)) + (format #t "~TANIM_LIST_MIN_WIDTH: ~D~%" (-> obj ANIM_LIST_MIN_WIDTH)) + (format #t "~TPICK_LIST_X: ~D~%" (-> obj PICK_LIST_X)) + (format #t "~TPICK_LIST_Y: ~D~%" (-> obj PICK_LIST_Y)) + (format #t "~TPICK_LIST_MIN_WIDTH: ~D~%" (-> obj PICK_LIST_MIN_WIDTH)) + (format #t "~TEDIT_LIST_X: ~D~%" (-> obj EDIT_LIST_X)) + (format #t "~TEDIT_LIST_Y: ~D~%" (-> obj EDIT_LIST_Y)) + (format #t "~TEDIT_STATS_X: ~D~%" (-> obj EDIT_STATS_X)) + (format #t "~TEDIT_LIST_MIN_WIDTH: ~D~%" (-> obj EDIT_LIST_MIN_WIDTH)) + (format #t "~TEDIT_PICK_X: ~D~%" (-> obj EDIT_PICK_X)) + obj + ) + +;; definition for symbol *ANIM_TESTER-bank*, type anim-tester-bank +(define + *ANIM_TESTER-bank* + (new 'static 'anim-tester-bank + :ANIM_SPEED 1.0 + :BLEND 1.0 + :OBJECT_LIST_X 10 + :OBJECT_LIST_Y 50 + :OBJECT_LIST_MIN_WIDTH 18 + :ANIM_LIST_X 10 + :ANIM_LIST_Y 50 + :ANIM_LIST_MIN_WIDTH 17 + :PICK_LIST_X 10 + :PICK_LIST_Y 50 + :PICK_LIST_MIN_WIDTH 21 + :EDIT_LIST_X 10 + :EDIT_LIST_Y 50 + :EDIT_STATS_X 30 + :EDIT_LIST_MIN_WIDTH 64 + :EDIT_PICK_X 30 + ) + ) + +;; definition of type anim-tester +(deftype anim-tester (process-drawable) + ((flags int32 :offset-assert 176) + (obj-list glst-list :inline :offset-assert 180) + (current-obj string :offset-assert 196) + (speed int32 :offset-assert 200) + (list-con list-control :inline :offset-assert 204) + (pick-con list-control :inline :offset-assert 284) + (item-field int64 :offset-assert 368) + (inc-delay int32 :offset-assert 376) + (inc-timer int32 :offset-assert 380) + (edit-mode int32 :offset-assert 384) + (old-mode int32 :offset-assert 388) + (anim-speed float :offset-assert 392) + (anim-gspeed float :offset-assert 396) + (anim-first float :offset-assert 400) + (anim-last float :offset-assert 404) + ) + :heap-base #x130 + :method-count-assert 20 + :size-assert #x198 + :flag-assert #x1401300198 + ) + +;; definition for method 3 of type anim-tester +;; INFO: this function exists in multiple non-identical object files +(defmethod inspect anim-tester ((obj anim-tester)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tflags: ~D~%" (-> obj flags)) + (format #t "~T~Tobj-list: #~%" (-> obj obj-list)) + (format #t "~T~Tcurrent-obj: ~A~%" (-> obj current-obj)) + (format #t "~T~Tspeed: ~D~%" (-> obj speed)) + (format #t "~T~Tlist-con: #~%" (-> obj list-con)) + (format #t "~T~Tpick-con: #~%" (-> obj pick-con)) + (format #t "~T~Titem-field: ~D~%" (-> obj item-field)) + (format #t "~T~Tinc-delay: ~D~%" (-> obj inc-delay)) + (format #t "~T~Tinc-timer: ~D~%" (-> obj inc-timer)) + (format #t "~T~Tedit-mode: ~D~%" (-> obj edit-mode)) + (format #t "~T~Told-mode: ~D~%" (-> obj old-mode)) + (format #t "~T~Tanim-speed: ~f~%" (-> obj anim-speed)) + (format #t "~T~Tanim-gspeed: ~f~%" (-> obj anim-gspeed)) + (format #t "~T~Tanim-first: ~f~%" (-> obj anim-first)) + (format #t "~T~Tanim-last: ~f~%" (-> obj anim-last)) + obj + ) + +;; definition for function anim-tester-num-print +;; INFO: Return type mismatch object vs none. +(defun anim-tester-num-print ((arg0 basic) (arg1 float)) + (cond + ((= arg1 (-> (new 'static 'array float 1 -2.0) 0)) + (format arg0 "max") + ) + ((= arg1 (-> (new 'static 'array float 1 -1.0) 0)) + (format arg0 "min") + ) + (else + (format arg0 "~f" arg1) + ) + ) + (none) + ) + +;; definition (perm) for symbol *anim-tester*, type (pointer anim-tester) +(define-perm *anim-tester* (pointer anim-tester) #f) + +;; definition of type anim-test-obj +(deftype anim-test-obj (glst-named-node) + ((obj-art-group art-group :offset-assert 12) + (seq-list glst-list :inline :offset-assert 16) + (flags int32 :offset-assert 32) + (mesh-geo merc-ctrl :offset-assert 36) + (joint-geo art-joint-geo :offset-assert 40) + (list-con list-control :inline :offset-assert 44) + (parent uint32 :offset-assert 124) + (anim-index int32 :offset-assert 128) + (anim-hindex int32 :offset-assert 132) + (seq-index int32 :offset-assert 136) + (seq-hindex int32 :offset-assert 140) + ) + :method-count-assert 9 + :size-assert #x90 + :flag-assert #x900000090 + (:methods + (new (symbol type int string basic) _type_ 0) + ) + ) + +;; definition for method 3 of type anim-test-obj +(defmethod inspect anim-test-obj ((obj anim-test-obj)) + (format #t "[~8x] ~A~%" obj 'anim-test-obj) + (format #t "~Tnext: #~%" (-> obj next)) + (format #t "~Tprev: #~%" (-> obj prev)) + (format #t "~Tprivname: ~A~%" (-> obj privname)) + (format #t "~Tobj-art-group: ~A~%" (-> obj obj-art-group)) + (format #t "~Tseq-list: #~%" (-> obj seq-list)) + (format #t "~Tflags: ~D~%" (-> obj flags)) + (format #t "~Tmesh-geo: ~A~%" (-> obj mesh-geo)) + (format #t "~Tjoint-geo: ~A~%" (-> obj joint-geo)) + (format #t "~Tlist-con: #~%" (-> obj list-con)) + (format #t "~Tparent: #x~X~%" (-> obj parent)) + (format #t "~Tanim-index: ~D~%" (-> obj anim-index)) + (format #t "~Tanim-hindex: ~D~%" (-> obj anim-hindex)) + (format #t "~Tseq-index: ~D~%" (-> obj seq-index)) + (format #t "~Tseq-hindex: ~D~%" (-> obj seq-hindex)) + obj + ) + +;; definition for function anim-test-obj-init +;; INFO: Return type mismatch glst-node vs none. +(defun anim-test-obj-init ((arg0 anim-test-obj) (arg1 list-control)) + (set! (-> arg0 mesh-geo) #f) + (set! (-> arg0 joint-geo) #f) + (set! (-> arg0 list-con listfunc) anim-test-anim-list-handler) + (set! (-> arg0 list-con left) (-> *ANIM_TESTER-bank* ANIM_LIST_X)) + (set! (-> arg0 list-con top) (-> *ANIM_TESTER-bank* ANIM_LIST_Y)) + (set! (-> arg0 list-con list) (-> arg0 seq-list)) + (set! (-> arg0 list-con list-owner) (the-as uint arg0)) + (let ((v1-6 arg1)) + (set! (-> arg0 parent) (the-as uint (if v1-6 + (-> v1-6 the-node) + ) + ) + ) + ) + (none) + ) + +;; definition for method 0 of type anim-test-obj +(defmethod + new + anim-test-obj + ((allocation symbol) + (type-to-make type) + (arg0 int) + (arg1 string) + (arg2 basic) + ) + (let ((t9-0 (method-of-type structure new)) + (v1-1 type-to-make) + ) + (-> type-to-make size) + (let ((s4-0 (the-as anim-test-obj (t9-0 allocation v1-1)))) + (set! (-> s4-0 obj-art-group) (the-as art-group arg2)) + (set! (-> s4-0 privname) arg1) + (glst-init-list! (-> s4-0 seq-list)) + s4-0 + ) + ) + ) + +;; definition of type anim-test-sequence +(deftype anim-test-sequence (glst-named-node) + ((item-list glst-list :inline :offset-assert 12) + (playing-item int32 :offset-assert 28) + (flags int32 :offset-assert 32) + (list-con list-control :inline :offset-assert 36) + (parent anim-test-obj :offset-assert 116) + ) + :method-count-assert 9 + :size-assert #x78 + :flag-assert #x900000078 + (:methods + (new (symbol type int string) _type_ 0) + ) + ) + +;; definition for method 3 of type anim-test-sequence +(defmethod inspect anim-test-sequence ((obj anim-test-sequence)) + (format #t "[~8x] ~A~%" obj 'anim-test-sequence) + (format #t "~Tnext: #~%" (-> obj next)) + (format #t "~Tprev: #~%" (-> obj prev)) + (format #t "~Tprivname: ~A~%" (-> obj privname)) + (format #t "~Titem-list: #~%" (-> obj item-list)) + (format #t "~Tplaying-item: ~D~%" (-> obj playing-item)) + (format #t "~Tflags: ~D~%" (-> obj flags)) + (format #t "~Tlist-con: #~%" (-> obj list-con)) + (format #t "~Tparent: #~%" (-> obj parent)) + obj + ) + +;; definition for function anim-test-sequence-init +;; INFO: Return type mismatch anim-test-obj vs none. +(defun anim-test-sequence-init ((arg0 anim-test-sequence) (arg1 anim-test-obj)) + (set! (-> arg0 list-con listfunc) anim-test-edit-sequence-list-handler) + (set! (-> arg0 list-con left) (-> *ANIM_TESTER-bank* EDIT_LIST_X)) + (set! (-> arg0 list-con top) (-> *ANIM_TESTER-bank* EDIT_LIST_Y)) + (set! (-> arg0 list-con list) (-> arg0 item-list)) + (set! (-> arg0 list-con list-owner) (the-as uint arg0)) + (set! (-> arg0 parent) arg1) + (none) + ) + +;; definition for method 0 of type anim-test-sequence +(defmethod + new + anim-test-sequence + ((allocation symbol) (type-to-make type) (arg0 int) (arg1 string)) + (let ((t9-0 (method-of-type structure new)) + (v1-1 type-to-make) + ) + (-> type-to-make size) + (let ((s5-0 (the-as anim-test-sequence (t9-0 allocation v1-1)))) + (set! (-> s5-0 privname) arg1) + (glst-init-list! (-> s5-0 item-list)) + s5-0 + ) + ) + ) + +;; definition of type anim-test-seq-item +(deftype anim-test-seq-item (glst-named-node) + ((speed int32 :offset-assert 12) + (blend int32 :offset-assert 16) + (first-frame float :offset-assert 20) + (last-frame float :offset-assert 24) + (num-frames float :offset-assert 28) + (artist-base float :offset-assert 32) + (flags int32 :offset-assert 36) + (parent anim-test-sequence :offset-assert 40) + ) + :method-count-assert 9 + :size-assert #x2c + :flag-assert #x90000002c + (:methods + (new (symbol type int string) _type_ 0) + ) + ) + +;; definition for method 3 of type anim-test-seq-item +(defmethod inspect anim-test-seq-item ((obj anim-test-seq-item)) + (format #t "[~8x] ~A~%" obj 'anim-test-seq-item) + (format #t "~Tnext: #~%" (-> obj next)) + (format #t "~Tprev: #~%" (-> obj prev)) + (format #t "~Tprivname: ~A~%" (-> obj privname)) + (format #t "~Tspeed: ~D~%" (-> obj speed)) + (format #t "~Tblend: ~D~%" (-> obj blend)) + (format #t "~Tfirst-frame: ~f~%" (-> obj first-frame)) + (format #t "~Tlast-frame: ~f~%" (-> obj last-frame)) + (format #t "~Tnum-frames: ~f~%" (-> obj num-frames)) + (format #t "~Tartist-base: ~f~%" (-> obj artist-base)) + (format #t "~Tflags: ~D~%" (-> obj flags)) + (format #t "~Tparent: #~%" (-> obj parent)) + obj + ) + +;; definition for method 0 of type anim-test-seq-item +;; INFO: Return type mismatch structure vs anim-test-seq-item. +(defmethod + new + anim-test-seq-item + ((allocation symbol) (type-to-make type) (arg0 int) (arg1 string)) + (let ((t9-0 (method-of-type structure new)) + (v1-1 type-to-make) + ) + (-> type-to-make size) + (let ((v0-0 (t9-0 allocation v1-1))) + (set! (-> (the-as anim-test-seq-item v0-0) privname) arg1) + (set! (-> (the-as anim-test-seq-item v0-0) speed) 100) + (set! (-> (the-as anim-test-seq-item v0-0) blend) 0) + (set! + (-> (the-as anim-test-seq-item v0-0) first-frame) + (-> (new 'static 'array float 1 -1.0) 0) + ) + (set! + (-> (the-as anim-test-seq-item v0-0) last-frame) + (-> (new 'static 'array float 1 -2.0) 0) + ) + (the-as anim-test-seq-item v0-0) + ) + ) + ) + +;; definition for function anim-test-seq-item-copy! +(defun + anim-test-seq-item-copy! + ((arg0 anim-test-seq-item) (arg1 anim-test-seq-item)) + (let ((v1-0 arg0)) + (set! (-> v1-0 privname) (-> arg1 privname)) + ) + (set! (-> arg0 speed) (-> arg1 speed)) + (set! (-> arg0 blend) (-> arg1 blend)) + (set! (-> arg0 first-frame) (-> arg1 first-frame)) + (set! (-> arg0 last-frame) (-> arg1 last-frame)) + (set! (-> arg0 num-frames) (-> arg1 num-frames)) + (set! (-> arg0 artist-base) (-> arg1 artist-base)) + (set! (-> arg0 flags) (-> arg1 flags)) + (let ((v0-0 (-> arg1 parent))) + (set! (-> arg0 parent) v0-0) + v0-0 + ) + ) + +;; definition for method 3 of type anim-tester +;; INFO: this function exists in multiple non-identical object files +;; INFO: Return type mismatch object vs anim-tester. +(defmethod inspect anim-tester ((obj anim-tester)) + (format #t "--anim-tester--~%") + (let ((v1-0 (-> obj obj-list))) + "return the start of the list" + (let ((s5-0 (the-as anim-test-obj (-> v1-0 head)))) + (while (let ((v1-36 s5-0)) + "is this node the end of the list. #t = end" + (not (not (-> v1-36 next))) + ) + (format #t "object ~A~%" (-> s5-0 privname)) + (let ((v1-2 (-> s5-0 seq-list))) + "return the start of the list" + (let ((s4-0 (the-as anim-test-sequence (-> v1-2 head)))) + (while (let ((v1-29 s4-0)) + "is this node the end of the list. #t = end" + (not (not (-> v1-29 next))) + ) + (format #t " seq ~A" (-> s4-0 privname)) + (format #t " ~S" (if (logtest? (-> s4-0 flags) 2) + "VALID" + "-" + ) + ) + (format #t " ~S" (if (logtest? (-> s4-0 flags) 4) + "EDITED" + "-" + ) + ) + (format #t " ~S" (if (logtest? (-> s4-0 flags) 1) + "USER_GENERATED" + "-" + ) + ) + (format #t "~%") + (let ((v1-10 (-> s4-0 item-list))) + "return the start of the list" + (let ((s3-0 (the-as anim-test-seq-item (-> v1-10 head)))) + (while (let ((v1-22 s3-0)) + "is this node the end of the list. #t = end" + (not (not (-> v1-22 next))) + ) + (format + #t + " item ~A SP=~f BL=~d FIRST=" + (-> s3-0 privname) + (* + (-> (new 'static 'array float 1 0.01) 0) + (the float (-> s3-0 speed)) + ) + (-> s3-0 blend) + ) + (anim-tester-num-print #t (-> s3-0 first-frame)) + (format #t " LAST=") + (anim-tester-num-print #t (-> s3-0 last-frame)) + (format #t " ~S" (if (logtest? (-> s3-0 flags) 1) + "END_MARKER" + "-" + ) + ) + (format #t " ~S" (if (logtest? (-> s3-0 flags) 2) + "WAIT_FOR_BLEND" + "-" + ) + ) + (format #t " ~S" (if (logtest? (-> s3-0 flags) 4) + "BLANK" + "-" + ) + ) + (format #t "~%") + "return the next node in the list" + (set! s3-0 (the-as anim-test-seq-item (-> s3-0 next))) + ) + ) + ) + "return the next node in the list" + (set! s4-0 (the-as anim-test-sequence (-> s4-0 next))) + ) + ) + ) + "return the next node in the list" + (set! s5-0 (the-as anim-test-obj (-> s5-0 next))) + ) + ) + ) + (format #t "-------------~%") + (format #t "current-obj=~A~%" (-> obj current-obj)) + (format + #t + "speed=~f~%" + (* (-> (new 'static 'array float 1 0.01) 0) (the float (-> obj speed))) + ) + (format #t "--flags:--~%") + (the-as + anim-tester + (format #t " CONNECTED: ~A~%" (if (logtest? (-> obj flags) 1) + "TRUE" + "f" + ) + ) + ) + ) + +;; definition for function anim-test-obj-item-valid? +(defun anim-test-obj-item-valid? ((arg0 anim-test-obj) (arg1 anim-test-seq-item)) + (let ((v1-0 (-> arg0 seq-list))) + "return the start of the list" + (let ((s5-0 (the-as anim-test-sequence (-> v1-0 head)))) + (while (let ((v1-13 s5-0)) + "is this node the end of the list. #t = end" + (not (not (-> v1-13 next))) + ) + (when + (and + (logtest? (-> s5-0 flags) 2) + (name= (-> arg1 privname) (-> s5-0 privname)) + ) + (let ((v1-7 (-> s5-0 item-list))) + "return the start of the list" + (let* ((v1-8 (the-as anim-test-seq-item (-> v1-7 head))) + (a0-4 v1-8) + ) + "is this node the end of the list. #t = end" + (when (not (not (-> a0-4 next))) + (set! (-> arg1 num-frames) (-> v1-8 num-frames)) + (set! (-> arg1 artist-base) (-> v1-8 artist-base)) + ) + ) + ) + (return #t) + ) + "return the next node in the list" + (set! s5-0 (the-as anim-test-sequence (-> s5-0 next))) + ) + ) + ) + #f + ) + +;; definition for function anim-test-obj-remove-invalid +(defun anim-test-obj-remove-invalid ((arg0 anim-test-obj)) + (local-vars (v1-19 symbol)) + (let ((v1-0 (-> arg0 seq-list))) + "return the start of the list" + (let ((s5-0 (-> v1-0 head))) + (while (let ((v1-25 (the-as anim-test-sequence s5-0))) + "is this node the end of the list. #t = end" + (not (not (-> v1-25 next))) + ) + (let ((v1-1 (the-as anim-test-sequence s5-0))) + "return the next node in the list" + (let ((s4-0 (-> v1-1 next))) + (when (zero? (logand (-> (the-as anim-test-sequence s5-0) flags) 2)) + (let ((v1-5 (-> (the-as anim-test-sequence s5-0) item-list))) + "return the start of the list" + (let ((s3-0 (the-as anim-test-seq-item (-> v1-5 head)))) + (while (let ((v1-13 s3-0)) + "is this node the end of the list. #t = end" + (not (not (-> v1-13 next))) + ) + (let ((v1-6 s3-0)) + "return the next node in the list" + (let ((s2-0 (the-as anim-test-seq-item (-> v1-6 next)))) + (if + (and + (zero? (logand (-> s3-0 flags) 1)) + (not (anim-test-obj-item-valid? arg0 s3-0)) + ) + (glst-remove (-> (the-as anim-test-sequence s5-0) item-list) s3-0) + ) + (set! s3-0 s2-0) + ) + ) + ) + ) + ) + ) + (let ((v1-18 (-> (the-as anim-test-sequence s5-0) item-list))) + "is the list empty, #t = empty" + (if + (or + (= (-> v1-18 tailpred) v1-18) + (and + (= + (glst-num-elements (-> (the-as anim-test-sequence s5-0) item-list)) + 1 + ) + (begin + (let ((v1-21 #t) + (a0-13 (-> (the-as anim-test-sequence s5-0) item-list)) + ) + "return the start of the list" + (let + ((a0-16 + (the-as + int + (logand + (-> (the-as anim-test-seq-item (-> a0-13 head)) flags) + 1 + ) + ) + ) + ) + (cmove-#f-zero v1-19 a0-16 v1-21) + ) + ) + v1-19 + ) + ) + ) + (glst-remove (-> arg0 seq-list) (the-as anim-test-sequence s5-0)) + ) + ) + (set! s5-0 (the-as anim-test-sequence s4-0)) + ) + ) + ) + ) + ) + (let ((v1-30 (-> arg0 seq-list))) + "return the start of the list" + (let ((v1-31 (the-as anim-test-sequence (-> v1-30 head)))) + (while (let ((a0-23 v1-31)) + "is this node the end of the list. #t = end" + (not (not (-> a0-23 next))) + ) + (let ((a0-20 v1-31)) + "return the next node in the list" + (let ((a0-21 (-> a0-20 next))) + (set! (-> v1-31 flags) (logand -3 (-> v1-31 flags))) + (set! v1-31 (the-as anim-test-sequence a0-21)) + ) + ) + ) + ) + ) + #f + ) + +;; definition for function anim-tester-real-post +;; INFO: Return type mismatch int vs none. +(defbehavior anim-tester-real-post anim-tester () + (when (logtest? (-> self flags) 1) + (if (logtest? (-> self flags) 32) + (vector-v+! (-> self root trans) (-> self root trans) (-> self root transv)) + ) + (ja-post) + (when (logtest? (-> self flags) 16) + (draw-joint-spheres self) + (dummy-10 (-> self skel) (the-as symbol *stdcon*)) + ) + ) + (none) + ) + +;; definition for function anim-tester-post +(defbehavior anim-tester-post anim-tester () + (anim-tester-real-post) + (none) + ) + +;; definition for function anim-tester-update-anim-info +(defbehavior anim-tester-update-anim-info anim-tester ((arg0 anim-test-seq-item)) + (set! (-> self anim-first) (-> arg0 first-frame)) + (set! (-> self anim-last) (-> arg0 last-frame)) + (set! + (-> self anim-gspeed) + (* (-> (new 'static 'array float 1 0.01) 0) (the float (-> self speed))) + ) + (set! + (-> self anim-speed) + (* + (-> (new 'static 'array float 1 0.01) 0) + (-> self anim-gspeed) + (the float (-> arg0 speed)) + ) + ) + (when (< (-> self anim-speed) 0.0) + (set! (-> self anim-first) (-> arg0 last-frame)) + (set! (-> self anim-last) (-> arg0 first-frame)) + ) + (set! (-> self anim-gspeed) (fabs (-> self anim-gspeed))) + (let ((f0-13 (fabs (-> self anim-speed)))) + (set! (-> self anim-speed) f0-13) + f0-13 + ) + ) + +;; definition for function anim-tester-reset +;; Used lq/sq +(defbehavior anim-tester-reset anim-tester () + (let ((v1-0 (-> self obj-list))) + "is the list empty, #t = empty" + (cond + ((= (-> v1-0 tailpred) v1-0) + (set! (-> self list-con current-index) 0) + (set! (-> self current-obj) "") + ) + (else + (let + ((v1-1 + (the-as + anim-test-obj + (glst-find-node-by-name (-> self obj-list) (-> self current-obj)) + ) + ) + ) + (when (not v1-1) + (if + (>= + (-> self list-con current-index) + (glst-num-elements (-> self obj-list)) + ) + (set! + (-> self list-con current-index) + (+ (glst-num-elements (-> self obj-list)) -1) + ) + ) + (set! + v1-1 + (the-as + anim-test-obj + (glst-get-node-by-index + (-> self obj-list) + (-> self list-con current-index) + ) + ) + ) + (set! (-> self current-obj) (-> v1-1 privname)) + ) + (cond + ((or (not (-> v1-1 joint-geo)) (not (-> v1-1 mesh-geo))) + (format #t "what's this? ~A~%" (-> v1-1 privname)) + (format #t "it's missing a joint-geo, or a mesh-geo or a mesh-anim~%") + ) + (else + (let ((a0-15 (-> v1-1 joint-geo))) + (let ((a1-4 (-> v1-1 mesh-geo))) + (set! (-> self draw art-group) (-> v1-1 obj-art-group)) + (set! (-> self draw cur-lod) -1) + (set! (-> self draw jgeo) a0-15) + (set! + (-> self draw sink-group) + (-> *level* level-default foreground-sink-group 1) + ) + (set! (-> self draw lod-set lod 0 geo) a1-4) + ) + (set! + (-> self draw lod-set lod 0 dist) + (-> (new 'static 'array float 1 4095996000.0) 0) + ) + (set! + (-> self draw bounds w) + (-> (new 'static 'array float 1 40960.0) 0) + ) + (set! (-> self draw data-format) (the-as uint 1)) + (let + ((v1-16 (-> (new 'static 'vector :x 1.0 :y 1.0 :z 1.0 :w 1.0) quad))) + (set! (-> self draw color-mult quad) v1-16) + ) + (let ((v1-18 (-> (new 'static 'vector) quad))) + (set! (-> self draw color-emissive quad) v1-18) + ) + (set! (-> self draw secondary-interp) 0.0) + (set! (-> self draw shadow) #f) + (set! (-> self draw shadow-ctrl) #f) + (set! (-> self draw ripple) #f) + (set! (-> self draw level-index) (the-as uint 2)) + (set! + (-> self node-list) + (the-as + cspace-array + (make-nodes-from-jg a0-15 *default-skel-template* 'debug) + ) + ) + ) + (set! (-> self skel effect) (new 'process 'effect-control self)) + (fill-skeleton-cache self) + (dummy-10 (-> self draw) 0) + (ja-channel-set! 0) + (ja-post) + ) + ) + ) + ) + ) + ) + (none) + ) + +;; definition for function anim-tester-disp-frame-num +;; Used lq/sq +(defun + anim-tester-disp-frame-num + ((arg0 string) (arg1 float) (arg2 float) (arg3 font-context)) + (local-vars (sv-16 (function _varargs_ object))) + (let* ((s3-0 (-> *display* frames (-> *display* on-screen) frame debug-buf)) + (gp-0 (-> s3-0 base)) + ) + (cond + ((= arg1 (-> (new 'static 'array float 1 -1.0) 0)) + (let ((s2-1 draw-string-adv)) + (format (clear *temp-string*) "~Smin" arg0) + (s2-1 *temp-string* s3-0 arg3) + ) + ) + ((= arg1 (-> (new 'static 'array float 1 -2.0) 0)) + (let ((s2-2 draw-string-adv)) + (format (clear *temp-string*) "~Smax" arg0) + (s2-2 *temp-string* s3-0 arg3) + ) + ) + (else + (let ((s0-0 draw-string-adv)) + (set! sv-16 format) + (let ((a0-11 (clear *temp-string*)) + (a1-5 "~S~3,,0f") + (a2-5 arg0) + (a3-1 (+ arg1 arg2)) + ) + (sv-16 a0-11 a1-5 a2-5 a3-1) + ) + (s0-0 *temp-string* s3-0 arg3) + ) + ) + ) + (let ((a3-2 (-> s3-0 base))) + (let ((v1-6 (the-as object (-> s3-0 base)))) + (set! + (-> (the-as dma-packet v1-6) dma) + (new 'static 'dma-tag :id (dma-tag-id next)) + ) + (set! (-> (the-as dma-packet v1-6) vif0) (new 'static 'vif-tag)) + (set! (-> (the-as dma-packet v1-6) vif1) (new 'static 'vif-tag)) + (set! (-> s3-0 base) (&+ (the-as pointer v1-6) 16)) + ) + (dma-bucket-insert-tag + (-> *display* frames (-> *display* on-screen) frame bucket-group) + (bucket-id debug-draw0) + gp-0 + (the-as (pointer dma-tag) a3-2) + ) + ) + ) + ) + +;; definition for function anim-tester-standard-event-handler +;; INFO: Return type mismatch none vs object. +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? +(defbehavior + anim-tester-standard-event-handler anim-tester + ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (cond + ((= v1-0 'reset) + (process-disconnect self) + (set! (-> self flags) (logand -2 (-> self flags))) + (when (!= (-> *anim-tester* 0 edit-mode) 1) + (set! (-> *debug-menu-context* is-hidden) #f) + (set! (-> *anim-tester* 0 edit-mode) 0) + (set! *camera-read-buttons* #t) + ) + (anim-tester-reset) + (go anim-tester-process) + ) + ((= v1-0 'change-anim) + (go anim-tester-process) + ) + ((= v1-0 'pick-object) + (set! (-> self edit-mode) 1) + (set! *camera-read-buttons* #f) + #f + ) + ((= v1-0 'pick-joint-anim) + (set! (-> self edit-mode) 2) + (set! *camera-read-buttons* #f) + #f + ) + ((= v1-0 'pick-sequence) + (set! (-> self edit-mode) 3) + (set! *camera-read-buttons* #f) + #f + ) + ((= v1-0 'edit-sequence) + (set! (-> self edit-mode) 4) + (set! *camera-read-buttons* #f) + #f + ) + ((= v1-0 'save-sequences) + (anim-tester-save-all-objects self) + ) + ) + ) + ) + ) + +;; definition for function anim-test-obj-list-handler +(defun anim-test-obj-list-handler ((arg0 int) (arg1 list-control)) + (with-pp + (let ((s5-0 (-> arg1 the-node)) + (v1-0 arg0) + ) + (cond + ((zero? v1-0) + (let* + ((s3-0 (-> *display* frames (-> *display* on-screen) frame debug-buf)) + (s4-0 (-> s3-0 base)) + ) + (let ((s2-0 draw-string-xy)) + (format + (clear *temp-string*) + "~S~S~S" + (if (= (-> arg1 the-index) (-> arg1 highlight-index)) + ">" + " " + ) + (if (logtest? (-> (the-as anim-test-obj s5-0) flags) 1) + "*" + " " + ) + (-> (the-as anim-test-obj s5-0) privname) + ) + (s2-0 + *temp-string* + s3-0 + (-> arg1 xpos) + (-> arg1 ypos) + (the-as font-color (if (= (-> arg1 the-index) (-> arg1 current-index)) + 15 + 12 + ) + ) + (font-flags shadow kerning) + ) + ) + (let ((a3-2 (-> s3-0 base))) + (let ((v1-8 (the-as object (-> s3-0 base)))) + (set! + (-> (the-as dma-packet v1-8) dma) + (new 'static 'dma-tag :id (dma-tag-id next)) + ) + (set! (-> (the-as dma-packet v1-8) vif0) (new 'static 'vif-tag)) + (set! (-> (the-as dma-packet v1-8) vif1) (new 'static 'vif-tag)) + (set! (-> s3-0 base) (&+ (the-as pointer v1-8) 16)) + ) + (dma-bucket-insert-tag + (-> *display* frames (-> *display* on-screen) frame bucket-group) + (bucket-id debug-draw0) + s4-0 + (the-as (pointer dma-tag) a3-2) + ) + ) + ) + ) + ((= v1-0 1) + (return #t) + ) + ((= v1-0 4) + (cond + ((logtest? (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons up)) + (if (> (-> arg1 highlight-index) 0) + (+! (-> arg1 highlight-index) -1) + ) + ) + ((logtest? (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons down)) + (if (< (-> arg1 highlight-index) (glst-num-elements (-> arg1 list))) + (+! (-> arg1 highlight-index) 1) + ) + ) + ((logtest? (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons x)) + (let ((v1-38 (the-as object (-> arg1 list-owner)))) + (set! (-> arg1 current-index) (-> arg1 the-index)) + (set! + (-> (the-as anim-tester v1-38) current-obj) + (-> (the-as anim-test-obj s5-0) privname) + ) + ) + (let ((a1-4 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-4 from) pp) + (set! (-> a1-4 num-params) 1) + (set! (-> a1-4 message) 'reset) + (set! (-> a1-4 param 0) (the-as uint #f)) + (send-event-function (ppointer->process *anim-tester*) a1-4) + ) + ) + ((logtest? (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons square)) + (logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons square)) + (logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons square)) + (set! (-> *debug-menu-context* is-hidden) #f) + (set! (-> *anim-tester* 0 edit-mode) 0) + (set! *camera-read-buttons* #t) + (logior! (-> *anim-tester* 0 flags) 4) + ) + ) + ) + ((= v1-0 2) + (let ((v1-64 (+ (length (-> (the-as anim-test-obj s5-0) privname)) 2))) + (set! v1-64 (cond + ((< (-> *ANIM_TESTER-bank* OBJECT_LIST_MIN_WIDTH) v1-64) + (empty) + v1-64 + ) + (else + (-> *ANIM_TESTER-bank* OBJECT_LIST_MIN_WIDTH) + ) + ) + ) + (set! (-> arg1 return-int) v1-64) + ) + ) + ((= v1-0 3) + (let* + ((s4-1 (-> *display* frames (-> *display* on-screen) frame debug-buf)) + (s5-2 (-> s4-1 base)) + ) + (draw-string-xy + "----pick-object---" + s4-1 + (-> arg1 xpos) + (-> arg1 ypos) + (font-color dim-white) + (font-flags shadow kerning) + ) + (let ((a3-4 (-> s4-1 base))) + (let ((v1-70 (the-as object (-> s4-1 base)))) + (set! + (-> (the-as dma-packet v1-70) dma) + (new 'static 'dma-tag :id (dma-tag-id next)) + ) + (set! (-> (the-as dma-packet v1-70) vif0) (new 'static 'vif-tag)) + (set! (-> (the-as dma-packet v1-70) vif1) (new 'static 'vif-tag)) + (set! (-> s4-1 base) (&+ (the-as pointer v1-70) 16)) + ) + (dma-bucket-insert-tag + (-> *display* frames (-> *display* on-screen) frame bucket-group) + (bucket-id debug-draw0) + s5-2 + (the-as (pointer dma-tag) a3-4) + ) + ) + ) + ) + ) + ) + #f + ) + ) + +;; definition for function anim-test-anim-list-handler +(defun anim-test-anim-list-handler ((arg0 int) (arg1 list-control)) + (with-pp + (let* ((s5-0 (the-as anim-test-obj (-> arg1 the-node))) + (v1-0 (the-as object (-> s5-0 list-con user-info-u))) + ) + (cond + ((zero? arg0) + (let* + ((s3-0 (-> *display* frames (-> *display* on-screen) frame debug-buf)) + (s4-0 (-> s3-0 base)) + ) + (let ((s2-0 draw-string-xy)) + (format + (clear *temp-string*) + "~S~S" + (if (= (-> arg1 the-index) (-> arg1 highlight-index)) + "> " + " " + ) + (-> s5-0 privname) + ) + (s2-0 + *temp-string* + s3-0 + (-> arg1 xpos) + (-> arg1 ypos) + (the-as font-color (if (= (-> arg1 the-index) (-> arg1 current-index)) + 15 + 12 + ) + ) + (font-flags shadow kerning) + ) + ) + (let ((a3-2 (-> s3-0 base))) + (let ((v1-6 (the-as object (-> s3-0 base)))) + (set! + (-> (the-as dma-packet v1-6) dma) + (new 'static 'dma-tag :id (dma-tag-id next)) + ) + (set! (-> (the-as dma-packet v1-6) vif0) (new 'static 'vif-tag)) + (set! (-> (the-as dma-packet v1-6) vif1) (new 'static 'vif-tag)) + (set! (-> s3-0 base) (&+ (the-as pointer v1-6) 16)) + ) + (dma-bucket-insert-tag + (-> *display* frames (-> *display* on-screen) frame bucket-group) + (bucket-id debug-draw0) + s4-0 + (the-as (pointer dma-tag) a3-2) + ) + ) + ) + ) + ((= arg0 1) + (return (zero? (logand (-> s5-0 flags) 1))) + ) + ((= arg0 4) + (cond + ((logtest? (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons up)) + (let ((v1-15 (-> arg1 list))) + "is the list empty, #t = empty" + (when (not (= (-> v1-15 tailpred) v1-15)) + (let + ((v1-17 + (glst-get-node-by-index (-> arg1 list) (-> arg1 highlight-index)) + ) + ) + (while #t + "return the previous node in the list" + (set! v1-17 (-> (the-as anim-test-obj v1-17) prev)) + (let ((a0-23 (the-as anim-test-obj v1-17))) + "is this node the start of the list. #t = start" + (if (not (-> a0-23 prev)) + (goto cfg-25) + ) + ) + (when (zero? (logand (-> (the-as anim-test-obj v1-17) flags) 1)) + (set! + (-> arg1 highlight-index) + (glst-get-node-index (-> arg1 list) (the-as anim-test-obj v1-17)) + ) + (goto cfg-25) + ) + ) + ) + ) + ) + (label cfg-25) + ) + ((logtest? (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons down)) + (let ((v1-21 (-> arg1 list))) + "is the list empty, #t = empty" + (when (not (= (-> v1-21 tailpred) v1-21)) + (let + ((v1-23 + (glst-get-node-by-index (-> arg1 list) (-> arg1 highlight-index)) + ) + ) + (while #t + "return the next node in the list" + (set! v1-23 (-> (the-as anim-test-obj v1-23) next)) + (let ((a0-40 (the-as anim-test-obj v1-23))) + "is this node the end of the list. #t = end" + (if (not (-> a0-40 next)) + (goto cfg-39) + ) + ) + (when (zero? (logand (-> (the-as anim-test-obj v1-23) flags) 1)) + (set! + (-> arg1 highlight-index) + (glst-get-node-index (-> arg1 list) (the-as anim-test-obj v1-23)) + ) + (goto cfg-39) + ) + ) + ) + ) + ) + (label cfg-39) + ) + ((= (-> arg1 user-info) 1) + ) + (else + (cond + ((logtest? (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons x)) + (set! (-> arg1 current-index) (-> arg1 the-index)) + (set! + (-> (the-as anim-test-obj v1-0) anim-index) + (-> arg1 current-index) + ) + (set! + (-> (the-as anim-test-obj v1-0) anim-hindex) + (-> arg1 highlight-index) + ) + (set! + (-> (the-as anim-test-obj v1-0) flags) + (logand -3 (-> (the-as anim-test-obj v1-0) flags)) + ) + (let ((a1-17 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-17 from) pp) + (set! (-> a1-17 num-params) 1) + (set! (-> a1-17 message) 'change-anim) + (set! (-> a1-17 param 0) (the-as uint #f)) + (send-event-function (ppointer->process *anim-tester*) a1-17) + ) + ) + ((logtest? (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons square)) + (logclear! + (-> *cpad-list* cpads 0 button0-abs 0) + (pad-buttons square) + ) + (logclear! + (-> *cpad-list* cpads 0 button0-rel 0) + (pad-buttons square) + ) + (set! (-> *debug-menu-context* is-hidden) #f) + (set! (-> *anim-tester* 0 edit-mode) 0) + (set! *camera-read-buttons* #t) + (logior! (-> *anim-tester* 0 flags) 4) + ) + ) + ) + ) + ) + ((= arg0 2) + (let ((v1-55 (+ (length (-> s5-0 privname)) 2))) + (set! v1-55 (cond + ((< (-> *ANIM_TESTER-bank* ANIM_LIST_MIN_WIDTH) v1-55) + (empty) + v1-55 + ) + (else + (-> *ANIM_TESTER-bank* ANIM_LIST_MIN_WIDTH) + ) + ) + ) + (set! (-> arg1 return-int) v1-55) + ) + ) + ((= arg0 3) + (let* + ((s4-1 (-> *display* frames (-> *display* on-screen) frame debug-buf)) + (s5-1 (-> s4-1 base)) + ) + (draw-string-xy + "----pick-joint-anim----" + s4-1 + (-> arg1 xpos) + (-> arg1 ypos) + (font-color dim-white) + (font-flags shadow kerning) + ) + (let ((a3-4 (-> s4-1 base))) + (let ((v1-62 (the-as object (-> s4-1 base)))) + (set! + (-> (the-as dma-packet v1-62) dma) + (new 'static 'dma-tag :id (dma-tag-id next)) + ) + (set! (-> (the-as dma-packet v1-62) vif0) (new 'static 'vif-tag)) + (set! (-> (the-as dma-packet v1-62) vif1) (new 'static 'vif-tag)) + (set! (-> s4-1 base) (&+ (the-as pointer v1-62) 16)) + ) + (dma-bucket-insert-tag + (-> *display* frames (-> *display* on-screen) frame bucket-group) + (bucket-id debug-draw0) + s5-1 + (the-as (pointer dma-tag) a3-4) + ) + ) + ) + ) + ) + ) + #f + ) + ) + +;; definition for function anim-test-sequence-list-handler +(defun anim-test-sequence-list-handler ((arg0 int) (arg1 list-control)) + (with-pp + (let* ((s5-0 (the-as anim-test-sequence (-> arg1 the-node))) + (v1-0 (-> s5-0 parent)) + ) + (cond + ((zero? arg0) + (let* + ((s3-0 (-> *display* frames (-> *display* on-screen) frame debug-buf)) + (s4-0 (-> s3-0 base)) + ) + (let ((s2-0 draw-string-xy)) + (format + (clear *temp-string*) + "~S~S~S" + (if (= (-> arg1 the-index) (-> arg1 highlight-index)) + ">" + " " + ) + (if (logtest? (-> s5-0 flags) 4) + "*" + " " + ) + (-> s5-0 privname) + ) + (s2-0 + *temp-string* + s3-0 + (-> arg1 xpos) + (-> arg1 ypos) + (the-as font-color (if (= (-> arg1 the-index) (-> arg1 current-index)) + 15 + 12 + ) + ) + (font-flags shadow kerning) + ) + ) + (let ((a3-2 (-> s3-0 base))) + (let ((v1-8 (the-as object (-> s3-0 base)))) + (set! + (-> (the-as dma-packet v1-8) dma) + (new 'static 'dma-tag :id (dma-tag-id next)) + ) + (set! (-> (the-as dma-packet v1-8) vif0) (new 'static 'vif-tag)) + (set! (-> (the-as dma-packet v1-8) vif1) (new 'static 'vif-tag)) + (set! (-> s3-0 base) (&+ (the-as pointer v1-8) 16)) + ) + (dma-bucket-insert-tag + (-> *display* frames (-> *display* on-screen) frame bucket-group) + (bucket-id debug-draw0) + s4-0 + (the-as (pointer dma-tag) a3-2) + ) + ) + ) + ) + ((= arg0 1) + (return (logtest? (-> s5-0 flags) 1)) + ) + ((= arg0 4) + (cond + ((logtest? (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons up)) + (let ((v1-17 (-> arg1 list))) + "is the list empty, #t = empty" + (when (not (= (-> v1-17 tailpred) v1-17)) + (let + ((v1-19 + (glst-get-node-by-index (-> arg1 list) (-> arg1 highlight-index)) + ) + ) + (while #t + "return the previous node in the list" + (set! v1-19 (-> (the-as anim-test-sequence v1-19) prev)) + (let ((a0-24 (the-as anim-test-sequence v1-19))) + "is this node the start of the list. #t = start" + (if (not (-> a0-24 prev)) + (goto cfg-28) + ) + ) + (when (logtest? (-> (the-as anim-test-sequence v1-19) flags) 1) + (set! + (-> arg1 highlight-index) + (glst-get-node-index + (-> arg1 list) + (the-as anim-test-sequence v1-19) + ) + ) + (goto cfg-28) + ) + ) + ) + ) + ) + (label cfg-28) + ) + ((logtest? (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons down)) + (let ((v1-23 (-> arg1 list))) + "is the list empty, #t = empty" + (when (not (= (-> v1-23 tailpred) v1-23)) + (let + ((v1-25 + (glst-get-node-by-index (-> arg1 list) (-> arg1 highlight-index)) + ) + ) + (while #t + "return the next node in the list" + (set! v1-25 (-> (the-as anim-test-sequence v1-25) next)) + (let ((a0-42 (the-as anim-test-sequence v1-25))) + "is this node the end of the list. #t = end" + (if (not (-> a0-42 next)) + (goto cfg-42) + ) + ) + (when (logtest? (-> (the-as anim-test-sequence v1-25) flags) 1) + (set! + (-> arg1 highlight-index) + (glst-get-node-index + (-> arg1 list) + (the-as anim-test-sequence v1-25) + ) + ) + (goto cfg-42) + ) + ) + ) + ) + ) + (label cfg-42) + ) + ((logtest? (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons x)) + (set! (-> arg1 current-index) (-> arg1 the-index)) + (set! (-> v1-0 seq-index) (-> arg1 current-index)) + (set! (-> v1-0 seq-hindex) (-> arg1 highlight-index)) + (logior! (-> v1-0 flags) 2) + (set! (-> *anim-tester* 0 edit-mode) 4) + (let ((a1-15 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-15 from) pp) + (set! (-> a1-15 num-params) 1) + (set! (-> a1-15 message) 'change-anim) + (set! (-> a1-15 param 0) (the-as uint #f)) + (send-event-function (ppointer->process *anim-tester*) a1-15) + ) + ) + ((logtest? (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons square)) + (logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons square)) + (logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons square)) + (set! (-> *debug-menu-context* is-hidden) #f) + (set! (-> *anim-tester* 0 edit-mode) 0) + (set! *camera-read-buttons* #t) + (logior! (-> *anim-tester* 0 flags) 4) + ) + ) + ) + ((= arg0 2) + (let ((v1-57 (+ (length (-> s5-0 privname)) 2))) + (set! v1-57 (cond + ((< (-> *ANIM_TESTER-bank* PICK_LIST_MIN_WIDTH) v1-57) + (empty) + v1-57 + ) + (else + (-> *ANIM_TESTER-bank* PICK_LIST_MIN_WIDTH) + ) + ) + ) + (set! (-> arg1 return-int) v1-57) + ) + ) + ((= arg0 3) + (let* + ((s4-1 (-> *display* frames (-> *display* on-screen) frame debug-buf)) + (s5-1 (-> s4-1 base)) + ) + (draw-string-xy + "----pick-sequence---" + s4-1 + (-> arg1 xpos) + (-> arg1 ypos) + (font-color dim-white) + (font-flags shadow kerning) + ) + (let ((a3-4 (-> s4-1 base))) + (let ((v1-64 (the-as object (-> s4-1 base)))) + (set! + (-> (the-as dma-packet v1-64) dma) + (new 'static 'dma-tag :id (dma-tag-id next)) + ) + (set! (-> (the-as dma-packet v1-64) vif0) (new 'static 'vif-tag)) + (set! (-> (the-as dma-packet v1-64) vif1) (new 'static 'vif-tag)) + (set! (-> s4-1 base) (&+ (the-as pointer v1-64) 16)) + ) + (dma-bucket-insert-tag + (-> *display* frames (-> *display* on-screen) frame bucket-group) + (bucket-id debug-draw0) + s5-1 + (the-as (pointer dma-tag) a3-4) + ) + ) + ) + ) + ) + ) + #f + ) + ) + +;; definition for symbol anim-test-field-highlight-lw, type (inline-array list-field) +(define + anim-test-field-highlight-lw + (new 'static 'inline-array list-field 12 + (new 'static 'list-field :left 2 :width 20) + (new 'static 'list-field :left 30 :width 4) + (new 'static 'list-field :left 35 :width 4) + (new 'static 'list-field :left 40 :width 3) + (new 'static 'list-field :left 44 :width 3) + (new 'static 'list-field :left 48 :width 1) + (new 'static 'list-field :left 49 :width 1) + (new 'static 'list-field :left 50 :width 1) + (new 'static 'list-field :left 51 :width 1) + (new 'static 'list-field :left 53 :width 1) + (new 'static 'list-field :left 54 :width 1) + (new 'static 'list-field :left 55 :width 1) + ) + ) + +;; definition for function anim-tester-adjust-frame +(defun anim-tester-adjust-frame ((arg0 float) (arg1 float)) + (cond + ((logtest? (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons down)) + (cond + ((= arg0 (-> (new 'static 'array float 1 -2.0) 0)) + (set! arg0 (+ (-> (new 'static 'array float 1 -1.0) 0) arg1)) + ) + ((!= arg0 (-> (new 'static 'array float 1 -1.0) 0)) + (set! arg0 (+ (-> (new 'static 'array float 1 -1.0) 0) arg0)) + (if (< arg0 0.0) + (set! arg0 (-> (new 'static 'array float 1 -1.0) 0)) + ) + ) + ) + ) + ((logtest? (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons up)) + (cond + ((= arg0 (-> (new 'static 'array float 1 -1.0) 0)) + (set! arg0 (-> (new 'static 'array float 1 0.0) 0)) + ) + ((!= arg0 (-> (new 'static 'array float 1 -2.0) 0)) + (set! arg0 (+ (-> (new 'static 'array float 1 1.0) 0) arg0)) + (if (>= arg0 arg1) + (set! arg0 (-> (new 'static 'array float 1 -2.0) 0)) + ) + ) + ) + ) + ) + arg0 + ) + +;; definition for function anim-tester-pick-item-setup +;; INFO: Return type mismatch int vs none. +(defun + anim-tester-pick-item-setup + ((arg0 anim-test-seq-item) (arg1 anim-test-sequence)) + (let ((gp-0 (-> arg1 parent))) + (set! (-> *anim-tester* 0 pick-con listfunc) anim-test-anim-list-handler) + (set! + (-> *anim-tester* 0 pick-con left) + (+ + (-> *ANIM_TESTER-bank* EDIT_LIST_X) + (* (-> *ANIM_TESTER-bank* EDIT_PICK_X) (-> *DISP_LIST-bank* CHAR_WIDTH)) + ) + ) + (set! (-> *anim-tester* 0 pick-con top) (-> *ANIM_TESTER-bank* EDIT_LIST_Y)) + (set! (-> *anim-tester* 0 pick-con list) (-> gp-0 seq-list)) + (set! (-> *anim-tester* 0 pick-con list-owner) (the-as uint gp-0)) + (set! (-> *anim-tester* 0 pick-con user-info) 1) + (let ((v1-10 (-> gp-0 seq-list))) + "return the start of the list" + (let ((v1-11 (-> v1-10 head))) + (while (let ((a1-16 v1-11)) + "is this node the end of the list. #t = end" + (not (not (-> a1-16 next))) + ) + "return the next node in the list" + (set! v1-11 (-> v1-11 next)) + ) + ) + ) + (let ((a1-20 (glst-find-node-by-name (-> gp-0 seq-list) (-> arg0 privname)))) + (when a1-20 + (set! + (-> *anim-tester* 0 pick-con highlight-index) + (glst-get-node-index (-> gp-0 seq-list) a1-20) + ) + (set! + (-> *anim-tester* 0 pick-con current-index) + (-> *anim-tester* 0 pick-con highlight-index) + ) + ) + ) + ) + (logior! (-> *anim-tester* 0 flags) 8) + (none) + ) + +;; definition for function anim-test-seq-mark-as-edited +;; INFO: Return type mismatch int vs none. +(defun anim-test-seq-mark-as-edited ((arg0 anim-test-sequence)) + (logior! (-> arg0 parent flags) 1) + (logior! (-> arg0 flags) 1) + (none) + ) + +;; definition for function anim-test-edit-seq-insert-item +;; INFO: Return type mismatch object vs none. +(defun + anim-test-edit-seq-insert-item + ((arg0 anim-test-seq-item) (arg1 anim-test-sequence)) + (with-pp + (let ((s4-0 (new 'debug 'anim-test-seq-item 1 ""))) + (anim-test-seq-item-copy! s4-0 arg0) + (when (logtest? (-> s4-0 flags) 1) + (set! (-> s4-0 flags) (logand -2 (-> s4-0 flags))) + (logior! (-> s4-0 flags) 4) + (let ((v1-8 s4-0)) + (set! (-> v1-8 privname) "--blank--") + ) + ) + (glst-insert-before (-> arg1 item-list) arg0 s4-0) + ) + (anim-test-seq-mark-as-edited arg1) + (let ((a1-4 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-4 from) pp) + (set! (-> a1-4 num-params) 0) + (set! (-> a1-4 message) 'change-anim) + (send-event-function (ppointer->process *anim-tester*) a1-4) + ) + (none) + ) + ) + +;; definition for function anim-test-edit-sequence-list-handler +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? +;; Used lq/sq +(defun anim-test-edit-sequence-list-handler ((arg0 int) (arg1 list-control)) + (local-vars + (sv-192 (function string dma-buffer int int font-color font-flags none)) + (sv-208 (function _varargs_ object)) + ) + (with-pp + (let ((gp-0 (-> arg1 the-node)) + (s4-0 (the-as object (-> arg1 list-owner))) + (s2-0 + (and + (logtest? (-> *anim-tester* 0 flags) 8) + (zero? (-> *anim-tester* 0 item-field)) + ) + ) + ) + (cond + ((zero? arg0) + (let + ((s3-0 + (new + 'stack + 'font-context + *font-default-matrix* + (-> arg1 xpos) + (-> arg1 ypos) + (-> (new 'static 'array float 1 0.0) 0) + (the-as font-color (if (= (-> arg1 the-index) (-> arg1 current-index)) + 15 + 12 + ) + ) + (font-flags shadow kerning) + ) + ) + ) + (when (not s2-0) + (when (= (-> arg1 the-index) (-> arg1 highlight-index)) + (let* + ((a1-2 + (-> + anim-test-field-highlight-lw + (-> *anim-tester* 0 item-field) + left + ) + ) + (v1-24 + (-> + anim-test-field-highlight-lw + (-> *anim-tester* 0 item-field) + width + ) + ) + (s0-0 (-> *display* frames (-> *display* on-screen) frame debug-buf)) + (s1-0 (-> s0-0 base)) + ) + (draw-sprite2d-xy + s0-0 + (+ (* a1-2 (-> *DISP_LIST-bank* CHAR_WIDTH)) 2 (-> arg1 xpos)) + (+ (-> arg1 ypos) -1) + (+ (* v1-24 (-> *DISP_LIST-bank* CHAR_WIDTH)) 4) + (+ (-> *DISP_LIST-bank* TV_SPACING) 1) + (new 'static 'rgba :r #xc0 :g #xc0 :a #xff) + ) + (let ((a3-4 (-> s0-0 base))) + (let ((v1-29 (the-as object (-> s0-0 base)))) + (set! + (-> (the-as dma-packet v1-29) dma) + (new 'static 'dma-tag :id (dma-tag-id next)) + ) + (set! (-> (the-as dma-packet v1-29) vif0) (new 'static 'vif-tag)) + (set! (-> (the-as dma-packet v1-29) vif1) (new 'static 'vif-tag)) + (set! (-> s0-0 base) (&+ (the-as pointer v1-29) 16)) + ) + (dma-bucket-insert-tag + (-> *display* frames (-> *display* on-screen) frame bucket-group) + (bucket-id debug-draw0) + s1-0 + (the-as (pointer dma-tag) a3-4) + ) + ) + ) + ) + ) + (let* + ((s0-1 (-> *display* frames (-> *display* on-screen) frame debug-buf)) + (s1-1 (-> s0-1 base)) + ) + (set! sv-192 draw-string-xy) + (set! sv-208 format) + (let ((a0-18 (clear *temp-string*)) + (a1-7 "~S~S~-27S") + (a2-11 (if (= (-> arg1 the-index) (-> arg1 highlight-index)) + ">" + " " + ) + ) + (a3-6 + (if + (= + (-> arg1 the-index) + (-> (the-as anim-test-sequence s4-0) playing-item) + ) + "*" + " " + ) + ) + (t0-2 (-> (the-as anim-test-seq-item gp-0) privname)) + ) + (sv-208 a0-18 a1-7 a2-11 a3-6 t0-2) + ) + (let ((a0-19 *temp-string*) + (a1-8 s0-1) + (a2-12 (-> arg1 xpos)) + (a3-7 (-> arg1 ypos)) + (t0-4 (if (= (-> arg1 the-index) (-> arg1 current-index)) + 15 + 12 + ) + ) + (t1-2 3) + ) + (sv-192 + a0-19 + a1-8 + a2-12 + a3-7 + (the-as font-color t0-4) + (the-as font-flags t1-2) + ) + ) + (let ((a3-8 (-> s0-1 base))) + (let ((v1-44 (the-as object (-> s0-1 base)))) + (set! + (-> (the-as dma-packet v1-44) dma) + (new 'static 'dma-tag :id (dma-tag-id next)) + ) + (set! (-> (the-as dma-packet v1-44) vif0) (new 'static 'vif-tag)) + (set! (-> (the-as dma-packet v1-44) vif1) (new 'static 'vif-tag)) + (set! (-> s0-1 base) (&+ (the-as pointer v1-44) 16)) + ) + (dma-bucket-insert-tag + (-> *display* frames (-> *display* on-screen) frame bucket-group) + (bucket-id debug-draw0) + s1-1 + (the-as (pointer dma-tag) a3-8) + ) + ) + ) + (when (not s2-0) + (let* + ((s2-2 (-> *display* frames (-> *display* on-screen) frame debug-buf)) + (s4-1 (the-as anim-test-sequence (-> s2-2 base))) + ) + (when (zero? (logand (-> (the-as anim-test-seq-item gp-0) flags) 1)) + (let ((v1-57 s3-0) + (a1-13 + (+ + (-> arg1 xpos) + (* + (-> *ANIM_TESTER-bank* EDIT_STATS_X) + (-> *DISP_LIST-bank* CHAR_WIDTH) + ) + ) + ) + (a0-29 (-> arg1 ypos)) + ) + (set! (-> v1-57 origin x) (the float a1-13)) + (set! (-> v1-57 origin y) (the float a0-29)) + ) + (cond + ((and + (< (-> (the-as anim-test-seq-item gp-0) speed) 0) + (< -100 (-> (the-as anim-test-seq-item gp-0) speed)) + ) + (let ((s1-2 draw-string-adv)) + (let ((s0-2 format) + (a0-33 (clear *temp-string*)) + (a1-14 "-0.~1d") + (v1-61 (abs (-> (the-as anim-test-seq-item gp-0) speed))) + ) + (s0-2 a0-33 a1-14 (/ (mod v1-61 100) 10)) + ) + (s1-2 *temp-string* s2-2 s3-0) + ) + ) + (else + (let ((s1-3 draw-string-adv)) + (let ((s0-3 format) + (a0-36 (clear *temp-string*)) + (a1-16 "~2d.~1d") + (a2-21 (/ (-> (the-as anim-test-seq-item gp-0) speed) 100)) + (v1-64 (abs (-> (the-as anim-test-seq-item gp-0) speed))) + ) + (s0-3 a0-36 a1-16 a2-21 (/ (mod v1-64 100) 10)) + ) + (s1-3 *temp-string* s2-2 s3-0) + ) + ) + ) + (let ((s1-4 draw-string-adv)) + (format + (clear *temp-string*) + " ~4d" + (-> (the-as anim-test-seq-item gp-0) blend) + ) + (s1-4 *temp-string* s2-2 s3-0) + ) + (anim-tester-disp-frame-num + " " + (-> (the-as anim-test-seq-item gp-0) first-frame) + (-> (the-as anim-test-seq-item gp-0) artist-base) + s3-0 + ) + (anim-tester-disp-frame-num + " " + (-> (the-as anim-test-seq-item gp-0) last-frame) + (-> (the-as anim-test-seq-item gp-0) artist-base) + s3-0 + ) + (let ((s1-5 draw-string-adv)) + (format + (clear *temp-string*) + " ~S~S~S~S" + (if (logtest? (-> (the-as anim-test-seq-item gp-0) flags) 2) + "B" + "-" + ) + "-" + "-" + "-" + ) + (s1-5 *temp-string* s2-2 s3-0) + ) + ) + (let* ((a1-24 (-> anim-test-field-highlight-lw 9 left)) + (v1-69 s3-0) + (a1-26 + (+ (-> arg1 xpos) (* a1-24 (-> *DISP_LIST-bank* CHAR_WIDTH))) + ) + (a0-47 (-> arg1 ypos)) + ) + (set! (-> v1-69 origin x) (the float a1-26)) + (set! (-> v1-69 origin y) (the float a0-47)) + ) + (draw-string-adv "MID" s2-2 s3-0) + (let ((a3-15 (-> s2-2 base))) + (let ((v1-70 (the-as object (-> s2-2 base)))) + (set! + (-> (the-as dma-packet v1-70) dma) + (new 'static 'dma-tag :id (dma-tag-id next)) + ) + (set! (-> (the-as dma-packet v1-70) vif0) (new 'static 'vif-tag)) + (set! (-> (the-as dma-packet v1-70) vif1) (new 'static 'vif-tag)) + (set! (-> s2-2 base) (&+ (the-as pointer v1-70) 16)) + ) + (dma-bucket-insert-tag + (-> *display* frames (-> *display* on-screen) frame bucket-group) + (bucket-id debug-draw0) + (the-as pointer s4-1) + (the-as (pointer dma-tag) a3-15) + ) + ) + ) + ) + ) + ) + ((= arg0 1) + (return #t) + ) + ((= arg0 4) + (cond + ((logtest? (-> *anim-tester* 0 flags) 8) + (let ((v1-88 (-> *anim-tester* 0 item-field))) + (cond + ((zero? v1-88) + (cond + ((logtest? (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons x)) + (set! + (-> *anim-tester* 0 flags) + (logand -9 (-> *anim-tester* 0 flags)) + ) + (let + ((v0-24 + (the-as + anim-test-obj + (glst-get-node-by-index + (-> *anim-tester* 0 pick-con list) + (-> *anim-tester* 0 pick-con highlight-index) + ) + ) + ) + ) + (when (and v0-24 (let ((v1-101 (&-> v0-24 obj-art-group))) + "is the list empty, #t = empty" + (not (= (-> v1-101 2) v1-101)) + ) + ) + (let ((v1-103 (&-> v0-24 obj-art-group))) + "return the start of the list" + (let ((a1-30 (-> v1-103 0))) + (anim-test-seq-item-copy! + (the-as anim-test-seq-item gp-0) + (the-as anim-test-seq-item a1-30) + ) + ) + ) + (anim-test-seq-mark-as-edited (the-as anim-test-sequence s4-0)) + ) + ) + ) + ((logtest? + (-> *cpad-list* cpads 0 button0-rel 0) + (pad-buttons square) + ) + (set! + (-> *anim-tester* 0 flags) + (logand -9 (-> *anim-tester* 0 flags)) + ) + ) + ) + ) + ((= v1-88 9) + (cond + ((zero? + (logand (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons x)) + ) + (set! + (-> *anim-tester* 0 flags) + (logand -9 (-> *anim-tester* 0 flags)) + ) + ) + ((logtest? (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons up)) + (let ((v1-124 (the-as anim-test-seq-item gp-0))) + "return the previous node in the list" + (let* ((s3-1 (-> v1-124 prev)) + (v1-125 s3-1) + ) + "is this node the start of the list. #t = start" + (when (not (not (-> v1-125 prev))) + (glst-remove + (-> (the-as anim-test-sequence s4-0) item-list) + (the-as anim-test-seq-item gp-0) + ) + (glst-insert-before + (-> (the-as anim-test-sequence s4-0) item-list) + s3-1 + (the-as anim-test-seq-item gp-0) + ) + (+! (-> arg1 current-index) -1) + (+! (-> arg1 highlight-index) -1) + (anim-test-seq-mark-as-edited (the-as anim-test-sequence s4-0)) + (let ((a1-33 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-33 from) pp) + (set! (-> a1-33 num-params) 0) + (set! (-> a1-33 message) 'change-anim) + (send-event-function (ppointer->process *anim-tester*) a1-33) + ) + ) + ) + ) + ) + ((logtest? + (-> *cpad-list* cpads 0 button0-rel 0) + (pad-buttons down) + ) + (let ((v1-142 (the-as anim-test-seq-item gp-0))) + "return the next node in the list" + (let* ((s3-2 (the-as anim-test-seq-item (-> v1-142 next))) + (v1-143 s3-2) + ) + "is this node the end of the list. #t = end" + (when + (and + (not (not (-> v1-143 next))) + (zero? (logand (-> s3-2 flags) 1)) + ) + (glst-remove + (-> (the-as anim-test-sequence s4-0) item-list) + (the-as anim-test-seq-item gp-0) + ) + (glst-insert-after + (-> (the-as anim-test-sequence s4-0) item-list) + s3-2 + (the-as anim-test-seq-item gp-0) + ) + (+! (-> arg1 current-index) 1) + (+! (-> arg1 highlight-index) 1) + (anim-test-seq-mark-as-edited (the-as anim-test-sequence s4-0)) + (let ((a1-36 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-36 from) pp) + (set! (-> a1-36 num-params) 0) + (set! (-> a1-36 message) 'change-anim) + (send-event-function (ppointer->process *anim-tester*) a1-36) + ) + ) + ) + ) + ) + ) + ) + ((or (= v1-88 1) (= v1-88 2) (= v1-88 3) (= v1-88 4)) + (cond + ((zero? + (logand (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons x)) + ) + (set! + (-> *anim-tester* 0 flags) + (logand -9 (-> *anim-tester* 0 flags)) + ) + ) + ((begin + (set! (-> arg1 current-index) (-> arg1 the-index)) + (<= (-> *anim-tester* 0 inc-timer) 0) + ) + (if (> (-> *anim-tester* 0 inc-delay) 0) + (+! (-> *anim-tester* 0 inc-delay) -1) + ) + (set! + (-> *anim-tester* 0 inc-timer) + (-> *anim-tester* 0 inc-delay) + ) + (case (-> *anim-tester* 0 item-field) + ((1) + (cond + ((logtest? + (-> *cpad-list* cpads 0 button0-abs 0) + (pad-buttons down) + ) + (+! (-> (the-as anim-test-seq-item gp-0) speed) -10) + (anim-test-seq-mark-as-edited + (the-as anim-test-sequence s4-0) + ) + (if (< (-> (the-as anim-test-seq-item gp-0) speed) -300) + (set! (-> (the-as anim-test-seq-item gp-0) speed) -300) + ) + ) + ((logtest? + (-> *cpad-list* cpads 0 button0-abs 0) + (pad-buttons up) + ) + (+! (-> (the-as anim-test-seq-item gp-0) speed) 10) + (anim-test-seq-mark-as-edited + (the-as anim-test-sequence s4-0) + ) + (if (< 1000 (-> (the-as anim-test-seq-item gp-0) speed)) + (set! (-> (the-as anim-test-seq-item gp-0) speed) 1000) + ) + ) + ) + ) + ((2) + (cond + ((logtest? + (-> *cpad-list* cpads 0 button0-abs 0) + (pad-buttons down) + ) + (+! (-> (the-as anim-test-seq-item gp-0) blend) -1) + (anim-test-seq-mark-as-edited (the-as anim-test-sequence s4-0)) + (when (< (-> (the-as anim-test-seq-item gp-0) blend) 0) + (set! (-> (the-as anim-test-seq-item gp-0) blend) 0) + 0 + ) + ) + ((logtest? + (-> *cpad-list* cpads 0 button0-abs 0) + (pad-buttons up) + ) + (+! (-> (the-as anim-test-seq-item gp-0) blend) 1) + (anim-test-seq-mark-as-edited (the-as anim-test-sequence s4-0)) + (if (< 9999 (-> (the-as anim-test-seq-item gp-0) blend)) + (set! (-> (the-as anim-test-seq-item gp-0) blend) 9999) + ) + ) + ) + ) + ((3) + (let ((f30-0 (-> (the-as anim-test-seq-item gp-0) first-frame))) + (set! + (-> (the-as anim-test-seq-item gp-0) first-frame) + (anim-tester-adjust-frame + (-> (the-as anim-test-seq-item gp-0) first-frame) + (-> (the-as anim-test-seq-item gp-0) num-frames) + ) + ) + (if (!= f30-0 (-> (the-as anim-test-seq-item gp-0) first-frame)) + (anim-test-seq-mark-as-edited (the-as anim-test-sequence s4-0)) + ) + ) + ) + ((4) + (let ((f30-1 (-> (the-as anim-test-seq-item gp-0) last-frame))) + (set! + (-> (the-as anim-test-seq-item gp-0) last-frame) + (anim-tester-adjust-frame + (-> (the-as anim-test-seq-item gp-0) last-frame) + (-> (the-as anim-test-seq-item gp-0) num-frames) + ) + ) + (if (!= f30-1 (-> (the-as anim-test-seq-item gp-0) last-frame)) + (anim-test-seq-mark-as-edited (the-as anim-test-sequence s4-0)) + ) + ) + ) + ) + ) + (else + (+! (-> *anim-tester* 0 inc-timer) -1) + ) + ) + (when + (or + (logtest? + (-> *cpad-list* cpads 0 button0-rel 0) + (pad-buttons down) + ) + (logtest? (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons up)) + ) + (set! + (-> *anim-tester* 0 inc-delay) + (-> *DISP_LIST-bank* INC_DELAY) + ) + (set! (-> *anim-tester* 0 inc-timer) 0) + 0 + ) + ) + ) + ) + ) + (else + (cond + ((logtest? (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons up)) + (if (> (-> arg1 highlight-index) 0) + (+! (-> arg1 highlight-index) -1) + ) + ) + ((logtest? (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons down)) + (if + (< + (the-as int (the-as anim-test-seq-item (-> arg1 highlight-index))) + (glst-num-elements (-> arg1 list)) + ) + (+! (-> arg1 highlight-index) 1) + ) + ) + ((logtest? (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons left)) + (+! (-> *anim-tester* 0 item-field) -1) + (if (< (-> *anim-tester* 0 item-field) 0) + (set! (-> *anim-tester* 0 item-field) 11) + ) + (if (= (-> *anim-tester* 0 item-field) 8) + (set! (-> *anim-tester* 0 item-field) 5) + ) + ) + ((logtest? (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons right)) + (+! (-> *anim-tester* 0 item-field) 1) + (when (>= (-> *anim-tester* 0 item-field) 12) + (set! (-> *anim-tester* 0 item-field) 0) + 0 + ) + (if (= (-> *anim-tester* 0 item-field) 6) + (set! (-> *anim-tester* 0 item-field) 9) + ) + ) + ((logtest? (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons square)) + (logclear! + (-> *cpad-list* cpads 0 button0-abs 0) + (pad-buttons square) + ) + (logclear! + (-> *cpad-list* cpads 0 button0-rel 0) + (pad-buttons square) + ) + (set! (-> *anim-tester* 0 edit-mode) 3) + (logior! (-> *anim-tester* 0 flags) 4) + ) + ((logtest? (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons x)) + (cond + ((logtest? (-> (the-as anim-test-seq-item gp-0) flags) 1) + (let ((v1-318 (-> *anim-tester* 0 item-field))) + (if (= v1-318 10) + (anim-test-edit-seq-insert-item + (the-as anim-test-seq-item gp-0) + (the-as anim-test-sequence s4-0) + ) + ) + ) + ) + (else + (let ((v1-322 (-> *anim-tester* 0 item-field))) + (cond + ((zero? v1-322) + (anim-tester-pick-item-setup + (the-as anim-test-seq-item gp-0) + (the-as anim-test-sequence s4-0) + ) + ) + ((= v1-322 10) + (anim-test-edit-seq-insert-item + (the-as anim-test-seq-item gp-0) + (the-as anim-test-sequence s4-0) + ) + ) + ((= v1-322 11) + (when + (zero? (logand (-> (the-as anim-test-seq-item gp-0) flags) 1)) + (anim-test-seq-mark-as-edited (the-as anim-test-sequence s4-0)) + (glst-remove + (-> (the-as anim-test-sequence s4-0) item-list) + (the-as anim-test-seq-item gp-0) + ) + ) + (let ((a1-46 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-46 from) pp) + (set! (-> a1-46 num-params) 0) + (set! (-> a1-46 message) 'change-anim) + (send-event-function (ppointer->process *anim-tester*) a1-46) + ) + ) + (else + (when + (zero? (logand (-> (the-as anim-test-seq-item gp-0) flags) 4)) + (let ((v1-334 (-> *anim-tester* 0 item-field))) + (the-as int (cond + ((= v1-334 5) + (anim-test-seq-mark-as-edited + (the-as anim-test-sequence s4-0) + ) + (let + ((v1-331 + (logxor + (-> (the-as anim-test-seq-item gp-0) flags) + 2 + ) + ) + ) + (set! + (-> (the-as anim-test-seq-item gp-0) flags) + v1-331 + ) + v1-331 + ) + ) + ((= v1-334 6) + (the-as int #f) + ) + ((= v1-334 7) + (the-as int #f) + ) + ((= v1-334 8) + (the-as int #f) + ) + (else + (logior! (-> *anim-tester* 0 flags) 8) + (set! + (-> *anim-tester* 0 inc-delay) + (-> *DISP_LIST-bank* INC_DELAY) + ) + (set! (-> *anim-tester* 0 inc-timer) 0) + 0 + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ((= arg0 2) + (set! (-> arg1 return-int) (-> *ANIM_TESTER-bank* EDIT_LIST_MIN_WIDTH)) + ) + ((= arg0 3) + (let* + ((s3-3 (-> *display* frames (-> *display* on-screen) frame debug-buf)) + (gp-2 (-> s3-3 base)) + ) + (let ((s1-6 draw-string-xy)) + (format + (clear *temp-string*) + "--Seq--(~-17S)--" + (-> (the-as anim-test-sequence s4-0) privname) + ) + (s1-6 + *temp-string* + s3-3 + (-> arg1 xpos) + (-> arg1 ypos) + (font-color dim-white) + (font-flags shadow kerning) + ) + ) + (let ((a3-17 (-> s3-3 base))) + (let ((v1-355 (the-as object (-> s3-3 base)))) + (set! + (-> (the-as dma-packet v1-355) dma) + (new 'static 'dma-tag :id (dma-tag-id next)) + ) + (set! (-> (the-as dma-packet v1-355) vif0) (new 'static 'vif-tag)) + (set! (-> (the-as dma-packet v1-355) vif1) (new 'static 'vif-tag)) + (set! (-> s3-3 base) (&+ (the-as pointer v1-355) 16)) + ) + (dma-bucket-insert-tag + (-> *display* frames (-> *display* on-screen) frame bucket-group) + (bucket-id debug-draw0) + gp-2 + (the-as (pointer dma-tag) a3-17) + ) + ) + ) + (the-as none (cond + (s2-0 + (display-list-control (-> *anim-tester* 0 pick-con)) + ) + (else + (let* + ((s4-2 + (-> + *display* + frames + (-> *display* on-screen) + frame + debug-buf + ) + ) + (gp-3 (-> s4-2 base)) + ) + (draw-string-xy + "-spd-blnd-1st-lst-flgs-mov-" + s4-2 + (+ + (-> arg1 xpos) + (* + (-> *ANIM_TESTER-bank* EDIT_STATS_X) + (-> *DISP_LIST-bank* CHAR_WIDTH) + ) + ) + (-> arg1 ypos) + (font-color dim-white) + (font-flags shadow kerning) + ) + (let ((a3-21 (-> s4-2 base))) + (let ((v1-367 (the-as object (-> s4-2 base)))) + (set! + (-> (the-as dma-packet v1-367) dma) + (new 'static 'dma-tag :id (dma-tag-id next)) + ) + (set! + (-> (the-as dma-packet v1-367) vif0) + (new 'static 'vif-tag) + ) + (set! + (-> (the-as dma-packet v1-367) vif1) + (new 'static 'vif-tag) + ) + (set! (-> s4-2 base) (&+ (the-as pointer v1-367) 16)) + ) + (dma-bucket-insert-tag + (-> + *display* + frames + (-> *display* on-screen) + frame + bucket-group + ) + (bucket-id debug-draw0) + gp-3 + (the-as (pointer dma-tag) a3-21) + ) + ) + ) + ) + ) + ) + ) + ) + ) + #f + ) + ) + +;; definition for function anim-tester-interface +;; INFO: Return type mismatch int vs none. +(defbehavior anim-tester-interface anim-tester () + (let ((v1-0 (-> self edit-mode))) + (cond + ((zero? v1-0) + (when (logtest? (-> *anim-tester* 0 flags) 4) + (set! (-> *anim-tester* 0 flags) (logand -5 (-> *anim-tester* 0 flags))) + (set-master-mode 'menu) + ) + ) + ((= v1-0 1) + (display-list-control (-> self list-con)) + ) + ((= v1-0 2) + (let + ((gp-0 + (the-as + anim-test-obj + (glst-find-node-by-name (-> self obj-list) (-> self current-obj)) + ) + ) + ) + (cond + (gp-0 + (set! (-> gp-0 list-con listfunc) anim-test-anim-list-handler) + (set! (-> gp-0 list-con current-index) (-> gp-0 anim-index)) + (set! (-> gp-0 list-con highlight-index) (-> gp-0 anim-hindex)) + (display-list-control (-> gp-0 list-con)) + (set! (-> gp-0 anim-index) (-> gp-0 list-con current-index)) + (set! (-> gp-0 anim-hindex) (-> gp-0 list-con highlight-index)) + ) + (else + (let* + ((s5-0 (-> *display* frames (-> *display* on-screen) frame debug-buf)) + (gp-1 (-> s5-0 base)) + ) + (draw-string-xy + "ERROR: current object not found" + s5-0 + (-> *ANIM_TESTER-bank* ANIM_LIST_X) + (-> *ANIM_TESTER-bank* ANIM_LIST_Y) + (font-color orange-red-2) + (font-flags shadow kerning) + ) + (let ((a3-1 (-> s5-0 base))) + (let ((v1-20 (the-as object (-> s5-0 base)))) + (set! + (-> (the-as dma-packet v1-20) dma) + (new 'static 'dma-tag :id (dma-tag-id next)) + ) + (set! (-> (the-as dma-packet v1-20) vif0) (new 'static 'vif-tag)) + (set! (-> (the-as dma-packet v1-20) vif1) (new 'static 'vif-tag)) + (set! (-> s5-0 base) (&+ (the-as pointer v1-20) 16)) + ) + (dma-bucket-insert-tag + (-> *display* frames (-> *display* on-screen) frame bucket-group) + (bucket-id debug-draw0) + gp-1 + (the-as (pointer dma-tag) a3-1) + ) + ) + ) + ) + ) + ) + ) + ((= v1-0 3) + (let + ((gp-2 + (the-as + anim-test-obj + (glst-find-node-by-name (-> self obj-list) (-> self current-obj)) + ) + ) + ) + (cond + (gp-2 + (set! (-> gp-2 list-con listfunc) anim-test-sequence-list-handler) + (set! (-> gp-2 list-con current-index) (-> gp-2 seq-index)) + (set! (-> gp-2 list-con highlight-index) (-> gp-2 seq-hindex)) + (display-list-control (-> gp-2 list-con)) + (set! (-> gp-2 seq-index) (-> gp-2 list-con current-index)) + (set! (-> gp-2 seq-hindex) (-> gp-2 list-con highlight-index)) + ) + (else + (let* + ((s5-1 (-> *display* frames (-> *display* on-screen) frame debug-buf)) + (gp-3 (-> s5-1 base)) + ) + (draw-string-xy + "ERROR: current object not found" + s5-1 + (-> *ANIM_TESTER-bank* ANIM_LIST_X) + (-> *ANIM_TESTER-bank* ANIM_LIST_Y) + (font-color orange-red-2) + (font-flags shadow kerning) + ) + (let ((a3-3 (-> s5-1 base))) + (let ((v1-36 (the-as object (-> s5-1 base)))) + (set! + (-> (the-as dma-packet v1-36) dma) + (new 'static 'dma-tag :id (dma-tag-id next)) + ) + (set! (-> (the-as dma-packet v1-36) vif0) (new 'static 'vif-tag)) + (set! (-> (the-as dma-packet v1-36) vif1) (new 'static 'vif-tag)) + (set! (-> s5-1 base) (&+ (the-as pointer v1-36) 16)) + ) + (dma-bucket-insert-tag + (-> *display* frames (-> *display* on-screen) frame bucket-group) + (bucket-id debug-draw0) + gp-3 + (the-as (pointer dma-tag) a3-3) + ) + ) + ) + ) + ) + ) + ) + ((= v1-0 4) + (let + ((v1-43 + (the-as + anim-test-obj + (glst-find-node-by-name (-> self obj-list) (-> self current-obj)) + ) + ) + ) + (cond + (v1-43 + (let + ((v1-44 + (the-as + anim-test-sequence + (glst-get-node-by-index + (-> v1-43 seq-list) + (-> v1-43 list-con current-index) + ) + ) + ) + ) + (cond + (v1-44 + (display-list-control (-> v1-44 list-con)) + ) + (else + (let* + ((s5-2 + (-> *display* frames (-> *display* on-screen) frame debug-buf) + ) + (gp-4 (-> s5-2 base)) + ) + (draw-string-xy + "ERROR: current sequence not found" + s5-2 + (-> *ANIM_TESTER-bank* EDIT_LIST_X) + (-> *ANIM_TESTER-bank* EDIT_LIST_Y) + (font-color orange-red-2) + (font-flags shadow kerning) + ) + (let ((a3-5 (-> s5-2 base))) + (let ((v1-51 (the-as object (-> s5-2 base)))) + (set! + (-> (the-as dma-packet v1-51) dma) + (new 'static 'dma-tag :id (dma-tag-id next)) + ) + (set! (-> (the-as dma-packet v1-51) vif0) (new 'static 'vif-tag)) + (set! (-> (the-as dma-packet v1-51) vif1) (new 'static 'vif-tag)) + (set! (-> s5-2 base) (&+ (the-as pointer v1-51) 16)) + ) + (dma-bucket-insert-tag + (-> *display* frames (-> *display* on-screen) frame bucket-group) + (bucket-id debug-draw0) + gp-4 + (the-as (pointer dma-tag) a3-5) + ) + ) + ) + ) + ) + ) + ) + (else + (let* + ((s5-3 (-> *display* frames (-> *display* on-screen) frame debug-buf)) + (gp-5 (-> s5-3 base)) + ) + (draw-string-xy + "ERROR: current object not found" + s5-3 + (-> *ANIM_TESTER-bank* EDIT_LIST_X) + (-> *ANIM_TESTER-bank* EDIT_LIST_Y) + (font-color orange-red-2) + (font-flags shadow kerning) + ) + (let ((a3-7 (-> s5-3 base))) + (let ((v1-62 (the-as object (-> s5-3 base)))) + (set! + (-> (the-as dma-packet v1-62) dma) + (new 'static 'dma-tag :id (dma-tag-id next)) + ) + (set! (-> (the-as dma-packet v1-62) vif0) (new 'static 'vif-tag)) + (set! (-> (the-as dma-packet v1-62) vif1) (new 'static 'vif-tag)) + (set! (-> s5-3 base) (&+ (the-as pointer v1-62) 16)) + ) + (dma-bucket-insert-tag + (-> *display* frames (-> *display* on-screen) frame bucket-group) + (bucket-id debug-draw0) + gp-5 + (the-as (pointer dma-tag) a3-7) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (set! (-> self old-mode) (-> self edit-mode)) + (none) + ) + +;; definition for function anim-tester-get-playing-item +(defun anim-tester-get-playing-item ((arg0 anim-test-sequence)) + (let + ((v0-0 + ((the-as + (function glst-list int anim-test-seq-item) + glst-get-node-by-index + ) + (-> arg0 item-list) + (-> arg0 playing-item) + ) + ) + ) + (let ((s5-0 v0-0) + (s4-0 (-> arg0 playing-item)) + ) + (when (logtest? (-> v0-0 flags) 5) + (while #t + (+! s4-0 1) + (if (>= s4-0 (glst-num-elements (-> arg0 item-list))) + (set! s4-0 0) + ) + (set! + v0-0 + ((the-as + (function glst-list int anim-test-seq-item) + glst-get-node-by-index + ) + (-> arg0 item-list) + s4-0 + ) + ) + (when (or (= v0-0 s5-0) (zero? (logand (-> v0-0 flags) 5))) + (set! (-> arg0 playing-item) s4-0) + (return v0-0) + ) + ) + ) + ) + v0-0 + ) + ) + +;; failed to figure out what this is: +(defstate anim-tester-process (anim-tester) + :event + anim-tester-standard-event-handler + :enter + (behavior () + (logior! (-> self flags) 2) + (none) + ) + :trans + (behavior () + (if (and (zero? (logand (-> self flags) 2)) (= *master-mode* 'menu)) + (anim-tester-interface) + ) + (set! (-> self flags) (logand -3 (-> self flags))) + (when (!= *master-mode* 'menu) + (dummy-10 (-> self skel) (the-as symbol *stdcon*)) + (add-debug-x + #t + (bucket-id debug-draw1) + (-> self root trans) + (new 'static 'rgba :r #xff :g #xff :b #xff :a #x80) + ) + ) + (none) + ) + :code + (behavior () + (local-vars + (s4-0 glst-node) + (s5-1 anim-test-seq-item) + (gp-2 anim-test-sequence) + ) + (while #t + (set! (-> self flags) (logand -2 (-> self flags))) + (let ((v1-2 (-> self obj-list))) + "is the list empty, #t = empty" + (cond + ((= (-> v1-2 tailpred) v1-2) + (format *stdcon* "anim-tester:no objects loaded~%") + (set! (-> self list-con current-index) 0) + (set! (-> self current-obj) "") + (suspend) + 0 + ) + ((begin + (set! + s4-0 + (glst-find-node-by-name (-> self obj-list) (-> self current-obj)) + ) + (when (not s4-0) + (if + (>= + (-> self list-con current-index) + (glst-num-elements (-> self obj-list)) + ) + (set! + (-> self list-con current-index) + (+ (glst-num-elements (-> self obj-list)) -1) + ) + ) + (set! + s4-0 + (glst-get-node-by-index + (-> self obj-list) + (-> self list-con current-index) + ) + ) + (set! (-> self current-obj) (-> (the-as anim-test-obj s4-0) privname)) + ) + (let + ((v1-10 (the-as structure (-> (the-as anim-test-obj s4-0) seq-list)))) + "is the list empty, #t = empty" + (= (-> (the-as anim-test-obj v1-10) privname) (the-as glst-list v1-10)) + ) + ) + (format *stdcon* "anim-tester:no anims loaded~%") + (format *stdcon* "displaying without anim not yet implement~%") + (set! (-> self flags) (logand -2 (-> self flags))) + (suspend) + 0 + ) + ((begin + (if + (>= + (-> (the-as anim-test-obj s4-0) list-con current-index) + (glst-num-elements (-> (the-as anim-test-obj s4-0) seq-list)) + ) + (set! + (-> (the-as anim-test-obj s4-0) list-con current-index) + (+ (glst-num-elements (-> (the-as anim-test-obj s4-0) seq-list)) -1) + ) + ) + (set! + gp-2 + (the-as + anim-test-sequence + (glst-get-node-by-index + (-> (the-as anim-test-obj s4-0) seq-list) + (if (logtest? (-> (the-as anim-test-obj s4-0) flags) 2) + (-> (the-as anim-test-obj s4-0) seq-index) + (-> (the-as anim-test-obj s4-0) anim-index) + ) + ) + ) + ) + (let ((v1-18 (-> gp-2 item-list))) + "is the list empty, #t = empty" + (= (-> v1-18 tailpred) v1-18) + ) + ) + (format + *stdcon* + "anim-tester:no items in sequence ~A~%" + (-> gp-2 privname) + ) + (format *stdcon* "displaying without anim not yet implement~%") + (suspend) + 0 + ) + ((begin + (when + (>= (-> gp-2 playing-item) (glst-num-elements (-> gp-2 item-list))) + (set! (-> gp-2 playing-item) 0) + 0 + ) + (set! s5-1 (anim-tester-get-playing-item gp-2)) + s5-1 + ) + (let + ((s4-1 + (the-as + art-joint-anim + (dummy-10 + (-> (the-as anim-test-obj s4-0) obj-art-group) + (-> s5-1 privname) + art-joint-anim + ) + ) + ) + ) + (anim-tester-update-anim-info s5-1) + (cond + (s4-1 + (logior! (-> self flags) 1) + (if (nonzero? (-> s5-1 blend)) + (ja-channel-push! + 1 + (the int (* (the float (-> s5-1 blend)) (-> self anim-gspeed))) + ) + (ja-channel-set! 1) + ) + (cond + ((= (-> self anim-first) (-> (new 'static 'array float 1 -1.0) 0)) + (let ((s3-0 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! s3-0 s4-1 num-func-identity) + (set! (-> s3-0 frame-num) 0.0) + ) + ) + ((= (-> self anim-first) (-> (new 'static 'array float 1 -2.0) 0)) + (let ((s3-1 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! s3-1 s4-1 num-func-identity) + (set! + (-> s3-1 frame-num) + (the float (+ (-> s4-1 data 0 length) -1)) + ) + ) + ) + (else + (let ((s3-2 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! s3-2 s4-1 num-func-identity) + (set! (-> s3-2 frame-num) (-> self anim-first)) + ) + ) + ) + (when (nonzero? (-> s5-1 blend)) + (while + (and + (!= (-> self skel root-channel 0) (-> self skel channel)) + (logtest? (-> s5-1 flags) 2) + ) + (when (logtest? (-> self flags) 32) + (TODO-RENAME-9 (-> self align)) + (TODO-RENAME-10 + (-> self align) + 31 + (-> (new 'static 'array float 1 1.0) 0) + (-> (new 'static 'array float 1 1.0) 0) + (-> (new 'static 'array float 1 1.0) 0) + ) + ) + (suspend) + ) + ) + (until (ja-done? 0) + (when (logtest? (-> self flags) 32) + (TODO-RENAME-9 (-> self align)) + (TODO-RENAME-10 + (-> self align) + 31 + (-> (new 'static 'array float 1 1.0) 0) + (-> (new 'static 'array float 1 1.0) 0) + (-> (new 'static 'array float 1 1.0) 0) + ) + ) + (suspend) + (anim-tester-update-anim-info s5-1) + (let + ((v1-73 + (= (-> self anim-last) (-> (new 'static 'array float 1 -2.0) 0)) + ) + ) + (cond + ((or v1-73 (>= (-> self anim-last) (-> self anim-first))) + (cond + ((= (-> self anim-last) (-> (new 'static 'array float 1 -2.0) 0)) + (let ((a0-42 (-> self skel root-channel 0))) + (set! + (-> a0-42 param 0) + (the float (+ (-> a0-42 frame-group data 0 length) -1)) + ) + (set! (-> a0-42 param 1) (-> self anim-speed)) + (joint-control-channel-group-eval! + a0-42 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (else + (let ((a0-43 (-> self skel root-channel 0))) + (set! (-> a0-43 param 0) (-> self anim-last)) + (set! (-> a0-43 param 1) (-> self anim-speed)) + (joint-control-channel-group-eval! + a0-43 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + ) + ((= (-> self anim-last) (-> (new 'static 'array float 1 -1.0) 0)) + (let ((a0-44 (-> self skel root-channel 0))) + (set! (-> a0-44 param 0) 0.0) + (set! (-> a0-44 param 1) (-> self anim-speed)) + (joint-control-channel-group-eval! + a0-44 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (else + (let ((a0-45 (-> self skel root-channel 0))) + (set! (-> a0-45 param 0) (-> self anim-last)) + (set! (-> a0-45 param 1) (-> self anim-speed)) + (joint-control-channel-group-eval! + a0-45 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + ) + ) + (+! (-> gp-2 playing-item) 1) + ) + (else + (format *stdcon* "anim ~A not found~%" (-> s5-1 privname)) + (suspend) + 0 + ) + ) + ) + ) + (else + (format *stdcon* "no anims~%") + (suspend) + 0 + ) + ) + ) + ) + (none) + ) + :post + anim-tester-post + ) + +;; definition for function initialize-anim-tester +(defbehavior initialize-anim-tester anim-tester () + (glst-init-list! (-> self obj-list)) + (logclear! (-> self mask) (process-mask menu)) + (set! (-> self speed) 100) + (set! (-> self current-obj) "") + (set! (-> self root) (new 'process 'trsqv)) + (set! + (-> self draw) + (new 'process 'draw-control self (the-as art-joint-geo #f)) + ) + (set! (-> self draw dma-add-func) dma-add-process-drawable) + (set! (-> self skel) (new 'process 'joint-control 24)) + (set! (-> self align) (new 'process 'align-control self)) + (set! (-> self list-con listfunc) anim-test-obj-list-handler) + (set! (-> self list-con left) (-> *ANIM_TESTER-bank* OBJECT_LIST_X)) + (set! (-> self list-con top) (-> *ANIM_TESTER-bank* OBJECT_LIST_Y)) + (set! (-> self list-con list) (-> self obj-list)) + (set! (-> self list-con list-owner) (the-as uint self)) + (quaternion-identity! (-> self root quat)) + (vector-identity! (-> self root scale)) + (position-in-front-of-camera! + (-> self root trans) + (-> (new 'static 'array float 1 40960.0) 0) + (-> (new 'static 'array float 1 4096.0) 0) + ) + (set! (-> self event-hook) anim-tester-standard-event-handler) + (anim-tester-reset) + (go anim-tester-process) + (none) + ) + +;; definition for function anim-tester-string-get-frame!! +(defun anim-tester-string-get-frame!! ((arg0 list-field) (arg1 string)) + (cond + ((string-get-arg!! *temp-string* arg1) + (cond + ((or (string= *temp-string* "max") (string= *temp-string* "MAX")) + (set! (-> arg0 left) -2) + ) + ((or (string= *temp-string* "min") (string= *temp-string* "MIN")) + (set! (-> arg0 left) -1) + ) + (else + (set! (-> arg0 left) (string->int *temp-string*)) + ) + ) + #t + ) + (else + #f + ) + ) + ) + +;; definition for function anim-tester-load-object-seqs +(defun anim-tester-load-object-seqs () + #f + ) + +;; definition for function anim-tester-save-object-seqs +(defun anim-tester-save-object-seqs ((arg0 anim-test-obj)) + (let ((gp-0 format) + (s4-0 0) + (s3-0 "saving object ~s to ~s~%") + (s2-0 (-> arg0 privname)) + ) + (format (clear *temp-string*) "data/~s.obinf" (-> arg0 privname)) + (gp-0 s4-0 s3-0 s2-0 *temp-string*) + ) + (let ((gp-1 (method-of-type file-stream new)) + (s4-1 (new 'stack-no-clear 'file-stream)) + (s3-1 file-stream) + ) + (format (clear *temp-string*) "data/~s.obinf" (-> arg0 privname)) + (let ((gp-2 (gp-1 (the-as symbol s4-1) s3-1 *temp-string* 'write))) + (format gp-2 "major-version 0~%") + (format gp-2 "minor-version 0~%") + (format gp-2 "Object \"~S\" ~d~%" (-> arg0 privname) 0) + (let ((v1-5 (-> arg0 seq-list))) + "return the start of the list" + (let ((s5-1 (-> v1-5 head))) + (while (let ((v1-30 (the-as anim-test-sequence s5-1))) + "is this node the end of the list. #t = end" + (not (not (-> v1-30 next))) + ) + (set! + (-> (the-as anim-test-sequence s5-1) flags) + (logand -5 (-> (the-as anim-test-sequence s5-1) flags)) + ) + (format + gp-2 + " ~S \"~S\" ~d~%" + (if (logtest? (-> (the-as anim-test-sequence s5-1) flags) 1) + "Sequence" + "Anim" + ) + (-> (the-as anim-test-sequence s5-1) privname) + 0 + ) + (let ((v1-11 (-> (the-as anim-test-sequence s5-1) item-list))) + "return the start of the list" + (let ((s4-2 (the-as anim-test-seq-item (-> v1-11 head)))) + (while (let ((v1-21 s4-2)) + "is this node the end of the list. #t = end" + (not (not (-> v1-21 next))) + ) + (when (zero? (logand (-> s4-2 flags) 5)) + (format + gp-2 + " Item \"~S\" ~d ~d " + (-> s4-2 privname) + (-> s4-2 speed) + (-> s4-2 blend) + ) + (anim-tester-num-print gp-2 (-> s4-2 first-frame)) + (format gp-2 " ") + (anim-tester-num-print gp-2 (-> s4-2 last-frame)) + (format gp-2 " ~S~%" (if (logtest? (-> s4-2 flags) 2) + "B" + "-" + ) + ) + ) + "return the next node in the list" + (set! s4-2 (the-as anim-test-seq-item (-> s4-2 next))) + ) + ) + ) + (format + gp-2 + " ~S~%" + (if (logtest? (-> (the-as anim-test-sequence s5-1) flags) 1) + "EndSequence" + "EndAnim" + ) + ) + "return the next node in the list" + (set! s5-1 (-> (the-as anim-test-sequence s5-1) next)) + ) + ) + ) + (format gp-2 "EndObject~%") + (file-stream-close gp-2) + ) + ) + ) + +;; definition for function anim-tester-save-all-objects +(defun anim-tester-save-all-objects ((arg0 anim-tester)) + (let ((v1-0 (-> arg0 obj-list))) + "return the start of the list" + (let ((gp-0 (-> v1-0 head))) + (while (let ((v1-9 (the-as anim-test-obj gp-0))) + "is this node the end of the list. #t = end" + (not (not (-> v1-9 next))) + ) + (when (logtest? (-> (the-as anim-test-obj gp-0) flags) 1) + (set! + (-> (the-as anim-test-obj gp-0) flags) + (logand -2 (-> (the-as anim-test-obj gp-0) flags)) + ) + (anim-tester-save-object-seqs (the-as anim-test-obj gp-0)) + ) + "return the next node in the list" + (set! gp-0 (-> (the-as anim-test-obj gp-0) next)) + ) + ) + ) + #f + ) + +;; definition for function anim-tester-add-newobj +;; Used lq/sq +(defun anim-tester-add-newobj ((arg0 anim-tester) (arg1 string) (arg2 art-group)) + (local-vars (sv-96 art-element) (sv-112 art-element) (sv-128 anim-test-obj)) + (with-pp + (let ((s2-0 (the-as anim-test-obj #f)) + (s5-0 (the-as anim-test-obj #f)) + ) + (let ((s1-0 (the-as art-element #f)) + (s0-0 (the-as structure #f)) + ) + (dotimes (s3-0 (-> arg2 length)) + (cond + ((and (= (-> arg2 data s3-0 type) merc-ctrl) (not s2-0)) + (set! sv-96 (-> arg2 data s3-0)) + (set! s0-0 (and s2-0 s0-0)) + (if s0-0 + (anim-test-obj-remove-invalid s2-0) + ) + (let ((t9-1 anim-tester-load-object-seqs)) + (-> sv-96 name) + (t9-1) + ) + (set! + s2-0 + (the-as + anim-test-obj + (glst-find-node-by-name (-> arg0 obj-list) (-> sv-96 name)) + ) + ) + (set! s0-0 (if s2-0 + #t + #f + ) + ) + (cond + ((the-as symbol s0-0) + ) + (else + (set! s2-0 (new 'global 'anim-test-obj 1 (-> sv-96 name) arg2)) + (glst-add-tail (-> arg0 obj-list) s2-0) + ) + ) + (anim-test-obj-init s2-0 (the-as list-control arg0)) + (set! (-> s2-0 obj-art-group) arg2) + (set! (-> s2-0 mesh-geo) (the-as merc-ctrl sv-96)) + (set! (-> s2-0 joint-geo) (the-as art-joint-geo s1-0)) + (if (not s5-0) + (set! s5-0 s2-0) + ) + ) + ((= (-> arg2 data s3-0 type) art-joint-geo) + (if (and s2-0 (not (-> s2-0 joint-geo))) + (set! (-> s2-0 joint-geo) (the-as art-joint-geo (-> arg2 data s3-0))) + ) + (if (not s1-0) + (set! s1-0 (-> arg2 data s3-0)) + ) + ) + ((= (-> arg2 data s3-0 type) art-joint-anim) + (when s2-0 + (set! sv-112 (-> arg2 data s3-0)) + (set! + sv-128 + (the-as + anim-test-obj + (glst-find-node-by-name (-> s2-0 seq-list) (-> sv-112 name)) + ) + ) + (when (not sv-128) + (set! + sv-128 + (the-as + anim-test-obj + (new 'debug 'anim-test-sequence 1 (-> sv-112 name)) + ) + ) + (glst-add-tail (-> s2-0 seq-list) sv-128) + (anim-test-sequence-init (the-as anim-test-sequence sv-128) s2-0) + (let ((a1-11 (new 'debug 'anim-test-seq-item 1 (-> sv-112 name)))) + (glst-add-tail (the-as glst-list (&-> sv-128 obj-art-group)) a1-11) + ) + ) + (set! (-> sv-128 list-con user-info) (the-as int s2-0)) + (set! + (-> sv-128 flags) + (logior (-> (the-as anim-test-sequence sv-128) flags) 2) + ) + (let ((v1-48 (-> (the-as anim-test-sequence sv-128) item-list))) + "is the list empty, #t = empty" + (when (not (= (-> v1-48 tailpred) v1-48)) + (let ((v1-51 (-> (the-as anim-test-sequence sv-128) item-list))) + "return the start of the list" + (let ((v1-52 (-> v1-51 head))) + (set! + (-> (the-as anim-test-seq-item v1-52) num-frames) + (the float (-> (the-as art-joint-anim sv-112) data 0 length)) + ) + (set! + (-> (the-as anim-test-seq-item v1-52) artist-base) + (-> (the-as art-joint-anim sv-112) artist-base) + ) + (set! + (-> (the-as anim-test-seq-item v1-52) parent) + (the-as anim-test-sequence sv-128) + ) + ) + ) + sv-128 + ) + ) + ) + ) + (else + ) + ) + ) + ) + (if s2-0 + (anim-test-obj-remove-invalid s2-0) + ) + (when s5-0 + (set! (-> arg0 current-obj) (-> s5-0 privname)) + (set! + (-> arg0 list-con current-index) + (glst-get-node-index (-> arg0 obj-list) s5-0) + ) + ) + ) + (let ((a1-13 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-13 from) pp) + (set! (-> a1-13 num-params) 1) + (set! (-> a1-13 message) 'reset) + (set! (-> a1-13 param 0) (the-as uint #f)) + (send-event-function arg0 a1-13) + ) + ) + ) + +;; definition for function anim-tester-stop +(defun anim-tester-stop () + (when *anim-tester* + (kill-by-name 'anim-tester *active-pool*) + (set! *anim-tester* (the-as (pointer anim-tester) #f)) + #f + ) + ) + +;; definition for function anim-tester-start +(defun anim-tester-start () + (with-pp + (anim-tester-stop) + (let ((gp-0 (get-process *16k-dead-pool* anim-tester #x4000))) + (set! *anim-tester* (the-as (pointer anim-tester) (when gp-0 + (let + ((t9-2 + (method-of-type + anim-tester + activate + ) + ) + ) + (t9-2 + (the-as + anim-tester + gp-0 + ) + *default-pool* + 'anim-tester + (the-as + pointer + #x70004000 + ) + ) + ) + ((the-as + (function process function none) + run-function-in-process + ) + gp-0 + initialize-anim-tester + ) + (-> gp-0 ppointer) + ) + ) + ) + ) + (set! *camera-orbit-target* *anim-tester*) + (let ((a1-3 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-3 from) pp) + (set! (-> a1-3 num-params) 2) + (set! (-> a1-3 message) 'change-state) + (set! (-> a1-3 param 0) (the-as uint cam-orbit)) + (set! (-> a1-3 param 1) (the-as uint 0)) + (send-event-function *camera* a1-3) + ) + #f + ) + ) + +;; definition for function anim-tester-add-object +;; INFO: Return type mismatch object vs none. +(defun anim-tester-add-object ((arg0 string)) + (let + ((s5-0 + (load-to-heap-by-name + (-> *level* level-default art-group) + arg0 + #t + global + 0 + ) + ) + ) + (cond + (s5-0 + (if (not *anim-tester*) + (anim-tester-start) + ) + (if *anim-tester* + (anim-tester-add-newobj + (the-as anim-tester (ppointer->process *anim-tester*)) + arg0 + s5-0 + ) + ) + ) + (else + (format 0 "ERROR:no object (~A)n" arg0) + ) + ) + ) + (none) + ) + +;; definition for function anim-tester-set-name +(defun anim-tester-set-name ((arg0 string)) + (cond + ((zero? (length arg0)) + (format #t "ERROR: no name~%") + ) + ((and *anim-tester* (let ((v1-6 (-> *anim-tester* 0 obj-list))) + "is the list empty, #t = empty" + (not (= (-> v1-6 tailpred) v1-6)) + ) + ) + (let + ((s3-0 + (the-as + anim-test-obj + (glst-find-node-by-name + (-> *anim-tester* 0 obj-list) + (-> *anim-tester* 0 current-obj) + ) + ) + ) + ) + (cond + (s3-0 + (let + ((s5-0 + (the-as + anim-test-sequence + (glst-get-node-by-index + (-> s3-0 seq-list) + (-> s3-0 list-con current-index) + ) + ) + ) + ) + (cond + (s5-0 + (cond + ((logtest? (-> s5-0 flags) 1) + (let ((s4-0 (the-as object (-> s5-0 privname)))) + (let ((v1-14 s5-0)) + (set! (-> v1-14 privname) "") + ) + (cond + ((glst-find-node-by-name (-> s3-0 seq-list) arg0) + (format + #t + "ERROR: another sequence is already using that name (~S)~%" + arg0 + ) + (set! (-> s5-0 privname) (the-as string s4-0)) + ) + (else + (set! s4-0 arg0) + (set! (-> s5-0 privname) (the-as string s4-0)) + ) + ) + s4-0 + ) + ) + (else + (format #t "ERROR: no sequence selected~%") + ) + ) + ) + (else + (format #t "ERROR: no sequence selected~%") + ) + ) + ) + ) + (else + (format #t "ERROR:no object selected~%") + ) + ) + ) + ) + (else + (format #t "ERROR:no object loaded~%") + ) + ) + ) + +;; definition for function anim-tester-add-sequence +;; INFO: Return type mismatch object vs none. +(defun anim-tester-add-sequence ((arg0 string)) + (with-pp + (cond + ((zero? (length arg0)) + (format #t "ERROR: no name~%") + ) + ((and *anim-tester* (let ((v1-6 (-> *anim-tester* 0 obj-list))) + "is the list empty, #t = empty" + (not (= (-> v1-6 tailpred) v1-6)) + ) + ) + (let + ((s5-0 + (the-as + anim-test-obj + (glst-find-node-by-name + (-> *anim-tester* 0 obj-list) + (-> *anim-tester* 0 current-obj) + ) + ) + ) + ) + (cond + (s5-0 + (let ((s4-0 (glst-find-node-by-name (-> s5-0 seq-list) arg0))) + (cond + (s4-0 + (format + #t + "ERROR: there is already a sequence with the name ~S~%" + arg0 + ) + (set! + (-> s5-0 list-con current-index) + (glst-get-node-index (-> s5-0 seq-list) s4-0) + ) + (let ((a1-5 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-5 from) pp) + (set! (-> a1-5 num-params) 0) + (set! (-> a1-5 message) 'edit-sequence) + (send-event-function (ppointer->process *anim-tester*) a1-5) + ) + ) + (else + (let ((gp-1 (new 'global 'anim-test-sequence 1 arg0))) + (glst-add-tail (-> s5-0 seq-list) gp-1) + (set! + (-> gp-1 list-con listfunc) + anim-test-edit-sequence-list-handler + ) + (set! (-> gp-1 list-con left) (-> *ANIM_TESTER-bank* EDIT_LIST_X)) + (set! (-> gp-1 list-con top) (-> *ANIM_TESTER-bank* EDIT_LIST_Y)) + (set! (-> gp-1 list-con list) (-> gp-1 item-list)) + (set! (-> gp-1 list-con list-owner) (the-as uint gp-1)) + (set! (-> gp-1 parent) s5-0) + (anim-test-seq-mark-as-edited gp-1) + (logior! (-> gp-1 flags) 1) + (set! + (-> s5-0 list-con current-index) + (glst-get-node-index (-> s5-0 seq-list) gp-1) + ) + (set! (-> s5-0 seq-index) (-> s5-0 list-con current-index)) + (set! (-> s5-0 seq-hindex) (-> s5-0 list-con current-index)) + (let ((s5-1 (new 'debug 'anim-test-seq-item 1 "**END**"))) + (logior! (-> s5-1 flags) 1) + (glst-add-tail (-> gp-1 item-list) s5-1) + (set! (-> s5-1 parent) gp-1) + ) + ) + (let ((a1-11 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-11 from) pp) + (set! (-> a1-11 num-params) 0) + (set! (-> a1-11 message) 'edit-sequence) + (send-event-function (ppointer->process *anim-tester*) a1-11) + ) + ) + ) + ) + ) + (else + (format #t "ERROR:no object selected~%") + ) + ) + ) + ) + (else + (format #t "ERROR:no object loaded~%") + ) + ) + (none) + ) + ) + +) + + + diff --git a/test/offline/offline_test_main.cpp b/test/offline/offline_test_main.cpp index c717b765d0..7454963bf8 100644 --- a/test/offline/offline_test_main.cpp +++ b/test/offline/offline_test_main.cpp @@ -81,7 +81,12 @@ const std::unordered_set g_functions_expected_to_reject = { "ambient-inspect", // asm, weird // background - "background-upload-vu0", "draw-node-cull"}; + "background-upload-vu0", "draw-node-cull", + + // anim-tester + "(method 3 anim-tester)", + "anim-tester-save-object-seqs" // anim-tester -- new basic on the stack +}; const std::unordered_set g_functions_to_skip_compiling = { /// GCOMMON @@ -173,7 +178,12 @@ const std::unordered_set g_functions_to_skip_compiling = { "debug-menu-item-var-make-float", // decompiler BUG - "level-hint-task-process"}; + "level-hint-task-process", + + // anim-tester + "(method 3 anim-tester)", + "anim-tester-save-object-seqs" // anim-tester -- new basic on the stack +}; // default location for the data. It can be changed with a command line argument. std::string g_iso_data_path = ""; @@ -188,11 +198,12 @@ struct decomp_meta { std::vector g_object_files_to_decompile_or_ref_check; -std::vector dgos = { - "CGO/KERNEL.CGO", "CGO/ENGINE.CGO", "CGO/GAME.CGO", "DGO/BEA.DGO", "DGO/INT.DGO", "DGO/VI1.DGO", - "DGO/VI2.DGO", "DGO/VI3.DGO", "DGO/CIT.DGO", "DGO/MIS.DGO", "DGO/JUB.DGO", "DGO/SUN.DGO", - "DGO/DEM.DGO", "DGO/FIN.DGO", "DGO/JUN.DGO", "DGO/FIC.DGO", "DGO/SNO.DGO", "DGO/SWA.DGO", - "DGO/MAI.DGO", "DGO/ROB.DGO", "DGO/LAV.DGO", "DGO/OGR.DGO", "DGO/TRA.DGO"}; +std::vector dgos = {"CGO/KERNEL.CGO", "CGO/ENGINE.CGO", "CGO/GAME.CGO", "DGO/BEA.DGO", + "DGO/INT.DGO", "DGO/VI1.DGO", "DGO/VI2.DGO", "DGO/VI3.DGO", + "DGO/CIT.DGO", "DGO/MIS.DGO", "DGO/JUB.DGO", "DGO/SUN.DGO", + "DGO/DEM.DGO", "DGO/FIN.DGO", "DGO/JUN.DGO", "DGO/FIC.DGO", + "DGO/SNO.DGO", "DGO/SWA.DGO", "DGO/MAI.DGO", "DGO/ROB.DGO", + "DGO/LAV.DGO", "DGO/OGR.DGO", "DGO/TRA.DGO", "DGO/ROL.DGO"}; } // namespace