mirror of
https://github.com/open-goal/jak-project
synced 2026-05-25 15:25:31 -04:00
d3cc739e43
This attempts to get into master whatever work was done in this PR / it's earlier PR https://github.com/open-goal/jak-project/pull/3965 I don't want this work to be lost / floating around in massive PRs. However the changes are: - switch to ntsc_v1 instead of PAL as the development target, as we have done for all other games - remove most of the copied-from-jak2/3 changes as they need to be confirmed during the decompilation process not just assumed - avoids committing any changes to `game/kernel/common` as it was not clear to me if these were changes made in jak x's kernel that were not properly broken out into it's own functions. We don't want to accidentally introduce bugs into jak1-3's kernel code. - in other words, if the change in the kernel only happens in jak x...it should likely be specific to jak x's kernel, not common. --------- Co-authored-by: VodBox <dillon@vodbox.io> Co-authored-by: yodah <greenboyyodah@gmail.com>
216 lines
11 KiB
YAML
216 lines
11 KiB
YAML
version: 3
|
|
|
|
includes:
|
|
build: ./scripts/tasks/Taskfile_{{OS}}.yml
|
|
|
|
dotenv:
|
|
- ./scripts/tasks/.env
|
|
- ./scripts/tasks/.env.default
|
|
|
|
tasks:
|
|
# SETTINGS / CONFIGURATION
|
|
settings:
|
|
- '{{.PYTHON}} ./scripts/tasks/update-env.py --info'
|
|
set-game-jak1:
|
|
- '{{.PYTHON}} ./scripts/tasks/update-env.py --game jak1'
|
|
set-game-jak2:
|
|
- '{{.PYTHON}} ./scripts/tasks/update-env.py --game jak2'
|
|
set-game-jak3:
|
|
- '{{.PYTHON}} ./scripts/tasks/update-env.py --game jak3'
|
|
set-game-jakx:
|
|
- '{{.PYTHON}} ./scripts/tasks/update-env.py --game jakx'
|
|
set-decomp-ntscv1:
|
|
desc: "aka black label"
|
|
cmds:
|
|
- '{{.PYTHON}} ./scripts/tasks/update-env.py --decomp_config ntscv1'
|
|
set-decomp-ntscv2:
|
|
desc: "aka red label"
|
|
cmds:
|
|
- '{{.PYTHON}} ./scripts/tasks/update-env.py --decomp_config ntscv2'
|
|
set-decomp-pal:
|
|
desc: "PAL region version"
|
|
cmds:
|
|
- '{{.PYTHON}} ./scripts/tasks/update-env.py --decomp_config pal'
|
|
set-decomp-ntscjp:
|
|
desc: "NTSC-J region version"
|
|
cmds:
|
|
- '{{.PYTHON}} ./scripts/tasks/update-env.py --decomp_config ntscjp'
|
|
set-decomp-ntscko:
|
|
desc: "NTSC-K region version"
|
|
cmds:
|
|
- '{{.PYTHON}} ./scripts/tasks/update-env.py --decomp_config ntscko'
|
|
# GENERAL
|
|
extract:
|
|
desc: "Extracts the game's assets from './iso_data' with the set decompiler config"
|
|
preconditions:
|
|
- sh: test -f {{.DECOMP_BIN_RELEASE_DIR}}/decompiler{{.EXE_FILE_EXTENSION}}
|
|
msg: "Couldn't locate decompiler executable in '{{.DECOMP_BIN_RELEASE_DIR}}/decompiler'"
|
|
cmds:
|
|
- "{{.DECOMP_BIN_RELEASE_DIR}}/decompiler \"./decompiler/config/{{.DECOMP_CONFIG}}\" \"./iso_data\" \"./decompiler_out\" --version \"{{.DECOMP_CONFIG_VERSION}}\" --config-override '{\"decompile_code\": false, \"levels_extract\": true, \"allowed_objects\": []}'"
|
|
boot-game:
|
|
desc: "Boots the game, it will fail if it's not already compiled!"
|
|
preconditions:
|
|
- sh: test -f {{.GK_BIN_RELEASE_DIR}}/gk{{.EXE_FILE_EXTENSION}}
|
|
msg: "Couldn't locate runtime executable in '{{.GK_BIN_RELEASE_DIR}}/gk'"
|
|
cmds:
|
|
- "{{.GK_BIN_RELEASE_DIR}}/gk -v --game {{.GAME}} -- -boot -fakeiso -debug"
|
|
boot-game-retail:
|
|
desc: "Boots the game without debug mode, it will fail if it's not already compiled!"
|
|
preconditions:
|
|
- sh: test -f {{.GK_BIN_RELEASE_DIR}}/gk{{.EXE_FILE_EXTENSION}}
|
|
msg: "Couldn't locate runtime executable in '{{.GK_BIN_RELEASE_DIR}}/gk'"
|
|
cmds:
|
|
- "{{.GK_BIN_RELEASE_DIR}}/gk -v --game {{.GAME}} -- -boot -fakeiso"
|
|
run-game:
|
|
desc: "Start the game's runtime, to start the game itself the REPL is required"
|
|
preconditions:
|
|
- sh: test -f {{.GK_BIN_RELEASE_DIR}}/gk{{.EXE_FILE_EXTENSION}}
|
|
msg: "Couldn't locate runtime executable in '{{.GK_BIN_RELEASE_DIR}}/gk'"
|
|
cmds:
|
|
- "{{.GK_BIN_RELEASE_DIR}}/gk -v --game {{.GAME}} -- -fakeiso -debug"
|
|
# DEVELOPMENT
|
|
gen-cmake:
|
|
desc: "Generate the CMake"
|
|
cmds:
|
|
- "cmake -B build --preset={{.CMAKE_PRESET}}"
|
|
build:
|
|
desc: "Build the project using the generated CMake"
|
|
cmds:
|
|
- "cmake --build build --parallel {{.CMAKE_NUM_THREADS}}"
|
|
repl:
|
|
desc: "Start the REPL"
|
|
preconditions:
|
|
- sh: test -f {{.GOALC_BIN_RELEASE_DIR}}/goalc{{.EXE_FILE_EXTENSION}}
|
|
msg: "Couldn't locate compiler executable in '{{.GOALC_BIN_RELEASE_DIR}}/goalc'"
|
|
cmds:
|
|
- "{{.GOALC_BIN_RELEASE_DIR}}/goalc --user-auto --game {{.GAME}}"
|
|
format-json:
|
|
desc: "Format code"
|
|
cmds:
|
|
# npm install -g prettier
|
|
- cmd: npx prettier --write ./decompiler/config/jak*/**/*.jsonc
|
|
ignore_error: true
|
|
format:
|
|
desc: "Format code"
|
|
cmds:
|
|
- cmd: '{{.PYTHON}} ./scripts/cpp/format-includes.py'
|
|
- cmd: '{{.PYTHON}} ./scripts/ci/lint-trailing-whitespace.py --fix'
|
|
- cmd: '{{.PYTHON}} ./third-party/run-clang-format/run-clang-format.py -r common decompiler game goalc test tools lsp -i'
|
|
- task: format-json
|
|
format-gsrc:
|
|
desc: "Run formatter on gsrc file"
|
|
preconditions:
|
|
- sh: test -f {{.FORMATTER_BIN_RELEASE_DIR}}/formatter{{.EXE_FILE_EXTENSION}}
|
|
msg: "Couldn't locate formatter executable in '{{.FORMATTER_BIN_RELEASE_DIR}}/formatter'"
|
|
cmds:
|
|
- "{{.FORMATTER_BIN_RELEASE_DIR}}/formatter --write --file '{{.FILE}}'"
|
|
# DECOMPILING
|
|
decomp:
|
|
cmds:
|
|
- "{{.DECOMP_BIN_RELEASE_DIR}}/decompiler \"./decompiler/config/{{.DECOMP_CONFIG}}\" \"./iso_data\" \"./decompiler_out\" --version \"{{.DECOMP_CONFIG_VERSION}}\" --config-override '{\"decompile_code\": true, \"levels_extract\": false}'"
|
|
decomp-file:
|
|
cmds:
|
|
- "{{.DECOMP_BIN_RELEASE_DIR}}/decompiler \"./decompiler/config/{{.DECOMP_CONFIG}}\" \"./iso_data\" \"./decompiler_out\" --version \"{{.DECOMP_CONFIG_VERSION}}\" --config-override '{\"decompile_code\": true, \"levels_extract\": false, \"allowed_objects\": [\"{{.FILE}}\"]}'"
|
|
decomp-clean:
|
|
cmds:
|
|
- '{{.PYTHON}} ./scripts/tasks/clean-decomp.py --game "{{.GAME}}"'
|
|
lint-gsrc-file:
|
|
cmds:
|
|
- '{{.PYTHON}} ./scripts/gsrc/lint-gsrc-file.py --game {{.GAME}} --file "{{.FILE}}"'
|
|
update-gsrc:
|
|
cmds:
|
|
- '{{.PYTHON}} ./scripts/gsrc/update-gsrc-via-refs.py --game "{{.GAME}}" --decompiler "{{.DECOMP_BIN_RELEASE_DIR}}/decompiler" --decompiler_config {{.DECOMP_CONFIG}} --version {{.DECOMP_CONFIG_VERSION}}'
|
|
update-gsrc-glob:
|
|
cmds:
|
|
- '{{.PYTHON}} ./scripts/gsrc/update-gsrc-via-refs.py --game "{{.GAME}}" --file_pattern "{{.GLOB}}" --decompiler "{{.DECOMP_BIN_RELEASE_DIR}}/decompiler" --decompiler_config {{.DECOMP_CONFIG}} --version {{.DECOMP_CONFIG_VERSION}}'
|
|
update-gsrc-file:
|
|
cmds:
|
|
- task: decomp-file
|
|
- '{{.PYTHON}} ./scripts/gsrc/update-from-decomp.py --game "{{.GAME}}" --file "{{.FILE}}"'
|
|
- task: lint-gsrc-file
|
|
copy-common-naming:
|
|
cmds:
|
|
- '{{.PYTHON}} ./scripts/gsrc/copy-common-naming.py --file "{{.FILE}}" --decompiler "{{.DECOMP_BIN_RELEASE_DIR}}/decompiler"'
|
|
- task: format-json
|
|
copy-common-naming-from-refs:
|
|
cmds:
|
|
- '{{.PYTHON}} ./scripts/gsrc/copy-common-naming.py --update-names-from-refs --decompiler "{{.DECOMP_BIN_RELEASE_DIR}}/decompiler"'
|
|
- task: format-json
|
|
# ASSET RIPPING
|
|
rip-textures:
|
|
cmds:
|
|
- "{{.DECOMP_BIN_RELEASE_DIR}}/decompiler \"./decompiler/config/{{.DECOMP_CONFIG}}\" \"./iso_data\" \"./decompiler_out\" --version \"{{.DECOMP_CONFIG_VERSION}}\" --config-override '{\"decompile_code\": false, \"levels_extract\": true, \"save_texture_pngs\": true}'"
|
|
rip-levels:
|
|
cmds:
|
|
- "{{.DECOMP_BIN_RELEASE_DIR}}/decompiler \"./decompiler/config/{{.DECOMP_CONFIG}}\" \"./iso_data\" \"./decompiler_out\" --version \"{{.DECOMP_CONFIG_VERSION}}\" --config-override '{\"decompile_code\": false, \"levels_extract\": true, \"rip_levels\": true}'"
|
|
rip-collision:
|
|
cmds:
|
|
- "{{.DECOMP_BIN_RELEASE_DIR}}/decompiler \"./decompiler/config/{{.DECOMP_CONFIG}}\" \"./iso_data\" \"./decompiler_out\" --version \"{{.DECOMP_CONFIG_VERSION}}\" --config-override '{\"decompile_code\": false, \"levels_extract\": true, \"extract_collision\": true, \"rip_collision\": true}'"
|
|
rip-audio:
|
|
cmds:
|
|
- "{{.DECOMP_BIN_RELEASE_DIR}}/decompiler \"./decompiler/config/{{.DECOMP_CONFIG}}\" \"./iso_data\" \"./decompiler_out\" --version \"{{.DECOMP_CONFIG_VERSION}}\" --config-override '{\"decompile_code\": false, \"levels_extract\": true, \"rip_streamed_audio\": true}'"
|
|
# TOOLS
|
|
analyze-ee-memory:
|
|
cmds:
|
|
- '{{.PYTHON}} ./scripts/tasks/extract-zip.py --file "{{.FILE}}" --out ./savestate_out/'
|
|
- '{{.MEMDUMP_BIN_RELEASE_DIR}}/memory_dump_tool ./savestate_out/eeMemory.bin --output-path ./ --game {{.GAME}} > ee-analysis.log'
|
|
watch-pcsx2:
|
|
# {{.PYTHON}} -m pip install -U "watchdog[watchmedo]"
|
|
cmds:
|
|
- watchmedo shell-command --drop --patterns="*.p2s" --recursive --command='task analyze-ee-memory FILE="${watch_src_path}"' "{{.SAVESTATE_DIR}}"
|
|
vars:
|
|
SAVESTATE_DIR: '{{default "." .SAVESTATE_DIR}}'
|
|
type-search:
|
|
desc: Just an example to show it running
|
|
cmds:
|
|
- "{{.TYPESEARCH_BIN_RELEASE_DIR}}/type_searcher --output-path ./search-results.json --game {{.GAME}} --fields '[{\"type\":\"int16\",\"offset\":2},{\"type\":\"int16\",\"offset\":4}]'"
|
|
update-treesitter:
|
|
desc: Updates locally built tree-sitter rules
|
|
cmds:
|
|
- cd ../tree-sitter-opengoal && yarn gen
|
|
- '{{.PYTHON}} ./scripts/tasks/cp.py --src "../tree-sitter-opengoal/src/*" --dest "./third-party/tree-sitter/tree-sitter-opengoal"'
|
|
- '{{.PYTHON}} ./scripts/tasks/cp.py --src "../tree-sitter-opengoal/grammar.js" --dest "./third-party/tree-sitter/tree-sitter-opengoal"'
|
|
fix-translations:
|
|
desc: Finds and tries to fix invalid translation Characters
|
|
cmds:
|
|
- '{{.PYTHON}} ./scripts/ci/lint-autoglottonyms.py --fix'
|
|
- '{{.PYTHON}} ./scripts/ci/lint-characters.py --fix'
|
|
lint:
|
|
cmds:
|
|
- '{{.PYTHON}} ./scripts/ci/lint-trailing-whitespace.py'
|
|
run-gpu-test:
|
|
desc: "Runs the game's built in GPU test"
|
|
preconditions:
|
|
- sh: test -f {{.GK_BIN_RELEASE_DIR}}/gk{{.EXE_FILE_EXTENSION}}
|
|
msg: "Couldn't locate runtime executable in '{{.GK_BIN_RELEASE_DIR}}/gk'"
|
|
cmds:
|
|
- "{{.GK_BIN_RELEASE_DIR}}/gk -v --gpu-test opengl --gpu-test-out-path ./gpu-test.json"
|
|
# TESTS
|
|
offline-tests: # ran by jenkins
|
|
cmds:
|
|
- '{{.OFFLINETEST_BIN_RELEASE_DIR}}/offline-test --iso_data_path "./iso_data/{{.GAME}}" --game {{.GAME}} --fail-on-cmp'
|
|
offline-test-file:
|
|
cmds:
|
|
- '{{.OFFLINETEST_BIN_RELEASE_DIR}}/offline-test --iso_data_path "./iso_data/{{.GAME}}" --game {{.GAME}} --file {{.FILE}}'
|
|
offline-tests-fast:
|
|
cmds:
|
|
- '{{.OFFLINETEST_BIN_RELEASE_DIR}}/offline-test --iso_data_path "./iso_data/{{.GAME}}" --game {{.GAME}} --pretty-print --num_threads 32 --dump_current_output --fail-on-cmp'
|
|
# TODO - amalgamate offline-tests and this task, run twice if the previous step fails
|
|
update-ref-tests:
|
|
cmds:
|
|
- cmd: '{{.PYTHON}} ./scripts/tasks/delete-file-or-folder.py --path failures'
|
|
- cmd: '{{.OFFLINETEST_BIN_RELEASE_DIR}}/offline-test --iso_data_path "./iso_data/{{.GAME}}" --game {{.GAME}} --pretty-print --num_threads 32 --dump_current_output --fail-on-cmp'
|
|
ignore_error: true
|
|
- '{{.PYTHON}} ./scripts/update_decomp_reference.py ./failures ./test/decompiler/reference/ --game {{.GAME}}'
|
|
- task: offline-tests-fast
|
|
update-ref-file:
|
|
cmds:
|
|
- cmd: '{{.PYTHON}} ./scripts/tasks/delete-file-or-folder.py --path failures'
|
|
- cmd: '{{.OFFLINETEST_BIN_RELEASE_DIR}}/offline-test --iso_data_path "./iso_data/{{.GAME}}" --file {{.FILE}} --game {{.GAME}} --dump_current_output --fail-on-cmp'
|
|
ignore_error: true
|
|
- '{{.PYTHON}} ./scripts/update_decomp_reference.py ./failures ./test/decompiler/reference/ --game {{.GAME}}'
|
|
- task: offline-test-file
|
|
type-test:
|
|
cmds:
|
|
- cmd: '{{.GOALCTEST_BIN_RELEASE_DIR}}/goalc-test --gtest_brief=0 --gtest_filter="*{{.TYPE_CONSISTENCY_TEST_FILTER}}*" --gtest_break_on_failure'
|