Banner left   Banner center   Banner right

Germanenglish Home · News · Diary · Screenshots · Documentation (Wiki) · Downloads · Guestbook · Forum

Home · Benutzer registrieren · Suchen · Statistik · FAQ · Benutzerliste

Zur Zeit online: keiner ausser dir

 X-Force - Fight For Destiny - Forum —› X-Skript / Developer-Pack —› Mapeditor

Seite: 1 [2] >>

Autor Mitteilung
verfasst am: 13.08.2005, 10:59
Registrierdatum: 13.08.2005, 10:53

 Beiträge: 46
Ihc hab mich nun ein wenig mit dem Editor gespielt. Dabei sind einige Fragen aufgetaucht.

Ich nehme an, dass das konstruieren der Map vom Skript gesteuert wird - gibt es dazu eine Doku. Nur aus dem Quelltext ist es ein bisserl schwer herauszulesen was wohin kommt.

Ein weiterer Gedanke ist es Maps gemäss der Region zu machen wo man das Ufo abschiesst (ala X-com). Gibt es dazu einen Parameter den ich auslesen kann/muss.

Was mir auch unklar ist, ist wie die absolute Grösse der Maps ermittelt wird. Konnte den Parameter dafuer nicht lokalisieren.

Und noch eine banala Frage - wie kann man Objekte (i.e. Mauern) wieder entfernen.
verfasst am: 13.08.2005, 14:18
Spielsatz Darkage

Registrierdatum: 01.03.2005, 13:47

 Beiträge: 1846
Das mit den regionen geht glaube ich nicht. Aber wissen tu ichs nicht.

Letzteres aber weiß ich, da ich die selbe Frage gestellt habe. Das erste Mauerstück in der Auswahl ist quasi der "Radiergummi" hieß es, ausprobiert habe ich es noch nicht.
verfasst am: 13.08.2005, 20:19 · Edited by: JohnS
Grafiker

Registrierdatum: 06.03.2005, 16:04

 Beiträge: 460
jupp, das 1. leere Feld ist der Radiergummi
ist etwas umständlich, da wenn die vorhandenen wegmachen willst, auch den Korrekten Radiergummi brauchst, also TR, TL usw.

Häuser sind kein Problem, machst ein neues Haus, das fortlaufend nennst. Werden dann durch das Script automatisch plaziert. Ich hatte den Effekt schon für Reifenstapel, zerstörte Häuser usw. mißbraucht, damit die Bodeneinsätze nicht so langweilig sind.

Die Kartengröße, soweit ich das Script gelesen hab, bekommt der Mapgenerator/Script als Werte schon fertig, und baut dann daraus die Landschaft.

Noch ein Tipp, wenn ich den nicht schon woanders hatte ...
Wen es nervt das seine Leute immer verteilt sind, der ändert einfach bei der Map den Startpunkt, d.h. setzt mehr friendly Hotspots ... Dann stehen endlich alle zusammen, oder teilt die auf, ganz nach belieben.
verfasst am: 14.08.2005, 11:14
Registrierdatum: 15.04.2005, 14:41

 Beiträge: 214
Besteht die Möglichkeit das ihr die Maps veröffentlicht?
Langsam finde ich es auch demotivierend immer die selben zwei Häuser zu durchsuchen.

Nebenbei gibt es eigendlich eine Anleitung zu dem Mapeditor?

Ich hab ihn kurz ausprobiert und bin gleich mit einem Ausnahmefehler konfrontiert worden.
verfasst am: 14.08.2005, 12:36
Grafiker

Registrierdatum: 06.03.2005, 16:04

 Beiträge: 460
Zitat: tw01d023
Besteht die Möglichkeit das ihr die Maps veröffentlicht?


Hätte ich schon gemacht ^^, nur hab ich meine Karten bei Spielneuinstallation überschrieben, und noch keine Lust gehabt wieder neue Gebäude zu machen.

Wenn ich wieder was hab, stell ich es zur Verfügung.
verfasst am: 14.08.2005, 13:31
Spielsatz Darkage

Registrierdatum: 01.03.2005, 13:47

 Beiträge: 1846
Wie funktioniert das überhaupt, wenn man eigene Karten benutzen will? Oder alte und neue zusammen. Hatte auch mal ein wenig rumprobiert.
verfasst am: 15.08.2005, 11:03
Registrierdatum: 13.08.2005, 10:53

 Beiträge: 46
