CHUNK STUFF
This commit is contained in:
@@ -0,0 +1,4 @@
|
||||
# Copyright (c) 2026 Dominic Masters
|
||||
#
|
||||
# This software is released under the MIT License.
|
||||
# https://opensource.org/licenses/MIT
|
||||
@@ -0,0 +1,69 @@
|
||||
# Copyright (c) 2026 Dominic Masters
|
||||
#
|
||||
# This software is released under the MIT License.
|
||||
# https://opensource.org/licenses/MIT
|
||||
|
||||
"""
|
||||
Writes DMF (Dusk Mesh Format) files.
|
||||
|
||||
DMF format:
|
||||
Bytes 0-3: DMF\x00 (magic)
|
||||
Bytes 4-7: uint32_t version = 1 (little-endian)
|
||||
Bytes 8-11: uint32_t vertCount (little-endian)
|
||||
Bytes 12+: meshvertex_t vertices[vertCount]
|
||||
Each vertex is 20 bytes: uv[2] + pos[3] (5 floats, LE)
|
||||
|
||||
Usage:
|
||||
python3 -m tools.asset.dmf <output.dmf> <vertices.bin>
|
||||
Reads raw vertex bytes from vertices.bin and writes a DMF file.
|
||||
"""
|
||||
|
||||
import struct
|
||||
import sys
|
||||
import os
|
||||
|
||||
MAGIC = b'DMF\x00'
|
||||
VERSION = 1
|
||||
VERTEX_SIZE = 20
|
||||
|
||||
|
||||
def write_dmf(path, vertex_bytes):
|
||||
if len(vertex_bytes) % VERTEX_SIZE != 0:
|
||||
raise ValueError(
|
||||
f"Vertex data size {len(vertex_bytes)} is not a "
|
||||
f"multiple of {VERTEX_SIZE}"
|
||||
)
|
||||
vert_count = len(vertex_bytes) // VERTEX_SIZE
|
||||
buf = bytearray()
|
||||
buf += MAGIC
|
||||
buf += struct.pack('<I', VERSION)
|
||||
buf += struct.pack('<I', vert_count)
|
||||
buf += vertex_bytes
|
||||
with open(path, 'wb') as f:
|
||||
f.write(buf)
|
||||
print(
|
||||
f'Wrote {path}: {vert_count} vertices, {len(buf)} bytes'
|
||||
)
|
||||
return vert_count
|
||||
|
||||
|
||||
def main():
|
||||
args = sys.argv[1:]
|
||||
if len(args) != 2:
|
||||
print(
|
||||
"Usage: python3 -m tools.asset.dmf "
|
||||
"<output.dmf> <vertices.bin>"
|
||||
)
|
||||
sys.exit(1)
|
||||
|
||||
dst = args[0]
|
||||
src = args[1]
|
||||
|
||||
with open(src, 'rb') as f:
|
||||
vertex_bytes = f.read()
|
||||
|
||||
write_dmf(dst, vertex_bytes)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
Reference in New Issue
Block a user