From 8baed2e87cdbdf577463702bbf68bce90119ca44 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elias=20M=C3=BCller?= Date: Sun, 8 Nov 2026 16:21:37 +0100 Subject: [PATCH] floor test explainer image (needle triangle, accepted sliver, kuzco, heights), poly 11 is the same needle on the crate's other side --- notes/geometry.md | 4 + notes/img/floor_explained_t1l4m002.png | Bin 0 -> 86162 bytes tools/floorviz.py | 129 +++++++++++++++++++++++++ 3 files changed, 133 insertions(+) create mode 100644 notes/img/floor_explained_t1l4m002.png create mode 100644 tools/floorviz.py diff --git a/notes/geometry.md b/notes/geometry.md index 71df9a5..23827b2 100644 --- a/notes/geometry.md +++ b/notes/geometry.md @@ -91,6 +91,10 @@ and are set on load. * Collision queries: `FUN_004036d0` (floor/ceiling against the map tiles), `FUN_00403ad0` (the same floor test against strat objects with a collision model, not walls – see the floor test section below), `FUN_004042f0`, `FUN_004046e0`. Only **the tiles of the grid cell the player stands in** are tested (cell list from MAP), point relative to the tile's B position, rotated by −rot. ### Floor test: inclusion rule and the floating-next-to-the-log case + +![top and side view of the needle triangle next to the crate](img/floor_explained_t1l4m002.png) + +The crate has two such needles, one per long side: poly 15 (z 43.68–43.73, measured live) and poly 11 (z 43.29–43.38, same shape, where a user got stuck). Drawn with `tools/floorviz.py`. (2026-11-08, from the decompile + objdump of 0x4036d0–0x403ad0, a bit-exact Python re-implementation `tools/floortest.py`, and live reads in game. [certain] unless marked.) diff --git a/notes/img/floor_explained_t1l4m002.png b/notes/img/floor_explained_t1l4m002.png new file mode 100644 index 0000000000000000000000000000000000000000..5362bea4999c33411eacb2f0dfc833d0fd48c28d GIT binary patch literal 86162 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 E7x_*mEdT%j literal 0 HcmV?d00001 diff --git a/tools/floorviz.py b/tools/floorviz.py new file mode 100644 index 0000000..2517338 --- /dev/null +++ b/tools/floorviz.py @@ -0,0 +1,129 @@ +# Draws notes/img/floor_explained_t1l4m002.png: floorviz.py (needs Pillow) +import sys +sys.path.insert(0, '/home/elias/projects/llamamod/tools') +import geomlib as G, floortest as F +from PIL import Image, ImageDraw, ImageFont + +WAD = sys.argv[1]; OUT = sys.argv[2] +ch, wf, trak, mp = G.load_level(WAD) +T = 443 +x, y, z, rot, mi, _ = mp['A'][T] +f, _ = G.tile_xform(x, y, z, rot) +b = mp['B'][T] +recs = [r for g in trak[mp['midx'][T]].coll for r in g] + +# world polygons (x, height, z) of up-facing floors of tile 443 +polys = [] +k = 0 +for g, grp in enumerate(trak[mi].coll): + for r in grp: + c = G.coll_decode(r); pts = G.coll_polygon(c) + if len(pts) >= 3 and c['plane'][1] > 0.2: + W = [f(*p) for p in pts]; W = [(p[0], p[1], -p[2]) for p in W] + polys.append((k, c['mat'], c['plane'][1], W)) + k += 1 + +KX, KY, KZ = 57.204, 2.474, 43.733 +X0, X1, Z0, Z1 = 56.98, 57.86, 43.56, 43.86 +S = 1700 # px per unit +PADL, PADT = 70, 120 +w = int((X1 - X0) * S) + PADL + 40; h = int((Z1 - Z0) * S) + PADT + 60 +def P(px, pz): return (PADL + (px - X0) * S, PADT + (Z1 - pz) * S) + +img = Image.new('RGB', (w, h), 'white') +d = ImageDraw.Draw(img, 'RGBA') +try: + font = ImageFont.truetype('DejaVuSans.ttf', 18); fb = ImageFont.truetype('DejaVuSans-Bold.ttf', 20); fs = ImageFont.truetype('DejaVuSans.ttf', 15); ft = ImageFont.truetype('DejaVuSans-Bold.ttf', 24) +except Exception: + font = fb = fs = ft = ImageFont.load_default() + +# accepted region of poly 15 at path height (exact engine test), sampled +ly = int(round((2.27 + 0) * 4096)) - b[4] + F.PROBE +step = 0.0015 +zz = Z0 +while zz < Z1: + xx = X0 + while xx < X1: + px, pz = int(round(xx * 4096)), int(round(zz * 4096)) + if (px >> 12, pz >> 12) == (b[3] >> 12, b[5] >> 12): + lx, lz = F.to_local(px, pz, b) + best = None + for i, r in enumerate(recs): + if r[1] == 0x11: continue + res = F.test_poly(r, lx, ly, lz) + if res is None or res[0] < -0x80: continue + if res[2] and (best is None or res[0] < best[0]): best = (res[0], i) + if best and best[1] == 15: + a = P(xx, zz); d.rectangle([a[0], a[1] - step * S, a[0] + step * S, a[1]], fill=(255, 120, 160, 150)) + xx += step + zz += step + +# polygons +for k, mat, ny, W in polys: + pts = [P(p[0], p[2]) for p in W] + if k == 15: col, wid, fill = (210, 0, 0), 4, (255, 0, 0, 40) + elif k == 2: col, wid, fill = (0, 90, 220), 3, (0, 90, 220, 25) + else: col, wid, fill = (150, 150, 150), 2, None + if fill: d.polygon(pts, fill=fill) + d.line(pts + [pts[0]], fill=col, width=wid) + cx = sum(p[0] for p in pts) / len(pts); cy = sum(p[1] for p in pts) / len(pts) + if X0 < sum(p[0] for p in W) / len(W) < X1 and Z0 < sum(p[2] for p in W) / len(W) < Z1: + lab = f'poly {k} · mat {mat}' + if k in (2, 15) or True: + d.text((cx - 50, cy - 10), lab, fill=col if k in (2, 15) else (110, 110, 110), font=fb if k in (2, 15) else fs) + +# needle tip and Kuzco +TIPX, TIPZ = 57.315, 43.729 +t = P(TIPX, TIPZ); kp = P(KX, KZ) +d.ellipse([kp[0] - 9, kp[1] - 9, kp[0] + 9, kp[1] + 9], fill=(200, 0, 200), outline='black') +d.text((kp[0] - 70, kp[1] + 14), 'Kuzco\nx 57.204 z 43.733', fill=(150, 0, 150), font=fb) +d.ellipse([t[0] - 5, t[1] - 5, t[0] + 5, t[1] + 5], fill=(210, 0, 0)) +d.text((t[0] + 8, t[1] - 52), 'needle tip (13.5°)', fill=(210, 0, 0), font=font) +# distance Kuzco -> tip +d.line([kp[0], kp[1] - 40, t[0], t[1] - 40], fill='black', width=2) +for xq in (kp[0], t[0]): d.line([xq, kp[1] - 48, xq, kp[1] - 32], fill='black', width=2) +d.text(((kp[0] + t[0]) / 2 - 60, kp[1] - 70), '0.11 outside poly 15', fill='black', font=font) +# sliver length +s0 = P(57.125, 43.70) +d.line([s0[0], s0[1] + 55, t[0], s0[1] + 55], fill=(200, 60, 110), width=2) +for xq in (s0[0], t[0]): d.line([xq, s0[1] + 47, xq, s0[1] + 63], fill=(200, 60, 110), width=2) +d.text((s0[0] + 10, s0[1] + 62), 'invisible sliver: ~0.19 long, ~0.01 wide', fill=(200, 60, 110), font=font) + +# title / legend +d.text((PADL, 18), 'Jungle Day 2 (t1l4m002) · tile 443 · top view of the floor collision next to the crate', fill='black', font=ft) +d.text((PADL, 56), 'red = poly 15 (steep needle triangle, mat 0) blue = poly 2 (path, mat 0) grey = other floor polygons ' + 'pink = where the engine still accepts poly 15 (edge tolerance)', fill=(60, 60, 60), font=fs) +d.text((PADL, 80), 'x →, z ↑, 1 unit = 1 grid cell (Kuzco is ~0.6 tall)', fill=(60, 60, 60), font=fs) + +# side view +top = img +img = Image.new('RGB', (w, 520), 'white') +d = ImageDraw.Draw(img, 'RGBA') +oy = 30 +d.text((PADL, oy - 10), 'Side view at Kuzco\'s position: which height the game picks', fill='black', font=ft) +base = oy + 440; hs = 520 +def H(v): return base - (v - 2.15) * hs +xl, xr = PADL + 60, PADL + 900 +d.line([xl, H(2.270), xr, H(2.270)], fill=(0, 90, 220), width=5) +d.text((xr + 10, H(2.270) - 12), 'poly 2 (path) under Kuzco: height 2.270', fill=(0, 90, 220), font=font) +d.line([xl, H(2.270) + 150 * 0, xl, H(2.270)], fill='white') +# extended plane of poly 15 (slope ny 0.51 -> steep), drawn as dashed line +for i in range(0, 840, 24): + d.line([xl + i, H(2.474), xl + i + 12, H(2.474)], fill=(210, 0, 0), width=4) +d.text((xr + 10, H(2.474) - 12), 'poly 15 plane extended to Kuzco: 2.474 ← chosen (highest)', fill=(210, 0, 0), font=font) +d.line([xl + 450, H(2.474), xl + 450, H(2.270)], fill='black', width=2) +d.text((xl + 460, (H(2.474) + H(2.270)) / 2 - 10), '0.20 in the air', fill='black', font=fb) +pr = 2.270 + 0.25 +for i in range(0, 840, 10): + d.point((xl + i, H(2.474 + 0.25)), fill=(120, 120, 120)) +d.text((xr + 10, H(2.474 + 0.25) - 10), 'probe = feet + 0.25 (floors up to here count)', fill=(110, 110, 110), font=fs) +# kuzco figure +kx = xl + 300 +d.rectangle([kx - 18, H(2.474 + 0.6), kx + 18, H(2.474)], outline=(200, 0, 200), width=3) +d.text((kx - 30, H(2.474 + 0.6) - 26), 'Kuzco (~0.6)', fill=(150, 0, 150), font=font) +side = img +out = Image.new('RGB', (w, top.height + side.height + 10), (200, 200, 200)) +out.paste(top, (0, 0)); out.paste(side, (0, top.height + 10)) +out.save(OUT) +img = out +print('saved', OUT, img.size)