Game API Referenz¶
Diese Seite dokumentiert die komplette Java-API, die Quest-Autoren im Spiel nutzen können.
Sie ergänzt das Quest Editor Handbuch und die Quest-Design-Konzepte.
Überblick¶
Es gibt drei relevante API-Ebenen:
GameIODiese API ist immer erlaubt, auch in sichtbaren und bearbeitbaren Dateien.GameDie bevorzugte Quest-API für Variablen, Switches, NPCs, Objekte und globale Effekte.IfRPGLegacy- und Spezial-API für Player, UI, Medien und Debugging.
Dazu kommen die NRW-Datenstrukturen:
NRWList,NRWQueue,NRWStackNRWBinaryTree,NRWBinarySearchTree,NRWComparableContentNRWVertex,NRWEdge,NRWGraph
Diese Klassen sind reine Datenstrukturen und immer verfuegbar.
Wichtig:
- In sichtbaren, bearbeitbaren Dateien bleibt nur
GameIOerlaubt. Game,IfRPG,Player,UI,MediaundDirectionsind nur für Questdateien gedacht.Game.getNPCList()undGame.getObjectList()liefern immer nur Entities aus dem aktuellen Level.- Die NRW-Klassen mit
NRW-Prefix sind ueberall erlaubt.
Laufzeitmodell¶
Die API kennt synchrone und asynchrone Methoden.
Asynchron:
- Dialoge und Eingaben über
GameIOundIfRPG.UI - Player-Bewegung per
walkTo,runTo,walkToRelative,runToRelative,step...,interact - Entity-Bewegung per
walkTo,runTo,walkToRelative,runToRelative playAnimation(..., false)aufGameEntity
Synchron:
- Getter und Statusabfragen
lookAtsetX,setY,moveTo- Licht- und Effektmethoden
- Medienaufrufe
- Variablen- und Switch-Zugriff
Teleport-Methoden:
setX,setYundmoveToteleportieren sofort.- Sie nutzen keine Pfadsuche.
- Sie spielen keine Laufanimation.
- Sie prüfen keine Kollisionen.
Wichtige Typen¶
Direction¶
Color¶
Für Licht- und Effektmethoden wird die normale Java-Color-Klasse verwendet.
Listen¶
Game.getNPCList() und Game.getObjectList() liefern Java-Listen:
Game.getNPCNRWList() und Game.getObjectNRWList() liefern stattdessen NRW-Listen:
Live-Handles auf Entities¶
NPC- und GameObject-Instanzen sind Live-Handles auf die Spielwelt.
- Ihre Werte beziehen sich immer auf das aktuelle Level.
- Nach Levelwechsel oder Zustandswechsel kann ein Handle ungültig werden.
- Prüfe bei länger lebenden Referenzen mit
exists().
GameIO¶
GameIO ist die einfache öffentliche API für Schülercode.
Signaturen¶
static String inputText(String title, String question)
static int inputNumber(String title, String question)
static boolean inputBoolean(String title, String question, String trueLabel, String falseLabel)
static int inputChoice(String title, String question, String[] choices)
static void outputText(String title, String message)
Verhalten¶
- Alle
input...-Methoden sind asynchron. outputText(...)ist ebenfalls asynchron und wartet, bis der Dialog bestätigt wurde.inputChoice(...)liefert einen 1-basierten Index zurück. Die erste Option ist also1, nicht0.- Die UI zeigt maximal 8 Auswahloptionen gleichzeitig sinnvoll an.
Beispiel¶
String name = GameIO.inputText("Name", "Wie heißt du?");
int alter = GameIO.inputNumber("Alter", "Wie alt bist du?");
boolean ok = GameIO.inputBoolean("Start", "Weitermachen?", "Ja", "Nein");
int wahl = GameIO.inputChoice("Werkzeug", "Was nimmst du?", new String[]{"Hammer", "Bohrer"});
GameIO.outputText("Info", "Hallo " + name + "!");
Game¶
Game ist die empfohlene Quest-API für Weltzustand und Entities.
Variablen und Switches¶
Signaturen:
static boolean hasVariable(String id)
static int getInt(String id)
static double getDouble(String id)
static String getString(String id)
static boolean getBoolean(String id)
static boolean getSwitch(String id)
static void setInt(String id, int value)
static void setDouble(String id, double value)
static void setString(String id, String value)
static void setBoolean(String id, boolean value)
static void setSwitch(String id, boolean value)
Hinweise:
- Intern sind Switches boolesche Variablen.
getSwitch(...)undsetSwitch(...)sind Kompatibilitätsnamen für boolesche Werte.- Nicht vorhandene Variablen liefern den jeweiligen Default des Laufzeitmodells.
Beispiel:
if (!Game.getBoolean("door_open")) {
Game.setBoolean("door_open", true);
}
int coins = Game.getInt("coins");
Game.setInt("coins", coins + 5);
Entity-Lookups¶
Signaturen:
static NPC getNPCById(String id)
static List<NPC> getNPCList()
static NRWList<NPC> getNPCNRWList()
static GameObject getObjectById(String id)
static List<GameObject> getObjectList()
static NRWList<GameObject> getObjectNRWList()
Hinweise:
getNPCById(...)undgetObjectById(...)liefernnull, wenn im aktuellen Level keine passende aktive Entity existiert.GameObjectumfasst alle aktiven Nicht-NPC-Entities, also auch Objekte aus Templates oder Schätze.- Die Listen sind level-lokal, nicht weltweit.
- Die
...NRWList()-Varianten liefern dieselben Inhalte, aber alsNRWList.
Beispiel:
NPC guard = Game.getNPCById("guard_1");
if (guard != null && guard.exists()) {
guard.lookAt(Direction.LEFT);
}
Globale visuelle Effekte¶
Signaturen:
static void setMode(String mode)
static void setMode(String mode, double intensity)
static void setMode(String mode, double intensity, Color color)
static void setWeather(String weather)
static void setWeather(String weather, double intensity)
static void setAtmosphere(String atmosphere)
static void setAtmosphere(String atmosphere, double intensity)
static void setAtmosphere(String atmosphere, double intensity, Color color)
static void setTransformation(String transformation)
static void setTransformation(String transformation, double intensity)
static void clearEffects()
static void resetEffects()
Gültige Werte:
- Mode:
none,night,cave,alert,underwater - Weather:
none,rain,snow,thunderstorm,fireworks,explosions - Atmosphere:
none,fog,toxic,smoke,forest,demonic - Transformation:
none,earthquake,underwater,drunk,muffled
Hinweise:
setMode,setWeather,setAtmosphereundsetTransformationwirken sofort.- Ungültige Strings fallen auf
nonezurück. clearEffects()setzt Mode, Weather, Atmosphere und Transformation aufnoneund entfernt benutzerdefinierte Effektfarben.clearEffects()verändert das Player-Licht nicht.resetEffects()stellt die vollständigen Level-Defaults wieder her, inklusive Player-Licht.
Beispiel:
Game.setMode("night", 0.8, new Color(20, 40, 90, 0.85));
Game.setWeather("rain", 0.6);
Game.setAtmosphere("fog", 0.5, new Color(180, 190, 210, 0.45));
Game.setTransformation("earthquake", 0.7);
GameEntity¶
GameEntity ist die Basisklasse von NPC und GameObject.
Felder¶
Die Felder sind direkt lesbar und spiegeln die aktuelle Runtime wieder.
Getter und Status¶
Sofortige Positionsänderung¶
Hinweise:
- Diese Methoden teleportieren sofort.
- Sie löschen laufende externe Bewegungs-Subpaths der Entity.
- Für NPC-artige Entities wird dabei auch die aktuelle Home-/Rückkehrposition aktualisiert.
Bewegung mit Pfadsuche¶
void walkTo(double x, double y)
void runTo(double x, double y)
void walkToRelative(double x, double y)
void runToRelative(double x, double y)
Hinweise:
- Diese Methoden sind asynchron.
- Relative Methoden beziehen sich auf die aktuelle Position der Entity.
- Wenn kein Pfad gefunden wird, wird die Methode ohne Bewegung beendet.
Blickrichtung¶
Animationen¶
Hinweise:
playAnimation(..., true)startet eine Schleife und kehrt sofort zurück.playAnimation(..., false)wartet asynchron auf eine abgeschlossene Schleife.stopAnimation()beendet nur die explizit gestartete Runtime-Animation.
Licht¶
void lightOn()
void lightOff()
void resetLight()
void setLight(Color color, double radius)
void setLight(Color color, double radius, double intensity)
void setLight(Color color, double radius, double intensity, boolean flicker)
void setLight(Color color, double radius, double intensity, boolean flicker, boolean blink, double blinkFrequency, String blinkPattern)
Hinweise:
lightOn()undlightOff()schalten nur das Runtime-Licht an oder aus.resetLight()stellt das Licht auf den aktuellen Level-/State-Default der Entity zurück.setLight(...)überschreibt das aktuelle Runtime-Licht der Entity.
NPC¶
NPC ist eine finale Unterklasse von GameEntity.
- Keine zusätzlichen Methoden
- Vollständige Funktionalität über
GameEntity
GameObject¶
GameObject ist eine finale Unterklasse von GameEntity.
- Keine zusätzlichen Methoden
- Vollständige Funktionalität über
GameEntity
NRW-Datenstrukturen¶
Die NRW-Abiturklassen sind mit NRW-Prefix immer verfuegbar und kollidieren daher nicht mit den normalen Java-Klassen.
Verfuegbare Klassen¶
NRWList<ContentType>
NRWQueue<ContentType>
NRWStack<ContentType>
NRWBinaryTree<ContentType>
NRWBinarySearchTree<ContentType extends NRWComparableContent<ContentType>>
NRWComparableContent<ContentType>
NRWVertex
NRWEdge
NRWGraph
Kurzuebersicht¶
NRWListbietet die bekannte NRW-Listenlogik mit aktuellem Element (hasAccess,toFirst,next,getContent,append,insert,remove,concat).NRWQueuebietetenqueue,dequeue,frontundisEmpty.NRWStackbietetpush,pop,topundisEmpty.NRWBinaryTreebietet leeren Baum oder Baum mit Inhalt und Teilbaeumen.NRWBinarySearchTreearbeitet mit Typen, dieNRWComparableContentimplementieren.NRWGraphliefert und verarbeitetNRWVertex- undNRWEdge-Objekte.
Beispiel¶
NRWList<NPC> npcs = Game.getNPCNRWList();
if (npcs.hasAccess()) {
NPC npc = npcs.getContent();
npc.lookAt(Direction.LEFT);
}
NRWQueue<String> queue = new NRWQueue<String>();
queue.enqueue("A");
queue.enqueue("B");
System.out.println(queue.front());
IfRPG¶
IfRPG bleibt als Legacy- und Spezial-API erhalten.
Signatur:
Außerdem stellt IfRPG drei statische Einstiegspunkte bereit:
IfRPG.Player¶
Die Player-API steuert direkt die Spielfigur.
Bewegung mit Pfadsuche¶
static void walkTo(double x, double y)
static void runTo(double x, double y)
static void walkToRelative(double x, double y)
static void runToRelative(double x, double y)
Asynchron, mit Pfadsuche und normaler Bewegungslogik.
Teleport¶
Hinweise:
- Teleportiert sofort.
- Löscht den laufenden Script-/Klickpfad des Players.
- Nutzt keine Pfadsuche.
- Prüft keine Kollisionen.
Schritte¶
static void stepUp()
static void stepDown()
static void stepLeft()
static void stepRight()
static void step(Direction direction)
Asynchron, ein Schritt in die jeweilige Richtung.
Position und Walkability¶
static double getX()
static double getY()
static boolean isWalkable()
static boolean isWalkable(Direction direction)
Hinweise:
isWalkable(Direction direction)prüft das angrenzende Feld in dieser Richtung.isWalkable()ohne Parameter prüft das aktuelle Spielerfeld.
Aktionen¶
static void lookAt(Direction direction)
static void interact()
static void blockMovement()
static void unblockMovement()
static boolean isBlocked()
Hinweise:
interact()ist asynchron.blockMovement()undunblockMovement()betreffen die normale Spielersteuerung.
Player-Licht¶
static void lightOn()
static void lightOff()
static void resetLight()
static void setLight(Color color, double radius)
static void setLight(Color color, double radius, double intensity)
static void setLight(Color color, double radius, double intensity, boolean flicker)
static void setLight(Color color, double radius, double intensity, boolean flicker, boolean blink, double blinkFrequency, String blinkPattern)
Hinweise:
lightOn()undlightOff()schalten das Player-Licht nur an oder aus.resetLight()stellt das Player-Licht auf die Level-Defaults zurück.setLight(...)ändert nur das Player-Licht, nicht die übrigen globalen Effekte.
IfRPG.UI¶
Die UI-API bietet die gleichen Basisdialoge wie GameIO, zusätzlich mit optionaler Sprachdatei.
Signaturen¶
static String inputText(String title, String question)
static String inputText(String title, String question, String voiceFile)
static int inputNumber(String title, String question)
static int inputNumber(String title, String question, String voiceFile)
static boolean inputBoolean(String title, String question, String trueLabel, String falseLabel)
static boolean inputBoolean(String title, String question, String trueLabel, String falseLabel, String voiceFile)
static int inputChoice(String title, String question, String[] choices)
static int inputChoice(String title, String question, String[] choices, String voiceFile)
static void outputText(String title, String message)
static void outputText(String title, String message, String voiceFile)
Hinweise:
- Alle Methoden sind asynchron.
inputChoice(...)liefert einen 1-basierten Index zurück.voiceFileist optional und wird als Sprachdatei abgespielt.
IfRPG.Media¶
Die Medien-API steuert Bilder, Videos und Audio.
Signaturen¶
static void showImage(String filename, boolean fullscreen)
static void showMovie(String filename, boolean fullscreen)
static void playMusic(String filename)
static void playSFX(String filename)
static void playVoice(String filename)
Hinweise:
- Diese Methoden sind synchron im Java-Sinn und kehren sofort zurück.
- Verwende dieselben Dateipfade wie im Action-Editor bzw. in bestehenden Quests.
Legacy-Aliase¶
In Questdateien stehen die folgenden Typen zusätzlich auch direkt zur Verfügung:
Das ist Legacy-Kompatibilität. Für neue Dokumentation und neue Inhalte ist diese Schreibweise vorzugsweise:
GameIOfür SchülercodeGamefür QuestlogikIfRPG.Player,IfRPG.UI,IfRPG.Mediafür Spezialfälle
Typische Muster¶
Dialog -> Variable setzen -> Welt reagieren lassen¶
String code = GameIO.inputText("Terminal", "Gib den Zugangscode ein:");
if (code.equals("4711")) {
Game.setBoolean("door_open", true);
GameIO.outputText("Terminal", "Zugang gewährt.");
} else {
GameIO.outputText("Terminal", "Zugang verweigert.");
}
NPC im aktuellen Level bewegen und beleuchten¶
NPC guide = Game.getNPCById("guide");
if (guide != null && guide.exists()) {
guide.moveTo(8.5, 4.0);
guide.setLight(new Color(255, 220, 150, 0.5), 2.8, 0.9, true);
}
Globale Stimmung umschalten¶
Game.setMode("night", 0.8);
Game.setWeather("rain", 0.6);
IfRPG.Player.setLight(new Color(255, 220, 180, 0.6), 3.0, 1.0, true);
Empfehlungen für Autoren¶
GameIOist für Aufgaben und sichtbaren Schülercode fast immer der richtige Einstieg.Gameist die bevorzugte API für Quest- und Weltlogik.IfRPGsollte nur dort eingesetzt werden, wo direkte Player-, UI- oder Mediensteuerung wirklich nötig ist.- Nutze für langlebige Entity-Referenzen immer
exists(). - Nutze
moveTo,setXundsetYnur dann, wenn du wirklich teleportieren willst.