PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Positionsdaten von Objekten extern ändern



Realpope68
25-10-13, 18:25
Mit dem Karten Editor von FraCry3 lassen sich die Positionen von Objekten auch Extern verändern.

Über das Selekt Symbol oder durch einfaches anklicken können Objekte Selektiert und Kopiert werden.


http://www.imgbox.de/users/Realpope68/FC3/FC3_CP1.png

Nach dem Kopieren "Copy selection to Clipboard" können diese Daten auch mit Strg-V
in einer Text Datei abgelegt dann verändert und mit "Paste from Clipboard"
neu in die Map eingefügt werden. Dieser Inhalt lässt sich dann auch verändern.

Ich habe ein kleines Q-Basic Programm entwickelt welche 3072 Barrel's zu einem Turm aufbaut.



DIM nr$(512): FOR i = 0 TO 511: nr$(i) = LTRIM$(STR$(i)): NEXT

k$(0) = ".000000": k$(1) = ".125000": k$(2) = ".250000"
k$(3) = ".375000": k$(4) = ".500000": k$(5) = ".625000"
k$(6) = ".750000": k$(7) = ".625000": k$(8) = ".875000"
m$(0) = "": m$(1) = "-": k$ = ",": h$ = CHR$(34)

DATA "<FC3Editor.ObjectSelection>"
DATA "<Object Display="
DATA " Entry="
DATA " Pos="
DATA " Angles="
DATA " Offset="
DATA "HasOffset="
DATA " />"
DATA "</FC3Editor.ObjectSelection>"

eze$ = " Offset=" + h$ + "0,0,0" + h$ + " HasOffset=" + h$ + "0" + h$ + " />"

DATA "Floor 02","%$C0A06941"
DATA "Floor 03","%$B7A759D7"
DATA "Floor 04","%$29C3CC74"
DATA "Floor 05","%$5EC4FCE2"
DATA "Floor 06","%$C7CDAD58"
DATA "Floor 01","%$59A938FB"

DATA "Explosive Barrel 02","%$C13948CB"
DATA "Explosive Barrel 01","%$40F4E85A"
DATA "Barrel Directional 02","%$7C6E3AF7"
DATA "Barrel Directional 01","%$2B02C67B"

DATA "Pirate Rocket","%$72C311A1"
DATA "Pirate Molotov","%$E2B18597"
DATA "Pirate Berserker","%$A20BE3F7"
DATA "Pirate Assaulter","%$0E671CD9"

FOR i = 1 TO 9: READ r$(i): NEXT: r$(2) = CHR$(9) + r$(2)

DIM n$(128): DIM e$(128)
FOR i = 1 TO 14
READ n$(i): n$(i) = h$ + n$(i) + h$
READ e$(i): e$(i) = h$ + e$(i) + h$
NEXT

MainFrame:

SCREEN 12: CLS
LINE (64, 240)-(64 + 512, 256), 7, BF

as$ = STRING$(40, 42): rl = ((80 - LEN(as$)) / 2): LOCATE 2, rl: PRINT as$;
as$ = "Far Cry 3": rl = ((80 - LEN(as$)) / 2): LOCATE 4, rl: PRINT as$;
as$ = "Random Map Maker": rl = ((80 - LEN(as$)) / 2): LOCATE 4, rl: PRINT as$;
as$ = "by Relpope68 V1.01 Date : 25.10.2013": rl = ((80 - LEN(as$)) / 2): LOCATE 6, rl: PRINT as$;
as$ = STRING$(40, 42): rl = ((80 - LEN(as$)) / 2): LOCATE 8, rl: PRINT as$;

OPEN "RNDMAP.TXT" FOR OUTPUT AS #1
PRINT #1, r$(1): rl = ((80 - LEN(r$(1))) / 2): LOCATE 14, rl: PRINT r$(1);

anzahl = 3072: REM <<<<<<<<<<<<<<<< Hier Anzahl der Barrel's angeben
FOR ze = 1 TO anzahl
g = FIX(RND(1) * 4) + 7

mx = FIX(RND(1) * 2): my = FIX(RND(1) * 2): mz = 0
k = FIX(RND(1) * 9): x = FIX(RND(1) * 16): wx$ = m$(mx) + nr$(x) + k$(k) + k$
k = FIX(RND(1) * 9): y = FIX(RND(1) * 16): wy$ = m$(my) + nr$(y) + k$(k) + k$
k = FIX(RND(1) * 9): z = FIX(RND(1) * 80) + 17: wz$ = m$(mz) + nr$(z) + k$(k)

p$ = h$ + wx$ + wy$ + wz$ + h$

mx = FIX(RND(1) * 2): my = FIX(RND(1) * 2): mz = FIX(RND(1) * 2)
k = FIX(RND(1) * 9): a = FIX(RND(1) * 180): ax$ = m$(mx) + nr$(a) + k$(k) + k$
k = FIX(RND(1) * 9): a = FIX(RND(1) * 180): ay$ = m$(my) + nr$(a) + k$(k) + k$
k = FIX(RND(1) * 9): a = FIX(RND(1) * 180): az$ = m$(mz) + nr$(a) + k$(k)

a$ = h$ + ax$ + ay$ + az$ + h$

z$ = r$(2) + n$(g) + r$(3) + e$(g) + r$(4) + p$ + r$(5) + a$ + eze$

PRINT #1, z$

pro = ze / anzahl * 510
LINE (65, 241)-(pro + 65, 255), 9, BF

NEXT
PRINT #1, r$(9): rl = ((80 - LEN(r$(9))) / 2): LOCATE 18, rl: PRINT r$(9);
CLOSE 1
SLEEP 3: END



