Adding a README
This commit is contained in:
@@ -0,0 +1,146 @@
|
||||
<p align="center">
|
||||
<img src="SchwertUndMagieOnPebbleCompanionApp/res/app-icon-round.png" width="290" alt="App icon">
|
||||
</p>
|
||||
|
||||
# Schwert und Magie on Pebble
|
||||
|
||||
A port of the classic German C64 text-adventure RPG series **Schwert und Magie**
|
||||
(German Design Group, 1989–1992) to the Pebble Time 2 smartwatch.
|
||||
|
||||
## Architecture
|
||||
|
||||
The phone runs VICE 3.8 as a companion app and streams the C64 text screen to
|
||||
the watch. Button presses on the watch flow back to VICE via Bluetooth.
|
||||
|
||||

|
||||
|
||||
## The game
|
||||
|
||||
*Schwert und Magie* is an 8-episode text-adventure / RPG series for the
|
||||
Commodore 64, published in German by boeder-Verlag. Two episodes share one
|
||||
disk:
|
||||
|
||||
| Disk | Episodes |
|
||||
|------|----------|
|
||||
| I | Folge 1: Das geheimnisvolle Kraut · Folge 2: Der unheimliche Tempel |
|
||||
| II | Folge 3: Das Piratenhaus · Folge 4: Die Burg des Magiers |
|
||||
| III | Folge 5: Das Haus des Vampirs · Folge 6: Der Turm des Todes |
|
||||
| IV | Folge 7: Unter Wasser · Folge 8: Insel der Wunder |
|
||||
|
||||
The copy-protection scheme asks for a word from the printed *Anleitung*
|
||||
(manual). The app includes the full manual text with a look-up button (📖) so
|
||||
you can answer the prompt without keeping the paper around.
|
||||
|
||||
## Repository layout
|
||||
|
||||
```
|
||||
SchwertUndMagieOnPebbleWatchApp/ Pebble watchapp (C + PebbleKit JS)
|
||||
SchwertUndMagieOnPebbleCompanionApp/ Android companion app (Kotlin + NDK)
|
||||
versions/ Original .d64 disk images (4 disks)
|
||||
docs/ Architecture notes and diagrams
|
||||
dist/ Built APKs (gitignored)
|
||||
```
|
||||
|
||||
## How it works
|
||||
|
||||
Three processes cooperate across two devices:
|
||||
|
||||
```
|
||||
Pebble watch
|
||||
│ Bluetooth AppMessage
|
||||
▼
|
||||
Core for Pebble (on phone) — PebbleKit JS bridge
|
||||
│ HTTP on 127.0.0.1:8888
|
||||
▼
|
||||
Android companion app — NanoHTTPD server
|
||||
│ JNI
|
||||
▼
|
||||
VICE 3.8 (C64 emulator, cross-compiled for ARM64/x86_64)
|
||||
```
|
||||
|
||||
The watch displays the C64 text screen (40×25 cells) in a scroll view and
|
||||
provides a key wheel for the number keys most used by the game. The companion
|
||||
app renders VICE's 320×200 framebuffer on-screen and also provides a virtual
|
||||
C64 keyboard for direct input.
|
||||
|
||||
See [`docs/architecture.md`](docs/architecture.md) for the full design.
|
||||
|
||||
## Requirements
|
||||
|
||||
- **Android phone** running Android 7.0+ (API 24)
|
||||
- **Pebble Time 2** (or any Pebble running firmware 3.x — the `.pbw` targets
|
||||
all SDK 3 platforms)
|
||||
- **Core for Pebble** installed on the phone (the community Pebble app)
|
||||
- **C64 ROM files** — `kernal`, `basic`, `chargen`, `1541` — legally obtained
|
||||
from your own C64 or from Cloanto's C64 Forever. The app prompts you to
|
||||
import them on first launch; they are never bundled.
|
||||
- **Disk images** — `.d64` or `.g64` files for the four game disks. You can
|
||||
import your own or use the in-app **Fetch Disks** button to download
|
||||
community-preserved dumps from the Internet Archive's C64 Preservation
|
||||
Project (requires nibtools, which is cross-compiled automatically).
|
||||
|
||||
## Building
|
||||
|
||||
### Android companion app
|
||||
|
||||
```bash
|
||||
cd SchwertUndMagieOnPebbleCompanionApp
|
||||
./gradlew assembleDebug # debug build
|
||||
./gradlew assembleRelease # signed release build (requires keystore.properties)
|
||||
./gradlew installDebug # build + install on connected device
|
||||
```
|
||||
|
||||
VICE 3.8 and nibtools are cross-compiled automatically the first time — the
|
||||
Gradle `buildVice` and `buildNibtools` tasks unpack the source tarballs from
|
||||
`res/` and build `libvice.a` / `libnibtools.a` for ARM64 and x86_64. The NDK
|
||||
must be installed (Android Studio → SDK Manager → SDK Tools → NDK (Side by
|
||||
side)).
|
||||
|
||||
### Pebble watch app
|
||||
|
||||
```bash
|
||||
cd SchwertUndMagieOnPebbleWatchApp
|
||||
pebble build
|
||||
pebble install --phone <phone-ip>
|
||||
```
|
||||
|
||||
In headless / CI environments add `--vnc` to every emulator command.
|
||||
|
||||
## Getting disk images onto the device
|
||||
|
||||
**Option A — Fetch Disks button** (in-app)
|
||||
Opens a dialog, downloads all 8 episode disks as `.nbz` files from the
|
||||
Internet Archive C64 Preservation Project, and converts them to G64 using
|
||||
nibtools. Requires a network connection; conversion runs on-device.
|
||||
|
||||
**Option B — manual copy**
|
||||
Copy `.d64` or `.g64` files to the app's external files directory via USB or
|
||||
`adb push`, matching the names expected by the drawer (e.g. `SCHWUM1A.D64`).
|
||||
|
||||
## Hero saves
|
||||
|
||||
Hero characters are stored on separate hero disks (up to 3 slots). The app
|
||||
manages these from the drawer — create a new hero disk, load an episode disk,
|
||||
then swap to the hero disk when the game asks for it. A built-in stat editor
|
||||
lets you inspect and edit a saved hero's attributes directly.
|
||||
|
||||
## Save states
|
||||
|
||||
The 💾 button saves or restores a full VICE snapshot (CPU registers, RAM,
|
||||
VICII, SID, CIA) to one of three slots. Snapshots go through a CPU trap to
|
||||
ensure register consistency — see `docs/architecture.md §4.4`.
|
||||
|
||||
## Publishing
|
||||
|
||||
See [`docs/publish.md`](docs/publish.md) for keystore setup, Google Play,
|
||||
F-Droid, and Rebble submission.
|
||||
|
||||
## License
|
||||
|
||||
The watch app and companion app source code in this repository are released
|
||||
under the **MIT License**.
|
||||
|
||||
The *Schwert und Magie* game content (disk images, manual text) remains the
|
||||
property of its original authors and is not part of this license. VICE and
|
||||
nibtools are GPLv2 and are built from source at compile time; their source
|
||||
tarballs in `res/` are not covered by this repository's MIT license.
|
||||
Reference in New Issue
Block a user