Benutzer-Werkzeuge

Webseiten-Werkzeuge


scripting:tutorials:level2:communication

Effektive Kommunikation mit dem Spieler

Der Zweck dieses Artikels ist die Gegenüberstellung der vielen Möglichkeiten, die ein Mapper hat, den Spieler auf die zu bewältigende Aufgabe aufmerksam zu machen bzw. daran zu erinnern.

Dabei ist zu unterscheiden zwischen Hauptaufgaben, die für das Gewinnen der Karte unerlässlich sind und Nebenaufgaben bzw. Secrets, die aufmerksames Spielen belohnen sollen und deshalb (deutlich) subtiler ausgeschrieben werden können.

Beim Angeben von Informationen für den Spieler ist ein Gleichgewicht zu finden: Auf der einen Seite sollte der Spieler alles wissen, was er braucht, um eine Quest zu lösen oder die Story zu verstehen. Auf der anderen Seite sollte der Spieler nicht mit Informationen bombardiert werden bzw. sollten diese Infos nicht aufdringlich präsentiert werden. Daher ist eine Mischung aus den unten geschilderten Werkzeugen sinnvoll.

Briefings

In diesem Artikel in Ebene 1 werden Briefings vorgestellt. Während Briefings ist die gesamte Aufmerksamkeit darauf gerichtet, weil das Spiel und der Spieler währendessen nichts anderes machen. Diese konzentrierte Aufmerksamkeit sollte nafür genutzt werden, wichtige Informationen für die zu lösenden Quests mitzuteilen. Je nachdem, wie groß die Rolle der Story in der Map ist, werden Briefings auch gerne dafür benutzt, diese zu erzählen.

Weil Briefings sehr abrupt den Spielfluss unterbrechen, sollten sie nicht ständig während Gameplay-Abschnitten von alleine starten, sondern nur als Reaktion auf NPC-Interaktionen oder gelöste Quests. Überlass dem Spieler die Wahl, wann er den Aufbau seiner Siedlung oder seine Kampfhandlungen unterbrechen möchte.

Weil man in Briefings frei mit der Kamera springen und sogar verdeckte Gebiete aufdecken kann, ist es sinnvoll, Questziele genau aufzuzeigen und eventuell mit Markern zu dokumentieren (insbesondere, wenn es sich um Hauptquests handelt!). In der Mission Crawford in der Hauptspiel-Kampagne wurden beispielsweise mit einem Marker auf der Minimap und der Karte selbst die Bauplätze für Ballistatürme kommuniziert:

{
    title = "Helias",
    text = "Wir sollten hier zwei Ballistatürme bauen, weil Kerberos sie vor dem Match nicht verboten hat.",
    position = GetPosition("CrawfordWest"),
    -- Decke das Gebiet um 1000 Scm um die Position auf
    explore = 1000,
    -- Erstelle einen pulsierenden Marker auf der Minimap
    marker = ANIMATED_MARKER,
    -- Erstelle einen Pointer, der die zu bebauende Stelle auf der Karte markiert
    pointer = GetPosition("CrawfordWest")
}

Mit ResolveBriefing können die Marker wieder entfernt werden (setzt voraus, dass die Briefingseite zuvor in einer Variable gespeichert wurde).


Questlog

Im Questlog werden alle Informationen festgehalten, die ein Spieler braucht, um eine Quest zu lösen. Das ist insbesondere bei Quests wichtig, die dem Spieler sehr spezifische Aktionen abverlangen, zum Beispiel das Bauen ganz bestimmter Gebäude an einem vorgegebenen Ort. Der Ort sollte auf der Karte markiert sein und die notwendigen Gebäude (mit Ausbaustufe) im Questlog gelistet. Andernfalls wird der Spieler raten müssen, welche Voraussetzungen er für das Lösen der Quests erfüllen muss, was zu Frust führt.

Einträge im Questlog verschwinden nicht von alleine, sondern erst, wenn der Mapper es möchte. Mit dieser umfassenden Kontrolle geht die Verantwortung einher, das Questlog in jedem Spielabschnitt aktuell zu halten.


