decomp: finish junglesnake and viewer (#951)

* decomp: finish `junglesnake`

* decomp: finish `viewer`
This commit is contained in:
Tyler Wilding 2021-10-29 19:19:51 -04:00 committed by GitHub
parent 8b25a19e92
commit 6299335625
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 3222 additions and 70 deletions

View file

@ -21735,15 +21735,15 @@
;; - Functions
(define-extern init-viewer-for-other function)
(define-extern actor-get-arg! function)
(define-extern init-viewer function)
(define-extern art-part-name function)
(define-extern add-a-bunch function)
(define-extern init-viewer-for-other (function string vector none :behavior viewer))
(define-extern actor-get-arg! (function string string string symbol))
(define-extern init-viewer (function string object :behavior viewer))
(define-extern art-part-name (function string string))
(define-extern add-a-bunch (function string int int float symbol))
;; - Unknowns
;;(define-extern *viewer* object) ;; unknown type
(define-extern *viewer* viewer) ;; unknown type
(define-extern viewer-ja-name string)
(define-extern viewer-geo-name string)
(define-extern *viewer-sg* skeleton-group)
@ -28333,79 +28333,71 @@
;; - Types
; (deftype junglesnake-twist-joint (structure)
; ((joint-index int32 :offset-assert 0)
; (ry float :offset-assert 4)
; (drag-delta-ry float :offset-assert 8)
; )
; :method-count-assert 9
; :size-assert #xc
; :flag-assert #x90000000c
; )
(deftype junglesnake-twist-joint (structure)
((joint-index int32 :offset-assert 0)
(ry float :offset-assert 4)
(drag-delta-ry float :offset-assert 8)
)
:allow-misaligned
:method-count-assert 9
:size-assert #xc
:flag-assert #x90000000c
)
; (deftype junglesnake-tilt-joint (structure)
; ((joint-index int32 :offset-assert 0)
; (flip-it basic :offset-assert 4)
; )
; :method-count-assert 9
; :size-assert #x8
; :flag-assert #x900000008
; )
(deftype junglesnake-tilt-joint (structure)
((joint-index int32 :offset-assert 0)
(flip-it symbol :offset-assert 4)
)
:allow-misaligned
:method-count-assert 9
:size-assert #x8
:flag-assert #x900000008
)
; (deftype junglesnake (process-drawable)
; ((state-time uint64 :offset-assert 168)
; (hit-player basic :offset-assert 184)
; (is-lethal? basic :offset-assert 188)
; (refractory-delay int32 :offset-assert 192)
; (ry float :offset-assert 196)
; (des-ry float :offset-assert 200)
; (tilt float :offset-assert 204)
; (des-tilt float :offset-assert 208)
; (track-player-ry basic :offset-assert 212)
; (track-player-tilt basic :offset-assert 216)
; (twist-joints UNKNOWN 24 :offset-assert 220)
; (tilt-joints UNKNOWN 3 :offset-assert 604)
; )
; :method-count-assert 25
; :size-assert #x28c
; :heap-base #x220
; :flag-assert #x190220028c
; ;; inherited inspect of process-drawable
; (:methods
; (dummy-9 () none 9)
; (dummy-10 () none 10)
; (dummy-11 () none 11)
; (dummy-12 () none 12)
; (dummy-13 () none 13)
; (dummy-14 () none 14)
; (dummy-15 () none 15)
; (dummy-16 () none 16)
; (dummy-17 () none 17)
; (dummy-18 () none 18)
; (dummy-19 () none 19)
; (dummy-20 () none 20)
; (dummy-21 () none 21)
; (dummy-22 () none 22)
; (dummy-23 () none 23)
; (dummy-24 () none 24)
; )
; )
(deftype junglesnake (process-drawable)
((root-override collide-shape :score 100 :offset 112)
(state-time2 int64 :offset-assert 176) ;; changed
(hit-player symbol :offset 184)
(is-lethal? symbol :offset-assert 188)
(refractory-delay int32 :offset-assert 192)
(ry float :offset-assert 196)
(des-ry float :offset-assert 200)
(tilt float :offset-assert 204)
(des-tilt float :offset-assert 208)
(track-player-ry symbol :offset-assert 212)
(track-player-tilt symbol :offset-assert 216)
(twist-joints junglesnake-twist-joint 24 :inline :offset 220)
(tilt-joints junglesnake-tilt-joint 3 :inline :offset 604)
)
:method-count-assert 25
:size-assert #x28c
:heap-base #x220
:flag-assert #x190220028c
(:methods
(dummy-20 (_type_) symbol 20)
(dummy-21 (_type_) symbol 21)
(dummy-22 (_type_ float) symbol 22)
(dummy-23 (_type_) none 23)
(dummy-24 (_type_) none 24)
)
(:states
junglesnake-sleeping
junglesnake-tracking
junglesnake-attack
junglesnake-give-up
junglesnake-wake
junglesnake-die)
)
;; - Functions
(define-extern junglesnake-joint-callback function)
(define-extern junglesnake-default-event-handler function)
(define-extern junglesnake-joint-callback (function junglesnake none))
(define-extern junglesnake-default-event-handler (function process int symbol event-message-block object :behavior junglesnake))
;; - Unknowns
(define-extern *junglesnake-sg* skeleton-group)
;;(define-extern junglesnake-sleeping object) ;; unknown type
;;(define-extern *junglesnake-twist-max-deltas* object) ;; unknown type
;;(define-extern junglesnake-tracking object) ;; unknown type
;;(define-extern junglesnake-attack object) ;; unknown type
;;(define-extern junglesnake-give-up object) ;; unknown type
;;(define-extern junglesnake-wake object) ;; unknown type
;;(define-extern junglesnake-die object) ;; unknown type
(define-extern *junglesnake-twist-max-deltas* (pointer float))
;; ----------------------

View file

@ -1153,6 +1153,12 @@
["L15", "ocean-texture-work"]
],
"junglesnake": [
["L93", "(pointer float)", 28],
["L100", "attack-info"],
["L101", "attack-info"]
],
// please do not add things after this entry! git is dumb.
"object-file-that-doesnt-actually-exist-and-i-just-put-this-here-to-prevent-merge-conflicts-with-this-file": []

