Initial commit

This commit is contained in:
Quintine committed 2026-09-08 07:37:52 +10:00
commit 8c709fb52f
771 files changed
+222983

No files matched your search

+29
View File
@@ -0,0 +1,29 @@
"""Convert the MIT-licensed Truthsayer geometry; see THIRD_PARTY_NOTICES.md."""
import json, math
from pathlib import Path
src=json.load(open('/tmp/dune-config.json'))['generated']
rocks={'false_wall_south','false_wall_east','false_wall_west','shield_wall','pasty_mesa','sihaya_ridge','hole_in_the_rock','rim_wall_west','harg_pass'}
strongholds={'arrakeen','carthag','tueks_sietch','sietch_tabr','habbanya_ridge_sietch'}
rename={'habbanya_ridge_sietch':'Habbanya Sietch','tueks_sietch':"Tuek’s Sietch"}
result=[]
for id,sectors in src['location_regions'].items():
if id=='arrakis':continue
pts=src['territories']['polygons'][id]
result.append({'id':id,'name':rename.get(id,id.replace('_',' ').title()),'sectors':[0] if id=='polar_sink' else sorted(int(x[1:]) for x in sectors),'type':'polar' if id=='polar_sink' else 'stronghold' if id in strongholds else 'rock' if id in rocks else 'sand','points':pts,'center':[round(sum(p[i] for p in pts)/len(pts),1) for i in range(2)],'neighbors':sorted(set(b if a==id else a for a,b in src['neighbors'] if (a==id or b==id) and a!='arrakis' and b!='arrakis'))})
Path('game/board-data.json').write_text(json.dumps(result,separators=(',',':'))+'\n')
graph={}
for id,entries in src['neighborhoods'].items():
if id=='arrakis':continue
if id=='polar_sink':
graph['polar_sink:0']=sorted(set(f'{dest}:{int(sec[1:])}' for entry in entries.values() for dest,secs in entry.items() if dest not in ('arrakis','polar_sink') for sec in secs))
else:
for sec,entry in entries.items():
key=f'{id}:{int(sec[1:])}'
graph[key]=sorted(set('polar_sink:0' if dest=='polar_sink' else f'{dest}:{int(s[1:])}' for dest,secs in entry.items() if dest!='arrakis' for s in secs if dest!=id or s!=sec))
# Enforce symmetric board edges. The source approximates connectivity geometrically;
# printed-board verification remains required before claiming full compliance.
for a,edges in list(graph.items()):
for b in edges:
if b in graph and a not in graph[b]:graph[b].append(a)
Path('game/board-graph.json').write_text(json.dumps(graph,separators=(',',':'))+'\n')
Path('THIRD_PARTY_NOTICES.md').write_text('Board geometry and connectivity adapted from https://github.com/marekyggdrasil/truthsayer (main). No raster artwork is included.\n\n'+Path('/tmp/truthsayer-license').read_text())