Messages und Sounds

Messages sind kleine Textnachrichten unterhalb des Menüs am oberen Bildschirmrand. Sie sind leicht zu übersehen, wenn gerade viel auf der Map passiert und die Message nicht als Reaktion auf eine Aktion des Spielers erscheint (wie zum Beispiel beim Klick auf einen Button oder Interaktion mit einem NPC). Messages werden mit der Funktion Message(_Text) angezeigt und verschwinden nach einer kurzen Zeit von alleine wieder.

Sounds sind in erster Linie dazu da, Nachrichten an den Spieler zu unterstreichen. Das Spiel bietet nur wenige Sounds, die ausreichend Information liefern, um alleinstehend aussagekräftig zu sein. Noch dazu gibt es viele Sounds, die ständig im Spiel vorkommen und daher nicht herausstechen, wenn man sie zusätzlich im Skript startet. Dazu gehören zum Beispiel die Geräusche, die Gebäude beim Verarbeiten von Ressourcen verursachen. Bei der Auswahl eines Sounds ist es demnach wichtig darauf zu achten, dass der Sound nicht im regulären Spielgeschehen auftaucht. Sounds werden mit der Funktion Sound.PlayGUISound(_SoundType, _Volume) gestartet. Eine Liste aller Sounds findest du hier (FIXME link).

Messages und Sounds in Kombination sind aber eine Möglichkeit, dem Spieler unaufdringlich Informationen bereitzustellen, ohne den Spielfluss zu unterbrechen. Ein spezieller Sound weckt die Aufmerksamkeit des Spielers und die Textnachricht gibt konkrete Auskünfte.

Wir zeigen drei verschiedene Anwendungsgebiete und eine passende Art, dem Spieler Hinweise/Informationen zu geben.

Beispiel 1: Der Spieler möchte eine Truhe öffnen, hat aber keinen passenden Schlüssel. Da seine Aufmerksamkeit ohnehin auf der Truhe liegt, reicht es, eine Nachricht anzuzeigen, dass er sich auf die Suche nach dem Schlüssel begeben muss:

Message("Anscheinend habt ihr nicht den passenden Schlüssel für diese Truhe.")

Beispiel 2: Der Spieler wurde gewarnt, dass in der Nähe Banditenlager sind. Sobald sich der Spieler einem der Banditenlager nähert, soll ein Sound als Warnung abgespielt werden. Da der Spieler schon im Voraus weiß, dass er mit Banditen zu rechnen hat, reicht der Sound für sich allein genommen.

function FirstMapAction()
    StartSimpleJob("BanditsWarnPlayer")
end
 
function BanditsWarnPlayer()
    local PositionBandits = GetPosition("BanditTower")
    local NumberOfEntities, _ = Logic.GetPlayerEntitiesInArea(1, 0, PositionBandits.X, PositionBandits.Y, 5000, 1)
    if NumberOfEntities > 0 then
        Sound.PlayGUISound(Sounds.LevyTaxes, 75)
        return true
    end
end

Beispiel 3: Der Spieler errichtet seine Siedlung. Irgendwann soll ein feindliches Banditenlager seine Siedlung angreifen, wofür eine Warnung erscheint. Damit diese Warnung nicht untergeht, weil der Spieler gerade mit etwas anderem beschäftigt ist, wird zur Message ein Sound abgespielt.

Message("Achtung! Ein Angriff feindlicher Banditen steht bevor!")
Sound.PlayGUISound(Sounds.OnKlick_Select_kerberos, 100)
-- Wenn man noch konkreter sein möchte, kann man auch einen Countdown in der oberen linken Ecke anzeigen
MapLocal_StartCountDown(5*60)

Mapdesign

Es gibt auch Möglichkeiten, den Spieler auf Dinge hinzuweisen, die deutlich subtiler sind. Eine davon ist das Mapdesign selbst. Bestimmte Aktionen oder Voraussetzungen auf der Karte können zum Großteil oder ausschließlich dadurch ausgedrückt werden, wie die Karte gestaltet ist.

