Adding a help button
This commit is contained in:
@@ -0,0 +1,99 @@
|
|||||||
|
ÜBER DIE APP
|
||||||
|
────────────
|
||||||
|
Diese App führt die klassische deutsche C64-Rollenspielreihe Schwert und
|
||||||
|
Magie über den VICE-C64-Emulator aus. Eine gekoppelte Pebble-Watch-App
|
||||||
|
kann den Spielbildschirm anzeigen und Tastendrücke per Bluetooth übertragen.
|
||||||
|
|
||||||
|
|
||||||
|
MENÜ ☰
|
||||||
|
───────
|
||||||
|
Öffnet das linke Seitenmenü zur Verwaltung von Disketten und Einstellungen.
|
||||||
|
|
||||||
|
|
||||||
|
SPIELFOLGEN (DISKETTEN)
|
||||||
|
───────────────────────
|
||||||
|
Auf eine Folge tippen, um das Spiel zu laden und automatisch zu starten.
|
||||||
|
Der C64 wird zurückgesetzt und startet direkt in die gewählte Episode.
|
||||||
|
B-Seiten (Folge 2, 4, 6, 8) sind erst verfügbar, nachdem die zugehörige
|
||||||
|
A-Seite in dieser Sitzung mindestens einmal gespielt wurde.
|
||||||
|
|
||||||
|
|
||||||
|
HELDENDISKETTEN
|
||||||
|
───────────────
|
||||||
|
Persönliche Speicherdisketten, die ohne Maschinenneustart gewechselt werden.
|
||||||
|
Mit „Neu" eine leere Heldendiskette erstellen. Die Heldendiskette speichert
|
||||||
|
den Charakter über alle acht Folgen hinweg — gut aufbewahren!
|
||||||
|
|
||||||
|
|
||||||
|
RESET
|
||||||
|
─────
|
||||||
|
Wirft die aktuelle Diskette aus und setzt den C64 kalt auf den BASIC-Prompt
|
||||||
|
zurück. Nach einem Reset starten Spieldisketten beim nächsten Antippen
|
||||||
|
wieder automatisch.
|
||||||
|
|
||||||
|
|
||||||
|
TON
|
||||||
|
───
|
||||||
|
Schaltet die SID-Audioausgabe ein oder aus. Standardmäßig deaktiviert.
|
||||||
|
|
||||||
|
|
||||||
|
DISKETTEN IMPORTIEREN
|
||||||
|
─────────────────────
|
||||||
|
Importiert .D64-Disk-Images aus dem Gerätespeicher. Alle vier Images
|
||||||
|
(SCHWUM1–SCHWUM4) müssen importiert werden, bevor die Folgen verfügbar sind.
|
||||||
|
|
||||||
|
|
||||||
|
BILDSCHIRMTASTATUR
|
||||||
|
──────────────────
|
||||||
|
Einmal auf SHF tippen, um die Umschalttaste dauerhaft zu aktivieren (Taste
|
||||||
|
leuchtet auf). Erneut auf SHF tippen zum Deaktivieren. Alle anderen Tasten
|
||||||
|
reagieren normal auf Berühren und Loslassen.
|
||||||
|
|
||||||
|
|
||||||
|
ARBEITSABLAUF
|
||||||
|
─────────────
|
||||||
|
1. .D64-Disk-Images über „Disketten importieren" laden
|
||||||
|
2. Eine Spieldiskette antippen — das Spiel startet automatisch
|
||||||
|
3. Wenn das Spiel nach der Heldendiskette fragt, im Menü eine Held-
|
||||||
|
Diskette auswählen (Heißtausch, kein Reset)
|
||||||
|
4. Nach Abschluss die Spieldiskette im Menü wieder einlegen
|
||||||
|
(ebenfalls Heißtausch)
|
||||||
|
5. Reset nur verwenden, wenn ein vollständiger Neustart nötig ist
|
||||||
|
|
||||||
|
|
||||||
|
────────────────────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
|
|
||||||
|
SCHWERT UND MAGIE — GESCHICHTE
|
||||||
|
───────────────────────────────
|
||||||
|
Schwert und Magie ist eine Reihe von acht Rollenspielen, die von der
|
||||||
|
German Design Group (GDG) entwickelt und zwischen 1989 und 1992 von
|
||||||
|
CP Verlag für den Commodore 64 veröffentlicht wurde.
|
||||||
|
|
||||||
|
In einer mittelalterlichen Fantasiewelt folgt die Reihe einem Helden,
|
||||||
|
dessen Fortschritt auf einer persönlichen Diskette gespeichert und über
|
||||||
|
alle acht Folgen mitgeführt wird. Je zwei Episoden befinden sich auf einer
|
||||||
|
doppelseitigen Diskette: die A-Seite startet die erste, die B-Seite die
|
||||||
|
zweite Episode.
|
||||||
|
|
||||||
|
Die Spiele zeichneten sich durch aufwendige Grafiken, atmosphärische
|
||||||
|
SID-Musik und eine persistente gemeinsame Spielwelt aus — zur damaligen
|
||||||
|
Zeit eine Besonderheit auf Heimcomputern. Ein einziger Held konnte mit
|
||||||
|
allen erworbenen Fähigkeiten und Ausrüstungsgegenständen nahtlos von
|
||||||
|
Episode zu Episode übertragen werden, was der Reihe den Charakter einer
|
||||||
|
durchgehenden Kampagne gab.
|
||||||
|
|
||||||
|
Die Serie wurde zu einem geliebten Klassiker in der deutschsprachigen
|
||||||
|
C64-Gemeinschaft und gilt als Meilenstein der frühen deutschen
|
||||||
|
Spieleentwicklung.
|
||||||
|
|
||||||
|
Die acht Folgen:
|
||||||
|
|
||||||
|
1. Das geheimnisvolle Kraut
|
||||||
|
2. Der unheimliche Tempel
|
||||||
|
3. Das Piratenhaus
|
||||||
|
4. Die Burg des Magiers
|
||||||
|
5. Das Haus des Vampirs
|
||||||
|
6. Der Turm des Todes
|
||||||
|
7. Unter Wasser
|
||||||
|
8. Insel der Wunder
|
||||||
@@ -0,0 +1,95 @@
|
|||||||
|
ABOUT
|
||||||
|
─────
|
||||||
|
This app runs the classic German C64 RPG series Schwert und Magie through
|
||||||
|
the VICE C64 emulator. A paired Pebble watchapp can display the game screen
|
||||||
|
and relay button presses over Bluetooth.
|
||||||
|
|
||||||
|
|
||||||
|
DRAWER ☰
|
||||||
|
─────────
|
||||||
|
Open the left drawer to manage disks and settings.
|
||||||
|
|
||||||
|
|
||||||
|
EPISODE DISKS (DISKETTEN)
|
||||||
|
─────────────────────────
|
||||||
|
Tap an episode to load and autostart the game. The C64 resets and boots
|
||||||
|
directly into the selected episode. B-side episodes (Folge 2, 4, 6, 8) are
|
||||||
|
only available after their A-side has been played at least once in this
|
||||||
|
session.
|
||||||
|
|
||||||
|
|
||||||
|
HERO DISKS (HELDEN-DISKETTEN)
|
||||||
|
──────────────────────────────
|
||||||
|
Personal save disks that are hot-swapped without resetting the machine.
|
||||||
|
Tap "Neu" to create a blank hero disk. Your hero disk stores your character
|
||||||
|
across all eight episodes — keep it safe.
|
||||||
|
|
||||||
|
|
||||||
|
RESET
|
||||||
|
─────
|
||||||
|
Ejects the current disk and power-cycles the C64 to the BASIC prompt.
|
||||||
|
After a reset, episode disks autostart again when tapped.
|
||||||
|
|
||||||
|
|
||||||
|
SOUND
|
||||||
|
─────
|
||||||
|
Toggles SID audio output. Off by default.
|
||||||
|
|
||||||
|
|
||||||
|
IMPORT DISKS
|
||||||
|
────────────
|
||||||
|
Import .D64 disk image files from device storage. All four disk images
|
||||||
|
(SCHWUM1–SCHWUM4) must be imported before their episodes become available.
|
||||||
|
|
||||||
|
|
||||||
|
VIRTUAL KEYBOARD
|
||||||
|
────────────────
|
||||||
|
Tap SHF once to lock Shift on (the key stays highlighted). Tap SHF again
|
||||||
|
to release. All other keys fire on touch and release normally.
|
||||||
|
|
||||||
|
|
||||||
|
WORKFLOW
|
||||||
|
────────
|
||||||
|
1. Import your .D64 disk images via Import Disks
|
||||||
|
2. Tap an episode disk — the game autostarts
|
||||||
|
3. When the game asks for your hero disk, open the drawer and select a
|
||||||
|
Held disk (hot-swap, no reset)
|
||||||
|
4. When done with the hero disk, swap back to the episode disk from the
|
||||||
|
drawer (also a hot-swap)
|
||||||
|
5. Use Reset only when you need a clean cold start
|
||||||
|
|
||||||
|
|
||||||
|
────────────────────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
|
|
||||||
|
SCHWERT UND MAGIE — HISTORY
|
||||||
|
────────────────────────────
|
||||||
|
Schwert und Magie (Sword and Magic) is a series of eight role-playing games
|
||||||
|
developed by German Design Group (GDG) and published by CP Verlag between
|
||||||
|
1989 and 1992 for the Commodore 64.
|
||||||
|
|
||||||
|
Set in a medieval fantasy world, the series follows a hero whose progress
|
||||||
|
is saved on a personal floppy disk and carried across all eight episodes.
|
||||||
|
Each pair of episodes ships on one double-sided disk, with the A-side
|
||||||
|
launching the first episode and the B-side continuing the story.
|
||||||
|
|
||||||
|
The games were notable for their richly drawn graphics, atmospheric SID
|
||||||
|
music, and a persistent shared world — a rarity on home computers of the
|
||||||
|
era. A single hero character, with all earned skills and equipment, could
|
||||||
|
be transferred seamlessly from one episode to the next, giving the series
|
||||||
|
the feel of a continuous campaign rather than isolated adventures.
|
||||||
|
|
||||||
|
The series became a beloved classic in the German-speaking C64 community
|
||||||
|
and stands as a landmark of early German game development, remembered
|
||||||
|
fondly alongside other GDG titles for its ambition and production quality.
|
||||||
|
|
||||||
|
The eight episodes:
|
||||||
|
|
||||||
|
1. Das geheimnisvolle Kraut (The Mysterious Herb)
|
||||||
|
2. Der unheimliche Tempel (The Eerie Temple)
|
||||||
|
3. Das Piratenhaus (The Pirate House)
|
||||||
|
4. Die Burg des Magiers (The Wizard's Castle)
|
||||||
|
5. Das Haus des Vampirs (The House of the Vampire)
|
||||||
|
6. Der Turm des Todes (The Tower of Death)
|
||||||
|
7. Unter Wasser (Underwater)
|
||||||
|
8. Insel der Wunder (Island of Wonders)
|
||||||
+36
@@ -147,6 +147,8 @@ class MainActivity : AppCompatActivity() {
|
|||||||
drawerLayout.openDrawer(GravityCompat.START)
|
drawerLayout.openDrawer(GravityCompat.START)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
findViewById<Button>(R.id.btn_help).setOnClickListener { showHelp() }
|
||||||
|
|
||||||
findViewById<Button>(R.id.btn_import_disks).setOnClickListener {
|
findViewById<Button>(R.id.btn_import_disks).setOnClickListener {
|
||||||
launchPicker(diskPickerLauncher, "Select SCHWUM disk images", multiSelect = true)
|
launchPicker(diskPickerLauncher, "Select SCHWUM disk images", multiSelect = true)
|
||||||
}
|
}
|
||||||
@@ -458,6 +460,40 @@ class MainActivity : AppCompatActivity() {
|
|||||||
|
|
||||||
// ---- helpers ------------------------------------------------------------
|
// ---- helpers ------------------------------------------------------------
|
||||||
|
|
||||||
|
private fun showHelp() {
|
||||||
|
fun load(german: Boolean) = try {
|
||||||
|
assets.open(if (german) "help_de.md" else "help_en.md").bufferedReader().readText()
|
||||||
|
} catch (e: Exception) { "Help text unavailable." }
|
||||||
|
|
||||||
|
var german = true
|
||||||
|
|
||||||
|
val tv = android.widget.TextView(this).apply {
|
||||||
|
text = load(true)
|
||||||
|
typeface = android.graphics.Typeface.MONOSPACE
|
||||||
|
textSize = 12f
|
||||||
|
setTextColor(Color.parseColor("#DDDDDD"))
|
||||||
|
val p = (16 * resources.displayMetrics.density).toInt()
|
||||||
|
setPadding(p, p, p, p)
|
||||||
|
}
|
||||||
|
val scroll = android.widget.ScrollView(this).apply {
|
||||||
|
addView(tv)
|
||||||
|
setBackgroundColor(Color.parseColor("#1A1A2E"))
|
||||||
|
}
|
||||||
|
val dialog = AlertDialog.Builder(this)
|
||||||
|
.setTitle("Schwert und Magie auf Pebble")
|
||||||
|
.setView(scroll)
|
||||||
|
.setPositiveButton("OK", null)
|
||||||
|
.setNeutralButton("English", null)
|
||||||
|
.show()
|
||||||
|
|
||||||
|
dialog.getButton(AlertDialog.BUTTON_NEUTRAL).setOnClickListener {
|
||||||
|
german = !german
|
||||||
|
tv.text = load(german)
|
||||||
|
scroll.scrollTo(0, 0)
|
||||||
|
(it as android.widget.Button).text = if (german) "English" else "Deutsch"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun appendLog(entry: String) {
|
private fun appendLog(entry: String) {
|
||||||
val ts = timeFormat.format(Date())
|
val ts = timeFormat.format(Date())
|
||||||
tvLog.text = "[$ts] $entry\n${tvLog.text}"
|
tvLog.text = "[$ts] $entry\n${tvLog.text}"
|
||||||
|
|||||||
@@ -50,6 +50,16 @@
|
|||||||
android:layout_width="12dp"
|
android:layout_width="12dp"
|
||||||
android:layout_height="12dp"
|
android:layout_height="12dp"
|
||||||
android:layout_marginEnd="4dp" />
|
android:layout_marginEnd="4dp" />
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:id="@+id/btn_help"
|
||||||
|
style="?attr/materialButtonOutlinedStyle"
|
||||||
|
android:layout_width="36dp"
|
||||||
|
android:layout_height="36dp"
|
||||||
|
android:minWidth="0dp"
|
||||||
|
android:padding="0dp"
|
||||||
|
android:text="?"
|
||||||
|
android:textSize="16sp" />
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<!-- C64 display (320×200, scaled with correct aspect ratio) -->
|
<!-- C64 display (320×200, scaled with correct aspect ratio) -->
|
||||||
|
|||||||
Reference in New Issue
Block a user