#1
|
||||
|
||||
Maps generieren
Hat jemand von euch Ahnung in welchem Format Maps abgespeichert sind ? Hatte nämlich gerade die Idee einen Map-Generator wie in Yuri zu programmieren. Also ein Klick aufs Knöpfchen und eine neue Map ist da.
Die sind dann zwar sicher nicht so schön wie die die von Handarbeit hergestellt sind, aber bieten schnell mal ein bisschen Abwechslung. Das Ziel hab ich mir gesetzt. Als Werkzeug würde ich C# nutzen. (Bin selbst Programmierer seit mehreren Jahren und habe damit auch einiges an praktischer Programmiererfahrung Woran es noch fehlt ist das Wissen um ein map-file selbst zu erzeugen und eventuell auch die Zeit das ganze zu erstellen, also falls jemand mitmachen möchte Vielleicht ist es aufgrund des map-file aufbaus auch gar nicht möglich... Das alles gilt es noch herausgefunden zu werden. |
#2
|
||||
|
||||
So eine map besteht aus einer *.map datei 1-2 *tga datein und 2 *.xml dateien.
Ob das nun eine oder 2 TGA daeien sind liegt daran, ob man eine minimap eingebaut hat. (Der WB erstellt leider keine vernünftige) Ich hab mal ne nette map für euch alle http://z-karten.z-21.de/downloads.ph...id=11&act=down
__________________
vom 20.3.2006 - 20.3.2011 in der Zivilisation 21 |
#3
|
||||
|
||||
hab gerade leider keinen Zugriff auf meinen c&c computer. könntest du mal eben die .map datei mit einem normalen Editor öffnen und kucken ob es nach xml aussieht ?
Edit 1: Schonok... hab gerade deine sahara map downgeloadet. werd die mal durchkucken... danke Edit 2: Autsch... die map datei ist eine Binärdatei... ohne genaue File-Doku wird das wohl nichts... Last but not least: Edit 3: Scheint so als ob die.map Datei nur die benutzten Texturen enthält. Die map selbst ist in der map.xml datei gespeichert (also die ganzen Objekte , pfade usw). Das heisst alles was in der map gerade benutzt wird, liesse sich auch bei einer generierten map benutzen. -> Sahara.map enthält einige Gebäude, Büsche, usw. Wenn ich dieselben in einer zufallsgenerierten map nutze und alle objekte in der .map datei enthalten sind sollte es ohne weiteres möglich sein eine map zu generieren. Der Aufbau der XML datei sieht auch relativ einfach aus: Ganz oben eine Include section die angibt welche XML ressourcen verwendet werden. Danach eine Game Map section die die Player Start Positions enthält und dann der Reihe nach die einzelnen Objekte. Structures -> die gebäude Prop -> sowas wie Büsche Bäume usw... (davon sind unglaublich viele in der Sahara Map enthalten...) MapMetaData -> Map Name, Grösse, obs eine Offizielle map ist, ob multiplayer oder nicht, ... + Start Positionen der Kamerasicht der einzelnen player EnvironmentData -> Umgebungseinstellungen wie standardenvironment + geräusche... WorldDict -> Standard Musikpalette, Wie weit man raus / reinzoomen kann, standardwetter TerrainTextureAtlas -> Wo die einzelnen Texturen gefunden werden können GameScriptList -> Hier sind nur Player id's vorhanden. Ich denke mit dem vorhandenen Material lässt sich schon einiges bewerkstelligen... Geändert von Peda1983 (28-07-2007 um 12:41 Uhr). |
#4
|
||||
|
||||
@ Matze: Dann pack doch deine Map auch in den Vorstellungs-Thread und leg ein paar Bilder dazu.
@Topic: Ich denke es gibt viele die einen echten Zufallsgenerator zum Erstellen von Karten begrüßen würden. Prinzipiell sehe ich jedoch einen großen optischen Nachteil darin. Die erstellten Karten werden im Vergleich zu konventionell editierten recht schlecht aussehen, da z.B. Straßen und Wege nicht vorhanden sind und wenn doch dann nicht zu den vorhandenen Gebäuden passen (nur mal als Beispiel). Ebenso wird es auch bei den Texturen sein. Selbst wenn ein Generator viele Details erstellen würde, dann würde dieser vermutlich Stunden lang laufen bis eine Map fertig ist. Das eigentliche Problem ist eben das die Komplexität einer heutigen 3D-Map nicht einmal ansatzweise mit der einer 2D-Map zu vergleichen ist. Das wird auch der Grund sein warum eigentlich kaum noch ein Spiel einen solchen Generator einsetzt. Aber Hut ab wenn sich da einer rantraut. Sicherlich ist es aber dennoch eine gute Alternative wenn man schon alles durchgespielt hat was es so gibt.
__________________
-->Reviews von Gamern für Gamer bei Gamer-Oase.de<--
Oh, isn't there someone else you can annoy? Friends? Family? Poisonous reptiles? - Manfred in Ice Age |
#5
|
||||
|
||||
Ich habe da eher an ein paar Sekunden Erstellungszeit pro map gedacht
Genau wie du geschrieben hast sehe ich das grösste problem in zusammenhängenden objekten -> strassen, flüsse, gebirgsverläufe. Deshalb die ersten versuche mit einzelnen Objekten wie Gebäude, Bäume usw. Wenn ichs mal geschafft habe die Bäume zu Wäldchen zu gruppieren wirds interessanter Die 3D Map hat nur einen Unterschied zu anderen maps: die z-achse. deshalb werde ich anfangs nur 2d arbeiten (so wie in der sahara beispiel map deren Z-Achse stets 0 ist, also keine hügelaufweist). mal sehn was draus wird, kann frühestens sonntag Abend damit beginnen, werde aber bis dahin schon mal einige überlegungen anstellen |
#6
|
||||
|
||||
Das stimmt nicht ganz. Bei 2d hast du ein festes Hexfeld und kannst das Spielfeld einteilen wie ein Schachbrett, das ist bei 3d nicht mehr der Fall. Hier musst du präzise Koordinaten angeben. Das heißt auch das Objekte miteinander kollidieren können. Während du bei 2d schlicht abfragen könntest ob ein Feld von einem Objekt belegt ist müsste man bei 3d alle möglichen Koordinaten in der Umgebung absuchen..... und jetzt wirds kompliziert.
__________________
-->Reviews von Gamern für Gamer bei Gamer-Oase.de<--
Oh, isn't there someone else you can annoy? Friends? Family? Poisonous reptiles? - Manfred in Ice Age |
#7
|
||||
|
||||
da hast du recht. im xml file steht nirgendwo drin wie gross ein Element ist. da drin gibts bloss die rotation und die position. Hab überlegt mir meinen eigenen "Raster" über die map zu legen und danach dann die objekte zu verteilen. dieser raster sollte grob genug sein damit nichts kollidiert, aber auch nicht zu grob, sonst siehts nicht gut aus.
die ersten paar tests werden hoffentlich zeigen was geht und was nicht... |
#8
|
||||
|
||||
Kann man in der XML File erkennen um welches Objekt es sich handelt? Wenn ja müsste man die Größe des Objektes erfassen und dann den entsprechenden Bereich für neue Objekte sperren. Und genau das ist der Grund weshalb ich denke das aufwendige Maps sehr lange brauchen um generiert zu werden.
Ich denke da mal gerade an meine bisher aufwendigste Map Amazon Rainforest mit ca. 3000 Objekten. Da muss sehr viel berechnet und getestet werden. Wenn dann noch das Gelände hinzukommt........ ich brauch nen Quad-Core
__________________
-->Reviews von Gamern für Gamer bei Gamer-Oase.de<--
Oh, isn't there someone else you can annoy? Friends? Family? Poisonous reptiles? - Manfred in Ice Age |
#9
|
||||
|
||||
Ja, man kann sehen um welches Objekt es sich handelt, wieviel HP es hat, an welcher Position es steht, welchem Player es gehört, aber grösse ist leider nicht dabei.
Das müsste man selbst mal pro Objekt definieren. Hier Beispielcode für ein Haus + einen Tiberium Spike: Code:
<Structure Angle="0" EventList="" Faction="PlyrNeutral/teamPlyrNeutral" Health="100" Team="PlyrNeutral" ThingTemplate="TiberiumSpike" id="TiberiumSpike"> <Position x="2011.48" y="2546.55" z="0"/> </Structure> <Structure Angle="2.41606" EventList="" Faction="PlyrCivilian/teamPlyrCivilian" Health="100" Team="PlyrCivilian" ThingTemplate="North_Carolina_House_02" id="North_Carolina_House_02"> <Position x="421.119" y="616.583" z="0"/> </Structure> 3000 Objekte sind für generierten Code ja praktisch nichts. Hab da eher das kleine Problem mit der Mapgrösse. Deswegen bräuchte ich diese map mit je einem Objekt in jeder Ecke um die grösse + positionierung herauszufinden. Vergleich mal die Map: Height, Width mit den Player Start Positions X Y Werten. Denk dass das um den Faktor 10 verschoben wurde. Code:
<MapMetaData BorderSize="2" CRC="0" Description="Map:Sahara/Desc" DisplayName="Sahara" FileName="Data" Height="324" IsMultiplayer="true" IsOfficial="false" NumPlayers="2" Width="224"> <StartPosition Name="InitialCameraPosition"> <Position x="0" y="0" z="0"/> </StartPosition> <StartPosition Name="Player_1_Start"> <Position x="1329.96" y="379.811" z="0"/> </StartPosition> <StartPosition Name="Player_2_Start"> <Position x="836.264" y="2658.04" z="0"/> </StartPosition> </MapMetaData> Geändert von Peda1983 (29-07-2007 um 09:16 Uhr). |
#10
|
||||
|
||||
Das mit der Verschiebung um den Faktor 10 von dem du sprachst liegt glaub ich daran, das die Map immer etwas größer ist als wie ingame. 10 nahm ich immer zu der zeit als ständert.
Ich hab mal eben 2 Bäume auf einer testmap gesetzt. Einen außerhalb der ingamemap aber sonst noch auf der map. als X/Y Postion hat dieser -13.63, 4005.91 Ein anderer Baum steht innerhalb der ingamemap und hat die X/Y 31.14, 3964.45 hier noch n bild der beiden Bäume Baum1 ist oben links Baum 2 der unten rechts
__________________
vom 20.3.2006 - 20.3.2011 in der Zivilisation 21 |
#11
|
||||
|
||||
super danke...
könntest du mir die map selbst bitte auch posten ? dann kann ich die xml files durchkucken |
#12
|
||||
|
||||
Also die map mit den beiden bäumen ist keine map, das war eben nur ne schnell erstellte mini karte wo nur diese beiden bäume drauf waren. Da ist nicht mehr.
Mal ne frage, hast du eigentlich auch den TWEditor?
__________________
vom 20.3.2006 - 20.3.2011 in der Zivilisation 21 |
#13
|
||||
|
||||
nein hab ich nicht, benötige ich aber auch nicht wenn alles glattgeht...
muss heute noch n paar std arbeiten, danach leg ich los |
#14
|
||||
|
||||
Naja, aber wenn du dir den TW Editor saugst, kannsten dir solche Maps fix selber erstellen und schauen
Aber dennoch auf dem laufenden halten, bin sehr gespannt über das Endprodukt. |
#15
|
||||
|
||||
hab scho bisserl rumprobiert. Irgendwie komm i mit den positionsangaben bzw der mapgrösse auf keinen grünen Zweig... werd mal weiterprobieren...
|
#16
|
||||
|
||||
Viel glück !
|
#17
|
||||
|
||||
Und, schon neue Erkenntnisse ?
|
#18
|
||||
|
||||
bump!
__________________
|