;;-*-Lisp-*-
(in-package goal)

(import "goal_src/jak1/import/vil3-bridge-36-ag.gc")
(import "goal_src/jak1/import/ropebridge-36-ag.gc")
(import "goal_src/jak1/import/ropebridge-32-ag.gc")
(import "goal_src/jak1/import/ropebridge-52-ag.gc")
(import "goal_src/jak1/import/snow-bridge-36-ag.gc")
(import "goal_src/jak1/import/ropebridge-70-ag.gc")

;; definition of type ropebridge-tuning
(deftype ropebridge-tuning (structure)
  ((num-springs             int32            :offset-assert   0)
   (num-spring-points       int32            :offset-assert   4)
   (col-mesh-indexes        (pointer uint8)  :offset-assert   8)
   (view-frustum-radius     float            :offset-assert  12)
   (root-prim-radius        float            :offset-assert  16)
   (desired-spring-len      float            :offset-assert  20)
   (gravity                 float            :offset-assert  24)
   (spring-coefficient      float            :offset-assert  28)
   (spring-mass             float            :offset-assert  32)
   (friction                float            :offset-assert  36)
   (max-influence-dist      float            :offset-assert  40)
   (rider-max-gravity       float            :offset-assert  44)
   (max-bonk-influence-dist float            :offset-assert  48)
   (rider-bonk-force        float            :offset-assert  52)
   (rider-bonk-min          float            :offset-assert  56)
   (rider-bonk-max          float            :offset-assert  60)
   (normal-board-len        float            :offset-assert  64)
   (bridge-end-to-end-len   float            :offset-assert  68)
   (rest-state              symbol           :offset-assert  72)
   )
  :method-count-assert 9
  :size-assert         #x4c
  :flag-assert         #x90000004c
  )

