-
Verbessertes Irrlicht
Hallo Gothic-Freunde,
ich finde es spannend das IrrlichtAmulett zu vebessern.
Ich möchte den Suchradius verändern, die Geschwindigkeit erhöhen und das Amulett zusätzlich anziehen können.
Hat jemand von euch schonmal das Irrlicht dahingehend verbessert?
Oder einen weiteren guten Einfall dieses Amulett brauchbarer zu gestalten ?
Ich bin auf eure Antworten gespannt.
Gruß ErzSchmuggler
-
Das Amulett zusätzlich anziehen zu können, finde ich doof. Ab dem Midgame ist es doch eh egal, ob man jetzt 5-15 Schutz mehr hat oder nicht. Am Anfang als Hanswurst ist es doch zumindest eine kleine interessante Wahl, ob man gerne Unterstützung bei der Schatzsuche hätte oder etwas mehr Schutz vor DEM EINEN entscheidenden Wolfsbiss...
Ich gebe aber zu, dass ich das Amulett aus einem Grund nie benutzt habe. LP sind viel zu wertvoll, um sie dafür zu verschwenden. Das Irrlicht gegen Gold zu trainieren fände ich viel interessanter. Wäre vielleicht was für einen Ninja-Patch.
-
Die neueste Returning AB Version benutzt sogar 2 verschiedene Irrlichter. Das zweite Irrlicht, über F5 aufrufbar, hat verschiedene Talente, z. B. Gräser einsammeln im Radius, schneller einsammeln im Radius, usw. Du könntest Haart auf RPGRussia anschreiben, er kennt sich mit dem Irrlicht sehr gut aus und kann auch etwas Englisch
-
Fände das auch SUPER vor allem als Ninja-Patch :P
Das Irrlicht ist eine coole Sache nur wird es so selten verwendet. Bei vielen Mods sind deswegen die Lernpunkte auf 1 heruntergeschraubt. Und 1 Lernpunkt für Pflanzen sammeln ist echt ok. Gold wäre natürlich auch ok bzw. eigentlich besser, aber ob das via Ninja-Patch geht? (Kenne mich da nicht aus)
Das man es zusätzlich anziehen kann fände ich auch cool, das macht es noch viel wertvoller (vor allem, wenn man an die Sets denkt, die man sonst nicht komplett hat)
Was mich ebenfalls am Irrlicht stört ist, dass man es während dem Kampf immer wieder anvisiert. Ich meine es ist schon lustig, wie das Irrlicht mitkämpft und die Gegner immer wieder "anstupst" aber weil man es anvisiert, bringt es einem im Kampf eher Nachteile. Wenn man es mit gezogener Waffe nicht mehr anvisieren könnte, wäre dem schon geholfen.
Außerdem fände ich es cool, wenn man ihm "Licht" beibringen könnte, es also (optional, wenn man es darauf anspricht) den Weg leuchtet. Weil es aber dabei immer so hinterherhinken würde, könnte es ja auch wie der Zauber über dem Kopf tanzen oder so, muss aber nicht. Dafür, dass es hinterherhinkend eh schon schlechter wäre als die normale Licht-Rune verliert diese auch nicht komplett an Bedeutung und man könnte den Radius auch etwas erhöhen, wenn's nötig ist.
Ich fände es auch gut, dass es andersfarbend zu leuchten beginnt SOBALD es sich auf den Weg zu etwas macht, das es sieht, sodass man nicht immer erst warten muss und nicht mehr fälschlicherweise reagiert. Es könnte auch rot leuchten, sobald es Gegner spürt (natürlich mit erhöhtem Radius). Und blau wenn sich auf den Weg begibt.
Es könnte auch Heilung lernen, dafür müsste man es außerhalb eines Kampfes ansprechen und sagen "Heile mich" (dafür gibt's den Soundfile ja schon glaube ich) und dann schwirrt es um einen herum und heilt langsam). Aber vielleicht wäre das zu imba :P
Mehr fällt mir gerade nicht ein ^^
Geändert von easecon (10.11.2018 um 10:42 Uhr)
-
Spiel halt einfach mal Returning 2.0 AB und teste das. Ist mit F5 aktivierbar. Es lässt sich auch nicht ins target nehmen im Kampf. Zudem kannst ihm alles beibringen, Waffen sammeln, Sammelradius und Geschwindigkeit erhöhen, Blablabla sammeln.....
-
Zum Thema Ninja hier kurz ein Stimmungsdämpfer:
Das Irrlicht damit zu ändern ist nicht sinnvoll/möglich/... Wie jeder andere NPC im Spiel ist auch das Irrlicht ein Storyelement und damit stark von Mod zu Mod (und zum Original) unterschiedlich. Auch wenn es möglich wäre, die Irrlicht-Instanz verlässlich ausfindig zu machen (was schon sehr knifflig sein sollte, denn Mods mögen das Irrlicht umbenennen, mehrere Irrlichter-Arten haben, usw.), kann sich dessen Mechanik sehr unterscheiden. In vielen Mods mag es vielleicht auch gar kein Irrlicht geben. Damit würde der Patch wieder Mod-spezifisch werden, was eben nicht der Idee von Ninja entspricht. Patches sind eher für Story-unabhängige Features gedacht.
Geändert von mud-freak (15.01.2021 um 10:34 Uhr)
-
NPC_PerceiveAll range - NPC_CreateVobList, Wld_DetectItem, Wisp
Hello ErzSchmuggler, easecon,
I loved your ideas so much that I just had to work on this :P
Increase search radius:
Standard function for object detection does not allow you to specify range:
NPC_PerceiveAll (self);
New function (code below) will allow you to specify range:
NPC_CreateVobList (self, 3000);
Increase speed:
You can use this function below to increase speed of any NPC in the game:
NPC_SetTimeScale (npc, f);
https://forum.worldofplayers.de/foru...1#post25962976
Disable targeting in fight mode:
This function will allow you to change _zCVob_type - so you can tell Gothic that NPC is actually not NPC, and therefore Gothic will not auto-aim at it:
NPC_Change_zCVob_type (self, VOB_TYPE_SOUND); (code below)
Edit 2018-11-15: definitely do not change NPC to VOB_TYPE_LIGHT - if Wisp died and its body was removed Gothic crashed VOB_TYPE_SOUND was so far working fine.
Light:
In my case I didn't have G2A model available in G1, so I just used
Wld_StopEffect_Ext ("FX_WISPLIGHT", 0, 0, 1); //thanks mud-freak, super-cool function!
Wld_PlayEffect ("FX_WISPLIGHT", self, self, 0, 0, 0, FALSE);
on NPC without any visuals to put a light effect on it
Changing color when it detects item:
Since I am using Wld_PlayEffect function I can simply change color as I wish
Healing:
Instead of talking, when you interact with Wisp, it will heal you - you can achieve that by:
NPC_PercEnable (self, PERC_ASSESSTALK, B_Wisp_Release);
Wisp in action:
[Video]
Should anyone be interested in the code:
Code:
/*
Tested with G1, Ikarus 1.2, Lego 2.5.0
Functions should be compatible with G2A - but I never tested it :)
*/
/*
Same functionality as NPC_PerceiveAll, however allows you to specify range.
It collects all objects within range of self to self.vobList_array.
NPC_CreateVobList (self, range);
*/
//006B7110 .text Debug data ?CreateVobList@oCNpc@@QAEXM@Z
const int oCNpc__CreateVobList_G1 = 7041296;
//0x0075DA40 public: void __thiscall oCNpc::CreateVobList(float)
const int oCNpc__CreateVobList_G2 = 7723584;
FUNC VOID NPC_CreateVobList (var C_NPC slf, var int range)
{
CALL_IntParam (mkf (range));
CALL__thiscall (MEM_InstToPtr (slf), MEMINT_SwitchG1G2 (oCNpc__CreateVobList_G1, oCNpc__CreateVobList_G2));
};
/*
Function removes vobPtr from self.vobList_array
*/
//006B7080 .text Debug data ?RemoveFromVobList@oCNpc@@QAEXPAVzCVob@@@Z
const int oCNpc__RemoveFromVobList_G1 = 7041152;
//0x0075D9B0 public: void __thiscall oCNpc::RemoveFromVobList(class zCVob *)
const int oCNpc__RemoveFromVobList_G2 = 7723440;
FUNC VOID NPC_RemoveFromVobList (var C_NPC slf, var int vobPtr)
{
if (!vobPtr) { return; };
CALL_PtrParam (vobPtr);
CALL__thiscall (MEM_InstToPtr (slf), MEMINT_SwitchG1G2 (oCNpc__RemoveFromVobList_G1, oCNpc__RemoveFromVobList_G2));
};
/*
Function allows you to change _zCVob_type
*/
const int cVOB_TYPE_LIGHT = 1;
const int cVOB_TYPE_SOUND = 2;
const int cVOB_TYPE_STARTPOINT = 6;
const int cVOB_TYPE_WAYPOINT = 7;
const int cVOB_TYPE_MOB = 128;
const int cVOB_TYPE_ITEM = 129;
const int cVOB_TYPE_NPC = 130;
FUNC VOID NPC_Change_zCVob_type (var C_NPC slf, var int vobType)
{
var oCNPC npc;
npc = Hlp_GetNPC (slf);
npc._zCVob_type = vobType;
};
/*
Wisp start_aistate ...
*/
FUNC VOID B_Wisp_Release ()
{
B_World_RemoveNPC (self);
Wld_PlayEffect ("FX_WISPLIGHT_HEAL", hero, hero, 0, 0, 0, FALSE);
hero.attribute [ATR_HITPOINTS] += 40;
};
FUNC VOID ZS_Wisp ()
{
B_ClearPerceptions (self);
NPC_PercEnable (self, PERC_ASSESSTALK, B_Wisp_Release);
NPC_ClearAIQueue (self);
NPC_SetPercTime (self, 1);
Wld_StopEffect_Ext ("FX_WISPLIGHT", 0, 0, 1);
Wld_StopEffect_Ext ("FX_WISPLIGHT_GOLD", 0, 0, 1);
//---
Wld_PlayEffect ("FX_WISPLIGHT", self, self, 0, 0, 0, FALSE);
NPC_SetTimeScale (self, mkf (3));
Wisp_Vob_Type = cVOB_TYPE_NPC;
NPC_Change_zCVob_type (self, cVOB_TYPE_NPC);
AI_SetWalkMode (self, NPC_RUN);
AI_Wait (self, 1);
};
FUNC INT ZS_Wisp_Loop ()
{
//--- Is player in Fight mode ? if Yes change _zCVob_type to VOB_TYPE_LIGHT - this will not allow player to target Wisp (though he can still kill it! by shooting at it for example ...)
if (C_NPCIsInFightMode (hero))
{
if (Wisp_Vob_Type == cVOB_TYPE_NPC)
{
NPC_Change_zCVob_type (self, cVOB_TYPE_SOUND);
Wisp_Vob_Type = cVOB_TYPE_SOUND;
};
} else
{
if (Wisp_Vob_Type == cVOB_TYPE_SOUND)
{
NPC_Change_zCVob_type (self, cVOB_TYPE_NPC);
Wisp_Vob_Type = cVOB_TYPE_NPC;
};
};
//--- create vobList_array
//NPC_PerceiveAll (self);
//Same as NPC_PerceiveAll - but restricted to specific range
NPC_CreateVobList (self, 3000);
/***
This piece below is here just to demonstrate NPC_RemoveFromVobList :)
In theory you can use this piece of code to write your own version of Wld_DetectItem.
***/
//--- clear vobList_array - remove all items, that are too far, or those which our Wisp can't see
var oCNPC slf;
slf = Hlp_GetNPC (self);
var int i; i = 0;
var int loop;
MEM_InitLabels ();
loop = MEM_StackPos.position;
if (slf.vobList_numInArray > 0)
{
var int vobPtr; vobPtr = MEM_ReadIntArray (slf.vobList_array, i);
if (Hlp_Is_oCItem (vobPtr))
{
var C_Item myItem;
myItem = _^ (vobPtr);
//Is item too far ? remove it from vobList_array
if (NPC_GetDistToItem (self, myItem) > 3000)
{
//remove item from vobList_array
NPC_RemoveFromVobList (self, vobPtr);
//restart loop
i = 0;
MEM_StackPos.position = loop;
};
//Can I see this item ? if not, remove it from vobList_array
if (NPC_FreeLineOfSight (self, vobPtr) == FALSE)
&& (NPC_CanSeeItem (self, myItem) == FALSE)
&& (NPC_GetDistToItem (self, myItem) > 300)
{
//remove item from vobList_array
NPC_RemoveFromVobList (self, vobPtr);
//restart loop
i = 0;
MEM_StackPos.position = loop;
};
} else
{
//remove object from vobList_array
NPC_RemoveFromVobList (self, vobPtr);
//restart loop
i = 0;
MEM_StackPos.position = loop;
};
i += 1;
if (i < slf.vobList_numInArray)
{
MEM_StackPos.position = loop;
};
};
//--- Detect item
if (Wld_DetectItem (self, ITEM_KAT_NONE))
{
if (Hlp_IsValidItem (item))
{
//Check the distance, just in case
if (NPC_GetDistToItem (self, item) < 3000)
{
//Can Wisp see detected item? (it should, but just in case :))
if (NPC_CanSeeItem (self, item))
|| (NPC_GetDistToItem (self, item) <= 300)
{
//If Wisp is close enough - pick the item / notify player
if (NPC_GetDistToItem (self, item) <= 300)
{
//Is Wisp in item-picking mode?
if (Wisp_Mode_Picking == TRUE)
{
if (Wisp_Golden == FALSE)
{
Wisp_Golden = TRUE;
Wld_StopEffect_Ext ("FX_WISPLIGHT", 0, self, 1);
Wld_PlayEffect ("FX_WISPLIGHT_GOLD", self, self, 0, 0, 0, FALSE);
NPC_SetStateTime (self, 0);
};
if (NPC_GetStateTime (self) >= 1)
{
Wisp_Golden = FALSE;
Wld_StopEffect_Ext ("FX_WISPLIGHT_GOLD", 0, self, 1);
Wld_PlayEffect ("FX_WISPLIGHT", self, self, 0, 0, 0, FALSE);
var int itm_Instance;
var ocItem itm;
var int amount;
var int itm_Ptr;
itm_Ptr = _@ (item);
itm = _^ (itm_Ptr);
amount = itm.amount;
itm_Instance = Hlp_GetInstanceID (item);
CreateInvItems (self, itm_Instance, amount);
Wld_RemoveItem (item);
B_GiveInvItems (self, hero, itm_Instance, amount);
NPC_SetStateTime (self, 0);
//Send perception to NPCs - Wisp might be stealing their items !
Npc_SendPassivePerc (self, PERC_ASSESSTHEFT, self, self);
};
} else
//Wisp is not in item-picking mode, so if will just change color
{
if (Wisp_Golden == FALSE)
{
if (NPC_GetStateTime (self) >= 2)
{
Wisp_Golden = TRUE;
Wld_StopEffect_Ext ("FX_WISPLIGHT", 0, self, 1);
Wld_PlayEffect ("FX_WISPLIGHT_GOLD", self, self, 0, 0, 0, FALSE);
NPC_SetStateTime (self, 0);
};
} else
if (NPC_GetStateTime (self) >= 8)
{
Wisp_Golden = FALSE;
Wld_StopEffect_Ext ("FX_WISPLIGHT_GOLD", 0, self, 1);
Wld_PlayEffect ("FX_WISPLIGHT", self, self, 0, 0, 0, FALSE);
NPC_SetStateTime (self, 0);
};
};
} else
//If Wisp is not close enough, go to item
{
AI_GotoItem (self, item);
};
};
};
};
};
AI_Wait (self, 1);
return LOOP_CONTINUE;
};
FUNC VOID ZS_Wisp_End ()
{
};
Geändert von F a w k e s (15.11.2018 um 17:47 Uhr)
Grund: Changing cVOB_TYPE_LIGHT to cVOB_TYPE_SOUND
-
-
Nice work, Fawkes!
Zitat von easecon
@ mud-freak
ja schon, dennoch gibt es ja immer diese "nahe zum Original"-Mods, so wie die deutsche L'Hiver Edition, die MiniMod-Balance, VBE oder Atariar. Bei diesen ganzen Mods müsste es ja gehen oder? Weil das Irrlicht so weit ich weiß dort immer unangetastet blieb. Und wenn es gut genug ist, könnte es doch auch "einfach" (oder nicht so einfach?) in zukünftige Mods implementiert werden oder?
Naja ich hab da zu wenig Wissen aber wenn es für Originaltreue Mods wie die vorher genannten funktioniert wäre das schon ein dicker Bonus.
Mir war nicht bewusst, dass sich die genannten Änderungen alle innerhalb des ZS-Skripts des Irrlichts bewerkstelligen lassen (so wie Fawkes das gemacht hat). Damit fallen fast alle meiner Bedenken bzgl. eines Patches weg. Ein Patch mit diesem Skript sollte mit jeder Mod laufen (auch mit Mods, die das Irrlicht nicht benutzen, dort ändert sich dann halt nichts merkliches).
Die Mechanik des Irrlichts würde dann zwar komplett mit der neuen überschrieben, das wird aber nur dann zu einem Problem, wenn die Mod eigene Änderungen am Irrlicht vorgenommen hatte - und auch nur dann wirklich, wenn diese eigene Funktionalität für eine Quest o.ä. gebraucht wird. So etwas könnte man zuvor ja in Erfahrung bringen (für so etwas gibt es ja die Release-Threads im Mod-Forum), Stichwort: Kompatibilität zwischen einer Mod und einem bestimmten Patch.
Was nach wie vor nicht so leicht sein sollte, ist das Lernen von neuen Irrlicht-Features in die Lehrer-Dialoge einzubauen (z.B. dass das Irrlicht selbstständig Items aufsammelt). Darauf müsste man dann verzichten. D.h. entweder geht das von Beginn an oder wird auf alternativem Weg gelernt, z.B. nach X Benutzungen vom Irrlicht.
Falls jemand das Skript in einen Patch verpacken will, empfehle ich noch ein paar Wochen zu warten, ich tüftle gerade an einer neuen Version von Ninja.
Geändert von mud-freak (15.01.2021 um 10:35 Uhr)
-
Abenteurer
Eine Kurze Frage zum verbesserten Irrlicht bei Returning 2.0 New alternate Balancing.
Wie bringe ich dem Irrlicht die neuen Sachen bei ? Bei mir lässt sich das Irrlicht nicht ansprechen. Habe ich was übersehen ?
-
Zitat von PapaZwuckiii
Eine Kurze Frage zum verbesserten Irrlicht bei Returning 2.0 New alternate Balancing.
Wie bringe ich dem Irrlicht die neuen Sachen bei ? Bei mir lässt sich das Irrlicht nicht ansprechen. Habe ich was übersehen ?
Diese frage ist im entsprechenden Thread der Mod besser aufgehoben, da Returning 2 nicht aus diesem Forum kommt (Editing ist hier unser Modding Bereich, hier entstehen Techniken, Modelle, Texturen, ...)
Thread zu "new Alternative Balancing"
https://forum.worldofplayers.de/foru...alacing/page80
-
Verbessertes Irrlicht:
https://rpgrussia.com/threads/union-...llowisp.28312/
kann hier runtergeladen werden fuer Union. Muesst nur in der ini die Werte einstellen und die hotkeys+uebersetzen wenn wer was spezielles will. Suchradius, was genau sammeln usw kann beigebracht werden.
@Papa
shift+k oder shift+h um freundliche ziele anvisieren zu können
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
|