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:
1 parent
d030c9c6c7
commit
d6f84be125
19 files changed
+650
-67
No files matched your search
+11
-2
@@ -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,
|
||||
|
||||
Reference in new issue
Block a user