From 62993356256d75220b04cfdf7d76b461c35c4c78 Mon Sep 17 00:00:00 2001 From: Tyler Wilding Date: Fri, 29 Oct 2021 19:19:51 -0400 Subject: [PATCH] decomp: finish `junglesnake` and `viewer` (#951) * decomp: finish `junglesnake` * decomp: finish `viewer` --- decompiler/config/all-types.gc | 132 +- .../jak1_ntsc_black_label/label_types.jsonc | 6 + .../stack_structures.jsonc | 28 + .../jak1_ntsc_black_label/type_casts.jsonc | 49 + goal_src/engine/debug/viewer.gc | 260 ++++ goal_src/levels/jungle/junglesnake.gc | 1236 ++++++++++++++++ .../reference/engine/debug/viewer_REF.gc | 285 ++++ .../levels/jungle/junglesnake_REF.gc | 1296 +++++++++++++++++ 8 files changed, 3222 insertions(+), 70 deletions(-) create mode 100644 test/decompiler/reference/engine/debug/viewer_REF.gc create mode 100644 test/decompiler/reference/levels/jungle/junglesnake_REF.gc diff --git a/decompiler/config/all-types.gc b/decompiler/config/all-types.gc index 93434268d4..1c7dbd5350 100644 --- a/decompiler/config/all-types.gc +++ b/decompiler/config/all-types.gc @@ -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)) ;; ---------------------- diff --git a/decompiler/config/jak1_ntsc_black_label/label_types.jsonc b/decompiler/config/jak1_ntsc_black_label/label_types.jsonc index 203ac89995..ee188da45f 100644 --- a/decompiler/config/jak1_ntsc_black_label/label_types.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/label_types.jsonc @@ -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": [] diff --git a/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc b/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc index 2c55299e26..06ac0252a6 100644 --- a/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc @@ -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!": [] } diff --git a/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc b/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc index 5cae99f3b6..7dc15bfb76 100644 --- a/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc @@ -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": [] } diff --git a/goal_src/engine/debug/viewer.gc b/goal_src/engine/debug/viewer.gc index 7b1fa0878d..0e5a4d6b76 100644 --- a/goal_src/engine/debug/viewer.gc +++ b/goal_src/engine/debug/viewer.gc @@ -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) + ) + + + + diff --git a/goal_src/levels/jungle/junglesnake.gc b/goal_src/levels/jungle/junglesnake.gc index ae3353c901..4ba161b14a 100644 --- a/goal_src/levels/jungle/junglesnake.gc +++ b/goal_src/levels/jungle/junglesnake.gc @@ -5,3 +5,1239 @@ ;; name in dgo: junglesnake ;; dgos: JUN, JUNGLE, L1 +(define-extern *junglesnake-sg* skeleton-group) + +;; DECOMP BEGINS + +(let + ((v1-0 + (new 'static 'skeleton-group + :art-group-name "junglesnake" + :bounds + (new 'static 'vector :y 57344.0 :w 73728.0) + :longest-edge (meters 2.5) + :version #x6 + ) + ) + ) + (set! (-> v1-0 jgeo) 0) + (set! (-> v1-0 janim) 2) + (set! (-> v1-0 mgeo 0) (the-as uint 1)) + (set! (-> v1-0 lod-dist 0) 4095996000.0) + (set! *junglesnake-sg* v1-0) + ) + +(set! + (-> *part-group-id-table* 173) + (new 'static 'sparticle-launch-group + :length 1 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-junglesnake-dropping-down" + :launcher + (new 'static 'inline-array sparticle-group-item 1 + (sp-item 799 :period 300 :length 150) + ) + :bounds + (new 'static 'sphere :y -49152.0 :w 57344.0) + ) + ) + +(set! + (-> *part-id-table* 799) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 20 + (sp-tex spt-texture (new 'static 'texture-id :index #x1d :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-x (meters -9.0) (meters 18.0) 1.0) + (sp-flt spt-y (meters -6.0)) + (sp-rnd-flt spt-z -36864.0 73728.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.5) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 32.0 40.0 1.0) + (sp-rnd-flt spt-g 32.0 40.0 1.0) + (sp-rnd-flt spt-b 32.0 40.0 1.0) + (sp-flt spt-a 128.0) + (sp-rnd-flt spt-vel-y (meters 0.0) (meters -0.04) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.3) (degrees 0.6) 1.0) + (sp-rnd-flt spt-accel-y -6.826667 -0.68266666 1.0) + (sp-int spt-timer 390) + (sp-cpuinfo-flags bit2) + (sp-flt spt-userdata 0.0) + (sp-func spt-func 'check-water-level-drop) + (sp-end) + ) + ) + ) + +(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 symbol :offset-assert 4) + ) + :allow-misaligned :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) + + +(deftype junglesnake (process-drawable) + ((root-override collide-shape :offset 112) + (state-time2 int64 :offset-assert 176) + (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) + ) + :heap-base #x220 + :method-count-assert 25 + :size-assert #x28c + :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-attack + junglesnake-die + junglesnake-give-up + junglesnake-sleeping + junglesnake-tracking + junglesnake-wake + ) + ) + + +;; WARN: disable def twice: 39. This may happen when a cond (no else) is nested inside of another conditional, but it should be rare. +(defbehavior + junglesnake-default-event-handler junglesnake + ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('touch) + (when + (and + *target* + ((method-of-type touching-shapes-entry prims-touching?) + (the-as touching-shapes-entry (-> arg3 param 0)) + (the-as collide-shape-moving (-> self root-override)) + (the-as uint 1) + ) + ) + (cond + ((and + (-> self is-lethal?) + (zero? (logand (-> *target* state-flags) #x80f8)) + ) + (let ((a1-2 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-2 from) self) + (set! (-> a1-2 num-params) 2) + (set! (-> a1-2 message) 'attack) + (set! (-> a1-2 param 0) (-> arg3 param 0)) + (set! (-> a1-2 param 1) (the-as uint (new 'static 'attack-info))) + (when (send-event-function arg0 a1-2) + (let ((v0-1 (the-as object #t))) + (set! (-> self hit-player) (the-as symbol v0-1)) + v0-1 + ) + ) + ) + ) + (else + (dummy-45 (-> self root-override)) + (let ((a1-3 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-3 from) self) + (set! (-> a1-3 num-params) 2) + (set! (-> a1-3 message) 'shove) + (set! (-> a1-3 param 0) (-> arg3 param 0)) + (let ((v1-17 (new 'static 'attack-info :mask #xc0))) + (set! (-> v1-17 shove-back) 8192.0) + (set! (-> v1-17 shove-up) 2048.0) + (set! (-> a1-3 param 1) (the-as uint v1-17)) + ) + (send-event-function arg0 a1-3) + ) + ) + ) + ) + ) + (('attack) + (go junglesnake-die) + ) + ) + ) + +junglesnake-default-event-handler + +(defmethod dummy-20 junglesnake ((obj junglesnake)) + (when (and *target* (-> obj track-player-ry)) + (let ((v1-3 (target-pos 0))) + (set! + (-> obj des-ry) + (atan + (- (-> v1-3 x) (-> obj root-override trans x)) + (- (-> v1-3 z) (-> obj root-override trans z)) + ) + ) + ) + ) + (let ((f0-7 (deg-diff (-> obj ry) (-> obj des-ry)))) + (+! + (-> obj ry) + (seek-with-smooth + 0.0 + f0-7 + (* 655360.0 (-> *display* seconds-per-frame)) + 0.125 + 0.001 + ) + ) + ) + (let ((f30-1 (-> obj ry))) + (dotimes (s5-0 24) + (let ((s4-0 (-> obj twist-joints s5-0))) + (let ((f28-0 (-> s4-0 drag-delta-ry))) + (cond + ((= f28-0 0.0) + (set! (-> s4-0 ry) f30-1) + ) + (else + (let ((f26-0 (-> s4-0 ry))) + (let ((f0-14 (deg-diff f30-1 (-> s4-0 ry)))) + (if (< f28-0 (fabs f0-14)) + (set! f26-0 (if (>= f0-14 0.0) + (+ f30-1 f28-0) + (- f30-1 f28-0) + ) + ) + ) + ) + (let ((f0-16 (deg-diff (-> s4-0 ry) f26-0))) + (+! + (-> s4-0 ry) + (seek-with-smooth + 0.0 + f0-16 + (* 327680.0 (-> *display* seconds-per-frame)) + 0.25 + 0.001 + ) + ) + ) + ) + ) + ) + ) + (set! f30-1 (-> s4-0 ry)) + ) + ) + ) + #f + ) + +(defun junglesnake-joint-callback ((arg0 junglesnake)) + (let ((s5-0 arg0)) + (let ((s4-0 (new 'stack-no-clear 'matrix)) + (s3-0 (new 'stack-no-clear 'matrix)) + (s2-0 (new 'stack-no-clear 'matrix)) + ) + (let ((s1-0 (new 'stack-no-clear 'vector))) + (set-vector! + s1-0 + (-> arg0 root-override trans x) + (-> arg0 root-override trans y) + (-> arg0 root-override trans z) + 1.0 + ) + (matrix-translate! s2-0 s1-0) + (vector-negate! s1-0 s1-0) + (matrix-translate! s3-0 s1-0) + ) + (dotimes (s1-1 24) + (let ((s0-0 (-> s5-0 twist-joints s1-1))) + (matrix-rotate-y! s4-0 (-> s0-0 ry)) + (let + ((s0-1 (-> arg0 node-list data (-> s0-0 joint-index) bone transform))) + (matrix*! s0-1 s0-1 s3-0) + (matrix*! s0-1 s0-1 s4-0) + (matrix*! s0-1 s0-1 s2-0) + ) + ) + ) + ) + (dotimes (s4-1 9) + (let ((s3-1 (-> arg0 node-list data (+ s4-1 11) bone transform))) + (let ((a0-14 (-> arg0 node-list data (+ s4-1 12) bone transform)) + (a1-7 (new 'stack-no-clear 'vector)) + ) + (vector-! a1-7 (-> a0-14 vector 3) (-> s3-1 vector 3)) + (vector-normalize-copy! (-> s3-1 vector 1) a1-7 1.0) + ) + (set! (-> s3-1 vector 1 w) 0.0) + (vector-normalize! + (vector-cross! + (-> s3-1 vector 2) + (the-as vector (-> s3-1 vector)) + (-> s3-1 vector 1) + ) + 1.0 + ) + (vector-normalize! + (vector-cross! + (the-as vector (-> s3-1 vector)) + (-> s3-1 vector 1) + (-> s3-1 vector 2) + ) + 1.0 + ) + ) + ) + (cond + ((and (-> s5-0 track-player-tilt) *target*) + (let ((s2-1 (-> arg0 node-list data 25 bone transform)) + (s4-2 (new 'stack-no-clear 'vector)) + ) + (vector-normalize-copy! s4-2 (-> s2-1 vector 1) 1.0) + (set! (-> s4-2 w) 1.0) + (let ((s1-2 (new 'stack-no-clear 'vector))) + (vector-! s1-2 (target-pos 0) (-> s2-1 vector 3)) + (set! (-> s1-2 y) (+ 9011.2 (-> s1-2 y))) + (vector-normalize! s1-2 1.0) + (let ((s0-2 (new 'stack-no-clear 'vector)) + (s3-4 (new 'stack-no-clear 'vector)) + ) + (vector-normalize-copy! s0-2 (-> s2-1 vector 2) 1.0) + (vector-flatten! s3-4 s1-2 s0-2) + (vector-normalize! s3-4 1.0) + (let ((f30-0 (acos (vector-dot s4-2 s3-4)))) + (if (< (-> s4-2 y) (-> s3-4 y)) + (set! f30-0 (- f30-0)) + ) + (cond + ((< 7281.778 f30-0) + (set! f30-0 7281.778) + ) + ((< f30-0 -11650.845) + (set! f30-0 -11650.845) + ) + ) + (let ((f0-16 (fabs (deg-diff (-> s5-0 ry) (-> s5-0 des-ry))))) + (if (>= f0-16 24576.0) + (set! f30-0 (* 0.00012207031 (- 32768.0 f0-16) f30-0)) + ) + ) + (set! (-> s5-0 des-tilt) f30-0) + ) + ) + ) + ) + ) + (else + (set! (-> s5-0 des-tilt) 0.0) + ) + ) + (let* ((f30-1 (-> s5-0 tilt)) + (f0-21 (deg-diff f30-1 (-> s5-0 des-tilt))) + (f28-0 + (+ + f30-1 + (seek-with-smooth + 0.0 + f0-21 + (* 65536.0 (-> *display* seconds-per-frame)) + 0.2 + 0.001 + ) + ) + ) + ) + (set! (-> s5-0 tilt) f28-0) + (let ((f30-2 (cos f28-0)) + (f28-1 (sin f28-0)) + (s4-3 (new 'stack-no-clear 'matrix)) + (s3-5 (new 'stack-no-clear 'matrix)) + ) + (matrix-identity! s4-3) + (set! (-> s4-3 vector 0 x) f30-2) + (set! (-> s4-3 vector 0 y) f28-1) + (set! (-> s4-3 vector 1 x) (- f28-1)) + (set! (-> s4-3 vector 1 y) f30-2) + (let* ((a2-9 s3-5) + (a3-1 s4-3) + (v1-47 (-> a3-1 vector 0 quad)) + (a0-36 (-> a3-1 vector 1 quad)) + (a1-20 (-> a3-1 vector 2 quad)) + (a3-2 (-> a3-1 vector 3 quad)) + ) + (set! (-> a2-9 vector 0 quad) v1-47) + (set! (-> a2-9 vector 1 quad) a0-36) + (set! (-> a2-9 vector 2 quad) a1-20) + (set! (-> a2-9 vector 3 quad) a3-2) + ) + (set! (-> s3-5 vector 0 y) (- (-> s3-5 vector 0 y))) + (set! (-> s3-5 vector 1 x) (- (-> s3-5 vector 1 x))) + (dotimes (s2-2 3) + (let* ((v1-50 (-> s5-0 tilt-joints s2-2)) + (a2-10 + (-> arg0 node-list data (-> v1-50 joint-index) bone transform) + ) + ) + (if (-> v1-50 flip-it) + (matrix*! a2-10 s3-5 a2-10) + (matrix*! a2-10 s4-3 a2-10) + ) + ) + ) + ) + ) + ) + 0 + (none) + ) + +(defstate junglesnake-sleeping (junglesnake) + :event + junglesnake-default-event-handler + :enter + (behavior () + (set! (-> self skel postbind-function) #f) + (set! (-> self track-player-ry) #f) + (set! (-> self track-player-tilt) #f) + (set! (-> self des-ry) (-> self ry)) + (set! (-> self des-tilt) (-> self tilt)) + (logior! (-> self draw status) 2) + (none) + ) + :trans + (behavior () + (when *target* + (let* ((a0-1 (target-pos 0)) + (f0-1 (- (-> a0-1 y) (-> self root-override trans y))) + ) + (if + (and + (>= 40960.0 f0-1) + (>= + 143360.0 + (vector-vector-xz-distance a0-1 (-> self root-override trans)) + ) + ) + (go junglesnake-wake) + ) + ) + ) + (none) + ) + :code + (behavior () + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + 0 + (none) + ) + ) + +(defstate junglesnake-wake (junglesnake) + :event + junglesnake-default-event-handler + :enter + (behavior () + (set! (-> self draw status) (logand -3 (-> self draw status))) + (set! (-> self track-player-ry) #f) + (set! (-> self track-player-tilt) #f) + (set! (-> self skel postbind-function) junglesnake-joint-callback) + (set! (-> self refractory-delay) 0) + 0 + (none) + ) + :trans + (behavior () + (dummy-20 self) + (when *target* + (if *target* + (look-at-enemy! + (-> *target* neck) + (the-as + vector + (-> + (the-as collide-shape-prim-group (-> self root-override root-prim)) + prims + 0 + prim-core + ) + ) + 'attacking + self + ) + ) + ) + (none) + ) + :code + (behavior () + (let ((a0-0 (-> self skel root-channel 0))) + (set! + (-> a0-0 frame-group) + (the-as art-joint-anim (-> self draw art-group data 5)) + ) + (set! + (-> a0-0 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 5)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-0 param 1) 0.85) + (set! (-> a0-0 frame-num) 0.5) + (joint-control-channel-group! + a0-0 + (the-as art-joint-anim (-> self draw art-group data 5)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-1 (-> self skel root-channel 0))) + (set! + (-> a0-1 param 0) + (the float (+ (-> a0-1 frame-group data 0 length) -1)) + ) + (set! (-> a0-1 param 1) 0.85) + (joint-control-channel-group-eval! + a0-1 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (go junglesnake-tracking) + (none) + ) + :post + (the-as (function none :behavior junglesnake) transform-post) + ) + +(defstate junglesnake-tracking (junglesnake) + :event + junglesnake-default-event-handler + :enter + (behavior () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (set! (-> self track-player-ry) #t) + (set! (-> self track-player-tilt) #t) + (none) + ) + :trans + (behavior () + (if + (and + (and + *target* + (>= + 24576.0 + (vector-vector-distance + (-> self root-override trans) + (-> *target* control trans) + ) + ) + ) + (>= + (- (-> *display* base-frame-counter) (-> self state-time)) + (-> self refractory-delay) + ) + (zero? (logand (-> *target* state-flags) #x80f8)) + ) + (go junglesnake-attack) + ) + (when *target* + (let ((a0-8 (target-pos 0))) + (if + (or + (>= (- (-> a0-8 y) (-> self root-override trans y)) 57344.0) + (>= + (vector-vector-xz-distance a0-8 (-> self root-override trans)) + 163840.0 + ) + ) + (go junglesnake-give-up) + ) + ) + ) + (dummy-20 self) + (when *target* + (if *target* + (look-at-enemy! + (-> *target* neck) + (the-as + vector + (-> + (the-as collide-shape-prim-group (-> self root-override root-prim)) + prims + 0 + prim-core + ) + ) + 'attacking + self + ) + ) + ) + (none) + ) + :code + (behavior () + (cond + ((= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 2) + ) + (while (not (ja-done? 0)) + (suspend) + (let ((a0-4 (-> self skel root-channel 0))) + (set! + (-> a0-4 param 0) + (the float (+ (-> a0-4 frame-group data 0 length) -1)) + ) + (set! (-> a0-4 param 1) 1.0) + (joint-control-channel-group-eval! + a0-4 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (else + (ja-channel-push! 1 45) + ) + ) + (while #t + (let ((a0-7 (-> self skel root-channel 0))) + (set! + (-> a0-7 frame-group) + (the-as art-joint-anim (-> self draw art-group data 2)) + ) + (set! + (-> a0-7 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 2)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-7 param 1) 1.0) + (set! (-> a0-7 frame-num) 0.0) + (joint-control-channel-group! + a0-7 + (the-as art-joint-anim (-> self draw art-group data 2)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-8 (-> self skel root-channel 0))) + (set! + (-> a0-8 param 0) + (the float (+ (-> a0-8 frame-group data 0 length) -1)) + ) + (set! (-> a0-8 param 1) 1.0) + (joint-control-channel-group-eval! + a0-8 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior junglesnake) transform-post) + ) + +(defstate junglesnake-attack (junglesnake) + :event + junglesnake-default-event-handler + :enter + (behavior () + (set! (-> self hit-player) #f) + (none) + ) + :exit + (behavior () + (dummy-24 self) + (none) + ) + :trans + (behavior () + (dummy-20 self) + (when *target* + (if *target* + (look-at-enemy! + (-> *target* neck) + (the-as + vector + (-> + (the-as collide-shape-prim-group (-> self root-override root-prim)) + prims + 0 + prim-core + ) + ) + 'attacking + self + ) + ) + ) + (none) + ) + :code + (behavior () + (set! (-> self track-player-ry) #t) + (set! (-> self track-player-tilt) #t) + (ja-channel-push! 2 45) + (dummy-23 self) + (let + ((f30-0 + (lerp-scale + 0.0 + 1.0 + (vector-vector-distance (target-pos 0) (-> self root-override trans)) + 0.0 + 24576.0 + ) + ) + ) + (let ((a0-5 (-> self skel root-channel 0))) + (set! + (-> a0-5 frame-group) + (the-as art-joint-anim (-> self draw art-group data 3)) + ) + (set! + (-> a0-5 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 3)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-5 param 1) 1.25) + (set! (-> a0-5 frame-num) 0.0) + (joint-control-channel-group! + a0-5 + (the-as art-joint-anim (-> self draw art-group data 3)) + num-func-seek! + ) + ) + (let ((a0-6 (-> self skel root-channel 1))) + (set! (-> a0-6 frame-interp) f30-0) + (set! + (-> a0-6 frame-group) + (the-as art-joint-anim (-> self draw art-group data 4)) + ) + (set! (-> a0-6 param 0) 0.0) + (set! (-> a0-6 frame-num) 0.0) + (joint-control-channel-group! + a0-6 + (the-as art-joint-anim (-> self draw art-group data 4)) + num-func-chan + ) + ) + (until (ja-done? 0) + (suspend) + (set! + f30-0 + (seek + f30-0 + (lerp-scale + 0.0 + 1.0 + (vector-vector-distance (target-pos 0) (-> self root-override trans)) + 0.0 + 24576.0 + ) + (* 2.0 (-> *display* seconds-per-frame)) + ) + ) + (let ((a0-11 (-> self skel root-channel 0))) + (set! + (-> a0-11 param 0) + (the float (+ (-> a0-11 frame-group data 0 length) -1)) + ) + (set! (-> a0-11 param 1) 1.25) + (joint-control-channel-group-eval! + a0-11 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (let ((a0-12 (-> self skel root-channel 1))) + (set! (-> a0-12 frame-interp) f30-0) + (set! (-> a0-12 param 0) 0.0) + (joint-control-channel-group-eval! + a0-12 + (the-as art-joint-anim #f) + num-func-chan + ) + ) + (let ((f0-12 (ja-aframe-num 0))) + (cond + ((and (>= f0-12 22.0) (< f0-12 44.0)) + (if (not (-> self is-lethal?)) + (dummy-23 self) + ) + ) + (else + (if (-> self is-lethal?) + (dummy-24 self) + ) + ) + ) + ) + ) + ) + (if (-> self hit-player) + (set! (-> self refractory-delay) (rand-vu-int-range 300 600)) + (set! (-> self refractory-delay) (rand-vu-int-range 150 300)) + ) + (go junglesnake-tracking) + (none) + ) + :post + (the-as (function none :behavior junglesnake) transform-post) + ) + +(defstate junglesnake-give-up (junglesnake) + :event + junglesnake-default-event-handler + :enter + (behavior () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (set! (-> self track-player-ry) #f) + (set! (-> self track-player-tilt) #f) + (set! (-> self des-ry) (-> self ry)) + (set! (-> self des-tilt) (-> self tilt)) + (none) + ) + :trans + (behavior () + (dummy-20 self) + (none) + ) + :code + (behavior () + (ja-channel-push! 1 30) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (let ((s5-0 (new 'stack-no-clear 'vector))) + (set! (-> gp-0 quad) (-> self root-override trans quad)) + (set! (-> s5-0 quad) (-> gp-0 quad)) + (set! (-> s5-0 y) (+ 131072.0 (-> s5-0 y))) + (let ((a0-6 (-> self skel root-channel 0))) + (set! + (-> a0-6 frame-group) + (the-as art-joint-anim (-> self draw art-group data 7)) + ) + (set! + (-> a0-6 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 7)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-6 param 1) 0.5) + (set! (-> a0-6 frame-num) 0.0) + (joint-control-channel-group! + a0-6 + (the-as art-joint-anim (-> self draw art-group data 7)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (let* ((f0-6 (ja-frame-num 0)) + (v1-18 (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (f0-7 (/ f0-6 (the float (+ (-> v1-18 data 0 length) -1)))) + (s4-0 (new 'stack-no-clear 'vector)) + ) + (set-vector! (-> self root-override scale) 1.0 (- 1.0 f0-7) 1.0 1.0) + (vector-lerp! s4-0 gp-0 s5-0 f0-7) + (TODO-RENAME-30 (-> self root-override) s4-0) + ) + (suspend) + (let ((a0-10 (-> self skel root-channel 0))) + (set! + (-> a0-10 param 0) + (the float (+ (-> a0-10 frame-group data 0 length) -1)) + ) + (set! (-> a0-10 param 1) 0.5) + (joint-control-channel-group-eval! + a0-10 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (TODO-RENAME-30 (-> self root-override) gp-0) + ) + (set-vector! (-> self root-override scale) 1.0 1.0 1.0 1.0) + (go junglesnake-sleeping) + (none) + ) + :post + (the-as (function none :behavior junglesnake) transform-post) + ) + +(defstate junglesnake-die (junglesnake) + :event + (the-as + (function process int symbol event-message-block object :behavior junglesnake) + process-drawable-death-event-handler + ) + :code + (behavior () + (logclear! (-> self mask) (process-mask actor-pause)) + (dummy-48 (-> self root-override)) + (ja-channel-push! 1 45) + (let ((a0-3 (-> self skel root-channel 0))) + (set! + (-> a0-3 frame-group) + (the-as art-joint-anim (-> self draw art-group data 6)) + ) + (set! + (-> a0-3 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 6)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-3 param 1) 1.0) + (set! (-> a0-3 frame-num) 0.0) + (joint-control-channel-group! + a0-3 + (the-as art-joint-anim (-> self draw art-group data 6)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-4 (-> self skel root-channel 0))) + (set! + (-> a0-4 param 0) + (the float (+ (-> a0-4 frame-group data 0 length) -1)) + ) + (set! (-> a0-4 param 1) 1.0) + (joint-control-channel-group-eval! + a0-4 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (dummy-18 self) + (none) + ) + :post + (the-as (function none :behavior junglesnake) ja-post) + ) + +(defmethod dummy-23 junglesnake ((obj junglesnake)) + (when (not (-> obj is-lethal?)) + (set! (-> obj is-lethal?) #t) + (let + ((v1-5 + (-> + (the-as collide-shape-prim-group (-> obj root-override root-prim)) + prims + 0 + ) + ) + ) + (set! (-> v1-5 prim-core action) (logand -2 (-> v1-5 prim-core action))) + ) + ) + 0 + (none) + ) + +(defmethod dummy-24 junglesnake ((obj junglesnake)) + (when (-> obj is-lethal?) + (set! (-> obj is-lethal?) #f) + (let + ((v1-4 + (-> + (the-as collide-shape-prim-group (-> obj root-override root-prim)) + prims + 0 + ) + ) + ) + (logior! (-> v1-4 prim-core action) 1) + ) + (dummy-45 (-> obj root-override)) + ) + 0 + (none) + ) + +(define + *junglesnake-twist-max-deltas* + (new 'static 'array float 28 + 0.0 + 0.0 + 0.0 + 0.0 + 0.0 + 0.0 + 546.13336 + 1092.2667 + 1638.4 + 2184.5334 + 2730.6667 + 3276.8 + 3822.9333 + 4369.067 + 4915.2 + 5461.3335 + 6007.467 + 6553.6 + 7099.7334 + 7645.8667 + 8192.0 + 8738.134 + 9284.267 + 9830.4 + 10376.533 + 0.0 + 0.0 + 0.0 + ) + ) + +(defmethod dummy-22 junglesnake ((obj junglesnake) (arg0 float)) + (let ((f0-0 0.0)) + (dotimes (v1-0 24) + (let ((a2-2 (-> obj twist-joints v1-0))) + (set! (-> a2-2 ry) arg0) + (set! (-> a2-2 joint-index) (- 26 v1-0)) + (let ((f1-1 (-> *junglesnake-twist-max-deltas* v1-0))) + (set! (-> a2-2 drag-delta-ry) (- f1-1 f0-0)) + (set! f0-0 f1-1) + ) + ) + ) + ) + #f + ) + +(defmethod dummy-21 junglesnake ((obj junglesnake)) + (dotimes (v1-0 3) + (let ((a1-2 (-> obj tilt-joints v1-0))) + (set! (-> a1-2 joint-index) (+ v1-0 23)) + (set! (-> a1-2 flip-it) #f) + ) + ) + (let ((v1-3 (the-as object (&-> obj stack 524)))) + (set! (-> (the-as junglesnake-tilt-joint v1-3) flip-it) #t) + ) + (let ((v1-4 (the-as object (&-> obj stack 476))) + (v0-0 #t) + ) + (set! (-> (the-as junglesnake-twist-joint v1-4) ry) (the-as float v0-0)) + v0-0 + ) + ) + +(defmethod copy-defaults! junglesnake ((obj junglesnake) (arg0 res-lump)) + (set! (-> obj mask) (logior (process-mask enemy) (-> obj mask))) + (let + ((s4-0 (new 'process 'collide-shape obj (collide-list-enum hit-by-player)))) + (let ((s3-0 (new 'process 'collide-shape-prim-group s4-0 (the-as uint 9) 0))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 1)) + (set-vector! (-> s3-0 local-sphere) 0.0 16384.0 0.0 30720.0) + (dummy-46 s4-0) + (let ((s2-0 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 1)))) + (set! (-> s2-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-0 collide-with) (the-as uint 16)) + (set! (-> s2-0 prim-core action) (the-as uint 1)) + (set! (-> s2-0 prim-core offense) 1) + (set! (-> s2-0 transform-index) 25) + (set-vector! (-> s2-0 local-sphere) 0.0 2048.0 0.0 4096.0) + ) + (dummy-28 s3-0) + (let ((s2-1 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0)))) + (set! (-> s2-1 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-1 collide-with) (the-as uint 16)) + (set! (-> s2-1 prim-core action) (the-as uint 1)) + (set! (-> s2-1 prim-core offense) 1) + (set! (-> s2-1 transform-index) 21) + (set-vector! (-> s2-1 local-sphere) 0.0 0.0 0.0 3276.8) + ) + (dummy-28 s3-0) + (let ((s2-2 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0)))) + (set! (-> s2-2 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-2 collide-with) (the-as uint 16)) + (set! (-> s2-2 prim-core action) (the-as uint 1)) + (set! (-> s2-2 prim-core offense) 1) + (set! (-> s2-2 transform-index) 20) + (set-vector! (-> s2-2 local-sphere) 0.0 0.0 0.0 3276.8) + ) + (dummy-28 s3-0) + (let ((s2-3 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0)))) + (set! (-> s2-3 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-3 collide-with) (the-as uint 16)) + (set! (-> s2-3 prim-core action) (the-as uint 1)) + (set! (-> s2-3 prim-core offense) 1) + (set! (-> s2-3 transform-index) 19) + (set-vector! (-> s2-3 local-sphere) 0.0 0.0 0.0 3276.8) + ) + (dummy-28 s3-0) + (let ((s2-4 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0)))) + (set! (-> s2-4 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-4 collide-with) (the-as uint 16)) + (set! (-> s2-4 prim-core action) (the-as uint 1)) + (set! (-> s2-4 prim-core offense) 1) + (set! (-> s2-4 transform-index) 18) + (set-vector! (-> s2-4 local-sphere) 0.0 0.0 0.0 3276.8) + ) + (dummy-28 s3-0) + (let ((s2-5 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0)))) + (set! (-> s2-5 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-5 collide-with) (the-as uint 16)) + (set! (-> s2-5 prim-core action) (the-as uint 1)) + (set! (-> s2-5 prim-core offense) 1) + (set! (-> s2-5 transform-index) 17) + (set-vector! (-> s2-5 local-sphere) 0.0 0.0 0.0 3276.8) + ) + (dummy-28 s3-0) + (let ((s2-6 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0)))) + (set! (-> s2-6 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-6 collide-with) (the-as uint 16)) + (set! (-> s2-6 prim-core action) (the-as uint 1)) + (set! (-> s2-6 prim-core offense) 1) + (set! (-> s2-6 transform-index) 16) + (set-vector! (-> s2-6 local-sphere) 0.0 0.0 0.0 3276.8) + ) + (dummy-28 s3-0) + (let ((s2-7 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0)))) + (set! (-> s2-7 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-7 collide-with) (the-as uint 16)) + (set! (-> s2-7 prim-core action) (the-as uint 1)) + (set! (-> s2-7 prim-core offense) 1) + (set! (-> s2-7 transform-index) 15) + (set-vector! (-> s2-7 local-sphere) 0.0 0.0 0.0 3276.8) + ) + (dummy-28 s3-0) + (let ((s2-8 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0)))) + (set! (-> s2-8 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-8 collide-with) (the-as uint 16)) + (set! (-> s2-8 prim-core action) (the-as uint 1)) + (set! (-> s2-8 prim-core offense) 1) + (set! (-> s2-8 transform-index) 14) + (set-vector! (-> s2-8 local-sphere) 0.0 0.0 0.0 3276.8) + ) + (dummy-28 s3-0) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (dummy-50 s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (dummy-14 obj *junglesnake-sg* '()) + (set! + (-> obj fact) + (new + 'process + 'fact-info-enemy + obj + (pickup-type eco-pill-random) + (-> *FACT-bank* default-pill-inc) + ) + ) + (set! + (-> obj part) + (create-launch-control (-> *part-group-id-table* 173) obj) + ) + (set! (-> obj is-lethal?) #f) + (set! (-> obj ry) (y-angle (-> obj root-override))) + (set! (-> obj des-ry) (-> obj ry)) + (set! (-> obj tilt) 0.0) + (set! (-> obj des-tilt) (-> obj tilt)) + (set! (-> obj track-player-ry) #f) + (set! (-> obj track-player-tilt) #f) + (quaternion-identity! (-> obj root-override quat)) + (dummy-22 obj (-> obj ry)) + (dummy-21 obj) + (logior! (-> obj skel status) 1) + (go junglesnake-sleeping) + (none) + ) + + + + diff --git a/test/decompiler/reference/engine/debug/viewer_REF.gc b/test/decompiler/reference/engine/debug/viewer_REF.gc new file mode 100644 index 0000000000..22f1a1bf11 --- /dev/null +++ b/test/decompiler/reference/engine/debug/viewer_REF.gc @@ -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) + ) + + + + diff --git a/test/decompiler/reference/levels/jungle/junglesnake_REF.gc b/test/decompiler/reference/levels/jungle/junglesnake_REF.gc new file mode 100644 index 0000000000..2a726ef30c --- /dev/null +++ b/test/decompiler/reference/levels/jungle/junglesnake_REF.gc @@ -0,0 +1,1296 @@ +;;-*-Lisp-*- +(in-package goal) + +;; failed to figure out what this is: +(let + ((v1-0 + (new 'static 'skeleton-group + :art-group-name "junglesnake" + :bounds + (new 'static 'vector :y 57344.0 :w 73728.0) + :longest-edge (meters 2.5) + :version #x6 + ) + ) + ) + (set! (-> v1-0 jgeo) 0) + (set! (-> v1-0 janim) 2) + (set! (-> v1-0 mgeo 0) (the-as uint 1)) + (set! (-> v1-0 lod-dist 0) 4095996000.0) + (set! *junglesnake-sg* v1-0) + ) + +;; failed to figure out what this is: +(set! + (-> *part-group-id-table* 173) + (new 'static 'sparticle-launch-group + :length 1 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-junglesnake-dropping-down" + :launcher + (new 'static 'inline-array sparticle-group-item 1 + (sp-item 799 :period 300 :length 150) + ) + :bounds + (new 'static 'sphere :y -49152.0 :w 57344.0) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 799) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 20 + (sp-tex spt-texture (new 'static 'texture-id :index #x1d :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-x (meters -9.0) (meters 18.0) 1.0) + (sp-flt spt-y (meters -6.0)) + (sp-rnd-flt spt-z -36864.0 73728.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.5) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 32.0 40.0 1.0) + (sp-rnd-flt spt-g 32.0 40.0 1.0) + (sp-rnd-flt spt-b 32.0 40.0 1.0) + (sp-flt spt-a 128.0) + (sp-rnd-flt spt-vel-y (meters 0.0) (meters -0.04) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.3) (degrees 0.6) 1.0) + (sp-rnd-flt spt-accel-y -6.826667 -0.68266666 1.0) + (sp-int spt-timer 390) + (sp-cpuinfo-flags bit2) + (sp-flt spt-userdata 0.0) + (sp-func spt-func 'check-water-level-drop) + (sp-end) + ) + ) + ) + +;; definition of type junglesnake-twist-joint +(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 + ) + +;; definition for method 3 of type junglesnake-twist-joint +(defmethod inspect junglesnake-twist-joint ((obj junglesnake-twist-joint)) + (format #t "[~8x] ~A~%" obj 'junglesnake-twist-joint) + (format #t "~Tjoint-index: ~D~%" (-> obj joint-index)) + (format #t "~Try: ~f~%" (-> obj ry)) + (format #t "~Tdrag-delta-ry: ~f~%" (-> obj drag-delta-ry)) + obj + ) + +;; definition of type junglesnake-tilt-joint +(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 + ) + +;; definition for method 3 of type junglesnake-tilt-joint +(defmethod inspect junglesnake-tilt-joint ((obj junglesnake-tilt-joint)) + (format #t "[~8x] ~A~%" obj 'junglesnake-tilt-joint) + (format #t "~Tjoint-index: ~D~%" (-> obj joint-index)) + (format #t "~Tflip-it: ~A~%" (-> obj flip-it)) + obj + ) + +;; definition of type junglesnake +(deftype junglesnake (process-drawable) + ((root-override collide-shape :offset 112) + (state-time2 int64 :offset-assert 176) + (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) + ) + :heap-base #x220 + :method-count-assert 25 + :size-assert #x28c + :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-attack + junglesnake-die + junglesnake-give-up + junglesnake-sleeping + junglesnake-tracking + junglesnake-wake + ) + ) + +;; definition for method 3 of type junglesnake +(defmethod inspect junglesnake ((obj junglesnake)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tstate-time: ~D~%" (-> obj state-time)) + (format #t "~T~Thit-player: ~A~%" (-> obj hit-player)) + (format #t "~T~Tis-lethal?: ~A~%" (-> obj is-lethal?)) + (format #t "~T~Trefractory-delay: ~D~%" (-> obj refractory-delay)) + (format #t "~T~Try: ~f~%" (-> obj ry)) + (format #t "~T~Tdes-ry: ~f~%" (-> obj des-ry)) + (format #t "~T~Ttilt: ~f~%" (-> obj tilt)) + (format #t "~T~Tdes-tilt: ~f~%" (-> obj des-tilt)) + (format #t "~T~Ttrack-player-ry: ~A~%" (-> obj track-player-ry)) + (format #t "~T~Ttrack-player-tilt: ~A~%" (-> obj track-player-tilt)) + (format #t "~T~Ttwist-joints[24] @ #x~X~%" (-> obj twist-joints)) + (format #t "~T~Ttilt-joints[3] @ #x~X~%" (-> obj tilt-joints)) + obj + ) + +;; definition for function junglesnake-default-event-handler +;; WARN: disable def twice: 39. This may happen when a cond (no else) is nested inside of another conditional, but it should be rare. +(defbehavior + junglesnake-default-event-handler junglesnake + ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('touch) + (when + (and + *target* + ((method-of-type touching-shapes-entry prims-touching?) + (the-as touching-shapes-entry (-> arg3 param 0)) + (the-as collide-shape-moving (-> self root-override)) + (the-as uint 1) + ) + ) + (cond + ((and + (-> self is-lethal?) + (zero? (logand (-> *target* state-flags) #x80f8)) + ) + (let ((a1-2 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-2 from) self) + (set! (-> a1-2 num-params) 2) + (set! (-> a1-2 message) 'attack) + (set! (-> a1-2 param 0) (-> arg3 param 0)) + (set! (-> a1-2 param 1) (the-as uint (new 'static 'attack-info))) + (when (send-event-function arg0 a1-2) + (let ((v0-1 (the-as object #t))) + (set! (-> self hit-player) (the-as symbol v0-1)) + v0-1 + ) + ) + ) + ) + (else + (dummy-45 (-> self root-override)) + (let ((a1-3 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-3 from) self) + (set! (-> a1-3 num-params) 2) + (set! (-> a1-3 message) 'shove) + (set! (-> a1-3 param 0) (-> arg3 param 0)) + (let ((v1-17 (new 'static 'attack-info :mask #xc0))) + (set! (-> v1-17 shove-back) 8192.0) + (set! (-> v1-17 shove-up) 2048.0) + (set! (-> a1-3 param 1) (the-as uint v1-17)) + ) + (send-event-function arg0 a1-3) + ) + ) + ) + ) + ) + (('attack) + (go junglesnake-die) + ) + ) + ) + +;; failed to figure out what this is: +junglesnake-default-event-handler + +;; definition for method 20 of type junglesnake +(defmethod dummy-20 junglesnake ((obj junglesnake)) + (when (and *target* (-> obj track-player-ry)) + (let ((v1-3 (target-pos 0))) + (set! + (-> obj des-ry) + (atan + (- (-> v1-3 x) (-> obj root-override trans x)) + (- (-> v1-3 z) (-> obj root-override trans z)) + ) + ) + ) + ) + (let ((f0-7 (deg-diff (-> obj ry) (-> obj des-ry)))) + (+! + (-> obj ry) + (seek-with-smooth + 0.0 + f0-7 + (* 655360.0 (-> *display* seconds-per-frame)) + 0.125 + 0.001 + ) + ) + ) + (let ((f30-1 (-> obj ry))) + (dotimes (s5-0 24) + (let ((s4-0 (-> obj twist-joints s5-0))) + (let ((f28-0 (-> s4-0 drag-delta-ry))) + (cond + ((= f28-0 0.0) + (set! (-> s4-0 ry) f30-1) + ) + (else + (let ((f26-0 (-> s4-0 ry))) + (let ((f0-14 (deg-diff f30-1 (-> s4-0 ry)))) + (if (< f28-0 (fabs f0-14)) + (set! f26-0 (if (>= f0-14 0.0) + (+ f30-1 f28-0) + (- f30-1 f28-0) + ) + ) + ) + ) + (let ((f0-16 (deg-diff (-> s4-0 ry) f26-0))) + (+! + (-> s4-0 ry) + (seek-with-smooth + 0.0 + f0-16 + (* 327680.0 (-> *display* seconds-per-frame)) + 0.25 + 0.001 + ) + ) + ) + ) + ) + ) + ) + (set! f30-1 (-> s4-0 ry)) + ) + ) + ) + #f + ) + +;; definition for function junglesnake-joint-callback +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defun junglesnake-joint-callback ((arg0 junglesnake)) + (let ((s5-0 arg0)) + (let ((s4-0 (new 'stack-no-clear 'matrix)) + (s3-0 (new 'stack-no-clear 'matrix)) + (s2-0 (new 'stack-no-clear 'matrix)) + ) + (let ((s1-0 (new 'stack-no-clear 'vector))) + (set-vector! + s1-0 + (-> arg0 root-override trans x) + (-> arg0 root-override trans y) + (-> arg0 root-override trans z) + 1.0 + ) + (matrix-translate! s2-0 s1-0) + (vector-negate! s1-0 s1-0) + (matrix-translate! s3-0 s1-0) + ) + (dotimes (s1-1 24) + (let ((s0-0 (-> s5-0 twist-joints s1-1))) + (matrix-rotate-y! s4-0 (-> s0-0 ry)) + (let + ((s0-1 (-> arg0 node-list data (-> s0-0 joint-index) bone transform))) + (matrix*! s0-1 s0-1 s3-0) + (matrix*! s0-1 s0-1 s4-0) + (matrix*! s0-1 s0-1 s2-0) + ) + ) + ) + ) + (dotimes (s4-1 9) + (let ((s3-1 (-> arg0 node-list data (+ s4-1 11) bone transform))) + (let ((a0-14 (-> arg0 node-list data (+ s4-1 12) bone transform)) + (a1-7 (new 'stack-no-clear 'vector)) + ) + (vector-! a1-7 (-> a0-14 vector 3) (-> s3-1 vector 3)) + (vector-normalize-copy! (-> s3-1 vector 1) a1-7 1.0) + ) + (set! (-> s3-1 vector 1 w) 0.0) + (vector-normalize! + (vector-cross! + (-> s3-1 vector 2) + (the-as vector (-> s3-1 vector)) + (-> s3-1 vector 1) + ) + 1.0 + ) + (vector-normalize! + (vector-cross! + (the-as vector (-> s3-1 vector)) + (-> s3-1 vector 1) + (-> s3-1 vector 2) + ) + 1.0 + ) + ) + ) + (cond + ((and (-> s5-0 track-player-tilt) *target*) + (let ((s2-1 (-> arg0 node-list data 25 bone transform)) + (s4-2 (new 'stack-no-clear 'vector)) + ) + (vector-normalize-copy! s4-2 (-> s2-1 vector 1) 1.0) + (set! (-> s4-2 w) 1.0) + (let ((s1-2 (new 'stack-no-clear 'vector))) + (vector-! s1-2 (target-pos 0) (-> s2-1 vector 3)) + (set! (-> s1-2 y) (+ 9011.2 (-> s1-2 y))) + (vector-normalize! s1-2 1.0) + (let ((s0-2 (new 'stack-no-clear 'vector)) + (s3-4 (new 'stack-no-clear 'vector)) + ) + (vector-normalize-copy! s0-2 (-> s2-1 vector 2) 1.0) + (vector-flatten! s3-4 s1-2 s0-2) + (vector-normalize! s3-4 1.0) + (let ((f30-0 (acos (vector-dot s4-2 s3-4)))) + (if (< (-> s4-2 y) (-> s3-4 y)) + (set! f30-0 (- f30-0)) + ) + (cond + ((< 7281.778 f30-0) + (set! f30-0 7281.778) + ) + ((< f30-0 -11650.845) + (set! f30-0 -11650.845) + ) + ) + (let ((f0-16 (fabs (deg-diff (-> s5-0 ry) (-> s5-0 des-ry))))) + (if (>= f0-16 24576.0) + (set! f30-0 (* 0.00012207031 (- 32768.0 f0-16) f30-0)) + ) + ) + (set! (-> s5-0 des-tilt) f30-0) + ) + ) + ) + ) + ) + (else + (set! (-> s5-0 des-tilt) 0.0) + ) + ) + (let* ((f30-1 (-> s5-0 tilt)) + (f0-21 (deg-diff f30-1 (-> s5-0 des-tilt))) + (f28-0 + (+ + f30-1 + (seek-with-smooth + 0.0 + f0-21 + (* 65536.0 (-> *display* seconds-per-frame)) + 0.2 + 0.001 + ) + ) + ) + ) + (set! (-> s5-0 tilt) f28-0) + (let ((f30-2 (cos f28-0)) + (f28-1 (sin f28-0)) + (s4-3 (new 'stack-no-clear 'matrix)) + (s3-5 (new 'stack-no-clear 'matrix)) + ) + (matrix-identity! s4-3) + (set! (-> s4-3 vector 0 x) f30-2) + (set! (-> s4-3 vector 0 y) f28-1) + (set! (-> s4-3 vector 1 x) (- f28-1)) + (set! (-> s4-3 vector 1 y) f30-2) + (let* ((a2-9 s3-5) + (a3-1 s4-3) + (v1-47 (-> a3-1 vector 0 quad)) + (a0-36 (-> a3-1 vector 1 quad)) + (a1-20 (-> a3-1 vector 2 quad)) + (a3-2 (-> a3-1 vector 3 quad)) + ) + (set! (-> a2-9 vector 0 quad) v1-47) + (set! (-> a2-9 vector 1 quad) a0-36) + (set! (-> a2-9 vector 2 quad) a1-20) + (set! (-> a2-9 vector 3 quad) a3-2) + ) + (set! (-> s3-5 vector 0 y) (- (-> s3-5 vector 0 y))) + (set! (-> s3-5 vector 1 x) (- (-> s3-5 vector 1 x))) + (dotimes (s2-2 3) + (let* ((v1-50 (-> s5-0 tilt-joints s2-2)) + (a2-10 + (-> arg0 node-list data (-> v1-50 joint-index) bone transform) + ) + ) + (if (-> v1-50 flip-it) + (matrix*! a2-10 s3-5 a2-10) + (matrix*! a2-10 s4-3 a2-10) + ) + ) + ) + ) + ) + ) + 0 + (none) + ) + +;; failed to figure out what this is: +(defstate junglesnake-sleeping (junglesnake) + :event + junglesnake-default-event-handler + :enter + (behavior () + (set! (-> self skel postbind-function) #f) + (set! (-> self track-player-ry) #f) + (set! (-> self track-player-tilt) #f) + (set! (-> self des-ry) (-> self ry)) + (set! (-> self des-tilt) (-> self tilt)) + (logior! (-> self draw status) 2) + (none) + ) + :trans + (behavior () + (when *target* + (let* ((a0-1 (target-pos 0)) + (f0-1 (- (-> a0-1 y) (-> self root-override trans y))) + ) + (if + (and + (>= 40960.0 f0-1) + (>= + 143360.0 + (vector-vector-xz-distance a0-1 (-> self root-override trans)) + ) + ) + (go junglesnake-wake) + ) + ) + ) + (none) + ) + :code + (behavior () + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + 0 + (none) + ) + ) + +;; failed to figure out what this is: +(defstate junglesnake-wake (junglesnake) + :event + junglesnake-default-event-handler + :enter + (behavior () + (set! (-> self draw status) (logand -3 (-> self draw status))) + (set! (-> self track-player-ry) #f) + (set! (-> self track-player-tilt) #f) + (set! (-> self skel postbind-function) junglesnake-joint-callback) + (set! (-> self refractory-delay) 0) + 0 + (none) + ) + :trans + (behavior () + (dummy-20 self) + (when *target* + (if *target* + (look-at-enemy! + (-> *target* neck) + (the-as + vector + (-> + (the-as collide-shape-prim-group (-> self root-override root-prim)) + prims + 0 + prim-core + ) + ) + 'attacking + self + ) + ) + ) + (none) + ) + :code + (behavior () + (let ((a0-0 (-> self skel root-channel 0))) + (set! + (-> a0-0 frame-group) + (the-as art-joint-anim (-> self draw art-group data 5)) + ) + (set! + (-> a0-0 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 5)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-0 param 1) 0.85) + (set! (-> a0-0 frame-num) 0.5) + (joint-control-channel-group! + a0-0 + (the-as art-joint-anim (-> self draw art-group data 5)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-1 (-> self skel root-channel 0))) + (set! + (-> a0-1 param 0) + (the float (+ (-> a0-1 frame-group data 0 length) -1)) + ) + (set! (-> a0-1 param 1) 0.85) + (joint-control-channel-group-eval! + a0-1 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (go junglesnake-tracking) + (none) + ) + :post + (the-as (function none :behavior junglesnake) transform-post) + ) + +;; failed to figure out what this is: +(defstate junglesnake-tracking (junglesnake) + :event + junglesnake-default-event-handler + :enter + (behavior () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (set! (-> self track-player-ry) #t) + (set! (-> self track-player-tilt) #t) + (none) + ) + :trans + (behavior () + (if + (and + (and + *target* + (>= + 24576.0 + (vector-vector-distance + (-> self root-override trans) + (-> *target* control trans) + ) + ) + ) + (>= + (- (-> *display* base-frame-counter) (-> self state-time)) + (-> self refractory-delay) + ) + (zero? (logand (-> *target* state-flags) #x80f8)) + ) + (go junglesnake-attack) + ) + (when *target* + (let ((a0-8 (target-pos 0))) + (if + (or + (>= (- (-> a0-8 y) (-> self root-override trans y)) 57344.0) + (>= + (vector-vector-xz-distance a0-8 (-> self root-override trans)) + 163840.0 + ) + ) + (go junglesnake-give-up) + ) + ) + ) + (dummy-20 self) + (when *target* + (if *target* + (look-at-enemy! + (-> *target* neck) + (the-as + vector + (-> + (the-as collide-shape-prim-group (-> self root-override root-prim)) + prims + 0 + prim-core + ) + ) + 'attacking + self + ) + ) + ) + (none) + ) + :code + (behavior () + (cond + ((= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 2) + ) + (while (not (ja-done? 0)) + (suspend) + (let ((a0-4 (-> self skel root-channel 0))) + (set! + (-> a0-4 param 0) + (the float (+ (-> a0-4 frame-group data 0 length) -1)) + ) + (set! (-> a0-4 param 1) 1.0) + (joint-control-channel-group-eval! + a0-4 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (else + (ja-channel-push! 1 45) + ) + ) + (while #t + (let ((a0-7 (-> self skel root-channel 0))) + (set! + (-> a0-7 frame-group) + (the-as art-joint-anim (-> self draw art-group data 2)) + ) + (set! + (-> a0-7 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 2)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-7 param 1) 1.0) + (set! (-> a0-7 frame-num) 0.0) + (joint-control-channel-group! + a0-7 + (the-as art-joint-anim (-> self draw art-group data 2)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-8 (-> self skel root-channel 0))) + (set! + (-> a0-8 param 0) + (the float (+ (-> a0-8 frame-group data 0 length) -1)) + ) + (set! (-> a0-8 param 1) 1.0) + (joint-control-channel-group-eval! + a0-8 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior junglesnake) transform-post) + ) + +;; failed to figure out what this is: +(defstate junglesnake-attack (junglesnake) + :event + junglesnake-default-event-handler + :enter + (behavior () + (set! (-> self hit-player) #f) + (none) + ) + :exit + (behavior () + (dummy-24 self) + (none) + ) + :trans + (behavior () + (dummy-20 self) + (when *target* + (if *target* + (look-at-enemy! + (-> *target* neck) + (the-as + vector + (-> + (the-as collide-shape-prim-group (-> self root-override root-prim)) + prims + 0 + prim-core + ) + ) + 'attacking + self + ) + ) + ) + (none) + ) + :code + (behavior () + (set! (-> self track-player-ry) #t) + (set! (-> self track-player-tilt) #t) + (ja-channel-push! 2 45) + (dummy-23 self) + (let + ((f30-0 + (lerp-scale + 0.0 + 1.0 + (vector-vector-distance (target-pos 0) (-> self root-override trans)) + 0.0 + 24576.0 + ) + ) + ) + (let ((a0-5 (-> self skel root-channel 0))) + (set! + (-> a0-5 frame-group) + (the-as art-joint-anim (-> self draw art-group data 3)) + ) + (set! + (-> a0-5 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 3)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-5 param 1) 1.25) + (set! (-> a0-5 frame-num) 0.0) + (joint-control-channel-group! + a0-5 + (the-as art-joint-anim (-> self draw art-group data 3)) + num-func-seek! + ) + ) + (let ((a0-6 (-> self skel root-channel 1))) + (set! (-> a0-6 frame-interp) f30-0) + (set! + (-> a0-6 frame-group) + (the-as art-joint-anim (-> self draw art-group data 4)) + ) + (set! (-> a0-6 param 0) 0.0) + (set! (-> a0-6 frame-num) 0.0) + (joint-control-channel-group! + a0-6 + (the-as art-joint-anim (-> self draw art-group data 4)) + num-func-chan + ) + ) + (until (ja-done? 0) + (suspend) + (set! + f30-0 + (seek + f30-0 + (lerp-scale + 0.0 + 1.0 + (vector-vector-distance (target-pos 0) (-> self root-override trans)) + 0.0 + 24576.0 + ) + (* 2.0 (-> *display* seconds-per-frame)) + ) + ) + (let ((a0-11 (-> self skel root-channel 0))) + (set! + (-> a0-11 param 0) + (the float (+ (-> a0-11 frame-group data 0 length) -1)) + ) + (set! (-> a0-11 param 1) 1.25) + (joint-control-channel-group-eval! + a0-11 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (let ((a0-12 (-> self skel root-channel 1))) + (set! (-> a0-12 frame-interp) f30-0) + (set! (-> a0-12 param 0) 0.0) + (joint-control-channel-group-eval! + a0-12 + (the-as art-joint-anim #f) + num-func-chan + ) + ) + (let ((f0-12 (ja-aframe-num 0))) + (cond + ((and (>= f0-12 22.0) (< f0-12 44.0)) + (if (not (-> self is-lethal?)) + (dummy-23 self) + ) + ) + (else + (if (-> self is-lethal?) + (dummy-24 self) + ) + ) + ) + ) + ) + ) + (if (-> self hit-player) + (set! (-> self refractory-delay) (rand-vu-int-range 300 600)) + (set! (-> self refractory-delay) (rand-vu-int-range 150 300)) + ) + (go junglesnake-tracking) + (none) + ) + :post + (the-as (function none :behavior junglesnake) transform-post) + ) + +;; failed to figure out what this is: +(defstate junglesnake-give-up (junglesnake) + :event + junglesnake-default-event-handler + :enter + (behavior () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (set! (-> self track-player-ry) #f) + (set! (-> self track-player-tilt) #f) + (set! (-> self des-ry) (-> self ry)) + (set! (-> self des-tilt) (-> self tilt)) + (none) + ) + :trans + (behavior () + (dummy-20 self) + (none) + ) + :code + (behavior () + (ja-channel-push! 1 30) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (let ((s5-0 (new 'stack-no-clear 'vector))) + (set! (-> gp-0 quad) (-> self root-override trans quad)) + (set! (-> s5-0 quad) (-> gp-0 quad)) + (set! (-> s5-0 y) (+ 131072.0 (-> s5-0 y))) + (let ((a0-6 (-> self skel root-channel 0))) + (set! + (-> a0-6 frame-group) + (the-as art-joint-anim (-> self draw art-group data 7)) + ) + (set! + (-> a0-6 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 7)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-6 param 1) 0.5) + (set! (-> a0-6 frame-num) 0.0) + (joint-control-channel-group! + a0-6 + (the-as art-joint-anim (-> self draw art-group data 7)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (let* ((f0-6 (ja-frame-num 0)) + (v1-18 (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (f0-7 (/ f0-6 (the float (+ (-> v1-18 data 0 length) -1)))) + (s4-0 (new 'stack-no-clear 'vector)) + ) + (set-vector! (-> self root-override scale) 1.0 (- 1.0 f0-7) 1.0 1.0) + (vector-lerp! s4-0 gp-0 s5-0 f0-7) + (TODO-RENAME-30 (-> self root-override) s4-0) + ) + (suspend) + (let ((a0-10 (-> self skel root-channel 0))) + (set! + (-> a0-10 param 0) + (the float (+ (-> a0-10 frame-group data 0 length) -1)) + ) + (set! (-> a0-10 param 1) 0.5) + (joint-control-channel-group-eval! + a0-10 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (TODO-RENAME-30 (-> self root-override) gp-0) + ) + (set-vector! (-> self root-override scale) 1.0 1.0 1.0 1.0) + (go junglesnake-sleeping) + (none) + ) + :post + (the-as (function none :behavior junglesnake) transform-post) + ) + +;; failed to figure out what this is: +(defstate junglesnake-die (junglesnake) + :event + (the-as + (function process int symbol event-message-block object :behavior junglesnake) + process-drawable-death-event-handler + ) + :code + (behavior () + (logclear! (-> self mask) (process-mask actor-pause)) + (dummy-48 (-> self root-override)) + (ja-channel-push! 1 45) + (let ((a0-3 (-> self skel root-channel 0))) + (set! + (-> a0-3 frame-group) + (the-as art-joint-anim (-> self draw art-group data 6)) + ) + (set! + (-> a0-3 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 6)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-3 param 1) 1.0) + (set! (-> a0-3 frame-num) 0.0) + (joint-control-channel-group! + a0-3 + (the-as art-joint-anim (-> self draw art-group data 6)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-4 (-> self skel root-channel 0))) + (set! + (-> a0-4 param 0) + (the float (+ (-> a0-4 frame-group data 0 length) -1)) + ) + (set! (-> a0-4 param 1) 1.0) + (joint-control-channel-group-eval! + a0-4 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (dummy-18 self) + (none) + ) + :post + (the-as (function none :behavior junglesnake) ja-post) + ) + +;; definition for method 23 of type junglesnake +;; INFO: Return type mismatch int vs none. +(defmethod dummy-23 junglesnake ((obj junglesnake)) + (when (not (-> obj is-lethal?)) + (set! (-> obj is-lethal?) #t) + (let + ((v1-5 + (-> + (the-as collide-shape-prim-group (-> obj root-override root-prim)) + prims + 0 + ) + ) + ) + (set! (-> v1-5 prim-core action) (logand -2 (-> v1-5 prim-core action))) + ) + ) + 0 + (none) + ) + +;; definition for method 24 of type junglesnake +;; INFO: Return type mismatch int vs none. +(defmethod dummy-24 junglesnake ((obj junglesnake)) + (when (-> obj is-lethal?) + (set! (-> obj is-lethal?) #f) + (let + ((v1-4 + (-> + (the-as collide-shape-prim-group (-> obj root-override root-prim)) + prims + 0 + ) + ) + ) + (logior! (-> v1-4 prim-core action) 1) + ) + (dummy-45 (-> obj root-override)) + ) + 0 + (none) + ) + +;; definition for symbol *junglesnake-twist-max-deltas*, type (pointer float) +(define + *junglesnake-twist-max-deltas* + (new 'static 'array float 28 + 0.0 + 0.0 + 0.0 + 0.0 + 0.0 + 0.0 + 546.13336 + 1092.2667 + 1638.4 + 2184.5334 + 2730.6667 + 3276.8 + 3822.9333 + 4369.067 + 4915.2 + 5461.3335 + 6007.467 + 6553.6 + 7099.7334 + 7645.8667 + 8192.0 + 8738.134 + 9284.267 + 9830.4 + 10376.533 + 0.0 + 0.0 + 0.0 + ) + ) + +;; definition for method 22 of type junglesnake +(defmethod dummy-22 junglesnake ((obj junglesnake) (arg0 float)) + (let ((f0-0 0.0)) + (dotimes (v1-0 24) + (let ((a2-2 (-> obj twist-joints v1-0))) + (set! (-> a2-2 ry) arg0) + (set! (-> a2-2 joint-index) (- 26 v1-0)) + (let ((f1-1 (-> *junglesnake-twist-max-deltas* v1-0))) + (set! (-> a2-2 drag-delta-ry) (- f1-1 f0-0)) + (set! f0-0 f1-1) + ) + ) + ) + ) + #f + ) + +;; definition for method 21 of type junglesnake +(defmethod dummy-21 junglesnake ((obj junglesnake)) + (dotimes (v1-0 3) + (let ((a1-2 (-> obj tilt-joints v1-0))) + (set! (-> a1-2 joint-index) (+ v1-0 23)) + (set! (-> a1-2 flip-it) #f) + ) + ) + (let ((v1-3 (the-as object (&-> obj stack 524)))) + (set! (-> (the-as junglesnake-tilt-joint v1-3) flip-it) #t) + ) + (let ((v1-4 (the-as object (&-> obj stack 476))) + (v0-0 #t) + ) + (set! (-> (the-as junglesnake-twist-joint v1-4) ry) (the-as float v0-0)) + v0-0 + ) + ) + +;; definition for method 11 of type junglesnake +;; INFO: Return type mismatch object vs none. +(defmethod copy-defaults! junglesnake ((obj junglesnake) (arg0 res-lump)) + (set! (-> obj mask) (logior (process-mask enemy) (-> obj mask))) + (let + ((s4-0 (new 'process 'collide-shape obj (collide-list-enum hit-by-player)))) + (let ((s3-0 (new 'process 'collide-shape-prim-group s4-0 (the-as uint 9) 0))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 1)) + (set-vector! (-> s3-0 local-sphere) 0.0 16384.0 0.0 30720.0) + (dummy-46 s4-0) + (let ((s2-0 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 1)))) + (set! (-> s2-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-0 collide-with) (the-as uint 16)) + (set! (-> s2-0 prim-core action) (the-as uint 1)) + (set! (-> s2-0 prim-core offense) 1) + (set! (-> s2-0 transform-index) 25) + (set-vector! (-> s2-0 local-sphere) 0.0 2048.0 0.0 4096.0) + ) + (dummy-28 s3-0) + (let ((s2-1 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0)))) + (set! (-> s2-1 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-1 collide-with) (the-as uint 16)) + (set! (-> s2-1 prim-core action) (the-as uint 1)) + (set! (-> s2-1 prim-core offense) 1) + (set! (-> s2-1 transform-index) 21) + (set-vector! (-> s2-1 local-sphere) 0.0 0.0 0.0 3276.8) + ) + (dummy-28 s3-0) + (let ((s2-2 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0)))) + (set! (-> s2-2 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-2 collide-with) (the-as uint 16)) + (set! (-> s2-2 prim-core action) (the-as uint 1)) + (set! (-> s2-2 prim-core offense) 1) + (set! (-> s2-2 transform-index) 20) + (set-vector! (-> s2-2 local-sphere) 0.0 0.0 0.0 3276.8) + ) + (dummy-28 s3-0) + (let ((s2-3 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0)))) + (set! (-> s2-3 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-3 collide-with) (the-as uint 16)) + (set! (-> s2-3 prim-core action) (the-as uint 1)) + (set! (-> s2-3 prim-core offense) 1) + (set! (-> s2-3 transform-index) 19) + (set-vector! (-> s2-3 local-sphere) 0.0 0.0 0.0 3276.8) + ) + (dummy-28 s3-0) + (let ((s2-4 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0)))) + (set! (-> s2-4 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-4 collide-with) (the-as uint 16)) + (set! (-> s2-4 prim-core action) (the-as uint 1)) + (set! (-> s2-4 prim-core offense) 1) + (set! (-> s2-4 transform-index) 18) + (set-vector! (-> s2-4 local-sphere) 0.0 0.0 0.0 3276.8) + ) + (dummy-28 s3-0) + (let ((s2-5 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0)))) + (set! (-> s2-5 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-5 collide-with) (the-as uint 16)) + (set! (-> s2-5 prim-core action) (the-as uint 1)) + (set! (-> s2-5 prim-core offense) 1) + (set! (-> s2-5 transform-index) 17) + (set-vector! (-> s2-5 local-sphere) 0.0 0.0 0.0 3276.8) + ) + (dummy-28 s3-0) + (let ((s2-6 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0)))) + (set! (-> s2-6 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-6 collide-with) (the-as uint 16)) + (set! (-> s2-6 prim-core action) (the-as uint 1)) + (set! (-> s2-6 prim-core offense) 1) + (set! (-> s2-6 transform-index) 16) + (set-vector! (-> s2-6 local-sphere) 0.0 0.0 0.0 3276.8) + ) + (dummy-28 s3-0) + (let ((s2-7 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0)))) + (set! (-> s2-7 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-7 collide-with) (the-as uint 16)) + (set! (-> s2-7 prim-core action) (the-as uint 1)) + (set! (-> s2-7 prim-core offense) 1) + (set! (-> s2-7 transform-index) 15) + (set-vector! (-> s2-7 local-sphere) 0.0 0.0 0.0 3276.8) + ) + (dummy-28 s3-0) + (let ((s2-8 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0)))) + (set! (-> s2-8 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-8 collide-with) (the-as uint 16)) + (set! (-> s2-8 prim-core action) (the-as uint 1)) + (set! (-> s2-8 prim-core offense) 1) + (set! (-> s2-8 transform-index) 14) + (set-vector! (-> s2-8 local-sphere) 0.0 0.0 0.0 3276.8) + ) + (dummy-28 s3-0) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (dummy-50 s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (dummy-14 obj *junglesnake-sg* '()) + (set! + (-> obj fact) + (new + 'process + 'fact-info-enemy + obj + (pickup-type eco-pill-random) + (-> *FACT-bank* default-pill-inc) + ) + ) + (set! + (-> obj part) + (create-launch-control (-> *part-group-id-table* 173) obj) + ) + (set! (-> obj is-lethal?) #f) + (set! (-> obj ry) (y-angle (-> obj root-override))) + (set! (-> obj des-ry) (-> obj ry)) + (set! (-> obj tilt) 0.0) + (set! (-> obj des-tilt) (-> obj tilt)) + (set! (-> obj track-player-ry) #f) + (set! (-> obj track-player-tilt) #f) + (quaternion-identity! (-> obj root-override quat)) + (dummy-22 obj (-> obj ry)) + (dummy-21 obj) + (logior! (-> obj skel status) 1) + (go junglesnake-sleeping) + (none) + ) + + + +