deftype and defmethod syntax major changes (#3094)

Major change to how `deftype` shows up in our code:
- the decompiler will no longer emit the `offset-assert`,
`method-count-assert`, `size-assert` and `flag-assert` parameters. There
are extremely few cases where having this in the decompiled code is
helpful, as the types there come from `all-types` which already has
those parameters. This also doesn't break type consistency because:
  - the asserts aren't compared.
- the first step of the test uses `all-types`, which has the asserts,
which will throw an error if they're bad.
- the decompiler won't emit the `heap-base` parameter unless necessary
now.
- the decompiler will try its hardest to turn a fixed-offset field into
an `overlay-at` field. It falls back to the old offset if all else
fails.
- `overlay-at` now supports field "dereferencing" to specify the offset
that's within a field that's a structure, e.g.:
```lisp
(deftype foobar (structure)
  ((vec    vector  :inline)
   (flags  int32   :overlay-at (-> vec w))
   )
  )
```
in this structure, the offset of `flags` will be 12 because that is the
final offset of `vec`'s `w` field within this structure.
- **removed ID from all method declarations.** IDs are only ever
automatically assigned now. Fixes #3068.
- added an `:overlay` parameter to method declarations, in order to
declare a new method that goes on top of a previously-defined method.
Syntax is `:overlay <method-name>`. Please do not ever use this.
- added `state-methods` list parameter. This lets you quickly specify a
list of states to be put in the method table. Same syntax as the
`states` list parameter. The decompiler will try to put as many states
in this as it can without messing with the method ID order.

Also changes `defmethod` to make the first type definition (before the
arguments) optional. The type can now be inferred from the first
argument. Fixes #3093.

---------

Co-authored-by: Hat Kid <6624576+Hat-Kid@users.noreply.github.com>
This commit is contained in:
ManDude
2023-10-30 03:20:02 +00:00
committed by GitHub
parent 09536c68ac
commit cd68cb671e
2079 changed files with 94384 additions and 117066 deletions
+17 -1
View File
@@ -21,7 +21,7 @@
"Make Debug Asm Only: make + print disassembly (asm-only mode) for a file"
(if (null? path)
`(asm-file ,file :color :write :disassemble :disasm-code-only)
`(asm-file ,file :color :write :disassemble :disasm-code-only ,(first path))
`(asm-file ,file :color :write :disassemble ,(first path) :disasm-code-only)
)
)
@@ -292,6 +292,22 @@
)
)
(defmacro defun-debug-recursive (name return-type bindings &rest body)
`(begin
(define-extern ,name
(function ,@(apply (lambda (x)
(if (pair? x)
(second x)
'object)
)
bindings)
,return-type))
(if *debug-segment*
(defun-debug ,name ,bindings ,@body)
(define :no-typecheck #t ,name nothing))
)
)
(defmacro define-once (name value)
"define once. Does not set the symbol if it already has a value. It must have been at least forward-declared first!"
`(begin
+20 -24
View File
@@ -32,39 +32,35 @@
;; DECOMP BEGINS
(deftype align-control (basic)
((flags align-flags :offset-assert 4)
(process process-drawable :offset-assert 8)
(frame-group art-joint-anim :offset-assert 12)
(frame-num float :offset-assert 16)
(matrix matrix 2 :inline :offset-assert 32)
(transform transform 2 :inline :offset-assert 160)
(delta transformq :inline :offset-assert 256)
(last-speed meters :offset-assert 304)
(align transformq :inline :offset 160)
((flags align-flags)
(process process-drawable)
(frame-group art-joint-anim)
(frame-num float)
(matrix matrix 2 :inline)
(transform transform 2 :inline)
(delta transformq :inline)
(last-speed meters)
(align transformq :inline :overlay-at (-> transform 0 trans x))
)
:method-count-assert 14
:size-assert #x134
:flag-assert #xe00000134
(:methods
(new (symbol type process) _type_ :behavior process-drawable 0)
(compute-alignment! (_type_) transformq 9)
(align! (_type_ align-opts float float float) trsqv 10)
(align-vel-and-quat-only! (_type_ align-opts vector int float float) trsqv 11) ;; 3rd arg is unused
(first-transform (_type_) transform 12)
(snd-transform (_type_) transform 13)
(new (symbol type process-drawable) _type_)
(compute-alignment! (_type_) transformq)
(align! (_type_ align-opts float float float) trsqv)
(align-vel-and-quat-only! (_type_ align-opts vector int float float) trsqv)
(first-transform (_type_) transform)
(snd-transform (_type_) transform)
)
)
(defmethod new align-control ((allocation symbol) (type-to-make type) (proc process))
(defmethod new align-control ((allocation symbol) (type-to-make type) (proc process-drawable))
"Create a new align-control."
(let ((obj (object-new allocation type-to-make (the-as int (-> type-to-make size)))))
(when (zero? obj)
(let ((this (object-new allocation type-to-make (the-as int (-> type-to-make size)))))
(when (zero? this)
(go process-drawable-art-error "memory")
(return (the align-control 0))
)
(set! (-> obj process) (the-as process-drawable proc))
obj
(set! (-> this process) proc)
this
)
)
+6 -6
View File
@@ -9,7 +9,7 @@
;; ERROR: Unsupported inline assembly instruction kind - [lw ra, return-from-thread(s7)]
;; ERROR: Unsupported inline assembly instruction kind - [jr ra]
(defmethod compute-alignment! align-control ((this align-control))
(defmethod compute-alignment! ((this align-control))
(local-vars (a0-9 symbol) (s7-0 none) (ra-0 int))
(with-pp
(let ((s5-0 (-> this process skel active-channels)))
@@ -115,15 +115,15 @@
)
)
(defmethod first-transform align-control ((this align-control))
(defmethod first-transform ((this align-control))
(the-as transform (-> this transform))
)
(defmethod snd-transform align-control ((this align-control))
(defmethod snd-transform ((this align-control))
(-> this transform 1)
)
(defmethod align! align-control ((this align-control) (arg0 align-opts) (arg1 float) (arg2 float) (arg3 float))
(defmethod align! ((this align-control) (arg0 align-opts) (arg1 float) (arg2 float) (arg3 float))
(when (not (logtest? (-> this flags) (align-flags disabled)))
(let* ((a0-1 (-> this process))
(t9-0 (method-of-object a0-1 apply-alignment))
@@ -140,7 +140,7 @@
(-> this process root)
)
(defmethod set-and-limit-velocity trsqv ((this trsqv) (arg0 int) (arg1 vector) (arg2 float))
(defmethod set-and-limit-velocity ((this trsqv) (arg0 int) (arg1 vector) (arg2 float))
(let ((gp-0 (-> this transv)))
(when (logtest? arg0 4)
(set! (-> gp-0 x) (-> arg1 x))
@@ -153,7 +153,7 @@
this
)
(defmethod align-vel-and-quat-only! align-control ((this align-control) (arg0 align-opts) (arg1 vector) (arg2 int) (arg3 float) (arg4 float))
(defmethod align-vel-and-quat-only! ((this align-control) (arg0 align-opts) (arg1 vector) (arg2 int) (arg3 float) (arg4 float))
(when (not (logtest? (-> this flags) (align-flags disabled)))
(let ((s5-0 (-> this delta)))
(let ((s3-0 (-> this process root transv)))
+59 -81
View File
@@ -8,112 +8,90 @@
;; DECOMP BEGINS
(deftype joint-exploder-tuning (structure)
((explosion uint64 :offset-assert 0)
(duration time-frame :offset-assert 8)
(gravity float :offset-assert 16)
(rot-speed float :offset-assert 20)
(fountain-rand-transv-lo vector :inline :offset-assert 32)
(fountain-rand-transv-hi vector :inline :offset-assert 48)
(away-from-focal-pt vector :inline :offset 32)
(away-from-rand-transv-xz-lo float :offset 48)
(away-from-rand-transv-xz-hi float :offset 52)
(away-from-rand-transv-y-lo float :offset 56)
(away-from-rand-transv-y-hi float :offset 60)
((explosion uint64)
(duration time-frame)
(gravity float)
(rot-speed float)
(fountain-rand-transv-lo vector :inline)
(fountain-rand-transv-hi vector :inline)
(away-from-focal-pt vector :inline :overlay-at fountain-rand-transv-lo)
(away-from-rand-transv-xz-lo float :overlay-at (-> fountain-rand-transv-hi x))
(away-from-rand-transv-xz-hi float :overlay-at (-> fountain-rand-transv-hi y))
(away-from-rand-transv-y-lo float :overlay-at (-> fountain-rand-transv-hi z))
(away-from-rand-transv-y-hi float :overlay-at (-> fountain-rand-transv-hi w))
)
:method-count-assert 9
:size-assert #x40
:flag-assert #x900000040
(:methods
(new (symbol type int) _type_ 0)
(new (symbol type int) _type_)
)
)
(deftype joint-exploder-static-joint-params (structure)
((joint-index int16 :offset-assert 0)
(parent-joint-index int16 :offset-assert 2)
((joint-index int16)
(parent-joint-index int16)
)
:method-count-assert 9
:size-assert #x4
:flag-assert #x900000004
)
(deftype joint-exploder-static-params (basic)
((joints (array joint-exploder-static-joint-params) :offset-assert 4)
((joints (array joint-exploder-static-joint-params))
)
:method-count-assert 9
:size-assert #x8
:flag-assert #x900000008
)
(deftype joint-exploder-joint (structure)
((next int16 :offset-assert 0)
(prev int16 :offset-assert 2)
(joint-index int16 :offset-assert 4)
(rspeed float :offset-assert 8)
(mat matrix :inline :offset-assert 16)
(rmat matrix :inline :offset-assert 80)
(transv vector :inline :offset-assert 144)
(prev-pos vector :inline :offset-assert 160)
((next int16)
(prev int16)
(joint-index int16)
(rspeed float)
(mat matrix :inline)
(rmat matrix :inline)
(transv vector :inline)
(prev-pos vector :inline)
)
:method-count-assert 9
:size-assert #xb0
:flag-assert #x9000000b0
)
(deftype joint-exploder-joints (basic)
((num-joints int32 :offset-assert 4)
(joint joint-exploder-joint :inline :dynamic :offset 16)
((num-joints int32)
(joint joint-exploder-joint :inline :dynamic :offset 16)
)
:method-count-assert 9
:size-assert #x10
:flag-assert #x900000010
(:methods
(new (symbol type joint-exploder-static-params) _type_ 0)
(new (symbol type joint-exploder-static-params) _type_)
)
)
(deftype joint-exploder-list (structure)
((head int32 :offset-assert 0)
(pre-moved? symbol :offset-assert 4)
(bbox-valid? symbol :offset-assert 8)
(bbox bounding-box :inline :offset-assert 16)
((head int32)
(pre-moved? symbol)
(bbox-valid? symbol)
(bbox bounding-box :inline)
)
:method-count-assert 9
:size-assert #x30
:flag-assert #x900000030
)
(deftype joint-exploder (process-drawable)
((parent-override (pointer process-drawable) :offset 12)
(die-if-below-y float :offset-assert 176)
(die-if-beyond-xz-dist-sqrd float :offset-assert 180)
(joints joint-exploder-joints :offset-assert 184)
(static-params joint-exploder-static-params :offset-assert 188)
(anim art-joint-anim :offset-assert 192)
(scale-vector vector :inline :offset-assert 208)
(tuning joint-exploder-tuning :inline :offset-assert 224)
(lists joint-exploder-list 5 :inline :offset-assert 288)
((parent-override (pointer process-drawable) :overlay-at parent)
(die-if-below-y float)
(die-if-beyond-xz-dist-sqrd float)
(joints joint-exploder-joints)
(static-params joint-exploder-static-params)
(anim art-joint-anim)
(scale-vector vector :inline)
(tuning joint-exploder-tuning :inline)
(lists joint-exploder-list 5 :inline)
)
:heap-base #x1a0
:method-count-assert 29
:size-assert #x210
:flag-assert #x1d01a00210
(:methods
(joint-exploder-method-20 (_type_ joint-exploder-list int) int 20)
(joint-exploder-method-21 (_type_ joint-exploder-list joint-exploder-joint) none 21)
(joint-exploder-method-22 (_type_ joint-exploder-list) symbol 22)
(joint-exploder-method-23 (_type_) symbol 23)
(joint-exploder-method-24 (_type_ joint-exploder-list int) int 24)
(joint-exploder-method-25 (_type_ joint-exploder-list) symbol 25)
(joint-exploder-method-26 (_type_ joint-exploder-list int) int 26)
(joint-exploder-method-27 (_type_ joint-exploder-list int) joint-exploder-list 27)
(joint-exploder-method-28 (_type_ joint-exploder-list) none 28)
(joint-exploder-method-20 (_type_ joint-exploder-list int) int)
(joint-exploder-method-21 (_type_ joint-exploder-list joint-exploder-joint) none)
(joint-exploder-method-22 (_type_ joint-exploder-list) symbol)
(joint-exploder-method-23 (_type_) symbol)
(joint-exploder-method-24 (_type_ joint-exploder-list int) int)
(joint-exploder-method-25 (_type_ joint-exploder-list) symbol)
(joint-exploder-method-26 (_type_ joint-exploder-list int) int)
(joint-exploder-method-27 (_type_ joint-exploder-list int) joint-exploder-list)
(joint-exploder-method-28 (_type_ joint-exploder-list) none)
)
(:states
joint-exploder-shatter
@@ -121,7 +99,7 @@
)
(defmethod asize-of joint-exploder-joints ((this joint-exploder-joints))
(defmethod asize-of ((this joint-exploder-joints))
(the-as int (+ (-> this type size) (* 176 (-> this num-joints))))
)
@@ -157,7 +135,7 @@
(none)
)
(defmethod joint-exploder-method-24 joint-exploder ((this joint-exploder) (arg0 joint-exploder-list) (arg1 int))
(defmethod joint-exploder-method-24 ((this joint-exploder) (arg0 joint-exploder-list) (arg1 int))
(let ((v0-0 (joint-exploder-method-26 this arg0 arg1)))
(let* ((v1-1 (-> this joints))
(v1-2 (-> v1-1 joint arg1))
@@ -171,7 +149,7 @@
)
)
(defmethod joint-exploder-method-26 joint-exploder ((this joint-exploder) (arg0 joint-exploder-list) (arg1 int))
(defmethod joint-exploder-method-26 ((this joint-exploder) (arg0 joint-exploder-list) (arg1 int))
(let* ((v1-0 (-> this joints))
(a2-1 (-> v1-0 joint arg1))
(a0-4 (-> a2-1 prev))
@@ -202,7 +180,7 @@
)
)
(defmethod joint-exploder-method-20 joint-exploder ((this joint-exploder) (arg0 joint-exploder-list) (arg1 int))
(defmethod joint-exploder-method-20 ((this joint-exploder) (arg0 joint-exploder-list) (arg1 int))
(let* ((v1-0 (-> this joints))
(a3-0 (-> v1-0 joint arg1))
(a0-4 (-> arg0 head))
@@ -217,7 +195,7 @@
)
)
(defmethod joint-exploder-method-21 joint-exploder ((this joint-exploder) (arg0 joint-exploder-list) (arg1 joint-exploder-joint))
(defmethod joint-exploder-method-21 ((this joint-exploder) (arg0 joint-exploder-list) (arg1 joint-exploder-joint))
(let ((a1-1 (-> arg1 mat vector 3)))
(cond
((-> arg0 bbox-valid?)
@@ -234,7 +212,7 @@
(none)
)
(defmethod joint-exploder-method-27 joint-exploder ((this joint-exploder) (arg0 joint-exploder-list) (arg1 int))
(defmethod joint-exploder-method-27 ((this joint-exploder) (arg0 joint-exploder-list) (arg1 int))
(local-vars (sv-16 int) (sv-32 int) (sv-48 int))
(let ((s4-0 (the-as joint-exploder-list #f)))
(let ((v1-0 1))
@@ -331,7 +309,7 @@
)
)
(defmethod joint-exploder-method-28 joint-exploder ((this joint-exploder) (arg0 joint-exploder-list))
(defmethod joint-exploder-method-28 ((this joint-exploder) (arg0 joint-exploder-list))
(when (and (-> arg0 bbox-valid?) (>= (-> arg0 head) 0))
(cond
((< 20480.0 (- (-> arg0 bbox max x) (-> arg0 bbox min x)))
@@ -363,7 +341,7 @@
(none)
)
(defmethod joint-exploder-method-25 joint-exploder ((this joint-exploder) (arg0 joint-exploder-list))
(defmethod joint-exploder-method-25 ((this joint-exploder) (arg0 joint-exploder-list))
(set! (-> arg0 bbox-valid?) #f)
(set! (-> arg0 pre-moved?) #t)
(let ((s4-0 (-> this joints))
@@ -406,7 +384,7 @@
#f
)
(defmethod joint-exploder-method-22 joint-exploder ((this joint-exploder) (arg0 joint-exploder-list))
(defmethod joint-exploder-method-22 ((this joint-exploder) (arg0 joint-exploder-list))
(fill-using-bounding-box
*collide-cache*
(-> arg0 bbox)
@@ -526,7 +504,7 @@
:post ja-post
)
(defmethod joint-exploder-method-23 joint-exploder ((this joint-exploder))
(defmethod joint-exploder-method-23 ((this joint-exploder))
(let ((gp-0 (-> this joints)))
(dotimes (s4-0 (-> gp-0 num-joints))
(let ((v1-2 (-> this static-params joints s4-0))
@@ -622,7 +600,7 @@
)
)
(defmethod relocate joint-exploder ((this joint-exploder) (arg0 int))
(defmethod relocate ((this joint-exploder) (arg0 int))
(if (nonzero? (-> this joints))
(&+! (-> this joints) arg0)
)
+58 -78
View File
@@ -35,107 +35,87 @@
;; A single joint control channel. It can control some number of joints through a single animation.
;; Multiple channels are blended together to create smooth transitions between animations.
(deftype joint-control-channel (structure)
((parent joint-control :offset-assert 0)
(command symbol :offset-assert 4)
(frame-interp float :offset-assert 8)
(frame-group art-joint-anim :offset-assert 12)
(frame-num float :offset-assert 16)
(num-func (function joint-control-channel float float float) :offset-assert 20)
(param float 2 :offset-assert 24)
(group-sub-index int16 :offset-assert 32)
(group-size int16 :offset-assert 34)
(dist meters :offset-assert 36)
(eval-time uint32 :offset-assert 40)
(inspector-amount float :offset-assert 44)
((parent joint-control)
(command symbol)
(frame-interp float)
(frame-group art-joint-anim)
(frame-num float)
(num-func (function joint-control-channel float float float))
(param float 2)
(group-sub-index int16)
(group-size int16)
(dist meters)
(eval-time uint32)
(inspector-amount float)
)
:method-count-assert 10
:size-assert #x30
:flag-assert #xa00000030
(:methods
(debug-print-frames (_type_) _type_ 9)
(debug-print-frames (_type_) _type_)
)
)
;; A collection of joint-control-channels.
(deftype joint-control (basic)
((status janim-status :offset-assert 4)
(allocated-length int16 :offset-assert 6)
(root-channel (inline-array joint-control-channel) :offset 16)
(blend-index int32 :offset-assert 20)
(active-channels int32 :offset-assert 24)
(generate-frame-function (function (inline-array vector) int process-drawable int) :offset-assert 28)
(prebind-function (function pointer int process-drawable none) :offset-assert 32)
(postbind-function (function process-drawable none) :offset-assert 36)
(effect effect-control :offset-assert 40)
(channel joint-control-channel 3 :inline :offset-assert 48)
(frame-group0 art-joint-anim :offset 60)
(frame-num0 float :offset 64)
(frame-interp0 float :offset 56)
(frame-group1 art-joint-anim :offset 108)
(frame-num1 float :offset 112)
(frame-interp1 float :offset 104)
(frame-group2 art-joint-anim :offset 156)
(frame-num2 float :offset 160)
(frame-interp2 float :offset 152)
((status janim-status)
(allocated-length int16)
(root-channel (inline-array joint-control-channel) :offset 16)
(blend-index int32)
(active-channels int32)
(generate-frame-function (function (inline-array vector) int process-drawable int))
(prebind-function (function pointer int process-drawable none))
(postbind-function (function process-drawable none))
(effect effect-control)
(channel joint-control-channel 3 :inline)
(frame-group0 art-joint-anim :overlay-at (-> channel 0 frame-group))
(frame-num0 float :overlay-at (-> channel 0 frame-num))
(frame-interp0 float :overlay-at (-> channel 0 frame-interp))
(frame-group1 art-joint-anim :offset 108)
(frame-num1 float :offset 112)
(frame-interp1 float :offset 104)
(frame-group2 art-joint-anim :offset 156)
(frame-num2 float :offset 160)
(frame-interp2 float :offset 152)
)
:method-count-assert 11
:size-assert #xc0
:flag-assert #xb000000c0
(:methods
(new (symbol type int) _type_ 0)
(current-cycle-distance (_type_) float 9)
(debug-print-channels (_type_ symbol) int 10)
(new (symbol type int) _type_)
(current-cycle-distance (_type_) float)
(debug-print-channels (_type_ symbol) int)
)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; joint anim decompress
;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; these types are used to decompress joint animations.
(deftype matrix-stack (structure)
((top matrix :offset-assert 0)
(data matrix 24 :inline :offset-assert 16)
((top matrix)
(data matrix 24 :inline)
)
:method-count-assert 9
:size-assert #x610
:flag-assert #x900000610
)
(deftype channel-upload-info (structure)
((fixed joint-anim-compressed-fixed :offset-assert 0)
(fixed-qwc int32 :offset-assert 4)
(frame joint-anim-compressed-frame :offset-assert 8)
(frame-qwc int32 :offset-assert 12)
(amount float :offset-assert 16)
(interp float :offset-assert 20)
((fixed joint-anim-compressed-fixed)
(fixed-qwc int32)
(frame joint-anim-compressed-frame)
(frame-qwc int32)
(amount float)
(interp float)
)
:pack-me
:method-count-assert 9
:size-assert #x18
:flag-assert #x900000018
)
(deftype joint-work (structure)
((temp-mtx matrix :inline :offset-assert 0)
(joint-stack matrix-stack :inline :offset-assert 64)
(fix-jmp-table (function none) 16 :offset-assert 1616)
(frm-jmp-table (function none) 16 :offset-assert 1680)
(pair-jmp-table (function none) 16 :offset-assert 1744)
(uploads channel-upload-info 24 :inline :offset-assert 1808)
(num-uploads int32 :offset-assert 2384)
(mtx-acc matrix 2 :inline :offset-assert 2400)
(tq-acc transformq 100 :inline :offset-assert 2528)
(jacp-hdr joint-anim-compressed-hdr :inline :offset-assert 7328)
(fixed-data joint-anim-compressed-fixed :inline :offset-assert 7392)
(frame-data joint-anim-compressed-frame 2 :inline :offset-assert 9600)
(flatten-array float 576 :offset 2400)
(flattened vector 24 :inline :offset 2400)
((temp-mtx matrix :inline)
(joint-stack matrix-stack :inline)
(fix-jmp-table (function none) 16)
(frm-jmp-table (function none) 16)
(pair-jmp-table (function none) 16)
(uploads channel-upload-info 24 :inline)
(num-uploads int32)
(mtx-acc matrix 2 :inline)
(tq-acc transformq 100 :inline)
(jacp-hdr joint-anim-compressed-hdr :inline)
(fixed-data joint-anim-compressed-fixed :inline)
(frame-data joint-anim-compressed-frame 2 :inline)
(flatten-array float 576 :overlay-at mtx-acc)
(flattened vector 24 :inline :overlay-at mtx-acc)
)
:method-count-assert 9
:size-assert #x3640
:flag-assert #x900003640
)
+83 -99
View File
@@ -34,38 +34,35 @@
;; Although the mode is a bitfield, it appears that multiple kinds of mods cannot be
;; activated at the same time.
(deftype joint-mod (basic)
((mode joint-mod-handler-mode :offset-assert 4)
(process process-drawable :offset-assert 8)
(joint cspace :offset-assert 12)
(target vector :inline :offset-assert 16)
(twist vector :inline :offset-assert 32)
(twist-max vector :inline :offset-assert 48)
(trans vector :inline :offset-assert 64)
(quat quaternion :inline :offset-assert 80)
(scale vector :inline :offset-assert 96)
(notice-time time-frame :offset-assert 112)
(flex-blend float :offset-assert 120)
(blend float :offset-assert 124)
(max-dist meters :offset-assert 128)
(ignore-angle degrees :offset-assert 132)
(up uint8 :offset-assert 136)
(nose uint8 :offset-assert 137)
(ear uint8 :offset-assert 138)
(shutting-down? symbol :offset-assert 140)
(parented-scale? symbol :offset 128)
((mode joint-mod-handler-mode)
(process process-drawable)
(joint cspace)
(target vector :inline)
(twist vector :inline)
(twist-max vector :inline)
(trans vector :inline)
(quat quaternion :inline)
(scale vector :inline)
(notice-time time-frame)
(flex-blend float)
(blend float)
(max-dist meters)
(ignore-angle degrees)
(up uint8)
(nose uint8)
(ear uint8)
(shutting-down? symbol)
(parented-scale? symbol :overlay-at max-dist)
)
:method-count-assert 16
:size-assert #x90
:flag-assert #x1000000090
(:methods
(new (symbol type joint-mod-handler-mode process-drawable int) _type_ 0)
(set-mode! (_type_ joint-mod-handler-mode) _type_ 9)
(set-target! (_type_ vector) none 10)
(look-at-enemy! (_type_ vector symbol process) none 11)
(reset-blend! (_type_) _type_ 12)
(set-twist! (_type_ float float float) vector 13)
(set-trs! (_type_ vector quaternion vector) none 14)
(shut-down! (_type_) none 15)
(new (symbol type joint-mod-handler-mode process-drawable int) _type_)
(set-mode! (_type_ joint-mod-handler-mode) _type_)
(set-target! (_type_ vector) none)
(look-at-enemy! (_type_ vector symbol process) none)
(reset-blend! (_type_) _type_)
(set-twist! (_type_ float float float) vector)
(set-trs! (_type_ vector quaternion vector) none)
(shut-down! (_type_) none)
)
)
@@ -78,27 +75,32 @@
(none)
)
(defmethod new joint-mod ((allocation symbol) (type-to-make type) (mode joint-mod-handler-mode) (proc process-drawable) (joint-idx int))
(defmethod new joint-mod ((allocation symbol)
(type-to-make type)
(mode joint-mod-handler-mode)
(proc process-drawable)
(joint-idx int)
)
"Construct a new joint-mod. It will work on the given process-drawable's joint."
(let ((obj (object-new allocation type-to-make (the-as int (-> type-to-make size)))))
(set! (-> obj process) proc)
(let ((this (object-new allocation type-to-make (the-as int (-> type-to-make size)))))
(set! (-> this process) proc)
;; grab the joint from our node-list.
(set! (-> obj joint) (-> (-> proc node-list) data joint-idx))
(set-mode! obj mode)
(set! (-> this joint) (-> proc node-list data joint-idx))
(set-mode! this mode)
;; set defaults.
(set-vector! (-> obj twist-max) 8192.0 11832.889 0.0 1.0)
(set! (-> obj up) (the-as uint 1))
(set! (-> obj nose) (the-as uint 2))
(set! (-> obj ear) (the-as uint 0))
(set! (-> obj max-dist) 122880.0)
(set! (-> obj ignore-angle) 65536.0)
(set! (-> obj flex-blend) 1.0)
(set! (-> obj shutting-down?) #f)
obj
(set-vector! (-> this twist-max) 8192.0 11832.889 0.0 1.0)
(set! (-> this up) (the-as uint 1))
(set! (-> this nose) (the-as uint 2))
(set! (-> this ear) (the-as uint 0))
(set! (-> this max-dist) 122880.0)
(set! (-> this ignore-angle) 65536.0)
(set! (-> this flex-blend) 1.0)
(set! (-> this shutting-down?) #f)
this
)
)
(defmethod set-mode! joint-mod ((this joint-mod) (handler-mode joint-mod-handler-mode))
(defmethod set-mode! ((this joint-mod) (handler-mode joint-mod-handler-mode))
"Set up the joint-mod for the given mode. You can only pick one mode at a time."
(set! (-> this mode) handler-mode)
(let ((joint (-> this joint)))
@@ -156,20 +158,20 @@
this
)
(defmethod reset-blend! joint-mod ((this joint-mod))
(defmethod reset-blend! ((this joint-mod))
"Reset the blend to 0."
(set! (-> this blend) 0.0)
this
)
(defmethod shut-down! joint-mod ((this joint-mod))
(defmethod shut-down! ((this joint-mod))
"Shut down and set the blend to zero."
(set! (-> this shutting-down?) #t)
(set! (-> this blend) 0.0)
(none)
)
(defmethod set-twist! joint-mod ((this joint-mod) (x float) (y float) (z float))
(defmethod set-twist! ((this joint-mod) (x float) (y float) (z float))
"Set the twist. You can use #f to not change the current value."
(if x
(set! (-> this twist x) x)
@@ -183,7 +185,7 @@
(-> this twist)
)
(defmethod set-trs! joint-mod ((this joint-mod) (trans vector) (rot quaternion) (scale vector))
(defmethod set-trs! ((this joint-mod) (trans vector) (rot quaternion) (scale vector))
(if trans
(set! (-> this trans quad) (-> trans quad))
)
@@ -197,7 +199,7 @@
(none)
)
(defmethod set-target! joint-mod ((this joint-mod) (target-trans vector))
(defmethod set-target! ((this joint-mod) (target-trans vector))
"Set the joint-mod to look-at if we aren't in a mode, and look at the given target-trans."
;; set mode, if we aren't in one.
(if (= (-> this mode) (joint-mod-handler-mode reset))
@@ -218,20 +220,17 @@
;; this type is for storing what we tried to look at last.
(deftype try-to-look-at-info (basic)
((who handle :offset-assert 8)
(horz float :offset-assert 16)
(vert float :offset-assert 20)
((who handle)
(horz float)
(vert float)
)
:method-count-assert 9
:size-assert #x18
:flag-assert #x900000018
)
;; this is the last thing we tried to look at.
;; There's only one global instance of this, likely used by Jak looking at enemies.
(define last-try-to-look-at-data (new 'global 'try-to-look-at-info))
(defmethod look-at-enemy! joint-mod ((this joint-mod) (target-trans vector) (option symbol) (proc process))
(defmethod look-at-enemy! ((this joint-mod) (target-trans vector) (option symbol) (proc process))
"Set up animation for Jak looking at an enemy. If option is 'attacking, remember when this happened.
Will only override an existing look-at if this one is closer, or option is 'force."
@@ -578,17 +577,14 @@
;; These joint-mod types contain a bit of extra state required for special types of joint-mods
(deftype joint-mod-wheel (basic)
((last-position vector :inline :offset-assert 16)
(angle float :offset-assert 32)
(process process-drawable :offset-assert 36)
(wheel-radius float :offset-assert 40)
(wheel-axis int8 :offset-assert 44)
((last-position vector :inline)
(angle float)
(process process-drawable)
(wheel-radius float)
(wheel-axis int8)
)
:method-count-assert 9
:size-assert #x2d
:flag-assert #x90000002d
(:methods
(new (symbol type process-drawable int float int) _type_ 0)
(new (symbol type process-drawable int float int) _type_)
)
)
@@ -636,17 +632,14 @@
)
(deftype joint-mod-set-local (basic)
((transform transformq :inline :offset-assert 16)
(set-rotation symbol :offset-assert 64)
(set-scale symbol :offset-assert 68)
(set-translation symbol :offset-assert 72)
(enable symbol :offset-assert 76)
((transform transformq :inline)
(set-rotation symbol)
(set-scale symbol)
(set-translation symbol)
(enable symbol)
)
:method-count-assert 9
:size-assert #x50
:flag-assert #x900000050
(:methods
(new (symbol type process-drawable int symbol symbol symbol) _type_ 0)
(new (symbol type process-drawable int symbol symbol symbol) _type_)
)
)
@@ -699,15 +692,12 @@
)
(deftype joint-mod-set-world (basic)
((transform transformq :inline :offset-assert 16)
(node-index int32 :offset-assert 64)
(enable basic :offset-assert 68)
((transform transformq :inline)
(node-index int32)
(enable basic)
)
:method-count-assert 9
:size-assert #x48
:flag-assert #x900000048
(:methods
(new (symbol type process-drawable int basic) _type_ 0)
(new (symbol type process-drawable int basic) _type_)
)
)
@@ -738,17 +728,14 @@
)
(deftype joint-mod-blend-local (basic)
((transform transformq :inline :offset-assert 16)
(blend-transform transformq :inline :offset-assert 64)
(node-index int32 :offset-assert 112)
(blend float :offset-assert 116)
(enable basic :offset-assert 120)
((transform transformq :inline)
(blend-transform transformq :inline)
(node-index int32)
(blend float)
(enable basic)
)
:method-count-assert 9
:size-assert #x7c
:flag-assert #x90000007c
(:methods
(new (symbol type process-drawable int basic) _type_ 0)
(new (symbol type process-drawable int basic) _type_)
)
)
@@ -792,16 +779,13 @@
)
(deftype joint-mod-spinner (basic)
((spin-axis vector :inline :offset-assert 16)
(angle float :offset-assert 32)
(spin-rate float :offset-assert 36)
(enable basic :offset-assert 40)
((spin-axis vector :inline)
(angle float)
(spin-rate float)
(enable basic)
)
:method-count-assert 9
:size-assert #x2c
:flag-assert #x90000002c
(:methods
(new (symbol type process-drawable int vector float) _type_ 0)
(new (symbol type process-drawable int vector float) _type_)
)
)
+100 -104
View File
@@ -14,12 +14,12 @@
;; Basic Methods for joint/joint-control
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defmethod print joint ((this joint))
(defmethod print ((this joint))
(format #t "#<~A ~S ~D @ #x~X>" (-> this type) (-> this name) (-> this number) this)
this
)
(defmethod mem-usage joint ((this joint) (arg0 memory-usage-block) (arg1 int))
(defmethod mem-usage ((this joint) (arg0 memory-usage-block) (arg1 int))
(set! (-> arg0 length) (max 66 (-> arg0 length)))
(set! (-> arg0 data 65 name) "joint")
(+! (-> arg0 data 65 count) 1)
@@ -30,12 +30,12 @@
this
)
(defmethod print joint-anim ((this joint-anim))
(defmethod print ((this joint-anim))
(format #t "#<~A ~S ~D [~D] @ #x~X>" (-> this type) (-> this name) (-> this number) (-> this length) this)
this
)
(defmethod length joint-anim ((this joint-anim))
(defmethod length ((this joint-anim))
(-> this length)
)
@@ -47,7 +47,7 @@
this
)
(defmethod asize-of joint-anim-matrix ((this joint-anim-matrix))
(defmethod asize-of ((this joint-anim-matrix))
(the-as int (+ (-> joint-anim-matrix size) (* (-> this length) 64)))
)
@@ -57,16 +57,16 @@
(format #t "~Tnumber: ~D~%" (-> this number))
(format #t "~Tdata[~D]: @ #x~X~%" (-> this length) (-> this data))
(dotimes (s5-0 (-> this length))
(format #t "~T [~D] ~`transformq`P~%" s5-0 (-> this data s5-0))
)
(format #t "~T [~D] ~`transformq`P~%" s5-0 (-> this data s5-0))
)
this
)
(defmethod asize-of joint-anim-transformq ((this joint-anim-transformq))
(defmethod asize-of ((this joint-anim-transformq))
(the-as int (+ (-> joint-anim-transformq size) (* 48 (-> this length))))
)
(defmethod asize-of joint-anim-drawable ((this joint-anim-drawable))
(defmethod asize-of ((this joint-anim-drawable))
(the-as int (+ (-> joint-anim-drawable size) (* (-> this length) 4)))
)
@@ -94,7 +94,7 @@
arg0
)
(defmethod mem-usage joint-anim-drawable ((this joint-anim-drawable) (arg0 memory-usage-block) (arg1 int))
(defmethod mem-usage ((this joint-anim-drawable) (arg0 memory-usage-block) (arg1 int))
(set! (-> arg0 length) (max 77 (-> arg0 length)))
(set! (-> arg0 data 76 name) "joint-anim-drawable")
(+! (-> arg0 data 76 count) 1)
@@ -135,17 +135,19 @@
arg0
)
(defmethod print joint-control-channel ((this joint-control-channel))
(format #t "#<joint-control-channel ~A ~A ~F @ #x~X>"
(-> this command)
(-> this frame-group)
(-> this frame-num)
this
)
(defmethod print ((this joint-control-channel))
(format
#t
"#<joint-control-channel ~A ~A ~F @ #x~X>"
(-> this command)
(-> this frame-group)
(-> this frame-num)
this
)
this
)
(defmethod asize-of joint-control ((this joint-control))
(defmethod asize-of ((this joint-control))
(the-as int (+ (-> this type size) (* 48 (-> this allocated-length))))
)
@@ -167,7 +169,7 @@
)
)
(defmethod debug-print-frames joint-control-channel ((this joint-control-channel))
(defmethod debug-print-frames ((this joint-control-channel))
"Print the current frame of each joint on this channel.
Note: this only appears to work for uncompressed joint animations."
(let ((s5-0 (-> this frame-group))
@@ -181,7 +183,7 @@
this
)
(defmethod debug-print-channels joint-control ((this joint-control) (arg0 symbol))
(defmethod debug-print-channels ((this joint-control) (arg0 symbol))
"Print each active channel to the given stream."
(dotimes (s4-0 (-> this active-channels))
(let* ((v1-6 (if (and (-> this channel s4-0 frame-group) (nonzero? (-> this channel s4-0 frame-group)))
@@ -236,30 +238,30 @@
;; art-mesh-anim: not used
;; art-joint-anim: used for animations. Provides joint-anim-compressed and eye-anim.
(defmethod needs-link? art ((this art))
(defmethod needs-link? ((this art))
#f
)
(defmethod lookup-art art ((this art) (arg0 string) (arg1 type))
(defmethod lookup-art ((this art) (arg0 string) (arg1 type))
"Look-up an art with the given name and type."
(the-as joint #f)
)
(defmethod lookup-idx-of-art art ((this art) (arg0 string) (arg1 type))
(defmethod lookup-idx-of-art ((this art) (arg0 string) (arg1 type))
"Look up the index of an art with the given name and type."
(the-as int #f)
)
(defmethod print art ((this art))
(defmethod print ((this art))
(format #t "#<~A ~S :length ~D @ #x~X>" (-> this type) (-> this name) (-> this length) this)
this
)
(defmethod length art ((this art))
(defmethod length ((this art))
(-> this length)
)
(defmethod login art ((this art))
(defmethod login ((this art))
;; not sure why we have to do this, but if the res-lump isn't properly set up to point to the tags
;; do it manually.
(if (and (-> this extra) (zero? (-> this extra tag)))
@@ -268,7 +270,7 @@
this
)
(defmethod mem-usage art-mesh-anim ((this art-mesh-anim) (arg0 memory-usage-block) (arg1 int))
(defmethod mem-usage ((this art-mesh-anim) (arg0 memory-usage-block) (arg1 int))
(set! (-> arg0 length) (max 72 (-> arg0 length)))
(set! (-> arg0 data 71 name) "art-mesh-anim")
(+! (-> arg0 data 71 count) 1)
@@ -285,12 +287,7 @@
this
)
(defmethod asize-of art-joint-anim ((this art-joint-anim))
(the-as int (+ (-> art size) (* (-> this length) 4)))
)
(defmethod mem-usage art-joint-anim ((this art-joint-anim) (arg0 memory-usage-block) (arg1 int))
(defmethod mem-usage ((this art-joint-anim) (arg0 memory-usage-block) (arg1 int))
(set! (-> arg0 length) (max 75 (-> arg0 length)))
(set! (-> arg0 data 74 name) "art-joint-anim")
(+! (-> arg0 data 74 count) 1)
@@ -323,7 +320,10 @@
this
)
;; definition for method 3 of type art-group
(defmethod asize-of ((this art-joint-anim))
(the-as int (+ (-> art size) (* (-> this length) 4)))
)
(defmethod inspect art-group ((this art-group))
"Print the arts in an art-group"
(format #t "[~8x] ~A~%" this (-> this type))
@@ -333,15 +333,16 @@
(format #t "~Textra: ~A~%" (-> this extra))
(format #t "~Tdata[~D]: @ #x~X~%" (-> this length) (-> this data))
(dotimes (s5-0 (-> this length))
(if (-> this data s5-0)
(format #t "~T [~D] ~A (~D bytes)~%"s5-0 (-> this data s5-0) (mem-size (-> this data s5-0) #f 0))
(format #t "~T [~D] ~A (~D bytes)~%" s5-0 (-> this data s5-0) 0)
(if (-> this data s5-0)
(format #t "~T [~D] ~A (~D bytes)~%"s5-0 (-> this data s5-0) (mem-size (-> this data s5-0) #f 0))
(format #t "~T [~D] ~A (~D bytes)~%" s5-0 (-> this data s5-0) 0)
)
)
)
this
)
(defmethod needs-link? art-group ((this art-group))
(defmethod needs-link? ((this art-group))
"Does this art-group need to be added to the level's art group?
Some animations are streamed in, and need to be linked/unlinked to the level's list of art groups."
(the-as symbol (and (-> this length)
@@ -351,7 +352,7 @@
)
)
(defmethod lookup-art art-group ((this art-group) (arg0 string) (arg1 type))
(defmethod lookup-art ((this art-group) (arg0 string) (arg1 type))
"Get the art with the given name and type. Set type to false if you don't care."
(the-as
joint
@@ -361,15 +362,13 @@
(dotimes (s2-0 (-> this length))
(if (and (-> this data s2-0) ;; entry is populated
(= (-> this data s2-0 type) arg1) ;; type is right
(or (name= arg0 (-> this data s2-0 name)) ;; name is right.
(string-charp= arg0 (&-> (-> this data s2-0 name) data s3-0)) ;; also seek past ag name, and try again.
)
(or (name= arg0 (-> this data s2-0 name)) (string-charp= arg0 (&-> (-> this data s2-0 name) data s3-0))) ;; name is right. also seek past ag name, and try again.
)
(return (the-as joint (-> this data s2-0)))
)
)
)
(the-as art #f)
(the-as art-element #f)
)
(else
;; no type (also no weird after ag name check)
@@ -378,24 +377,23 @@
(return (the-as joint (-> this data s4-1)))
)
)
(the-as art #f)
(the-as art-element #f)
)
)
)
)
(defmethod lookup-idx-of-art art-group ((this art-group) (arg0 string) (arg1 type))
(defmethod lookup-idx-of-art ((this art-group) (arg0 string) (arg1 type))
"Get the index of the art with the given name and type. Set type to false if you don't care.
Will return #f if the art is not found."
(cond
(arg1
(let ((s3-0 (+ (length (-> this name)) 1)))
(dotimes (s2-0 (-> this length))
(if (and
(-> this data s2-0)
(= (-> this data s2-0 type) arg1)
(or (name= arg0 (-> this data s2-0 name)) (string-charp= arg0 (&-> (-> this data s2-0 name) data s3-0)))
)
(if (and (-> this data s2-0)
(= (-> this data s2-0 type) arg1)
(or (name= arg0 (-> this data s2-0 name)) (string-charp= arg0 (&-> (-> this data s2-0 name) data s3-0)))
)
(return s2-0)
)
)
@@ -413,7 +411,7 @@
)
)
(defmethod login art-group ((this art-group))
(defmethod login ((this art-group))
"Log in all the arts in a group."
(dotimes (s5-0 (-> this length))
(if (-> this data s5-0)
@@ -423,7 +421,7 @@
this
)
(defmethod mem-usage art-group ((this art-group) (arg0 memory-usage-block) (arg1 int))
(defmethod mem-usage ((this art-group) (arg0 memory-usage-block) (arg1 int))
(set! (-> arg0 length) (max 71 (-> arg0 length)))
(set! (-> arg0 data 70 name) "art-group")
(+! (-> arg0 data 70 count) 1)
@@ -442,44 +440,44 @@
this
)
(defmethod relocate art-group ((this art-group) (arg0 kheap) (arg1 (pointer uint8)))
(defmethod relocate ((this art-group) (arg0 kheap) (arg1 (pointer uint8)))
"Handle a loaded art-group."
(let ((s4-0 (clear *temp-string*)))
(string<-charp s4-0 arg1)
(set! this (cond
((not this)
(format 0 "ERROR: art-group ~A is not a valid file.~%" s4-0)
(the-as art-group #f)
)
((not (type-type? (-> this type) art-group))
(format 0 "ERROR: art-group ~A is not a art-group.~%" s4-0)
(the-as art-group #f)
)
((not (file-info-correct-version? (-> this info) (file-kind art-group) 0))
(the-as art-group #f)
)
(else
(let ((s5-1 (-> *level* loading-level)))
(if (or (not s5-1) (= (-> s5-1 name) 'default))
(login this) ;; not part of level load, just normal login.
)
(if s5-1
(set-loaded-art (-> s5-1 art-group) this) ;; part of level load, add to level's ag, but don't log in yet.
)
)
this
((not this)
(format 0 "ERROR: art-group ~A is not a valid file.~%" s4-0)
(the-as art-group #f)
)
)
((not (type-type? (-> this type) art-group))
(format 0 "ERROR: art-group ~A is not a art-group.~%" s4-0)
(the-as art-group #f)
)
((not (file-info-correct-version? (-> this info) (file-kind art-group) 0))
(the-as art-group #f)
)
(else
(let ((s5-1 (-> *level* loading-level)))
(if (or (not s5-1) (= (-> s5-1 name) 'default))
(login this) ;; not part of level load, just normal login.
)
(if s5-1
(set-loaded-art (-> s5-1 art-group) this) ;; part of level load, add to level's ag, but don't log in yet.
)
)
this
)
)
)
)
(none)
)
(defmethod asize-of art-mesh-geo ((this art-mesh-geo))
(defmethod asize-of ((this art-mesh-geo))
(the-as int (+ (-> art size) (* (-> this length) 4)))
)
(defmethod mem-usage art-mesh-geo ((this art-mesh-geo) (arg0 memory-usage-block) (arg1 int))
(defmethod mem-usage ((this art-mesh-geo) (arg0 memory-usage-block) (arg1 int))
(set! (-> arg0 length) (max 73 (-> arg0 length)))
(set! (-> arg0 data 72 name) "art-mesh-geo")
(+! (-> arg0 data 72 count) 1)
@@ -496,18 +494,18 @@
this
)
(defmethod login art-joint-anim ((this art-joint-anim))
(defmethod login ((this art-joint-anim))
(if (and (-> this extra) (zero? (-> this extra tag)))
(set! (-> this extra tag) (&+ (the-as (pointer res-tag) (-> this extra)) 28))
)
this
)
(defmethod asize-of art-joint-geo ((this art-joint-geo))
(defmethod asize-of ((this art-joint-geo))
(the-as int (+ (-> art size) (* (-> this length) 4)))
)
(defmethod lookup-art art-joint-geo ((this art-joint-geo) (arg0 string) (arg1 type))
(defmethod lookup-art ((this art-joint-geo) (arg0 string) (arg1 type))
(cond
(arg1
(dotimes (s3-0 (-> this length))
@@ -528,7 +526,7 @@
)
)
(defmethod lookup-idx-of-art art-joint-geo ((this art-joint-geo) (arg0 string) (arg1 type))
(defmethod lookup-idx-of-art ((this art-joint-geo) (arg0 string) (arg1 type))
(cond
(arg1
(dotimes (s3-0 (-> this length))
@@ -549,7 +547,7 @@
)
)
(defmethod mem-usage art-joint-geo ((this art-joint-geo) (arg0 memory-usage-block) (arg1 int))
(defmethod mem-usage ((this art-joint-geo) (arg0 memory-usage-block) (arg1 int))
(set! (-> arg0 length) (max 74 (-> arg0 length)))
(set! (-> arg0 data 73 name) "art-joint-geo")
(+! (-> arg0 data 73 count) 1)
@@ -573,7 +571,7 @@
(defun joint-control-channel-eval ((arg0 joint-control-channel))
"Run the joint control num-func callback, remember the current time"
((-> arg0 num-func) arg0 (-> arg0 param 0) (-> arg0 param 1))
(set! (-> arg0 eval-time) (the-as uint (-> *display* base-frame-counter)))
(set! (-> arg0 eval-time) (the-as uint (current-time)))
(none)
)
@@ -581,7 +579,7 @@
"Set the joint control num-func, and evaluate it."
(set! (-> arg0 num-func) arg1)
(arg1 arg0 (-> arg0 param 0) (-> arg0 param 1))
(set! (-> arg0 eval-time) (the-as uint (-> *display* base-frame-counter)))
(set! (-> arg0 eval-time) (the-as uint (current-time)))
(none)
)
@@ -596,7 +594,7 @@
(set! (-> arg0 frame-group) arg1)
)
(arg2 arg0 (-> arg0 param 0) (-> arg0 param 1))
(set! (-> arg0 eval-time) (the-as uint (-> *display* base-frame-counter)))
(set! (-> arg0 eval-time) (the-as uint (current-time)))
)
)
0
@@ -623,12 +621,13 @@
(set! (-> arg0 active-channels) (-> arg1 active-channels))
;; figure out which slot the source is, and remember that we're a copy.
(set! (-> arg0 root-channel)
(the-as (inline-array joint-control-channel)
(-> arg0
channel
(/ (&- (the-as pointer (-> arg1 root-channel)) (the-as uint (the-as pointer (-> arg1 channel)))) 48)
)
)
(the-as
(inline-array joint-control-channel)
(-> arg0
channel
(/ (&- (the-as pointer (-> arg1 root-channel)) (the-as uint (the-as pointer (-> arg1 channel)))) 48)
)
)
)
;; copy channels
(mem-copy!
@@ -644,6 +643,7 @@
arg0
)
;; ERROR: Failed load: (set! v1-29 (l.wu (+ a0-9 -4))) at op 75
(defun joint-control-remap! ((arg0 joint-control) (arg1 art-group) (arg2 art-group) (arg3 pair) (arg4 int) (arg5 string))
(local-vars
(sv-16 int)
@@ -653,7 +653,7 @@
(sv-48 joint-control-channel)
(sv-52 object)
(sv-56 int)
(sv-64 art-joint-anim)
(sv-64 joint)
(sv-80 string)
)
(set! sv-16 (+ (length (-> arg2 name)) 1))
@@ -685,10 +685,10 @@
)
)
)
(set! sv-64 (the-as art-joint-anim (lookup-art arg1 *temp-string* art-joint-anim)))
(set! sv-64 (lookup-art arg1 *temp-string* art-joint-anim))
(cond
(sv-64
(set! (-> sv-48 frame-group) sv-64)
(set! (-> sv-48 frame-group) (the-as art-joint-anim sv-64))
)
(else
(set! (-> sv-48 frame-group) (the-as art-joint-anim (-> arg1 data sv-40)))
@@ -884,7 +884,7 @@
(v0-0 (the-as object (-> arg0 data arg2 data)))
)
(cond
((zero? (logand (-> arg0 fixed hdr matrix-bits) 1))
((not (logtest? (-> arg0 fixed hdr matrix-bits) 1))
(set! v1-1 (cond
((zero? arg1)
(return (the-as matrix v1-1))
@@ -903,7 +903,7 @@
(set! v0-0 (-> (the-as (inline-array vector) v0-0) 4))
)
)
(if (zero? (logand (-> arg0 fixed hdr matrix-bits) 2))
(if (not (logtest? (-> arg0 fixed hdr matrix-bits) 2))
(return (the-as matrix v1-1))
)
(the-as matrix v0-0)
@@ -960,7 +960,7 @@
)
(else
(let ((a2-3 (matrix-from-control-channel!
(the-as matrix (+ 16 (the-as int (scratchpad-object terrain-context))))
(the-as matrix (-> (scratchpad-object terrain-context) work))
arg2
(the-as joint-control-channel arg1)
)
@@ -1029,7 +1029,7 @@
(the-as matrix (-> arg0 data))
)
(defmethod reset-and-assign-geo! cspace ((this cspace) (arg0 basic))
(defmethod reset-and-assign-geo! ((this cspace) (arg0 basic))
(set! (-> this parent) #f)
(set! (-> this joint) #f)
(set! (-> this geo) arg0)
@@ -1103,7 +1103,7 @@
(defun cspace<-matrix-no-push-joint! ((arg0 cspace) (arg1 joint-control))
(let ((v1-2 (matrix-from-control!
(the-as matrix-stack (+ 80 (the-as int (scratchpad-object terrain-context))))
(-> (scratchpad-object terrain-context) work foreground joint-work joint-stack)
(-> arg0 joint)
arg1
'no-push
@@ -1461,7 +1461,3 @@
(calc-animation-from-spr arg0 arg1)
0
)
+36 -49
View File
@@ -20,50 +20,41 @@
;; First, the joint. This type just describes how the skeleton is connected and the bind pose.
(deftype joint (basic)
((name string :offset-assert 4) ;; the joint's name (neckA, neckB, Rtoes, etc)
(number int32 :offset-assert 8) ;; the joint's number in the cspace-array
(parent joint :offset-assert 12) ;; the parent joint (ex, Lshould has parent of chest)
(bind-pose matrix :inline :offset-assert 16) ;; the bind pose, as a matrix.
((name string)
(number int32)
(parent joint)
(bind-pose matrix :inline)
)
:method-count-assert 9
:size-assert #x50
:flag-assert #x900000050
)
;; I believe this stores offsets, in bytes, of where there are stored
;; (possibly in the scratchpad)
(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)
((bone-matrix uint32)
(parent-matrix uint32)
(dummy uint32)
(frame uint32)
)
:method-count-assert 9
:size-assert #x10
:flag-assert #x900000010
)
;; The "bone" stores the final positions of the bodies.
;; This is a world space transform.
(deftype bone (structure)
((transform matrix :inline :offset-assert 0)
(position vector :inline :offset 48) ;; overlays the matrix
(scale vector :inline :offset-assert 64)
(cache bone-cache :inline :offset-assert 80)
((transform matrix :inline)
(position vector :inline :overlay-at (-> transform vector 3))
(scale vector :inline)
(cache bone-cache :inline)
)
:method-count-assert 9
:size-assert #x60
:flag-assert #x900000060
)
;; Like a real skeleton, this is a collection of bones for a single character.
(deftype skeleton (inline-array-class)
((bones bone :inline :dynamic))
:method-count-assert 9
:size-assert #x10
:flag-assert #x900000010
((bones bone :inline :dynamic)
)
)
(set! (-> skeleton heap-base) 96)
(set! (-> skeleton heap-base) (the-as uint 96))
;; The "cspace" seems to be a system for linking bones and joints.
;; The tree structure matches the tree of joints.
@@ -78,35 +69,31 @@
;; node 4 is the first real joint (for jak, it's upper body).
(deftype cspace (structure)
((parent cspace :offset-assert 0) ;; the parent body
(joint joint :offset-assert 4) ;; the joint which moves us
(joint-num int16 :offset-assert 8) ;; seems to be 0 always??
(geo basic :offset-assert 12) ;; seems to be #f always
(bone bone :offset-assert 16) ;; points to our bone.
(param0 function :offset-assert 20) ;; function to run to update.
(param1 basic :offset-assert 24) ;; parameter
(param2 basic :offset-assert 28) ;; parameter
((parent cspace)
(joint joint)
(joint-num int16)
(geo basic)
(bone bone)
(param0 function)
(param1 basic)
(param2 basic)
)
:method-count-assert 10
:size-assert #x20
:flag-assert #xa00000020
(:methods
(new (symbol type basic) _type_ 0)
(reset-and-assign-geo! (_type_ basic) _type_ 9)
(new (symbol type basic) _type_)
(reset-and-assign-geo! (_type_ basic) _type_)
)
)
;; All the cspaces for a character.
(deftype cspace-array (inline-array-class)
((data cspace :inline :dynamic :offset-assert 16)
)
:method-count-assert 9
:size-assert #x10
:flag-assert #x900000010
)
(set! (-> cspace-array heap-base) 32)
(defmethod print cspace ((this cspace))
(deftype cspace-array (inline-array-class)
((data cspace :inline :dynamic)
)
)
(set! (-> cspace-array heap-base) (the-as uint 32))
(defmethod print ((this cspace))
(format
#t
"#<cspace ~S @ #x~X>"
+47 -80
View File
@@ -13,16 +13,13 @@
(define *camera-layout-blink* #f)
(deftype cam-layout-bank (basic)
((spline-t float :offset-assert 4)
(spline-step float :offset-assert 8)
(intro-t float :offset-assert 12)
(intro-step float :offset-assert 16)
(debug-t float :offset-assert 20)
(debug-step float :offset-assert 24)
((spline-t float)
(spline-step float)
(intro-t float)
(intro-step float)
(debug-t float)
(debug-step float)
)
:method-count-assert 9
:size-assert #x1c
:flag-assert #x90000001c
)
@@ -40,72 +37,54 @@
(deftype clm-basic (basic)
()
:method-count-assert 9
:size-assert #x4
:flag-assert #x900000004
)
(deftype clm-item-action (structure)
((button uint64 :offset-assert 0)
(options uint64 :offset-assert 8)
(func symbol :offset-assert 16)
(parm0 int32 :offset 20)
(parm0-basic basic :offset 20)
(parm1-basic basic :offset 24)
(parm1 symbol :offset 24)
((button uint64)
(options uint64)
(func symbol)
(parm0 int32 :offset 20)
(parm0-basic basic :overlay-at parm0)
(parm1-basic basic :offset 24)
(parm1 symbol :overlay-at parm1-basic)
)
:method-count-assert 9
:size-assert #x1c
:flag-assert #x90000001c
)
(deftype clm-item (clm-basic)
((description string :offset-assert 4)
(button-symbol symbol :offset-assert 8)
(action clm-item-action :inline :offset-assert 16)
((description string)
(button-symbol symbol)
(action clm-item-action :inline)
)
:method-count-assert 9
:size-assert #x2c
:flag-assert #x90000002c
)
(deftype clm-list-item (basic)
((description string :offset-assert 4)
(track-val symbol :offset-assert 8)
(val-func symbol :offset-assert 12)
(val-parm0 int32 :offset 16)
(val-parm0-basic basic :offset 16)
(val-parm1-basic basic :offset 20)
(val-parm1 symbol :offset 20)
(actions (array clm-item-action) :offset-assert 24)
((description string)
(track-val symbol)
(val-func symbol)
(val-parm0 int32 :offset 16)
(val-parm0-basic basic :overlay-at val-parm0)
(val-parm1-basic basic :offset 20)
(val-parm1 symbol :overlay-at val-parm1-basic)
(actions (array clm-item-action))
)
:method-count-assert 9
:size-assert #x1c
:flag-assert #x90000001c
)
(deftype clm-list (clm-basic)
((tracker symbol :offset-assert 4)
(cur-list-item int32 :offset-assert 8)
(items (array clm-list-item) :offset-assert 12)
((tracker symbol)
(cur-list-item int32)
(items (array clm-list-item))
)
:method-count-assert 9
:size-assert #x10
:flag-assert #x900000010
)
(deftype clm (basic)
((title string :offset-assert 4)
(items (array clm-basic) :offset-assert 8)
((title string)
(items (array clm-basic))
)
:method-count-assert 9
:size-assert #xc
:flag-assert #x90000000c
)
@@ -118,11 +97,8 @@
(define *volume-normal* (new 'debug 'vector-array 600))
(deftype volume-descriptor-array (inline-array-class)
((data plane-volume :inline :dynamic :offset 16)
((data plane-volume :inline :dynamic :offset 16)
)
:method-count-assert 9
:size-assert #x10
:flag-assert #x900000010
)
@@ -133,19 +109,16 @@
(define *volume-descriptor* (the-as vol-control (new 'debug 'volume-descriptor-array 100)))
(deftype cam-layout (process)
((cam-entity entity-camera :offset-assert 112)
(num-entities int32 :offset-assert 116)
(cur-entity int32 :offset-assert 120)
(num-volumes int32 :offset-assert 124)
(cur-volume int32 :offset-assert 128)
(first-pvol int32 :offset-assert 132)
(first-cutoutvol int32 :offset-assert 136)
(res-key float :offset-assert 140)
((cam-entity entity-camera)
(num-entities int32)
(cur-entity int32)
(num-volumes int32)
(cur-volume int32)
(first-pvol int32)
(first-cutoutvol int32)
(res-key float)
)
:heap-base #x200
:method-count-assert 14
:size-assert #x90
:flag-assert #xe02000090
(:states
cam-layout-active
)
@@ -437,16 +410,13 @@
)
(deftype interp-test-info (structure)
((from vector :inline :offset-assert 0)
(to vector :inline :offset-assert 16)
(origin vector :inline :offset-assert 32)
(color vector4w :offset-assert 48)
(axis vector :offset-assert 52)
(disp string :offset-assert 56)
((from vector :inline)
(to vector :inline)
(origin vector :inline)
(color vector4w)
(axis vector)
(disp string)
)
:method-count-assert 9
:size-assert #x3c
:flag-assert #x90000003c
)
@@ -2206,13 +2176,10 @@
)
(deftype clmf-cam-flag-toggle-info (structure)
((key float :offset-assert 0)
(force-on int32 :offset-assert 4)
(force-off int32 :offset-assert 8)
((key float)
(force-on int32)
(force-off int32)
)
:method-count-assert 9
:size-assert #xc
:flag-assert #x90000000c
)
+9 -16
View File
@@ -13,18 +13,15 @@
;; DECOMP BEGINS
(deftype camera-master-bank (basic)
((onscreen-head-height meters :offset-assert 4)
(onscreen-foot-height meters :offset-assert 8)
(target-height meters :offset-assert 12)
(up-move-to-pitch-ratio-in-air float :offset-assert 16)
(down-move-to-pitch-ratio-in-air float :offset-assert 20)
(up-move-to-pitch-on-ground float :offset-assert 24)
(down-move-to-pitch-on-ground float :offset-assert 28)
(pitch-off-blend float :offset-assert 32)
((onscreen-head-height meters)
(onscreen-foot-height meters)
(target-height meters)
(up-move-to-pitch-ratio-in-air float)
(down-move-to-pitch-ratio-in-air float)
(up-move-to-pitch-on-ground float)
(down-move-to-pitch-on-ground float)
(pitch-off-blend float)
)
:method-count-assert 9
:size-assert #x24
:flag-assert #x900000024
)
@@ -1598,12 +1595,8 @@
)
(deftype list-keeper (process)
((dummy float :offset-assert 112)
((dummy float)
)
:heap-base #x10
:method-count-assert 14
:size-assert #x74
:flag-assert #xe00100074
)
+17 -32
View File
@@ -8,12 +8,9 @@
;; DECOMP BEGINS
(deftype cam-point-watch-bank (basic)
((speed float :offset-assert 4)
(rot-speed degrees :offset-assert 8)
((speed float)
(rot-speed degrees)
)
:method-count-assert 9
:size-assert #xc
:flag-assert #x90000000c
)
@@ -87,12 +84,9 @@
)
(deftype cam-free-bank (basic)
((speed float :offset-assert 4)
(rot-speed degrees :offset-assert 8)
((speed float)
(rot-speed degrees)
)
:method-count-assert 9
:size-assert #xc
:flag-assert #x90000000c
)
@@ -339,14 +333,11 @@
)
(deftype camera-free-floating-move-info (structure)
((rv vector :inline :offset-assert 0)
(tv vector :inline :offset-assert 16)
(up vector :inline :offset-assert 32)
(tm matrix :inline :offset-assert 48)
((rv vector :inline)
(tv vector :inline)
(up vector :inline)
(tm matrix :inline)
)
:method-count-assert 9
:size-assert #x70
:flag-assert #x900000070
)
@@ -424,27 +415,21 @@
)
(deftype camera-orbit-info (structure)
((radius float :offset-assert 0)
(rot float :offset-assert 4)
(target-off vector :inline :offset-assert 16)
(orbit-off vector :inline :offset-assert 32)
(radius-lerp float :offset-assert 48)
((radius float)
(rot float)
(target-off vector :inline)
(orbit-off vector :inline)
(radius-lerp float)
)
:method-count-assert 9
:size-assert #x34
:flag-assert #x900000034
)
(deftype CAM_ORBIT-bank (basic)
((RADIUS_MAX float :offset-assert 4)
(RADIUS_MIN float :offset-assert 8)
(TARGET_OFF_ADJUST float :offset-assert 12)
(ORBIT_OFF_ADJUST float :offset-assert 16)
((RADIUS_MAX float)
(RADIUS_MIN float)
(TARGET_OFF_ADJUST float)
(ORBIT_OFF_ADJUST float)
)
:method-count-assert 9
:size-assert #x14
:flag-assert #x900000014
)
+33 -57
View File
@@ -376,14 +376,11 @@
)
(deftype cam-eye-bank (basic)
((rot-speed float :offset-assert 4)
(max-degrees float :offset-assert 8)
(max-fov float :offset-assert 12)
(min-fov float :offset-assert 16)
((rot-speed float)
(max-degrees float)
(max-fov float)
(min-fov float)
)
:method-count-assert 9
:size-assert #x14
:flag-assert #x900000014
)
@@ -547,12 +544,9 @@
)
(deftype cam-billy-bank (basic)
((rot-speed float :offset-assert 4)
(tilt-degrees float :offset-assert 8)
((rot-speed float)
(tilt-degrees float)
)
:method-count-assert 9
:size-assert #xc
:flag-assert #x90000000c
)
@@ -1168,12 +1162,9 @@
)
(deftype cam-string-bank (basic)
((los-coll-rad meters :offset-assert 4)
(los-coll-rad2 meters :offset-assert 8)
((los-coll-rad meters)
(los-coll-rad2 meters)
)
:method-count-assert 9
:size-assert #xc
:flag-assert #x90000000c
)
@@ -1268,30 +1259,24 @@
)
(deftype los-dist (structure)
((par-dist float :offset-assert 0)
(lat-dist float :offset-assert 4)
(vert-dist float :offset-assert 8)
((par-dist float)
(lat-dist float)
(vert-dist float)
)
:method-count-assert 9
:size-assert #xc
:flag-assert #x90000000c
)
(deftype collide-los-dist-info (structure)
((min-par float :offset-assert 0)
(max-par float :offset-assert 4)
(min-lat float :offset-assert 8)
(max-lat float :offset-assert 12)
(min-vp float :offset-assert 16)
(max-vp float :offset-assert 20)
(min-vn float :offset-assert 24)
(max-vn float :offset-assert 28)
(count int32 :offset-assert 32)
((min-par float)
(max-par float)
(min-lat float)
(max-lat float)
(min-vp float)
(max-vp float)
(min-vn float)
(max-vn float)
(count int32)
)
:method-count-assert 9
:size-assert #x24
:flag-assert #x900000024
)
@@ -1395,15 +1380,12 @@
)
(deftype collide-los-result (structure)
((lateral vector :inline :offset-assert 0)
(cw collide-los-dist-info :inline :offset-assert 16)
(ccw collide-los-dist-info :inline :offset-assert 64)
(straddle collide-los-dist-info :inline :offset-assert 112)
(lateral-valid symbol :offset-assert 148)
((lateral vector :inline)
(cw collide-los-dist-info :inline)
(ccw collide-los-dist-info :inline)
(straddle collide-los-dist-info :inline)
(lateral-valid symbol)
)
:method-count-assert 9
:size-assert #x98
:flag-assert #x900000098
)
@@ -2906,14 +2888,11 @@
)
(deftype cam-stick-bank (basic)
((max-z meters :offset-assert 4)
(min-z meters :offset-assert 8)
(max-y meters :offset-assert 12)
(min-y meters :offset-assert 16)
((max-z meters)
(min-z meters)
(max-y meters)
(min-y meters)
)
:method-count-assert 9
:size-assert #x14
:flag-assert #x900000014
)
@@ -3132,14 +3111,11 @@
)
(deftype cam-bike-bank (basic)
((max-z meters :offset-assert 4)
(min-z meters :offset-assert 8)
(max-y meters :offset-assert 12)
(min-y meters :offset-assert 16)
((max-z meters)
(min-z meters)
(max-y meters)
(min-y meters)
)
:method-count-assert 9
:size-assert #x14
:flag-assert #x900000014
)
+200 -236
View File
@@ -64,20 +64,17 @@
;; DECOMP BEGINS
(deftype camera-bank (basic)
((collide-move-rad float :offset-assert 4)
(joypad uint32 :offset-assert 8)
(min-detectable-velocity float :offset-assert 12)
(attack-timeout time-frame :offset-assert 16)
(default-string-max-y meters :offset-assert 24)
(default-string-min-y meters :offset-assert 28)
(default-string-max-z meters :offset-assert 32)
(default-string-min-z meters :offset-assert 36)
(default-string-push-z meters :offset-assert 40)
(default-tilt-adjust degrees :offset-assert 44)
((collide-move-rad float)
(joypad uint32)
(min-detectable-velocity float)
(attack-timeout time-frame)
(default-string-max-y meters)
(default-string-min-y meters)
(default-string-max-z meters)
(default-string-min-z meters)
(default-string-push-z meters)
(default-tilt-adjust degrees)
)
:method-count-assert 9
:size-assert #x30
:flag-assert #x900000030
)
@@ -95,103 +92,88 @@
)
(deftype cam-index (structure)
((flags cam-index-options :offset-assert 0)
(vec vector 2 :inline :offset 16)
((flags cam-index-options)
(vec vector 2 :inline :offset 16)
)
:method-count-assert 11
:size-assert #x30
:flag-assert #xb00000030
(:methods
(cam-index-method-9 (_type_ symbol entity vector curve) symbol 9)
(cam-index-method-10 (_type_ vector) float 10)
(cam-index-method-9 (_type_ symbol entity vector curve) symbol)
(cam-index-method-10 (_type_ vector) float)
)
)
(deftype tracking-point (structure)
((position vector :inline :offset-assert 0)
(direction vector :inline :offset-assert 16)
(tp-length float :offset-assert 32)
(next int32 :offset-assert 36)
(incarnation int32 :offset-assert 40)
((position vector :inline)
(direction vector :inline)
(tp-length float)
(next int32)
(incarnation int32)
)
:method-count-assert 9
:size-assert #x2c
:flag-assert #x90000002c
)
(deftype tracking-spline-sampler (structure)
((cur-pt int32 :offset-assert 0)
(partial-pt float :offset-assert 4)
((cur-pt int32)
(partial-pt float)
)
:method-count-assert 9
:size-assert #x8
:flag-assert #x900000008
)
(deftype tracking-spline (structure)
((point tracking-point 32 :inline :offset-assert 0)
(summed-len float :offset-assert 1536)
(free-point int32 :offset-assert 1540)
(used-point int32 :offset-assert 1544)
(partial-point float :offset-assert 1548)
(end-point int32 :offset-assert 1552)
(next-to-last-point int32 :offset-assert 1556)
(max-move float :offset-assert 1560)
(sample-len float :offset-assert 1564)
(used-count int32 :offset-assert 1568)
(old-position vector :inline :offset-assert 1584)
(debug-old-position vector :inline :offset-assert 1600)
(debug-out-position vector :inline :offset-assert 1616)
(debug-last-point int32 :offset-assert 1632)
((point tracking-point 32 :inline)
(summed-len float)
(free-point int32)
(used-point int32)
(partial-point float)
(end-point int32)
(next-to-last-point int32)
(max-move float)
(sample-len float)
(used-count int32)
(old-position vector :inline)
(debug-old-position vector :inline)
(debug-out-position vector :inline)
(debug-last-point int32)
)
:method-count-assert 24
:size-assert #x664
:flag-assert #x1800000664
(:methods
(tracking-spline-method-9 (_type_) none 9)
(tracking-spline-method-10 (_type_ vector) none 10)
(print-nth-point (_type_ int) none 11)
(tracking-spline-method-12 (_type_) none 12)
(tracking-spline-method-13 (_type_ int) none 13)
(tracking-spline-method-14 (_type_ tracking-spline-sampler) none 14)
(tracking-spline-method-15 (_type_) none 15)
(tracking-spline-method-16 (_type_ float) none 16)
(tracking-spline-method-17 (_type_ vector float float symbol) int 17)
(tracking-spline-method-18 (_type_ float vector tracking-spline-sampler) vector 18)
(tracking-spline-method-19 (_type_ float vector tracking-spline-sampler) vector 19)
(tracking-spline-method-20 (_type_ vector int) none 20)
(tracking-spline-method-21 (_type_ vector float float) vector 21)
(tracking-spline-method-22 (_type_ float) none 22)
(tracking-spline-method-23 (_type_) none 23)
(tracking-spline-method-9 (_type_) none)
(tracking-spline-method-10 (_type_ vector) none)
(print-nth-point (_type_ int) none)
(tracking-spline-method-12 (_type_) none)
(tracking-spline-method-13 (_type_ int) none)
(tracking-spline-method-14 (_type_ tracking-spline-sampler) none)
(tracking-spline-method-15 (_type_) none)
(tracking-spline-method-16 (_type_ float) none)
(tracking-spline-method-17 (_type_ vector float float symbol) int)
(tracking-spline-method-18 (_type_ float vector tracking-spline-sampler) vector)
(tracking-spline-method-19 (_type_ float vector tracking-spline-sampler) vector)
(tracking-spline-method-20 (_type_ vector int) none)
(tracking-spline-method-21 (_type_ vector float float) vector)
(tracking-spline-method-22 (_type_ float) none)
(tracking-spline-method-23 (_type_) none)
)
)
(deftype cam-float-seeker (structure)
((target float :offset-assert 0)
(value float :offset-assert 4)
(vel float :offset-assert 8)
(accel float :offset-assert 12)
(max-vel float :offset-assert 16)
(max-partial float :offset-assert 20)
((target float)
(value float)
(vel float)
(accel float)
(max-vel float)
(max-partial float)
)
:pack-me
:method-count-assert 13
:size-assert #x18
:flag-assert #xd00000018
(:methods
(init-cam-float-seeker (_type_ float float float float) none 9)
(copy-cam-float-seeker (_type_ _type_) none 10)
(update! (_type_ float) none 11)
(jump-to-target! (_type_ float) float 12)
(init-cam-float-seeker (_type_ float float float float) none)
(copy-cam-float-seeker (_type_ _type_) none)
(update! (_type_ float) none)
(jump-to-target! (_type_ float) float)
)
)
(defmethod init-cam-float-seeker cam-float-seeker ((this cam-float-seeker) (arg0 float) (arg1 float) (arg2 float) (arg3 float))
(defmethod init-cam-float-seeker ((this cam-float-seeker) (arg0 float) (arg1 float) (arg2 float) (arg3 float))
(set! (-> this target) arg0)
(set! (-> this value) arg0)
(set! (-> this vel) 0.0)
@@ -202,7 +184,7 @@
(none)
)
(defmethod copy-cam-float-seeker cam-float-seeker ((this cam-float-seeker) (arg0 cam-float-seeker))
(defmethod copy-cam-float-seeker ((this cam-float-seeker) (arg0 cam-float-seeker))
(set! (-> this target) (-> arg0 target))
(set! (-> this value) (-> arg0 value))
(set! (-> this vel) (-> arg0 vel))
@@ -213,7 +195,7 @@
(none)
)
(defmethod update! cam-float-seeker ((this cam-float-seeker) (offset float))
(defmethod update! ((this cam-float-seeker) (offset float))
0.0
0.0
(let* ((pos-error (- (+ (-> this target) offset) (-> this value)))
@@ -237,30 +219,27 @@
(none)
)
(defmethod jump-to-target! cam-float-seeker ((this cam-float-seeker) (arg0 float))
(defmethod jump-to-target! ((this cam-float-seeker) (arg0 float))
(set! (-> this value) (+ (-> this target) arg0))
(set! (-> this vel) 0.0)
)
(deftype cam-vector-seeker (structure)
((target vector :inline :offset-assert 0)
(value vector :inline :offset-assert 16)
(vel vector :inline :offset-assert 32)
(accel float :offset-assert 48)
(max-vel float :offset-assert 52)
(max-partial float :offset-assert 56)
((target vector :inline)
(value vector :inline)
(vel vector :inline)
(accel float)
(max-vel float)
(max-partial float)
)
:method-count-assert 11
:size-assert #x3c
:flag-assert #xb0000003c
(:methods
(init! (_type_ vector float float float) none 9)
(update! (_type_ vector) none 10)
(init! (_type_ vector float float float) none)
(update! (_type_ vector) none)
)
)
(defmethod init! cam-vector-seeker ((this cam-vector-seeker) (arg0 vector) (arg1 float) (arg2 float) (arg3 float))
(defmethod init! ((this cam-vector-seeker) (arg0 vector) (arg1 float) (arg2 float) (arg3 float))
(cond
(arg0
(set! (-> this target quad) (-> arg0 quad))
@@ -279,7 +258,7 @@
(none)
)
(defmethod update! cam-vector-seeker ((this cam-vector-seeker) (arg0 vector))
(defmethod update! ((this cam-vector-seeker) (arg0 vector))
(let ((gp-0 (new 'stack-no-clear 'vector)))
0.0
(cond
@@ -310,41 +289,34 @@
)
(deftype cam-rotation-tracker (structure)
((inv-mat matrix :inline :offset-assert 0)
(no-follow basic :offset-assert 64)
(follow-pt vector :inline :offset-assert 80)
(follow-off vector :inline :offset-assert 96)
(follow-blend float :offset-assert 112)
(tilt-adjust cam-float-seeker :inline :offset-assert 116)
(use-point-of-interest basic :offset-assert 140)
(point-of-interest vector :inline :offset-assert 144)
(point-of-interest-blend cam-float-seeker :inline :offset-assert 160)
(underwater-blend cam-float-seeker :inline :offset-assert 184)
((inv-mat matrix :inline)
(no-follow basic)
(follow-pt vector :inline)
(follow-off vector :inline)
(follow-blend float)
(tilt-adjust cam-float-seeker :inline)
(use-point-of-interest basic)
(point-of-interest vector :inline)
(point-of-interest-blend cam-float-seeker :inline)
(underwater-blend cam-float-seeker :inline)
)
:method-count-assert 9
:size-assert #xd0
:flag-assert #x9000000d0
)
(deftype camera-combiner (process)
((trans vector :inline :offset-assert 112)
(inv-camera-rot matrix :inline :offset-assert 128)
(fov float :offset-assert 192)
(interp-val float :offset-assert 196)
(interp-step float :offset-assert 200)
(dist-from-src float :offset-assert 204)
(dist-from-dest float :offset-assert 208)
(flip-control-axis vector :inline :offset-assert 224)
(velocity vector :inline :offset-assert 240)
(tracking-status uint64 :offset-assert 256)
(tracking-options int32 :offset-assert 264)
(tracking cam-rotation-tracker :inline :offset-assert 272)
((trans vector :inline)
(inv-camera-rot matrix :inline)
(fov float)
(interp-val float)
(interp-step float)
(dist-from-src float)
(dist-from-dest float)
(flip-control-axis vector :inline)
(velocity vector :inline)
(tracking-status uint64)
(tracking-options int32)
(tracking cam-rotation-tracker :inline)
)
:heap-base #x170
:method-count-assert 14
:size-assert #x1e0
:flag-assert #xe017001e0
(:states
cam-combiner-active
)
@@ -352,62 +324,58 @@
(deftype camera-slave (process)
((trans vector :inline :offset-assert 112)
(fov float :offset-assert 128)
(fov0 float :offset-assert 132)
(fov1 float :offset-assert 136)
(fov-index cam-index :inline :offset-assert 144)
(tracking cam-rotation-tracker :inline :offset-assert 192)
(view-off-param float :offset-assert 400)
(unknown-symbol symbol :offset 412)
(view-off vector :inline :offset-assert 416)
(min-z-override float :offset-assert 432)
(view-flat vector :inline :offset-assert 448)
(string-vel-dir uint32 :offset-assert 464)
(string-trans vector :inline :offset-assert 480)
(position-spline tracking-spline :inline :offset-assert 496)
(pivot-pt vector :inline :offset-assert 2144)
(pivot-rad float :offset-assert 2160)
(circular-follow vector :inline :offset-assert 2176)
(max-angle-offset float :offset-assert 2192)
(max-angle-curr float :offset-assert 2196)
(options uint32 :offset-assert 2200)
(cam-entity entity :offset-assert 2204)
(velocity vector :inline :offset-assert 2208)
(desired-pos vector :inline :offset-assert 2224)
(time-dist-too-far uint32 :offset-assert 2240)
(los-state slave-los-state :offset-assert 2244)
(good-point vector :inline :offset-assert 2256)
(los-tgt-spline-pt int32 :offset-assert 2272)
(los-tgt-spline-pt-incarnation int32 :offset-assert 2276)
(los-last-pos vector :inline :offset-assert 2288)
(intro-curve curve :inline :offset-assert 2304)
(intro-offset vector :inline :offset-assert 2336)
(intro-t float :offset-assert 2352)
(intro-t-step float :offset-assert 2356)
(outro-exit-value float :offset-assert 2360)
(spline-exists basic :offset-assert 2364)
(spline-curve curve :inline :offset-assert 2368)
(spline-offset vector :inline :offset-assert 2400)
(index cam-index :inline :offset-assert 2416)
(saved-pt vector :inline :offset-assert 2464)
(spline-tt float :offset-assert 2480)
(spline-follow-dist float :offset-assert 2484)
(change-event-from (pointer process-drawable) :offset-assert 2488)
(enter-has-run symbol :offset-assert 2492)
(blend-from-type uint64 :offset-assert 2496)
(blend-to-type uint64 :offset-assert 2504)
(have-phony-joystick basic :offset-assert 2512)
(phony-joystick-x float :offset-assert 2516)
(phony-joystick-y float :offset-assert 2520)
(string-min-val vector :inline :offset-assert 2528)
(string-max-val vector :inline :offset-assert 2544)
(string-val-locked basic :offset-assert 2560)
((trans vector :inline)
(fov float)
(fov0 float)
(fov1 float)
(fov-index cam-index :inline)
(tracking cam-rotation-tracker :inline)
(view-off-param float)
(unknown-symbol symbol :offset 412)
(view-off vector :inline)
(min-z-override float)
(view-flat vector :inline)
(string-vel-dir uint32)
(string-trans vector :inline)
(position-spline tracking-spline :inline)
(pivot-pt vector :inline)
(pivot-rad float)
(circular-follow vector :inline)
(max-angle-offset float)
(max-angle-curr float)
(options uint32)
(cam-entity entity)
(velocity vector :inline)
(desired-pos vector :inline)
(time-dist-too-far uint32)
(los-state slave-los-state)
(good-point vector :inline)
(los-tgt-spline-pt int32)
(los-tgt-spline-pt-incarnation int32)
(los-last-pos vector :inline)
(intro-curve curve :inline)
(intro-offset vector :inline)
(intro-t float)
(intro-t-step float)
(outro-exit-value float)
(spline-exists basic)
(spline-curve curve :inline)
(spline-offset vector :inline)
(index cam-index :inline)
(saved-pt vector :inline)
(spline-tt float)
(spline-follow-dist float)
(change-event-from (pointer process-drawable))
(enter-has-run symbol)
(blend-from-type uint64)
(blend-to-type uint64)
(have-phony-joystick basic)
(phony-joystick-x float)
(phony-joystick-y float)
(string-min-val vector :inline)
(string-max-val vector :inline)
(string-val-locked basic)
)
:heap-base #x9a0
:method-count-assert 14
:size-assert #xa04
:flag-assert #xe09a00a04
(:states
*camera-base-mode*
cam-bike
@@ -440,64 +408,60 @@
(deftype camera-master (process)
((master-options uint32 :offset-assert 112)
(num-slaves int32 :offset-assert 116)
(slave (pointer camera-slave) 2 :offset-assert 120)
(slave-options uint32 :offset-assert 128)
(view-off-param-save float :offset-assert 132)
(changer uint32 :offset-assert 136)
(cam-entity entity :offset-assert 140)
(stringMinLength float :offset-assert 144)
(stringMaxLength float :offset-assert 148)
(stringMinHeight float :offset-assert 152)
(stringMaxHeight float :offset-assert 156)
(string-min cam-vector-seeker :inline :offset-assert 160)
(string-max cam-vector-seeker :inline :offset-assert 224)
(string-push-z float :offset-assert 284)
(stringCliffHeight float :offset-assert 288)
(no-intro uint32 :offset-assert 292)
(force-blend uint32 :offset-assert 296)
(force-blend-time uint32 :offset-assert 300)
(local-down vector :inline :offset-assert 304)
(drawable-target handle :offset-assert 320)
(which-bone int32 :offset-assert 328)
(pov-handle handle :offset-assert 336)
(pov-bone int32 :offset-assert 344)
(being-attacked symbol :offset-assert 348)
(attack-start time-frame :offset-assert 352)
(on-ground symbol :offset-assert 360)
(under-water int32 :offset-assert 364)
(on-pole symbol :offset-assert 368)
(tgt-rot-mat matrix :inline :offset-assert 384)
(tgt-face-mat matrix :inline :offset-assert 448)
(tpos-old vector :inline :offset-assert 512)
(tpos-curr vector :inline :offset-assert 528)
(target-height float :offset-assert 544)
(tpos-old-adj vector :inline :offset-assert 560)
(tpos-curr-adj vector :inline :offset-assert 576)
(tpos-tgt vector :inline :offset-assert 592)
(upspeed float :offset-assert 608)
(pitch-off vector :inline :offset-assert 624)
(foot-offset float :offset-assert 640)
(head-offset float :offset-assert 644)
(target-spline tracking-spline :inline :offset-assert 656)
(ease-from vector :inline :offset-assert 2304)
(ease-t float :offset-assert 2320)
(ease-step float :offset-assert 2324)
(ease-to vector :inline :offset-assert 2336)
(outro-curve curve :inline :offset-assert 2352)
(outro-t float :offset-assert 2372)
(outro-t-step float :offset-assert 2376)
(outro-exit-value float :offset-assert 2380)
(water-drip-time time-frame :offset-assert 2384)
(water-drip sparticle-launch-control :offset-assert 2392)
(water-drip-mult float :offset-assert 2396)
(water-drip-speed float :offset-assert 2400)
((master-options uint32)
(num-slaves int32)
(slave (pointer camera-slave) 2)
(slave-options uint32)
(view-off-param-save float)
(changer uint32)
(cam-entity entity)
(stringMinLength float)
(stringMaxLength float)
(stringMinHeight float)
(stringMaxHeight float)
(string-min cam-vector-seeker :inline)
(string-max cam-vector-seeker :inline)
(string-push-z float)
(stringCliffHeight float)
(no-intro uint32)
(force-blend uint32)
(force-blend-time uint32)
(local-down vector :inline)
(drawable-target handle)
(which-bone int32)
(pov-handle handle)
(pov-bone int32)
(being-attacked symbol)
(attack-start time-frame)
(on-ground symbol)
(under-water int32)
(on-pole symbol)
(tgt-rot-mat matrix :inline)
(tgt-face-mat matrix :inline)
(tpos-old vector :inline)
(tpos-curr vector :inline)
(target-height float)
(tpos-old-adj vector :inline)
(tpos-curr-adj vector :inline)
(tpos-tgt vector :inline)
(upspeed float)
(pitch-off vector :inline)
(foot-offset float)
(head-offset float)
(target-spline tracking-spline :inline)
(ease-from vector :inline)
(ease-t float)
(ease-step float)
(ease-to vector :inline)
(outro-curve curve :inline)
(outro-t float)
(outro-t-step float)
(outro-exit-value float)
(water-drip-time time-frame)
(water-drip sparticle-launch-control)
(water-drip-mult float)
(water-drip-speed float)
)
:heap-base #x900
:method-count-assert 14
:size-assert #x964
:flag-assert #xe09000964
(:states
cam-master-active
list-keeper-active
+14 -14
View File
@@ -343,7 +343,7 @@
)
)
(defmethod cam-index-method-9 cam-index ((this cam-index) (arg0 symbol) (arg1 entity) (arg2 vector) (arg3 curve))
(defmethod cam-index-method-9 ((this cam-index) (arg0 symbol) (arg1 entity) (arg2 vector) (arg3 curve))
(local-vars (sv-32 (function _varargs_ object)))
(format (clear *cam-res-string*) "~S-flags" arg0)
(set! (-> this flags) (the-as cam-index-options (cam-slave-get-flags arg1 (string->symbol *res-key-string*))))
@@ -419,7 +419,7 @@
#t
)
(defmethod cam-index-method-10 cam-index ((this cam-index) (arg0 vector))
(defmethod cam-index-method-10 ((this cam-index) (arg0 vector))
(let ((s5-0 (new-stack-vector0)))
0.0
(vector-! s5-0 arg0 (the-as vector (-> this vec)))
@@ -438,7 +438,7 @@
)
)
(defmethod tracking-spline-method-10 tracking-spline ((this tracking-spline) (arg0 vector))
(defmethod tracking-spline-method-10 ((this tracking-spline) (arg0 vector))
(set! (-> this point 0 position quad) (-> arg0 quad))
(set! (-> this point 0 next) -134250495)
(set! (-> this summed-len) 0.0)
@@ -462,7 +462,7 @@
(none)
)
(defmethod tracking-spline-method-13 tracking-spline ((this tracking-spline) (arg0 int))
(defmethod tracking-spline-method-13 ((this tracking-spline) (arg0 int))
(let ((v1-3 (-> this point arg0 next)))
(cond
((= v1-3 -134250495)
@@ -495,7 +495,7 @@
(none)
)
(defmethod tracking-spline-method-14 tracking-spline ((this tracking-spline) (arg0 tracking-spline-sampler))
(defmethod tracking-spline-method-14 ((this tracking-spline) (arg0 tracking-spline-sampler))
(let ((v1-0 (-> this used-point)))
(set! (-> this partial-point) (-> arg0 partial-pt))
(when (= (-> this next-to-last-point) v1-0)
@@ -534,7 +534,7 @@
(none)
)
(defmethod tracking-spline-method-15 tracking-spline ((this tracking-spline))
(defmethod tracking-spline-method-15 ((this tracking-spline))
(let ((s5-0 (new 'stack-no-clear 'tracking-spline-sampler)))
(let ((a2-0 (new 'stack-no-clear 'tracking-point)))
(set! (-> s5-0 cur-pt) (-> this used-point))
@@ -580,7 +580,7 @@
(none)
)
(defmethod tracking-spline-method-16 tracking-spline ((this tracking-spline) (arg0 float))
(defmethod tracking-spline-method-16 ((this tracking-spline) (arg0 float))
(let ((s4-0 (new 'stack-no-clear 'tracking-spline-sampler)))
(let ((a2-0 (new 'stack-no-clear 'vector)))
(set! (-> s4-0 cur-pt) (-> this used-point))
@@ -618,7 +618,7 @@
(none)
)
(defmethod tracking-spline-method-17 tracking-spline ((this tracking-spline) (arg0 vector) (arg1 float) (arg2 float) (arg3 symbol))
(defmethod tracking-spline-method-17 ((this tracking-spline) (arg0 vector) (arg1 float) (arg2 float) (arg3 symbol))
(let ((s3-0 (-> this free-point))
(s2-0 (-> this end-point))
)
@@ -659,7 +659,7 @@
0
)
(defmethod tracking-spline-method-18 tracking-spline ((this tracking-spline) (arg0 float) (arg1 vector) (arg2 tracking-spline-sampler))
(defmethod tracking-spline-method-18 ((this tracking-spline) (arg0 float) (arg1 vector) (arg2 tracking-spline-sampler))
(local-vars (f0-4 float))
(when (not arg2)
(set! arg2 (new 'stack-no-clear 'tracking-spline-sampler))
@@ -701,13 +701,13 @@
(the-as vector #f)
)
(defmethod tracking-spline-method-19 tracking-spline ((this tracking-spline) (arg0 float) (arg1 vector) (arg2 tracking-spline-sampler))
(defmethod tracking-spline-method-19 ((this tracking-spline) (arg0 float) (arg1 vector) (arg2 tracking-spline-sampler))
(vector-reset! arg1)
(tracking-spline-method-18 this arg0 arg1 arg2)
arg1
)
(defmethod tracking-spline-method-20 tracking-spline ((this tracking-spline) (arg0 vector) (arg1 int))
(defmethod tracking-spline-method-20 ((this tracking-spline) (arg0 vector) (arg1 int))
(let ((s3-0 (new 'stack-no-clear 'vector)))
(vector-!
s3-0
@@ -795,7 +795,7 @@
(none)
)
(defmethod tracking-spline-method-21 tracking-spline ((this tracking-spline) (arg0 vector) (arg1 float) (arg2 float))
(defmethod tracking-spline-method-21 ((this tracking-spline) (arg0 vector) (arg1 float) (arg2 float))
(let ((v1-0 (-> this used-point))
(f0-0 (-> this partial-point))
)
@@ -843,7 +843,7 @@
arg0
)
(defmethod tracking-spline-method-22 tracking-spline ((this tracking-spline) (arg0 float))
(defmethod tracking-spline-method-22 ((this tracking-spline) (arg0 float))
(when (< arg0 (-> this summed-len))
(let ((s5-0 (new 'stack-no-clear 'tracking-spline-sampler)))
(let ((a2-0 (new 'stack-no-clear 'vector)))
@@ -858,7 +858,7 @@
(none)
)
(defmethod tracking-spline-method-9 tracking-spline ((this tracking-spline))
(defmethod tracking-spline-method-9 ((this tracking-spline))
(let ((v1-0 (-> this used-point))
(s4-0 0)
(s5-0 0)
+21 -23
View File
@@ -22,30 +22,28 @@
;; for example, the introduction to orbs in geyser, or the camera that shows you where the steps to fire canyon
;; are.
(deftype pov-camera (process-drawable)
((cspace-array cspace-array :offset 112)
(flags pov-camera-flag :offset-assert 176)
(debounce-start-time time-frame :offset-assert 184)
(notify-handle handle :offset-assert 192)
(anim-name string :offset-assert 200)
(command-list pair :offset-assert 204)
(mask-to-clear process-mask :offset-assert 208)
(music-volume-movie float :offset-assert 212)
(sfx-volume-movie float :offset-assert 216)
((cspace-array cspace-array :overlay-at root)
(flags pov-camera-flag)
(debounce-start-time time-frame)
(notify-handle handle)
(anim-name string)
(command-list pair)
(mask-to-clear process-mask)
(music-volume-movie float)
(sfx-volume-movie float)
)
:heap-base #x70
:method-count-assert 30
:size-assert #xdc
:flag-assert #x1e007000dc
(:state-methods
pov-camera-abort
pov-camera-done-playing
pov-camera-playing
pov-camera-start-playing
pov-camera-startup
)
(:methods
(pov-camera-abort () _type_ :state 20)
(pov-camera-done-playing () _type_ :state 21)
(pov-camera-playing () _type_ :state 22)
(pov-camera-start-playing () _type_ :state 23)
(pov-camera-startup () _type_ :state 24)
(check-for-abort (_type_) symbol 25)
(target-grabbed? (_type_) symbol 26)
(pre-startup-callback (_type_) none 27)
(target-released? () symbol 28)
(set-stack-size! (_type_) none 29)
(check-for-abort (_type_) symbol)
(target-grabbed? (_type_) symbol)
(pre-startup-callback (_type_) none)
(target-released? (_type_) symbol)
(set-stack-size! (_type_) none)
)
)
+6 -6
View File
@@ -7,7 +7,7 @@
;; DECOMP BEGINS
(defmethod check-for-abort pov-camera ((this pov-camera))
(defmethod check-for-abort ((this pov-camera))
(when (or (and (time-elapsed? (-> this debounce-start-time) (seconds 0.2)) (cpad-pressed? 0 triangle))
(logtest? (-> this flags) (pov-camera-flag allow-abort))
)
@@ -20,11 +20,11 @@
)
)
(defmethod target-grabbed? pov-camera ((this pov-camera))
(defmethod target-grabbed? ((this pov-camera))
(or (not *target*) (process-grab? *target*))
)
(defmethod target-released? pov-camera ()
(defmethod target-released? ((this pov-camera))
(or (not *target*) (process-release? *target*))
)
@@ -148,7 +148,7 @@
(defstate pov-camera-done-playing (pov-camera)
:virtual #t
:code (behavior ()
(while (begin self (not ((method-of-object self target-released?))))
(while (not (target-released? self))
(suspend)
)
(send-event (handle->process (-> self notify-handle)) 'notify 'die)
@@ -159,12 +159,12 @@
)
)
(defmethod pre-startup-callback pov-camera ((this pov-camera))
(defmethod pre-startup-callback ((this pov-camera))
0
(none)
)
(defmethod set-stack-size! pov-camera ((this pov-camera))
(defmethod set-stack-size! ((this pov-camera))
(none)
)
+81 -111
View File
@@ -16,56 +16,44 @@
;;;;;;;;;;;;;;;;;;;;;;;
(deftype collide-using-spheres-params (structure)
((spheres (inline-array sphere) :offset-assert 0)
(num-spheres uint32 :offset-assert 4)
(collide-with collide-kind :offset-assert 8)
(proc process-drawable :offset-assert 16)
(ignore-pat pat-surface :offset-assert 20)
(solid-only basic :offset-assert 24)
((spheres (inline-array sphere))
(num-spheres uint32)
(collide-with collide-kind)
(proc process-drawable)
(ignore-pat pat-surface)
(solid-only basic)
)
:method-count-assert 9
:size-assert #x1c
:flag-assert #x90000001c
)
;; primitive using sphere-sphere
(deftype collide-puss-sphere (structure)
((bsphere sphere :inline :offset-assert 0)
(bbox4w bounding-box4w :inline :offset-assert 16)
((bsphere sphere :inline)
(bbox4w bounding-box4w :inline)
)
:method-count-assert 9
:size-assert #x30
:flag-assert #x900000030
)
(deftype collide-puss-work (structure)
((closest-pt vector :inline :offset-assert 0)
(tri-normal vector :inline :offset-assert 16)
(tri-bbox4w bounding-box4w :inline :offset-assert 32)
(spheres-bbox4w bounding-box4w :inline :offset-assert 64)
(spheres collide-puss-sphere 64 :inline :offset-assert 96)
((closest-pt vector :inline)
(tri-normal vector :inline)
(tri-bbox4w bounding-box4w :inline)
(spheres-bbox4w bounding-box4w :inline)
(spheres collide-puss-sphere 64 :inline)
)
:method-count-assert 11
:size-assert #xc60
:flag-assert #xb00000c60
(:methods
(collide-puss-work-method-9 (_type_ object object) symbol 9)
(collide-puss-work-method-10 (_type_ object object) symbol 10)
(collide-puss-work-method-9 (_type_ object object) symbol)
(collide-puss-work-method-10 (_type_ object object) symbol)
)
)
;; primitive using y probe
(deftype collide-puyp-work (structure)
((best-u float :offset-assert 0)
(ignore-pat pat-surface :offset-assert 4)
(tri-out collide-tri-result :offset-assert 8)
(start-pos vector :inline :offset-assert 16)
(move-dist vector :inline :offset-assert 32)
((best-u float)
(ignore-pat pat-surface)
(tri-out collide-tri-result)
(start-pos vector :inline)
(move-dist vector :inline)
)
:method-count-assert 9
:size-assert #x30
:flag-assert #x900000030
)
;;;;;;;;;;;;;;;;;;;;;;;
@@ -75,116 +63,98 @@
;; The triangles stored in the cache.
;; This is a common return type of collision queries.
(deftype collide-cache-tri (structure)
((vertex vector 3 :inline :offset-assert 0) ;; actual locations
(extra-quad uint128 :offset 48)
(pat pat-surface :offset 48) ;; metadata about the surface of this tri
(prim-index uint16 :offset 52) ;; in the collide-cache-prim list
(user16 uint16 :offset 54)
(user32 uint32 2 :offset 56)
((vertex vector 3 :inline) ;; actual locations
(extra-quad uint128 :offset 48)
(pat pat-surface :overlay-at extra-quad) ; metadata about the surface of this tri
(prim-index uint16 :offset 52) ; in the collide-cache-prim list
(user16 uint16 :offset 54)
(user32 uint32 2 :offset 56)
)
:method-count-assert 9
:size-assert #x40
:flag-assert #x900000040
)
;; The primitives stored in the cache.
;; The "core" is extracted from the normal collide-shape-prim and placed inline here.
(deftype collide-cache-prim (structure)
((prim-core collide-prim-core :inline :offset-assert 0)
(extra-quad uint128 :offset-assert 32)
(ccache collide-cache :offset 32)
(prim collide-shape-prim :offset 36)
(first-tri uint16 :offset 40)
(num-tris uint16 :offset 42)
(unused uint8 4 :offset 44)
(world-sphere vector :inline :offset 0)
(collide-as collide-kind :offset 16)
(action collide-action :offset 24)
(offense collide-offense :offset 28)
(prim-type int8 :offset 29)
((prim-core collide-prim-core :inline)
(extra-quad uint128)
(ccache collide-cache :overlay-at extra-quad)
(prim collide-shape-prim :offset 36)
(first-tri uint16 :offset 40)
(num-tris uint16 :offset 42)
(unused uint8 4 :offset 44)
(world-sphere vector :inline :overlay-at (-> prim-core world-sphere))
(collide-as collide-kind :overlay-at (-> prim-core collide-as))
(action collide-action :overlay-at (-> prim-core action))
(offense collide-offense :overlay-at (-> prim-core offense))
(prim-type int8 :overlay-at (-> prim-core prim-type))
)
:method-count-assert 11
:size-assert #x30
:flag-assert #xb00000030
(:methods
(resolve-moving-sphere-tri (_type_ collide-tri-result collide-prim-core vector float collide-action) float 9)
(resolve-moving-sphere-sphere (_type_ collide-tri-result collide-prim-core vector float collide-action) float 10)
(resolve-moving-sphere-tri (_type_ collide-tri-result collide-prim-core vector float collide-action) float)
(resolve-moving-sphere-sphere (_type_ collide-tri-result collide-prim-core vector float collide-action) float)
)
)
;; The actual cache!
(deftype collide-cache (basic)
((num-tris int32 :offset-assert 4)
(num-prims int32 :offset-assert 8)
(num-prims-u uint32 :offset 8)
(ignore-mask pat-surface :offset-assert 12)
(proc process-drawable :offset-assert 16) ;; types: target
(collide-box bounding-box :inline :offset-assert 32)
(collide-box4w bounding-box4w :inline :offset-assert 64)
(collide-with collide-kind :offset-assert 96)
(prims collide-cache-prim 100 :inline :offset-assert 112)
(tris collide-cache-tri 461 :inline :offset-assert 4912)
((num-tris int32)
(num-prims int32)
(num-prims-u uint32 :overlay-at num-prims)
(ignore-mask pat-surface)
(proc process-drawable)
(collide-box bounding-box :inline)
(collide-box4w bounding-box4w :inline)
(collide-with collide-kind)
(prims collide-cache-prim 100 :inline)
(tris collide-cache-tri 461 :inline)
)
:method-count-assert 33
:size-assert #x8670
:flag-assert #x2100008670
(:methods
(debug-draw (_type_) none 9)
(fill-and-probe-using-line-sphere (_type_ vector vector float collide-kind process collide-tri-result pat-surface) float 10)
(fill-and-probe-using-spheres (_type_ collide-using-spheres-params) symbol 11)
(fill-and-probe-using-y-probe (_type_ vector float collide-kind process-drawable collide-tri-result pat-surface) float 12)
(fill-using-bounding-box (_type_ bounding-box collide-kind process-drawable pat-surface) none 13)
(fill-using-line-sphere (_type_ vector vector float collide-kind process-drawable pat-surface) none 14)
(fill-using-spheres (_type_ collide-using-spheres-params) none 15)
(fill-using-y-probe (_type_ vector float collide-kind process-drawable pat-surface) none 16)
(initialize (_type_) none 17)
(probe-using-line-sphere (_type_ vector vector float collide-kind collide-tri-result pat-surface) float 18)
(probe-using-spheres (_type_ collide-using-spheres-params) symbol 19)
(probe-using-y-probe (_type_ vector float collide-kind collide-tri-result pat-surface) float 20)
(fill-from-background (_type_ (function bsp-header int collide-list none) (function collide-cache object none)) none 21) ;; second functiom is method 28
(fill-from-foreground-using-box (_type_) none 22)
(fill-from-foreground-using-line-sphere (_type_) none 23)
(fill-from-foreground-using-y-probe (_type_) none 24)
(fill-from-water (_type_ water-control) none 25) ;; or whatever is from 152 in the process passed to 16
(load-mesh-from-spad-in-box (_type_ collide-frag-mesh) none 26)
(collide-cache-method-27 (_type_) none 27)
(collide-cache-method-28 (_type_) none 28)
(collide-cache-method-29 (_type_ collide-frag-mesh) none 29)
(puyp-mesh (_type_ collide-puyp-work collide-cache-prim) none 30)
(puyp-sphere (_type_ collide-puyp-work collide-cache-prim) vector 31)
(unpack-background-collide-mesh (_type_ object object object) none 32) ;; helper for fill from background.
(debug-draw (_type_) none)
(fill-and-probe-using-line-sphere (_type_ vector vector float collide-kind process collide-tri-result pat-surface) float)
(fill-and-probe-using-spheres (_type_ collide-using-spheres-params) symbol)
(fill-and-probe-using-y-probe (_type_ vector float collide-kind process-drawable collide-tri-result pat-surface) float)
(fill-using-bounding-box (_type_ bounding-box collide-kind process-drawable pat-surface) none)
(fill-using-line-sphere (_type_ vector vector float collide-kind process-drawable pat-surface) none)
(fill-using-spheres (_type_ collide-using-spheres-params) none)
(fill-using-y-probe (_type_ vector float collide-kind process-drawable pat-surface) none)
(initialize (_type_) none)
(probe-using-line-sphere (_type_ vector vector float collide-kind collide-tri-result pat-surface) float)
(probe-using-spheres (_type_ collide-using-spheres-params) symbol)
(probe-using-y-probe (_type_ vector float collide-kind collide-tri-result pat-surface) float)
(fill-from-background (_type_ (function bsp-header int collide-list none) (function collide-cache object none)) none)
(fill-from-foreground-using-box (_type_) none)
(fill-from-foreground-using-line-sphere (_type_) none)
(fill-from-foreground-using-y-probe (_type_) none)
(fill-from-water (_type_ water-control) none)
(load-mesh-from-spad-in-box (_type_ collide-frag-mesh) none)
(collide-cache-method-27 (_type_) none)
(collide-cache-method-28 (_type_) none)
(collide-cache-method-29 (_type_ collide-frag-mesh) none)
(puyp-mesh (_type_ collide-puyp-work collide-cache-prim) none)
(puyp-sphere (_type_ collide-puyp-work collide-cache-prim) vector)
(unpack-background-collide-mesh (_type_ object object object) none)
)
)
(deftype collide-list-item (structure)
((mesh collide-frag-mesh :offset-assert 0)
(inst basic :offset-assert 4)
((mesh collide-frag-mesh)
(inst basic)
)
:method-count-assert 9
:size-assert #x8
:flag-assert #x900000008
)
(deftype collide-list (structure)
((num-items int32 :offset-assert 0)
(items collide-list-item 256 :inline :offset-assert 16)
((num-items int32)
(items collide-list-item 256 :inline)
)
:method-count-assert 9
:size-assert #x1010
:flag-assert #x900001010
)
(deftype collide-work (structure)
((collide-sphere-neg-r sphere :inline :offset-assert 0)
(collide-box4w bounding-box4w :inline :offset-assert 16)
(inv-mat matrix :inline :offset-assert 48)
((collide-sphere-neg-r sphere :inline)
(collide-box4w bounding-box4w :inline)
(inv-mat matrix :inline)
)
:method-count-assert 9
:size-assert #x70
:flag-assert #x900000070
)
@@ -16,80 +16,65 @@
;; DECOMP BEGINS
(deftype edge-grab-info (structure)
((world-vertex vector 6 :inline :offset-assert 0)
(local-vertex vector 6 :inline :offset-assert 96)
(actor-cshape-prim-offset int32 :offset-assert 192)
(actor-handle handle :offset-assert 200)
(hanging-matrix matrix :inline :offset-assert 208)
(edge-vertex vector 2 :inline :offset 0)
(center-hold vector :inline :offset 32)
(tri-vertex vector 3 :inline :offset 48)
(left-hand-hold vector :inline :offset-assert 272)
(right-hand-hold vector :inline :offset-assert 288)
(center-hold-old vector :inline :offset-assert 304)
(edge-tri-pat uint32 :offset-assert 320)
((world-vertex vector 6 :inline)
(local-vertex vector 6 :inline)
(actor-cshape-prim-offset int32)
(actor-handle handle)
(hanging-matrix matrix :inline)
(edge-vertex vector 2 :inline :overlay-at (-> world-vertex 0))
(center-hold vector :inline :overlay-at (-> world-vertex 2))
(tri-vertex vector 3 :inline :overlay-at (-> world-vertex 3))
(left-hand-hold vector :inline)
(right-hand-hold vector :inline)
(center-hold-old vector :inline)
(edge-tri-pat uint32)
)
:method-count-assert 11
:size-assert #x144
:flag-assert #xb00000144
(:methods
(edge-grab-info-method-9 (_type_) symbol 9)
(debug-draw (_type_) symbol 10)
(edge-grab-info-method-9 (_type_) symbol)
(debug-draw (_type_) symbol)
)
)
;; og:preserve-this
(declare-type collide-cache-tri structure)
(deftype collide-edge-tri (structure)
((ctri collide-cache-tri :offset-assert 0)
(normal vector :inline :offset-assert 16)
((ctri collide-cache-tri)
(normal vector :inline)
)
:method-count-assert 9
:size-assert #x20
:flag-assert #x900000020
)
(deftype collide-edge-edge (structure)
((ignore basic :offset-assert 0)
(etri collide-edge-tri :offset-assert 4)
(vertex-ptr (inline-array vector) 2 :offset-assert 8)
(outward vector :inline :offset-assert 16)
(edge-vec-norm vector :inline :offset-assert 32)
((ignore basic)
(etri collide-edge-tri)
(vertex-ptr (inline-array vector) 2)
(outward vector :inline)
(edge-vec-norm vector :inline)
)
:method-count-assert 9
:size-assert #x30
:flag-assert #x900000030
)
(deftype collide-edge-hold-item (structure)
((next collide-edge-hold-item :offset-assert 0)
(rating float :offset-assert 4)
(split int8 :offset-assert 8)
(edge collide-edge-edge :offset-assert 12)
(center-pt vector :inline :offset-assert 16)
(outward-pt vector :inline :offset-assert 32)
((next collide-edge-hold-item)
(rating float)
(split int8)
(edge collide-edge-edge)
(center-pt vector :inline)
(outward-pt vector :inline)
)
:method-count-assert 9
:size-assert #x30
:flag-assert #x900000030
)
(deftype collide-edge-hold-list (structure)
((num-allocs uint32 :offset-assert 0)
(num-attempts uint32 :offset-assert 4)
(head collide-edge-hold-item :offset-assert 8)
(items collide-edge-hold-item 32 :inline :offset-assert 16)
(attempts qword 32 :inline :offset-assert 1552)
((num-allocs uint32)
(num-attempts uint32)
(head collide-edge-hold-item)
(items collide-edge-hold-item 32 :inline)
(attempts qword 32 :inline)
)
:method-count-assert 11
:size-assert #x810
:flag-assert #xb00000810
(:methods
(debug-draw (_type_) object 9)
(add-to-list! (_type_ collide-edge-hold-item) none 10)
(debug-draw (_type_) object)
(add-to-list! (_type_ collide-edge-hold-item) none)
)
)
@@ -97,48 +82,45 @@
(declare-type collide-cache basic)
(declare-type collide-shape basic)
(deftype collide-edge-work (structure)
((ccache collide-cache :offset-assert 0)
(cshape collide-shape :offset-assert 4)
(num-verts uint32 :offset-assert 8)
(num-edges uint32 :offset-assert 12)
(num-tris uint32 :offset-assert 16)
(cache-fill-box bounding-box :inline :offset-assert 32)
(within-reach-box bounding-box :inline :offset-assert 64)
(within-reach-box4w bounding-box4w :inline :offset-assert 96)
(search-pt vector :inline :offset-assert 128)
(search-dir-vec vector :inline :offset-assert 144)
(max-dist-sqrd-to-outward-pt float :offset-assert 160)
(max-dir-cosa-delta float :offset-assert 164)
(split-dists float 2 :offset-assert 168)
(outward-offset vector :inline :offset-assert 176)
(local-cache-fill-box bounding-box :inline :offset-assert 192)
(local-within-reach-box bounding-box :inline :offset-assert 224)
(local-player-spheres sphere 12 :inline :offset-assert 256)
(world-player-spheres sphere 12 :inline :offset-assert 448)
(local-player-hanging-spheres sphere 6 :inline :offset 256)
(world-player-hanging-spheres sphere 6 :inline :offset 448)
(local-player-leap-up-spheres sphere 6 :inline :offset 352)
(world-player-leap-up-spheres sphere 6 :inline :offset 544)
(verts vector 64 :inline :offset-assert 640)
(edges collide-edge-edge 96 :inline :offset-assert 1664)
(tris collide-edge-tri 48 :inline :offset-assert 6272)
(hold-list collide-edge-hold-list :inline :offset-assert 7808)
((ccache collide-cache)
(cshape collide-shape)
(num-verts uint32)
(num-edges uint32)
(num-tris uint32)
(cache-fill-box bounding-box :inline)
(within-reach-box bounding-box :inline)
(within-reach-box4w bounding-box4w :inline)
(search-pt vector :inline)
(search-dir-vec vector :inline)
(max-dist-sqrd-to-outward-pt float)
(max-dir-cosa-delta float)
(split-dists float 2)
(outward-offset vector :inline)
(local-cache-fill-box bounding-box :inline)
(local-within-reach-box bounding-box :inline)
(local-player-spheres sphere 12 :inline)
(world-player-spheres sphere 12 :inline)
(local-player-hanging-spheres sphere 6 :inline :overlay-at (-> local-player-spheres 0))
(world-player-hanging-spheres sphere 6 :inline :overlay-at (-> world-player-spheres 0))
(local-player-leap-up-spheres sphere 6 :inline :overlay-at (-> local-player-spheres 6))
(world-player-leap-up-spheres sphere 6 :inline :overlay-at (-> world-player-spheres 6))
(verts vector 64 :inline)
(edges collide-edge-edge 96 :inline)
(tris collide-edge-tri 48 :inline)
(hold-list collide-edge-hold-list :inline)
)
:method-count-assert 20
:size-assert #x2690
:flag-assert #x1400002690
(:methods
(search-for-edges (_type_ collide-edge-hold-list) symbol 9)
(debug-draw-edges (_type_) object 10)
(debug-draw-tris (_type_) none 11)
(debug-draw-sphere (_type_) symbol 12)
(compute-center-point! (_type_ collide-edge-edge vector) float 13)
(collide-edge-work-method-14 (_type_ vector vector int) float 14)
(find-grabbable-edges! (_type_) none 15)
(find-grabbable-tris! (_type_) none 16)
(should-add-to-list? (_type_ collide-edge-hold-item collide-edge-edge) symbol 17)
(find-best-grab! (_type_ collide-edge-hold-list edge-grab-info) symbol 18)
(check-grab-for-collisions (_type_ collide-edge-hold-item edge-grab-info) symbol 19)
(search-for-edges (_type_ collide-edge-hold-list) symbol)
(debug-draw-edges (_type_) object)
(debug-draw-tris (_type_) none)
(debug-draw-sphere (_type_) symbol)
(compute-center-point! (_type_ collide-edge-edge vector) float)
(collide-edge-work-method-14 (_type_ vector vector int) float)
(find-grabbable-edges! (_type_) none)
(find-grabbable-tris! (_type_) none)
(should-add-to-list? (_type_ collide-edge-hold-item collide-edge-edge) symbol)
(find-best-grab! (_type_ collide-edge-hold-list edge-grab-info) symbol)
(check-grab-for-collisions (_type_ collide-edge-hold-item edge-grab-info) symbol)
)
)
@@ -7,7 +7,7 @@
;; DECOMP BEGINS
(defmethod find-edge-grabs! target ((this target) (arg0 collide-cache))
(defmethod find-edge-grabs! ((this target) (arg0 collide-cache))
"Main edge grabbing method.
Will populate *edge-grab-info* and send *target* an 'edge-grab event if successful."
(rlet ((vf1 :class vf)
@@ -90,7 +90,7 @@
)
)
(defmethod search-for-edges collide-edge-work ((this collide-edge-work) (arg0 collide-edge-hold-list))
(defmethod search-for-edges ((this collide-edge-work) (arg0 collide-edge-hold-list))
"Iterate through edges, adding them to the collide-edge-hold-list, if they are good"
;; reset edge list.
(set! (-> arg0 num-allocs) (the-as uint 0))
@@ -125,20 +125,17 @@
(defmethod-mips2c "(method 10 collide-edge-hold-list)" 10 collide-edge-hold-list)
(deftype pbhp-stack-vars (structure)
((edge collide-edge-edge :offset-assert 0)
(allocated basic :offset-assert 4)
(neg-hold-pt vector :inline :offset-assert 16)
(split-vec vector :inline :offset-assert 32)
((edge collide-edge-edge)
(allocated basic)
(neg-hold-pt vector :inline)
(split-vec vector :inline)
)
:method-count-assert 9
:size-assert #x30
:flag-assert #x900000030
)
(defmethod-mips2c "(method 18 collide-edge-work)" 18 collide-edge-work)
(defmethod check-grab-for-collisions collide-edge-work ((this collide-edge-work) (arg0 collide-edge-hold-item) (arg1 edge-grab-info))
(defmethod check-grab-for-collisions ((this collide-edge-work) (arg0 collide-edge-hold-item) (arg1 edge-grab-info))
(local-vars (sv-144 (function vector vector vector float vector)) (sv-160 vector) (sv-176 vector))
(let* ((s3-0 (-> arg0 edge))
(s1-0 (-> s3-0 etri ctri))
@@ -231,7 +228,7 @@
#t
)
(defmethod edge-grab-info-method-9 edge-grab-info ((this edge-grab-info))
(defmethod edge-grab-info-method-9 ((this edge-grab-info))
(local-vars (v0-0 symbol) (v1-14 int))
(rlet ((acc :class vf)
(Q :class vf)
@@ -366,7 +363,7 @@
(defmethod-mips2c "(method 16 collide-edge-work)" 16 collide-edge-work)
(defmethod-mips2c "(method 15 collide-edge-work)" 15 collide-edge-work)
(defmethod collide-edge-work-method-14 collide-edge-work ((this collide-edge-work) (arg0 vector) (arg1 vector) (arg2 int))
(defmethod collide-edge-work-method-14 ((this collide-edge-work) (arg0 vector) (arg1 vector) (arg2 int))
(let ((f30-0 -1.0))
(let ((s2-0 (new 'stack-no-clear 'vector)))
(dotimes (s1-0 (the-as int (-> this num-edges)))
@@ -482,7 +479,7 @@
)
)
(defmethod compute-center-point! collide-edge-work ((this collide-edge-work) (arg0 collide-edge-edge) (arg1 vector))
(defmethod compute-center-point! ((this collide-edge-work) (arg0 collide-edge-edge) (arg1 vector))
(local-vars (v0-0 float) (v1-1 float) (v1-2 float) (v1-3 float))
(rlet ((Q :class vf)
(vf0 :class vf)
@@ -550,7 +547,7 @@
)
(defmethod debug-draw edge-grab-info ((this edge-grab-info))
(defmethod debug-draw ((this edge-grab-info))
(add-debug-line
#t
(bucket-id debug-no-zbuf)
@@ -603,7 +600,7 @@
)
)
(defmethod debug-draw-edges collide-edge-work ((this collide-edge-work))
(defmethod debug-draw-edges ((this collide-edge-work))
(let ((gp-0 0))
(dotimes (s4-0 (the-as int (-> this num-edges)))
(let* ((s3-0 (-> this edges s4-0))
@@ -652,7 +649,7 @@
)
)
(defmethod debug-draw-sphere collide-edge-work ((this collide-edge-work))
(defmethod debug-draw-sphere ((this collide-edge-work))
(dotimes (s5-0 (the-as int (-> this num-verts)))
(let ((a2-0 (-> this verts s5-0)))
(add-debug-sphere #t (bucket-id debug-no-zbuf) a2-0 819.2 (new 'static 'rgba :r #xff :g #xff :a #x80))
@@ -661,7 +658,7 @@
#f
)
(defmethod debug-draw collide-edge-hold-list ((this collide-edge-hold-list))
(defmethod debug-draw ((this collide-edge-hold-list))
(let ((s4-0 (-> this head))
(s5-0 0)
)
@@ -713,7 +710,7 @@
(format *stdcon* "hold list has ~D attempt(s)~%" (-> this num-attempts))
)
(defmethod debug-draw-tris collide-edge-work ((this collide-edge-work))
(defmethod debug-draw-tris ((this collide-edge-work))
(dotimes (s5-0 (the-as int (-> this num-tris)))
(let* ((v1-3 (-> this tris s5-0 ctri))
(t1-0 (copy-and-set-field (-> *pat-mode-info* (-> v1-3 pat mode) color) a 64))
+19 -29
View File
@@ -22,47 +22,37 @@
(deftype collide-frag-vertex (vector)
()
:method-count-assert 9
:size-assert #x10
:flag-assert #x900000010
)
(deftype collide-frag-mesh (basic)
((packed-data uint32 :offset-assert 4)
(pat-array uint32 :offset-assert 8)
(strip-data-len uint16 :offset-assert 12)
(poly-count uint16 :offset-assert 14)
(base-trans vector :inline :offset-assert 16)
(vertex-count uint8 :offset 28)
(vertex-data-qwc uint8 :offset 29)
(total-qwc uint8 :offset 30)
(unused uint8 :offset 31)
((packed-data uint32)
(pat-array uint32)
(strip-data-len uint16)
(poly-count uint16)
(base-trans vector :inline)
(vertex-count uint8 :overlay-at (-> base-trans w))
(vertex-data-qwc uint8 :offset 29)
(total-qwc uint8 :offset 30)
(unused uint8 :offset 31)
)
:method-count-assert 9
:size-assert #x20
:flag-assert #x900000020
)
(deftype collide-fragment (drawable)
((mesh collide-frag-mesh :offset 8)
((mesh collide-frag-mesh :offset 8)
)
:method-count-assert 18
:size-assert #x20
:flag-assert #x1200000020
)
(deftype drawable-inline-array-collide-fragment (drawable-inline-array)
((data collide-fragment 1 :inline :offset-assert 32)
(pad uint32 :offset-assert 64)
((data collide-fragment 1 :inline)
(pad uint32)
)
:method-count-assert 18
:size-assert #x44
:flag-assert #x1200000044
)
(deftype drawable-tree-collide-fragment (drawable-tree)
((data-override drawable-inline-array :offset 32))
:method-count-assert #x12
:size-assert #x24
:flag-assert #x1200000024
)
((data-override drawable-inline-array :overlay-at (-> data 0))
)
)
+20 -19
View File
@@ -5,15 +5,15 @@
;; name in dgo: collide-frag
;; dgos: GAME, ENGINE
;; DECOMP BEGINS
;; This file contains the drawable-tree implementation for collide-fragment
(defmethod login drawable-tree-collide-fragment ((this drawable-tree-collide-fragment))
;; DECOMP BEGINS
(defmethod login ((this drawable-tree-collide-fragment))
this
)
(defmethod draw drawable-tree-collide-fragment ((this drawable-tree-collide-fragment) (arg0 drawable-tree-collide-fragment) (arg1 display-frame))
(defmethod draw ((this drawable-tree-collide-fragment) (arg0 drawable-tree-collide-fragment) (arg1 display-frame))
"Note: this doesn't do anything (sadly)"
(when *display-render-collision*
(dotimes (s4-0 (-> this length))
@@ -24,30 +24,30 @@
(none)
)
(defmethod unpack-vis drawable-tree-collide-fragment ((this drawable-tree-collide-fragment) (arg0 (pointer int8)) (arg1 (pointer int8)))
(defmethod unpack-vis ((this drawable-tree-collide-fragment) (arg0 (pointer int8)) (arg1 (pointer int8)))
arg1
)
(defmethod collide-with-box drawable-tree-collide-fragment ((this drawable-tree-collide-fragment) (arg0 int) (arg1 collide-list))
(defmethod collide-with-box ((this drawable-tree-collide-fragment) (arg0 int) (arg1 collide-list))
"Collide everything in the tree with a box. Length arg doesn't matter here."
(collide-with-box (-> this data-override) (-> this length) arg1)
0
(none)
)
(defmethod collide-y-probe drawable-tree-collide-fragment ((this drawable-tree-collide-fragment) (arg0 int) (arg1 collide-list))
(defmethod collide-y-probe ((this drawable-tree-collide-fragment) (arg0 int) (arg1 collide-list))
(collide-y-probe (-> this data-override) (-> this length) arg1)
0
(none)
)
(defmethod collide-ray drawable-tree-collide-fragment ((this drawable-tree-collide-fragment) (arg0 int) (arg1 collide-list))
(defmethod collide-ray ((this drawable-tree-collide-fragment) (arg0 int) (arg1 collide-list))
(collide-ray (-> this data-override) (-> this length) arg1)
0
(none)
)
(defmethod mem-usage collide-fragment ((this collide-fragment) (arg0 memory-usage-block) (arg1 int))
(defmethod mem-usage ((this collide-fragment) (arg0 memory-usage-block) (arg1 int))
(let ((s5-0 (if (logtest? arg1 1)
53
50
@@ -79,11 +79,11 @@
)
)
(defmethod login drawable-inline-array-collide-fragment ((this drawable-inline-array-collide-fragment))
(defmethod login ((this drawable-inline-array-collide-fragment))
this
)
(defmethod draw collide-fragment ((this collide-fragment) (arg0 collide-fragment) (arg1 display-frame))
(defmethod draw ((this collide-fragment) (arg0 collide-fragment) (arg1 display-frame))
;; if we wanted to draw collide-fragment's we'd do it here.
; (when (< (-> this bsphere w) (meters 22.))
; (format 0 "sp: ~m : ~D~%" (-> this bsphere w) (-> this mesh poly-count))
@@ -98,13 +98,14 @@
; ;(add-debug-sphere #t (bucket-id debug) (-> this bsphere) (-> this bsphere w) (new 'static 'rgba :r #x80 :a #x80))
; )
;; (add-debug-point #t (bucket-id debug) (-> this bsphere))
0
(none)
)
(defmethod draw drawable-inline-array-collide-fragment ((this drawable-inline-array-collide-fragment)
(arg0 drawable-inline-array-collide-fragment)
(arg1 display-frame)
)
(defmethod draw ((this drawable-inline-array-collide-fragment)
(arg0 drawable-inline-array-collide-fragment)
(arg1 display-frame)
)
(dotimes (s4-0 (-> this length))
(let ((s3-0 (-> this data s4-0)))
(if (sphere-cull (-> s3-0 bsphere))
@@ -116,25 +117,25 @@
(none)
)
(defmethod collide-with-box drawable-inline-array-collide-fragment ((this drawable-inline-array-collide-fragment) (arg0 int) (arg1 collide-list))
(defmethod collide-with-box ((this drawable-inline-array-collide-fragment) (arg0 int) (arg1 collide-list))
(collide-with-box (the-as collide-fragment (-> this data)) (-> this length) arg1)
0
(none)
)
(defmethod collide-y-probe drawable-inline-array-collide-fragment ((this drawable-inline-array-collide-fragment) (arg0 int) (arg1 collide-list))
(defmethod collide-y-probe ((this drawable-inline-array-collide-fragment) (arg0 int) (arg1 collide-list))
(collide-y-probe (the-as collide-fragment (-> this data)) (-> this length) arg1)
0
(none)
)
(defmethod collide-ray drawable-inline-array-collide-fragment ((this drawable-inline-array-collide-fragment) (arg0 int) (arg1 collide-list))
(defmethod collide-ray ((this drawable-inline-array-collide-fragment) (arg0 int) (arg1 collide-list))
(collide-ray (the-as collide-fragment (-> this data)) (-> this length) arg1)
0
(none)
)
(defmethod mem-usage drawable-inline-array-collide-fragment ((this drawable-inline-array-collide-fragment) (arg0 memory-usage-block) (arg1 int))
(defmethod mem-usage ((this drawable-inline-array-collide-fragment) (arg0 memory-usage-block) (arg1 int))
(set! (-> arg0 length) (max 1 (-> arg0 length)))
(set! (-> arg0 data 0 name) (symbol->string 'drawable-group))
(+! (-> arg0 data 0 count) 1)
+31 -46
View File
@@ -17,14 +17,11 @@
;; The triangle involved in collision
;; Note: this is reused for the background collision system.
(deftype collide-tri-result (structure)
((vertex vector 3 :inline :offset-assert 0)
(intersect vector :inline :offset-assert 48)
(normal vector :inline :offset-assert 64)
(pat pat-surface :offset-assert 80)
((vertex vector 3 :inline)
(intersect vector :inline)
(normal vector :inline)
(pat pat-surface)
)
:method-count-assert 9
:size-assert #x54
:flag-assert #x900000054
)
;;;;;;;;;;;;;;;;;;;;
@@ -35,14 +32,11 @@
;; The vertex indices index into the collide-mesh vertex-data array.
;; Due to using uint8's you only get 256 vertices.
(deftype collide-mesh-tri (structure)
((vertex-index uint8 3 :offset-assert 0)
(unused uint8 :offset-assert 3)
(pat pat-surface :offset-assert 4)
((vertex-index uint8 3)
(unused uint8)
(pat pat-surface)
)
:pack-me
:method-count-assert 9
:size-assert #x8
:flag-assert #x900000008
)
;; og:preserve-this
@@ -50,23 +44,20 @@
;; A collision mesh. Note that's it's bound to a specific joint.
(deftype collide-mesh (basic)
((joint-id int32 :offset-assert 4)
(num-tris uint32 :offset-assert 8)
(num-verts uint32 :offset-assert 12)
(vertex-data (inline-array vector) :offset-assert 16)
(tris collide-mesh-tri 1 :inline :offset 32)
((joint-id int32)
(num-tris uint32)
(num-verts uint32)
(vertex-data (inline-array vector))
(tris collide-mesh-tri 1 :inline :offset 32)
)
:method-count-assert 16
:size-assert #x28
:flag-assert #x1000000028
(:methods
(debug-draw-tris (_type_ process-drawable int) none 9)
(overlap-test (_type_ collide-mesh-cache-tri vector) symbol 10)
(should-push-away-test (_type_ collide-mesh-cache-tri collide-tri-result vector float) float 11) ;; spat
(sphere-on-platform-test (_type_ collide-mesh-cache-tri collide-tri-result vector float) float 12) ;; sopt
(populate-cache! (_type_ collide-mesh-cache-tri matrix) none 13)
(collide-mesh-math-1 (_type_ object object) none 14)
(collide-mesh-math-2 (_type_ object object object) none 15)
(debug-draw-tris (_type_ process-drawable int) none)
(overlap-test (_type_ collide-mesh-cache-tri vector) symbol)
(should-push-away-test (_type_ collide-mesh-cache-tri collide-tri-result vector float) float)
(sphere-on-platform-test (_type_ collide-mesh-cache-tri collide-tri-result vector float) float)
(populate-cache! (_type_ collide-mesh-cache-tri matrix) none)
(collide-mesh-math-1 (_type_ object object) none)
(collide-mesh-math-2 (_type_ object object object) none)
)
)
@@ -84,18 +75,15 @@
(defconstant COLLIDE_MESH_CACHE_SIZE #xa000)
(deftype collide-mesh-cache (basic)
((used-size uint32 :offset-assert 4)
(max-size uint32 :offset-assert 8)
(id uint64 :offset-assert 16)
(data uint8 40960 :offset 32)
((used-size uint32)
(max-size uint32)
(id uint64)
(data uint8 40960 :offset 32)
)
:method-count-assert 12
:size-assert #xa020
:flag-assert #xc0000a020
(:methods
(allocate! (_type_ int) int 9)
(is-id? (_type_ int) symbol 10)
(next-id! (_type_) uint 11)
(allocate! (_type_ int) int)
(is-id? (_type_ int) symbol)
(next-id! (_type_) uint)
)
)
@@ -121,21 +109,18 @@
)
)
(defmethod is-id? collide-mesh-cache ((this collide-mesh-cache) (arg0 int))
(defmethod is-id? ((this collide-mesh-cache) (arg0 int))
"Is this our id?"
(= (-> this id) arg0)
)
;; possibly this is stored in the data of the collide-mesh-cache
(deftype collide-mesh-cache-tri (structure)
((vertex vector 3 :inline :offset-assert 0)
(normal vector :inline :offset-assert 48)
(bbox4w bounding-box4w :inline :offset-assert 64)
(pat pat-surface :offset 60)
((vertex vector 3 :inline)
(normal vector :inline)
(bbox4w bounding-box4w :inline)
(pat pat-surface :overlay-at (-> normal w))
)
:method-count-assert 9
:size-assert #x60
:flag-assert #x900000060
)
;; only allocate if we don't have an existing one.
+19 -17
View File
@@ -7,12 +7,12 @@
;; DECOMP BEGINS
(defmethod asize-of collide-mesh ((this collide-mesh))
(defmethod asize-of ((this collide-mesh))
"Compute the size in memory of a collide-mesh. Somehow this only counts num-tris and not verts."
(the-as int (+ (-> collide-mesh size) (* (+ (-> this num-tris) -1) 8)))
)
(defmethod mem-usage collide-mesh ((this collide-mesh) (arg0 memory-usage-block) (arg1 int))
(defmethod mem-usage ((this collide-mesh) (arg0 memory-usage-block) (arg1 int))
"Compute the memory usage of a collide-mesh."
(set! (-> arg0 length) (max 79 (-> arg0 length)))
(set! (-> arg0 data 78 name) "collide-mesh")
@@ -31,7 +31,7 @@
(the-as collide-mesh 0)
)
(defmethod debug-draw-tris collide-mesh ((this collide-mesh) (arg0 process-drawable) (arg1 int))
(defmethod debug-draw-tris ((this collide-mesh) (arg0 process-drawable) (arg1 int))
"Draw a collide-mesh."
(rlet ((acc :class vf)
(vf0 :class vf)
@@ -87,32 +87,28 @@
)
(deftype sopt-work (structure)
((intersect vector :inline :offset-assert 0)
(sphere-bbox4w bounding-box4w :inline :offset-assert 16)
((intersect vector :inline)
(sphere-bbox4w bounding-box4w :inline)
)
:method-count-assert 9
:size-assert #x30
:flag-assert #x900000030
)
(defmethod-mips2c "(method 12 collide-mesh)" 12 collide-mesh)
(deftype spat-work (structure)
((intersect vector :inline :offset-assert 0)
(sphere-bbox4w bounding-box4w :inline :offset-assert 16)
((intersect vector :inline)
(sphere-bbox4w bounding-box4w :inline)
)
:method-count-assert 9
:size-assert #x30
:flag-assert #x900000030
)
(defmethod-mips2c "(method 11 collide-mesh)" 11 collide-mesh)
(defmethod-mips2c "(method 14 collide-mesh)" 14 collide-mesh)
(defmethod-mips2c "(method 15 collide-mesh)" 15 collide-mesh)
(defmethod allocate! collide-mesh-cache ((this collide-mesh-cache) (arg0 int))
(defmethod allocate! ((this collide-mesh-cache) (arg0 int))
(local-vars (a1-2 int) (a2-2 int))
(let* ((v1-0 (+ arg0 15))
(a1-1 (-> this used-size))
@@ -146,7 +142,7 @@
)
)
(defmethod populate-cache! collide-mesh ((this collide-mesh) (arg0 collide-mesh-cache-tri) (arg1 matrix))
(defmethod populate-cache! ((this collide-mesh) (arg0 collide-mesh-cache-tri) (arg1 matrix))
(local-vars (t0-2 uint))
(rlet ((acc :class vf)
(Q :class vf)
@@ -314,8 +310,14 @@
)
)
(deftype oot-work (structure)
((intersect vector :inline)
(sphere-bbox4w bounding-box4w :inline)
)
)
(defmethod overlap-test collide-mesh ((this collide-mesh) (arg0 collide-mesh-cache-tri) (arg1 vector))
(defmethod overlap-test ((this collide-mesh) (arg0 collide-mesh-cache-tri) (arg1 vector))
(local-vars
(zero uint128)
(v1-0 uint128)
@@ -136,20 +136,15 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(deftype collide-probe-stack-elem (structure)
((child uint32 :offset-assert 0)
(count uint32 :offset-assert 4)
((child uint32)
(count uint32)
)
:method-count-assert 9
:size-assert #x8
:flag-assert #x900000008
)
(deftype collide-probe-stack (structure)
((data collide-probe-stack-elem 1024 :inline :offset-assert 0)
((data collide-probe-stack-elem 1024 :inline)
)
:method-count-assert 9
:size-assert #x4000
:flag-assert #x900004000
)
;;(define *collide-probe-stack* (the-as pointer (+ 4192 #x70000000)))
+209 -265
View File
@@ -95,20 +95,18 @@
(deftype collide-sticky-rider (structure)
((rider-handle handle :offset-assert 0)
(sticky-prim collide-shape-prim :offset-assert 8)
(prim-ry float :offset-assert 12)
(rider-local-pos vector :inline :offset-assert 16)
((rider-handle handle)
(sticky-prim collide-shape-prim)
(prim-ry float)
(rider-local-pos vector :inline)
)
:method-count-assert 10
:size-assert #x20
:flag-assert #xa00000020
(:methods
(set-rider! (_type_ handle) symbol 9)
(set-rider! (_type_ handle) symbol)
)
)
(defmethod set-rider! collide-sticky-rider ((this collide-sticky-rider) (arg0 handle))
(defmethod set-rider! ((this collide-sticky-rider) (arg0 handle))
"Set the rider and clear the primitive."
(set! (-> this rider-handle) arg0)
(set! (-> this sticky-prim) #f)
@@ -118,21 +116,19 @@
;; A collection of collide-sticky-riders
;; dynamic type. There's one collide-sticky-rider per rider.
(deftype collide-sticky-rider-group (basic)
((num-riders int32 :offset-assert 4)
(allocated-riders int32 :offset-assert 8)
(rider collide-sticky-rider 1 :inline :offset-assert 16)
((num-riders int32)
(allocated-riders int32)
(rider collide-sticky-rider 1 :inline)
)
:method-count-assert 11
:size-assert #x30
:flag-assert #xb00000030
(:methods
(new (symbol type int) _type_ 0)
(add-rider! (_type_ process-drawable) collide-sticky-rider 9)
(reset! (_type_) int 10)
(new (symbol type int) _type_)
(add-rider! (_type_ process-drawable) collide-sticky-rider)
(reset! (_type_) int)
)
)
(defmethod reset! collide-sticky-rider-group ((this collide-sticky-rider-group))
(defmethod reset! ((this collide-sticky-rider-group))
"Reset all active riders"
(set! (-> this num-riders) 0)
0
@@ -141,14 +137,11 @@
;; The rider will be pulled along by the object.
;; This includes possibly rotating the rider (if the platform spins, it spins Jak too).
(deftype pull-rider-info (structure)
((rider collide-sticky-rider :offset-assert 0)
(rider-cshape collide-shape-moving :offset-assert 4)
(rider-delta-ry float :offset-assert 8)
(rider-dest vector :inline :offset-assert 16)
((rider collide-sticky-rider)
(rider-cshape collide-shape-moving)
(rider-delta-ry float)
(rider-dest vector :inline)
)
:method-count-assert 9
:size-assert #x20
:flag-assert #x900000020
)
@@ -160,38 +153,32 @@
;; this computes a "move-vec" and "u". If you move along "move-vec" by "u", you will move out of collsion.
;; It also tells you which primitives are colliding.
(deftype collide-shape-intersect (basic)
((move-vec vector :inline :offset-assert 16)
(best-u float :offset-assert 32)
(best-tri collide-tri-result :inline :offset-assert 48)
(best-from-prim collide-shape-prim :offset-assert 132)
(best-to-prim collide-shape-prim :offset-assert 136)
((move-vec vector :inline)
(best-u float)
(best-tri collide-tri-result :inline)
(best-from-prim collide-shape-prim)
(best-to-prim collide-shape-prim)
)
:method-count-assert 10
:size-assert #x8c
:flag-assert #xa0000008c
(:methods
(init! (_type_ vector) symbol 9)
(init! (_type_ vector) symbol)
)
)
;; Collision with just overlap distance, no vector.
(deftype collide-overlap-result (structure)
((best-dist float :offset-assert 0)
(best-from-prim collide-shape-prim :offset-assert 4)
(best-to-prim collide-shape-prim :offset-assert 8)
(best-from-tri collide-tri-result :inline :offset-assert 16)
((best-dist float)
(best-from-prim collide-shape-prim)
(best-to-prim collide-shape-prim)
(best-from-tri collide-tri-result :inline)
)
:method-count-assert 10
:size-assert #x64
:flag-assert #xa00000064
(:methods
(reset! (_type_) none 9)
(reset! (_type_) none)
)
)
(defmethod reset! collide-overlap-result ((this collide-overlap-result))
"Reset the result."
(defmethod reset! ((this collide-overlap-result))
"Reset the result."
(set! (-> this best-dist) 0.0)
(set! (-> this best-from-prim) #f)
(set! (-> this best-to-prim) #f)
@@ -206,12 +193,9 @@
;; but this isn't well understood yet
(deftype overlaps-others-params (structure)
((options uint32 :offset-assert 0)
(tlist touching-list :offset-assert 4)
((options uint32)
(tlist touching-list)
)
:method-count-assert 9
:size-assert #x8
:flag-assert #x900000008
)
;; The engine system is used to link collision checks with processes.
@@ -344,17 +328,14 @@
;; this is a 32-byte chunk of data that can be pulled out an put in collide caches
;; it stores the transformed world sphere and the collision settings
(deftype collide-prim-core (structure)
((world-sphere vector :inline :offset-assert 0)
(collide-as collide-kind :offset-assert 16) ;; what are we (enemy, etc)
(action collide-action :offset-assert 24) ;; what happens if we collide (physics)
(offense collide-offense :offset-assert 28) ;; how hard do we have to hit it? (touch, attack...)
(prim-type int8 :offset-assert 29) ;; what type of primtive do we belong to?
(extra uint8 2 :offset-assert 30)
(quad uint128 2 :offset 0)
((world-sphere vector :inline)
(collide-as collide-kind)
(action collide-action)
(offense collide-offense)
(prim-type int8)
(extra uint8 2)
(quad uint128 2 :overlay-at (-> world-sphere quad))
)
:method-count-assert 9
:size-assert #x20
:flag-assert #x900000020
)
(declare-type collide-shape basic)
@@ -364,45 +345,40 @@
;; the base class for collision shapes.
(deftype collide-shape-prim (basic)
((cshape collide-shape :offset-assert 4) ;; our parent collide-shape
(prim-id uint32 :offset-assert 8) ;; ?
(transform-index int8 :offset-assert 12) ;; ?
(prim-core collide-prim-core :inline :offset-assert 16) ;; core data
(local-sphere vector :inline :offset-assert 48) ;; sphere, pre transform
(collide-with collide-kind :offset-assert 64) ;; things we can collide with
;; overlays of core.
(world-sphere vector :inline :offset 16)
(collide-as collide-kind :offset 32)
(action collide-action :offset 40)
(offense collide-offense :offset 44)
(prim-type int8 :offset 45)
(radius meters :offset 60)
((cshape collide-shape)
(prim-id uint32)
(transform-index int8)
(prim-core collide-prim-core :inline)
(local-sphere vector :inline)
(collide-with collide-kind)
(world-sphere vector :inline :overlay-at (-> prim-core world-sphere))
(collide-as collide-kind :overlay-at (-> prim-core collide-as))
(action collide-action :overlay-at (-> prim-core action))
(offense collide-offense :overlay-at (-> prim-core offense))
(prim-type int8 :overlay-at (-> prim-core prim-type))
(radius meters :overlay-at (-> local-sphere w))
)
:method-count-assert 28
:size-assert #x48
:flag-assert #x1c00000048
(:methods
(new (symbol type collide-shape uint int) _type_ 0)
(move-by-vector! (_type_ vector) none 9)
(find-prim-by-id (_type_ uint) collide-shape-prim 10)
(debug-draw-world-sphere (_type_) symbol 11)
(add-fg-prim-using-box (_type_ collide-cache) none 12)
(add-fg-prim-using-line-sphere (_type_ collide-cache) none 13)
(add-fg-prim-using-y-probe (_type_ collide-cache) none 14)
(overlaps-others-test (_type_ overlaps-others-params collide-shape-prim) symbol 15)
(overlaps-others-group (_type_ overlaps-others-params collide-shape-prim-group) symbol 16)
(unused-17 () none 17)
(collide-with-collide-cache-prim-mesh (_type_ collide-shape-intersect collide-cache-prim) none 18)
(collide-with-collide-cache-prim-sphere (_type_ collide-shape-intersect collide-cache-prim) none 19)
(add-to-bounding-box (_type_ collide-kind) symbol 20)
(num-mesh (_type_ collide-shape-prim) int 21)
(on-platform-test (_type_ collide-shape-prim collide-overlap-result float) none 22)
(should-push-away-test (_type_ collide-shape-prim collide-overlap-result) none 23)
(should-push-away-reverse-test (_type_ collide-shape-prim-group collide-overlap-result) none 24)
(update-transforms! (_type_ process-drawable) symbol 25)
(set-collide-as! (_type_ collide-kind) none 26)
(set-collide-with! (_type_ collide-kind) none 27)
(new (symbol type collide-shape uint int) _type_)
(move-by-vector! (_type_ vector) none)
(find-prim-by-id (_type_ uint) collide-shape-prim)
(debug-draw-world-sphere (_type_) symbol)
(add-fg-prim-using-box (_type_ collide-cache) none)
(add-fg-prim-using-line-sphere (_type_ collide-cache) none)
(add-fg-prim-using-y-probe (_type_ collide-cache) none)
(overlaps-others-test (_type_ overlaps-others-params collide-shape-prim) symbol)
(overlaps-others-group (_type_ overlaps-others-params collide-shape-prim-group) symbol)
(unused-17 () none)
(collide-with-collide-cache-prim-mesh (_type_ collide-shape-intersect collide-cache-prim) none)
(collide-with-collide-cache-prim-sphere (_type_ collide-shape-intersect collide-cache-prim) none)
(add-to-bounding-box (_type_ collide-kind) symbol)
(num-mesh (_type_ collide-shape-prim) int)
(on-platform-test (_type_ collide-shape-prim collide-overlap-result float) none)
(should-push-away-test (_type_ collide-shape-prim collide-overlap-result) none)
(should-push-away-reverse-test (_type_ collide-shape-prim-group collide-overlap-result) none)
(update-transforms! (_type_ process-drawable) symbol)
(set-collide-as! (_type_ collide-kind) none)
(set-collide-with! (_type_ collide-kind) none)
)
)
@@ -418,13 +394,10 @@
;; the pat is stored directly here.
;; I believe the "local sphere" is used as the sphere.
(deftype collide-shape-prim-sphere (collide-shape-prim)
((pat pat-surface :offset-assert 72)
((pat pat-surface)
)
:method-count-assert 28
:size-assert #x4c
:flag-assert #x1c0000004c
(:methods
(new (symbol type collide-shape uint) _type_ 0)
(new (symbol type collide-shape uint) _type_)
)
)
@@ -433,35 +406,29 @@
;; These meshes interact with a cache automatically (a specific collide-shape-prim-mesh cache, not the
;; more general collide-cache)
(deftype collide-shape-prim-mesh (collide-shape-prim)
((mesh collide-mesh :offset-assert 72)
(mesh-id int32 :offset-assert 76)
(mesh-cache-id uint64 :offset-assert 80)
(mesh-cache-tris (inline-array collide-mesh-cache-tri) :offset-assert 88)
((mesh collide-mesh)
(mesh-id int32)
(mesh-cache-id uint64)
(mesh-cache-tris (inline-array collide-mesh-cache-tri))
)
:method-count-assert 29
:size-assert #x5c
:flag-assert #x1d0000005c
(:methods
(new (symbol type collide-shape uint uint) _type_ 0)
(change-mesh (_type_ int) none 28)
(new (symbol type collide-shape uint uint) _type_)
(change-mesh (_type_ int) none)
)
)
;; A group of collide-shape-prim's
(deftype collide-shape-prim-group (collide-shape-prim)
((num-prims int32 :offset-assert 72)
(num-prims-u uint32 :offset 72)
(allocated-prims int32 :offset-assert 76)
(prim collide-shape-prim 1 :offset-assert 80)
(prims collide-shape-prim :dynamic :offset 80) ;; added
((num-prims int32)
(num-prims-u uint32 :overlay-at num-prims)
(allocated-prims int32)
(prim collide-shape-prim 1)
(prims collide-shape-prim :dynamic :overlay-at (-> prim 0))
)
:method-count-assert 30
:size-assert #x54
:flag-assert #x1e00000054
(:methods
(new (symbol type collide-shape uint int) _type_ 0)
(append-prim (_type_ collide-shape-prim) none 28)
(add-to-non-empty-bounding-box (_type_ collide-kind) none 29)
(new (symbol type collide-shape uint int) _type_)
(append-prim (_type_ collide-shape-prim) none)
(add-to-non-empty-bounding-box (_type_ collide-kind) none)
)
)
@@ -472,7 +439,7 @@
;; This is sort of the "parent" of all collide prims for a process-drawable.
;; Each process-drawable (pd) should have one collide-shape, which is often the root.
;; It represents:
;; - the location of the thing in hte world
;; - the location of the thing in the world
;; - settings abouts collision/navigation
;; - riders
@@ -494,51 +461,48 @@
;; we're a child of trsqv, so we store a full transform + derivative.
(deftype collide-shape (trsqv)
((process process-drawable :offset-assert 140)
(max-iteration-count uint8 :offset-assert 144)
(nav-flags nav-flags :offset-assert 145)
(pad-byte uint8 2 :offset-assert 146)
(pat-ignore-mask pat-surface :offset-assert 148)
(event-self symbol :offset-assert 152)
(event-other symbol :offset-assert 156)
(root-prim collide-shape-prim :offset-assert 160)
(riders collide-sticky-rider-group :offset-assert 164)
(backup-collide-as collide-kind :offset-assert 168)
(backup-collide-with collide-kind :offset-assert 176)
((process process-drawable)
(max-iteration-count uint8)
(nav-flags nav-flags)
(pad-byte uint8 2)
(pat-ignore-mask pat-surface)
(event-self symbol)
(event-other symbol)
(root-prim collide-shape-prim)
(riders collide-sticky-rider-group)
(backup-collide-as collide-kind)
(backup-collide-with collide-kind)
)
:method-count-assert 56
:size-assert #xb8
:flag-assert #x38000000b8
(:methods
(new (symbol type process-drawable collide-list-enum) _type_ 0)
(move-by-vector! (_type_ vector) none 28)
(alloc-riders (_type_ int) none 29)
(move-to-point! (_type_ vector) none 30) ;; ret - symbol | float (CSPG::9)
(debug-draw (_type_) none 31)
(fill-cache-for-shape! (_type_ float collide-kind) none 32)
(fill-cache-integrate-and-collide! (_type_ vector collide-kind) none 33)
(find-prim-by-id (_type_ uint) collide-shape-prim 34)
(detect-riders! (_type_) symbol 35)
(build-bounding-box-for-shape (_type_ bounding-box float collide-kind) symbol 36)
(integrate-and-collide! (_type_ vector) none 37)
(find-collision-meshes (_type_) symbol 38)
(on-platform (_type_ collide-shape collide-overlap-result) symbol 39)
(find-overlapping-shapes (_type_ overlaps-others-params) symbol 40) ;; check if blocked??
(calc-shove-up (_type_ attack-info float) vector 41)
(should-push-away (_type_ collide-shape collide-overlap-result) symbol 42)
(pull-rider! (_type_ pull-rider-info) none 43)
(pull-riders! (_type_) symbol 44)
(do-push-aways! (_type_) symbol 45)
(set-root-prim! (_type_ collide-shape-prim) collide-shape-prim 46)
(update-transforms! (_type_) symbol 47)
(clear-collide-with-as (_type_) none 48)
(restore-collide-with-as (_type_) none 49)
(backup-collide-with-as (_type_) none 50)
(set-root-prim-collide-with! (_type_ collide-kind) none 51)
(set-root-prim-collide-as! (_type_ collide-kind) none 52)
(set-collide-kinds (_type_ int collide-kind collide-kind) none 53)
(set-collide-offense (_type_ int collide-offense) none 54)
(send-shove-back (_type_ process touching-shapes-entry float float float) none 55)
(new (symbol type process-drawable collide-list-enum) _type_)
(move-by-vector! (_type_ vector) none)
(alloc-riders (_type_ int) none)
(move-to-point! (_type_ vector) none)
(debug-draw (_type_) none)
(fill-cache-for-shape! (_type_ float collide-kind) none)
(fill-cache-integrate-and-collide! (_type_ vector collide-kind) none)
(find-prim-by-id (_type_ uint) collide-shape-prim)
(detect-riders! (_type_) symbol)
(build-bounding-box-for-shape (_type_ bounding-box float collide-kind) symbol)
(integrate-and-collide! (_type_ vector) none)
(find-collision-meshes (_type_) symbol)
(on-platform (_type_ collide-shape collide-overlap-result) symbol)
(find-overlapping-shapes (_type_ overlaps-others-params) symbol)
(calc-shove-up (_type_ attack-info float) vector)
(should-push-away (_type_ collide-shape collide-overlap-result) symbol)
(pull-rider! (_type_ pull-rider-info) none)
(pull-riders! (_type_) symbol)
(do-push-aways! (_type_) symbol)
(set-root-prim! (_type_ collide-shape-prim) collide-shape-prim)
(update-transforms! (_type_) symbol)
(clear-collide-with-as (_type_) none)
(restore-collide-with-as (_type_) none)
(backup-collide-with-as (_type_) none)
(set-root-prim-collide-with! (_type_ collide-kind) none)
(set-root-prim-collide-as! (_type_ collide-kind) none)
(set-collide-kinds (_type_ int collide-kind collide-kind) none)
(set-collide-offense (_type_ int collide-offense) none)
(send-shove-back (_type_ process touching-shapes-entry float float float) none)
)
)
@@ -616,45 +580,42 @@
;; A collide-shape for independently moving objects
(deftype collide-shape-moving (collide-shape)
((rider-time time-frame :offset-assert 184)
(rider-last-move vector :inline :offset-assert 192)
(trans-old vector 3 :inline :offset-assert 208)
(poly-pat pat-surface :offset-assert 256)
(cur-pat pat-surface :offset-assert 260)
(ground-pat pat-surface :offset-assert 264)
(status cshape-moving-flags :offset-assert 272)
(old-status cshape-moving-flags :offset-assert 280)
(prev-status cshape-moving-flags :offset-assert 288)
(reaction-flag cshape-reaction-flags :offset-assert 296)
(reaction (function collide-shape-moving collide-shape-intersect vector vector cshape-moving-flags) :offset-assert 300)
(no-reaction (function collide-shape-moving collide-shape-intersect vector vector none) :offset-assert 304)
(local-normal vector :inline :offset-assert 320)
(surface-normal vector :inline :offset-assert 336)
(poly-normal vector :inline :offset-assert 352)
(ground-poly-normal vector :inline :offset-assert 368)
(ground-touch-point vector :inline :offset-assert 384)
(shadow-pos vector :inline :offset-assert 400)
(ground-impact-vel meters :offset-assert 416)
(surface-angle float :offset-assert 420)
(poly-angle float :offset-assert 424)
(touch-angle float :offset-assert 428)
(coverage float :offset-assert 432)
(dynam dynamics :offset-assert 436)
(surf surface :offset-assert 440)
((rider-time time-frame)
(rider-last-move vector :inline)
(trans-old vector 3 :inline)
(poly-pat pat-surface)
(cur-pat pat-surface)
(ground-pat pat-surface)
(status cshape-moving-flags)
(old-status cshape-moving-flags)
(prev-status cshape-moving-flags)
(reaction-flag cshape-reaction-flags)
(reaction (function collide-shape-moving collide-shape-intersect vector vector cshape-moving-flags))
(no-reaction (function collide-shape-moving collide-shape-intersect vector vector none))
(local-normal vector :inline)
(surface-normal vector :inline)
(poly-normal vector :inline)
(ground-poly-normal vector :inline)
(ground-touch-point vector :inline)
(shadow-pos vector :inline)
(ground-impact-vel meters)
(surface-angle float)
(poly-angle float)
(touch-angle float)
(coverage float)
(dynam dynamics)
(surf surface)
)
:method-count-assert 65
:size-assert #x1bc
:flag-assert #x41000001bc
(:methods
(set-and-handle-pat! (_type_ pat-surface) none 56)
(integrate-no-collide! (_type_ vector) none 57)
(collide-shape-moving-method-58 (_type_ vector) symbol 58)
(integrate-for-enemy-with-move-to-ground! (_type_ vector collide-kind float symbol symbol symbol) none 59)
(move-to-ground (_type_ float float symbol collide-kind) symbol 60)
(move-to-ground-point! (_type_ vector vector vector) none 61)
(compute-acc-due-to-gravity (_type_ vector float) vector 62)
(step-collison! (_type_ vector vector float) float 63)
(move-to-tri! (_type_ collide-tri-result vector) none 64)
(set-and-handle-pat! (_type_ pat-surface) none)
(integrate-no-collide! (_type_ vector) none)
(collide-shape-moving-method-58 (_type_ vector) symbol)
(integrate-for-enemy-with-move-to-ground! (_type_ vector collide-kind float symbol symbol symbol) none)
(move-to-ground (_type_ float float symbol collide-kind) symbol)
(move-to-ground-point! (_type_ vector vector vector) none)
(compute-acc-due-to-gravity (_type_ vector float) vector)
(step-collison! (_type_ vector vector float) float)
(move-to-tri! (_type_ collide-tri-result vector) none)
)
)
@@ -663,24 +624,19 @@
;;;;;;;;;;;;;;;;;;;;
(defmethod new collide-shape-prim ((allocation symbol) (type-to-make type) (cshape collide-shape) (prim-id uint) (size-bytes int))
"Allocate a new collide-shape-prim. It is expected that children of collide-shape-prim override this.
NOTE: uses the size-bytes as the TOTAL size of the structure."
(let ((this (object-new allocation type-to-make size-bytes)))
(set! (-> this cshape) (the-as collide-shape cshape))
;; sphere/mesh?
(set! (-> this prim-id) prim-id)
(set! (-> this prim-core action) (collide-action))
(set! (-> this prim-core collide-as) (collide-kind))
(set! (-> this collide-with) (collide-kind))
(set! (-> this transform-index) -2)
(set! (-> this prim-core offense) (collide-offense no-offense))
(set! (-> this prim-core prim-type) -2)
this
(let ((v0-0 (object-new allocation type-to-make size-bytes)))
(set! (-> v0-0 cshape) cshape)
(set! (-> v0-0 prim-id) prim-id)
(set! (-> v0-0 prim-core action) (collide-action))
(set! (-> v0-0 prim-core collide-as) (collide-kind))
(set! (-> v0-0 collide-with) (collide-kind))
(set! (-> v0-0 transform-index) -2)
(set! (-> v0-0 prim-core offense) (collide-offense no-offense))
(set! (-> v0-0 prim-core prim-type) -2)
v0-0
)
)
(defmethod new collide-shape-prim-sphere ((allocation symbol) (type-to-make type) (cshape collide-shape) (prim-id uint))
"Allocate a new sphere primitive"
@@ -696,10 +652,10 @@
(let ((this (the collide-shape-prim-mesh ((method-of-type collide-shape-prim new) allocation type-to-make cshape prim-id (size-of collide-shape-prim-mesh)))))
(set! (-> this mesh) #f)
(set! (-> this mesh-id) (the int mesh-id))
(set! (-> this mesh-cache-id) 0)
(set! (-> this mesh-id) (the-as int mesh-id))
(set! (-> this mesh-cache-id) (the-as uint 0))
(set! (-> this prim-core prim-type) 1)
this
(the-as collide-shape-prim-mesh this)
)
)
@@ -719,12 +675,12 @@
)
)
(defmethod length collide-shape-prim-group ((this collide-shape-prim-group))
(defmethod length ((this collide-shape-prim-group))
"How many primitives are used?"
(-> this num-prims)
)
(defmethod asize-of collide-shape-prim-group ((this collide-shape-prim-group))
(defmethod asize-of ((this collide-shape-prim-group))
"How big is this in memory?"
(the-as int (+ (-> this type size) (* (+ (-> this allocated-prims) -1) 4)))
)
@@ -741,13 +697,12 @@
(set! (-> this riders) #f)
(set! (-> this root-prim) #f)
;; add a special ignore mask for the camera vs other things.
(case (-> proc type symbol)
(('camera)
(set! (-> this pat-ignore-mask) (new 'static 'pat-surface :skip #x2 :nocamera #x1))
(set! (-> this pat-ignore-mask) (new 'static 'pat-surface :nocamera #x1))
)
(else
(set! (-> this pat-ignore-mask) (new 'static 'pat-surface :skip #x1 :noentity #x1))
(set! (-> this pat-ignore-mask) (new 'static 'pat-surface :noentity #x1))
)
)
;; reset transformation to the origin.
@@ -770,7 +725,8 @@
(add-connection *collide-player-list* proc #f this #f #f))
(else
(format 0 "Unsupported collide-list-enum in collide-shape constructor!~%"))
(format 0 "Unsupported collide-list-enum in collide-shape constructor!~%")
)
)
this
)
@@ -786,50 +742,38 @@
)
)
(defmethod length collide-sticky-rider-group ((this collide-sticky-rider-group))
(defmethod length ((this collide-sticky-rider-group))
(-> this num-riders)
)
(defmethod asize-of collide-sticky-rider-group ((this collide-sticky-rider-group))
(defmethod asize-of ((this collide-sticky-rider-group))
(the-as int (+ (-> this type size) (* (+ (-> this allocated-riders) -1) 32)))
)
;;;;;;;;;;;;;;;;;;;;
;; Fake Meshes
;;;;;;;;;;;;;;;;;;;;
;; These aren't real meshes, but are returned when you collide with the background or water.
;; Background and water collision work differently, but this allows these systems to pretend to be
;; part of the old collision system.
(define *collide-shape-prim-backgnd*
(new 'static 'collide-shape-prim-mesh
:cshape #f
:prim-core
(new 'static 'collide-prim-core
:world-sphere (new 'static 'vector :w 204800000.0)
:collide-as (collide-kind background)
:action (collide-action solid)
:offense (collide-offense indestructible)
:prim-type 2
)
:local-sphere (new 'static 'vector :w 204800000.0)
:mesh #f
)
(define *collide-shape-prim-backgnd* (new 'static 'collide-shape-prim-mesh
:cshape #f
:prim-core (new 'static 'collide-prim-core
:world-sphere (new 'static 'vector :w 204800000.0)
:collide-as (collide-kind background)
:action (collide-action solid)
:offense (collide-offense indestructible)
:prim-type 2
)
:local-sphere (new 'static 'vector :w 204800000.0)
:mesh #f
)
)
(define *collide-shape-prim-water*
(new 'static 'collide-shape-prim-mesh
:cshape #f
:prim-core
(new 'static 'collide-prim-core
:world-sphere (new 'static 'vector :w 204800000.0)
:collide-as (collide-kind water)
:action (collide-action solid)
:offense (collide-offense indestructible)
:prim-type 2
)
:local-sphere (new 'static 'vector :w 204800000.0)
:mesh #f
)
(define *collide-shape-prim-water* (new 'static 'collide-shape-prim-mesh
:cshape #f
:prim-core (new 'static 'collide-prim-core
:world-sphere (new 'static 'vector :w 204800000.0)
:collide-as (collide-kind water)
:action (collide-action solid)
:offense (collide-offense indestructible)
:prim-type 2
)
:local-sphere (new 'static 'vector :w 204800000.0)
:mesh #f
)
)
@@ -7,7 +7,7 @@
;; DECOMP BEGINS
(defmethod on-platform collide-shape ((this collide-shape) (arg0 collide-shape) (arg1 collide-overlap-result))
(defmethod on-platform ((this collide-shape) (arg0 collide-shape) (arg1 collide-overlap-result))
"Are we on the platform? Returns #t/#f and also sets an overlap result."
(let ((v1-0 arg1))
(set! (-> v1-0 best-dist) 0.0)
@@ -39,12 +39,12 @@
)
(defmethod on-platform-test collide-shape-prim ((this collide-shape-prim) (arg0 collide-shape-prim) (arg1 collide-overlap-result) (arg2 float))
(defmethod on-platform-test ((this collide-shape-prim) (arg0 collide-shape-prim) (arg1 collide-overlap-result) (arg2 float))
(format 0 "ERROR: collide-shape-prim::on-platform-test was called illegally!~%")
(none)
)
(defmethod on-platform-test collide-shape-prim-group ((this collide-shape-prim-group) (arg0 collide-shape-prim) (arg1 collide-overlap-result) (arg2 float))
(defmethod on-platform-test ((this collide-shape-prim-group) (arg0 collide-shape-prim) (arg1 collide-overlap-result) (arg2 float))
"Check if we're on the platform for a prim group."
(let ((s3-0 (-> arg0 prim-core collide-as)))
(dotimes (s2-0 (-> this num-prims))
@@ -73,7 +73,7 @@
(none)
)
(defmethod on-platform-test collide-shape-prim-mesh ((this collide-shape-prim-mesh) (arg0 collide-shape-prim) (arg1 collide-overlap-result) (arg2 float))
(defmethod on-platform-test ((this collide-shape-prim-mesh) (arg0 collide-shape-prim) (arg1 collide-overlap-result) (arg2 float))
"check if we're on the platform for a mesh."
(case (-> arg0 type)
;; mesh to group
@@ -153,7 +153,7 @@
(none)
)
(defmethod add-rider! collide-sticky-rider-group ((this collide-sticky-rider-group) (arg0 process-drawable))
(defmethod add-rider! ((this collide-sticky-rider-group) (arg0 process-drawable))
"Add a rider to this platform."
(let ((gp-0 (the-as collide-sticky-rider #f)))
(cond
@@ -173,7 +173,7 @@
)
)
(defmethod detect-riders! collide-shape ((this collide-shape))
(defmethod detect-riders! ((this collide-shape))
"See who is riding us."
(let ((s5-0 (-> this riders)))
(when s5-0
@@ -373,7 +373,7 @@
)
)
(defmethod pull-riders! collide-shape ((this collide-shape))
(defmethod pull-riders! ((this collide-shape))
"Move our riders."
(let ((s5-0 (-> this riders)))
(when s5-0
@@ -408,7 +408,7 @@
)
)
(defmethod pull-rider! collide-shape ((this collide-shape) (arg0 pull-rider-info))
(defmethod pull-rider! ((this collide-shape) (arg0 pull-rider-info))
"Move a rider."
(local-vars (at-0 int) (sv-160 (function collide-shape-moving float collide-kind none)))
(rlet ((vf0 :class vf)
@@ -483,7 +483,7 @@
)
)
(defmethod alloc-riders collide-shape ((this collide-shape) (arg0 int))
(defmethod alloc-riders ((this collide-shape) (arg0 int))
(if (-> this riders)
(format 0 "ERROR: colide-shape::alloc-riders is being called multiple times!~%")
(set! (-> this riders) (new 'process 'collide-sticky-rider-group arg0))
+172 -178
View File
@@ -10,195 +10,189 @@
;; We believe that target's control-info may contain an array of these.
;; Each collide-history is a record of a single collision event.
(deftype collide-history (structure)
((intersect vector :inline :offset-assert 0)
(trans vector :inline :offset-assert 16)
(transv vector :inline :offset-assert 32)
(transv-out vector :inline :offset-assert 48)
(local-normal vector :inline :offset-assert 64)
(surface-normal vector :inline :offset-assert 80)
(time time-frame :offset-assert 96)
(status cshape-moving-flags :offset-assert 104)
(pat pat-surface :offset-assert 112)
(reaction-flag cshape-reaction-flags :offset-assert 116)
((intersect vector :inline)
(trans vector :inline)
(transv vector :inline)
(transv-out vector :inline)
(local-normal vector :inline)
(surface-normal vector :inline)
(time time-frame)
(status cshape-moving-flags)
(pat pat-surface)
(reaction-flag cshape-reaction-flags)
)
:method-count-assert 10
:size-assert #x78
:flag-assert #xa00000078
(:methods
(update! (_type_ collide-shape-moving vector vector vector) _type_ 9)
(update! (_type_ collide-shape-moving vector vector vector) _type_)
)
)
;; This is the collide shape for target (Jak).
;; It is complicated.
(deftype control-info (collide-shape-moving)
((unknown-vector00 vector :inline :offset 448)
(unknown-vector01 vector :inline :offset 464)
(unknown-vector02 vector :inline :offset 480)
(unknown-quaternion00 quaternion :inline :offset 496)
(unknown-quaternion01 quaternion :inline :offset 512)
(unknown-float00 float :offset 528)
(unknown-float01 float :offset 532)
(unknown-float02 float :offset 536)
(unknown-vector10 vector :inline :offset 544)
(unknown-vector11 vector :inline :offset 560)
(unknown-vector12 vector :inline :offset 576)
(unknown-vector13 vector :inline :offset 592)
(unknown-vector14 vector :inline :offset 608)
(unknown-vector15 vector :inline :offset 624)
(unknown-vector16 vector :inline :offset 640)
(unknown-dynamics00 dynamics :offset 656)
(unknown-surface00 surface :offset 660)
(unknown-surface01 surface :offset 664)
(unknown-cpad-info00 cpad-info :offset 668)
(unknown-float10 float :offset 672)
(unknown-float11 float :offset 676)
(unknown-float12 float :offset 680)
(unknown-float13 float :offset 684)
(unknown-vector20 vector :inline :offset 688)
(unknown-vector21 vector :inline :offset 704)
(unknown-vector22 vector :inline :offset 720)
(unknown-vector23 vector :inline :offset 736)
(unknown-vector-array00 vector 7 :inline :offset 752)
(unknown-vector30 vector :inline :offset 880)
(unknown-vector31 vector :inline :offset 896)
(unknown-float20 float :offset 912)
(unknown-float21 float :offset 916)
(unknown-dword00 uint64 :offset 920)
(unknown-matrix00 matrix :inline :offset 928)
(unknown-matrix01 matrix :inline :offset 992)
(unknown-matrix02 matrix :inline :offset 1056)
(unknown-qword00 uint128 :offset 1136)
(unknown-float30 float :offset 1140)
(unknown-vector40 vector :inline :offset 1152)
(unknown-float40 float :offset 1172)
(unknown-float41 float :offset 1176)
(unknown-int00 int32 :offset 1180)
(unknown-float50 float :offset 1168)
(unknown-vector50 vector :inline :offset 1184)
(unknown-vector51 vector :inline :offset 1200)
(unknown-vector52 vector :inline :offset 1216)
(unknown-vector53 vector :inline :offset 1232)
(last-known-safe-ground vector :inline :offset 1248)
(unknown-vector55 vector :inline :offset 1264)
(unknown-dword10 time-frame :offset 1280)
(unknown-dword11 time-frame :offset 1288)
(unknown-float60 float :offset 1300)
(unknown-float61 float :offset 1304)
(unknown-float62 float :offset 1308)
(unknown-float63 float :offset 1312)
(unknown-float64 float :offset 1316)
(unknown-dword20 time-frame :offset 1320)
(unknown-dword21 time-frame :offset 1328)
(unknown-dword-coverage int64 :offset 1336)
(unknown-float-coverage-0 float :offset 1344)
(unknown-float-coverage-1 float :offset 1348)
(unknown-float-coverage-2 float :offset 1352)
(unknown-u32-coverage-0 uint32 :offset 1356)
(unknown-vector-coverage-0 vector :inline :offset 1376)
(unknown-vector-coverage-1 vector :inline :offset 1392)
(unknown-vector-coverage-2 vector :inline :offset 1440)
(unknown-vector-coverage-3 vector :inline :offset 1472)
(unknown-vector60 vector :inline :offset 1456)
(unknown-vector61 vector :inline :offset 1504)
(unknown-float70 float :offset 1520)
(unknown-float71 float :offset 1524)
(unknown-vector70 vector :inline :offset 1536)
(unknown-vector71 vector :inline :offset 1552)
(unknown-vector72 vector :inline :offset 1568)
(unknown-vector73 vector :inline :offset 1584)
(unknown-handle00 handle :offset 1600)
(unknown-sphere-array00 collide-shape-prim-sphere 3 :offset 1608)
(unknown-sphere00 collide-shape-prim-sphere :offset 1632)
(unknown-sphere01 collide-shape-prim-sphere :offset 1636)
(unknown-sphere02 collide-shape-prim-sphere :offset 1640)
(unknown-int50 int32 :offset 1656)
(unknown-dword30 time-frame :offset 1664)
(unknown-dword31 time-frame :offset 1672)
(unknown-dword32 time-frame :offset 1680)
(unknown-dword33 time-frame :offset 1688)
(unknown-dword34 time-frame :offset 1696)
(unknown-dword35 time-frame :offset 1704)
(unknown-dword36 time-frame :offset 1712)
(unknown-float80 float :offset 1724)
(unknown-float81 float :offset 1728)
(unknown-float82 float :offset 1732)
(unknown-vector80 vector :inline :offset 1744)
(unknown-cspace00 cspace :inline :offset 1760)
(unknown-vector90 vector :inline :offset 1776)
(unknown-vector91 vector :inline :offset 1792)
(unknown-vector92 vector :inline :offset 1824)
(unknown-cspace10 cspace :inline :offset 1808)
(unknown-symbol00 symbol :offset 1840)
(unknown-float90 float :offset 1844)
(unknown-float91 float :offset 1848)
(unknown-vector-array10 vector 16 :inline :offset 1856)
(unknown-float100 float :offset 2112)
(unknown-int10 int32 :offset 2116)
(unknown-float110 float :offset 2120)
(unknown-vector100 vector :inline :offset 2128)
(unknown-vector101 vector :inline :offset 2144)
(unknown-dword40 time-frame :offset 2160)
(unknown-dword41 time-frame :offset 2168)
(unknown-handle10 handle :offset 2176)
(unknown-uint20 uint32 :offset 2184)
(unknown-spoolanim00 spool-anim :offset 2184)
(unknown-int20 int32 :offset 2184)
(unknown-symbol20 symbol :offset 2184)
(unknown-float120 float :offset 2184)
(unknown-int21 int32 :offset 2188)
(unknown-uint30 uint32 :offset 2188)
(unknown-float121 float :offset 2188)
(unknown-uint31 uint32 :offset 2192)
(unknown-int37 int32 :offset 2192)
(unknown-float122 float :offset 2196)
(unknown-float123 float :offset 2200)
(unknown-float124 float :offset 2204)
(unknown-vector102 vector :inline :offset 2224)
(unknown-vector103 vector :inline :offset 2240)
(unknown-quaternion02 quaternion :inline :offset 2256)
(unknown-quaternion03 quaternion :inline :offset 2272)
(unknown-smush00 smush-control :inline :offset 2288)
(unknown-vector110 vector :inline :offset 2320)
(unknown-vector111 vector :inline :offset 2336)
(unknown-symbol30 symbol :offset 2384)
(unknown-int31 uint32 :offset 2384)
(unknown-dword50 int64 :offset 2392)
(unknown-dword51 int64 :offset 2400)
(unknown-pointer00 pointer :offset 2416)
(unknown-symbol40 symbol :offset 2428)
(unknown-dword60 int64 :offset 2432)
(unknown-dword61 int64 :offset 2440)
(unknown-dword62 int64 :offset 2448)
(unknown-dword63 int64 :offset 2456)
(unknown-halfword00 int16 :offset 2488)
(history-length int16 :offset 2490)
(history-data collide-history 128 :inline :offset-assert 2496)
(unknown-float140 float :offset 18944)
(unknown-dword70 time-frame :offset 18952)
(unknown-int40 int32 :offset 18880)
(unknown-dword80 time-frame :offset 18888)
(unknown-dword81 time-frame :offset 18896)
(unknown-float130 float :offset 18904)
(unknown-float131 float :offset 18908)
(unknown-dword82 time-frame :offset 18912)
(unknown-vector120 vector :inline :offset 18928)
(unknown-float150 float :offset 18944)
(unknown-vector121 vector :inline :offset 18960)
(wall-pat pat-surface :offset 18976)
(unknown-soundid00 sound-id :offset 18980)
(unknown-float141 float :offset 18984)
(unknown-soundid01 sound-id :offset 18988)
(unknown-int34 int32 :offset 18992)
(unknown-int35 int32 :offset 18996)
(unknown-int36 int32 :offset 19000)
((unknown-vector00 vector :inline :offset 448)
(unknown-vector01 vector :inline :offset 464)
(unknown-vector02 vector :inline :offset 480)
(unknown-quaternion00 quaternion :inline :offset 496)
(unknown-quaternion01 quaternion :inline :offset 512)
(unknown-float00 float :offset 528)
(unknown-float01 float :offset 532)
(unknown-float02 float :offset 536)
(unknown-vector10 vector :inline :offset 544)
(unknown-vector11 vector :inline :offset 560)
(unknown-vector12 vector :inline :offset 576)
(unknown-vector13 vector :inline :offset 592)
(unknown-vector14 vector :inline :offset 608)
(unknown-vector15 vector :inline :offset 624)
(unknown-vector16 vector :inline :offset 640)
(unknown-dynamics00 dynamics :offset 656)
(unknown-surface00 surface :offset 660)
(unknown-surface01 surface :offset 664)
(unknown-cpad-info00 cpad-info :offset 668)
(unknown-float10 float :offset 672)
(unknown-float11 float :offset 676)
(unknown-float12 float :offset 680)
(unknown-float13 float :offset 684)
(unknown-vector20 vector :inline :offset 688)
(unknown-vector21 vector :inline :offset 704)
(unknown-vector22 vector :inline :offset 720)
(unknown-vector23 vector :inline :offset 736)
(unknown-vector-array00 vector 7 :inline :offset 752)
(unknown-vector30 vector :inline :offset 880)
(unknown-vector31 vector :inline :offset 896)
(unknown-float20 float :offset 912)
(unknown-float21 float :offset 916)
(unknown-dword00 uint64 :offset 920)
(unknown-matrix00 matrix :inline :offset 928)
(unknown-matrix01 matrix :inline :offset 992)
(unknown-matrix02 matrix :inline :offset 1056)
(unknown-qword00 uint128 :offset 1136)
(unknown-float30 float :offset 1140)
(unknown-vector40 vector :inline :offset 1152)
(unknown-float40 float :offset 1172)
(unknown-float41 float :offset 1176)
(unknown-int00 int32 :offset 1180)
(unknown-float50 float :offset 1168)
(unknown-vector50 vector :inline :offset 1184)
(unknown-vector51 vector :inline :offset 1200)
(unknown-vector52 vector :inline :offset 1216)
(unknown-vector53 vector :inline :offset 1232)
(last-known-safe-ground vector :inline :offset 1248)
(unknown-vector55 vector :inline :offset 1264)
(unknown-dword10 time-frame :offset 1280)
(unknown-dword11 time-frame :offset 1288)
(unknown-float60 float :offset 1300)
(unknown-float61 float :offset 1304)
(unknown-float62 float :offset 1308)
(unknown-float63 float :offset 1312)
(unknown-float64 float :offset 1316)
(unknown-dword20 time-frame :offset 1320)
(unknown-dword21 time-frame :offset 1328)
(unknown-dword-coverage int64 :offset 1336)
(unknown-float-coverage-0 float :offset 1344)
(unknown-float-coverage-1 float :offset 1348)
(unknown-float-coverage-2 float :offset 1352)
(unknown-u32-coverage-0 uint32 :offset 1356)
(unknown-vector-coverage-0 vector :inline :offset 1376)
(unknown-vector-coverage-1 vector :inline :offset 1392)
(unknown-vector-coverage-2 vector :inline :offset 1440)
(unknown-vector-coverage-3 vector :inline :offset 1472)
(unknown-vector60 vector :inline :offset 1456)
(unknown-vector61 vector :inline :offset 1504)
(unknown-float70 float :offset 1520)
(unknown-float71 float :offset 1524)
(unknown-vector70 vector :inline :offset 1536)
(unknown-vector71 vector :inline :offset 1552)
(unknown-vector72 vector :inline :offset 1568)
(unknown-vector73 vector :inline :offset 1584)
(unknown-handle00 handle :offset 1600)
(unknown-sphere-array00 collide-shape-prim-sphere 3 :offset 1608)
(unknown-sphere00 collide-shape-prim-sphere :offset 1632)
(unknown-sphere01 collide-shape-prim-sphere :offset 1636)
(unknown-sphere02 collide-shape-prim-sphere :offset 1640)
(unknown-int50 int32 :offset 1656)
(unknown-dword30 time-frame :offset 1664)
(unknown-dword31 time-frame :offset 1672)
(unknown-dword32 time-frame :offset 1680)
(unknown-dword33 time-frame :offset 1688)
(unknown-dword34 time-frame :offset 1696)
(unknown-dword35 time-frame :offset 1704)
(unknown-dword36 time-frame :offset 1712)
(unknown-float80 float :offset 1724)
(unknown-float81 float :offset 1728)
(unknown-float82 float :offset 1732)
(unknown-vector80 vector :inline :offset 1744)
(unknown-cspace00 cspace :inline :offset 1760)
(unknown-vector90 vector :inline :offset 1776)
(unknown-vector91 vector :inline :offset 1792)
(unknown-vector92 vector :inline :offset 1824)
(unknown-cspace10 cspace :inline :offset 1808)
(unknown-symbol00 symbol :offset 1840)
(unknown-float90 float :offset 1844)
(unknown-float91 float :offset 1848)
(unknown-vector-array10 vector 16 :inline :offset 1856)
(unknown-float100 float :offset 2112)
(unknown-int10 int32 :offset 2116)
(unknown-float110 float :offset 2120)
(unknown-vector100 vector :inline :offset 2128)
(unknown-vector101 vector :inline :offset 2144)
(unknown-dword40 time-frame :offset 2160)
(unknown-dword41 time-frame :offset 2168)
(unknown-handle10 handle :offset 2176)
(unknown-uint20 uint32 :offset 2184)
(unknown-spoolanim00 spool-anim :overlay-at unknown-uint20)
(unknown-int20 int32 :overlay-at unknown-spoolanim00)
(unknown-symbol20 symbol :overlay-at unknown-int20)
(unknown-float120 float :overlay-at unknown-symbol20)
(unknown-int21 int32 :offset 2188)
(unknown-uint30 uint32 :overlay-at unknown-int21)
(unknown-float121 float :overlay-at unknown-uint30)
(unknown-uint31 uint32 :offset 2192)
(unknown-int37 int32 :overlay-at unknown-uint31)
(unknown-float122 float :offset 2196)
(unknown-float123 float :offset 2200)
(unknown-float124 float :offset 2204)
(unknown-vector102 vector :inline :offset 2224)
(unknown-vector103 vector :inline :offset 2240)
(unknown-quaternion02 quaternion :inline :offset 2256)
(unknown-quaternion03 quaternion :inline :offset 2272)
(unknown-smush00 smush-control :inline :offset 2288)
(unknown-vector110 vector :inline :offset 2320)
(unknown-vector111 vector :inline :offset 2336)
(unknown-symbol30 symbol :offset 2384)
(unknown-int31 uint32 :overlay-at unknown-symbol30)
(unknown-dword50 int64 :offset 2392)
(unknown-dword51 int64 :offset 2400)
(unknown-pointer00 pointer :offset 2416)
(unknown-symbol40 symbol :offset 2428)
(unknown-dword60 int64 :offset 2432)
(unknown-dword61 int64 :offset 2440)
(unknown-dword62 int64 :offset 2448)
(unknown-dword63 int64 :offset 2456)
(unknown-halfword00 int16 :offset 2488)
(history-length int16 :offset 2490)
(history-data collide-history 128 :inline)
(unknown-float140 float :offset 18944)
(unknown-dword70 time-frame :offset 18952)
(unknown-int40 int32 :offset 18880)
(unknown-dword80 time-frame :offset 18888)
(unknown-dword81 time-frame :offset 18896)
(unknown-float130 float :offset 18904)
(unknown-float131 float :offset 18908)
(unknown-dword82 time-frame :offset 18912)
(unknown-vector120 vector :inline :offset 18928)
(unknown-float150 float :overlay-at unknown-float140)
(unknown-vector121 vector :inline :offset 18960)
(wall-pat pat-surface :offset 18976)
(unknown-soundid00 sound-id :offset 18980)
(unknown-float141 float :offset 18984)
(unknown-soundid01 sound-id :offset 18988)
(unknown-int34 int32 :offset 18992)
(unknown-int35 int32 :offset 18996)
(unknown-int36 int32 :offset 19000)
)
:method-count-assert 65
:size-assert #x4a3c
:flag-assert #x4100004a3c
)
(defmethod update! collide-history ((this collide-history) (cshape collide-shape-moving) (xs vector) (transv vector) (transv-out vector))
(defmethod update! ((this collide-history) (cshape collide-shape-moving) (xs vector) (transv vector) (transv-out vector))
"Update the collide-history element."
(set! (-> this intersect quad) (-> xs quad))
(set! (-> this transv quad) (-> transv quad))
+49 -61
View File
@@ -20,54 +20,47 @@
;; A record of a primitive which is touching another, possibly including the triangle that is involved.
(deftype touching-prim (structure)
((cprim collide-shape-prim :offset-assert 0)
(has-tri? symbol :offset-assert 4)
(tri collide-tri-result :inline :offset-assert 16)
((cprim collide-shape-prim)
(has-tri? symbol)
(tri collide-tri-result :inline)
)
:method-count-assert 9
:size-assert #x64
:flag-assert #x900000064
)
;; A record of two primitives which are touching.
(deftype touching-prims-entry (structure)
((next touching-prims-entry :offset-assert 0)
(prev touching-prims-entry :offset-assert 4)
(allocated? symbol :offset-assert 8)
(u float :offset-assert 12)
(prim1 touching-prim :inline :offset-assert 16)
(prim2 touching-prim :inline :offset-assert 128)
((next touching-prims-entry)
(prev touching-prims-entry)
(allocated? symbol)
(u float)
(prim1 touching-prim :inline)
(prim2 touching-prim :inline)
)
:method-count-assert 13
:size-assert #xe4
:flag-assert #xd000000e4
(:methods
(get-touched-prim (_type_ trsqv touching-shapes-entry) collide-shape-prim 9)
(touching-prims-entry-method-10 () none 10)
(get-middle-of-bsphere-overlap (_type_ vector) vector 11)
(get-touched-tri (_type_ collide-shape touching-shapes-entry) collide-tri-result 12)
(get-touched-prim (_type_ trsqv touching-shapes-entry) collide-shape-prim)
(touching-prims-entry-method-10 () none)
(get-middle-of-bsphere-overlap (_type_ vector) vector)
(get-touched-tri (_type_ collide-shape touching-shapes-entry) collide-tri-result)
)
)
;; A pool of up to 64 touching primitives. There is a linked list of freed entries.
(deftype touching-prims-entry-pool (structure)
((head touching-prims-entry :offset-assert 0)
(nodes touching-prims-entry 64 :inline :offset-assert 16)
((head touching-prims-entry)
(nodes touching-prims-entry 64 :inline)
)
:method-count-assert 13
:size-assert #x3c10
:flag-assert #xd00003c10
(:methods
(new (symbol type) _type_ 0)
(alloc-node (_type_) touching-prims-entry 9)
(get-free-node-count (_type_) int 10)
(init-list! (_type_) none 11)
(free-node (_type_ touching-prims-entry) touching-prims-entry 12)
(new (symbol type) _type_)
(alloc-node (_type_) touching-prims-entry)
(get-free-node-count (_type_) int)
(init-list! (_type_) none)
(free-node (_type_ touching-prims-entry) touching-prims-entry)
)
)
(defmethod init-list! touching-prims-entry-pool ((this touching-prims-entry-pool))
(defmethod init-list! ((this touching-prims-entry-pool))
"Initialize all entries to be not allocated and in a linked list."
(let ((prev (the-as touching-prims-entry #f)))
(let ((current (the-as touching-prims-entry (-> this nodes))))
@@ -104,48 +97,43 @@
)
)
;; two collide shapes which are touching.
;; This stores a list of primitive pairs which are touching.
(deftype touching-shapes-entry (structure)
((cshape1 collide-shape :offset-assert 0)
(cshape2 collide-shape :offset-assert 4)
(resolve-u int8 :offset-assert 8)
(head touching-prims-entry :offset-assert 12)
((cshape1 collide-shape)
(cshape2 collide-shape)
(resolve-u int8)
(head touching-prims-entry)
)
:allow-misaligned
:method-count-assert 18
:size-assert #x10
:flag-assert #x1200000010
(:methods
(touching-shapes-entry-method-9 (_type_) none 9)
(get-touched-shape (_type_ collide-shape) collide-shape 10)
(touching-shapes-entry-method-11 () none 11)
(prims-touching? (_type_ collide-shape-moving uint) touching-prims-entry 12)
(prims-touching-action? (_type_ collide-shape collide-action collide-action) touching-prims-entry 13)
(touching-shapes-entry-method-14 () none 14)
(free-touching-prims-list (_type_) symbol 15)
(get-head (_type_) touching-prims-entry 16)
(get-next (_type_ touching-prims-entry) touching-prims-entry 17)
(touching-shapes-entry-method-9 (_type_) none)
(get-touched-shape (_type_ collide-shape) collide-shape)
(touching-shapes-entry-method-11 () none)
(prims-touching? (_type_ collide-shape-moving uint) touching-prims-entry)
(prims-touching-action? (_type_ collide-shape collide-action collide-action) touching-prims-entry)
(touching-shapes-entry-method-14 () none)
(free-touching-prims-list (_type_) symbol)
(get-head (_type_) touching-prims-entry)
(get-next (_type_ touching-prims-entry) touching-prims-entry)
)
)
;; A list of (up to) TOUCHING_LIST_LENGTH pairs of colliding shapes
(deftype touching-list (structure)
((num-touching-shapes int32 :offset-assert 0)
(resolve-u int8 :offset-assert 4)
(touching-shapes touching-shapes-entry TOUCHING_LIST_LENGTH :inline :offset-assert 8)
((num-touching-shapes int32)
(resolve-u int8)
(touching-shapes touching-shapes-entry TOUCHING_LIST_LENGTH :inline)
)
:method-count-assert 15
:size-assert #x208
:flag-assert #xf00000208
(:methods
(new (symbol type) _type_ 0)
(add-touching-prims (_type_ collide-shape-prim collide-shape-prim float collide-tri-result collide-tri-result) none 9)
(touching-list-method-10 () none 10)
(update-from-step-size (_type_ float) none 11)
(send-events-for-touching-shapes (_type_) none 12)
(get-shapes-entry (_type_ collide-shape collide-shape) touching-shapes-entry 13)
(free-all-prim-nodes (_type_) none 14)
(new (symbol type) _type_)
(add-touching-prims (_type_ collide-shape-prim collide-shape-prim float collide-tri-result collide-tri-result) none)
(touching-list-method-10 () none)
(update-from-step-size (_type_ float) none)
(send-events-for-touching-shapes (_type_) none)
(get-shapes-entry (_type_ collide-shape collide-shape) touching-shapes-entry)
(free-all-prim-nodes (_type_) none)
)
)
@@ -165,11 +153,11 @@
)
)
(defmethod get-head touching-shapes-entry ((this touching-shapes-entry))
(defmethod get-head ((this touching-shapes-entry))
(-> this head)
)
(defmethod get-next touching-shapes-entry ((this touching-shapes-entry) (arg0 touching-prims-entry))
(defmethod get-next ((this touching-shapes-entry) (arg0 touching-prims-entry))
(-> arg0 next)
)
+15 -18
View File
@@ -24,7 +24,7 @@
;; there's a global shared pool of entries that you can alloc and free from.
(defmethod get-free-node-count touching-prims-entry-pool ((this touching-prims-entry-pool))
(defmethod get-free-node-count ((this touching-prims-entry-pool))
"Get the number of nodes that are not in use."
(let ((v0-0 0))
(let ((v1-0 (-> this head)))
@@ -40,7 +40,7 @@
)
)
(defmethod alloc-node touching-prims-entry-pool ((this touching-prims-entry-pool))
(defmethod alloc-node ((this touching-prims-entry-pool))
"Allocate a node. Will return #f if there are none left."
(let ((gp-0 (-> this head)))
(cond
@@ -63,7 +63,7 @@
)
)
(defmethod free-node touching-prims-entry-pool ((this touching-prims-entry-pool) (arg0 touching-prims-entry))
(defmethod free-node ((this touching-prims-entry-pool) (arg0 touching-prims-entry))
"Free a node allocated with alloc-node"
(when (-> arg0 allocated?)
(set! (-> arg0 allocated?) #f)
@@ -85,7 +85,7 @@
;; a single shape entry represents a pair of shapes that collide.
;; There can be multiple colliding primitives.
(defmethod free-touching-prims-list touching-shapes-entry ((this touching-shapes-entry))
(defmethod free-touching-prims-list ((this touching-shapes-entry))
"Return all nodes used by this touching-shapes-entry to the touching-prims-entry-pool"
(when (-> this cshape1)
(set! (-> this cshape1) #f)
@@ -112,7 +112,7 @@
;; A touching list is a list up to TOUCHING_LIST_LENGTH pairs of colliding collide-shapes.
(defmethod free-all-prim-nodes touching-list ((this touching-list))
(defmethod free-all-prim-nodes ((this touching-list))
"Free all prim nodes used by all touching shapes in this touching-list."
(let ((s5-0 (the-as touching-shapes-entry (-> this touching-shapes))))
(countdown (s4-0 (-> this num-touching-shapes))
@@ -127,7 +127,7 @@
)
(defmethod get-shapes-entry touching-list ((this touching-list) (arg0 collide-shape) (arg1 collide-shape))
(defmethod get-shapes-entry ((this touching-list) (arg0 collide-shape) (arg1 collide-shape))
"Get a touching-shapes-entry for the two shapes. If one exists, it will be returned. Otherwise a new one will be made."
(let ((v0-0 (the-as touching-shapes-entry (-> this touching-shapes)))) ;; the candidate
(let ((v1-0 (the-as touching-shapes-entry #f))) ;; a good one
@@ -184,12 +184,9 @@
)
(deftype add-prims-touching-work (structure)
((tri1 collide-tri-result :offset-assert 0)
(tri2 collide-tri-result :offset-assert 4)
((tri1 collide-tri-result)
(tri2 collide-tri-result)
)
:method-count-assert 9
:size-assert #x8
:flag-assert #x900000008
)
@@ -211,7 +208,7 @@
(defmethod add-touching-prims touching-list ((this touching-list)
(defmethod add-touching-prims ((this touching-list)
(arg0 collide-shape-prim)
(arg1 collide-shape-prim)
(arg2 float)
@@ -346,7 +343,7 @@
(none)
)
(defmethod update-from-step-size touching-list ((this touching-list) (arg0 float))
(defmethod update-from-step-size ((this touching-list) (arg0 float))
"Given that we actually will take a step size of arg0, remove things we won't actually hit."
;; only if we have some un-updated potential collision
(when (nonzero? (-> this resolve-u))
@@ -424,7 +421,7 @@
(none)
)
(defmethod send-events-for-touching-shapes touching-list ((this touching-list))
(defmethod send-events-for-touching-shapes ((this touching-list))
"Send all events for touching shapes.
Note that the order of event sending is basically random.
(this could explain lava walks's unreliable behavior)"
@@ -575,7 +572,7 @@
(the-as touching-prims-entry #f)
)
(defmethod get-touched-shape touching-shapes-entry ((this touching-shapes-entry) (arg0 collide-shape))
(defmethod get-touched-shape ((this touching-shapes-entry) (arg0 collide-shape))
"Get the other shape in a pair of shapes."
(cond
((= (-> this cshape1) arg0)
@@ -588,7 +585,7 @@
(the-as collide-shape #f)
)
(defmethod get-touched-prim touching-prims-entry ((this touching-prims-entry) (arg0 trsqv) (arg1 touching-shapes-entry))
(defmethod get-touched-prim ((this touching-prims-entry) (arg0 trsqv) (arg1 touching-shapes-entry))
"Get the primitive belonging to the collide shape that is touching."
(cond
((= (-> arg1 cshape1) arg0)
@@ -601,7 +598,7 @@
(the-as collide-shape-prim #f)
)
(defmethod get-touched-tri touching-prims-entry ((this touching-prims-entry) (arg0 collide-shape) (arg1 touching-shapes-entry))
(defmethod get-touched-tri ((this touching-prims-entry) (arg0 collide-shape) (arg1 touching-shapes-entry))
"Get the triangle belonging to the the collide shape that is touching (if it has one, otherwise #f)"
(let ((v0-0 (the-as collide-tri-result #f)))
(cond
@@ -624,7 +621,7 @@
)
)
(defmethod get-middle-of-bsphere-overlap touching-prims-entry ((this touching-prims-entry) (arg0 vector))
(defmethod get-middle-of-bsphere-overlap ((this touching-prims-entry) (arg0 vector))
"This is a bit weird...
But assuming the the bounding spheres overlap, draw a line between their centers, consider the line segment
that is inside of both spheres, and get the midpoint of that."
+40 -47
View File
@@ -56,22 +56,17 @@
;; It packs all data into a 32-bit pat-surface type.
(deftype pat-surface (uint32)
((skip uint8 :offset 0 :size 3) ;; overlay the "no" fields later on
(mode pat-mode :offset 3 :size 3) ;; ground/wall/obstacle for collision system
(material pat-material :offset 6 :size 6) ;; material for effects (sound, particles, surfaces...)
(camera uint8 :offset 12 :size 2) ;; 2 bits for camera (used later)
(event pat-event :offset 14 :size 6) ;; what happens if we hit this?
(noentity uint8 :offset 0 :size 1) ;; collisions for actors/jak/etc ignore this
(nocamera uint8 :offset 1 :size 1) ;; collisions for camera ignore this
(noedge uint8 :offset 2 :size 1) ;; seems unused? maybe no edge grab?
(nolineofsight uint8 :offset 12 :size 1) ;; camera don't worry about this object blocking line-of-sight to jak.
;; 13 belongs to "camera", but seems unsed.
;; 14 is unused?
(unknown-bit uint8 :offset 15 :size 1) ;; maybe death plane?
((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)
(unknown-bit uint8 :offset 15 :size 1)
)
:method-count-assert 9
:size-assert #x4
:flag-assert #x900000004
)
(defun-debug pat-material->string ((pat pat-surface))
@@ -88,40 +83,38 @@
;; for debug drawing pat's by mode.
(deftype pat-mode-info (structure)
((name string :offset-assert 0)
(wall-angle float :offset-assert 4)
(color rgba :offset-assert 8)
(hilite-color rgba :offset-assert 12)
((name string)
(wall-angle float)
(color rgba)
(hilite-color rgba)
)
:method-count-assert 9
:size-assert #x10
:flag-assert #x900000010
)
(define *pat-mode-info* (new 'static 'inline-array pat-mode-info 4
(new 'static 'pat-mode-info
:name "ground"
:wall-angle 0.2
:color (new 'static 'rgba :r #x7f :a #x40)
:hilite-color (new 'static 'rgba :r #xff :a #x80)
(new 'static 'pat-mode-info
:name "ground"
:wall-angle 0.2
:color (new 'static 'rgba :r #x7f :a #x40)
:hilite-color (new 'static 'rgba :r #xff :a #x80)
)
(new 'static 'pat-mode-info
:name "wall"
:wall-angle 2.0
:color (new 'static 'rgba :b #x7f :a #x40)
:hilite-color (new 'static 'rgba :b #xff :a #x80)
)
(new 'static 'pat-mode-info
:name "obstacle"
:wall-angle 0.82
:color (new 'static 'rgba :r #x7f :b #x7f :a #x40)
:hilite-color (new 'static 'rgba :r #xff :b #xff :a #x80)
)
(new 'static 'pat-mode-info
:name "pole"
:wall-angle 2.0
:color (new 'static 'rgba :r #x7f :g #x7f :a #x40)
:hilite-color (new 'static 'rgba :r #xff :g #xff :a #x80)
)
)
)
(new 'static 'pat-mode-info
:name "wall"
:wall-angle 2.0
:color (new 'static 'rgba :b #x7f :a #x40)
:hilite-color (new 'static 'rgba :b #xff :a #x80)
)
(new 'static 'pat-mode-info
:name "obstacle"
:wall-angle 0.82
:color (new 'static 'rgba :r #x7f :b #x7f :a #x40)
:hilite-color (new 'static 'rgba :r #xff :b #xff :a #x80)
)
(new 'static 'pat-mode-info
:name "pole"
:wall-angle 2.0
:color (new 'static 'rgba :r #x7f :g #x7f :a #x40)
:hilite-color (new 'static 'rgba :r #xff :g #xff :a #x80)
)
)
)
+33 -37
View File
@@ -51,43 +51,39 @@
;; Note that "surface" can apply to weird things, like riding the zoomer or swimming as well.
(deftype surface (basic)
((name symbol :offset-assert 4)
(turnv float :offset-assert 8)
(turnvv float :offset-assert 12)
(tiltv float :offset-assert 16)
(tiltvv float :offset-assert 20)
(transv-max float :offset-assert 24)
(target-speed float :offset-assert 28)
(seek0 float :offset-assert 32)
(seek90 float :offset-assert 36)
(seek180 float :offset-assert 40)
(fric float :offset-assert 44)
(nonlin-fric-dist float :offset-assert 48)
(slip-factor float :offset-assert 52)
(slide-factor float :offset-assert 56)
(slope-up-factor float :offset-assert 60)
(slope-down-factor float :offset-assert 64)
(slope-slip-angle float :offset-assert 68)
(impact-fric float :offset-assert 72)
(bend-factor float :offset-assert 76)
(bend-speed float :offset-assert 80)
(alignv float :offset-assert 84)
(slope-up-traction float :offset-assert 88)
(align-speed float :offset-assert 92)
(active-hook (function none) :offset 128)
(touch-hook (function none) :offset-assert 132)
(impact-hook function :offset-assert 136)
(mult-hook (function surface surface surface int none) :offset-assert 140)
;; dataw went here
(mode symbol :offset-assert 144)
(flags surface-flags :offset-assert 148)
(data float 30 :offset 8)
(hook function 4 :offset 128)
(dataw uint32 2 :offset 144)
((name symbol)
(turnv float)
(turnvv float)
(tiltv float)
(tiltvv float)
(transv-max float)
(target-speed float)
(seek0 float)
(seek90 float)
(seek180 float)
(fric float)
(nonlin-fric-dist float)
(slip-factor float)
(slide-factor float)
(slope-up-factor float)
(slope-down-factor float)
(slope-slip-angle float)
(impact-fric float)
(bend-factor float)
(bend-speed float)
(alignv float)
(slope-up-traction float)
(align-speed float)
(active-hook (function none) :offset 128)
(touch-hook (function none))
(impact-hook function)
(mult-hook (function surface surface surface int none))
(mode symbol)
(flags surface-flags)
(data float 30 :overlay-at turnv)
(hook function 4 :overlay-at active-hook)
(dataw uint32 2 :overlay-at mode)
)
:method-count-assert 9
:size-assert #x98
:flag-assert #x900000098
)
;; these calc-terminal functions are unused.
@@ -107,7 +103,7 @@
)
)
(defmethod print surface ((this surface))
(defmethod print ((this surface))
;; seems this format string is wrong.
(format
#t
+3 -7
View File
@@ -9,10 +9,6 @@
(deftype babak (nav-enemy)
()
:heap-base #x120
:method-count-assert 76
:size-assert #x190
:flag-assert #x4c01200190
(:states
babak-run-to-cannon
)
@@ -239,7 +235,7 @@
)
)
(defmethod initialize-collision babak ((this babak))
(defmethod initialize-collision ((this babak))
(let ((s5-0 (new 'process 'collide-shape-moving this (collide-list-enum usually-hit-by-player))))
(set! (-> s5-0 dynam) (copy *standard-dynamics* 'process))
(set! (-> s5-0 reaction) default-collision-reaction)
@@ -286,7 +282,7 @@
(none)
)
(defmethod nav-enemy-method-48 babak ((this babak))
(defmethod nav-enemy-method-48 ((this babak))
(initialize-skeleton this *babak-sg* '())
(init-defaults! this *babak-nav-enemy-info*)
(set! (-> this neck up) (the-as uint 0))
@@ -296,7 +292,7 @@
(none)
)
(defmethod nav-enemy-method-59 babak ((this babak))
(defmethod nav-enemy-method-59 ((this babak))
(cond
((and (and (-> this entity) (logtest? (-> this entity extra perm status) (entity-perm-status complete)))
(logtest? (-> this enemy-info options) (fact-options has-power-cell))
+61 -67
View File
@@ -9,38 +9,36 @@
;; DECOMP BEGINS
(deftype basebutton (process-drawable)
((root-override collide-shape-moving :offset 112)
(down? symbol :offset-assert 176)
(spawned-by-other? symbol :offset-assert 180)
(move-to? symbol :offset-assert 184)
(notify-actor entity-actor :offset-assert 188)
(timeout float :offset-assert 192)
(button-id int32 :offset-assert 196)
(event-going-down symbol :offset-assert 200)
(event-down symbol :offset-assert 204)
(event-going-up symbol :offset-assert 208)
(event-up symbol :offset-assert 212)
(anim-speed float :offset-assert 216)
(move-to-pos vector :inline :offset-assert 224)
(move-to-quat quaternion :inline :offset-assert 240)
((root collide-shape-moving :override)
(down? symbol)
(spawned-by-other? symbol)
(move-to? symbol)
(notify-actor entity-actor)
(timeout float)
(button-id int32)
(event-going-down symbol)
(event-down symbol)
(event-going-up symbol)
(event-up symbol)
(anim-speed float)
(move-to-pos vector :inline)
(move-to-quat quaternion :inline)
)
:heap-base #x90
:method-count-assert 32
:size-assert #x100
:flag-assert #x2000900100
(:state-methods
basebutton-down-idle
basebutton-going-down
basebutton-going-up
basebutton-startup
basebutton-up-idle
)
(:methods
(basebutton-down-idle () _type_ :state 20)
(basebutton-going-down () _type_ :state 21)
(basebutton-going-up () _type_ :state 22)
(basebutton-startup () _type_ :state 23)
(basebutton-up-idle () _type_ :state 24)
(reset! (_type_) float 25)
(basebutton-method-26 (_type_) none 26)
(basebutton-method-27 (_type_) collide-shape-moving 27)
(arm-trigger-event! (_type_) symbol 28)
(basebutton-method-29 (_type_ symbol entity) none 29)
(move-to-vec-or-quat! (_type_ vector quaternion) quaternion 30)
(press! (_type_ symbol) int 31)
(reset! (_type_) float)
(basebutton-method-26 (_type_) none)
(basebutton-method-27 (_type_) collide-shape-moving)
(arm-trigger-event! (_type_) symbol)
(basebutton-method-29 (_type_ symbol entity) none)
(move-to-vec-or-quat! (_type_ vector quaternion) quaternion)
(press! (_type_ symbol) int)
)
)
@@ -50,15 +48,15 @@
:bounds (static-spherem 0 0 0 3)
)
(defmethod move-to-vec-or-quat! basebutton ((this basebutton) (arg0 vector) (arg1 quaternion))
(defmethod move-to-vec-or-quat! ((this basebutton) (arg0 vector) (arg1 quaternion))
(set! (-> this move-to?) #t)
(if arg0
(set! (-> this move-to-pos quad) (-> arg0 quad))
(set! (-> this move-to-pos quad) (-> this root-override trans quad))
(set! (-> this move-to-pos quad) (-> this root trans quad))
)
(if arg1
(quaternion-copy! (-> this move-to-quat) arg1)
(quaternion-copy! (-> this move-to-quat) (-> this root-override quat))
(quaternion-copy! (-> this move-to-quat) (-> this root quat))
)
)
@@ -106,8 +104,8 @@
:post (behavior ()
(when (-> self move-to?)
(set! (-> self move-to?) #f)
(set! (-> self root-override trans quad) (-> self move-to-pos quad))
(quaternion-copy! (-> self root-override quat) (-> self move-to-quat))
(set! (-> self root trans quad) (-> self move-to-pos quad))
(quaternion-copy! (-> self root quat) (-> self move-to-quat))
(rider-post)
)
)
@@ -142,8 +140,8 @@
:post (behavior ()
(when (-> self move-to?)
(set! (-> self move-to?) #f)
(set! (-> self root-override trans quad) (-> self move-to-pos quad))
(quaternion-copy! (-> self root-override quat) (-> self move-to-quat))
(set! (-> self root trans quad) (-> self move-to-pos quad))
(quaternion-copy! (-> self root quat) (-> self move-to-quat))
)
(rider-post)
)
@@ -189,8 +187,8 @@
:post (behavior ()
(when (-> self move-to?)
(set! (-> self move-to?) #f)
(set! (-> self root-override trans quad) (-> self move-to-pos quad))
(quaternion-copy! (-> self root-override quat) (-> self move-to-quat))
(set! (-> self root trans quad) (-> self move-to-pos quad))
(quaternion-copy! (-> self root quat) (-> self move-to-quat))
(rider-post)
)
)
@@ -225,14 +223,14 @@
:post (behavior ()
(when (-> self move-to?)
(set! (-> self move-to?) #f)
(set! (-> self root-override trans quad) (-> self move-to-pos quad))
(quaternion-copy! (-> self root-override quat) (-> self move-to-quat))
(set! (-> self root trans quad) (-> self move-to-pos quad))
(quaternion-copy! (-> self root quat) (-> self move-to-quat))
)
(rider-post)
)
)
(defmethod press! basebutton ((this basebutton) (arg0 symbol))
(defmethod press! ((this basebutton) (arg0 symbol))
(set! (-> this down?) arg0)
(cond
(arg0
@@ -248,7 +246,7 @@
)
)
(defmethod basebutton-method-29 basebutton ((this basebutton) (arg0 symbol) (arg1 entity))
(defmethod basebutton-method-29 ((this basebutton) (arg0 symbol) (arg1 entity))
(with-pp
(when arg0
(cond
@@ -278,7 +276,7 @@
)
)
(defmethod reset! basebutton ((this basebutton))
(defmethod reset! ((this basebutton))
(set! (-> this down?) #f)
(set! (-> this spawned-by-other?) #t)
(set! (-> this move-to?) #f)
@@ -291,14 +289,14 @@
(set! (-> this anim-speed) 1.0)
)
(defmethod arm-trigger-event! basebutton ((this basebutton))
(defmethod arm-trigger-event! ((this basebutton))
(let ((v0-0 'trigger))
(set! (-> this event-going-down) v0-0)
v0-0
)
)
(defmethod basebutton-method-26 basebutton ((this basebutton))
(defmethod basebutton-method-26 ((this basebutton))
(initialize-skeleton this *generic-button-sg* '())
(logior! (-> this skel status) (janim-status inited))
(ja-channel-set! 1)
@@ -327,12 +325,12 @@
)
)
(set! (-> this anim-speed) 2.0)
(update-transforms! (-> this root-override))
(update-transforms! (-> this root))
(ja-post)
(none)
)
(defmethod basebutton-method-27 basebutton ((this basebutton))
(defmethod basebutton-method-27 ((this basebutton))
(let ((s5-0 (new 'process 'collide-shape-moving this (collide-list-enum hit-by-player))))
(set! (-> s5-0 dynam) (copy *standard-dynamics* 'process))
(set! (-> s5-0 reaction) default-collision-reaction)
@@ -367,12 +365,12 @@
)
(set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w)))
(backup-collide-with-as s5-0)
(set! (-> this root-override) s5-0)
(set! (-> this root) s5-0)
s5-0
)
)
(defmethod init-from-entity! basebutton ((this basebutton) (arg0 entity-actor))
(defmethod init-from-entity! ((this basebutton) (arg0 entity-actor))
(reset! this)
(set! (-> this spawned-by-other?) #f)
(set! (-> this button-id) -1)
@@ -398,7 +396,7 @@
(set! (-> this notify-actor) (entity-actor-lookup arg0 'alt-actor 0))
(set! (-> this timeout) (res-lump-float arg0 'timeout))
(if (not (-> this spawned-by-other?))
(nav-mesh-connect this (-> this root-override) (the-as nav-control #f))
(nav-mesh-connect this (-> this root) (the-as nav-control #f))
)
(arm-trigger-event! this)
(basebutton-method-26 this)
@@ -417,9 +415,9 @@
(set! (-> self entity) arg0)
)
(basebutton-method-27 self)
(set! (-> self root-override trans quad) (-> arg1 quad))
(quaternion-copy! (-> self root-override quat) arg2)
(set-vector! (-> self root-override scale) 1.0 1.0 1.0 1.0)
(set! (-> self root trans quad) (-> arg1 quad))
(quaternion-copy! (-> self root quat) arg2)
(set-vector! (-> self root scale) 1.0 1.0 1.0 1.0)
(arm-trigger-event! self)
(basebutton-method-26 self)
(go-virtual basebutton-startup)
@@ -436,20 +434,16 @@
)
(deftype warp-gate (process-drawable)
((level symbol :offset-assert 176)
(level-slot int32 :offset-assert 180)
(min-slot int32 :offset-assert 184)
(max-slot int32 :offset-assert 188)
((level symbol)
(level-slot int32)
(min-slot int32)
(max-slot int32)
)
:heap-base #x50
:method-count-assert 24
:size-assert #xc0
:flag-assert #x18005000c0
(:methods
(idle () _type_ :state 20)
(active () _type_ :state 21)
(use (int level) _type_ :state 22)
(hidden () _type_ :state 23)
(:state-methods
idle
active
(use int level)
hidden
)
)
+60 -68
View File
@@ -45,36 +45,32 @@
;; DECOMP BEGINS
(deftype baseplat (process-drawable)
((root-override collide-shape-moving :offset 112)
(smush smush-control :inline :offset-assert 176)
(basetrans vector :inline :offset-assert 208)
(bouncing symbol :offset-assert 224)
((root collide-shape-moving :override)
(smush smush-control :inline)
(basetrans vector :inline)
(bouncing symbol)
)
:heap-base #x80
:method-count-assert 27
:size-assert #xe4
:flag-assert #x1b008000e4
(:methods
(baseplat-method-20 (_type_) none 20)
(baseplat-method-21 (_type_) none 21)
(baseplat-method-22 (_type_) none 22)
(get-unlit-skel (_type_) skeleton-group 23)
(baseplat-method-24 (_type_) none 24)
(baseplat-method-25 (_type_) sparticle-launch-group 25)
(baseplat-method-26 (_type_) none 26)
(baseplat-method-20 (_type_) none)
(baseplat-method-21 (_type_) none)
(baseplat-method-22 (_type_) none)
(get-unlit-skel (_type_) skeleton-group)
(baseplat-method-24 (_type_) none)
(baseplat-method-25 (_type_) sparticle-launch-group)
(baseplat-method-26 (_type_) none)
)
)
(defmethod baseplat-method-21 baseplat ((this baseplat))
(defmethod baseplat-method-21 ((this baseplat))
(logior! (-> this skel status) (janim-status inited))
(set! (-> this basetrans quad) (-> this root-override trans quad))
(set! (-> this basetrans quad) (-> this root trans quad))
(set! (-> this bouncing) #f)
0
(none)
)
(defmethod baseplat-method-22 baseplat ((this baseplat))
(defmethod baseplat-method-22 ((this baseplat))
(activate! (-> this smush) -1.0 60 150 1.0 1.0)
(set! (-> this bouncing) #t)
(logclear! (-> this mask) (process-mask sleep))
@@ -108,14 +104,14 @@
(let ((gp-0 (new 'stack-no-clear 'vector)))
(set! (-> gp-0 quad) (-> self basetrans quad))
(+! (-> gp-0 y) (* 819.2 (update! (-> self smush))))
(move-to-point! (-> self root-override) gp-0)
(move-to-point! (-> self root) gp-0)
)
(if (not (!= (-> self smush amp) 0.0))
(set! (-> self bouncing) #f)
)
)
(else
(move-to-point! (-> self root-override) (-> self basetrans))
(move-to-point! (-> self root) (-> self basetrans))
)
)
(none)
@@ -127,13 +123,13 @@
(none)
)
(defmethod baseplat-method-25 baseplat ((this baseplat))
(defmethod baseplat-method-25 ((this baseplat))
(the-as sparticle-launch-group 0)
)
(defmethod baseplat-method-20 baseplat ((this baseplat))
(defmethod baseplat-method-20 ((this baseplat))
(if (nonzero? (-> this part))
(spawn (-> this part) (-> this root-override trans))
(spawn (-> this part) (-> this root trans))
)
(none)
)
@@ -147,31 +143,29 @@
)
(deftype eco-door (process-drawable)
((root-override collide-shape :offset 112)
(speed float :offset-assert 176)
(open-distance float :offset-assert 180)
(close-distance float :offset-assert 184)
(out-dir vector :inline :offset-assert 192)
(open-sound sound-name :offset-assert 208)
(close-sound sound-name :offset-assert 224)
(state-actor entity-actor :offset-assert 240)
(flags eco-door-flags :offset-assert 244)
(locked symbol :offset-assert 248)
(auto-close symbol :offset-assert 252)
(one-way symbol :offset-assert 256)
((root collide-shape :override)
(speed float)
(open-distance float)
(close-distance float)
(out-dir vector :inline)
(open-sound sound-name)
(close-sound sound-name)
(state-actor entity-actor)
(flags eco-door-flags)
(locked symbol)
(auto-close symbol)
(one-way symbol)
)
:heap-base #xa0
:method-count-assert 27
:size-assert #x104
:flag-assert #x1b00a00104
(:state-methods
door-closed
door-opening
door-open
door-closing
)
(:methods
(door-closed () _type_ :state 20)
(door-opening () _type_ :state 21)
(door-open () _type_ :state 22)
(door-closing () _type_ :state 23)
(eco-door-method-24 (_type_) none 24)
(eco-door-method-25 (_type_) none 25)
(eco-door-method-26 (_type_) none 26)
(eco-door-method-24 (_type_) none)
(eco-door-method-25 (_type_) none)
(eco-door-method-26 (_type_) none)
)
)
@@ -203,12 +197,11 @@ eco-door-event-handler
:code (behavior ()
(ja :num-func num-func-identity :frame-num 0.0)
(suspend)
(update-transforms! (-> self root-override))
(update-transforms! (-> self root))
(ja-post)
(loop
(when (and *target* (>= (-> self open-distance)
(vector-vector-distance (-> self root-override trans) (-> *target* control trans))
)
(when (and *target*
(>= (-> self open-distance) (vector-vector-distance (-> self root trans) (-> *target* control trans)))
)
(eco-door-method-26 self)
(if (and (not (-> self locked))
@@ -237,10 +230,10 @@ eco-door-event-handler
)
)
(if gp-0
(sound-play "blue-eco-on" :position (the-as symbol (-> self root-override trans)))
(sound-play "blue-eco-on" :position (the-as symbol (-> self root trans)))
)
(sound-play-by-name (-> self open-sound) (new-sound-id) 1024 0 0 (sound-group sfx) #t)
(clear-collide-with-as (-> self root-override))
(clear-collide-with-as (-> self root))
(until (ja-done? 0)
(ja :num! (seek! max (-> self speed)))
(if (and gp-0 (rand-vu-percent? 0.5))
@@ -260,20 +253,19 @@ eco-door-event-handler
:code (behavior ()
(set-time! (-> self state-time))
(process-entity-status! self (entity-perm-status complete) #t)
(clear-collide-with-as (-> self root-override))
(clear-collide-with-as (-> self root))
(ja :num-func num-func-identity :frame-num max)
(logior! (-> self draw status) (draw-status hidden))
(suspend)
(update-transforms! (-> self root-override))
(update-transforms! (-> self root))
(ja-post)
(loop
(let ((f30-0 (vector4-dot (-> self out-dir) (target-pos 0)))
(f28-0 (vector4-dot (-> self out-dir) (camera-pos)))
)
(when (and (-> self auto-close)
(or (not *target*) (< (-> self close-distance)
(vector-vector-distance (-> self root-override trans) (-> *target* control trans))
)
(or (not *target*)
(< (-> self close-distance) (vector-vector-distance (-> self root trans) (-> *target* control trans)))
)
)
(if (and (>= (* f30-0 f28-0) 0.0) (< 16384.0 (fabs f28-0)))
@@ -290,12 +282,12 @@ eco-door-event-handler
:virtual #t
:event eco-door-event-handler
:code (behavior ()
(restore-collide-with-as (-> self root-override))
(restore-collide-with-as (-> self root))
(logclear! (-> self draw status) (draw-status hidden))
(let ((gp-0 (new 'stack 'overlaps-others-params)))
(set! (-> gp-0 options) (the-as uint 1))
(set! (-> gp-0 tlist) #f)
(while (find-overlapping-shapes (-> self root-override) gp-0)
(while (find-overlapping-shapes (-> self root) gp-0)
(suspend)
)
)
@@ -312,7 +304,7 @@ eco-door-event-handler
:post transform-post
)
(defmethod eco-door-method-26 eco-door ((this eco-door))
(defmethod eco-door-method-26 ((this eco-door))
(when (-> this state-actor)
(if (logtest? (-> this state-actor extra perm status) (entity-perm-status complete))
(set! (-> this locked) (logtest? (-> this flags) (eco-door-flags ecdf01)))
@@ -323,7 +315,7 @@ eco-door-event-handler
(none)
)
(defmethod eco-door-method-24 eco-door ((this eco-door))
(defmethod eco-door-method-24 ((this eco-door))
(let ((s5-0 (new 'process 'collide-shape this (collide-list-enum hit-by-player))))
(let ((s4-0 (new 'process 'collide-shape-prim-mesh s5-0 (the-as uint 0) (the-as uint 0))))
(set! (-> s4-0 prim-core collide-as) (collide-kind wall-object))
@@ -336,22 +328,22 @@ eco-door-event-handler
)
(set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w)))
(backup-collide-with-as s5-0)
(set! (-> this root-override) s5-0)
(set! (-> this root) s5-0)
)
0
(none)
)
(defmethod eco-door-method-25 eco-door ((this eco-door))
(defmethod eco-door-method-25 ((this eco-door))
0
(none)
)
(defmethod init-from-entity! eco-door ((this eco-door) (arg0 entity-actor))
(defmethod init-from-entity! ((this eco-door) (arg0 entity-actor))
(eco-door-method-24 this)
(process-drawable-from-entity! this arg0)
(let ((f0-0 (res-lump-float (-> this entity) 'scale :default 1.0)))
(set-vector! (-> this root-override scale) f0-0 f0-0 f0-0 1.0)
(set-vector! (-> this root scale) f0-0 f0-0 f0-0 1.0)
)
(set! (-> this open-distance) 32768.0)
(set! (-> this close-distance) 49152.0)
@@ -367,9 +359,9 @@ eco-door-event-handler
(eco-door-method-26 this)
(set! (-> this auto-close) (logtest? (-> this flags) (eco-door-flags auto-close)))
(set! (-> this one-way) (logtest? (-> this flags) (eco-door-flags one-way)))
(vector-z-quaternion! (-> this out-dir) (-> this root-override quat))
(set! (-> this out-dir w) (- (vector-dot (-> this out-dir) (-> this root-override trans))))
(update-transforms! (-> this root-override))
(vector-z-quaternion! (-> this out-dir) (-> this root quat))
(set! (-> this out-dir w) (- (vector-dot (-> this out-dir) (-> this root trans))))
(update-transforms! (-> this root))
(eco-door-method-25 this)
(if (and (not (-> this auto-close))
(-> this entity)
File diff suppressed because it is too large Load Diff
+74 -104
View File
@@ -50,13 +50,10 @@
)
(deftype crate-bank (basic)
((COLLIDE_YOFF float :offset-assert 4)
(COLLIDE_RADIUS float :offset-assert 8)
(DARKECO_EXPLODE_RADIUS float :offset-assert 12)
((COLLIDE_YOFF float)
(COLLIDE_RADIUS float)
(DARKECO_EXPLODE_RADIUS float)
)
:method-count-assert 9
:size-assert #x10
:flag-assert #x900000010
)
@@ -65,31 +62,29 @@
)
(deftype crate (process-drawable)
((root-override collide-shape-moving :offset 112)
(smush smush-control :inline :offset-assert 176)
(base vector :inline :offset-assert 208)
(look symbol :offset-assert 224)
(defense symbol :offset-assert 228)
(incomming-attack-id uint64 :offset-assert 232)
(target handle :offset-assert 240)
(child-count int32 :offset-assert 248)
(victory-anim spool-anim :offset-assert 252)
((root collide-shape-moving :override)
(smush smush-control :inline)
(base vector :inline)
(look symbol)
(defense symbol)
(incomming-attack-id uint64)
(target handle)
(child-count int32)
(victory-anim spool-anim)
)
:heap-base #x90
:method-count-assert 30
:size-assert #x100
:flag-assert #x1e00900100
(:state-methods
wait
(die symbol int)
special-contents-die
bounce-on
(notice-blue handle)
)
(:methods
(wait () _type_ :state 20)
(die (symbol int) _type_ :state 21)
(special-contents-die () _type_ :state 22)
(bounce-on () _type_ :state 23)
(notice-blue (handle) _type_ :state 24)
(params-init (_type_ entity) none 25)
(art-init (_type_) crate 26)
(params-set! (_type_ symbol symbol) none 27)
(check-dead (_type_) none 28)
(smush-update! (_type_) none 29)
(params-init (_type_ entity) none)
(art-init (_type_) crate)
(params-set! (_type_ symbol symbol) none)
(check-dead (_type_) none)
(smush-update! (_type_) none)
)
)
@@ -494,7 +489,7 @@
(go-virtual die #f (the-as int s5-0))
)
(else
(when (and (!= s4-0 (-> self incomming-attack-id)) (= (-> self root-override trans y) (-> self base y)))
(when (and (!= s4-0 (-> self incomming-attack-id)) (= (-> self root trans y) (-> self base y)))
(if (not (and (!= *kernel-boot-message* 'play) (= (-> *setting-control* current language) (language-enum japanese)))
)
(level-hint-spawn (text-id training-ironcrate) "sagevb36" (the-as entity #f) *entity-pool* (game-task none))
@@ -548,7 +543,7 @@
(go-virtual die #f (the-as int s5-0))
)
(else
(when (and (!= s4-0 (-> self incomming-attack-id)) (= (-> self root-override trans y) (-> self base y)))
(when (and (!= s4-0 (-> self incomming-attack-id)) (= (-> self root trans y) (-> self base y)))
(level-hint-spawn
(text-id sidekick-hint-crate-steel)
"sksp0006"
@@ -630,7 +625,7 @@
)
)
(('bonk)
(when (= (-> self root-override trans y) (-> self base y))
(when (= (-> self root trans y) (-> self base y))
(activate! (-> self smush) -0.1 75 150 1.0 1.0)
(go-virtual bounce-on)
)
@@ -644,7 +639,7 @@
(('eco-blue)
(if (not (or (= (-> self defense) 'darkeco)
(or (= (-> self next-state name) 'notice-blue) (= (-> self next-state name) 'die))
(!= (-> self root-override trans y) (-> self base y))
(!= (-> self root trans y) (-> self base y))
)
)
(go-virtual notice-blue (process->handle arg0))
@@ -658,7 +653,7 @@
:event crate-standard-event-handler
:code (behavior ()
(suspend)
(update-transforms! (-> self root-override))
(update-transforms! (-> self root))
(logior! (-> self mask) (process-mask sleep))
(loop
(suspend)
@@ -712,7 +707,7 @@
)
)
(when v1-6
(let* ((gp-2 (-> self root-override root-prim prim-core))
(let* ((gp-2 (-> self root root-prim prim-core))
(a1-3 (-> (the-as collide-shape v1-6) root-prim prim-core))
(f30-0 (vector-vector-distance (the-as vector gp-2) (the-as vector a1-3)))
)
@@ -789,14 +784,14 @@
:trans (behavior ()
(case (-> self type)
((crate-buzzer)
(if (and *target* (>= (-> *target* fact-info-target buzzer) 6.0))
(if (and *target* (>= (-> *target* fact buzzer) 6.0))
(spool-push *art-control* (-> self victory-anim name) 0 self -99.0)
)
)
)
)
:code (behavior ((arg0 symbol) (arg1 int))
(clear-collide-with-as (-> self root-override))
(clear-collide-with-as (-> self root))
(if (nonzero? (-> self sound))
(stop! (-> self sound))
)
@@ -831,16 +826,13 @@
)
(case (-> self defense)
(('darkeco)
(let ((f0-0
(lerp-scale 1.0 0.0 (vector-vector-distance (-> self root-override trans) (target-pos 0)) 8192.0 40960.0)
)
)
(let ((f0-0 (lerp-scale 1.0 0.0 (vector-vector-distance (-> self root trans) (target-pos 0)) 8192.0 40960.0)))
(cpad-set-buzz! (-> *cpad-list* cpads 0) 1 (the int (* 255.0 f0-0)) (seconds 0.3))
)
(process-spawn
touch-tracker
:init touch-tracker-init
(-> self root-override trans)
(-> self root trans)
(-> *CRATE-bank* DARKECO_EXPLODE_RADIUS)
30
:to self
@@ -857,7 +849,7 @@
#f
#f
#f
(-> self root-override trans)
(-> self root trans)
:to *entity-pool*
)
)
@@ -870,7 +862,7 @@
#f
#f
#f
(-> self root-override trans)
(-> self root trans)
:to *entity-pool*
)
)
@@ -883,7 +875,7 @@
#f
#f
#f
(-> self root-override trans)
(-> self root trans)
:to *entity-pool*
)
)
@@ -958,7 +950,7 @@
)
)
)
(clear-collide-with-as (-> self root-override))
(clear-collide-with-as (-> self root))
(logior! (-> self draw status) (draw-status hidden))
(drop-pickup (-> self fact) #t self (the-as fact-info #f) 0)
(set! (-> self child-count) (+ (process-count self) -1))
@@ -979,7 +971,7 @@
(defbehavior crate-init-by-other crate ((arg0 entity) (arg1 vector) (arg2 symbol))
(params-init self arg0)
(set! (-> self root-override trans quad) (-> arg1 quad))
(set! (-> self root trans quad) (-> arg1 quad))
(set! (-> self look) arg2)
(set! (-> self defense) arg2)
(art-init self)
@@ -987,14 +979,14 @@
(none)
)
(defmethod init-from-entity! crate ((this crate) (arg0 entity-actor))
(defmethod init-from-entity! ((this crate) (arg0 entity-actor))
(params-init this arg0)
(art-init this)
(check-dead this)
(none)
)
(defmethod params-init crate ((this crate) (arg0 entity))
(defmethod params-init ((this crate) (arg0 entity))
(stack-size-set! (-> this main-thread) 128)
(logior! (-> this mask) (process-mask crate))
(let ((s4-0 (new 'process 'collide-shape-moving this (collide-list-enum usually-hit-by-player))))
@@ -1015,7 +1007,7 @@
)
(set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w)))
(backup-collide-with-as s4-0)
(set! (-> this root-override) s4-0)
(set! (-> this root) s4-0)
)
(set! (-> this fact)
(new 'process 'fact-info this (pickup-type eco-pill-random) (-> *FACT-bank* default-pill-inc))
@@ -1065,14 +1057,14 @@
(none)
)
(defmethod art-init crate ((this crate))
(defmethod art-init ((this crate))
(case (-> this look)
(('iron)
(set! (-> this root-override root-prim prim-core offense) (collide-offense normal-attack))
(set! (-> this root root-prim prim-core offense) (collide-offense normal-attack))
(initialize-skeleton this *crate-iron-sg* '())
)
(('steel)
(set! (-> this root-override root-prim prim-core offense) (collide-offense indestructible))
(set! (-> this root root-prim prim-core offense) (collide-offense indestructible))
(initialize-skeleton this *crate-steel-sg* '())
)
(('darkeco)
@@ -1104,25 +1096,25 @@
)
(cond
((logtest? (fact-options indestructible) (-> this fact options))
(set! (-> this root-override root-prim prim-core offense) (collide-offense indestructible))
(set! (-> this root root-prim prim-core offense) (collide-offense indestructible))
)
((logtest? (-> this fact options) (fact-options strong-attack))
(set! (-> this root-override root-prim prim-core offense) (collide-offense strong-attack))
(set! (-> this root root-prim prim-core offense) (collide-offense strong-attack))
)
((logtest? (-> this fact options) (fact-options normal-attack))
(set! (-> this root-override root-prim prim-core offense) (collide-offense normal-attack))
(set! (-> this root root-prim prim-core offense) (collide-offense normal-attack))
)
((logtest? (-> this fact options) (fact-options touch))
(set! (-> this root-override root-prim prim-core offense) (collide-offense touch))
(set! (-> this root root-prim prim-core offense) (collide-offense touch))
)
)
(set! (-> this base quad) (-> this root-override trans quad))
(set! (-> this base quad) (-> this root trans quad))
(crate-post)
(nav-mesh-connect this (-> this root-override) (the-as nav-control #f))
(nav-mesh-connect this (-> this root) (the-as nav-control #f))
this
)
(defmethod params-set! crate ((this crate) (arg0 symbol) (arg1 symbol))
(defmethod params-set! ((this crate) (arg0 symbol) (arg1 symbol))
(if arg0
(set! (-> this look) arg0)
)
@@ -1132,7 +1124,7 @@
(none)
)
(defmethod check-dead crate ((this crate))
(defmethod check-dead ((this crate))
(if (>= (-> this entity extra perm user-int8 0) 1)
(go (method-of-object this die) #t 0)
)
@@ -1142,11 +1134,11 @@
(none)
)
(defmethod smush-update! crate ((this crate))
(defmethod smush-update! ((this crate))
(let ((f0-0 (update! (-> this smush))))
(set! (-> this root-override scale x) (+ 1.0 (* -0.5 f0-0)))
(set! (-> this root-override scale y) (+ 1.0 f0-0))
(set! (-> this root-override scale z) (+ 1.0 (* -0.5 f0-0)))
(set! (-> this root scale x) (+ 1.0 (* -0.5 f0-0)))
(set! (-> this root scale y) (+ 1.0 f0-0))
(set! (-> this root scale z) (+ 1.0 (* -0.5 f0-0)))
)
0
(none)
@@ -1154,14 +1146,10 @@
(deftype barrel (crate)
()
:heap-base #x90
:method-count-assert 30
:size-assert #x100
:flag-assert #x1e00900100
)
(defmethod params-init barrel ((this barrel) (arg0 entity))
(defmethod params-init ((this barrel) (arg0 entity))
(let ((t9-0 (method-of-type crate params-init)))
(t9-0 this arg0)
)
@@ -1171,14 +1159,10 @@
(deftype bucket (crate)
()
:heap-base #x90
:method-count-assert 30
:size-assert #x100
:flag-assert #x1e00900100
)
(defmethod params-init bucket ((this bucket) (arg0 entity))
(defmethod params-init ((this bucket) (arg0 entity))
(let ((t9-0 (method-of-type crate params-init)))
(t9-0 this arg0)
)
@@ -1220,24 +1204,16 @@
(deftype crate-buzzer (crate)
()
:heap-base #x90
:method-count-assert 30
:size-assert #x100
:flag-assert #x1e00900100
)
(defmethod art-init crate-buzzer ((this crate-buzzer))
(defmethod art-init ((this crate-buzzer))
(let ((t9-0 (method-of-type crate art-init)))
(t9-0 this)
)
(set! (-> this part) (create-launch-control (-> *part-group-id-table* 74) this))
(set! (-> this sound) (new
'process
'ambient-sound
(static-sound-spec "buzzer" :pitch-mod -762 :fo-max 40)
(-> this root-override trans)
)
(set! (-> this sound)
(new 'process 'ambient-sound (static-sound-spec "buzzer" :pitch-mod -762 :fo-max 40) (-> this root trans))
)
(set! (-> this victory-anim) (fuel-cell-pick-anim this))
(the-as crate this)
@@ -1246,27 +1222,25 @@
(defstate wait (crate-buzzer)
:virtual #t
:trans (behavior ()
(when (and (and *target*
(>= 327680.0 (vector-vector-distance (-> self root-override trans) (-> *target* control trans)))
)
(when (and (and *target* (>= 327680.0 (vector-vector-distance (-> self root trans) (-> *target* control trans))))
(time-elapsed? (-> self state-time) (seconds 1.5))
(rand-vu-percent? 0.03)
)
(spawn (-> self part) (-> self root-override trans))
(spawn (-> self part) (-> self root trans))
(activate! (-> self smush) 0.2 90 150 1.0 1.0)
(logclear! (-> self mask) (process-mask sleep-code))
)
(if (nonzero? (-> self sound))
(update! (-> self sound))
)
(if (and *target* (>= (-> *target* fact-info-target buzzer) 6.0))
(if (and *target* (>= (-> *target* fact buzzer) 6.0))
(spool-push *art-control* (-> self victory-anim name) 0 self -99.0)
)
)
:code (behavior ()
(set-time! (-> self state-time))
(suspend)
(update-transforms! (-> self root-override))
(update-transforms! (-> self root))
(loop
(set-time! (-> self state-time))
(ja-post)
@@ -1276,9 +1250,9 @@
(sound-play "crate-jump")
(while (or (!= (-> self smush amp) 0.0) (!= f30-0 0.0))
(+! f30-0 (* -245760.0 (seconds-per-frame)))
(+! (-> self root-override trans y) (* f30-0 (seconds-per-frame)))
(when (< (-> self root-override trans y) (-> self base y))
(set! (-> self root-override trans y) (-> self base y))
(+! (-> self root trans y) (* f30-0 (seconds-per-frame)))
(when (< (-> self root trans y) (-> self base y))
(set! (-> self root trans y) (-> self base y))
(set! f30-0 (* -0.5 f30-0))
(if (< (fabs f30-0) 16384.0)
(set! f30-0 0.0)
@@ -1289,7 +1263,7 @@
(suspend)
)
)
(set! (-> self root-override trans y) (-> self base y))
(set! (-> self root trans y) (-> self base y))
)
)
:post #f
@@ -1299,7 +1273,7 @@
:virtual #t
:code (behavior ()
(while (!= (-> self smush amp) 0.0)
(spawn (-> self part) (-> self root-override trans))
(spawn (-> self part) (-> self root trans))
(suspend)
)
(go-virtual wait)
@@ -1307,16 +1281,12 @@
)
(deftype pickup-spawner (crate)
((blocker entity-actor :offset-assert 256)
((blocker entity-actor)
)
:heap-base #xa0
:method-count-assert 30
:size-assert #x104
:flag-assert #x1e00a00104
)
(defmethod params-init pickup-spawner ((this pickup-spawner) (arg0 entity))
(defmethod params-init ((this pickup-spawner) (arg0 entity))
(let ((t9-0 (method-of-type crate params-init)))
(t9-0 this arg0)
)
@@ -1328,7 +1298,7 @@
(none)
)
(defmethod check-dead pickup-spawner ((this pickup-spawner))
(defmethod check-dead ((this pickup-spawner))
(go (method-of-object this wait))
0
(none)
@@ -9,10 +9,6 @@
(deftype dark-eco-pool (water-anim)
()
:heap-base #x70
:method-count-assert 30
:size-assert #xdc
:flag-assert #x1e007000dc
)
@@ -84,7 +80,7 @@
)
)
(defmethod water-vol-method-25 dark-eco-pool ((this dark-eco-pool))
(defmethod water-vol-method-25 ((this dark-eco-pool))
(let ((t9-0 (method-of-type water-anim water-vol-method-25)))
(t9-0 this)
)
@@ -108,7 +104,7 @@
(none)
)
(defmethod water-vol-method-22 dark-eco-pool ((this dark-eco-pool))
(defmethod water-vol-method-22 ((this dark-eco-pool))
(let ((t9-0 (method-of-type water-anim water-vol-method-22)))
(t9-0 this)
)
+89 -122
View File
@@ -16,7 +16,8 @@
(define-extern birth-pickup-at-point (function vector pickup-type float symbol process-tree fact-info (pointer process) :behavior process))
(declare-type collide-shape-moving basic)
(declare-type collide-shape trsqv)
(declare-type collide-shape-moving collide-shape)
(declare-type sparticle-launch-group basic)
(declare-type part-tracker process)
(declare-type collide-prim-core structure)
@@ -36,44 +37,36 @@
;; A manipy is a way to draw and move something. More complicated objects that want to draw multiple
;; things may create a child manipy and then send it commands.
(deftype manipy (process-drawable)
((new-trans-hook (function none) :offset-assert 176)
(cur-trans-hook (function none) :offset-assert 180)
(cur-event-hook (function none) :offset-assert 184)
(new-joint-anim art-joint-anim :offset-assert 188)
(new-joint-anim-blend uint64 :offset-assert 192)
(anim-mode symbol :offset-assert 200)
(cur-grab-handle handle :offset-assert 208)
(cur-target-handle handle :offset-assert 216)
(old-grab-pos vector :inline :offset-assert 224)
(joint joint-mod 4 :offset-assert 240)
(new-post-hook (function none) :offset-assert 256)
(cur-post-hook (function none) :offset-assert 260)
(clone-copy-trans symbol :offset-assert 264)
(shadow-backup basic :offset-assert 268)
(draw? symbol :offset-assert 272)
((new-trans-hook (function none))
(cur-trans-hook (function none))
(cur-event-hook (function none))
(new-joint-anim art-joint-anim)
(new-joint-anim-blend uint64)
(anim-mode symbol)
(cur-grab-handle handle)
(cur-target-handle handle)
(old-grab-pos vector :inline)
(joint joint-mod 4)
(new-post-hook (function none))
(cur-post-hook (function none))
(clone-copy-trans symbol)
(shadow-backup basic)
(draw? symbol)
)
:heap-base #xb0
:method-count-assert 20
:size-assert #x114
:flag-assert #x1400b00114
(:states
manipy-idle
)
)
;; A part-spawner simply spawns particles.
(deftype part-spawner (process-drawable)
((mode (pointer sparticle-launch-group) :offset-assert 176)
(enable symbol :offset-assert 180)
(radius meters :offset-assert 184)
(world-sphere sphere :inline :offset-assert 192)
((mode (pointer sparticle-launch-group))
(enable symbol)
(radius meters)
(world-sphere sphere :inline)
)
:heap-base #x60
:method-count-assert 21
:size-assert #xd0
:flag-assert #x15006000d0
(:methods
(is-visible? (_type_) symbol 20)
(is-visible? (_type_) symbol)
)
(:states
part-spawner-active
@@ -83,24 +76,20 @@
;; a part-tracker will spawn particles, then linger for a bit, and then finally die.
;; a more complicated object can use this to manage particles that do something interesting (like follow you)
(deftype part-tracker (process)
((root trsqv :offset-assert 112)
(part sparticle-launch-control :offset-assert 116)
(target handle :offset-assert 120)
(callback (function part-tracker vector) :offset-assert 128)
(linger-callback (function part-tracker vector) :offset-assert 132)
(duration time-frame :offset-assert 136)
(linger-duration time-frame :offset-assert 144)
(start-time time-frame :offset-assert 152)
(offset vector :inline :offset-assert 160)
(userdata uint64 :offset-assert 176)
(user-time time-frame 2 :offset-assert 184)
(user-vector vector 2 :inline :offset-assert 208)
(user-handle uint32 2 :offset-assert 240)
((root trsqv)
(part sparticle-launch-control)
(target handle)
(callback (function part-tracker vector))
(linger-callback (function part-tracker vector))
(duration time-frame)
(linger-duration time-frame)
(start-time time-frame)
(offset vector :inline)
(userdata uint64)
(user-time time-frame 2)
(user-vector vector 2 :inline)
(user-handle uint32 2)
)
:heap-base #x90
:method-count-assert 14
:size-assert #xf8
:flag-assert #xe009000f8
(:states
part-tracker-process
)
@@ -108,32 +97,28 @@
;; a camera-tracker can control the camera.
(deftype camera-tracker (process)
((grab-target handle :offset 120)
(grab-event symbol :offset-assert 128)
(release-event symbol :offset-assert 132)
(old-global-mask process-mask :offset-assert 136)
(old-self-mask process-mask :offset-assert 140)
(old-parent-mask process-mask :offset-assert 144)
(look-at-target handle :offset-assert 152)
(pov-target handle :offset-assert 160)
(work-process handle :offset-assert 168)
(anim-process handle :offset-assert 176)
(start-time time-frame :offset-assert 184)
(callback basic :offset-assert 192)
(userdata basic :offset-assert 196)
(message basic :offset-assert 200)
(border-value basic :offset-assert 204)
(mask-to-clear process-mask :offset-assert 208)
(script pair :offset-assert 212)
(script-line pair :offset-assert 216)
(script-func (function none) :offset-assert 220)
((grab-target handle :offset 120)
(grab-event symbol)
(release-event symbol)
(old-global-mask process-mask)
(old-self-mask process-mask)
(old-parent-mask process-mask)
(look-at-target handle)
(pov-target handle)
(work-process handle)
(anim-process handle)
(start-time time-frame)
(callback basic)
(userdata basic)
(message basic)
(border-value basic)
(mask-to-clear process-mask)
(script pair)
(script-line pair)
(script-func (function none))
)
:heap-base #x70
:method-count-assert 15
:size-assert #xe0
:flag-assert #xf007000e0
(:methods
(eval (_type_ pair) process 14)
(eval (_type_ pair) process)
)
(:states
camera-tracker-process
@@ -142,18 +127,14 @@
;; a touch tracker waits to be touched, then calls some callback function.
(deftype touch-tracker (process-drawable)
((root-override collide-shape-moving :offset 112)
(duration time-frame :offset-assert 176)
(target handle :offset-assert 184)
(event symbol :offset-assert 192)
(run-function (function object) :offset-assert 196)
(callback (function touch-tracker none) :offset-assert 200)
(event-mode basic :offset-assert 204)
((root collide-shape-moving :override)
(duration time-frame)
(target handle)
(event symbol)
(run-function (function object))
(callback (function touch-tracker none))
(event-mode basic)
)
:heap-base #x60
:method-count-assert 20
:size-assert #xd0
:flag-assert #x14006000d0
(:states
touch-tracker-idle
)
@@ -161,15 +142,11 @@
;; the classic pole
(deftype swingpole (process)
((root trsq :offset-assert 112)
(dir vector :inline :offset-assert 128)
(range meters :offset-assert 144)
(edge-length meters :offset-assert 148)
((root trsq)
(dir vector :inline)
(range meters)
(edge-length meters)
)
:heap-base #x30
:method-count-assert 14
:size-assert #x98
:flag-assert #xe00300098
(:states
swingpole-active
swingpole-stance
@@ -178,42 +155,35 @@
;; do you want to fish?
(deftype gui-query (structure)
((x-position int32 :offset-assert 0)
(y-position int32 :offset-assert 4)
(message string :offset-assert 8)
(decision symbol :offset-assert 12)
(only-allow-cancel symbol :offset-assert 16)
(no-msg string :offset-assert 20)
(message-space int32 :offset-assert 24)
((x-position int32)
(y-position int32)
(message string)
(decision symbol)
(only-allow-cancel symbol)
(no-msg string)
(message-space int32)
)
:pack-me
:method-count-assert 11
:size-assert #x1c
:flag-assert #xb0000001c
(:methods
(init! (_type_ string int int int symbol string) none 9)
(get-response (_type_) symbol 10)
(init! (_type_ string int int int symbol string) none)
(get-response (_type_) symbol)
)
)
;; control the camera from something else (an animation)
(deftype othercam (process)
((hand handle :offset-assert 112)
(old-global-mask process-mask :offset-assert 120)
(mask-to-clear process-mask :offset-assert 124)
(cam-joint-index int32 :offset-assert 128)
(old-pos vector :inline :offset-assert 144)
(old-mat-z vector :inline :offset-assert 160)
(had-valid-frame basic :offset-assert 176)
(border-value basic :offset-assert 180)
(die? symbol :offset-assert 184)
(survive-anim-end? symbol :offset-assert 188)
(spooling? symbol :offset-assert 192)
((hand handle)
(old-global-mask process-mask)
(mask-to-clear process-mask)
(cam-joint-index int32)
(old-pos vector :inline)
(old-mat-z vector :inline)
(had-valid-frame basic)
(border-value basic)
(die? symbol)
(survive-anim-end? symbol)
(spooling? symbol)
)
:heap-base #x60
:method-count-assert 14
:size-assert #xc4
:flag-assert #xe006000c4
(:states
othercam-running
)
@@ -223,10 +193,7 @@
;; don't draw it! I guess used to disable things during development.
(deftype process-hidden (process)
()
:method-count-assert 15
:size-assert #x70
:flag-assert #xf00000070
(:methods
(die () _type_ :state 14)
(:state-methods
die
)
)
+44 -62
View File
@@ -138,7 +138,7 @@
)
)
(defmethod init-from-entity! swingpole ((this swingpole) (arg0 entity-actor))
(defmethod init-from-entity! ((this swingpole) (arg0 entity-actor))
"Copy defaults from the entity."
(stack-size-set! (-> this main-thread) 128)
(logior! (-> this mask) (process-mask actor-pause))
@@ -160,7 +160,7 @@
:code nothing
)
(defmethod init-from-entity! process-hidden ((this process-hidden) (arg0 entity-actor))
(defmethod init-from-entity! ((this process-hidden) (arg0 entity-actor))
"Copy defaults from the entity."
(process-entity-status! this (entity-perm-status dead) #t)
(go (method-of-object this die))
@@ -169,17 +169,11 @@
(deftype target-start (process-hidden)
()
:method-count-assert 15
:size-assert #x70
:flag-assert #xf00000070
)
(deftype camera-start (process-hidden)
()
:method-count-assert 15
:size-assert #x70
:flag-assert #xf00000070
)
@@ -542,7 +536,7 @@
(none)
)
(defmethod deactivate part-tracker ((this part-tracker))
(defmethod deactivate ((this part-tracker))
(if (nonzero? (-> this part))
(kill-and-free-particles (-> this part))
)
@@ -900,7 +894,7 @@
)
;; ERROR: Failed load: (set! v1-42 (l.wu (+ a0-22 -4))) at op 159
(defmethod eval camera-tracker ((this camera-tracker) (arg0 pair))
(defmethod eval ((this camera-tracker) (arg0 pair))
(with-pp
(let ((gp-0 (the-as object #f)))
(cond
@@ -1180,14 +1174,10 @@
)
(deftype med-res-level (process-drawable)
((level symbol :offset-assert 176)
(part-mode basic :offset-assert 180)
(index int32 :offset-assert 184)
((level symbol)
(part-mode basic)
(index int32)
)
:heap-base #x50
:method-count-assert 20
:size-assert #xbc
:flag-assert #x14005000bc
(:states
med-res-level-idle
)
@@ -1253,7 +1243,7 @@
(define *lev-string* (new 'global 'string 64 (the-as string #f)))
(defmethod init-from-entity! med-res-level ((this med-res-level) (arg0 entity-actor))
(defmethod init-from-entity! ((this med-res-level) (arg0 entity-actor))
(local-vars (sv-16 res-tag))
(stack-size-set! (-> this main-thread) 128)
"#f"
@@ -1317,7 +1307,7 @@
(none)
)
(defmethod is-visible? part-spawner ((this part-spawner))
(defmethod is-visible? ((this part-spawner))
(sphere<-vector+r! (-> this world-sphere) (-> this root trans) (-> this radius))
(sphere-in-view-frustum? (-> this world-sphere))
)
@@ -1356,7 +1346,7 @@
)
)
(defmethod init-from-entity! part-spawner ((this part-spawner) (arg0 entity-actor))
(defmethod init-from-entity! ((this part-spawner) (arg0 entity-actor))
(local-vars (sv-16 res-tag))
(stack-size-set! (-> this main-thread) 128)
(logior! (-> this mask) (process-mask ambient))
@@ -1418,18 +1408,14 @@
)
(deftype launcher (process-drawable)
((root-override collide-shape :offset 112)
(spring-height meters :offset-assert 176)
(camera state :offset-assert 180)
(active-distance float :offset-assert 184)
(seek-time time-frame :offset-assert 192)
(dest vector :inline :offset-assert 208)
(sound-id sound-id :offset-assert 224)
((root collide-shape :override)
(spring-height meters)
(camera state)
(active-distance float)
(seek-time time-frame)
(dest vector :inline)
(sound-id sound-id)
)
:heap-base #x80
:method-count-assert 20
:size-assert #xe4
:flag-assert #x14008000e4
(:states
launcher-active
launcher-deactivated
@@ -1865,15 +1851,14 @@
(go launcher-deactivated)
)
(('trans)
(move-to-point! (-> self root-override) (the-as vector (-> block param 0)))
(update-transforms! (-> self root-override))
(move-to-point! (-> self root) (the-as vector (-> block param 0)))
(update-transforms! (-> self root))
)
)
)
:trans (behavior ()
(when (and *target* (>= (-> self active-distance)
(vector-vector-distance (-> self root-override trans) (-> *target* control trans))
)
(when (and *target*
(>= (-> self active-distance) (vector-vector-distance (-> self root trans) (-> *target* control trans)))
)
(cond
((send-event *target* 'query 'powerup (pickup-type eco-blue))
@@ -1887,7 +1872,7 @@
)
)
)
(if (and (and *target* (>= 32768.0 (vector-vector-distance (-> self root-override trans) (-> *target* control trans))))
(if (and (and *target* (>= 32768.0 (vector-vector-distance (-> self root trans) (-> *target* control trans))))
(not (send-event *target* 'query 'powerup (pickup-type eco-blue)))
)
(level-hint-spawn
@@ -1914,8 +1899,8 @@
(go launcher-deactivated)
)
((= message 'trans)
(move-to-point! (-> self root-override) (the-as vector (-> block param 0)))
(update-transforms! (-> self root-override))
(move-to-point! (-> self root) (the-as vector (-> block param 0)))
(update-transforms! (-> self root))
)
)
)
@@ -1931,18 +1916,17 @@
)
)
:trans (behavior ()
(if (or (or (not *target*) (< (-> self active-distance)
(vector-vector-distance (-> self root-override trans) (-> *target* control trans))
)
(if (or (or (not *target*)
(< (-> self active-distance) (vector-vector-distance (-> self root trans) (-> *target* control trans)))
)
(not (send-event *target* 'query 'powerup (pickup-type eco-blue)))
)
(go launcher-idle)
)
(spawn (-> self part) (-> self root-override trans))
(spawn (-> self part) (-> self root trans))
(sound-play "launch-idle" :id (-> self sound-id))
(if (and (and *target* (>= (+ 2867.2 (-> self root-override root-prim prim-core world-sphere w))
(vector-vector-distance (-> self root-override trans) (-> *target* control trans))
(if (and (and *target* (>= (+ 2867.2 (-> self root root-prim prim-core world-sphere w))
(vector-vector-distance (-> self root trans) (-> *target* control trans))
)
)
(not (time-elapsed? (-> self state-time) (seconds 0.5)))
@@ -1960,7 +1944,7 @@
:code anim-loop
)
(defmethod init-from-entity! launcher ((this launcher) (arg0 entity-actor))
(defmethod init-from-entity! ((this launcher) (arg0 entity-actor))
(stack-size-set! (-> this main-thread) 128)
(let ((s4-0 (new 'process 'collide-shape this (collide-list-enum hit-by-player))))
(let ((s3-0 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0))))
@@ -1971,10 +1955,10 @@
)
(set! (-> s4-0 nav-radius) 13926.4)
(backup-collide-with-as s4-0)
(set! (-> this root-override) s4-0)
(set! (-> this root) s4-0)
)
(process-drawable-from-entity! this arg0)
(update-transforms! (-> this root-override))
(update-transforms! (-> this root))
(set! (-> this active-distance) 409600.0)
(set! (-> this spring-height) (res-lump-float arg0 'spring-height :default 163840.0))
(let ((s4-1 (res-lump-value arg0 'mode uint128)))
@@ -2016,7 +2000,7 @@
)
)
(set! (-> this sound-id) (new-sound-id))
(nav-mesh-connect this (-> this root-override) (the-as nav-control #f))
(nav-mesh-connect this (-> this root) (the-as nav-control #f))
(go launcher-idle)
(none)
)
@@ -2032,12 +2016,12 @@
)
(set! (-> s2-0 nav-radius) (* 0.75 (-> s2-0 root-prim local-sphere w)))
(backup-collide-with-as s2-0)
(set! (-> self root-override) s2-0)
(set! (-> self root) s2-0)
)
(set! (-> self root-override trans quad) (-> arg0 quad))
(set-vector! (-> self root-override scale) 1.0 1.0 1.0 1.0)
(set-vector! (-> self root-override quat) 0.0 0.0 0.0 1.0)
(update-transforms! (-> self root-override))
(set! (-> self root trans quad) (-> arg0 quad))
(set-vector! (-> self root scale) 1.0 1.0 1.0 1.0)
(set-vector! (-> self root quat) 0.0 0.0 0.0 1.0)
(update-transforms! (-> self root))
(set! (-> self spring-height) arg1)
(set! (-> self active-distance) arg3)
(let ((v1-23 (-> self entity extra level name)))
@@ -2191,9 +2175,7 @@
)
)
(if a0-6
(set! (-> self root-override trans quad)
(-> (the-as collide-shape a0-6) root-prim prim-core world-sphere quad)
)
(set! (-> self root trans quad) (-> (the-as collide-shape a0-6) root-prim prim-core world-sphere quad))
)
)
)
@@ -2201,15 +2183,15 @@
(if (-> self callback)
((-> self callback) self)
)
(update-transforms! (-> self root-override))
(update-transforms! (-> self root))
(let ((a1-3 (new 'stack-no-clear 'touching-shapes-entry)))
(set! (-> a1-3 cshape1) (the-as collide-shape 2))
(set! (-> a1-3 cshape2) (the-as collide-shape *touching-list*))
(find-overlapping-shapes (-> self root-override) (the-as overlaps-others-params a1-3))
(find-overlapping-shapes (-> self root) (the-as overlaps-others-params a1-3))
)
(suspend)
)
(clear-collide-with-as (-> self root-override))
(clear-collide-with-as (-> self root))
(suspend)
0
)
@@ -2232,9 +2214,9 @@
(set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w)))
(backup-collide-with-as s4-0)
(set! (-> s4-0 event-self) 'touched)
(set! (-> self root-override) s4-0)
(set! (-> self root) s4-0)
)
(set! (-> self root-override trans quad) (-> arg0 quad))
(set! (-> self root trans quad) (-> arg0 quad))
(set! (-> self duration) arg2)
(set! (-> self target) (the-as handle #f))
(set! (-> self event) #f)
+135 -140
View File
@@ -51,152 +51,147 @@
;; DECOMP BEGINS
(deftype nav-enemy-info (basic)
((idle-anim int32 :offset-assert 4)
(walk-anim int32 :offset-assert 8)
(turn-anim int32 :offset-assert 12)
(notice-anim int32 :offset-assert 16)
(run-anim int32 :offset-assert 20)
(jump-anim int32 :offset-assert 24)
(jump-land-anim int32 :offset-assert 28)
(victory-anim int32 :offset-assert 32)
(taunt-anim int32 :offset-assert 36)
(die-anim int32 :offset-assert 40)
(neck-joint int32 :offset-assert 44)
(player-look-at-joint int32 :offset-assert 48)
(run-travel-speed meters :offset-assert 52)
(run-rotate-speed degrees :offset-assert 56)
(run-acceleration meters :offset-assert 60)
(run-turn-time seconds :offset-assert 64)
(walk-travel-speed meters :offset-assert 72)
(walk-rotate-speed degrees :offset-assert 76)
(walk-acceleration meters :offset-assert 80)
(walk-turn-time seconds :offset-assert 88)
(attack-shove-back meters :offset-assert 96)
(attack-shove-up meters :offset-assert 100)
(shadow-size meters :offset-assert 104)
(notice-nav-radius meters :offset-assert 108)
(nav-nearest-y-threshold meters :offset-assert 112)
(notice-distance meters :offset-assert 116)
(proximity-notice-distance meters :offset-assert 120)
(stop-chase-distance meters :offset-assert 124)
(frustration-distance meters :offset-assert 128)
(frustration-time time-frame :offset-assert 136)
(die-anim-hold-frame float :offset-assert 144)
(jump-anim-start-frame float :offset-assert 148)
(jump-land-anim-end-frame float :offset-assert 152)
(jump-height-min meters :offset-assert 156)
(jump-height-factor float :offset-assert 160)
(jump-start-anim-speed float :offset-assert 164)
(shadow-max-y meters :offset-assert 168)
(shadow-min-y meters :offset-assert 172)
(shadow-locus-dist meters :offset-assert 176)
(use-align symbol :offset-assert 180)
(draw-shadow symbol :offset-assert 184)
(move-to-ground symbol :offset-assert 188)
(hover-if-no-ground symbol :offset-assert 192)
(use-momentum symbol :offset-assert 196)
(use-flee symbol :offset-assert 200)
(use-proximity-notice symbol :offset-assert 204)
(use-jump-blocked symbol :offset-assert 208)
(use-jump-patrol symbol :offset-assert 212)
(gnd-collide-with collide-kind :offset-assert 216)
(debug-draw-neck symbol :offset-assert 224)
(debug-draw-jump symbol :offset-assert 228)
((idle-anim int32)
(walk-anim int32)
(turn-anim int32)
(notice-anim int32)
(run-anim int32)
(jump-anim int32)
(jump-land-anim int32)
(victory-anim int32)
(taunt-anim int32)
(die-anim int32)
(neck-joint int32)
(player-look-at-joint int32)
(run-travel-speed meters)
(run-rotate-speed degrees)
(run-acceleration meters)
(run-turn-time seconds)
(walk-travel-speed meters)
(walk-rotate-speed degrees)
(walk-acceleration meters)
(walk-turn-time seconds)
(attack-shove-back meters)
(attack-shove-up meters)
(shadow-size meters)
(notice-nav-radius meters)
(nav-nearest-y-threshold meters)
(notice-distance meters)
(proximity-notice-distance meters)
(stop-chase-distance meters)
(frustration-distance meters)
(frustration-time time-frame)
(die-anim-hold-frame float)
(jump-anim-start-frame float)
(jump-land-anim-end-frame float)
(jump-height-min meters)
(jump-height-factor float)
(jump-start-anim-speed float)
(shadow-max-y meters)
(shadow-min-y meters)
(shadow-locus-dist meters)
(use-align symbol)
(draw-shadow symbol)
(move-to-ground symbol)
(hover-if-no-ground symbol)
(use-momentum symbol)
(use-flee symbol)
(use-proximity-notice symbol)
(use-jump-blocked symbol)
(use-jump-patrol symbol)
(gnd-collide-with collide-kind)
(debug-draw-neck symbol)
(debug-draw-jump symbol)
)
:method-count-assert 9
:size-assert #xe8
:flag-assert #x9000000e8
)
(deftype nav-enemy (process-drawable)
((collide-info collide-shape-moving :offset 112)
(enemy-info fact-info-enemy :offset 144)
(hit-from-dir vector :inline :offset-assert 176)
(event-param-point vector :inline :offset-assert 192)
(frustration-point vector :inline :offset-assert 208)
(jump-dest vector :inline :offset-assert 224)
(jump-trajectory trajectory :inline :offset-assert 240)
(jump-time time-frame :offset-assert 280)
(nav-info nav-enemy-info :offset-assert 288)
(target-speed float :offset-assert 292)
(momentum-speed float :offset-assert 296)
(acceleration float :offset-assert 300)
(rotate-speed float :offset-assert 304)
(turn-time time-frame :offset-assert 312)
(frustration-time time-frame :offset-assert 320)
(speed-scale float :offset-assert 328)
(neck joint-mod :offset-assert 332)
(reaction-time time-frame :offset-assert 336)
(notice-time time-frame :offset-assert 344)
(state-timeout time-frame :offset-assert 352)
(free-time time-frame :offset-assert 360)
(touch-time time-frame :offset-assert 368)
(nav-enemy-flags nav-enemy-flags :offset-assert 376)
(incomming-attack-id handle :offset-assert 384)
(jump-return-state (state process) :offset-assert 392)
(rand-gen random-generator :offset-assert 396)
((collide-info collide-shape-moving :overlay-at root)
(enemy-info fact-info-enemy :overlay-at fact)
(hit-from-dir vector :inline)
(event-param-point vector :inline)
(frustration-point vector :inline)
(jump-dest vector :inline)
(jump-trajectory trajectory :inline)
(jump-time time-frame)
(nav-info nav-enemy-info)
(target-speed float)
(momentum-speed float)
(acceleration float)
(rotate-speed float)
(turn-time time-frame)
(frustration-time time-frame)
(speed-scale float)
(neck joint-mod)
(reaction-time time-frame)
(notice-time time-frame)
(state-timeout time-frame)
(free-time time-frame)
(touch-time time-frame)
(nav-enemy-flags nav-enemy-flags)
(incomming-attack-id handle)
(jump-return-state (state process))
(rand-gen random-generator)
)
:heap-base #x120
:method-count-assert 76
:size-assert #x190
:flag-assert #x4c01200190
(:state-methods
nav-enemy-attack
nav-enemy-chase
nav-enemy-flee
nav-enemy-die
nav-enemy-fuel-cell
nav-enemy-give-up
nav-enemy-jump
nav-enemy-jump-land
nav-enemy-idle
nav-enemy-notice
nav-enemy-patrol
nav-enemy-stare
nav-enemy-stop-chase
nav-enemy-victory
)
(:methods
(nav-enemy-attack () _type_ :state 20)
(nav-enemy-chase () _type_ :state 21)
(nav-enemy-flee () _type_ :state 22)
(nav-enemy-die () _type_ :state 23)
(nav-enemy-fuel-cell () _type_ :state 24)
(nav-enemy-give-up () _type_ :state 25)
(nav-enemy-jump () _type_ :state 26)
(nav-enemy-jump-land () _type_ :state 27)
(nav-enemy-idle () _type_ :state 28)
(nav-enemy-notice () _type_ :state 29)
(nav-enemy-patrol () _type_ :state 30)
(nav-enemy-stare () _type_ :state 31)
(nav-enemy-stop-chase () _type_ :state 32)
(nav-enemy-victory () _type_ :state 33)
(nav-enemy-method-34 (_type_) none 34)
(nav-enemy-wait-for-cue () _type_ :state 35)
(nav-enemy-jump-to-point () _type_ :state 36)
(nav-enemy-method-37 (_type_) none 37)
(nav-enemy-method-38 (_type_) none 38)
(common-post (_type_) none 39)
(nav-enemy-method-40 (_type_) none 40)
(nav-enemy-method-41 (_type_) none 41)
(new-patrol-point! (_type_) int 42)
(attack-handler (_type_ process event-message-block) object 43)
(touch-handler (_type_ process event-message-block) object 44)
(init-defaults! (_type_ nav-enemy-info) none 45)
(target-in-range? (_type_ float) basic 46)
(initialize-collision (_type_) none 47)
(nav-enemy-method-48 (_type_) none 48)
(init-jm! (_type_ nav-enemy-info) float 49)
(nav-enemy-method-50 (_type_ vector) symbol 50)
(nav-enemy-method-51 (_type_) none 51)
(nav-enemy-method-52 (_type_ vector) symbol 52)
(nav-enemy-method-53 (_type_) symbol 53)
(nav-enemy-method-54 (_type_ vector) symbol 54)
(nav-enemy-method-55 (_type_) symbol 55)
(set-jump-height-factor! (_type_ int) none 56)
(nav-enemy-method-57 (_type_) none 57)
(nav-enemy-method-58 (_type_) none 58)
(nav-enemy-method-59 (_type_) none 59)
(nav-enemy-method-60 (_type_ symbol) symbol 60)
(snow-bunny-attack () _type_ :state 61)
(snow-bunny-chase-hop () _type_ :state 62)
(snow-bunny-defend () _type_ :state 63)
(nav-enemy-method-64 () _type_ :state 64)
(snow-bunny-lunge () _type_ :state 65)
(snow-bunny-nav-resume () _type_ :state 66)
(snow-bunny-patrol-hop () _type_ :state 67)
(snow-bunny-patrol-idle () _type_ :state 68)
(nav-enemy-method-69 () _type_ :state 69)
(snow-bunny-retreat-hop () _type_ :state 70)
(snow-bunny-tune-spheres () _type_ :state 71)
(nav-enemy-touch-handler (_type_ process event-message-block) object 72)
(nav-enemy-attack-handler (_type_ process event-message-block) object 73)
(nav-enemy-jump-blocked () _type_ :state 74)
(nav-enemy-method-75 () _type_ :state 75)
(nav-enemy-method-34 (_type_) none)
(nav-enemy-wait-for-cue () _type_ :state)
(nav-enemy-jump-to-point () _type_ :state)
(nav-enemy-method-37 (_type_) none)
(nav-enemy-method-38 (_type_) none)
(common-post (_type_) none)
(nav-enemy-method-40 (_type_) none)
(nav-enemy-method-41 (_type_) none)
(new-patrol-point! (_type_) int)
(attack-handler (_type_ process event-message-block) object)
(touch-handler (_type_ process event-message-block) object)
(init-defaults! (_type_ nav-enemy-info) none)
(target-in-range? (_type_ float) basic)
(initialize-collision (_type_) none)
(nav-enemy-method-48 (_type_) none)
(init-jm! (_type_ nav-enemy-info) float)
(nav-enemy-method-50 (_type_ vector) symbol)
(nav-enemy-method-51 (_type_) none)
(nav-enemy-method-52 (_type_ vector) symbol)
(nav-enemy-method-53 (_type_) symbol)
(nav-enemy-method-54 (_type_ vector) symbol)
(nav-enemy-method-55 (_type_) symbol)
(set-jump-height-factor! (_type_ int) none)
(nav-enemy-method-57 (_type_) none)
(nav-enemy-method-58 (_type_) none)
(nav-enemy-method-59 (_type_) none)
(nav-enemy-method-60 (_type_ symbol) symbol)
(snow-bunny-attack () _type_ :state)
(snow-bunny-chase-hop () _type_ :state)
(snow-bunny-defend () _type_ :state)
(nav-enemy-method-64 () _type_ :state)
(snow-bunny-lunge () _type_ :state)
(snow-bunny-nav-resume () _type_ :state)
(snow-bunny-patrol-hop () _type_ :state)
(snow-bunny-patrol-idle () _type_ :state)
(nav-enemy-method-69 () _type_ :state)
(snow-bunny-retreat-hop () _type_ :state)
(snow-bunny-tune-spheres () _type_ :state)
(nav-enemy-touch-handler (_type_ process event-message-block) object)
(nav-enemy-attack-handler (_type_ process event-message-block) object)
(nav-enemy-jump-blocked () _type_ :state)
(nav-enemy-method-75 () _type_ :state)
)
)
+21 -21
View File
@@ -37,13 +37,13 @@
)
)
(defmethod eval-position! trajectory ((this trajectory) (time float) (result vector))
(defmethod eval-position! ((this trajectory) (time float) (result vector))
(vector+float*! result (-> this initial-position) (-> this initial-velocity) time)
(+! (-> result y) (* 0.5 time time (-> this gravity)))
result
)
(defmethod relocate nav-enemy ((this nav-enemy) (arg0 int))
(defmethod relocate ((this nav-enemy) (arg0 int))
(if (nonzero? (-> this neck))
(set! (-> this neck) (the-as joint-mod (+ (the-as int (-> this neck)) arg0)))
)
@@ -53,7 +53,7 @@
(call-parent-method this arg0)
)
(defmethod new-patrol-point! nav-enemy ((this nav-enemy))
(defmethod new-patrol-point! ((this nav-enemy))
(local-vars (v1-11 symbol))
(if (<= (-> this path curve num-cverts) 0)
(go process-drawable-art-error "no path")
@@ -73,7 +73,7 @@
0
)
(defmethod common-post nav-enemy ((this nav-enemy))
(defmethod common-post ((this nav-enemy))
(when (and (logtest? (-> this nav-enemy-flags) (nav-enemy-flags navenmf8))
(or (not *target*)
(and (not (logtest? (-> *target* state-flags)
@@ -113,7 +113,7 @@
(none)
)
(defmethod touch-handler nav-enemy ((this nav-enemy) (arg0 process) (arg1 event-message-block))
(defmethod touch-handler ((this nav-enemy) (arg0 process) (arg1 event-message-block))
(if (and (logtest? (-> this nav-enemy-flags) (nav-enemy-flags navenmf6))
((method-of-type touching-shapes-entry prims-touching?)
(the-as touching-shapes-entry (-> arg1 param 0))
@@ -125,7 +125,7 @@
)
)
(defmethod nav-enemy-touch-handler nav-enemy ((this nav-enemy) (arg0 process) (arg1 event-message-block))
(defmethod nav-enemy-touch-handler ((this nav-enemy) (arg0 process) (arg1 event-message-block))
(if (and (logtest? (-> this nav-enemy-flags) (nav-enemy-flags navenmf6))
((method-of-type touching-shapes-entry prims-touching?)
(the-as touching-shapes-entry (-> arg1 param 0))
@@ -137,14 +137,14 @@
)
)
(defmethod nav-enemy-attack-handler nav-enemy ((this nav-enemy) (arg0 process) (arg1 event-message-block))
(defmethod nav-enemy-attack-handler ((this nav-enemy) (arg0 process) (arg1 event-message-block))
(send-event arg0 'get-attack-count 1)
(logclear! (-> this mask) (process-mask actor-pause attackable))
(go (method-of-object this nav-enemy-die))
'die
)
(defmethod attack-handler nav-enemy ((this nav-enemy) (arg0 process) (arg1 event-message-block))
(defmethod attack-handler ((this nav-enemy) (arg0 process) (arg1 event-message-block))
(cond
((logtest? (-> this nav-enemy-flags) (nav-enemy-flags navenmf5))
(send-event arg0 'get-attack-count 1)
@@ -262,13 +262,13 @@ nav-enemy-default-event-handler
(none)
)
(defmethod nav-enemy-method-40 nav-enemy ((this nav-enemy))
(defmethod nav-enemy-method-40 ((this nav-enemy))
(nav-control-method-11 (-> this nav) (-> this nav target-pos))
0
(none)
)
(defmethod nav-enemy-method-41 nav-enemy ((this nav-enemy))
(defmethod nav-enemy-method-41 ((this nav-enemy))
(cond
((-> this nav-info use-align)
(align-vel-and-quat-only!
@@ -318,7 +318,7 @@ nav-enemy-default-event-handler
(none)
)
(defmethod nav-enemy-method-37 nav-enemy ((this nav-enemy))
(defmethod nav-enemy-method-37 ((this nav-enemy))
(when (logtest? (-> this nav-enemy-flags) (nav-enemy-flags enable-travel))
(if (or (logtest? (-> this nav-enemy-flags) (nav-enemy-flags navenmf7))
(logtest? (nav-control-flags navcf19) (-> this nav flags))
@@ -341,7 +341,7 @@ nav-enemy-default-event-handler
(none)
)
(defmethod nav-enemy-method-38 nav-enemy ((this nav-enemy))
(defmethod nav-enemy-method-38 ((this nav-enemy))
(if (-> this nav-info move-to-ground)
(integrate-for-enemy-with-move-to-ground!
(-> this collide-info)
@@ -499,7 +499,7 @@ nav-enemy-default-event-handler
)
)
(defmethod target-in-range? nav-enemy ((this nav-enemy) (arg0 float))
(defmethod target-in-range? ((this nav-enemy) (arg0 float))
(and *target*
(not (logtest? (-> *target* state-flags)
(state-flags being-attacked invulnerable timed-invulnerable invuln-powerup do-not-notice dying)
@@ -726,7 +726,7 @@ nav-enemy-default-event-handler
(none)
)
(defmethod run-logic? nav-enemy ((this nav-enemy))
(defmethod run-logic? ((this nav-enemy))
(or (not (logtest? (-> this mask) (process-mask actor-pause)))
(or (and (nonzero? (-> this draw))
(and (>= (+ (-> *ACTOR-bank* pause-dist) (-> this collide-info pause-adjust-distance))
@@ -1635,7 +1635,7 @@ nav-enemy-default-event-handler
)
)
(defmethod init-defaults! nav-enemy ((this nav-enemy) (arg0 nav-enemy-info))
(defmethod init-defaults! ((this nav-enemy) (arg0 nav-enemy-info))
(set! (-> this rand-gen) (new 'process 'random-generator))
(set! (-> this rand-gen seed) (the-as uint #x666edd1e))
(set! (-> this mask) (the-as process-mask (logior (process-mask enemy) (-> this mask))))
@@ -1671,7 +1671,7 @@ nav-enemy-default-event-handler
(none)
)
(defmethod init-jm! nav-enemy ((this nav-enemy) (arg0 nav-enemy-info))
(defmethod init-jm! ((this nav-enemy) (arg0 nav-enemy-info))
(set! (-> this nav-info) arg0)
(set! (-> this rotate-speed) (-> this nav-info walk-rotate-speed))
(set! (-> this turn-time) (-> this nav-info walk-turn-time))
@@ -1707,23 +1707,23 @@ nav-enemy-default-event-handler
(none)
)
(defmethod initialize-collision nav-enemy ((this nav-enemy))
(defmethod initialize-collision ((this nav-enemy))
0
(none)
)
(defmethod nav-enemy-method-48 nav-enemy ((this nav-enemy))
(defmethod nav-enemy-method-48 ((this nav-enemy))
0
(none)
)
(defmethod nav-enemy-method-59 nav-enemy ((this nav-enemy))
(defmethod nav-enemy-method-59 ((this nav-enemy))
(go (method-of-object this nav-enemy-idle))
0
(none)
)
(defmethod init-from-entity! nav-enemy ((this nav-enemy) (arg0 entity-actor))
(defmethod init-from-entity! ((this nav-enemy) (arg0 entity-actor))
(initialize-collision this)
(process-drawable-from-entity! this arg0)
(nav-enemy-method-48 this)
@@ -1732,7 +1732,7 @@ nav-enemy-default-event-handler
(none)
)
(defmethod nav-enemy-method-50 nav-enemy ((this nav-enemy) (arg0 vector))
(defmethod nav-enemy-method-50 ((this nav-enemy) (arg0 vector))
(let ((s4-0 (new 'stack-no-clear 'vector)))
(set! (-> s4-0 quad) (-> this collide-info trans quad))
(set! (-> this collide-info trans quad) (-> arg0 quad))
+25 -32
View File
@@ -8,23 +8,19 @@
;; DECOMP BEGINS
(deftype orb-cache-top (baseplat)
((active-distance float :offset-assert 228)
(inactive-distance float :offset-assert 232)
(money-list handle 60 :offset-assert 240)
(money-pos-list float 60 :offset-assert 720)
(money-pos-actual float 60 :offset-assert 960)
(platform-pos float :offset-assert 1200)
(root-pos float :offset-assert 1204)
(money int32 :offset-assert 1208)
(activated symbol :offset-assert 1212)
((active-distance float)
(inactive-distance float)
(money-list handle 60)
(money-pos-list float 60)
(money-pos-actual float 60)
(platform-pos float)
(root-pos float)
(money int32)
(activated symbol)
)
:heap-base #x450
:method-count-assert 29
:size-assert #x4c0
:flag-assert #x1d045004c0
(:methods
(pos-logic (_type_ symbol) symbol 27)
(calculate-pos (_type_ symbol) none 28)
(pos-logic (_type_ symbol) symbol)
(calculate-pos (_type_ symbol) none)
)
(:states
(orb-cache-top-activate symbol)
@@ -56,7 +52,7 @@
)
)
:trans (behavior ()
(if (and (and *target* (>= 20480.0 (vector-vector-distance (-> self root-override trans) (-> *target* control trans))))
(if (and (and *target* (>= 20480.0 (vector-vector-distance (-> self root trans) (-> *target* control trans))))
(not (send-event *target* 'query 'powerup (pickup-type eco-blue)))
)
(level-hint-spawn
@@ -86,7 +82,7 @@
)
)
(defmethod baseplat-method-22 orb-cache-top ((this orb-cache-top))
(defmethod baseplat-method-22 ((this orb-cache-top))
(if (< 4096.0 (- (-> this basetrans y) (-> this root-pos)))
(activate! (-> this smush) -1.0 60 150 1.0 1.0)
(activate! (-> this smush) -0.5 60 150 1.0 1.0)
@@ -97,7 +93,7 @@
(none)
)
(defmethod calculate-pos orb-cache-top ((this orb-cache-top) (arg0 symbol))
(defmethod calculate-pos ((this orb-cache-top) (arg0 symbol))
(let ((f0-0 0.0))
(when arg0
(set! f0-0 (+ 10240.0 (* 6144.0 (the float (+ (-> this money) -1)))))
@@ -117,7 +113,7 @@
(none)
)
(defmethod pos-logic orb-cache-top ((this orb-cache-top) (arg0 symbol))
(defmethod pos-logic ((this orb-cache-top) (arg0 symbol))
(dotimes (s4-0 (-> this money))
(when (not (handle->process (-> this money-list s4-0)))
(dotimes (v1-6 (-> this money))
@@ -147,7 +143,7 @@
(set! s3-0 #t)
)
(when (and (< f30-0 15155.2)
(and *target* (>= 16384.0 (vector-vector-distance (-> this root-override trans) (-> *target* control trans))))
(and *target* (>= 16384.0 (vector-vector-distance (-> this root trans) (-> *target* control trans))))
(< (-> (target-pos 0) y) (-> this basetrans y))
)
(set! f30-0 (if (< 14131.2 f28-0)
@@ -212,18 +208,16 @@
)
(loop
(calculate-pos self #t)
(while (not (or (not *target*) (< (-> self inactive-distance)
(vector-vector-xz-distance (-> self root-override trans) (-> *target* control trans))
)
(while (not (or (not *target*)
(< (-> self inactive-distance) (vector-vector-xz-distance (-> self root trans) (-> *target* control trans)))
)
)
(pos-logic self #t)
(suspend)
)
(calculate-pos self #f)
(while (and (not (and (and *target* (>= (-> self active-distance)
(vector-vector-xz-distance (-> self root-override trans) (-> *target* control trans))
)
(while (and (not (and (and *target*
(>= (-> self active-distance) (vector-vector-xz-distance (-> self root trans) (-> *target* control trans)))
)
(let ((a1-11 (new 'stack-no-clear 'event-message-block)))
(set! (-> a1-11 from) self)
@@ -239,9 +233,8 @@
)
(suspend)
)
(if (not (and (and *target* (>= (-> self active-distance)
(vector-vector-xz-distance (-> self root-override trans) (-> *target* control trans))
)
(if (not (and (and *target*
(>= (-> self active-distance) (vector-vector-xz-distance (-> self root trans) (-> *target* control trans)))
)
(let ((a1-14 (new 'stack-no-clear 'event-message-block)))
(set! (-> a1-14 from) self)
@@ -275,7 +268,7 @@
:post plat-post
)
(defmethod init-from-entity! orb-cache-top ((this orb-cache-top) (arg0 entity-actor))
(defmethod init-from-entity! ((this orb-cache-top) (arg0 entity-actor))
(let ((a0-1 (-> this entity)))
(if (when a0-1
(let ((a0-2 (-> a0-1 extra perm task)))
@@ -305,13 +298,13 @@
)
(set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w)))
(backup-collide-with-as s4-0)
(set! (-> this root-override) s4-0)
(set! (-> this root) s4-0)
)
(process-drawable-from-entity! this arg0)
(logclear! (-> this mask) (process-mask actor-pause))
(initialize-skeleton this *orb-cache-top-sg* '())
(logior! (-> this skel status) (janim-status inited))
(update-transforms! (-> this root-override))
(update-transforms! (-> this root))
(baseplat-method-21 this)
(set! (-> this money) (res-lump-value (-> this entity) 'orb-cache-count int :default (the-as uint128 20)))
(set! (-> this active-distance) 61440.0)
+48 -52
View File
@@ -8,35 +8,33 @@
;; DECOMP BEGINS
(deftype plat-button (process-drawable)
((root-override collide-shape-moving :offset 112)
(go-back-if-lost-player? symbol :offset-assert 176)
(grab-player? symbol :offset-assert 180)
(should-grab-player? symbol :offset-assert 184)
(path-pos float :offset-assert 188)
(bidirectional? symbol :offset-assert 192)
(allow-auto-kill symbol :offset-assert 196)
(sound-id sound-id :offset-assert 200)
(trans-off vector :inline :offset-assert 208)
(spawn-pos vector :inline :offset-assert 224)
((root collide-shape-moving :override)
(go-back-if-lost-player? symbol)
(grab-player? symbol)
(should-grab-player? symbol)
(path-pos float)
(bidirectional? symbol)
(allow-auto-kill symbol)
(sound-id sound-id)
(trans-off vector :inline)
(spawn-pos vector :inline)
)
:heap-base #x80
:method-count-assert 33
:size-assert #xf0
:flag-assert #x21008000f0
(:state-methods
plat-button-at-end
plat-button-idle
plat-button-pressed
plat-button-move-downward
plat-button-move-upward
plat-button-teleport-to-other-end
)
(:methods
(plat-button-at-end () _type_ :state 20)
(plat-button-idle () _type_ :state 21)
(plat-button-pressed () _type_ :state 22)
(plat-button-move-downward () _type_ :state 23)
(plat-button-move-upward () _type_ :state 24)
(plat-button-teleport-to-other-end () _type_ :state 25)
(can-activate? (_type_) symbol 26)
(plat-button-method-27 (_type_) none 27)
(plat-button-method-28 (_type_) collide-shape-moving 28)
(can-target-move? (_type_) none 29)
(should-teleport? (_type_) symbol 30)
(plat-button-method-31 (_type_) none 31)
(plat-button-method-32 (_type_) none 32)
(can-activate? (_type_) symbol)
(plat-button-method-27 (_type_) none)
(plat-button-method-28 (_type_) collide-shape-moving)
(can-target-move? (_type_) none)
(should-teleport? (_type_) symbol)
(plat-button-method-31 (_type_) none)
(plat-button-method-32 (_type_) none)
)
)
@@ -46,11 +44,11 @@
:bounds (static-spherem 0 -1 0 6.6)
)
(defmethod should-teleport? plat-button ((this plat-button))
(defmethod should-teleport? ((this plat-button))
#f
)
(defmethod can-activate? plat-button ((this plat-button))
(defmethod can-activate? ((this plat-button))
(or (= (-> this path-pos) 0.0) (and (-> this bidirectional?) (= (-> this path-pos) 1.0)))
)
@@ -62,7 +60,7 @@
(when (can-activate? self)
(if (and ((method-of-type touching-shapes-entry prims-touching?)
(the-as touching-shapes-entry (-> block param 0))
(-> self root-override)
(-> self root)
(the-as uint 1)
)
(or (not (-> self should-grab-player?)) (set! (-> self grab-player?) (process-grab? *target*)))
@@ -117,7 +115,7 @@
(let ((gp-0 (new 'stack-no-clear 'vector)))
(eval-path-curve! (-> self path) gp-0 f0-0 'interp)
(vector+! gp-0 gp-0 (-> self trans-off))
(move-to-point! (-> self root-override) gp-0)
(move-to-point! (-> self root) gp-0)
)
)
(ja-post)
@@ -201,18 +199,18 @@
(let ((gp-0 (new 'stack-no-clear 'vector)))
(eval-path-curve! (-> self path) gp-0 f0-4 'interp)
(vector+! gp-0 gp-0 (-> self trans-off))
(move-to-point! (-> self root-override) gp-0)
(move-to-point! (-> self root) gp-0)
)
)
(sound-play "elev-loop" :id (-> self sound-id))
(let ((gp-1 (the-as sound-rpc-set-param (get-sound-buffer-entry))))
(set! (-> gp-1 command) (sound-command set-param))
(set! (-> gp-1 id) (-> self sound-id))
(let ((a1-6 (-> self root-override trans)))
(let ((a1-6 (-> self root trans)))
(let ((s5-0 self))
(when (= a1-6 #t)
(if (and s5-0 (type-type? (-> s5-0 type) process-drawable) (nonzero? (-> s5-0 root-override)))
(set! a1-6 (-> s5-0 root-override trans))
(if (and s5-0 (type-type? (-> s5-0 type) process-drawable) (nonzero? (-> s5-0 root)))
(set! a1-6 (-> s5-0 root trans))
(set! a1-6 (the-as vector #f))
)
)
@@ -271,18 +269,18 @@
(let ((gp-0 (new 'stack-no-clear 'vector)))
(eval-path-curve! (-> self path) gp-0 f0-4 'interp)
(vector+! gp-0 gp-0 (-> self trans-off))
(move-to-point! (-> self root-override) gp-0)
(move-to-point! (-> self root) gp-0)
)
)
(sound-play "elev-loop" :id (-> self sound-id))
(let ((gp-1 (the-as sound-rpc-set-param (get-sound-buffer-entry))))
(set! (-> gp-1 command) (sound-command set-param))
(set! (-> gp-1 id) (-> self sound-id))
(let ((a1-6 (-> self root-override trans)))
(let ((a1-6 (-> self root trans)))
(let ((s5-0 self))
(when (= a1-6 #t)
(if (and s5-0 (type-type? (-> s5-0 type) process-drawable) (nonzero? (-> s5-0 root-override)))
(set! a1-6 (-> s5-0 root-override trans))
(if (and s5-0 (type-type? (-> s5-0 type) process-drawable) (nonzero? (-> s5-0 root)))
(set! a1-6 (-> s5-0 root trans))
(set! a1-6 (the-as vector #f))
)
)
@@ -309,9 +307,7 @@
(sound-stop (-> self sound-id))
(sound-play "elev-land")
(loop
(if (or (not *target*)
(< 268435460.0 (vector-vector-xz-distance-squared (-> self root-override trans) (target-pos 0)))
)
(if (or (not *target*) (< 268435460.0 (vector-vector-xz-distance-squared (-> self root trans) (target-pos 0))))
(go-virtual plat-button-idle)
)
(suspend)
@@ -319,7 +315,7 @@
)
)
(defmethod plat-button-method-28 plat-button ((this plat-button))
(defmethod plat-button-method-28 ((this plat-button))
(let ((s5-0 (new 'process 'collide-shape-moving this (collide-list-enum hit-by-player))))
(set! (-> s5-0 dynam) (copy *standard-dynamics* 'process))
(set! (-> s5-0 reaction) default-collision-reaction)
@@ -355,17 +351,17 @@
)
(set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w)))
(backup-collide-with-as s5-0)
(set! (-> this root-override) s5-0)
(set! (-> this root) s5-0)
s5-0
)
)
(defmethod can-target-move? plat-button ((this plat-button))
(defmethod can-target-move? ((this plat-button))
0
(none)
)
(defmethod plat-button-method-27 plat-button ((this plat-button))
(defmethod plat-button-method-27 ((this plat-button))
(ja-channel-set! 1)
(cond
((can-activate? this)
@@ -392,23 +388,23 @@
)
)
(ja-post)
(update-transforms! (-> this root-override))
(update-transforms! (-> this root))
(none)
)
(defmethod plat-button-method-31 plat-button ((this plat-button))
(defmethod plat-button-method-31 ((this plat-button))
(initialize-skeleton this *plat-button-sg* '())
0
(none)
)
(defmethod plat-button-method-32 plat-button ((this plat-button))
(defmethod plat-button-method-32 ((this plat-button))
(go (method-of-object this plat-button-idle))
0
(none)
)
(defmethod init-from-entity! plat-button ((this plat-button) (arg0 entity-actor))
(defmethod init-from-entity! ((this plat-button) (arg0 entity-actor))
(set! (-> this go-back-if-lost-player?) #f)
(set! (-> this grab-player?) #f)
(set! (-> this should-grab-player?) #f)
@@ -431,11 +427,11 @@
(logclear! (-> this mask) (process-mask actor-pause))
(plat-button-method-31 this)
(logior! (-> this skel status) (janim-status inited))
(set! (-> this spawn-pos quad) (-> this root-override trans quad))
(set! (-> this spawn-pos quad) (-> this root trans quad))
(set! (-> this path) (new 'process 'curve-control this 'path -1000000000.0))
(logior! (-> this path flags) (path-control-flag display draw-line draw-point draw-text))
(set! (-> this path-pos) 0.0)
(let ((s5-1 (-> this root-override trans)))
(let ((s5-1 (-> this root trans)))
(eval-path-curve! (-> this path) s5-1 (-> this path-pos) 'interp)
(vector+! s5-1 s5-1 (-> this trans-off))
)
+20 -24
View File
@@ -8,20 +8,16 @@
;; DECOMP BEGINS
(deftype plat-eco (plat)
((notice-dist float :offset-assert 264)
(sync-offset-dest float :offset-assert 268)
(sync-offset-faux float :offset-assert 272)
(sync-linear-val float :offset-assert 276)
(target handle :offset-assert 280)
(unlit-look lod-set :inline :offset-assert 288)
(lit-look lod-set :inline :offset-assert 324)
((notice-dist float)
(sync-offset-dest float)
(sync-offset-faux float)
(sync-linear-val float)
(target handle)
(unlit-look lod-set :inline)
(lit-look lod-set :inline)
)
:heap-base #x100
:method-count-assert 33
:size-assert #x165
:flag-assert #x2101000165
(:methods
(notice-blue (handle) _type_ :replace :state 29)
(notice-blue (handle) _type_ :state :overlay-at wad)
)
)
@@ -59,7 +55,7 @@
)
:trans (behavior ()
(when (and (and *target*
(>= (-> self notice-dist) (vector-vector-distance (-> self root-override trans) (-> *target* control trans)))
(>= (-> self notice-dist) (vector-vector-distance (-> self root trans) (-> *target* control trans)))
)
(send-event *target* 'query 'powerup (pickup-type eco-blue))
)
@@ -67,14 +63,14 @@
(go-virtual plat-path-active (the-as plat #f))
)
(if (and *target*
(>= (-> self notice-dist) (vector-vector-distance (-> self root-override trans) (-> *target* control trans)))
(>= (-> self notice-dist) (vector-vector-distance (-> self root trans) (-> *target* control trans)))
)
(level-hint-spawn (text-id misty-eco-plat) "sksp0073" (the-as entity #f) *entity-pool* (game-task none))
)
)
:code (behavior ()
(ja-post)
(update-transforms! (-> self root-override))
(update-transforms! (-> self root))
(anim-loop)
)
:post ja-post
@@ -85,7 +81,7 @@
:event (behavior ((proc process) (argc int) (message symbol) (block event-message-block))
(case message
(('wake)
(sound-play "blue-eco-on" :position (the-as symbol (-> self root-override trans)))
(sound-play "blue-eco-on" :position (the-as symbol (-> self root trans)))
(go-virtual plat-path-active (the-as plat #f))
)
(('ridden 'edge-grabbed)
@@ -128,7 +124,7 @@
)
)
(when v1-6
(let* ((s5-0 (-> self root-override root-prim prim-core))
(let* ((s5-0 (-> self root root-prim prim-core))
(a1-3 (-> (the-as collide-shape v1-6) root-prim prim-core))
(f30-0 (vector-vector-distance (the-as vector s5-0) (the-as vector a1-3)))
)
@@ -214,7 +210,7 @@
)
)
(defmethod baseplat-method-24 plat-eco ((this plat-eco))
(defmethod baseplat-method-24 ((this plat-eco))
(let ((s5-0 (new 'process 'collide-shape-moving this (collide-list-enum hit-by-player))))
(set! (-> s5-0 dynam) (copy *standard-dynamics* 'process))
(set! (-> s5-0 reaction) default-collision-reaction)
@@ -233,21 +229,21 @@
)
(set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w)))
(backup-collide-with-as s5-0)
(set! (-> this root-override) s5-0)
(set! (-> this root) s5-0)
)
0
(none)
)
(defmethod get-unlit-skel plat-eco ((this plat-eco))
(defmethod get-unlit-skel ((this plat-eco))
*plat-eco-unlit-sg*
)
(defmethod get-lit-skel plat-eco ((this plat-eco))
(defmethod get-lit-skel ((this plat-eco))
*plat-eco-lit-sg*
)
(defmethod init-from-entity! plat-eco ((this plat-eco) (arg0 entity-actor))
(defmethod init-from-entity! ((this plat-eco) (arg0 entity-actor))
(logior! (-> this mask) (process-mask platform))
(set! (-> this notice-dist) (res-lump-float arg0 'notice-dist :default -1.0))
(set! (-> this link) (new 'process 'actor-link-info this))
@@ -261,7 +257,7 @@
(setup-lods! (-> this lit-look) s5-1 (-> this draw art-group) (-> this entity))
)
(logclear! (-> this mask) (process-mask actor-pause))
(update-transforms! (-> this root-override))
(update-transforms! (-> this root))
(set! (-> this part) (create-launch-control (-> *part-group-id-table* 107) this))
(set! (-> this path) (new 'process 'curve-control this 'path -1000000000.0))
(logior! (-> this path flags) (path-control-flag display draw-line draw-point draw-text))
@@ -274,7 +270,7 @@
(sync-now! (-> this sync) (-> this sync-linear-val))
(set! (-> this sync-offset-faux) (-> this sync offset))
(set! (-> this path-pos) (get-current-phase-with-mirror (-> this sync)))
(eval-path-curve! (-> this path) (-> this root-override trans) (-> this path-pos) 'interp)
(eval-path-curve! (-> this path) (-> this root trans) (-> this path-pos) 'interp)
(set! (-> this sound-id) (new-sound-id))
(baseplat-method-26 this)
(baseplat-method-21 this)
+20 -24
View File
@@ -55,21 +55,17 @@
)
(deftype plat (baseplat)
((path-pos float :offset-assert 228)
(sync sync-info-eased :inline :offset-assert 232)
(sound-id sound-id :offset-assert 260)
((path-pos float)
(sync sync-info-eased :inline)
(sound-id sound-id)
)
:heap-base #xa0
:method-count-assert 33
:size-assert #x108
:flag-assert #x2100a00108
(:methods
(get-lit-skel (_type_) skeleton-group 27)
(plat-method-28 () none 28)
(wad () _type_ :state 29)
(plat-startup (plat) _type_ :state 30)
(plat-idle () _type_ :state 31)
(plat-path-active (plat) _type_ :state 32)
(get-lit-skel (_type_) skeleton-group)
(plat-method-28 () none)
(wad () _type_ :state)
(plat-startup (plat) _type_ :state)
(plat-idle () _type_ :state)
(plat-path-active (plat) _type_ :state)
)
)
@@ -89,7 +85,7 @@
:bounds (static-spherem 0 -0.5 0 3.2)
)
(defmethod get-unlit-skel plat ((this plat))
(defmethod get-unlit-skel ((this plat))
(cond
((= (-> (if (-> this entity)
(-> this entity extra level)
@@ -126,7 +122,7 @@
)
)
(defmethod baseplat-method-24 plat ((this plat))
(defmethod baseplat-method-24 ((this plat))
(let ((s5-0 (new 'process 'collide-shape-moving this (collide-list-enum hit-by-player))))
(set! (-> s5-0 dynam) (copy *standard-dynamics* 'process))
(set! (-> s5-0 reaction) default-collision-reaction)
@@ -145,18 +141,18 @@
)
(set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w)))
(backup-collide-with-as s5-0)
(set! (-> this root-override) s5-0)
(set! (-> this root) s5-0)
)
0
(none)
)
(defmethod baseplat-method-26 plat ((this plat))
(defmethod baseplat-method-26 ((this plat))
0
(none)
)
(defmethod baseplat-method-25 plat ((this plat))
(defmethod baseplat-method-25 ((this plat))
(the-as sparticle-launch-group (when (!= (-> (if (-> this entity)
(-> this entity extra level)
(-> *level* level-default)
@@ -230,8 +226,8 @@
)
)
(eval-path-curve! (-> self path) (-> self basetrans) (-> self path-pos) 'interp)
(if (< (vector-vector-distance (-> self root-override trans) (ear-trans)) 81920.0)
(sound-play "eco-plat-hover" :id (-> self sound-id) :position (the-as symbol (-> self root-override trans)))
(if (< (vector-vector-distance (-> self root trans) (ear-trans)) 81920.0)
(sound-play "eco-plat-hover" :id (-> self sound-id) :position (the-as symbol (-> self root trans)))
)
(plat-trans)
)
@@ -239,13 +235,13 @@
:post plat-post
)
(defmethod init-from-entity! plat ((this plat) (arg0 entity-actor))
(defmethod init-from-entity! ((this plat) (arg0 entity-actor))
(logior! (-> this mask) (process-mask platform))
(baseplat-method-24 this)
(process-drawable-from-entity! this arg0)
(initialize-skeleton this (get-unlit-skel this) '())
(logior! (-> this skel status) (janim-status inited))
(update-transforms! (-> this root-override))
(update-transforms! (-> this root))
(baseplat-method-21 this)
(baseplat-method-25 this)
(load-params! (-> this sync) this (the-as uint 0) 0.0 0.15 0.15)
@@ -269,7 +265,7 @@
(get-current-phase-with-mirror (-> this sync))
)
)
(eval-path-curve! (-> this path) (-> this root-override trans) (-> this path-pos) 'interp)
(eval-path-curve! (-> this path) (-> this root trans) (-> this path-pos) 'interp)
(let ((a0-18 this))
(baseplat-method-26 a0-18)
(go (method-of-object this plat-startup) a0-18)
@@ -277,7 +273,7 @@
)
(else
(set! (-> this path-pos) 0.0)
(eval-path-curve! (-> this path) (-> this root-override trans) (-> this path-pos) 'interp)
(eval-path-curve! (-> this path) (-> this root trans) (-> this path-pos) 'interp)
(let ((a0-20 this))
(baseplat-method-26 a0-20)
(go (method-of-object this plat-startup) a0-20)
@@ -18,7 +18,7 @@
;; DECOMP BEGINS
(defmethod process-taskable-method-52 process-taskable ((this process-taskable))
(defmethod process-taskable-method-52 ((this process-taskable))
(let ((v1-1 (-> this draw shadow-ctrl)))
(when v1-1
(let ((a0-1 v1-1))
@@ -32,7 +32,7 @@
(none)
)
(defmethod init! gui-query ((this gui-query) (arg0 string) (arg1 int) (arg2 int) (arg3 int) (arg4 symbol) (arg5 string))
(defmethod init! ((this gui-query) (arg0 string) (arg1 int) (arg2 int) (arg3 int) (arg4 symbol) (arg5 string))
(set! (-> this x-position) arg1)
(set! (-> this y-position) arg2)
(set! (-> this message-space) arg3)
@@ -44,7 +44,7 @@
(none)
)
(defmethod get-response gui-query ((this gui-query))
(defmethod get-response ((this gui-query))
(kill-current-level-hint '() '(sidekick voicebox stinger) 'exit)
(level-hint-surpress!)
(hide-hud)
@@ -146,18 +146,15 @@
(-> this decision)
)
(defmethod relocate process-taskable ((this process-taskable) (arg0 int))
(defmethod relocate ((this process-taskable) (arg0 int))
(the-as process-taskable ((method-of-type process-drawable relocate) this arg0))
)
(defmethod process-taskable-method-46 process-taskable ((this process-taskable))
(defmethod process-taskable-method-46 ((this process-taskable))
(when (nonzero? (-> this sound-flava))
(let ((s5-1 (vector-!
(new 'stack-no-clear 'vector)
(target-pos 0)
(the-as vector (-> this root-override root-prim prim-core))
)
)
(let ((s5-1
(vector-! (new 'stack-no-clear 'vector) (target-pos 0) (the-as vector (-> this root root-prim prim-core)))
)
)
(set! (-> s5-1 y) (* 4.0 (-> s5-1 y)))
(cond
@@ -176,12 +173,9 @@
)
)
(when (-> this music)
(let ((s5-3 (vector-!
(new 'stack-no-clear 'vector)
(target-pos 0)
(the-as vector (-> this root-override root-prim prim-core))
)
)
(let ((s5-3
(vector-! (new 'stack-no-clear 'vector) (target-pos 0) (the-as vector (-> this root root-prim prim-core)))
)
)
(set! (-> s5-3 y) (* 4.0 (-> s5-3 y)))
(cond
@@ -202,18 +196,18 @@
(none)
)
(defmethod get-art-elem process-taskable ((this process-taskable))
(defmethod get-art-elem ((this process-taskable))
(the-as art-element (if (> (-> this skel active-channels) 0)
(-> this skel root-channel 0 frame-group)
)
)
)
(defmethod play-anim! process-taskable ((this process-taskable) (arg0 symbol))
(defmethod play-anim! ((this process-taskable) (arg0 symbol))
(the-as basic #f)
)
(defmethod process-taskable-method-33 process-taskable ((this process-taskable))
(defmethod process-taskable-method-33 ((this process-taskable))
(let ((s5-0 (play-anim! this #f)))
(if (type-type? (-> s5-0 type) spool-anim)
(spool-push *art-control* (-> (the-as spool-anim s5-0) name) 0 this -99.0)
@@ -223,7 +217,7 @@
(none)
)
(defmethod close-anim-file! process-taskable ((this process-taskable))
(defmethod close-anim-file! ((this process-taskable))
(let* ((gp-0 (play-anim! this #f))
(v1-2 (if (and (nonzero? gp-0) (type-type? (-> gp-0 type) spool-anim))
gp-0
@@ -236,11 +230,11 @@
)
)
(defmethod get-accept-anim process-taskable ((this process-taskable) (arg0 symbol))
(defmethod get-accept-anim ((this process-taskable) (arg0 symbol))
(the-as spool-anim #f)
)
(defmethod push-accept-anim process-taskable ((this process-taskable))
(defmethod push-accept-anim ((this process-taskable))
(let ((s5-0 (get-accept-anim this #f)))
(if (type-type? (-> s5-0 type) spool-anim)
(spool-push *art-control* (-> s5-0 name) 0 this -99.0)
@@ -250,11 +244,11 @@
(none)
)
(defmethod get-reject-anim process-taskable ((this process-taskable) (arg0 symbol))
(defmethod get-reject-anim ((this process-taskable) (arg0 symbol))
(the-as spool-anim #f)
)
(defmethod push-reject-anim process-taskable ((this process-taskable))
(defmethod push-reject-anim ((this process-taskable))
(let ((s5-0 (get-reject-anim this #f)))
(if (type-type? (-> s5-0 type) spool-anim)
(spool-push *art-control* (-> s5-0 name) 0 this -99.0)
@@ -264,7 +258,7 @@
(none)
)
(defmethod process-taskable-method-38 process-taskable ((this process-taskable))
(defmethod process-taskable-method-38 ((this process-taskable))
(if (nonzero? (-> this cell-for-task))
(go (method-of-object this give-cell))
)
@@ -344,9 +338,7 @@
)
:trans (behavior ()
(if (and (time-elapsed? (-> self state-time) (seconds 5))
(or (not *target*)
(< 20480.0 (vector-vector-distance (-> self root-override trans) (-> *target* control trans)))
)
(or (not *target*) (< 20480.0 (vector-vector-distance (-> self root trans) (-> *target* control trans))))
)
(go-virtual idle)
)
@@ -628,7 +620,7 @@
(none)
)
(defmethod should-display? process-taskable ((this process-taskable))
(defmethod should-display? ((this process-taskable))
#t
)
@@ -655,7 +647,7 @@
)
0
(process-taskable-clean-up-after-talking)
(clear-collide-with-as (-> self root-override))
(clear-collide-with-as (-> self root))
(ja-channel-set! 0)
(the-as int (ja-post))
)
@@ -668,7 +660,7 @@
(else
(ja-channel-set! 1)
(ja :group! (get-art-elem self))
(restore-collide-with-as (-> self root-override))
(restore-collide-with-as (-> self root))
(process-entity-status! self (entity-perm-status bit-3) #t)
(let ((v1-7 (-> self draw shadow-ctrl)))
(logclear! (-> v1-7 settings flags) (shadow-flags disable-draw))
@@ -698,13 +690,11 @@
)
;; WARN: disable def twice: 4. This may happen when a cond (no else) is nested inside of another conditional, but it should be rare.
(defmethod process-taskable-method-50 process-taskable ((this process-taskable))
(defmethod process-taskable-method-50 ((this process-taskable))
(if *target*
(or (not *target*)
(< 245760.0 (vector-vector-distance (-> this root-override trans) (-> *target* control trans)))
)
(or (not *target*) (< 245760.0 (vector-vector-distance (-> this root trans) (-> *target* control trans))))
(< 60397978000.0
(vector-vector-distance-squared (the-as vector (-> this root-override root-prim prim-core)) (camera-pos))
(vector-vector-distance-squared (the-as vector (-> this root root-prim prim-core)) (camera-pos))
)
)
)
@@ -784,7 +774,7 @@
(logior! (-> self mask) (process-mask actor-pause))
(let ((v1-6 (-> self entity extra trans)))
(if v1-6
(set! (-> self root-override trans quad) (-> v1-6 quad))
(set! (-> self root trans quad) (-> v1-6 quad))
)
)
(ja-channel-set! 0)
@@ -800,7 +790,7 @@
)
)
(defmethod target-above-threshold? process-taskable ((this process-taskable))
(defmethod target-above-threshold? ((this process-taskable))
#t
)
@@ -822,15 +812,10 @@
)
)
(('touch)
(the-as symbol (send-shove-back
(-> self root-override)
proc
(the-as touching-shapes-entry (-> block param 0))
0.7
6144.0
16384.0
)
)
(the-as
symbol
(send-shove-back (-> self root) proc (the-as touching-shapes-entry (-> block param 0)) 0.7 6144.0 16384.0)
)
)
(('clone)
(the-as symbol (go-virtual be-clone (the-as handle (-> block param 0))))
@@ -887,11 +872,9 @@
(not (logtest? (-> *target* control status) (cshape-moving-flags onsurf)))
)
)
(< (-> (target-pos 0) y) (+ 8192.0 (-> self root-override root-prim prim-core world-sphere y)))
(< (-> (target-pos 0) y) (+ 8192.0 (-> self root root-prim prim-core world-sphere y)))
;; og:preserve-this
(less-than-hack (vector-vector-distance (target-pos 0) (the-as vector (-> self root-override root-prim prim-core)))
32768.0
)
(less-than-hack (vector-vector-distance (target-pos 0) (the-as vector (-> self root root-prim prim-core))) 32768.0)
(= (-> *level* loading-level) (-> *level* level-default))
(not (movie?))
(not (level-hint-displayed?))
@@ -972,7 +955,7 @@
)
)
(defmethod initialize-collision process-taskable ((this process-taskable) (arg0 int) (arg1 vector))
(defmethod initialize-collision ((this process-taskable) (arg0 int) (arg1 vector))
(let ((s5-0 (new 'process 'collide-shape this (collide-list-enum hit-by-player))))
(let ((s4-0 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 0))))
(set! (-> s4-0 prim-core collide-as) (collide-kind enemy))
@@ -985,13 +968,13 @@
)
(set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w)))
(backup-collide-with-as s5-0)
(set! (-> this root-override) s5-0)
(set! (-> this root) s5-0)
)
0
(none)
)
(defmethod process-taskable-method-40 process-taskable ((this process-taskable) (arg0 object) (arg1 skeleton-group) (arg2 int) (arg3 int) (arg4 vector) (arg5 int))
(defmethod process-taskable-method-40 ((this process-taskable) (arg0 object) (arg1 skeleton-group) (arg2 int) (arg3 int) (arg4 vector) (arg5 int))
(stack-size-set! (-> this main-thread) 512)
(initialize-collision this arg2 arg4)
(process-drawable-from-entity! this (the-as entity-actor arg0))
@@ -1001,7 +984,7 @@
;; og:preserve-this
(#when PC_PORT
(set! (-> this skel postbind-function) process-drawable-joint-callback-pc))
(set! (-> this root-override pause-adjust-distance) -122880.0)
(set! (-> this root pause-adjust-distance) -122880.0)
(set! (-> this fuel-cell-anim) (fuel-cell-pick-anim this))
(set! (-> this draw origin-joint-index) (the-as uint arg2))
(set! (-> this draw shadow-joint-index) (the-as uint arg2))
@@ -1029,7 +1012,7 @@
(none)
)
(defmethod process-taskable-method-42 process-taskable ((this process-taskable))
(defmethod process-taskable-method-42 ((this process-taskable))
(cond
((not (should-display? this))
(go (method-of-object this hidden))
@@ -1044,17 +1027,17 @@
(none)
)
(defmethod process-taskable-method-43 process-taskable ((this process-taskable))
(defmethod process-taskable-method-43 ((this process-taskable))
(the-as symbol 0)
)
(defmethod ambient-control-method-9 ambient-control ((this ambient-control))
(defmethod ambient-control-method-9 ((this ambient-control))
(set! (-> this last-ambient-time) (-> *display* game-frame-counter))
0
(none)
)
(defmethod ambient-control-method-10 ambient-control ((this ambient-control) (arg0 vector) (arg1 time-frame) (arg2 float) (arg3 process-drawable))
(defmethod ambient-control-method-10 ((this ambient-control) (arg0 vector) (arg1 time-frame) (arg2 float) (arg3 process-drawable))
(when (< (- (-> *display* game-frame-counter) (-> this last-ambient-time)) arg1)
(set! arg0 (the-as vector #f))
(goto cfg-6)
@@ -1068,7 +1051,7 @@
arg0
)
(defmethod play-ambient ambient-control ((this ambient-control) (arg0 string) (arg1 symbol) (arg2 vector))
(defmethod play-ambient ((this ambient-control) (arg0 string) (arg1 symbol) (arg2 vector))
(when (and (not (string= arg0 (-> this last-ambient)))
(or arg1 (can-hint-be-played? (text-id one) (the-as entity #f) (the-as string #f)))
(= (-> *level* loading-level) (-> *level* level-default))
@@ -1174,7 +1157,7 @@
(format #t "ERROR<GMJ>: othercam parent invalid~%")
(deactivate self)
)
(set! (-> *camera-other-root* quad) (-> (the-as process-taskable s2-0) root-override trans quad))
(set! (-> *camera-other-root* quad) (-> (the-as process-taskable s2-0) root trans quad))
(let ((s4-0 (-> (the-as process-taskable s2-0) node-list data (-> self cam-joint-index) bone transform))
(s3-0 (-> (the-as process-taskable s2-0) node-list data (-> self cam-joint-index) bone scale))
(gp-0 (new 'stack-no-clear 'vector))
@@ -1254,7 +1237,7 @@
(none)
)
(defmethod draw-npc-shadow process-taskable ((this process-taskable))
(defmethod draw-npc-shadow ((this process-taskable))
(let ((gp-0 (-> this draw shadow-ctrl)))
(cond
((and (-> this draw shadow)
+36 -42
View File
@@ -8,54 +8,48 @@
;; DECOMP BEGINS
(deftype rigid-body (structure)
((mass float :offset-assert 0)
(inv-mass float :offset-assert 4)
(lin-momentum-damping-factor float :offset-assert 8)
(ang-momentum-damping-factor float :offset-assert 12)
(inertial-tensor matrix :inline :offset-assert 16)
(inv-inertial-tensor matrix :inline :offset-assert 80)
(cm-offset-joint vector :inline :offset-assert 144)
(position vector :inline :offset-assert 160)
(rotation quaternion :inline :offset-assert 176)
(lin-momentum vector :inline :offset-assert 192)
(ang-momentum vector :inline :offset-assert 208)
(lin-velocity vector :inline :offset-assert 224)
(ang-velocity vector :inline :offset-assert 240)
(inv-i-world matrix :inline :offset-assert 256)
(matrix matrix :inline :offset-assert 320)
(force vector :inline :offset-assert 384)
(torque vector :inline :offset-assert 400)
(max-ang-momentum float :offset-assert 416)
(max-ang-velocity float :offset-assert 420)
((mass float)
(inv-mass float)
(lin-momentum-damping-factor float)
(ang-momentum-damping-factor float)
(inertial-tensor matrix :inline)
(inv-inertial-tensor matrix :inline)
(cm-offset-joint vector :inline)
(position vector :inline)
(rotation quaternion :inline)
(lin-momentum vector :inline)
(ang-momentum vector :inline)
(lin-velocity vector :inline)
(ang-velocity vector :inline)
(inv-i-world matrix :inline)
(matrix matrix :inline)
(force vector :inline)
(torque vector :inline)
(max-ang-momentum float)
(max-ang-velocity float)
)
:method-count-assert 23
:size-assert #x1a8
:flag-assert #x17000001a8
(:methods
(rigid-body-method-9 (_type_ float float float float) none 9)
(rigid-body-method-10 (_type_ float) none 10)
(clear-force-torque! (_type_) none 11)
(clear-momentum! (_type_) none 12)
(rigid-body-method-13 (_type_ vector vector) none 13)
(rigid-body-method-14 (_type_ vector vector) none 14)
(rigid-body-method-15 (_type_ vector) none 15)
(rigid-body-method-16 (_type_ vector vector float) none 16)
(rigid-body-method-17 (_type_ vector vector) vector 17)
(rigid-body-method-18 (_type_ vector) vector 18)
(print-stats (_type_) none 19)
(rigid-body-method-20 (_type_) none 20)
(rigid-body-method-21 (_type_) none 21)
(rigid-body-method-22 (_type_ vector quaternion float float) none 22)
(rigid-body-method-9 (_type_ float float float float) none)
(rigid-body-method-10 (_type_ float) none)
(clear-force-torque! (_type_) none)
(clear-momentum! (_type_) none)
(rigid-body-method-13 (_type_ vector vector) none)
(rigid-body-method-14 (_type_ vector vector) none)
(rigid-body-method-15 (_type_ vector) none)
(rigid-body-method-16 (_type_ vector vector float) none)
(rigid-body-method-17 (_type_ vector vector) vector)
(rigid-body-method-18 (_type_ vector) vector)
(print-stats (_type_) none)
(rigid-body-method-20 (_type_) none)
(rigid-body-method-21 (_type_) none)
(rigid-body-method-22 (_type_ vector quaternion float float) none)
)
)
(deftype rigid-body-control-point (structure)
((local-pos vector :inline :offset-assert 0)
(world-pos vector :inline :offset-assert 16)
(velocity vector :inline :offset-assert 32)
((local-pos vector :inline)
(world-pos vector :inline)
(velocity vector :inline)
)
:method-count-assert 9
:size-assert #x30
:flag-assert #x900000030
)
+86 -94
View File
@@ -8,28 +8,28 @@
;; DECOMP BEGINS
(defmethod clear-force-torque! rigid-body ((this rigid-body))
(defmethod clear-force-torque! ((this rigid-body))
(set! (-> this force quad) (-> *null-vector* quad))
(set! (-> this torque quad) (-> *null-vector* quad))
0
(none)
)
(defmethod clear-momentum! rigid-body ((this rigid-body))
(defmethod clear-momentum! ((this rigid-body))
(set! (-> this lin-momentum quad) (-> *null-vector* quad))
(set! (-> this ang-momentum quad) (-> *null-vector* quad))
0
(none)
)
(defmethod rigid-body-method-21 rigid-body ((this rigid-body))
(defmethod rigid-body-method-21 ((this rigid-body))
(quaternion->matrix (-> this matrix) (-> this rotation))
(rigid-body-method-18 this (-> this matrix vector 3))
0
(none)
)
(defmethod rigid-body-method-22 rigid-body ((this rigid-body) (arg0 vector) (arg1 quaternion) (arg2 float) (arg3 float))
(defmethod rigid-body-method-22 ((this rigid-body) (arg0 vector) (arg1 quaternion) (arg2 float) (arg3 float))
(clear-force-torque! this)
(clear-momentum! this)
(vector+! (-> this position) arg0 (-> this cm-offset-joint))
@@ -50,7 +50,7 @@
(none)
)
(defmethod rigid-body-method-9 rigid-body ((this rigid-body) (arg0 float) (arg1 float) (arg2 float) (arg3 float))
(defmethod rigid-body-method-9 ((this rigid-body) (arg0 float) (arg1 float) (arg2 float) (arg3 float))
(set! (-> this mass) arg0)
(let ((f0-1 arg0))
(set! (-> this inv-mass) (/ 1.0 f0-1))
@@ -93,7 +93,7 @@
(none)
)
(defmethod rigid-body-method-17 rigid-body ((this rigid-body) (arg0 vector) (arg1 vector))
(defmethod rigid-body-method-17 ((this rigid-body) (arg0 vector) (arg1 vector))
(let ((v1-1 (vector-! (new 'stack-no-clear 'vector) arg0 (-> this position))))
(vector-cross! arg1 (-> this ang-velocity) v1-1)
)
@@ -120,7 +120,7 @@
arg0
)
(defmethod rigid-body-method-10 rigid-body ((this rigid-body) (arg0 float))
(defmethod rigid-body-method-10 ((this rigid-body) (arg0 float))
(vector+*! (-> this lin-momentum) (-> this lin-momentum) (-> this force) arg0)
(vector+*! (-> this ang-momentum) (-> this ang-momentum) (-> this torque) arg0)
(vector-float*! (-> this lin-momentum) (-> this lin-momentum) (-> this lin-momentum-damping-factor))
@@ -147,7 +147,7 @@
(none)
)
(defmethod rigid-body-method-13 rigid-body ((this rigid-body) (arg0 vector) (arg1 vector))
(defmethod rigid-body-method-13 ((this rigid-body) (arg0 vector) (arg1 vector))
(vector+! (-> this force) (-> this force) arg1)
(let* ((v1-2 (vector-! (new 'stack-no-clear 'vector) arg0 (-> this position)))
(a1-2 (vector-cross! (new 'stack-no-clear 'vector) v1-2 arg1))
@@ -158,7 +158,7 @@
(none)
)
(defmethod rigid-body-method-16 rigid-body ((this rigid-body) (arg0 vector) (arg1 vector) (arg2 float))
(defmethod rigid-body-method-16 ((this rigid-body) (arg0 vector) (arg1 vector) (arg2 float))
(vector+! (-> this force) (-> this force) arg1)
(let* ((a0-3 (vector-! (new 'stack-no-clear 'vector) arg0 (-> this position)))
(s4-1 (vector-cross! (new 'stack-no-clear 'vector) a0-3 arg1))
@@ -174,7 +174,7 @@
(none)
)
(defmethod rigid-body-method-14 rigid-body ((this rigid-body) (arg0 vector) (arg1 vector))
(defmethod rigid-body-method-14 ((this rigid-body) (arg0 vector) (arg1 vector))
(let ((s5-0 (new 'stack-no-clear 'vector))
(s4-0 (new 'stack-no-clear 'vector))
)
@@ -187,13 +187,13 @@
(none)
)
(defmethod rigid-body-method-15 rigid-body ((this rigid-body) (arg0 vector))
(defmethod rigid-body-method-15 ((this rigid-body) (arg0 vector))
(vector+! (-> this force) (-> this force) arg0)
0
(none)
)
(defmethod rigid-body-method-18 rigid-body ((this rigid-body) (arg0 vector))
(defmethod rigid-body-method-18 ((this rigid-body) (arg0 vector))
(let ((gp-0 (new 'stack-no-clear 'vector)))
(vector-rotate*! gp-0 (-> this cm-offset-joint) (-> this matrix))
(vector-! arg0 (-> this position) gp-0)
@@ -201,7 +201,7 @@
arg0
)
(defmethod print-stats rigid-body ((this rigid-body))
(defmethod print-stats ((this rigid-body))
(format #t " force ~M ~M ~M" (-> this force x) (-> this force y) (-> this force z))
(format #t " torque ~f ~f ~f~%" (-> this torque x) (-> this torque y) (-> this torque z))
(format #t " position ~M ~M ~M" (-> this position x) (-> this position y) (-> this position z))
@@ -221,7 +221,7 @@
(none)
)
(defmethod rigid-body-method-20 rigid-body ((this rigid-body))
(defmethod rigid-body-method-20 ((this rigid-body))
(format #t " force ~M ~M ~M" (-> this force x) (-> this force y) (-> this force z))
(format #t " torque ~f ~f ~f~%" (-> this torque x) (-> this torque y) (-> this torque z))
0
@@ -229,91 +229,83 @@
)
(deftype rigid-body-platform-constants (structure)
((drag-factor float :offset-assert 0)
(buoyancy-factor float :offset-assert 4)
(max-buoyancy-depth meters :offset-assert 8)
(gravity-factor float :offset-assert 12)
(gravity meters :offset-assert 16)
(player-weight meters :offset-assert 20)
(player-bonk-factor float :offset-assert 24)
(player-dive-factor float :offset-assert 28)
(player-force-distance meters :offset-assert 32)
(player-force-clamp meters :offset-assert 36)
(player-force-timeout time-frame :offset-assert 40)
(explosion-force meters :offset-assert 48)
(linear-damping float :offset-assert 52)
(angular-damping float :offset-assert 56)
(control-point-count int32 :offset-assert 60)
(mass float :offset-assert 64)
(inertial-tensor-x meters :offset-assert 68)
(inertial-tensor-y meters :offset-assert 72)
(inertial-tensor-z meters :offset-assert 76)
(cm-joint-x meters :offset-assert 80)
(cm-joint-y meters :offset-assert 84)
(cm-joint-z meters :offset-assert 88)
(idle-distance meters :offset-assert 92)
(platform symbol :offset-assert 96)
(sound-name string :offset-assert 100)
((drag-factor float)
(buoyancy-factor float)
(max-buoyancy-depth meters)
(gravity-factor float)
(gravity meters)
(player-weight meters)
(player-bonk-factor float)
(player-dive-factor float)
(player-force-distance meters)
(player-force-clamp meters)
(player-force-timeout time-frame)
(explosion-force meters)
(linear-damping float)
(angular-damping float)
(control-point-count int32)
(mass float)
(inertial-tensor-x meters)
(inertial-tensor-y meters)
(inertial-tensor-z meters)
(cm-joint-x meters)
(cm-joint-y meters)
(cm-joint-z meters)
(idle-distance meters)
(platform symbol)
(sound-name string)
)
:method-count-assert 9
:size-assert #x68
:flag-assert #x900000068
)
(deftype rigid-body-control-point-inline-array (inline-array-class)
((data rigid-body-control-point :inline :dynamic :offset 16)
((data rigid-body-control-point :inline :dynamic :offset 16)
)
:method-count-assert 9
:size-assert #x10
:flag-assert #x900000010
)
(set! (-> rigid-body-control-point-inline-array heap-base) (the-as uint 48))
(deftype rigid-body-platform (process-drawable)
((root-overlay collide-shape-moving :offset 112)
(info rigid-body-platform-constants :offset-assert 176)
(rbody rigid-body :inline :offset-assert 192)
(control-point-array rigid-body-control-point-inline-array :offset-assert 616)
(player-velocity vector :inline :offset-assert 624)
(player-velocity-prev vector :inline :offset-assert 640)
(player-force-position vector :inline :offset-assert 656)
(player-force vector :inline :offset-assert 672)
(sim-time-remaining float :offset-assert 688)
(float-height-offset float :offset-assert 692)
(player-attack-id int32 :offset-assert 696)
(player-bonk-timeout time-frame :offset-assert 704)
(water-anim water-anim :offset-assert 712)
(player-contact basic :offset-assert 716)
(player-impulse collide-shape-prim-mesh :offset-assert 720)
((root-overlay collide-shape-moving :overlay-at root)
(info rigid-body-platform-constants)
(rbody rigid-body :inline)
(control-point-array rigid-body-control-point-inline-array)
(player-velocity vector :inline)
(player-velocity-prev vector :inline)
(player-force-position vector :inline)
(player-force vector :inline)
(sim-time-remaining float)
(float-height-offset float)
(player-attack-id int32)
(player-bonk-timeout time-frame)
(water-anim water-anim)
(player-contact basic)
(player-impulse collide-shape-prim-mesh)
)
:heap-base #x270
:method-count-assert 35
:size-assert #x2d4
:flag-assert #x23027002d4
(:state-methods
rigid-body-platform-idle
rigid-body-platform-float
)
(:methods
(rigid-body-platform-idle () _type_ :state 20)
(rigid-body-platform-float () _type_ :state 21)
(rigid-body-platform-method-22 (_type_ vector float) float 22)
(rigid-body-platform-method-23 (_type_ float) none 23)
(rigid-body-platform-method-24 (_type_ rigid-body-control-point float) none 24)
(rigid-body-platform-method-25 (_type_) none 25)
(rigid-body-platform-method-26 (_type_) none 26)
(rigid-body-platform-method-27 (_type_ vector) none 27)
(rigid-body-platform-method-28 (_type_) none 28)
(rigid-body-platform-method-29 (_type_ rigid-body-platform-constants) none 29)
(rigid-body-platform-method-30 (_type_) none 30)
(rigid-body-platform-method-31 (_type_) none 31)
(rigid-body-platform-method-32 (_type_) sound-id 32)
(rigid-body-platform-method-33 (_type_) object 33)
(rigid-body-platform-method-34 (_type_) none 34)
(rigid-body-platform-method-22 (_type_ vector float) float)
(rigid-body-platform-method-23 (_type_ float) none)
(rigid-body-platform-method-24 (_type_ rigid-body-control-point float) none)
(rigid-body-platform-method-25 (_type_) none)
(rigid-body-platform-method-26 (_type_) none)
(rigid-body-platform-method-27 (_type_ vector) none)
(rigid-body-platform-method-28 (_type_) none)
(rigid-body-platform-method-29 (_type_ rigid-body-platform-constants) none)
(rigid-body-platform-method-30 (_type_) none)
(rigid-body-platform-method-31 (_type_) none)
(rigid-body-platform-method-32 (_type_) sound-id)
(rigid-body-platform-method-33 (_type_) object)
(rigid-body-platform-method-34 (_type_) none)
)
)
(defmethod relocate rigid-body-platform ((this rigid-body-platform) (arg0 int))
(defmethod relocate ((this rigid-body-platform) (arg0 int))
(if (nonzero? (-> this control-point-array))
(set! (-> this control-point-array)
(the-as rigid-body-control-point-inline-array (+ (the-as int (-> this control-point-array)) arg0))
@@ -322,7 +314,7 @@
(call-parent-method this arg0)
)
(defmethod rigid-body-platform-method-22 rigid-body-platform ((this rigid-body-platform) (arg0 vector) (arg1 float))
(defmethod rigid-body-platform-method-22 ((this rigid-body-platform) (arg0 vector) (arg1 float))
(let ((v1-0 (-> this water-anim)))
0.0
(+ (the-as float (cond
@@ -349,7 +341,7 @@
)
)
(defmethod rigid-body-platform-method-24 rigid-body-platform ((this rigid-body-platform) (arg0 rigid-body-control-point) (arg1 float))
(defmethod rigid-body-platform-method-24 ((this rigid-body-platform) (arg0 rigid-body-control-point) (arg1 float))
(set! (-> arg0 world-pos w) (rigid-body-platform-method-22 this (-> arg0 world-pos) arg1))
(let* ((s4-0 (new 'stack-no-clear 'vector))
(f0-2 (- (-> arg0 world-pos w) (-> arg0 world-pos y)))
@@ -373,7 +365,7 @@
(none)
)
(defmethod rigid-body-platform-method-25 rigid-body-platform ((this rigid-body-platform))
(defmethod rigid-body-platform-method-25 ((this rigid-body-platform))
(when (or (-> this player-impulse) (-> this player-contact))
(set! (-> this player-impulse) #f)
(rigid-body-method-16
@@ -387,7 +379,7 @@
(none)
)
(defmethod rigid-body-platform-method-26 rigid-body-platform ((this rigid-body-platform))
(defmethod rigid-body-platform-method-26 ((this rigid-body-platform))
(let ((a1-0 (new 'stack-no-clear 'vector)))
(vector-float*!
a1-0
@@ -400,7 +392,7 @@
(none)
)
(defmethod rigid-body-platform-method-27 rigid-body-platform ((this rigid-body-platform) (arg0 vector))
(defmethod rigid-body-platform-method-27 ((this rigid-body-platform) (arg0 vector))
(let ((gp-0 (new 'stack-no-clear 'vector)))
(vector-! gp-0 arg0 (-> this rbody position))
(set! (-> gp-0 y) 0.0)
@@ -417,7 +409,7 @@
(none)
)
(defmethod rigid-body-platform-method-23 rigid-body-platform ((this rigid-body-platform) (arg0 float))
(defmethod rigid-body-platform-method-23 ((this rigid-body-platform) (arg0 float))
(let ((s4-0 (-> this rbody matrix)))
(dotimes (s3-0 (-> this info control-point-count))
(let ((s2-0 (-> this control-point-array data s3-0)))
@@ -433,7 +425,7 @@
(none)
)
(defmethod rigid-body-platform-method-28 rigid-body-platform ((this rigid-body-platform))
(defmethod rigid-body-platform-method-28 ((this rigid-body-platform))
(if (-> this info platform)
(detect-riders! (-> this root-overlay))
)
@@ -446,7 +438,7 @@
(* 0.0033333334 (the float (- (current-time) (-> *display* old-base-frame-counter))))
)
(let ((f30-0 (* DISPLAY_FPS_RATIO 0.016666668)) ;; og:preserve-this changed for high fps
(f28-0 (* 0.0033333334 (the float (logand #xffffff (-> *display* base-frame-counter)))))
(f28-0 (* 0.0033333334 (the float (logand #xffffff (current-time)))))
)
(while (>= (-> this sim-time-remaining) (* 0.5 f30-0))
(clear-force-torque! (-> this rbody))
@@ -643,7 +635,7 @@
:post rigid-body-platform-post
)
(defmethod rigid-body-platform-method-29 rigid-body-platform ((this rigid-body-platform) (arg0 rigid-body-platform-constants))
(defmethod rigid-body-platform-method-29 ((this rigid-body-platform) (arg0 rigid-body-platform-constants))
(set! (-> this info) arg0)
(set! (-> this control-point-array)
(new 'process 'rigid-body-control-point-inline-array (-> this info control-point-count))
@@ -682,7 +674,7 @@
(none)
)
(defmethod rigid-body-platform-method-30 rigid-body-platform ((this rigid-body-platform))
(defmethod rigid-body-platform-method-30 ((this rigid-body-platform))
(let ((s5-0 (new 'process 'collide-shape-moving this (collide-list-enum hit-by-player))))
(set! (-> s5-0 dynam) (copy *standard-dynamics* 'process))
(set! (-> s5-0 reaction) default-collision-reaction)
@@ -733,13 +725,13 @@
)
)
(defmethod rigid-body-platform-method-34 rigid-body-platform ((this rigid-body-platform))
(defmethod rigid-body-platform-method-34 ((this rigid-body-platform))
(go (method-of-object this rigid-body-platform-idle))
0
(none)
)
(defmethod rigid-body-platform-method-31 rigid-body-platform ((this rigid-body-platform))
(defmethod rigid-body-platform-method-31 ((this rigid-body-platform))
(set! (-> this float-height-offset) 0.0)
(rigid-body-platform-method-29 this *rigid-body-platform-constants*)
(let ((s5-0 (-> this info control-point-count)))
@@ -758,7 +750,7 @@
(none)
)
(defmethod init-from-entity! rigid-body-platform ((this rigid-body-platform) (arg0 entity-actor))
(defmethod init-from-entity! ((this rigid-body-platform) (arg0 entity-actor))
(logior! (-> this mask) (process-mask platform))
(rigid-body-platform-method-30 this)
(process-drawable-from-entity! this arg0)
+64 -74
View File
@@ -8,29 +8,26 @@
;; DECOMP BEGINS
(deftype ropebridge-tuning (structure)
((num-springs int32 :offset-assert 0)
(num-spring-points int32 :offset-assert 4)
(col-mesh-indexes (pointer uint8) :offset-assert 8)
(view-frustum-radius float :offset-assert 12)
(root-prim-radius float :offset-assert 16)
(desired-spring-len float :offset-assert 20)
(gravity float :offset-assert 24)
(spring-coefficient float :offset-assert 28)
(spring-mass float :offset-assert 32)
(friction float :offset-assert 36)
(max-influence-dist float :offset-assert 40)
(rider-max-gravity float :offset-assert 44)
(max-bonk-influence-dist float :offset-assert 48)
(rider-bonk-force float :offset-assert 52)
(rider-bonk-min float :offset-assert 56)
(rider-bonk-max float :offset-assert 60)
(normal-board-len float :offset-assert 64)
(bridge-end-to-end-len float :offset-assert 68)
(rest-state symbol :offset-assert 72)
((num-springs int32)
(num-spring-points int32)
(col-mesh-indexes (pointer uint8))
(view-frustum-radius float)
(root-prim-radius float)
(desired-spring-len float)
(gravity float)
(spring-coefficient float)
(spring-mass float)
(friction float)
(max-influence-dist float)
(rider-max-gravity float)
(max-bonk-influence-dist float)
(rider-bonk-force float)
(rider-bonk-min float)
(rider-bonk-max float)
(normal-board-len float)
(bridge-end-to-end-len float)
(rest-state symbol)
)
:method-count-assert 9
:size-assert #x4c
:flag-assert #x90000004c
)
@@ -458,47 +455,40 @@
)
(deftype ropebridge-spring-point (structure)
((local-pos vector :inline :offset-assert 0)
(vel vector :inline :offset-assert 16)
(extra-force vector :inline :offset-assert 32)
((local-pos vector :inline)
(vel vector :inline)
(extra-force vector :inline)
)
:pack-me
:method-count-assert 9
:size-assert #x30
:flag-assert #x900000030
)
(deftype ropebridge (process-drawable)
((root-override collide-shape :offset 112)
(subtype uint64 :offset-assert 176)
(subtype-name string :offset-assert 184)
(agitated-time-stamp time-frame :offset-assert 192)
(bonk-time-stamp time-frame :offset-assert 200)
(attack-flop-time-stamp time-frame :offset-assert 208)
(player-attack-id uint64 :offset-assert 216)
(sleep-dist float :offset-assert 224)
(do-physics? basic :offset-assert 228)
(tuning ropebridge-tuning :offset-assert 232)
(world-matrix matrix :inline :offset-assert 240)
(inv-world-matrix matrix :inline :offset-assert 304)
(extra-trans vector :inline :offset-assert 368)
(spring-point ropebridge-spring-point 36 :inline :offset-assert 384)
((root collide-shape :override)
(subtype uint64)
(subtype-name string)
(agitated-time-stamp time-frame)
(bonk-time-stamp time-frame)
(attack-flop-time-stamp time-frame)
(player-attack-id uint64)
(sleep-dist float)
(do-physics? basic)
(tuning ropebridge-tuning)
(world-matrix matrix :inline)
(inv-world-matrix matrix :inline)
(extra-trans vector :inline)
(spring-point ropebridge-spring-point 36 :inline)
)
:heap-base #x7d0
:method-count-assert 29
:size-assert #x840
:flag-assert #x1d07d00840
(:methods
(set-vel-from-impact (_type_ uint vector int float) none 20)
(set-vel-from-riders (_type_) none 21)
(set-vel-from-rider (_type_ uint vector int) none 22)
(clear-spring-forces (_type_) none 23)
(debug-draw (_type_) none 24)
(set-to-rest-state (_type_) none 25)
(add-collision-meshes (_type_) none 26)
(do-integration (_type_) none 27)
(ropebridge-method-28 (_type_) none 28)
(set-vel-from-impact (_type_ uint vector int float) none)
(set-vel-from-riders (_type_) none)
(set-vel-from-rider (_type_ uint vector int) none)
(clear-spring-forces (_type_) none)
(debug-draw (_type_) none)
(set-to-rest-state (_type_) none)
(add-collision-meshes (_type_) none)
(do-integration (_type_) none)
(ropebridge-method-28 (_type_) none)
)
(:states
ropebridge-idle
@@ -573,7 +563,7 @@
)
(gp-0 (the-as object (-> block param 0)))
(a0-7 (-> (the-as touching-shapes-entry gp-0) head))
(s4-0 (-> self root-override))
(s4-0 (-> self root))
(s5-0 (get-touched-prim a0-7 s4-0 (the-as touching-shapes-entry gp-0)))
(v1-33 ((method-of-type touching-shapes-entry get-touched-shape) (the-as touching-shapes-entry gp-0) s4-0))
(gp-1 (new 'stack-no-clear 'vector))
@@ -594,7 +584,7 @@
:code (behavior ()
(loop
(suspend)
(detect-riders! (-> self root-override))
(detect-riders! (-> self root))
(when (-> self do-physics?)
(clear-spring-forces self)
(set-vel-from-riders self)
@@ -618,7 +608,7 @@
)
:post (behavior ()
(ja-post)
(let ((gp-0 (-> self root-override)))
(let ((gp-0 (-> self root)))
(update-transforms! gp-0)
(when (-> self do-physics?)
(pull-riders! gp-0)
@@ -630,7 +620,7 @@
)
;; WARN: Function (method 20 ropebridge) has a return type of none, but the expression builder found a return statement.
(defmethod set-vel-from-impact ropebridge ((this ropebridge) (arg0 uint) (arg1 vector) (arg2 int) (arg3 float))
(defmethod set-vel-from-impact ((this ropebridge) (arg0 uint) (arg1 vector) (arg2 int) (arg3 float))
(loop
(let ((f0-2 (fabs (- (-> arg1 z) (-> this spring-point (the-as int arg0) local-pos z)))))
(if (< (-> this tuning max-bonk-influence-dist) f0-2)
@@ -653,7 +643,7 @@
(none)
)
(defmethod clear-spring-forces ropebridge ((this ropebridge))
(defmethod clear-spring-forces ((this ropebridge))
(let ((v1-0 (the-as ropebridge-spring-point (-> this spring-point))))
(countdown (a0-2 (-> this tuning num-spring-points))
(set! (-> v1-0 extra-force quad) (the-as uint128 0))
@@ -665,8 +655,8 @@
(none)
)
(defmethod set-vel-from-riders ropebridge ((this ropebridge))
(let ((v1-1 (-> this root-override riders)))
(defmethod set-vel-from-riders ((this ropebridge))
(let ((v1-1 (-> this root riders)))
(when v1-1
(let ((s5-0 (the-as collide-sticky-rider (-> v1-1 rider))))
(countdown (s4-0 (-> v1-1 num-riders))
@@ -697,7 +687,7 @@
)
;; WARN: Function (method 22 ropebridge) has a return type of none, but the expression builder found a return statement.
(defmethod set-vel-from-rider ropebridge ((this ropebridge) (arg0 uint) (arg1 vector) (arg2 int))
(defmethod set-vel-from-rider ((this ropebridge) (arg0 uint) (arg1 vector) (arg2 int))
(loop
(let ((f0-0 (vector-vector-distance arg1 (the-as vector (-> this spring-point (the-as int arg0))))))
(if (< (-> this tuning max-influence-dist) f0-0)
@@ -718,7 +708,7 @@
(none)
)
(defmethod do-integration ropebridge ((this ropebridge))
(defmethod do-integration ((this ropebridge))
(local-vars (a2-1 float) (a3-0 float))
(rlet ((Q :class vf)
(vf0 :class vf)
@@ -841,7 +831,7 @@
)
)
(defmethod debug-draw ropebridge ((this ropebridge))
(defmethod debug-draw ((this ropebridge))
(let ((gp-0 (-> this node-list data 0 bone transform))
(s5-0 (the-as ropebridge-spring-point (-> this spring-point)))
(s4-0 (new 'stack-no-clear 'vector))
@@ -855,7 +845,7 @@
(none)
)
(defmethod set-to-rest-state ropebridge ((this ropebridge))
(defmethod set-to-rest-state ((this ropebridge))
(rlet ((vf0 :class vf)
(vf1 :class vf)
(vf2 :class vf)
@@ -940,8 +930,8 @@
(none)
)
(defmethod add-collision-meshes ropebridge ((this ropebridge))
(let* ((s5-0 (-> this root-override))
(defmethod add-collision-meshes ((this ropebridge))
(let* ((s5-0 (-> this root))
(s3-0 (-> this tuning))
(s4-0 (new 'process 'collide-shape-prim-group s5-0 (the-as uint (-> s3-0 num-springs)) 0))
)
@@ -970,22 +960,22 @@
(none)
)
(defmethod run-logic? ropebridge ((this ropebridge))
(defmethod run-logic? ((this ropebridge))
(or (not (logtest? (-> this mask) (process-mask actor-pause)))
(not (time-elapsed? (-> this agitated-time-stamp) (seconds 5)))
(or (>= (-> this sleep-dist) (vector-vector-distance (-> this root-override trans) (math-camera-pos)))
(or (>= (-> this sleep-dist) (vector-vector-distance (-> this root trans) (math-camera-pos)))
(and (nonzero? (-> this skel)) (!= (-> this skel root-channel 0) (-> this skel channel)))
(and (nonzero? (-> this draw)) (logtest? (-> this draw status) (draw-status no-skeleton-update)))
)
)
)
(defmethod ropebridge-method-28 ropebridge ((this ropebridge))
(defmethod ropebridge-method-28 ((this ropebridge))
0
(none)
)
(defmethod init-from-entity! ropebridge ((this ropebridge) (arg0 entity-actor))
(defmethod init-from-entity! ((this ropebridge) (arg0 entity-actor))
(let ((s4-0 (res-lump-struct (-> this entity) 'art-name structure)))
(if (not s4-0)
(set! s4-0 "ropebridge-32")
@@ -1027,7 +1017,7 @@
(set-vector! (-> this extra-trans) 0.0 0.0 (- (* 0.5 (-> this tuning bridge-end-to-end-len))) 1.0)
(set! (-> this do-physics?) #t)
(let ((a0-13 (new 'process 'collide-shape this (collide-list-enum hit-by-player))))
(set! (-> this root-override) a0-13)
(set! (-> this root) a0-13)
(alloc-riders a0-13 3)
)
(add-collision-meshes this)
@@ -1044,7 +1034,7 @@
(set! (-> this skel postbind-function) ropebridge-joint-callback)
(matrix<-transformq+trans!
(-> this world-matrix)
(the-as transformq (-> this root-override trans))
(the-as transformq (-> this root trans))
(-> this extra-trans)
)
(matrix-4x4-inverse! (-> this inv-world-matrix) (-> this world-matrix))
+23 -27
View File
@@ -33,26 +33,22 @@
)
(deftype sharkey (nav-enemy)
((dir vector :inline :offset-assert 400)
(spawn-point vector :inline :offset-assert 416)
(scale float :offset-assert 432)
(anim-speed float :offset-assert 436)
(y-max meters :offset-assert 440)
(y-min meters :offset-assert 444)
(attack-time float :offset-assert 448)
(player-water-time time-frame :offset-assert 456)
(player-in-water basic :offset-assert 464)
(last-y float :offset-assert 468)
(spawn-distance meters :offset-assert 472)
(chase-speed meters :offset-assert 476)
(y-speed meters :offset-assert 480)
(sound-id sound-id :offset-assert 484)
(enable-patrol basic :offset-assert 488)
((dir vector :inline)
(spawn-point vector :inline)
(scale float)
(anim-speed float)
(y-max meters)
(y-min meters)
(attack-time float)
(player-water-time time-frame)
(player-in-water basic)
(last-y float)
(spawn-distance meters)
(chase-speed meters)
(y-speed meters)
(sound-id sound-id)
(enable-patrol basic)
)
:heap-base #x180
:method-count-assert 76
:size-assert #x1ec
:flag-assert #x4c018001ec
)
@@ -61,17 +57,17 @@
:bounds (static-spherem 0 0 0 6)
)
(defmethod touch-handler sharkey ((this sharkey) (arg0 process) (arg1 event-message-block))
(defmethod touch-handler ((this sharkey) (arg0 process) (arg1 event-message-block))
#t
)
(defmethod attack-handler sharkey ((this sharkey) (arg0 process) (arg1 event-message-block))
(defmethod attack-handler ((this sharkey) (arg0 process) (arg1 event-message-block))
#t
)
nav-enemy-default-event-handler
(defmethod run-logic? sharkey ((this sharkey))
(defmethod run-logic? ((this sharkey))
(or (not (logtest? (-> this mask) (process-mask actor-pause)))
(or (>= (+ (-> *ACTOR-bank* pause-dist) (-> this collide-info pause-adjust-distance))
(vector-vector-distance (-> this collide-info trans) (math-camera-pos))
@@ -82,7 +78,7 @@ nav-enemy-default-event-handler
)
)
(defmethod nav-enemy-method-40 sharkey ((this sharkey))
(defmethod nav-enemy-method-40 ((this sharkey))
(nav-control-method-11 (-> this nav) (-> this nav target-pos))
(let* ((f0-0 (vector-vector-xz-distance (-> this collide-info trans) (-> this nav target-pos)))
(f30-0 (/ (- (fmin (-> this y-max) (-> this nav target-pos y)) (-> this collide-info trans y)) f0-0))
@@ -93,7 +89,7 @@ nav-enemy-default-event-handler
(none)
)
(defmethod nav-enemy-method-37 sharkey ((this sharkey))
(defmethod nav-enemy-method-37 ((this sharkey))
(let ((s5-0 (new 'stack-no-clear 'vector)))
(when (< 8192.0 (vector-length (-> this nav travel)))
(vector-normalize-copy! s5-0 (-> this nav travel) 1.0)
@@ -106,7 +102,7 @@ nav-enemy-default-event-handler
(none)
)
(defmethod nav-enemy-method-41 sharkey ((this sharkey))
(defmethod nav-enemy-method-41 ((this sharkey))
(let* ((f0-1 (- (-> this target-speed) (-> this momentum-speed)))
(f1-3 (fmin (* (-> this acceleration) (seconds-per-frame)) (fabs f0-1)))
)
@@ -127,7 +123,7 @@ nav-enemy-default-event-handler
(none)
)
(defmethod common-post sharkey ((this sharkey))
(defmethod common-post ((this sharkey))
(let ((f30-0 (-> this water height))
(s5-0 (new 'stack-no-clear 'vector))
)
@@ -600,7 +596,7 @@ nav-enemy-default-event-handler
)
)
(defmethod init-from-entity! sharkey ((this sharkey) (arg0 entity-actor))
(defmethod init-from-entity! ((this sharkey) (arg0 entity-actor))
(set! (-> this scale) (res-lump-float arg0 'scale :default 1.0))
(let ((s4-0 (new 'process 'collide-shape-moving this (collide-list-enum hit-by-player))))
(set! (-> s4-0 dynam) (copy *standard-dynamics* 'process))
+10 -13
View File
@@ -8,23 +8,20 @@
;; DECOMP BEGINS
(deftype ticky (structure)
((delay-til-ramp time-frame :offset-assert 0)
(delay-til-timeout time-frame :offset-assert 8)
(starting-time time-frame :offset-assert 16)
(last-tick-time time-frame :offset-assert 24)
((delay-til-ramp time-frame)
(delay-til-timeout time-frame)
(starting-time time-frame)
(last-tick-time time-frame)
)
:method-count-assert 12
:size-assert #x20
:flag-assert #xc00000020
(:methods
(sleep (_type_ time-frame) none 9)
(reached-delay? (_type_ time-frame) symbol 10)
(completed? (_type_) symbol 11)
(sleep (_type_ time-frame) none)
(reached-delay? (_type_ time-frame) symbol)
(completed? (_type_) symbol)
)
)
(defmethod sleep ticky ((this ticky) (arg0 time-frame))
(defmethod sleep ((this ticky) (arg0 time-frame))
(set-time! (-> this starting-time))
(set! (-> this delay-til-timeout) arg0)
(set! (-> this delay-til-ramp) (max 0 (+ arg0 (seconds -4))))
@@ -33,7 +30,7 @@
(none)
)
(defmethod completed? ticky ((this ticky))
(defmethod completed? ((this ticky))
(let ((gp-0 #f))
(let ((v1-2 (- (current-time) (-> this starting-time))))
(cond
@@ -60,6 +57,6 @@
)
)
(defmethod reached-delay? ticky ((this ticky) (arg0 time-frame))
(defmethod reached-delay? ((this ticky) (arg0 time-frame))
(time-elapsed? (-> this starting-time) arg0)
)
+10 -13
View File
@@ -8,24 +8,21 @@
;; DECOMP BEGINS
(deftype tippy (structure)
((axis vector :inline :offset-assert 0)
(angle float :offset-assert 16)
(orig quaternion :inline :offset-assert 32)
(dist-ratio float :offset-assert 48)
(damping float :offset-assert 52)
(1-damping float :offset-assert 56)
((axis vector :inline)
(angle float)
(orig quaternion :inline)
(dist-ratio float)
(damping float)
(1-damping float)
)
:method-count-assert 11
:size-assert #x3c
:flag-assert #xb0000003c
(:methods
(reset! (_type_ process-drawable float float) none 9)
(tippy-method-10 (_type_ process-drawable vector) symbol 10)
(reset! (_type_ process-drawable float float) none)
(tippy-method-10 (_type_ process-drawable vector) symbol)
)
)
(defmethod reset! tippy ((this tippy) (arg0 process-drawable) (arg1 float) (arg2 float))
(defmethod reset! ((this tippy) (arg0 process-drawable) (arg1 float) (arg2 float))
(set-vector! (-> this axis) 0.0 0.0 0.0 1.0)
(set! (-> this angle) 0.0)
(quaternion-copy! (-> this orig) (-> arg0 root quat))
@@ -36,7 +33,7 @@
(none)
)
(defmethod tippy-method-10 tippy ((this tippy) (arg0 process-drawable) (arg1 vector))
(defmethod tippy-method-10 ((this tippy) (arg0 process-drawable) (arg1 vector))
(let ((s4-0 #t))
(cond
(arg1
+10 -18
View File
@@ -9,10 +9,6 @@
(deftype camera-voicebox (camera-slave)
()
:heap-base #x9a0
:method-count-assert 14
:size-assert #xa04
:flag-assert #xe09a00a04
(:states
cam-voicebox
)
@@ -20,21 +16,17 @@
(deftype voicebox (process-drawable)
((parent-override (pointer camera-voicebox) :offset 12)
(base-trans vector :inline :offset-assert 176)
(seeker cam-float-seeker :inline :offset-assert 192)
(blend float :offset-assert 216)
(twist float :offset-assert 220)
(hint handle :offset-assert 224)
((parent-override (pointer camera-voicebox) :overlay-at parent)
(base-trans vector :inline)
(seeker cam-float-seeker :inline)
(blend float)
(twist float)
(hint handle)
)
:heap-base #x80
:method-count-assert 23
:size-assert #xe8
:flag-assert #x17008000e8
(:methods
(enter () _type_ :state 20)
(idle () _type_ :state 21)
(exit () _type_ :state 22)
(:state-methods
enter
idle
exit
)
)
+10 -17
View File
@@ -8,14 +8,10 @@
;; DECOMP BEGINS
(deftype water-anim (water-vol)
((ppointer-water-anim (pointer water-anim) :offset 24)
(look int32 :offset-assert 212)
(play-ambient-sound? symbol :offset-assert 216)
((ppointer-water-anim (pointer water-anim) :overlay-at ppointer)
(look int32)
(play-ambient-sound? symbol)
)
:heap-base #x70
:method-count-assert 30
:size-assert #xdc
:flag-assert #x1e007000dc
)
@@ -260,13 +256,10 @@
)
(deftype water-anim-look (structure)
((skel-group symbol :offset-assert 0)
(anim int32 :offset-assert 4)
(ambient-sound-spec sound-spec :offset-assert 8)
((skel-group symbol)
(anim int32)
(ambient-sound-spec sound-spec)
)
:method-count-assert 9
:size-assert #xc
:flag-assert #x90000000c
)
@@ -511,15 +504,15 @@
)
)
(defmethod get-ripple-height water-anim ((this water-anim) (arg0 vector))
(defmethod get-ripple-height ((this water-anim) (arg0 vector))
(ripple-find-height this 0 arg0)
)
(defmethod set-stack-size! water-anim ((this water-anim))
(defmethod set-stack-size! ((this water-anim))
(none)
)
(defmethod water-vol-method-25 water-anim ((this water-anim))
(defmethod water-vol-method-25 ((this water-anim))
(local-vars (sv-16 res-tag))
(set! (-> this play-ambient-sound?) #t)
(set! (-> this look) (res-lump-value (-> this entity) 'look int :default (the-as uint128 -1)))
@@ -539,7 +532,7 @@
(none)
)
(defmethod water-vol-method-22 water-anim ((this water-anim))
(defmethod water-vol-method-22 ((this water-anim))
(let ((s5-0 (-> this look)))
(if (or (< s5-0 0) (>= s5-0 (-> *water-anim-look* length)))
(go process-drawable-art-error "skel group")
+64 -69
View File
@@ -45,59 +45,56 @@
;; DECOMP BEGINS
(deftype water-control (basic)
((flags water-flags :offset-assert 4)
(process process-drawable :offset-assert 8)
(joint-index int32 :offset-assert 12)
(top-y-offset float :offset-assert 16)
(ripple-size meters :offset-assert 20)
(enter-water-time time-frame :offset-assert 24)
(wade-time time-frame :offset-assert 32)
(on-water-time time-frame :offset-assert 40)
(enter-swim-time time-frame :offset-assert 48)
(swim-time time-frame :offset-assert 56)
(base-height meters :offset-assert 64)
(wade-height meters :offset-assert 68)
(swim-height meters :offset-assert 72)
(surface-height meters :offset-assert 76)
(bottom-height meters :offset-assert 80)
(height meters :offset-assert 84)
(height-offset float 4 :offset-assert 88)
(real-ocean-offset meters :offset 88)
(ocean-offset meters :offset 92)
(bob-offset meters :offset 96)
(align-offset meters :offset 100)
(swim-depth meters :offset-assert 104)
(bob smush-control :inline :offset-assert 112)
(volume handle :offset-assert 144)
(bottom vector 2 :inline :offset-assert 160)
(top vector 2 :inline :offset-assert 192)
(enter-water-pos vector :inline :offset-assert 224)
(drip-old-pos vector :inline :offset-assert 240)
(drip-joint-index int32 :offset-assert 256)
(drip-wetness float :offset-assert 260)
(drip-time time-frame :offset-assert 264)
(drip-speed float :offset-assert 272)
(drip-height meters :offset-assert 276)
(drip-mult float :offset-assert 280)
((flags water-flags)
(process process-drawable)
(joint-index int32)
(top-y-offset float)
(ripple-size meters)
(enter-water-time time-frame)
(wade-time time-frame)
(on-water-time time-frame)
(enter-swim-time time-frame)
(swim-time time-frame)
(base-height meters)
(wade-height meters)
(swim-height meters)
(surface-height meters)
(bottom-height meters)
(height meters)
(height-offset float 4)
(real-ocean-offset meters :overlay-at (-> height-offset 0))
(ocean-offset meters :overlay-at (-> height-offset 1))
(bob-offset meters :overlay-at (-> height-offset 2))
(align-offset meters :overlay-at (-> height-offset 3))
(swim-depth meters)
(bob smush-control :inline)
(volume handle)
(bottom vector 2 :inline)
(top vector 2 :inline)
(enter-water-pos vector :inline)
(drip-old-pos vector :inline)
(drip-joint-index int32)
(drip-wetness float)
(drip-time time-frame)
(drip-speed float)
(drip-height meters)
(drip-mult float)
)
:method-count-assert 17
:size-assert #x11c
:flag-assert #x110000011c
(:methods
(new (symbol type process int float float float) _type_ 0)
(water-control-method-9 (_type_) none 9)
(water-control-method-10 (_type_) none 10)
(start-bobbing! (_type_ float int int) none 11)
(distance-from-surface (_type_) float 12)
(create-splash (_type_ float vector int vector) none 13)
(display-water-marks? (_type_) symbol 14)
(water-control-method-15 (_type_) none 15)
(water-control-method-16 (_type_) none 16)
(new (symbol type process int float float float) _type_)
(water-control-method-9 (_type_) none)
(water-control-method-10 (_type_) none)
(start-bobbing! (_type_ float int int) none)
(distance-from-surface (_type_) float)
(create-splash (_type_ float vector int vector) none)
(display-water-marks? (_type_) symbol)
(water-control-method-15 (_type_) none)
(water-control-method-16 (_type_) none)
)
)
(defmethod display-water-marks? water-control ((this water-control))
(defmethod display-water-marks? ((this water-control))
(and *display-water-marks* (logtest? (-> this flags) (water-flags wt00)))
)
@@ -116,33 +113,31 @@
)
)
(defmethod distance-from-surface water-control ((this water-control))
(defmethod distance-from-surface ((this water-control))
(- (-> this top 0 y) (-> this height))
)
(deftype water-vol (process-drawable)
((water-height meters :offset-assert 176)
(wade-height meters :offset-assert 180)
(swim-height meters :offset-assert 184)
(bottom-height meters :offset-assert 188)
(attack-event symbol :offset-assert 192)
(target handle :offset-assert 200)
(flags water-flags :offset-assert 208)
((water-height meters)
(wade-height meters)
(swim-height meters)
(bottom-height meters)
(attack-event symbol)
(target handle)
(flags water-flags)
)
:heap-base #x70
:method-count-assert 30
:size-assert #xd4
:flag-assert #x1e007000d4
(:state-methods
water-vol-idle
water-vol-startup
)
(:methods
(water-vol-idle () _type_ :state 20)
(water-vol-startup () _type_ :state 21)
(water-vol-method-22 (_type_) none 22)
(reset-root! (_type_) none 23)
(set-stack-size! (_type_) none 24)
(water-vol-method-25 (_type_) none 25)
(update! (_type_) none 26)
(on-exit-water (_type_) none 27)
(get-ripple-height (_type_ vector) float 28)
(init! (_type_) none 29)
(water-vol-method-22 (_type_) none)
(reset-root! (_type_) none)
(set-stack-size! (_type_) none)
(water-vol-method-25 (_type_) none)
(update! (_type_) none)
(on-exit-water (_type_) none)
(get-ripple-height (_type_ vector) float)
(init! (_type_) none)
)
)
+14 -14
View File
@@ -616,12 +616,12 @@
)
)
(defmethod water-control-method-9 water-control ((this water-control))
(defmethod water-control-method-9 ((this water-control))
0
(none)
)
(defmethod water-control-method-10 water-control ((this water-control))
(defmethod water-control-method-10 ((this water-control))
(with-pp
(let ((s5-0 (-> this flags)))
(cond
@@ -967,7 +967,7 @@
)
)
(defmethod start-bobbing! water-control ((this water-control) (arg0 float) (arg1 int) (arg2 int))
(defmethod start-bobbing! ((this water-control) (arg0 float) (arg1 int) (arg2 int))
(activate! (-> this bob) (- arg0) arg1 arg2 0.9 1.0)
0
(none)
@@ -1064,7 +1064,7 @@
(none)
)
(defmethod water-control-method-15 water-control ((this water-control))
(defmethod water-control-method-15 ((this water-control))
(with-pp
(logior! (-> this flags) (water-flags wt09))
(logclear! (-> this flags) (water-flags wt16))
@@ -1094,7 +1094,7 @@
)
)
(defmethod water-control-method-16 water-control ((this water-control))
(defmethod water-control-method-16 ((this water-control))
(logclear! (-> this flags) (water-flags wt09))
(set-zero! (-> this bob))
(if (logtest? (water-flags wt17) (-> this flags))
@@ -1123,7 +1123,7 @@
(none)
)
(defmethod create-splash water-control ((this water-control) (arg0 float) (arg1 vector) (arg2 int) (arg3 vector))
(defmethod create-splash ((this water-control) (arg0 float) (arg1 vector) (arg2 int) (arg3 vector))
(when (and (logtest? (-> this flags) (water-flags wt05)) (logtest? (water-flags wt23) (-> this flags)))
(let ((a1-3 (vector+float*! (new 'stack-no-clear 'vector) arg1 arg3 0.05)))
(set! (-> a1-3 y) (-> this surface-height))
@@ -1134,7 +1134,7 @@
(none)
)
(defmethod on-exit-water water-vol ((this water-vol))
(defmethod on-exit-water ((this water-vol))
(when (handle->process (-> this target))
(let ((v1-7 (-> (the-as target (-> this target process 0)) water)))
(logclear! (-> v1-7 flags) (water-flags wt01 wt02 wt03 wt08 wt17 wt18 wt19 wt20 wt21 wt23 wt24 wt25 wt26))
@@ -1157,7 +1157,7 @@
(none)
)
(defmethod update! water-vol ((this water-vol))
(defmethod update! ((this water-vol))
(cond
((handle->process (-> this target))
(cond
@@ -1248,22 +1248,22 @@
:code anim-loop
)
(defmethod set-stack-size! water-vol ((this water-vol))
(defmethod set-stack-size! ((this water-vol))
(stack-size-set! (-> this main-thread) 128)
(none)
)
(defmethod reset-root! water-vol ((this water-vol))
(defmethod reset-root! ((this water-vol))
(set! (-> this root) (new 'process 'trsqv))
(none)
)
(defmethod water-vol-method-25 water-vol ((this water-vol))
(defmethod water-vol-method-25 ((this water-vol))
0
(none)
)
(defmethod init! water-vol ((this water-vol))
(defmethod init! ((this water-vol))
(local-vars (sv-16 res-tag))
(set! (-> this attack-event) (the-as symbol ((method-of-type res-lump get-property-struct)
(-> this entity)
@@ -1323,7 +1323,7 @@
(none)
)
(defmethod water-vol-method-22 water-vol ((this water-vol))
(defmethod water-vol-method-22 ((this water-vol))
0
(none)
)
@@ -1339,7 +1339,7 @@
(none)
)
(defmethod init-from-entity! water-vol ((this water-vol) (arg0 entity-actor))
(defmethod init-from-entity! ((this water-vol) (arg0 entity-actor))
(set-stack-size! this)
(reset-root! this)
(init! this)
+125 -195
View File
@@ -14,129 +14,98 @@
;; base type for all joint animations
;; note that this refers to an animation for a single joint.
(deftype joint-anim (basic)
((name string :offset-assert 4)
(number int16 :offset-assert 8)
(length int16 :offset-assert 10)
((name string)
(number int16)
(length int16)
)
:method-count-assert 9
:size-assert #xc
:flag-assert #x90000000c
)
;; unused? joint-anims
(deftype joint-anim-matrix (joint-anim)
((data matrix :inline :dynamic :offset 16)
((data matrix :inline :dynamic :offset 16)
)
:method-count-assert 9
:size-assert #x10
:flag-assert #x900000010
)
(deftype joint-anim-transformq (joint-anim)
((data transformq :inline :dynamic :offset 16)
((data transformq :inline :dynamic :offset 16)
)
:method-count-assert 9
:size-assert #x10
:flag-assert #x900000010
)
(deftype joint-anim-drawable (joint-anim)
((data drawable :dynamic :offset-assert 12) ;; guess
((data drawable :dynamic)
)
:method-count-assert 9
:size-assert #xc
:flag-assert #x90000000c
)
;; joint-anim-compressed is the only type of joint-anim actually used.
;; the actual data isn't in here, this is just some metadata
;; again, this refers to a single joint
(deftype joint-anim-compressed (joint-anim)
((data uint32 :dynamic :offset-assert 12) ;; seems to always just be 1 zero.
((data uint32 :dynamic)
)
:method-count-assert 9
:size-assert #xc
:flag-assert #x90000000c
)
;; a single "frame" in an animation, consists of matrices for each joint.
;; unlike the previous types, this is for all of the joints involved in an animation.
(deftype joint-anim-frame (structure)
((matrices matrix 2 :inline :offset-assert 0) ;; everybody has at least 2 matrices
(data matrix :inline :dynamic :offset-assert 128) ;; rest are dynamically sized.
((matrices matrix 2 :inline)
(data matrix :inline :dynamic)
)
:method-count-assert 9
:size-assert #x80
:flag-assert #x900000080
(:methods
(new (symbol type int) _type_ 0)
(new (symbol type int) _type_)
)
)
(defmethod new joint-anim-frame ((allocation symbol) (type-to-make type) (arg0 int))
"Create a new joint-anim-frame with enough room for arg0 matrices"
(let ((v1-1 (max 0 (+ arg0 -2))))
(the-as joint-anim-frame
(new-dynamic-structure
allocation
type-to-make
(the-as int (+ (-> type-to-make size) (the-as uint (* 48 v1-1)))))
)
(the-as
joint-anim-frame
(new-dynamic-structure allocation type-to-make (the-as int (+ (-> type-to-make size) (* 48 v1-1))))
)
)
)
;; compression header - has info used by decompression algorithm
(deftype joint-anim-compressed-hdr (structure)
((control-bits uint32 14 :offset-assert 0)
(num-joints uint32 :offset-assert 56)
(matrix-bits uint32 :offset-assert 60)
((control-bits uint32 14)
(num-joints uint32)
(matrix-bits uint32)
)
:method-count-assert 9
:size-assert #x40
:flag-assert #x900000040
)
;; this has the data needed to initialize the decompressor - I believe this
;; contains the starting poisition of the joints.
(deftype joint-anim-compressed-fixed (structure)
((hdr joint-anim-compressed-hdr :inline :offset-assert 0)
(offset-64 uint32 :offset-assert 64)
(offset-32 uint32 :offset-assert 68)
(offset-16 uint32 :offset-assert 72)
(reserved uint32 :offset-assert 76)
(data vector 133 :inline :offset-assert 80) ;; length here can be shorter!
((hdr joint-anim-compressed-hdr :inline)
(offset-64 uint32)
(offset-32 uint32)
(offset-16 uint32)
(reserved uint32)
(data vector 133 :inline)
)
:method-count-assert 9
:size-assert #x8a0
:flag-assert #x9000008a0
)
;; these are the actual compressed data frames.
;; dynamically sized, depends on the number of joints and the decompression.
(deftype joint-anim-compressed-frame (structure)
((offset-64 uint32 :offset-assert 0)
(offset-32 uint32 :offset-assert 4)
(offset-16 uint32 :offset-assert 8)
(reserved uint32 :offset-assert 12)
(data vector 133 :inline :offset-assert 16) ;; guess
((offset-64 uint32)
(offset-32 uint32)
(offset-16 uint32)
(reserved uint32)
(data vector 133 :inline)
)
:method-count-assert 9
:size-assert #x860
:flag-assert #x900000860
)
;; table of frames
(deftype joint-anim-compressed-control (structure)
((num-frames uint32 :offset-assert 0)
(fixed-qwc uint32 :offset-assert 4)
(frame-qwc uint32 :offset-assert 8)
(fixed joint-anim-compressed-fixed :offset-assert 12)
(data joint-anim-compressed-frame 1 :offset-assert 16) ;; guess
((num-frames uint32)
(fixed-qwc uint32)
(frame-qwc uint32)
(fixed joint-anim-compressed-fixed)
(data joint-anim-compressed-frame 1)
)
:method-count-assert 9
:size-assert #x14
:flag-assert #x900000014
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -147,118 +116,88 @@
;; it can be either a container of arts (art-group) or a single art (art-element)
(declare-type res-lump basic)
(deftype art (basic)
((name string :offset 8)
(length int32 :offset-assert 12)
(extra res-lump :offset-assert 16)
((name string :offset 8)
(length int32)
(extra res-lump)
)
:method-count-assert 13
:size-assert #x14
:flag-assert #xd00000014
(:methods
(login (_type_) _type_ 9)
(lookup-art (_type_ string type) joint 10) ;; art or joint.
(lookup-idx-of-art (_type_ string type) int 11)
(needs-link? (_type_) symbol 12)
(login (_type_) _type_)
(lookup-art (_type_ string type) joint)
(lookup-idx-of-art (_type_ string type) int)
(needs-link? (_type_) symbol)
)
)
;; parent class of all single art things.
(deftype art-element (art)
((pad uint8 12))
:method-count-assert 13
:size-assert #x20
:flag-assert #xd00000020
((pad uint8 12)
)
)
;; unused. all animations use joints/skeletons.
(deftype art-mesh-anim (art-element)
((data basic :dynamic :offset-assert 32))
:method-count-assert 13
:size-assert #x20
:flag-assert #xd00000020
((data basic :dynamic)
)
)
;; joint animation.
(declare-type merc-eye-anim-block structure)
(deftype art-joint-anim (art-element)
;; figured out manually from custom inspect.
((eye-anim-data merc-eye-anim-block :offset 4) ;; guessed on the name here, it's not in the inspect.
(speed float :offset 20)
(artist-base float :offset 24)
(artist-step float :offset 28)
(master-art-group-name string :offset 32)
(master-art-group-index int32 :offset 36)
;; facial animation
(blerc-data (pointer uint8) :offset 40) ;; todo, this is probably something else
;; compressed animation data
(frames joint-anim-compressed-control :offset 44)
;; per-joint info for each joint in the animation.
(data joint-anim-compressed :dynamic)
((eye-anim-data merc-eye-anim-block :offset 4)
(speed float :overlay-at (-> pad 0))
(artist-base float :overlay-at (-> pad 4))
(artist-step float :overlay-at (-> pad 8))
(master-art-group-name string :offset 32)
(master-art-group-index int32 :offset 36)
(blerc-data (pointer uint8) :offset 40)
(frames joint-anim-compressed-control :offset 44)
(data joint-anim-compressed :dynamic)
)
:method-count-assert 13
:size-assert #x30
:flag-assert #xd00000030
)
;; a collection of arts.
;; this is often stored as a -ag file in static level data.
(deftype art-group (art)
((info file-info :offset 4)
(data art-element :dynamic :offset 32)
((info file-info :offset 4)
(data art-element :dynamic :offset 32)
)
:method-count-assert 15
:size-assert #x20
:flag-assert #xf00000020
(:methods
;; linker will call this one when it's loaded
(relocate (_type_ kheap (pointer uint8)) none :replace 7)
(link-art! (_type_) art-group 13)
(unlink-art! (_type_) int 14)
(relocate (_type_ kheap (pointer uint8)) none :replace)
(link-art! (_type_) art-group)
(unlink-art! (_type_) int)
)
)
;; unused
(deftype art-mesh-geo (art-element)
((data basic :dynamic :offset-assert 32)
((data basic :dynamic)
)
:method-count-assert 13
:size-assert #x20
:flag-assert #xd00000020
)
;; unused
(deftype art-joint-geo (art-element)
((data joint :dynamic :offset-assert 32)
((data joint :dynamic)
)
:method-count-assert 13
:size-assert #x20
:flag-assert #xd00000020
)
;; the "skeleton group" is defined in code and tells the engine
;; how to actually use the art from the level data for this object.
(deftype skeleton-group (basic)
((art-group-name string :offset-assert 4)
(jgeo int32 :offset-assert 8)
(janim int32 :offset-assert 12)
(bounds vector :inline :offset-assert 16)
(radius meters :offset 28)
(mgeo int16 4 :offset-assert 32)
(max-lod int32 :offset-assert 40)
(lod-dist float 4 :offset-assert 44)
(longest-edge meters :offset-assert 60)
(texture-level int8 :offset-assert 64)
(version int8 :offset-assert 65)
(shadow int8 :offset-assert 66)
(sort int8 :offset-assert 67)
(_pad uint8 4 :offset-assert 68)
((art-group-name string)
(jgeo int32)
(janim int32)
(bounds vector :inline)
(radius meters :overlay-at (-> bounds w))
(mgeo int16 4)
(max-lod int32)
(lod-dist float 4)
(longest-edge meters)
(texture-level int8)
(version int8)
(shadow int8)
(sort int8)
(_pad uint8 4)
)
:method-count-assert 9
:size-assert #x48
:flag-assert #x900000048
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -271,27 +210,21 @@
;; a merc level of detail
(deftype lod-group (structure)
((geo merc-ctrl :offset-assert 0) ;; the actual geometry to draw
(dist meters :offset-assert 4) ;; the distance from camera for this lod
((geo merc-ctrl)
(dist meters)
)
:pack-me
:method-count-assert 9
:size-assert #x8
:flag-assert #x900000008
)
;; the 4 levels of detail. the max-lod is the index of the highest lod that's actually used.
;; it is the lowest detail.
(deftype lod-set (structure)
((lod lod-group 4 :inline :offset-assert 0)
(max-lod int8 :offset-assert 32)
((lod lod-group 4 :inline)
(max-lod int8)
)
:pack-me
:method-count-assert 10
:size-assert #x21
:flag-assert #xa00000021
(:methods
(setup-lods! (_type_ skeleton-group art-group entity) _type_ 9)
(setup-lods! (_type_ skeleton-group art-group entity) _type_)
)
)
@@ -330,59 +263,56 @@
;; the actual draw-control - this is just a collection of references to all info
;; needed to do drawing.
(deftype draw-control (basic)
((status draw-status :offset-assert 4)
(matrix-type uint8 :offset-assert 5)
(data-format uint8 :offset-assert 6)
(global-effect draw-effect :offset-assert 7)
(art-group art-group :offset-assert 8)
(jgeo art-joint-geo :offset-assert 12)
(mgeo merc-ctrl :offset-assert 16)
(dma-add-func (function process-drawable draw-control symbol object none) :offset-assert 20)
(skeleton skeleton :offset-assert 24) ;; or cspace-array or shadow-control
(lod-set lod-set :inline :offset-assert 28)
(lod lod-group 4 :inline :offset 28)
(max-lod int8 :offset 60)
(force-lod int8 :offset-assert 61)
(cur-lod int8 :offset-assert 62)
(desired-lod int8 :offset-assert 63)
(ripple ripple-control :offset-assert 64)
(longest-edge meters :offset-assert 68)
(longest-edge? uint32 :offset 68)
(light-index uint8 :offset-assert 72)
(dummy uint8 2 :offset-assert 73)
(death-draw-overlap uint8 :offset-assert 75)
(death-timer uint8 :offset-assert 76)
(death-timer-org uint8 :offset-assert 77)
(death-vertex-skip uint16 :offset-assert 78)
(death-effect uint32 :offset-assert 80)
(sink-group dma-foreground-sink-group :offset-assert 84) ;; dma-foreground-sink-group?
(process process :offset-assert 88)
(shadow shadow-geo :offset-assert 92)
(shadow-ctrl shadow-control :offset-assert 96)
(origin vector :inline :offset-assert 112)
(bounds vector :inline :offset-assert 128)
(radius meters :offset 140)
(color-mult rgbaf :inline :offset-assert 144)
(color-emissive rgbaf :inline :offset-assert 160)
(secondary-interp float :offset-assert 176)
(current-secondary-interp float :offset-assert 180)
(shadow-mask uint8 :offset-assert 184)
(level-index uint8 :offset-assert 185)
(origin-joint-index uint8 :offset-assert 186)
(shadow-joint-index uint8 :offset-assert 187)
((status draw-status)
(matrix-type uint8)
(data-format uint8)
(global-effect draw-effect)
(art-group art-group)
(jgeo art-joint-geo)
(mgeo merc-ctrl)
(dma-add-func (function process-drawable draw-control symbol object none))
(skeleton skeleton)
(lod-set lod-set :inline)
(lod lod-group 4 :inline :overlay-at (-> lod-set lod 0))
(max-lod int8 :overlay-at (-> lod-set max-lod))
(force-lod int8)
(cur-lod int8)
(desired-lod int8)
(ripple ripple-control)
(longest-edge meters)
(longest-edge? uint32 :overlay-at longest-edge)
(light-index uint8)
(dummy uint8 2)
(death-draw-overlap uint8)
(death-timer uint8)
(death-timer-org uint8)
(death-vertex-skip uint16)
(death-effect uint32)
(sink-group dma-foreground-sink-group)
(process process)
(shadow shadow-geo)
(shadow-ctrl shadow-control)
(origin vector :inline)
(bounds vector :inline)
(radius meters :overlay-at (-> bounds w))
(color-mult rgbaf :inline)
(color-emissive rgbaf :inline)
(secondary-interp float)
(current-secondary-interp float)
(shadow-mask uint8)
(level-index uint8)
(origin-joint-index uint8)
(shadow-joint-index uint8)
)
:method-count-assert 12
:size-assert #xbc
:flag-assert #xc000000bc
(:methods
(new (symbol type process art-joint-geo) _type_ 0)
(get-skeleton-origin (_type_) vector 9)
(lod-set! (_type_ int) none 10)
(lods-assign! (_type_ lod-set) none 11)
(new (symbol type process art-joint-geo) _type_)
(get-skeleton-origin (_type_) vector)
(lod-set! (_type_ int) none)
(lods-assign! (_type_ lod-set) none)
)
)
(defmethod get-skeleton-origin draw-control ((this draw-control))
(defmethod get-skeleton-origin ((this draw-control))
"Get the origin of the skeleton. Must have up-to-date bones."
(-> this skeleton bones 0 position)
)
+92 -117
View File
@@ -33,61 +33,52 @@
(declare-file (debug))
(deftype list-control (structure)
((listfunc (function int list-control symbol) :offset-assert 0)
(list-owner uint32 :offset-assert 4)
(top int32 :offset-assert 8)
(left int32 :offset-assert 12)
(list glst-list :offset-assert 16)
(the-node glst-node :offset-assert 20)
(top-index int32 :offset-assert 24)
(the-index int32 :offset-assert 28)
(the-disp-line int32 :offset-assert 32)
(highlight-index int32 :offset-assert 36)
(current-index int32 :offset-assert 40)
(numlines int32 :offset-assert 44)
(lines-to-disp int32 :offset-assert 48)
(charswide int32 :offset-assert 52)
(highlight-disp-line int32 :offset-assert 56)
(field-id int32 :offset-assert 60)
(xpos int32 :offset-assert 64)
(ypos int32 :offset-assert 68)
(user-info int32 :offset-assert 72)
(user-info-u uint32 :offset 72)
(return-int int32 :offset-assert 76)
((listfunc (function int list-control symbol))
(list-owner uint32)
(top int32)
(left int32)
(list glst-list)
(the-node glst-node)
(top-index int32)
(the-index int32)
(the-disp-line int32)
(highlight-index int32)
(current-index int32)
(numlines int32)
(lines-to-disp int32)
(charswide int32)
(highlight-disp-line int32)
(field-id int32)
(xpos int32)
(ypos int32)
(user-info int32)
(user-info-u uint32 :overlay-at user-info)
(return-int int32)
)
:allow-misaligned
:method-count-assert 9
:size-assert #x50
:flag-assert #x900000050
)
(deftype list-field (structure)
((left int32 :offset-assert 0)
(width int32 :offset-assert 4)
((left int32)
(width int32)
)
:method-count-assert 9
:size-assert #x8
:flag-assert #x900000008
)
(deftype DISP_LIST-bank (basic)
((TV_SPACING int32 :offset-assert 4)
(BORDER_WIDTH int32 :offset-assert 8)
(BORDER_HEIGHT int32 :offset-assert 12)
(MAX_LINES int32 :offset-assert 16)
(CHAR_WIDTH int32 :offset-assert 20)
(INC_DELAY int32 :offset-assert 24)
(BORDER_LINES int32 :offset-assert 28)
(CXOFF int32 :offset-assert 32)
(CYOFF int32 :offset-assert 36)
(BXOFF int32 :offset-assert 40)
(BYOFF int32 :offset-assert 44)
((TV_SPACING int32)
(BORDER_WIDTH int32)
(BORDER_HEIGHT int32)
(MAX_LINES int32)
(CHAR_WIDTH int32)
(INC_DELAY int32)
(BORDER_LINES int32)
(CXOFF int32)
(CYOFF int32)
(BXOFF int32)
(BYOFF int32)
)
:method-count-assert 9
:size-assert #x30
:flag-assert #x900000030
)
@@ -357,26 +348,23 @@
)
(deftype anim-tester-bank (basic)
((ANIM_SPEED float :offset-assert 4)
(BLEND float :offset-assert 8)
(OBJECT_LIST_X int32 :offset-assert 12)
(OBJECT_LIST_Y int32 :offset-assert 16)
(OBJECT_LIST_MIN_WIDTH int32 :offset-assert 20)
(ANIM_LIST_X int32 :offset-assert 24)
(ANIM_LIST_Y int32 :offset-assert 28)
(ANIM_LIST_MIN_WIDTH int32 :offset-assert 32)
(PICK_LIST_X int32 :offset-assert 36)
(PICK_LIST_Y int32 :offset-assert 40)
(PICK_LIST_MIN_WIDTH int32 :offset-assert 44)
(EDIT_LIST_X int32 :offset-assert 48)
(EDIT_LIST_Y int32 :offset-assert 52)
(EDIT_STATS_X int32 :offset-assert 56)
(EDIT_LIST_MIN_WIDTH int32 :offset-assert 60)
(EDIT_PICK_X int32 :offset-assert 64)
((ANIM_SPEED float)
(BLEND float)
(OBJECT_LIST_X int32)
(OBJECT_LIST_Y int32)
(OBJECT_LIST_MIN_WIDTH int32)
(ANIM_LIST_X int32)
(ANIM_LIST_Y int32)
(ANIM_LIST_MIN_WIDTH int32)
(PICK_LIST_X int32)
(PICK_LIST_Y int32)
(PICK_LIST_MIN_WIDTH int32)
(EDIT_LIST_X int32)
(EDIT_LIST_Y int32)
(EDIT_STATS_X int32)
(EDIT_LIST_MIN_WIDTH int32)
(EDIT_PICK_X int32)
)
:method-count-assert 9
:size-assert #x44
:flag-assert #x900000044
)
@@ -401,26 +389,22 @@
)
(deftype anim-tester (process-drawable)
((flags anim-tester-flags :offset-assert 176)
(obj-list glst-list :inline :offset-assert 180)
(current-obj string :offset-assert 196)
(speed int32 :offset-assert 200)
(list-con list-control :inline :offset-assert 204)
(pick-con list-control :inline :offset-assert 284)
(item-field int64 :offset-assert 368)
(inc-delay int32 :offset-assert 376)
(inc-timer int32 :offset-assert 380)
(edit-mode int32 :offset-assert 384)
(old-mode int32 :offset-assert 388)
(anim-speed float :offset-assert 392)
(anim-gspeed float :offset-assert 396)
(anim-first float :offset-assert 400)
(anim-last float :offset-assert 404)
((flags anim-tester-flags)
(obj-list glst-list :inline)
(current-obj string)
(speed int32)
(list-con list-control :inline)
(pick-con list-control :inline)
(item-field int64)
(inc-delay int32)
(inc-timer int32)
(edit-mode int32)
(old-mode int32)
(anim-speed float)
(anim-gspeed float)
(anim-first float)
(anim-last float)
)
:heap-base #x130
:method-count-assert 20
:size-assert #x198
:flag-assert #x1401300198
(:states
anim-tester-process
)
@@ -445,23 +429,20 @@
(define-perm *anim-tester* (pointer anim-tester) #f)
(deftype anim-test-obj (glst-named-node)
((obj-art-group art-group :offset-assert 12)
(seq-list glst-list :inline :offset-assert 16)
(flags int32 :offset-assert 32)
(mesh-geo merc-ctrl :offset-assert 36)
(joint-geo art-joint-geo :offset-assert 40)
(list-con list-control :inline :offset-assert 44)
(parent uint32 :offset-assert 124)
(anim-index int32 :offset-assert 128)
(anim-hindex int32 :offset-assert 132)
(seq-index int32 :offset-assert 136)
(seq-hindex int32 :offset-assert 140)
((obj-art-group art-group)
(seq-list glst-list :inline)
(flags int32)
(mesh-geo merc-ctrl)
(joint-geo art-joint-geo)
(list-con list-control :inline)
(parent uint32)
(anim-index int32)
(anim-hindex int32)
(seq-index int32)
(seq-hindex int32)
)
:method-count-assert 9
:size-assert #x90
:flag-assert #x900000090
(:methods
(new (symbol type int string basic) _type_ 0)
(new (symbol type int string basic) _type_)
)
)
@@ -499,17 +480,14 @@
)
(deftype anim-test-sequence (glst-named-node)
((item-list glst-list :inline :offset-assert 12)
(playing-item int32 :offset-assert 28)
(flags int32 :offset-assert 32)
(list-con list-control :inline :offset-assert 36)
(parent anim-test-obj :offset-assert 116)
((item-list glst-list :inline)
(playing-item int32)
(flags int32)
(list-con list-control :inline)
(parent anim-test-obj)
)
:method-count-assert 9
:size-assert #x78
:flag-assert #x900000078
(:methods
(new (symbol type int string) _type_ 0)
(new (symbol type int string) _type_)
)
)
@@ -538,20 +516,17 @@
)
(deftype anim-test-seq-item (glst-named-node)
((speed int32 :offset-assert 12)
(blend int32 :offset-assert 16)
(first-frame float :offset-assert 20)
(last-frame float :offset-assert 24)
(num-frames float :offset-assert 28)
(artist-base float :offset-assert 32)
(flags int32 :offset-assert 36)
(parent anim-test-sequence :offset-assert 40)
((speed int32)
(blend int32)
(first-frame float)
(last-frame float)
(num-frames float)
(artist-base float)
(flags int32)
(parent anim-test-sequence)
)
:method-count-assert 9
:size-assert #x2c
:flag-assert #x90000002c
(:methods
(new (symbol type int string) _type_ 0)
(new (symbol type int string) _type_)
)
)
+8 -11
View File
@@ -8,30 +8,27 @@
;; DECOMP BEGINS
(deftype __assert-info-private-struct (structure)
((filename string :offset-assert 0)
(line-num uint16 :offset-assert 4)
(column-num uint16 :offset-assert 6)
((filename string)
(line-num uint16)
(column-num uint16)
)
:method-count-assert 11
:size-assert #x8
:flag-assert #xb00000008
(:methods
(set-pos (_type_ string uint uint) int 9)
(print-pos (_type_) int 10)
(set-pos (_type_ string uint uint) int)
(print-pos (_type_) int)
)
)
(defmethod set-pos __assert-info-private-struct ((this __assert-info-private-struct) (filename string) (line-num uint) (column-num uint))
(defmethod set-pos ((this __assert-info-private-struct) (filename string) (line-num uint) (column-num uint))
(set! (-> this filename) filename)
(set! (-> this line-num) line-num)
(set! (-> this column-num) column-num)
0
)
(defmethod print-pos __assert-info-private-struct ((this __assert-info-private-struct))
(defmethod print-pos ((this __assert-info-private-struct))
(format #t "file ~S.gc, line ~D, col ~D.~%" (-> this filename) (-> this line-num) (-> this column-num))
0
)
(define *__private-assert-info* (new 'static '__assert-info-private-struct))
+11 -21
View File
@@ -19,36 +19,26 @@
;; circular buffer of positions to draw.
(deftype pos-history (structure)
((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)
((points (inline-array vector))
(num-points int32)
(h-first int32)
(h-last int32)
)
:method-count-assert 9
:size-assert #x10
:flag-assert #x900000010
)
;; unused vertex type?
(deftype debug-vertex (structure)
((trans vector4w :inline :offset-assert 0)
(normal vector3h :inline :offset-assert 16)
(st vector2h :inline :offset-assert 22)
(color uint32 :offset-assert 28)
((trans vector4w :inline)
(normal vector3h :inline)
(st vector2h :inline)
(color uint32)
)
:method-count-assert 9
:size-assert #x20
:flag-assert #x900000020
)
;; buffer of debug vertices (unused?)
(deftype debug-vertex-stats (basic)
((length int32 :offset-assert 4)
(pos-count int32 :offset-assert 8)
(vertex debug-vertex 600 :inline :offset-assert 16)
((length int32)
(pos-count int32)
(vertex debug-vertex 600 :inline)
)
:method-count-assert 9
:size-assert #x4b10
:flag-assert #x900004b10
)
+5 -6
View File
@@ -12,13 +12,11 @@
;; DECOMP BEGINS
(deftype debug-sphere-table (basic)
((point vector 300 :inline :offset-assert 16)
((point vector 300 :inline)
)
:method-count-assert 9
:size-assert #x12d0
:flag-assert #x9000012d0
)
(defun make-debug-sphere-table ((arg0 debug-sphere-table))
(local-vars (sv-80 int))
(let ((s5-0 (new-stack-vector0))
@@ -88,10 +86,11 @@
(.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 (the rgba -1))
(add-debug-line #t arg0 s4-0 s2-0 arg3 #f (the rgba -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))
)
)
0
(none)
)
)
+17 -25
View File
@@ -307,41 +307,33 @@
(when *debug-segment*
(deftype debug-line (structure)
((flags int32 :offset-assert 0)
(bucket bucket-id :offset-assert 4)
(v1 vector :inline :offset-assert 16)
(v2 vector :inline :offset-assert 32)
(color rgba :offset-assert 48)
(mode symbol :offset-assert 52)
(color2 rgba :offset-assert 56)
((flags int32)
(bucket bucket-id)
(v1 vector :inline)
(v2 vector :inline)
(color rgba)
(mode symbol)
(color2 rgba)
)
:method-count-assert 9
:size-assert #x3c
:flag-assert #x90000003c
)
(deftype debug-text-3d (structure)
((flags int32 :offset-assert 0)
(bucket bucket-id :offset-assert 4)
(pos vector :inline :offset-assert 16)
(color font-color :offset-assert 32)
(offset vector2h :inline :offset-assert 40)
(str string :offset-assert 44)
((flags int32)
(bucket bucket-id)
(pos vector :inline)
(color font-color)
(offset vector2h :inline)
(str string)
)
:method-count-assert 9
:size-assert #x30
:flag-assert #x900000030
)
(deftype debug-tracking-thang (basic)
((length int32 :offset-assert 4)
(allocated-length int32 :offset-assert 8)
((length int32)
(allocated-length int32)
)
:method-count-assert 9
:size-assert #xc
:flag-assert #x90000000c
)
;; allocate debug draw buffers
+10 -16
View File
@@ -20,29 +20,23 @@
;; Information for a single category.
(deftype memory-usage-info (structure)
((name string :offset-assert 0)
(count int32 :offset-assert 4) ;; meaning depends on category. For textures, it's the number of textures, for example.
(used int32 :offset-assert 8) ;; how much memory is in use (not counting padding)
(total int32 :offset-assert 12) ;; actual total memory used, including padding to 16-bytes, etc.
((name string)
(count int32)
(used int32)
(total int32)
)
:method-count-assert 9
:size-assert #x10
:flag-assert #x900000010
)
;; Memory info for all categories
(deftype memory-usage-block (basic)
((work-bsp basic :offset-assert 4)
(length int32 :offset-assert 8)
(data memory-usage-info 109 :inline :offset-assert 16)
((work-bsp basic)
(length int32)
(data memory-usage-info 109 :inline)
)
:method-count-assert 12
:size-assert #x6e0
:flag-assert #xc000006e0
(:methods
(reset! (_type_) _type_ 9)
(calculate-total (_type_) int 10)
(print-mem-usage (_type_ level object) none 11)
(reset! (_type_) _type_)
(calculate-total (_type_) int)
(print-mem-usage (_type_ level object) none)
)
)
+8 -9
View File
@@ -11,7 +11,7 @@
(declare-file (debug))
(defmethod inspect memory-usage-block ((this memory-usage-block))
(defmethod inspect ((this memory-usage-block))
"Print the memory-usage by category. This is a large print."
(format #t "-------------------------------------------------------------~%")
(format #t " # name count bytes used aligned bytes~%")
@@ -38,7 +38,7 @@
this
)
(defmethod mem-usage object ((this object) (arg0 memory-usage-block) (arg1 int))
(defmethod mem-usage ((this object) (arg0 memory-usage-block) (arg1 int))
"Most general mem-usage message. Just prints a warning, in case you expect this to do something."
(if this
(format #t "WARNING: mem-usage called on object, probably not what was wanted for ~A~%" this)
@@ -46,7 +46,7 @@
this
)
(defmethod calculate-total memory-usage-block ((this memory-usage-block))
(defmethod calculate-total ((this memory-usage-block))
"Compute the total memory usage of everything in the block."
(let ((v0-0 0))
(dotimes (v1-0 (-> this length))
@@ -56,7 +56,7 @@
)
)
(defmethod reset! memory-usage-block ((this memory-usage-block))
(defmethod reset! ((this memory-usage-block))
"Reset all memory stats to 0."
(set! (-> this length) 0)
(dotimes (v1-0 109)
@@ -78,8 +78,8 @@
)
)
(defmethod compute-memory-usage level ((this level) (arg0 object))
"Compute the memory usage of a level. Arg0 will force a recalculation."
(defmethod compute-memory-usage ((this level) (arg0 object))
"Compute the memory usage of a level. arg0 will force a recalculation."
(if (zero? (-> this mem-usage-block))
(set! (-> this mem-usage-block) (new 'debug 'memory-usage-block))
)
@@ -91,7 +91,7 @@
(-> this mem-usage-block)
)
(defmethod mem-usage process-tree ((this process-tree) (arg0 memory-usage-block) (arg1 int))
(defmethod mem-usage ((this process-tree) (arg0 memory-usage-block) (arg1 int))
"Compute the memory usage of a process tree."
(let ((v1-0 87))
(let* ((a0-1 *dead-pool-list*)
@@ -306,8 +306,7 @@
;; the max dma ever (excluding debug)
(define *max-dma* 0)
(defmethod print-mem-usage memory-usage-block ((this memory-usage-block) (arg0 level) (arg1 object))
(defmethod print-mem-usage ((this memory-usage-block) (arg0 level) (arg1 object))
"Print memory usage. Uses a foramt that will fit on screen."
;; print header (same in normal and compact mode)
File diff suppressed because it is too large Load Diff
+4 -7
View File
@@ -17,20 +17,17 @@
(defpartgroup group-part-tester :id 105 :bounds (static-bspherem 0 0 0 1) :parts ((sp-item 56) (sp-item 57)))
(deftype part-tester (process)
((root trsqv :offset-assert 112)
(part sparticle-launch-control :offset-assert 116)
(old-group sparticle-launch-group :offset-assert 120)
((root trsqv)
(part sparticle-launch-control)
(old-group sparticle-launch-group)
)
:heap-base #x100
:method-count-assert 14
:size-assert #x7c
:flag-assert #xe0100007c
)
(define-extern *part-tester* part-tester)
(define *part-tester-name* (the-as string #f))
(defmethod deactivate part-tester ((this part-tester))
(defmethod deactivate ((this part-tester))
(if (nonzero? (-> this part))
(kill-and-free-particles (-> this part))
)
+39 -48
View File
@@ -8,71 +8,59 @@
;; DECOMP BEGINS
(deftype tr-stat (structure)
((groups uint16 :offset-assert 0)
(fragments uint16 :offset-assert 2)
(tris uint32 :offset-assert 4)
(dverts uint32 :offset-assert 8)
(instances uint16 :offset-assert 12)
(pad uint16 :offset-assert 14)
((groups uint16)
(fragments uint16)
(tris uint32)
(dverts uint32)
(instances uint16)
(pad uint16)
)
:method-count-assert 9
:size-assert #x10
:flag-assert #x900000010
)
(deftype merc-global-stats (structure)
((merc tr-stat :inline :offset-assert 0)
(mercneric tr-stat :inline :offset-assert 16)
((merc tr-stat :inline)
(mercneric tr-stat :inline)
)
:method-count-assert 9
:size-assert #x20
:flag-assert #x900000020
)
(deftype perf-stat (structure)
((frame-number uint32 :offset-assert 0)
(count uint32 :offset-assert 4)
(cycles uint32 :offset-assert 8)
(instructions uint32 :offset-assert 12)
(icache uint32 :offset-assert 16)
(dcache uint32 :offset-assert 20)
(select uint32 :offset-assert 24)
(ctrl uint32 :offset-assert 28)
(accum0 uint32 :offset-assert 32)
(accum1 uint32 :offset-assert 36)
(to-vu0-waits uint32 :offset-assert 40)
(to-spr-waits uint32 :offset-assert 44)
(from-spr-waits uint32 :offset-assert 48)
((frame-number uint32)
(count uint32)
(cycles uint32)
(instructions uint32)
(icache uint32)
(dcache uint32)
(select uint32)
(ctrl uint32)
(accum0 uint32)
(accum1 uint32)
(to-vu0-waits uint32)
(to-spr-waits uint32)
(from-spr-waits uint32)
)
:pack-me
:method-count-assert 14
:size-assert #x34
:flag-assert #xe00000034
(:methods
(perf-stat-method-9 (_type_) none 9)
(print-to-stream (_type_ string basic) none 10)
(reset! (_type_) none 11)
(read! (_type_) none 12)
(update-wait-stats (_type_ uint uint uint) none 13)
(perf-stat-method-9 (_type_) none)
(print-to-stream (_type_ string basic) none)
(reset! (_type_) none)
(read! (_type_) none)
(update-wait-stats (_type_ uint uint uint) none)
)
)
(deftype perf-stat-array (inline-array-class)
((data perf-stat :inline :dynamic :offset-assert 16)
((data perf-stat :inline :dynamic)
)
:method-count-assert 9
:size-assert #x10
:flag-assert #x900000010
)
(set! (-> perf-stat-array heap-base) (the-as uint 52))
(define *pc-perf-stat-counter* (the-as uint 0))
(defmethod reset! perf-stat ((this perf-stat))
(defmethod reset! ((this perf-stat))
"Perfomance counters are partially implemented, they just count cycles."
(+! (-> this count) 1)
(when (nonzero? (-> this ctrl))
@@ -81,12 +69,12 @@
#|
(let ((v1-0 (-> this ctrl)))
(+! (-> this count) 1)
(b! (zero? v1-0) cfg-2)
(.mtc0 Perf r0-0)
(b! (zero? v1-0) cfg-2 :delay (nop!))
(.mtc0 Perf 0)
(.sync.l)
(.sync.p)
(.mtpc pcr0 r0-0)
(.mtpc pcr1 r0-0)
(.mtpc pcr0 0)
(.mtpc pcr1 0)
(.sync.l)
(.sync.p)
(.mtc0 Perf v1-0)
@@ -95,10 +83,11 @@
(.sync.p)
(label cfg-2)
|#
0
(none)
)
(defmethod read! perf-stat ((this perf-stat))
(defmethod read! ((this perf-stat))
"Perfomance counters are partially implemented, they just count cycles."
(when (nonzero? (-> this ctrl))
(+! (-> this accum0) (- (get-cpu-clock) *pc-perf-stat-counter*))
@@ -106,8 +95,9 @@
)
#|
(b! (zero? (-> this ctrl)) cfg-2)
(.mtc0 Perf r0-0)
(local-vars (v1-1 int) (v1-3 int))
(b! (zero? (-> this ctrl)) cfg-2 :delay (nop!))
(.mtc0 Perf 0)
(.sync.l)
(.sync.p)
(.mfpc v1-1 pcr0)
@@ -116,10 +106,11 @@
(+! (-> this accum1) v1-3)
(label cfg-2)
|#
0
(none)
)
(defmethod update-wait-stats perf-stat ((this perf-stat) (arg0 uint) (arg1 uint) (arg2 uint))
(defmethod update-wait-stats ((this perf-stat) (arg0 uint) (arg1 uint) (arg2 uint))
(when (nonzero? (-> this ctrl))
(+! (-> this to-vu0-waits) arg0)
(+! (-> this to-spr-waits) arg1)
+3 -6
View File
@@ -14,17 +14,14 @@
)
(deftype viewer (process-drawable)
((janim art-joint-anim :offset-assert 176)
((janim art-joint-anim)
)
:heap-base #x50
:method-count-assert 20
:size-assert #xb4
:flag-assert #x14005000b4
(:states
viewer-process
)
)
(define-extern *viewer* viewer)
(defstate viewer-process (viewer)
@@ -172,7 +169,7 @@
)
)
(defmethod init-from-entity! viewer ((this viewer) (arg0 entity-actor))
(defmethod init-from-entity! ((this viewer) (arg0 entity-actor))
(set! *viewer* this)
(set! (-> this root) (new 'process 'trsqv))
(process-drawable-from-entity! this arg0)
+36 -61
View File
@@ -31,38 +31,30 @@
;; Most DMA stuff goes directly to the VIF, so this is the
;; most common.
(deftype dma-packet (structure)
((dma dma-tag :offset-assert 0)
(vif0 vif-tag :offset-assert 8)
(vif1 vif-tag :offset-assert 12) ;; doesn't have to be a vif tag.
(quad uint128 :offset 0)
((dma dma-tag)
(vif0 vif-tag)
(vif1 vif-tag)
(quad uint128 :overlay-at dma)
)
:method-count-assert 9
:size-assert #x10
:flag-assert #x900000010
)
;; seems to be unused? Also, it seems to be broken. Do not use this.
(deftype dma-packet-array (inline-array-class)
()
:method-count-assert 9
:size-assert #x10
:flag-assert #x900000010
)
(set! (-> dma-packet-array heap-base) 16)
(set! (-> dma-packet-array heap-base) (the-as uint 16))
;; For doing a dma -> vif -> gif (path 2) transfer.
(deftype dma-gif-packet (structure)
((dma-vif dma-packet :inline :offset-assert 0)
(gif uint64 2 :offset-assert 16) ;; guess
((dma-vif dma-packet :inline)
(gif uint64 2)
;; these two were added to make it easier.
(gif0 uint64 :offset 16)
(gif1 uint64 :offset 24)
(quad uint128 2 :offset 0)
(gif0 uint64 :overlay-at (-> gif 0))
(gif1 uint64 :overlay-at (-> gif 1))
(quad uint128 2 :overlay-at (-> dma-vif dma))
)
:method-count-assert 9
:size-assert #x20
:flag-assert #x900000020
)
;; dma-buffer is a dynamically sized container for storing DMA data.
@@ -70,62 +62,55 @@
;; I added a data-buffer field that overlaps with data to get at the array of
;; bytes more easily.
(deftype dma-buffer (basic)
((allocated-length int32 :offset-assert 4) ;; number of bytes.
(base pointer :offset-assert 8) ;; first unused memory.
(end pointer :offset-assert 12) ;; ?? unused ??
(data uint64 1 :offset-assert 16) ;; start of memory.
(data-buffer uint8 :dynamic :offset 16) ;; the actual dynamic array backing it.
((allocated-length int32) ;; number of bytes.
(base pointer) ;; first unused memory.
(end pointer) ;; ?? unused ??
(data uint64 1) ;; start of memory.
(data-buffer uint8 :dynamic :overlay-at (-> data 0)) ;; the actual dynamic array backing it.
)
(:methods
(new (symbol type int) _type_ 0)
)
:method-count-assert 9
:size-assert #x18
:flag-assert #x900000018
(new (symbol type int) _type_)
)
)
(defmethod new dma-buffer ((allocation symbol) (type-to-make type) (arg0 int))
"Create a new dma-buffer with enough room to store arg0 bytes.
Note that this does not set the end field."
(let ((v0-0 (object-new allocation type-to-make
(+ (+ arg0 -4) (the-as int (-> type-to-make size)))
)
)
)
(let ((v0-0 (object-new allocation type-to-make (+ arg0 -4 (-> type-to-make size)))))
(set! (-> v0-0 base) (-> v0-0 data))
(set! (-> v0-0 allocated-length) arg0)
v0-0
)
)
(defun dma-buffer-inplace-new ((this dma-buffer) (size int))
(defun dma-buffer-inplace-new ((arg0 dma-buffer) (arg1 int))
"Create a dma-buffer in-place. Does not set the type of the dma-buffer object."
(set! (-> this base) (-> this data))
(set! (-> this allocated-length) size)
this
(set! (-> arg0 base) (-> arg0 data))
(set! (-> arg0 allocated-length) arg1)
arg0
)
(defmethod length dma-buffer ((this dma-buffer))
(defmethod length ((this dma-buffer))
"Get the amount of data the buffer can hold, in bytes."
(-> this allocated-length)
)
(defmethod asize-of dma-buffer ((this dma-buffer))
(defmethod asize-of ((this dma-buffer))
"Get the size in memory of the object"
(+ (+ (-> this allocated-length) -4) (the-as int (-> dma-buffer size)))
(+ (-> this allocated-length) -4 (-> dma-buffer size))
)
(defun dma-buffer-length ((arg0 dma-buffer))
"Get length used in quadwords, rounded down"
(shr (+ (&- (-> arg0 base) (-> arg0 data)) 15) 4)
(shr (+ (&- (-> arg0 base) (the-as uint (-> arg0 data))) 15) 4)
)
(defun dma-buffer-free ((arg0 dma-buffer))
"Get the number of free quadwords, rounded down, between base and end pointers."
(shr (+ (&- (-> arg0 end) (-> arg0 base)) 15) 4)
(shr (+ (&- (-> arg0 end) (the-as uint (-> arg0 base))) 15) 4)
)
(defmacro dma-buffer-add-base-type (buf pkt dma-type &rest body)
"Base macro for adding stuff to a dma-buffer. Don't use this directly!"
@@ -157,7 +142,6 @@
)
)
(defmacro dma-buffer-add-cnt-vif2 (buf qwc vif0 vif1)
"Add a dma-packet to a dma-buffer.
The packet is made up of a 'cnt' DMAtag (transfer qwc qwords of data after the tag and continue from after that point)
@@ -256,9 +240,9 @@
(new 'static 'vif-tag :cmd (vif-cmd mpg) :num (shl qwc-now 1) :imm origin)
)
;; increment by qwc-now quadwords.
(&+! func-ptr (shl qwc-now 4))
(&+! func-ptr (* qwc-now 16))
(set! qlen (- qlen qwc-now))
(+! origin (shl qwc-now 1))
(+! origin (* qwc-now 2))
)
)
)
@@ -268,29 +252,20 @@
(defun dma-buffer-send ((chan dma-bank) (buf dma-buffer))
"Send the DMA buffer! DOES NOT TRANSFER TAG, you probably want dma-buffer-send-chain instead."
(when (< (-> buf allocated-length)
(&- (-> buf base) (-> buf data))
)
(when (< (-> buf allocated-length) (&- (-> buf base) (-> buf data)))
;; oops. we overflowed the DMA buffer. die.
(segfault)
)
(dma-send chan
(the-as uint (-> buf data))
(the-as uint (dma-buffer-length buf))
)
(dma-send chan (the-as uint (-> buf data)) (the-as uint (dma-buffer-length buf)))
)
(defun dma-buffer-send-chain ((chan dma-bank-source) (buf dma-buffer))
"Send the DMA buffer! Sends the tags"
(when (< (-> buf allocated-length)
(&- (-> buf base) (-> buf data))
)
(when (< (-> buf allocated-length) (&- (-> buf base) (-> buf data)))
;; oops. we overflowed the DMA buffer. die.
(segfault)
)
(dma-send-chain chan
(the-as uint (-> buf data))
)
(dma-send-chain chan (the-as uint (-> buf data)))
)
(defmacro dma-buffer-add-gs-set-flusha (buf &rest reg-list)
+6 -9
View File
@@ -13,16 +13,13 @@
(declare-file (debug))
(deftype vif-disasm-element (structure)
((mask uint32 :offset-assert 0)
(tag vif-cmd-32 :offset-assert 4)
(val uint32 :offset-assert 8)
(print uint32 :offset-assert 12)
(string1 string :offset-assert 16)
(string2 string :offset-assert 20)
((mask uint32)
(tag vif-cmd-32)
(val uint32)
(print uint32)
(string1 string)
(string2 string)
)
:method-count-assert 9
:size-assert #x18
:flag-assert #x900000018
)
(define *vif-disasm-table*
+8 -47
View File
@@ -37,9 +37,6 @@
(str uint8 :offset 8 :size 1) ;; start!
(tag uint16 :offset 16)
)
:method-count-assert 9
:size-assert #x4
:flag-assert #x900000004
)
(defmethod inspect dma-chcr ((obj dma-chcr))
@@ -60,18 +57,12 @@
(madr uint32 :offset 16) ;; memory address
(qwc uint32 :offset 32) ;; quadword count
)
:method-count-assert 9
:size-assert #x24
:flag-assert #x900000024
)
;; DMA register layout for channels supporting source-chain
(deftype dma-bank-source (dma-bank)
((tadr uint32 :offset 48) ;; tag address
)
:method-count-assert 9
:size-assert #x34
:flag-assert #x900000034
)
;; The DMA source chain supports a two-entry "call stack" of tags.
@@ -80,9 +71,6 @@
((as0 uint32 :offset 64) ;; pushed tag register
(as1 uint32 :offset 80) ;; pushed tag register
)
:method-count-assert 9
:size-assert #x54
:flag-assert #x900000054
)
;; The toSPR and fromSPR DMA channels require a second address in the scratchpad.
@@ -90,9 +78,6 @@
(deftype dma-bank-spr (dma-bank-source)
((sadr uint32 :offset 128) ;; spad address.
)
:method-count-assert 9
:size-assert #x84
:flag-assert #x900000084
)
;; These addresses are the location of DMA banks for each channel.
@@ -120,15 +105,11 @@
(std uint8 :offset 6 :size 2)
(rcyc uint8 :offset 8 :size 3)
)
:method-count-assert 9
:size-assert #x4
:flag-assert #x900000004
)
;; D_ENABLEW, D_ENABLER?
(deftype dma-enable (uint32)
((cpnd uint8 :offset 16 :size 1))
:flag-assert #x900000004
)
;; D_SQWC
@@ -136,7 +117,6 @@
((sqwc uint8 :offset 0 :size 8)
(tqwc uint8 :offset 16 :size 8)
)
:flag-assert #x900000004
)
;; Shared DMA control registers.
@@ -151,29 +131,22 @@
(enabler uint32 :offset 5408)
(enablew uint32 :offset 5520)
)
:method-count-assert 9
:size-assert #x1594
:flag-assert #x900001594
)
(defconstant DMA_CONTROL_BANK (the dma-bank-control (get-vm-ptr #x1000e000)))
;; Seems to be unused. The vu-function type is used instead.
(deftype vu-code-block (basic)
((name basic :offset-assert 4)
(code uint32 :offset-assert 8)
(size int32 :offset-assert 12)
(dest-address uint32 :offset-assert 16)
((name basic)
(code uint32)
(size int32)
(dest-address uint32)
)
:method-count-assert 9
:size-assert #x14
:flag-assert #x900000014
)
;; ?? not sure what this is.
(deftype vu-stat (uint64)
()
:flag-assert #x900000008
)
@@ -201,9 +174,6 @@
(addr uint32 :offset 32 :size 31) ;; address (31 bits)
(spr uint8 :offset 63 :size 1) ;; spr or not flag.
)
:method-count-assert 9
:size-assert #x8
:flag-assert #x900000008
)
@@ -312,14 +282,11 @@
;; the addr field of their tag should point to the next bucket.
;; This is not a PS2 hardware thing
(deftype dma-bucket (structure)
((tag dma-tag :offset-assert 0) ;; the DMA tag to transfer the bucket's data
(last (pointer dma-tag) :offset-assert 8) ;; the last tag of this bucket.
(dummy uint32 :offset-assert 12) ;; empty space.
(next uint32 :offset 4) ;; this overlaps with the addr bit-field of the dma-tag
((tag dma-tag :offset-assert 0) ;; the DMA tag to transfer the bucket's data
(last (pointer dma-tag)) ;; the last tag of this bucket.
(dummy uint32) ;; empty space.
(next uint32 :offset 4) ;; this overlaps with the addr bit-field of the dma-tag
)
:method-count-assert 9
:size-assert #x10
:flag-assert #x900000010
)
;; guess - VIF_MASK register?
@@ -341,7 +308,6 @@
(m14 uint8 :offset 28 :size 2)
(m15 uint8 :offset 30 :size 2)
)
:flag-assert #x900000004
)
;; the IMM field of a VIF STCYCL instruction
@@ -349,7 +315,6 @@
((cl uint8 :offset 0 :size 8)
(wl uint8 :offset 8 :size 8)
)
:flag-assert #x900000002
)
;; the IMM field of a VIF UNPACK instruction
@@ -358,7 +323,6 @@
(usn uint8 :offset 14 :size 1)
(flg uint8 :offset 15 :size 1)
)
:flag-assert #x900000002
)
@@ -422,9 +386,6 @@
(irq uint8 :offset 31 :size 1)
(msk uint8 :offset 28 :size 1)
)
:method-count-assert 9
:size-assert #x4
:flag-assert #x900000004
)
(defmethod inspect vif-tag ((obj vif-tag))
+8 -22
View File
@@ -19,39 +19,25 @@
;; may occur at any depth, and nothing has visibility ids.
(deftype draw-node (drawable)
((child-count uint8 :offset 6) ;; if our child requires a count
(flags uint8 :offset 7) ;; is our children leaf or draw-node?
(child drawable :offset 8) ;; can be draw-node or any other drawable
(distance float :offset 12) ;; used in shrub...
((child-count uint8 :offset 6)
(flags uint8 :offset 7)
(child drawable :offset 8)
(distance float :offset 12)
)
:method-count-assert 18
:size-assert #x20
:flag-assert #x1200000020
;; field distance is a float printed as hex?
)
;; for non-shrub uses of draw-node, this is used to store all the draw-nodes at a given depth.
(deftype drawable-inline-array-node (drawable-inline-array)
((data draw-node 1 :inline)
(pad uint32)
((data draw-node 1 :inline)
(pad uint32)
)
:method-count-assert 18
:size-assert #x44
:flag-assert #x1200000044
;; too many basic blocks
(:methods
)
)
;; the types of these fields are a guess for now.
;; used for draw-node-cull function
(deftype draw-node-dma (structure)
((banka draw-node 32 :inline :offset-assert 0)
(bankb draw-node 32 :inline :offset-assert 1024)
((banka draw-node 32 :inline)
(bankb draw-node 32 :inline)
)
:method-count-assert 9
:size-assert #x800
:flag-assert #x900000800
)
+18 -16
View File
@@ -19,7 +19,7 @@
;; For an unknown reason, the input to the collision query (the box we're colliding with) is not.
;; It's stored in *collide-work*
(defmethod collide-with-box draw-node ((this draw-node) (arg0 int) (arg1 collide-list))
(defmethod collide-with-box ((this draw-node) (arg0 int) (arg1 collide-list))
"Find collisions with the box in the current collision query, add results to collide-list."
;; loop over ourself and our brothers
@@ -34,7 +34,7 @@
(none)
)
(defmethod collide-y-probe draw-node ((this draw-node) (arg0 int) (arg1 collide-list))
(defmethod collide-y-probe ((this draw-node) (arg0 int) (arg1 collide-list))
(dotimes (s3-0 arg0)
(if (collide-cache-using-y-probe-test (-> this bsphere))
(collide-y-probe (-> this child) (the-as int (-> this child-count)) arg1)
@@ -45,17 +45,18 @@
(none)
)
(defmethod collide-ray draw-node ((this draw-node) (arg0 int) (arg1 collide-list))
(defmethod collide-ray ((this draw-node) (arg0 int) (arg1 collide-list))
(dotimes (s3-0 arg0)
(if (collide-cache-using-line-sphere-test (-> this bsphere))
(collide-ray (-> this child) (the-as int (-> this child-count)) arg1)
)
(&+! this 32)
)
0
(none)
)
(defmethod collect-ambients draw-node ((this draw-node) (arg0 sphere) (arg1 int) (arg2 ambient-list))
(defmethod collect-ambients ((this draw-node) (arg0 sphere) (arg1 int) (arg2 ambient-list))
(dotimes (s2-0 arg1)
(if (spheres-overlap? arg0 (the-as sphere (-> this bsphere)))
(collect-ambients (-> this child) arg0 (the-as int (-> this child-count)) arg2)
@@ -80,12 +81,12 @@
(format #t "~Tlength: ~D~%" (-> this length))
(format #t "~Tdata[~D]: @ #x~X~%" (-> this length) (-> this data))
(dotimes (s5-0 (-> this length))
(format #t "~T [~D] ~A~%" s5-0 (-> this data s5-0))
)
(format #t "~T [~D] ~A~%" s5-0 (-> this data s5-0))
)
this
)
(defmethod mem-usage drawable-inline-array-node ((this drawable-inline-array-node) (arg0 memory-usage-block) (arg1 int))
(defmethod mem-usage ((this drawable-inline-array-node) (arg0 memory-usage-block) (arg1 int))
"Compute the memory usage of a drawable-inline-array-node. Only counts the nodes, doesn't count the node children."
(set! (-> arg0 length) (max 62 (-> arg0 length)))
(set! (-> arg0 data 61 name) "draw-node")
@@ -97,30 +98,31 @@
this
)
(defmethod asize-of drawable-inline-array-node ((this drawable-inline-array-node))
(defmethod asize-of ((this drawable-inline-array-node))
(the-as int (+ (-> drawable-inline-array-node size) (* (+ (-> this length) -1) 32)))
)
(defmethod collide-with-box drawable-inline-array-node ((this drawable-inline-array-node) (arg0 int) (arg1 collide-list))
(defmethod collide-with-box ((this drawable-inline-array-node) (arg0 int) (arg1 collide-list))
;; call on the first in the array, then it will loop through all the brothers.
(collide-with-box (-> this data 0) (-> this length) arg1)
(collide-with-box (the-as drawable (-> this data)) (-> this length) arg1)
0
(none)
)
(defmethod collide-y-probe drawable-inline-array-node ((this drawable-inline-array-node) (arg0 int) (arg1 collide-list))
(collide-y-probe (-> this data 0) (-> this length) arg1)
(defmethod collide-y-probe ((this drawable-inline-array-node) (arg0 int) (arg1 collide-list))
(collide-y-probe (the-as drawable (-> this data)) (-> this length) arg1)
0
(none)
)
(defmethod collide-ray drawable-inline-array-node ((this drawable-inline-array-node) (arg0 int) (arg1 collide-list))
(collide-ray (-> this data 0) (-> this length) arg1)
(defmethod collide-ray ((this drawable-inline-array-node) (arg0 int) (arg1 collide-list))
(collide-ray (the-as drawable (-> this data)) (-> this length) arg1)
0
(none)
)
(defmethod collect-ambients drawable-inline-array-node ((this drawable-inline-array-node) (arg0 sphere) (arg1 int) (arg2 ambient-list))
(collect-ambients (-> this data 0) arg0 (-> this length) arg2)
(defmethod collect-ambients ((this drawable-inline-array-node) (arg0 sphere) (arg1 int) (arg2 ambient-list))
(collect-ambients (the-as drawable (-> this data)) arg0 (-> this length) arg2)
0
(none)
)
+6 -11
View File
@@ -14,28 +14,23 @@
;; the actual drawable is just a reference to the actor itself.
(deftype drawable-actor (drawable)
((actor entity-actor :offset 8)
((actor entity-actor :offset 8)
)
:method-count-assert 18
:size-assert #x20
:flag-assert #x1200000020
)
;; the tree of drawable-actors
(deftype drawable-tree-actor (drawable-tree)
()
:flag-assert #x1200000024
)
;; array of drawable-actor.
(deftype drawable-inline-array-actor (drawable-inline-array)
((data drawable-actor 1 :inline)
(pad uint8 4))
:flag-assert #x1200000044
((data drawable-actor 1 :inline)
(pad uint8 4)
)
)
(defmethod draw drawable-tree-actor ((this drawable-tree-actor) (arg0 drawable-tree-actor) (arg1 display-frame))
(defmethod draw ((this drawable-tree-actor) (arg0 drawable-tree-actor) (arg1 display-frame))
"Do nothing, actor data is not drawn."
0
(none)
)
+21 -33
View File
@@ -15,36 +15,31 @@
;; each ambient also has a simple drawable that just contains a reference to the entity.
;; this is basically only used to collect the currently active ambients.
(deftype drawable-ambient (drawable)
((ambient entity-ambient :offset 8)
((ambient entity-ambient :offset 8)
)
:method-count-assert 19
:size-assert #x20
:flag-assert #x1300000020
(:methods
(execute-ambient (_type_ vector) none 18)
(execute-ambient (_type_ vector) none)
)
)
;; a drawable-tree of all the ambients in a level.
(deftype drawable-tree-ambient (drawable-tree)
()
:method-count-assert 18
:size-assert #x24
:flag-assert #x1200000024
)
(deftype drawable-inline-array-ambient (drawable-inline-array)
((data drawable-ambient 1 :inline)
(pad uint32))
:flag-assert #x1200000044
((data drawable-ambient 1 :inline)
(pad uint32)
)
)
(defmethod draw drawable-tree-ambient ((this drawable-tree-ambient) (arg0 drawable-tree-ambient) (arg1 display-frame))
(defmethod draw ((this drawable-tree-ambient) (arg0 drawable-tree-ambient) (arg1 display-frame))
"Do nothing - ambients are not drawn."
0
(none)
)
(defmethod unpack-vis drawable-tree-ambient ((this drawable-tree-ambient) (arg0 (pointer int8)) (arg1 (pointer int8)))
(defmethod unpack-vis ((this drawable-tree-ambient) (arg0 (pointer int8)) (arg1 (pointer int8)))
"Do nothing - ambients do not use vis."
arg1
)
@@ -55,23 +50,19 @@
;; - daxter audio (sidekick)
;; - voicebox audio (also called sidekick in some places...)
(deftype level-hint (process)
((text-id-to-display text-id :offset-assert 112)
(sound-to-play string :offset-assert 116)
(trans vector :offset-assert 120)
(sound-id sound-id :offset-assert 124)
(mode symbol :offset-assert 128)
(total-time time-frame :offset-assert 136)
(total-off-time time-frame :offset-assert 144)
(last-time time-frame :offset-assert 152)
(voicebox handle :offset-assert 160)
((text-id-to-display text-id)
(sound-to-play string)
(trans vector)
(sound-id sound-id)
(mode symbol)
(total-time time-frame)
(total-off-time time-frame)
(last-time time-frame)
(voicebox handle)
)
:heap-base #x40
:method-count-assert 16
:size-assert #xa8
:flag-assert #x10004000a8
(:methods
(print-text (_type_) none 14)
(appeared-for-long-enough? (_type_) symbol 15)
(print-text (_type_) none)
(appeared-for-long-enough? (_type_) symbol)
)
(:states
(level-hint-ambient-sound string)
@@ -84,12 +75,9 @@
;; a list of ambients that are currently active.
(deftype ambient-list (structure)
((num-items int32 :offset-assert 0)
(items drawable-ambient 2048 :offset-assert 4)
((num-items int32)
(items drawable-ambient 2048)
)
:method-count-assert 9
:size-assert #x2004
:flag-assert #x900002004
)
@@ -13,14 +13,15 @@
;; note that in general you shouldn't assume that calling "draw" on a group will actually call "draw" on all the members -
;; different children classes may specialize these methods. (same goes for all the methods)
;; decomp begins
(deftype drawable-group (drawable)
((length int16 :offset 6)
(data drawable 1 :offset-assert 32) ;; note that you get 1 drawable in the type, the rest run off the end.
((length int16 :offset 6)
(data drawable 1) ;; note that you get 1 drawable in the type, the rest run off the end.
)
(:methods
(new (symbol type int) _type_)
)
:flag-assert #x1200000024
)
;; unused
+14 -23
View File
@@ -9,11 +9,7 @@
(defmethod new drawable-group ((allocation symbol) (type-to-make type) (arg0 int))
"Allocate a drawable-group with enough room for arg0 drawables"
(let ((v0-0 (object-new allocation type-to-make
(the-as int (+ (-> type-to-make size) (* (+ arg0 -1) 4)))
)
)
)
(let ((v0-0 (object-new allocation type-to-make (the-as int (+ (-> type-to-make size) (* (+ arg0 -1) 4))))))
(set! (-> v0-0 length) arg0)
v0-0
)
@@ -30,7 +26,7 @@
this
)
(defmethod print drawable-group ((this drawable-group))
(defmethod print ((this drawable-group))
(format #t "#<~A @ #x~X [~D]" (-> this type) this (-> this length))
(dotimes (s5-0 (-> this length))
(format #t " ~A" (-> this data s5-0))
@@ -39,15 +35,15 @@
this
)
(defmethod length drawable-group ((this drawable-group))
(defmethod length ((this drawable-group))
(-> this length)
)
(defmethod asize-of drawable-group ((this drawable-group))
(defmethod asize-of ((this drawable-group))
(the-as int (+ (-> drawable-group size) (* (+ (-> this length) -1) 4)))
)
(defmethod mem-usage drawable-group ((this drawable-group) (arg0 memory-usage-block) (arg1 int))
(defmethod mem-usage ((this drawable-group) (arg0 memory-usage-block) (arg1 int))
(set! (-> arg0 length) (max 1 (-> arg0 length)))
(set! (-> arg0 data 0 name) "drawable-group")
(+! (-> arg0 data 0 count) 1)
@@ -61,18 +57,18 @@
this
)
(defmethod login drawable-group ((this drawable-group))
(defmethod login ((this drawable-group))
(dotimes (s5-0 (-> this length))
(login (-> this data s5-0))
)
this
)
(defmethod draw drawable-group ((this drawable-group) (arg0 drawable-group) (arg1 display-frame))
(defmethod draw ((this drawable-group) (arg0 drawable-group) (arg1 display-frame))
(when (vis-cull (-> this id))
(when (sphere-cull (-> this bsphere))
(dotimes (s3-0 (-> this length))
(draw (-> this data s3-0) (-> (the-as drawable-group arg0) data s3-0) arg1)
(draw (-> this data s3-0) (-> arg0 data s3-0) arg1)
)
)
)
@@ -80,7 +76,7 @@
(none)
)
(defmethod collect-stats drawable-group ((this drawable-group))
(defmethod collect-stats ((this drawable-group))
(when (vis-cull (-> this id))
(when (sphere-cull (-> this bsphere))
(dotimes (s5-0 (-> this length))
@@ -92,16 +88,11 @@
(none)
)
(defmethod debug-draw drawable-group ((this drawable-group) (arg0 drawable) (arg1 display-frame))
(defmethod debug-draw ((this drawable-group) (arg0 drawable) (arg1 display-frame))
(when (vis-cull (-> this id))
(when (sphere-cull (-> this bsphere))
(dotimes (s3-0 (-> this length))
(debug-draw
(-> this data s3-0)
(-> (the-as drawable-group arg0) data s3-0)
arg1
)
(debug-draw (-> this data s3-0) (-> (the-as drawable-group arg0) data s3-0) arg1)
)
)
)
@@ -109,9 +100,9 @@
(none)
)
(defmethod unpack-vis drawable-group ((this drawable-group) (arg0 (pointer int8)) (arg1 (pointer int8)))
(dotimes (s4-0 (-> this length) arg1)
(defmethod unpack-vis ((this drawable-group) (arg0 (pointer int8)) (arg1 (pointer int8)))
(dotimes (s4-0 (-> this length))
(set! arg1 (unpack-vis (-> this data s4-0) arg0 arg1))
)
arg1
)
)
+12 -25
View File
@@ -20,40 +20,30 @@
;; DECOMP BEGINS
(deftype drawable (basic)
((id int16 :offset-assert 4) ;; ID number for visibility (not always used)
(bsphere vector :inline :offset-assert 16) ;; bounding sphere
((id int16) ;; ID number for visibility (not always used)
(bsphere vector :inline) ;; bounding sphere
)
:method-count-assert 18
:size-assert #x20
:flag-assert #x1200000020
(:methods
;; initialize the drawable after it has been loaded.
(login (_type_) _type_ 9)
(login (_type_) _type_)
;; do some sort of drawing... this really does different things for different types.
(draw (_type_ _type_ display-frame) none 10)
(draw (_type_ _type_ display-frame) none)
;; add collision meshes to the given collide list if they intersect the bounding box in *collide-work*
;; the integer argument can be used to call this method on an inline-array of drawables (only some support this)
;; this avoids the dynamic dispatch on each element of the array.
(collide-with-box (_type_ int collide-list) none 11)
(collide-with-box (_type_ int collide-list) none)
;; similar to above, but only add if the collision mesh intersects with a "y probe"
(collide-y-probe (_type_ int collide-list) none 12)
(collide-y-probe (_type_ int collide-list) none)
;; similar to above, but only add if the collision mesh intersects a ray of spheres.
(collide-ray (_type_ int collide-list) none 13)
(collide-ray (_type_ int collide-list) none)
;; different for different types, but generally collects debug statistics like numbers of triangles
(collect-stats (_type_) none 14)
(collect-stats (_type_) none)
;; different for different types, but usually does nothing.
(debug-draw (_type_ drawable display-frame) none 15)
(debug-draw (_type_ drawable display-frame) none)
;; given VIS data (uncompressed), compute the visiblity bit string.
(unpack-vis (_type_ (pointer int8) (pointer int8)) (pointer int8) 16)
(unpack-vis (_type_ (pointer int8) (pointer int8)) (pointer int8))
;; find "ambients" inside the given sphere and add to list.
(collect-ambients (_type_ sphere int ambient-list) none 17)
(collect-ambients (_type_ sphere int ambient-list) none)
)
)
@@ -61,11 +51,8 @@
;; A drawable that simply draws a sphere and an error message at the origin of the bounding sphere.
(deftype drawable-error (drawable)
((name string :offset-assert 32)
((name string)
)
:method-count-assert 18
:size-assert #x24
:flag-assert #x1200000024
)
(declare-type process-drawable process)
@@ -15,9 +15,6 @@
;; DECOMP BEGINS
(deftype drawable-inline-array (drawable)
((length int16 :offset 6)
((length int16 :offset 6)
)
:method-count-assert 18
:size-assert #x20
:flag-assert #x1200000020
)
@@ -9,24 +9,25 @@
;; DECOMP BEGINS
(defmethod length drawable-inline-array ((this drawable-inline-array))
(defmethod length ((this drawable-inline-array))
(-> this length)
)
(defmethod login drawable-inline-array ((this drawable-inline-array))
(defmethod login ((this drawable-inline-array))
this
)
(defmethod draw drawable-inline-array ((this drawable-inline-array) (arg0 drawable-inline-array) (arg1 display-frame))
(none)
)
(defmethod collect-stats drawable-inline-array ((this drawable-inline-array))
(defmethod draw ((this drawable-inline-array) (arg0 drawable-inline-array) (arg1 display-frame))
0
(none)
)
(defmethod debug-draw drawable-inline-array ((this drawable-inline-array) (arg0 drawable) (arg1 display-frame))
(defmethod collect-stats ((this drawable-inline-array))
0
(none)
)
(defmethod debug-draw ((this drawable-inline-array) (arg0 drawable) (arg1 display-frame))
0
(none)
)
+2 -3
View File
@@ -11,12 +11,11 @@
;; for example, there might be a drawable-tree for all the tfrags, one for all the ties, etc.
(deftype drawable-tree (drawable-group)
()
:flag-assert #x1200000024
)
;; a drawable-tree-array contains all the drawable-trees in a level.
;; usually there aren't too many drawable trees (~5-15)
(deftype drawable-tree-array (drawable-group)
((trees drawable-tree 1 :offset 32))
:flag-assert #x1200000024
((trees drawable-tree 1 :overlay-at (-> data 0))
)
)
+13 -11
View File
@@ -13,38 +13,40 @@
;; DECOMP BEGINS
(defmethod draw drawable-tree-array ((this drawable-tree-array) (arg0 drawable-tree-array) (arg1 display-frame))
(defmethod draw ((this drawable-tree-array) (arg0 drawable-tree-array) (arg1 display-frame))
"Draw a drawable tree array. If the current level is set to special or special-vis, the draw is skipped."
(let ((v1-1 (-> (scratchpad-object terrain-context) bsp lev-index)))
(case (-> *level* level v1-1 display?)
(('special 'special-vis #f)
)
(else
(dotimes (s3-0 (-> this length))
(draw (-> this trees s3-0) (-> arg0 trees s3-0) arg1)
)
)
(('special 'special-vis #f)
)
(else
(dotimes (s3-0 (-> this length))
(draw (-> this trees s3-0) (-> arg0 trees s3-0) arg1)
)
)
)
)
0
(none)
)
(defmethod collect-stats drawable-tree-array ((this drawable-tree-array))
(defmethod collect-stats ((this drawable-tree-array))
(dotimes (s5-0 (-> this length))
(collect-stats (-> this trees s5-0))
)
0
(none)
)
(defmethod debug-draw drawable-tree-array ((this drawable-tree-array) (arg0 drawable) (arg1 display-frame))
(defmethod debug-draw ((this drawable-tree-array) (arg0 drawable) (arg1 display-frame))
(dotimes (s3-0 (-> this length))
(debug-draw (-> this trees s3-0) (-> (the-as drawable-tree-array arg0) trees s3-0) arg1)
)
0
(none)
)
(defmethod unpack-vis drawable-tree ((this drawable-tree) (arg0 (pointer int8)) (arg1 (pointer int8)))
(defmethod unpack-vis ((this drawable-tree) (arg0 (pointer int8)) (arg1 (pointer int8)))
"Copy our visibility data from arg1 to arg0, unpacking it."
(local-vars (t5-1 int))
+10 -10
View File
@@ -149,51 +149,51 @@
(none)
)
(defmethod login drawable ((this drawable))
(defmethod login ((this drawable))
this
)
(defmethod draw drawable ((this drawable) (arg0 drawable) (arg1 display-frame))
(defmethod draw ((this drawable) (arg0 drawable) (arg1 display-frame))
0
(none)
)
(defmethod collide-with-box drawable ((this drawable) (arg0 int) (arg1 collide-list))
(defmethod collide-with-box ((this drawable) (arg0 int) (arg1 collide-list))
0
(none)
)
(defmethod collide-y-probe drawable ((this drawable) (arg0 int) (arg1 collide-list))
(defmethod collide-y-probe ((this drawable) (arg0 int) (arg1 collide-list))
0
(none)
)
(defmethod collide-ray drawable ((this drawable) (arg0 int) (arg1 collide-list))
(defmethod collide-ray ((this drawable) (arg0 int) (arg1 collide-list))
0
(none)
)
(defmethod collect-ambients drawable ((this drawable) (arg0 sphere) (arg1 int) (arg2 ambient-list))
(defmethod collect-ambients ((this drawable) (arg0 sphere) (arg1 int) (arg2 ambient-list))
0
(none)
)
(defmethod collect-stats drawable ((this drawable))
(defmethod collect-stats ((this drawable))
0
(none)
)
(defmethod debug-draw drawable ((this drawable) (arg0 drawable) (arg1 display-frame))
(defmethod debug-draw ((this drawable) (arg0 drawable) (arg1 display-frame))
0
(none)
)
(defmethod draw drawable-error ((this drawable-error) (arg0 drawable-error) (arg1 display-frame))
(defmethod draw ((this drawable-error) (arg0 drawable-error) (arg1 display-frame))
(error-sphere arg0 (-> arg0 name))
(none)
)
(defmethod unpack-vis drawable ((this drawable) (arg0 (pointer int8)) (arg1 (pointer int8)))
(defmethod unpack-vis ((this drawable) (arg0 (pointer int8)) (arg1 (pointer int8)))
arg1
)
+66 -75
View File
@@ -38,14 +38,11 @@
;; These terminate on both ends with #f.
(deftype connectable (structure)
((next0 connectable :offset-assert 0)
(prev0 connectable :offset-assert 4)
(next1 connectable :offset-assert 8)
(prev1 connectable :offset-assert 12)
((next0 connectable)
(prev0 connectable)
(next1 connectable)
(prev1 connectable)
)
:method-count-assert 9
:size-assert #x10
:flag-assert #x900000010
)
@@ -60,27 +57,22 @@
(declare-type engine basic)
(deftype connection (connectable)
((param0 basic :offset-assert 16) ;; often (function object object object object object)
(param1 int32 :offset-assert 20)
(param2 int32 :offset-assert 24)
(param3 int32 :offset-assert 28)
(quad uint128 2 :offset 0)
((param0 basic)
(param1 int32)
(param2 int32)
(param3 int32)
(quad uint128 2 :overlay-at next0)
)
:method-count-assert 14
:size-assert #x20
:flag-assert #xe00000020
;; the params are loaded with a signed load, which is kinda weird...
(:methods
(print (connection) _type_ 2)
(get-engine (connection) engine 9)
(get-process (connection) process 10)
(belongs-to-engine? (connection engine) symbol 11)
(belongs-to-process? (connection process) symbol 12)
(move-to-dead (connection) connection 13)
(get-engine (connection) engine)
(get-process (connection) process)
(belongs-to-engine? (connection engine) symbol)
(belongs-to-process? (connection process) symbol)
(move-to-dead (connection) connection)
)
)
(defmethod inspect connection ((this connection))
(defmethod inspect ((this connection))
(format #t "[~8x] ~A~%" this 'connection)
(format #t "~Tnext0: ~`connectable`P~%" (-> this next0))
(format #t "~Tprev0: ~`connectable`P~%" (-> this prev0))
@@ -102,50 +94,49 @@
;; you can iterate over the connections, or run them.
;; the engine is dynamically sized based on how many connections it can store.
(deftype engine (basic)
((name basic :offset-assert 4)
(length int16 :offset-assert 8) ;; in use elts of the data array
(allocated-length int16 :offset-assert 10) ;; size of the data array
(engine-time time-frame :offset-assert 16) ;; frame that we last executed
((name basic)
(length int16)
(allocated-length int16)
(engine-time time-frame) ;; frame that we last executed
;; terminating nodes for the next0/prev0 linked lists
(alive-list connectable :inline :offset-assert 32)
(alive-list-end connectable :inline :offset-assert 48)
(dead-list connectable :inline :offset-assert 64)
(dead-list-end connectable :inline :offset-assert 80)
(alive-list connectable :inline)
(alive-list-end connectable :inline)
(dead-list connectable :inline)
(dead-list-end connectable :inline)
;; storage for nodes. this is dynamically sized.
(data connection 1 :inline :offset-assert 96)
(data connection 1 :inline)
)
:method-count-assert 24
:size-assert #x80
:flag-assert #x1800000080
(:methods
(new (symbol type basic int) _type_ 0)
(inspect-all-connections (engine) engine 9)
(apply-to-connections (engine (function connectable none)) int 10)
(apply-to-connections-reverse (engine (function connectable none)) int 11)
(execute-connections (engine object) int 12)
(execute-connections-and-move-to-dead (engine object) int 13)
(execute-connections-if-needed (engine object) int 14)
(add-connection (engine process object object object object) connection 15)
(remove-from-process (engine process) int 16)
(remove-matching (engine (function connection engine symbol)) int 17)
(remove-all (engine) int 18)
(remove-by-param1 (engine object) int 19)
(remove-by-param2 (engine int) int 20)
(get-first-connectable (engine) connectable 21)
(get-last-connectable (engine) connectable 22)
(unknown-1 (engine (pointer uint32)) uint 23)
(new (symbol type basic int) _type_)
(inspect-all-connections (engine) engine)
(apply-to-connections (engine (function connectable none)) int)
(apply-to-connections-reverse (engine (function connectable none)) int)
(execute-connections (engine object) int)
(execute-connections-and-move-to-dead (engine object) int)
(execute-connections-if-needed (engine object) int)
(add-connection (engine process object object object object) connection)
(remove-from-process (engine process) int)
(remove-matching (engine (function connection engine symbol)) int)
(remove-all (engine) int)
(remove-by-param1 (engine object) int)
(remove-by-param2 (engine int) int)
(get-first-connectable (engine) connectable)
(get-last-connectable (engine) connectable)
(unknown-1 (engine (pointer uint32)) uint)
)
)
(defmethod belongs-to-process? connection ((this connection) (arg0 process))
(defmethod belongs-to-process? ((this connection) (arg0 process))
"Does this connection belong to the given process?"
(= arg0 ((method-of-type connection get-process) this))
)
(defmethod print connection ((this connection))
(defmethod print ((this connection))
"Print a connection and its parameters"
(format #t "#<connection (~A ~A ~A ~A) @ #x~X>"
(-> this param0)
@@ -157,7 +148,7 @@
this
)
(defmethod get-engine connection ((this connection))
(defmethod get-engine ((this connection))
"Get the engine for this connection. This must be used on a live connection."
;; back up, until we get to the node that's inline on the engine.
@@ -170,7 +161,7 @@
(the-as engine (&+ this -28))
)
(defmethod get-process connection ((this connection))
(defmethod get-process ((this connection))
"Get the process for this connection"
;; same trick as get-engine, but backs up using prev1 until we hit the process.
@@ -183,7 +174,7 @@
(the-as process (&+ this -92))
)
(defmethod belongs-to-engine? connection ((this connection) (arg0 engine))
(defmethod belongs-to-engine? ((this connection) (arg0 engine))
"Check to see if this connection is located in the data section of the engine.
This works on dead or alive connections."
;; we can be clever and just see if it has the right address.
@@ -192,19 +183,19 @@
)
)
(defmethod get-first-connectable engine ((this engine))
(defmethod get-first-connectable ((this engine))
"Get the first connectable on the alive list.
This should be a valid connection."
(-> this alive-list next0)
)
(defmethod get-last-connectable engine ((this engine))
(defmethod get-last-connectable ((this engine))
"Get the last connectable on the alive list.
I think the returned connectable is invalid."
(-> this alive-list-end)
)
(defmethod unknown-1 engine ((this engine) (arg0 (pointer uint32)))
(defmethod unknown-1 ((this engine) (arg0 (pointer uint32)))
"Not clear what this does. Possibly get next."
(the-as uint32 (-> arg0 0))
)
@@ -268,13 +259,13 @@
this
)
(defmethod print engine ((this engine))
(defmethod print ((this engine))
"Print an engine and its name"
(format #t "#<~A ~A @ #x~X>" (-> this type) (-> this name) this)
this
)
(defmethod inspect engine ((this engine))
(defmethod inspect ((this engine))
(format #t "[~8x] ~A~%" this (-> this type))
(format #t "~Tname: ~A~%" (-> this name))
(format #t "~Tengine-time: ~D~%" (-> this engine-time))
@@ -308,19 +299,19 @@
this
)
(defmethod length engine ((this engine))
(defmethod length ((this engine))
"Get the in-use length of an engine"
(-> this length)
)
(defmethod asize-of engine ((this engine))
(defmethod asize-of ((this engine))
"Get the size in memory of an engine"
(the-as int
(+ (-> engine size) (the-as uint (shl (+ (-> this allocated-length) -1) 5)))
)
)
(defmethod apply-to-connections engine ((this engine) (f (function connectable none)))
(defmethod apply-to-connections ((this engine) (f (function connectable none)))
"Apply f to all connections for the engine. It's okay to have f remove the connection."
(let* ((current (-> this alive-list next0))
;; need to get this _before_ running f, in case we remove.
@@ -335,7 +326,7 @@
0
)
(defmethod apply-to-connections-reverse engine ((this engine) (f (function connectable none)))
(defmethod apply-to-connections-reverse ((this engine) (f (function connectable none)))
"Apply f to all connections, reverse order.
Do not use f to remove yourself from the list."
(let ((iter (-> this alive-list-end prev0)))
@@ -347,7 +338,7 @@
0
)
(defmethod execute-connections engine ((this engine) (arg0 object))
(defmethod execute-connections ((this engine) (arg0 object))
"Run the engine!"
;; remember when
@@ -364,7 +355,7 @@
0
)
(defmethod execute-connections-and-move-to-dead engine ((this engine) (arg0 object))
(defmethod execute-connections-and-move-to-dead ((this engine) (arg0 object))
"Run the engine! If any objects return 'dead, then remove them"
(set! (-> this engine-time) (-> *display* real-frame-counter))
(let ((ct (the-as connection (-> this alive-list-end prev0))))
@@ -383,7 +374,7 @@
0
)
(defmethod execute-connections-if-needed engine ((this engine) (arg0 object))
(defmethod execute-connections-if-needed ((this engine) (arg0 object))
"Execute connections, but only if it hasn't been done on this frame."
(when (!= (-> *display* real-frame-counter) (-> this engine-time))
(execute-connections this arg0)
@@ -405,7 +396,7 @@
)
(when *debug-segment*
(defmethod inspect-all-connections engine ((this engine))
(defmethod inspect-all-connections ((this engine))
"inspect all of the connections."
(apply-to-connections this
(the (function connection none) (method-of-type connection inspect)))
@@ -458,7 +449,7 @@
)
(defmethod move-to-dead connection ((this connection))
(defmethod move-to-dead ((this connection))
"Move this connection from the alive list to the dead list"
(local-vars (v1-1 engine))
;; get our engine
@@ -496,7 +487,7 @@
(set! v0-1 0)
)
(defmethod remove-from-process engine ((this engine) (proc process))
(defmethod remove-from-process ((this engine) (proc process))
"Remove all connections from process for this engine"
(local-vars (iter connection))
(when proc
@@ -512,7 +503,7 @@
)
0)
(defmethod remove-matching engine ((this engine) (arg0 (function connection engine symbol)))
(defmethod remove-matching ((this engine) (arg0 (function connection engine symbol)))
"call the given function on each connection and the engine.
if it returns truthy, move to dead that connection."
(local-vars
@@ -531,7 +522,7 @@
)
0)
(defmethod remove-all engine ((this engine))
(defmethod remove-all ((this engine))
"Remove all connections from an engine"
(local-vars
(a0-1 connectable)
@@ -547,7 +538,7 @@
)
0)
(defmethod remove-by-param1 engine ((this engine) (p1-value object))
(defmethod remove-by-param1 ((this engine) (p1-value object))
"Remove all connections with param1 matching arg0"
(let* ((current (-> this alive-list next0))
(next (-> current next0))
@@ -563,7 +554,7 @@
0
)
(defmethod remove-by-param2 engine ((this engine) (p2-value int))
(defmethod remove-by-param2 ((this engine) (p2-value int))
"Remove all connections with param2 matching p2-value"
(let* ((current (-> this alive-list next0))
(next (-> current next0))
+38 -41
View File
@@ -62,32 +62,29 @@
;; These are allocated on the process heap of the entity's process.
(deftype actor-link-info (basic)
((process process :offset-assert 4) ;; process for this entity
(next entity-actor :offset-assert 8) ;; next entity in the list
(prev entity-actor :offset-assert 12) ;; prev entity in the list
((process process)
(next entity-actor)
(prev entity-actor)
)
:method-count-assert 26
:size-assert #x10
:flag-assert #x1a00000010
(:methods
(new (symbol type process) _type_ 0)
(get-matching-actor-type-mask (_type_ type) int 9)
(actor-count-before (_type_) int 10)
(link-to-next-and-prev-actor (_type_) entity-actor 11)
(get-next (_type_) entity-actor 12)
(get-prev (_type_) entity-actor 13)
(get-next-process (_type_) process 14)
(get-prev-process (_type_) process 15)
(apply-function-forward (_type_ (function entity-actor object object) object) int 16)
(apply-function-reverse (_type_ (function entity-actor object object) object) int 17)
(apply-all (_type_ (function entity-actor object object) object) int 18)
(send-to-all (_type_ symbol) none 19)
(send-to-all-after (_type_ symbol) object 20)
(send-to-all-before (_type_ symbol) object 21)
(send-to-next-and-prev (_type_ symbol) none 22)
(send-to-next (_type_ symbol) none 23)
(send-to-prev (_type_ symbol) none 24)
(actor-count (_type_) int 25)
(new (symbol type process) _type_)
(get-matching-actor-type-mask (_type_ type) int)
(actor-count-before (_type_) int)
(link-to-next-and-prev-actor (_type_) entity-actor)
(get-next (_type_) entity-actor)
(get-prev (_type_) entity-actor)
(get-next-process (_type_) process)
(get-prev-process (_type_) process)
(apply-function-forward (_type_ (function entity-actor object object) object) int)
(apply-function-reverse (_type_ (function entity-actor object object) object) int)
(apply-all (_type_ (function entity-actor object object) object) int)
(send-to-all (_type_ symbol) none)
(send-to-all-after (_type_ symbol) object)
(send-to-all-before (_type_ symbol) object)
(send-to-next-and-prev (_type_ symbol) none)
(send-to-next (_type_ symbol) none)
(send-to-prev (_type_ symbol) none)
(actor-count (_type_) int)
)
)
@@ -95,14 +92,14 @@
;; Link Setup
;;;;;;;;;;;;;;;;
(defmethod next-actor entity-actor ((this entity-actor))
(defmethod next-actor ((this entity-actor))
"Utility function to look up the next actor in the list, assuming we don't have actor-link-info yet."
(declare (inline))
;; look up reference to next-actor - this is slow.
(entity-actor-lookup this 'next-actor 0)
)
(defmethod prev-actor entity-actor ((this entity-actor))
(defmethod prev-actor ((this entity-actor))
"Look up previous actor in the list"
(declare (inline))
(entity-actor-lookup this 'prev-actor 0)
@@ -126,26 +123,26 @@
;;;;;;;;;;;;;;;;;;;;
;; These methods can now be used to get next/prev more efficiently, without having to do a res lookup.
(defmethod get-next actor-link-info ((this actor-link-info))
(defmethod get-next ((this actor-link-info))
(-> this next)
)
(defmethod get-prev actor-link-info ((this actor-link-info))
(defmethod get-prev ((this actor-link-info))
(-> this prev)
)
(defmethod get-next-process actor-link-info ((this actor-link-info))
(defmethod get-next-process ((this actor-link-info))
"Get the process for the next, if it exists."
;; we can't easily get to the actor-link-info of the next, so we have to grab it from entity-links.
(the-as process (and (-> this next) (-> this next extra process)))
)
(defmethod get-prev-process actor-link-info ((this actor-link-info))
(defmethod get-prev-process ((this actor-link-info))
"Get the process for the prev, if it exists"
(the-as process (and (-> this prev) (-> this prev extra process)))
)
(defmethod link-to-next-and-prev-actor actor-link-info ((this actor-link-info))
(defmethod link-to-next-and-prev-actor ((this actor-link-info))
"Redo the linking in the constructor by looking up the next/prev actor."
(set! (-> this next) (next-actor (-> this process entity)))
(set! (-> this prev) (prev-actor (-> this process entity)))
@@ -183,7 +180,7 @@
0
)
(defmethod apply-all actor-link-info ((this actor-link-info) (arg0 (function entity-actor object object)) (arg1 object))
(defmethod apply-all ((this actor-link-info) (arg0 (function entity-actor object object)) (arg1 object))
"Apply to all entities. Starts at the back and hits everyone, including this object."
;; start at us (next may give us #f here, so can't do that.)
(let ((s4-0 (-> this process entity)))
@@ -204,7 +201,7 @@
0
)
(defmethod send-to-all-after actor-link-info ((this actor-link-info) (message symbol))
(defmethod send-to-all-after ((this actor-link-info) (message symbol))
"Send an event to all processes after this link with no parameters."
(let ((iter (-> this next))
@@ -221,7 +218,7 @@
)
)
(defmethod send-to-all-before actor-link-info ((this actor-link-info) (message symbol))
(defmethod send-to-all-before ((this actor-link-info) (message symbol))
"Send an event to all processes before this link with no parameters."
(let ((iter (-> this prev))
@@ -238,7 +235,7 @@
)
)
(defmethod send-to-next actor-link-info ((this actor-link-info) (message symbol))
(defmethod send-to-next ((this actor-link-info) (message symbol))
"Send event arg0 to the next actor's process"
(let ((a0-1 (-> this next)))
@@ -256,7 +253,7 @@
(none)
)
(defmethod send-to-prev actor-link-info ((this actor-link-info) (message symbol))
(defmethod send-to-prev ((this actor-link-info) (message symbol))
"Send event arg1 to the next actor's process."
(let ((a0-1 (-> this prev)))
@@ -271,7 +268,7 @@
(none)
)
(defmethod send-to-next-and-prev actor-link-info ((this actor-link-info) (msg symbol))
(defmethod send-to-next-and-prev ((this actor-link-info) (msg symbol))
"Send an event to both next and prev with no params."
(send-to-next this msg)
@@ -279,13 +276,13 @@
(none)
)
(defmethod send-to-all actor-link-info ((this actor-link-info) (msg symbol))
(defmethod send-to-all ((this actor-link-info) (msg symbol))
(send-to-all-after this msg)
(send-to-all-before this msg)
(none)
)
(defmethod actor-count actor-link-info ((this actor-link-info))
(defmethod actor-count ((this actor-link-info))
"Count the number of actors in the entire list"
(let ((actor (-> this process entity))
(count 0)
@@ -303,7 +300,7 @@
)
)
(defmethod get-matching-actor-type-mask actor-link-info ((this actor-link-info) (matching-type type))
(defmethod get-matching-actor-type-mask ((this actor-link-info) (matching-type type))
"Iterate through _all_ actors that are part of this actor list.
If the nth actor is type matching-type, then set the nth bit of the result."
(let ((actor (the-as entity-actor (-> this process entity)))
@@ -332,7 +329,7 @@
)
)
(defmethod actor-count-before actor-link-info ((this actor-link-info))
(defmethod actor-count-before ((this actor-link-info))
"Get the number of actors _before_ this actor in the list."
(let* ((this-actor (-> this process entity))
(actor this-actor)
+10 -10
View File
@@ -10,7 +10,7 @@
;; DECOMP BEGINS
(defmethod mem-usage drawable-ambient ((this drawable-ambient) (arg0 memory-usage-block) (arg1 int))
(defmethod mem-usage ((this drawable-ambient) (arg0 memory-usage-block) (arg1 int))
(set! (-> arg0 length) (max 50 (-> arg0 length)))
(set! (-> arg0 data 49 name) "ambient")
(+! (-> arg0 data 49 count) 1)
@@ -22,7 +22,7 @@
(the-as drawable-ambient 0)
)
(defmethod mem-usage drawable-inline-array-ambient ((this drawable-inline-array-ambient) (arg0 memory-usage-block) (arg1 int))
(defmethod mem-usage ((this drawable-inline-array-ambient) (arg0 memory-usage-block) (arg1 int))
(set! (-> arg0 length) (max 1 (-> arg0 length)))
(set! (-> arg0 data 0 name) (symbol->string 'drawable-group))
(+! (-> arg0 data 0 count) 1)
@@ -362,7 +362,7 @@
(none)
)
(defmethod print-text level-hint ((this level-hint))
(defmethod print-text ((this level-hint))
(when (!= *common-text* #f)
(let ((s5-0
(new 'stack 'font-context *font-default-matrix* 56 160 0.0 (font-color default) (font-flags shadow kerning))
@@ -382,7 +382,7 @@
(none)
)
(defmethod appeared-for-long-enough? level-hint ((this level-hint))
(defmethod appeared-for-long-enough? ((this level-hint))
(and (!= (-> this next-state name) 'level-hint-sidekick) (< (seconds 5) (-> this total-time)))
)
@@ -971,7 +971,7 @@
(none)
)
(defmethod collect-ambients drawable-ambient ((this drawable-ambient) (arg0 sphere) (arg1 int) (arg2 ambient-list))
(defmethod collect-ambients ((this drawable-ambient) (arg0 sphere) (arg1 int) (arg2 ambient-list))
(dotimes (s2-0 arg1)
(when (spheres-overlap? arg0 (the-as sphere (-> this bsphere)))
(set! (-> arg2 items (-> arg2 num-items)) this)
@@ -983,19 +983,19 @@
(none)
)
(defmethod collect-ambients drawable-inline-array-ambient ((this drawable-inline-array-ambient) (arg0 sphere) (arg1 int) (arg2 ambient-list))
(defmethod collect-ambients ((this drawable-inline-array-ambient) (arg0 sphere) (arg1 int) (arg2 ambient-list))
(collect-ambients (the-as drawable-ambient (-> this data)) arg0 (-> this length) arg2)
0
(none)
)
(defmethod collect-ambients drawable-tree-ambient ((this drawable-tree-ambient) (arg0 sphere) (arg1 int) (arg2 ambient-list))
(defmethod collect-ambients ((this drawable-tree-ambient) (arg0 sphere) (arg1 int) (arg2 ambient-list))
(collect-ambients (-> this data 0) arg0 (-> this length) arg2)
0
(none)
)
(defmethod birth-ambient! entity-ambient ((this entity-ambient))
(defmethod birth-ambient! ((this entity-ambient))
(set! (-> this ambient-data quad) (the-as uint128 0))
(set! (-> this ambient-data function) ambient-type-error)
(case (res-lump-struct this 'type structure)
@@ -1091,7 +1091,7 @@
(define *execute-ambients* #t)
(defmethod execute-ambient drawable-ambient ((this drawable-ambient) (arg0 vector))
(defmethod execute-ambient ((this drawable-ambient) (arg0 vector))
((-> this ambient ambient-data function) this arg0)
0
(none)
@@ -1099,7 +1099,7 @@
;; ERROR: function was not converted to expressions. Cannot decompile.
(defmethod draw-debug entity-ambient ((this entity-ambient))
(defmethod draw-debug ((this entity-ambient))
(local-vars (sv-16 uint128))
(let ((gp-0 (-> this trans))
(s5-0 (res-lump-struct this 'type symbol))
+72 -113
View File
@@ -24,170 +24,137 @@
(define *generate-actor-vis-output* #f)
(deftype entity-perm (structure)
((user-object object 2 :offset-assert 0)
(user-uint64 uint64 :offset 0)
(user-float float 2 :offset 0)
(user-int32 int32 2 :offset 0)
(user-uint32 uint32 2 :offset 0)
(user-int16 int16 4 :offset 0)
(user-uint16 uint16 4 :offset 0)
(user-int8 int8 8 :offset 0)
(user-uint8 uint8 8 :offset 0)
(status entity-perm-status :offset-assert 8)
(dummy uint8 1 :offset-assert 10)
(task game-task :offset-assert 11)
(aid actor-id :offset-assert 12)
(quad uint128 :offset 0)
((user-object object 2)
(user-uint64 uint64 :overlay-at (-> user-object 0))
(user-float float 2 :overlay-at (-> user-object 0))
(user-int32 int32 2 :overlay-at (-> user-object 0))
(user-uint32 uint32 2 :overlay-at (-> user-object 0))
(user-int16 int16 4 :overlay-at (-> user-object 0))
(user-uint16 uint16 4 :overlay-at (-> user-object 0))
(user-int8 int8 8 :overlay-at (-> user-object 0))
(user-uint8 uint8 8 :overlay-at (-> user-object 0))
(status entity-perm-status)
(dummy uint8 1)
(task game-task)
(aid actor-id)
(quad uint128 :overlay-at (-> user-object 0))
)
:pack-me
:method-count-assert 10
:size-assert #x10
:flag-assert #xa00000010
(:methods
(update-perm! (_type_ symbol entity-perm-status) _type_ 9)
(update-perm! (_type_ symbol entity-perm-status) _type_)
)
)
(deftype entity-links (structure)
((prev-link entity-links :offset-assert 0)
(next-link entity-links :offset-assert 4)
(entity entity :offset-assert 8)
(process process :offset-assert 12)
(level level :offset-assert 16)
(vis-id int32 :offset-assert 20)
(trans vector :inline :offset-assert 32)
(perm entity-perm :inline :offset-assert 48)
(status uint16 :offset 56)
(aid actor-id :offset 60)
(task game-task :offset 59)
((prev-link entity-links)
(next-link entity-links)
(entity entity)
(process process)
(level level)
(vis-id int32)
(trans vector :inline)
(perm entity-perm :inline)
(status uint16 :overlay-at (-> perm status))
(aid actor-id :overlay-at (-> perm aid))
(task game-task :overlay-at (-> perm task))
)
:method-count-assert 10
:size-assert #x40
:flag-assert #xa00000040
(:methods
(birth? (_type_ vector) symbol 9)
(birth? (_type_ vector) symbol)
)
)
(deftype entity-perm-array (inline-array-class)
((data entity-perm :inline :dynamic :offset-assert 16)
((data entity-perm :inline :dynamic)
)
:method-count-assert 9
:size-assert #x10
:flag-assert #x900000010
)
(set! (-> entity-perm-array heap-base) (the-as uint 16))
(deftype entity-links-array (inline-array-class)
((data entity-links :inline :dynamic :offset-assert 16)
((data entity-links :inline :dynamic)
)
:method-count-assert 9
:size-assert #x10
:flag-assert #x900000010
)
(set! (-> entity-links-array heap-base) (the-as uint 64))
(deftype entity (res-lump)
((trans vector :inline :offset-assert 32)
(aid uint32 :offset-assert 48)
((trans vector :inline)
(aid uint32)
)
:method-count-assert 27
:size-assert #x34
:flag-assert #x1b00000034
(:methods
(birth! (_type_) _type_ 22)
(kill! (_type_) _type_ 23)
(add-to-level! (_type_ level-group level actor-id) none 24)
(remove-from-level! (_type_ level-group) _type_ 25)
(get-level (_type_) level 26)
(birth! (_type_) _type_)
(kill! (_type_) _type_)
(add-to-level! (_type_ level-group level actor-id) none)
(remove-from-level! (_type_ level-group) _type_)
(get-level (_type_) level)
)
)
(deftype entity-camera (entity)
((connect connectable :inline :offset-assert 64)
((connect connectable :inline)
)
:method-count-assert 27
:size-assert #x50
:flag-assert #x1b00000050
)
(deftype entity-ambient-data (structure)
((user-object object 3 :offset-assert 0)
(function (function drawable-ambient vector none) :offset-assert 12)
(quad uint128 :offset 0)
(user-uint64 uint64 1 :offset 0)
(user-float float 3 :offset 0)
(user-int32 int32 3 :offset 0)
(user-uint32 uint32 3 :offset 0)
(user-int16 int16 6 :offset 0)
(user-uint16 uint16 6 :offset 0)
(user-int8 int8 12 :offset 0)
(user-uint8 uint8 12 :offset 0)
((user-object object 3)
(function (function drawable-ambient vector none))
(quad uint128 :overlay-at (-> user-object 0))
(user-uint64 uint64 1 :overlay-at (-> user-object 0))
(user-float float 3 :overlay-at (-> user-object 0))
(user-int32 int32 3 :overlay-at (-> user-object 0))
(user-uint32 uint32 3 :overlay-at (-> user-object 0))
(user-int16 int16 6 :overlay-at (-> user-object 0))
(user-uint16 uint16 6 :overlay-at (-> user-object 0))
(user-int8 int8 12 :overlay-at (-> user-object 0))
(user-uint8 uint8 12 :overlay-at (-> user-object 0))
)
:method-count-assert 9
:size-assert #x10
:flag-assert #x900000010
)
(deftype entity-ambient-data-array (inline-array-class)
((data entity-ambient-data :inline :dynamic :offset-assert 16)
((data entity-ambient-data :inline :dynamic)
)
:method-count-assert 9
:size-assert #x10
:flag-assert #x900000010
)
(set! (-> entity-ambient-data-array heap-base) (the-as uint 16))
(deftype entity-ambient (entity)
((ambient-data entity-ambient-data :score 50 :offset 24) ;; added!
((ambient-data entity-ambient-data :overlay-at extra)
)
:method-count-assert 29
:size-assert #x34
:flag-assert #x1d00000034
(:methods
(draw-debug (_type_) none 27)
(birth-ambient! (_type_) none 28)
(draw-debug (_type_) none)
(birth-ambient! (_type_) none)
)
)
(deftype entity-actor (entity)
((nav-mesh nav-mesh :offset-assert 52)
(etype type :offset-assert 56)
(task game-task :offset-assert 60)
(vis-id uint16 :offset-assert 62)
(vis-id-signed int16 :offset 62) ;; added
(quat quaternion :inline :offset-assert 64)
((nav-mesh nav-mesh)
(etype type)
(task game-task)
(vis-id uint16)
(vis-id-signed int16 :overlay-at vis-id)
(quat quaternion :inline)
)
:method-count-assert 31
:size-assert #x50
:flag-assert #x1f00000050
(:methods
(next-actor (_type_) entity-actor 27)
(prev-actor (_type_) entity-actor 28)
(debug-print (_type_ symbol type) none 29)
(set-or-clear-status! (_type_ entity-perm-status symbol) none 30)
(next-actor (_type_) entity-actor)
(prev-actor (_type_) entity-actor)
(debug-print (_type_ symbol type) none)
(set-or-clear-status! (_type_ entity-perm-status symbol) none)
)
)
(deftype entity-info (basic)
((ptype type :offset-assert 4)
(package basic :offset-assert 8)
(art-group pair :offset-assert 12)
(pool basic :offset-assert 16)
(heap-size int32 :offset-assert 20)
((ptype type)
(package basic)
(art-group pair)
(pool basic)
(heap-size int32)
)
:method-count-assert 9
:size-assert #x18
:flag-assert #x900000018
)
;; NOTE - this is a strange pattern...this symbol isn't defined until a later file 'navigate'
@@ -198,19 +165,11 @@
)
(deftype actor-bank (basic)
((pause-dist float :offset-assert 4)
(birth-dist float :offset-assert 8)
(birth-max int32 :offset-assert 12)
((pause-dist float)
(birth-dist float)
(birth-max int32)
)
:method-count-assert 9
:size-assert #x10
:flag-assert #x900000010
)
(define *ACTOR-bank*
(new 'static 'actor-bank
:pause-dist (meters 50) ;; actor activity range?
:birth-dist (meters 220) ;; draw distance or something?
:birth-max 10 ;; maximum actor births per frame? (it is known they dont all happen at once)
)
)
(define *ACTOR-bank* (new 'static 'actor-bank :pause-dist (meters 50) :birth-dist (meters 220) :birth-max 10))
+28 -28
View File
@@ -20,7 +20,7 @@
;; entity basic methods
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defmethod mem-usage drawable-actor ((this drawable-actor) (arg0 memory-usage-block) (arg1 int))
(defmethod mem-usage ((this drawable-actor) (arg0 memory-usage-block) (arg1 int))
"Update memory use for a drawable-actor"
(set! (-> arg0 length) (max 44 (-> arg0 length)))
(set! (-> arg0 data 43 name) "entity")
@@ -35,7 +35,7 @@
(the-as drawable-actor 0)
)
(defmethod mem-usage drawable-inline-array-actor ((this drawable-inline-array-actor) (arg0 memory-usage-block) (arg1 int))
(defmethod mem-usage ((this drawable-inline-array-actor) (arg0 memory-usage-block) (arg1 int))
"update memory use for a group of drawable actors."
(set! (-> arg0 length) (max 1 (-> arg0 length)))
(set! (-> arg0 data 0 name) (symbol->string 'drawable-group))
@@ -50,12 +50,12 @@
(the-as drawable-inline-array-actor 0)
)
(defmethod print entity-links ((this entity-links))
(defmethod print ((this entity-links))
(format #t "#<entity-links :process ~A @ #x~X>" (-> this process) this)
this
)
(defmethod print entity-perm ((this entity-perm))
(defmethod print ((this entity-perm))
(format #t "#<entity-perm :aid ~D :task ~D :status #x~X :data #x~X @ #x~X>"
(-> this aid)
(-> this task)
@@ -66,19 +66,19 @@
this
)
(defmethod birth! entity ((this entity))
(defmethod birth! ((this entity))
"children of entity should override this."
(format #t "birth ~A~%" this)
this
)
(defmethod kill! entity ((this entity))
(defmethod kill! ((this entity))
"children of entity should override this."
(format #t "kill ~A~%" this)
this
)
(defmethod print entity ((this entity))
(defmethod print ((this entity))
"print an entity, with its name from the res."
(format #t "#<~A :name ~S @ #x~X>" (-> this type) (res-lump-struct this 'name structure) this)
this
@@ -89,7 +89,7 @@
;; entity finding
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defmethod get-level entity ((this entity))
(defmethod get-level ((this entity))
"Get the level that the entity belongs to."
;; loop over levels
@@ -388,7 +388,7 @@
(none)
)
(defmethod print process ((this process))
(defmethod print ((this process))
"Fancier print for process that can also print status of process drawables."
(format #t "#<~A ~S ~A :state ~S :flags " (-> this type) (-> this name) (-> this status) (if (-> this state)
(-> this state name)
@@ -407,7 +407,7 @@
(defmethod debug-print entity-actor ((this entity-actor) (mode symbol) (expected-type type))
(defmethod debug-print ((this entity-actor) (mode symbol) (expected-type type))
"Debug print info about an entity-actor. This is designed to generate rows for the table
printed by method debug-print-entities of level-group."
(let ((s4-0 (-> this etype)))
@@ -476,7 +476,7 @@
(none)
)
(defmethod debug-print-entities level-group ((this level-group) (mode symbol) (expected-type type))
(defmethod debug-print-entities ((this level-group) (mode symbol) (expected-type type))
"Print a table of entities. If expected-type is #f, print all. Otherwise, print only entities of the given type.
Modes:
'art-group: print art groups instead.
@@ -516,7 +516,7 @@
;; entity setup
;;;;;;;;;;;;;;;;;;
(defmethod add-to-level! entity ((this entity) (lev-group level-group) (lev level) (aid actor-id))
(defmethod add-to-level! ((this entity) (lev-group level-group) (lev level) (aid actor-id))
"Add us to a level."
;; grab the first free link
@@ -569,7 +569,7 @@
(none)
)
(defmethod remove-from-level! entity ((this entity) (arg0 level-group))
(defmethod remove-from-level! ((this entity) (arg0 level-group))
"Remove us from the level."
(let ((v1-0 (-> this extra)))
(cond
@@ -616,7 +616,7 @@
(none)
)
(defmethod update-vis-volumes level-group ((this level-group))
(defmethod update-vis-volumes ((this level-group))
(local-vars
(v1-10 symbol)
(sv-16 process)
@@ -680,7 +680,7 @@
(none)
)
(defmethod update-vis-volumes-from-nav-mesh level-group ((this level-group))
(defmethod update-vis-volumes-from-nav-mesh ((this level-group))
"Update the visvol to fit the entire nav-mesh. Does this for all actors in bsps.
Probably only used for debugging."
(local-vars (sv-16 entity) (sv-32 entity))
@@ -749,7 +749,7 @@
(defmethod print-volume-sizes level-group ((this level-group))
(defmethod print-volume-sizes ((this level-group))
"Loop through all entities and print their visibility.
Excludes crate, fuel-cell and springbox."
(local-vars (sv-16 type) (sv-32 (function _varargs_ object)) (sv-48 symbol) (sv-64 string) (sv-80 entity))
@@ -824,7 +824,7 @@
;; The Debug Draw Method
;;;;;;;;;;;;;;;;;;;;;;;;;;
(defmethod debug-draw-actors level-group ((this level-group) (arg0 symbol))
(defmethod debug-draw-actors ((this level-group) (arg0 symbol))
(local-vars
(sv-48 (function symbol bucket-id string vector font-color vector2h symbol))
(sv-64 symbol)
@@ -1191,12 +1191,12 @@
;; Camera Birthing
;;;;;;;;;;;;;;;;;;;;;;;;;;
(defmethod birth! entity-camera ((this entity-camera))
(defmethod birth! ((this entity-camera))
(add-connection *camera-engine* *camera* nothing this #f #f)
this
)
(defmethod kill! entity-camera ((this entity-camera))
(defmethod kill! ((this entity-camera))
(remove-by-param1 *camera-engine* this)
this
)
@@ -1241,7 +1241,7 @@
`(or ,@(apply (lambda (x) `(begin (define-extern ,x type) (type-type? (-> this etype) ,x))) types))
)
(defmethod birth! entity-actor ((this entity-actor))
(defmethod birth! ((this entity-actor))
"Create a process for this entity and start it."
;; temp
@@ -1301,7 +1301,7 @@
(none)
)
(defmethod kill! entity-actor ((this entity-actor))
(defmethod kill! ((this entity-actor))
"Kill an actor."
(let ((a0-1 (-> this extra process)))
(if a0-1
@@ -1312,7 +1312,7 @@
this
)
(defmethod birth bsp-header ((this bsp-header))
(defmethod birth ((this bsp-header))
"Birth everything in the level."
;; (local-vars (v1-71 int) (s5-0 int))
;; (.mfc0 s5-0 Count)
@@ -1408,7 +1408,7 @@
)
(defmethod deactivate-entities bsp-header ((this bsp-header))
(defmethod deactivate-entities ((this bsp-header))
(let ((s5-0 (-> this actors)))
(when (nonzero? s5-0)
(dotimes (s4-0 (-> s5-0 length))
@@ -1502,7 +1502,7 @@
(none)
)
(defmethod update-perm! entity-perm ((this entity-perm) (arg0 symbol) (arg1 entity-perm-status))
(defmethod update-perm! ((this entity-perm) (arg0 symbol) (arg1 entity-perm-status))
(cond
((= arg0 'game)
(logclear! (-> this status) arg1)
@@ -1610,7 +1610,7 @@
(none)
)
(defmethod run-logic? process-drawable ((this process-drawable))
(defmethod run-logic? ((this process-drawable))
(or (not (logtest? (-> this mask) (process-mask actor-pause)))
(or (>= (+ (-> *ACTOR-bank* pause-dist) (-> this root pause-adjust-distance))
(vector-vector-distance (-> this root trans) (math-camera-pos))
@@ -1621,13 +1621,13 @@
)
)
(defmethod birth? entity-links ((this entity-links) (arg0 vector))
(defmethod birth? ((this entity-links) (arg0 vector))
(and (not (logtest? (-> this perm status) (entity-perm-status bit-0 dead)))
(< (vector-vector-distance (-> this trans) arg0) (-> *ACTOR-bank* birth-dist))
)
)
(defmethod actors-update level-group ((this level-group))
(defmethod actors-update ((this level-group))
(local-vars (sv-16 vector) (sv-24 int) (sv-32 entity-links) (sv-48 int) (sv-64 string) (sv-80 int))
(when *compact-actors*
(if (and (= *compact-actors* 'debug) (= (-> *nk-dead-pool* alive-list prev) (-> *nk-dead-pool* first-gap)))
@@ -1852,7 +1852,7 @@
(none)
)
(defmethod set-or-clear-status! entity-actor ((this entity-actor) (arg0 entity-perm-status) (arg1 symbol))
(defmethod set-or-clear-status! ((this entity-actor) (arg0 entity-perm-status) (arg1 symbol))
(let ((v1-0 (-> this extra)))
(if arg1
(logior! (-> v1-0 perm status) arg0)
+27 -27
View File
@@ -9,7 +9,7 @@
;; DECOMP BEGINS
(defmethod relocate process ((this process) (arg0 int))
(defmethod relocate ((this process) (arg0 int))
(let ((v1-0 *kernel-context*))
(set! (-> v1-0 relocating-process) this)
(set! (-> v1-0 relocating-min) (the-as int (&-> this type)))
@@ -96,12 +96,12 @@
(&+ this arg0)
)
(defmethod relocate cpu-thread ((this cpu-thread) (arg0 int))
(defmethod relocate ((this cpu-thread) (arg0 int))
(&+! (-> this process) arg0)
this
)
(defmethod relocate process-drawable ((this process-drawable) (arg0 int))
(defmethod relocate ((this process-drawable) (arg0 int))
(let ((v1-0 *kernel-context*))
(set! (-> v1-0 relocating-process) this)
(set! (-> v1-0 relocating-min) (the-as int (&-> this type)))
@@ -152,7 +152,7 @@
(the-as process-drawable ((method-of-type process relocate) this arg0))
)
(defmethod relocate collide-shape ((this collide-shape) (arg0 int))
(defmethod relocate ((this collide-shape) (arg0 int))
(&+! (-> this process) arg0)
(&+! (-> this root-prim) arg0)
(if (-> this riders)
@@ -161,14 +161,14 @@
this
)
(defmethod relocate collide-shape-moving ((this collide-shape-moving) (arg0 int))
(defmethod relocate ((this collide-shape-moving) (arg0 int))
(if (-> this dynam)
(&+! (-> this dynam) arg0)
)
(the-as collide-shape-moving ((method-of-type collide-shape relocate) this arg0))
)
(defmethod relocate collide-sticky-rider-group ((this collide-sticky-rider-group) (arg0 int))
(defmethod relocate ((this collide-sticky-rider-group) (arg0 int))
(countdown (v1-0 (-> this num-riders))
(let ((a2-2 (-> this rider v1-0)))
(if (-> a2-2 sticky-prim)
@@ -179,12 +179,12 @@
this
)
(defmethod relocate collide-shape-prim ((this collide-shape-prim) (arg0 int))
(defmethod relocate ((this collide-shape-prim) (arg0 int))
(&+! (-> this cshape) arg0)
this
)
(defmethod relocate collide-shape-prim-group ((this collide-shape-prim-group) (arg0 int))
(defmethod relocate ((this collide-shape-prim-group) (arg0 int))
(&+! (-> this cshape) arg0)
(countdown (v1-2 (-> this num-prims))
(&+! (-> this prims v1-2) arg0)
@@ -192,12 +192,12 @@
this
)
(defmethod relocate fact-info ((this fact-info) (arg0 int))
(defmethod relocate ((this fact-info) (arg0 int))
(&+! (-> this process) arg0)
this
)
(defmethod relocate draw-control ((this draw-control) (arg0 int))
(defmethod relocate ((this draw-control) (arg0 int))
(&+! (-> this skeleton) arg0)
(&+! (-> this process) arg0)
(when (-> this ripple)
@@ -216,7 +216,7 @@
this
)
(defmethod relocate joint-control ((this joint-control) (arg0 int))
(defmethod relocate ((this joint-control) (arg0 int))
(if (-> this effect)
(&+! (-> this effect) arg0)
)
@@ -227,7 +227,7 @@
this
)
(defmethod relocate cspace-array ((this cspace-array) (arg0 int))
(defmethod relocate ((this cspace-array) (arg0 int))
(countdown (v1-0 (-> this length))
(let ((a2-2 (-> this data v1-0)))
(if (-> a2-2 parent)
@@ -253,54 +253,54 @@
this
)
(defmethod relocate nav-control ((this nav-control) (arg0 int))
(defmethod relocate ((this nav-control) (arg0 int))
(&+! (-> this process) arg0)
(&+! (-> this shape) arg0)
this
)
(defmethod relocate path-control ((this path-control) (arg0 int))
(defmethod relocate ((this path-control) (arg0 int))
(&+! (-> this process) arg0)
this
)
(defmethod relocate vol-control ((this vol-control) (arg0 int))
(defmethod relocate ((this vol-control) (arg0 int))
(&+! (-> this process) arg0)
this
)
(defmethod relocate water-control ((this water-control) (arg0 int))
(defmethod relocate ((this water-control) (arg0 int))
(&+! (-> this process) arg0)
this
)
(defmethod relocate actor-link-info ((this actor-link-info) (arg0 int))
(defmethod relocate ((this actor-link-info) (arg0 int))
(&+! (-> this process) arg0)
this
)
(defmethod relocate align-control ((this align-control) (arg0 int))
(defmethod relocate ((this align-control) (arg0 int))
(&+! (-> this process) arg0)
this
)
(defmethod relocate joint-mod ((this joint-mod) (arg0 int))
(defmethod relocate ((this joint-mod) (arg0 int))
(&+! (-> this process) arg0)
(&+! (-> this joint) arg0)
this
)
(defmethod relocate joint-mod-wheel ((this joint-mod-wheel) (arg0 int))
(defmethod relocate ((this joint-mod-wheel) (arg0 int))
(&+! (-> this process) arg0)
this
)
(defmethod relocate effect-control ((this effect-control) (arg0 int))
(defmethod relocate ((this effect-control) (arg0 int))
(&+! (-> this process) arg0)
this
)
(defmethod relocate sparticle-launch-control ((this sparticle-launch-control) (arg0 int))
(defmethod relocate ((this sparticle-launch-control) (arg0 int))
(&+! (-> this proc) arg0)
(countdown (v1-2 (-> this length))
(let* ((a0-3 (-> this data v1-2))
@@ -331,14 +331,14 @@
this
)
(defmethod relocate camera-master ((this camera-master) (arg0 int))
(defmethod relocate ((this camera-master) (arg0 int))
(if (nonzero? (-> this water-drip))
(&+! (-> this water-drip) arg0)
)
(the-as camera-master ((method-of-type process relocate) this arg0))
)
(defmethod relocate time-of-day-proc ((this time-of-day-proc) (arg0 int))
(defmethod relocate ((this time-of-day-proc) (arg0 int))
(if (nonzero? (-> this stars))
(&+! (-> this stars) arg0)
)
@@ -354,14 +354,14 @@
(the-as time-of-day-proc ((method-of-type process relocate) this arg0))
)
(defmethod relocate swingpole ((this swingpole) (arg0 int))
(defmethod relocate ((this swingpole) (arg0 int))
(if (nonzero? (-> this root))
(&+! (-> this root) arg0)
)
(the-as swingpole ((method-of-type process relocate) this arg0))
)
(defmethod relocate part-tracker ((this part-tracker) (arg0 int))
(defmethod relocate ((this part-tracker) (arg0 int))
(if (nonzero? (-> this root))
(&+! (-> this root) arg0)
)
@@ -371,7 +371,7 @@
(the-as part-tracker ((method-of-type process relocate) this arg0))
)
(defmethod relocate manipy ((this manipy) (arg0 int))
(defmethod relocate ((this manipy) (arg0 int))
(if (nonzero? (-> this joint 0))
(&+! (-> this joint 0) arg0)
)
+27 -33
View File
@@ -11,14 +11,13 @@
;; the res-tag describes some data
(deftype res-tag (uint128)
((name symbol :offset 0) ;; name used for lookups
(key-frame float :offset 32) ;; if it has a time value associated with it
(elt-type type :offset 64) ;; the type of the data stored
(data-offset uint16 :offset 96) ;; offset to our data within our lump
(elt-count uint32 :offset 112 :size 15) ;; if we're an array
(inlined? uint8 :offset 127 :size 1) ;; if our data is an inline array or not.
((name symbol :offset 0) ;; name used for lookups
(key-frame float :offset 32) ;; if it has a time value associated with it
(elt-type type :offset 64) ;; the type of the data stored
(data-offset uint16 :offset 96) ;; offset to our data within our lump
(elt-count uint32 :offset 112 :size 15) ;; if we're an array
(inlined? uint8 :offset 127 :size 1) ;; if our data is an inline array or not.
)
:flag-assert #x900000010
)
;; the indices of two res tags. If the specific key-frame time is in between two
@@ -34,34 +33,29 @@
;; a res-lump is a collection of res-tags and the associated data.
;; it's used as the base type for entities where the res stores various parameters.
(deftype res-lump (basic)
((length int32 :offset-assert 4)
(allocated-length int32 :offset-assert 8)
(data-base pointer :offset-assert 12)
(data-top pointer :offset-assert 16)
(data-size int32 :offset-assert 20)
(extra entity-links :offset-assert 24)
(tag (pointer res-tag) :offset-assert 28)
((length int32)
(allocated-length int32)
(data-base pointer)
(data-top pointer)
(data-size int32)
(extra entity-links)
(tag (pointer res-tag))
)
:method-count-assert 22
:size-assert #x20
:flag-assert #x1600000020
;; field extra is a basic loaded with a signed load
(:methods
(new (symbol type int int) _type_ 0)
(get-property-data (_type_ symbol symbol float pointer (pointer res-tag) pointer) pointer :no-virtual 9)
(get-property-struct (_type_ symbol symbol float structure (pointer res-tag) pointer) structure :no-virtual 10)
(get-property-value (_type_ symbol symbol float uint128 (pointer res-tag) pointer) uint128 :no-virtual 11)
(get-property-value-float (_type_ symbol symbol float float (pointer res-tag) pointer) float :no-virtual 12)
(get-tag-index-data (_type_ int) pointer 13)
(get-tag-data (_type_ res-tag) pointer 14)
(allocate-data-memory-for-tag! (_type_ res-tag) res-tag 15)
(sort! (_type_) _type_ 16)
(add-data! (_type_ res-tag pointer) res-lump 17)
(add-32bit-data! (_type_ res-tag object) res-lump 18)
(lookup-tag-idx (_type_ symbol symbol float) res-tag-pair :no-virtual 19)
(make-property-data (_type_ float res-tag-pair pointer) pointer 20)
(get-curve-data! (_type_ curve symbol symbol float) symbol 21)
(new (symbol type int int) _type_)
(get-property-data (_type_ symbol symbol float pointer (pointer res-tag) pointer) pointer :no-virtual)
(get-property-struct (_type_ symbol symbol float structure (pointer res-tag) pointer) structure :no-virtual)
(get-property-value (_type_ symbol symbol float uint128 (pointer res-tag) pointer) uint128 :no-virtual)
(get-property-value-float (_type_ symbol symbol float float (pointer res-tag) pointer) float :no-virtual)
(get-tag-index-data (_type_ int) pointer)
(get-tag-data (_type_ res-tag) pointer)
(allocate-data-memory-for-tag! (_type_ res-tag) res-tag)
(sort! (_type_) _type_)
(add-data! (_type_ res-tag pointer) res-lump)
(add-32bit-data! (_type_ res-tag object) res-lump)
(lookup-tag-idx (_type_ symbol symbol float) res-tag-pair :no-virtual)
(make-property-data (_type_ float res-tag-pair pointer) pointer)
(get-curve-data! (_type_ curve symbol symbol float) symbol)
)
)
+19 -19
View File
@@ -38,7 +38,7 @@ This is updated from the entity system used in Crash 2, which had most of these
;; DECOMP BEGINS
(defmethod print res-tag ((this res-tag))
(defmethod print ((this res-tag))
"print a res-tag."
(if (res-ref? this)
@@ -61,7 +61,7 @@ This is updated from the entity system used in Crash 2, which had most of these
this
)
(defmethod length res-tag ((this res-tag))
(defmethod length ((this res-tag))
"get the length in bytes of this tag's resource."
(the int
@@ -74,7 +74,7 @@ This is updated from the entity system used in Crash 2, which had most of these
)
)
(defmethod get-tag-index-data res-lump ((this res-lump) (n int))
(defmethod get-tag-index-data ((this res-lump) (n int))
"get the data address of the n'th tag."
(declare (inline))
@@ -82,7 +82,7 @@ This is updated from the entity system used in Crash 2, which had most of these
(-> this tag n data-offset))
)
(defmethod get-tag-data res-lump ((this res-lump) (tag res-tag))
(defmethod get-tag-data ((this res-lump) (tag res-tag))
"get the data address of the specified tag."
(declare (inline))
@@ -105,13 +105,13 @@ This is updated from the entity system used in Crash 2, which had most of these
)
)
(defmethod length res-lump ((this res-lump))
(defmethod length ((this res-lump))
"get the amount of resources in a res-lump."
(-> this length)
)
(defmethod asize-of res-lump ((this res-lump))
(defmethod asize-of ((this res-lump))
"get the allocated size of a res-lump."
(the int (+ (-> this type psize) ;; psize is used here, but size is used in the allocation?
@@ -119,7 +119,7 @@ This is updated from the entity system used in Crash 2, which had most of these
(-> this data-size)))
)
(defmethod inspect res-lump ((this res-lump))
(defmethod inspect ((this res-lump))
(format #t "[~8x] ~A~%" this (-> this type))
(format #t "~Textra: ~A~%" (-> this extra))
(format #t "~Tallocated-length: ~D~%" (-> this allocated-length))
@@ -144,7 +144,7 @@ This is updated from the entity system used in Crash 2, which had most of these
this
)
(defmethod lookup-tag-idx res-lump ((this res-lump) (name-sym symbol) (mode symbol) (time float))
(defmethod lookup-tag-idx ((this res-lump) (name-sym symbol) (mode symbol) (time float))
"Look up the index of the tag containing with the given name and timestamp.
Correct lookups return a res-tag-pair, which contains one tag index in the lower 32 bits and one in the upper 32 bits.
Depending on the mode, they may be the same, or they may be two tags that you should interpolate
@@ -332,7 +332,7 @@ This is updated from the entity system used in Crash 2, which had most of these
)
)
(defmethod make-property-data res-lump ((this res-lump) (time float) (tag-pair res-tag-pair) (buf pointer))
(defmethod make-property-data ((this res-lump) (time float) (tag-pair res-tag-pair) (buf pointer))
"Returns (a pointer to) the value data of a property with the tag-pair.
If tag-pair does not represent an exact point in the timeline, then the data is interpolated based on time
with the result written into buf. buf must have enough space to copy all of the data.
@@ -417,7 +417,7 @@ This is updated from the entity system used in Crash 2, which had most of these
)
)
(defmethod get-property-data res-lump ((this res-lump) (name symbol) (mode symbol) (time float) (default pointer) (tag-addr (pointer res-tag)) (buf-addr pointer))
(defmethod get-property-data ((this res-lump) (name symbol) (mode symbol) (time float) (default pointer) (tag-addr (pointer res-tag)) (buf-addr pointer))
"Returns an address to a given property's data at a specific time stamp, or default on error.
name is the name of the property you want, mode is its lookup mode ('interp 'base 'exact), time is the timestamp.
default is the default result returned in the case of an error.
@@ -442,7 +442,7 @@ This is updated from the entity system used in Crash 2, which had most of these
(defmethod get-property-struct res-lump ((this res-lump) (name symbol) (mode symbol) (time float) (default structure) (tag-addr (pointer res-tag)) (buf-addr pointer))
(defmethod get-property-struct ((this res-lump) (name symbol) (mode symbol) (time float) (default structure) (tag-addr (pointer res-tag)) (buf-addr pointer))
"Returns a given struct property's value at a specific time stamp, or default on error.
name is the name of the property you want, mode is its lookup mode ('interp 'base 'exact), time is the timestamp.
default is the default result returned in the case of an error.
@@ -473,7 +473,7 @@ This is updated from the entity system used in Crash 2, which had most of these
(defmethod get-property-value res-lump ((this res-lump) (name symbol) (mode symbol) (time float) (default uint128) (tag-addr (pointer res-tag)) (buf-addr pointer))
(defmethod get-property-value ((this res-lump) (name symbol) (mode symbol) (time float) (default uint128) (tag-addr (pointer res-tag)) (buf-addr pointer))
"Returns a given value property's value at a specific time stamp, or default on error.
name is the name of the property you want, mode is its lookup mode ('interp 'base 'exact), time is the timestamp.
default is the default result returned in the case of an error.
@@ -525,7 +525,7 @@ This is updated from the entity system used in Crash 2, which had most of these
)
(defmethod get-property-value-float res-lump ((this res-lump) (name symbol) (mode symbol) (time float) (default float) (tag-addr (pointer res-tag)) (buf-addr pointer))
(defmethod get-property-value-float ((this res-lump) (name symbol) (mode symbol) (time float) (default float) (tag-addr (pointer res-tag)) (buf-addr pointer))
"same as get-property-value but float type is checked first?"
(let ((tag-pair (lookup-tag-idx this name mode time)))
@@ -574,7 +574,7 @@ This is updated from the entity system used in Crash 2, which had most of these
default
)
(defmethod sort! res-lump ((this res-lump))
(defmethod sort! ((this res-lump))
"Sort all tags based on name, then key-frame."
(let ((tags-sorted -1))
@@ -605,7 +605,7 @@ This is updated from the entity system used in Crash 2, which had most of these
this
)
(defmethod allocate-data-memory-for-tag! res-lump ((this res-lump) (arg0 res-tag))
(defmethod allocate-data-memory-for-tag! ((this res-lump) (arg0 res-tag))
"Find space for the data described by arg0 in `this`.
Returns a tag with data-offset set correctly for this res-lump.
If the lump already contains memory for the given tag, and it is big enough,
@@ -700,7 +700,7 @@ This is updated from the entity system used in Crash 2, which had most of these
arg0
)
(defmethod add-data! res-lump ((this res-lump) (arg0 res-tag) (arg1 pointer))
(defmethod add-data! ((this res-lump) (arg0 res-tag) (arg1 pointer))
"Given a tag and a pointer to its data, copy it to this res-lump.
This doesn't seem to do the right thing if the given tag is a non-inline tag
with > 1 element."
@@ -732,7 +732,7 @@ This is updated from the entity system used in Crash 2, which had most of these
this
)
(defmethod add-32bit-data! res-lump ((this res-lump) (arg0 res-tag) (arg1 object))
(defmethod add-32bit-data! ((this res-lump) (arg0 res-tag) (arg1 object))
"Add a single 32-bit value using add-data."
(set! (-> arg0 inlined?) 1)
(add-data! this arg0 (& arg1)) ;; note, only 32-bits are spilled to the stack here.
@@ -747,7 +747,7 @@ This is updated from the entity system used in Crash 2, which had most of these
|#
)
(defmethod get-curve-data! res-lump ((this res-lump) (curve-target curve) (points-name symbol) (knots-name symbol) (time float))
(defmethod get-curve-data! ((this res-lump) (curve-target curve) (points-name symbol) (knots-name symbol) (time float))
"Read curve data and write it to curve-target. Return #t if both control points and knots data was succesfully read, #f otherwise."
(let ((result #f))
@@ -785,7 +785,7 @@ This is updated from the entity system used in Crash 2, which had most of these
(define-extern part-group-pointer? (function pointer symbol))
(declare-type nav-mesh basic)
(declare-type collide-mesh basic)
(defmethod mem-usage res-lump ((this res-lump) (block memory-usage-block) (flags int))
(defmethod mem-usage ((this res-lump) (block memory-usage-block) (flags int))
"Get the memory usage of this lump and its data"
(local-vars (sv-16 int))
+16 -19
View File
@@ -10,26 +10,23 @@
;; DECOMP BEGINS
(deftype effect-control (basic)
((process process-drawable :offset-assert 4)
(flags uint32 :offset-assert 8)
(last-frame-group art-joint-anim :offset-assert 12)
(last-frame-num float :offset-assert 16)
(channel-offset int32 :offset-assert 20)
(res res-lump :offset-assert 24)
(name (pointer res-tag) :offset-assert 28)
(param uint32 :offset-assert 32)
((process process-drawable)
(flags uint32)
(last-frame-group art-joint-anim)
(last-frame-num float)
(channel-offset int32)
(res res-lump)
(name (pointer res-tag))
(param uint32)
)
:method-count-assert 15
:size-assert #x24
:flag-assert #xf00000024
(:methods
(new (symbol type process-drawable) _type_ 0)
(effect-control-method-9 (_type_) none 9)
(effect-control-method-10 (_type_ symbol float int) object 10)
(effect-control-method-11 (_type_ symbol float int basic pat-surface) none 11)
(effect-control-method-12 (_type_ symbol float int basic sound-name) int 12)
(set-channel-offset! (_type_ int) none 13)
(effect-control-method-14 (_type_ float float float) none 14)
(new (symbol type process-drawable) _type_)
(effect-control-method-9 (_type_) none)
(effect-control-method-10 (_type_ symbol float int) object)
(effect-control-method-11 (_type_ symbol float int basic pat-surface) none)
(effect-control-method-12 (_type_ symbol float int basic sound-name) int)
(set-channel-offset! (_type_ int) none)
(effect-control-method-14 (_type_ float float float) none)
)
)
@@ -49,7 +46,7 @@
)
)
(defmethod set-channel-offset! effect-control ((this effect-control) (arg0 int))
(defmethod set-channel-offset! ((this effect-control) (arg0 int))
(set! (-> this channel-offset) arg0)
0
(none)
+10 -75
View File
@@ -12,72 +12,7 @@
(define *debug-effect-control* #f)
(defun sound-name-with-material ((arg0 symbol) (arg1 pat-surface) (arg2 string))
(let ((gp-0 format)
(a0-2 (clear *temp-string*))
(a1-1 "~S-~S~S")
(v1-1 (-> arg1 material))
)
(gp-0
a0-2
a1-1
arg0
(cond
((= v1-1 (pat-material sand))
"sand"
)
((= v1-1 (pat-material wood))
"wood"
)
((= v1-1 (pat-material crwood))
"crwood"
)
((or (= v1-1 (pat-material tube)) (= v1-1 (pat-material pcmetal)))
"pcmetal"
)
((or (= v1-1 (pat-material metal)) (= v1-1 (pat-material rotate)))
"metal"
)
((= v1-1 (pat-material snow))
"snow"
)
((= v1-1 (pat-material deepsnow))
"dpsnow"
)
((= v1-1 (pat-material gravel))
"gravel"
)
((= v1-1 (pat-material dirt))
"dirt"
)
((= v1-1 (pat-material stone))
"stone"
)
((= v1-1 (pat-material waterbottom))
"water"
)
((= v1-1 (pat-material tar))
"tar"
)
((= v1-1 (pat-material straw))
"straw"
)
((= v1-1 (pat-material ice))
"ice"
)
((= v1-1 (pat-material swamp))
"swamp"
)
((= v1-1 (pat-material neutral))
"neutral"
)
(else
"grass"
)
)
arg2
)
)
(string->sound-name *temp-string*)
(string->sound-name (string-format "~S-~S~S" arg0 (enum->string pat-material (-> arg1 material)) arg2))
)
(defun effect-param->sound-spec ((arg0 sound-spec) (arg1 (pointer float)) (arg2 int))
@@ -129,7 +64,7 @@
arg0
)
(defmethod effect-control-method-9 effect-control ((this effect-control))
(defmethod effect-control-method-9 ((this effect-control))
(let* ((a0-1 (-> this process skel))
(v1-3 (if (< (-> this channel-offset) (-> a0-1 active-channels))
(-> a0-1 root-channel (-> this channel-offset))
@@ -230,7 +165,7 @@
(none)
)
(defmethod effect-control-method-14 effect-control ((this effect-control) (arg0 float) (arg1 float) (arg2 float))
(defmethod effect-control-method-14 ((this effect-control) (arg0 float) (arg1 float) (arg2 float))
;; note: this check was added. I believe in the original game name could be false, and then the
;; effect-name check below would fail. This did not cause a crash on original hardware because
;; misaligned 16-byte loads silently align. This causes a crash in opengoal, so we skip it manually.
@@ -261,7 +196,7 @@
(none)
)
(defmethod effect-control-method-10 effect-control ((this effect-control) (arg0 symbol) (arg1 float) (arg2 int))
(defmethod effect-control-method-10 ((this effect-control) (arg0 symbol) (arg1 float) (arg2 int))
(local-vars
(sv-160 int)
(sv-176 symbol)
@@ -423,10 +358,10 @@
arg1
s5-0
)
(launch-particles :rate 1.0
(the-as sparticle-launcher s3-0)
(vector<-cspace! (new 'stack-no-clear 'vector) (-> this process node-list data s5-0))
)
(launch-particles
(the-as sparticle-launcher s3-0)
(vector<-cspace! (new 'stack-no-clear 'vector) (-> this process node-list data s5-0))
)
)
((= (-> (the-as basic s3-0) type) sparticle-launch-group)
(if *debug-effect-control*
@@ -531,7 +466,7 @@
0
)
(defmethod effect-control-method-11 effect-control ((this effect-control) (arg0 symbol) (arg1 float) (arg2 int) (arg3 basic) (arg4 pat-surface))
(defmethod effect-control-method-11 ((this effect-control) (arg0 symbol) (arg1 float) (arg2 int) (arg3 basic) (arg4 pat-surface))
(local-vars
(sv-48
(function sparticle-system sparticle-launcher vector sparticle-launch-state sparticle-launch-control float none)
@@ -1050,7 +985,7 @@
(none)
)
(defmethod effect-control-method-12 effect-control ((this effect-control) (arg0 symbol) (arg1 float) (arg2 int) (arg3 basic) (arg4 sound-name))
(defmethod effect-control-method-12 ((this effect-control) (arg0 symbol) (arg1 float) (arg2 int) (arg3 basic) (arg4 sound-name))
(local-vars (sv-112 res-tag) (sv-128 sound-name) (sv-144 basic) (sv-160 (function vector vector float)))
(set! sv-144 arg3)
(let ((s0-0 arg4)
+72 -80
View File
@@ -11,44 +11,42 @@
;; All game code should reference *FACT-bank* to determine these parameters
(deftype fact-bank (basic)
((eco-level-max float :offset-assert 4)
(eco-single-inc float :offset-assert 8)
(eco-full-inc float :offset-assert 12)
(eco-single-timeout seconds :offset-assert 16)
(eco-full-timeout seconds :offset-assert 24)
(dummy seconds :offset-assert 32)
(health-max-default float :offset-assert 40)
(health-single-inc float :offset-assert 44)
(eco-pill-max-default float :offset-assert 48)
(health-small-inc float :offset-assert 52)
(buzzer-max-default float :offset-assert 56)
(buzzer-single-inc float :offset-assert 60)
(suck-bounce-dist meters :offset-assert 64)
(suck-suck-dist meters :offset-assert 68)
(default-pill-inc float :offset-assert 72)
((eco-level-max float)
(eco-single-inc float)
(eco-full-inc float)
(eco-single-timeout seconds)
(eco-full-timeout seconds)
(dummy seconds)
(health-max-default float)
(health-single-inc float)
(eco-pill-max-default float)
(health-small-inc float)
(buzzer-max-default float)
(buzzer-single-inc float)
(suck-bounce-dist meters)
(suck-suck-dist meters)
(default-pill-inc float)
)
:method-count-assert 9
:size-assert #x4c
:flag-assert #x90000004c
)
(define *FACT-bank* (new 'static 'fact-bank
:eco-level-max 2.0
:eco-single-inc 1.0
:eco-full-inc 5.0
:eco-single-timeout (seconds 5)
:eco-full-timeout (seconds 20)
:dummy (seconds 15)
:health-max-default 3.0
:health-single-inc 1.0
:eco-pill-max-default 50.0
:health-small-inc 1.0
:buzzer-max-default 7.0
:buzzer-single-inc 1.0
:suck-bounce-dist (meters 18)
:suck-suck-dist (meters 7.5)
)
)
:eco-level-max 2.0
:eco-single-inc 1.0
:eco-full-inc 5.0
:eco-single-timeout (seconds 5)
:eco-full-timeout (seconds 20)
:dummy (seconds 15)
:health-max-default 3.0
:health-single-inc 1.0
:eco-pill-max-default 50.0
:health-small-inc 1.0
:buzzer-max-default 7.0
:buzzer-single-inc 1.0
:suck-bounce-dist (meters 18)
:suck-suck-dist (meters 7.5)
)
)
(defenum pickup-type
:type int32
@@ -100,65 +98,58 @@
;; amounts or timings
;; The fact-info class stores data that is common to all fact-infos.
(deftype fact-info (basic)
((process process-drawable :offset-assert 4) ;; the process that this info is for
(pickup-type pickup-type :offset-assert 8)
(pickup-amount float :offset-assert 12) ;; eco increment on pickup
(pickup-spawn-amount float :offset-assert 16)
(options fact-options :offset-assert 24)
(fade-time time-frame :offset-assert 32)
((process process-drawable)
(pickup-type pickup-type)
(pickup-amount float)
(pickup-spawn-amount float)
(options fact-options)
(fade-time time-frame)
)
:method-count-assert 12
:size-assert #x28
:flag-assert #xc00000028
(:methods
(new (symbol type process-drawable pickup-type float) _type_ 0)
(drop-pickup (_type_ symbol process-tree fact-info int) (pointer process) 9)
(reset! (_type_ symbol) none 10)
(pickup-collectable! (_type_ pickup-type float handle) float 11)
(new (symbol type process-drawable pickup-type float) _type_)
(drop-pickup (_type_ symbol process-tree fact-info int) (pointer process))
(reset! (_type_ symbol) none)
(pickup-collectable! (_type_ pickup-type float handle) float)
)
)
(deftype fact-info-target (fact-info)
((eco-type pickup-type :offset-assert 40)
(eco-level float :offset-assert 44)
(eco-pickup-time time-frame :offset-assert 48)
(eco-timeout seconds :offset-assert 56)
(health float :offset-assert 64)
(health-max float :offset-assert 68)
(buzzer float :offset-assert 72)
(buzzer-max float :offset-assert 76)
(eco-pill float :offset-assert 80)
(eco-pill-max float :offset-assert 84)
(health-pickup-time time-frame :offset-assert 88)
(eco-source handle :offset-assert 96)
(eco-source-time time-frame :offset-assert 104)
(money-pickup-time time-frame :offset-assert 112)
(buzzer-pickup-time time-frame :offset-assert 120)
(fuel-cell-pickup-time time-frame :offset-assert 128)
(eco-pill-pickup-time time-frame :offset-assert 136)
((eco-type pickup-type)
(eco-level float)
(eco-pickup-time time-frame)
(eco-timeout seconds)
(health float)
(health-max float)
(buzzer float)
(buzzer-max float)
(eco-pill float)
(eco-pill-max float)
(health-pickup-time time-frame)
(eco-source handle)
(eco-source-time time-frame)
(money-pickup-time time-frame)
(buzzer-pickup-time time-frame)
(fuel-cell-pickup-time time-frame)
(eco-pill-pickup-time time-frame)
)
:method-count-assert 12
:size-assert #x90
:flag-assert #xc00000090
(:methods
(new (symbol type process-drawable pickup-type float) _type_ 0)
(new (symbol type process-drawable pickup-type float) _type_)
)
)
(deftype fact-info-enemy (fact-info)
((speed float :offset-assert 40)
(idle-distance meters :offset-assert 44)
(notice-top meters :offset-assert 48)
(notice-bottom meters :offset-assert 52)
(cam-horz meters :offset-assert 56)
(cam-vert meters :offset-assert 60)
(cam-notice-dist meters :offset-assert 64)
((speed float)
(idle-distance meters)
(notice-top meters)
(notice-bottom meters)
(cam-horz meters)
(cam-vert meters)
(cam-notice-dist meters)
)
:method-count-assert 12
:size-assert #x44
:flag-assert #xc00000044
(:methods
(new (symbol type process-drawable pickup-type float) _type_ 0)
(new (symbol type process-drawable pickup-type float) _type_)
)
)
@@ -182,6 +173,7 @@
;; remember who we belong to
(set! (-> this process) proc)
(set! tag (new 'static 'res-tag))
;; eco may override the pickup type and amount, so try to get this.
(let ((v1-6 (res-lump-data ent 'eco-info (pointer int32) :tag-ptr (& tag) :time 0.0)))
@@ -222,7 +214,7 @@
)
)
(defmethod pickup-collectable! fact-info ((this fact-info) (arg0 pickup-type) (arg1 float) (arg2 handle))
(defmethod pickup-collectable! ((this fact-info) (arg0 pickup-type) (arg1 float) (arg2 handle))
0.0
)
+84 -100
View File
@@ -36,8 +36,6 @@
(atki13)
)
;; DECOMP BEGINS
;; These flags are a bit of a hack and are mostly only meaningful on *target*
;; except for "fade-out-particles" which is meaninful for eco only.
(defenum state-flags
@@ -89,62 +87,58 @@
(deftype process-drawable (process)
;; The "root" is the location of the process-drawable.
;; It may be a more specific type, and often contains the collision geometry.
((root trsqv :offset-assert 112)
((root trsqv)
;; The node-list is a list of all the joints and bones, and how
;; joints update bones.
(node-list cspace-array :offset-assert 116)
(node-list cspace-array)
;; the draw-control contains references to all data required for drawing
(draw draw-control :offset-assert 120)
(draw draw-control)
;; The skel is a joint-control which combines animations to control joints
(skel joint-control :offset-assert 124)
(skel joint-control)
;; The nav-control allows enemies to navigate on a nav mesh.
(nav nav-control :offset-assert 128)
(nav nav-control)
;; alignment of animation to our position
(align align-control :offset-assert 132)
(align align-control)
;; our path (like if we are a platform or enemy that moves along a fixed path)
(path path-control :offset-assert 136)
(path path-control)
;; associated volumes (for water)
(vol vol-control :offset-assert 140)
(vol vol-control)
;; our settings
(fact fact-info :offset-assert 144)
(fact fact-info)
;; reference to our entity
(link actor-link-info :offset-assert 148)
(link actor-link-info)
;; our particles
(part sparticle-launch-control :offset-assert 152)
(part sparticle-launch-control)
;; state related to entering and being in water
(water water-control :offset-assert 156)
(water water-control)
;; any sound that we're playing
(sound ambient-sound :offset-assert 160)
(sound ambient-sound)
;; seems to only be used in target?
(state-flags state-flags :offset-assert 164)
(state-flags state-flags)
;; the time when we last did something. Used for different things in different objects
(state-time time-frame :offset-assert 168)
(state-time time-frame)
)
:heap-base #x40
:method-count-assert 20
:size-assert #xb0
:flag-assert #x14004000b0
(:methods
(initialize-skeleton (_type_ skeleton-group pair) none 14)
(initialize-skeleton-by-name (_type_ string object) _type_ 15)
(apply-alignment (_type_ align-opts transformq vector) collide-shape 16)
(do-joint-math! (_type_) none 17)
(cleanup-for-death (_type_) none 18)
(evaluate-joint-control (_type_) none 19)
(initialize-skeleton (_type_ skeleton-group pair) none)
(initialize-skeleton-by-name (_type_ string object) _type_)
(apply-alignment (_type_ align-opts transformq vector) collide-shape)
(do-joint-math! (_type_) none)
(cleanup-for-death (_type_) none)
(evaluate-joint-control (_type_) none)
)
(:states
(process-drawable-art-error string)
@@ -156,80 +150,73 @@
;; methods to a type?
(deftype process-drawable-reserved (process-drawable)
()
:heap-base #x40
:method-count-assert 63
:size-assert #xb0
:flag-assert #x3f004000b0
(:methods
(process-drawable-reserved-method-20 () none 20)
(process-drawable-reserved-method-21 () none 21)
(process-drawable-reserved-method-22 () none 22)
(process-drawable-reserved-method-23 () none 23)
(process-drawable-reserved-method-24 () none 24)
(process-drawable-reserved-method-25 () none 25)
(process-drawable-reserved-method-26 () none 26)
(process-drawable-reserved-method-27 () none 27)
(process-drawable-reserved-method-28 () none 28)
(process-drawable-reserved-method-29 () none 29)
(process-drawable-reserved-method-30 () none 30)
(process-drawable-reserved-method-31 () none 31)
(process-drawable-reserved-method-32 () none 32)
(process-drawable-reserved-method-33 () none 33)
(process-drawable-reserved-method-34 () none 34)
(process-drawable-reserved-method-35 () none 35)
(process-drawable-reserved-method-36 () none 36)
(process-drawable-reserved-method-37 () none 37)
(process-drawable-reserved-method-38 () none 38)
(process-drawable-reserved-method-39 () none 39)
(process-drawable-reserved-method-40 () none 40)
(process-drawable-reserved-method-41 () none 41)
(process-drawable-reserved-method-42 () none 42)
(process-drawable-reserved-method-43 () none 43)
(process-drawable-reserved-method-44 () none 44)
(process-drawable-reserved-method-45 () none 45)
(process-drawable-reserved-method-46 () none 46)
(process-drawable-reserved-method-47 () none 47)
(process-drawable-reserved-method-48 () none 48)
(process-drawable-reserved-method-49 () none 49)
(process-drawable-reserved-method-50 () none 50)
(process-drawable-reserved-method-51 () none 51)
(process-drawable-reserved-method-52 () none 52)
(process-drawable-reserved-method-53 () none 53)
(process-drawable-reserved-method-54 () none 54)
(process-drawable-reserved-method-55 () none 55)
(process-drawable-reserved-method-56 () none 56)
(process-drawable-reserved-method-57 () none 57)
(process-drawable-reserved-method-58 () none 58)
(process-drawable-reserved-method-59 () none 59)
(process-drawable-reserved-method-60 () none 60)
(process-drawable-reserved-method-61 () none 61)
(process-drawable-reserved-method-62 () none 62)
(process-drawable-reserved-method-20 () none)
(process-drawable-reserved-method-21 () none)
(process-drawable-reserved-method-22 () none)
(process-drawable-reserved-method-23 () none)
(process-drawable-reserved-method-24 () none)
(process-drawable-reserved-method-25 () none)
(process-drawable-reserved-method-26 () none)
(process-drawable-reserved-method-27 () none)
(process-drawable-reserved-method-28 () none)
(process-drawable-reserved-method-29 () none)
(process-drawable-reserved-method-30 () none)
(process-drawable-reserved-method-31 () none)
(process-drawable-reserved-method-32 () none)
(process-drawable-reserved-method-33 () none)
(process-drawable-reserved-method-34 () none)
(process-drawable-reserved-method-35 () none)
(process-drawable-reserved-method-36 () none)
(process-drawable-reserved-method-37 () none)
(process-drawable-reserved-method-38 () none)
(process-drawable-reserved-method-39 () none)
(process-drawable-reserved-method-40 () none)
(process-drawable-reserved-method-41 () none)
(process-drawable-reserved-method-42 () none)
(process-drawable-reserved-method-43 () none)
(process-drawable-reserved-method-44 () none)
(process-drawable-reserved-method-45 () none)
(process-drawable-reserved-method-46 () none)
(process-drawable-reserved-method-47 () none)
(process-drawable-reserved-method-48 () none)
(process-drawable-reserved-method-49 () none)
(process-drawable-reserved-method-50 () none)
(process-drawable-reserved-method-51 () none)
(process-drawable-reserved-method-52 () none)
(process-drawable-reserved-method-53 () none)
(process-drawable-reserved-method-54 () none)
(process-drawable-reserved-method-55 () none)
(process-drawable-reserved-method-56 () none)
(process-drawable-reserved-method-57 () none)
(process-drawable-reserved-method-58 () none)
(process-drawable-reserved-method-59 () none)
(process-drawable-reserved-method-60 () none)
(process-drawable-reserved-method-61 () none)
(process-drawable-reserved-method-62 () none)
)
)
;; The attack-info is generated by attackers and sent to target.
(deftype attack-info (structure)
((trans vector :inline :offset-assert 0)
(vector vector :inline :offset-assert 16)
(intersection vector :inline :offset-assert 32)
(attacker handle :offset-assert 48)
(invinc-time time-frame :offset-assert 56)
(mask attack-mask :offset-assert 64)
(mode symbol :offset-assert 68)
(shove-back meters :offset-assert 72)
(shove-up meters :offset-assert 76)
(speed meters :offset-assert 80)
(dist meters :offset-assert 84)
(control float :offset-assert 88)
(angle symbol :offset-assert 92)
(rotate-to degrees :offset-assert 96)
(prev-state state :offset-assert 100)
((trans vector :inline)
(vector vector :inline)
(intersection vector :inline)
(attacker handle)
(invinc-time time-frame)
(mask attack-mask)
(mode symbol)
(shove-back meters)
(shove-up meters)
(speed meters)
(dist meters)
(control float)
(angle symbol)
(rotate-to degrees)
(prev-state state)
)
:method-count-assert 10
:size-assert #x68
:flag-assert #xa00000068
(:methods
(combine! (_type_ attack-info) none 9)
(combine! (_type_ attack-info) none)
)
)
@@ -237,11 +224,8 @@
(define *global-attack-id* 0)
(deftype ground-tween-info (structure)
((chan uint8 3 :offset-assert 0)
(blend float 3 :offset-assert 4)
(group uint32 5 :offset-assert 16)
((chan uint8 3)
(blend float 3)
(group uint32 5)
)
:method-count-assert 9
:size-assert #x24
:flag-assert #x900000024
)
+114 -129
View File
@@ -14,30 +14,27 @@
;; Game parameters.
(deftype game-bank (basic)
((life-max-default float :offset-assert 4) ;; yes this life system works, but does nothing
(life-start-default float :offset-assert 8)
(life-single-inc float :offset-assert 12)
(money-task-inc float :offset-assert 16)
(money-oracle-inc float :offset-assert 20)
((life-max-default float) ;; yes this life system works, but does nothing
(life-start-default float)
(life-single-inc float)
(money-task-inc float)
(money-oracle-inc float)
)
:method-count-assert 9
:size-assert #x18
:flag-assert #x900000018
)
(define *GAME-bank* (new 'static 'game-bank
:life-max-default 99.0
:life-start-default 5.0
:life-single-inc 1.0
:money-task-inc 90.0
:money-oracle-inc 120.0
)
)
:life-max-default 99.0
:life-start-default 5.0
:life-single-inc 1.0
:money-task-inc 90.0
:money-oracle-inc 120.0
)
)
;; aid
(deftype actor-id (uint32)
()
:flag-assert #x900000004
)
;;;;;;;;;;;;;;;
@@ -49,43 +46,37 @@
;; the possible load state for a level.
(deftype level-buffer-state (structure)
((name symbol :offset-assert 0) ;; level name
(display? symbol :offset-assert 4) ;; should it be drawn?
(force-vis? symbol :offset-assert 8) ;; force everything to be visible.
(force-inside? symbol :offset-assert 12) ;; force player to be considered inside.
((name symbol)
(display? symbol)
(force-vis? symbol)
(force-inside? symbol)
)
:pack-me
:method-count-assert 9
:size-assert #x10
:flag-assert #x900000010
)
;; This includes more state than just "loading" - it also has a list of commands to execute and
;; other random state.
(deftype load-state (basic)
((want level-buffer-state 2 :inline :offset-assert 4) ;; the two levels we want loaded
(vis-nick symbol :offset-assert 36) ;; the vis file we have loaded
(command-list pair :offset-assert 40) ;; list of additional commands
(object-name symbol 256 :offset-assert 44) ;; state of various in-game objects
(object-status basic 256 :offset-assert 1068)
((want level-buffer-state 2 :inline)
(vis-nick symbol)
(command-list pair)
(object-name symbol 256)
(object-status basic 256)
)
:method-count-assert 21
:size-assert #x82c
:flag-assert #x150000082c
(:methods
(new (symbol type) _type_ 0)
(reset! (_type_) _type_ 9)
(update! (_type_) int 10)
(want-levels (_type_ symbol symbol) int 11)
(want-display-level (_type_ symbol symbol) int 12)
(want-vis (_type_ symbol) int 13)
(want-force-vis (_type_ symbol symbol) int 14)
(execute-command (_type_ pair) none 15)
(execute-commands-up-to (_type_ float) int 16)
(backup-load-state-and-set-cmds (_type_ pair) int 17)
(restore-load-state-and-cleanup (_type_) int 18)
(restore-load-state (_type_) int 19)
(set-force-inside! (_type_ symbol symbol) none 20)
(new (symbol type) _type_)
(reset! (_type_) _type_)
(update! (_type_) int)
(want-levels (_type_ symbol symbol) int)
(want-display-level (_type_ symbol symbol) int)
(want-vis (_type_ symbol) int)
(want-force-vis (_type_ symbol symbol) int)
(execute-command (_type_ pair) none)
(execute-commands-up-to (_type_ float) int)
(backup-load-state-and-set-cmds (_type_ pair) int)
(restore-load-state-and-cleanup (_type_) int)
(restore-load-state (_type_) int)
(set-force-inside! (_type_ symbol symbol) none)
)
)
@@ -121,25 +112,22 @@
;; static data for a continue point
(deftype continue-point (basic)
((name string :offset-assert 4)
(level symbol :offset-assert 8)
(flags continue-flags :offset-assert 12)
(trans vector :inline :offset-assert 16)
(quat quaternion :inline :offset-assert 32)
(camera-trans vector :inline :offset-assert 48)
(camera-rot float 9 :offset-assert 64)
(load-commands pair :offset-assert 100)
(vis-nick symbol :offset-assert 104)
(lev0 symbol :offset-assert 108)
(disp0 symbol :offset-assert 112)
(lev1 symbol :offset-assert 116)
(disp1 symbol :offset-assert 120)
((name string)
(level symbol)
(flags continue-flags)
(trans vector :inline)
(quat quaternion :inline)
(camera-trans vector :inline)
(camera-rot float 9)
(load-commands pair)
(vis-nick symbol)
(lev0 symbol)
(disp0 symbol)
(lev1 symbol)
(disp1 symbol)
)
:method-count-assert 10
:size-assert #x7c
:flag-assert #xa0000007c
(:methods
(debug-draw! (_type_) none 9)
(debug-draw! (_type_) none)
)
)
@@ -150,76 +138,73 @@
;; this information can be saved/loaded from a game save.
;; also, it must be manually synchronized with entity permanent state in the levels
(deftype game-info (basic)
((mode symbol :offset-assert 4) ;; can be play/debug
(save-name basic :offset-assert 8)
(life float :offset-assert 12)
(life-max float :offset-assert 16)
(money float :offset-assert 20)
(money-total float :offset-assert 24)
(money-per-level uint8 32 :offset-assert 28)
(deaths-per-level uint8 32 :offset-assert 60)
(buzzer-total float :offset-assert 92)
(fuel float :offset-assert 96)
(perm-list entity-perm-array :offset-assert 100) ;; permament storage for entities
(task-perm-list entity-perm-array :offset-assert 104) ;; permanent storage for task entities
(current-continue continue-point :offset-assert 108)
(text-ids-seen bit-array :offset-assert 112)
(level-opened uint8 32 :offset-assert 116)
(hint-control (array level-hint-control) :offset-assert 148)
(task-hint-control (array task-hint-control-group) :offset-assert 152)
(total-deaths int32 :offset-assert 156)
(continue-deaths int32 :offset-assert 160)
(fuel-cell-deaths int32 :offset-assert 164)
(game-start-time time-frame :offset-assert 168)
(continue-time time-frame :offset-assert 176)
(death-time time-frame :offset-assert 184)
(hit-time time-frame :offset-assert 192)
(fuel-cell-pickup-time time-frame :offset-assert 200)
(fuel-cell-time (array time-frame) :offset-assert 208)
(enter-level-time (array time-frame) :offset-assert 212)
(in-level-time (array time-frame) :offset-assert 216)
(blackout-time time-frame :offset-assert 224)
(letterbox-time time-frame :offset-assert 232) ;; time to turn off letterboxing, base-frame
(hint-play-time time-frame :offset-assert 240)
(display-text-time time-frame :offset-assert 248)
(display-text-handle handle :offset-assert 256)
(death-movie-tick int32 :offset-assert 264)
(want-auto-save symbol :offset-assert 268)
(auto-save-proc handle :offset-assert 272)
(auto-save-status mc-status-code :offset-assert 280)
(auto-save-card int32 :offset-assert 284)
(auto-save-which int32 :offset-assert 288)
(pov-camera-handle handle :offset-assert 296)
(other-camera-handle handle :offset-assert 304)
(death-pos vector-array :offset-assert 312)
(dummy basic :offset-assert 316)
(auto-save-count int32 :offset-assert 320)
((mode symbol)
(save-name basic)
(life float)
(life-max float)
(money float)
(money-total float)
(money-per-level uint8 32)
(deaths-per-level uint8 32)
(buzzer-total float)
(fuel float)
(perm-list entity-perm-array)
(task-perm-list entity-perm-array)
(current-continue continue-point)
(text-ids-seen bit-array)
(level-opened uint8 32)
(hint-control (array level-hint-control))
(task-hint-control (array task-hint-control-group))
(total-deaths int32)
(continue-deaths int32)
(fuel-cell-deaths int32)
(game-start-time time-frame)
(continue-time time-frame)
(death-time time-frame)
(hit-time time-frame)
(fuel-cell-pickup-time time-frame)
(fuel-cell-time (array time-frame))
(enter-level-time (array time-frame))
(in-level-time (array time-frame))
(blackout-time time-frame)
(letterbox-time time-frame)
(hint-play-time time-frame)
(display-text-time time-frame)
(display-text-handle handle)
(death-movie-tick int32)
(want-auto-save symbol)
(auto-save-proc handle)
(auto-save-status mc-status-code)
(auto-save-card int32)
(auto-save-which int32)
(pov-camera-handle handle)
(other-camera-handle handle)
(death-pos vector-array)
(dummy basic)
(auto-save-count int32)
)
:method-count-assert 29
:size-assert #x144
:flag-assert #x1d00000144
(:methods
(initialize! (_type_ symbol game-save string) _type_ 9)
(adjust (_type_ symbol float handle) float 10)
(task-complete? (_type_ game-task) symbol 11)
(lookup-entity-perm-by-aid (_type_ actor-id) entity-perm 12)
(get-entity-task-perm (_type_ game-task) entity-perm 13)
(copy-perms-from-level! (_type_ level) none 14)
(copy-perms-to-level! (_type_ level) none 15)
(debug-print (_type_ symbol) _type_ 16)
(get-or-create-continue! (_type_) continue-point 17)
(get-continue-by-name (_type_ string) continue-point 18)
(set-continue! (_type_ basic) continue-point 19)
(buzzer-count (_type_ game-task) int 20)
(seen-text? (_type_ text-id) symbol 21)
(mark-text-as-seen (_type_ text-id) none 22)
(got-buzzer? (_type_ game-task int) symbol 23)
(save-game! (_type_ game-save string) none 24)
(load-game! (_type_ game-save) game-save 25)
(clear-text-seen! (_type_ text-id) none 26)
(get-death-count (_type_ symbol) int 27)
(get-health-percent-lost (_type_ symbol) float 28)
)
(initialize! (_type_ symbol game-save string) _type_)
(adjust (_type_ symbol float handle) float)
(task-complete? (_type_ game-task) symbol)
(lookup-entity-perm-by-aid (_type_ actor-id) entity-perm)
(get-entity-task-perm (_type_ game-task) entity-perm)
(copy-perms-from-level! (_type_ level) none)
(copy-perms-to-level! (_type_ level) none)
(debug-print (_type_ symbol) _type_)
(get-or-create-continue! (_type_) continue-point)
(get-continue-by-name (_type_ string) continue-point)
(set-continue! (_type_ basic) continue-point)
(buzzer-count (_type_ game-task) int)
(seen-text? (_type_ text-id) symbol)
(mark-text-as-seen (_type_ text-id) none)
(got-buzzer? (_type_ game-task int) symbol)
(save-game! (_type_ game-save string) none)
(load-game! (_type_ game-save) game-save)
(clear-text-seen! (_type_ text-id) none)
(get-death-count (_type_ symbol) int)
(get-health-percent-lost (_type_ symbol) float)
)
)
(define-extern *game-info* game-info)
+24 -24
View File
@@ -18,7 +18,7 @@
;; This border-plane seems to be unused. This is separate from load boundaries.
(defmethod debug-draw! border-plane ((this border-plane))
(defmethod debug-draw! ((this border-plane))
"Debug draw a border plane with a vector and text."
(let* ((v1-0 (-> this action))
;; pick color based on action
@@ -37,13 +37,13 @@
(none)
)
(defmethod point-past-plane? border-plane ((this border-plane) (arg0 vector))
(defmethod point-past-plane? ((this border-plane) (arg0 vector))
"Which side of the plane is the given point on?
#t = on the plane, or on the side the normal points toward."
(>= (vector-dot (vector-! (new 'stack-no-clear 'vector) arg0 (-> this trans)) (-> this normal)) 0.0)
)
(defmethod task-complete? game-info ((this game-info) (arg0 game-task))
(defmethod task-complete? ((this game-info) (arg0 game-task))
"Likely closed, or in the process of closing"
(logtest? (-> this task-perm-list data arg0 status) (entity-perm-status real-complete))
)
@@ -64,7 +64,7 @@
)
)
(defmethod get-or-create-continue! game-info ((this game-info))
(defmethod get-or-create-continue! ((this game-info))
"Attempt to get a continue point, if it doesn't exist set the
default-continue to a location in front of the camera."
(cond
@@ -88,7 +88,7 @@
)
)
(defmethod get-continue-by-name game-info ((this game-info) (arg0 string))
(defmethod get-continue-by-name ((this game-info) (arg0 string))
"Look up a continue point by string name"
(let ((s5-0 *level-load-list*))
;; loop over levels
@@ -111,7 +111,7 @@
(the-as continue-point #f)
)
(defmethod set-continue! game-info ((this game-info) (arg0 basic))
(defmethod set-continue! ((this game-info) (arg0 basic))
"Set the current continue point to to arg0.
arg0 can be:
'() or #f, in which case it does nothing.
@@ -159,12 +159,12 @@
(-> this current-continue)
)
(defmethod get-entity-task-perm game-info ((this game-info) (arg0 game-task))
(defmethod get-entity-task-perm ((this game-info) (arg0 game-task))
"Get the permanent storage for a game-task"
(-> this task-perm-list data arg0)
)
(defmethod initialize! game-info ((this game-info) (cause symbol) (save-to-load game-save) (continue-point-override string))
(defmethod initialize! ((this game-info) (cause symbol) (save-to-load game-save) (continue-point-override string))
"Initialize the game-info.
The cause can be 'dead if you die, or 'game to reset everything.
If save-to-load is not #f will load data from that.
@@ -328,7 +328,7 @@
)
(defmethod adjust game-info ((this game-info) (item symbol) (amount float) (source handle))
(defmethod adjust ((this game-info) (item symbol) (amount float) (source handle))
"Adjust the number of items by amount."
(case item
(('life)
@@ -439,13 +439,13 @@
)
)
(defmethod got-buzzer? game-info ((this game-info) (arg0 game-task) (arg1 int))
(defmethod got-buzzer? ((this game-info) (arg0 game-task) (arg1 int))
"Do we have the arg1-th buzzer for the given buzzer task?"
;; buzzers mis-use their reminder bits as a bitfield of which ones have been collected
(logtest? (get-reminder (get-task-control arg0) 0) (ash 1 arg1))
)
(defmethod buzzer-count game-info ((this game-info) (arg0 game-task))
(defmethod buzzer-count ((this game-info) (arg0 game-task))
"How many buzzers do we have for this task?"
(let ((v1-1 (get-reminder (get-task-control arg0) 0)) ;; buzzer bitmask
(v0-2 0) ;; count
@@ -459,14 +459,14 @@
)
)
(defmethod seen-text? game-info ((this game-info) (arg0 text-id))
(defmethod seen-text? ((this game-info) (arg0 text-id))
"Have we already displayed this text?
This is used to display level names on only the first enter.
It seems like hints could also display text on screen at one point in time."
(get-bit (-> this text-ids-seen) (the-as int arg0))
)
(defmethod mark-text-as-seen game-info ((this game-info) (arg0 text-id))
(defmethod mark-text-as-seen ((this game-info) (arg0 text-id))
"Mark the game text as seen. This only works if the text id < 4096, and ignores otherwise"
(if (and (< (the-as uint arg0) (the-as uint 4095)) (> (the-as uint arg0) 0))
(set-bit (-> this text-ids-seen) (the-as int arg0))
@@ -475,14 +475,14 @@
(none)
)
(defmethod clear-text-seen! game-info ((this game-info) (arg0 text-id))
(defmethod clear-text-seen! ((this game-info) (arg0 text-id))
"Mark text as unseen. MUST be a valid text id"
(clear-bit (-> this text-ids-seen) (the-as int arg0))
0
(none)
)
(defmethod reset! fact-info-target ((this fact-info-target) (arg0 symbol))
(defmethod reset! ((this fact-info-target) (arg0 symbol))
"Reset the facts for a given thing"
(when (or (not arg0) (= arg0 'eco))
(set! (-> this eco-timeout) 0)
@@ -507,7 +507,7 @@
(declare-type vent process-drawable)
(defmethod pickup-collectable! fact-info-target ((this fact-info-target) (kind pickup-type) (amount float) (source-handle handle))
(defmethod pickup-collectable! ((this fact-info-target) (kind pickup-type) (amount float) (source-handle handle))
"Pickup a thing!"
(case kind
(((pickup-type eco-green))
@@ -783,7 +783,7 @@
)
)
(defmethod lookup-entity-perm-by-aid game-info ((this game-info) (aid actor-id))
(defmethod lookup-entity-perm-by-aid ((this game-info) (aid actor-id))
(let ((v1-0 (-> this perm-list)))
(countdown (a0-1 (-> v1-0 length))
(if (= aid (-> v1-0 data a0-1 aid))
@@ -794,7 +794,7 @@
(the-as entity-perm #f)
)
(defmethod copy-perms-from-level! game-info ((this game-info) (lev level))
(defmethod copy-perms-from-level! ((this game-info) (lev level))
"Iterate through entities in the level and copy their perms into game-info"
(let ((perms (-> this perm-list)) ;; our perms
(lev-entities (-> lev bsp level entity)) ;; entities in the level
@@ -827,7 +827,7 @@
(none)
)
(defmethod copy-perms-to-level! game-info ((this game-info) (lev level))
(defmethod copy-perms-to-level! ((this game-info) (lev level))
"Does the opposite of the previous, copies perms from game-info to level entities"
(let ((lev-entities (-> lev bsp level entity)))
(dotimes (lev-entity-idx (-> lev-entities length))
@@ -851,13 +851,13 @@
(none)
)
(defmethod print continue-point ((this continue-point))
(defmethod print ((this continue-point))
(format #t "#<~A ~S @ #x~X>" (-> this type) (-> this name) this)
this
)
(defmethod debug-draw! continue-point ((this continue-point))
(defmethod debug-draw! ((this continue-point))
"Draw a continue point."
(add-debug-x #t (bucket-id debug-no-zbuf) (-> this trans) (new 'static 'rgba :r #xff :a #x80))
(add-debug-text-3d
@@ -929,7 +929,7 @@
(enum->string game-task arg0)
)
(defmethod debug-print game-info ((this game-info) (arg0 symbol))
(defmethod debug-print ((this game-info) (arg0 symbol))
(inspect this)
(when (or (not arg0) (= arg0 'game-task))
(format #t "~Tgame-task:~%")
@@ -998,7 +998,7 @@
(set! (-> gp-0 other-camera-handle) (the-as handle #f))
)
(defmethod get-death-count game-info ((this game-info) (arg0 symbol))
(defmethod get-death-count ((this game-info) (arg0 symbol))
(let ((v1-13
(if (and arg0 *target* (>= (-> *level-task-data-remap* length) (-> *target* current-level info index)))
(the-as
@@ -1014,6 +1014,6 @@
)
)
(defmethod get-health-percent-lost game-info ((this game-info) (arg0 symbol))
(defmethod get-health-percent-lost ((this game-info) (arg0 symbol))
(* 0.25 (the float (get-death-count this #f)))
)
+67 -77
View File
@@ -104,25 +104,22 @@
;; the count/size fields determine how big it is.
(deftype game-save-tag (structure)
((user-object object 2 :offset-assert 0)
(user-uint64 uint64 :offset 0)
(user-float0 float :offset 0)
(user-float float 2 :offset 0)
(user-int32 int32 2 :offset 0)
(user-uint32 uint32 2 :offset 0)
(user-int16 int16 4 :offset 0)
(user-uint16 uint16 4 :offset 0)
(user-int8 int8 8 :offset 0)
(user-int80 int8 :offset 0)
(user-int81 int8 :offset 1)
(user-uint8 uint8 8 :offset 0)
(elt-count int32 :offset-assert 8)
(elt-size uint16 :offset-assert 12)
(elt-type game-save-elt :offset-assert 14)
((user-object object 2)
(user-uint64 uint64 :overlay-at (-> user-object 0))
(user-float0 float :overlay-at (-> user-object 0))
(user-float float 2 :overlay-at (-> user-object 0))
(user-int32 int32 2 :overlay-at (-> user-object 0))
(user-uint32 uint32 2 :overlay-at (-> user-object 0))
(user-int16 int16 4 :overlay-at (-> user-object 0))
(user-uint16 uint16 4 :overlay-at (-> user-object 0))
(user-int8 int8 8 :overlay-at (-> user-object 0))
(user-int80 int8 :overlay-at (-> user-object 0))
(user-int81 int8 :overlay-at (-> user-int8 1))
(user-uint8 uint8 8 :overlay-at (-> user-object 0))
(elt-count int32)
(elt-size uint16)
(elt-type game-save-elt)
)
:method-count-assert 9
:size-assert #x10
:flag-assert #x900000010
)
;; A game-save is a dynamic type that contains the full save.
@@ -130,37 +127,34 @@
;; the common metadata is used to display info about a save, without needing to
;; fully unpack the data stored in the tags.
(deftype game-save (basic)
((version int32 :offset-assert 4)
(allocated-length int32 :offset-assert 8)
(length int32 :offset-assert 12)
(info-int32 int32 16 :offset-assert 16)
(info-int8 int8 64 :offset 16)
(level-index int32 :offset 16)
(fuel-cell-count float :offset 20)
(money-count float :offset 24)
(buzzer-count float :offset 28)
(completion-percentage float :offset 32)
(minute uint8 :offset 36)
(hour uint8 :offset 37)
(week uint8 :offset 38)
(day uint8 :offset 39)
(month uint8 :offset 40)
(year uint8 :offset 41)
(new-game int32 :offset 44)
(tag game-save-tag :inline :dynamic :offset-assert 80)
((version int32)
(allocated-length int32)
(length int32)
(info-int32 int32 16)
(info-int8 int8 64 :overlay-at (-> info-int32 0))
(level-index int32 :overlay-at (-> info-int32 0))
(fuel-cell-count float :overlay-at (-> info-int32 1))
(money-count float :overlay-at (-> info-int32 2))
(buzzer-count float :overlay-at (-> info-int32 3))
(completion-percentage float :overlay-at (-> info-int32 4))
(minute uint8 :overlay-at (-> info-int32 5))
(hour uint8 :overlay-at (-> info-int8 21))
(week uint8 :overlay-at (-> info-int8 22))
(day uint8 :overlay-at (-> info-int8 23))
(month uint8 :overlay-at (-> info-int32 6))
(year uint8 :overlay-at (-> info-int8 25))
(new-game int32 :overlay-at (-> info-int32 7))
(tag game-save-tag :inline :dynamic)
)
:method-count-assert 12
:size-assert #x50
:flag-assert #xc00000050
(:methods
(new (symbol type int) _type_ 0)
(save-to-file (_type_ string) _type_ 9)
(load-from-file! (_type_ string) _type_ 10)
(debug-print (_type_ symbol) _type_ 11)
(new (symbol type int) _type_)
(save-to-file (_type_ string) _type_)
(load-from-file! (_type_ string) _type_)
(debug-print (_type_ symbol) _type_)
)
)
(defmethod asize-of game-save ((this game-save))
(defmethod asize-of ((this game-save))
"Get the size in memory of the save"
(the-as int (+ (-> game-save size) (the-as uint (-> this allocated-length))))
)
@@ -187,7 +181,7 @@
)
)
(defmethod debug-print game-save ((this game-save) (detail symbol))
(defmethod debug-print ((this game-save) (detail symbol))
"Print a save to #t"
(format #t "[~8x] ~A~%" this (-> this type))
(format #t "~Tversion: ~D~%" (-> this version))
@@ -338,11 +332,11 @@
this
)
(defmethod inspect game-save ((this game-save))
(defmethod inspect ((this game-save))
(debug-print this #f)
)
(defmethod save-game! game-info ((this game-info) (arg0 game-save) (arg1 string))
(defmethod save-game! ((this game-info) (arg0 game-save) (arg1 string))
"Update the game-save to have the info from the current game state"
;; some stuff lives in the levels and needs to be copied into game-info.
@@ -805,7 +799,7 @@
(none)
)
(defmethod load-game! game-info ((this game-info) (save game-save))
(defmethod load-game! ((this game-info) (save game-save))
"Copy save data from a game-save to a game-info"
(let ((save-data (the-as game-save-tag (-> save tag))))
;; loop over all tags
@@ -1075,7 +1069,7 @@
save
)
(defmethod save-to-file game-save ((this game-save) (arg0 string))
(defmethod save-to-file ((this game-save) (arg0 string))
"Write a game save to a file for debugging"
(let ((s5-0 (new 'stack 'file-stream arg0 'write)))
(file-stream-write s5-0
@@ -1087,7 +1081,7 @@
this
)
(defmethod load-from-file! game-save ((this game-save) (filename string))
(defmethod load-from-file! ((this game-save) (filename string))
"Load a game save from a file for debugging"
(let ((stream (new 'stack 'file-stream filename 'read)))
(let ((in-size (file-stream-length stream))
@@ -1162,36 +1156,32 @@
(define *auto-save-info* (new 'global 'mc-slot-info))
(deftype auto-save (process)
((card int32 :offset-assert 112)
(slot int32 :offset-assert 116)
(which int32 :offset-assert 120)
(buffer kheap :offset-assert 124)
(mode basic :offset-assert 128)
(result mc-status-code :offset-assert 132)
(save game-save :offset-assert 136)
(info mc-slot-info :inline :offset-assert 140)
(notify handle :offset-assert 440)
(state-time time-frame :offset-assert 448)
(part sparticle-launch-control :offset-assert 456)
((card int32)
(slot int32)
(which int32)
(buffer kheap)
(mode basic)
(result mc-status-code)
(save game-save)
(info mc-slot-info :inline)
(notify handle)
(state-time time-frame)
(part sparticle-launch-control)
)
:heap-base #x160
:method-count-assert 23
:size-assert #x1cc
:flag-assert #x17016001cc
(:methods
(get-heap () _type_ :state 14)
(get-card () _type_ :state 15)
(format-card () _type_ :state 16)
(create-file () _type_ :state 17)
(save () _type_ :state 18)
(restore () _type_ :state 19)
(error (mc-status-code) _type_ :state 20)
(done () _type_ :state 21)
(unformat-card () _type_ :state 22)
(:state-methods
get-heap
get-card
format-card
create-file
save
restore
(error mc-status-code)
done
unformat-card
)
)
(defmethod deactivate auto-save ((this auto-save))
(defmethod deactivate ((this auto-save))
"Deactivate the auto-save process."
;; kill the particles
(if (nonzero? (-> this part))
@@ -1202,7 +1192,7 @@
(none)
)
(defmethod relocate auto-save ((this auto-save) (arg0 int))
(defmethod relocate ((this auto-save) (arg0 int))
"Relocate an auto-save process by arg0 bytes."
;; update our reference particle launch control, which is allocated on our process heap
+5 -11
View File
@@ -132,26 +132,20 @@
;; unused.
(deftype frame-stats (structure)
((field-time time-frame 2 :offset-assert 0)
(field int32 :offset-assert 16)
((field-time time-frame 2)
(field int32)
)
:method-count-assert 9
:size-assert #x14
:flag-assert #x900000014
)
(define *frame-stats* (new 'static 'frame-stats))
;; full screen "filter" (just a giant quad over the whole screen)
(deftype screen-filter (basic)
((draw? basic :offset-assert 4)
(color rgba :offset-assert 8)
((draw? basic)
(color rgba)
)
:method-count-assert 10
:size-assert #xc
:flag-assert #xa0000000c
(:methods
(draw (_type_) none 9)
(draw (_type_) none)
)
)
+1 -1
View File
@@ -345,7 +345,7 @@
)
)
(defmethod draw screen-filter ((this screen-filter))
(defmethod draw ((this screen-filter))
(with-dma-buffer-add-bucket ((buf (-> (current-frame) global-buf)) (bucket-id debug-no-zbuf))
(draw-sprite2d-xy buf -256 (- (-> *video-parms* screen-hy)) 512 (-> *video-parms* screen-sy) (-> this color))
)

Some files were not shown because too many files have changed in this diff Show More