Manche Spiele haben für die Strategiekarte und Taktikkarte getrennten Code, kann man in den Code für die Taktikkarte
-
hustbaer schrieb:
WTF ist hier bitte mit "Strategiekarte" und "Taktikkarte" gemeint?
Hast du Spiele der Total War Reihe und EAW etwa noch nie gespielt?
Strategiekarte:
http://www.gamestar.hu/apix_collect/0605/rome-total-war-alexander/rome-total-war-alexander_20060529151825_7772_original.jpg
http://img7.imageshack.us/img7/8995/rometotalwar.pngTaktikkarte:
http://img.brothersoft.com/screenshots/softimage/r/rome-_total_war_patch-299435-1256715107.jpeg
http://igran.ru/wp-content/uploads/2011/01/Total-War.jpgBei EAW gibt's genau das gleiche.
Die Strategiekarte ist so etwas wie man es von Civilization kennt
und die Taktiktkarte so etwas, wie man es von Command & Conqueror kennt.Im Prinzip sind das also zwei voneinander völlig unabhängige und verschiedene Codemodule, die sicherlich auch getrennt entwickelt werden und realativ unabhängig von einander sein dürften.
Insbesondere falls zwei verschiedene 3d Engines verwendet werden, was durchaus möglich sein könnte.Der Code für die Taktiktkarte weiß absolut nichts vom Code der Strategiekarte.
Wenn die Strategiekarte (ich meine hier den Code von dem Zeugs, ich schreibe jetzt nur noch Strategiekarte und Taktikkarte zur Vereinfachung), also die Taktiktkarte läd, dann werden beim Funktionsaufruf als Paramter ein Objekt übergeben.
Und das würde dann die Daten enthalten, wieviele und welche Truppen in der Taktikkarte vorhanden sein sollen, die Information kennt ja ansonsten nur die Strategiekarte. Diese Info muss also übergeben werden.
Dann macht die Taktikkarte den Rest.
Der Kampf kann durchgespielt werden und wenn der Gegener besiegt ist, gibt's wieder Truppendaten als Returnwert (oder eben ein Zeiger der darauf zeigt und die Daten hält, auch das wäre denkbar).Das bedeutet also, wenn man in die Adresse reinspringt, wo diese Taktikkartenfunktion aufgerufen wird, dann wird die Taktikkarte geladen und die weiß nichts vom selbstgeschriebenen Strategiekartenprogramm.
Man müßte nur die Daten noch mitteilen, so daß es keine Abstürtze, Divisionen durch 0 usw. in der Taktikkarte gibt.
Und damit die Taktikkarte wieder zum eigenen Programm zurückspringt müßte man vielleicht noch die Rücksprungadresse an der Adresse ändern, die für den Aussteig aus der Taktikkarte verantwortlich ist.So stelle ich mir das vor.
Die Taktikkarte hat darüberhinaus, da es eine eigenständige 3d Engine ist, seine eigenen Daten über Fenstermodus, Auflösung, Effekte usw. und baut diese, sobald dies geladen wird also auch selbstständig auf.Man startet also sein eigenes Programm und läd noch zusätzlich die EXE des Originalspiels in den Speicher, dann sucht man die Einsprungsadresse für den Code für die Taktikkarte und manipuliert darin, sofern nötig noch die Rücksprungadresse, so daß wieder in das selbstgeschriebene Programm zurückgesprungen wird und nicht plötzlich in den Code, der für die Strategiekarte zuständig ist.
Viren machen das im Prinzip doch auch nicht anders.
Der Unterschied ist lediglich, daß Viren vom Hostprogramm aufgerufen werden und nicht selbst das Hostprogramm sind.In meinem Fall wäre also die selbstgeschriebene Strategiekarte das Hostprogramm und der Code der Taktikkarte aus dem Hauptspiel der Virus und den muss ich innerhalb des Hostprogramms dann nur hin und wieder mit den richtigen Daten aufrufen.
Würde das funktionieren, dann könnte man sich die Entwicklung eines Codes für die Taktikkarte komplett sparen.
Warum ich denke, daß die Strategiekarte und die Taktikkarte zwei voneinander völlig getrennte Module und möglicherweise auch 3d Engines sind, liegt in der Wiederverwenbarkeit von Code und der kompletten realisierbarkeit von getrennten Entwicklerteams.
Die Entwickler, die das Zeugs für die Taktikkarte programmieren könnten also ihre Taktikkarte völlig unabhängig von der Strategiekarte entwickeln.
Sie hätten bestenfalls einen kleinen Taktikkartenloader, der die Taktikkarte mit den verfügbaren Truppeneinheiten füttern und dann als Returnwert die Ergebnisse zurückliefert.
In UML wäre das also ne Schnittstelle.Und die Strategiekartenprogrammier könnten mit einer Fakedaten Funktion arbeiten und schön ihre Strategiekarte entwickeln.
Sie wären auf eine funktionierende Taktikkarte also nicht angewiesen.Die getrennte Entwicklung macht also sinn und wenn die Entwicklung getrennt war, dann dürfte man das ganze auch verhältnismäßig einfach getrennt wieder aufrufen.
-
Und getrennte 3d Engines machen deswegen sinn, weil man für eine Strategiekarte ganz andere Anforderungen als für eine Taktikkarte hat.
Auch könnte der 3d Engine Code für die Taktikkarte aus alten Spielen mit reinen Taktikkarten stammen (also typische 3d Echtzeitstrategiespiele) der dann nur noch weiterentwickelt wird.
Das hängt zwar acuh vom Entwicklungsstudio ab, aber so ne Taktikkartenengine könnte ja auch lizenziert sein.Man könnte z.B. fürein gedachtes Spiel die Engine von C&C lizensieren und dann nur noch nen Loader, der die Strategiekarte enthält progammieren.
Damit hätte der Loader seine eigene 3d Engine und die müßte auch nicht so viel können, da ja nur ne einfache Strategiekarte dargestellt wird.
-
@hustbear
Der Unterschied zwischen Taktik- und Strategiekarte rührt übrigens auch daher, daß man in der Taktikkarte keine Strategie, sondern Taktik braucht.Strategie sind langfristige Planungen, mit Aufbau, Forschung usw..
Taktik kurzfristige improvisierte Planungen in der es nur darum geht die Truppen im Kampf zu dirigieren.
-
Man könnte auch sagen:
Stratgie = Planung & Zugführung im Großen, gesamtüberblick
Taktik = Planung & Zugführung im Kleinen, Gefechtsüberblick
-
OK, ich glaub ich hab's verstanden.
Mit Strategiekarte meinst du sowas wie z.B. das Spielbrett bei Risiko, und mit Taktikkarte den Teil der bei Risiko einfach mit Würfeln entschieden wird.
Also quasi Strategiekarte = Weltkarte und Taktikkarte = ein Gefecht.
Jetzt noch ne doofe Frage: sind "Strategiekarte" und "Taktikkarte" Begriffe die hier üblicherweise verwendet werden, oder nennst du das halt einfach so? Ich hab' das nämlich wirklich noch nie gehört/gelesen. Andrerseits spiele ich solche Spiele auch nicht wirklich. Das letzte was ich gespielt habe, was ca. so eine Trennung hat war North & South
----
Was dein Vorhaben angeht: das kommt halt einfach darauf an wie das Spiel programmiert ist. Theoretisch ist es möglich dass ein Spiel sogar ne eigene .exe für die "Taktikkarte" verwendet, und die mit der zu verwendenden Map + diverser Parameter für was der Spieler bzw. der Computergegner für Einheiten zur Verfügung hat als Commandline-Parameter rausstartet. In dem Fall wäre es einfach.
Kann aber genau so gut sein dass es eine grosse .exe ist, wo die Übergabe von Parametern an den Taktik-Teil über recht komplizierte und vor allem undokumentierte Strukturen gehandhabt wird. Dass nur eine gemeinsam genutzte Instanz einer u.U. sogar selbst entwickelten 3D-Engine verwendet wird. Uswusf. In so einem Fall ist es dann schwierig bis praktisch unmöglich den Strategie-Teil auszutauschen und nur den Taktik-Teil zu verwenden.
Oder halt irgendwas zwischendrin. Sobald es aber keine zwei getrennten .exen sind wird vermutlich mehr nötig sein als 2-3 Byte per Hexeditor zu überschreiben. Du müsstest die Original .exe in einem Disassembler/Decompiler auseinandernehmen und dann rausfinden...:
* Wo du dich ins Spiel reinhängen kannst, so dass alles nötige initialisiert wird, aber nicht der Original Strategie-Teil angezeigt/ausgeführt wird.
* Wie du den Taktikteil aufrufen kannst, inklusive Parameter-Übergabe.
Und das sind beides Dinge die man nicht mal eben so an einem Sonntag erledigt, selbst wenn man mit Reverse-Engineering Erfahrung hat.Ultra-Kurzfassung: nö, geht nicht
-
hustbaer schrieb:
OK, ich glaub ich hab's verstanden.
Mit Strategiekarte meinst du sowas wie z.B. das Spielbrett bei Risiko, und mit Taktikkarte den Teil der bei Risiko einfach mit Würfeln entschieden wird.
Also quasi Strategiekarte = Weltkarte und Taktikkarte = ein Gefecht.
Ja, genau.
Jetzt noch ne doofe Frage: sind "Strategiekarte" und "Taktikkarte" Begriffe die hier üblicherweise verwendet werden, oder nennst du das halt einfach so? Ich hab' das nämlich wirklich noch nie gehört/gelesen. Andrerseits spiele ich solche Spiele auch nicht wirklich. Das letzte was ich gespielt habe, was ca. so eine Trennung hat war North & South
Naja, ich nenne das so, weil es sich vom Gameplay her in diese zwei Gruppen auftrennen läßt.
Auf der Weltkarte braucht man also Strategie und auf der Gefechtskarte Taktik.
Ob andere diese Begriffe so verwenden, weiß ich nicht.North & South würde auch als Beispiel perfekt passen, da ist das ja auch sehr gut getrennt.
Was dein Vorhaben angeht: das kommt halt einfach darauf an wie das Spiel programmiert ist. Theoretisch ist es möglich dass ein Spiel sogar ne eigene .exe für die "Taktikkarte" verwendet, und die mit der zu verwendenden Map + diverser Parameter für was der Spieler bzw. der Computergegner für Einheiten zur Verfügung hat als Commandline-Parameter rausstartet. In dem Fall wäre es einfach.
Kann aber genau so gut sein dass es eine grosse .exe ist, wo die Übergabe von Parametern an den Taktik-Teil über recht komplizierte und vor allem undokumentierte Strukturen gehandhabt wird. Dass nur eine gemeinsam genutzte Instanz einer u.U. sogar selbst entwickelten 3D-Engine verwendet wird. Uswusf. In so einem Fall ist es dann schwierig bis praktisch unmöglich den Strategie-Teil auszutauschen und nur den Taktik-Teil zu verwenden.
Oder halt irgendwas zwischendrin. Sobald es aber keine zwei getrennten .exen sind wird vermutlich mehr nötig sein als 2-3 Byte per Hexeditor zu überschreiben. Du müsstest die Original .exe in einem Disassembler/Decompiler auseinandernehmen und dann rausfinden...:
* Wo du dich ins Spiel reinhängen kannst, so dass alles nötige initialisiert wird, aber nicht der Original Strategie-Teil angezeigt/ausgeführt wird.
* Wie du den Taktikteil aufrufen kannst, inklusive Parameter-Übergabe.
Und das sind beides Dinge die man nicht mal eben so an einem Sonntag erledigt, selbst wenn man mit Reverse-Engineering Erfahrung hat.Ultra-Kurzfassung: nö, geht nicht
Okay, danke für deine Antwort.
Ich habe jetzt bei EAW mal nachgesehen, es ist leider nur eine zusammenhängende EXE.
-
Es ist rein technisch gesehen natürlich theoretisch möglich. Praktisch wäre es allerdings vermutlich weniger Arbeit und wesentlich einfacher, das Spiel komplett nachzuprogrammieren...
-
Der Code des Originalprogramm kennt ja die Map und weiß wie man damit umgeht.
Aber du kennst den Code nicht. Und du bekommst von den TW entwicklern auch keinen. Woher willst du denn bitteschön wissen an welcher stelle der Code zur Bearbeitung einer Map beginnt?
-
c0ff33.alex schrieb:
Der Code des Originalprogramm kennt ja die Map und weiß wie man damit umgeht.
Aber du kennst den Code nicht. Und du bekommst von den TW entwicklern auch keinen. Woher willst du denn bitteschön wissen an welcher stelle der Code zur Bearbeitung einer Map beginnt?
Man startet das Spiel in einem Emulator oder mit einem Debugger und stoppt kurz vor dem Ladebildschirm der Taktikkarte.
-
Wie, "kurz vor dem Ladebildschirm der Taktikkarte"?
Eher während des Ladebildschirms der Taktikkarte.Wenns dich ausreichend interessiert, und du meinst dass du ne Chance hast es zu schaffen, dann besorg dir die nötigen Tools und fang einfach mal an, sieh wie weit du kommst.
Und wenn nicht ist die Frage ob man es vielleicht irgendwie machen könnte wohl ziemlich müssig, da es vermutlich keiner für dich machen wird.