F: Wie kombiniert man Models in MED?
A: Öffnen Sie das erste Model und wählen Sie dann File -> Merge aus und laden Sie das zweite Model. Sie müssen das Ergebnis neu mit Sknis versehen.


 

F: Wie kann ich vermeiden, dass Gegner mich sehen, wenn der Spieler sich in ein anderes Model verwandelt hat (mit ent_morph)?
A: Schalten Sie enable_scan für Ihren Spieler ab und die Gegner werden ihn nicht mehr sehen (wenn Sie scan_entity verwenden, was sie sollten).
 

F: Ich verwende hit_smoke und hit_sparks für eine meiner Waffen, damit es aussieht, als ob Staub aufgewirbelt wird, wenn der Boden getroffen wird. Mein Problem ist, dass dies auch geschieht, wenn ein Feind getroffen wird... gibt es einen einfachen Weg, das zu ändern?
A: Öffnen Sie weapons.wdl, suchen Sie die Funktion hitpoint_effect und fügen Sie die roten Codezeilen hinzu:

function _hit_point_effect()
{
     // flash at hit point?
     if((fire_mode & MODE_HIT) == HIT_FLASH)
     {
          weaponTmpSyn = YOU;  // save YOU value
          create(small_flash,TARGET,_blowup);
          YOU = weaponTmpSyn;
     }

     // smoke at hit point?
     if(fire_mode & HIT_SMOKE)
     {
             if (you == null)
            {
                emit(20,TARGET,particle_smoke); // emit smoke
            }
     }

     if(fire_mode & HIT_SPARKS)
     {
            if (you == null)
            {
                  emit(20,TARGET,particle_scatter); // emit sparks
            }
     }
    .......................................................
}
 

F: Ich habe gerade von der Demo auf die Extra Version aufgerüstet. Nun haben alle Models weiße Quadrate an den Füßen, wo sie den Boden berühren. Wieso?
A: Das ist das alte Schattensystem, das nicht gut mit einigen Grafikkarten / Treibern zusammenarbeitet. Öffnen Sie die animate.wdl, suchen Sie die action drop_shadow und ändern Sie diese wie gezeigt:

ACTION drop_shadow
{
    return;
    IFDEF CAPS_FLARE;
         if(VIDEO_DEPTH >= 16)
         {
              create(SHADOWSPRITE,MY.POS,move_shadow);
         }
         else
         {
              create(SHADOWFLAT,MY.POS,move_shadow);
         }
    IFELSE;
             create(SHADOWFLAT,MY.POS,move_shadow);
    ENDIF;
}
 

F: Wieviele Events kann eine Action haben?
A: Eine Action kann eine einzelne Eventfunktion haben, aber auf soviele Events reagieren, wie Sie möchten. Hier ist ein Beispiel:

function how_tor_react( );

action i_am_sensitive
{
    my.enable_block = on;
    my.enable_click = on;
    my.enable_touch = on;
    my.enable_scan = on;
    ..............................
    my.event = how_to_react;
}

function how_to_react( )
{
    if (event_type == event_block)
    {
        // event_block was triggered
        ........................................
    }
    if (event_type == event_click)
    {
        // event_click was triggered
        .......................................
    }
    if (event_type == event_touch)
    {
        // event_touch was triggered
        ........................................
    }
    if (event_type == event_scan)
    {
        // event_scan was triggered
        .......................................
    }
}
 

F: Ich habe ein 2D / 3D Seitscroller Spiel gemacht und möchte nun, dass die Kamera einen Punkt X Quants vor dem Spieler anpeilt.
A: Verwenden Sie diesen Code als einen Anfang:

var horizontal_offset = 100;
var vertical_offset = 50;
var camera_distance = 400;

view side_view // used as an alternative to the camera view
{
     layer = 15;
     pos_x = 0;
     pos_y = 0;
     size_x = 640;
     size_y = 480;
     flags = visible;
}

starter init_view()
{
     camera.visible = off;
     while (player == null) {wait (1);}
     while (1)
     {
          side_view.x = player.x + horizontal_offset;
          side_view.y = player.y - camera_distance;
          side_view.z = player.z + vertical_offset;
          side_view.pan = player.pan + 90; // 0, 90, 180 or 270
          wait (1);
     }
}
 

F: Wie benutze ich handle und ptr_for_handle?
A: Jede Entity, Action, String, Bmap, Panel oder Pointer hat eine einzigartige ID, wenn sie geladen oder erstellt wird. Handle wird benutzt, um diese in einer Variable oder einem Skill zu speichern und ptr_for_handle holt den alten Zeiger zurück. Lesen Sie den Artikel über “Perfekte KI” in diesem Magazin für ein Beispiel.
 

F: Wenn ich das Level starte, drehen sich meine Zauberer um und laufen gegen die Wand. Wie erreiche ich es, dass sie einfach stehen? Ich benutze die Action actor_walk_fight.
A: Sie haben einen zu kleinen Wert für _HEALTH eingestellt. Erhöhen Sie skill9 und alles wird wieder normal.
 

F: Wie kann ich einen Gesundheitsbalken über dem Kopf eines Gegners anzeigen?
A: Fügen Sie eine Codezeile an den Anfang der Action Ihrer Feinde hinzu

ACTION actor_ai_one
{
     ent_create (healthbar_mdl, my.pos, display_health);
     // set up and call helper functions
     // Health-
     if (MY._HEALTH <= 0) { MY._HEALTH = 75; } // default 75 health

     // Armor-
     if (MY._ARMOR <= 0) { MY._ARMOR = 0; } // default 0 armor

      // Force-
     if (MY._FORCE == 0) { MY._FORCE = 1.5; }  // default force
    .................................................................
}

und kopieren Sie dann den folgenden Code an den Anfang Ihrer war.wdl:

string healthbar_mdl = <healthbar.mdl>;

function display_health( )
{
     my.passable = on;
     while (you != null)
     {
          my.x = you.x;
          my.y = you.y;
          my.z = you.z + 50;
          my.scale_y = you._health / 10;
          vec_set(temp, camera.x);
          vec_sub(temp, my.x);
          vec_to_angle (my.pan, temp);
          my.tilt = 0;
          wait (1);
     }
     my.invisible = on;
}