Neue Version

Vorschläge und Diskussionen zur Weiterentwicklung von PBP

Moderator: Moderatoren2

Ed von Schleck
Soldat
Soldat
Beiträge: 15
Registriert: Mi 12. Dez 2012, 13:21

Re: Neue Version

Beitrag von Ed von Schleck »

Hallo alle,

ich habe mich in den letzten Monaten recht intensiv mit einigen (und oberflächlich mit anderen) Teilen des Quellcodes beschäftigt. Natürlich kenne ich mich lange nicht so gut aus damit wie TheCoder, aber ich glaube mittlerweile einen guten Überblick zu haben.

Ich will jetzt nicht auf die Idee eingehen, ASC im Browser neu zu implementieren. Für ein Spiel mit der Komplexität von ASC ist das (noch) keine gute Idee, glaube ich (das kann ich gerne weiter ausführen, aber jetzt grade nicht :) ). Stattdessen will ich darauf eingehen, was es benötigen würde, die jetzige Codebasis fit zu machen für das 21. Jahrhundert. Achtung: Das folgende wird teilweise sehr technisch, aber ich habe das Gefühl, dass die Diskussion sonst sehr im luftleeren Raum passiert. Außerdem will ich einen Einblick vom Arbeitsaufwand vermitteln.

ASC ist über viele Jahre entstanden, und das sieht man dem Code an. Es finden sich teilweise noch Relikte aus der Zeit, als ASC in Pascal geschrieben war und auf DOS lief (aber das ist jetzt ein Extrembeispiel, kein echtes Problem). Vieles vom älteren Code benutzt auch die STL (die C++ Standardblibliothek) nicht wirklich und re-implememtiert Datentypen, die in der STL oder Boost (einer Art Erweiterung der STL) sind oder sich auf Basis der STL oder Boost besser lösen lassen. Vieles, das später dazugekommen sind, sind in modernerem C++ geschrieben. Es wäre eine wichtige Arbeit, insbesondere grundlegende Klassen und Funktionen von ASC, die sich mit IO-Streams und Stringbehandlung und so beschäftigen, konsistent in modernem C++ zu implementieren. Das würde den Code auch schlanker und übersichtlicher machen.

Auch andere Sachen haben mit dem Alter des Codes zu tun: ASC benutzt Loki als Bibliothek für einige Patterns, zum Beispiel für Singletons oder Functors. Loki ist eine sehr clevere Bibliothek, ist aber seit mindestens 4 Jahren tot, d.h. die Software wird weder weiterentwickelt noch gewartet. Mittlerweile unterstützt Boost alle Sachen, die Loki kann, daher wäre es eine gute Idee, von Loki auf Boost zu migrieren, um einerseits nicht den gesamten Code von Loki mitzuschleifen, und andererseits zu wissen, dass auftretende Bugs in den genutzten Bibliotheken auch gefixt werden. Boost wird ohnehin genutzt, das heißt, es kommen keine zusätzlichen Abhängigkeiten hinzu. Das ist alles keine schwierige Arbeit, gehört aber zur Code Maintenance.

In ASC sind viele Dinge hardgecoded, wie die Spieleranzahl und weitere Dinge, die eigentlich nicht in eine Engine gehören. Mit anderen Worten: ASC ist direkt als Neu-Implementation von Battle Isle gedacht und erstmal nicht mehr. Diese Vorstellung ist implizit überall im Code drin. Da geht es nicht nur im irgendwelche Konstanten, die geändert werden müssen, sondern um einige Algorithmen, die man anders (dynamisch) implementieren muss. Viel mühselige Arbeit.

Weiterhin gibt es im Code zu viel state, d.h. Dinge sind in einem globalen Zustand. Dadurch lassen sich viele Funktionen schlecht neuimplementieren, weil sie z.B: Nebenwirkungen haben, die an ganz anderer Stelle im Code Verhalten ändern, oder von einem Zustand abhängen, der sonstwo gesetzt wird. Ganz ohne globale Zustände kommt man natürlich nicht aus, aber da sollte viel mehr explizit passieren (also zum Beispiel ein Wert als Parameter übergeben werden anstelle eine Eigenschaft der globalen GameMap-Instanz zu verändern). Außerdem verhindert der jetzige Zustand das Nutzen von Multithreading, weil viel zu viele Dinge gelockt, also vor parallellem Zugriff geschützt, werden müssen, was sehr aufwändig ist und die Vorteile von Multithreading auffrisst.

