28. Mär 2024, 14:49 Hallo Gast.
Willkommen Gast. Bitte einloggen oder registrieren. Haben Sie Ihre Aktivierungs E-Mail übersehen?

Einloggen mit Benutzername, Passwort und Sitzungslänge. Hierbei werden gemäß Datenschutzerklärung Benutzername und Passwort verschlüsselt für die gewählte Dauer in einem Cookie abgelegt.


Select Boards:
 
Language:
 


Autor Thema: Wiederholte Anpassung von Lebenspunkten  (Gelesen 3194 mal)

Melkor Bauglir

  • Held von Helms Klamm
  • ***
  • Beiträge: 1.203
Wiederholte Anpassung von Lebenspunkten
« am: 11. Dez 2016, 21:16 »
Hallo Modding Union,
da es ja mit meinen Submods, die ich so vor mich hin programmiere, offenbar nicht so gut aussieht, habe ich mir überlegt, einige der vielleicht komplexeren Systeme hier etwas zu verläutern. Vermutlich werden sich praktisch alle, die hier noch aktiv modden, diese Systeme auch selbst überlegen können, weil ich nun leider nicht der erfahrenste Modder bin, aber möglicherweise tritt der "Ei-des-Kolumbus"-Effekt ja doch ein und es hilft einigen Leuten vielleicht beim Schreiben ihrer Mods/Submods.



Die Idee:
Angenommen, wir wollen die Lebenspunkte einer Einheit nach ihrer Rekrutierung ändern. Bis zu einem gewissen Grad ist dies über Upgrades problemlos möglich, indem man verschiedene Modifier vergibt, aber evtl. möchte man ein "nach oben offenes" System, d.h. die Veränderung der Lebenspunkte soll in beide Richtungen beschränkt sein.
Wo ich dieses System verwende, ist meine Kastellanüberarbeitung, wo diese, je häufiger "Schleichende Verderbnis" eingesetzt wurde, umso mehr Lebenspunkte erhalten.
Unsere Ziele sind also:
 - beliebig viele Modifikationen der HP
 - Möglichkeit, hierbei eine Form von Schranke einzubauen (!)
Der 2. Punkt ist der nicht-triviale, ansonsten lässt sich der Effekt natürlich mit wiederholtem Auftragen von Modifiern der Form
ModifierList BonuslebenKastellanModifier
        Category = WEAPON
        Modifier = HEALTH 100
        Duration = 300 ;endliche Dauer (!!!)
End
lösen.

Das System:
Wir öffnen zunächst mit FinalBig die INI einer Einheit, die wir verändern wollen (hier werden es stets Mordors Kastellane sein). Wir fügen nun insgesamt folgende Einträge hinzu:
Behavior    = MaxHealthUpgrade ModuleTag_KastellanBonusleben
        TriggeredBy           = Upgrade_RoyalguardMount
        AddMaxHealth          = 100
        ChangeType            = SAME_CURRENTHEALTH
        Permanent             = Yes
    End

    Behavior = ObjectCreationUpgrade MakeTheFreeTrebq2e
        TriggeredBy  = Upgrade_RoyalguardMount
        Delay   = 9.0 ;möglichst klein, aber ungleich null
        RemoveUpgrade = Upgrade_RoyalguardMount
    End
Wann immer unsere Einheit also das Upgrade Upgrade_RoyalguardMount erhält, erhöhen sich ihre max. HP um 100. Ferner wird dieses Upgrade sofort wieder entfernt, um den Vorgang wiederholen zu können. Grundsätzlich brauchen wir jetzt also nur noch eine Modifierquelle, die dieses Upgrade immer wieder auf die Einheit draufschmeißt, dann können wir immerhin schon die max. HP immer weiter erhöhen.

