mirror of
https://github.com/open-goal/jak-project
synced 2026-08-09 18:58:50 -04:00
edae60d58d
This adds support for replacing existing merc models in FR3 files with custom GLB model files. The replacements go in `custom_assets/<GAME>/merc_replacements`, similar to texture replacements. When a `.glb` file with a file name that matches any model present in an FR3 is detected (e.g. `eichar-lod0` for Jak), all merc model data is replaced with the given model. Additionally, models for custom actors can now also be added to vanilla FR3s. The models for this go in `custom_assets/<GAME>/models/<LEVEL_NAME>` (e.g. `custom_assets/jak1/models/jungleb/test-actor-lod0.glb`) and will be added to the FR3 that has a matching name (exception: to add things to the common level file, the folder should be named `common` instead of `GAME`). For custom levels, these now go in `custom_assets/<GAME>/models/custom_levels` (previously `custom_assets/<GAME>/models`). Another small change: When level ripping is enabled, the resulting model files will now be stored in game name subfolders inside of `glb_out`.
157 lines
6.1 KiB
JSON
157 lines
6.1 KiB
JSON
{
|
|
// The "in-game" name of the level. Should be lower case, with dashes (GOAL symbol name)
|
|
// the name of this file, and the folder this file is in must have the same name.
|
|
"long_name": "test-zone",
|
|
// The file name, should be upper case and 8 characters or less.
|
|
"iso_name": "TESTZONE",
|
|
// The nickname, should be exactly 3 characters
|
|
"nickname": "tsz", // 3 char name, all lowercase
|
|
// Background mesh file.
|
|
// Must have vertex colors. Use the blender cycles renderer, bake, diffuse, uncheck color,
|
|
// and bake to vertex colors. For now, only the first vertex color group is used, so make sure you
|
|
// only have 1.
|
|
"gltf_file": "custom_assets/jak1/levels/test-zone/test-zone2.glb",
|
|
|
|
// automatically set wall vs. ground based on angle. Useful if you don't want to assign this yourself
|
|
"automatic_wall_detection": true,
|
|
"automatic_wall_angle": 45.0,
|
|
|
|
// if your mesh has triangles with incorrect orientation, set this to make all collision mesh triangles double sided
|
|
// this makes collision 2x slower and bigger, so only use if really needed
|
|
"double_sided_collide": false,
|
|
|
|
// available res-lump tag types:
|
|
// integer types: int32, uint32, enum-int32, enum-uint32
|
|
// float types: float, meters (1 meter = 4096.0 units), degrees (65536.0 = 360°)
|
|
// vector types: vector (normal floats), vector4m (meters), vector3m (meters with w set to 1.0), vector-vol (normal floats with w in meters), movie-pos (meters with w in degrees)
|
|
// special types: symbol, type, string, eco-info, cell-info, buzzer-info, water-height
|
|
//
|
|
// examples:
|
|
//
|
|
// adds a float tag 'spring-height' with value of 200 meters (1 meter = 4096.0 units):
|
|
// "spring-height": ["meters", 200.0]
|
|
//
|
|
// adds a degrees tag 'rotoffset':
|
|
// "rotoffset": ["degrees", -45.0]
|
|
//
|
|
// adds a movie-pos tag:
|
|
// "movie-pos": ["movie-pos", [100.22, -25.3, 99.5, 180.0]]
|
|
//
|
|
// adds an enum tag 'options':
|
|
// "options": ["enum-int32", "(fact-options large)"]
|
|
//
|
|
// adds a water-height tag:
|
|
// "water-height": ["water-height", 25.0, 0.5, 2.0, "(water-flags wt08 wt03 wt01)"]
|
|
//
|
|
// adds an eco-info tag:
|
|
// "eco-info": ["eco-info", "(pickup-type health)", 2]
|
|
//
|
|
// adds a cell-info tag:
|
|
// "eco-info": ["cell-info", "(game-task training-gimmie)"]
|
|
//
|
|
// adds a buzzer-info tag:
|
|
// "eco-info": ["buzzer-info", "(game-task training-buzzer)", 5]
|
|
//
|
|
// adds a 'symbol' tag (using the 'type' and 'string' lump types works the same way):
|
|
// "symbol-list": ["symbol", "sym-1", "sym-2"]
|
|
|
|
// The base actor id for your custom level. If you have multiple levels, this should be unique!
|
|
"base_id": 100,
|
|
|
|
// All art groups you want to use in your custom level. Will add their models and corresponding textures to the FR3 file.
|
|
// Note: You will still have to add them to your level's .gd file.
|
|
// "art_groups": ["plat-ag"],
|
|
|
|
// If you have any custom models in the "custom_assets/jak1/models/custom_levels" folder that you want to use in your level, add them to this list.
|
|
// Note: Like with art groups, these should also be added to your level's .gd file.
|
|
"custom_models": ["test-actor"],
|
|
|
|
// Any textures you want to include in your custom level. This is mainly useful for things such as the zoomer HUD,
|
|
// which is not in the common level files and has no art group associated with it.
|
|
// To get a list of all the textures, you can extract all of the game's textures
|
|
// by setting "save_texture_pngs" to true in the decompiler config.
|
|
"textures": [
|
|
// all textures required for the zoomer HUD
|
|
// "zoomerhud",
|
|
// "zoomerhud-dial",
|
|
// "zoomerhud-main-02",
|
|
// "zoomerhud-main-03",
|
|
// "zoomerhud-pieslice",
|
|
// "zoomerhud-heatbg-01",
|
|
// "zoomerhud-main-03arrow",
|
|
// "zoomerhud-main-03knob"
|
|
],
|
|
|
|
// Ambients you want to use in your custom level. Ambients can be used for various things like changing the music variation (flava),
|
|
// adding ambient sounds, level name hints, etc.
|
|
"ambients": [
|
|
{
|
|
"trans": [-21.6238, 20.0496, 17.1191, 10.0],
|
|
"bsphere": [-21.6238, 20.0496, 17.1191, 15.0],
|
|
"lump": {
|
|
"name": "test-ambient",
|
|
"type": "'hint",
|
|
"text-id": ["enum-uint32", "(text-id fuel-cell)"], // text id for the "POWER CELL" text
|
|
"play-mode": "'notice"
|
|
}
|
|
}
|
|
],
|
|
|
|
"actors" : [
|
|
{
|
|
"trans": [-21.6238, 20.0496, 17.1191], // translation
|
|
"etype": "fuel-cell", // actor type
|
|
"game_task": "(game-task none)", // associated game task (for powercells, etc)
|
|
"quat": [0, 0, 0, 1], // quaternion
|
|
"bsphere": [-21.6238, 19.3496, 17.1191, 10], // bounding sphere
|
|
"lump": {
|
|
"name": "test-fuel-cell",
|
|
"eco-info": ["cell-info", "(game-task none)"]
|
|
}
|
|
},
|
|
|
|
{
|
|
"trans": [-15.2818, 15.2461, 17.1360], // translation
|
|
"etype": "crate", // actor type
|
|
"game_task": "(game-task none)", // associated game task (for powercells, etc)
|
|
"quat": [0, 0, 0, 1], // quaternion
|
|
"bsphere": [-15.2818, 15.2461, 17.1360, 10], // bounding sphere
|
|
"lump": {
|
|
"name": "test-crate",
|
|
"crate-type": "'steel",
|
|
"eco-info": ["eco-info", "(pickup-type money)", 10]
|
|
}
|
|
},
|
|
|
|
{
|
|
"trans": [-5.4630, 17.4553, 1.6169], // translation
|
|
"etype": "eco-yellow", // actor type
|
|
"game_task": "(game-task none)", // associated game task (for powercells, etc)
|
|
"quat": [0, 0, 0, 1], // quaternion
|
|
"bsphere": [-5.4630, 17.4553, 1.6169, 10], // bounding sphere
|
|
"lump": {
|
|
"name": "test-eco"
|
|
}
|
|
},
|
|
{
|
|
"trans": [-5.41, 3.5, 28.42], // translation
|
|
"etype": "test-actor", // actor type
|
|
"game_task": 0, // associated game task (for powercells, etc)
|
|
"quat": [0, 0, 0, 1], // quaternion
|
|
"bsphere": [-7.41, 3.5, 28.42, 10], // bounding sphere
|
|
"lump": {
|
|
"name": "test-actor"
|
|
}
|
|
}
|
|
// {
|
|
// "trans": [-7.41, 3.5, 28.42], // translation
|
|
// "etype": "plat", // actor type
|
|
// "game_task": "(game-task none)", // associated game task (for powercells, etc)
|
|
// "quat": [0, 0, 0, 1], // quaternion
|
|
// "bsphere": [-7.41, 3.5, 28.42, 10], // bounding sphere
|
|
// "lump": {
|
|
// "name": "test-plat"
|
|
// }
|
|
// }
|
|
]
|
|
} |