Map as a file
This commit is contained in:
@@ -7,7 +7,8 @@
|
||||
Generates DCF + companion DMF files from raw chunk JSON files, or upgrades
|
||||
legacy DCF files (version 1 or 2) to the current version.
|
||||
|
||||
JSON input (assetsraw/chunks/chunk_X_Y_Z.json):
|
||||
JSON input (assetsraw/<map>/chunks/chunk_X_Y_Z.json, one subdirectory per
|
||||
map - e.g. assetsraw/overworld/chunks/):
|
||||
{
|
||||
"tiles": [
|
||||
{ "pos": [x, y, z], "type": <tile_shape_int>, "tile": <uv_tile_int> }
|
||||
@@ -25,8 +26,8 @@ JSON input (assetsraw/chunks/chunk_X_Y_Z.json):
|
||||
Mesh files are located by searching under assets/meshes/ and referenced by
|
||||
path from the assets root in the DCF.
|
||||
|
||||
Output DCF is derived automatically:
|
||||
assetsraw/chunks/chunk_X_Y_Z.json -> assets/chunks/X_Y_Z.dcf
|
||||
Output DCF is derived automatically, preserving the map subdirectory:
|
||||
assetsraw/<map>/chunks/chunk_X_Y_Z.json -> assets/<map>/chunks/X_Y_Z.dcf
|
||||
|
||||
Version 4 DCF format (after 8-byte header):
|
||||
tile_t tiles[CHUNK_WIDTH * CHUNK_HEIGHT] (one per x/y column)
|
||||
@@ -45,7 +46,7 @@ DMF format:
|
||||
Each vertex: uv[2] + pos[3] = 5 x float32 LE = 20 bytes
|
||||
|
||||
Usage:
|
||||
python3 -m tools.asset.chunk # process all assetsraw/chunks/*.json
|
||||
python3 -m tools.asset.chunk # process all assetsraw/*/chunks/*.json
|
||||
python3 -m tools.asset.chunk <file.json> # process one JSON file
|
||||
python3 -m tools.asset.chunk <file.dcf> # upgrade legacy (v1/v2) DCF in-place
|
||||
"""
|
||||
@@ -143,7 +144,7 @@ def write_model_json(path, mesh_rel, texture_rel, color):
|
||||
|
||||
|
||||
def derive_dcf_path(json_path):
|
||||
"""assetsraw/chunks/chunk_X_Y_Z.json -> assets/chunks/X_Y_Z.dcf"""
|
||||
"""assetsraw/<map>/chunks/chunk_X_Y_Z.json -> assets/<map>/chunks/X_Y_Z.dcf"""
|
||||
base = os.path.splitext(os.path.basename(json_path))[0]
|
||||
if base.startswith('chunk_'):
|
||||
base = base[len('chunk_'):]
|
||||
@@ -432,17 +433,15 @@ def main():
|
||||
args = sys.argv[1:]
|
||||
|
||||
if not args:
|
||||
chunks_dir = os.path.join(ASSETSRAW_DIR, 'chunks')
|
||||
if not os.path.isdir(chunks_dir):
|
||||
print(f"No directory found: {chunks_dir}")
|
||||
sys.exit(1)
|
||||
json_files = sorted(
|
||||
os.path.join(chunks_dir, f)
|
||||
for f in os.listdir(chunks_dir)
|
||||
os.path.join(dirpath, f)
|
||||
for dirpath, _, filenames in os.walk(ASSETSRAW_DIR)
|
||||
if os.path.basename(dirpath) == 'chunks'
|
||||
for f in filenames
|
||||
if f.endswith('.json')
|
||||
)
|
||||
if not json_files:
|
||||
print(f"No JSON files found in {chunks_dir}")
|
||||
print(f"No chunk JSON files found under {ASSETSRAW_DIR}")
|
||||
sys.exit(0)
|
||||
for p in json_files:
|
||||
process_json(p)
|
||||
|
||||
Reference in New Issue
Block a user