mirror of
https://github.com/open-goal/jak-project
synced 2026-05-23 06:54:31 -04:00
710f3ac117
Custom levels for Jak 2/3 now support envmapped TIE geometry. The TIE extract was also changed to ignore materials that have the specular flag set, but are missing a roughness texture. Jak 2/3 now also support the `build-actor` tool. The `build-custom-level` and `build-actor` macros now have a few new options: - Both now have a `force-run` option (`#f` by default) that, when set to `#t`, will always run level/art group generation even if the output files are up to date. - `build-custom-level` has a `gen-fr3` option (`#t` by default) that, when set to `#f`, will skip generating the FR3 file for the custom level and only generate the GOAL level file to skip the potentially slow process of finding and adding art groups and textures. Useful for when you want to temporarily edit only the GOAL side of the level (such as entity placement, etc.). - `build-actor` has a `texture-bucket` option (default 0) which will determine what DMA sink group the model will be placed in, which is useful to determine the draw order of the model. Previously, this was omitted, resulting in shadows not drawing over custom actors because the actors were put in a bucket that is drawn after shadows (this behavior can be restored with `:texture-bucket #f`).
77 lines
2.4 KiB
C++
77 lines
2.4 KiB
C++
#include "common/log/log.h"
|
|
#include "common/util/Assert.h"
|
|
#include "common/util/FileUtil.h"
|
|
#include "common/versions/versions.h"
|
|
|
|
#include "goalc/build_level/jak1/build_level.h"
|
|
#include "goalc/build_level/jak2/build_level.h"
|
|
#include "goalc/build_level/jak3/build_level.h"
|
|
|
|
#include "third-party/CLI11.hpp"
|
|
|
|
// debug tool to run only build_level.
|
|
int main(int argc, char** argv) {
|
|
// logging
|
|
lg::set_stdout_level(lg::level::info);
|
|
lg::set_flush_level(lg::level::info);
|
|
lg::initialize();
|
|
|
|
// game version
|
|
std::string game, input_json, output_file;
|
|
bool gen_fr3 = true;
|
|
fs::path project_path_override;
|
|
|
|
// path
|
|
if (!file_util::setup_project_path(std::nullopt)) {
|
|
return 1;
|
|
}
|
|
|
|
lg::info("Build Level Tool", versions::GOAL_VERSION_MAJOR, versions::GOAL_VERSION_MINOR);
|
|
|
|
CLI::App app{"OpenGOAL Compiler / REPL"};
|
|
app.add_option(
|
|
"input-json", input_json,
|
|
"Input JSON file (for example, custom_assets/jak2/levels/test-zone/test-zone.jsonc)")
|
|
->required();
|
|
app.add_option("output-file", output_file,
|
|
"Output .go file, (for example out/jak2/obj/test-zone.go)")
|
|
->required();
|
|
app.add_option("-g,--game", game, "Game version (jak1, jak2 or jak3)")->required();
|
|
app.add_option("--proj-path", project_path_override,
|
|
"Specify the location of the 'data/' folder");
|
|
app.add_flag("--fr3", gen_fr3, "Generate FR3 file for this level (default true)");
|
|
app.validate_positionals();
|
|
CLI11_PARSE(app, argc, argv);
|
|
|
|
GameVersion game_version = game_name_to_version(game);
|
|
|
|
if (!project_path_override.empty()) {
|
|
if (!fs::exists(project_path_override)) {
|
|
lg::error("Error: project path override '{}' does not exist", project_path_override.string());
|
|
return 1;
|
|
}
|
|
if (!file_util::setup_project_path(project_path_override)) {
|
|
lg::error("Could not setup project path!");
|
|
return 1;
|
|
}
|
|
} else if (!file_util::setup_project_path(std::nullopt)) {
|
|
return 1;
|
|
}
|
|
|
|
switch (game_version) {
|
|
case GameVersion::Jak1:
|
|
jak1::run_build_level(input_json, output_file, "jak1/", gen_fr3);
|
|
break;
|
|
case GameVersion::Jak2:
|
|
jak2::run_build_level(input_json, output_file, "jak2/", gen_fr3);
|
|
break;
|
|
case GameVersion::Jak3:
|
|
jak3::run_build_level(input_json, output_file, "jak3/", gen_fr3);
|
|
break;
|
|
default:
|
|
ASSERT_NOT_REACHED_MSG("unsupported game version");
|
|
}
|
|
|
|
return 0;
|
|
}
|