Wie Ihr seht, habe ich bisher das Thema Grafik noch nicht einmal angeschnitten :) Wenn Euch das interessiert, dann quassle ich gerne noch ein bisschen weiter.

Das sind wohlgemerkt alles noch erste Eindrücke von einer meist noch oberflächlichen Beschäftigung mit dem Code. Die Essenz ist aber: Eine Neuimplementation ist ziemlich utopisch, weil sich wahrscheinlich kein Held wie TheCoder findet, der das alles im jahrelanger Arbeit aufzieht. Der jetzige Code hat den Vorteil, dass er hier und jetzt funktioniert. Wenn man sich die Arbeit macht, ihn an vielen grundlegenden Stellen zu modernisieren (und das ist viel Arbeit), dann kann man ihn in Zukunft als Basis für alle möglichen neuen Funktionen nutzen, aber eben noch nicht jetzt. Und: TheCoder wird das unmöglich alleine schaffen.
Benutzeravatar
fff
Stabsunteroffizier
Stabsunteroffizier
Beiträge: 435
Registriert: Mo 25. Jul 2011, 16:24

Re: Neue Version

Beitrag von fff »

Danke für den Vortrag. Sehr schön.
Hanni
Oberstabsfeldwebel
Oberstabsfeldwebel
Beiträge: 2898
Registriert: Sa 31. Jan 2009, 13:04
Einheitenset: Cromoner MK4
Wohnort: Leipzig

Re: Neue Version

Beitrag von Hanni »

Danke für deine umfassenden Ausführungen.

Grüße
Hanni
Die DIN 16554 regelt, dass eine Kugelschreibermine einen 200 m langen Strich ziehen können muss.
----------
Beiträge in meiner Funktion als Admin haben diese Farbe!
Ed von Schleck
Soldat
Soldat
Beiträge: 15
Registriert: Mi 12. Dez 2012, 13:21

Re: Neue Version

Beitrag von Ed von Schleck »

Hi nochmal,

um dort weiter zu machen, wo ich vorhin aufgehört habe: Ich fände es großartig, neue Sachen mit der Engine zu machen, aber ich denke, es bräuchte nicht nur einer aktive Gamer-Community (die gibt es ja), sondern noch ein paar fleißige Bienen, die an Teilen des Codes arbeiten. TheCoder macht tolle Arbeit, aber er ist der einzige, der den Gesamtüberblick hat und sowas die die newattack-Sache implementieren kann. Für kleine Verbesserungen muss man aber kein Programmiergott sein, sondern nur ein bisschen Geduld mitbringen, anfangs auch eine Portion Frustrationstoleranz, und dann können ein paar Leute schon eine ganze Menge bewegen.

Um konkreter zu werden: Meine Arbeit, was die Performance des Pathfindings angeht, ist ziemlich abgeschlossen (von Bugfixing mal abgesehen). Ich würde mich gerne mit anderen Teilen des Codes beschäftigen; die Liste da oben war ein Teil der TODO-List, die so in meinem Kopf rumschwirrt. Ein andere Aufgabe wäre aber, mehr Leute in die Entwicklung reinzuziehen. Dazu könnte ich ein Tutorial schreiben für Leute, die gerne mal sich mit der Engine beschäftigen würden, und einfache Aufgaben formulieren, die auch für Anfänger machbar sind. Mein Workflow ist zwar nicht sehr Newbie-freundlich (ziemlich vim-basiert), aber ich denke, ich könnte schon eine Reihe von Artikeln hier im Forum schreiben für alle, die sich dafür interessieren. Gibt es da Interesse für?
Hanni
Oberstabsfeldwebel
Oberstabsfeldwebel
Beiträge: 2898
Registriert: Sa 31. Jan 2009, 13:04
Einheitenset: Cromoner MK4
Wohnort: Leipzig

Re: Neue Version

Beitrag von Hanni »

Die Frage, die ich hier einmal in den Raum stelle ist die folgende:

Lohnt sich das überhaupt?
Ist es, rein vom Aufwand her, nicht sinnvoller gleich etwas neues, modernes, ohne die alten Fehler, zu beginnen?

