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] >> |