http://www.imgbox.de/users/Realpope68/FC3/ReTex_08s.png
(http://www.imgbox.de/users/Realpope68/FC3/ReTex_08b.png)

Die so erstellten Daten werden in einer Datei namens "RNDMAP.TXT" abgelegt.
Diese Daten einfach mit Strg-A -> Strg-C Speichern und im Editor mit "Paste from Clipboard" einfügen.

Das Programm und die FarCry3 Demo Map gibt es hier. Download : FC3_RandomMap.rar (http://www.gamefront.com/files/23798998/FC3_RandomMap.rar)

Ps.: Dieses Programm darf gerne nach eigenen wünschen angepasst werden.
... dann mache Ich mich mal auf die Suche nach den Tarrain Höhendaten einer .fc3map

LFino
28-10-13, 10:38
Hii Realpope


Das ist ne geniale Arbeit, Hut ab!

Ich hätte dabei ne spannende Idee. Wenn man z.B bei einer Map ein einzigartiges Objekt selber zusammen baut (z.B ein Gabelstapler) und man diesen dann ins Clipboard speichert, sollte dein externes Programm dieses Speichern. Nun kann man diesem Objekt einen Namen geben -> Gabelstapler.
Jetzt macht man all das nocheinmal mit sagen wir einem Haus, das man selbst erstellt hat. Dieses speichert man ebenfalls im Clipboard und gibt diesem in Deinem Programm den Namen -> Haus.

Wenn man nun im Editor "Paste from Clipboard" auswählt, sollte Dein Programm zum Beispiel fragen:

Welches dieser Objekte soll eingefügt werden:
Gabelstapler
Haus

Wenn man nun auf einen dieser [BUTTON] klickt, wird das jene im Editor eingefügt.


IST SOWAS MACHBAR ?
-> Wenn ja, das wäre eine riesige Innovation und sehr sehr nützlich zu gleich.


Anyway, keep up the good work!


Gruss, Fino

Realpope68
28-10-13, 14:57
Mal schauen ob Ich dich Richtig verstanden habe ... an einem Beispiel :

Ich habe mir 15 verschiedene Häuser ausgesucht alle haben eine verschiedene Grundfläche.
Da Ich diese auch verdrehen könnte sage Ich mal sie haben einen Grundflächen Radius.
Damit könnte Ich berechnen wie groß der Abstand zwischen zwei verschieden großen Gebäuden (Objekten) ist.
In einfach Ich könnte mir so mit ein paar klicks eine Zufall Stadt generieren.
Bin Ich schon dran ... :) ... aber eine Stadt in Flach ... ?

Mal eben eine Frage. In meinem einfachen Editor habe Ich 40 Texturen für das Terrain.
Sind in deinem erweitertem Editor mehr Texturen für das Terrain ?

Ich frage da Ich immer noch nach den Terrain Höhendaten suche.
Gebe Ich einem Objekt eine Höhe von Hand an ... sagen wir mal 16.0123456789 und kopiere das in eine Text Datei
bekomme ich eine Höhe von 16.0123 angegeben. Also vier stellen nach dem Komma. Nun gehe Ich davon aus
das Höhen Daten einer Map ebenfalls 4 Stellen nach dem Komma haben müssten. Der erste Gedanke das es sich um
Scaled Integer Werte handelt habe Ich gleich verworfen. Mit 24 bit kann ein Wert von 1023.9999 gespeichert werden.
Das Terrain Grid hat 512x512 Meter sprich ich benötige 513x513 Grid Daten. Was ich nicht verstehe ist warum sich
die Größe einer .fc3map Datei ändert wenn ich ein Flaches und ein Terrain mit Noise habe.
Egal ob Ich eine oder vier Texturen auftrage.
Wenn Ich das Terrain von Hand hochziehe erhalte Ich eine maximal Höhe von 576.00 Metern ...

So jetzt gibt es diese Möglichkeiten um Höhendaten + Texturen in Bit Form darzustellen :

Um _1023 darstellen zu können benötigt es 10 bit = _____11.1111.1111
Um .9999 darstellen zu können benötigt es 14 bit = 10.0111.0000.1111
Um __576 darstellen zu können benötigt es 10 bit = _____10.0100.0000
Um ___40 Texturnen in darzustellen ________6 bit = __________10.1000

Schnell nachgerechnet und Ich komme auf 30 Bit +/- 2 Bit für was weis Ich ... (32bit / 4byte / Dword)
·-> Eventuell 2 bit für ausgeschnittenes Terrain ! 0-3 = vier Ecken ! :)

Warum bekomme Ich aber für 2 verschiedene Karten Flach / Noise ... so verschieden .fc3map File größen ?
Flach mit nix drauf ca. 470 KB und eine NOISE MAP hat eine Größe von ca. 1.8 bis 2.3 MB !?! :confused:
513 * 513 * 4 = 1.052.676 byte für Terrain
128 * 128 * 4 = ___65.536 byte für Bild
______________________256 byte ca. für Headder (Mapname,Username,etc.)
Gesamt ________= 1.118.468 byte (Mapsize ohne Objekte oder Palmen Patches)

Tja dann mal viel Spaß beim knobeln ... http://www.imgbox.de/users/Realpope68/FC2/smilie_denk_10.gif
Um herauszufinden wo die Einsprung Adresse für das preview Bild ist suche man nach diesem String
( 128,0,0,0,128,0,0,0,4,0,0,0,8,0,0,0 ) ... und Addiere 16 byte dazu :)

·-> PS.: So langsam glaube Ich das sich noch ein zeites Bild (gepackt) in einer .fc3map Datei befinden muss.
Wenn ich in einer Empty Map einen Backpack lege und dicht ran-zoome bekomme ich ein Schwarzes
Vorschaubild ... jede Karte welche Ich so getestet habe wird um ca. 110.000 bis 210.000 bytes kleiner !?!