View file

@ -2784,5 +2784,33 @@
[16, "vector"]
],
"(code junglesnake-give-up)": [
[16, "vector"],
[32, "vector"],
[48, "vector"]
],
"junglesnake-default-event-handler": [
[16, "event-message-block"]
],
"junglesnake-joint-callback": [
[16, "matrix"],
[80, "matrix"],
[144, "matrix"],
[208, "vector"],
[224, "vector"],
[240, "vector"],
[256, "vector"],
[272, "vector"],
[288, "vector"],
[304, "matrix"],
[368, "matrix"]
],
"add-a-bunch": [
[16, "vector"]
],
"placeholder-do-not-add-below!": []
}

View file

@ -4129,5 +4129,54 @@
[101, "s2", "handle"]
],
"(trans junglesnake-wake)": [
[15, "v1", "collide-shape-prim-group"]
],
"(trans junglesnake-attack)": [
[15, "v1", "collide-shape-prim-group"]
],
"(method 23 junglesnake)": [
[6, "v1", "collide-shape-prim-group"]
],
"(method 24 junglesnake)": [
[5, "v1", "collide-shape-prim-group"]
],
"(trans junglesnake-tracking)": [
[79, "v1", "collide-shape-prim-group"]
],
"(code junglesnake-wake)": [
[10, "v1", "art-joint-anim"]
],
"(code junglesnake-tracking)": [
[51, "v1", "art-joint-anim"]
],
"(code junglesnake-die)": [
[23, "v1", "art-joint-anim"]
],
"(code junglesnake-give-up)": [
[29, "v1", "art-joint-anim"]
],
"(code junglesnake-attack)": [
[43, "v1", "art-joint-anim"]
],
"(method 21 junglesnake)": [
[15, "v1", "junglesnake-tilt-joint"],
[18, "v1", "junglesnake-twist-joint"]
],
"(method 11 viewer)": [
[1, "a1", "entity-actor"]
],
"placeholder-do-not-add-below": []
}

View file

