mirror of
https://github.com/open-goal/jak-project
synced 2026-05-26 23:47:57 -04:00
d52739226c
A few issues: - lwidea's fr3 is getting loaded and unloaded all the time - the debug line drawing clipping is wrong (doesn't seem wrong in pcsx2, so I think this is on us) - nothing actually using vis data yet - at a large distance, our view frustum culling seems slightly too aggressive (might be that viewport scissoring is wrong) - in the city, things seem darker as you move away. unclear how this is happening (fog?)
540 lines
19 KiB
Common Lisp
Vendored
Generated
540 lines
19 KiB
Common Lisp
Vendored
Generated
;;-*-Lisp-*-
|
|
(in-package goal)
|
|
|
|
;; definition for function unpack-comp-rle
|
|
;; WARN: Return type mismatch (pointer int8) vs none.
|
|
(defun unpack-comp-rle ((arg0 (pointer int8)) (arg1 (pointer int8)))
|
|
(local-vars (v1-2 int) (v1-3 uint))
|
|
(nop!)
|
|
(loop
|
|
(loop
|
|
(set! v1-2 (-> arg1 0))
|
|
(set! arg1 (&-> arg1 1))
|
|
(b! (<= v1-2 0) cfg-5 :delay (nop!))
|
|
(let ((a2-0 (-> arg1 0)))
|
|
(set! arg1 (&-> arg1 1))
|
|
(label cfg-3)
|
|
(nop!)
|
|
(nop!)
|
|
(nop!)
|
|
(nop!)
|
|
(set! (-> arg0 0) a2-0)
|
|
)
|
|
(set! arg0 (&-> arg0 1))
|
|
(b! (> v1-2 0) cfg-3 :delay (set! v1-2 (+ v1-2 -1)))
|
|
)
|
|
(label cfg-5)
|
|
(b! (zero? v1-2) cfg-8 :delay (set! v1-3 (the-as uint (- v1-2))))
|
|
(label cfg-6)
|
|
(let ((a2-1 (-> arg1 0)))
|
|
(set! arg1 (&-> arg1 1))
|
|
(nop!)
|
|
(nop!)
|
|
(set! (-> arg0 0) a2-1)
|
|
)
|
|
(+! v1-3 -1)
|
|
(b! (> (the-as int v1-3) 0) cfg-6 :delay (set! arg0 (&-> arg0 1)))
|
|
)
|
|
(label cfg-8)
|
|
(none)
|
|
)
|
|
|
|
;; definition of type huf-dictionary-node
|
|
(deftype huf-dictionary-node (structure)
|
|
((zero uint16 :offset-assert 0)
|
|
(one uint16 :offset-assert 2)
|
|
)
|
|
:method-count-assert 9
|
|
:size-assert #x4
|
|
:flag-assert #x900000004
|
|
)
|
|
|
|
;; definition for method 3 of type huf-dictionary-node
|
|
(defmethod inspect huf-dictionary-node ((obj huf-dictionary-node))
|
|
(when (not obj)
|
|
(set! obj obj)
|
|
(goto cfg-4)
|
|
)
|
|
(format #t "[~8x] ~A~%" obj 'huf-dictionary-node)
|
|
(format #t "~1Tzero: ~D~%" (-> obj zero))
|
|
(format #t "~1Tone: ~D~%" (-> obj one))
|
|
(label cfg-4)
|
|
obj
|
|
)
|
|
|
|
;; definition for function unpack-comp-huf
|
|
;; WARN: Return type mismatch int vs none.
|
|
(defun unpack-comp-huf ((arg0 (pointer uint8)) (arg1 (pointer uint8)) (arg2 uint) (arg3 huf-dictionary-node))
|
|
(local-vars (t1-1 uint) (t3-2 (pointer uint16)))
|
|
(nop!)
|
|
(let ((t1-0 (-> arg3 zero))
|
|
(a2-1 (+ arg2 -1028))
|
|
(t2-0 (-> arg3 one))
|
|
)
|
|
(nop!)
|
|
(label cfg-1)
|
|
(let ((v1-4 128))
|
|
(nop!)
|
|
(let ((t0-0 (-> arg1 0)))
|
|
(set! arg1 (&-> arg1 1))
|
|
(label cfg-2)
|
|
(let ((t3-0 (logand t0-0 v1-4)))
|
|
(shift-arith-right-32 v1-4 v1-4 1)
|
|
(b! (zero? t3-0) cfg-4 :delay (set! t1-1 t1-0))
|
|
)
|
|
)
|
|
(nop!)
|
|
(set! t1-1 t2-0)
|
|
(label cfg-4)
|
|
(let ((t2-1 (+ t1-1 -256)))
|
|
(let ((t3-1 (* t1-1 4)))
|
|
(b! (< (the-as int t2-1) 0) cfg-8 :delay (set! t3-2 (the-as (pointer uint16) (+ t3-1 a2-1))))
|
|
)
|
|
(b! (zero? t2-1) cfg-10 :delay (set! t1-0 (-> t3-2 0)))
|
|
)
|
|
(b! (nonzero? v1-4) cfg-2 :delay (set! t2-0 (-> t3-2 1)))
|
|
(b! #t cfg-1 :delay (nop!))
|
|
(label cfg-8)
|
|
(set! (-> arg0 0) t1-1)
|
|
(set! arg0 (&-> arg0 1))
|
|
(nop!)
|
|
(set! t1-0 (-> arg3 zero))
|
|
(b! (nonzero? v1-4) cfg-2 :delay (set! t2-0 (-> arg3 one)))
|
|
)
|
|
)
|
|
(b! #t cfg-1 :delay (nop!))
|
|
(label cfg-10)
|
|
(nop!)
|
|
(nop!)
|
|
0
|
|
(none)
|
|
)
|
|
|
|
;; definition for function unpack-comp-lzo
|
|
;; WARN: Return type mismatch int vs none.
|
|
(defun unpack-comp-lzo ((arg0 (pointer uint8)) (arg1 (pointer uint8)))
|
|
0
|
|
(let ((v1-1 arg0))
|
|
(b! (>= (the-as uint 17) (-> arg1 0)) cfg-5 :delay #f)
|
|
(let ((a2-4 (the-as int (+ (-> arg1 0) -17))))
|
|
(set! arg1 (&-> arg1 1))
|
|
(b! (< a2-4 4) cfg-41)
|
|
(until (<= a2-4 0)
|
|
(set! (-> arg0 0) (-> arg1 0))
|
|
(set! arg0 (&-> arg0 1))
|
|
(set! arg1 (&-> arg1 1))
|
|
(+! a2-4 -1)
|
|
)
|
|
(b! #t cfg-15 :delay (nop!))
|
|
(label cfg-5)
|
|
(b! #t cfg-45 :delay (nop!))
|
|
(label cfg-6)
|
|
(let ((a2-6 (-> arg1 0)))
|
|
(set! arg1 (&-> arg1 1))
|
|
(b! (>= (the-as int a2-6) 16) cfg-18)
|
|
(b! (nonzero? a2-6) cfg-12 :delay (empty-form))
|
|
(while (zero? (-> arg1 0))
|
|
(+! a2-6 255)
|
|
(set! arg1 (&-> arg1 1))
|
|
)
|
|
(set! a2-6 (+ (-> arg1 0) 15 a2-6))
|
|
(set! arg1 (&-> arg1 1))
|
|
(label cfg-12)
|
|
(set! (-> arg0 0) (-> arg1 0))
|
|
(set! (-> arg0 1) (-> arg1 1))
|
|
(set! (-> arg0 2) (-> arg1 2))
|
|
(set! arg0 (&-> arg0 3))
|
|
(set! arg1 (&-> arg1 3))
|
|
(until (<= (the-as int a2-6) 0)
|
|
(set! (-> arg0 0) (-> arg1 0))
|
|
(set! arg0 (&-> arg0 1))
|
|
(set! arg1 (&-> arg1 1))
|
|
(+! a2-6 -1)
|
|
)
|
|
(label cfg-15)
|
|
(set! a2-6 (-> arg1 0))
|
|
(set! arg1 (&-> arg1 1))
|
|
(b! (>= (the-as int a2-6) 16) cfg-18)
|
|
(let ((a2-10 (&- (&- (&-> arg0 -2049) (the-as uint (/ (the-as int a2-6) 4))) (the-as uint (* (-> arg1 0) 4)))))
|
|
(set! arg1 (&-> arg1 1))
|
|
(set! (-> arg0 0) (-> a2-10 0))
|
|
(set! (-> arg0 1) (-> a2-10 1))
|
|
(set! (-> arg0 2) (-> a2-10 2))
|
|
(set! arg0 (&-> arg0 3))
|
|
(&-> a2-10 2)
|
|
)
|
|
(b! #t cfg-39 :delay (nop!))
|
|
(b! #t cfg-43 :delay (nop!))
|
|
(label cfg-18)
|
|
(b! (< (the-as int a2-6) 64) cfg-20)
|
|
(let ((a3-23
|
|
(&- (&- (&-> arg0 -1) (the-as uint (logand (/ (the-as int a2-6) 4) 7))) (the-as uint (* (-> arg1 0) 8)))
|
|
)
|
|
)
|
|
(set! arg1 (&-> arg1 1))
|
|
(let ((a2-13 (+ (/ (the-as int a2-6) 32) -1)))
|
|
(b! #t cfg-36 :delay (nop!))
|
|
(label cfg-20)
|
|
(b! (< (the-as int a2-6) 32) cfg-27)
|
|
(set! a2-13 (logand a2-6 31))
|
|
(b! (nonzero? a2-13) cfg-26 :delay (empty-form))
|
|
(b! #t cfg-24 :delay (nop!))
|
|
(label cfg-23)
|
|
(+! a2-13 255)
|
|
(set! arg1 (&-> arg1 1))
|
|
(label cfg-24)
|
|
(b! (zero? (-> arg1 0)) cfg-23 :delay (nop!))
|
|
(set! a2-13 (+ (-> arg1 0) 31 a2-13))
|
|
(set! arg1 (&-> arg1 1))
|
|
(label cfg-26)
|
|
(set! a3-23 (&- (&-> arg0 -1) (the-as uint (+ (shr (-> arg1 0) 2) (* (-> arg1 1) 64)))))
|
|
(set! arg1 (&-> arg1 2))
|
|
(b! #t cfg-36 :delay (nop!))
|
|
(label cfg-27)
|
|
(b! (< (the-as int a2-6) 16) cfg-35)
|
|
(let ((a3-32 (&- arg0 (the-as uint (shl (logand a2-6 8) 11)))))
|
|
(set! a2-13 (logand a2-6 7))
|
|
(b! (nonzero? a2-13) cfg-33 :delay (empty-form))
|
|
(b! #t cfg-31 :delay (nop!))
|
|
(label cfg-30)
|
|
(+! a2-13 255)
|
|
(set! arg1 (&-> arg1 1))
|
|
(label cfg-31)
|
|
(b! (zero? (-> arg1 0)) cfg-30 :delay (nop!))
|
|
(set! a2-13 (+ (-> arg1 0) 7 a2-13))
|
|
(set! arg1 (&-> arg1 1))
|
|
(label cfg-33)
|
|
(let ((a3-33 (&- a3-32 (the-as uint (+ (shr (-> arg1 0) 2) (* (-> arg1 1) 64))))))
|
|
(set! arg1 (&-> arg1 2))
|
|
(b! (= a3-33 arg0) cfg-47 :delay (nop!))
|
|
(set! a3-23 (&-> a3-33 -16384))
|
|
)
|
|
)
|
|
(b! #t cfg-36 :delay (nop!))
|
|
(label cfg-35)
|
|
(let ((a2-16 (&- (&- (&-> arg0 -1) (the-as uint (/ (the-as int a2-6) 4))) (the-as uint (* (-> arg1 0) 4)))))
|
|
(set! arg1 (&-> arg1 1))
|
|
(set! (-> arg0 0) (-> a2-16 0))
|
|
(set! (-> arg0 1) (-> a2-16 1))
|
|
(set! arg0 (&-> arg0 2))
|
|
(&-> a2-16 1)
|
|
)
|
|
(b! #t cfg-39 :delay (nop!))
|
|
(label cfg-36)
|
|
(set! (-> arg0 0) (-> a3-23 0))
|
|
(set! (-> arg0 1) (-> a3-23 1))
|
|
(set! arg0 (&-> arg0 2))
|
|
(let ((a3-39 (&-> a3-23 2)))
|
|
(until (<= (the-as int a2-13) 0)
|
|
(set! (-> arg0 0) (-> a3-39 0))
|
|
(set! arg0 (&-> arg0 1))
|
|
(set! a3-39 (&-> a3-39 1))
|
|
(+! a2-13 -1)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(label cfg-39)
|
|
(set! a2-4 (the-as int (logand (-> arg1 -2) 3)))
|
|
(b! (zero? (the-as uint a2-4)) cfg-45 :delay (nop!))
|
|
(until (<= a2-4 0)
|
|
(label cfg-41)
|
|
(set! (-> arg0 0) (-> arg1 0))
|
|
(set! arg0 (&-> arg0 1))
|
|
(set! arg1 (&-> arg1 1))
|
|
(set! a2-4 (the-as int (+ (the-as uint a2-4) -1)))
|
|
)
|
|
(set! a2-6 (-> arg1 0))
|
|
)
|
|
)
|
|
(set! arg1 (&-> arg1 1))
|
|
(label cfg-43)
|
|
(b! #t cfg-18 :delay (nop!))
|
|
(label cfg-45)
|
|
(b! #t cfg-6 :delay (nop!))
|
|
(label cfg-47)
|
|
(&- arg0 (the-as uint v1-1))
|
|
)
|
|
(none)
|
|
)
|
|
|
|
;; definition for method 16 of type level
|
|
;; INFO: Used lq/sq
|
|
;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 138]
|
|
(defmethod update-vis! level ((obj level) (vis-info level-vis-info) (unused uint) (in-bsp-vis-string (pointer uint8)))
|
|
(local-vars (t0-3 uint128) (extra-vis-length int) (extra-vis-dest (pointer int8)))
|
|
(let* ((cam-leaf-idx (-> vis-info from-bsp current-leaf-idx))
|
|
(curr-vis-string-offset (-> vis-info current-vis-string))
|
|
(desired-vis-string-offset (-> vis-info vis-string cam-leaf-idx))
|
|
)
|
|
0
|
|
(+ #x70000000 0)
|
|
(+ 2048 #x70000000)
|
|
(b! (!= curr-vis-string-offset desired-vis-string-offset) cfg-8 :delay (empty-form))
|
|
(b! (not (logtest? (vis-info-flag loading) (-> vis-info flags))) cfg-6 :delay (empty-form))
|
|
(if (check-busy *ramdisk-rpc*)
|
|
(return #f)
|
|
)
|
|
(logclear! (-> vis-info flags) (vis-info-flag loading))
|
|
(let ((vis-buf (the-as (pointer integer) (-> obj vis-buffer))))
|
|
(b! #t cfg-16 :delay (nop!))
|
|
(label cfg-6)
|
|
(return #t)
|
|
(label cfg-8)
|
|
(when (logtest? (vis-info-flag loading) (-> vis-info flags))
|
|
(if (check-busy *ramdisk-rpc*)
|
|
(return #f)
|
|
)
|
|
(logclear! (-> vis-info flags) (vis-info-flag loading))
|
|
)
|
|
(set! (-> vis-info current-vis-string) desired-vis-string-offset)
|
|
(b! (logtest? (vis-info-flag in-iop) (-> vis-info flags)) cfg-15 :delay (empty-form))
|
|
(set! vis-buf (&+ in-bsp-vis-string desired-vis-string-offset))
|
|
(b! #t cfg-16 :delay (nop!))
|
|
(label cfg-15)
|
|
(format 0 "ERROR: ramdisk vis for level ~A, this is not supported~%" (-> obj name))
|
|
(let ((v0-1 #f))
|
|
(b! #t cfg-49 :delay (nop!))
|
|
(label cfg-16)
|
|
(let ((lower-flag-bits (the-as int (logand (vis-info-flag
|
|
dummy0
|
|
dummy1
|
|
dummy2
|
|
dummy3
|
|
dummy4
|
|
dummy5
|
|
dummy6
|
|
dummy7
|
|
dummy8
|
|
dummy9
|
|
dummy10
|
|
dummy11
|
|
dummy12
|
|
dummy13
|
|
dummy14
|
|
dummy15
|
|
dummy16
|
|
dummy17
|
|
dummy18
|
|
dummy19
|
|
dummy20
|
|
dummy21
|
|
dummy22
|
|
dummy23
|
|
dummy24
|
|
dummy25
|
|
dummy26
|
|
dummy27
|
|
dummy28
|
|
)
|
|
(-> vis-info flags)
|
|
)
|
|
)
|
|
)
|
|
(spad-start (&-> (the-as (pointer int8) #x70000000) 0))
|
|
(spad-end (the-as (pointer int8) (+ 2048 #x70000000)))
|
|
(list-len (-> obj bsp visible-list-length))
|
|
)
|
|
(when (zero? (the-as vis-info-flag lower-flag-bits))
|
|
(let ((qwc (/ (+ list-len 15) 16)))
|
|
(dotimes (a0-19 qwc)
|
|
(set! (-> (the-as (pointer int128) (&+ spad-start (* a0-19 16)))) 0)
|
|
)
|
|
)
|
|
(mem-copy! spad-start (the-as (pointer uint8) vis-buf) list-len)
|
|
)
|
|
(while (nonzero? lower-flag-bits)
|
|
(let ((comp-mode (logand lower-flag-bits 7)))
|
|
(cond
|
|
((= comp-mode 1)
|
|
(let ((qwc2 (/ (+ list-len 15) 16)))
|
|
(dotimes (a0-23 qwc2)
|
|
(set! (-> (the-as (pointer int128) (&+ spad-start (* a0-23 16)))) 0)
|
|
)
|
|
)
|
|
(set! extra-vis-length (-> obj bsp extra-vis-list-length))
|
|
(set! extra-vis-dest (&+ spad-start (- list-len extra-vis-length)))
|
|
(let ((extra-vis-in (unpack-vis (-> obj bsp drawable-trees) spad-start (the-as (pointer int8) vis-buf))))
|
|
(dotimes (extra-vis-idx extra-vis-length)
|
|
(let ((vis-byte (-> extra-vis-in 0)))
|
|
(set! extra-vis-in (&-> extra-vis-in 1))
|
|
(set! (-> extra-vis-dest 0) vis-byte)
|
|
)
|
|
(set! extra-vis-dest (&-> extra-vis-dest 1))
|
|
)
|
|
)
|
|
#f
|
|
)
|
|
((= comp-mode 2)
|
|
(unpack-comp-rle spad-start (the-as (pointer int8) vis-buf))
|
|
)
|
|
((= comp-mode 3)
|
|
(unpack-comp-huf
|
|
(the-as (pointer uint8) spad-start)
|
|
(the-as (pointer uint8) vis-buf)
|
|
(-> vis-info dictionary)
|
|
(the-as huf-dictionary-node (+ (-> vis-info dictionary) (-> vis-info dictionary-length) -4))
|
|
)
|
|
)
|
|
((= comp-mode 4)
|
|
(unpack-comp-lzo (the-as (pointer uint8) spad-start) (the-as (pointer uint8) vis-buf))
|
|
)
|
|
)
|
|
)
|
|
(set! vis-buf spad-start)
|
|
(set! spad-start spad-end)
|
|
(set! spad-end (the-as (pointer int8) vis-buf))
|
|
(shift-arith-right-32 lower-flag-bits lower-flag-bits 3)
|
|
)
|
|
(let ((vis-ptr (the-as (pointer uint8) vis-buf))
|
|
(all-vis-ptr (the-as (pointer uinteger) (-> obj bsp all-visible-list)))
|
|
(vis-error #f)
|
|
)
|
|
(dotimes (s0-1 list-len)
|
|
(when (!= (logand (-> vis-ptr 0) (-> (the-as (pointer uint8) all-vis-ptr) 0)) (-> vis-ptr 0))
|
|
(format
|
|
#t
|
|
"ERROR: illegal vis bits set [byte ~X] ~X -> ~X~%"
|
|
s0-1
|
|
(-> vis-ptr 0)
|
|
(-> (the-as (pointer uint8) all-vis-ptr) 0)
|
|
)
|
|
(set! vis-error #t)
|
|
)
|
|
(set! vis-ptr (&-> vis-ptr 1))
|
|
(set! all-vis-ptr (&+ (the-as (pointer uint16) all-vis-ptr) 1))
|
|
)
|
|
(when vis-error
|
|
(format
|
|
#t
|
|
"src = #x~x dest = #x~x ~s ~s~%"
|
|
vis-buf
|
|
(-> vis-info vis-bits)
|
|
(-> vis-info level)
|
|
(-> vis-info from-level)
|
|
)
|
|
(format #t "leaf-index = ~d~%" (-> vis-info from-bsp current-leaf-idx))
|
|
0
|
|
)
|
|
)
|
|
(let ((unpacked-vis-ptr vis-buf)
|
|
(final-vis-ptr (the-as object (-> vis-info vis-bits)))
|
|
(all-vis (the-as (pointer uinteger) (-> obj bsp all-visible-list)))
|
|
(vis-qwc (/ (+ list-len 15) 16))
|
|
)
|
|
(dotimes (a3-6 vis-qwc)
|
|
(let ((t0-2 (-> (the-as (pointer uint128) unpacked-vis-ptr) 0))
|
|
(t1-1 (-> (the-as (pointer uint128) all-vis) 0))
|
|
)
|
|
(.pand t0-3 t0-2 t1-1)
|
|
)
|
|
(set! (-> (the-as (pointer uint128) final-vis-ptr) 0) t0-3)
|
|
(set! final-vis-ptr (+ (the-as uint final-vis-ptr) 16))
|
|
(set! unpacked-vis-ptr (&-> (the-as (pointer uint8) unpacked-vis-ptr) 16))
|
|
(set! all-vis (&-> (the-as (pointer uint16) all-vis) 8))
|
|
)
|
|
)
|
|
)
|
|
(set! v0-1 #t)
|
|
(label cfg-49)
|
|
v0-1
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
;; definition for function pack-comp-rle
|
|
;; WARN: Return type mismatch int vs none.
|
|
(defun pack-comp-rle ((arg0 (pointer uint8)) (arg1 (pointer uint8)) (arg2 int) (arg3 int))
|
|
(let ((s4-0 0))
|
|
0
|
|
(while (and (> arg2 0) (< (+ s4-0 131) arg3))
|
|
(cond
|
|
((= (-> arg1 0) (-> arg1 1))
|
|
(let ((v1-2 (-> arg1 0)))
|
|
(set! arg1 (&-> arg1 2))
|
|
(let ((a0-2 2))
|
|
(+! arg2 -2)
|
|
(while (> arg2 0)
|
|
(cond
|
|
((= v1-2 (-> arg1 0))
|
|
(+! a0-2 1)
|
|
(set! arg1 (&-> arg1 1))
|
|
(+! arg2 -1)
|
|
(if (>= a0-2 128)
|
|
(goto cfg-12)
|
|
)
|
|
)
|
|
(else
|
|
(goto cfg-12)
|
|
)
|
|
)
|
|
)
|
|
(label cfg-12)
|
|
(set! (-> arg0 0) (the-as uint (+ a0-2 -1)))
|
|
)
|
|
(set! (-> arg0 1) v1-2)
|
|
)
|
|
(set! arg0 (&-> arg0 2))
|
|
(+! s4-0 2)
|
|
)
|
|
(else
|
|
(let ((a0-4 arg1)
|
|
(v1-4 1)
|
|
)
|
|
(set! arg1 (&-> arg1 1))
|
|
(+! arg2 -1)
|
|
(while (< 1 arg2)
|
|
(when (and (= (-> arg1 0) (-> arg1 1)) (< 2 arg2))
|
|
(if (= (-> arg1 0) (-> arg1 2))
|
|
(goto cfg-26)
|
|
)
|
|
)
|
|
(+! v1-4 1)
|
|
(set! arg1 (&-> arg1 1))
|
|
(+! arg2 -1)
|
|
(if (>= v1-4 127)
|
|
(goto cfg-26)
|
|
)
|
|
)
|
|
(label cfg-26)
|
|
(when (= arg2 1)
|
|
(+! v1-4 1)
|
|
(set! arg1 (&-> arg1 1))
|
|
(+! arg2 -1)
|
|
)
|
|
(set! (-> arg0 0) (the-as uint (- v1-4)))
|
|
(let ((a1-21 (&-> arg0 1))
|
|
(a2-4 (+ s4-0 1))
|
|
)
|
|
(dotimes (t0-0 v1-4)
|
|
(set! (-> a1-21 t0-0) (-> a0-4 t0-0))
|
|
)
|
|
(set! arg0 (&+ a1-21 v1-4))
|
|
(set! s4-0 (+ a2-4 v1-4))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(if (< arg3 (+ s4-0 131))
|
|
(format 0 "(GOMI) Warning: May have run out of bigmap bit mask compression memory~%")
|
|
)
|
|
(when (= arg2 1)
|
|
(set! (-> arg0 0) (the-as uint -1))
|
|
(set! (-> arg0 1) (-> arg1 0))
|
|
(set! arg0 (&-> arg0 2))
|
|
(+! s4-0 2)
|
|
(&-> arg1 1)
|
|
)
|
|
(set! (-> arg0 0) (the-as uint 0))
|
|
(&-> arg0 1)
|
|
(+ s4-0 1)
|
|
)
|
|
(none)
|
|
)
|
|
|
|
|
|
|
|
|