diff --git a/decompiler/config/all-types.gc b/decompiler/config/all-types.gc index 23e9154d3..2019f12be 100644 --- a/decompiler/config/all-types.gc +++ b/decompiler/config/all-types.gc @@ -23311,6 +23311,7 @@ ((ry float :offset-assert 0) (max-dry float :offset-assert 4) ) + :pack-me :method-count-assert 9 :size-assert #x8 :flag-assert #x900000008 @@ -23327,7 +23328,7 @@ (target float :offset-assert 28) (ry float :offset-assert 32) (max-speed-ry float :offset-assert 36) - (data float :dynamic :offset-assert 40) + (data twist-joint :inline :dynamic :offset-assert 40) ) :method-count-assert 13 :size-assert #x28 diff --git a/goal_src/levels/beach/twister.gc b/goal_src/levels/beach/twister.gc index 4ab86a28c..69fb2c289 100644 --- a/goal_src/levels/beach/twister.gc +++ b/goal_src/levels/beach/twister.gc @@ -10,6 +10,7 @@ ((ry float :offset-assert 0) (max-dry float :offset-assert 4) ) + :pack-me :method-count-assert 9 :size-assert #x8 :flag-assert #x900000008 @@ -17,17 +18,17 @@ ;; definition of type twister (deftype twister (basic) - ((num-joints int32 :offset-assert 4) - (first-joint int32 :offset-assert 8) - (last-joint int32 :offset-assert 12) - (something uint16 :offset 12) - (max-speed float :offset-assert 16) - (smoothing float :offset-assert 20) - (min-dist float :offset-assert 24) - (target float :offset-assert 28) - (ry float :offset-assert 32) - (max-speed-ry float :offset-assert 36) - (data float :dynamic :offset-assert 40) + ((num-joints int32 :offset-assert 4) + (first-joint int32 :offset-assert 8) + (last-joint int32 :offset-assert 12) + (something uint16 :offset 12) + (max-speed float :offset-assert 16) + (smoothing float :offset-assert 20) + (min-dist float :offset-assert 24) + (target float :offset-assert 28) + (ry float :offset-assert 32) + (max-speed-ry float :offset-assert 36) + (data twist-joint :inline :dynamic :offset-assert 40) ) :method-count-assert 13 :size-assert #x28 @@ -73,8 +74,14 @@ (set! (-> v0-0 ry) 0.0) (set! (-> v0-0 max-speed-ry) arg3) (dotimes (v1-4 gp-0) - (set! (-> (the-as twister (+ (the-as uint v0-0) (* v1-4 16))) data 0) 0.0) - (set! (-> (the-as twister (+ (the-as uint v0-0) (* v1-4 16))) data 1) 0.0) + (set! + (-> (the-as twister (+ (the-as uint v0-0) (* v1-4 16))) data 0 ry) + 0.0 + ) + (set! + (-> (the-as twister (+ (the-as uint v0-0) (* v1-4 16))) data 0 max-dry) + 0.0 + ) ) v0-0 ) @@ -95,7 +102,10 @@ (a1-2 (- arg1 (-> obj first-joint))) ) (while (>= a1-2 v1-1) - (set! (-> (the-as twister (+ (the-as uint obj) (* v1-1 16))) data 1) arg2) + (set! + (-> (the-as twister (+ (the-as uint obj) (* v1-1 16))) data 0 max-dry) + arg2 + ) (+! v1-1 1) ) ) @@ -188,7 +198,7 @@ ) (matrix-rotate-y! s4-0 - (-> (the-as twister (+ (the-as uint obj) (* s3-0 16))) data 0) + (-> (the-as twister (+ (the-as uint obj) (* s3-0 16))) data 0 ry) ) (vector-! (-> s2-0 vector 3) (-> s2-0 vector 3) (-> arg0 root trans)) (matrix*! s2-0 s2-0 s4-0) diff --git a/test/decompiler/reference/levels/beach/twister_REF.gc b/test/decompiler/reference/levels/beach/twister_REF.gc index 1e1c10241..e17024861 100644 --- a/test/decompiler/reference/levels/beach/twister_REF.gc +++ b/test/decompiler/reference/levels/beach/twister_REF.gc @@ -6,6 +6,7 @@ ((ry float :offset-assert 0) (max-dry float :offset-assert 4) ) + :pack-me :method-count-assert 9 :size-assert #x8 :flag-assert #x900000008 @@ -21,17 +22,17 @@ ;; definition of type twister (deftype twister (basic) - ((num-joints int32 :offset-assert 4) - (first-joint int32 :offset-assert 8) - (last-joint int32 :offset-assert 12) - (something uint16 :offset 12) - (max-speed float :offset-assert 16) - (smoothing float :offset-assert 20) - (min-dist float :offset-assert 24) - (target float :offset-assert 28) - (ry float :offset-assert 32) - (max-speed-ry float :offset-assert 36) - (data float :dynamic :offset-assert 40) + ((num-joints int32 :offset-assert 4) + (first-joint int32 :offset-assert 8) + (last-joint int32 :offset-assert 12) + (something uint16 :offset 12) + (max-speed float :offset-assert 16) + (smoothing float :offset-assert 20) + (min-dist float :offset-assert 24) + (target float :offset-assert 28) + (ry float :offset-assert 32) + (max-speed-ry float :offset-assert 36) + (data twist-joint :inline :dynamic :offset-assert 40) ) :method-count-assert 13 :size-assert #x28 @@ -93,8 +94,14 @@ (set! (-> v0-0 ry) 0.0) (set! (-> v0-0 max-speed-ry) arg3) (dotimes (v1-4 gp-0) - (set! (-> (the-as twister (+ (the-as uint v0-0) (* v1-4 16))) data 0) 0.0) - (set! (-> (the-as twister (+ (the-as uint v0-0) (* v1-4 16))) data 1) 0.0) + (set! + (-> (the-as twister (+ (the-as uint v0-0) (* v1-4 16))) data 0 ry) + 0.0 + ) + (set! + (-> (the-as twister (+ (the-as uint v0-0) (* v1-4 16))) data 0 max-dry) + 0.0 + ) ) v0-0 ) @@ -115,7 +122,10 @@ (a1-2 (- arg1 (-> obj first-joint))) ) (while (>= a1-2 v1-1) - (set! (-> (the-as twister (+ (the-as uint obj) (* v1-1 16))) data 1) arg2) + (set! + (-> (the-as twister (+ (the-as uint obj) (* v1-1 16))) data 0 max-dry) + arg2 + ) (+! v1-1 1) ) ) @@ -208,7 +218,7 @@ ) (matrix-rotate-y! s4-0 - (-> (the-as twister (+ (the-as uint obj) (* s3-0 16))) data 0) + (-> (the-as twister (+ (the-as uint obj) (* s3-0 16))) data 0 ry) ) (vector-! (-> s2-0 vector 3) (-> s2-0 vector 3) (-> arg0 root trans)) (matrix*! s2-0 s2-0 s4-0)