;; definition for method 3 of type ropebridge-tuning
(defmethod inspect ropebridge-tuning ((obj ropebridge-tuning))
  (format #t "[~8x] ~A~%" obj 'ropebridge-tuning)
  (format #t "~Tnum-springs: ~D~%" (-> obj num-springs))
  (format #t "~Tnum-spring-points: ~D~%" (-> obj num-spring-points))
  (format #t "~Tcol-mesh-indexes: #x~X~%" (-> obj col-mesh-indexes))
  (format #t "~Tview-frustum-radius: ~f~%" (-> obj view-frustum-radius))
  (format #t "~Troot-prim-radius: ~f~%" (-> obj root-prim-radius))
  (format #t "~Tdesired-spring-len: ~f~%" (-> obj desired-spring-len))
  (format #t "~Tgravity: ~f~%" (-> obj gravity))
  (format #t "~Tspring-coefficient: ~f~%" (-> obj spring-coefficient))
  (format #t "~Tspring-mass: ~f~%" (-> obj spring-mass))
  (format #t "~Tfriction: ~f~%" (-> obj friction))
  (format #t "~Tmax-influence-dist: ~f~%" (-> obj max-influence-dist))
  (format #t "~Trider-max-gravity: ~f~%" (-> obj rider-max-gravity))
  (format #t "~Tmax-bonk-influence-dist: ~f~%" (-> obj max-bonk-influence-dist))
  (format #t "~Trider-bonk-force: ~f~%" (-> obj rider-bonk-force))
  (format #t "~Trider-bonk-min: ~f~%" (-> obj rider-bonk-min))
  (format #t "~Trider-bonk-max: ~f~%" (-> obj rider-bonk-max))
  (format #t "~Tnormal-board-len: ~f~%" (-> obj normal-board-len))
  (format #t "~Tbridge-end-to-end-len: ~f~%" (-> obj bridge-end-to-end-len))
  (format #t "~Trest-state: ~A~%" (-> obj rest-state))
  obj
  )

;; definition for symbol *ropebridge-70-rest-state*, type (inline-array vector)
(define *ropebridge-70-rest-state* (new 'static 'inline-array vector 35
                                     (new 'static 'vector :x -2361.8552 :y 8191.9688 :z -1.9208 :w -0.1275)
                                     (new 'static 'vector :x -4584.7974 :y 16383.936 :z -3.5561 :w -0.0995)
                                     (new 'static 'vector :x -6668.8125 :y 24575.91 :z -5.0685 :w 0.035)
                                     (new 'static 'vector :x -8613.924 :y 32767.895 :z -6.1218 :w 0.1992)
                                     (new 'static 'vector :x -10420.142 :y 40959.875 :z -6.9367 :w 0.0449)
                                     (new 'static 'vector :x -12087.479 :y 49151.86 :z -8.0159 :w -0.1151)
                                     (new 'static 'vector :x -13615.937 :y 57343.848 :z -9.2313 :w 0.1964)
                                     (new 'static 'vector :x -15005.52 :y 65535.84 :z -9.975 :w 0.1667)
                                     (new 'static 'vector :x -16256.195 :y 73727.84 :z -10.6569 :w -0.1727)
                                     (new 'static 'vector :x -17367.94 :y 81919.84 :z -11.9885 :w 0.271)
                                     (new 'static 'vector :x -18340.738 :y 90111.85 :z -13.5812 :w -0.1759)
                                     (new 'static 'vector :x -19174.588 :y 98303.85 :z -15.0931 :w 0.363)
                                     (new 'static 'vector :x -19869.475 :y 106495.86 :z -16.4569 :w 0.1326)
                                     (new 'static 'vector :x -20425.404 :y 114687.86 :z -17.9534 :w 0.2799)
                                     (new 'static 'vector :x -20842.35 :y 122879.875 :z -18.7552 :w 0.3967)
                                     (new 'static 'vector :x -21120.309 :y 131071.88 :z -19.6815 :w -0.4682)
                                     (new 'static 'vector :x -21259.275 :y 139263.89 :z -20.0082 :w -0.3457)
                                     (new 'static 'vector :x -21259.275 :y 147455.9 :z -19.9398 :w -0.0757)
                                     (new 'static 'vector :x -21120.31 :y 155647.92 :z -19.5994 :w 0.9825)
                                     (new 'static 'vector :x -20842.354 :y 163839.92 :z -18.8809 :w 0.0018)
                                     (new 'static 'vector :x -20425.402 :y 172031.94 :z -17.8884 :w 0.1869)
                                     (new 'static 'vector :x -19869.475 :y 180223.95 :z -16.6081 :w 0.6356)
                                     (new 'static 'vector :x -19174.584 :y 188415.97 :z -15.0626 :w 0.5303)
                                     (new 'static 'vector :x -18340.738 :y 196607.98 :z -13.5152 :w 0.1638)
                                     (new 'static 'vector :x -17367.94 :y 204799.98 :z -11.9936 :w 0.0825)
                                     (new 'static 'vector :x -16256.193 :y 212991.98 :z -10.6949 :w 0.3726)
                                     (new 'static 'vector :x -15005.518 :y 221183.95 :z -9.9551 :w 0.0157)
                                     (new 'static 'vector :x -13615.937 :y 229375.98 :z -9.2192 :w 0.5676)
                                     (new 'static 'vector :x -12087.478 :y 237568.0 :z -7.9867 :w 0.9663)
                                     (new 'static 'vector :x -10420.145 :y 245760.0 :z -6.9835 :w -0.4067)
                                     (new 'static 'vector :x -8613.921 :y 253952.0 :z -6.0589 :w 0.2085)
                                     (new 'static 'vector :x -6668.8105 :y 262144.0 :z -5.0582 :w 0.8373)
                                     (new 'static 'vector :x -4584.7974 :y 270336.0 :z -3.5881 :w 1.1422)
                                     (new 'static 'vector :x -2361.8545 :y 278528.0 :z -1.8908 :w 1.4099)
                                     (new 'static 'vector :y 286720.0)
                                     )
        )

;; definition for symbol *ropebridge-52-rest-state*, type (inline-array vector)
(define *ropebridge-52-rest-state* (new 'static 'inline-array vector 26
                                     (new 'static 'vector :x -1737.1892 :y 8191.979 :z 12.1884 :w 0.1708)
                                     (new 'static 'vector :x -3335.4602 :y 16383.967 :z 25.0793 :w 0.0007)
                                     (new 'static 'vector :x -4794.766 :y 24575.955 :z 37.6373 :w -0.0002)
                                     (new 'static 'vector :x -6115.041 :y 32767.947 :z 50.0327 :w 0.0733)
                                     (new 'static 'vector :x -7296.247 :y 40959.934 :z 59.5924 :w -0.033)
                                     (new 'static 'vector :x -8338.399 :y 49151.93 :z 64.8644 :w -0.0244)
                                     (new 'static 'vector :x -9241.526 :y 57343.938 :z 70.8964 :w 0.072)
                                     (new 'static 'vector :x -10005.708 :y 65535.938 :z 76.9547 :w 0.0023)
                                     (new 'static 'vector :x -10630.993 :y 73727.945 :z 79.8365 :w 0.2395)
                                     (new 'static 'vector :x -11117.421 :y 81919.95 :z 79.5707 :w 0.0572)
                                     (new 'static 'vector :x -11464.953 :y 90111.96 :z 78.7975 :w -0.0422)
                                     (new 'static 'vector :x -11673.532 :y 98303.96 :z 77.7957 :w 0.019)
                                     (new 'static 'vector :x -11743.086 :y 106495.95 :z 77.2108 :w -0.3523)
                                     (new 'static 'vector :x -11673.532 :y 114687.96 :z 77.7399 :w 0.197)
                                     (new 'static 'vector :x -11464.951 :y 122879.97 :z 78.838 :w 0.0763)
                                     (new 'static 'vector :x -11117.423 :y 131071.98 :z 79.5788 :w 0.423)
                                     (new 'static 'vector :x -10630.993 :y 139263.98 :z 79.8296 :w -0.2595)
                                     (new 'static 'vector :x -10005.708 :y 147455.98 :z 76.9285 :w 0.7404)
                                     (new 'static 'vector :x -9241.526 :y 155647.98 :z 70.8901 :w 0.2474)
                                     (new 'static 'vector :x -8338.398 :y 163840.0 :z 64.9246 :w -0.0395)
                                     (new 'static 'vector :x -7296.2456 :y 172032.0 :z 59.556 :w 0.5165)
                                     (new 'static 'vector :x -6115.0415 :y 180224.0 :z 50.0342 :w 0.8282)
                                     (new 'static 'vector :x -4794.7666 :y 188416.0 :z 37.644 :w 0.0407)
                                     (new 'static 'vector :x -3335.4592 :y 196608.0 :z 25.1033 :w -0.258)
                                     (new 'static 'vector :x -1737.1888 :y 204800.02 :z 12.1495 :w 1.1935)
                                     (new 'static 'vector :y 212992.0)
                                     )
        )

;; definition for symbol *ropebridge-32-rest-state*, type (inline-array vector)
(define *ropebridge-32-rest-state* (new 'static 'inline-array vector 16
                                     (new 'static 'vector :x -1041.5476 :y 8191.998 :z -4.4282 :w -0.0321)
                                     (new 'static 'vector :x -1944.2802 :y 16383.992 :z -8.0124 :w 0.0452)
                                     (new 'static 'vector :x -2708.21 :y 24576.0 :z -11.5897 :w 0.311)
                                     (new 'static 'vector :x -3333.2952 :y 32767.992 :z -15.9391 :w -0.1053)
                                     (new 'static 'vector :x -3819.4963 :y 40959.984 :z -19.7012 :w -0.1924)
                                     (new 'static 'vector :x -4166.8076 :y 49152.0 :z -22.6499 :w 0.3457)
                                     (new 'static 'vector :x -4375.184 :y 57343.996 :z -24.2658 :w 0.0078)
                                     (new 'static 'vector :x -4444.632 :y 65536.0 :z -24.3671 :w -0.1826)
                                     (new 'static 'vector :x -4375.184 :y 73728.0 :z -24.2597 :w -0.0109)
                                     (new 'static 'vector :x -4166.8076 :y 81920.0 :z -22.6363 :w 0.4393)
                                     (new 'static 'vector :x -3819.4968 :y 90112.0 :z -19.7122 :w 0.0509)
                                     (new 'static 'vector :x -3333.2952 :y 98304.01 :z -15.9279 :w 0.091)
                                     (new 'static 'vector :x -2708.21 :y 106496.01 :z -11.5961 :w -0.3329)
                                     (new 'static 'vector :x -1944.28 :y 114688.01 :z -8.0186 :w 0.2261)
                                     (new 'static 'vector :x -1041.5474 :y 122880.016 :z -4.4277 :w 0.1558)
                                     (new 'static 'vector :y 131072.0)
                                     )
        )

;; definition for symbol *ropebridge-36-rest-state*, type (inline-array vector)
(define *ropebridge-36-rest-state* (new 'static 'inline-array vector 18
                                     (new 'static 'vector :x -1180.706 :y 8191.9907 :z -0.027 :w -0.0559)
                                     (new 'static 'vector :x -2222.5103 :y 16383.984 :z -0.0441 :w -0.0457)
                                     (new 'static 'vector :x -3125.4124 :y 24575.979 :z -0.047 :w -0.004)
                                     (new 'static 'vector :x -3889.4092 :y 32767.977 :z -0.0962 :w 0.1168)
                                     (new 'static 'vector :x -4514.496 :y 40959.977 :z -0.1679 :w 0.2095)
                                     (new 'static 'vector :x -5000.6753 :y 49151.977 :z -0.3088 :w 0.0938)
                                     (new 'static 'vector :x -5347.9487 :y 57343.98 :z -0.5083 :w -0.0745)
                                     (new 'static 'vector :x -5556.315 :y 65535.98 :z -0.6251 :w 0.2297)
                                     (new 'static 'vector :x -5625.7715 :y 73727.984 :z -0.6877 :w -0.1315)
                                     (new 'static 'vector :x -5556.3154 :y 81919.99 :z -0.6232 :w 0.4198)
                                     (new 'static 'vector :x -5347.948 :y 90111.99 :z -0.5092 :w -0.0617)
                                     (new 'static 'vector :x -5000.675 :y 98303.99 :z -0.2973 :w 0.1242)
                                     (new 'static 'vector :x -4514.4956 :y 106496.0 :z -0.1663 :w 0.1304)
                                     (new 'static 'vector :x -3889.4084 :y 114688.0 :z -0.0908 :w 0.3045)
                                     (new 'static 'vector :x -3125.4133 :y 122880.0 :z -0.0447 :w 0.0666)
                                     (new 'static 'vector :x -2222.5103 :y 131072.0 :z -0.0628 :w 0.4962)
                                     (new 'static 'vector :x -1180.706 :y 139264.0 :z -0.0328 :w 0.6014)
                                     (new 'static 'vector :y 147456.0)
                                     )
        )

;; definition for symbol *ropebridge-tunings*, type (inline-array ropebridge-tuning)
(define *ropebridge-tunings*
  (new 'static 'inline-array ropebridge-tuning 6
    (new 'static 'ropebridge-tuning
      :num-springs 16
      :num-spring-points 17
      :col-mesh-indexes (new 'static 'array uint8 16 #x3 #x3 #x3 #x3 #x3 #x3 #x3 #x3 #x3 #x3 #x3 #x3 #x3 #x3 #x3 #x3)
      :view-frustum-radius 81920.0
      :root-prim-radius 81920.0
      :desired-spring-len 4096.0
      :gravity -22.755556
      :spring-coefficient 0.16384
      :spring-mass 0.018
      :friction 0.97
      :max-influence-dist 49152.0
      :rider-max-gravity -56.88889
      :max-bonk-influence-dist 49152.0
      :rider-bonk-force 49152.0
      :rider-bonk-min 8192.0
      :rider-bonk-max 77824.0
      :normal-board-len 8192.0
      :bridge-end-to-end-len 131072.0
      :rest-state '*ropebridge-32-rest-state*
      )
    (new 'static 'ropebridge-tuning
      :num-springs 18
      :num-spring-points 19
      :col-mesh-indexes (new 'static 'array uint8 32
        #x3
        #x3
        #x3
        #x3
        #x3
        #x3
        #x3
        #x3
        #x3
        #x3
        #x3
        #x3
        #x3
        #x3
        #x3
        #x3
        #x3
        #x3
        #x0
        #x0
        #x0
        #x0
        #x0
        #x0
        #x0
        #x0
        #x0
        #x0
        #x0
        #x0
        #x0
        #x0
        )
      :view-frustum-radius 98304.0
      :root-prim-radius 98304.0
      :desired-spring-len 4096.0
      :gravity -22.755556
      :spring-coefficient 0.16384
      :spring-mass 0.018
      :friction 0.97
      :max-influence-dist 49152.0
      :rider-max-gravity -56.88889
      :max-bonk-influence-dist 49152.0
      :rider-bonk-force 49152.0
      :rider-bonk-min 8192.0
      :rider-bonk-max 77824.0
      :normal-board-len 8192.0
      :bridge-end-to-end-len 147456.0
      :rest-state '*ropebridge-36-rest-state*
      )
    (new 'static 'ropebridge-tuning
      :num-springs 26
      :num-spring-points 27
      :col-mesh-indexes (new 'static 'array uint8 32
        #x3
        #x3
        #x3
        #x3
        #x3
        #x1
        #x4
        #x4
        #x2
        #x3
        #x3
        #x3
        #x3
        #x3
        #x3
        #x3
        #x3
        #x3
        #x1
        #x4
        #x4
        #x4
        #x2
        #x3
        #x3
        #x3
        #x0
        #x0
        #x0
        #x0
        #x0
        #x0
        )
      :view-frustum-radius 122880.0
      :root-prim-radius 122880.0
      :desired-spring-len 4096.0
      :gravity -22.755556
      :spring-coefficient 0.16384
      :spring-mass 0.018
      :friction 0.97
      :max-influence-dist 49152.0
      :rider-max-gravity -56.88889
      :max-bonk-influence-dist 49152.0
      :rider-bonk-force 49152.0
      :rider-bonk-min 8192.0
      :rider-bonk-max 77824.0
      :normal-board-len 8192.0
      :bridge-end-to-end-len 212992.0
      :rest-state '*ropebridge-52-rest-state*
      )
    (new 'static 'ropebridge-tuning
      :num-springs 35
      :num-spring-points 36
      :col-mesh-indexes (new 'static 'array uint8 48
        #x3
        #x3
        #x3
        #x3
        #x3
        #x1
        #x4
        #x4
        #x2
        #x7
        #x4
        #x4
        #x2
        #x3
        #x3
        #x1
        #x4
        #x4
        #x4
        #x2
        #x3
        #x3
        #x3
        #x6
        #x4
        #x4
        #x5
        #x3
        #x3
        #x3
        #x3
        #x3
        #x3
        #x3
        #x3
        #x0
        #x0
        #x0
        #x0
        #x0
        #x0
        #x0
        #x0
        #x0
        #x0
        #x0
        #x0
        #x0
        )
      :view-frustum-radius 163840.0
      :root-prim-radius 163840.0
      :desired-spring-len 4096.0
      :gravity -22.755556
      :spring-coefficient 0.16384
      :spring-mass 0.018
      :friction 0.97
      :max-influence-dist 49152.0
      :rider-max-gravity -56.88889
      :max-bonk-influence-dist 49152.0
      :rider-bonk-force 49152.0
      :rider-bonk-min 8192.0
      :rider-bonk-max 77824.0
      :normal-board-len 8192.0
      :bridge-end-to-end-len 286720.0
      :rest-state '*ropebridge-70-rest-state*
      )
    (new 'static 'ropebridge-tuning
      :num-springs 18
      :num-spring-points 19
      :col-mesh-indexes (new 'static 'array uint8 32
        #x3
        #x3
        #x3
        #x3
        #x1
        #x4
        #x4
        #x4
        #x6
        #x3
        #x5
        #x4
        #x4
        #x4
        #x2
        #x3
        #x3
        #x3
        #x0
        #x0
        #x0
        #x0
        #x0
        #x0
        #x0
        #x0
        #x0
        #x0
        #x0
        #x0
        #x0
        #x0
        )
      :view-frustum-radius 98304.0
      :root-prim-radius 98304.0
      :desired-spring-len 4096.0
      :gravity -22.755556
      :spring-coefficient 0.16384
      :spring-mass 0.018
      :friction 0.97
      :max-influence-dist 49152.0
      :rider-max-gravity -56.88889
      :max-bonk-influence-dist 49152.0
      :rider-bonk-force 49152.0
      :rider-bonk-min 8192.0
      :rider-bonk-max 77824.0
      :normal-board-len 8192.0
      :bridge-end-to-end-len 147456.0
      :rest-state '*ropebridge-36-rest-state*
      )
    (new 'static 'ropebridge-tuning
      :num-springs 18
      :num-spring-points 19
      :col-mesh-indexes (new 'static 'array uint8 32
        #x3
        #x3
        #x3
        #x3
        #x1
        #x4
        #x4
        #x2
        #x1
        #x4
        #x4
        #x2
        #x3
        #x1
        #x4
        #x4
        #x2
        #x3
        #x0
        #x0
        #x0
        #x0
        #x0
        #x0
        #x0
        #x0
        #x0
        #x0
        #x0
        #x0
        #x0
        #x0
        )
      :view-frustum-radius 98304.0
      :root-prim-radius 98304.0
      :desired-spring-len 4096.0
      :gravity -22.755556
      :spring-coefficient 0.16384
      :spring-mass 0.018
      :friction 0.97
      :max-influence-dist 49152.0
      :rider-max-gravity -56.88889
      :max-bonk-influence-dist 49152.0
      :rider-bonk-force 49152.0
      :rider-bonk-min 8192.0
      :rider-bonk-max 77824.0
      :normal-board-len 8192.0
      :bridge-end-to-end-len 147456.0
      :rest-state '*ropebridge-36-rest-state*
      )
    )
  )

;; definition of type ropebridge-spring-point
(deftype ropebridge-spring-point (structure)
  ((local-pos   vector :inline :offset-assert   0)
   (vel         vector :inline :offset-assert  16)
   (extra-force vector :inline :offset-assert  32)
   )
  :pack-me
  :method-count-assert 9
  :size-assert         #x30
  :flag-assert         #x900000030
  )

;; definition for method 3 of type ropebridge-spring-point
(defmethod inspect ropebridge-spring-point ((obj ropebridge-spring-point))
  (format #t "[~8x] ~A~%" obj 'ropebridge-spring-point)
  (format #t "~Tlocal-pos: #<vector @ #x~X>~%" (-> obj local-pos))
  (format #t "~Tvel: #<vector @ #x~X>~%" (-> obj vel))
  (format #t "~Textra-force: #<vector @ #x~X>~%" (-> obj extra-force))
  obj
  )

;; definition of type ropebridge
(deftype ropebridge (process-drawable)
  ((root-override          collide-shape                      :offset        112)
   (subtype                uint64                             :offset-assert 176)
   (subtype-name           string                             :offset-assert 184)
   (agitated-time-stamp    time-frame                         :offset-assert 192)
   (bonk-time-stamp        time-frame                         :offset-assert 200)
   (attack-flop-time-stamp time-frame                         :offset-assert 208)
   (player-attack-id       uint64                             :offset-assert 216)
   (sleep-dist             float                              :offset-assert 224)
   (do-physics?            basic                              :offset-assert 228)
   (tuning                 ropebridge-tuning                  :offset-assert 232)
   (world-matrix           matrix                  :inline    :offset-assert 240)
   (inv-world-matrix       matrix                  :inline    :offset-assert 304)
   (extra-trans            vector                  :inline    :offset-assert 368)
   (spring-point           ropebridge-spring-point 36 :inline :offset-assert 384)
   )
  :heap-base #x7d0
  :method-count-assert 29
  :size-assert         #x840
  :flag-assert         #x1d07d00840
  (:methods
    (set-vel-from-impact (_type_ uint vector int float) none 20)
    (set-vel-from-riders (_type_) none 21)
    (set-vel-from-rider (_type_ uint vector int) none 22)
    (clear-spring-forces (_type_) none 23)
    (debug-draw (_type_) none 24)
    (set-to-rest-state (_type_) none 25)
    (add-collision-meshes (_type_) none 26)
    (do-integration (_type_) none 27)
    (dummy-28 (_type_) none 28)
    )
  (:states
    ropebridge-idle
    )
  )

;; definition for method 3 of type ropebridge
(defmethod inspect ropebridge ((obj ropebridge))
  (let ((t9-0 (method-of-type process-drawable inspect)))
    (t9-0 obj)
    )
  (format #t "~T~Tsubtype: ~D~%" (-> obj subtype))
  (format #t "~T~Tsubtype-name: ~A~%" (-> obj subtype-name))
  (format #t "~T~Tagitated-time-stamp: ~D~%" (-> obj agitated-time-stamp))
  (format #t "~T~Tbonk-time-stamp: ~D~%" (-> obj bonk-time-stamp))
  (format #t "~T~Tattack-flop-time-stamp: ~D~%" (-> obj attack-flop-time-stamp))
  (format #t "~T~Tplayer-attack-id: ~D~%" (-> obj player-attack-id))
  (format #t "~T~Tsleep-dist: ~f~%" (-> obj sleep-dist))
  (format #t "~T~Tdo-physics?: ~A~%" (-> obj do-physics?))
  (format #t "~T~Ttuning: #<ropebridge-tuning @ #x~X>~%" (-> obj tuning))
  (format #t "~T~Tworld-matrix: #<matrix @ #x~X>~%" (-> obj world-matrix))
  (format #t "~T~Tinv-world-matrix: #<matrix @ #x~X>~%" (-> obj inv-world-matrix))
  (format #t "~T~Textra-trans: ~`vector`P~%" (-> obj extra-trans))
  (format #t "~T~Tspring-point[36] @ #x~X~%" (-> obj spring-point))
  obj
  )

;; failed to figure out what this is:
(defskelgroup *ropebridge-32-sg* ropebridge-32 ropebridge-32-lod0-jg ropebridge-32-idle-ja
              ((ropebridge-32-lod0-mg (meters 20)) (ropebridge-32-lod1-mg (meters 999999)))
              :bounds (static-spherem 0 0 0 4)
              :longest-edge (meters 4)
              )

;; failed to figure out what this is:
(defskelgroup *snow-bridge-36-sg* snow-bridge-36 snow-bridge-36-lod0-jg snow-bridge-36-idle-ja
              ((snow-bridge-36-lod0-mg (meters 20)) (snow-bridge-36-lod1-mg (meters 999999)))
              :bounds (static-spherem 0 0 0 4)
              :longest-edge (meters 3.8)
              )

;; failed to figure out what this is:
(defskelgroup *ropebridge-52-sg* ropebridge-52 ropebridge-52-lod0-jg ropebridge-52-idle-ja
              ((ropebridge-52-lod0-mg (meters 20)) (ropebridge-52-lod1-mg (meters 999999)))
              :bounds (static-spherem 0 0 0 4)
              :longest-edge (meters 3.6)
              )

;; failed to figure out what this is:
(defskelgroup *ropebridge-70-sg* ropebridge-70 ropebridge-70-lod0-jg ropebridge-70-idle-ja
              ((ropebridge-70-lod0-mg (meters 20)) (ropebridge-70-lod1-mg (meters 999999)))
              :bounds (static-spherem 0 0 0 4)
              :longest-edge (meters 3.6)
              )

;; failed to figure out what this is:
(defskelgroup *ropebridge-36-sg* ropebridge-36 ropebridge-36-lod0-jg ropebridge-36-idle-ja
              ((ropebridge-36-lod0-mg (meters 20)) (ropebridge-36-lod1-mg (meters 999999)))
              :bounds (static-spherem 0 0 0 4)
              :longest-edge (meters 4)
              )

;; failed to figure out what this is:
(defskelgroup *vil3-bridge-36-sg* vil3-bridge-36 vil3-bridge-36-lod0-jg vil3-bridge-36-idle-ja
              ((vil3-bridge-36-lod0-mg (meters 999999)))
              :bounds (static-spherem 0 0 0 4)
              :longest-edge (meters 3.6)
              )

;; failed to figure out what this is:
(defstate ropebridge-idle (ropebridge)
  :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block))
    (let ((f0-0 -1.0))
      (cond
        ((= arg2 'bonk)
         (when (>= (- (-> *display* base-frame-counter) (-> self bonk-time-stamp)) (seconds 0.2))
           (set! (-> self bonk-time-stamp) (-> *display* base-frame-counter))
           (set! f0-0 (the-as float (-> arg3 param 1)))
           (if (>= f0-0 (-> self tuning rider-bonk-max))
               (set! f0-0 (-> self tuning rider-bonk-max))
               )
           )
         )
        ((and (= arg2 'attack) (= (-> arg3 param 1) 'flop))
         (let ((v1-17 (-> arg3 param 2)))
           (when (!= v1-17 (-> self player-attack-id))
             (set! (-> self player-attack-id) v1-17)
             (set! (-> self attack-flop-time-stamp) (-> *display* base-frame-counter))
             (set! f0-0 (* 1.1 (-> self tuning rider-bonk-max)))
             )
           )
         )
        )
      (the-as
        object
        (when (and (>= f0-0 (-> self tuning rider-bonk-min)) (-> arg3 param 0))
          (set! (-> self agitated-time-stamp) (-> *display* base-frame-counter))
          (let* ((f30-0 (/ (* (- f0-0 (-> self tuning rider-bonk-min)) (-> self tuning rider-bonk-force))
                           (- (-> self tuning rider-bonk-max) (-> self tuning rider-bonk-min))
                           )
                        )
                 (gp-0 (the-as object (-> arg3 param 0)))
                 (a0-7 (-> (the-as touching-shapes-entry gp-0) head))
                 (s4-0 (-> self root-override))
                 (s5-0 (get-touched-prim a0-7 s4-0 (the-as touching-shapes-entry gp-0)))
                 (v1-33 ((method-of-type touching-shapes-entry get-touched-shape) (the-as touching-shapes-entry gp-0) s4-0))
                 (gp-1 (new 'stack-no-clear 'vector))
                 )
            (vector-matrix*! gp-1 (-> v1-33 trans) (-> self inv-world-matrix))
            (let ((s5-1 (-> s5-0 prim-id)))
              (let ((v1-37 (-> self spring-point s5-1)))
                (new 'stack-no-clear 'vector)
                (&+ v1-37 48)
                )
              (set-vel-from-impact self s5-1 gp-1 -1 f30-0)
              (set-vel-from-impact self (+ s5-1 1) gp-1 1 f30-0)
              )
            )
          )
        )
      )
    )
  :code (behavior ()
    (loop
      (suspend)
      (detect-riders! (-> self root-override))
      (when (-> self do-physics?)
        (clear-spring-forces self)
        (set-vel-from-riders self)
        (do-integration self)
        )
      )
    (none)
    )
  :post (behavior ()
    (ja-post)
    (let ((gp-0 (-> self root-override)))
      (update-transforms! gp-0)
      (when (-> self do-physics?)
        (pull-riders! gp-0)
        (do-push-aways! gp-0)
        )
      )
    0
    (none)
    )
  )

;; definition for method 20 of type ropebridge
;; INFO: Return type mismatch symbol vs none.
;; WARN: Expression building failed: Function (method 20 ropebridge) has a return type of none, but the expression builder found a return statement.
(defmethod set-vel-from-impact ropebridge ((obj ropebridge) (arg0 uint) (arg1 vector) (arg2 int) (arg3 float))
  (loop
    (let ((f0-2 (fabs (- (-> arg1 z) (-> obj spring-point (the-as int arg0) local-pos z)))))
      (if (< (-> obj tuning max-bonk-influence-dist) f0-2)
          (return #f)
          )
      (let* ((f0-4 (/ (* 8.0 f0-2) (-> obj tuning max-bonk-influence-dist)))
             (f0-5 (+ 1.0 f0-4))
             (f0-6 (/ 1.0 f0-5))
             )
        (set! (-> obj spring-point (the-as int arg0) vel y)
              (- (-> obj spring-point (the-as int arg0) vel y) (* f0-6 arg3))
              )
        )
      )
    (set! arg0 (+ arg0 arg2))
    (if (or (< (the-as int arg0) 0) (>= (the-as int arg0) (-> obj tuning num-spring-points)))
        (return #f)
        )
    )
  (none)
  )

;; definition for method 23 of type ropebridge
;; INFO: Return type mismatch symbol vs none.
;; Used lq/sq
(defmethod clear-spring-forces ropebridge ((obj ropebridge))
  (let ((v1-0 (the-as ropebridge-spring-point (-> obj spring-point))))
    (countdown (a0-2 (-> obj tuning num-spring-points))
      (set! (-> v1-0 extra-force quad) (the-as uint128 0))
      (nop!)
      (nop!)
      (&+! v1-0 48)
      )
    )
  (none)
  )

;; definition for method 21 of type ropebridge
;; INFO: Return type mismatch symbol vs none.
(defmethod set-vel-from-riders ropebridge ((obj ropebridge))
  (let ((v1-1 (-> obj root-override riders)))
    (when v1-1
      (let ((s5-0 (the-as collide-sticky-rider (-> v1-1 rider))))
        (countdown (s4-0 (-> v1-1 num-riders))
          (let ((v1-3 (handle->process (-> s5-0 rider-handle))))
            (when v1-3
              (let ((v1-5 (-> (the-as process-drawable v1-3) root))
                    (s2-0 (-> s5-0 sticky-prim))
                    )
                (when s2-0
                  (let ((s3-0 (new 'stack-no-clear 'vector)))
                    (vector-matrix*! s3-0 (-> v1-5 trans) (-> obj inv-world-matrix))
                    (let ((s2-1 (-> s2-0 prim-id)))
                      (set-vel-from-rider obj s2-1 s3-0 -1)
                      (set-vel-from-rider obj (+ s2-1 1) s3-0 1)
                      )
                    )
                  (set! (-> obj agitated-time-stamp) (-> *display* base-frame-counter))
                  )
                )
              )
            )
          (&+! s5-0 32)
          )
        )
      )
    )
  (none)
  )

;; definition for method 22 of type ropebridge
;; INFO: Return type mismatch symbol vs none.
;; WARN: Expression building failed: Function (method 22 ropebridge) has a return type of none, but the expression builder found a return statement.
(defmethod set-vel-from-rider ropebridge ((obj ropebridge) (arg0 uint) (arg1 vector) (arg2 int))
  (loop
    (let ((f0-0 (vector-vector-distance arg1 (the-as vector (-> obj spring-point (the-as int arg0))))))
      (if (< (-> obj tuning max-influence-dist) f0-0)
          (return #f)
          )
      (let* ((f0-2 (/ (* 8.0 f0-0) (-> obj tuning max-influence-dist)))
             (f0-3 (+ 1.0 f0-2))
             (f0-4 (/ 1.0 f0-3))
             )
        (+! (-> obj spring-point (the-as int arg0) extra-force y) (* f0-4 (-> obj tuning rider-max-gravity)))
        )
      )
    (+! arg0 arg2)
    (if (or (< (the-as int arg0) 0) (>= (the-as int arg0) (-> obj tuning num-spring-points)))
        (return #f)
        )
    )
  (none)
  )

;; definition for method 27 of type ropebridge
;; INFO: Return type mismatch int vs none.
(defmethod do-integration ropebridge ((obj ropebridge))
  (local-vars (a2-1 float) (a3-0 float))
  (rlet ((Q :class vf)
         (vf0 :class vf)
         (vf1 :class vf)
         (vf10 :class vf)
         (vf11 :class vf)
         (vf12 :class vf)
         (vf13 :class vf)
         (vf14 :class vf)
         (vf15 :class vf)
         (vf2 :class vf)
         (vf3 :class vf)
         (vf4 :class vf)
         (vf5 :class vf)
         (vf6 :class vf)
         (vf7 :class vf)
         (vf8 :class vf)
         (vf9 :class vf)
         )
    (init-vf0-vector)
    (let ((v1-1 (-> obj tuning gravity)))
      (.mov vf9 v1-1)
      )
    (.add.x.vf vf9 vf0 vf9 :mask #b10)
    (.mov.vf vf9 vf0 :mask #b1101)
    0
    (let ((v1-4 (-> obj tuning friction)))
      (.mov vf12 v1-4)
      )
    (.add.x.vf vf12 vf0 vf12 :mask #b10)
    (.add.x.vf vf12 vf0 vf12 :mask #b100)
    0
    (let ((v1-7 (/ 1.0 (-> obj tuning spring-mass))))
      (.mov vf14 v1-7)
      )
    (.add.x.vf vf14 vf0 vf14 :mask #b10)
    (.add.x.vf vf14 vf0 vf14 :mask #b100)
    0
    (let ((v1-11 (+ (-> obj tuning num-spring-points) -2)))
      (let* ((a2-0 (-> obj spring-point))
             (a1-1 (-> a2-0 1))
             )
        (.lvf vf2 (&-> a2-0 0 local-pos quad))
        (label cfg-1)
        (.lvf vf1 (&-> a1-1 extra-force quad))
        (.lvf vf3 (&-> a1-1 local-pos quad))
        (.add.vf vf1 vf1 vf9 :mask #b111)
        (.sub.vf vf5 vf2 vf3)
        (.mul.vf vf7 vf5 vf5 :mask #b111)
        (.add.y.vf vf7 vf7 vf7 :mask #b1)
        (.add.z.vf vf7 vf7 vf7 :mask #b1)
        (.mov a2-1 vf7)
        (let ((f0-5 (- a2-1 (-> obj tuning desired-spring-len))))
          (when (< 0.0 f0-5)
            (.div.vf Q vf0 vf7 :fsf #b11 :ftf #b0)
            (.wait.vf)
            (.mul.vf vf5 vf5 Q)
            (let ((a2-5 (* f0-5 (-> obj tuning spring-coefficient))))
              (.mov vf10 a2-5)
              )
            (.mul.x.vf vf10 vf5 vf10 :mask #b111)
            (.add.vf vf1 vf1 vf10 :mask #b111)
            0
            )
          )
        (let ((a2-8 (&+ a1-1 48)))
          (.lvf vf4 (&-> a2-8 local-pos quad))
          (.sub.vf vf6 vf4 vf3)
          (.mul.vf vf8 vf6 vf6 :mask #b111)
          (.add.y.vf vf8 vf8 vf8 :mask #b1)
          (.add.z.vf vf8 vf8 vf8 :mask #b1)
          (.mov a3-0 vf8)
          (let ((f0-8 (- a3-0 (-> obj tuning desired-spring-len))))
            (when (< 0.0 f0-8)
              (.div.vf Q vf0 vf8 :fsf #b11 :ftf #b0)
              (.wait.vf)
              (.mul.vf vf6 vf6 Q)
              (let ((a3-4 (* f0-8 (-> obj tuning spring-coefficient))))
                (.mov vf10 a3-4)
                )
              (.mul.x.vf vf10 vf6 vf10 :mask #b111)
              (.add.vf vf1 vf1 vf10 :mask #b111)
              0
              )
            )
          (.mul.vf vf15 vf1 vf14 :mask #b111)
          (.lvf vf11 (&-> a1-1 vel quad))
          (.add.vf vf11 vf11 vf15 :mask #b111)
          (.mul.vf vf11 vf11 vf12 :mask #b111)
          (.svf (&-> a1-1 vel quad) vf11)
          (set! a1-1 a2-8)
          )
        )
      (.mov.vf vf2 vf3)
      (.mov.vf vf3 vf4)
      (+! v1-11 -1)
      (b! (> v1-11 0) cfg-1 :delay (nop!))
      )
    (let ((v1-13 (-> *display* seconds-per-frame)))
      (.mov vf13 v1-13)
      )
    (.add.x.vf vf13 vf0 vf13 :mask #b10)
    (.add.x.vf vf13 vf0 vf13 :mask #b100)
    0
    (let ((v1-17 (+ (-> obj tuning num-spring-points) -2)))
      (let ((a0-1 (the-as object (&-> obj stack 320))))
        (label cfg-7)
        (.lvf vf11 (&-> (the-as (inline-array vector) a0-1) 1 quad))
        (.lvf vf3 (&-> (the-as (inline-array vector) a0-1) 0 quad))
        (.mul.vf vf11 vf11 vf13 :mask #b111)
        (.add.vf vf3 vf3 vf11 :mask #b111)
        (.svf (&-> (the-as (inline-array vector) a0-1) 0 quad) vf3)
        (set! a0-1 (-> (the-as (inline-array vector) a0-1) 3))
        )
      (+! v1-17 -1)
      (b! (> v1-17 0) cfg-7 :delay (nop!))
      )
    0
    (none)
    )
  )

;; definition for method 24 of type ropebridge
;; INFO: Return type mismatch symbol vs none.
(defmethod debug-draw ropebridge ((obj ropebridge))
  (let ((gp-0 (-> obj node-list data 0 bone transform))
        (s5-0 (the-as ropebridge-spring-point (-> obj spring-point)))
        (s4-0 (new 'stack-no-clear 'vector))
        )
    (countdown (s3-0 (-> obj tuning num-spring-points))
      (vector-matrix*! s4-0 (-> s5-0 local-pos) gp-0)
      (add-debug-sphere #t (bucket-id debug) s4-0 2048.0 (new 'static 'rgba :r #xff :g #xff :b #xff :a #x40))
      (&+! s5-0 48)
      )
    )
  (none)
  )

;; definition for method 25 of type ropebridge
;; INFO: Return type mismatch symbol vs none.
(defmethod set-to-rest-state ropebridge ((obj ropebridge))
  (rlet ((vf0 :class vf)
         (vf1 :class vf)
         (vf2 :class vf)
         )
    (init-vf0-vector)
    (let ((a1-0 (the-as structure (-> obj tuning rest-state))))
      (cond
        ((the-as symbol a1-0)
         (let ((v1-1 (the-as ropebridge-spring-point (-> obj spring-point)))
               (a1-1 (the-as vector (-> (the-as vector a1-0) x)))
               )
           (.svf (&-> v1-1 local-pos quad) vf0)
           (.svf (&-> v1-1 vel quad) vf0)
           (countdown (a0-3 (+ (-> obj tuning num-spring-points) -1))
             (&+! v1-1 48)
             (.svf (&-> v1-1 local-pos quad) vf0)
             (.svf (&-> v1-1 vel quad) vf0)
             (set! (-> v1-1 local-pos y) (-> a1-1 x))
             (set! (-> v1-1 local-pos z) (-> a1-1 y))
             (set! (-> v1-1 vel y) (-> a1-1 z))
             (set! (-> v1-1 vel z) (-> a1-1 w))
             (&+! a1-1 16)
             )
           )
         )
        (else
          (let ((a1-2 8192.0))
            (.mov.vf vf1 vf0)
            (let ((v1-3 (the-as ropebridge-spring-point (-> obj spring-point))))
              (.mov vf2 a1-2)
              (.add.x.vf vf2 vf0 vf2)
              (.mov.vf vf2 vf0 :mask #b1011)
              (countdown (a0-5 (-> obj tuning num-spring-points))
                (.svf (&-> v1-3 local-pos quad) vf1)
                (.svf (&-> v1-3 vel quad) vf0)
                (.add.vf vf1 vf1 vf2 :mask #b111)
                (&+! v1-3 48)
                )
              )
            )
          )
        )
      )
    (none)
    )
  )

;; definition for function ropebridge-joint-callback
;; INFO: Return type mismatch int vs none.
;; Used lq/sq
(defun ropebridge-joint-callback ((arg0 ropebridge))
  (let ((s5-0 (-> arg0 node-list data 3 bone transform)))
    (matrix-identity! s5-0)
    (set-vector! (-> s5-0 vector 3) 0.0 0.0 (- (-> arg0 tuning normal-board-len)) 1.0)
    )
  (let* ((s5-1 (-> arg0 spring-point))
         (s3-0 (the-as object s5-1))
         (s4-0 0)
         )
    (while (< s4-0 (-> arg0 tuning num-springs))
      (set! s3-0 (&+ (the-as ropebridge-spring-point s3-0) 48))
      (let ((v1-4 (new 'stack-no-clear 'vector)))
        (vector-! v1-4 (-> (the-as ropebridge-spring-point s3-0) local-pos) (the-as vector (-> s5-1 0)))
        (let ((f0-8 (- (atan (-> v1-4 y) (-> v1-4 z))))
              (s2-0 (-> arg0 node-list data (+ s4-0 4) bone transform))
              )
          (matrix-rotate-x! s2-0 f0-8)
          (set! (-> s2-0 vector 3 quad) (-> s5-1 0 local-pos quad))
          )
        )
      (set! s5-1 (the-as (inline-array ropebridge-spring-point) (the-as ropebridge-spring-point s3-0)))
      (+! s4-0 1)
      )
    (let ((s4-1 (-> arg0 node-list data (+ s4-0 4) bone transform)))
      (matrix-identity! s4-1)
      (set! (-> s4-1 vector 3 quad) (-> s5-1 0 local-pos quad))
      )
    )
  (dotimes (s5-2 (+ (-> arg0 tuning num-springs) 2))
    (let ((a1-3 (-> arg0 node-list data (+ s5-2 3) bone transform)))
      (matrix*! a1-3 a1-3 (-> arg0 world-matrix))
      )
    )
  0
  (none)
  )

;; definition for method 26 of type ropebridge
;; INFO: Return type mismatch symbol vs none.
(defmethod add-collision-meshes ropebridge ((obj ropebridge))
  (let* ((s5-0 (-> obj root-override))
         (s3-0 (-> obj tuning))
         (s4-0 (new 'process 'collide-shape-prim-group s5-0 (the-as uint (-> s3-0 num-springs)) 0))
         )
    (set! (-> s4-0 prim-core collide-as) (collide-kind ground-object))
    (set! (-> s4-0 collide-with) (collide-kind target))
    (set-vector! (-> s4-0 local-sphere) 0.0 0.0 0.0 (-> s3-0 root-prim-radius))
    (set! (-> s4-0 transform-index) (+ (/ (-> s3-0 num-springs) 2) 4))
    (set! (-> s4-0 prim-core action) (collide-action solid ca-1))
    (set-root-prim! s5-0 s4-0)
    (let ((s3-1 (-> obj tuning col-mesh-indexes)))
      (dotimes (s2-0 (-> obj tuning num-springs))
        (let* ((a3-1 (-> s3-1 s2-0))
               (a1-3 (new 'process 'collide-shape-prim-mesh s5-0 a3-1 (the-as uint s2-0)))
               )
          (set! (-> a1-3 prim-core action) (collide-action solid ca-1))
          (set! (-> a1-3 prim-core collide-as) (collide-kind ground-object))
          (set! (-> a1-3 collide-with) (collide-kind target))
          (set! (-> a1-3 prim-core offense) (collide-offense indestructible))
          (set-vector! (-> a1-3 local-sphere) 0.0 6144.0 4096.0 18022.4)
          (set! (-> a1-3 transform-index) (+ s2-0 4))
          (append-prim s4-0 a1-3)
          )
        )
      )
    )
  (none)
  )

;; definition for method 12 of type ropebridge
(defmethod run-logic? ropebridge ((obj ropebridge))
  (or (zero? (logand (-> obj mask) (process-mask actor-pause)))
      (< (- (-> *display* base-frame-counter) (-> obj agitated-time-stamp)) (seconds 5))
      (or (>= (-> obj sleep-dist) (vector-vector-distance (-> obj root-override trans) (math-camera-pos)))
          (and (nonzero? (-> obj skel)) (!= (-> obj skel root-channel 0) (-> obj skel channel)))
          (and (nonzero? (-> obj draw)) (logtest? (-> obj draw status) (draw-status no-skeleton-update)))
          )
      )
  )

;; definition for method 28 of type ropebridge
;; INFO: Return type mismatch int vs none.
(defmethod dummy-28 ropebridge ((obj ropebridge))
  0
  (none)
  )

;; definition for method 11 of type ropebridge
;; INFO: Return type mismatch object vs none.
(defmethod init-from-entity! ropebridge ((obj ropebridge) (arg0 entity-actor))
  (let ((s4-0 (res-lump-struct (-> obj entity) 'art-name structure)))
    (if (not s4-0)
        (set! s4-0 "ropebridge-32")
        )
    (if (= (-> (the-as symbol s4-0) type) symbol)
        (set! s4-0 (symbol->string (the-as symbol s4-0)))
        )
    (set! (-> obj subtype-name) (the-as string s4-0))
    (set! (-> obj subtype) (the-as uint (cond
                                          ((string= (the-as string s4-0) "ropebridge-32")
                                           0
                                           )
                                          ((string= (the-as string s4-0) "ropebridge-36")
                                           1
                                           )
                                          ((string= (the-as string s4-0) "ropebridge-52")
                                           2
                                           )
                                          ((string= (the-as string s4-0) "ropebridge-70")
                                           3
                                           )
                                          ((string= (the-as string s4-0) "snow-bridge-36")
                                           4
                                           )
                                          ((string= (the-as string s4-0) "vil3-bridge-36")
                                           5
                                           )
                                          (else
                                            0
                                            )
                                          )
                                   )
          )
    )
  (set! (-> obj tuning) (-> *ropebridge-tunings* (the-as int (-> obj subtype))))
  (set! (-> obj agitated-time-stamp) (-> *display* base-frame-counter))
  (set! (-> obj bonk-time-stamp) (-> *display* base-frame-counter))
  (set! (-> obj attack-flop-time-stamp) (-> *display* base-frame-counter))
  (set-vector! (-> obj extra-trans) 0.0 0.0 (- (* 0.5 (-> obj tuning bridge-end-to-end-len))) 1.0)
  (set! (-> obj do-physics?) #t)
  (let ((a0-13 (new 'process 'collide-shape obj (collide-list-enum hit-by-player))))
    (set! (-> obj root-override) a0-13)
    (alloc-riders a0-13 3)
    )
  (add-collision-meshes obj)
  (process-drawable-from-entity! obj arg0)
  (initialize-skeleton-by-name obj (-> obj subtype-name) '())
  (logior! (-> obj skel status) (janim-status inited))
  (let ((v1-29 (-> obj tuning)))
    (set! (-> obj draw bounds w) (-> v1-29 view-frustum-radius))
    (set! (-> obj sleep-dist) (+ 40960.0 (* 0.5 (-> v1-29 bridge-end-to-end-len))))
    (if (or (< 35 (-> v1-29 num-springs)) (< 36 (-> v1-29 num-spring-points)))
        (format 0 "ERROR: ##########~%Exceeded max # of springs in ropebridge!  Stomping memory!~%##########~%")
        )
    )
  (set! (-> obj skel postbind-function) ropebridge-joint-callback)
  (matrix<-transformq+trans!
    (-> obj world-matrix)
    (the-as transformq (-> obj root-override trans))
    (-> obj extra-trans)
    )
  (matrix-4x4-inverse! (-> obj inv-world-matrix) (-> obj world-matrix))
  (set-to-rest-state obj)
  (go ropebridge-idle)
  (none)
  )
