F: Wie bringt man eine Spielfigur dazu, einer anderen zu folgen?
A: Hier ist eine modifizierte Action des A5 Demo Projektes.

entity* robot_boss;

action robot_master
{
   robot_boss = my;
   // put the rest of your code here
   // ........
}

action robot_slave
{
   var slave_target;
   var slave_speed;
   while (robot_boss == null) {wait (1);}
   while (1)
   {
      my.tilt = 0;
      slave_target.x = robot_boss.x - 50 * cos (robot_boss.pan); // stay 50 quants
      slave_target.y = robot_boss.y - 50 * sin (robot_boss.pan); // behind robot_boss
      slave_target.z = robot_boss.z;
      slave_speed.x = 7 * time;
      slave_speed.y = 0;
      vec_set (temp, my.x);
      temp.z -= 1000;
      trace_mode = ignore_me + ignore_sprites + ignore_models + use_box;
      slave_speed.z = -trace (my.x, temp);
      vec_set (temp.x, slave_target.x);
      vec_sub (temp.x, my.x);
      vec_to_angle (my.pan, temp);
      if (abs(slave_target.x - my.x) + abs(slave_target.y - my.y) > 30)
      {
           ent_move (slave_speed, nullvector);
           ent_cycle("walk", my.skill10); // play walk frames animation
           my.skill10 += 5 * time;
           my.skill10 %= 100;
      }
      wait (1);
   }
}

 


F: Ich versuche gerade, den Code für meine eigenen Waffen zu schreiben. Wie kann ich der Trace Anweisung Partikel zuweisen? Ich will kein Skript, nur die Idee.
A: Trace setzt “target” auf die Koordinaten des Auftreffpunktes. Schreiben Sie diese Zeile unter Ihre trace Anweisung.

effect(your_particle_function, number_of_particles, target, initial_particle_speed);

Example: effect(hit_sparks, 10, target, vector(1, 1, 2));

 

F: Ich habe das Model eines Baumes und möchte gern bis zum Stamm laufen können, aber die Bounding Box erlaubt es mir nicht, wegen der Blätter.
A: Führen Sie folgende Schritte aus:

- Stellen Sie das Baum Model in Ihr Level und machen Sie es “passable”;

- Plazieren Sie einen Zylinder (primitive) mit 6-16 Flächen an derselben Position wie der Stamm und machen sie ihn unsichtbar.

 

 

F: Wie kann ich ein Tor (eine Falle) hinter dem Spieler zufallen lassen, wenn er durch einen Laser läuft?
A: Plazieren Sie eine Entity nahe an Ihrem Laser und geben Sie ihr die Action “door_trigger”. Für die Tür nutzen Sie eine WMB Entity mit der Action “door_trap”.

entity* door_t;

action door_trigger
{
   my.invisible = on;
   my.passable = on;
   while (player == null) {wait (1);}
   while (door_t == null) {wait (1);}
   while (vec_dist(player.x, my.x) > 100) {wait (1);}
   while (door_t.z > 0) // final z = 0, play with this value
   {
      door_t.z -= 3 * time; // 3 = speed
      wait (1);
   }
   door_t.z = 0; // the door moves from 100 to 0 quants in this example
}

action door_trap
{
   door_t = my;
   my.z = 100; // initial z, play with this value
}



 

F: Ich benötige simplen Code für den Levelwechsel bei einem Projekt mit 9 Levels. Eine einfache Box und eine Ziffer, die der Levelzahl entspricht wäre genug.
A: Klicken Sie hier, um das Projekt herunterzuladen.

 

F: Ich mache ein Spiel und frage mich, wie ich einen Film (avi) einfügen kann. An einem bestimmten Punkt soll es ausgelöst werden.
A: Plazieren Sie eine Entity mit der movie_trigger Action; wenn Sie ihr nahe kommen, startet der Film.

action movie_trigger
{
    my.passable = on;
    while (player == null) {wait (1);}
    while (vec_dist(player.x, my.x) > 100) {wait (1);}
    media_play("my_movie.avi", null, 50);
}

 

F: Wie kann ich aus einer Textdatei Planetennamen auslesen, zufällige x, y und z Koordinaten setzen, diese in einer Datei speichern und wieder laden, wenn der Spieler nahe heran kommt?
A: Klicken Sie hier, um ein Projekt herunterzuladen, das fünf Planetennamen aus einer Textdatei namens planets.txt liest, für jeden Planeten eine zufällige Position erzeugt und dann die Namen und Koordinaten in processed.txt schreibt. Sie sollten mit “ent_create” dann kleine Entities mit wenig Polygonen an diesen Positionen erstellen und diese verwenden, um die Distanz zwischen ihnen und dem Spieler in einer Schleife zu prüfen und die Planeten darzustellen, wenn der Spieler nahe genug ist.

 

F: Ich habe das Projekt aus der FAQ von AUM37 probiert (moveps2.zip) und hätte einen Änderungswunsch: wenn ich mich drehe und in die neue Richtung gehen möchte, dann geht das durch Druck auf “W”, gleich welche Richtung das ist.
A: Klicken Sie hier für die modifizierte Version. Mit “A” und “D” kann der Spieler gedreht werden. “W” bewegt ihn nach vorn und “S” nach hinten.

 

F: Wie kann ich große Level mit Terrain bauen ohne Performance zu verlieren?
A: Verwenden Sie mehrere (kleinere) Terrain Entities zusammen mit Nebel und geeigneten camera.clip_far Einstellungen. Schauen Sie sich das Bild unten an: alle blauen Terrains werden gerendert (das geschieht, wenn nur ein einzelner Vertex in der camera.clip_far Reichweite ist), aber die violetten werden nicht angezeigt. Vergessen Sie nicht, die Terrains gut zusammenzusetzen; ich habe den Platz zwischen ihnen absichtlich gelassen, weil ich wollte, dass Sie die Terrains als verschiedene Teile erkennen.