Dieses Programm kann nur 768er Karten zu je 4 mal 5 Kacheln kopieren.
Aufgrund dieser Einschränkung nahm ich mir vor 2 Jahren vor, ein besseres Programm zu schreiben, jedoch kam die Entwicklung der aLobby dazwischen.
Heute erhielt ich erneut eine Anfrage nach meinem Programm, weshalb ich es jetzt so wie es ist hier veröffentliche.
Bedienungsanleiung:
Ladet euch die s3map.exe herunter und schiebt sie in einen Ordner eurer Wahl. (Ein eigens für das Kartenkopieren angelegter Ordner wäre sinnvoll, da die s3map.exe nen Haufen temporärer Datein darin erzeugen wird.)
Dann ladet ihr euch die 20tpl.edm Karte herunter.
Sie besteht komplett aus Wasser Level 8, hat aber in der linken oberen Ecke einen Rahmen aus 1 Pixel Breite Wasser Level 7.
1) Ihr öffnet im Karteneditor die 20tpl.edm Karte und speichert sie unter einem neuen Namen (maximal 8 Zeichen lang!)
2) Im Wasser Level 7 Rahmen erstellt ihr nun eure Insel.
Wichtig: außerhalb des Wasser Level 7 Rahmens muss Wasser Level 8 sein, da es sonst passieren kann, dass die beim Kopieren erstellte Karte nicht mehr vom Karteneditor lesbar ist.
3) Wenn eure Insel fertig gestellt ist, könnt ihr aus Schönheitsgründen eventuell den übrigen Rahmen Wasser Level 7 durch Wasser Level 8 ersetzen.
4) Ihr speichert eure Karte und verschiebt sie in den Ordner, wo sich die s3map.exe befindet.
5) Ihr öffnet ein Dos Fenster (Start -> Ausführen -> "cmd")
Ihr hangelt euch in das Verzeichnis, wo ihr die s3map.exe abgelegt habt.
(Mit "cd .." gelangt ihr einen Ordner höher, mit "cd ORDNERNAME" gelangt ihr in den Ordner)
6) Ihr startet durch Tippen von "s3map" das Kartenkopierprogramm.
7) Nun gebt ihr den Kartendateinamen eurer Karte ein (mit ".edm" am Ende)
Nun gebt ihr den Kartendatateinamen der zu erstellenden Karte ein (maximal 8 Zeichen zusätzlich ".edm" am Ende)
9) Jetzt müssten 8 Schritte angezeigt werden, diese dauern eine Weile. Wartet ab, bis "Done." auf dem Bildschirm erscheint.
10) Nun könnt ihr die neu erstelle Karte im Karteneditor öffnen, Verbindungen zwischen den 20 im Moment noch isolierten Inseln schaffen und die Startpositionen der 20 Spieler setzen.
Möchtet ihr beispielsweise nur eine 16er Karte erstellen, macht ihr alles wie bei der 20er beschrieben und radiert am Ende 4 Inseln aus.
Ich werde in den nächsten 3 Jahren nicht dazu kommen, ein besseres Kartenkopierprogramm zu schreiben, aber falls sich jemand anderes damit beschäftigen möchte, ist hier der Quellcode meines bisherigen Programmes (Turbo Pascal)
VAR
input, output : FILE OF BYTE;
temp : BYTE;
inStr, outStr, zahl : STRING;
i, ii, iii : LONGINT;
PROCEDURE WriteWater;
VAR
w : BYTE;
BEGIN
w := $1B; WRITE(output, w);
w := $3F; WRITE(output, w);
w := $81; WRITE(output, w);
w := $02; WRITE(output, w);
w := $07; WRITE(output, w);
w := $0E; WRITE(output, w);
END;
PROCEDURE RW;
BEGIN
READ(input, temp);
WRITE(output, temp);
END;
PROCEDURE UntilWater;
VAR
ok : BOOLEAN;
BEGIN
ok := FALSE;
REPEAT
RW;
IF temp = $1B THEN
BEGIN
RW;
IF temp = $3F THEN
BEGIN
RW;
IF temp = $81 THEN
BEGIN
RW;
IF temp = $02 THEN
BEGIN
RW;
IF temp = $07 THEN
BEGIN
RW;
IF temp = $0E
THEN ok := TRUE;
END;
END;
END;
END;
END;
UNTIL ok;
END;
PROCEDURE UntilStart;
VAR
i : LONGINT;
BEGIN
FOR i := 1 TO 9210
DO RW;
END;
PROCEDURE SaveLine(i : LONGINT);
VAR
zahl : STRING;
n : LONGINT;
BEGIN
STR(i, zahl);
ASSIGN(output, 'TEMP' + zahl + '.DAT');
REWRITE(output);
FOR n := 1 TO 918 { 153 }
DO RW;
FOR n := 1 TO 3690 { 615 }
DO READ(input, temp);
CLOSE(output);
END;
BEGIN
WRITE('Eingangsdatei: ');
READLN(inStr);
WRITE('Ausgangsdatei: ');
READLN(outStr);
ASSIGN(input, inStr);
ASSIGN(output, 'HEAD.DAT');
RESET(input);
REWRITE(output);
UntilWater;
WRITELN('(1/8) Bis Wasser ...');
UntilStart;
WRITELN('(2/8) Bis Start ...');
CLOSE(output);
FOR i := 1 TO 191
DO SaveLine(i);
WRITELN('(3/8) Zeilen gespeichert ...');
FOR i := 1 TO 2640384 { 191*768*3*6 }
DO READ(input, temp);
WRITELN('(4/8) Bis Boden angelangt ...');
ASSIGN(output, 'BOTTOM.DAT');
REWRITE(output);
WHILE NOT EOF(input)
DO RW;
CLOSE(output);
CLOSE(input);
WRITELN('(5/8) Boden gespeichert ...');
ASSIGN(output, outStr);
REWRITE(output);
ASSIGN(input, 'HEAD.DAT');
RESET(input);
WHILE NOT EOF(input)
DO RW;
CLOSE(input);
WRITELN('(6/8) Kopf bertragen ...');
FOR i := 1 TO 4 DO
BEGIN
FOR ii := 1 TO 191 DO
BEGIN
STR(ii, zahl);
ASSIGN(input, 'TEMP' + zahl + '.DAT');
FOR iii := 1 TO 5 DO
BEGIN
RESET(input);
WHILE NOT EOF(input)
DO RW;
CLOSE(input);
END;
WriteWater;
WriteWater;
WriteWater;
END;
END;
WRITELN('(7/8) Zeilen bertragen ...');
ASSIGN(input, 'BOTTOM.DAT');
RESET(input);
WHILE NOT EOF(input)
DO RW;
WRITELN('(8/8) Boden bertragen...');
CLOSE(output);
WRITELN('Done.');
READLN;
END.
Funktionsweise des Kartenkopierprogrammes:
1) Es wird nach dem ersten Vorkommen von Wasser gesucht (Bitweise) und alles bis dahin in eine temporäre Datei geschrieben.
2) Die Zeilen der oberen linken Ecke werden in temporäre Datein geschrieben
3) Das Ende der Karte (nach dem letzten Wasser) wird in eine temporäre Datei geschrieben.
4) Der Kopf wird in die neue Kartendatei geschrieben
5) Die gespeicherten Zeilen werden 20fach an die neue Kartendatei angehangen.
6) Der Rest der alten Karte wird an die neue ran geschrieben.
lg Stephan
PS: Falls der Anhang nicht angezeigt wird, hier der Direktlink
Hint
After clicking "OK" a connection to Facebook will be established so that you can share the post there with your Facebook account.