Grüße
Hanni
Die DIN 16554 regelt, dass eine Kugelschreibermine einen 200 m langen Strich ziehen können muss.
----------
Beiträge in meiner Funktion als Admin haben diese Farbe!
Excalibur
Generalmajor
Generalmajor
Beiträge: 2350
Registriert: Mo 15. Jun 2009, 18:32
Einheitenset: MK 4
Wohnort: 74629

Re: Neue Version

Beitrag von Excalibur »

Alles "Neu" würde ich auf keinen Fall machen. Das Programm läuft sauber und das sogar ohne Fehlermeldungen. Super, den Stand müssen wir erstmal halten. Was heisst überhaupt zeitgemäss, ist Schach noch zeitgemäß ? Und es wird trotzdem von vielen gespielt, auch im Internet.
Nein, auf keinen Fall alles aufbröseln. Ich hatte mal angefangen einen Neueinsteigerguide zu machen, ich weiß der nicht nicht gut und das haben auch alle gesagt. Ich sagte immer, wenn Ihr etwas besseres macht, werfen wir das Teil sofort in den Mülleimer. Bisher kam da leider nichts. Also Vorsicht, wenn dann Veränderungen, dann nur kleine und vor allen Dingen muss das System immer stabil laufen. Mir reicht, obwohl ich noch viele viele Wünsche habe, ersteinmal das was ich jetzt habe. ASC ist wie Schach zeitlos und man kann das noch in 50 Jahren spielen, es wird nicht alt.
In Grunde ist es, da es ohne Zufall geht, ein rein mathematisches Strategiespiel. Wir könnten theoretisch alles weglassen und nur reine nackte Zahlen auf der Map abbilden.

Naja, einwenig was für´s Auge - ok...ich geb es ja zu.
The Coder hat schon sehr viel gegenüber Battle Isle verbessert, meinen ganz, ganz herzlichen Dank dafür. ASC spielt sich viel besser als das alte Battle-Isle.
Wenn wir natürlich eine hart Codes aus dem Verbund lösen könnten z.B. Spieleranzahl, Höhenstufen, weiters Wetter...dann würden uns noch mehr taktische Möglichkeiten offenstehen. Die Schlachten würden noch interessanter.
Als Nichtfachmann sehe ich das so, wir suchen den gesamten Code z.B. nach der Spieleranzahl ab und ändern die Anzahl von 7 auf beispielsweise 10 ?
Ich glaube man muss dann den gesamten Quellcode auf diese spez. Stellén untersuchen und alle nacheinander abändern.
Ich wäre gerne bereit so eine Fleißarbeit zu machen.
Wir sollten aber erstmal eine kleine Sache ändern, die den Spielfluss oder die schon bestehenden Maps nicht vollkommen unspielbar macht. Ich mache auf jeden Fall bei diesem Projekt mit.
Die andere Möglichkeit, alles Neu ist natürlich spitze, aber ich bin realist, ich glaube das bekommen wir zum jetzigen Zeitpunkt nicht hin.
Andere Idee: Ich beschäftige mich doch sehr mit Werbung, vielleicht sollten wir uns einige an Strategiespielen interessierte Informatikstudenten suchen. Erst wenn wir eine Gruppe haben, beginnen wir gemeinsam.

Aber schon alleine die ernsthafte Diskussion über das wichtige Thema finde ich einfach spitze.
Vielen Dank
Hanni
Oberstabsfeldwebel
Oberstabsfeldwebel
Beiträge: 2898
Registriert: Sa 31. Jan 2009, 13:04
Einheitenset: Cromoner MK4
Wohnort: Leipzig

Re: Neue Version

Beitrag von Hanni »

Excalibur hat geschrieben:... Was heisst überhaupt zeitgemäss ...
Hanni hat geschrieben:
  • echte Höhenstufen mit echter "Line of Sight" Betrachtung, so dass
    • man eben nicht unbedingt sehen kann, was hinter einem Hügel ist
    • man einen echten Höhenvorteil erhält
    • nicht jede Einheit "durch" Berge schießen kann
  • eine echte dreidimensionale Karte, welche frei dreh, schwenkbar und zoombar ist,
  • eine ganzheitliche Integration der verschiedenen, denkbaren Spielmodi
  • etc .....
Ich ergänze mal:
Touch Bedienung ...