Traditionell wird man dies über eine wiederholt feuernde Weapon, die nur unser gewünschtes Object trifft, lösen, beim Modifier ist nur wichtig, dass er endliche Dauer hat (vorzugsweise kurze, endliche Dauer), um neu aufgetragen zu werden:
Weapon BonuslebenKastellanWeapon2
 RadiusDamageAffects  = ALLIES SELF
    AttackRange       = 99999999
    DelayBetweenShots = 85000
    PreAttackType     = PER_SHOT

    AttributeModifierNugget
         AttributeModifier    = BonuslebenKastellanUpgrade
         Radius               = 999999999
         SpecialObjectFilter  = NONE +MordorKastellan
    End
End

ModifierList BonuslebenKastellanUpgrade
        Category = SPELL
        Upgrade  = Upgrade_RoyalguardMount Delay: 3
        Duration = 3
End

So. Der 1. Punkt ist damit umgesetzt, wie erwähnt zu kompliziert, denn es ginge viel einfacher (s.o.). Wie können wir diesen Lebensgewinn nun stoppen? In der MS wird dies erreicht, indem Kastellane nach einiger Zeit ein Upgrade erhalten, durch das ein neues Module aktiviert wird (wieder in der INI der Kastellane):
Behavior    = MaxHealthUpgrade ModuleTag_KastellanBonuslebenEnde
        TriggeredBy           = Upgrade_RoyalguardMount Upgrade_HasDragonNestFireDrake
        RequiresAllTriggers   = Yes
        AddMaxHealth          = -100
        ChangeType            = SAME_CURRENTHEALTH
        Permanent             = Yes
    End
Besitzt das Object beide Upgrades, gleichen sich die Änderungen also wieder aus, es passiert als nichts beobachtbares.
Wir haben also jetzt eine Möglichkeit, die Lebenspunkte einer Einheit zu erhöhen und diesen Gewinn irgendwann abzubrechen. Wichtig ist, dass das System natürlich auch in die andere Richtung funktioniert: Wenn man wiederholt die max. HP senken möchte, benötigt man lediglich ein MaxHealthUpgrade, das negative HP hinzufügt. Wichtig: Hierfür ist eine Abbruchbedingung unverzichtbar!!! Objecte, die formal unter 0 max. HP haben, bringen das Spiel zum Absturz!

Es hat sich ferner bei mir gezeigt, dass die ständigen auf das Object wirkenden Weapons ihr natürliches Heilverhalten abbrechen (außer man gibt der Einheit auch Heilung im Kampf). Da aufgrund der evtl. massiv variierenden max. HP die Heilkraft mitskalieren muss, kann eine prozentuale Heilung durchaus in Betracht gezogen werden.
Als letztes noch ein Praxistipp: Das Spiel bekommt Probleme, wenn man die Modifier zu eng taktet (d.h. innerhalb weniger Sekunden mehrmals das Upgrade hinzufügt, welches die max. HP verändert). Die Triggerbedigungen müssen also chronologisch weit genug auseinander liegen (bei mir benötigen Kastellane 2 Minuten, bis die Lebenszuwachsblockade greift und sie ihre max. HP somit erreichen). Dies mag als Richtwert dienen.
Mit diesen Änderungen läuft das System dann aber in der Praxis ohne Probleme, ich habe mit diesen Einträgen bestenfalls Abweichungen von 100 HP (also einer unterschlagenen / doppelt hinzugefügten Lebensvergabe) festgestellt und das in längeren Spielen, wo "Schleichende Verderbnis" bestimmt 20-mal gewirkt wurde.



Damit endet mein kleiner Beitrag zum SuM-Modding für heute erst einmal; ich hoffe, es hat einigen geholfen und wenn nicht, schiebt es auf die Hybris des Größten der Ainur, das dieses Tutorial existiert! ;)
Für Fragen oder Kommentare bin ich durchaus offen und wenn mir jemand verrät, dass das System völliger Blödsinn ist, weil es viel einfacher ginge: Auch gut!

Als letztes noch ein Dank an Prinz von Dol Amroth, von dem ich die Grundzüge des Herumspielens mit dem MaxHealthUpgrade gelernt habe, und auf dessen Basis das System funktioniert! :)


Gruß
Melkor Bauglir