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

;; name: entity-table.gc
;; name in dgo: entity-table
;; dgos: GAME

;; these types don't exist, but are referenced in the entity table
(deftype sail-boat-a (process-drawable-reserved)
  ()
  )

(deftype cty-window-a (process-drawable-reserved)
  ()
  )

(deftype city-window-a (process-drawable-reserved)
  ()
  )

(deftype cty-guard-turret (process-drawable-reserved)
  ()
  )

(deftype cty-fruit-stand (process-drawable-reserved)
  ()
  )

(deftype torn (process-drawable-reserved)
  ()
  )

;; DECOMP BEGINS

(define *entity-info*
  (new 'static 'boxed-array :type entity-info
    (new 'static 'entity-info :ptype 'factory-boss :pool '*16k-dead-pool* :heap-size #x8000)
    (new 'static 'entity-info
      :ptype (type-ref flitter-spawner :method-count 22)
      :pool '*16k-dead-pool*
      :heap-size #x4000
      )
    (new 'static 'entity-info
      :ptype (type-ref bubbles-path :method-count 22)
      :pool '*16k-dead-pool*
      :heap-size #x8000
      )
    (new 'static 'entity-info :ptype 'desert-chase-ring :pool '*16k-dead-pool* :heap-size #x8000)
    (new 'static 'entity-info :ptype 'bt-grunt :pool '*16k-dead-pool* :heap-size #x8000)
    (new 'static 'entity-info :ptype 'bt-roboguard :pool '*16k-dead-pool* :heap-size #x8000)
    (new 'static 'entity-info
      :ptype (type-ref w-parking-spot :method-count 27)
      :pool '*16k-dead-pool*
      :heap-size #x4000
      )
    (new 'static 'entity-info
      :ptype (type-ref min-elevator :method-count 52)
      :pool '*16k-dead-pool*
      :heap-size #x4000
      )
    (new 'static 'entity-info
      :ptype (type-ref tpl-bouncer :method-count 28)
      :pool '*16k-dead-pool*
      :heap-size #x4000
      )
    (new 'static 'entity-info :ptype 'veger-npc :pool '*16k-dead-pool* :heap-size #x10000)
    (new 'static 'entity-info :ptype 'seem-npc :pool '*16k-dead-pool* :heap-size #x20000)
    (new 'static 'entity-info
      :ptype (type-ref krimson-wall :method-count 31)
      :pool '*16k-dead-pool*
      :heap-size #x4000
      )
    (new 'static 'entity-info :ptype 'kleever-catch-lizards :pool '*16k-dead-pool* :heap-size #x18000)
    (new 'static 'entity-info :ptype 'kleever-npc :pool '*16k-dead-pool* :heap-size #x18000)
    (new 'static 'entity-info :ptype 'damus-npc :pool '*16k-dead-pool* :heap-size #x10000)
    (new 'static 'entity-info
      :ptype (type-ref nav-graph :method-count 45)
      :pool '*16k-dead-pool*
      :heap-size #x4000
      )
    (new 'static 'entity-info :ptype (type-ref tizard :method-count 36) :pool '*16k-dead-pool* :heap-size #x4000)
    (new 'static 'entity-info :ptype (type-ref ladder :method-count 27) :pool '*16k-dead-pool* :heap-size #x4000)
    (new 'static 'entity-info :ptype 'mh-centipede :pool '*16k-dead-pool* :heap-size #x6000)
    (new 'static 'entity-info :ptype 'dark-tower :pool '*16k-dead-pool* :heap-size #x5800)
    (new 'static 'entity-info
      :ptype (type-ref curve-bubbles-Shape :method-count 15)
      :pool '*16k-dead-pool*
      :heap-size #x4000
      )
    (new 'static 'entity-info
      :ptype (type-ref mhcity-tower-door :method-count 21)
      :pool '*16k-dead-pool*
      :heap-size #x4000
      )
    (new 'static 'entity-info
      :ptype (type-ref mhcity-grunt-egg-d :method-count 32)
      :pool '*16k-dead-pool*
      :heap-size #x4000
      )
    (new 'static 'entity-info
      :ptype (type-ref mhcity-grunt-egg-c :method-count 32)
      :pool '*16k-dead-pool*
      :heap-size #x4000
      )
    (new 'static 'entity-info
      :ptype (type-ref mhcity-grunt-egg-b :method-count 32)
      :pool '*16k-dead-pool*
      :heap-size #x4000
      )
    (new 'static 'entity-info
      :ptype (type-ref mhcity-grunt-egg-a :method-count 32)
      :pool '*16k-dead-pool*
      :heap-size #x4000
      )
    (new 'static 'entity-info
      :ptype (type-ref mhcity-de-tower-undervines :method-count 32)
      :pool '*16k-dead-pool*
      :heap-size #x4000
      )
    (new 'static 'entity-info
      :ptype (type-ref mhcity-vine-wriggler-big :method-count 32)
      :pool '*16k-dead-pool*
      :heap-size #x4000
      )
    (new 'static 'entity-info
      :ptype (type-ref mhcity-vine-wriggler :method-count 32)
      :pool '*16k-dead-pool*
      :heap-size #x4000
      )
    (new 'static 'entity-info
      :ptype (type-ref mhcity-twitch-blade :method-count 21)
      :pool '*16k-dead-pool*
      :heap-size #x4000
      )
    (new 'static 'entity-info
      :ptype (type-ref mhcity-claw-finger-small :method-count 32)
      :pool '*16k-dead-pool*
      :heap-size #x4000
      )
    (new 'static 'entity-info
      :ptype (type-ref mhcity-vein-writhing-small :method-count 32)
      :pool '*16k-dead-pool*
      :heap-size #x4000
      )
    (new 'static 'entity-info
      :ptype (type-ref mhcity-vein-writhing-large :method-count 32)
      :pool '*16k-dead-pool*
      :heap-size #x4000
      )
    (new 'static 'entity-info
      :ptype (type-ref mhcity-dark-eco-nodule :method-count 22)
      :pool '*16k-dead-pool*
      :heap-size #x4000
      )
    (new 'static 'entity-info
      :ptype (type-ref mhcity-dark-eco-door :method-count 33)
      :pool '*16k-dead-pool*
      :heap-size #x4000
      )
    (new 'static 'entity-info
      :ptype (type-ref mhcity-puffer-large :method-count 35)
      :pool '*16k-dead-pool*
      :heap-size #x4000
      )
    (new 'static 'entity-info
      :ptype (type-ref mhcity-puffer :method-count 35)
      :pool '*16k-dead-pool*
      :heap-size #x4000
      )
    (new 'static 'entity-info
      :ptype (type-ref searchlight :method-count 21)
      :pool '*16k-dead-pool*
      :heap-size #x4000
      )
    (new 'static 'entity-info
      :ptype (type-ref ctyn-lamp :method-count 32)
      :pool '*16k-dead-pool*
      :heap-size #x4000
      )
    (new 'static 'entity-info
      :ptype (type-ref burning-bush :method-count 35)
      :pool '*16k-dead-pool*
      :heap-size #x4000
      )
    (new 'static 'entity-info
      :ptype (type-ref sail-boat-a :method-count 218)
      :pool '*16k-dead-pool*
      :heap-size #x4000
      )
    (new 'static 'entity-info :ptype (type-ref barge :method-count 152) :pool '*16k-dead-pool* :heap-size #x4000)
    (new 'static 'entity-info
      :ptype (type-ref boat-manager :method-count 17)
      :pool '*16k-dead-pool*
      :heap-size #x4000
      )
    (new 'static 'entity-info :ptype (type-ref propa :method-count 33) :pool '*16k-dead-pool* :heap-size #x4000)
    (new 'static 'entity-info
      :ptype (type-ref city-window-a :method-count 218)
      :pool '*16k-dead-pool*
      :heap-size #x4000
      )
    (new 'static 'entity-info
      :ptype (type-ref cty-window-a :method-count 218)
      :pool '*16k-dead-pool*
      :heap-size #x4000
      )
    (new 'static 'entity-info
      :ptype (type-ref parking-spot :method-count 27)
      :pool '*16k-dead-pool*
      :heap-size #x4000
      )
    (new 'static 'entity-info
      :ptype (type-ref security-wall :method-count 25)
      :pool '*16k-dead-pool*
      :heap-size #x4000
      )
    (new 'static 'entity-info
      :ptype (type-ref cty-guard-turret :method-count 218)
      :pool '*16k-dead-pool*
      :heap-size #x4000
      )
    (new 'static 'entity-info
      :ptype (type-ref cty-fruit-stand :method-count 218)
      :pool '*16k-dead-pool*
      :heap-size #x4000
      )
    (new 'static 'entity-info
      :ptype (type-ref fruit-stand :method-count 31)
      :pool '*16k-dead-pool*
      :heap-size #x4000
      )
    (new 'static 'entity-info :ptype (type-ref torn :method-count 218) :pool '*16k-dead-pool* :heap-size #x4000)
    (new 'static 'entity-info
      :ptype (type-ref neon-baron :method-count 17)
      :pool '*16k-dead-pool*
      :heap-size #x10000
      )
    )
  )

;; WARN: Return type mismatch basic vs entity-info.
(defun entity-info-lookup ((arg0 type))
  (the-as entity-info (cond
                        ((nonzero? (-> arg0 method-table 13))
                         (-> arg0 method-table 13)
                         )
                        (else
                          (let ((v1-1 *entity-info*))
                            (dotimes (a1-0 (-> v1-1 length))
                              (let ((a2-3 (-> v1-1 a1-0 ptype)))
                                (when (if (logtest? (the-as int a2-3) 1)
                                          (= (-> arg0 symbol) a2-3)
                                          (= arg0 a2-3)
                                          )
                                  (set! (-> arg0 method-table 13) (the-as function (-> v1-1 a1-0)))
                                  (return (the-as entity-info (-> v1-1 a1-0)))
                                  )
                                )
                              )
                            )
                          (set! (-> arg0 method-table 13) #f)
                          (the-as basic #f)
                          )
                        )
          )
  )
