Some notes:
- `draw-prototype-inline-array-shrub` can probably be decompiled but I'm
not comfortable doing this function myself. It's got a ton of inline
assembly (or at least I think it's inline assembly) and is very long. I
left this marked as asm for now but I am confident in the function
definition.
- The VU program is identical to Jak 1 (yay)
- There's some new `dma-test` stuff at the end of the file, not really
sure what it's doing but it runs in the top-level.
- decompile `subdivide`, `wind-work`, `tie-work`, `bsp`, `focus`
- support `ppacb` in compiler
- don't assert when bitfield stuff fails due to constant propgataion
weirdness
- finish up history
- div/mod unsigned assert fix in decompiler
- empty assert fix in decompiler for failed `add` type prop
- make jak 1 performance counters "work" (just measure time)
- fix cast/typos on pcgtb/vftoi15
Has boxed array accessing that prevents me from adding anything to ref
tests (the entire file is lambdas so the access pattern that i would
like to ignore happens at the top-level, can't ignore it.
This code actually already has quite a bit of original docstrings so
it's not too bad in that regard considering a `script-context` can have
16 arbitrary objects. It seems they rarely put more than a single object
in the context and the types are usually obvious / are actually type
checked!
The merc VU1 program is identical to Jak 1. Jak 2's merc is doing some
new texture login stuff and the DMA buffer setup is a bit different, but
overall very similar.
Fixes https://github.com/open-goal/jak-project/issues/1821 by adding a
special case for `new` method calls where the argument with type
`symbol` is actually an address to uninitialized structure on the stack.
Fixes https://github.com/open-goal/jak-project/issues/1849 (or at least
the cause of the issue Vaser gave in chat, and one random one I found in
`debug-sphere`)
Fixes https://github.com/open-goal/jak-project/issues/1853
Fixes https://github.com/open-goal/jak-project/issues/1857 by moving the
cast into the cond if the body is a single form and the destination type
is a bitfield/enum which is likely to work well. Seems to work on the
examples we could find in jak 1 and jak 2.
Also fixes an issue with casts on the result of `handle->process` (a
common place to use casts)
the output of process->handle is a plain process. Most of the time, you
end up casting this to a more specific. If you add a cast on every use
of the variable, the decompiler will decide to change the type of that
variable to the more specific type, and this breaks the handle cast.
so previously it was impossible to get code like
```
(let* ((s2-0 (the-as swingpole (handle->process (-> self control hack))))
(gp-0 (-> s2-0 dir))
)
```
But now it will work
Rewrites specific kinds of lets where the return value of the `set!`
itself is meant to be used to just be `set!`s. Implemented at the let
rewrite level. Seems to work for Jak 2 so far.
Fixes#1854 .
I wasn't able to 100% complete `debug` due to a bunch of level boundary
debug stuff I couldn't figure out. But, I added a ref test and
documented/copied over everything else into goal_src.
Most of the functions that existed in Jak 1 are identical, others got an
extra param or 2 and some now make copies of arguments instead of
modifying them. There's a bunch of new functions, including all of the
debug functions that used to be in `level-boundary` are now in `debug`.
At the very end of `debug` there's also some weird asm functions
checking for some EE memory controller bug (not sure what's up with
that)?
* sparticle-launcher
* d/jak2: large amount of `sparticle-launcher` done
* d/jak2: finish the majority of `sparticle`
* decomp: improve format code ignoring
* d/jak2: make bits unique in `sp-cpuinfo-flag`
* d/jak1: revert config change
* d/jak2: finish `cylinder`
* d/jak2: mostly finish `history`
* d/jak2: finish a bit of `ripple` and `sync-info`
* d/jak2: finish `font-data` and chip away at some other files
* d/jak2: most of `text` done, a bit of `script` - symbol arr issue in `level-info`
* d/jak2: finish `mech-h`
* lint: format
* tests: fix typeconsistency
* d/jak2: address feedback
* wip
* getting stuff set up so we can actually run test cases
* better handle block entry stuff
* types2 working on gstring
* comments
* math ref working
* up to first stack stuff
* stack fixes
* bounding box
* math stuff is working
* float fixes
* temp debug for (method 9 profile-array)
* stupid stupid bug
* debugging
* everything is broken
* some amount of type stuff works
* bitfield
* texture bitfields not working
* temp
* types
* more stuff
* type check
* temp
* float related fixes for light and res problems
* revisit broken files, fix bugs
* more types
* vector debug
* bug fixes for decompiler crashes in harder functions
* update goal_src
* redo cheat encodings
* fix error
* add no texture cheat
* tiny cleanup + add sidekick stats button
* crappy implementation of big/small head mode
* more correct bone scaling
* redo bone manip code a bit
* jp text fixes
* improved matrix math!
* add big fist cheat, minor type cleanup, add some debug toggles
* move all this mess to a new file
* slightly rework joint scaling function
* add big head npc cheat
* subtitles typo
* WIP mirror mode
* fix mirrored hud sprites
* fix mirror mode sound pan
* add cheats to menu!
* split some subtitles
* dont crash on inline static value array
* [goalc] add support for non-static inline arrays of values
* add a kernel group to jak1
* move and cleanup pc debug code
* random cleanup in `hud-classes`
* pc port fix for gondola spools
* format
* address feedback (wow it was actually just changing 1 line all along...)
* minor decomp cleanup
* ref test
* all-types: improve all-types generation
* all-types: re-generate all-types
* tests: remove the test reporting feature
the format indeed doesn't work, and all current actions require too many permissions for forked PRs.
I'll make my own eventually that works properly (use the new markdown feature)
* all-types: put the states in the method table instead
* all-types: replace all `*time*...uint64` fields with `time-frame` type
* all-types: address feedback
* tests: add a Jak2 `FormRegressionTest` fixture
* tests/ci: minimize test log output and produce a readable report
* improve naming of report due to underlying GitHub issue
* hopefully fix windows handling of this argument
* test...
* final test
* test linux coverage
* git: ignore vs build dir
* cmake: ditch `clang-cl` on windows in favor of actual `clang`
* build: suppress a significant number of warnings
* build: adjust workflows and vendor nasm
* docs: update docs to remove `clang-cl` mentions
* tests: move jak1 reference tests into their own folder
* tests: update offline tests to support multiple games
* tests: some additional fixes and multi-game handling
* tests: update reference tests
* put some duplicated code in a func
* make jak 2 text "work"
* group up all subtitles c++ code into one folder
* compact single-line subtitles
* fix a couple compiler crashes
* Update game_subtitle_en.gd
* `rolling` and `sunken`
* `swamp`
* `ogre`
* `village3`
* `maincave`
* `snow`
* `lavatube`
* `citadel`
* Update .gitignore
* clang
* fix encoding and decoding for quote
* properly fix quotes
* subtitle deserialize: sort by kind, ID and name
* sub editor: fix line speaker not being converted
* cleanup game text ids 1
* update text ids 2
* update source
* update refs
* PAL dumps files
* alrighty then
* make PAL warning slightly more specific
* PAL patches for `title-obs`
* Update all-types.gc
* PAL patch `beach-obs`
* `process-taskable` PAL patch
* `ambient` PAL patch
* `yakow` PAL patch
* `village-obs` PAL patch
* `sparticle-launcher` patch
* `swamp-obs` PAL patch
* `sequence-a-village1` PAL patch
* typo
* errors
* `powerups` PAL patch
* `ogreboss` PAL patch
* jak 1 v2 encoding
* `load-boundary` PAL patch
* `flying-lurker` PAL patch
* `mayor` PAL patch
* update game encoding to PAL (v2) encoding
* `cam-debug` and `cam-update` PAL patch
* `fisher` PAL patch
* `target` PAL patch
* `target2` PAL patch and fix text compiling
* `target-death` PAL patch
* `target-racer-h` PAL patch
* `logic-target` PAL patch
* `main` PAL patch
* `snow-flutflut-obs` PAL patch
* `rolling-obs` PAL patch
* `gsound` PAL patch
* update refs
* `progress` and `progress-draw` PAL patches
* clang
* wrong.
* complain
* clang
* fix test
* fix blurry jp text
* fix weird interrupt lag from setting window size
* patch more text lines, special handling for credits
* Update FontUtils.cpp
* Add xdelta3 and file patching interface
* add window lock toggle and update settings ver
* better particle hacks
* add PAL support to extractor
* Fix credits
* also NTSC-J support
* make xdelta3 a separate library
* address feedback
Co-authored-by: water <awaterford111445@gmail.com>
* entity decomp and update battle hud code
* disable lag compensation in pc port
* delete unnecessary forward decls
* make battle hud track specific tasks
* fix mem leak + debug flying-lurker hud
* improve battle hud lights and fix bug
* tests
* fix IOP getting stuck on music load
* fix regression? and clang
* fix a decomp
* fix another regression
* another
* fix "all actors"
* another regression!
* some jp support to fix some errors in the original game
* music fade toggle
* recognize `process-new` macros!!
* strip casts in this macro
* rename macro
* fix cast typecheck
* update source 1
* detect kernel stack case
* less boilerplate
* `manipy-spawn` special case
* pretty printer improvements
* revert dumb thing from earlier
* use shell detection on `send-event`
* fix some events
* remove unused argument
* detect `static-attack-info` and add `CondNoElse` to shell detect
* better `attack-info` detect
* support `process-spawn` in multi-lets
* detect `rand-float-gen` pt 1
* detect as return value
* detect in `countdown` and `dotimes`
* oops this wasnt working
* fancier `send-event`s
* clang
* update source!!
* fix tests
* fine jeez
* uh okay
* fix some accidental regressions
* fix more regressions
* regression fixes
* fix big bug...
* extra safety!
* music flava hack toggle
* fix hint subtitles not being considered offscreen
* music player works
* fixes + citadel, maincave, lavatube music
* add remaining tracks
* fix test
* fixes
* fix lib
* update refs
* [decompiler] read and process art groups
* finish decompiler art group selection & detect in `ja-group?`
* make art stuff work on offline tests!
* [decompiler] detect `ja-group!` (primitive)
* corrections.
* more
* use new feature on skel groups!
* find `loop!` as well
* fully fledged `ja` macro & decomp + `loop` detect
* fancy fixed point printing!
* update source
* `:num! max` (i knew i should've done this)
* Update jak1_ntsc_black_label.jsonc
* hi imports
* make compiling the game work
* fix `defskelgroup`
* clang
* update refs
* fix chan
* fix seek and finalboss
* fix tests
* delete unused function
* track let rewrite stats
* reorder `rewrite_let`
* Update .gitattributes
* fix bug with `:num! max`
* Update robotboss-part.gc
* Update goal-lib.gc
* document `ja`
* get rid of pc fixes thing
* use std::abs
* [gtie] tie inst and proto functions
* first chain input to generic ee looks good
* m
* works
* ugh
* add tie generic
* rm debug print
* rm generic ties from fr3
* detect `seek!` and `seekl!`
* fancy struct instead of pair mess
* fixes
* i think this was wrong?
* update refs
* update source
* More logical branching
* even better branching
* fix typo
* more typo
* shorten discord rpc text
* allow expanding enums after the fact (untested)
* make `game_text` work similar to subtitles
* update progress decomp
* update some types + `do-not-decompile` in bitfield
* fixes and fall back to original progress code
* update `progress` decomp with new enums
* update config files
* fix enums and debug menu
* always allocate (but not use) a lot of particles
* small rework to display mode options
* revert resolution/aspect-ratio symbol mess
* begin the override stuff
* make `progress-draw` more readable
* more fixes
* codacy good boy points
* first step overriding code
* finish progress overrides, game options menu fully functional!
* minor fixes
* Update game.gp
* Update sparticle-launcher.gc
* clang
* change camera controls text
* oops
* some cleanup
* derp
* nice job
* implement menu scrolling lol
* make scrollable menus less cramped, fix arrows
* make some carousell things i guess
* add msaa carousell to test
* oops
* Update progress-pc.gc
* make `pc-get-screen-size` (untested)
* resolution menu
* input fixes
* return when selecting resolution
* scroll fixes
* Update progress-pc.gc
* add "fit to screen" button
* bug
* complete resolutions menu
* aspect ratio menu
* subtitles language
* subtitle speaker
* final adjustments
* ref test
* fix tests
* fix ref!
* reduce redundancy a bit
* fix mem leaks?
* save settings on progress exit
* fix init reorder
* remove unused code
* rename goal project-like files to the project extension
* sha display toggle
* aspect ratio settings fixes
* dont store text db's in compiler
* properly save+load native aspect stuff
* decompile 90% of shrubbery
* some more progress
* some more
* big function decompiled
* went through `draw-prototype-inline-array-shrub` and made more notes
* shrub: start implementing extract_shrub
* read through current notes and add the info to current decomp
* decomp: allow skipping inline-asm from output
* add code to BspHeader to get GOAL types for shrubs
* add doc
* wip
* fix bad merge
Co-authored-by: Tyler Wilding <xtvaser@gmail.com>
Co-authored-by: Tyler Wilding <xTVaser@users.noreply.github.com>
* add ocean-vu0 mips2c and decomp ocean-texture
* vu1 texture setup
* temp
* unoptimized version working
* optimized version by default
* update ref test
* bug & crash fixes
* relax fog hack slightly
* buff particles more
* borderless hack
* tone down sprite hack
* int consts in `deftype` + increase sparticle queue
* move a menu button around
* clang + test fixes
* less confusing image
* add test for new deftype feature
* begin generic merc
* more generic stuff
* generic dma generation not crashing, at least until high-speed-reject
* c
* unpacker for generic
* starting to work
* small fixes
* more fixes
* more progress
* cleanup
* fix tests
* no custom imgui assert on windows
* decomp: `eye` close just need a pile of casts for the rendering code
* stash
* decomp: `eye` mostly cleaned up, xmm reg issue with `pextlb`
* waitin
* update ref tests and gsrc
* update reference tests
* delete unused shaders
* hide some options in debug menu
* change fullscreen logic a bit
* add "all actors" toggle
* borderless fix and fix alpha in direct renderer untextured (do we need a separate shader for that?)
* fix fuel cell orbit icons in widescreen
* fix `curve` types
* refs
* fix levitator task...
* fix some task stuff
* update font code a bit (temp)
* cmake, third-party and visual studio overhaul
* Update .gitmodules
* update modules
* clone repos
* fix encoding in zydis
* where did these come from
* try again
* add submodule
* Update 11zip
* Update 11zip
* Update 11zip
* delete
* try again
* clang
* update compiler flags
* delete 11zip. go away.
* Create memory-dump-p2s.py
* properly
* fix minimum architecture c++ compiler flags
* fix zydis
* oops
* Update all-types.gc
* fix clang-cl tests
* make "all actors" work better, entity debug qol
* update game-text conversion code to be more modularized
* Create vendor.txt
* fix typos and minor things
* update refs
* clang
* Attempt to add clang-cl support to vs2019 and CI
* vs2022 + clang-cl
* srsly? fix clang build
* Update launch.vs.json
* extend windows CI timer
* merc dma generation
* wip very early version of merc
* small fixes
* fix
* fix more merc bugs
* derp fixed min
* oops we did need something weird on max
* merc for everything
* program optimization 1
* more optimization
* windows
* windows 2
* clean up
* fix test
* BLERC
* a crapton of fixes
* Update cavecrystal-light.gc
* damn you
* fix bunnies
* change codegen for int -> float cast (just add sign extension now)
* fix test
* this file is tagged anyway
* fix some stack types
* remove bad camera debug funcs
* add more heap bars and entity pick menu
* finish entity menu and make `music-flava` enum
* fix some `process-taskable` fields
* citadel sage crash fix
* fix citadel drop plats
* fix tests
* fix some casts
* update refs
* finish `village3-obs` and `snow-ball`
* Update README.md
* fix sidekick too
* fix issue?
* more entity inspect hardcoded checks
* more
* use `*display-actor-anim*` for something!
* CRAP
* also clear actor anim when deselecting entity
* *display-actor-anim* already renders this!
* do not display `path` tag info
* entity debug inspect tool
* one more
* make debug string even larger
* missing res tag types
* more polish and more known tags
* last few
* also add a new sprite renderer
* claaaang
* goal build fix
* fix tests, add stack singleton option
* make all event-message-blocks the same
* diskboot
* decomp: Add texture-upload to ref tests
* maybe 50% done?
* 5 functions to go!
* decomp: stuck in `navigate`
* work-around fp issue
* some cleanup and label casts
* working on supporting asm instructions -- this is currently WRONG
* support ASM operations
* fixes for asm op support
* decomp: finish the vast majority of `navigate`
* format
* update test though i think this suggests a regression!
* decomp: cleanup some more of navigate
* decomp: finish `rolling-lightning-mole`
* revert `r0` handling for `pcpyud` and `pextuw`
* update ref tests
* lint
* fix a failing test
* help
* navigate mostly works now, with some potential bugs
* remove my debugging logs
* update ref tests
* review feedback cleanup
* these are all likely fine
* can't get the crab to chase me anymore
* the crab is back
* [decompiler] `defpart` and `defpartgroup`
* support sounds in part defs natively
* make `meters_to_string`
* update refs
* clang
* make macros in pair only work inside `(unquote ...`
* update source
* update finish
* fix
* fill collide cache with bounding box working
* yprobe fully working for background at least
* target
* final cleanup, add a bit more foreground mesh stuff that is untested
* warnings, merge issues
* tests
* revert debug changes, format'
* rendering perf
* some cleanup and docs on collide-touch and the tie extractor
* temp
* more updates
* update ref tests
* type fix
* rest of collide shape
* another set of updates
* cleanup: cleanup all-types and all state definitions
* these are fine
* these are fine
* these are fine
* everything is fine
* gsrc updated
* remove define-externs in gsrc
* decomp: finish `target-racer`
target-racing-turn-anim was the `cond` issue here
* decomp: finish `target-tube`
target-tube-turn-anim was the issue here
* temp
* temp
* wip
* more progress on the instance asm
* first half of tie extraction, up to dma lists
* more tie extraction
* first part figured out maybe
* bp1 loop seems to work, bp2 loop does not
* bp1 and bp2 appear working. sadly ip is needed
* ip1 outline, not working ip2
* just kidding, ip2 seems to work
* extraction seems to work
* basic rendering working
* tie fixes
* performance optimization of tie renderer
* hook up tie to engine
* fix more bugs
* cleanup and perf improvements
* fix tests
* ref tests
* mm256i for gcc
* CLANG
* windows
* more compile fixes
* fix fast time of day
* small fixes
* fix after merge
* clang
* update jak 2 config and hack to make game text dumpable
* update stuff
* update src
* do `cspace<-parented-transformq-joint!`
* progress.... kind of...
* more drawable stuff
* clagng
* bones begin
* more bones
* even more bones
* everything builds
* touches
* errors
* ?
* fix `quicksandlurker`
* updates
* update refs
* more fixes
* update refs
* some fixes, but no file unblocked completely yet - `balloonlurker` is close
* decomp: finish `vol` - i did it!...i think
* decomp: finish `helix-water`
* decomp: finish `minecart`
* fix `define-perm`s