mirror of
https://github.com/open-goal/jak-project
synced 2026-08-09 18:58:50 -04:00
8fbd85b0fc
If long_name is too long, it will result in the level being invisible but the collide loading, lets detect this and point the user in correct direction to solve it with a clear error message. --------- Co-authored-by: Hat Kid <6624576+Hat-Kid@users.noreply.github.com>
198 lines
8.2 KiB
JSON
198 lines
8.2 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.
|
|
// The long_name must also be 10 characters or fewer.
|
|
"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,
|
|
// sky textures and cases where you want to use objects drawn with the generic renderer,
|
|
// which also requires you to set a texture remap table and a list of tpages.
|
|
// 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.
|
|
// The format is ["tpage-name", "texture-name1", "texture-name2", ...].
|
|
// If you want all textures from a tpage, you can just do ["tpage-name"].
|
|
"textures": [
|
|
// Zoomer HUD textures
|
|
// ["zoomerhud"],
|
|
// Sandover sky textures
|
|
["village1-vis-alpha"]
|
|
],
|
|
|
|
// Which vanilla level's texture remap table to use.
|
|
// This is needed if you want to have proper textures for objects that are drawn using generic, such as
|
|
// dark eco pools or dying enemies. If you choose to use this,
|
|
// the order of art groups and tpages in your level's .gd MUST match the vanilla level's for the textures to work.
|
|
"tex_remap": "village1",
|
|
|
|
// Which sky to use for your custom level. This needs to be the name of a vanilla level with sky textures.
|
|
// Your level's mood update needs to be set up to copy the sky texture (update-mood-default already handles this as an example).
|
|
// You also need to add a specific tpage to your level .gd depending on the level you chose:
|
|
// training: tpage-1308.go
|
|
// village1: tpage-401.go
|
|
// beach: tpage-215.go
|
|
// jungle: tpage-388.go
|
|
// misty: tpage-520.go
|
|
// firecanyon: tpage-1123.go
|
|
// village2: tpage-921.go
|
|
// rolling: tpage-925.go
|
|
// sunkenb: tpage-162.go
|
|
// swamp: tpage-630.go
|
|
// ogre: tpage-1117.go
|
|
// village3: tpage-1194.go
|
|
// snow: tpage-712.go
|
|
// finalboss: tpage-1418.go
|
|
// The tpage you choose also has to be in the alpha (4th) slot in the "tpages" list below.
|
|
"sky": "village1",
|
|
|
|
// Any texture pages that are added to the level's "texture-ids" array.
|
|
// These will be logged in and linked as part of level loading.
|
|
// There are five tpage categories, in this order:
|
|
// - tfrag
|
|
// - pris
|
|
// - shrub
|
|
// - alpha
|
|
// - water
|
|
// This is also (with the exception of levels that use the zoomer) the order that the tpages are listed in in the vanilla .gd files.
|
|
// You need to also add these to your level .gd as well.
|
|
// Sky textures use the alpha slot.
|
|
// If this is empty and "tex_remap" and "sky" are the same level, this will be auto-filled with the tpages from the
|
|
// corresponding level (check its .gd file for the art group/tpage order to copy over).
|
|
"tpages": [],
|
|
|
|
// 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.136], // 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.136, 10], // bounding sphere
|
|
"lump": {
|
|
"name": "test-crate",
|
|
"crate-type": "'steel",
|
|
"eco-info": ["eco-info", "(pickup-type money)", 10]
|
|
}
|
|
},
|
|
|
|
{
|
|
"trans": [-5.463, 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.463, 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"
|
|
// }
|
|
// }
|
|
]
|
|
}
|