[decomp] debug (#607)

* [decomp] `debug`

* shut up
This commit is contained in:
ManDude 2021-06-19 19:24:55 +01:00 committed by GitHub
parent 387a394be9
commit 46b83bda2a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
39 changed files with 2132 additions and 271 deletions

View file

@ -2,6 +2,7 @@
#include "decompiler/ObjectFile/LinkedObjectFile.h"
#include "common/log/log.h"
#include "AtomicOp.h"
#include "decompiler/util/TP_Type.h"
#include "decompiler/util/DecompilerTypeSystem.h"
#include "decompiler/IR2/bitfields.h"

View file

@ -495,7 +495,7 @@
)
(defenum bucket-id
:type uint32
:type int32
:bitfield #f
(tfrag-tex0 5)
@ -529,8 +529,10 @@
(water-tex1 60)
;; merc1 61
;; generic1 62
;; debug spheres? 67
(debug-draw0 67)
;; debug text 68
(debug-draw 68)
(debug-draw1 68)
)
(define-extern sinteger type)
@ -1267,7 +1269,7 @@
)
(deftype vector2h (structure)
((data int16 2 :offset-assert 0)
((data int16 2 :score -9999 :offset-assert 0)
(x int16 :offset 0)
(y int16 :offset 2)
)
@ -1290,7 +1292,7 @@
)
(deftype vector3h (structure)
((data int16 2 :offset-assert 0) ;; probably a bug, should be 3.
((data int16 2 :score -9999 :offset-assert 0) ;; probably a bug, should be 3.
(x int16 :offset 0)
(y int16 :offset 2)
(z int16 :offset-assert 4)
@ -1301,7 +1303,7 @@
)
(deftype vector2w (structure)
((data int32 2 :offset-assert 0)
((data int32 2 :score -9999 :offset-assert 0)
(x int32 :offset 0)
(y int32 :offset 4)
)
@ -1312,7 +1314,7 @@
)
(deftype vector3w (structure)
((data int32 3 :do-not-decompile :offset-assert 0)
((data int32 3 :score -9999 :offset-assert 0)
(x int32 :offset 0)
(y int32 :offset 4)
(z int32 :offset 8)
@ -1324,7 +1326,7 @@
)
(deftype vector4w (structure)
((data int32 4 :do-not-decompile :offset-assert 0)
((data int32 4 :score -9999 :offset-assert 0)
(x int32 :offset 0)
(y int32 :offset 4)
(z int32 :offset 8)
@ -1338,9 +1340,9 @@
)
(deftype vector4w-2 (structure)
((data int32 8 :offset-assert 0)
((data int32 8 :score -9999 :offset-assert 0)
(quad uint128 2 :offset 0)
(vector vector4w 2 :offset 0)
(vector vector4w 2 :inline :offset 0)
)
:method-count-assert 9
:size-assert #x20
@ -1348,9 +1350,9 @@
)
(deftype vector4w-3 (structure)
((data int32 12 :offset-assert 0)
((data int32 12 :score -9999 :offset-assert 0)
(quad uint128 3 :offset 0)
(vector vector4w 3 :offset 0)
(vector vector4w 3 :inline :offset 0)
)
:method-count-assert 9
:size-assert #x30
@ -1358,9 +1360,9 @@
)
(deftype vector4w-4 (structure)
((data int32 16 :offset-assert 0)
((data int32 16 :score -9999 :offset-assert 0)
(quad uint128 4 :offset 0)
(vector vector4w 4 :offset 0)
(vector vector4w 4 :inline :offset 0)
)
:method-count-assert 9
:size-assert #x40
@ -1400,8 +1402,7 @@
)
(deftype vector (structure)
(
(data float 4 :do-not-decompile :offset-assert 0)
((data float 4 :do-not-decompile :score -9999 :offset-assert 0)
(x float :offset 0)
(y float :offset 4)
(z float :offset 8)
@ -1695,7 +1696,7 @@
(y float :offset-assert 4)
(z float :offset-assert 8)
(w float :offset-assert 12)
(data float 4 :do-not-decompile :offset 0)
(data float 4 :score -9999 :offset 0)
(vec vector :inline :offset 0)
(quad uint128 :offset 0)
)
@ -2057,7 +2058,7 @@
(define-extern curve-length function)
(define-extern curve-get-pos! function)
(define-extern vector-vector-distance-squared (function vector vector float))
(define-extern curve-evaluate! function)
(define-extern curve-evaluate! (function vector float int int vector int int))
(define-extern vector-vector-distance (function vector vector float))
(define-extern circle-circle-xz-intersect (function vector vector vector vector int))
(define-extern vector-normalize-copy! (function vector vector float vector))
@ -2093,7 +2094,7 @@
(define-extern vector-deg-slerp (function vector vector vector float vector))
(define-extern vector-vector-deg-slerp! function) ;; stack spills!
(define-extern normal-of-plane (function vector vector vector vector vector))
(define-extern vector-3pt-cross! (function vector vector vector vector))
(define-extern vector-3pt-cross! (function vector vector vector vector vector))
(define-extern closest-pt-in-triangle function) ;; asm branches
(define-extern point-in-triangle-cross (function vector vector vector vector vector symbol))
(define-extern point-in-plane-<-point+normal! (function vector vector vector vector))
@ -2944,8 +2945,7 @@
;; - Symbols
(define-extern *video-parms* video-parms) ;; unknown type
;; unknown type
(define-extern *video-parms* video-parms)
;; ----------------------
@ -5509,7 +5509,9 @@
;; - Types
(deftype drawable-group (drawable)
((pad uint8 4))
((length int16 :offset 6)
(data drawable 1 :offset-assert 32)
)
:flag-assert #x1200000024
)
@ -9989,7 +9991,7 @@
;; - Types
(deftype pos-history (structure)
((points uint32 :offset-assert 0)
((points (inline-array vector) :offset-assert 0)
(num-points int32 :offset-assert 4)
(h-first int32 :offset-assert 8)
(h-last int32 :offset-assert 12)
@ -10018,7 +10020,6 @@
:method-count-assert 9
:size-assert #x4b10
:flag-assert #x900004b10
;; inspect method is overriden in debug.gc
)
@ -10158,13 +10159,13 @@
(define-extern joint-mod-set-local-callback (function cspace transformq none))
(define-extern joint-mod-wheel-callback (function cspace transformq none))
(define-extern vector<-cspace! (function vector cspace vector))
(define-extern add-debug-text-sphere (function symbol bucket-id vector float string rgba none))
(define-extern add-debug-text-sphere (function symbol bucket-id vector float string rgba symbol))
(define-extern joint-mod-look-at-handler (function cspace transformq none))
(define-extern joint-mod-world-look-at-handler (function cspace transformq none))
(define-extern joint-mod-rotate-handler (function cspace transformq none))
(define-extern joint-mod-joint-set-handler (function cspace transformq none))
(define-extern joint-mod-joint-set*-handler (function cspace transformq none))
(define-extern add-debug-matrix (function symbol bucket-id matrix none))
(define-extern add-debug-matrix (function symbol bucket-id matrix matrix))
(define-extern joint-mod-debug-draw (function joint-mod none))
;; - Symbols
@ -11944,8 +11945,7 @@
)
(deftype drawable-tree-instance-tie (drawable-tree)
((length int16 :offset 6)
(prototypes basic :offset 8)
((prototypes basic :offset 8)
)
:method-count-assert 18
:size-assert #x24
@ -14843,9 +14843,9 @@
;; - Functions
(define-extern add-debug-line (function symbol int vector vector rgba symbol int int))
(define-extern add-debug-line (function symbol bucket-id vector vector rgba symbol rgba symbol))
(define-extern make-debug-sphere-table (function debug-sphere-table none))
(define-extern add-debug-sphere-from-table (function int vector vector rgba none))
(define-extern add-debug-sphere-from-table (function bucket-id vector float rgba none))
;; - Symbols
@ -14862,12 +14862,12 @@
(deftype debug-line (structure)
((flags int32 :offset-assert 0)
(bucket int32 :offset-assert 4)
(bucket bucket-id :offset-assert 4)
(v1 vector :inline :offset-assert 16)
(v2 vector :inline :offset-assert 32)
(color uint32 :offset-assert 48)
(mode basic :offset-assert 52)
(color2 uint32 :offset-assert 56)
(color rgba :offset-assert 48)
(mode symbol :offset-assert 52)
(color2 rgba :offset-assert 56)
)
:method-count-assert 9
:size-assert #x3c
@ -14876,11 +14876,11 @@
(deftype debug-text-3d (structure)
((flags int32 :offset-assert 0)
(bucket int32 :offset-assert 4)
(bucket bucket-id :offset-assert 4)
(pos vector :inline :offset-assert 16)
(color uint64 :offset-assert 32)
(offset vector2h :inline :offset-assert 40)
(str basic :offset-assert 44)
(str string :offset-assert 44)
)
:method-count-assert 9
:size-assert #x30
@ -14898,50 +14898,50 @@
;; - Functions
(define-extern debug-set-camera-pos-rot! function)
(define-extern drawable-frag-count function)
(define-extern add-debug-light function)
(define-extern add-debug-text-3d function)
(define-extern add-debug-x function)
(define-extern add-debug-curve function)
(define-extern add-debug-sphere (function symbol int vector float int int))
(define-extern get-debug-text-3d function)
(define-extern internal-draw-debug-text-3d function)
(define-extern get-debug-line function)
(define-extern internal-draw-debug-line function)
(define-extern draw-string function)
(define-extern transform-float-point function)
(define-extern add-debug-point function)
(define-extern add-debug-outline-triangle function)
(define-extern add-debug-triangle-normal function)
(define-extern add-debug-flat-triangle function)
(define-extern debug-reset-buffers function)
(define-extern debug-draw-buffers function)
(define-extern add-debug-line2d function)
(define-extern add-debug-box function)
(define-extern add-debug-sphere-with-transform function)
(define-extern add-debug-spheres function)
(define-extern add-debug-circle function)
(define-extern add-debug-rot-matrix function)
(define-extern add-debug-yrot-vector function)
(define-extern add-debug-arc function)
(define-extern add-debug-curve2 function)
(define-extern add-debug-points function)
(define-extern debug-percent-bar function)
(define-extern debug-pad-display function)
(define-extern add-debug-lights function)
(define-extern history-init function)
(define-extern history-draw-and-update function)
(define-extern dma-timeout-cam function)
(define-extern display-file-info function)
(define-extern debug-set-camera-pos-rot! (function vector matrix int))
(define-extern drawable-frag-count (function drawable int))
(define-extern add-debug-light (function symbol bucket-id light vector string symbol))
(define-extern add-debug-text-3d (function symbol bucket-id string vector rgba vector2h symbol))
(define-extern add-debug-x (function symbol bucket-id vector rgba symbol))
(define-extern add-debug-curve (function symbol bucket-id pointer int vector int rgba symbol))
(define-extern add-debug-sphere (function symbol bucket-id vector float rgba symbol))
(define-extern get-debug-text-3d (function debug-text-3d))
(define-extern internal-draw-debug-text-3d (function bucket-id string vector rgba vector2h pointer))
(define-extern get-debug-line (function debug-line))
(define-extern internal-draw-debug-line (function bucket-id vector vector rgba symbol rgba object))
(define-extern draw-string (function string dma-buffer int))
(define-extern transform-float-point (function vector vector vector))
(define-extern add-debug-point (function symbol bucket-id vector symbol)) ;; unused
(define-extern add-debug-outline-triangle (function symbol bucket-id vector vector vector rgba symbol))
(define-extern add-debug-triangle-normal (function symbol bucket-id vector vector vector rgba symbol))
(define-extern add-debug-flat-triangle (function symbol bucket-id vector vector vector rgba symbol))
(define-extern debug-reset-buffers (function symbol))
(define-extern debug-draw-buffers (function symbol))
(define-extern add-debug-line2d (function symbol bucket-id vector vector vector symbol))
(define-extern add-debug-box (function symbol bucket-id vector vector rgba symbol))
(define-extern add-debug-sphere-with-transform (function symbol bucket-id vector float matrix rgba symbol))
(define-extern add-debug-spheres (function symbol bucket-id (pointer float) int rgba symbol))
(define-extern add-debug-circle (function symbol bucket-id vector float rgba matrix symbol))
(define-extern add-debug-rot-matrix (function symbol bucket-id matrix vector matrix))
(define-extern add-debug-yrot-vector (function symbol bucket-id vector float float rgba symbol))
(define-extern add-debug-arc (function symbol bucket-id vector float float float rgba matrix symbol))
(define-extern add-debug-curve2 (function symbol bucket-id curve rgba symbol))
(define-extern add-debug-points (function symbol bucket-id (inline-array vector) int rgba float int symbol)) ;; unused
(define-extern debug-percent-bar (function symbol bucket-id int int float rgba symbol))
(define-extern debug-pad-display (function cpad-info symbol)) ;; unused
(define-extern add-debug-lights (function symbol bucket-id (inline-array light) vector symbol))
(define-extern history-init (function pos-history int pos-history))
(define-extern history-draw-and-update (function pos-history int vector symbol))
(define-extern dma-timeout-cam (function int))
(define-extern display-file-info (function int))
;; - Unknowns
;;(define-extern add-debug-vector (function symbol int trajectory ? float float))
;;(define-extern *debug-lines* object) ;; unknown type
;;(define-extern *debug-lines-trk* object) ;; unknown type
;;(define-extern *debug-text-3ds* object) ;; unknown type
;;(define-extern *debug-text-3d-trk* object) ;; unknown type
(define-extern add-debug-vector (function symbol bucket-id vector vector float rgba symbol))
(define-extern *debug-lines* (inline-array debug-line))
(define-extern *debug-lines-trk* debug-tracking-thang)
(define-extern *debug-text-3ds* (inline-array debug-text-3d))
(define-extern *debug-text-3d-trk* debug-tracking-thang)
;; ----------------------

View file

@ -560,5 +560,26 @@
"navigate-h": [
["L20", "float", true]
],
"debug": [
["L221", "float", true],
["L217", "float", true],
["L179", "vector2h", true],
["L210", "float", true],
["L209", "float", true],
["L176", "(inline-array vector)", true, 8],
["L180", "vector", true],
["L181", "vector", true],
["L182", "vector", true],
["L183", "vector", true],
["L223", "rgba", true],
["L225", "rgba", true],
["L224", "rgba", true],
["L222", "rgba", true],
["L226", "rgba", true],
["L227", "uint64", true],
["L228", "uint64", true],
["L229", "uint64", true]
]
}

View file

@ -356,7 +356,25 @@
[16, "event-message-block"]
],
"(method 24 actor-link-info)": [
"(method 24 actor-link-info)": [
[16, "event-message-block"]
]
],
"internal-draw-debug-line": [[16, "vector4w-2"], [48, "vector4w-2"]],
"internal-draw-debug-text-3d": [[16, "vector4w"], [32, "font-context"]],
"add-debug-triangle-normal": [[16, "vector"], [32, "vector"]],
"add-debug-flat-triangle": [[16, "vector4w-3"], [64, "vector4w-3"]],
"add-debug-point": [[16, "vector4w-2"]],
"add-debug-line2d": [[16, "vector4w"], [32, "vector4w"]],
"add-debug-box": [[16, "vector"], [32, "vector"]],
"add-debug-x": [[16, "vector"], [32, "vector"]],
"add-debug-sphere-with-transform": [[16, "vector"]],
"add-debug-circle": [[16, "vector"], [32, "vector"]],
"add-debug-vector": [[16, "vector"]],
"add-debug-yrot-vector": [[16, "vector"]],
"add-debug-arc": [[16, "vector"], [32, "vector"]],
"add-debug-curve": [[16, "vector"], [32, "vector"]],
"add-debug-points": [[16, "vector"]],
"add-debug-light": [[16, "vector"]],
"dma-timeout-cam": [[16, "vector"], [32, "matrix"]]
}

View file

@ -635,5 +635,56 @@
"(method 0 nav-control)": [
[17, "t9", "(function string none)"]
],
"add-debug-point": [
[125, "a3", "pointer"],
[[27, 144], "a0", "(pointer uint64)"],
[[147, 150], "a0", "dma-packet"],
[[31, 35], "a3", "dma-packet"],
[[41, 44], "a3", "gs-gif-tag"],
[[61, 65], "a3", "vector4w-2"],
[[81, 85], "a3", "vector4w-2"],
[[98, 102], "a3", "vector4w-2"],
[[118, 122], "a1", "vector4w-2"]
],
"internal-draw-debug-line": [
[[95, 101], "a3", "dma-packet"],
[[104, 110], "a3", "gs-gif-tag"],
[[212, 225], "a1", "(inline-array vector4w-2)"],
[228, "a3", "pointer"],
[[93, 246], "a0", "(pointer uint64)"],
[[250, 253], "a0", "dma-packet"],
[[3, 158], "s2", "rgba"],
[[5, 204], "s5", "rgba"]
],
"add-debug-flat-triangle": [
[[55, 61], "a3", "dma-packet"],
[[64, 70], "a3", "gs-gif-tag"],
[[93, 112], "a3", "(inline-array vector4w-3)"],
[[53, 133], "a0", "(pointer uint64)"],
[115, "a1", "pointer"],
[[135, 140], "a0", "dma-packet"]
],
"add-debug-line2d": [
[[58, 64], "a2", "dma-packet"],
[[67, 73], "a2", "gs-gif-tag"],
[[76, 81], "a2", "(inline-array vector4w)"],
[[84, 89], "a2", "(inline-array vector4w)"],
[[56, 110], "a0", "(pointer uint64)"],
[92, "a1", "pointer"],
[[112, 117], "v1", "dma-packet"]
],
"debug-percent-bar": [
[[32, 43], "v1", "dma-packet"]
],
"debug-pad-display": [
[[70, 75], "v1", "dma-packet"]
],
"internal-draw-debug-text-3d": [
[[54, 59], "v1", "dma-packet"]
],
"drawable-frag-count": [
[[14, 20], "s5", "drawable-group"]
]
}

View file

@ -1974,7 +1974,66 @@
"(method 0 nav-control)": {
"args":["allocation", "type-to-make", "shape", "sphere-count", "nearest-y-threshold-default"],
"vars": {"s5-0":["obj", "nav-control"], "a0-3":"ent"}
}
},
"add-debug-point": {
"vars": {
"a0-6":["a0-6", "(pointer uint64)"],
"a0-7":["a0-7", "dma-packet"],
"a3-0":["a3-0", "dma-packet"],
"a3-2":["a3-2", "gs-gif-tag"],
"a3-4":["a3-4", "vector4w-2"],
"a3-6":["a3-6", "vector4w-2"],
"a3-8":["a3-8", "vector4w-2"],
"a1-30":["a1-30", "vector4w-2"]
}
},
"internal-draw-debug-line": {
"vars": {
"s2-0":["s2-0", "rgba"],
"s5-0":["s5-0", "rgba"],
"a3-1":["a3-1", "dma-packet"],
"a3-3":["a3-3", "gs-gif-tag"],
"a1-43":["a1-43", "(inline-array vector4w-2)"],
"a0-31":["a0-31", "(pointer uint64)"],
"a0-32":["a0-32", "dma-packet"]
}
},
"add-debug-flat-triangle": {
"vars": {
"a3-1":["a3-1", "dma-packet"],
"a3-3":["a3-3", "gs-gif-tag"],
"a3-5":["a3-5", "(inline-array vector4w-3)"],
"a0-9":["a0-9", "(pointer uint64)"],
"a0-10":["a0-10", "dma-packet"]
}
},
"add-debug-line2d": {
"vars": {
"a2-3":["a2-3", "dma-packet"],
"a2-5":["a2-5", "gs-gif-tag"],
"a2-7":["a2-7", "(inline-array vector4w)"],
"a2-9":["a2-9", "(inline-array vector4w)"],
"a0-20":["a0-20", "(pointer uint64)"],
"v1-10":["v1-10", "dma-packet"]
}
},
"debug-percent-bar": {
"vars": {
"v1-5":["v1-5", "dma-packet"]
}
},
"debug-pad-display": {
"vars": {
"v1-12":["v1-12", "dma-packet"]
}
},
"internal-draw-debug-text-3d": {
"vars": {
"v1-11":["v1-11", "dma-packet"]
}
},
"add-debug-light": { "vars": { "s1-0":["s1-0", "rgba"]} }
}

View file

@ -73,7 +73,8 @@ goos::Object decompile_at_label_with_hint(const LabelType& hint,
}
throw std::runtime_error(
fmt::format("Type {} is not yet supported by the data decompiler.", hint.type_name));
fmt::format("Type `{}` with length {} is not yet supported by the data decompiler.",
hint.type_name, *hint.array_size));
}
/*!

View file

@ -98,4 +98,5 @@
(define-perm *cam-layout* symbol #f)
(defun-extern debug-set-camera-pos-rot! vector matrix int)
)

View file

@ -508,29 +508,6 @@
)
)
;; In the original game, init-for-transform stashed a bunch of stuff in registers, to be used by other functions.
;; In OpenGOAL, this seems risky so we're going to back up this manually:
(deftype transform-regs (structure)
((vf1 uint128)
(vf2 uint128)
(vf3 uint128)
(vf4 uint128)
(vf17 uint128)
(vf18 uint128)
(vf19 uint128)
(vf23 uint128)
(vf24 uint128)
(vf25 uint128)
(vf26 uint128)
(vf27 uint128)
(vf28 uint128)
(vf29 uint128)
)
)
(define *transform-regs* (new 'static 'transform-regs))
(defun init-for-transform ((arg0 matrix))
(rlet ((vf1 :class vf)
(vf17 :class vf)

View file

@ -7,7 +7,7 @@
(deftype pos-history (structure)
((points uint32 :offset-assert 0)
((points (inline-array vector) :offset-assert 0)
(num-points int32 :offset-assert 4)
(h-first int32 :offset-assert 8)
(h-last int32 :offset-assert 12)
@ -28,7 +28,6 @@
:flag-assert #x900000020
)
(deftype debug-vertex-stats (basic)
((length int32 :offset-assert 4)
(pos-count int32 :offset-assert 8)
@ -37,11 +36,12 @@
:method-count-assert 9
:size-assert #x4b10
:flag-assert #x900004b10
;; inspect method is overriden in debug.gc
)
(define-extern add-debug-matrix (function symbol bucket-id matrix none))
(define-extern add-debug-text-sphere (function symbol bucket-id vector float string rgba none))
(define-extern add-debug-matrix (function symbol bucket-id matrix matrix))
(define-extern add-debug-text-sphere (function symbol bucket-id vector float string rgba symbol))
;; TODO - for trajectory.gc
(define-extern add-debug-line (function symbol int vector vector rgba symbol int int))
(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)

View file

@ -96,7 +96,7 @@
;; Used lq/sq
(defun
add-debug-sphere-from-table
((arg0 int) (arg1 vector) (arg2 vector) (arg3 rgba))
((arg0 bucket-id) (arg1 vector) (arg2 float) (arg3 rgba))
(rlet ((vf1 :class vf)
(vf2 :class vf)
(vf3 :class vf)
@ -124,8 +124,8 @@
(.svf (&-> s4-0 quad) vf3)
(.svf (&-> s3-0 quad) vf4)
(.svf (&-> s2-0 quad) vf5)
(add-debug-line #t arg0 s4-0 s3-0 arg3 #f -1)
(add-debug-line #t arg0 s4-0 s2-0 arg3 #f -1)
(add-debug-line #t arg0 s4-0 s3-0 arg3 #f (the rgba -1))
(add-debug-line #t arg0 s4-0 s2-0 arg3 #f (the rgba -1))
)
)
(let ((v0-2 0))

File diff suppressed because it is too large Load diff

View file

@ -199,6 +199,48 @@
:flag-assert #x900000008
)
(defenum bucket-id
:type int32
:bitfield #f
(tfrag-tex0 5)
;; merc0 10
;; generic0 11
(tfrag-tex1 12)
;; merc1 17
;; generic1 18
(shrub-tex0 19)
(shrub-tex1 25)
(alpha-tex0 31)
(alpha-tex1 38)
(pris-tex0 48)
;; merc0 49
;; generic0 50
(pris-tex1 51)
;; merc1 52
;; generic1 53
(water-tex0 57)
;; merc0 58 (+ default)
;; generic0 59 (+ default)
(water-tex1 60)
;; merc1 61
;; generic1 62
;; debug spheres? 67
(debug-draw0 67)
;; debug text 68
(debug-draw1 68)
)
;; A DMA bucket is a way of organizing data within a dma buffer.
;; The buckets themselves live inside in the dma buffer.
;; the addr field of their tag should point to the next bucket.

View file

@ -7,7 +7,9 @@
(deftype drawable-group (drawable)
((pad uint8 4)) ;; todo - what's here?
((length int16 :offset 6)
(data drawable 1 :offset-assert 32)
)
:flag-assert #x1200000024
)

View file

@ -11,3 +11,7 @@
(define-extern forward-up-nopitch->quaternion (function quaternion vector vector quaternion))
(define-extern forward-up->quaternion (function quaternion vector vector quaternion))
(define-extern vector-flatten! (function vector vector vector vector))
;; TODO
(define-extern vector-3pt-cross! (function vector vector vector vector vector))
(define-extern curve-evaluate! (function vector float int int vector int int))

View file

@ -663,3 +663,5 @@
)
(defun-extern draw-string string dma-buffer int)

View file

@ -48,9 +48,7 @@
)
(deftype drawable-tree-instance-tie (drawable-tree)
((length int16 :offset 6)
(prototypes basic :offset 8)
;; todo - maybe another data field
((prototypes basic :offset 8)
)
:method-count-assert 18
:size-assert #x24

View file

@ -5,44 +5,6 @@
;; name in dgo: level-h
;; dgos: GAME, ENGINE
(defenum bucket-id
:type uint32
:bitfield #f
(tfrag-tex0 5)
;; merc0 10
;; generic0 11
(tfrag-tex1 12)
;; merc1 17
;; generic1 18
(shrub-tex0 19)
(shrub-tex1 25)
(alpha-tex0 31)
(alpha-tex1 38)
(pris-tex0 48)
;; merc0 49
;; generic0 50
(pris-tex1 51)
;; merc1 52
;; generic1 53
(water-tex0 57)
;; merc0 58 (+ default)
;; generic0 59 (+ default)
(water-tex1 60)
;; merc1 61
;; generic1 62
;; debug text 68
(debug-draw 68)
)
;; Information related to visibility data for a level.
;; Unclear why there are 8 of these per level.

View file

@ -10,7 +10,7 @@
(y float :offset-assert 4)
(z float :offset-assert 8)
(w float :offset-assert 12)
(data float 4 :do-not-decompile :offset 0)
(data float 4 :score -9999 :offset 0)
(vec vector :inline :offset 0)
(quad uint128 :offset 0)
)

View file

@ -186,7 +186,7 @@
;; Vector of 3 signed words
(deftype vector3w (structure)
((data int32 3 :do-not-decompile :offset-assert 0)
((data int32 3 :score -9999 :offset-assert 0)
(x int32 :offset 0)
(y int32 :offset 4)
(z int32 :offset 8)
@ -199,7 +199,7 @@
;; Vector of 4 signed words
(deftype vector4w (structure)
((data int32 4 :do-not-decompile :offset-assert 0)
((data int32 4 :score -9999 :offset-assert 0)
(x int32 :offset 0)
(y int32 :offset 4)
(z int32 :offset 8)
@ -226,7 +226,7 @@
(deftype vector4w-2 (structure)
((data int32 8 :offset-assert 0)
(quad uint128 2 :offset 0)
(vector vector4w 2 :offset 0)
(vector vector4w 2 :inline :offset 0)
)
:method-count-assert 9
:size-assert #x20
@ -237,7 +237,7 @@
(deftype vector4w-3 (structure)
((data int32 12 :offset-assert 0)
(quad uint128 3 :offset 0)
(vector vector4w 3 :offset 0)
(vector vector4w 3 :inline :offset 0)
)
:method-count-assert 9
:size-assert #x30
@ -248,7 +248,7 @@
(deftype vector4w-4 (structure)
((data int32 16 :offset-assert 0)
(quad uint128 4 :offset 0)
(vector vector4w 4 :offset 0)
(vector vector4w 4 :inline :offset 0)
)
:method-count-assert 9
:size-assert #x40
@ -296,7 +296,7 @@
;; Vector of 4 floats. Shortened to "vector" because it is commonly used.
(deftype vector (structure)
((data float 4 :do-not-decompile :offset-assert 0)
((data float 4 :do-not-decompile :score -9999 :offset-assert 0)
(x float :offset 0)
(y float :offset 4)
(z float :offset 8)
@ -498,11 +498,6 @@
(set! (-> vec w) ,wv)))
)
(defmacro init-vf0-vector ()
"Initializes the VF0 vector which is a constant vector in the VU set to <0,0,0,1>"
`(.lvf vf0 (new 'static 'vector :x 0.0 :y 0.0 :z 0.0 :w 1.0))
)
(defun vector-dot ((a vector) (b vector))
"Take the dot product of two vectors.
Only does the x, y, z compoments.

View file

@ -148,7 +148,7 @@
((f0-1 (* (-> obj time) (/ (+ 1.0 (the float s2-0)) (the float s3-0)))))
((method-of-type trajectory TODO-RENAME-9) obj f0-1 s4-0)
)
(add-debug-line #t 68 s5-0 s4-0 (new 'static 'rgba :r #xff :a #x80) #f -1)
(add-debug-line #t (the bucket-id 68) s5-0 s4-0 (new 'static 'rgba :r #xff :a #x80) #f (the rgba -1))
)
)
(let ((v0-2 0))

View file

@ -61,3 +61,103 @@
)
)
)
;; In the original game, init-for-transform stashed a bunch of stuff in registers, to be used by other functions.
;; In OpenGOAL, this seems risky so we're going to back up this manually.
;; This does mean this file now has code, but it's not a big deal:
(deftype transform-regs (structure)
;; Eventually we might want to actually name some of these fields to be more comprehensible?
(;; vf0 not included!
(vf1 uint128)
(vf2 uint128)
(vf3 uint128)
(vf4 uint128)
(vf5 uint128)
(vf6 uint128)
(vf7 uint128)
(vf8 uint128)
(vf9 uint128)
(vf10 uint128)
(vf11 uint128)
(vf12 uint128)
(vf13 uint128)
(vf14 uint128)
(vf15 uint128)
(vf16 uint128)
(vf17 uint128)
(vf18 uint128)
(vf19 uint128)
(vf20 uint128)
(vf21 uint128)
(vf22 uint128)
(vf23 uint128)
(vf24 uint128)
(vf25 uint128)
(vf26 uint128)
(vf27 uint128)
(vf28 uint128)
(vf29 uint128)
(vf30 uint128)
(vf31 uint128)
)
)
(define *transform-regs* (new 'static 'transform-regs))
(defmacro init-vf0-vector ()
"Initializes the VF0 vector which is a constant vector in the VU set to <0,0,0,1>"
`(.lvf vf0 (new 'static 'vector :x 0.0 :y 0.0 :z 0.0 :w 1.0))
)
(defmacro with-vf0 (&rest body)
"Macro for using the ps2-style vf0 register."
`(rlet ((vf0 :class vf))
(init-vf0-vector)
,@body
)
)
(defmacro load-vf (reg)
"Load a vf from the preserved vf registers"
`(.lvf ,reg (&-> *transform-regs* ,reg))
)
(defmacro save-vf (reg)
"Save a vf to the preserved vf registers"
`(.svf (&-> *transform-regs* ,reg) ,reg)
)
(defmacro with-vf (regs &key (rw 'read) &rest body)
"Macro for using the specified ps2-style vf registers. These are preserved in *transform-regs*
Each register name in regs must be a valid vf register name. vf0 CANNOT be used! Use with-vf0 for that instead.
rw specifies the read/write mode:
'read means the registers will be read from the preserved registers. This is the default
'write means the registers will be written to the preserved registers at the end
'readwrite (or 'rw) means both
#f means neither, turning this into a fancy macro around rlet."
`(rlet (,@(apply (lambda (x) `(,x :class vf)) regs))
,@(if (or (eq? rw ''read) (eq? rw ''readwrite) (eq? rw ''rw))
(apply (lambda (y)
`(load-vf ,y)
) regs)
'()
)
,@body
;; this will mess up the return value!
,@(if (or (eq? rw ''write) (eq? rw ''readwrite) (eq? rw ''rw))
(apply (lambda (y)
`(save-vf ,y)
) regs)
'()
)
)
)

View file

@ -70,7 +70,7 @@
(defun-debug joint-mod-debug-draw ((mod joint-mod))
"Draw a frame at the bone."
;; I believe this draws a set of coordinate axes that represent the transformation matrix.
(add-debug-matrix #t (bucket-id debug-draw) (-> mod joint bone transform))
(add-debug-matrix #t (bucket-id debug-draw1) (-> mod joint bone transform))
(none)
)
@ -460,7 +460,7 @@
(if (and (= (-> gp-0 process type) target) (!= (-> gp-0 blend) 0.0))
(add-debug-text-sphere
*display-target-marks*
(bucket-id debug-draw)
(bucket-id debug-draw1)
(-> gp-0 target)
819.2
"look"
@ -589,7 +589,7 @@
(if (and (= (-> gp-0 process type) target) (!= (-> gp-0 blend) 0.0))
(add-debug-text-sphere
*display-target-marks*
(bucket-id debug-draw)
(bucket-id debug-draw1)
(-> gp-0 target)
819.2
"look"

View file

@ -54,7 +54,7 @@
;; ENUMS
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; bitfield enum to indicate proprties about a process-tree
;; bitfield enum to indicate properties about a process-tree
(defenum process-mask
:bitfield #t :type uint32
(execute 0) ;; 1

View file

@ -50,7 +50,7 @@ Val* Compiler::compile_seval(const goos::Object& form, const goos::Object& rest,
m_goos.eval_with_rewind(o, m_goos.global_environment.as_env());
});
} catch (std::runtime_error& e) {
throw_compiler_error(form, "Error while evaluating GOOS: ", e.what());
throw_compiler_error(form, "Error while evaluating GOOS: {}", e.what());
}
return get_none();
}

View file

@ -1,4 +1,4 @@
@echo off
cd ..\..
out\build\Release\bin\offline-test --dump-mode iso_data\jak1\
out\build\Release\bin\offline-test iso_data\jak1\
pause

View file

@ -592,6 +592,47 @@
`(.lvf vf0 (new 'static 'vector :x 0.0 :y 0.0 :z 0.0 :w 1.0))
)
(defenum bucket-id
:type int32
:bitfield #f
(tfrag-tex0 5)
;; merc0 10
;; generic0 11
(tfrag-tex1 12)
;; merc1 17
;; generic1 18
(shrub-tex0 19)
(shrub-tex1 25)
(alpha-tex0 31)
(alpha-tex1 38)
(pris-tex0 48)
;; merc0 49
;; generic0 50
(pris-tex1 51)
;; merc1 52
;; generic1 53
(water-tex0 57)
;; merc0 58 (+ default)
;; generic0 59 (+ default)
(water-tex1 60)
;; merc1 61
;; generic1 62
;; debug spheres? 67
(debug-draw0 67)
;; debug text 68
(debug-draw1 68)
)
;; TODO - for trajectory.gc
(declare-type trajectory structure)
(deftype rgba (uint32)
@ -602,7 +643,7 @@
)
:flag-assert #x900000004
)
(define-extern add-debug-line (function symbol int vector vector rgba symbol int int))
(define-extern add-debug-line (function symbol bucket-id vector vector rgba symbol rgba symbol))
;; early declarations for draw-control
(declare-type ripple-control basic)
@ -613,7 +654,7 @@
(declare-type merc-ctrl basic)
;; TODO - for ripple
(define-extern add-debug-sphere (function symbol int vector float int int))
(define-extern add-debug-sphere (function symbol bucket-id vector float rgba symbol))
(defconstant SYM_TO_STRING_OFFSET #xff38)
(defmacro symbol->string (sym)
@ -758,50 +799,11 @@
(reset 7) ;; 128
)
(defenum bucket-id
:type uint32
:bitfield #f
(tfrag-tex0 5)
;; merc0 10
;; generic0 11
(tfrag-tex1 12)
;; merc1 17
;; generic1 18
(shrub-tex0 19)
(shrub-tex1 25)
(alpha-tex0 31)
(alpha-tex1 38)
(pris-tex0 48)
;; merc0 49
;; generic0 50
(pris-tex1 51)
;; merc1 52
;; generic1 53
(water-tex0 57)
;; merc0 58 (+ default)
;; generic0 59 (+ default)
(water-tex1 60)
;; merc1 61
;; generic1 62
;; debug text 68
(debug-draw 68)
)
(define-extern cspace<-parented-transformq-joint! (function cspace transformq none))
(define-extern cspace<-transformq! (function cspace transformq matrix))
(define-extern vector<-cspace! (function vector cspace vector))
(define-extern add-debug-text-sphere (function symbol bucket-id vector float string rgba none))
(define-extern add-debug-matrix (function symbol bucket-id matrix none))
(define-extern add-debug-text-sphere (function symbol bucket-id vector float string rgba symbol))
(define-extern add-debug-matrix (function symbol bucket-id matrix matrix))
(define-extern vector-flatten! (function vector vector vector vector))

View file

@ -4465,7 +4465,3 @@
;; failed to figure out what this is:
(set! (-> *citadel-mood* num-stars) 0.0)

View file

@ -3,10 +3,10 @@
;; definition of type pos-history
(deftype pos-history (structure)
((points uint32 :offset-assert 0)
(num-points int32 :offset-assert 4)
(h-first int32 :offset-assert 8)
(h-last int32 :offset-assert 12)
((points (inline-array vector) :offset-assert 0)
(num-points int32 :offset-assert 4)
(h-first int32 :offset-assert 8)
(h-last int32 :offset-assert 12)
)
:method-count-assert 9
:size-assert #x10

View file

@ -99,7 +99,7 @@
;; Used lq/sq
(defun
add-debug-sphere-from-table
((arg0 int) (arg1 vector) (arg2 vector) (arg3 rgba))
((arg0 bucket-id) (arg1 vector) (arg2 float) (arg3 rgba))
(rlet ((vf1 :class vf)
(vf2 :class vf)
(vf3 :class vf)
@ -127,8 +127,8 @@
(.svf (&-> s4-0 quad) vf3)
(.svf (&-> s3-0 quad) vf4)
(.svf (&-> s2-0 quad) vf5)
(add-debug-line #t arg0 s4-0 s3-0 arg3 #f -1)
(add-debug-line #t arg0 s4-0 s2-0 arg3 #f -1)
(add-debug-line #t arg0 s4-0 s3-0 arg3 #f (the-as rgba -1))
(add-debug-line #t arg0 s4-0 s2-0 arg3 #f (the-as rgba -1))
)
)
(let ((v0-2 0))
@ -136,7 +136,3 @@
(none)
)
)

View file

@ -3,7 +3,8 @@
;; definition of type drawable-group
(deftype drawable-group (drawable)
((pad uint8 4 :offset-assert 32)
((length int16 :offset 6)
(data drawable 1 :offset-assert 32)
)
:method-count-assert 18
:size-assert #x24
@ -16,7 +17,3 @@
;; failed to figure out what this is:
(let ((v0-1 0))
)

View file

@ -396,7 +396,8 @@
(new 'static 'vector :z 1.0)
)
)
:color-shadow (new 'static 'vector4w :w #x80)
:color-shadow
(new 'static 'vector4w :data (new 'static 'array int32 4 0 0 0 #x80))
:color-table
(new 'static 'inline-array char-color 64
(new 'static 'char-color

View file

@ -136,7 +136,7 @@
;; ERROR: function was not converted to expressions. Cannot decompile.
;; definition (debug) for function ripple-add-debug-sphere
;; INFO: Return type mismatch int vs none.
;; INFO: Return type mismatch symbol vs none.
;; Used lq/sq
(defun-debug
ripple-add-debug-sphere
@ -169,7 +169,13 @@
(.add.vf vf6 vf4 vf5 :mask #b111)
(.svf (&-> a0-6 quad) vf6)
)
(add-debug-sphere #t 67 s5-0 2048.0 (the-as int #x8000ffff))
(add-debug-sphere
#t
(bucket-id debug-draw0)
s5-0
2048.0
(new 'static 'rgba :r #xff :g #xff :a #x80)
)
)
(none)
)

View file

@ -86,8 +86,7 @@
;; definition of type drawable-tree-instance-tie
(deftype drawable-tree-instance-tie (drawable-tree)
((length int16 :offset 6)
(prototypes basic :offset 8)
((prototypes basic :offset 8)
)
:method-count-assert 18
:size-assert #x24
@ -100,7 +99,7 @@
(format #t "~Tid: ~D~%" (-> obj id))
(format #t "~Tbsphere: ~`vector`P~%" (-> obj bsphere))
(format #t "~Tlength: ~D~%" (-> obj length))
(format #t "~Tdata[1] @ #x~X~%" (-> obj pad))
(format #t "~Tdata[1] @ #x~X~%" (-> obj data))
(format #t "~Tprototypes: ~A~%" (-> obj prototypes))
obj
)

View file

@ -337,9 +337,9 @@
)
;; definition for function matrix-4x4-inverse!
;; WARN: Bad vector register dependency: vf5
;; WARN: Bad vector register dependency: vf3
;; WARN: Bad vector register dependency: vf4
;; WARN: Bad vector register dependency: vf5
(defun matrix-4x4-inverse! ((dst matrix) (src matrix))
(rlet ((acc :class vf)
(Q :class vf)

View file

@ -525,10 +525,7 @@
)
)
)
(set!
(-> (the-as (pointer float) (+ (* a2-0 4) (the-as int arg0))))
(* 0.5 f0-12)
)
(set! (-> arg0 data a2-0) (* 0.5 f0-12))
(if (!= f0-12 0.0)
(set! f0-12 (/ 0.5 f0-12))
)
@ -553,7 +550,7 @@
)
)
(set!
(-> (the-as (pointer float) (+ (* a3-0 4) (the-as int arg0))))
(-> arg0 data a3-0)
(*
(+
(->
@ -573,7 +570,7 @@
)
)
(set!
(-> (the-as (pointer float) (+ (* v1-1 4) (the-as int arg0))))
(-> arg0 data v1-1)
(*
(+
(->

View file

@ -172,7 +172,7 @@
;; definition for method 3 of type vector2h
(defmethod inspect vector2h ((obj vector2h))
(format #t "[~8x] ~A~%" obj 'vector2h)
(format #t "~Tdata[2] @ #x~X~%" (-> obj data))
(format #t "~Tdata[2] @ #x~X~%" (&-> obj x))
(format #t "~Tx: ~D~%" (-> obj x))
(format #t "~Ty: ~D~%" (-> obj y))
obj
@ -216,7 +216,7 @@
;; definition for method 3 of type vector3h
(defmethod inspect vector3h ((obj vector3h))
(format #t "[~8x] ~A~%" obj 'vector3h)
(format #t "~Tdata[2] @ #x~X~%" (-> obj data))
(format #t "~Tdata[2] @ #x~X~%" (&-> obj x))
(format #t "~Tx: ~D~%" (-> obj x))
(format #t "~Ty: ~D~%" (-> obj y))
(format #t "~Tz: ~D~%" (-> obj z))
@ -238,7 +238,7 @@
;; definition for method 3 of type vector2w
(defmethod inspect vector2w ((obj vector2w))
(format #t "[~8x] ~A~%" obj 'vector2w)
(format #t "~Tdata[2] @ #x~X~%" (-> obj data))
(format #t "~Tdata[2] @ #x~X~%" (&-> obj x))
(format #t "~Tx: ~D~%" (-> obj x))
(format #t "~Ty: ~D~%" (-> obj y))
obj
@ -311,9 +311,9 @@
;; definition of type vector4w-2
(deftype vector4w-2 (structure)
((data int32 8 :offset-assert 0)
((data int32 8 :offset-assert 0)
(quad uint128 2 :offset 0)
(vector vector4w 2 :offset 0)
(vector vector4w 2 :inline :offset 0)
)
:method-count-assert 9
:size-assert #x20
@ -323,17 +323,17 @@
;; definition for method 3 of type vector4w-2
(defmethod inspect vector4w-2 ((obj vector4w-2))
(format #t "[~8x] ~A~%" obj 'vector4w-2)
(format #t "~Tdata[8] @ #x~X~%" (-> obj data))
(format #t "~Tquad[2] @ #x~X~%" (-> obj data))
(format #t "~Tvector[2] @ #x~X~%" (-> obj data))
(format #t "~Tdata[8] @ #x~X~%" (-> obj quad))
(format #t "~Tquad[2] @ #x~X~%" (-> obj quad))
(format #t "~Tvector[2] @ #x~X~%" (-> obj quad))
obj
)
;; definition of type vector4w-3
(deftype vector4w-3 (structure)
((data int32 12 :offset-assert 0)
((data int32 12 :offset-assert 0)
(quad uint128 3 :offset 0)
(vector vector4w 3 :offset 0)
(vector vector4w 3 :inline :offset 0)
)
:method-count-assert 9
:size-assert #x30
@ -343,17 +343,17 @@
;; definition for method 3 of type vector4w-3
(defmethod inspect vector4w-3 ((obj vector4w-3))
(format #t "[~8x] ~A~%" obj 'vector4w-3)
(format #t "~Tdata[12] @ #x~X~%" (-> obj data))
(format #t "~Tquad[3] @ #x~X~%" (-> obj data))
(format #t "~Tvector[3] @ #x~X~%" (-> obj data))
(format #t "~Tdata[12] @ #x~X~%" (-> obj quad))
(format #t "~Tquad[3] @ #x~X~%" (-> obj quad))
(format #t "~Tvector[3] @ #x~X~%" (-> obj quad))
obj
)
;; definition of type vector4w-4
(deftype vector4w-4 (structure)
((data int32 16 :offset-assert 0)
((data int32 16 :offset-assert 0)
(quad uint128 4 :offset 0)
(vector vector4w 4 :offset 0)
(vector vector4w 4 :inline :offset 0)
)
:method-count-assert 9
:size-assert #x40
@ -363,9 +363,9 @@
;; definition for method 3 of type vector4w-4
(defmethod inspect vector4w-4 ((obj vector4w-4))
(format #t "[~8x] ~A~%" obj 'vector4w-4)
(format #t "~Tdata[16] @ #x~X~%" (-> obj data))
(format #t "~Tquad[4] @ #x~X~%" (-> obj data))
(format #t "~Tvector[4] @ #x~X~%" (-> obj data))
(format #t "~Tdata[16] @ #x~X~%" (-> obj quad))
(format #t "~Tquad[4] @ #x~X~%" (-> obj quad))
(format #t "~Tvector[4] @ #x~X~%" (-> obj quad))
obj
)

View file

@ -134,7 +134,15 @@
((f0-1 (* (-> obj time) (/ (+ 1.0 (the float s2-0)) (the float s3-0)))))
(TODO-RENAME-9 obj f0-1 s4-0)
)
(add-debug-line #t 68 s5-0 s4-0 (new 'static 'rgba :r #xff :a #x80) #f -1)
(add-debug-line
#t
(bucket-id debug-draw1)
s5-0
s4-0
(new 'static 'rgba :r #xff :a #x80)
#f
(the-as rgba -1)
)
)
)
(let ((v0-2 0))

View file

@ -66,7 +66,7 @@
;; definition (debug) for function joint-mod-debug-draw
;; INFO: Return type mismatch int vs none.
(defun-debug joint-mod-debug-draw ((mod joint-mod))
(add-debug-matrix #t (bucket-id debug-draw) (-> mod joint bone transform))
(add-debug-matrix #t (bucket-id debug-draw1) (-> mod joint bone transform))
(let ((v0-1 0))
)
(none)
@ -540,7 +540,7 @@
(if (and (= (-> gp-0 process type) target) (!= (-> gp-0 blend) 0.0))
(add-debug-text-sphere
*display-target-marks*
(bucket-id debug-draw)
(bucket-id debug-draw1)
(-> gp-0 target)
819.2
"look"
@ -701,7 +701,7 @@
(if (and (= (-> gp-0 process type) target) (!= (-> gp-0 blend) 0.0))
(add-debug-text-sphere
*display-target-marks*
(bucket-id debug-draw)
(bucket-id debug-draw1)
(-> gp-0 target)
819.2
"look"