[decomp] prototype-h, a few enums and other random things (#422)

* [decompiler] fix missing error in asm output

* decomp prototype-h, cleanup pat-h and res-h, prep for fact-h & res

* fix types

* Update all-types.gc

* fix a methos in `res-h`
This commit is contained in:
ManDude
2021-05-07 00:00:30 +01:00
committed by GitHub
parent 233d887790
commit 812efd92ca
13 changed files with 547 additions and 387 deletions
+2 -1
View File
@@ -1670,8 +1670,9 @@ void build_initial_forms(Function& function) {
function.ir2.top_form = result;
} catch (std::runtime_error& e) {
function.warnings.general_warning(e.what());
lg::warn("Failed to build initial forms in {}: {}", function.guessed_name.to_string(),
e.what());
}
}
} // namespace decompiler
} // namespace decompiler
+176 -184
View File
@@ -8030,6 +8030,14 @@
:flag-assert #x900000018
)
;; game-info-h
(deftype actor-id (uint32)
()
:method-count-assert 9
:size-assert #x4
:flag-assert #x900000004
)
;; game-info-h
(deftype level-buffer-state (structure)
((name basic :offset-assert 0)
@@ -8197,85 +8205,54 @@
:flag-assert #x900000534
)
; ;; prototype-h
; (deftype prototype-bucket (basic)
; ((name basic :offset-assert 4)
; (flags uint32 :offset-assert 8)
; (in-level uint16 :offset-assert 12)
; (utextures uint16 :offset-assert 14)
; (geometry UNKNOWN 4 :offset-assert 16)
; (dists vector :inline :offset-assert 32)
; (rdists vector :inline :offset-assert 48)
; (next UNKNOWN 4 :offset-assert 64)
; (count UNKNOWN 4 :offset-assert 80)
; (near-plane meters :offset-assert 32)
; (near-stiff meters :offset-assert 36)
; (mid-plane meters :offset-assert 40)
; (far-plane meters :offset-assert 44)
; (rlength-near float :offset-assert 48)
; (rlength-stiff float :offset-assert 52)
; (rlength-mid float :offset-assert 56)
; (stiffness float :offset-assert 60)
; (next-clear uint128 :offset-assert 64)
; (count-clear uint64 :offset-assert 80)
; )
; :method-count-assert 9
; :size-assert #x58
; :flag-assert #x900000058
; )
;; prototype-h
(deftype prototype-bucket (basic)
((name basic :offset-assert 4)
(flags uint32 :offset-assert 8)
(in-level uint16 :offset-assert 12)
(utextures uint16 :offset-assert 14)
(geometry uint32 4 :offset-assert 16)
(dists vector :inline :offset-assert 32)
(rdists vector :inline :offset-assert 48)
(next uint32 4 :offset-assert 64)
(count uint16 4 :offset-assert 80)
(near-plane float :offset 32) ;; meters
(near-stiff float :offset 36) ;; meters
(mid-plane float :offset 40) ;; meters
(far-plane float :offset 44) ;; meters
(rlength-near float :offset 48)
(rlength-stiff float :offset 52)
(rlength-mid float :offset 56)
(stiffness float :offset 60)
(next-clear uint128 :offset 64)
(count-clear uint64 :offset 80)
)
:method-count-assert 9
:size-assert #x58
:flag-assert #x900000058
)
; ;; prototype-h
; (deftype prototype-bucket-shrub (prototype-bucket)
; ((name basic :offset-assert 4)
; (flags uint32 :offset-assert 8)
; (in-level uint16 :offset-assert 12)
; (utextures uint16 :offset-assert 14)
; (geometry UNKNOWN 4 :offset-assert 16)
; (dists vector :inline :offset-assert 32)
; (rdists vector :inline :offset-assert 48)
; (next UNKNOWN 4 :offset-assert 64)
; (count UNKNOWN 4 :offset-assert 80)
; (near-plane meters :offset-assert 32)
; (near-stiff meters :offset-assert 36)
; (mid-plane meters :offset-assert 40)
; (far-plane meters :offset-assert 44)
; (rlength-near float :offset-assert 48)
; (rlength-stiff float :offset-assert 52)
; (rlength-mid float :offset-assert 56)
; (stiffness float :offset-assert 60)
; (next-clear uint128 :offset-assert 64)
; (count-clear uint64 :offset-assert 80)
; (mod-count UNKNOWN 4 :offset-assert 88)
; (last UNKNOWN 4 :offset-assert 96)
; (last-clear uint128 :offset-assert 96)
; )
; :method-count-assert 9
; :size-assert #x70
; :flag-assert #x900000070
; )
;; prototype-h
(deftype prototype-bucket-shrub (prototype-bucket)
((mod-count uint16 4 :offset-assert 88)
(last uint32 4 :offset-assert 96)
(last-clear uint128 :offset 96)
)
:method-count-assert 9
:size-assert #x70
:flag-assert #x900000070
)
; ;; prototype-h
; (deftype prototype-inline-array-shrub (drawable)
; ((id int16 :offset-assert 4)
; (bsphere vector :inline :offset-assert 16)
; (length int16 :offset-assert 6)
; (data UNKNOWN 1 :offset-assert 36)
; )
; :method-count-assert 18
; :size-assert #x94
; :flag-assert #x1200000094
; (:methods
; (dummy-9 () none 9)
; (dummy-10 () none 10)
; (dummy-11 () none 11)
; (dummy-12 () none 12)
; (dummy-13 () none 13)
; (dummy-14 () none 14)
; (dummy-15 () none 15)
; (dummy-16 () none 16)
; (dummy-17 () none 17)
; )
; )
;; prototype-h
(deftype prototype-inline-array-shrub (drawable)
((length int16 :offset 6)
(data prototype-bucket-shrub 1 :inline :offset 32)
(_pad uint32)
)
:method-count-assert 18
:size-assert #x94
:flag-assert #x1200000094
)
;; prototype-h
(deftype prototype-array-shrub-info (basic)
@@ -8287,46 +8264,27 @@
:flag-assert #x90000000c
)
; ;; prototype-h
; (deftype prototype-bucket-tie (prototype-bucket)
; ((name basic :offset-assert 4)
; (flags uint32 :offset-assert 8)
; (in-level uint16 :offset-assert 12)
; (utextures uint16 :offset-assert 14)
; (geometry UNKNOWN 4 :offset-assert 16)
; (dists vector :inline :offset-assert 32)
; (rdists vector :inline :offset-assert 48)
; (next UNKNOWN 4 :offset-assert 64)
; (count UNKNOWN 4 :offset-assert 80)
; (near-plane meters :offset-assert 32)
; (near-stiff meters :offset-assert 36)
; (mid-plane meters :offset-assert 40)
; (far-plane meters :offset-assert 44)
; (rlength-near float :offset-assert 48)
; (rlength-stiff float :offset-assert 52)
; (rlength-mid float :offset-assert 56)
; (stiffness float :offset-assert 60)
; (next-clear uint128 :offset-assert 64)
; (count-clear uint64 :offset-assert 80)
; (generic-count UNKNOWN 4 :offset-assert 88)
; (generic-next UNKNOWN 4 :offset-assert 96)
; (frag-count UNKNOWN 4 :offset-assert 112)
; (index-start UNKNOWN 4 :offset-assert 116)
; (base-qw UNKNOWN 4 :offset-assert 120)
; (envmap-rfade float :offset-assert 128)
; (envmap-fade-far float :offset-assert 132)
; (envmap-shader adgif-shader :offset-assert 136)
; (collide-frag basic :offset-assert 140)
; (tie-colors basic :offset-assert 144)
; (data UNKNOWN :dynamic :offset-assert 148)
; (color-index-qwc UNKNOWN :dynamic :offset-assert 148)
; (generic-next-clear uint128 :offset-assert 96)
; (generic-count-clear uint128 :offset-assert 80)
; )
; :method-count-assert 9
; :size-assert #x94
; :flag-assert #x900000094
; )
;; prototype-h
(deftype prototype-bucket-tie (prototype-bucket)
((generic-count uint16 4 :offset-assert 88)
(generic-next uint32 4 :offset-assert 96)
(frag-count uint8 4 :offset-assert 112)
(index-start uint8 4 :offset-assert 116)
(base-qw uint16 4 :offset-assert 120)
(envmap-rfade float :offset-assert 128)
(envmap-fade-far float :offset-assert 132)
(envmap-shader adgif-shader :offset-assert 136)
(collide-frag basic :offset-assert 140)
(tie-colors basic :offset-assert 144)
(data uint32 :dynamic :offset-assert 148)
(color-index-qwc uint32 :dynamic :offset-assert 148)
(generic-next-clear uint128 :offset 96)
(generic-count-clear uint128 :offset 80)
)
:method-count-assert 9
:size-assert #x94
:flag-assert #x900000094
)
;; prototype-h
(deftype prototype-array-tie (array)
@@ -8586,7 +8544,10 @@
;; res-h
(deftype res-tag (uint128)
()
((unk0 uint32 :offset 0 :size 32)
(unk1 uint16 :offset 32 :size 16)
(unk2 uint64 :offset 64 :size 64)
)
:flag-assert #x900000010
)
@@ -8597,53 +8558,30 @@
(data-top pointer :offset-assert 16)
(data-size int32 :offset-assert 20)
(extra basic :offset-assert 24)
(tag uint32 :offset-assert 28)
(tag (pointer res-tag) :offset-assert 28)
)
:method-count-assert 22
:size-assert #x20
:flag-assert #x1600000020
;; field extra is a basic loaded with a signed load
(:methods
(dummy-9 () none 9)
(dummy-10 () none 10)
(dummy-11 () none 11)
(dummy-12 () none 12)
(dummy-13 () none 13)
(dummy-14 () none 14)
(dummy-15 () none 15)
(dummy-16 () none 16)
(dummy-17 () none 17)
(dummy-18 () none 18)
(dummy-19 () none 19)
(dummy-20 () none 20)
(dummy-21 () none 21)
(new (symbol type int int) _type_ 0)
(dummy-9 (_type_ symbol symbol int symbol (pointer res-tag) pointer) symbol 9)
(dummy-10 (_type_ symbol symbol int symbol symbol pointer) int 10)
(dummy-11 (_type_ symbol symbol int int symbol pointer) int 11)
(dummy-12 (_type_ symbol symbol int int symbol pointer) float 12)
(dummy-13 (_type_ int) pointer 13) ;; advance tag pointer
(dummy-14 (_type_ uint) pointer 14)
(dummy-15 (_type_) none 15)
(dummy-16 (_type_ int int int int) none 16)
(dummy-17 (_type_ int int) res-lump 17)
(dummy-18 (_type_ int int) none 18)
(dummy-19 (_type_ symbol symbol int) int 19)
(dummy-20 (_type_ int int) none 20)
(dummy-21 (_type_ int int int int int) none 21)
)
)
; ;; res
; (deftype res-lump (basic)
; ()
; :method-count-assert 22
; :size-assert #x20
; :flag-assert #x1600000020
; ;; too many basic blocks
; (:methods
; (dummy-9 () none 9)
; (dummy-10 () none 10)
; (dummy-11 () none 11)
; (dummy-12 () none 12)
; (dummy-13 () none 13)
; (dummy-14 () none 14)
; (dummy-15 () none 15)
; (dummy-16 () none 16)
; (dummy-17 () none 17)
; (dummy-18 () none 18)
; (dummy-19 () none 19)
; (dummy-20 () none 20)
; (dummy-21 () none 21)
; )
; )
;; dynamics-h
(deftype dynamics (basic)
((name basic :offset-assert 4)
@@ -8759,25 +8697,77 @@
(define-extern *pole-mods* surface) ;; unknown type
;; pat-h
(defenum pat-material
:type uint8
(stone)
(ice)
(quicksand)
(waterbottom)
(tar)
(sand)
(wood)
(grass)
(pcmetal)
(snow)
(deepsnow)
(hotcoals)
(lava)
(crwood)
(gravel)
(dirt)
(metal)
(straw)
(tube)
(swamp)
(stopproj)
(rotate)
(neutral)
)
(defenum pat-mode
:type uint8
(ground)
(wall)
(obstacle)
)
(defenum pat-event
:type uint8
(none)
(deadly)
(endlessfall)
(burn)
(deadlyup)
(burnup)
(melt)
)
(deftype pat-surface (uint32)
()
((skip uint8 :offset 0 :size 3)
(mode pat-mode :offset 3 :size 3)
(material pat-material :offset 6 :size 6)
(camera uint8 :offset 12 :size 2)
(event pat-event :offset 14 :size 6)
(noentity uint8 :offset 0 :size 1)
(nocamera uint8 :offset 1 :size 1)
(noedge uint8 :offset 2 :size 1)
(nolineofsight uint8 :offset 12 :size 1)
)
:method-count-assert 9
:size-assert #x4
:flag-assert #x900000004
)
(define-extern pat-event->string (function pat-surface string))
(define-extern pat-material->string (function pat-surface string))
;;(define-extern pat-surface object) ;; unknown type
;;(define-extern pat-mode-info object) ;; unknown type
(define-extern pat-mode->string (function pat-surface string))
(define-extern pat-event->string (function pat-surface string))
;; pat-h
(deftype pat-mode-info (structure)
((name basic :offset-assert 0)
((name string :offset-assert 0)
(wall-angle float :offset-assert 4)
(color uint32 :offset-assert 8)
(hilite-color uint32 :offset-assert 12)
(color rgba :offset-assert 8)
(hilite-color rgba :offset-assert 12)
)
:method-count-assert 9
:size-assert #x10
@@ -8807,12 +8797,24 @@
:flag-assert #x90000004c
)
(define-extern pickup-type->string (function int string))
(defenum pickup-type
(none)
(eco-yellow)
(eco-red)
(eco-blue)
(eco-green)
(money)
(fuel-cell)
(eco-pill)
(buzzer)
(eco-pill-random)
)
(define-extern pickup-type->string (function pickup-type string))
;; fact-h
(deftype fact-info (basic)
((process basic :offset-assert 4)
(pickup-type int32 :offset-assert 8)
((process process :offset-assert 4)
(pickup-type pickup-type :offset-assert 8)
(pickup-amount float :offset-assert 12)
(pickup-spawn-amount float :offset-assert 16)
(options uint64 :offset-assert 24)
@@ -8822,9 +8824,10 @@
:size-assert #x28
:flag-assert #xc00000028
(:methods
(new (symbol type process pickup-type float) _type_ 0)
(dummy-9 () none 9)
(dummy-10 () none 10)
(dummy-11 () none 11)
(dummy-11 (_type_) none 11)
)
)
@@ -8851,11 +8854,6 @@
:method-count-assert 12
:size-assert #x90
:flag-assert #xc00000090
(:methods
(dummy-9 () none 9)
(dummy-10 () none 10)
(dummy-11 () none 11)
)
)
;; fact-h
@@ -8871,11 +8869,6 @@
:method-count-assert 12
:size-assert #x44
:flag-assert #xc00000044
(:methods
(dummy-9 () none 9)
(dummy-10 () none 10)
(dummy-11 () none 11)
)
)
;; aligner-h
@@ -33867,13 +33860,12 @@
(define-extern game-info type)
;;(define-extern level-buffer-state object) ;; unknown type
;;(define-extern actor-id object) ;; unknown type
;;(define-extern *GAME-bank* object) ;; unknown type
(define-extern *GAME-bank* game-bank) ;; unknown type
;;(define-extern wind-work object) ;; unknown type
(define-extern wind-get-hashed-index (function vector int))
;;(define-extern *wind-scales* object) ;; unknown type
(define-extern *wind-scales* (array uint8)) ;; unknown type
;;(define-extern wind-vector object) ;; unknown type
(define-extern *wind-work* wind-work) ;; unknown type
(define-extern prototype-bucket-shrub type)
(define-extern prototype-bucket-tie type)
;;(define-extern instance object) ;; unknown type
;;(define-extern prototype-bucket object) ;; unknown type
@@ -33904,8 +33896,8 @@
;;(define-extern draw object) ;; unknown type
;;(define-extern *debug-engine* object) ;; unknown type
;;(define-extern res-tag object) ;; unknown type
;;(define-extern *res-key-string* object) ;; unknown type
;;(define-extern *res-static-buf* object) ;; unknown type
(define-extern *res-key-string* string) ;; unknown type
(define-extern *res-static-buf* pointer) ;; unknown type
(define-extern part-group-pointer? function)
(define-extern nav-mesh type)
(define-extern collide-mesh type)
@@ -33949,13 +33941,13 @@
;;(define-extern launch-jump object) ;; unknown type
;;(define-extern run object) ;; unknown type
;;(define-extern *pat-mode-info* object) ;; unknown type
(define-extern *pat-mode-info* (inline-array pat-mode-info)) ;; unknown type
;;(define-extern fact-info-target object) ;; unknown type
(define-extern fact-bank type)
(define-extern fact-info type)
;;(define-extern fact-info-enemy object) ;; unknown type
;;(define-extern *FACT-bank* object) ;; unknown type
(define-extern *FACT-bank* fact-bank) ;; unknown type
;;(define-extern cam-vert object) ;; unknown type
;;(define-extern idle-distance object) ;; unknown type
;;(define-extern options object) ;; unknown type
@@ -375,7 +375,10 @@
"pat-h": [["L1", "(inline-array pat-mode-info)", true, 4]],
"fact-h": [["L35", "_auto_", true]],
"fact-h": [
["L35", "_auto_", true],
["L36", "float", true]
],
"sync-info": [
["L78", "float", true],
@@ -138,6 +138,8 @@
"draw-sprite2d-xy": [[16, "draw-context"]],
"screen-gradient": [[16, "draw-context"]],
//"(method 0 fact-info)": [[16, "res-tag"]],
"(method 10 oscillating-vector)":[[16, "vector"]]
}
@@ -380,5 +380,13 @@
[148, "a0", "(pointer uint64)"],
[150, "a0", "(pointer gs-reg64)"],
[[154, 159], "v1", "dma-packet"]
],
// RES
"(method 13 res-lump)": [
[6, "a0", "res-tag"]
],
"(method 14 res-lump)": [
[2, "a0", "res-tag"]
]
}