Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

go-cod #97

Open
stwe opened this issue Apr 21, 2022 · 6 comments
Open

go-cod #97

stwe opened this issue Apr 21, 2022 · 6 comments

Comments

@stwe
Copy link

stwe commented Apr 21, 2022

@siredmar Wie ich sehe geht es hier im branch go-cod weiter. Das Projekt ist nicht tot. Du hast ein "clean up" durchgeführt, was mich hier zu dem Ticket veranlasst. Wohin soll die Reise gehen? Die Erfahrung mit meinen zwei Versuchen, etwas Brauchbares mit den Anno Files auf die Beine zu stellen, endete schließlich mit der Erkenntnis, dass ich das Projekt von der falschen Seite aus angegangen bin. Ich habe quasi einen Savegame-Viewer erstellt, der von der Struktur her nur sehr schwer in ein Spiel verwandelt werden kann. Das lag natürlich daran, dass ich verstehen wollte, wie der original Content benutzt werden muss. Falls Du nun ein (kleines) Spiel erstellen möchtest, würde ich Dir raten, von vornherein das Ziel zu verfolgen, so schnell wie möglich eine wie auch immer geartete Game Logic auf den Bildschirm zu bringen. Also den einfachsten Fall coden und sich über den Erfolg freuen Der Fahrplan dafür würde nun nicht so aussehen, dass wieder ein Savegame mit 6000 Grafiken geladen wird, sondern grob:

  • einfache 2D Iso Karte erstellen mit nur einer Höhe; die Karte einfach einfärben ohne Textur; das können auch nur 16x16 Tiles sein, was zunächst völlig ausreichend ist
  • die Karte sollte clickable sein, d.h. die Maus sollte ein einzelnes Tile auswählen können
  • die Karte sollte drehbar sein, wir haben 4 Möglichkeiten;
  • die Karte sollte scrollbar sein
  • ein einfaches Menu einfügen und drei oder vier Objekte zum Einfügen in die 2DKarte anbieten; z.B: Holzhütte, Fischerhütte und Strasse.
  • Die eben genannten Spielobjekte sollten nun voneinander wissen und sich gegenseitig finden - einfache Spielelogik (Inselbewohner - Strasse - Arbeitsplatz - Nahrung etc).

Damit ist man erstmal sechs Monate ausgelastet, das System ist benutzbar, ausbaufähig und man sollte sich von Anfang an nicht wieder in Animationen und drehende Fragezeichen verrennen. Schließlich wird man gezwungen, sich mal über seine Datenstrukturen bzgl. der Spielobjekte und deren Organisation Gedanken zu machen. Jedenfalls ist das mein Plan......irgendwann gehe ich die Sache genauso an, und zwar in C++. In Go kann ich Dir leider nicht helfen.

@siredmar
Copy link
Owner

siredmar commented Apr 21, 2022

@stwe mein Scope aktuell ist alles an Spieldaten zu verstehen, zu parsen und erstmal reinzuholen was geht. Das faengt bei den COD/GAD Dateien an und hoert bei den verschiedenen Chunks und Inseldaten auf. Ich hab nicht unbedingt vor einen Savegamekompatibles spiel zu erzeugen. Es gibt da noch sehr viel zu erforschen, was noch nicht eindeutig klar ist. Wichtig ist zu identizieren was man unbedingt von den Original Files braucht und was kann mann sich erschliessen. Da ich wirklich kurz angebunden bin, ist meine Roadmap aktuell mal den COD Parser zu portieren. Kleine Schritte.

C++ ist fuer mich ein erstmal ein abgeschlossenes Thema. Wenn ich das weiter verfolge, dann in der Sprache, die ich taeglich nutze.
Mit Go hat man:

  • eine Sprache, die wirklich einfach und schnell zu lesen und zu verstehen ist
  • keine Probleme mit Dependencies und Libraries
  • keine externen Package manager wie Conan
  • keine Freaky Build Systeme
  • simple Crossbuilds
  • statische Binaries wenn man das moechte
  • genug Game Engines, die man nutzen kann*

Go ist nicht schwer. Das lernt man tatsaechlich nebenbei :-)

@stwe
Copy link
Author

stwe commented Jun 4, 2022

@siredmar da ergänzen wir uns gut. Ich habe Urlaub und gerade ein neues Projekt gestartet, in der Hoffnung, dass mir keiner Ärger macht wegen dem Namen MDCII. Mir ist nichts besseres eingefallen. Aber egal. Mal eine Frage zu Deinem Go Code: Nehmen wir mal an, Du erstellst tatsächlich einen COD Reader in Go. Kann man das Dingen (Libt) irgendwie in C++ nutzen/aufrufen.? Ansonsten wäre ein Projekt sehr gut, welches die CODs in json oder xml zurückgibt.

@siredmar
Copy link
Owner

siredmar commented Jun 5, 2022

Meinen cod Parser gibt's ja schon in C++. Du kannst ihn rausnehmen und in eine Lib packen, wenn du möchtest. Er arbeitet mit protobuf. Daraus lässt sich ein json dumpen oder besser idealerweise gleich protobuf benutzen und ne eigene Klasse damit befüllen (siehe unten).
Hier der cod Parser code:
cod_parser.cpp
codhelpers.cpp
cod_parser.hpp
codhelpers.hpp

Hier ein Beispiel für die haeuser. cod

Hier das proto file

Hier ein cod-Exporter, der nen json dump macht

@siredmar
Copy link
Owner

siredmar commented Jun 5, 2022

Ansonsten: ja klar kannst du go in C++ nutzen.
go Code compiliert zu object files, gegen die du in C++ linken kannst, als käme sie aus C.
https://stackoverflow.com/questions/62977352/using-go-in-c

@stwe
Copy link
Author

stwe commented Jun 6, 2022

Ich habe den Parser mal mittels eines völligen Blindflugs in mein Projekt übernommen und die Boost Abhängigkeit entfernt. Ganz zufrieden bin ich nicht mit meinem Ergebnis (deprecated methods, Probleme mit den Umlauten unter Win), aber so auf den ersten Blick läuft das Ding; er produziert mir jedenfalls eine Json von der haeuser.cod. Ich hatte Deinen Parser schon früher dazu genommen, um mir eine Json zu erstellen, aus der ich dann die Objekte erstellt habe. Mir geht es vor allem darum, dass ich diese Json nicht mit dem Repo verteilen wollte. Ziel erreicht. Wenn mal eine Version in Go fertig sein sollte, nehme ich die gerne....

@siredmar
Copy link
Owner

siredmar commented Jun 6, 2022

Mein Ansatz wäre es ohnehin einen Importer von original Ressourcen zu bauen. z. b. "hier-sind-die-original-dateien-mach-mir-daraus-was-vernunftiges"
z. b. Grafiken in png umwandeln, cod nach z. b. json, map Format in was vernünftiges, etc.

dann kann man nämlich den Code völlig unabhängig vom eigentlichen originalkrams bauen

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants