;;-*-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 #xc00 ;; 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 ) ) ) )