Häufig gestellte Fragen 

F: Kann ich ein Skript zum Anklicken und Auswählen von Objekten in der 3D Welt schreiben?  

A: Benutzen Sie die ACTION select_object für Ihre auswählbaren Objekte: 
function select_me()   
{   
     IF (EVENT_TYPE == EVENT_CLICK)   
     {   
          MY.LIGHTRANGE = 100; // Ausgewähltes Objekt Aufhellen   
          // eigene Befehle hier einfügen   
     }   
     ELSE   
     {   
          MY.LIGHTRANGE = 0;   
     }   
}   

ACTION select_object   
{    
    MY.ENABLE_CLICK = ON;   
    MY.EVENT = select_me;    
}   
   
F: Mir gefällt der Laser Code aus AUM1, aber wenn ich ihn in Außenregionen benutze, bricht die Framerate deutlich ein. Was soll ich machen? 

A: Sie müssen nur eine einzige Zeile zum Laser Code hinzufügen, damit dieser auch wunderbar in Außenregionen funktioniert: 

IF (RESULT !=0)    
{    
      IF (RESULT > 2000) {RESULT = 2000;} // diese Zeile hinzufügen   
      laser_temp.X=(RESULT)*COS(player.PAN)*COS(CAMERA.TILT)+player.X;   
      laser_temp.Y=(RESULT)*SIN(player.PAN)*COS(CAMERA.TILT)+player.Y;   
      laser_temp.Z=(RESULT)*SIN(CAMERA.TILT)+player.Z;   
}   

Variieren Sie die 2000 - Sie beeinflusst die Länge des Lasers. 
      
F: Wie erstelle ich ein Skript zum Anzeigen eines Panels (wie ein Browser) mit Informationen wie etwa Text, Bildern, Aniamtionen...? 

A: Hier ist ein Beispiel für ein Panel, das in der oberen linken Ecke erscheint, und sich zur unteren rechten Ecke bewegt (definieren Sie your_pan): 

var camera_switch = 0;   

ON_F2 show_camera;   

function show_camera()   
{   
   IF (camera_switch == 0)   
   {   
      your_pan.POS_X = -250;  // your_pan außerhalb des Bildschirms setzen  
      your_pan.POS_Y = -250;     
      camera_switch = 1;   
      PLAY_SOUND cameraon_snd, 20;   
      WHILE (your_pan.POS_X < 0) // das Panel bewegt sich   
      {   
           your_pan.POS_X += 20 * TIME;   
           IF (your_pan.POS_X > 0) {your_pan.POS_X = 0;}    
           your_pan.POS_Y += 20 * TIME;   
           IF (your_pan.POS_Y > 0) {your_pan.POS_Y = 0;}    
          WAIT (1);   
       }   
   }   
   ELSE   
   {    
       WHILE (your_pan.POS_X > -250) // zurückbewegen   
       {   
            your_pan.POS_X -= 20 * TIME;   
            IF (your_pan.POS_X < -250) {your_pan.POS_X = -250;}    
            your_pan.POS_Y -= 20 * TIME;   
            IF (your_pan.POS_Y < -250) {your_pan.POS_Y = -250;}    
           WAIT (1);   
       }   
       camera_switch = 0;   
   }     
}   
     
F: Gibt es eine Möglichkeit, die Steuerung so umzubauen, dass die Pfeilhochtaste vorwärts aus der Sicht entspricht? Links und Rechts löst kein Seitwärtsbewegen oder Drehen aus, sondern lässt den Spieler direkt in die gedrückte Richtung blicken und gehen, die Kamera folgt dementsprechend. Es handelt sich um eine 3rd Person-Ansicht. 

A: Dieses Skript wird Ihr Problem lösen: 

var camera_dist = 300; // Wert nach Gutdünken modifizieren   

VIEW topview // auf 800x600 gesetzt   
{   
     POS_X 0;      
     POS_y 0;    
     SIZE_X 800;    
     SIZE_Y 600;    
     LAYER 2;    
     DIAMETER 0;  // durch Wände bewegbar   
}    

function use_topview    
{   
     topview.VISIBLE = ON;   
     topview.TILT = -90;  // nach unten blicken  
     WHILE (1)    
     {   
          topview.X = player.X;    
          topview.Y = player.Y;    
          topview.Z = player.Z + camera_dist;   
          topview.PAN = player.PAN;   
          WAIT  (1);   
    }   
}   
   
   
F: Ich habe einem Gegner eine Aktion zugewiesen (z.B. player_attack). Es existiert eine patrol-Funktion in den Templates, aber ich will meinen Gegner auf Patrouille schicken, bis er einen Feind sieht. Wenn er nun den Spieler erblickt, soll er angreifen. 

