slop game oder so
This commit is contained in:
@@ -0,0 +1,227 @@
|
||||
/**
|
||||
* Alle Spieltexte an einem Ort (Deutsch).
|
||||
*
|
||||
* Tonfall: überzeichnete Propaganda einer frei erfundenen Regierung. Der Spott gilt
|
||||
* Militarismus und Propaganda im Allgemeinen – keine realen Personen, Parteien,
|
||||
* Länder oder Zitate. Namen und Begriffe sind bewusst eigenständig und stammen
|
||||
* aus keinem anderen Spiel oder Film.
|
||||
* @module content/texts
|
||||
*/
|
||||
|
||||
export const TITLE = 'GLORY DEFENSE';
|
||||
export const TAGLINE = 'Für Freiheit und Frieden!';
|
||||
export const PRESIDENT = 'Präsident Maximilian Valor';
|
||||
|
||||
export const MENU = Object.freeze({
|
||||
start: 'Mission starten',
|
||||
highscores: 'Ehrentafel',
|
||||
controls: 'Steuerung',
|
||||
disclaimer: 'Disclaimer',
|
||||
credits: 'Credits',
|
||||
footer: 'Satire · Reine Fiktion · Alle Figuren sind frei erfunden',
|
||||
hint: '↑ ↓ oder Maus zum Wählen · Enter zum Bestätigen',
|
||||
touchNotice: 'Hinweis: Glory Defense wird mit Tastatur und Maus gespielt.',
|
||||
});
|
||||
|
||||
export const DISCLAIMER = Object.freeze({
|
||||
accept: 'Verstanden – zum Hauptmenü',
|
||||
close: 'Schließen',
|
||||
openPage: 'Als eigene Seite öffnen',
|
||||
missingTemplate:
|
||||
'Glory Defense ist Satire und reine Fiktion. Alle Figuren und Organisationen sind frei erfunden. ' +
|
||||
'Ähnlichkeiten mit realen Personen sind nicht beabsichtigt. Das Spiel vertritt keine politische Position.',
|
||||
});
|
||||
|
||||
/**
|
||||
* Missionsbriefings; eines wird zufällig gewählt.
|
||||
* @type {readonly {title: string, lines: readonly string[]}[]}
|
||||
*/
|
||||
export const BRIEFINGS = Object.freeze([
|
||||
Object.freeze({
|
||||
title: 'EINSATZBEFEHL NR. 7-G · STRENG ÖFFENTLICH',
|
||||
lines: Object.freeze([
|
||||
'Präsident Maximilian Valor, Hüter des ewigen Friedens!',
|
||||
'Außerirdische Aggressoren bedrohen die Vereinigte Erde. Der Hohe Rat hat einstimmig beschlossen, dass Sie den Frieden persönlich verteidigen – mit allen Mitteln, die der Frieden erfordert.',
|
||||
'Feindaufklärung: Die Schwärmer sind schnell, zahlreich und haben schlechte Manieren. Die Blechlegion ist langsam, gründlich und schießt aus der Ferne.',
|
||||
'Ziel: Halten Sie so viele Angriffswellen wie möglich stand.',
|
||||
'Das Ministerium für Zuversicht versichert: Die Lage ist unter Kontrolle. Sie war nie außer Kontrolle. Es gibt keine Lage.',
|
||||
]),
|
||||
}),
|
||||
Object.freeze({
|
||||
title: 'LAGEBESPRECHUNG · SIEG BEREITS BESCHLOSSEN',
|
||||
lines: Object.freeze([
|
||||
'Herr Präsident, die Feinde des Friedens sind gelandet.',
|
||||
'Die Orbitalflotte steht bereit. Sie trifft stets präzise – wo sie einschlägt, war per Definition das Ziel.',
|
||||
'Halten Sie Q gedrückt und geben Sie die Befehlscodes ein. Der Rest ist Geschichte. Genauer: Geschichtsschreibung.',
|
||||
'Ziel: Überleben. Nebenziel: Überleben mit Stil.',
|
||||
'Für Freiheit und Frieden! Und für die Einschaltquote.',
|
||||
]),
|
||||
}),
|
||||
Object.freeze({
|
||||
title: 'TAGESBEFEHL · NICHT ZUR DISKUSSION',
|
||||
lines: Object.freeze([
|
||||
'Bürgerinnen und Bürger schauen zu. Der Präsident kämpft an vorderster Front, denn die Front ist, wo der Präsident ist.',
|
||||
'Die Schwärmer greifen in Rudeln an und umzingeln. Die Blechlegion hält Abstand und flankiert. Beide lehnen den Frieden ab. Wir bieten ihn trotzdem an – mit Nachdruck.',
|
||||
'Ziel: Jede Welle abwehren. Munition knapp? Fürsorgepaket anfordern.',
|
||||
'Das Ministerium für Zuversicht erinnert: Zweifel sind ab sofort meldepflichtig.',
|
||||
]),
|
||||
}),
|
||||
]);
|
||||
|
||||
export const BRIEFING_CONTINUE = 'Leertaste oder Klick: Einsatz beginnen · Esc: zurück';
|
||||
|
||||
/** Propaganda-Durchsagen zwischen den Wellen. */
|
||||
export const PROPAGANDA = Object.freeze([
|
||||
'Bürgerinnen und Bürger! Jede abgewehrte Welle bringt uns dem ewigen Frieden näher. Die nächste auch.',
|
||||
'Das Ministerium für Zuversicht meldet: Verluste sind statistisch nicht existent.',
|
||||
'Frieden ist die kürzeste Pause zwischen zwei Siegen.',
|
||||
'Erinnerung: Zweifel sind ab sofort meldepflichtig.',
|
||||
'Der Präsident kämpft persönlich. Die Front ist, wo der Präsident ist.',
|
||||
'Unsere Orbitalflotte trifft stets präzise. Wo sie trifft, war immer das Ziel.',
|
||||
'Heute ist ein historischer Tag. Wie jeder Tag seit Beginn der Durchsagen.',
|
||||
'Die Rationen werden um 20 % erhöht. Zuvor wurden sie um 40 % gesenkt. Ein Gewinn für alle!',
|
||||
'Zuversicht ist Bürgerpflicht. Wer nicht zuversichtlich ist, wird es bald sein.',
|
||||
'Wer Frieden will, muss ihn verteidigen. Wer ihn verteidigt, muss kämpfen. Wer kämpft, will Frieden. Logisch.',
|
||||
'Das Wetter: heiter bis wolkig, mit vereinzelten Orbitalschlägen.',
|
||||
'Die Schwärmer sind zahlreich. Wir sind zahlreicher – in unseren Herzen.',
|
||||
'Kritik an der Kriegsführung schwächt die Moral. Moral ist kriegswichtig. Bitte weiterklatschen.',
|
||||
'Fürsorgepakete sind ein Geschenk des Präsidenten. Bitte nicht darunter stehen.',
|
||||
'Neue Umfrage: 100 % der Befragten sind zufrieden. Befragt wurde das Ministerium.',
|
||||
'Der Feind hat keine Chance. Das wurde gestern beschlossen.',
|
||||
]);
|
||||
|
||||
export const WAVE = Object.freeze({
|
||||
incoming: (n) => `WELLE ${n}`,
|
||||
preparing: 'VORBEREITUNG',
|
||||
factionLine: Object.freeze({
|
||||
swarm: 'Die Schwärmer greifen an!',
|
||||
legion: 'Die Blechlegion rückt vor!',
|
||||
mixed: 'Schwärmer und Blechlegion – gemeinsam gegen den Frieden!',
|
||||
}),
|
||||
cleared: (n) => `Welle ${n} abgewehrt!`,
|
||||
bonus: (points) => `Wellenbonus +${points}`,
|
||||
heal: (hp) => `Das Ministerium für Gesundheit spendiert ${hp} Lebenspunkte.`,
|
||||
nextIn: (seconds) => `Nächste Welle in ${seconds}`,
|
||||
remaining: (count) => `Feinde: ${count}`,
|
||||
elite: Object.freeze({
|
||||
brutmutter: 'ACHTUNG: Eine Brutmutter wurde gesichtet!',
|
||||
walzmeister: 'ACHTUNG: Ein Walzmeister rollt heran!',
|
||||
}),
|
||||
});
|
||||
|
||||
export const ORBITAL_TEXT = Object.freeze({
|
||||
holdHint: 'Q halten + Pfeiltasten/WASD',
|
||||
panelTitle: 'ORBITAL-BEFEHLE · Q HALTEN',
|
||||
requested: (name) => `${name} angefordert – Einschlag steht bevor!`,
|
||||
notReady: (name, seconds) => `${name} lädt noch (${seconds} s)`,
|
||||
invalid: 'Befehlscode ungültig',
|
||||
selfHit: 'Kollateralschaden am Präsidenten – im Bericht als Heldentum vermerkt.',
|
||||
supplyPickup: (heal) => `Fürsorgepaket erhalten: +${heal} Leben, Munition aufgefüllt.`,
|
||||
turretOnline: 'Geschütz »Wachsamer Nachbar« ist einsatzbereit.',
|
||||
});
|
||||
|
||||
export const PLAYER_TEXT = Object.freeze({
|
||||
reloading: 'Nachladen …',
|
||||
empty: 'Leer',
|
||||
lowAmmo: (code) => `Munition knapp! Nachschub anfordern: Q + ${code}`,
|
||||
outOfAmmo: 'Keine Munition – Dienstpistole gezogen.',
|
||||
dodgeReady: 'Rolle',
|
||||
});
|
||||
|
||||
export const GAME_OVER = Object.freeze({
|
||||
title: 'DER PRÄSIDENT IST GEFALLEN',
|
||||
subtitles: Object.freeze([
|
||||
'Das Ministerium für Zuversicht meldet: planmäßiger Rückzug in die Unsterblichkeit.',
|
||||
'Ein Denkmal wurde bereits in Auftrag gegeben. Es war schon vorher in Auftrag gegeben.',
|
||||
'Offizielle Sprachregelung: Der Präsident ruht sich kurz aus. Sehr gründlich.',
|
||||
'Die Nachrichten melden einen triumphalen Sieg. Details folgen nie.',
|
||||
]),
|
||||
stats: Object.freeze({
|
||||
score: 'Punkte',
|
||||
wave: 'Erreichte Welle',
|
||||
kills: 'Abschüsse',
|
||||
bestStreak: 'Längste Serie',
|
||||
duration: 'Einsatzdauer',
|
||||
}),
|
||||
nameLabel: 'Name für die Ehrentafel',
|
||||
nameHint: 'Höchstens 16 Zeichen. Wird öffentlich angezeigt.',
|
||||
submit: 'Eintragen',
|
||||
skip: 'Nicht eintragen',
|
||||
retry: 'Erneut verteidigen',
|
||||
menu: 'Hauptmenü',
|
||||
submitting: 'Übermittle an das Archiv …',
|
||||
saved: (rank) => `Eingetragen auf Platz ${rank}. Die Geschichtsbücher sind informiert.`,
|
||||
offline: 'Das Archiv ist nicht erreichbar. Der Punktestand wird mündlich überliefert.',
|
||||
noToken: 'Diese Runde konnte nicht beim Archiv angemeldet werden – ein Eintrag ist leider nicht möglich.',
|
||||
});
|
||||
|
||||
export const HIGHSCORES = Object.freeze({
|
||||
title: 'EHRENTAFEL DER VERTEIDIGER',
|
||||
loading: 'Lade Ehrentafel …',
|
||||
empty: 'Noch keine Einträge. Die Geschichte wartet auf Sie.',
|
||||
error: 'Die Ehrentafel ist gerade nicht erreichbar.',
|
||||
columns: Object.freeze({ rank: 'Rang', name: 'Name', score: 'Punkte', wave: 'Welle' }),
|
||||
back: 'Zurück (Esc)',
|
||||
});
|
||||
|
||||
export const PAUSE = Object.freeze({
|
||||
title: 'EINSATZ PAUSIERT',
|
||||
subtitle: 'Der Feind wartet höflich.',
|
||||
resume: 'Weiter (Esc)',
|
||||
quit: 'Mission abbrechen',
|
||||
volumes: Object.freeze({ master: 'Gesamtlautstärke', music: 'Musik', sfx: 'Effekte' }),
|
||||
confirmQuit: 'Mission wirklich abbrechen? Der Punktestand verfällt.',
|
||||
});
|
||||
|
||||
export const CONTROLS = Object.freeze({
|
||||
title: 'STEUERUNG',
|
||||
rows: Object.freeze([
|
||||
['W A S D', 'Bewegen (8 Richtungen)'],
|
||||
['Maus', 'Zielen'],
|
||||
['Linksklick', 'Schießen (gedrückt halten beim Karabiner)'],
|
||||
['R', 'Nachladen'],
|
||||
['1 · 2 · 3 / Mausrad', 'Waffe wechseln'],
|
||||
['Leertaste', 'Ausweichrolle (kurz unverwundbar)'],
|
||||
['Q halten + Pfeile/WASD', 'Orbital-Befehl eingeben (Ziel: Mauszeiger)'],
|
||||
['Esc', 'Pause und Lautstärke'],
|
||||
]),
|
||||
orbitalTitle: 'ORBITAL-BEFEHLE',
|
||||
back: 'Zurück (Esc)',
|
||||
});
|
||||
|
||||
export const CREDITS = Object.freeze({
|
||||
title: 'CREDITS',
|
||||
sections: Object.freeze([
|
||||
Object.freeze({
|
||||
heading: 'Spiel',
|
||||
lines: Object.freeze(['Glory Defense – ein satirischer 2D-Shooter', 'Idee, Code und Figuren: frei erfunden für dieses Projekt']),
|
||||
}),
|
||||
Object.freeze({
|
||||
heading: 'Technik',
|
||||
lines: Object.freeze(['Phaser 3 – © Phaser Studio Inc., MIT-Lizenz', 'Flask – © Pallets, BSD-3-Clause-Lizenz']),
|
||||
}),
|
||||
Object.freeze({
|
||||
heading: 'Grafik und Ton',
|
||||
lines: Object.freeze([
|
||||
'Figuren, Emblem, Geschütz und Kapsel: eigene Vektorgrafiken (CC0)',
|
||||
'Bodenkacheln aus „Top-down Shooter“ und Effekte aus „Particle Pack“ – Kenney (kenney.nl), CC0',
|
||||
'Schriften: Systemschriften des Betriebssystems (nicht mitgeliefert)',
|
||||
'Klänge aus „Sci-Fi Sounds“, „Impact Sounds“, „Interface Sounds“, „Music Jingles“ – Kenney (kenney.nl), CC0',
|
||||
'Marschmusik: eigene Komposition, im Browser synthetisch erzeugt (CC0)',
|
||||
]),
|
||||
}),
|
||||
Object.freeze({
|
||||
heading: 'Hinweis',
|
||||
lines: Object.freeze([
|
||||
'Satire und reine Fiktion. Alle Figuren und Organisationen sind frei erfunden.',
|
||||
'Keine Verbindung zu realen Personen, Parteien, Ländern oder anderen Spielen.',
|
||||
]),
|
||||
}),
|
||||
]),
|
||||
back: 'Zurück (Esc)',
|
||||
});
|
||||
|
||||
export const ERRORS = Object.freeze({
|
||||
phaserMissing: 'Die Spiel-Engine konnte nicht geladen werden. Bitte Seite neu laden.',
|
||||
generic: 'Ein unerwarteter Fehler ist aufgetreten. Bitte Seite neu laden.',
|
||||
});
|
||||
Reference in New Issue
Block a user