mirror of
https://github.com/open-goal/jak-project.git
synced 2024-10-20 11:26:18 -04:00
decomp: finish junglesnake
and viewer
(#951)
* decomp: finish `junglesnake` * decomp: finish `viewer`
This commit is contained in:
parent
8b25a19e92
commit
6299335625
|
@ -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))
|
||||
|
||||
|
||||
;; ----------------------
|
||||
|
|
|
@ -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": []
|
||||
|
|
|
@ -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!": []
|
||||
}
|
||||
|
|
|
@ -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": []
|
||||
}
|
||||
|
|
|
@ -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
285
test/decompiler/reference/engine/debug/viewer_REF.gc
vendored
Normal file
285
test/decompiler/reference/engine/debug/viewer_REF.gc
vendored
Normal 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)
|
||||
)
|
||||
|
||||
|
||||
|
||||
|
1296
test/decompiler/reference/levels/jungle/junglesnake_REF.gc
vendored
Normal file
1296
test/decompiler/reference/levels/jungle/junglesnake_REF.gc
vendored
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue