[decomp] cleanup drawable and ocean stuff (#414)

* use `kmalloc-flags` for goal `kmalloc`

* cleanup some drawable stuff, add offline tests

* cleanup generic-h a bit

* make decompiler work on 16-bit static data

* cleanup ocean stuff

* fix `ocean-spheres`

* oops forgot this

* I forgot to actually make `ocean-tables`
This commit is contained in:
ManDude 2021-05-03 13:54:49 +01:00 committed by GitHub
parent 928cb48dd4
commit 2beaa7a340
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
13 changed files with 11325 additions and 1094 deletions

View file

@ -61,7 +61,16 @@
(define-extern file-stream-length (function file-stream int))
(define-extern file-stream-read (function file-stream pointer int int))
(define-extern kmalloc (function kheap int int string pointer))
(defenum kmalloc-flags
:bitfield #t
(align-16 4)
(align-64 6)
(align-256 8)
(memset 12)
(top 13)
)
(define-extern kmalloc (function kheap int kmalloc-flags string pointer))
(define-extern global kheap)
(define-extern dma-sync (function pointer int int int))
@ -5119,11 +5128,17 @@
)
)
;;;;;;;;;;;;;;;;;;;;;
;; drawable-group-h
;;;;;;;;;;;;;;;;;;;;;
(deftype drawable-group (drawable)
((pad uint8 4))
:flag-assert #x1200000024
)
(define-extern *collide-nodes* int)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; drawable-inline-array-h
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@ -5561,7 +5576,7 @@
;; generic-h
(deftype generic-consts (structure)
((dma-header dma-packet :inline :offset-assert 0)
(vif-header uint32 4 :offset-assert 16)
(vif-header uint32 4 :offset-assert 16)
(dma-ref-vtxs dma-packet :inline :offset-assert 32)
(dma-cnt-call dma-packet :inline :offset-assert 48)
(matrix matrix :inline :offset-assert 64)
@ -5570,8 +5585,8 @@
(alpha-translucent ad-cmd :inline :offset-assert 160)
(ztest-normal ad-cmd :inline :offset-assert 176)
(ztest-opaque ad-cmd :inline :offset-assert 192)
(adcmd-offsets uint8 16 :offset-assert 208)
;;(adcmds UNKNOWN 4 :offset-assert 144)
(adcmd-offsets uint8 16 :offset-assert 208)
(adcmds ad-cmd 4 :offset 144)
(stcycle-tag uint32 :offset-assert 224)
(unpack-vtx-tag uint32 :offset-assert 228)
(unpack-clr-tag uint32 :offset-assert 232)
@ -5583,7 +5598,7 @@
(dma-tag-cnt uint64 :offset-assert 256)
(envmap generic-envmap-consts :inline :offset-assert 272)
(light-consts vector :inline :offset-assert 400)
(texture-offset uint16 8 :offset-assert 416)
(texture-offset uint16 8 :offset-assert 416)
)
:method-count-assert 9
:size-assert #x1b0
@ -5744,7 +5759,7 @@
;; ocean-h
(deftype ocean-spheres (structure)
((spheres uint128 36 :offset-assert 0)
((spheres sphere 36 :inline :offset-assert 0)
)
:method-count-assert 9
:size-assert #x240
@ -5753,7 +5768,7 @@
;; ocean-h
(deftype ocean-colors (structure)
((colors uint32 2548 :offset-assert 0)
((colors rgba 2548 :offset-assert 0)
)
:method-count-assert 9
:size-assert #x27d0
@ -33476,16 +33491,6 @@
(define-extern movie? (function symbol))
(define-extern level-remap-texture function)
;;(define-extern loading-level object) ;; unknown type
;;(define-extern cspace object) ;; unknown type
;;(define-extern bone object) ;; unknown type
;;(define-extern cspace-array object) ;; unknown type
;;(define-extern bone-cache object) ;; unknown type
(define-extern joint type)
;;(define-extern skeleton object) ;; unknown type
;;(define-extern drawable-error object) ;; unknown type
;;(define-extern drawable object) ;; unknown type
;;(define-extern *collide-nodes* object) ;; unknown type
;;(define-extern drawable-group object) ;; unknown type
;;(define-extern drawable-inline-array object) ;; unknown type
;;(define-extern draw-node-dma object) ;; unknown type
(define-extern draw-node type)
@ -33509,7 +33514,6 @@
;;(define-extern gsf-vertex object) ;; unknown type
;;(define-extern gsf-ik object) ;; unknown type
;;(define-extern generic-gif-tag object) ;; unknown type
;;(define-extern kmalloc object) ;; unknown type
;;(define-extern gsf-fx-vertex-array object) ;; unknown type
;;(define-extern generic-envmap-saves object) ;; unknown type
;;(define-extern generic-storage object) ;; unknown type
@ -33537,20 +33541,20 @@
;;(define-extern ocean-mid-upload object) ;; unknown type
;;(define-extern ocean-vertex object) ;; unknown type
;;(define-extern ocean-mid-mask object) ;; unknown type
;;(define-extern *ocean-facing* object) ;; unknown type
(define-extern *ocean-facing* int) ;; unknown type
(define-extern ocean-mid-masks type)
;;(define-extern ocean-mid-vertex object) ;; unknown type
;;(define-extern *ocean-mid-off* object) ;; unknown type
;;(define-extern *ocean-verts* object) ;; unknown type
(define-extern *ocean-mid-off* symbol) ;; unknown type
(define-extern *ocean-verts* symbol) ;; unknown type
;;(define-extern ocean-trans-strip object) ;; unknown type
;;(define-extern *ocean-heights* object) ;; unknown type
(define-extern *ocean-heights* symbol) ;; unknown type
;;(define-extern ocean-colors object) ;; unknown type
;;(define-extern ocean-vu0-work object) ;; unknown type
;;(define-extern ocean-corner object) ;; unknown type
;;(define-extern ocean-trans-index object) ;; unknown type
;;(define-extern ocean-texture-constants object) ;; unknown type
(define-extern ocean-map type)
;;(define-extern *ocean-near-off* object) ;; unknown type
(define-extern *ocean-near-off* symbol) ;; unknown type
(define-extern ocean-mid-indices type)
;;(define-extern ocean-trans-strip-array object) ;; unknown type
;;(define-extern ocean-mid-upload2 object) ;; unknown type
@ -33561,54 +33565,53 @@
;;(define-extern ocean-near-index object) ;; unknown type
;;(define-extern ocean-wave-info object) ;; unknown type
;;(define-extern ocean-mid-work object) ;; unknown type
;;(define-extern *ocean-off* object) ;; unknown type
(define-extern *ocean-off* symbol) ;; unknown type
;;(define-extern ocean-near-work object) ;; unknown type
;;(define-extern *ocean-work* object) ;; unknown type
(define-extern *ocean-work* ocean-work) ;; unknown type
;;(define-extern ocean-wave-data object) ;; unknown type
(define-extern ocean-near-indices type)
;;(define-extern ocean-wave-frames object) ;; unknown type
;;(define-extern ocean-spheres object) ;; unknown type
;;(define-extern ocean-trans-mask object) ;; unknown type
;;(define-extern ocean-mid-constants object) ;; unknown type
;;(define-extern ocean-near-vertex object) ;; unknown type
;;(define-extern *ocean-trans-down-left-table* object) ;; unknown type
;;(define-extern *ocean-up-table* object) ;; unknown type
;;(define-extern *ocean-up-left-table* object) ;; unknown type
;;(define-extern *ocean-trans-up-left-table* object) ;; unknown type
;;(define-extern *ocean-trans-st-table* object) ;; unknown type
;;(define-extern *ocean-down-left-table* object) ;; unknown type
;;(define-extern *ocean-trans-down-table* object) ;; unknown type
;;(define-extern *ocean-trans-right-table* object) ;; unknown type
;;(define-extern *ocean-trans-down-right-table* object) ;; unknown type
;;(define-extern *ocean-trans-left-table* object) ;; unknown type
;;(define-extern *ocean-down-right-table* object) ;; unknown type
;;(define-extern *ocean-trans-up-right-table* object) ;; unknown type
;;(define-extern *ocean-trans-strip-array* object) ;; unknown type
;;(define-extern *ocean-left-table* object) ;; unknown type
;;(define-extern *ocean-trans-up-table* object) ;; unknown type
;;(define-extern *ocean-up-right-table* object) ;; unknown type
;;(define-extern *ocean-trans-corner-table* object) ;; unknown type
;;(define-extern *ocean-right-table* object) ;; unknown type
;;(define-extern *ocean-down-table* object) ;; unknown type
;;(define-extern *ocean-trans-indices-village2* object) ;; unknown type
;;(define-extern *ocean-trans-indices-village1* object) ;; unknown type
;;(define-extern *ocean-near-indices-village2* object) ;; unknown type
;;(define-extern *ocean-colors-village1* object) ;; unknown type
;;(define-extern *ocean-map-village2* object) ;; unknown type
;;(define-extern *ocean-trans-indices-sunken* object) ;; unknown type
;;(define-extern *ocean-map-sunken* object) ;; unknown type
;;(define-extern *ocean-mid-indices-sunken* object) ;; unknown type
;;(define-extern *ocean-mid-masks-village2* object) ;; unknown type
;;(define-extern *ocean-mid-indices-village1* object) ;; unknown type
;;(define-extern *ocean-near-indices-village1* object) ;; unknown type
;;(define-extern *ocean-spheres-village2* object) ;; unknown type
;;(define-extern *ocean-colors-village2* object) ;; unknown type
;;(define-extern *ocean-mid-masks-village1* object) ;; unknown type
;;(define-extern *ocean-near-indices-sunken* object) ;; unknown type
;;(define-extern *ocean-mid-indices-village2* object) ;; unknown type
;;(define-extern *ocean-mid-masks-sunken* object) ;; unknown type
;;(define-extern *ocean-map-village1* object) ;; unknown type
(define-extern *ocean-spheres-village1* (inline-array sphere)) ;; unknown type
(define-extern *ocean-trans-down-left-table* (pointer float)) ;; unknown type
(define-extern *ocean-up-table* (pointer float)) ;; unknown type
(define-extern *ocean-up-left-table* (pointer float)) ;; unknown type
(define-extern *ocean-trans-up-left-table* (pointer float)) ;; unknown type
(define-extern *ocean-trans-st-table* (pointer float)) ;; unknown type
(define-extern *ocean-down-left-table* (pointer float)) ;; unknown type
(define-extern *ocean-trans-down-table* (pointer float)) ;; unknown type
(define-extern *ocean-trans-right-table* (pointer float)) ;; unknown type
(define-extern *ocean-trans-down-right-table* (pointer float)) ;; unknown type
(define-extern *ocean-trans-left-table* (pointer float)) ;; unknown type
(define-extern *ocean-down-right-table* (pointer float)) ;; unknown type
(define-extern *ocean-trans-up-right-table* (pointer float)) ;; unknown type
(define-extern *ocean-trans-strip-array* (pointer float)) ;; unknown type
(define-extern *ocean-left-table* (pointer float)) ;; unknown type
(define-extern *ocean-trans-up-table* (pointer float)) ;; unknown type
(define-extern *ocean-up-right-table* (pointer float)) ;; unknown type
(define-extern *ocean-trans-corner-table* (pointer float)) ;; unknown type
(define-extern *ocean-right-table* (pointer float)) ;; unknown type
(define-extern *ocean-down-table* (pointer float)) ;; unknown type
(define-extern *ocean-trans-indices-village2* ocean-trans-indices) ;; unknown type
(define-extern *ocean-trans-indices-village1* ocean-trans-indices) ;; unknown type
(define-extern *ocean-near-indices-village2* ocean-near-indices) ;; unknown type
(define-extern *ocean-colors-village1* ocean-colors) ;; unknown type
(define-extern *ocean-map-village2* ocean-map) ;; unknown type
(define-extern *ocean-trans-indices-sunken* ocean-trans-indices) ;; unknown type
(define-extern *ocean-map-sunken* ocean-map) ;; unknown type
(define-extern *ocean-mid-indices-sunken* ocean-mid-indices) ;; unknown type
(define-extern *ocean-mid-masks-village2* ocean-mid-masks) ;; unknown type
(define-extern *ocean-mid-indices-village1* ocean-mid-indices) ;; unknown type
(define-extern *ocean-near-indices-village1* ocean-near-indices) ;; unknown type
(define-extern *ocean-spheres-village2* ocean-spheres) ;; unknown type
(define-extern *ocean-colors-village2* ocean-colors) ;; unknown type
(define-extern *ocean-mid-masks-village1* ocean-mid-masks) ;; unknown type
(define-extern *ocean-near-indices-sunken* ocean-near-indices) ;; unknown type
(define-extern *ocean-mid-indices-village2* ocean-mid-indices) ;; unknown type
(define-extern *ocean-mid-masks-sunken* ocean-mid-masks) ;; unknown type
(define-extern *ocean-map-village1* ocean-map) ;; unknown type
(define-extern *ocean-spheres-village1* ocean-spheres) ;; unknown type
;;(define-extern *ocean-wave-frames* object) ;; unknown type
;;(define-extern sky-color-hour object) ;; unknown type
;;(define-extern sky-circle-data object) ;; unknown type

View file

@ -243,6 +243,10 @@
["L12", "gs-store-image-packet", true]
],
"main-h": [["L1", "frame-stats", true]],
"ocean-h": [["L2", "ocean-work", true]],
"ocean-trans-tables": [
["L1", "(pointer float)", true, 16],
["L2", "(pointer float)", true, 160],
@ -266,8 +270,28 @@
],
"ocean-tables": [
["L26", "(inline-array sphere)", true, 36],
["L25", "(pointer uint32)", true, 2548]
["L26", "ocean-spheres", true],
["L18", "ocean-spheres", true],
["L25", "ocean-colors", true],
["L17", "ocean-colors", true],
["L23", "ocean-near-indices", true],
["L15", "ocean-near-indices", true],
["L9", "ocean-near-indices", true],
["L22", "ocean-trans-indices", true],
["L14", "ocean-trans-indices", true],
["L8", "ocean-trans-indices", true],
["L21", "ocean-mid-indices", true],
["L13", "ocean-mid-indices", true],
["L7", "ocean-mid-indices", true],
["L19", "ocean-mid-masks", true],
["L11", "ocean-mid-masks", true],
["L5", "ocean-mid-masks", true],
["L4", "ocean-map", true],
["L3", "ocean-map", true],
["L2", "ocean-map", true]
],
"ocean-frames": [["L1", "(pointer uint32)", true, 16384]],

View file

@ -606,6 +606,20 @@ goos::Object decompile_value(const TypeSpec& type,
} else {
return pretty_print::to_symbol(fmt::format("{}", value));
}
} else if (ts.tc(TypeSpec("uint16"), type)) {
assert(bytes.size() == 2);
u16 value;
memcpy(&value, bytes.data(), 2);
return pretty_print::to_symbol(fmt::format("#x{:x}", u64(value)));
} else if (ts.tc(TypeSpec("int16"), type)) {
assert(bytes.size() == 2);
s16 value;
memcpy(&value, bytes.data(), 2);
if (value > 100 && value <= INT16_MAX) {
return pretty_print::to_symbol(fmt::format("#x{:x}", value));
} else {
return pretty_print::to_symbol(fmt::format("{}", value));
}
} else if (ts.tc(TypeSpec("int8"), type)) {
assert(bytes.size() == 1);
s8 value;
@ -947,4 +961,4 @@ std::string decompile_int_enum_from_int(const TypeSpec& type, const TypeSystem&
fmt::format("Failed to decompile integer enum. Value {} wasn't found in enum {}", value,
type_info->get_name()));
}
} // namespace decompiler
} // namespace decompiler

View file

@ -167,7 +167,7 @@ Ptr<u8> kmalloc(Ptr<kheapinfo> heap, s32 size, u32 flags, char const* name) {
heap->top.offset = memstart;
if (flags & 0x1000)
if (flags & KMALLOC_MEMSET)
std::memset(Ptr<u8>(memstart).c(), 0, (size_t)size);
return Ptr<u8>(memstart);
}

View file

@ -218,7 +218,7 @@
(deftype generic-consts (structure)
((dma-header dma-packet :inline :offset-assert 0)
(vif-header uint32 4 :offset-assert 16)
(vif-header uint32 4 :offset-assert 16)
(dma-ref-vtxs dma-packet :inline :offset-assert 32)
(dma-cnt-call dma-packet :inline :offset-assert 48)
(matrix matrix :inline :offset-assert 64)
@ -227,8 +227,8 @@
(alpha-translucent ad-cmd :inline :offset-assert 160)
(ztest-normal ad-cmd :inline :offset-assert 176)
(ztest-opaque ad-cmd :inline :offset-assert 192)
(adcmd-offsets uint8 16 :offset-assert 208)
;;(adcmds UNKNOWN 4 :offset-assert 144)
(adcmd-offsets uint8 16 :offset-assert 208)
(adcmds ad-cmd 4 :offset 144)
(stcycle-tag uint32 :offset-assert 224)
(unpack-vtx-tag uint32 :offset-assert 228)
(unpack-clr-tag uint32 :offset-assert 232)
@ -240,7 +240,7 @@
(dma-tag-cnt uint64 :offset-assert 256)
(envmap generic-envmap-consts :inline :offset-assert 272)
(light-consts vector :inline :offset-assert 400)
(texture-offset uint16 8 :offset-assert 416)
(texture-offset uint16 8 :offset-assert 416)
)
:method-count-assert 9
:size-assert #x1b0
@ -255,4 +255,4 @@
:flag-assert #x900000100
)
(define *gsf-buffer* (kmalloc global 9216 64 "malloc"))
(define *gsf-buffer* (kmalloc global #x2400 (kmalloc-flags align-64) "malloc"))

View file

@ -43,7 +43,7 @@
)
(deftype ocean-spheres (structure)
((spheres uint128 36 :offset-assert 0)
((spheres sphere 36 :inline :offset-assert 0)
)
:method-count-assert 9
:size-assert #x240
@ -51,7 +51,7 @@
)
(deftype ocean-colors (structure)
((colors uint32 2548 :offset-assert 0)
((colors rgba 2548 :offset-assert 0)
)
:method-count-assert 9
:size-assert #x27d0

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -65,6 +65,15 @@
;; dgo
;; top-level
(defenum kmalloc-flags
:bitfield #t
(align-16 4)
(align-64 6)
(align-256 8)
(memset 12)
(top 13)
)
(define-extern string->symbol (function string symbol))
(define-extern print (function object object))
(define-extern inspect (function object object))
@ -73,7 +82,7 @@
(define-extern unload (function string none))
(define-extern _format (function _varargs_ object))
(define-extern malloc (function symbol int pointer))
(define-extern kmalloc (function kheap int int string pointer))
(define-extern kmalloc (function kheap int kmalloc-flags string pointer))
(define-extern new-dynamic-structure (function kheap type int structure))
(define-extern method-set! (function type int function none)) ;; may actually return function.
(define-extern link (function pointer pointer int kheap int pointer))

View file

@ -0,0 +1,22 @@
;;-*-Lisp-*-
(in-package goal)
;; definition of type drawable-group
(deftype drawable-group (drawable)
((pad uint8 4 :offset-assert 32)
)
:method-count-assert 18
:size-assert #x24
:flag-assert #x1200000024
)
;; definition for symbol *collide-nodes*, type int
(define *collide-nodes* 0)
;; failed to figure out what this is:
(let ((v0-1 0))
)

View file

@ -0,0 +1,57 @@
;;-*-Lisp-*-
(in-package goal)
;; definition of type drawable
(deftype drawable (basic)
((id int16 :offset-assert 4)
(bsphere vector :inline :offset-assert 16)
)
:method-count-assert 18
:size-assert #x20
:flag-assert #x1200000020
(:methods
(dummy-9 () none 9)
(dummy-10 (_type_) int 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)
)
)
;; definition for method 3 of type drawable
(defmethod inspect drawable ((obj drawable))
(format #t "[~8x] ~A~%" obj (-> obj type))
(format #t "~Tid: ~D~%" (-> obj id))
(format #t "~Tbsphere: ~`vector`P~%" (-> obj bsphere))
obj
)
;; definition of type drawable-error
(deftype drawable-error (drawable)
((name basic :offset-assert 32)
)
:method-count-assert 18
:size-assert #x24
:flag-assert #x1200000024
)
;; definition for method 3 of type drawable-error
(defmethod inspect drawable-error ((obj drawable-error))
(format #t "[~8x] ~A~%" obj (-> obj type))
(format #t "~Tid: ~D~%" (-> obj id))
(format #t "~Tbsphere: ~`vector`P~%" (-> obj bsphere))
(format #t "~Tname: ~A~%" (-> obj name))
obj
)
;; failed to figure out what this is:
(let ((v0-2 0))
)

View file

@ -0,0 +1,160 @@
;;-*-Lisp-*-
(in-package goal)
;; definition of type joint
(deftype joint (basic)
((name basic :offset-assert 4)
(number int32 :offset-assert 8)
(parent joint :offset-assert 12)
(bind-pose matrix :inline :offset-assert 16)
)
:method-count-assert 9
:size-assert #x50
:flag-assert #x900000050
)
;; definition for method 3 of type joint
(defmethod inspect joint ((obj joint))
(format #t "[~8x] ~A~%" obj (-> obj type))
(format #t "~Tname: ~A~%" (-> obj name))
(format #t "~Tnumber: ~D~%" (-> obj number))
(format #t "~Tparent: ~A~%" (-> obj parent))
(format #t "~Tbind-pose: #<matrix @ #x~X>~%" (-> obj bind-pose))
obj
)
;; definition of type bone-cache
(deftype bone-cache (structure)
((bone-matrix uint32 :offset-assert 0)
(parent-matrix uint32 :offset-assert 4)
(dummy uint32 :offset-assert 8)
(frame uint32 :offset-assert 12)
)
:method-count-assert 9
:size-assert #x10
:flag-assert #x900000010
)
;; definition for method 3 of type bone-cache
(defmethod inspect bone-cache ((obj bone-cache))
(format #t "[~8x] ~A~%" obj 'bone-cache)
(format #t "~Tbone-matrix: ~D~%" (-> obj bone-matrix))
(format #t "~Tparent-matrix: ~D~%" (-> obj parent-matrix))
(format #t "~Tdummy: ~D~%" (-> obj dummy))
(format #t "~Tframe: ~D~%" (-> obj frame))
obj
)
;; definition of type bone
(deftype bone (structure)
((transform matrix :inline :offset-assert 0)
(position vector :inline :offset 48)
(scale vector :inline :offset-assert 64)
(cache bone-cache :inline :offset-assert 80)
)
:method-count-assert 9
:size-assert #x60
:flag-assert #x900000060
)
;; definition for method 3 of type bone
(defmethod inspect bone ((obj bone))
(format #t "[~8x] ~A~%" obj 'bone)
(format #t "~Ttransform: #<matrix @ #x~X>~%" (-> obj transform))
(format #t "~Tposition: #<vector @ #x~X>~%" (&-> obj transform data 12))
(format #t "~Tscale: #<vector @ #x~X>~%" (-> obj scale))
(format #t "~Tcache: #<bone-cache @ #x~X>~%" (-> obj cache))
obj
)
;; definition of type skeleton
(deftype skeleton (inline-array-class)
()
:method-count-assert 9
:size-assert #x10
:flag-assert #x900000010
)
;; definition for method 3 of type skeleton
(defmethod inspect skeleton ((obj skeleton))
(format #t "[~8x] ~A~%" obj (-> obj type))
(format #t "~Tlength: ~D~%" (-> obj length))
(format #t "~Tallocated-length: ~D~%" (-> obj allocated-length))
(format #t "~Tdata[0] @ #x~X~%" (&-> obj data 4))
obj
)
;; failed to figure out what this is:
(set! (-> skeleton heap-base) (the-as uint 96))
;; definition of type cspace
(deftype cspace (structure)
((parent cspace :offset-assert 0)
(joint joint :offset-assert 4)
(joint-num int16 :offset-assert 8)
(geo basic :offset-assert 12)
(bone bone :offset-assert 16)
(param0 basic :offset-assert 20)
(param1 basic :offset-assert 24)
(param2 basic :offset-assert 28)
)
:method-count-assert 10
:size-assert #x20
:flag-assert #xa00000020
(:methods
(dummy-9 () none 9)
)
)
;; definition for method 3 of type cspace
(defmethod inspect cspace ((obj cspace))
(format #t "[~8x] ~A~%" obj 'cspace)
(format #t "~Tparent: #<cspace @ #x~X>~%" (-> obj parent))
(format #t "~Tjoint: ~A~%" (-> obj joint))
(format #t "~Tjoint-num: ~D~%" (-> obj joint-num))
(format #t "~Tgeo: ~A~%" (-> obj geo))
(format #t "~Tbone: #<bone @ #x~X>~%" (-> obj bone))
(format #t "~Tparam0: ~A~%" (-> obj param0))
(format #t "~Tparam1: ~A~%" (-> obj param1))
(format #t "~Tparam2: ~A~%" (-> obj param2))
obj
)
;; definition of type cspace-array
(deftype cspace-array (inline-array-class)
()
:method-count-assert 9
:size-assert #x10
:flag-assert #x900000010
)
;; definition for method 3 of type cspace-array
(defmethod inspect cspace-array ((obj cspace-array))
(format #t "[~8x] ~A~%" obj (-> obj type))
(format #t "~Tlength: ~D~%" (-> obj length))
(format #t "~Tallocated-length: ~D~%" (-> obj allocated-length))
(format #t "~Tdata[0] @ #x~X~%" (&-> obj data 4))
obj
)
;; failed to figure out what this is:
(set! (-> cspace-array heap-base) (the-as uint 32))
;; definition for method 2 of type cspace
(defmethod print cspace ((obj cspace))
(format #t "#<cspace ~S @ #x~X>" (if (-> obj joint)
(-> obj joint name)
"nojoint"
)
obj
)
obj
)
;; failed to figure out what this is:
(let ((v0-6 0))
)

View file

@ -20,6 +20,8 @@ const std::unordered_set<std::string> g_object_files_to_decompile = {
"dma-bucket", "dma-disasm", "pad", "gs", "display-h", "vector", "file-io", "loader-h",
"texture-h", "level-h", "math-camera-h", /* math-camera, "font-h",*/ "decomp-h", "display",
/* gap */
"mspace-h", "drawable-h", "drawable-group-h",
/* gap */
"bounding-box",
/* gap */
"sync-info-h", "sync-info"};
@ -36,6 +38,8 @@ const std::vector<std::string> g_object_files_to_check_against_reference = {
"dma-buffer", "dma-bucket", "dma-disasm", "pad", "gs", "display-h", "vector", "file-io",
"loader-h", "texture-h", "level-h", "math-camera-h", /* math-camera, "font-h",*/ "decomp-h",
"display",
/* gap */
"mspace-h", "drawable-h", "drawable-group-h",
/* gap */ "bounding-box",
/* gap */
"sync-info-h", "sync-info"};
@ -454,6 +458,9 @@ TEST_F(OfflineDecompilation, Compile) {
if (skip_files_in_compiling.find(file) != skip_files_in_compiling.end()) {
continue;
}
lg::info("Compiling {}...", file);
auto& obj_l = db->obj_files_by_name.at(file);
ASSERT_EQ(obj_l.size(), 1);