mirror of
https://github.com/open-goal/jak-project
synced 2026-05-30 17:06:23 -04:00
7dbacc72d3
I hope this is everything I needed, and nothing I didn't. ## What's Changed This update adds a command-line parameter to goalc, `--iso-path`. Providing a path to a directory like `D:\Files\Repositories\ArchipelaGOAL\iso_data\jak1` will inform the compiler to use that directory instead. ## Why is this useful? When combined with `--proj-path`, the compiler can be pointed to a completely different project folder, given the `(mi)` command, and immediately begin building from that directory, with everything it needs. This eliminates the need to copy `iso_data` to multiple `data` directories. If a subsequent change to the Launcher is made, each mod could be passed an --iso-path pointing to a single shared folder, allowing mods to each run their own REPL _without_ requiring a copy of `iso_data` in a subfolder. ## Independent testing required! My local repositories are a little suspect, with a mod, a fork of mod-base, and a fork of jak-project, all on the same drive. My decompiler_out and iso_data folders are in the mod repo, not mod-base nor jak-project. So what I did was make the change in the mod-base fork, point `--proj-path and --iso-path` to the mod folders, and then ran `(mi)`. The output showed a build starting with no errors. Then I had to create this PR, which my fork of mod-base is unable to do, so I created a patch file, forked jak-project, then applied the patch there. All this is to say that it would be preferable if someone could apply this code to their own installation and see if it works. Even I wouldn't take my own word for this. --------- Co-authored-by: Tyler Wilding <xtvaser@gmail.com>
65 lines
2.0 KiB
C++
65 lines
2.0 KiB
C++
#pragma once
|
|
|
|
#include <optional>
|
|
#include <string>
|
|
#include <unordered_map>
|
|
#include <vector>
|
|
|
|
#include "common/versions/versions.h"
|
|
|
|
#include "third-party/json.hpp"
|
|
|
|
using json = nlohmann::json;
|
|
|
|
namespace REPL {
|
|
struct KeyBind {
|
|
// NOTE - in my experience, meta doesn't work on windows and shift is probably a bad idea when
|
|
// typing text! but I leave it up to the user.
|
|
enum class Modifier { CTRL, SHIFT, META };
|
|
Modifier modifier;
|
|
std::string key;
|
|
std::string description;
|
|
std::string command;
|
|
|
|
std::string string() const;
|
|
};
|
|
void to_json(json& j, const KeyBind& obj);
|
|
void from_json(const json& j, KeyBind& obj);
|
|
|
|
// TODO - per-game config
|
|
struct Config {
|
|
GameVersion game_version;
|
|
Config(GameVersion _game_version) : game_version(_game_version){};
|
|
|
|
// this is the default REPL configuration
|
|
int nrepl_port = 8181;
|
|
int temp_nrepl_port = -1;
|
|
std::string game_version_folder;
|
|
int target_connect_attempts = 30;
|
|
std::vector<std::string> asm_file_search_dirs = {};
|
|
bool append_keybinds = true;
|
|
std::vector<KeyBind> keybinds = {
|
|
{KeyBind::Modifier::CTRL, "T", "Starts up the game runtime", "(test-play)"},
|
|
{KeyBind::Modifier::CTRL, "Q", "Exit the REPL", "(e)"},
|
|
{KeyBind::Modifier::CTRL, "L", "Listen to an available game process", "(lt)"},
|
|
{KeyBind::Modifier::CTRL, "W",
|
|
"Halt the attached process so you can re-launch a crashed game", "(:stop)"},
|
|
{KeyBind::Modifier::CTRL, "G", "Attach the debugger to the process", "(dbgc)"},
|
|
{KeyBind::Modifier::CTRL, "B", "Displays the most recently caught backtrace", "(:di)"},
|
|
{KeyBind::Modifier::CTRL, "N", "Full build of the game", "(mi)"}};
|
|
bool per_game_history = true;
|
|
bool permissive_redefinitions = false;
|
|
std::string iso_path;
|
|
|
|
int get_nrepl_port() {
|
|
if (temp_nrepl_port != -1) {
|
|
return temp_nrepl_port;
|
|
}
|
|
return nrepl_port;
|
|
}
|
|
};
|
|
void to_json(json& j, const Config& obj);
|
|
void from_json(const json& j, Config& obj);
|
|
|
|
} // namespace REPL
|