launcher: wizard bar follows the copied megabytes, saves table shows 4 rows at the minimum size, mods tab keeps focus and caret when it is rebuilt, take-over notice expires; geom_export previews in game space; apptest checks every menu step with longer holds, loads slot 2, retries an early crash once and records load

This commit is contained in:
MineTec committed 2026-11-07 14:00:22 +01:00
1 parent d030c9c6c7
commit d6f84be125
19 files changed
+650 -67

No files matched your search

+11 -2
View File
@@ -9,7 +9,8 @@ Writes to outdir:
page_NN.png texture pages (256x256, from TEXT)
collision.obj (--collision) collision polygons, grouped by material
objects.obj (--objects) static STPC object models side by side
preview_top.png, preview_persp.png textured software renderings for checking
preview_top.png, preview_persp.png textured software renderings for checking (game space,
the same way round as in the game)
Coordinates: OBJ file space = game space (x, y, z_game): right-handed, y up, z > 0 in the grid, as
Blender shows the level the same way round as the game (geomlib.to_file). --export-space writes
@@ -101,6 +102,11 @@ def write_mtl(path, tris, texs, npages):
# ------------------------------------------------------------ software renderer
def game_space_tris(tris):
"""world_tris (export space) -> game space for the right-handed preview camera."""
return [([G.to_file(p) for p in P], *rest) for P, *rest in tris]
def render(tris, pages, cam, size, path, texs):
Wd, Hd = size
eye, target, fov = cam
@@ -237,10 +243,13 @@ def main():
for k, im in enumerate(imgs):
Image.fromarray(im).save(os.path.join(a.outdir, f'page_{k:02d}.png'))
size = tuple(int(s) for s in a.size.split('x'))
# the renderer's camera is right-handed: game space shows the level as the game does
# (export space would come out mirrored); also with --export-space
tris = game_space_tris(tris)
P = np.array([p for t in tris for p in t[0]])
lo, hi = P.min(0), P.max(0); c = (lo + hi) / 2
ext = max(hi[0] - lo[0], hi[2] - lo[2])
# top view (almost vertical, north = -z at the top)
# top view (almost vertical, game -z at the top)
render(tris, imgs, ((c[0], hi[1] + ext * 1.2, c[2] + 0.01), (c[0], lo[1], c[2]), 50), size,
os.path.join(a.outdir, 'preview_top.png'), texs)
render(tris, imgs, ((c[0] + ext * 0.35, hi[1] + ext * 0.45, hi[2] + ext * 0.45), tuple(c), 60), size,