Hilfe bei The Elder Scrolls
-
Monsieur Sol schrieb:
Bei Warcraft 1 war dies einfacher, da es dort einen Map Editor gab. Bei The Elder Scrolls Arena gibt es den nicht.
Es ist eher die Ausnahme, dass Spielerhersteller solche Werkzeuge veröffentlichen. Daraus kannst du nicht folgern, dass die Entwickler das alles in Handarbeit zusammengebaut haben.
-
NNNNNNNEEEEEIIIIIN!!!
Heißt das Bethesda enthält den originalen Arena Editor, der Fangemeinde vor?
Das ist jetz aber ärgerlich, zumal die eigentlich doch durch die Modifizierbarkeit Ihrer Spiele zu so großem Erfolg gelangen konnten.Na gut, wie bastel ich mit den vorhandenen Hex Dateien einen Mapeditor, wie den der Entwickler? Funktioniert das mit diesem Reverse Engennering? Gibt es ein Buch/Tut, wie man das nötige Wissen dazu erlernen kann? Vllt. kann ich auch den Weg für faule gehen und mit dem Game Extractor arbeiten. Wie ich sehe, hat der eine Manipulate Funktion drinne. Die Alternativen riechen nämlich nach mächtig Aufwand. Melde mich nochmal später wieder.
EDIT: Das Tool ist ja der Hammer. Danke nochmals an
reverse engineer, für diesen tollen Tipp
-
Monsieur Sol schrieb:
Hey Danke, für die super Tipps!
Du scheinst dich offenbar besstens auszukennen. Danke auch für den Link. Habe mir ein paar Befehle auf der Seite angeschaut und musste feststellen, dass einige(z.B. Math TO, Math D und Next T) in dem C Buch von Jürgen Wolf, welches ich vor einiger Zeit zum Geburtstag geschenkt bekam, überhaupt nicht vorkommen. Wären meine Fähigkeiten ausreichend, wenn ich alleine das Buch durcharbeite, um reverse engeneering zu betreiben? Oder muss ich noch vorher etwas anderes lernen?
Oha. Zwar ist es schade, ein Geburstagsgeschenk nicht zu würdigen, aber das Buch ist... eher ungeeignet... weil es einen sehr seltsamen Programmierstil beibringt... oder auch nicht.
Absolut nicht zu empfehlen.
Lieber C++ Primer (von S. Lippmann, J. Lajoie) nehmen, der ist definitiv besser.Generell gilt: Reverse Engineering, wie du dir das hier vorstellst, wirst du in keinem Buch lernen. Ein Buch wird dir maximal zeigen, wie bestimmte Dinge in der Programmiersprache gelöst werden sollten. Alles, was darüber hinaus geht, findet man in keinem Buch (Hinweis, auch für andere Leser: Wenn es da was gutes gibt, bitte melden! Habe aber selbst noch keins gesehen).
Die "Befehle" auf der Seite sind übrigens Code aus dem MultiExtractor, nichts, was mit C++ zu tun hat.
Monsieur Sol schrieb:
EDIT: Zwei Fragen noch:
1. Wegen der Verweise: Woran erkenne ich die am ehesten/besten? Oder kommt das auf das Programm an?
Oft steht sowas am Anfang einer Datei. Da sind dann 4er-Byteblöcke, die auf Adressen in der Datei zeigen. Ist aber völlig willkürlich. Manchmal sind das relative Adressen, manchmal absolut, andere sagen, wie oft ein Element vom Typ A kommt, bevor die Elemente vom Typ B kommen,... Da gibt es keine einheitlichen Vorgehensweisen. Daher muss man hier viel rumraten.
Monsieur Sol schrieb:
2. Meintest du mit dem Einlesen der Datei das Ausführen über die jeweilige Exe/kompilieren? Oder gibt es dafür ein Tool, dass ich noch nicht kenne?
Diese Frage verstehe ich, ganz ehrlich, überhaupt nicht. Klar, man sollte für die Veränderung ein Tool programmieren. Aber auch für die Analyse. Ist sehr hilfreich, wenn man schon ein wenig vom Format verstanden hat und sich dann "nur" die noch unbekannten Speicherbereiche anzeigen lässt. Gibt etwas Übersicht.
Macht aber jeder sowieso nach seinem Geschmack...Monsieur Sol schrieb:
NNNNNNNEEEEEIIIIIN!!!
Heißt das Bethesda enthält den originalen Arena Editor, der Fangemeinde vor?
Das ist jetz aber ärgerlich, zumal die eigentlich doch durch die Modifizierbarkeit Ihrer Spiele zu so großem Erfolg gelangen konnten.Warum sollten sie den denn rausgeben? Evtl. ist das eine Reihe von Kommandozeilen-Tools, die Textdateien einlesen und umrechnen. Oder die Tools laufen nur auf einer Plattform. Oder sind furchtbar hässlich und umständlich zu bedienen. Oder voller seltsamer Fehler, die nur für die Entwickler kein Problem sind. Oder oder oder.
Wenn man diese Entwicklertools veröffentlicht, muss man darauf vorbereitet sein, dass jeder Hansel die auch nutzen will. Das ist für den Support eine Katastrophe. Selbst, wenn man keinen Support anbietet, gibt es kein gutes Image. Dann lieber nix veröffentlichen.Monsieur Sol schrieb:
Na gut, wie bastel ich mit den vorhandenen Hex Dateien einen Mapeditor, wie den der Entwickler? Funktioniert das mit diesem Reverse Engennering? Gibt es ein Buch/Tut, wie man das nötige Wissen dazu erlernen kann?
Wenig. Hier auf der Seite ist ein kleiner Einstieg zu sehen, wie man diese Dateiformate auseinander nimmt:
http://en.wikibooks.org/wiki/Reverse_Engineering/File_Formats
Aber denk dabei daran, dass das ungefähr so ist, als ob man die Bibel auf zwei Seiten zusammenfasst => Sehr oberflächlich und für alle, die damit mehr zu tun haben wollen, zu wenig. Aber als Einstieg zum Einlesen schonmal ganz i.O.Monsieur Sol schrieb:
Vllt. kann ich auch den Weg für faule gehen und mit dem Game Extractor arbeiten. Wie ich sehe, hat der eine Manipulate Funktion drinne. Die Alternativen riechen nämlich nach mächtig Aufwand. Melde mich nochmal später wieder.
EDIT: Das Tool ist ja der Hammer. Danke nochmals an
reverse engineer, für diesen tollen TippFreut mich, wenn es dir etwas hilft.
-
Monsieur Sol schrieb:
in dem C Buch von Jürgen Wolf...
Wirf es sofort weg. Der Mensch hat keine Ahnung von garnichts und hat schon so viele Leute ins Verderben gestürzt.
Versuchs lieber hier.
-
Nunja, das Problem ist einfach, dass ich bevor ich mit C++ anfange, ja erst einmal C lernen muss. Egal wie toll C++ Primer auch sein mag, es scheint sich auf C++ zu konzentrieren (trotzdem Danke für den Tipp, werds mir wohl irgendwann zulegen).
Ich habe gestern erfolglos versucht ein paar Hex Dateien zu vertauschen, um zu schauen, was dann passiert. Leider war der Bildschirm dann immer schwarz, sprich Absturz.
http://www.uesp.net/wiki/Arena:Files
Der Game Extractor von reverse engineer ist zwar cool, aber ein voll funktionierender Converter, für die Image und Textdateien, wäre viel noch nützlicher, da der von dem französischen Modder geschaffene nicht richtig funktioniert (und viele andere auch nicht). Doch das ist nur für eventuelle Übersetzungen wichtig, die ich sicher auch irgendwann vornehmen werde.
Doch bevor ich mich mit dem Programmieren beschäftige, wollte ich sicher gehen, dass es keine andere Möglichkeit gibt, die Hex Dateien der .MIF auszulesen und in Karten und/oder Bildinformationen umzuwandeln bzw. einen Mapeditor von dem ich noch nichts weiß. Da das Problem zu anspruchsvoll für die gängigen Foren wäre, habe ich sie gleich hier gestellt.Über die sachbezogenen, konkreten und hilfreichen Antworten, war ich dann doch angenehm überrascht.
Während die Mif Dateien erklären, wo sich was befindet und wo wieviele/welche Trigger auslösen, werden die Info Dateien vermutlich sagen, was sich darin befindet, bzw den getriggerten Text anzeigen:
Info der DEMO file Beispiel:
@FLOORS *BOXCAP 0 floora.set #4 *BOXCAP 1 *CEILING 110 282 floorb.set #2 *BOXCAP 2 floorc.img @WALLS *DOOR 0 door_1.img *DOOR 0 door_2.img *DOOR 0 door_3.img *DOOR 0 door_4.img *DOOR 0 door_5.img *DOOR 0 door_6.img *LEVELDOWN ssd.img *LEVELUP ssu.img *TRANS *DOOR 0 scell.img *DOOR 1 mural1.img *DOOR 1 mural2.img *DOOR 1 mural3.img *BOXCAP 3 *BOXSIDE 0 *DOOR 2 walla.set #5 *BOXCAP 4 *BOXSIDE 1 *DOOR 2 wallb.set #5 *BOXCAP 5 *BOXSIDE 2 *DOOR 2 wallc.set #5 *BOXCAP 6 *BOXSIDE 3 *DOOR 2 walld.set #5 *BOXCAP 7 *BOXSIDE 4 *DOOR 2 walle.set #3 *BOXCAP 8 *BOXSIDE 5 *DOOR 2 wallf.set #4 *BOXCAP 9 *BOXSIDE 6 *DOOR 2 wallg.set #4 *BOXCAP 10 *BOXSIDE 7 *DOOR 2 wallh.set #4 *BOXCAP 11 *BOXSIDE 8 *DOOR 2 wall_d05.img *BOXCAP 12 *BOXSIDE 9 *DOOR 2 wall_d06.img *BOXSIDE 10 *LAVACHASM slava.img *BOXSIDE 11 *WETCHASM swater.img *BOXSIDE 12 *DRYCHASM pit.img @FLATS NOSHOW bagage1.img F:1 brazier.dfa S:3 candle.dfa S:1 nbones1.img flag.img *ITEM 1 key.img ncolumn1.img F:1 *ITEM 2 deadbody.img *ITEM 3 equipmen.img *ITEM 4 treasre1.img *ITEM 5 treasre2.img *ITEM 6 treasre3.img daltar1.dfa S:2 F:1 imaiden.img F:1 coffin1.img F:1 coffin2.img F:1 roots1.img Y:-35 roots2.img Y:-35 roots3.img Y:-35 chains1.img Y:-35 chains2.img Y:-35 rubble.img *ITEM 7 chestc.img *ITEM 8 chesto.img torchpst.dfa S:4 wcolumn1.dfa wcolumn2.dfa vase.img barrel.img books1.img firepit1.dfa S:3 naltar1.img nbarrel.img nfount1d.dfa nfount1m.dfa nfount1t.dfa ngrave1.img ngrave2.img ngrave3.img npost11.img wstatue1.dfa wstatue2.dfa *ITEM 32 rat.dfa *ITEM 33 goblin.dfa *ITEM 34 lizrdman.dfa *ITEM 35 wolf.dfa *ITEM 36 snowwolf.dfa *ITEM 37 orc.dfa *ITEM 38 skeleton.dfa *ITEM 39 ogre.dfa *ITEM 40 spider.dfa *ITEM 41 ghoul.dfa *ITEM 42 hellhoun.dfa *ITEM 43 ghost.dfa *ITEM 44 zombie.dfa *ITEM 45 troll.dfa *ITEM 46 wraith.dfa *ITEM 47 beholder.dfa *ITEM 48 icegolem.dfa *ITEM 49 stonegol.dfa *ITEM 50 irongole.dfa *ITEM 51 firedaem.dfa *ITEM 52 medusa.dfa *ITEM 53 vampire.dfa *ITEM 54 lich.dfa @SOUND arrowfr.voc 2 back1.voc 31 bash.voc 27 birds.voc 24 bodyfall.voc 20 clank.voc 4 clicks.voc 25 closdoor.voc 5 deepchoi.voc 30 dirtl.voc 0 dirtr.voc 1 drip1.voc 16 drip2.voc 17 drums.voc 18 eerie.voc 28 ehit.voc 10 explode.voc 8 grind.voc 14 humeerie.voc 29 lock.voc 21 opendoor.voc 6 portc.voc 15 slowball.voc 7 splash.voc 23 swimming.voc 22 swish.voc 11 uhit.voc 9 wind.voc 19 @TEXT *TEXT 0 Welcome to the Elder Scrolls playable demo! We hope you enjoy yourself in this crypt of the dead. Take care, for all mannner of creatures will seek to stop you from finding the one exit out of this level. Check your inventory first before adventuring further. We wish you luck in this journey... *TEXT 1 A fetid odor washes down the corridor, carrying with it the smell of decayed flesh... *TEXT 2 A hot wind flows through this corridor, and with it you smell the odor of sulphur. Even the floor beneath you seems hot... *TEXT 3 You come upon a fire lake, its red hot surface bubbling and violent. One touch, and you would surely be burned to a crisp... *TEXT 4 Across the pit you see what seems to be an altar of sorts. The body in front of it obviously that of someone who did not take the proper precautions... *TEXT 5 ^100 90 Answer this correctly and the door leading out will unlock. Answer this wrong mortal, and you shall feel death's hand released upon you... - What is neither fish nor flesh, feathers nor bone, yet still has fingers, and thumbs of its own? - What is thy answer? :gauntlets :gauntlet :glove :gloves :a glove :a gauntlet 'CORRECT Thou art wise beyond reckoning. Proceed in peace into the world of Arena... 'WRONG Foolish mortal, pay the price for thy folly...
Sollte noch irgend jemand etwas zu dem Thema wissen, was hier noch nicht genannt wurde, so kann er es ja noch posten. Ich werde mich jetzt erst einmal auf das lernen einer Programmiersprache konzentrieren, damit ich das System hinter dem Game besser verstehe.
-
Monsieur Sol schrieb:
Nunja, das Problem ist einfach, dass ich bevor ich mit C++ anfange, ja erst einmal C lernen muss. Egal wie toll C++ Primer auch sein mag, es scheint sich auf C++ zu konzentrieren (trotzdem Danke für den Tipp, werds mir wohl irgendwann zulegen).
Wie kommst du denn da drauf? Wenn du C++ lernen willst, dann lern unbedingt direkt C++, anstatt deine Zeit zu verschwenden. Wenn du erst C lernst, dann lernst du dabei nichts, was du nicht direkt beim C++-Lernen auch lernen würdest, aber im Gegenteil gewöhnst du dir erst einmal die Denkweise von C an, die eine ganz andere ist als die von C++ und das musst du dir dann erst einmal wieder mühsam abgewöhnen, damit du kein C in C++ machst.
-
Hm, so wie du es beschreibst, klingt es natürlich logischer, gleich mit C++ anzufangen. Danke für diesen Hinweis. Ich werds mir nun nochmal überlegen und vllt. auch doch gleich mit C++ beginnen. Das C++Primer kann man sich ja via Amazon bestellen.
Allerdings kann ich mir nicht vorstellen, dass das Spiel selbst in C++ geschrieben wurde, weil ja noch C89/90 Standard aktuell war. Ach ich glaub, es wär am einfachsten gewesen, wenn Bethesda nachträglich einfach nen Mapping Tool (egal wie schlecht und fehlerhaft) veröffentlicht hätte. So wird wohl wirklich nur der umständliche Weg über büffeln + reverse engineering möglich sein. Allerdings brauch ich dann auch kein Tool dazu schreiben. ICh ahbe vorgestern noch einmal versucht, ein paar Hex Codes zu verändern. Leider stürzte das Game im veränderten Dungeon immer wieder ab. Bis zum Einfügen eigener Trigger und neuer Monster, wird es daher wohl noch etwas dauern.
EDIT: Wäre es theoretisch möglich mit den Informationen der XmXenatx-Seite und Ida Pro den Code zu entschlüsseln?
-
Welche Relevanz hat es für deine reverse engineering versuche, dass das Spiel in C und nicht C++ geschrieben ist?
-
Naja, je nachdem ob ich den Hex Code vielleicht decompilieren könnte, eine entsprechend hohe oder für den Fall, dass dies nicht möglich ist und ich aus dem Hex Code selbst die Lösung basteln müsste, eine entsprechend niedrige Relevanz.
Letzteres wird vermutlich unschaffbar schwer werden, daher fragte ich ja ursprünglich auch, ob es noch eine andere Lösung gäbe z.B. ein Tool, mit dem ich aus dem HEX Code eine Art "Map" erstellt bekomme, wo ich sehen kann, an welcher Position genau die Text Trigger liegen bzw. den Dungeon ummalen könnte und dies automatisch dann in den Hex Code umgeschrieben wird. Das wäre nämlich wesentlich einfacher gewesen, denn wenn ich nun z.B ein neues Objekt einfügen will, muss ich erst wissen wo die Objekte im Hex Code gespeichert sind, wo die Anzahl der Objekte steht, wo die Position des Objekts auf der Map ist und wo der Link zum Speicherplatz des Objektes ist. Das sind eine ganze Menge Punkte. Über eine Art Editor, wäre es 1000x einfacher. Da könnte ich das Objekt/den Trigger einfach an Stelle X setzen, die Info Datei sowie die Golbal upgraden und fertig.
Klar, hier hat niemand den Original Editor, aber vllt. hätte ja jemand einen Editor gekannt, der auch Arena Codes einlesen hätte einlesen können. So fummel ich mir wohl ewig einen ab.
-
Kleine anmerkung dazu:
Reverse Engineering auf Hex-File basis kannst du auch mit PHP/Perl oder einer andere Sprache machen.
Ich habe für Myth 2 schon einmal etwas mit den Maps rumgespielt um die Plugins "vorzuladen".
Das Tools, welches die "Trigger" findet, wäre eine Eierlegende Wollmilchsau.
Wenn ich ein Spiel erstelle steht es mir frei die Daten zu packen wie ich möchte.Im Falle von Maps z.B. so:
0x0 (int) => MapID
0x1 (7bit int) => Identifier für nachfolgende Textlänge
0x2 (string) => "Hell Dungeon lower level"
...
0xY => Mapgröße etc...Dann folgen irgendwann die einzelnen MapInfos, oder vielleicht auch erstmal trigger, oder erstmal die Questtexte usw... das musst du auf JEDEN FALL selber herausfinden wo was liegt, DANN kannst du selber ein Tool schreiben oder jemanden darum bitten.
Das größte Problem ist halt auch herauszufinden ob die Zahl (z.B.)134/0x86 nun für einen Teil der Karte steht, oder ein item was da rumliegt oder einen NPC usw...
Der Editor, den du suchst, muss genau das selbe wissen. Wenn du einen trigger einfügst, muss der Editor im "Seitenverzeichnis des Dateiformats" diesen trigger hinterlegen. Wenn du die Größe der Map änderst, muss er das auch irgendwo in der Datei vermerken, damit mehr Platz für die Map tiles ist etc pp.
Der universalste Editor ist ein HexEditor (wxhexeditor ermöglich es dir labels für offsets zu setzen, damit du dir merken kannst wo was in der binärdatei zu finden ist, ganz praktisch).
Sorry, aber so easy ist das leider echt nicht. Rumprobieren musst du auf jeden Fall, wenn nicht schon jemand anderes Vorarbeit geleistet hat. Ging mir damals mit Ultima Underworld genauso hehe...ätzend!