A: Sehen Sie sich bitte Action robot1 aus den Templates an: 

ACTION robot1   
{   
      MY._FORCE = 0.7;   
      MY._FIREMODE = DAMAGE_EXPLODE+FIRE_BALL+HIT_EXPLO+BULLET_SMOKETRAIL+0.20;   
      MY._HITMODE = 0;   
      MY._WALKSOUND = _SOUND_ROBOT;   
     anim_init();   
     drop_shadow(); // Schatten anfügen   
     actor_fight();   
     if(MY.FLAG4 == ON) { CALL patrol; }   
}   

Sie müssen FLAG4 des Gegners markieren und er wird das patrouillieren starten (sofern ein Pfad in der Nähe vorhanden ist) und den Spieler bekämpfen, sobald er diesen sieht, oder von ihm beschossen wird. 
   
F: Ist es möglich, ein Musikstück im wav-Format abzuspielen, anstatt MIDI zu verwenden? 

A: Ja, ich habe mit der A5 Engine erfolgreich 30MB wav Dateien ausprobiert.    
   
F: Wie kann ich zeitabhängig die Lebenskraft des Spielers verringern? Ich möchte mit fortlaufender Zeit die Lebenskraft abnehmen lassen.  

A: Benutzen Sie so etwas hier: 

function decrease_health() // in main aufrufen   
{   
    WHILE (1)   
    {   
         IF (PLAYER._HEALTH > 50) // Lebenskraftabnahme begrenzen   
         {   
               PLAYER._HEALTH -= TIME;   
         }   
         WAIT (1);   
    }   
}     
     
F: Ich arbeite an einem Adventure-Spiel, benutze nur die Lift, Tür und Schlüssel-Aktionen. Es stört mich wirklich, dass ich nur vier Schlüssel definieren kann. Vielleicht kann mir einer der WDL-Gurus helfen? 

A: Die neuesten Templates unterstützen acht Schlüssel. Aktualisieren Sie Ihre doors.wdl. 
   
F: Hat schon jemand eine Maus Sensitivitätsroutine geskriptet? 

A: Werfen Sie einen Blick in movement.wdl, dort gibt es eine Variable namens mouseview, mit dieser kann die Sensitivität  verändert werden. Benutzen Sie einen hslider oder vslider, um mouseview zu ändern. 
 
F: Ich habe soeben auf A5 upgegradet und die Partikel, die bis jetzt mit MY_FLARE = ON wirklich gut aussahen, sehen jetzt richtig langweilig aus. Weiß jemand, warum das so ist? 

A: A5 hat ein besseres Partikelsystem. Der neue MY_ALPHA Parameter bestimmt die Transparenz der Partikel. Benutzen Sie MY_ALPHA = x (x = 0..100) in Ihrer Partikelfunktion und Sie werden wieder Ihre gut aussehenden Partikel erhalten. 

F: Wie verändere ich die Reichweite der Waffen? 

A: _bulletspeed (Skill5) gibt die Geschwindigkeit für Projektile UND deren Reichweite an (doppelt so groß wie die Geschwindigkeit des 
Projektils). 

F: Ich würde gerne alle Actor-Bewegungen in eine Datei speichern (ausgelöst durch Start/Stop-Tasten). Irgendwelche Ideen? Wie sieht e mit 
der Geschwindigkeit aus, wenn andauernd (sagen wir einmal alle 100 ms) die X-,Y-,Z- und Rotationskoordinaten in eine datei gespeichert werden? 

A: Ich würde ein Array, das die Spielerpositionen festhaält, definieren. Wenn das Spiel beendet wird (kurz bevor die Engine beendet wird) 
kopieren Sie einfach den Array-Inhalt in eine Datei. 

F: Wie benutze ich muzzle_vert? 

A: Muzzle_vert wird für Gegner benutzt und erlaubt ihnen, von jedem Vertex ihres Körpers aus zu schießen. Öffnen Sie Ihren Modelgegner in MED, Klicken Sie den gewünschten Vertex an und Lesen Sie die Vertexnummer unten am Bildschirm ab. Fügen Sie dann MY.SKILL32 = 
ihre_vertex_nummer; in der Gegneraktion (robot1 oder so) hinzu.