Commit
the-way-out
docs: the-way-out v1.0.5 — responsive project logo (Orbitron)
modified .gitignore
@@ -20,6 +20,7 @@ assets/background/test_bg_1.png
assets/background/test_bg_2.png
ajhahnde/
.eeco
two-scc.txt
build/
modified CHANGELOG.md
@@ -12,6 +12,26 @@
---
## v1.0.5
Visual identity update. Adds a new responsive project logo in the
Orbitron font, supporting both light and dark modes via a standard
`<picture>` element in the README. Ships with a Swift script to
reproducibly regenerate the assets. No gameplay, save-file, or
build-tooling changes.
### Project
- **Responsive Logo.** The README now features a high-fidelity
Orbitron logo that automatically switches between a black version
(light mode) and a white version (dark mode).
- **`scripts/render_logo.swift`** — new Swift script using `AppKit` to
render the project title into pixel-perfect PNG assets. Ensures the
visual identity can be regenerated or modified without external
design tools.
- **README Header Update.** Replaced the `<h1>` title with the new
responsive logo block.
## v1.0.4
Formal versioning policy at the repository root, wired into the
modified README.md
@@ -1,12 +1,15 @@
<div align="center">
<h1>The Way Out</h1>
<picture>
<source media="(prefers-color-scheme: dark)" srcset="assets/logo_dark.png">
<img alt="The Way Out" src="assets/logo_light.png" width="600">
</picture>
<h3>A top-down pixel-art escape-room shooter.</h3>
<p>
<a href="https://github.com/ajhahnde/the-way-out/actions/workflows/ci.yml"><img src="https://github.com/ajhahnde/the-way-out/actions/workflows/ci.yml/badge.svg?branch=main" alt="CI"></a>
<img src="https://img.shields.io/badge/version-v1.0.4-blue" alt="Version">
<img src="https://img.shields.io/badge/version-v1.0.5-blue" alt="Version">
<img src="https://img.shields.io/badge/license-Apache%202.0-green" alt="License">
<img src="https://img.shields.io/badge/python-3.12+-orange" alt="Python 3.12+">
<img src="https://img.shields.io/badge/target-macOS-lightgrey" alt="macOS">
modified VERSION
@@ -1 +1 @@
v1.0.4
v1.0.5
added assets/logo_dark.png
binary file — no preview
added assets/logo_light.png
binary file — no preview
modified pyproject.toml
@@ -1,6 +1,6 @@
[project]
name = "the-way-out"
version = "1.0.4"
version = "1.0.5"
description = "A top-down pixel-art escape-room shooter."
readme = "README.md"
license = { text = "Apache-2.0" }
added scripts/render_logo.swift
@@ -0,0 +1,58 @@
import AppKit
import Foundation
/// Renders the project logo using the Orbitron font.
/// Usage: swift scripts/render_logo.swift
let text = "THE WAY OUT"
let fontName = "Orbitron"
let fontSize: CGFloat = 160
let kern = 8.0
let padding: CGFloat = 40
func render(color: NSColor, filename: String) {
guard let font = NSFont(name: fontName, size: fontSize) else {
print("Error: Font '\(fontName)' not found. Please install it first.")
exit(1)
}
let attributes: [NSAttributedString.Key: Any] = [
.font: font,
.foregroundColor: color,
.kern: kern
]
let attributedString = NSAttributedString(string: text, attributes: attributes)
let textSize = attributedString.size()
let imageSize = NSSize(width: textSize.width + padding * 2, height: textSize.height + padding * 2)
let image = NSImage(size: imageSize)
image.lockFocus()
// Draw text with optical centering adjustment if needed,
// but here we just use the padding.
attributedString.draw(at: NSPoint(x: padding, y: padding))
image.unlockFocus()
guard let tiffData = image.tiffRepresentation,
let bitmap = NSBitmapImageRep(data: tiffData),
let pngData = bitmap.representation(using: .png, properties: [:]) else {
print("Error: Failed to generate PNG data for \(filename)")
return
}
let url = URL(fileURLWithPath: "assets/\(filename)")
do {
try pngData.write(to: url)
print("✓ Generated assets/\(filename)")
} catch {
print("Error: Failed to write \(filename): \(error)")
}
}
// Generate light mode logo (black text)
render(color: .black, filename: "logo_light.png")
// Generate dark mode logo (white text)
render(color: .white, filename: "logo_dark.png")