@ -5,3 +5,263 @@
;; name in dgo: viewer
;; dgos: GAME, ENGINE
;; DECOMP BEGINS
(define
*viewer-sg*
(new 'static 'skeleton-group
:bounds (new 'static 'vector :w 16384.0)
:lod-dist
(new 'static 'array float 4 4095996000.0 0.0 0.0 0.0)
)
)
(deftype viewer (process-drawable)
((janim art-joint-anim :offset-assert 176)
)
:heap-base #x50
:method-count-assert 20
:size-assert #xb4
:flag-assert #x14005000b4
)
;; NOTE - manually added
(define-perm *viewer* viewer #f)
(defstate viewer-process (viewer)
:code
(behavior ()
(while #t
(let ((a0-0 (-> self skel root-channel 0)))
(set! (-> a0-0 frame-group) (-> self janim))
(set! (-> a0-0 param 0) (the float (+ (-> self janim data 0 length) -1)))
(set! (-> a0-0 param 1) 1.0)
(set! (-> a0-0 frame-num) 0.0)
(joint-control-channel-group! a0-0 (-> self janim) num-func-seek!)
)
(until (ja-done? 0)
(TODO-RENAME-9 (-> self align))
(TODO-RENAME-10 (-> self align) 31 1.0 1.0 1.0)
(suspend)
(let ((a0-3 (-> self skel root-channel 0)))
(set!
(-> a0-3 param 0)
(the float (+ (-> a0-3 frame-group data 0 length) -1))
)
(set! (-> a0-3 param 1) 1.0)
(joint-control-channel-group-eval!
a0-3
(the-as art-joint-anim #f)
num-func-seek!
)
)
)
)
(none)
)
:post
(the-as (function none :behavior viewer) ja-post)
)
(define viewer-string (new 'global 'string 64 (the-as string #f)))
(define viewer-ja-name (new 'global 'string 64 (the-as string #f)))
(define viewer-geo-name (new 'global 'string 64 (the-as string #f)))
(defun actor-get-arg! ((arg0 string) (arg1 string) (arg2 string))
(let ((s5-0 (-> arg2 data))
(gp-0 (-> arg0 data))
)
(set! (-> gp-0 0) (the-as uint 0))
(dotimes (s2-0 (- (length arg2) (+ (length arg1) 2)))
(when (= (-> s5-0 0) 45)
(let ((s1-0 #f))
(dotimes (s0-0 (length arg1))
(if (!= (-> s5-0 (+ s0-0 1)) (-> arg1 data s0-0))
(goto cfg-10)
)
)
(if (= (-> s5-0 (+ (length arg1) 1)) 45)
(set! s1-0 #t)
)
(label cfg-10)
(when s1-0
(let ((v1-22 (&+ s5-0 (+ (length arg1) 2))))
(while (and (!= (-> v1-22 0) 45) (nonzero? (-> v1-22 0)))
(set! (-> gp-0 0) (-> v1-22 0))
(set! v1-22 (&-> v1-22 1))
(set! gp-0 (&-> gp-0 1))
)
)
(set! (-> gp-0 0) (the-as uint 0))
(return #t)
)
)
)
(set! s5-0 (&-> s5-0 1))
)
)
#f
)
(defun art-part-name ((arg0 string))
(let ((gp-0 (-> arg0 data)))
(while (nonzero? (-> gp-0 0))
(when (= (-> gp-0 0) 45)
(copyn-string<-charp
viewer-string
(&-> gp-0 1)
(-
(length arg0)
(the-as int (+ (- -1 (the-as int (-> arg0 data))) (the-as int gp-0)))
)
)
(return viewer-string)
)
(set! gp-0 (&-> gp-0 1))
)
)
(clear viewer-string)
)
(defbehavior init-viewer viewer ((arg0 string))
(let ((s2-0 (load-to-heap-by-name (-> (if (-> self entity)
(-> self entity extra level)
(-> *level* level-default)
)
art-group
)
arg0 #f global 0
)
)
(s5-0 (the-as int #f))
(s4-0 (the-as int #f))
(s3-0 (the-as int #f))
)
(when s2-0
(dotimes (s1-0 (-> s2-0 length))
(cond
((and
(not s4-0)
(= (-> s2-0 data s1-0 type) merc-ctrl)
(or
(zero? (length viewer-geo-name))
(string= (art-part-name (-> s2-0 data s1-0 name)) viewer-geo-name)
)
)
(set! s4-0 s1-0)
)
((= (-> s2-0 data s1-0 type) art-joint-geo)
(set! s3-0 s1-0)
)
((and
(= (-> s2-0 data s1-0 type) art-joint-anim)
(or
(zero? (length viewer-ja-name))
(string= (art-part-name (-> s2-0 data s1-0 name)) viewer-ja-name)
)
)
(set! s5-0 s1-0)
)
)
(if (and s4-0 s3-0 s5-0)
(goto cfg-34)
)
)
)
(label cfg-34)
(cond
((and s4-0 s3-0 s5-0)
(set! (-> self janim) (the-as art-joint-anim (-> s2-0 data s5-0)))
(let ((a1-3 *viewer-sg*))
(set! (-> a1-3 art-group-name) arg0)
(set! (-> a1-3 jgeo) s3-0)
(set! (-> a1-3 janim) s5-0)
(set! (-> a1-3 mgeo 0) (the-as uint s4-0))
(dummy-14 self a1-3 '())
)
(set! (-> self align) (new 'process 'align-control self))
(go viewer-process)
)
(else
(go process-drawable-art-error arg0)
)
)
)
)
(defmethod copy-defaults! viewer ((obj viewer) (arg0 res-lump))
(set! *viewer* obj)
(set! (-> obj root) (new 'process 'trsqv))
(process-drawable-from-entity! obj (the-as entity-actor arg0))
(actor-get-arg!
viewer-ja-name
"ja"
(res-lump-struct (the-as entity-actor arg0) 'name string)
)
(actor-get-arg!
viewer-geo-name
"geo"
(res-lump-struct (the-as entity-actor arg0) 'name string)
)
(let ((gp-1 (-> (the-as entity-actor arg0) etype)))
(if (valid? gp-1 type #f #f 0)
(init-viewer (symbol->string (-> gp-1 symbol)))
(go process-drawable-art-error "unknown")
)
)
(none)
)
(defbehavior init-viewer-for-other viewer ((arg0 string) (arg1 vector))
(set! *viewer* self)
(set! (-> self root) (new 'process 'trsqv))
(set! (-> self root trans quad) (-> arg1 quad))
(quaternion-identity! (-> self root quat))
(set-vector! (-> self root scale) 1.0 1.0 1.0 1.0)
(actor-get-arg! viewer-ja-name "ja" arg0)
(actor-get-arg! viewer-geo-name "geo" arg0)
(init-viewer arg0)
(none)
)
(defun add-a-bunch ((arg0 string) (arg1 int) (arg2 int) (arg3 float))
(local-vars (sv-32 process))
(dotimes (s2-0 arg1)
(dotimes (s1-0 arg2)
(let ((s0-0 (new-stack-vector0)))
(position-in-front-of-camera! s0-0 40960.0 4096.0)
(+! (-> s0-0 x) (the float (* (- s2-0 (/ arg1 2)) (the int arg3))))
(+! (-> s0-0 z) (the float (* (- s1-0 (/ arg2 2)) (the int arg3))))
(set! sv-32 (get-process *default-dead-pool* viewer #x4000))
(when sv-32
(let ((t9-2 (method-of-type viewer activate)))
(t9-2
(the-as viewer sv-32)
*entity-pool*
'viewer
(the-as pointer #x70004000)
)
)
(run-now-in-process sv-32 init-viewer-for-other arg0 s0-0)
(-> sv-32 ppointer)
)
)
)
)
#f
)
(defun birth-viewer ((arg0 process) (arg1 entity))
(set! (-> arg0 type) viewer)
(let ((t9-0 init-entity))
viewer
(t9-0 arg0 arg1)
)
(the-as object #t)
)

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,285 @@
;;-*-Lisp-*-
(in-package goal)
;; definition for symbol *viewer-sg*, type skeleton-group
(define
*viewer-sg*
(new 'static 'skeleton-group
:bounds (new 'static 'vector :w 16384.0)
:lod-dist
(new 'static 'array float 4 4095996000.0 0.0 0.0 0.0)
)
)
;; definition of type viewer
(deftype viewer (process-drawable)
((janim art-joint-anim :offset-assert 176)
)
:heap-base #x50
:method-count-assert 20
:size-assert #xb4
:flag-assert #x14005000b4
)
;; definition for method 3 of type viewer
(defmethod inspect viewer ((obj viewer))
(let ((t9-0 (method-of-type process-drawable inspect)))
(t9-0 obj)
)
(format #t "~T~Tjanim: ~A~%" (-> obj janim))
obj
)
;; failed to figure out what this is:
(defstate viewer-process (viewer)
:code
(behavior ()
(while #t
(let ((a0-0 (-> self skel root-channel 0)))
(set! (-> a0-0 frame-group) (-> self janim))
(set! (-> a0-0 param 0) (the float (+ (-> self janim data 0 length) -1)))
(set! (-> a0-0 param 1) 1.0)
(set! (-> a0-0 frame-num) 0.0)
(joint-control-channel-group! a0-0 (-> self janim) num-func-seek!)
)
(until (ja-done? 0)
(TODO-RENAME-9 (-> self align))
(TODO-RENAME-10 (-> self align) 31 1.0 1.0 1.0)
(suspend)
(let ((a0-3 (-> self skel root-channel 0)))
(set!
(-> a0-3 param 0)
(the float (+ (-> a0-3 frame-group data 0 length) -1))
)
(set! (-> a0-3 param 1) 1.0)
(joint-control-channel-group-eval!
a0-3
(the-as art-joint-anim #f)
num-func-seek!
)
)
)
)
(none)
)
:post
(the-as (function none :behavior viewer) ja-post)
)
;; definition for symbol viewer-string, type string
(define viewer-string (new 'global 'string 64 (the-as string #f)))
;; definition for symbol viewer-ja-name, type string
(define viewer-ja-name (new 'global 'string 64 (the-as string #f)))
;; definition for symbol viewer-geo-name, type string
(define viewer-geo-name (new 'global 'string 64 (the-as string #f)))
;; definition for function actor-get-arg!
(defun actor-get-arg! ((arg0 string) (arg1 string) (arg2 string))
(let ((s5-0 (-> arg2 data))
(gp-0 (-> arg0 data))
)
(set! (-> gp-0 0) (the-as uint 0))
(dotimes (s2-0 (- (length arg2) (+ (length arg1) 2)))
(when (= (-> s5-0 0) 45)
(let ((s1-0 #f))
(dotimes (s0-0 (length arg1))
(if (!= (-> s5-0 (+ s0-0 1)) (-> arg1 data s0-0))
(goto cfg-10)
)
)
(if (= (-> s5-0 (+ (length arg1) 1)) 45)
(set! s1-0 #t)
)
(label cfg-10)
(when s1-0
(let ((v1-22 (&+ s5-0 (+ (length arg1) 2))))
(while (and (!= (-> v1-22 0) 45) (nonzero? (-> v1-22 0)))
(set! (-> gp-0 0) (-> v1-22 0))
(set! v1-22 (&-> v1-22 1))
(set! gp-0 (&-> gp-0 1))
)
)
(set! (-> gp-0 0) (the-as uint 0))
(return #t)
)
)
)
(set! s5-0 (&-> s5-0 1))
)
)
#f
)
;; definition for function art-part-name
(defun art-part-name ((arg0 string))
(let ((gp-0 (-> arg0 data)))
(while (nonzero? (-> gp-0 0))
(when (= (-> gp-0 0) 45)
(copyn-string<-charp
viewer-string
(&-> gp-0 1)
(-
(length arg0)
(the-as int (+ (- -1 (the-as int (-> arg0 data))) (the-as int gp-0)))
)
)
(return viewer-string)
)
(set! gp-0 (&-> gp-0 1))
)
)
(clear viewer-string)
)
;; definition for function init-viewer
(defbehavior init-viewer viewer ((arg0 string))
(let ((s2-0 (load-to-heap-by-name (-> (if (-> self entity)
(-> self entity extra level)
(-> *level* level-default)
)
art-group
)
arg0 #f global 0
)
)
(s5-0 (the-as int #f))
(s4-0 (the-as int #f))
(s3-0 (the-as int #f))
)
(when s2-0
(dotimes (s1-0 (-> s2-0 length))
(cond
((and
(not s4-0)
(= (-> s2-0 data s1-0 type) merc-ctrl)
(or
(zero? (length viewer-geo-name))
(string= (art-part-name (-> s2-0 data s1-0 name)) viewer-geo-name)
)
)
(set! s4-0 s1-0)
)
((= (-> s2-0 data s1-0 type) art-joint-geo)
(set! s3-0 s1-0)
)
((and
(= (-> s2-0 data s1-0 type) art-joint-anim)
(or
(zero? (length viewer-ja-name))
(string= (art-part-name (-> s2-0 data s1-0 name)) viewer-ja-name)
)
)
(set! s5-0 s1-0)
)
)
(if (and s4-0 s3-0 s5-0)
(goto cfg-34)
)
)
)
(label cfg-34)
(cond
((and s4-0 s3-0 s5-0)
(set! (-> self janim) (the-as art-joint-anim (-> s2-0 data s5-0)))
(let ((a1-3 *viewer-sg*))
(set! (-> a1-3 art-group-name) arg0)
(set! (-> a1-3 jgeo) s3-0)
(set! (-> a1-3 janim) s5-0)
(set! (-> a1-3 mgeo 0) (the-as uint s4-0))
(dummy-14 self a1-3 '())
)
(set! (-> self align) (new 'process 'align-control self))
(go viewer-process)
)
(else
(go process-drawable-art-error arg0)
)
)
)
)
;; definition for method 11 of type viewer
;; INFO: Return type mismatch object vs none.
(defmethod copy-defaults! viewer ((obj viewer) (arg0 res-lump))
(set! *viewer* obj)
(set! (-> obj root) (new 'process 'trsqv))
(process-drawable-from-entity! obj (the-as entity-actor arg0))
(actor-get-arg!
viewer-ja-name
"ja"
(res-lump-struct (the-as entity-actor arg0) 'name string)
)
(actor-get-arg!
viewer-geo-name
"geo"
(res-lump-struct (the-as entity-actor arg0) 'name string)
)
(let ((gp-1 (-> (the-as entity-actor arg0) etype)))
(if (valid? gp-1 type #f #f 0)
(init-viewer (symbol->string (-> gp-1 symbol)))
(go process-drawable-art-error "unknown")
)
)
(none)
)
;; definition for function init-viewer-for-other
;; INFO: Return type mismatch object vs none.
;; Used lq/sq
(defbehavior init-viewer-for-other viewer ((arg0 string) (arg1 vector))
(set! *viewer* self)
(set! (-> self root) (new 'process 'trsqv))
(set! (-> self root trans quad) (-> arg1 quad))
(quaternion-identity! (-> self root quat))
(set-vector! (-> self root scale) 1.0 1.0 1.0 1.0)
(actor-get-arg! viewer-ja-name "ja" arg0)
(actor-get-arg! viewer-geo-name "geo" arg0)
(init-viewer arg0)
(none)
)
;; definition for function add-a-bunch
;; Used lq/sq
(defun add-a-bunch ((arg0 string) (arg1 int) (arg2 int) (arg3 float))
(local-vars (sv-32 process))
(dotimes (s2-0 arg1)
(dotimes (s1-0 arg2)
(let ((s0-0 (new-stack-vector0)))
(position-in-front-of-camera! s0-0 40960.0 4096.0)
(+! (-> s0-0 x) (the float (* (- s2-0 (/ arg1 2)) (the int arg3))))
(+! (-> s0-0 z) (the float (* (- s1-0 (/ arg2 2)) (the int arg3))))
(set! sv-32 (get-process *default-dead-pool* viewer #x4000))
(when sv-32
(let ((t9-2 (method-of-type viewer activate)))
(t9-2
(the-as viewer sv-32)
*entity-pool*
'viewer
(the-as pointer #x70004000)
)
)
(run-now-in-process sv-32 init-viewer-for-other arg0 s0-0)
(-> sv-32 ppointer)
)
)
)
)
#f
)
;; definition for function birth-viewer
;; INFO: Return type mismatch symbol vs object.
(defun birth-viewer ((arg0 process) (arg1 entity))
(set! (-> arg0 type) viewer)
(let ((t9-0 init-entity))
viewer
(t9-0 arg0 arg1)
)
(the-as object #t)
)

File diff suppressed because it is too large Load diff