Podrzucam gotowca dodającego minimalne obrażenia do Gothica 1. Oznacza to, że od teraz nawet postać z 5 punktami siły może pokonać trolla - bo każdy cios będzie zadawał pewne minimalne obrażenia.
To jest właściwie
zmodyfikowany skrypt @bogu9821 z kilkoma usprawnieniami:
- wyłączeniem dla nieumarłego szamana (by nie można go było pokonać bez Uriziela);
- wyłączeniem dla golemów, by lodowego pokonywać ogniem, ognistego lodem a nie np. łukiem, mieczem czy lagą;
- wyłączenia dla łuków i kusz by nie powalać wrogów na dystans z jakiegoś kamienia (czyli bez ryzyka) z najsłabszego łuku bo to rozwalałoby balans gry.
Można to wkleić nawet do pliku "B_InExtremo.d" w _work\DATA\scripts\Content\Story\B
UWAGA: Trzeba mieć wgranego IKARUS-a. Wbrew pozorom instalacja IKARUS-a jest prosta nawet dla całkowitego n00ba i nie trzeba się tego bać nawet jak się zaczyna przygodę z moddingiem, bo dzięki jego wgraniu można potem wklejać pewne gotowe skrypty jak choćby ten.
Jakby ktoś potrzebował to tutaj ma krok po kroku jak zainstalować IKARUS-a
https://themodders.org/index.php?topic=43232.0Wstawianie gotowcaWklejamy poniższy kod przykładowo w tym pliku "B_InExtremo.d" w _work\DATA\scripts\Content\Story\B:
//#############################################################################################
//////////Minimal Damage
//////////
//////////Author: Bogu9821, https://themodders.org/index.php?topic=30154.0 (edited by Kirgo2)
///////////////////////////////////////////////////////////////////////////////////////////////
const int MinimalDMG = 5;
func int DMG_OnDmg(var int victimPtr, var int attackerPtr, var int dmg) {
var c_npc victimNpc; victimNpc = _^(victimPtr);
if(!victimPtr) { return dmg; };
if(victimPtr && !attackerPtr) { return dmg; };
// Pobiera instancję atakującego
var c_npc attackerNpc; attackerNpc = _^(attackerPtr);
// Sprawdza, czy obrażenia są mniejsze niż minimum
if(dmg < MinimalDMG)
&& (Npc_HasReadiedRangedWeapon(attackerNpc) == FALSE) // Sprawdza, czy atakujący nie używa broni dystansowej (łuk/kusza)
&& (Hlp_GetInstanceID (victimNpc) != ORC_Priest_5) //sprawdza czy "ofiara" nie jest piątym szamanem czy golemami
&& (Hlp_GetInstanceID (victimNpc) != StoneGolem)
&& (Hlp_GetInstanceID (victimNpc) != StoneGolemXardas)
&& (Hlp_GetInstanceID (victimNpc) != SummonedByPC_StoneGolem)
&& (Hlp_GetInstanceID (victimNpc) != FireGolem)
&& (Hlp_GetInstanceID (victimNpc) != FireGolemXardas)
&& (Hlp_GetInstanceID (victimNpc) != IceGolem)
&& (Hlp_GetInstanceID (victimNpc) != IceGolemXardas)
&& (Hlp_GetInstanceID (victimNpc) != BridgeGolem)
{
dmg = MinimalDMG;
};
return dmg;
};
func void _DMG_OnDmg() {
EAX = DMG_OnDmg(ECX, MEM_ReadInt(MEM_ReadInt(ESP+548)+4), EAX);
};
func void InitDamage() {
const int dmg = 0;
if (dmg) { return; };
HookEngineF(7567329, 6, _DMG_OnDmg);
dmg = 1;
};
Potem w pliku "Startup.d" trzeba wstawić "InitDamage();"
(
Pamiętaj: najpierw instalacja IKARUS-a a potem ten skrypt - bo to w ramach instalacji IKARUS-a tworzy się funkcję "INIT_GLOBAL" w Startup.d)
Po wstawieniu będzie to wyglądać tak:
FUNC VOID INIT_GLOBAL()
{
// Init Ikarus
MEM_InitAll ();
// Init LeGo
LeGo_Init(LeGo_All);
InitDamage();
};
Potem standardowo odpalamy przez Gothic Starter z opcją "Reparse Scripts" (usuwając przedtem "OU.BIN" i "OU.CSL" z folderu "CUTSCENE" Z _work\DATA\scripts\Content\CUTSCENE).
Brawo. Od teraz masz w grze mechanikę minimalnych obrażeń
PS: Kod jest robiony z wykorzystaniem AI - ale to chyba nie ważne czy kot jest biały czy czarny - ważne by łapał myszy. To ma po prostu oszczędzić czas dla każdego kto w przyszłości będzie chciał dodać tę mechanikę do swojego moda a niekoniecznie ogarnia jeszcze bardziej zaawansowane rzeczy.
Creditsy dla @bogu9821.