Beiträge von Geirroed

    Ich hab' mal gestern mit dem Programmieren eines Kampfscreens angefangen. Primär galt mein Interesse erstmal der Frage inwiefern ich überhaupt noch zum Programmieren in der Lage bin und wie machbar es ist erstmal etwas halbwegs spielbares zu produzieren, was einem dann auch die Motivation erhält.



    Das hab ich in der Zeit geschafft:
    Einheitenstacks (bisher derer zwei) bewegen sich über Spielfeld mit 8*10 Rechtecken. Dies geschieht bislang per Teleport und ohne Reichweiteneinschränkung. Angriffe finden bisher grundsätzlich als Beschuss statt, richten aber wie gewohnt in Abhängigkeit von Stackgröße sowie Angriffs-, Schadens- und Verteidungswerten Schaden an, wodurch wie üblich die Stackgröße verringert wird.
    Die einzelnen Elemente (Stacks, Stackgrößenbeschriftung, Hintergrund und Felder) werden grafisch - wenn auch mit Platzhaltern - dargestellt.
    Viel zu viel ist im Moment hardcoded, das ganz sieht blöd aus und spielt sich arg stupide, aber ich denke innerhalb der nächsten woche sollte ich Bewegungseinschränkungen/Nahkampf (fehlen mir im Moment, flexible Zahl an Stacks und Initiativesystem umgesetzt haben. Das sollte dann schon ausreichen um die Bezeichnung "Spiel" zu verdienen. Was die Anbindung an einen Adventuremodus angeht bin ich recht zuversichtlich.



    Zur verwendeten Technik:
    Ich habe einfach mal C++ angefangen und zur grafischen Darstellung und Benutzereingabe den Simple Direct mediaLayer (SDL) benutzt, was überraschend schnell zu erlernen war. Ich habe zunächst mit minGW (einer Windows-Umgebung für gcc/g++, wodurch die Portierarkeit eigentlich gewährleistet sein sollte) angefangen.
    Später habe ich mir dann Dev-C++ als Entwicklungssuite mit GUI gezogen (welche allerdings auch minGW verwendet -> Portierbarkeit) und empfand das als sehr nützlich (insbesondere das automatische Entwicklerpaktete ziehen und installieren). Weiterempfehlung.


    Insgesamt glaube ich, dass das Projekt auf C++ recht sinnvoll durchziehbar ist. Zugegebenermaßen weiß ich nicht, ob bei so einem hardwaretechnisch eher anspruchslosen Projekt nicht eine höhere Sprache sinnvoller wäre, aber damit wären wir schon auf einer sicheren Seite.



    Zitat

    Außerdem, es macht ganz einfach Spaß sowas zu erschaffen, glaub mir ;)

    Dem kann ich vorerst nur zustimmen :)
    So oder so würde ich mich gern als Coder und/oder Grafiker (nein die Platzhalter-Kritzeleien sind nicht beispielhaft) an diesem Projekt beteiligen.

    Ich hatte vor einer Weile nochmal alle Kampagnen unter TotE gespielt. Außer Findan sollte auch kein Held völlig schrecklich verskillt sein, falls jemand innerhalb einer Kampagne einsteigen will.


    Ist die nötige Datei dafür die "Campaign.sav"? Ich häng sie einfach mal an.


    @Cheat-Variante: Gibt auch Cheats für Erfahrungspunkte... ;)

    1. Schnelligkeit kommt nur bei Einheiten vor und gibt die Anzahl der Felder an, die sich eine Einheit bewegen kann, wenn sie drankommt.


    2. Wissen ist eine Eigenschaft eines Helden und bestimmt im Wesentlichen den Manavorrat (=10x Wissen) und die Regeneration pro Tag (=Wissen). Bestimmt außerdem bei den Akademiehelden die Mächtigkeit der selbstgeschmiedeten Artefakte und beeinflusst den Schaden der Balliste.


    3. Zauberkraft bestimmt wie mächtig oder wie lang andauernd die vom Helden gewirkten Zauber sind.


    EDIT: Diverse Wörter vergessen. Nun ergibt's mehr Sinn...

    @Deadbuthappy/Walddrache: Ich hab die Tage nochmal alle Kampagnen in 3.1 TotE gespielt und Zehir dabei die Arkane Allwissenheit verpasst. Diese lief definitv über


    Erleuchtung->Mana-Affinität->Belohnung des Zauberers->Mentor
    Zauberei->Arkane Ausbildung->Gegenzauber-Arkane Vortrefflichkeit
    Kriegsmaschinen->Katapult->Fernsteuerung->Erschütterungen


    Wie alle anderen ultimativen Fertigkeiten braucht es seit TotE nur drei Fertigkeiten auf Maximum und Katapult ist wieder/immernoch dabei.
    Die Wahl der Kriegsmascinen Befähigungen ist imho aber wirklich nicht sehr glücklich - ich will nur äußert selten Erdbeben zaubern, wenn ich bereits Katapult und Kriegsmaschinen auf Meisterhaft hab (wie relevant Belagerungen auf der jeweiligen Karte sind, ist auch so eine Frage).
    Fernsteuerung hingegen ist ziemlich gut und kann gegnerischen Helden mit Kriegsmaschinen richtig wehtun (wenn man z.B. in der Diebesgilde sieht, dass der Gegner Vittorio oder Deleb hat :) ) In der Praxis bedeutet das Ultimate aber einfach, dass man einfach für jede Situation den richtigen Zauber hat. Und Zauber (insbesondere Dunkelmagie) lassen sich in der richtigen Situation aufs Böseste abusen.
    Zufälliges Beispiel auf Youtube


    @Nützlichkeit von Glück der Natur: Anders als zum Beispiel Glück der Natur, braucht es aber immerhin keine Skills, die im Effekt des Ultimates inbegriffen sind. So gut 225% Schaden klingen - ohne Ulti macht ein Elf mit Glück 5 (die zwei fehlenden kriegt man eigentlich meistens noch hin - hängt mal wieder von der Karte ab) aber immerhin 162,5% (wenn auch weniger verlässlich aufgeteilten Portionen). Das ist zwar immer noch gut, aber etliche andere Ultis (Zwerge, Zauberer, Barbaren, Dämonen und - auf Maps mit vielen Städten - Dungeon) finde ich da besser. Allerdings idR mit unschöneren Wegen dorthin.

    Hier ein Thread mit den nötigen Links


    Erster Link um die alten Kampagnen unter TotE zu spielen.
    Zweiter Link für die Einzelszenarios auf Englisch.
    Dritter Link für die Einzelszenarios auf Deutsch.


    Einzelszenarios in den "Maps/" Ordner, Kampagnen in den "UserMODs/"Ordner (Mindestens die Campaign Data und eine Sprachversion des Texts). Gegebenenfalls entpacken.
    Ansonsten locker bleiben - DVD wechseln wäre doch auch kein Beinbruch gewesen ;)



    Michaelmann: DVD kaputt -> Reklamieren. Kann immer mal passieren, dass es einen Fehler bei der Herstellung gab.

    Wie schon im anderen Thread und hier von L3v3l0rd gesagt:


    Du musst nicht durch das Portal durch. Du musst dich danebenstellen. Dann auf das Portal klicken.
    Bisher habe ich noch keine Rückmeldung dazu gelesen, ob dies geklappt hat (sry falls ich sie nur einfach nicht erkannt habe), warum ich darauf nocheinmal herumreite.


    Wenn dies nicht klappt, dann sehe ich leider auch nur noch die althergebrachten Möglichkeiten. Das Skript scheint generell zu funktionieren (Verfluchen etc. klappt ja), was sonst die gängige Fehlerquelle gewesen wäre, und es bleibt nur Reklamation des Spiels, @win() per Konsole, oder die Anforderung von Support vom Hersteller/Vertreiber.
    Ich persönlich würde es dann mit @win() versuchen - das Skript führt schlieÃlich auch keine andere Fuktion aus ;)

    Zitat

    das ist doch das portal durch das der held auch geflohen ist - wenn man vor safir steht das rechte (kurz nach der letzten garnison), oder bin ich völlig falsch?


    Du bist genau richtig.


    Zitat

    bei mir verändert sich der coursor gar nicht


    Auch das war bei mir so. Alerdings hat sich der Cursor von einem Pferdchen in ein Verbotszeichen verwandelt, sobald mit ihm ich über das Portal fuhr, falls du das meinst.


    Du musst allerdings auch nicht wirklich durch das Portal gehen, da die Mission mit dem "Betreten des Portals" endet und der Teil hinter dem Portal in der nächsten Mission abgehandelt wird (deine ArmeegröÃe ist also auch, bis auf die 20 Knochis, egal). Ein Pferdchen als Cursor wäre also auch nicht notwendig.

    Was macht man mit den Skripten? Eigentlich alles was in einer Map vorkommen soll, aber so nicht von der Spielmechanik vorgesehen ist. Ich gebe einfach mal ein paar Beispiele, die aber längst nicht erschöpfend sind. Vermutlich könnte man mit dem Skript auch eine Map bauen, auf der man Schach spielen kann.


    ---------
    Die KI soll eine bestimmte Region nicht betreten/nicht fliehen/einem bestimmten Helden (dem "Endboss" sozusagen) keine neuen Kreaturen geben oder abnehmen. (Im Szenario "Der Diplomat" ist das glaube ich)


    Ein Held soll überlaufen, sobald man ihn besiegt hat, oder eine Stadt befreit oder was auch immer.


    Texte, die zu bestimmten Ereignissen (Ort betreten, Objekt erobern, Held besiegen, etc.) erscheinen und die Handlung weiter erzählen.


    Ein Spieler soll extra Kreaturen oder Ressourcen kriegen, wenn er besonders Ruhmreiche Taten vollbracht hat (bestimmme Monster besiegt, den Gral gefunden, einen Gegner besiegt usw.)? Alles per Skript machbar.


    Besondere Siegbedingung: Der Spieler muss in der Woche der Raupe etwas verschenken und einen traditionellen Tanz aufführen. Ok das würde wohl etwas kniffliger aber, wenn man den Tanz als Heldenbewegung auf der Karte interpretiert sicher machbar.


    Ein Gegner soll mehrere Wellen von Kämpfern haben. Die zweite Welle wird aufgestellt, sobald die erste besiegt ist. (In der Nekorkampagne macht das zum Beispiel ein Gegner)


    Bestimmte Kämpfe sollen ausgelöst werden unabhängig von den Heldenpositionen (der Endkampf aus dem Hauptspiel z.B.)


    Der Spieler darf erst weiter, wenn er ein Rätsel gelöst hat. (Im Szenario "Der Drachenritter" oder so ähnlich - da muss man mit seiner Armee bestimmte Bedingungen erfüllen)


    Objekte sollen erst benutzbar werden, wenn eine Vorbedingung erfüllt ist. (Zum Beispiel im Szenario "Eine Träne für Ossir" - da kann man die Wegweiser nur in einer bestimmten Reihenfolge besuchen)
    -------------


    Allgemein gesagt: Skripts kommen immer dann zum tragen, wenn man eine Map erstellen will, sich schöne Besonderheiten ausgedacht hat (Handlung, Siegbedingungen, Sekundärziele etc.) und man feststellt, dass diese mit den herkömmlichen Objekten und Karteneigenschaften nicht realisierbar ist. Machbar ist mit ihnen ziemlich viel.


    sg Geirröd

    Zitat

    Also patchte ich brav auf die letzte Version und stellte mich Sir Godric


    Das klingt danach als ob die Mission gespielt und gespeichert hast; danach gepatched und dann wieder geladen. Dies geht nicht.


    Lösung: Mission nocheinmal von vorne starten oder das Spiel auf die alte Version bringen (neuinstallieren und ggf. patchen). Mission zuende spielen, patchen und dann vom Menü aus auf die nächste Mission zugreifen.

    Ich habe gerade an einem Skript geschrieben, das alle Objekte einer Karte in Abhängigkeit von ihrem Namen ersetzt. Die Idee war es Platzhalter auf die Karte zu setzen, denen Namen wie "RandomPl1_1", "RandomPl1_2", "RandomPl1_3" zu geben und dann in Abhängigkeit von den jeweilgen Fraktionen der Spieler zu ersetzen.
    Das Ersetzen klappt soweit auch ganz gut und man kann auch das selbe Skript für eine beliebige Anzahl solcher Platzhalter verwenden, aber dann ist mir aufgefallen, dass es scheinbar keine einfache Möglichkeit gibt die Fraktion eines Spielers herauszufinden.


    Weià jemand ob das vielleicht mit "GetGameVar()" geht? Und wenn ja wie heiÃt die Variable? Bzw. wie kann ich die Property "Race" von "Player[i]" anwählen? Wobei "Player[i]" ja auch nur Property von der Map ist und wie die wieder heiÃt, weià ich zusätzlich nicht...


    Wenn keiner eine bessere Lösung weiÃ, dann könnte man für Maps mit automatisch generierten Helden (was ja auf die meisten Maps mit auswählbarer Fraktion zutreffen sollte) auch mit Hilfe der Startarmee Rückschlüsse auf die Spielerfraktion ziehen, aber das wäre irgendwie sehr "unschön". Ich kann das irgendwie gar nicht glauben, dass das nicht auch einfacher geht. Vielleicht weià ja wer was... :)


    sg Geirröd

    Zitat

    Was ich also brauche:
    - Gegner besiegen (anstelle von "Kill'em all")
    - In 7 Tagen ne Stadt erobern (bleibt so wies ist)
    - Hauptheld darf nicht sterben
    - Sekundär: Ashas Träne in der Stadt bauen


    Die Ziele der Map sind Properties der Map. Um diese also zu erstellen oder zu verändern musst du zunächst den Map-Propertie-Tree anzeigen lassen. Dies geht unter View (glaub ich - hab grad den Editor nicht parat), mit einem der Icons oben rechts oder per Strg + M.
    Der Tree erscheint dann links von dem Fenster wo die Karte dargestellt wird. Hier suchst du dir dann die Zeile "Objectives" heraus und öffnest diese. Hier hast du dann "Primary" und "Secondary" zur Auswahl und innerhalb dieser Kategorien wiederrum jeweils "Common" und "PlayerSpecific", wo sich wieder eine Liste an Zielen ("Objectives") und die SiebenTageOhneStadtTot-Bedingung findet.


    @Gegner besiegen: Ich nehme an du willst hier einfach nur einen anderen Namen für das Ziel angezeigt haben? Dafür musst du in die primary öffnen und dann "Common" und dann wieder "Objectives". Hier sollte dann schon bereits ein Ziel vorhanden sein (mit der schönen Bezeichnung [0]). Dieses öffnest du wieder und findest dort "CaptionFileRef". Dieses wählst du an und klickst auf die Schaltfläche "new", die dann links davon erscheinen sollte. Du wirst aufgefordert einen Namen für die neue Zielbeschreibung einzugeben - hier nimmst du irgendetwas, was du später wiederfindest. Nun öffnet sich schlieÃlich ein Fenster mit einem Texteditor, in dem du nun den Namen des Ziels ("Besiege alle Gegner" oder was auch immer) eingibst. Um die Beschreibung des Ziels zu ändern gehst du genauso für "DescriptionFileRef" statt "CaptionFileRef" vor.


    @Sieben Tage ein Stadt:
    Wie bereits von dir erwähnt musst du dort nichts machen. Erwähnenswert ist hier noch, dass hierfür die Property "DieInWeekWithoutTowns" verantwortlich ist. Standard ist ja aber wie gesagt aber true (also an).


    @Hauptheld darf nicht sterben:
    Hierzu gehst du diesmal in "Objectives"->"Primary"->"PlayerSpecific"->"[0]"->"Objectives". (Spieler1 ist [0], Spieler2 ist [1] etc.) Hier dann Rechtsklick und auf "insert" (oder "add" ?), wodurch ein neues Ziel erstellt wird. Dieses dann öffnen. Hier dann wieder Name und Berschreibung des Ziels erstellen (wie oben) und bei "Kind" "OBJECTIVE_KIND_HERO_MUST_SURVIVE" auswählen. Damit das Programm noch weià welcher Held denn überleben soll, nun noch unter "Parameters"->"[0]" den Skriptnamen des gewünschten Helden eingeben.
    Diesen legst du fest indem du den Helden (bzw. Entrypoint müsste ja auch gehen - noch nicht ausprobiert) anwählst. Dann erscheint der Properties-Tree des Helden dort wo sonst der der Map war und du kannst unter "Name" den Skriptnamen festlegen.


    @Graalsgebäude:
    Da dies ja sekundär werden soll diesmal (ansonsten aber wie oben) ein neues Ziel unter "Secondary" statt "Primary". Caption und Description nicht vergessen (wie oben halt) und diesmal bei "Kind" "OBJECTIVE_KIND_BUILD_GRAAL" auswählen.



    So müsste das zumindest funktionieren. Ich beschäftige mich auch erst mit dem Editor, seit ich Silvere den Ort der Anleitung gezeigt habe. Also ist alles ohne Gewähr. ;)



    Man kann ansonsten ohne Skripten auch noch eine andere Menge alleine mit den Objectives machen: Belohnung bzw. Kosten, freilegen der Karte am
    Zielobjekt, Abhängigkeit von einem Ziel von anderen Zielen etc... Insgesamt sei dir entsprechend auch die Editoranleitung ans Herz gelegt, wo sich das Ganze auch noch einmal mit Bildern wiederfindet. Du findest diese in Installationsverzeichnis\EditorDocumentation\EditorTheory.pdf. Der Teil mit den Zielen geht ab Seite 24 los.


    sg Geirröd

    Die alten Kampagnen ändern sich nicht mit der Installation der Addons. Ich glaub bei Hof war auch ein Patch gleich dabei, aber die kann man sich ja auch gesondert ziehen.


    Wenn man jedoch die alten Kampagnen mit TotE spielt (wie im obigen Link beschrieben - bevorzugt in der einfachen Variante von evilp), kommen die Elemente aus TotE zum tragen. Im Wesentlichen sind das wohl die alternativen Upgrades und Zufallskreaturen, die orkischen oder zwergischen Ursprungs sein können. Die neuen Zauber habe ich bislang nicht gekriegt, könnte aber auch Zufalll sein, da man mit Isabell (und weiter bin ich noch nicht wieder) nur recht wenige Magieschulen findet.

    Am besten indem du sie dir hier herunterlädst (nebenbei gibts dort auch die Standardkarten der anderen Teile für TotE). Nicht dadurch irritieren lassen, dass für TotE "no dialog scenes" dabei steht. Die sind schon im data.pak von TotE dabei und die Maps funktionieren dementsprechend trotzdem mit Dialogszenen.


    Novarius: Ich hab bisher die KI auch nur dann fliehen sehen, wenn der Rest des Kampfes eher triviales Abschlachten vollkommen unterlegener Truppen (zu Ungunsten der KI) war. Wenn sie denn überhaupt flieht. Was sie zum Beispiel nicht tut, wenn ein ungelevelter Held ohne nennenswerte Armee und ohne Artefakte angegriffen wird - dann richtet sie lieber noch ein wenig Schaden an. Das was ich von der KI bisher in dieser Hinsicht gesehen habe, finde ich insgesamt recht gut gelungen.


    Trotzdem: ein ein geflohener Gegner - ob angemessen oder nicht - ist einfach unbefriedigend. Wenn ich Heroes spiele, um am Ende eine epische Schlacht bis zum letzten Mann zu schlagen, dann ist ein KI-Verhalten mit Flucht, egal wann, nicht im Sinne dessen, warum man eigentlich spielt. Insofern kann ich schon verstehen, warum viele eben dies nicht mögen.


    sg Geirröd - edit: Tippfehler

    Anstatt in jede Map per Editor die Fesseln des letzten Mannes zu platzieren, kann man auch in jeder Map per Skript allen KI-Spielern verbieten zu fliehen.
    Ist meiner Meiung nach eleganter, da man so den Inventarslot freibehält (und man sich nebenbei vorgaukeln kann, die KI würde "freien Willens" bis zum bitteren Ende kämpfen xD).



    Eine Kurze Anleitung:


    1. Karteneditor in "Installionsverzeichnis\bin\" öffnen.


    2. Karte in den Editor laden.


    3. Menü View->Map Properties-> Script->Edit Script


    4. Ganz zu Beginn, vor alles Andere, diese Zeilen einfügen:


    local i = 8;
    while i do
    DenyAIHeroesFlee(i,1);
    i = i - 1
    end


    5. Speichern mittels Save As
    (Ãnderungen im Skript scheinen nicht als Ãnderungen zu zählen und einfaches Speichern ist deshalb nicht möglich. Vielleicht wird das Skript auch irgendwo gesondert gespeichert. Habs noch nicht so genau ergründet.)


    6. KI-Helden sollten nun nicht mehr fliehen (solange nicht spätere Skriptzeilen das überschreiben, vesteht sich). Ich habs noch nicht ausprobiert, ob dies auch für Spieler-Helden im Autokampf gilt, andererseits will man bei denen genausowenig ein unoptimales Fluchtverhalten (zumal man im ja Zweifelsfall manuell fliehen kann).



    Ich hoffe das ist verständlich und von Nutzen :)
    sg Geirröd

    Es gibt eine Referenzliste der Skriptbefehle/-funktionen auf Englisch im Spieleordner unter "...\Editor Documentation\HOMM5_A2_Script_Functions.pdf". Wenn das generelle Verständnis für "Computersprachen" vorhanden ist, sollte man damit gut was basteln können.

    Allerdings funktionieren die Elementarketten bei den Zaubern des Helden auch ohne Altar. Welches Element gerade ein Feuerball hat muss man wohl auch nicht extra mit Hilfe eines Altars ermitteln ;)


    Edit: Ich habe da oben von den Zaubersprüchen des Helden gesprochen. Wie ist das eigentlich mit den destruktiven Zaubern von Einheiten? Hatte noch nie einen Hexenmeister mit Druiden oder Erzmagiern.

    Allerdings kann man Kreaturen mit bestehenden Karawanen austauschen. Wenn man also bereits gekaufte Kreaturen von einer Stadt zur anderen schicken will, kann man eine Karawane anfordern und dann die bereits gekauften Kreaturen dieser Karawane mitgeben.