mirror of
https://github.com/open-goal/jak-project
synced 2026-09-07 03:30:01 -04:00
[Decompiler] Static Data Decomp (#280)
* update all-types * begin work on static data decompiler * working for vif disasm array * mostly working * finish static data decompilation
This commit is contained in:
@@ -18,6 +18,42 @@
|
||||
:flag-assert #x900000018
|
||||
)
|
||||
|
||||
(define *vif-disasm-table*
|
||||
(new 'static 'boxed-array vif-disasm-element 34
|
||||
(new 'static 'vif-disasm-element :mask #x7f :string1 "nop")
|
||||
(new 'static 'vif-disasm-element :mask #x7f :tag #x1 :print #x2 :string1 "stcycl")
|
||||
(new 'static 'vif-disasm-element :mask #x7f :tag #x2 :print #x1 :string1 "offset" :string2 "offset")
|
||||
(new 'static 'vif-disasm-element :mask #x7f :tag #x3 :print #x1 :string1 "base" :string2 "base")
|
||||
(new 'static 'vif-disasm-element :mask #x7f :tag #x4 :print #x1 :string1 "itop" :string2 "addr")
|
||||
(new 'static 'vif-disasm-element :mask #x7f :tag #x5 :print #x1 :string1 "stmod" :string2 "mode")
|
||||
(new 'static 'vif-disasm-element :mask #x7f :tag #x6 :print #x1 :string1 "mskpath3" :string2 "mask")
|
||||
(new 'static 'vif-disasm-element :mask #x7f :tag #x7 :print #x1 :string1 "mark" :string2 "mark")
|
||||
(new 'static 'vif-disasm-element :mask #x7f :tag #x10 :string1 "flushe")
|
||||
(new 'static 'vif-disasm-element :mask #x7f :tag #x11 :string1 "flush")
|
||||
(new 'static 'vif-disasm-element :mask #x7f :tag #x13 :string1 "flusha")
|
||||
(new 'static 'vif-disasm-element :mask #x7f :tag #x14 :print #x1 :string1 "mscal" :string2 "addr")
|
||||
(new 'static 'vif-disasm-element :mask #x7f :tag #x17 :string1 "mscnt")
|
||||
(new 'static 'vif-disasm-element :mask #x7f :tag #x15 :print #x1 :string1 "mscalf" :string2 "addr")
|
||||
(new 'static 'vif-disasm-element :mask #x7f :tag #x20 :print #x3 :string1 "stmask" :string2 "mask")
|
||||
(new 'static 'vif-disasm-element :mask #x7f :tag #x30 :print #x4 :string1 "strow" :string2 "row")
|
||||
(new 'static 'vif-disasm-element :mask #x7f :tag #x31 :print #x4 :string1 "stcol" :string2 "col")
|
||||
(new 'static 'vif-disasm-element :mask #x7f :tag #x4a :print #x5 :string1 "mpg")
|
||||
(new 'static 'vif-disasm-element :mask #x7f :tag #x50 :print #x6 :string1 "direct")
|
||||
(new 'static 'vif-disasm-element :mask #x7f :tag #x51 :print #x6 :string1 "directhl")
|
||||
(new 'static 'vif-disasm-element :mask #x6f :tag #x60 :val #x10 :print #x7 :string1 "unpack-s-32")
|
||||
(new 'static 'vif-disasm-element :mask #x6f :tag #x61 :val #x8 :print #x7 :string1 "unpack-s-16")
|
||||
(new 'static 'vif-disasm-element :mask #x6f :tag #x62 :val #x4 :print #x7 :string1 "unpack-s-8")
|
||||
(new 'static 'vif-disasm-element :mask #x6f :tag #x64 :val #x8 :print #x7 :string1 "unpack-v2-32")
|
||||
(new 'static 'vif-disasm-element :mask #x6f :tag #x65 :val #x4 :print #x7 :string1 "unpack-v2-16")
|
||||
(new 'static 'vif-disasm-element :mask #x6f :tag #x66 :val #x2 :print #x7 :string1 "unpack-v2-8")
|
||||
(new 'static 'vif-disasm-element :mask #x6f :tag #x68 :val #xc :print #x7 :string1 "unpack-v3-32")
|
||||
(new 'static 'vif-disasm-element :mask #x6f :tag #x69 :val #x6 :print #x7 :string1 "unpack-v3-16")
|
||||
(new 'static 'vif-disasm-element :mask #x6f :tag #x6a :val #x3 :print #x7 :string1 "unpack-v3-8")
|
||||
(new 'static 'vif-disasm-element :mask #x6f :tag #x6c :val #x10 :print #x7 :string1 "unpack-v4-32")
|
||||
(new 'static 'vif-disasm-element :mask #x6f :tag #x6d :val #x8 :print #x7 :string1 "unpack-v4-16")
|
||||
(new 'static 'vif-disasm-element :mask #x6f :tag #x6e :val #x4 :print #x7 :string1 "unpack-v4-8")
|
||||
(new 'static 'vif-disasm-element :mask #x6f :tag #x6f :val #x2 :print #x7 :string1 "unpack-v4-5")
|
||||
(new 'static 'vif-disasm-element :print #x8)))
|
||||
|
||||
(defun disasm-vif-details ((stream symbol) (data (pointer uint8)) (kind int) (count int))
|
||||
(local-vars
|
||||
|
||||
@@ -5,3 +5,225 @@
|
||||
;; name in dgo: texture-h
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
;; mask for different texture things.
|
||||
;; these are the ones that will be displayed in the menu
|
||||
(define *texture-enable-user-menu* 31)
|
||||
|
||||
;; enabled textures.
|
||||
(define *texture-enable-user* 0)
|
||||
|
||||
(deftype texture-id (uint32)
|
||||
()
|
||||
:method-count-assert 9
|
||||
:size-assert #x4
|
||||
:flag-assert #x900000004
|
||||
)
|
||||
|
||||
(defmethod inspect texture-id ((obj texture-id))
|
||||
(format #t "[~8x] ~A~%" obj 'texture-id)
|
||||
(format #t "~Tindex: ~D~%" (shr (shl (the-as int obj) 44) 52))
|
||||
|
||||
;; you aren't supposed to do this.
|
||||
(format #t "~Tpage: ~D~%" (shr (logand #xffffffff obj) 20))
|
||||
;; (set! t9-2 format)
|
||||
;; (set! a0-3 '#t)
|
||||
;; (set! a1-2 "~Tpage: ~D~%")
|
||||
;; (.srl a2-2 obj 20)
|
||||
;; (t9-2 a0-3 a1-2 a2-2)
|
||||
obj
|
||||
)
|
||||
|
||||
(deftype texture-pool-segment (structure)
|
||||
((dest uint32 :offset-assert 0)
|
||||
(size uint32 :offset-assert 4)
|
||||
)
|
||||
:pack-me
|
||||
:method-count-assert 9
|
||||
:size-assert #x8
|
||||
:flag-assert #x900000008
|
||||
)
|
||||
|
||||
(deftype texture-pool (basic)
|
||||
((top int32 :offset-assert 4)
|
||||
(cur int32 :offset-assert 8)
|
||||
(allocate-func basic :offset-assert 12)
|
||||
(font-palette int32 :offset-assert 16)
|
||||
(segment texture-pool-segment 4 :inline :offset-assert 20)
|
||||
(segment-near texture-pool-segment :inline :offset 20)
|
||||
(segment-common texture-pool-segment :inline :offset 28)
|
||||
(common-page int32 32 :offset-assert 52)
|
||||
(common-page-mask int32 :offset-assert 180)
|
||||
(ids int32 126 :offset-assert 184)
|
||||
)
|
||||
:method-count-assert 23
|
||||
:size-assert #x2b0
|
||||
:flag-assert #x17000002b0
|
||||
(: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)
|
||||
(dummy-22 () none 22)
|
||||
)
|
||||
)
|
||||
|
||||
(deftype texture (basic)
|
||||
((w int16 :offset-assert 4)
|
||||
(h int16 :offset-assert 6)
|
||||
(num-mips uint8 :offset-assert 8)
|
||||
(tex1-control uint8 :offset-assert 9)
|
||||
(psm uint8 :offset-assert 10)
|
||||
(mip-shift uint8 :offset-assert 11)
|
||||
(clutpsm uint16 :offset-assert 12)
|
||||
(dest uint16 7 :offset-assert 14)
|
||||
(clutdest uint16 :offset-assert 28)
|
||||
(width uint8 7 :offset-assert 30)
|
||||
(name basic :offset-assert 40)
|
||||
(size uint32 :offset-assert 44)
|
||||
(uv-dist float :offset-assert 48)
|
||||
(masks uint32 3 :offset-assert 52)
|
||||
)
|
||||
:method-count-assert 9
|
||||
:size-assert #x40
|
||||
:flag-assert #x900000040
|
||||
)
|
||||
|
||||
(deftype texture-page-segment (structure)
|
||||
((block-data pointer :offset-assert 0)
|
||||
(size uint32 :offset-assert 4)
|
||||
(dest uint32 :offset-assert 8)
|
||||
)
|
||||
:pack-me
|
||||
:method-count-assert 9
|
||||
:size-assert #xc
|
||||
:flag-assert #x90000000c
|
||||
)
|
||||
|
||||
(defun texture-mip->segment ((arg0 int) (arg1 int))
|
||||
(if (>= 2 arg1) (+ (- -1 arg0) arg1) (max 0 (- 2 arg0)))
|
||||
)
|
||||
|
||||
(deftype texture-page (basic)
|
||||
((info basic :offset-assert 4)
|
||||
(name basic :offset-assert 8)
|
||||
(id uint32 :offset-assert 12)
|
||||
(length int32 :offset-assert 16)
|
||||
(mip0-size uint32 :offset-assert 20)
|
||||
(size uint32 :offset-assert 24)
|
||||
(segment texture-page-segment 3 :inline :offset-assert 28)
|
||||
(pad uint32 16 :offset-assert 64)
|
||||
(data uint8 :dynamic :offset-assert 128)
|
||||
)
|
||||
:method-count-assert 15
|
||||
:size-assert #x80
|
||||
:flag-assert #xf00000080
|
||||
(: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)
|
||||
)
|
||||
)
|
||||
|
||||
(deftype shader-ptr (uint32)
|
||||
()
|
||||
:method-count-assert 9
|
||||
:size-assert #x4
|
||||
:flag-assert #x900000004
|
||||
)
|
||||
|
||||
(deftype texture-link (structure)
|
||||
((next uint32 :offset-assert 0)
|
||||
)
|
||||
:method-count-assert 9
|
||||
:size-assert #x4
|
||||
:flag-assert #x900000004
|
||||
)
|
||||
|
||||
(deftype texture-page-dir-entry (structure)
|
||||
((length int16 :offset-assert 0)
|
||||
(status uint16 :offset-assert 2)
|
||||
(page basic :offset-assert 4)
|
||||
(link uint32 :offset-assert 8)
|
||||
)
|
||||
:method-count-assert 9
|
||||
:size-assert #xc
|
||||
:flag-assert #x90000000c
|
||||
)
|
||||
|
||||
(deftype texture-page-dir (basic)
|
||||
((pad uint8 #x10))
|
||||
(:methods
|
||||
(dummy-9 () none 9)
|
||||
)
|
||||
:flag-assert #xa00000014
|
||||
)
|
||||
|
||||
(deftype texture-relocate-later (basic)
|
||||
((memcpy basic :offset-assert 4)
|
||||
(dest uint32 :offset-assert 8)
|
||||
(source uint32 :offset-assert 12)
|
||||
(move uint32 :offset-assert 16)
|
||||
(entry texture-page-dir-entry :offset-assert 20)
|
||||
(page basic :offset-assert 24)
|
||||
)
|
||||
:method-count-assert 9
|
||||
:size-assert #x1c
|
||||
:flag-assert #x90000001c
|
||||
)
|
||||
|
||||
(define *texture-relocate-later* (new 'global 'texture-relocate-later))
|
||||
(set! (-> *texture-relocate-later* memcpy) #f)
|
||||
(define *texture-page-dir* #f)
|
||||
|
||||
(deftype adgif-shader (structure)
|
||||
(
|
||||
;;(quad UNKNOWN 5 :offset-assert 0)
|
||||
;;(prims UNKNOWN 10 :offset-assert 0)
|
||||
(tex0 uint64 :offset-assert 0)
|
||||
(tex1 uint64 :offset 16)
|
||||
(miptbp1 uint64 :offset 32)
|
||||
(clamp uint64 :offset 48)
|
||||
(clamp-reg uint64 :offset 56)
|
||||
(alpha uint64 :offset 64)
|
||||
(link-test uint32 :offset 8)
|
||||
(texture-id uint32 :offset 24)
|
||||
(next uint32 :offset 40)
|
||||
(_pad uint64)
|
||||
)
|
||||
:method-count-assert 9
|
||||
:size-assert #x50
|
||||
:flag-assert #x900000050
|
||||
)
|
||||
|
||||
(deftype adgif-shader-array (inline-array-class)
|
||||
()
|
||||
:method-count-assert 9
|
||||
:size-assert #x10
|
||||
:flag-assert #x900000010
|
||||
)
|
||||
(set! (-> adgif-shader-array heap-base) 80)
|
||||
|
||||
(define *sky-base-vram-word* 0)
|
||||
(define *sky-base-block* 0)
|
||||
(define *sky-base-page* 0)
|
||||
(define *depth-cue-base-vram-word* 0)
|
||||
(define *depth-cue-base-block* 0)
|
||||
(define *depth-cue-base-page* 0)
|
||||
(define *eyes-base-vram-word* 0)
|
||||
(define *eyes-base-block* 0)
|
||||
(define *eyes-base-page* 0)
|
||||
(define *ocean-base-vram-word* 0)
|
||||
(define *ocean-base-block* 0)
|
||||
(define *ocean-base-page* 0)
|
||||
|
||||
@@ -5,3 +5,378 @@
|
||||
;; name in dgo: level-h
|
||||
;; dgos: GAME, ENGINE
|
||||
|
||||
;; Information related to visibility data for a level.
|
||||
;; Unclear why there are 8 of these per level.
|
||||
;; Perhaps there are up to 8 "chunks" of the visibility loaded at a single time?
|
||||
;; The full visibility data lives on the IOP.
|
||||
(deftype level-vis-info (basic)
|
||||
((level basic :offset-assert 4)
|
||||
(from-level basic :offset-assert 8)
|
||||
(from-bsp basic :offset-assert 12)
|
||||
(flags uint32 :offset-assert 16)
|
||||
(length uint32 :offset-assert 20)
|
||||
(allocated-length uint32 :offset-assert 24)
|
||||
(dictionary-length uint32 :offset-assert 28)
|
||||
(dictionary uint32 :offset-assert 32)
|
||||
(string-block uint32 :offset-assert 36)
|
||||
(ramdisk uint32 :offset-assert 40)
|
||||
(vis-bits uint32 :offset-assert 44)
|
||||
(current-vis-string uint32 :offset-assert 48)
|
||||
(vis-string uint8 :dynamic :offset-assert 52)
|
||||
)
|
||||
:method-count-assert 9
|
||||
:size-assert #x34
|
||||
:flag-assert #x900000034
|
||||
)
|
||||
|
||||
|
||||
(defmethod asize-of level-vis-info ((obj level-vis-info))
|
||||
"Get the size of a level-vis-info in memory"
|
||||
(the-as int (+ (-> level-vis-info size) (-> obj dictionary-length)))
|
||||
)
|
||||
|
||||
;; Per level information related to how to load the level.
|
||||
;; These are stored in level-info.gc
|
||||
(deftype level-load-info (basic)
|
||||
((name-list basic 3 :offset-assert 4)
|
||||
(index int32 :offset-assert 16) ;; the level number (starting with 1?)
|
||||
(name basic :offset 4) ;; symbol with full name, like "misty"
|
||||
(visname basic :offset 8) ;; symbol with vis file name, like "misty-vis"
|
||||
(nickname basic :offset 12) ;; 3 letter name for DGO, like "mis"
|
||||
(packages pair :offset-assert 20) ;; list of symbols, usually empty or the level name
|
||||
(sound-banks pair :offset-assert 24) ;; require sound bank files (list of symbols)
|
||||
(music-bank basic :offset-assert 28) ;; name of level music
|
||||
(ambient-sounds pair :offset-assert 32) ;; always empty list.
|
||||
(mood basic :offset-assert 36) ;; mood object name
|
||||
(mood-func basic :offset-assert 40) ;; mood update function name
|
||||
(ocean basic :offset-assert 44) ;; ocean map object
|
||||
(sky basic :offset-assert 48) ;; boolean to enable sky
|
||||
(sun-fade float :offset-assert 52) ;; sun/sky setting
|
||||
(continues pair :offset-assert 56) ;; list of checkpoints
|
||||
(tasks pair :offset-assert 60) ;; list of boxed integers for tasks
|
||||
(priority int32 :offset-assert 64) ;; either 100 or 200
|
||||
(load-commands pair :offset-assert 68) ;; ??
|
||||
(alt-load-commands pair :offset-assert 72) ;; ??
|
||||
(bsp-mask uint64 :offset-assert 80) ;; ??
|
||||
(bsphere sphere :offset-assert 88) ;; boundings sphere of level?
|
||||
(buzzer int32 :offset-assert 92) ;; which task is the scout fly?
|
||||
(bottom-height float :offset-assert 96) ;; meters
|
||||
(run-packages pair :offset-assert 100) ;; possibly unused?
|
||||
(prev-level basic :offset-assert 104)
|
||||
(next-level basic :offset-assert 108)
|
||||
(wait-for-load basic :offset-assert 112)
|
||||
)
|
||||
:method-count-assert 9
|
||||
:size-assert #x74
|
||||
:flag-assert #x900000074
|
||||
)
|
||||
|
||||
(deftype login-state (basic)
|
||||
((state int32 :offset-assert 4)
|
||||
(pos uint32 :offset-assert 8)
|
||||
(elts uint32 :offset-assert 12)
|
||||
(elt uint32 16 :offset-assert 16)
|
||||
)
|
||||
:method-count-assert 9
|
||||
:size-assert #x50
|
||||
:flag-assert #x900000050
|
||||
)
|
||||
|
||||
;; Per level-buffer info about the current loaded level.
|
||||
(deftype level (basic)
|
||||
((name basic :offset-assert 4)
|
||||
(load-name basic :offset-assert 8)
|
||||
(nickname basic :offset-assert 12)
|
||||
(index int32 :offset-assert 16)
|
||||
(status basic :offset-assert 20)
|
||||
(other basic :offset-assert 24)
|
||||
(heap kheap :inline :offset-assert 32)
|
||||
(bsp basic :offset-assert 48)
|
||||
(art-group basic :offset-assert 52)
|
||||
(info basic :offset-assert 56)
|
||||
(texture-page basic 9 :offset-assert 60)
|
||||
(loaded-texture-page basic 16 :offset-assert 96)
|
||||
(loaded-texture-page-count int32 :offset-assert 160)
|
||||
(foreground-sink-group dma-foreground-sink-group 3 :inline :offset-assert 176) ;; inline basic, todo check stride.
|
||||
(foreground-draw-engine basic 3 :offset-assert 272)
|
||||
(entity basic :offset-assert 284)
|
||||
(ambient basic :offset-assert 288)
|
||||
(closest-object basic 9 :offset-assert 292)
|
||||
(upload-size uint32 9 :offset-assert 328)
|
||||
(level-distance float :offset-assert 364) ; meters
|
||||
(inside-sphere? basic :offset-assert 368)
|
||||
(inside-boxes? basic :offset-assert 372)
|
||||
(display? basic :offset-assert 376)
|
||||
(meta-inside? basic :offset-assert 380)
|
||||
(mood basic :offset-assert 384)
|
||||
(mood-func basic :offset-assert 388)
|
||||
(vis-bits uint32 :offset-assert 392)
|
||||
(all-visible? basic :offset-assert 396)
|
||||
(force-all-visible? basic :offset-assert 400)
|
||||
(linking basic :offset-assert 404)
|
||||
(vis-info level-vis-info 8 :offset-assert 408)
|
||||
(vis-self-index int32 :offset-assert 440)
|
||||
(vis-adj-index int32 :offset-assert 444)
|
||||
(vis-buffer uint8 2048 :offset-assert 448)
|
||||
(mem-usage-block basic :offset-assert 2496)
|
||||
(mem-usage int32 :offset-assert 2500)
|
||||
(code-memory-start uint32 :offset-assert 2504)
|
||||
(code-memory-end uint32 :offset-assert 2508)
|
||||
(texture-mask uint32 9 :offset-assert 2512)
|
||||
(force-inside? basic :offset-assert 2548)
|
||||
(pad uint8 56)
|
||||
)
|
||||
:method-count-assert 29
|
||||
:size-assert #xa30
|
||||
:flag-assert #x1d00000a30
|
||||
(: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)
|
||||
(dummy-22 () none 22)
|
||||
(dummy-23 () none 23)
|
||||
(dummy-24 () none 24)
|
||||
(dummy-25 () none 25)
|
||||
(dummy-26 () none 26)
|
||||
(dummy-27 () none 27)
|
||||
(dummy-28 () none 28)
|
||||
)
|
||||
)
|
||||
|
||||
(declare-type entity-links structure)
|
||||
|
||||
;; Main *level* object.
|
||||
;; There are actually three levels. level0 and level1 correspond to the actual buffered levels
|
||||
;; The level-default seems to be a fake level that can possibly be used by renderers that
|
||||
;; don't belong to any level, for example to render Jak.
|
||||
(deftype level-group (basic)
|
||||
((length int32 :offset-assert 4)
|
||||
(unknown-field-1 basic :offset-assert 8)
|
||||
(unknown-field-2 basic :offset-assert 12)
|
||||
(entity-link entity-links :offset 16) ;; not sure what's going on here
|
||||
(border? basic :offset-assert 20)
|
||||
(vis? basic :offset-assert 24)
|
||||
(want-level basic :offset-assert 28)
|
||||
(receiving-level basic :offset-assert 32)
|
||||
(load-commands pair :offset-assert 36)
|
||||
(play? basic :offset-assert 40)
|
||||
;; there's something? from 40 -> 96.
|
||||
(hack-pad uint8 :offset 90)
|
||||
|
||||
;(level level 3 :inline :offset-assert 96)
|
||||
;(data level 3 :inline :offset-assert 100)
|
||||
(level0 level :inline :offset-assert 96) ;; inline basic
|
||||
(level1 level :inline :offset-assert 2704) ;; inline basic
|
||||
(level-default level :inline :offset-assert 5312) ;; inline basic
|
||||
(level level 3 :inline :offset 96)
|
||||
(pad uint32)
|
||||
)
|
||||
:method-count-assert 27
|
||||
:size-assert #x1ef4
|
||||
:flag-assert #x1b00001ef4
|
||||
(: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)
|
||||
(dummy-22 () none 22)
|
||||
(dummy-23 () none 23)
|
||||
(dummy-24 () none 24)
|
||||
(dummy-25 () none 25)
|
||||
(dummy-26 () none 26)
|
||||
)
|
||||
)
|
||||
|
||||
(define-extern *level* level-group)
|
||||
;; OpenGOAL doesn not yet support setting fields to arrays in statics.
|
||||
#|
|
||||
(if (zero? *level*)
|
||||
(set! *level*
|
||||
(new 'static 'level-group
|
||||
:length 2
|
||||
:unknown-field-1 #f
|
||||
:unknown-field-2 #f
|
||||
:entity-link #f
|
||||
:border? #f
|
||||
:want-level #f
|
||||
:load-commands '()
|
||||
:play? #f
|
||||
:level0
|
||||
(new 'static 'level
|
||||
:name #f
|
||||
:status 'inactive
|
||||
:foreground-sink-group
|
||||
(new 'static 'inline-array 'dma-foreground-sink-group 3
|
||||
(new 'static 'dma-foreground-sink-group
|
||||
:sink (new 'static 'array 'dma-foreground-sink 3
|
||||
(new 'static 'dma-foreground-sink :bucket 10)
|
||||
(new 'static 'generic-dma-foreground-sink
|
||||
:bucket 11 :foreground-output-bucket 1
|
||||
)
|
||||
0)
|
||||
)
|
||||
(new 'static 'dma-foreground-sink-group
|
||||
:sink (new 'static 'array 'dma-foreground-sink 3
|
||||
(new 'static 'dma-foreground-sink
|
||||
:bucket 49
|
||||
:foreground-texture-page 1
|
||||
)
|
||||
(new 'static 'generic-dma-foreground-sink :
|
||||
bucket 50 :foreground-texture-page 1
|
||||
:foreground-output-bucket 1)
|
||||
0)
|
||||
)
|
||||
(new 'static 'dma-foreground-sink-group
|
||||
:sink (new 'static 'array 'dma-foreground-sink 3
|
||||
(new 'static 'dma-foreground-sink
|
||||
:bucket 58
|
||||
:foreground-texture-page 2
|
||||
)
|
||||
(new 'static 'generic-dma-foreground-sink
|
||||
:bucket 59
|
||||
:foreground-texture-page 2
|
||||
:foreground-output-bucket 1
|
||||
)
|
||||
0)
|
||||
)
|
||||
)
|
||||
:inside-sphere? #f
|
||||
:inside-boxes? #f
|
||||
:force-inside? #f
|
||||
)
|
||||
:level1
|
||||
(new 'static 'level
|
||||
:name #f
|
||||
:index 1
|
||||
:status 'inactive
|
||||
:foreground-sink-group
|
||||
(new 'static 'inline-array 'dma-foreground-sink-group 3
|
||||
(new 'static 'dma-foreground-sink-group
|
||||
:sink (new 'static 'array 'dma-foreground-sink 3
|
||||
(new 'static 'dma-foreground-sink
|
||||
:bucket 17
|
||||
:foreground-texture-level 1
|
||||
)
|
||||
(new 'static 'generic-dma-foreground-sink
|
||||
:bucket 18
|
||||
:foreground-texture-level 1
|
||||
:foreground-output-bucket 1
|
||||
)
|
||||
0)
|
||||
)
|
||||
(new 'static 'dma-foreground-sink-group
|
||||
:sink (new 'static 'array 'dma-foreground-sink 3
|
||||
(new 'static 'dma-foreground-sink
|
||||
:bucket 52
|
||||
:foreground-texture-page 1
|
||||
:foreground-texture-level 1
|
||||
)
|
||||
(new 'static 'generic-dma-foreground-sink
|
||||
:bucket 53
|
||||
:foreground-texture-page 1
|
||||
:foreground-texture-level 1
|
||||
:foreground-output-bucket 1
|
||||
)
|
||||
0
|
||||
)
|
||||
)
|
||||
(new 'static 'dma-foreground-sink-group
|
||||
:sink (new 'static 'array 'dma-foreground-sink 3
|
||||
(new 'static 'dma-foreground-sink
|
||||
:bucket 61
|
||||
:foreground-texture-page 2
|
||||
:foreground-texture-level 1
|
||||
)
|
||||
(new 'static 'generic-dma-foreground-sink
|
||||
:bucket 62
|
||||
:foreground-texture-page 2
|
||||
:foreground-texture-level 1
|
||||
:foreground-output-bucket 1
|
||||
)
|
||||
0)
|
||||
)
|
||||
)
|
||||
:inside-sphere? #f
|
||||
:inside-boxes? #f
|
||||
:force-inside? #f
|
||||
)
|
||||
:level-default
|
||||
(new 'static 'level
|
||||
:name 'default
|
||||
:index 2
|
||||
:status 'reserved
|
||||
:foreground-sink-group
|
||||
(new 'static 'inline-array 'dma-foreground-sink-group 3
|
||||
(new 'static 'dma-foreground-sink-group
|
||||
:sink (new 'static 'array 'dma-foreground-sink 3
|
||||
(new 'static 'dma-foreground-sink
|
||||
:bucket 45
|
||||
:foreground-texture-level 2
|
||||
)
|
||||
(new 'static 'generic-dma-foreground-sink
|
||||
:bucket 46
|
||||
:foreground-texture-level 2
|
||||
:foreground-output-bucket 1
|
||||
)
|
||||
0)
|
||||
)
|
||||
(new 'static 'dma-foreground-sink-group :
|
||||
sink (new 'static 'array 'dma-foreground-sink 3
|
||||
(new 'static 'dma-foreground-sink
|
||||
:bucket 55
|
||||
:foreground-texture-page 1
|
||||
:foreground-texture-level 2
|
||||
)
|
||||
(new 'static 'generic-dma-foreground-sink
|
||||
:bucket 56
|
||||
:foreground-texture-page 1
|
||||
:foreground-texture-level 2
|
||||
:foreground-output-bucket 1
|
||||
)
|
||||
0)
|
||||
)
|
||||
(new 'static 'dma-foreground-sink-group
|
||||
:sink (new 'static 'array 'dma-foreground-sink 3
|
||||
(new 'static 'dma-foreground-sink
|
||||
:bucket 58
|
||||
:foreground-texture-page 2
|
||||
:foreground-texture-level 2
|
||||
)
|
||||
(new 'static 'generic-dma-foreground-sink
|
||||
:bucket 59
|
||||
:foreground-texture-page 2
|
||||
:foreground-texture-level 2
|
||||
:foreground-output-bucket 1
|
||||
)
|
||||
0
|
||||
)
|
||||
)
|
||||
)
|
||||
:inside-sphere? #f
|
||||
:inside-boxes? #f
|
||||
:force-inside? #f
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|#
|
||||
|
||||
|
||||
@@ -294,7 +294,7 @@
|
||||
|
||||
;; Vector of 4 floats. Shortened to "vector" because it is commonly used.
|
||||
(deftype vector (structure)
|
||||
((data float 4 :offset-assert 0)
|
||||
((data float 4 :do-not-decompile :offset-assert 0)
|
||||
(x float :offset 0)
|
||||
(y float :offset 4)
|
||||
(z float :offset 8)
|
||||
|
||||
Reference in New Issue
Block a user