mirror of
https://github.com/open-goal/jak-project
synced 2026-05-31 09:22:14 -04:00
c162c66118
This PR does two main things: 1. Work through the main low-hanging fruit issues in the formatter keeping it from feeling mature and usable 2. Iterate and prove that point by formatting all of the Jak 1 code base. **This has removed around 100K lines in total.** - The decompiler will now format it's results for jak 1 to keep things from drifting back to where they were. This is controlled by a new config flag `format_code`. How am I confident this hasn't broken anything?: - I compiled the entire project and stored it's `out/jak1/obj` files separately - I then recompiled the project after formatting and wrote a script that md5's each file and compares it (`compare-compilation-outputs.py` - The results (eventually) were the same:  > This proves that the only difference before and after is non-critical whitespace for all code/macros that is actually in use. I'm still aware of improvements that could be made to the formatter, as well as general optimization of it's performance. But in general these are for rare or non-critical situations in my opinion and I'll work through them before doing Jak 2. The vast majority looks great and is working properly at this point. Those known issues are the following if you are curious: 
219 lines
6.3 KiB
Common Lisp
219 lines
6.3 KiB
Common Lisp
;;-*-Lisp-*-
|
|
(in-package goal)
|
|
(bundles "ENGINE.CGO" "GAME.CGO")
|
|
(require "engine/entity/entity-h.gc")
|
|
|
|
;; 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))))
|