mirror of
https://github.com/open-goal/jak-project.git
synced 2024-10-20 21:27:52 -04:00
d1ece445d4
Relates to #1353 This adds no new functionality or overhead to the compiler, yet. This is the preliminary work that has: - added code to the compiler in several spots to flag when something is used without being properly required/imported/whatever (disabled by default) - that was used to generate project wide file dependencies (some circulars were manually fixed) - then that graph underwent a transitive reduction and the result was written to all `jak1` source files. The next step will be making this actually produce and use a dependency graph. Some of the reasons why I'm working on this: - eliminates more `game.gp` boilerplate. This includes the `.gd` files to some extent (`*-ag` files and `tpage` files will still need to be handled) this is the point of the new `bundles` form. This should make it even easier to add a new file into the source tree. - a build order that is actually informed from something real and compiler warnings that tell you when you are using something that won't be available at build time. - narrows the search space for doing LSP actions -- like searching for references. Since it would be way too much work to store in the compiler every location where every symbol/function/etc is used, I have to do ad-hoc searches. By having a dependency graph i can significantly reduce that search space. - opens the doors for common shared code with a legitimate pattern. Right now jak 2 shares code from the jak 1 folder. This is basically a hack -- but by having an explicit require syntax, it would be possible to reference arbitrary file paths, such as a `common` folder. Some stats: - Jak 1 has about 2500 edges between files, including transitives - With transitives reduced at the source code level, each file seems to have a modest amount of explicit requirements. Known issues: - Tracking the location for where `defmacro`s and virtual state definitions were defined (and therefore the file) is still problematic. Because those forms are in a macro environment, the reader does not track them. I'm wondering if a workaround could be to search the reader's text_db by not just the `goos::Object` but by the text position. But for the purposes of finishing this work, I just statically analyzed and searched the code with throwaway python code.
124 lines
3.6 KiB
Common Lisp
124 lines
3.6 KiB
Common Lisp
;;-*-Lisp-*-
|
|
(in-package goal)
|
|
(bundles "CIT.DGO")
|
|
|
|
(require "engine/common-obs/process-taskable.gc")
|
|
|
|
;; name: assistant-citadel.gc
|
|
;; name in dgo: assistant-citadel
|
|
;; dgos: CIT, L1
|
|
|
|
;; DECOMP BEGINS
|
|
|
|
(deftype assistant-lavatube-end (process-taskable)
|
|
()
|
|
)
|
|
|
|
|
|
(defskelgroup *assistant-lavatube-end-sg* assistant-lavatube-end assistant-lavatube-end-lod0-jg assistant-lavatube-end-idle-ja
|
|
((assistant-lavatube-end-lod0-mg (meters 999999)))
|
|
:bounds (static-spherem 0 0 0 4)
|
|
:shadow assistant-lavatube-end-shadow-mg
|
|
)
|
|
|
|
(defmethod play-anim! ((this assistant-lavatube-end) (arg0 symbol))
|
|
(case (current-status (-> this tasks))
|
|
(((task-status unknown) (task-status need-hint))
|
|
(new 'static 'spool-anim :name "assistant-lavatube-end-resolution" :index 4 :parts 11 :command-list '())
|
|
)
|
|
(((task-status need-reward-speech))
|
|
(if arg0
|
|
(close-current! (-> this tasks))
|
|
)
|
|
(new 'static 'spool-anim
|
|
:name "assistant-lavatube-end-resolution"
|
|
:index 4
|
|
:parts 11
|
|
:command-list '((61 joint "cameraB")
|
|
(151 joint "camera")
|
|
(226 joint "cameraB")
|
|
(273 joint "camera")
|
|
(316 joint "cameraB")
|
|
(451 joint "camera")
|
|
(651 joint "cameraB")
|
|
(786 joint "camera")
|
|
(888 joint "cameraB")
|
|
(1011 joint "camera")
|
|
(1011 shadow target #f)
|
|
(1140 shadow target #t)
|
|
(1191 joint "cameraB")
|
|
)
|
|
)
|
|
)
|
|
(else
|
|
(if arg0
|
|
(format
|
|
0
|
|
"ERROR: <GMJ>: ~S playing anim for task status ~S~%"
|
|
(-> this name)
|
|
(task-status->string (current-status (-> this tasks)))
|
|
)
|
|
)
|
|
(get-art-elem this)
|
|
)
|
|
)
|
|
)
|
|
|
|
(defmethod get-art-elem ((this assistant-lavatube-end))
|
|
(-> this draw art-group data 3)
|
|
)
|
|
|
|
(defstate hidden (assistant-lavatube-end)
|
|
:virtual #t
|
|
:trans (behavior ()
|
|
(process-taskable-method-33 self)
|
|
((-> (method-of-type process-taskable hidden) trans))
|
|
(when (and (and *target* (>= 61440.0 (vector-vector-distance (-> self root trans) (-> *target* control trans))))
|
|
(not (closed? (-> self tasks) (game-task village4-button) (task-status need-reward-speech)))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
(defstate idle (assistant-lavatube-end)
|
|
:virtual #t
|
|
:enter (behavior ()
|
|
((-> (method-of-type process-taskable idle) enter))
|
|
(case (get-task-status (game-task village4-button))
|
|
(((task-status need-reward-speech))
|
|
(send-event self 'play-anim)
|
|
)
|
|
)
|
|
)
|
|
:code (behavior ()
|
|
(loop
|
|
(when (!= (ja-group) (get-art-elem self))
|
|
(ja-channel-push! 1 (seconds 0.05))
|
|
(ja :group! assistant-lavatube-end-idle-ja)
|
|
)
|
|
(ja-no-eval :group! (ja-group) :num! (seek!) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek!))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
(defmethod should-display? ((this assistant-lavatube-end))
|
|
(first-any (-> this tasks) #t)
|
|
(let ((v1-3 (current-status (-> this tasks))))
|
|
(and (or (= v1-3 (task-status need-reward-speech)) (= v1-3 (task-status invalid)))
|
|
(not (task-closed? (game-task citadel-sage-green) (task-status need-hint)))
|
|
)
|
|
)
|
|
)
|
|
|
|
(defmethod init-from-entity! ((this assistant-lavatube-end) (arg0 entity-actor))
|
|
(process-taskable-method-40 this arg0 *assistant-lavatube-end-sg* 3 29 (new 'static 'vector :w 4096.0) 5)
|
|
(set! (-> this tasks) (get-task-control (game-task village4-button)))
|
|
(first-any (-> this tasks) #t)
|
|
(process-taskable-method-42 this)
|
|
(none)
|
|
)
|