Vorab zuerst mal danke fuer die Hilfe mit dem Löschen.

Was ich aus dem Quelltext herausfinden konnte war das zuerst ein Strassekreuz erstellt wir (von der mitte heraus) und danach der freie Raum mit Häusern gefüllt wird. Das ist sequentiell und damit schlichtweg begrenzt.

(add JohnS: So passiert das auch wenn du zusätzliche Häuser erzeugst.) [OOC: sorry weis nicht wie man Zitat macht]

Ich würde gerne meine Räume mit State-engines erstellen. Also wenn A dann kommt dort B aber nicht C. Wenn B dann geht C und E usw. Dafür benötige ich aber Funktionen - und das habe ich nicht gefunden. Fuer mich gibt es zwei alternativen Masterskript und Sub-skripte oder Procedures. Das Problem ist nur das ich nicht experimentieren will sondern gerne ne Doku mit den Befehlen hätte.

add LennStar: Ich hab 2 Kartensets - meines und das Standard. Mein Gefühl ist, dass er bei der Spielinitialisation eines wählt und dieses dann verwendet. Bin aber nicht sicher.

Und final - zu meiner Schande muss ich gestehen das ich kein toller Grafiker bin und daher nicht angefangen habe mit den Grafiken zu epxerimentieren. Ich dachte das ich fuer mich selber einige Bilder von anderen verwende - das kann aber nicht veröffentlich werden wegen des Copyrights derselbigen Bilder.
verfasst am: 17.08.2005, 15:58 · Edited by: Sarun
Registrierdatum: 13.08.2005, 10:53

 Beiträge: 46
Ich hab den folgenden code geschrieben der im Simulator funktioniert aber beim aufrufen in xforce abschmiert.

program YourMapScript;

var
xposition, yposition : Integer;

function checkCollision(var X,Y :Integer) : Boolean;
begin
    result:=false;
    if (GetRoomAtPos(X,Y) = '')  then
        result:=true;
end;

procedure createPosition();
var
    X,Y       : Integer;
    collision : Boolean;
begin
     collision := false;

     while not collision do
     begin
          X := random(GetMapWidth)
          Y := random(GetMapHeight)
          collision:=checkCollision(X,Y)
          xposition:=X
          yposition:=Y
          continue;
     end
end;

procedure createDoublePosition();
var
   X,Y,Z       : Integer;
   firstCollision,secondCollision : Boolean;
begin
   firstCollision := false;
   secondCollision := false;

     while not firstCollision do
     begin
          X := random(GetMapWidth)
          Y := random(GetMapHeight)
          Z := Y+1;
          secondCollision:=checkCollision(X,Y)
          if secondCollision then
              firstCollision :=checkCollision(X,Z)
          xposition:=X
          yposition:=Y
          continue;
     end
end;


procedure GenerateStreet();
var
  i,X,Y       : Integer;
  RowOK       : Boolean;
  YTemp       : Integer;
begin
   // Horizontale Strasse erstellen
  for i:=0 to round(GetMapWidth/3) do
  begin
    X := random(GetMapWidth)
    if (GetRoomAtPos(X-1,1) = '') and (GetRoomAtPos(X+1,1) = '') then
    begin
      for y:=0 to GetMapHeight-1 do
        CopyRoomToPos(X,Y,'Street_Horizontal_*')
    end
  end

  // Vertikale Strasse erstellen
  for i:=0 to GetMapHeight/3 do
  begin
    Y := random(GetMapHeight)
    RowOK:=true
    for YTemp:=Y-1 to Y+1 do
    begin
      if (GetRoomAtPos(0,YTemp)='Street_Vertical_*') or (GetRoomAtPos(0,YTemp)='Street_Crossing_*') then
        RowOK:=false
    end

    if RowOK then
    begin
      for X:=0 to GetMapWidth-1 do
      begin
        if GetRoomAtPos(X,Y) = 'Street_Horizontal_*' then
          CopyRoomToPos(X,Y,'Street_Crossing_*')
        else
          CopyRoomToPos(X,Y,'Street_Vertical_*')
      end
    end
  end
end;

procedure PlaceHouses();
var
  width,height        :Integer;
  spaces,houses : Integer;
  i,temp       : Integer;
