Initial commit — Godot space roguelite source

- Touch controls: direct InputEventScreenTouch in shop_ui (bypass relay)
- ItemDB: static preload list instead of DirAccess scan (export fix)
- All 18 items with EN localisation (name_en, desc_en, category_en)
- Ship playstyles: NOVA-1 shield, INFERNO ram, AURORA agile/tank
- Quasar: SMBH visual, jet boost, merge, push, BH-eating
- Atlas & UI text updated EN+DE

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-21 14:38:09 +02:00
commit edc40f9008
108 changed files with 10068 additions and 0 deletions
+456
View File
@@ -0,0 +1,456 @@
extends Node
# ─── Tr — Translation singleton ───────────────────────────────────────────────
# Usage: Tr.t("key") → returns string in current language (Settings.language)
# Supported languages: "de" (default), "en"
const _DE: Dictionary = {
# ── Main menu ──────────────────────────────────────────────────────────────
"menu_single": "SINGLEPLAYER",
"menu_vs": "VS",
"menu_options": "OPTIONEN",
"menu_atlas": "ATLAS",
"menu_quit": "BEENDEN",
# ── Pause menu ─────────────────────────────────────────────────────────────
"pause_resume": "WEITER",
"pause_main_menu": "HAUPTMENÜ",
"pause_title": "── PAUSE ──",
"pause_footer": "↑↓ AUSWÄHLEN ENTER BESTÄTIGEN",
"pause_footer_pad": "D-PAD AUSWÄHLEN [A] BESTÄTIGEN",
"pause_footer_touch":"↑↓ wischen ● tippen",
# ── Shared options ─────────────────────────────────────────────────────────
"opt_sfx": "SFX LAUTST.",
"opt_music": "MUSIK LAUTST.",
"opt_mute": "TON AUS",
"opt_fullscreen": "VOLLBILD",
"opt_nebula": "NEBULA",
"opt_stars": "STERNE",
"opt_language": "SPRACHE",
"opt_touch": "TOUCH",
"touch_auto": "AUTO",
"touch_on": "EIN",
"touch_off": "AUS",
"opt_back": "ZURÜCK",
"opt_title": "── OPTIONEN ──",
"opt_footer": "◄ ► ÄNDERN ESC ZURÜCK",
"opt_footer_pad": "D-PAD ◄► ÄNDERN [B] ZURÜCK",
"opt_footer_touch": "◄► wischen ● ändern ◄ zurück",
"opt_controls": "STEUERUNG",
# ── Option values ──────────────────────────────────────────────────────────
"yes": "JA",
"no": "NEIN",
"star_low": "NIEDRIG",
"star_mid": "MITTEL",
"star_high": "HOCH",
# ── Main menu decorations ──────────────────────────────────────────────────
"subtitle": "NAVIGATIONSSYSTEM v1.0",
"footer_nav": "↑↓ NAVIGIEREN ENTER BESTÄTIGEN",
"footer_nav_pad": "D-PAD NAVIGIEREN [A] BESTÄTIGEN",
"footer_nav_touch": "↑↓ wischen ● tippen",
# ── Ship select ────────────────────────────────────────────────────────────
"select_header": "NAVIGATIONS-KONSOLE / SCHIFF-INITIALISIERUNG",
"select_pilot1": "PILOT 1 — WÄHLE DEIN SCHIFF",
"select_pilot2": "PILOT 2 — WÄHLE DEIN SCHIFF",
"select_choose": "← → AUSWAHL",
"select_choose_pad": "D-PAD ←→ AUSWAHL",
"select_choose_touch": "← → wischen",
"select_confirm": "[ ENTER BESTÄTIGEN ]",
"select_confirm_pad": "[ A BESTÄTIGEN ]",
"select_confirm_touch": "[ TIPPEN ]",
"select_join": "ENTER = BEITRETEN",
"select_join_pad": "[A] BEITRETEN",
"select_join_touch": "● BEITRETEN",
"select_solo": "ESC = SOLO",
"select_solo_pad": "[B] SOLO",
"select_solo_touch": "◄ SOLO",
# ── HUD ────────────────────────────────────────────────────────────────────
"hud_launching": "STARTET IN",
"hud_wave_clear": "WELLE %d ABGESCHLOSSEN",
"hud_to_shop": "→ SHOP",
"hud_mission_over":"MISSION BEENDET",
"hud_transfer": "ÜBERTRAGE DATEN…",
"hud_press_key": "[ TASTE DRÜCKEN ]",
"hud_press_key_pad": "[ A ] WEITER",
"hud_press_key_touch": "[ TIPPEN ]",
"hud_score": "SCORE %d",
# ── Shop ───────────────────────────────────────────────────────────────────
"shop_console": "AUSRÜSTUNGS-KONSOLE",
"shop_upgrade": "SCHIFF UPGRADEN",
"shop_footer": "← → AUSWÄHLEN ENTER KAUFEN",
"shop_continue": "[ SPACE ] WEITER →",
"shop_continue_pad": "[ B ] WEITER →",
"shop_continue_touch": "[ ◄ ] WEITER →",
"shop_no_credits": "— KEINE CREDITS —",
"shop_owned": "AUSRÜSTUNG:",
# ── Werkstatt (neu) ────────────────────────────────────────────────────────
"werk_phase_attr": "ATTRIBUT-UPGRADE",
"werk_phase_shop": "WERKSTATT",
"werk_attr_prompt": "Wähle ein kostenloses Attribut-Upgrade",
"werk_attr_tag": "[ GRATIS ]",
"werk_attr_footer": "← → AUSWÄHLEN SPACE BESTÄTIGEN",
"werk_attr_footer_pad": "← → AUSWÄHLEN [A] BESTÄTIGEN",
"werk_attr_footer_touch": "← → WISCHEN ● BESTÄTIGEN",
"werk_attr_footer_p2": "A D AUSWÄHLEN F BESTÄTIGEN",
"werk_shop_footer": "← → ↑ ↓ AUSWÄHLEN ENTER KAUFEN",
"werk_shop_footer_pad": "← → ↑ ↓ AUSWÄHLEN [A] KAUFEN",
"werk_shop_footer_touch": "← → WISCHEN ● KAUFEN",
"werk_shop_footer_p2": "A D W AUSWÄHLEN F KAUFEN",
"werk_pick": "[ SPACE WÄHLEN ]",
"werk_pick_pad": "[ A WÄHLEN ]",
"werk_pick_touch": "[ TIPPEN ]",
"werk_pick_p2": "[ F WÄHLEN ]",
"werk_confirm": "[ SPACE BESTÄTIGEN ]",
"werk_confirm_pad": "[ A BESTÄTIGEN ]",
"werk_confirm_touch": "[ TIPPEN ]",
"werk_confirm_p2": "[ F BESTÄTIGEN ]",
"werk_wave": " · WELLE %d",
"werk_reroll": "[%s] REROLL — %d CR",
"werk_continue_p2": "[ E ] WEITER →",
"werk_buy_hint_p1": "[ENTER]",
"werk_buy_hint_p1_pad": "[A]",
"werk_buy_hint_p1_touch": "[●]",
"werk_buy_hint_p2": "[F]",
"werk_preview": "VORSCHAU",
"werk_ship_preview":"DEIN SCHIFF",
"werk_grows": "SCHIFF WÄCHST",
# ── Atlas ──────────────────────────────────────────────────────────────────
"atlas_title": "── ATLAS DER OBJEKTE ──",
"atlas_footer": "↑↓ AUSWÄHLEN ESC ZURÜCK",
"atlas_footer_pad": "D-PAD AUSWÄHLEN [B] ZURÜCK",
"atlas_footer_touch": "↑↓ wischen ◄ zurück",
# ── Controls ───────────────────────────────────────────────────────────────
"ctrl_title": "── STEUERUNG ──",
"ctrl_thrust": "SCHUB",
"ctrl_left": "LINKS",
"ctrl_right": "RECHTS",
"ctrl_shoot": "SCHUSS",
"ctrl_wipe": "WIPE",
"ctrl_waiting": "TASTE DRÜCKEN…",
"ctrl_reset": "STANDARD",
"ctrl_footer": "ENTER BINDEN ESC ZURÜCK",
"ctrl_footer_pad": "[A] BINDEN [B] ZURÜCK",
"ctrl_footer_touch": "● BINDEN ◄ ZURÜCK",
"hud_wipe_key": "⚠ BIG WIPE — [N] / [E]",
"hud_wipe_key_pad": "⚠ BIG WIPE — [Y] / [LT]",
"hud_wipe_key_touch":"⚠ BIG WIPE — SURVIVE",
"atlas_props": "EIGENSCHAFTEN",
"atlas_desc": "BESCHREIBUNG",
"atlas_cat_cosmic": "KOSMISCH",
"atlas_cat_exotic": "EXOTISCH",
"atlas_cat_anti": "ANTIMATERIE",
"atlas_cat_ships": "SCHIFFE",
"atlas_cat_events": "EREIGNISSE",
"atlas_prop_size": "GRÖSSE",
"atlas_prop_speed": "GESCHW.",
"atlas_prop_hazard": "GEFAHR",
"atlas_prop_hp": "TREFFER",
"atlas_prop_damage": "SCHADEN",
"atlas_prop_life": "LEBEN",
"atlas_prop_spawn": "SPAWN",
"atlas_prop_orbit": "ORBIT",
"atlas_prop_effect": "EFFEKT",
"atlas_prop_reward": "BELOHNUNG",
"atlas_hazard_none": "",
"atlas_hazard_low": "NIEDRIG",
"atlas_hazard_mid": "MITTEL",
"atlas_hazard_high": "HOCH",
"atlas_hazard_deadly": "TÖDLICH",
# Entry names
"atlas_n_star": "STERN",
"atlas_n_planet_terr": "PLANET — ERDÄHNLICH",
"atlas_n_planet_desert": "PLANET — WÜSTE",
"atlas_n_planet_gas": "PLANET — GASRIESE",
"atlas_n_planet_ice": "PLANET — EIS",
"atlas_n_planet_lava": "PLANET — LAVA",
"atlas_n_planet_toxic": "PLANET — TOXIC",
"atlas_n_nebula": "NEBEL",
"atlas_n_comet": "KOMET",
"atlas_n_galaxy": "GALAXIE",
"atlas_n_blackhole": "SCHWARZES LOCH",
"atlas_n_whitehole": "WEISSES LOCH",
"atlas_n_neutron": "NEUTRONENSTERN",
"atlas_n_quasar": "QUASAR",
"atlas_n_antimatter": "ANTIMATERIE",
"atlas_n_antistar": "ANTIMATERIESTERN",
"atlas_n_player": "SPIELERSCHIFF",
"atlas_n_enemy": "GEGNERSCHIFF",
"atlas_n_wraith": "WRAITH — MINIBOSS",
"atlas_n_leviathan": "LEVIATHAN — BOSS",
"atlas_n_bullet": "PROJEKTIL",
"atlas_n_bigwipe": "BIG WIPE",
# Descriptions
"atlas_d_star": "Ferne Sonnen. Driften langsam nach oben. Helle Supergiganten zeigen Lichtkreuze, manche Sterne pulsieren rosa: Antimaterie-Sterne lösen sich in Partikel auf. Sterne werden von Schwarzen Löchern spiralförmig verschluckt.",
"atlas_d_planet_terr": "Ozeane, Kontinente und eisige Polkappen. Oft mit driftenden Wolken. Kreist um einen unsichtbaren Ankerpunkt. Kann von einem Schwarzen Loch eingefangen und zerrissen werden (Tidal Stripping).",
"atlas_d_planet_desert": "Heiße Wüstenwelt mit dünner Polkappe. Dreht sich langsam. Wie Mars. Reiner Deko-Himmelskörper — keine direkte Gefahr.",
"atlas_d_planet_gas": "Gasplanet mit mehreren farbigen Bändern und oft einem wandernden Sturm-Fleck. Größer als Gesteinsplaneten, trägt häufig Ringe und mehrere Monde.",
"atlas_d_planet_ice": "Kalte, glitzernde Welt mit feinen Rissen in der gefrorenen Oberfläche. Selten, dreht sich ruhig in seiner Umlaufbahn.",
"atlas_d_planet_lava": "Glühender Vulkanplanet. Strahlt einen pulsierenden Halo ab, Lava-Adern leuchten. Nur kosmetisch — trotz des Feuerscheins harmlos.",
"atlas_d_planet_toxic": "Giftige Wirbel aus Schwefel und Säuren. Die Muster sind verdreht und chaotisch. Deko-Objekt ohne direkten Gameplay-Einfluss.",
"atlas_d_nebula": "Wolken aus Gas und Staub. Bewegen sich sehr langsam und verfärben den Hintergrund. Rein dekorativ. In den Optionen abschaltbar.",
"atlas_d_comet": "Fliegt mit heller Spur von einer Bildschirmseite zur anderen. Spawnt häufiger bei höherer Schwierigkeit. Kollidiert nicht — zieht nur die Blicke.",
"atlas_d_galaxy": "Spiralgalaxie, dreht sich um ihr Zentrum. Wird von einem Schwarzen Loch konsumiert, verstärkt es zu einem Supermassiven Schwarzen Loch (SMBH).",
"atlas_d_blackhole": "Zieht alles im Umkreis an: Spieler, Gegner, Sterne, Planeten. Verschluckt nah kommende Objekte. Bei 30 Verschluckungen: Supernova — stirbt und spawnt Quasar, neue Löcher und Sterne. Frisst es 12 Galaxien, entsteht ein SMBH, der nach 45 s kollabiert.",
"atlas_d_whitehole": "Das Gegenstück zum Schwarzen Loch: stößt Spieler, Gegner, Kometen und Sterne ab und ejiziert regelmäßig neue Sterne und Planeten nach außen. Lebensdauer: ~60 Sekunden.",
"atlas_d_neutron": "Rotierender Pulsar mit einem schmalen Lichtstrahl. Objekte im Strahlkegel werden weggestoßen. Nützlich als natürlicher Schutzwall gegen Gegner-Schwärme.",
"atlas_d_quasar": "Entsteht aus einer Supernova. Sieht aus wie ein leuchtendes SMBH mit zwei polaren Jets. Lebt ~30 Sekunden. Stößt Schiffe, Gegner und Kometen radial weg. Mehrere Quasare in der Nähe verschmelzen zu einem größeren. Ein Schwarzes Loch kann ihn fressen — aber nur wenn es größer ist. Im Strahlkegel: Schub bei gedrücktem Schubknopf.",
"atlas_d_antimatter": "Magenta Partikel. Tötet Spieler und Gegner bei Berührung sofort. Antimaterie-Partikel ziehen sich gegenseitig an — bei 5+ Clustern: Antimateriestern.",
"atlas_d_antistar": "Entsteht aus einem Cluster von Antimaterie. Repulsiert Spieler wie ein Weißes Loch, ist aber hochgefährlich bei Kontakt. Lebensdauer: ~50 Sekunden.",
"atlas_d_player": "Das Schiff des Spielers. 4 Varianten im Hangar. NOVA-1: ausgewogen, 1 Schutzschild. INFERNO: schnell, hohe Feuerrate, Ramm-Schaden bei voller Fahrt. AURORA: sehr wendig, 2 Schilde, BH-Resistenz. TITAN: langsam mit aktivem Boost (SHIFT). Upgrades aus dem Shop stapeln sich auf die Basis-Stats.",
"atlas_d_enemy": "KI-Gegner in rot oder cyan. Verfolgt den Spieler in 600 px Reichweite und schießt. Weicht Schwarzen Löchern aus. Respawnt 4-8 s nach dem Tod. Belohnung: 15 Credits.",
"atlas_d_wraith": "Miniboss in Welle 5. 20 HP, magenta. Orbitiert elliptisch um die Mitte und feuert 3-Way-Schüsse. Belohnung: 150 Credits.",
"atlas_d_leviathan": "Endboss in Welle 8. 50 HP, orange. Phase 2 ab 50 % HP: spawnt ein Schwarzes Loch, feuert 8-Way-Schüsse, Musik verdichtet sich. Belohnung: 300 Credits.",
"atlas_d_bullet": "Energie-Projektil. 9.6 px/Frame, lebt 240 Frames. Farbe je nach Besitzer. Bei Damage ≥ 2.0 wird es durchschlagend (pierce, bis zu 2 Ziele).",
"atlas_d_bigwipe": "Notfall-Reset wenn >500 Objekte. Bildschirm verdunkelt sich 2.33 s — Spieler müssen die Wipe-Taste halten, sonst Tod. Anschließend Weißer Flash, alles außer Planeten/Sternen wird gelöscht. Belohnung: 25 Credits.",
# ── Leaderboard ────────────────────────────────────────────────────────────
"menu_leaderboard": "LEADERBOARD",
"lb_title": "── LEADERBOARD ──",
"lb_local": "LOKAL",
"lb_online": "ONLINE",
"lb_empty": "KEINE EINTRÄGE",
"lb_loading": "LÄDT…",
"lb_error": "VERBINDUNGSFEHLER",
"lb_footer": "O ONLINE ESC ZURÜCK",
"lb_footer_pad": "[Y] ONLINE [B] ZURÜCK",
"lb_footer_touch": "● ONLINE ◄ ZURÜCK",
"lb_enter_name": "DEIN NAME:",
"lb_name_hint": "ENTER BESTÄTIGEN ESC ÜBERSPRINGEN",
"lb_name_hint_pad": "[A] BESTÄTIGEN [B] ÜBERSPRINGEN",
"lb_name_hint_touch": "● BESTÄTIGEN ◄ ÜBERSPRINGEN",
"lb_saved": "GESPEICHERT !",
"lb_wave": "W",
}
const _EN: Dictionary = {
# ── Main menu ──────────────────────────────────────────────────────────────
"menu_single": "SINGLEPLAYER",
"menu_vs": "VS",
"menu_options": "OPTIONS",
"menu_atlas": "ATLAS",
"menu_quit": "QUIT",
# ── Pause menu ─────────────────────────────────────────────────────────────
"pause_resume": "RESUME",
"pause_main_menu": "MAIN MENU",
"pause_title": "── PAUSE ──",
"pause_footer": "↑↓ SELECT ENTER CONFIRM",
"pause_footer_pad": "D-PAD SELECT [A] CONFIRM",
"pause_footer_touch":"↑↓ swipe ● tap",
# ── Shared options ─────────────────────────────────────────────────────────
"opt_sfx": "SFX VOL.",
"opt_music": "MUSIC VOL.",
"opt_mute": "MUTE",
"opt_fullscreen": "FULLSCREEN",
"opt_nebula": "NEBULA",
"opt_stars": "STARS",
"opt_language": "LANGUAGE",
"opt_touch": "TOUCH",
"touch_auto": "AUTO",
"touch_on": "ON",
"touch_off": "OFF",
"opt_back": "BACK",
"opt_title": "── OPTIONS ──",
"opt_footer": "◄ ► CHANGE ESC BACK",
"opt_footer_pad": "D-PAD ◄► CHANGE [B] BACK",
"opt_footer_touch": "◄► swipe ● change ◄ back",
"opt_controls": "CONTROLS",
# ── Option values ──────────────────────────────────────────────────────────
"yes": "YES",
"no": "NO",
"star_low": "LOW",
"star_mid": "MED",
"star_high": "HIGH",
# ── Main menu decorations ──────────────────────────────────────────────────
"subtitle": "NAVIGATION SYSTEM v1.0",
"footer_nav": "↑↓ NAVIGATE ENTER CONFIRM",
"footer_nav_pad": "D-PAD NAVIGATE [A] CONFIRM",
"footer_nav_touch": "↑↓ swipe ● tap",
# ── Ship select ────────────────────────────────────────────────────────────
"select_header": "NAVIGATION CONSOLE / SHIP INITIALIZATION",
"select_pilot1": "PILOT 1 — SELECT YOUR SHIP",
"select_pilot2": "PILOT 2 — SELECT YOUR SHIP",
"select_choose": "← → SELECT",
"select_choose_pad": "D-PAD ←→ SELECT",
"select_choose_touch": "← → swipe",
"select_confirm": "[ ENTER CONFIRM ]",
"select_confirm_pad": "[ A CONFIRM ]",
"select_confirm_touch": "[ TAP ]",
"select_join": "ENTER = JOIN",
"select_join_pad": "[A] JOIN",
"select_join_touch": "● JOIN",
"select_solo": "ESC = SOLO",
"select_solo_pad": "[B] SOLO",
"select_solo_touch": "◄ SOLO",
# ── HUD ────────────────────────────────────────────────────────────────────
"hud_launching": "LAUNCHING IN",
"hud_wave_clear": "WAVE %d COMPLETE",
"hud_to_shop": "→ SHOP",
"hud_mission_over":"MISSION OVER",
"hud_transfer": "UPLOADING DATA…",
"hud_press_key": "[ PRESS ANY KEY ]",
"hud_press_key_pad": "[ A ] CONTINUE",
"hud_press_key_touch": "[ TAP ]",
"hud_score": "SCORE %d",
# ── Shop ───────────────────────────────────────────────────────────────────
"shop_console": "EQUIPMENT CONSOLE",
"shop_upgrade": "UPGRADE SHIP",
"shop_footer": "← → SELECT ENTER BUY",
"shop_continue": "[ SPACE ] CONTINUE →",
"shop_continue_pad": "[ B ] CONTINUE →",
"shop_continue_touch": "[ ◄ ] CONTINUE →",
"shop_no_credits": "— NO CREDITS —",
"shop_owned": "EQUIPMENT:",
# ── Werkstatt (new) ────────────────────────────────────────────────────────
"werk_phase_attr": "ATTRIBUTE UPGRADE",
"werk_phase_shop": "WORKSHOP",
"werk_attr_prompt": "Pick one free attribute upgrade",
"werk_attr_tag": "[ FREE ]",
"werk_attr_footer": "← → SELECT SPACE CONFIRM",
"werk_attr_footer_pad": "← → SELECT [A] CONFIRM",
"werk_attr_footer_touch": "← → SWIPE ● CONFIRM",
"werk_attr_footer_p2": "A D SELECT F CONFIRM",
"werk_shop_footer": "← → ↑ ↓ SELECT ENTER BUY",
"werk_shop_footer_pad": "← → ↑ ↓ SELECT [A] BUY",
"werk_shop_footer_touch": "← → SWIPE ● BUY",
"werk_shop_footer_p2": "A D W SELECT F BUY",
"werk_pick": "[ SPACE PICK ]",
"werk_pick_pad": "[ A PICK ]",
"werk_pick_touch": "[ TAP ]",
"werk_pick_p2": "[ F PICK ]",
"werk_confirm": "[ SPACE CONFIRM ]",
"werk_confirm_pad": "[ A CONFIRM ]",
"werk_confirm_touch": "[ TAP ]",
"werk_confirm_p2": "[ F CONFIRM ]",
"werk_wave": " · WAVE %d",
"werk_reroll": "[%s] REROLL — %d CR",
"werk_continue_p2": "[ E ] CONTINUE →",
"werk_buy_hint_p1": "[ENTER]",
"werk_buy_hint_p1_pad": "[A]",
"werk_buy_hint_p1_touch": "[●]",
"werk_buy_hint_p2": "[F]",
"werk_preview": "PREVIEW",
"werk_ship_preview":"YOUR SHIP",
"werk_grows": "SHIP GROWS",
# ── Atlas ──────────────────────────────────────────────────────────────────
"atlas_title": "── OBJECT ATLAS ──",
"atlas_footer": "↑↓ SELECT ESC BACK",
"atlas_footer_pad": "D-PAD SELECT [B] BACK",
"atlas_footer_touch": "↑↓ swipe ◄ back",
# ── Controls ───────────────────────────────────────────────────────────────
"ctrl_title": "── CONTROLS ──",
"ctrl_thrust": "THRUST",
"ctrl_left": "LEFT",
"ctrl_right": "RIGHT",
"ctrl_shoot": "SHOOT",
"ctrl_wipe": "WIPE",
"ctrl_waiting": "PRESS KEY…",
"ctrl_reset": "DEFAULT",
"ctrl_footer": "ENTER BIND ESC BACK",
"ctrl_footer_pad": "[A] BIND [B] BACK",
"ctrl_footer_touch": "● BIND ◄ BACK",
"hud_wipe_key": "⚠ BIG WIPE — [N] / [E]",
"hud_wipe_key_pad": "⚠ BIG WIPE — [Y] / [LT]",
"hud_wipe_key_touch":"⚠ BIG WIPE — SURVIVE",
"atlas_props": "PROPERTIES",
"atlas_desc": "DESCRIPTION",
"atlas_cat_cosmic": "COSMIC",
"atlas_cat_exotic": "EXOTIC",
"atlas_cat_anti": "ANTIMATTER",
"atlas_cat_ships": "SHIPS",
"atlas_cat_events": "EVENTS",
"atlas_prop_size": "SIZE",
"atlas_prop_speed": "SPEED",
"atlas_prop_hazard": "HAZARD",
"atlas_prop_hp": "HP",
"atlas_prop_damage": "DAMAGE",
"atlas_prop_life": "LIFETIME",
"atlas_prop_spawn": "SPAWN",
"atlas_prop_orbit": "ORBIT",
"atlas_prop_effect": "EFFECT",
"atlas_prop_reward": "REWARD",
"atlas_hazard_none": "",
"atlas_hazard_low": "LOW",
"atlas_hazard_mid": "MED",
"atlas_hazard_high": "HIGH",
"atlas_hazard_deadly": "DEADLY",
# Entry names
"atlas_n_star": "STAR",
"atlas_n_planet_terr": "PLANET — TERRESTRIAL",
"atlas_n_planet_desert": "PLANET — DESERT",
"atlas_n_planet_gas": "PLANET — GAS GIANT",
"atlas_n_planet_ice": "PLANET — ICE",
"atlas_n_planet_lava": "PLANET — LAVA",
"atlas_n_planet_toxic": "PLANET — TOXIC",
"atlas_n_nebula": "NEBULA",
"atlas_n_comet": "COMET",
"atlas_n_galaxy": "GALAXY",
"atlas_n_blackhole": "BLACK HOLE",
"atlas_n_whitehole": "WHITE HOLE",
"atlas_n_neutron": "NEUTRON STAR",
"atlas_n_quasar": "QUASAR",
"atlas_n_antimatter": "ANTIMATTER",
"atlas_n_antistar": "ANTIMATTER STAR",
"atlas_n_player": "PLAYER SHIP",
"atlas_n_enemy": "ENEMY SHIP",
"atlas_n_wraith": "WRAITH — MINIBOSS",
"atlas_n_leviathan": "LEVIATHAN — BOSS",
"atlas_n_bullet": "BULLET",
"atlas_n_bigwipe": "BIG WIPE",
# Descriptions
"atlas_d_star": "Distant suns. Drift slowly upward. Bright supergiants form cross-flares; pink-tinted antimatter stars dissolve into particles over time. Stars spiral into black holes when caught by gravity.",
"atlas_d_planet_terr": "Oceans, continents and icy polar caps. Often with drifting clouds. Orbits an invisible anchor point. Can be captured and torn apart by a black hole (tidal stripping).",
"atlas_d_planet_desert": "Hot desert world with a thin polar cap. Rotates slowly. Mars-like. A pure cosmetic body — no direct gameplay hazard.",
"atlas_d_planet_gas": "Gas planet with multiple colored bands and often a migrating storm spot. Larger than rocky planets; frequently carries rings and several moons.",
"atlas_d_planet_ice": "A cold, glittering world with fine cracks in its frozen surface. Rare, rotates calmly in its orbit.",
"atlas_d_planet_lava": "Molten volcanic planet. Radiates a pulsing halo; lava veins glow. Cosmetic only — harmless despite the fiery look.",
"atlas_d_planet_toxic": "Toxic swirls of sulfur and acids. Patterns are warped and chaotic. Decorative body with no direct gameplay impact.",
"atlas_d_nebula": "Clouds of gas and dust. Drift very slowly, tinting the background. Purely decorative. Can be disabled in options.",
"atlas_d_comet": "Streaks across the screen with a bright tail. Spawns more often at higher difficulty. No collision — just visual flavour.",
"atlas_d_galaxy": "Spiral galaxy, rotates around its core. When a black hole consumes it, the hole grows into a Supermassive Black Hole (SMBH).",
"atlas_d_blackhole": "Pulls everything nearby: the player, enemies, stars, planets. Swallows objects that get too close. At 30 swallows: supernova — it dies and spawns a quasar, new holes and stars. Devouring 12 galaxies creates an SMBH that collapses after 45 s.",
"atlas_d_whitehole": "Opposite of a black hole: pushes players, enemies, comets and stars away, and periodically ejects new stars and planets outward. Lifespan: ~60 seconds.",
"atlas_d_neutron": "Rotating pulsar with a narrow beam of light. Objects inside the beam are repelled. Useful as a natural shield against enemy swarms.",
"atlas_d_quasar": "Born from a supernova. Looks like a luminous SMBH with two polar jets. Lives ~30 seconds. Repels ships, enemies and comets radially. Multiple nearby quasars merge into one. A black hole can consume it — but only if larger. Inside the jet beam: thrust boost while holding the thrust button.",
"atlas_d_antimatter": "Magenta particle. Kills players and enemies on contact. Antimatter particles attract each other — 5+ clustered form an antimatter star.",
"atlas_d_antistar": "Forms from a cluster of antimatter. Repels the player like a white hole, but is lethal on contact. Lifespan: ~50 seconds.",
"atlas_d_player": "The player's ship. 4 variants in the hangar. NOVA-1: balanced, 1 shield. INFERNO: fast, high fire rate, ram damage at full speed. AURORA: highly agile, 2 shields, BH resistance. TITAN: slow with an active boost (SHIFT). Shop upgrades stack on top of base stats.",
"atlas_d_enemy": "AI enemy in red or cyan. Chases the player within 600 px range and fires. Evades black holes. Respawns 4-8 s after death. Reward: 15 credits.",
"atlas_d_wraith": "Miniboss in wave 5. 20 HP, magenta. Orbits the center elliptically and fires 3-way shots. Reward: 150 credits.",
"atlas_d_leviathan": "Final boss in wave 8. 50 HP, orange. Phase 2 below 50 % HP: spawns a black hole, fires 8-way shots, music thickens. Reward: 300 credits.",
"atlas_d_bullet": "Energy projectile. 9.6 px/frame, 240 frame lifetime. Colour depends on owner. Damage ≥ 2.0 makes it piercing (hits up to 2 targets).",
"atlas_d_bigwipe": "Emergency reset when >500 objects. Screen dims for 2.33 s — players must hold the wipe key or die. A white flash follows; everything except planets/stars is cleared. Reward: 25 credits.",
# ── Leaderboard ────────────────────────────────────────────────────────────
"menu_leaderboard": "LEADERBOARD",
"lb_title": "── LEADERBOARD ──",
"lb_local": "LOCAL",
"lb_online": "ONLINE",
"lb_empty": "NO ENTRIES",
"lb_loading": "LOADING…",
"lb_error": "CONNECTION ERROR",
"lb_footer": "O ONLINE ESC BACK",
"lb_footer_pad": "[Y] ONLINE [B] BACK",
"lb_footer_touch": "● ONLINE ◄ BACK",
"lb_enter_name": "YOUR NAME:",
"lb_name_hint": "ENTER CONFIRM ESC SKIP",
"lb_name_hint_pad": "[A] CONFIRM [B] SKIP",
"lb_name_hint_touch": "● CONFIRM ◄ SKIP",
"lb_saved": "SAVED !",
"lb_wave": "W",
}
func t(key: String) -> String:
var dict: Dictionary = _EN if Settings.language == "en" else _DE
if dict.has(key):
return dict[key]
if _DE.has(key):
return _DE[key]
return key
# Like t(), but returns a device-specific variant when available.
# Appends "_pad" or "_touch" to the key and falls back to the generic key.
# Example: hint("footer_nav") → "footer_nav_pad" on gamepad, "footer_nav" on keyboard.
func hint(key: String) -> String:
var device: String = Settings.last_input_device if Settings else "keyboard"
if device != "keyboard":
var variant := key + "_" + device
var dict: Dictionary = _EN if Settings.language == "en" else _DE
if dict.has(variant):
return dict[variant]
return t(key)