Files
jak-project/goal_src/jak1/engine/entity/entity-table.gc
T
2024-05-20 15:04:15 -04:00

223 lines
6.4 KiB
Common Lisp

;;-*-Lisp-*-
(in-package goal)
(bundles "ENGINE.CGO" "GAME.CGO")
(require "engine/entity/entity-h.gc")
;; 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 #xc00
;; og:preserve-this CHANGED from 2k!!
)
(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))))