g/j2: Dynamic speedrun mode categories and implement a significant amount of a practice mode (#3378)

For example, `AppData/OpenGOAL/jak2/features/speedrun-categories.json`
is defined as such:
```json
[
  {
    "cheats": 0,
    "completed_task": 0,
    "continue_point_name": "",
    "features": 0,
    "forbidden_features": 992,
    "name": "Gunless",
    "secrets": 0
  },
  {
    "cheats": 1,
    "completed_task": 29,
    "continue_point_name": "ctypal-shaft",
    "features": 1024,
    "forbidden_features": 0,
    "name": "Turbo Jetboard - After Praxis 1",
    "secrets": 0
  }
]
```
> These entries can be created using the in-game menu as well.


https://github.com/open-goal/jak-project/assets/13153231/9b17a116-4aa9-40ad-b9f5-02b04e0ad4f3

---------

Co-authored-by: dallmeyer <2515356+dallmeyer@users.noreply.github.com>
This commit is contained in:
Tyler Wilding
2024-02-23 19:04:44 -05:00
committed by GitHub
parent 685ff2cf1c
commit db66ae4627
20 changed files with 2122 additions and 800 deletions
+7
View File
@@ -98,6 +98,13 @@ fs::path get_user_misc_dir(GameVersion game_version) {
return get_user_config_dir() / game_version_name / "misc";
}
fs::path get_user_features_dir(GameVersion game_version) {
auto game_version_name = game_version_names[game_version];
auto path = get_user_config_dir() / game_version_name / "features";
file_util::create_dir_if_needed(path);
return path;
}
struct {
bool initialized = false;
fs::path path_to_data;