Prototyp eines F-Zero-artigen Rennspiels, entwickelt mit Python/pygame.
Dies ist ein Fork von pschuermann97/mode7-racer mit Gameplay-Verbesserungen.
Testversion mit 3 funktionierenden Strecken:
- Funktioniert1 (neue selbst erstellte Strecke)
- Event Horizon I
- Space 3 (komplexe Strecke mit vielen Kurven und Rampen)
Die anderen Strecken sind noch in Arbeit - die Kollisionsdaten passen noch nicht zur Textur.
- Animiertes Logo-Intro mit Zoom-Effekt und Sound
- Retro-Menüsystem mit Logo, Streckenauswahl und Sound-Effekten
- Navigation-Sounds beim Blättern
- Bestätigungs-Sound bei Auswahl
- Animierte Pfeile von beiden Seiten (SNES-Style)
- Mini-Map (unten links): Statische Streckenübersicht mit Spielerpunkt
- Optional pro Strecke eigenes Minimap-Bild (siehe Abschnitt „Mini-Map“ unten)
- Pause-Menü (ESC während des Rennens) mit Continue/Restart/Quit
- Menü-Musik mit angepasster Lautstärke
- Höhere Auflösung mit dynamischem Skalierungssystem
- Pfeiltasten-Steuerung (intuitiver)
- Angepasste Spielgeschwindigkeit für bessere Spielbarkeit
- SNES-Style Game Over Bildschirm
- Rückwärtssprung-Bug behoben
- Map Editor zum visuellen Erstellen von Strecken-Kollisionen
- Bobbing-Effekt beim Fahren (F-Zero-Style Auf-und-Ab)
- Dirt-Zonen als neues Streckenelement (verlangsamt den Spieler)
- Partikel-Effekte bei der Landung nach Sprüngen (Funkenflug)
- Verbesserte Sprungphysik (kürzere, präzisere Sprünge)
- Dedizierte Jump-Animation (Sprite 0004 beim Springen)
- Highscore-System: Persistente Speicherung der Bestzeiten (JSON).
- Erweiterte Audio-Kulisse:
- Differenzierte Motorgeräusche (Leerlauf, Gas, Boost, Lenken)
- Kollisions-Sounds und Regenerations-Effekte
- Neuer Race-Finished-Screen mit Musik
- Performance-Optimierungen:
- Gecachte Overlay-Surfaces (Game Over, Finish Screen)
- Gecachte Fonts für bessere Framerate
- Gecachte Gradient-Hintergründe im Menü
- Optimierte Konstanten in eigene Module ausgelagert
- Partikel-Limit für stabile Performance
- Balance-Verbesserungen:
- Recovery-Geschwindigkeit 4x schneller (50 statt 13)
- Energieanzeige korrekt skaliert
- Konsistentere Schadensberechnung
- Gamepad/Controller-Unterstützung:
- Kompatibel mit den meisten USB-Controllern (Logitech, Xbox, PlayStation, etc.)
- D-Pad oder Analog-Stick für Lenkung
- Konfigurierbare Buttons und Trigger
- Funktioniert in Menüs und während des Spiels
Das in dieser Implementierung verwendete Mode7-Rendering-Modul basiert auf dem Mode7-Tutorial von Coder Space (https://www.youtube.com/watch?v=D0MPYZYe40E).
Wenn du mit dem Code des Spielprototyps experimentieren möchtest, siehe Abschnitt "Installationsanweisungen" unten. Wenn du den Prototyp nur ausprobieren möchtest und die erforderlichen Abhängigkeiten nicht auf deinem Computer installieren möchtest, siehe "Test-Build".
Bitte beachte, dass der ursprüngliche Inhalt dieses Repositories unter der Creative Commons Lizenz CC BY-NC-ND 4.0 (https://creativecommons.org/licenses/by-nc-nd/4.0/) verfügbar ist. Ursprünglicher Autor: pschuermann97
Der Map Editor ermöglicht das visuelle Erstellen und Bearbeiten von Strecken-Kollisionsdaten.
python map_editor.py| Taste | Funktion |
|---|---|
| Q / E | Textur wechseln (vorher/nächste) |
| Pfeiltasten | Karte verschieben |
| + / - | Zoom |
| T | Rechteck-Typ wechseln (Strecke/Rampe/Recovery/Dash/Finish/Checkpoint) |
| P | Startposition setzen (dann auf Karte klicken) |
| A / D | Startwinkel drehen |
| L | Bestehende Track-Kollisionsdaten laden |
| C | Python-Code in Konsole ausgeben |
| S | Python-Code in Datei speichern |
| N | Alles löschen (Rechtecke + Startposition) |
| ESC | Beenden |
| Aktion | Funktion |
|---|---|
| Linksklick + Ziehen | Neues Rechteck zeichnen |
| Rechtsklick | Rechteck löschen |
| Mittelklick + Ziehen | Karte bewegen |
| Mausrad | Zoom |
- Erstelle eine PNG-Textur (4000x2000 Pixel) und lege sie in
gfx/ - Starte den Map Editor und wähle die Textur mit Q/E
- Zeichne die Strecken-Rechtecke (Typ: Strecke)
- Füge Ziellinie, Checkpoints, Rampen etc. hinzu
- Setze die Startposition mit P + Klick und drehe den Winkel mit A/D
- Drücke C um den Code zu sehen oder S um ihn zu speichern
- Kopiere den Code in
settings/track_settings.pyals neue Track-Funktion - Kopiere die Startposition (
init_player_pos_x/y/angle) insettings/league_settings.py - Aktualisiere die Track-Namen in
menu.py
| Typ | Farbe | Beschreibung |
|---|---|---|
| Strecke | Grün | Fahrbare Fläche |
| Rampe | Gelb | Sprungschanze |
| Recovery | Cyan | Heilzone (regeneriert Energie) |
| Dash Plate | Magenta | Speed-Booster |
| Dirt | Braun | Verlangsamungszone (Damping-Effekt) |
| Ziellinie | Rot | Start/Ziel |
| Checkpoint | Blau | Muss passiert werden für gültige Runde |
Die Startposition wird als oranger Pfeil angezeigt und zeigt Position und Blickrichtung des Spielers beim Rennstart.
- P drücken, dann auf die Karte klicken um die Position zu setzen
- A/D um den Startwinkel zu drehen
- Der generierte Code enthält
init_player_pos_x,init_player_pos_yundinit_player_angle
- Installiere Python Version 3.10+ auf deinem Computer (https://www.python.org/downloads/)
- Installiere pygame:
pip install pygame - Installiere numba für Performance-Optimierung:
pip install numba - Klone dieses Repository:
git clone - Starte das Spiel:
python main.py
Du findest den ursprünglichen Test-Build unter https://pschuermann97.itch.io/mode7-racer, der 4 aufeinanderfolgende Rennen bietet.
| Taste | Funktion |
|---|---|
| Pfeil Links/Rechts | Lenken |
| Pfeil Hoch | Beschleunigen |
| Pfeil Runter | Bremsen |
| Leertaste | Booster verwenden (nach 1 Runde freigeschaltet) |
| ESC | Pause-Menü öffnen |
| R | Rennen neu starten (Debug) |
Das Spiel unterstützt die meisten USB-Controller (Logitech, Xbox, PlayStation, etc.).
| Button | Funktion |
|---|---|
| D-Pad / Linker Stick | Lenken |
| X / Kreuz (Button 0) | Beschleunigen / Bestätigen |
| Dreieck (Button 3) | Bremsen |
| Kreis (Button 1) | Booster |
| Start (Button 9) | Pause-Menü |
Tipp: Die Button-Belegung kann in settings/gamepad_settings.py angepasst werden. Setze dort GAMEPAD_DEBUG = True, um die Button-Nummern deines Controllers in der Konsole zu sehen.
| Taste / Button | Funktion |
|---|---|
| Pfeil Hoch/Runter oder D-Pad | Menü-Navigation |
| Enter / Leertaste oder X-Button | Bestätigen |
| ESC oder Start-Button | Pause-Menü schließen |
Jedes Rennen erfordert 3 Runden zum Abschluss. Nach Abschluss eines Rennens drücke Leertaste, um zum nächsten zu springen. Wenn deine Energie auf null sinkt, drücke Leertaste zum Neustart.
Während eines Rennens wird unten links eine statische Mini-Map angezeigt.
- Eigene Mini-Map pro Strecke (empfohlen):
- Lege ein Bild unter
gfx/ui/minimaps/ab. - Namenskonvention:
gfx/ui/minimaps/<floor_texture_basename>_minimap.png - Beispiel:
gfx/event_horizon_track2.png→gfx/ui/minimaps/event_horizon_track2_minimap.png
- Lege ein Bild unter
- Fallback: Wenn kein Bild vorhanden ist, rendert das Spiel eine einfache Mini-Map aus den Kollisions-Rechtecken.
- Konfiguration: Siehe
settings/ui_settings.py(z.B.MINIMAP_ENABLED, Skalierung/Größe, Marker-Verhalten).


