Das Script selbst hat recht viele für das Problem irrelevanten Zeilen. Dort wo der Quelltext gekürzt ist, wird Rooms mit den einzelnen Räumen gefüllt. Dafür nutze ich aber viele Case-Verzweigungen (Mapgröße, Raster der Straßen, ..., (es handelt sich um eine Stadt-Map)) Anschließend soll ein zufälliger Straßen-Raum ausgewählt und durch den Raum mit den XForce-Spawnpunkten (ein gelandetes Transport-"Raumschiff" als Render-Tile, derzeit noch ein wenig unschön) ersetzt. Hatte letztens bei einer anderen Map gemerkt, dass ein zweites CopyRoomToPos auf einer Position den Raum nicht überschreibt, sondern die Tiles addiert. daher speichere ich das ganze vorher als Array, um hinterher einzelne Räume ersetzen zu können. Der ganze untere Teil des Scripts sieht so aus:
// Erzeuge sooft zufällige Koordinaten, bis der gewählte Raum eine Straße ist.
repeat
CursorX:=random(GetMapWidth);
CursorY:=random(GetMapHeight);
until Copy(Rooms[CursorX][CursorY],1,6)='street';
// Ersetze die aktuelle Straße mit dem entsprechenden XForce-Raumschiff-Raum
Rooms[CursorX][CursorY]:=Copy(Rooms[CursorX][CursorY],1,9)+'xforce';
// Fülle die Map mit den Räumen aus dem Array
for CursorX:=0 to GetMapWidth do
for CursorY:=0 to GetMapHeight do
CopyRoomToPos(CursorX,CursorY,Rooms[CursorX][CursorY]);
Hinweis: Die Straßen-Räume sind benannt in:
"street_H_1" .. "street_H_5", "street_H_xforce" (Horizontale Straßen)
"street_V_1" .. "street_V_5", "street_V_xforce" (Vertikale Straßen)
"street_X_1" .. "street_X_3", "street_X_xforce" (Kreuzungen)