Grüße
Hanni
Die DIN 16554 regelt, dass eine Kugelschreibermine einen 200 m langen Strich ziehen können muss.
----------
Beiträge in meiner Funktion als Admin haben diese Farbe!
Benutzeravatar
fff
Stabsunteroffizier
Stabsunteroffizier
Beiträge: 435
Registriert: Mo 25. Jul 2011, 16:24

Re: Neue Version

Beitrag von fff »

Ich finde, das Bestehende verändern oder gleich neu machen ist beides (vielleicht gleich) viel Aufwand. Neues ins Alte einbauen vielleicht gar nicht so schlimm. Sicher schwieriger wie wenn das Programm ganz neu. Nur das müsste zuerst gemacht werden und wird vielleicht auch nicht perfekt sein. Wenn etwas neu ist, darf es von mir aus auch gleich anders werden. Das asc ist dann immer noch da – das neuere asc wird von denen gespielt werden die es besser finden.
Excalibur hat geschrieben:ein rein mathematisches Strategiespiel.
Nach rein mathematischem Bauchgefühl gespielt.
Excalibur hat geschrieben:auf diese spez. Stellén untersuchen
Der schwierige Teil ist glaube ich: wie sehen diese Stellen aus. Es müssen alle gefunden werden.

Asc hat soviel ich weiss leider eine Dokumentation die schwierig ist für mich als Newbie.

Ich hätte gern eine gute Tastatursteuerung. Und ein Rückzugsbefehl bei dem alle Einheiten sich mehr oder weniger geordnet in Richtung HB zurückziehen (zB wenn ich keine Zeit für eine Runde habe und von überall angegriffen werde).
Benutzeravatar
GAMER
General
General
Beiträge: 8869
Registriert: Sa 7. Mär 2009, 14:49
Einheitenset: Teccnols - SY

Re: Neue Version

Beitrag von GAMER »

Beim reinen Programmcode werden die meisten von uns wohl weniger Hilfestellung leisten können, aber das ist ja auch nur eine Seite des Ganzen. Aus heutiger Sicht müßte ASC von Grund auf modernisiert werden und das eben nicht nur beim Programmcode wie du es oben schön dargestellt hast. Bei allem was rund um den Programmcode noch zu tun ist, wird es sicherlich viel mehr Möglichkeiten für uns geben mitzuhelfen. Insbesondere sehe ich da die Gesatlltung der Dialoge und auch die generelle Gestallung des Spiels, bis hin zu möglicher 3D Umgebung (Siehe BWK). Aber sowas sehe ich eher optional.

Die Kreativen und Bereitwilligen unter uns waren ja leider bisher auf die Möglichkeiten von ASC beschränkt, bzw. auf das was sich daraus noch weiter machen liess (siehe PBP). Neue Möglichkeiten innerhalb oder rund um ASC geben uns natürlich auch erweiterte Möglichkeiten für bestehende oder neue Spielsysteme, welche auf ASC basieren. Es liegen genug gute Ideen in den Schubladen, die nur darauf warten umgesetzt zu werden. (Was aber bisher aufgrund der Umstände nicht machbar war.)
[enjoy the future!]
TanzAufDemVulkan
Soldat
Soldat
Beiträge: 4
Registriert: Mi 26. Dez 2012, 11:37

Re: Neue Version

Beitrag von TanzAufDemVulkan »

Ed von Schleck hat geschrieben: Um konkreter zu werden: Meine Arbeit, was die Performance des Pathfindings angeht, ist ziemlich abgeschlossen (von Bugfixing mal abgesehen). Ich würde mich gerne mit anderen Teilen des Codes beschäftigen; die Liste da oben war ein Teil der TODO-List, die so in meinem Kopf rumschwirrt. Ein andere Aufgabe wäre aber, mehr Leute in die Entwicklung reinzuziehen. Dazu könnte ich ein Tutorial schreiben für Leute, die gerne mal sich mit der Engine beschäftigen würden, und einfache Aufgaben formulieren, die auch für Anfänger machbar sind. Mein Workflow ist zwar nicht sehr Newbie-freundlich (ziemlich vim-basiert), aber ich denke, ich könnte schon eine Reihe von Artikeln hier im Forum schreiben für alle, die sich dafür interessieren. Gibt es da Interesse für?
Ich bin definitiv für ein Tutorial.
Ich habe mir den Quellcode auch schon einmal angeschaut. Aber ein Einführungstutorial würde (bestimmt nicht nur mir) die Einbearbeitung erheblich verkürzen.

Gruß TADV
Antworten