begin
     width    := GetMapWidth
     height   := GetMapHeight



    //1/3 der Fläche sollen Häuser sein
    spaces:=width*height
    houses:= round(spaces/3)

    // Wenn es weniger als 2 Häuser gibt, dann sollen nur Häuser die 1-Segment belegen verwendet werden.
    if houses < 2 then
    begin
        for i:=0 to houses do
        begin
             createPosition();
             CopyRoomToPos(xposition, yposition,'House_*')
        end
    end

    //Wenn es mehr als 2 Häuser gibt, dann wird 25% 1-Segment Haus gebaut und
    //dann die verbleibenden Häuser durch 2 geteilt. Eine solche anzahl 2-Segment Häuser wird gebaut
    //und final gecheckt ob es noch verbleibende Haus-Space gibt
    else
    begin
         temp:=round(houses/4)
         for i:=0 to temp do
         begin
              createPosition();
              CopyRoomToPos(xposition, yposition,'House_*')
         end

         houses:=houses-temp
         temp:=round(houses/2)

         for i:=0 to temp do
         begin
              createDoublePosition();
              CopyRoomToPos(xposition, yposition,'2House_oben')
              CopyRoomToPos(xposition, yposition+1,'2House_unten')
         end

         if not (temp*2 = houses) then
         begin
              createPosition();
              CopyRoomToPos(xposition, yposition,'House_*')
         end
    end
end;


procedure GenerateMap;
begin
  //Zuerst wird eine Strasse gebaut
  GenerateStreet;
  
  //Dann werden die Häuser plaziert
  PlaceHouses;

  FillFreeRooms('Green');
end;

begin
  // Hier darf kein weiterer Code folgen
end.



Was kann damit falsch sein?
verfasst am: 17.08.2005, 16:11
Programmierer

Registrierdatum: 23.08.2003, 19:16

 Beiträge: 2261
Zitat: Sarun
Was mir auch unklar ist, ist wie die absolute Grösse der Maps ermittelt wird. Konnte den Parameter dafuer nicht lokalisieren.
Mit Version 0.900 hatte ich eine Funktion eingebaut, mit der man die Größe der Karte im Skript bestimmen konnte. Muss es mir nochmal anschauen und gebe dir dann Bescheid. Im Normalfall wird die Größe anhand der Anzahl der Einheiten bestimmt.
Zitat: tw01d023
Besteht die Möglichkeit das ihr die Maps veröffentlicht?

Von mir aus gesehen hab ich kein Problem. Nur habe ich noch keine Maps erhalten.
Zitat: tw01d023
Nebenbei gibt es eigendlich eine Anleitung zu dem Mapeditor?
Leider nein.
Zitat: Sarun
Das Problem ist nur das ich nicht experimentieren will sondern gerne ne Doku mit den Befehlen hätte.
Alle Funktionen die es gibt, siehst du links im Objektbrowser im Skript-Editor (medit.exe). Dort kannst du auch die Karten testen.
Zitat: Sarun
Ich hab den folgenden code geschrieben der im Simulator funktioniert aber beim aufrugen in xforce abschmiert.
Prüfe mal ob die Raumnamen überall stimmen. Ne Fehlermeldung (eventuell mit error.txt an jim_raynor@web.de) wären auch ganz hilfreich. Bisher wird abgebrochen, wenn irgendwo Räume (mit Jokerzeichen) referenziert werden, die garnicht in der Karte exisiteren.
Zitat: Sarun
Mein Gefühl ist, dass er bei der Spielinitialisation eines wählt und dieses dann verwendet. Bin aber nicht sicher.
Mmh. Normalerweise sollte es für einen Einsatz zufällig ermittelt werden. Man kann einen Eintrag in der Registry vorgeben, falls immer eine bestimmte Karte getestet werden soll. (dazu mehr wenn gewünscht).

Generell wäre es natürlich hilfreich, wenn sich jemand die Mühe macht und die Erkentnisse zu den Editoren in der Online-Dokumentation eingetragen werden.
verfasst am: 17.08.2005, 16:18
Registrierdatum: 13.08.2005, 10:53

 Beiträge: 46
Ich hab den Fehler in meine Skript gefunden. Das Prog ist in eine Endlossschleife gegangen. Hab jetzt eine Stop-Bedingung eingebaut.

Wenn wer will stelle ich mein Map-File gerne zur Verfügung.
verfasst am: 17.08.2005, 20:09
Registrierdatum: 15.04.2005, 14:41

 Beiträge: 214
Moment verstehe ich das jetzt richtig.

Ich erstelle einen Kartensatz mit verschiedenen "Räumen", so wie Straßenkreuz, Straße_h, Straße_v, haus_1, usw..

