Beiträge von Geirroed

    Kommt drauf an was man unter "dürfen für das Projekt dann genutzt werden" zu verstehen hat. Kann ein Dritter sich dann der Grafiken usw. bedienen um daraus eigene Einheiten zusammen zu stückeln? Darf man sie ohne zu Fragen ein bisschen schönheitsoperieren, falls das sinnvoll erscheinen sollte, oder auf Basis der alten Bilder neue Animationen hinzufügen?


    Ich fände beides relativ wichtig. Ersteres, damit wir möglichst viele motivierte Modder und Kontentersteller haben. Letzteres, weil es natürlich nicht gewährleistet ist, dass ein Künstler ewig dabei bleibt, unsere Vorstellungen von einheitlichem Grafikstil und der angemessenen Anzahl von Frames pro Animation sich weiterentwickeln wird.


    Wäre es denn jetzt besonders schlimm auch die grafischen/tontechnischen Inhalte einfach unter die GPL zu nehmen?

    Ein sehr guter Punkt, den du dort ansprichst! Genau oder so ziemlich genauso wollte ich das umsetzen.


    Zitat

    Müsste man dann spells und abilities trennen?

    Zumindest innerhalb eines Kampfes nicht. Außerhalb des Kampfes hat ein Held dann eben Spruchkenntnis (ja oder nein) sowie diverse Fertigkeiten (Zauberei, Magieschulen etc.). Im von dir beschriebenen Stil wollte ich dann Zauberspruchdateien erstellen, die unter bestimmten Bedingungen einige Faktoren der Sprüche verändern. Herauskommen soll dann eine Ability, die im Rahmen ihrer Inkarnation dann nicht unbedingt wüsste was sie jetzt für eine Fertigkeitenstufe darstellt, aber sich richtig verhält. Für Kreaturen, deren Sprüche eh immer festgelegt sind, würde ich allerdings eher für die herkömmliche Idee plädieren.


    Also im Beispiel sähe das dann so aus:


    slow_unskilled würde halt als effect1 slow_unskilled und eine ATB_cost con 10000 (also einen vollen Zug) standardmäßig besitzen. Je nach Fähigkeiten des Helden werden dann zu Kampfbeginn (oder besser nur, immer wenn sich seine Fertigkeiten ändern, sonst wirds vielleicht ein bisschen viel mit der Ausleserei) seine Zaubersprüche in die passenden Abilities umgeändert. So zumindest ist im Moment Vorstellung (und du hast offenkundig eine sehr ähnliche :) ), damit man für Dinge wie den Eisblitz nicht 32 unterschiedliche Fähigkeiten (4 Grade Spruchmeisterschaft * 2 Grade Meister des Eises * 4 Grade Zaubereibeherrschung, wobei man letztere sicher auch anders einbauen könnte) erstellen muss. Alleine der Übersicht zu Liebe. Zauberei auf diesem Wege einzubauen hätte dann den Vorteil, dass man nicht für Massensprüche explizit wieder einbauen muss, dass es dort nicht wirkt und ähnliche Ausnahmen.


    Zitat

    Magieschulen sind erstmal nicht so entscheidend, aber ne Eigenschaft damage_type (physical/fire/earth/water/air/...?) einzubauen wäre sinnvoll, damit man Immunitäten/Resistenzen und andere Schadensmodifikatoren einbauen kann.


    Ja das wird innerhalb eines näheren Zeitrahmens passieren. Die Funktion TakeDamage() fragt bereits dmg_type (magie, fernkampf, nahkampf, pure) sowie dmg_source (feuer, wasser, erde, luft, physisch) ab. Eine andere Frage ist, bauen wir die Resistenzen in Form von Specials oder als eine Reihe von Eigenschaften (wie Attack, Defense usw.) ein. Ich tendiere im Moment zu Letzterem (wie man das dem User dann präsentiert ist ja nochmal eine andere Frage).

    Zitat

    Macht es Sinn, 2-3 Keyframes zu zeichnen und die Übergänge zu morphen/tweenen ?

    Ich glaube nicht, dass das auch nur halbwegs gut aussehen wird (ohne völlig übertriebenen Aufwand). Ich denke am besten wird es sein die Animationen zu erstellen, wie es die H3 Modder im Moment auch tun. Bestehende Frames zerschneiden, die Einzelteile neu anordnen und dann ausbessern was nicht aussieht.
    Das führt zwar auch meist zu eher "steifen" Bewegungsabläufen, aber die kann man nur verhindern, wenn man Frame für Frame zeichnet (Langzeitziel aber erstmal nicht mit unserer Kerntruppe anzustreben) oder eben ein richtiges dreidimensionales Knochenmodell hat, von dem man dann die einzelnen Frames rendert (und das ist noch viel mehr Aufwand oder sieht nach nur ziemlich viel Aufwand aus wie H4).


    EDIT: Als Übergangslösung würde ich erstmal mit Ein-Frame-Animationen anfangen.

    Erstmal danke fürs Lob :)

    Zitat

    hmm... mit linksklick kommt mainaction at 06, mit rechts kommt garnichts...
    Aber beim direkten angriff seh ich den handlungsablauf:
    50 griffins attack for 455 damage: 113 imps killed z.B.


    Wenn das die beiden einzigen Ausgaben sind, ist das wohl eine sehr (ok - ein paar Tage) alte Version. Ich veröffentliche so häufig die Fortschritte, damit es mehr Gelegenheiten in Form anderer Tester gibt, dass Bugs möglichst früh auffallen. Die jeweils neuste Version werde ich im Thread "Releases" posten und parallel darauf im Anfangspost verlinken.


    Die Stats der Kreaturen kannst du allerdings nicht nur im Spiel angucken, sondern auch in den Textdateien innerhalb des creatures/-Unterordners angucken und nach eigenem Gusto editieren. Du kannst dir auch beliebig eigene Kreaturen erschaffen - auf dem Schlachtfeld tauchen die allerdings nur auf, wenn du sie in die "combat.txt" im combat/-Unterordner einträgst. Eine Anzeige der Stats im Grafikfenster kommt auch irgendwann - gibt halt sehr viele Enden an denen man weiterarbeiten kann.



    @Sprache: Wenn das langfristig laufen und vollständig werden soll, können wir nicht nur im Drachenwald bleiben imho. Und die nächst naheliegenden Orte nach Mitstreitern zu suchen wären dann andere Heroes-Foren. Wenn wir uns auf Deutsch beschränken ist die Auswahl da relativ klein.


    @Musik: Ich muss mal schauen wie einfach das ist einen Track in Dauerschleife mittels SDL einzubauen, kann ja nicht zu schwer sein, eigentlich.
    Generell ist das etwas, das ich nach Möglichkeit haben möchte, wenn wir eine erste "vollständiger Kampf"-Version haben mit der ich dann gerne auf Mistreitersuche gehen würde. Wenn jemand einen Track hat, den er bei kommender Gelegenheit bereit wäre unter die GPL (oder eine andere freie Lizenz auf die wir uns noch einigen müssen) und der ganz grob zu einem Heroeskampf passt, dann kümmere ich mich darum.


    Zitat

    Edit: ach ja und die zahlen sieht man auf dem blauen grund so gut wie garnich


    Habe jetzt schnell mal die Farben verändert. Ist aber eh noch sehr vorläufig geregelt.

    • Windows:
      Diese Dateien werden grundsätzlich benötigt:
      Benötigte DLLs
      Release vom 24.12.08
      Beide Ordner entpacken, dabei den Inhalt aus ersterem in letzteren verschieben.


    • Linux:
      freeroes-0.0.1
      cmake
      (folgende libs werden ebenfalls benötigt, aber werden sowieso von cmake überprüft:
      libsdl-dev
      libsdl-image / libsdl-image-dev
      libsdl-ttf2.0-0 / libsdl-ttf2.0-dev )
      den Ordner entpacken und mittels "cmake . && make" kompilieren, fertig.
      Danke an chrber



    Weihnachtsrelease
    Beschreibung: Siehe unten. Nicht wundern, wenns etwas ungewohnt aussieht...


    Release vom 18.12.08
    Beschreibung: Siehe unten


    Release vom 14.12.08


    Helden grundlegend eingebaut. Helden können Fertigkeiten Anwenden und ihre ATK und DEF werden auf die Kreaturen übertragen. Heldenangriff bin ich noch nicht zu gekommen, sollte aber ein Klacks sein. Im Moment beziehen die Helden ihre Information noch aus Dateien, die den Kreaturenbeschreibungen entsprechen.


    Ability System weiter ausgebaut. Inzwischen sind mit den Faktoren, die ausgelesen werden schon eine Menge Sachen zu bewältigen. Der Pitlord hat seine regulären Zaubersprüche erhalten, der Menschen-Held Göttliche Führung und der Dämonen-Held Feuerball (mit Meister des Feuers) und Wespenschwarm auf jeweils Experte. An der Erweiterung dieses Systems werde ich wohl erstmal weiter schrauben. Außerdem gibts jetzt ein hübscheres Zauberbuch ;)


    Ich habe einige der entsprechenden Datein zum besseren Verständnis mit Kommentaren versehen, falls sich das schonmal jemand angucken will. Da sollten durchaus schon ein paar Zauber drin sein. Puppenspieler, Eisblitz und Blitzstrahl (mit und ohne jeweiligem Meister), Meteorschauer, Implosion, Unheimlicher Pfeil und Verfall sollten ziemlich genau umsetzbar sein. Eile, Verlangsamung, Leid und Zähigkeit zumindest grundlegend. Effekte sind im Moment grundsätzlich kumulativ und Gegenzauber heben den jeweils anderen auch noch nicht auf.


    EDIT: redio klappt jetzt bei mir :) und das Unterforum wird der Ordnung noch große Dienste erweisen! Schönen Dank an Gunnar und Tedil :)

    Ich verstehe im Moment nicht warum wir einen vom Lesezugriff geschlossenen Bereich haben. Die Rede war ja schließlich von einem freien Remake, also mit offenen Ressourcen.


    Klar Dinge wie Serverzugriff sollte man nicht unbedingt öffentlich machen, aber das kriegen wir auch per PN hin. Ein Forumsteil wo nicht jeder mitdiskutieren kann ist schon sinnvoll, um ein paar Threads zu haben, die sich auf das Wesentliche eines jeweiligen Themas zum passenden Entwicklungsschritt beschränken, aber auch da seh' ich nicht wirklich warum das niemand einsehen können sollte...

    Zitat

    Original von Hans Maulwurf
    Sieht wirklich gut aus was bis jetzt geschafft wurde. :daumen:


    Ich hätte noch eine kleine Anregung: ich fände es gut ein SVN repository zu erstellen, damit man sich immer den neuen code runterladen und selbst kompilieren könnte und natürlich wäre das auch nützlich für den Fall, dass noch ein weiterer Programmierer dazukommen sollte.


    Danke!


    Ich bin sehr stark für ein SVN Repository, habe aber überhaupt keine Ahnung von der zugehörigen Einrichtung desselbigen und auch noch nie eins benutzt. Auch bin ich mir nicht sicher, ob das beim aktuellen, nur sehr gering modularisierten und noch nicht sehr ausgereiften Zustand des Projekts Sinn macht. Im Moment werden mehr oder weniger immer fast alle Module gleichzeitig verändert, wenn ich daran herumschraube. Noch bin ich aber zuversichtlich den Überblick zu haben und verschiebe darum das Aufräumen bis alle Funktionalitäten grundlegend implementiert sind.


    Wenn jetzt ein zweiter Programmierer hinzu kommt verschieben sich da natürlich die Prioritäten und eine stärkere Modularisierung und damit ein SVN Repository werden Pflicht. Vielleicht kannst du ja eins einrichten, sonst beschäftige ich mich damit, wenn es soweit ist.


    Zitat

    Ok, dann muss ich halt aufhören, Feen zu malen. Macht aber mehr Spaß ;)


    Mach was dir Spaß macht. Meine Platzhalter sind ja funktional, da ist es erstmal wichtiger mit Motivation dabei zu sein.

    Zitat

    ich versuch grad, insgesamt sauberer zu arbeiten


    Ist, glaub ich, gar nicht notwendig. Ich würde eher sagen, dass man eh die Bilder nochmal auf der runterskalierten Ebene ein bisschen nachbearbeiten will, weil kleinere Bildelemete einfach nicht völlig zuverlässig umgesetzt werden. Die erfordern dann ohnehin Nachbearbeitung um die gleiche Wirkung zu erzielen wie das im Original der Fall war. Davon abgesehen, dass die Bilder den aktuellen Zweck mehr als erfüllen :)


    Zitat

    Mit der Inileiste, also mein Vorschlag is ja, es wie in H5 zu machen, mit dem großen Portrait (128x12cool der aktuellen Einheit was eh schon links ist, und kleinen (64x64 oder 96x96) in der eigentlichen Leiste. Portraits machen ist sowieso gut, weil man da n bisschen weniger runterskalieren muss. Man könnte die Leiste halt auch über den Himmel legen und ausblenden oder abdimmen, wenn gerade ein Zug abläuft.


    Bin auch für mehrere kleine Portraits und ein erhabenes - sei es durch andere Größe oder vorerst einfach nur durch besondere Umrandung. Fraglich ist halt wo wir die hin packen. Über das Spielfeld und dann zum Zug ausblenden find ich unpraktisch, denn ein Zug läuft ja eigentlich immer...


    @Gunnar/Forum: Danke sehr für das Angebot! Ich würd auch sagen, wir schauen nochmal was Tedil vorhatte und melden uns bei Bedarf nochmal bei dir. Ein Unterforum hier im Drachenwald (wenn das jetzt so gemeint war) hätte allerdings den erheblichen Vorteil, das deutlich mehr Leute hierauf aufmerksam werden. Wenn wir nachdem unser erstes Ziel fertig ist, vielleicht auch mal in anderen Heroes-Foren mit diesem Projekt hausieren gehen, müssten wir uns vermuitlich auch daran gewöhnen, dass die Freeroes-Diskussionen ggf. auf Englisch stattfinden werden.


    Zitat

    gegen Wochenende gibts wohl n größeres Paket.


    Freu mich drauf!

    Dank @ frifix fürs baff sein und dies auch zum Ausdruck bringen :)


    Wir werden, wenn es an die angesprochenen Themen geht, versuchen die Wiederholung solcher Fehler zu vermeiden. Allerdings kann ich dir jetzt schon fast versprechen, dass wir bis dahin unsere eigenen schlimmern Fehler gemacht haben werden ;)
    Das Gute an einem freien Projekt ist dann natürlich, dass im Prinzip ein jeder daher kommen und einen Fehler ausbügeln kann, warum zumindest die besonders nervigen Fehler nicht ewig überleben werden. Allerdings ist es leider auch noch ein zu weiter Weg um an die angesprochenen Probleme auch nur zu denken, wenn man ehrlich ist.
    Ok den Zählerüberlauf kann man jetzt schon angehen, indem man die richtige Variablensorte nimmt. Im Moment ist das ein einfacher int, der Werte bis ca. 2,1 Milliarden zulässt. Aber da können wir noch sehr viel mehr nach oben schrauben, wenn tatsächlich jemand Kämpfe dieser Größenordnung führen möchte.


    Tedil: Ich dachte im Moment daran die Ini-Leiste an die Seite zu legen, weil da imho noch mehr Platz ist. Wobei da natürlich auch noch Kriegsgeräte und Helden hinkommen. Darum wollte ich damit erstmal warten, bis das alles fertig ist.


    Neue Version
    Pathfinding: Ist noch nicht ganz optimal. Wenn man es drauf anlegt wird man den dazu bringen können ewig (ok eher ziemlich lange) zu rechnen. Werde wohl einen eigenen Algorithmus dafür schreiben, welche Felder alle begehbar sind und den aktuellen dafür benutzen den eigentlich, möglichst kurzen, Pfad zu benutzen. Ich lasse ihn aber erstmal drin, trotz Absturzgefahr in allzu schlimmen Slalomsituationen.


    Fähigkeiten:
    Können nun auch manuell aktiviert werden, wenn es mehrere Fertigkeiten gibt wird das Spellbook geöffnet. Das aktivieren der Fertigkeiten geschieht mit dem Knopf rechts unten. Um das Spellbook zu testen haben die Pitlords im Moment:
    1. Doom: Macht langsamer (30% INI, 2 Speed) und zieht 5 ATK und DEF
    2. Age: Reduziert die maximalen HP eines Stacks um 30%
    3. Die Priester haben eine Fertigkeit, die 100 Schaden pro Runde für 5 Runden macht um zu testen ob die Fertigkeitenauswahl ohne Spellbook bei nur einer manuell aktivierten Fertigkeit funktioniert.
    Keine Angst, ich erfinde jetzt nicht willkürlich irgendwelche Fertigkeiten für die Kreaturen neu, sondern brauchte nur schnell was zum testen. Und Obiges ließ sich eben schnell mit dem Stand des aktuellen Fertigkeiten Systems bequem durch schreiben von ein paar Zeilen in eine Textdatei umsetzen. Im Gegensatz zum z.B. Feuerball, weils noch keinen Flächenschaden gibt. WARNUNG!: Nur auf Stacks damit klicken, gibt noch keine Abfrage, ob das Ziel gültig ist und bei leeren Feldern stürzt es dementsprechend ab!


    Rechtsklick:
    Ok der ist nicht neu, sollte hier aber besser nochmal erwähnt werden. Er dient zum Verlassen des Spellbooks, falls keine Fertigkeit ausgewählt werden soll/kann bzw. der Abwahl einer ausgewählten Fertigkeit. Gibt andernfalls den Zustand eines bestimmten Stacks in der Konsole an. Ist mit Konsole im Moment schön schnell zu bewerkstelligen und ich brauch das Feedback um zu gucken ob alles auch richtig funktioniert. Irgendwann wirds das auch in schön mit Grafik und im selben Fenster geben. Und bunt. Keine Sorge. ;)


    Unmittelbare Pläne:
    Helden! Ich werde die Representation des Helden auf dem Schlachfeld, wohl einfach durch einen Stack darstellen lassen, der außerhalb (bzw. in einem unbegehbarem Teil eines verbreiterten Schlachtfelds) steht und pauschal nicht angegriffen noch Opfer von Abilities werden kann (es sei denn die Ability sagt das explizit anders -> Magie verderben oder Manaraub). Da andere Stacks ja bisher auch schon "Sprüche" nutzen können, werden die recht bald schon wohl auch einen wirklichen Sinn haben :)


    EDIT: Schicke Grafiken für Spellbook, Fertigkeitenknopf (an und aus) sowie die kommenden Helden wären natürlich ganz praktisch *mit dem Zaunpfahl um sich schwenkt* ;)

    So. Ein grundlegendes, sehr flexibles Special-System steht. Bin ein bisschen bedient was das Programmieren für Heute angeht, darum verschiebe ich eine sinnvolle Erklärungen auf später: Es gibt Specials, die nur da sind und nur dadurch wirken, dass sie abgefragt werden. Dann welche die zu bestimmten Zeitpunkten aufgerufen werden. Diese haben dann einmalige (also im Gegensatz zu andauernden) Wirkung, abhängig ihrem type. Ein möglicher type ist es sogenannte effects auf einen Stack zu übertragen. Die haben dann anhaltende Wirkung, die entweder immer gültig ist, oder auch wieder zu bestimmten Zeitpunkten Wirkungen hervorruft.


    Die Ganzen Einzelteile sind wie gehabt über Textdateien zusammenbaubar, genauso wie die Specials (abilities heißen die jetzt programmintern) selbstverständlich wieder über die bekannten Kreaturen-Textdateien auf den erwünschten Kreaturen zuzuweisen sind. Ist vielleicht auf den ersten Blick etwas frickelig, aber bedeutet auch, dass man ohne Probleme eigenes erstellen können wird :)


    Ich glaube mit diesen drei Stufen sollte es möglich sein die meisten Specials ohne viel Programmieraufwand umzusetzen (bzw. gar keinem, wenn das System völlig ausgebaut wurde).


    Zitat

    Hab auch Abstürze, wenn die Dämonen kämpfen.


    Hatte in der Schadensformel min_dmg und max_dmg vertauscht. Führte dann dazu, dass er bei einer Differenz von 1 zwischen diesen Werten (also Imps und Dämonen) versuchte "<zufallszahl> modulo 0" zu rechnen...
    Sollte behoben sein. Danke für deine Argusaugen :) Hatte mir vll. ein bisschen zu sehr angewöhnt Greifen mit Nachtmahren prügeln zu lassen.


    EDIT: Download-Link sollte man schon einfügen.


    P.S.: Da ja noch wenig grafisches Feedback zu den Aktionen da ist, gegebenenfalls auch die Konsole, die im Hintergrund läuft beachten. Wenn das Spiel sich "aufhängt", kann das auch ne Fehlermeldung sein, die Aufmerksamkeit verlangt.

    Ich persönlich mag die Imps so wie sie sind, bisher am mit am liebsten. Ihre Detaillfülle passt sehr schön zur aktuellen Auflösung imho :)


    Zwischenbericht:
    Wieder einen Absturzbug behoben, der beim Angirff auftritt. Muss irgendwie nicht sonderlich dabei gewesen sein, als ich die Funktion schrieb. Inzwischen ist sie schrecklich unübersichtlich. Bis ich ne neue Version hochgeladen hab vorerst nicht mit den Imps attackieren... :/


    Schildschlagen und Gegenwehr auf Distanz funktionieren ab jetzt. Im Moment sind viele Paramter der Specials noch nicht eingebaut, so dass Schildschlagen bei jeder Attacke triggert, aber vom sehr grundlegenden Prinzip steht die Grundlage für die flexible Einbindung der Specials. :)

    Zitat

    Ja das mit dem Runterskalieren ein bisschen einzuschränken wär schön.


    Die Einheitenbilder können im Prinzip jede Größe aufweisen. Wäre nur eben halt immer am linken unteren Rand des Kästchens ausgerichtet gewesen. Hab jetzt x_off und y_off zur Auslesung der Kreaturendateien hinzugefügt, welche jeweils die Verschiebung in Pixeln angeben. Ist ein Bild breiter als 50pixel, soll aber zentriert werden, dann gibt nen negativen Wert für x_off um es weiter nach links zu ziehen. Könnte das natürlich auch einfach von der Bildreite abhängig machen, aber die genaue Mitte muss ja nicht immer auch vorgesehene Stelle sein (z.B. bei überstehenden Mistgabeln). Hab deine Bilder teilweise wieder ein bisschen gedehnt, um zu verdeutlichen was ich meine.


    Zitat

    Wär's nicht ohnehin sinnvoll, die Auflösung auf 1024x768 zu setzen?


    Ja. Habs jetzt mal auf 1024 angepasst. Aber das führt zu der wichtigen Frage
    Welche Auflösung wollen wir als "normal"?
    Also insbesondere wie groß sollen die Kreaturenbilder vorliegen? Im Moment ist das noch einfach das alles zu ändern. Wenn wir das wissen sollten wir diese Auflösung erstmal durchziehen. Veränderbar kann man dann irgendwann mal einbauen (nicht, dass H3 sowas hätte), wobei Auflösung vergrößern natürlich immer schlecht bei Pixel-Grafiken ist.


    Zitat

    Ansonsten danke an S.oT. für das Lob, und vor allem den teil über den elan des Programmierers unterschreib ich auch nochmal ;)


    Danke sehr :) Habe im Moment allerdings auch viel Zeit und es macht Spaß :) Was den Elan angeht - ich sehe schon schicke Dämonen gibts auch bald ;)


    Tedil: Kann mich da nicht einloggen... Darum nochmal auf Rapidshare
    Sollte jetzt ohne zusätzliche unter Linux Umstände zu kompilieren sein. Auflösung vergrößert, Offsets eingebaut und ein bisschen mehr Feedback in der Konsole eingebaut. Absturz beim Angriff entfernt sowie einen Fehler in der Schadensberechnung. Hauptsächlich heute eine Menge Aufräumarbeiten im Code, die nach außen hin nicht so sichtbar sind. Ich bin recht zuversichtlich, dass morgen zumindest der Schildbash umgesetzt ist. Wenn ein paar Fertigkeiten drin sind, ist für mich erstmal die Wegfindung am wichtigsten und dann gucken wir mal nach den Helden.


    P.S. Der Reiter ist vom Konzept einfach mal geil xD

    S.o.T.: Vielen Dank! Moralische Unterstützung ist auch viel wert :)
    Tedil: Danke sehr. So richtig wohl fühl ich mich bei Rapidshare nie ;)


    Zitat

    Ich hab jetzt noch keinen Überblick über den Code, aber weißt du zufällig, ob ich das dingens auch in Linux kompilieren kann, oder geht das momentan nicht? Oder kennst du dich damit nicht aus?


    Wenn du die aktuelle Version unter Linux kompilieren willst, müsstest du vorher in der main.cpp noch ganz unten

    Code
    int APIENTRY WinMain(HINSTANCE hInstance,		                                    //Entrypoint for Windows
                HINSTANCE hPrevInstance,
                LPSTR lpCmdLine,
                int nCmdShow ){
    
        CombatMain();                                                            
    	return 0;
    }


    in

    Code
    int main(){
    
        CombatMain();                                                            
    	return 0;
    }

    umändern. Die nächste Version wird das Passende per Präprozessordirektiven einfügen, so dass der Code allgemeingültig ist. Ich lade die dann hoch wenn sich ein paar Fortschritte gesammelt haben.


    Dann müsste das - ob manuell oder automatisch geändert - gehen. Vorrausgesetzt natürlich dein Linker weiß wo die Libraries sind usw. (aber mit Linuxlibraries kennst du dich vermutlich besser aus als ich) - gehen. configure-Scripts und makefiles habe ich zwar schon benutzt aber keinerlei Ahnung von.


    Zitat

    Problem: Ich habe dem Greif 99 retaliations gegeben, wenn er aber zum zweiten mal mit gegenwehr angegriffen wird, dann stürzt das spiel ab. Habs noch mit 3 probiert, gleiche Geschichte. Mach ich was verkehrt oder läuft das vom Programm her noch nicht?


    Danke für den Tipp :) Bin damit nem recht kniffligen Fehler auf die Schliche gekommen, [techbabbel]der mit dem Zeitpunkt der Abfrage ob ein Feld im Spielbreich liegt, einem darausfolgendem falschen Speicherzugriff und damit nach Lust und Laune des OS zu einem Absturz oder eben nicht führte.[/techbabbel] Dass das mit den Greifen auftrat lag wohl eher daran, dass man die zum Testen so schön schnell nach vorne schicken kann und dann die Engel von ganz untem am Spielfeldrand als zweites Zuschlagen.


    Das eigentliche Zurückschlagen sollte aber funktionieren. Hat es bei den Golems ja auch bereits. Meine Idee war es für unendliche Gegenschläge die Anzahl auf -1 zu setzen, aber 99 oder unendlich (bzw. in der aktuell hochgeladenen Version ca. 65000) pro Runde ist wohl ziemlich gleichzusetzen.


    EDIT: Schöne Platzhaltergrafiken! :) Ich schau mal, dass ich in der nächsten Version offsets einbaue, dann brauchen wir die nicht auf 50*100 skalieren nur damit die an der richtigen Stelle erscheinen.

    Neues Update: Kreaturen sind jetzt für jeden kinderleicht erstellbar!


    Es gibt jetzt einen Ordner namens "creature". In diesem werden alle Dateien ausgelesen. Eine Kreatur pro Datei. Die Syntax schaut ihr euch einfach bei den bestehenden Dateien ab.
    "name" ist das woran die Kreatur intern wieder erkannt wird. Namen (am besten sprachenabhängig), wie die Kreaturen dem Spieler erscheinen sollen gibts noch nicht.
    "image" ist der Name (mit Dateinamenserweiterung) einer Bilddatei im Ordner "combat". Wenn nichts angegeben gibts einen extrahässlichen Platzhalter.
    Specials und dergleichen gibt es noch nicht.


    Weiterhin gibt es im Ordner "combat" nun eine "combat.txt". Die überbrückt im Moment, dass wir ja noch nicht durch die Gegend laufen und daher die Informationen beziehen wer eigentlich gegen wen kämpft. Die Syntax ist <Kreaturenname> <Anzahl> <x-Koordinate> <y-Koordinate>. Die Kreaturen gehören immer der zuletzt definierten Seite an, wenn keine definiert wurde der Seite 0. Wenn mans sieht ists auch ziemlich klar.


    Da das Prog im Moment zwecks Debugging bei einem Lesefehlern anhält, habe ich es mal in den Fenstermodus versetzt, damit man es einfacher beenden kann.
    Außerdem kann man jetzt aussuchen von wo man angreift und ein bisschen anderer Krimskrams. Weiterhin bin ich gerade dabei das Ganze zu modularisieren, hab da aber noch mangels Erfahrung meine Probleme. Kann ich irgendwie auf die Strukturdefinition aus einem anderen Modul zugreifen? extern geht für strukturen nicht. Ich habs zwar jetzt hingekriegt, aber habe jetzt in jedem Modul die Struktur definieren müssen, die dann halt nur auf die Funktionen in den anderen Modulen zugreifen. Das muss doch irgendwie besser gehen.


    @DLLs: Wollte die mit dem nächsten Update mit hochstellen, aber da war wer schneller ;) Also nochmal an dieser Stelle (ja ich verlinke auf Rincewinds Download): Diese Dateien braucht vermutlich jeder zusätzlich im Ordner. Bringt imho aber auch nichts die immer mit extra hochzuladen - verändern sich ja nicht.


    Rincewind: Am besten wärs vielleicht, wenn du die DLLs (und wenn du grad mal Zeit hast die jeweils aktuellste Version) auch nochmal im ersten Post verlinkst. Dann findet man die auch immer wieder.

    Zitat

    Achso, zu den Fraktionen, mein Vorschlag is, die Kreaturen von Haven & Inferno erstmal komplett aus H5 zu übernehmen, ohne Upgrades, und dann erstmal keine neuen Kreaturen einzubauen.


    Kreaturen einbauen ist jetzt natürlich ziemlich einfach, aber prinzipiell ist die Beschränkung sinnvoll, was Dinge wie Spezialfertigkeiten usw. angeht.

    Rincewind:

    Zitat


    Wäre cool, wenn du für nen Rechner der keine Programmierumgebung drauf hat, die dlls mitgeben könntest.


    Hmm ja das wäre sinnvoll xD

    Zitat

    Mir is aufgefallen, dass man auf ne Leiche nicht drauflaufen kann, aber das weißt du wahrscheinlich schon.

    Wusste ich noch nicht. Danke für den Hinweis :) War zum Glück nur eine Zeile die ich vergessen hatte :)


    Zitat

    Animationen sind wirklich nebensächlich, das könnte man ja im nächsten Schritt mit nem Blutspritzer auf der angegriffenen Einheit deutlich machen. Ich frag mich grad, was die beste Methode ist, wenn wir mal ernsthaft anfangen, Kreaturengrafiken zu malen, um die später gut zu animieren. Aber vorher nehmen wir glaub ich eh bessere Platzhalter.


    Meine Idee war es die Informationen für die Animationen (Zeiger auf die Grafiken mit zugehörigen Dauerangaben) in der Kreaturenklasse abzuspeichern (oder evtl. ausgelagert mit einem entsprechenden Verweis). Weiterhin dann noch eine Information, welche Animation gerade läuft und zu welchem Zeitpunkt die Animation begonnen hat. Mit diesen Informationen bestimmt dann CreatureDraw() welches Bild gerade das richtige ist. Diese wird wie bereits jetzt in jedem der Zyklen von main() aufgerufen und wir hätten eine zeitabhängige (im Gegensatz zu z.B. einer frameabhängigen) Animationsenginge. Ist aber noch weite Zukunft.


    Zitat

    Wenn die Kreaturen mal IDs bekommen fänd ich's wichtig, dass diese nicht wie in HV hardcoded sind

    Das haben sie doch inzwischen mehr oder weniger in den Griff gekriegt ;) Meine Idee ist es, dass jedes der eingelesenen Konstrukte einen String (der innerhalb der Textdatei festgelegt wird) als eindeutige Erkennung kriegt. Im Moment sind die IDs noch Integer, aber das ist nur die kurzfristige Lösung. Prinzipiell sollen also die Kreaturen, die das Programm erkennt erst festehen, wenn es aus einem bestimmmten Ordner zum Programmstart alle Textdateien ausgelesen hat.


    Zitat


    Ich denk zwar viel über die Abenteurkarte nach, aber es wär jetzt wohl besser diesen Kampfmodus auszubauen. Wenn du es soweit hast, das die Kreaturendaten ausgelesen werden und ein erstes Dateifromat dafür da ist, könnten wir die Kreaturen von 2 Fraktionen anlegen und dann hätte man schon ne coole Demo. So als Vorschlag.

    *Zustimm* Wenn wir was halbwegs interessant spielbares zu Wege bringen, signalisieren wir damit auch, dass das Projekt keine Totgeburt ist können vielleicht noch ein paar weitere Interessierte für den Entwicklungsprozess gewinnen.


    Zitat

    Achso, nochn Detail, ich würd den Kreaturen gern ne Eigenschaft "native Terrain" geben, die nicht aus der Fraktion abgeleitet wird, eventuel sogar 2 Slots dafür. Ich hab da so ne Idee.. aber jetzt wirds unübersichtlich..l


    Jo solchen Kram hinzuzufügen sollte auch später noch einfach sein :) Hatte den Tiles bereits mehrere Eigenschaften gegeben um eventuell auf native_terrain auch im Kampf eine Wirkung geben zu können. Bin mir aber noch nicht sicher ob wir das lieber per direkter Eigenschaft oder als Sondereigenschaft machen wollen. Aber sowas sollten wir zurückstellen.


    -----
    Tedil:

    Zitat

    die spezialfähigkeit müsste dann auch aus der "text"datei ausgelesen werden, die zur kreatur gehört,


    Ich dachte eher daran die ganz getrennt einzulesen und der Kreatur nur zu sagen wie die Fähigkeit heißt. Dann können mehrere Kreaturen auf ein und die selbe Fähigkeit zurückgreifen.

    Zitat

    also brauchst du dann noch ein objekt namens special oder sowas in der ecke, das bestimmte vordefinierte effekte triggert, die man da übergeben muss oder so etwas


    Mein Entwurf war bisher folgendermaßen (ein bisschen in pseudocode):


    Die Klasse Effekt wird dann ähnlich kategorisert und wird so Types haben wie Eigenschaftsmodifikationen, Schaden_nehmen, oder eben halt wieder Speziell. Ein Effekt bezieht sich dann immer auf seinen Besitzer.
    Mit ability.type == applyeffect gibt das uns dann erstmal einiges an die Hand um etliche Dinge zu realisieren.


    Je nachdem wie superspeziell die Fähigkeit dann ist, kann man immer noch für sie einen ganz neuen Type reservieren und es wird einfach bei passender Stelle im Code abgefragt ob die Kreatur eine Fähigkeit mit diesem Type hat und die Auswirkung dann hard gecoded.


    Zitat

    Zur Wegfindung: ich war ja auf dem tollen uni-tag in münster, da gab es eine Vorlesung dazu, am Beispiel Warcraft III und dem A* Algorithmus.


    Guter Tipp, danke :) Ein Thema, dass ich bisher noch gar nicht durchdrungen habe *Zwar an der Uni Münster studiert* Aber kein Informatik...


    Unübersichtlicher M-m-monster-Post. Hoffentlich liest das überhaupt jemand :)

    Zitat

    Eisschlange wirkt bei Dämonen besser, weil die besonders Kälteempfindlich sind.


    Es gibt mWn gar keinen Eisschaden. Wenn man sich mal die Resistenzen anguckt (Mouse über den Defense-Wert einer Kreatur) kommt dort kein Eis vor. Bei der Beschreibung von Dämon steht da auch nichts davon und laut Beschreibung der Eisschlange macht sie physischen Schaden. Allerdings sind Dämonen schwächer auf Schnee-Terrain.


    Mein Lieblingszauber war der Feuerregen. Ich hatte zwar nur 35 Intellekt am Ende (was glaub ich wenig ist), aber dafür die "Necklace of Fire Storm" (+30% Schaden), den "Prismatic Helmet" (+20% Schaden) sowie den "Dragon Cloak" (+15% Schaden) was sich dann doch ziemlich geläppert hat.
    Da war es meist erfolgreicher die Gegner einfach zu verbrennen anstatt sie zu verwandeln/verfluchen, Dinge herbeizubeschwören oder eigene Truppen zu stärken.

    Zitat

    Geirroed.
    Gib der craeture noch eine ID (willst ja bei einer Nachfrage nicht nach dem Namen gehen, oder - ist ja sprachabhängig), und die Möglichkeit von Sondereigenschaften (Zauber etc.)
    Gib dem Creaturestack eine Initialisierung mit id, Held, Anzahl; und eine Warte-Aktion
    der Arena eine variable Größe


    Kommt alles der Reihe nach, keine Eile ;) Vermutlich kommt auch eher mehr als nur diese Punkte. Was die Initialisierung angeht erstrebe ich, dass sich eines Tages die allgemeinen Kreaturendaten mittels Parser aus Textdateien auslesen lassen. Aus diesen Daten werden dann bei Kampfbeginn die Kreaturenstacks abgeleitet. Im Moment pfusche ich halt noch einige Sachen zurecht bis ich sie mit einer "richtigen" Version ersetzen kann.


    Sondereigenschaften muss ich noch ein bisschen überlegen wie das am sinnvollsten einzubauen ist. Eigentlich will ich die nicht aller hardcoden, aber im Moment fühl ich mich noch nicht dazu in der Lage die besonders flexibel einzubinden. Muss ich erstmal weiter drüber grübeln, aber auch wenn die für eine finale Version unabdingbar sind, ist das jetzt nicht so die höchste Priorität imho.


    Anzahl ist amount. Keine Ahnung, ob das so die akkurateste Vokabel war... :crazy: Der Held hingegen sollte imho nicht Teil der Klasse CreatureStack werden, da ja das Besitzverhältnis wenn dann eher andersherum ist. Oder meinst nur einen Verweis auf den kontrollierenden Helden? Im Moment dachte ich das per side zu regeln. Naja mal schauen.



    ----
    Habe jetzt die sehr grundlegenden Dinge des Kampfes eingebaut. Helden, eine wirkliche Wegfindung (alle haben quasi Teleport/Fliegen) sowie jegliche Animation (sehr niedrige Priorität im Moment) fehlen noch. Das Initiativesystem ist wie bei H5, auch wenn es im Moment keine Leiste gibt, die einem sagt wann wer dran ist. Auch kann man noch nicht wirklich beeinflussen von welchem Nachbarfeld ein Gegner angefriffen wird (wenn mehrere zur Verfügung stehen).
    Außerdem weist das Programm zu Testzwecken beiden Seiten insgesamt fünf Stacks zu, die jeweils zufällig aus einer der Varianten Teufel, Beholder und Golem ausgewählt werden. Teufel sind schnell, Beholder schießen und Golems haben unbegrenzte Gegenwehr. Das Ganze ist sozusagen schon ein kleines Spielchen :]
    Beendet wird mit Esc; gewartet mit W.


    Sourcecode und Binaries zum Ausprobieren gibt es hier.
    Diesmal ohne den Thread mit Code zu überfluten ;)

    Zitat

    Wie hast du denn die Steuerung implementiert, benutzt du schon Maus oder platziert man den Cursor über Tastatur?

    Klick auf leeres Feld -> Bewegen; Klick auf vom Feind besetztes Feld -> Angreifen.
    Tastaturdruck beendet bisher nur alles ;)

    Zitat

    Welche Eigenschaften haben die Stacks schon?


    Siehe structure creature_stack

    Zitat

    Ich fänds mal so nebenbei ziemlich sinnvoll, wenn das Spiel komplett über Tastatur steuerbar wäre (natürliuch optional) und die möglichen Befehle immer eingeblendet würden, ich glaube, das hilft im Entwicklungsprozess ziemlich, weil sich jeder, der's antestet gleich besser zurechtfindet.


    Prinzipiell ja, aber ganz zu Beginn erfordert das etwas mehr Arbeit. Ich würde sagen, das muss erstmal halbwegs sinnvoll laufen und dann kommt das zusammen mit "Code aufräumen/in sinnvolle Teile zerlegen".


    Insgesamt fand ich das sinnvoll das auf English zu machen falls man mal anderssprachliche Coder dazuholen will.




    Zum Code:
    Ja er ist im Moment noch chaotisch, mit viel ungenutzten Sachen. Für ein openSource-Projekt muss da deutlich mehr Kommentirerung rein und das meiste höchst unelegant gelöst ;) Aber ich denke, es ist für die Motivation erstmal wichtig Ergebnisse zu haben. Die einzelnen Komponenten kann man später immer noch gegen schönere austauschen.


    Würde mir daran jetzt auch kein gutes Beispiel für C++ nehmen, bin da selber ein Neuling. Ich glaub' die Struktur Creature_Stack zeigt teilweise ganz gut wie man Dinge gut mit Objektorientierung handhaben kann (halt, dass die Funktionen Teil des Objekts sind und dann automatisch das richtige Ziel haben).
    Hab jetzt erstmal alles (also die Stacks) in vermutlich ausreichend großen Arrays gelagert auch wenns unschön ist und ich langfristig da lieber verlinkte Listen nehmen würde...


    Oh und nicht irritiert sein, dass das grad so explizit auf Windows geschrieben ist (bez. windows.h und WinMain()). Ich hatte am Anfang Probleme mit dem Linker und das in eine Windows-Anwendung umzuwandeln schien dabei zu helfen. Sollte unter Dev-C++ jetzt mit dem Linker wieder ohne klappen, bin aber noch nicht dazu gekommen.


    EDIT: Post zwecks Übersicht geschrumpft, da es neueren Sourcecode jetzt als Download gibt.