jak-project/goal_src/engine/entity/entity-table.gc
water111 784cd5debb
[decomp] get started on game info (#674)
* temp

* menu text

* wip

* recognize handle to process

* more
2021-07-03 16:18:41 -04:00

196 lines
6.3 KiB
Common Lisp

;;-*-Lisp-*-
(in-package goal)
;; name: entity-table.gc
;; name in dgo: entity-table
;; dgos: GAME, ENGINE
;; The *entity-info* table contains some simple information that can be used to
;; spawn a process for an entity.
;; :ptype the type of the process
;; :package the package that must be loaded (not used?)
;; :art-group the art that must be loaded
;; :pool the pool that the process should be allocated from
;; :heap-size the required size for the process heap
;; At one point, this was much bigger, but got smaller between
;; the demo and final build. The entity info is possibly stored somewhere else
;; and this may not even be used.
(define *entity-info*
(new 'static 'boxed-array :type entity-info :length 19 :allocated-length 19
(new 'static 'entity-info
:ptype
(type-ref sage-finalboss :method-count 53)
:package "l1"
:art-group '()
:pool '*16k-dead-pool*
:heap-size #x8000
)
(new 'static 'entity-info
:ptype (type-ref robotboss :method-count 21)
:package "l1"
:art-group '()
:pool '*16k-dead-pool*
:heap-size #x8000
)
(new 'static 'entity-info
:ptype
(type-ref assistant-levitator :method-count 53)
:package "l1"
:art-group '()
:pool '*16k-dead-pool*
:heap-size #x8000
)
(new 'static 'entity-info
:ptype (type-ref babak :method-count 76)
:package "l1"
:art-group '("babak")
:pool '*16k-dead-pool*
:heap-size #x2800
)
(new 'static 'entity-info
:ptype (type-ref racer :method-count 24)
:package "game"
:art-group '("racer")
:pool '*16k-dead-pool*
:heap-size #x4000
)
(new 'static 'entity-info
:ptype (type-ref springbox :method-count 20)
:package "game"
:art-group '("bounceytarp")
:pool '*16k-dead-pool*
:heap-size #x1400
)
(new 'static 'entity-info
:ptype (type-ref launcher :method-count 20)
:package "game"
:art-group '()
:pool '*16k-dead-pool*
:heap-size #x400
)
(new 'static 'entity-info
:ptype
(type-ref pickup-spawner :method-count 30)
:package "game"
:art-group '()
:pool '*16k-dead-pool*
:heap-size #xc00
)
(new 'static 'entity-info
:ptype (type-ref bucket :method-count 30)
:package "game"
:art-group '()
:pool '*16k-dead-pool*
:heap-size #xc00
)
(new 'static 'entity-info
:ptype (type-ref barrel :method-count 30)
:package "game"
:art-group '()
:pool '*16k-dead-pool*
:heap-size #xc00
)
(new 'static 'entity-info
:ptype (type-ref crate :method-count 30)
:package "game"
:art-group '()
:pool '*16k-dead-pool*
:heap-size #xc00
)
(new 'static 'entity-info
:ptype
(type-ref orb-cache-top :method-count 29)
:package "game"
:art-group '("orb-cache-top")
:pool '*16k-dead-pool*
:heap-size #x1000
)
(new 'static 'entity-info
:ptype (type-ref eco :method-count 31)
:package "game"
:art-group '()
:pool '*16k-dead-pool*
:heap-size #x1000
)
(new 'static 'entity-info
:ptype (type-ref ecovent :method-count 21)
:package "game"
:art-group '()
:pool '*16k-dead-pool*
:heap-size #x1000
)
(new 'static 'entity-info
:ptype (type-ref fuel-cell :method-count 31)
:package "game"
:art-group '()
:pool '*16k-dead-pool*
:heap-size #x1400
)
(new 'static 'entity-info
:ptype (type-ref buzzer :method-count 31)
:package "game"
:art-group '()
:pool '*16k-dead-pool*
:heap-size #x1000
)
(new 'static 'entity-info
:ptype (type-ref money :method-count 31)
:package "game"
:art-group '()
:pool '*16k-dead-pool*
:heap-size #x800
)
(new 'static 'entity-info
:ptype (type-ref water-vol :method-count 30)
:package "game"
:art-group '()
:pool '*16k-dead-pool*
:heap-size #xc00
)
(new 'static 'entity-info
:ptype
(type-ref target-start :method-count 15)
:package "game"
:art-group '()
:pool '*16k-dead-pool*
:heap-size #x400
)
)
)
(defun entity-info-lookup ((arg0 type))
"Look up the entity-info for a given type.
to speed-up the lookup in the future,
this caches the result in the method table..."
(the-as entity-info
(cond
((nonzero? (-> arg0 method-table 13))
;; we already cached the type in the method table
(-> arg0 method-table 13)
)
(else
;; search the table
(let ((v1-1 *entity-info*))
(dotimes (a1-0 (-> v1-1 length))
(when (= arg0 (-> v1-1 a1-0 ptype))
;; found it, cache it in the method table
(set! (-> arg0 method-table 13)
(the-as function (-> v1-1 a1-0))
)
(return (-> v1-1 a1-0))
)
)
)
;; didn't find it, cache and return #f
(set! (-> arg0 method-table 13) #f)
#f
)
)
)
)