Und dann schreibe ich im Skript ein Programm das aus diesen Räumen eine Karte erstellt.

So und jetzt?

Und wo kommt das Skript jetzt hin? In den Spielsatz? Oder brauche ich eine <procedure GenerateMap;> damit das Skript aufgerufen werden kann?
verfasst am: 18.08.2005, 09:09
Programmierer

Registrierdatum: 23.08.2003, 19:16

 Beiträge: 2261
Zitat: tw01d023
Und wo kommt das Skript jetzt hin? In den Spielsatz? Oder brauche ich eine <procedure GenerateMap;> damit das Skript aufgerufen werden kann?
Du brauchst die Prozedur und das Skript muss in die Karte mit eingehängt werden. Dafür gibt es im Karteneditor eine Funktion. (irgendein Symbol in der Symbolleiste)

Zitat: Jim_Raynor
Mit Version 0.900 hatte ich eine Funktion eingebaut, mit der man die Größe der Karte im Skript bestimmen konnte. Muss es mir nochmal anschauen und gebe dir dann Bescheid. Im Normalfall wird die Größe anhand der Anzahl der Einheiten bestimmt.
So, wie versprochen hier eine Beispiel Funktion:

procedure CalculateMapSize(Units: Integer);
begin
  MapWidth:=random(10);
  MapHeight:=random(10);
end;


Die Funktion muss CalculateMapSize im Skript heissen und bekommt einen Parameter, der die Anzahl der Einheiten im Einsatz (X-Force + Gegner) angibt. Die Variablen MapWidth und MapHeight, kannst du dann mit der entsprechenden Kartengröße versorgen. Falls es Probleme damit gibt, einfach melden.
verfasst am: 18.08.2005, 09:12
Registrierdatum: 13.08.2005, 10:53

 Beiträge: 46
Du zeichnest Dir verschiedene Kartenelemente (je nach Gusto und grafischem Vermögen).

Im Map-Editor gibt es dann eine Möglichkeit ein Skript, welches im Skripteditor geschrieben wird, einzubinden. In diesem Skript definierst Du wie die Karte generiert werden soll. Die derzeitige Lösung ist sequentiell und zufällig.

Falls Du kein Skript schreibst, dann wird die ganze Sache zufällig verteilt. Dies ist natürlich nicht besonders hübsch.
verfasst am: 18.08.2005, 09:18 · Edited by: Sarun
Registrierdatum: 13.08.2005, 10:53

 Beiträge: 46
Verstehe ich das Richtig das in Deiner Procedure die MapWidth and MapHeight eigentlich zufällig generiert werden mit 10 als Maximum?

Zitat: Jim_Raynor
bekommt einen Parameter, der die Anzahl der Einheiten im Einsatz


Ich nehme an dass ich diesen Parameter beim Funktionsaufruf bestücken muss - woher bekomme ich den Parameter? Und wo werden die Units verwendet?

Beim Kompilieren ist das Skript abgeschmiert weil die Var's nicht definiert sind. Sollen das Globale oder Lokale sein?
verfasst am: 19.08.2005, 09:07
Programmierer

Registrierdatum: 23.08.2003, 19:16

 Beiträge: 2261
Zitat: Sarun
Verstehe ich das Richtig das in Deiner Procedure die MapWidth and MapHeight eigentlich zufällig generiert werden mit 10 als Maximum?
Korrekt. Ist nur ein Beispiel. In der Regel sollte man die Größe anhand der Anzahl der Einheiten ermitteln.
Zitat: Sarun
Ich nehme an dass ich diesen Parameter beim Funktionsaufruf bestücken muss - woher bekomme ich den Parameter? Und wo werden die Units verwendet?
Diese Funktion wird von X-Force aufgerufen und übergibt dir im Paramater die Anzahl der Einheiten. Du kannst dann anhand der Anzahl die Kartengröße festlegen.

Zitat: Sarun
Beim Kompilieren ist das Skript abgeschmiert weil die Var's nicht definiert sind. Sollen das Globale oder Lokale sein?
MMh. Hast du Developer Pack 1.04 installiert? Wenn ja, dann muss ich nochmal schauen, dass der richtige Skripteditor installiert ist.
verfasst am: 19.08.2005, 22:04 · Edited by: tw01d023
Registrierdatum: 15.04.2005, 14:41

 Beiträge: 214
