Comment tags

Das nenne ich ein nützliches Feature! Sie (der Programmierer) fügen einige Codezeilen ein (hauptsächlich Kommentare) und der Rest des Teams (schon wieder Sie?) kann Werte ändern, verschiedene Sounds und Bilder wählen und so weiter, ohne eine einzige Zeile im Skript ändern zu müssen! Außerdem bekommen sie detaillierte Anweisungen.

Schauen wir uns den Code für ein blinkendes Licht an:

define red_light skill1;
define green_light skill2;
define blue_light skill3;
define light_range skill4;
define light_on skill5;
define light_off skill6;

Nichts Neues bisher, richtig? Wir geben den ersten sechs Skills neue Namen. Also weiter:

// entry: "light is on" sound
// help: This sound is played when the light is on
sound lighton_wav = <lighton.wav>;

Die obigen Zeilen erstellen einen neuen „Eintrag“, der es erlaubt, die voreingestellte „lighton.wav“ Datei durch eine andere Wavedatei zu ersetzen. Schauen wir uns an, wie dieser „Eintrag“ aussieht und wie wir dort hinkommen.

Gehen wir die obigen Zeilen einzeln durch:

// entry: "light is on" sound erzeugt einen neuen Eintrag für unsere Sounddatei und schreibt „Light is on“ sound darüber. Sie können Einträge für Variablen, Entities, Bilder, Sounds und Strings erstellen.
// help: This sound is played when the light is on erzeugt den Hilfetext, der dargestellt wird, wenn der Spieler den “?” Knopf drückt und dann auf die Entity klickt;
sound lighton_wav = <lighton.wav>; Dies ist die Standard Definition, die den Default Sound (lighton.wav) festlegt.

Klicken Sie auf den Knopf rechts davon und Sie werden eine Liste von Sounds, die geladen werden können, um den voreingestellten zu ersetzen.

Schauen wir uns den Rest des tags.wdl Skriptes an:

// title: Flashing light
// image: flashing.pcx
// uses: red_light, green_light, blue_light, light_range, light_on, light_off
// desc: Set color, range, on/off intervals for any flashing light
action flashing_light
{
my.invisible = on;
my.passable = on;
if (my.light_on < 0.1) {my.light_on = 0.1;}
if (my.light_off < 0.1) {my.light_off = 0.1;}
my.red = my.red_light;
my.green = my.green_light;
my.blue = my.blue_light;
while (1)
{
snd_play (lighton_wav, 50, 0);
my.lightrange = my.light_range;
sleep (my.light_on);
my.lightrange = 0;
sleep (my.light_off);
}
}

Dieser Teil des Codes ändert den Teil des Fensters, der erscheint, wenn Sie mit rechts auf eine Entity klicken und „Behavior“ anwählen.

Der erste Kommentar bestimmt den Titel des Fensters. Der zweite zeigt das Bild darunter an. Die Zeile „uses“ red_light, green_light und so weiter zeigt diese Namen auf dem Panel an und ersetzt damit die langweiligen skill1 ... skill6. Sie können diese Werte ändern und mit „Save“ abspeichern. Die letzte Zeile liefert die Beschreibung, die unter dem Bild erscheint, ebenso wie den Text, der dargestellt wird, wenn Sie eine Action für eine Entity auswählen und die Hilfe aufrufen, weil Sie nicht wissen, was diese Action leistet.

Der Code für das blinkende Licht ist recht simpel: er verbirgt die Entity, stellt sicher, dass light_on und light_off mindestens 0,1 sind und setzt die Farbe des Lichtes. Die Schleife lässt das Geräusch ertönen und manipuliert die Reichweite des Lichtes von dem in „Light_Range“ gegebenen Wert auf 0 und zurück, um den Blinkeffekt herzustellen.

Intelligente Musik

Folgendes Szenario: Sie betreten einen düsteren Gang, wo wenige Fackeln mehr Schatten als Licht erzeugen. Die Musik bleibt sanft, daher haben Sie keine allzu große Angst. Einige weitere Schritte und... Bang! Die Tür hinter Ihnen schlägt zu und die Musik wird plötzlich spannend, al seine Horde Monster Sie anfällt. Die Musik bleibt angespannt, bis Sie das Tageslicht wieder sehen.

Ich weiß, das klingt alles sehr dramatisch, aber der Code für die Musik ist sehr einfach – sehen Sie selbst!

action music_trigger
{
my.passable = on;
music_handle = snd_loop (gentle_wav, 50, 0);
while (vec_dist (player.x, my.x) > 100) {wait (1);}
temp_volume = 50;
while (temp_volume > 5)
{
snd_tune (music_handle, temp_volume, 0, 0);
temp_volume -= 1 * time;
wait (1);
}

Ich habe das Guard Model für die Entity benutzt, die den Effekt auslöst; Sie sollten das Model unsichtbar machen, sobald Sie mit dem Effekt zufrieden sind. Ich habe mich für die snd_loop Anweisung entschieden, weil media_play eine kleine Lücke erzeugt. Die erste Schleife wartet bis der Spieler näher als 100 Quants ist und nutzt snd_tune in einer anderen Schleife, um die Lautstärke des Soundtracks herunterzufahren. Mit der Variable temp_volume ändern wir diesen Wert von 50 (der ursprüngliche Wert) bis herunter auf 5, was für ein nettes Ausblenden sorgt.

snd_stop (music_handle);
music_handle = snd_loop (tense_wav, 50, 0);
while (vec_dist (player.x, my.x) < 1000) {wait (1);}
temp_volume = 50;
while (temp_volume > 5)
{
snd_tune (music_handle, temp_volume, 0, 0);
temp_volume -= 1 * time;
wait (1);
}
snd_stop (music_handle);
wait (1);
music_handle = snd_loop (gentle_wav, 50, 0);
}

Gentle.wav hat nun endgültig aufgehört, also starten wir tense.wav. Dieser Track spielt bis die Distanz zwischen dem Spieler und dem Guard Model größer ist als 1000 Quants (nahe dem Ende des Ganges in meiner Demo). Wenn der Spieler diese gefährliche Zone verlässt, wird tense.wav langsam ausgelendet und der gute alte gentle.wav Track beginnt erneut.