diff --git a/decompiler/config/all-types.gc b/decompiler/config/all-types.gc index b22633808f..586bab7b6d 100644 --- a/decompiler/config/all-types.gc +++ b/decompiler/config/all-types.gc @@ -7598,7 +7598,7 @@ (:methods (new (symbol type process art-joint-geo) _type_ 0) (dummy-9 (_type_) (pointer int8) 9) - (dummy-10 (_type_ int int) int 10) + (dummy-10 (_type_ int) int 10) (dummy-11 (_type_ pointer) int 11) ) ) @@ -9082,6 +9082,7 @@ ) ) +(declare-type effect-control basic) (deftype joint-control (basic) ((status uint16 :offset-assert 4) (allocated-length int16 :offset-assert 6) @@ -9090,8 +9091,8 @@ (active-channels int32 :offset-assert 24) (generate-frame-function basic :offset-assert 28) (prebind-function basic :offset-assert 32) - (postbind-function basic :offset-assert 36) - (effect basic :offset-assert 40) + (postbind-function function :offset-assert 36) + (effect effect-control :offset-assert 40) (channel joint-control-channel 3 :inline :offset-assert 48) ;; actually dynamic? (frame-group0 art-joint-anim :offset 60) (frame-num0 float :offset 64) @@ -13742,7 +13743,7 @@ (define-extern *camera-init-mat* matrix) (define-extern *camera* camera-master) (define-extern *camera-combiner* camera-combiner) -(define-extern *camera-orbit-target* process-drawable) +(define-extern *camera-orbit-target* (pointer process-drawable)) ;; ---------------------- @@ -18026,7 +18027,7 @@ ;;(define-extern *CAM_FREE-bank* object) ;; unknown type ;;(define-extern *CAM_POINT_WATCH-bank* object) ;; unknown type ;;(define-extern cam-point-watch object) ;; unknown type -;;(define-extern cam-orbit object) ;; unknown type +(define-extern cam-orbit state) ;; unknown type ;; ---------------------- @@ -20998,6 +20999,7 @@ (tailpred glst-node :offset-assert 8) (numelem int32 :offset-assert 12) ) + :allow-misaligned :method-count-assert 9 :size-assert #x10 :flag-assert #x900000010 @@ -21047,114 +21049,206 @@ ;; - Types -; (deftype anim-test-sequence (UNKNOWN) -; () -; :method-count-assert 0 -; :size-assert #x0 -; :flag-assert #x0 -; ;; bad get label -; ) +(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) + ) + :allow-misaligned + :method-count-assert 9 + :size-assert #x50 + :flag-assert #x900000050 + ) -; (deftype anim-test-seq-item (UNKNOWN) -; () -; :method-count-assert 0 -; :size-assert #x0 -; :flag-assert #x0 -; ;; bad get label -; ) +(deftype list-field (structure) + ((left int32 :offset-assert 0) + (width int32 :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) -; (deftype anim-tester (UNKNOWN) -; () -; :method-count-assert 0 -; :size-assert #x0 -; :flag-assert #x0 -; ;; unrecognized get op: (set! v1 process-drawable) parent was UNKNOWN -; ) +(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 + ) -; (deftype list-control (UNKNOWN) -; () -; :method-count-assert 0 -; :size-assert #x0 -; :flag-assert #x0 -; ;; bad get label -; ) +(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 + ) -; (deftype list-field (UNKNOWN) -; () -; :method-count-assert 0 -; :size-assert #x0 -; :flag-assert #x0 -; ;; bad get label -; ) +(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) + ) + :method-count-assert 20 + :size-assert #x198 + :heap-base #x130 + :flag-assert #x1401300198 + ) -; (deftype DISP_LIST-bank (UNKNOWN) -; () -; :method-count-assert 0 -; :size-assert #x0 -; :flag-assert #x0 -; ;; bad get label -; ) +(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) + ) + ) -; (deftype anim-tester-bank (UNKNOWN) -; () -; :method-count-assert 0 -; :size-assert #x0 -; :flag-assert #x0 -; ;; bad get label -; ) +(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) + ) + ) -; (deftype anim-test-obj (UNKNOWN) -; () -; :method-count-assert 0 -; :size-assert #x0 -; :flag-assert #x0 -; ;; bad get label -; ) +(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) + ) + ) ;; - Functions -(define-extern anim-test-edit-sequence-list-handler function) -(define-extern anim-test-seq-mark-as-edited function) -(define-extern anim-tester-start function) -(define-extern anim-tester-add-newobj function) -(define-extern anim-tester-stop function) -(define-extern initialize-anim-tester function) -(define-extern anim-tester-save-object-seqs function) -(define-extern anim-tester-num-print (function symbol float none)) -(define-extern anim-test-obj-list-handler function) -(define-extern anim-tester-standard-event-handler function) -(define-extern anim-tester-reset function) -(define-extern anim-tester-get-playing-item function) -(define-extern anim-tester-update-anim-info function) -(define-extern anim-tester-interface function) -(define-extern display-list-control function) -(define-extern anim-test-anim-list-handler function) -(define-extern anim-test-sequence-list-handler function) -(define-extern anim-tester-disp-frame-num function) -(define-extern anim-test-seq-item-copy! function) -(define-extern anim-tester-adjust-frame function) -(define-extern anim-test-edit-seq-insert-item function) -(define-extern anim-tester-pick-item-setup function) -(define-extern anim-tester-save-all-objects function) -(define-extern anim-tester-real-post function) -(define-extern anim-test-obj-item-valid? function) -(define-extern anim-test-obj-init function) -(define-extern anim-test-sequence-init function) -(define-extern anim-test-obj-remove-invalid function) -(define-extern anim-tester-post function) -(define-extern anim-tester-string-get-frame!! function) -(define-extern anim-tester-load-object-seqs function) -(define-extern anim-tester-add-object function) -(define-extern anim-tester-set-name function) -(define-extern anim-tester-add-sequence function) +(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 initialize-anim-tester (function none :behavior anim-tester)) +(define-extern anim-tester-save-object-seqs (function anim-test-obj none)) +(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-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-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-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-tester-post (function none :behavior anim-tester)) +(define-extern anim-tester-string-get-frame!! (function list-field string none)) +(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)) +(define-extern anim-tester-add-sequence (function string none)) ;; - Unknowns -;;(define-extern *anim-tester* object) ;; unknown type -;;(define-extern *ANIM_TESTER-bank* object) ;; unknown type -;;(define-extern anim-tester-process object) ;; unknown type -;;(define-extern anim-test-field-highlight-lw object) ;; unknown type -;;(define-extern *DISP_LIST-bank* object) ;; unknown type +(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-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) diff --git a/decompiler/config/jak1_ntsc_black_label/anonymous_function_types.jsonc b/decompiler/config/jak1_ntsc_black_label/anonymous_function_types.jsonc index 1d9207344e..b3c32631b8 100644 --- a/decompiler/config/jak1_ntsc_black_label/anonymous_function_types.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/anonymous_function_types.jsonc @@ -572,6 +572,12 @@ [3, "(function basic symbol)"], [2, "(function process symbol)"] ], + + "anim-tester": [ + [11, "(function none :behavior anim-tester)"], + [12, "(function none :behavior anim-tester)"], + [13, "(function none :behavior anim-tester)"] + ], "placeholder-do-not-add-below": [] } diff --git a/decompiler/config/jak1_ntsc_black_label/hacks.jsonc b/decompiler/config/jak1_ntsc_black_label/hacks.jsonc index 681eb61ba5..49bd0c5663 100644 --- a/decompiler/config/jak1_ntsc_black_label/hacks.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/hacks.jsonc @@ -378,7 +378,7 @@ "ocean-interp-wave", // anim-tester BUG - "anim-tester-add-newobj", + //"anim-tester-add-newobj", // nav-enemy BUG "(anon-function 28 nav-enemy)", diff --git a/decompiler/config/jak1_ntsc_black_label/label_types.jsonc b/decompiler/config/jak1_ntsc_black_label/label_types.jsonc index 06d376fc62..ba55d58085 100644 --- a/decompiler/config/jak1_ntsc_black_label/label_types.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/label_types.jsonc @@ -1275,6 +1275,15 @@ ["L37", "uint64", true], ["L38", "uint64", true] ], + + "anim-tester": [ + ["L615", "_auto_", true], + ["L592", "_auto_", true], + ["L509", "(inline-array list-field)", true, 12], + ["L123", "_lambda_", true], + ["L119", "_lambda_", true], + ["L86", "_lambda_", 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 54e7600f24..f08294c1b5 100644 --- a/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc @@ -560,6 +560,23 @@ [80, "vector"], [96, "vector"] ], + + "anim-tester-save-object-seqs": [ + [16, "file-stream"] + ], + + "anim-test-obj-list-handler": [[16, "event-message-block"]], + "anim-test-anim-list-handler": [[16, "event-message-block"]], + "anim-test-sequence-list-handler": [[16, "event-message-block"]], + "anim-test-edit-sequence-list-handler": [[16, "event-message-block"]], + "anim-test-edit-seq-insert-item": [[16, "event-message-block"]], + "anim-test-edit-sequence-list-handler": [ + [112, "event-message-block"], + [16, "font-context"] + ], + "anim-tester-add-newobj": [[16, "event-message-block"]], + "anim-tester-start": [[16, "event-message-block"]], + "anim-tester-add-sequence": [[16, "event-message-block"]], "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 58d2de4172..6de7e784a9 100644 --- a/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc @@ -1266,6 +1266,225 @@ [23, "v1", "float"], [36, "v1", "uint"] ], + + "(method 0 anim-test-obj)": [ + [9, "s4", "anim-test-obj"], + [10, "s4", "anim-test-obj"], + [13, "s4", "anim-test-obj"], + [15, "s4", "anim-test-obj"] + ], + + "(method 0 anim-test-sequence)": [ + [8, "s5", "anim-test-sequence"], + [11, "s5", "anim-test-sequence"], + [13, "s5", "anim-test-sequence"] + ], + + "(method 0 anim-test-seq-item)": [ + [8, "v1", "anim-test-seq-item"], + [10, "v0", "anim-test-seq-item"], + [11, "v0", "anim-test-seq-item"], + [14, "v0", "anim-test-seq-item"], + [17, "v0", "anim-test-seq-item"] + ], + + "(method 3 anim-tester)": [ + [12, "s5", "anim-test-obj"], + [15, "s5", "anim-test-obj"], + [148, "s5", "anim-test-obj"], + [150, "s5", "anim-test-obj"], + [22, "s4", "anim-test-sequence"], + [28, "s4", "anim-test-sequence"], + [38, "s4", "anim-test-sequence"], + [48, "s4", "anim-test-sequence"], + [59, "s4", "anim-test-sequence"], + [137, "s4", "anim-test-sequence"], + [139, "s4", "anim-test-sequence"], + [66, "s3", "anim-test-seq-item"], + [70, "s3", "anim-test-seq-item"], + [75, "s3", "anim-test-seq-item"], + [79, "s3", "anim-test-seq-item"], + [88, "s3", "anim-test-seq-item"], + [94, "s3", "anim-test-seq-item"], + [104, "s3", "anim-test-seq-item"], + [114, "s3", "anim-test-seq-item"], + [126, "s3", "anim-test-seq-item"], + [128, "s3", "anim-test-seq-item"] + ], + + "anim-test-obj-item-valid?": [ + [5, "s5", "anim-test-sequence"], + [12, "s5", "anim-test-sequence"], + [17, "s5", "anim-test-sequence"], + [36, "s5", "anim-test-sequence"], + [38, "s5", "anim-test-sequence"], + [20, "v1", "anim-test-seq-item"], + [26, "v1", "anim-test-seq-item"], + [28, "v1", "anim-test-seq-item"] + ], + + "anim-test-obj-remove-invalid": [ + [84, "v1", "anim-test-sequence"], + [88, "v1", "anim-test-sequence"], + [90, "v1", "anim-test-sequence"], + [92, "v1", "anim-test-sequence"], + [93, "v1", "anim-test-sequence"], + [91, "a0", "anim-test-sequence"], + [5, "s5", "anim-test-sequence"], + [8, "s5", "anim-test-sequence"], + [11, "s5", "anim-test-sequence"], + [30, "s5", "anim-test-sequence"], + [44, "s5", "anim-test-sequence"], + [51, "s5", "anim-test-sequence"], + [58, "s5", "anim-test-sequence"], + [67, "s5", "anim-test-sequence"], + [70, "s4", "anim-test-sequence"], + [71, "s5", "anim-test-sequence"], + [72, "s5", "anim-test-sequence"], + [15, "s3", "anim-test-seq-item"], + [18, "s3", "anim-test-seq-item"], + [24, "s3", "anim-test-seq-item"], + [31, "s3", "anim-test-seq-item"], + [34, "s2", "anim-test-seq-item"], + [35, "s3", "anim-test-seq-item"], + [36, "s3", "anim-test-seq-item"], + [61, "a0", "anim-test-seq-item"] + ], + + "anim-tester-reset": [ + [14, "v1", "anim-test-obj"], + [30, "v1", "anim-test-obj"], + [33, "v1", "anim-test-obj"], + [36, "v1", "anim-test-obj"], + [43, "v1", "anim-test-obj"], + [[50, 53], "v1", "anim-test-obj"] + ], + + "anim-tester-save-all-objects": [ + [[4, 19], "gp", "anim-test-obj"], + [17, "v1", "anim-test-obj"] + ], + + "anim-tester-save-object-seqs": [ + [63, "s5", "anim-test-sequence"], + [69, "s5", "anim-test-sequence"], + [65, "s5", "anim-test-sequence"], + [75, "s5", "anim-test-sequence"], + [79, "s5", "anim-test-sequence"], + [133, "s5", "anim-test-sequence"], + [141, "s5", "anim-test-sequence"], + [142, "v1", "anim-test-sequence"], + [143, "s5", "anim-test-sequence"], + [83, "s4", "anim-test-seq-item"], + [89, "s4", "anim-test-seq-item"], + [91, "s4", "anim-test-seq-item"], + [92, "s4", "anim-test-seq-item"], + [96, "s4", "anim-test-seq-item"], + [105, "s4", "anim-test-seq-item"], + [111, "s4", "anim-test-seq-item"], + [120, "s4", "anim-test-seq-item"], + [121, "v1", "anim-test-seq-item"], + [122, "s4", "anim-test-seq-item"] + ], + + "anim-test-obj-list-handler": [ + [25, "s5", "anim-test-obj"], + [31, "s5", "anim-test-obj"], + [110, "s5", "anim-test-obj"], + [166, "s5", "anim-test-obj"], + [112, "v1", "anim-tester"] + ], + + "anim-test-anim-list-handler": [ + [2, "s5", "anim-test-obj"], + [25, "s5", "anim-test-obj"], + [65, "s5", "anim-test-obj"], + [227, "s5", "anim-test-obj"], + [90, "v1", "anim-test-obj"], + [91, "v1", "anim-test-obj"], + [100, "v1", "anim-test-obj"], + [105, "v1", "anim-test-obj"], + [130, "v1", "anim-test-obj"], + [131, "v1", "anim-test-obj"], + [140, "v1", "anim-test-obj"], + [145, "v1", "anim-test-obj"], + [167, "v1", "anim-test-obj"], + [169, "v1", "anim-test-obj"], + [171, "v1", "anim-test-obj"], + [173, "v1", "anim-test-obj"] + ], + + "anim-test-sequence-list-handler": [ + [2, "s5", "anim-test-sequence"], + [25, "s5", "anim-test-sequence"], + [31, "s5", "anim-test-sequence"], + [71, "s5", "anim-test-sequence"], + [231, "s5", "anim-test-sequence"], + [96, "v1", "anim-test-sequence"], + [97, "v1", "anim-test-sequence"], + [106, "v1", "anim-test-sequence"], + [111, "v1", "anim-test-sequence"], + [136, "v1", "anim-test-sequence"], + [137, "v1", "anim-test-sequence"], + [146, "v1", "anim-test-sequence"], + [151, "v1", "anim-test-sequence"] + ], + + "anim-test-edit-sequence-list-handler": [ + [[122, 965], "s4", "anim-test-sequence"], + [129, "v1", "glst-named-node"], + [[128, 909], "gp", "anim-test-seq-item"], + [380, "v0", "anim-test-obj"], + [381, "v0", "anim-test-obj"], + [382, "v0", "anim-test-obj"], + [389, "v0", "anim-test-obj"], + [483, "s3", "anim-test-seq-item"], + [491, "s3", "anim-test-seq-item"], + [502, "s3", "anim-test-seq-item"] + ], + + "anim-tester-interface": [ + [[34, 48], "gp", "anim-test-obj"], + [[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"], + [[5, 22], "s5", "anim-test-seq-item"], + [21, "v0", "anim-test-seq-item"], + [25, "v0", "anim-test-seq-item"] + ], + + "anim-tester-add-newobj": [ + [[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"] + ], + + "anim-tester-start": [ + [20, "t9", "(function process function none)"] + ], + + "anim-tester-set-name": [ + [[34, 51], "s3", "anim-test-obj"], + [[40, 63], "s5", "anim-test-sequence"] + ], + + "anim-tester-add-sequence": [ + [[33, 102], "s5", "anim-test-obj"] + ], + + "(anon-function 11 anim-tester)": [ + [[23, 113], "s4", "anim-test-obj"], + [[83, 338], "gp", "anim-test-sequence"], + [[123, 187], "s4", "art-joint-anim"] + ], "(method 10 bsp-header)": [ [[51, 61], "a0", "(pointer uint128)"], diff --git a/decompiler/config/jak1_ntsc_black_label/var_names.jsonc b/decompiler/config/jak1_ntsc_black_label/var_names.jsonc index 9e3f4204e1..00c4f350ba 100644 --- a/decompiler/config/jak1_ntsc_black_label/var_names.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/var_names.jsonc @@ -2554,6 +2554,41 @@ "sv-64": "spool-sound" } }, + + "(method 3 anim-tester)": { + "vars": { + "s5-0": ["s5-0", "anim-test-obj"], + "s4-0": ["s4-0", "anim-test-sequence"], + "s3-0": ["s3-0", "anim-test-seq-item"] + } + }, + + "anim-test-obj-item-valid?": { + "vars": { + "s5-0": ["s5-0", "anim-test-sequence"] + } + }, + + "anim-test-obj-remove-invalid": { + "vars": { + //"s5-0": ["s5-0", "anim-test-sequence"], + "v1-31": ["v1-31", "anim-test-sequence"], + "s3-0": ["s3-0", "anim-test-seq-item"], + "s2-0": ["s2-0", "anim-test-seq-item"] + } + }, + + "anim-tester-reset": { + "vars": { + "v1-1": ["v1-1", "anim-test-obj"] + } + }, + + "anim-tester-save-object-seqs": { + "vars": { + "s4-2": ["s4-2", "anim-test-seq-item"] + } + }, "sprite-setup-header": { "args": ["hdr", "num-sprites"] diff --git a/goal_src/engine/anim/joint-h.gc b/goal_src/engine/anim/joint-h.gc index 5586766985..3347540c7a 100644 --- a/goal_src/engine/anim/joint-h.gc +++ b/goal_src/engine/anim/joint-h.gc @@ -28,6 +28,7 @@ ) ) +(declare-type effect-control basic) (deftype joint-control (basic) ((status uint16 :offset-assert 4) (allocated-length int16 :offset-assert 6) @@ -36,8 +37,8 @@ (active-channels int32 :offset-assert 24) (generate-frame-function basic :offset-assert 28) (prebind-function basic :offset-assert 32) - (postbind-function basic :offset-assert 36) - (effect basic :offset-assert 40) + (postbind-function function :offset-assert 36) + (effect effect-control :offset-assert 40) (channel joint-control-channel 3 :inline :offset-assert 48) ;; actually dynamic? (frame-group0 art-joint-anim :offset 60) (frame-num0 float :offset 64) diff --git a/goal_src/engine/camera/cam-interface-h.gc b/goal_src/engine/camera/cam-interface-h.gc index 9fc5bce14d..b48bb58b38 100644 --- a/goal_src/engine/camera/cam-interface-h.gc +++ b/goal_src/engine/camera/cam-interface-h.gc @@ -15,6 +15,6 @@ (define-perm *camera-init-mat* matrix #f) (define-perm *camera* camera-master #f) (define-perm *camera-combiner* camera-combiner #f) -(define-perm *camera-orbit-target* process-drawable #f) +(define-perm *camera-orbit-target* (pointer process-drawable) #f) (define-extern position-in-front-of-camera! (function vector float float vector)) \ No newline at end of file diff --git a/goal_src/engine/data/art-h.gc b/goal_src/engine/data/art-h.gc index f34c6647ba..a4b61e2ad7 100644 --- a/goal_src/engine/data/art-h.gc +++ b/goal_src/engine/data/art-h.gc @@ -296,7 +296,7 @@ (:methods (new (symbol type process art-joint-geo) _type_ 0) (dummy-9 (_type_) (pointer int8) 9) - (dummy-10 (_type_ int int) int 10) + (dummy-10 (_type_ int) int 10) (dummy-11 (_type_ pointer) int 11) ) ) diff --git a/goal_src/engine/util/glist-h.gc b/goal_src/engine/util/glist-h.gc index 20d28c746a..558490e363 100644 --- a/goal_src/engine/util/glist-h.gc +++ b/goal_src/engine/util/glist-h.gc @@ -6,7 +6,8 @@ ;; dgos: GAME, ENGINE -;; This whole linked list system is hellspawn! Whoever made this is insane and a danger to society +;; Very very weird linked list system. +;; TODO add examples because this is extremely confusing. (when *debug-segment* @@ -33,6 +34,7 @@ (tailpred glst-node :offset-assert 8) (numelem int32 :offset-assert 12) ) + :allow-misaligned :method-count-assert 9 :size-assert #x10 :flag-assert #x900000010 @@ -101,6 +103,7 @@ (defun-debug glst-set-name! ((node glst-named-node) (name string)) "Set the name of the node" + (declare (inline)) (set! (-> node privname) name) ) diff --git a/goal_src/engine/util/glist.gc b/goal_src/engine/util/glist.gc index eb54a41e82..aff6ff668f 100644 --- a/goal_src/engine/util/glist.gc +++ b/goal_src/engine/util/glist.gc @@ -156,7 +156,7 @@ (let ((max-len 0)) (glst-iterate-named-list list node - (let ((len ((method-of-type string length) (-> node privname)))) ;; TODO method call + (let ((len (length (-> node privname)))) (when (< max-len len) (set! max-len len) ) diff --git a/test/decompiler/reference/engine/anim/joint-h_REF.gc b/test/decompiler/reference/engine/anim/joint-h_REF.gc index a3c5b1456c..38a3855b5d 100644 --- a/test/decompiler/reference/engine/anim/joint-h_REF.gc +++ b/test/decompiler/reference/engine/anim/joint-h_REF.gc @@ -51,8 +51,8 @@ (active-channels int32 :offset-assert 24) (generate-frame-function basic :offset-assert 28) (prebind-function basic :offset-assert 32) - (postbind-function basic :offset-assert 36) - (effect basic :offset-assert 40) + (postbind-function function :offset-assert 36) + (effect effect-control :offset-assert 40) (channel joint-control-channel 3 :inline :offset-assert 48) (frame-group0 art-joint-anim :offset 60) (frame-num0 float :offset 64) diff --git a/test/decompiler/reference/engine/camera/cam-interface-h_REF.gc b/test/decompiler/reference/engine/camera/cam-interface-h_REF.gc index f43db6dcda..b074702928 100644 --- a/test/decompiler/reference/engine/camera/cam-interface-h_REF.gc +++ b/test/decompiler/reference/engine/camera/cam-interface-h_REF.gc @@ -19,8 +19,8 @@ ;; definition (perm) for symbol *camera-combiner*, type camera-combiner (define-perm *camera-combiner* camera-combiner #f) -;; definition (perm) for symbol *camera-orbit-target*, type process-drawable -(define-perm *camera-orbit-target* process-drawable #f) +;; definition (perm) for symbol *camera-orbit-target*, type (pointer process-drawable) +(define-perm *camera-orbit-target* (pointer process-drawable) #f) ;; failed to figure out what this is: 0 diff --git a/test/decompiler/reference/engine/data/art-h_REF.gc b/test/decompiler/reference/engine/data/art-h_REF.gc index a44a525ac3..4a9a0ce1b4 100644 --- a/test/decompiler/reference/engine/data/art-h_REF.gc +++ b/test/decompiler/reference/engine/data/art-h_REF.gc @@ -450,7 +450,7 @@ (:methods (new (symbol type process art-joint-geo) _type_ 0) (dummy-9 (_type_) (pointer int8) 9) - (dummy-10 (_type_ int int) int 10) + (dummy-10 (_type_ int) int 10) (dummy-11 (_type_ pointer) int 11) ) )