Ist ja schön ich hab mal angefangen ein paar Räume zu erstellen. Ist recht mühsam.

Aber ich bin zu schnell für den Editor!

Nachdem ich annehme das da die gleiche Grafik-Engine wie im Spiel verwendet wird leide ich unter "langsamen Zeichenfunktionen". Wie das aussieht? Ich klicke nach der Reihe auf die Elemente am Boden und er zeichnet sie. Allerdings bin ich so ca. 5 mal schneller und kann dann am Ende zusehen wie die Map langsam erscheint (volle Prozessorauslastung) und dauert noch bis zu 5 min nachdem ich schon fertig mit klicken bin.

Aber zurück zum Thema:
Gibt es neben GenerateMap und CalculateMapSize noch Funktionen die man verwenden kann?

Und wenn ich die Karte fertig hab einfach ins Maps Verzeichnis und das Spiel verwendet die Sets nach dem Zufallsprinzip?

Ach ja und der Ausnahmefehler war weil ich den default Raum verändern wollte, hab ihn jetzt einfach gelöscht weil er ja eh keine Felder hatte.

Ach ja und wo ist der Null-Punkt in der Ecke TL,BL ?
Und von wo nach wo geht x bzw y ?
verfasst am: 23.08.2005, 18:52 · Edited by: Sarun
Registrierdatum: 13.08.2005, 10:53

 Beiträge: 46
In der letzten Version meines Skripts habe ich nun angefangen das die Map-Grösse die doppelte Anzahl der Soldaten als Max hat -> dies funktioniert im Spiel aber nicht im Editor (laut updater habe ich die letzte Version). (Hat man überigens mehr als 2 multiplikator kann die Map sehr sehr gross werden)

procedure CalculateMapSize(Units: Integer);
var
   maxtile: Integer;
begin
  maxtile:=Units*2;
  if maxtile<6 then
     maxtile:=6;
  MapWidth:=random(maxtile);
  MapHeight:=random(maxtile);
end;



Ein weiteres Problem das ich gefunden habe ist wenn ich 2-Segment Häuser baue. Laut editor werden die Häuser korrekt gebaut. Im Spiel sind die Häuser jedoch machmal neben einander - ich vermute daher, das die Map zufällig rotiert wird. Gehe ich richtig in meiner Annahme - oder hat der Editor eine Bug (und somit auch mein Skript)?
verfasst am: 24.08.2005, 20:40
Registrierdatum: 15.04.2005, 14:41

 Beiträge: 214
Zitat: Sarun
Hat man überigens mehr als 2 multiplikator kann die Map sehr sehr gross werden

Auf welche Grösse bist du leicht gekommen.

Ich dache an eine maximale Kartengrösse von 10x10 Felder.
verfasst am: 28.08.2005, 23:40
Registrierdatum: 13.08.2005, 10:53

 Beiträge: 46
wenn man 10 Soldaten hat geht sich mit 2 eine Map von 20 x 20 aus. Das ist schon wirklich gross. 3 wuerde entsprechend Grösser werden.

10 x 10 finde ich klein da ich gerne Gruenflächen und Wasser (oder anders unbegehabares) haben will. Damit bleibt mir nicht mehr viel fuer Häuser ueber.
verfasst am: 29.08.2005, 09:22
Programmierer

Registrierdatum: 23.08.2003, 19:16

 Beiträge: 2261
Mmh. Eins sollte ich noch klarstellen. MapWidth und MapHeight werden in Räumen (15x15) angegeben. Heisst bei MapWidth=10 und MapHeight=10 wäre die Karte 150x150 Felder groß und das ist für 5 Einheiten schon sehr sehr sehr groß :)

Zitat: Sarun
Ein weiteres Problem das ich gefunden habe ist wenn ich 2-Segment Häuser baue. Laut editor werden die Häuser korrekt gebaut. Im Spiel sind die Häuser jedoch machmal neben einander - ich vermute daher, das die Map zufällig rotiert wird.
Mmh. Hatte ich eigentlich ausgebaut. Gehst du vielleicht von der falschen Perspektive aus? Also der Raum ganz links im Spiel hat die Koordinate (X=0, Y=MapHeight-1) ganz rechts ist (X=MapWidht-1, Y=0).

Seite: 1 [2] >>




Du musst dich registrieren um auf dieses Thema zu antworten.
Login :: » Name » Passwort

Ladezeit (sec.): 0.006 · Powered by miniBB 1.6 with parts of 1.7 © 2001-2003