Ein Beispiel dafür ist ein abschüssiger Weg, auf dem man abseits vom Hauptweg zu einem Gegner gelangen kann. Den kannst du zum einen als Trampelpfad in einem dichten Wald verstecken, andererseits an der Wegkreuzung, die auf den Schleichweg führt, einen Wegweiser aufstellen (XD_Signpost). Ein aufmerksamer Spieler kann das erkennen und so diesen Hintereingang entdecken.

Anderes Beispiel: Der Spieler soll einen fahrenden Händler eskortieren. Damit die Eskorte anständig überfallen werden kann, willst du die Räuberbanden möglicherweise erst erstellen, wenn sich der fahrende Händler einem bestimmten Punkt nähert. Dadurch vermeidest du, dass der Spieler das Gebiet schon im Voraus räumt und keine Eskorte mehr schicken muss. Damit der Spieler nicht überrumpelt wird, ist es wichtig, ihm zu signalisieren, an welcher Stelle er mit einem Überfall rechnen muss. Ein umgestürzter Wagen oder liegengelassene Waffen, ein Lagerfeuer, etc. könnten andeuten, wo die Räuber gelagert haben. Wenn dem Spieler so etwas auffällt, kann er seine Aufmerksamkeit vornehmlich auf diese Stellen richten und der Überfall fühlt sich für ihn weniger willkürlich an.

Zum Mapdesign zählt auch das Platzieren von Gegnern. Gebiete, die ein Spieler noch nicht betreten soll, können von einem (zu) starken Gegner bewacht werden. Durch eine strategische Kombination aus Mapdesign und Gegnerplatzierung kann der Spieler entlang der Missionen über die Map geführt werden, ohne, dass man übermäßig mit verschlossenen Toren oder tödlichen Fallen arbeiten muss.

Zuletzt kann der Spieler durch das Mapdesign auch bei der Erkundung geleitet werden. Steinminen beispielsweise sollten immer in der Nähe von Gebirge platziert sein. Umgekehrt wird ein Spieler also auf der Suche nach Steinminen nach Gebirge Ausschau halten. Wenn du das Gebirge durch steiler werdendes Terrain und zunehmend auftretende Felstexturen „ankündigst“, kannst du so die Richtung angeben, in die der Spieler für sein Ziel erkunden muss.


Priming

Bei Priming geht es darum, dass der Spieler ein einfaches Beispiel für eine zu bewältigende Aufgabe vorgesetzt bekommt und so leicht beobachten kann, was er zu tun hat und wie sich das auswirkt. Somit wird der Spieler ohne große Texteinblendungen eingeleitet, die gleiche Aktion bei ähnlichen, aber schwierigeren Situationen ebenfalls auszuführen.

Beispiel: Um eine (Neben-)Quest abzuschließen, muss Leonardo ein Gerät bauen, für das ihm noch einige Bauteile fehlen. Die gesuchten Bauteile sind in Kisten irgendwo auf der Karte zu finden. Diese Quest kann allein dadurch gestartet werden, dass eine deutlich sichtbare Kiste mit dem ersten Bauteil platziert wird. Wenn der Spieler diese Kiste öffnet, erscheint eine Nachricht „Ihr habt eines der 8 gesuchten Bauteile für Leonardo gefunden!“. Folglich wird dem Spieler klar, dass er sich auf Schatzsuche begeben muss und er hat einen guten Grund, die restlichen, deutlich besser versteckten Truhen ebenfalls zu finden.


Das nächste Kapitel ist kein Tutorial, sondern besteht nur aus Skriptbeispielen. Die in Ebene 1 erstellte Beispielkarte wird darin um einige Quests erweitert, die sich genau der Skriptmöglichkeiten bedient, die in dieser Ebene vorgestellt wurden.

Voriges Kapitel: Banditenlager und Spawner
Nächstes Kapitel: Beispielskript
Zurück nach oben

scripting/tutorials/level2/communication.txt · Zuletzt geändert: 2024/05/20 09:15 von fritz_98