Add Windows installer (NSIS) and Linux AppImage packaging; embed PCK in all exports
- export_presets: embed_pck=true for Linux/Windows/macOS -> single self-contained binaries (all game data in one file); build_releases.sh cleans stale .pck - App icon: assets/textures/icon.png (1024) + multi-size icon.ico generated by tools/generate_textures.py; copied into packaging/windows and packaging/linux - packaging/windows/step-line.nsi: NSIS installer (shortcuts, uninstaller, registry Add/Remove Programs) output step-line-setup-<ver>.exe - packaging/linux: step-line.desktop, AppRun, step-line.appdata.xml, build_appimage.sh (appimagetool, APPIMAGE_EXTRACT_AND_RUN) -> step-line-<ver>-x86_64.AppImage - CI build job now packages NSIS installer + AppImage alongside binaries; publish glob already uploads them - Local end-to-end verification: embedded exports rebuilt, AppImage built and run headless (0 script errors); suite 57/57 - README Downloads table lists installer/AppImage/portable rows; RELEASING documents packaging; TODO/DONE synced
This commit is contained in:
1 parent
07d79ac115
commit
ba76c0febf
17 files changed
+261
-10
No files matched your search
@@ -159,8 +159,7 @@ def vignette():
|
||||
px[x, y] = int(255 * (t * t))
|
||||
save(img, "vignette.png")
|
||||
|
||||
def icon(name, draw_fn):
|
||||
size = 64
|
||||
def icon(name, draw_fn, size=64):
|
||||
img = Image.new("RGBA", (size, size), (0, 0, 0, 0))
|
||||
d = ImageDraw.Draw(img)
|
||||
draw_fn(d, size)
|
||||
@@ -185,6 +184,30 @@ def icons():
|
||||
icon("icons/wand.png", wand)
|
||||
icon("icons/rec_dot.png", rec)
|
||||
|
||||
def app_icon():
|
||||
"""Game app icon: dark badge, gold star, white 'S' — used by desktop/AppImage
|
||||
(PNG) and the Windows installer (ICO)."""
|
||||
def badge(d, s):
|
||||
d.ellipse([2, 2, s-2, s-2], fill=(24, 26, 38, 255))
|
||||
d.ellipse([int(s*0.10), int(s*0.10), int(s*0.90), int(s*0.90)], outline=(120, 130, 170, 255), width=max(2, s//64))
|
||||
# gold star
|
||||
cx, cy, r = s*0.5, s*0.44, s*0.30
|
||||
pts = []
|
||||
for i in range(10):
|
||||
ang = -90 + i * 36
|
||||
rad = r if i % 2 == 0 else r * 0.42
|
||||
import math
|
||||
pts.append((cx + rad * math.cos(math.radians(ang)), cy + rad * math.sin(math.radians(ang))))
|
||||
d.polygon(pts, fill=(255, 205, 80, 255))
|
||||
icon("icon.png", badge, size=1024)
|
||||
icon("icon.ico", badge, size=256)
|
||||
|
||||
# multi-size ICO for Windows (from the 256 render)
|
||||
src = Image.open(os.path.join(ASSETS, "icon.png"))
|
||||
ico_path = os.path.join(ASSETS, "icon.ico")
|
||||
src.save(ico_path, format="ICO", sizes=[(256, 256), (128, 128), (64, 64), (48, 48), (32, 32), (16, 16)])
|
||||
print("wrote assets/textures/icon.ico (multi-size)")
|
||||
|
||||
def cards():
|
||||
CW, CH = 256, 128
|
||||
def base(card_name, bg, label, band=(0,0,0,0)):
|
||||
@@ -220,5 +243,6 @@ if __name__ == "__main__":
|
||||
skyline()
|
||||
vignette()
|
||||
icons()
|
||||
app_icon()
|
||||
cards()
|
||||
print("done")
|
||||
Reference in new issue
Block a user