Three Kingdoms: Warlord's Fate — complete playable game

- Stylized 3D ink-painting map of China (12 provinces, 32 cities, 17 factions)
- Custom warlord creation (8 origins, banner, starting city) or historical factions
- City management: 7 buildings, 5 dev tiers, recruitment from levies
- Character system: stats, traits, loyalty, relationships, wounds, capture, death, succession
- Turn-based tactical battles with formations, stances, hero skills, cinematic 3D replay
- Sieges: assault, starvation, bribery, infiltration
- Diplomacy with trust memory, alliances, NAPs, trade, marriage, espionage, betrayal
- Scripted diverging history (Dong Zhuo, Guandu, Red Cliffs...) + world crises + court events
- AI factions with distinct personalities; prisoners (execute/release/recruit/ransom)
- Procedural guqin/taiko WebAudio score; save/load; victory + dynasty chronicle screens
- View-relative camera controls; headless test suites (smoke, stress, map validator)
This commit is contained in:
deepseek
2026-08-23 06:59:40 +00:00
commit f040bb6be0
29 changed files with 60362 additions and 0 deletions
+27
View File
@@ -0,0 +1,27 @@
#!/usr/bin/env python3
"""Zoom into a region: upscale, stats, OCR."""
import sys, subprocess
from PIL import Image
import numpy as np
path, x, y, w, h = sys.argv[1], int(sys.argv[2]), int(sys.argv[3]), int(sys.argv[4]), int(sys.argv[5])
scale = int(sys.argv[6]) if len(sys.argv) > 6 else 3
im = Image.open(path).convert("RGB")
W, H = im.size
x0, y0 = max(0, x), max(0, y)
x1, y1 = min(W, x + w), min(H, y + h)
crop = im.crop((x0, y0, x1, y1))
arr = np.asarray(crop).astype(float)
print(f"region ({x0},{y0})-({x1},{y1}): mean RGB={arr.reshape(-1,3).mean(0).round(1)} "
f"lum={0.2126*arr[...,0].mean()/255+0.7152*arr[...,1].mean()/255+0.0722*arr[...,2].mean()/255:.3f} "
f"std={arr.std():.1f} max={arr.max():.0f}")
# brightest structures: threshold above local background
g = np.asarray(crop.convert("L"))
for pct in (99, 99.9):
print(f" p{pct} gray={np.percentile(g, pct):.0f}")
big = crop.resize((crop.width * scale, crop.height * scale), Image.LANCZOS)
big.save("/tmp/crop.png")
p = subprocess.run(["tesseract", "/tmp/crop.png", "stdout", "-l", "eng+chi_sim", "--psm", "11"],
capture_output=True, text=True)
txt = [ln.strip() for ln in p.stdout.splitlines() if ln.strip() and len(ln.strip()) > 1]
print("zoomed OCR:", txt if txt else "(nothing)")