Portal-Zone Gothic-Zone Gothic II-Zone Gothic 3-Zone Gothic 4-Zone Modifikationen-Zone Download-Zone Foren-Zone RPG-Zone Almanach-Zone Spirit of Gothic

 

Page 1 of 2 12 Last »
Results 1 to 20 of 21
  1. View Forum Posts #1 Reply With Quote
    now also in your universe  Milky-Way's Avatar
    Join Date
    Jun 2007
    Posts
    13,187
     
    Milky-Way is offline

    Lightbulb [TIPP] Alternative Unsterblichkeit

    [TIPP] Alternative Unsterblichkeit


    Problematik

    (Kurz: unsterbliche NPC niederschlagen)
    In Gothic II ist für Unsterblichkeit eigentlich nur NPC_FLAG_IMMORTAL vorgesehen, wodurch NPC keinen Schaden mehr nehmen. Unter bestimmten Umständen ist das auch durchaus gut - so bleibt z.B. eine Wache immer standhaft, man kann sie nicht niederschlagen und vorbeigehen.
    Geht es jedoch lediglich darum, dass ein Story-relevanter NPC überlebt, bis er gebraucht wird, ist diese Lösung eher problematisch, da der Spieler vor ein unlösbares Problem gestellt werden könnte: Erweckt er durch irgendeine Aktion (z.B. das Betreten einer fremden Hütte und Plündern einer Truhe) das Misstrauen von NPC, so stürzt sich unter Umständen auch ein solcher - unsterblicher und somit unbesiegbarer - NPC in den Kampf.
    Ein weiteres Problem und der eigentliche Grund meiner Versuche ist das Ausnutzen von unsterblichen Begleitern mit dem Ziel, starke Gegner von diesen besiegen zu lassen. Ist der Begleiter unsterblich, so wird er über kurz oder lang mit jedem Gegner fertig - häufig sind Begleiter aber später noch relevant, weshalb sie auch nicht sterblich sein dürfen.


    Methode

    Dieser (durchaus ausformulierte) Tipp geht dieses Problem an. Ziel und Ergebnis sind hierbei, NPC möglichst glaubwürdig bewusstlos werden zu lassen, einen Tod jedoch auszuschließen. Dazu werden Sterbeanimationen über Overlays ausgetauscht und tote NPC wiederbelebt, möglichst ohne dass der Spieler etwas vom Tod mitbekommt. Technisch stirbt der NPC also und wird wiederbelebt; für den Spieler sieht es aber nach Bewusstlosigkeit aus. Auch der Todesstoß kann (durch den Spieler) technisch ausgeführt werden, hat aber keine sichtbaren Folgen.


    Schritt 1: Die Animationen

    Für das Töten von NPC gibt es mehrere Animationen:
    1. Der Todesstoß, ausgeführt durch den Mörder
    2. Sterbe-Animationen (tot hinfallen / tot liegen / erstochen werden) des Sterbenden

    Für beide Fälle werden daher OverlayAnis benötigt.

    1) Hier wird die Todesstoß-Animation ersetzt. HUM_FINISH_DUMMY.MDS:
    Code:
    //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    // HUMAN OVERLAY	Todesstoß  Dummy
    //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    
    
    Model ("HuS")
    {
    
    	MeshAndTree ("Hum_Body_Naked0.ASC" DONT_USE_MESH)
    
    	aniEnum
    	{
    		modelTag	("DEF_HIT_LIMB"		"zs_RightHand")
    
    		//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    
    
    	
    		// Todesstoß - Entfernung zwischen Bip01 Angreifer und Bip01 Opfer ca. 200 cm
    		ani	("t_1hSFinish"	1	""	0.1	0.1	M.	"HUM_1HSFINISH_DUMMY.ASC"	F	1	1)
    		ani	("t_2hSFinish"	1	""	0.1	0.1	M.	"HUM_1HSFINISH_DUMMY.ASC"	F	1	1)
    
    
    	}
    }
    Benötigt wird zusätzlich also noch die HUM_1HSFINISH_DUMMY.ASC, um die sich Zaphod Beeblebrox gekümmert hat. Die Datei befindet sich im Anhang dieses Posts. Sowohl die HUM_FINISH_DUMMY.MDS als auch die HUM_1HSFINISH_DUMMY.ASC müssen in ein Unterverzeichnis von:
    Gothic II\_work\data\Anims\

    2) Die zweite Overlay ersetzt die Animationen des Sterbenden durch äquivalente Animationen der Bewusstlosigkeit. Da diese Animationen schon im Spiel enthalten sind, reicht diese HUM_DIE_DUMMY.MDS:
    Code:
    //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    // HUMAN OVERLAY	Sterbe-Animationen Dummy
    //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    
    
    Model ("HuS")
    {
    
    	MeshAndTree ("Hum_Body_Naked0.ASC" DONT_USE_MESH)
    
    	aniEnum
    	{
    		modelTag	("DEF_HIT_LIMB"		"zs_RightHand")
    
    
    		// DIE
    
    		//Hinfallen
    		ani			("t_Dead"		1	"s_Wounded"		0.2	0.1	M.	"Hum_KnockedOut_M01.asc"	F	1	49	FPS:10	CVS:0.1)
    		//Am Boden liegen
    		ani			("s_Dead"				1	"s_Wounded"		0.1	0.1	M.	"Hum_Wounded_Try_A01.asc"	F	1	45	CVS:0.1)
    
    		//HinfallenB
    		ani			("t_DeadB"		1	"s_WoundedB"	0.2	0.1	M.	"Hum_WoundedB_M01.asc"		F	1	34	FPS:10	CVS:0.1)
    		//Am Boden liegen B
    		ani			("s_DeadB"				1	"s_WoundedB"	0.1	0.1	M.	"HUM_WOUNDEDBAMBIENT_A01.ASC"	F	1	40	CVS:0.1)
    
    		//Sterben durch Todestoß
    		ani	("t_Wounded_2_Dead"	1	"s_Wounded"	0.1	0.1	M.	"Hum_Wounded_Try_A01.ASC"	F	1	45	CVS:0.1)
    		//Sterben durch Todestoß B
    		ani	("t_WoundedB_2_DeadB"	1	"s_WoundedB"	0.1	0.1	M.	"HUM_WOUNDEDBAMBIENT_A01.ASC"	F	1	40	CVS:0.1)
    
    	}
    }
    Auch diese Datei gehört in ein Unterverzeichnis von:
    Gothic II\_work\data\Anims\


    Schritt 2: Die Skripte

    Hierbei werden mehrere Probleme angegangen:
    1. Kennzeichnen der unsterblichen NPC
    2. Wiederbeleben der "unsterblichen" NPC
    3. Verhindern des Todesstoßes gegen unsterbliche NPC durch andere NPC
    4. Verhindern einer Reaktion anderer NPC auf den Tod des unsterblichen NPC
    5. Unsichtbar-Machen der Sterbe-Animationen des unsterblichen NPC
    6. Unsichtbar-Machen des Todesstoßes gegen unsterbliche NPC durch den Spieler
    7. Vermeiden der Blutlache bei unsichtbarem Todesstoß


    1) Da es an einigen Stellen benötigt wird, bietet sich eine Funktion an, die abfragt, ob ein NPC sterblich ist. Npc_CanDie.d:
    Code:
    /*
    Fragt ab, ob ein Npc sterben darf/kann
    */
    
    FUNC int Npc_CanDie (VAR C_NPC slf)
    {
    	if (Hlp_GetInstanceID (slf) == Hlp_GetInstanceID (UnsterblicherNPC1))
    	|| (Hlp_GetInstanceID (slf) == Hlp_GetInstanceID (UnsterblicherNPC2))
    	{
    		return FALSE;
    	};
    	
    	return TRUE;
    };
    Wichtig ist hier, dass FALSE zurückgegeben wird, wenn ein NPC nicht sterben darf. Die Abfrage dazu kann selbstverständlich variieren, hier ist also nur ein Beispiel gegeben. Die Datei muss logischerweise vor den später erwähnten Dateien geparst werden, damit die Funktion Npc_CanDie dort verwendet werden kann.

    2) Das Wiederbeleben geschieht in der Datei:
    Gothic II\_work\data\scripts\Content\AI\Human\ZS_Human\ZS_Dead.d
    Für unsterbliche NPC wird daher der ZS_Dead_loop beendet:
    Code:
    func int ZS_Dead_loop ()
    {
    	// unsterbliche Npc
    	if (!Npc_CanDie (self))
    	{
    		return LOOP_END;
    	};
    	
    	// [...]
    	
    	return LOOP_CONTINUE;
    };
    In einer (falls noch nicht geschehen) eigens anzulegenden FunktionZS_Dead_end wird dem NPC ein Hitpoint gegeben und er wird in den ZS_Unconscious geschickt:
    Code:
    func int ZS_Dead_end ()
    {
    	if (!Npc_CanDie (self))
    	{
    		self.attribute[ATR_HITPOINTS] = 1;
    		AI_StartState(self,ZS_Unconscious,0,"");
    	};
    };
    3) Der Todesstoß kann in den Skripten durch die Funktion AI_FinishingMove ausgeführt werden. Die Funktion wird (sofern man sie nicht selbst aufruft) nur durch die Funktion B_FinishingMove aufgerufen:
    Gothic II\_work\data\scripts\Content\AI\Human\B_Human\B_FinishingMove.d
    Diese Funktion kann entsprechend angepasst werden, damit der Todesstoß nicht gegen unsterbliche NPC ausgeführt wird:
    Code:
    // ************************************************
    // B_FinishingMove
    // ---------------
    // FIX: stellt sicher, daß NSC bei AI_FinishingMove
    // auf JEDEN Fall eine Waffe hat
    // ************************************************
    
    func void B_FinishingMove(var C_NPC slf, var C_Npc oth)
    {
    	if (Npc_CanDie (oth))	//nur wenn der andere sterben kann!
    	{
    		// ------ NK-Waffe ziehen (notfalls generieren), wenn keine gezogen ------
    		if (!Npc_IsInFightMode(slf,FMODE_MELEE))
    		{
    			Npc_SetToFightMode (slf, ItMw_1h_MISC_Sword);
    		};
    		
    		// ------ Finishing Move - Gegner bleibt (vom Programm gezwungen) im ZS_Unconscious ------				
    		AI_FinishingMove (slf, oth);
    	};
    };
    4) Da der NPC technisch jedoch noch stirbt, reagieren andere NPC dementsprechend auf einen Mord. Da der Spieler jedoch keinen Mord wahrnimmt, sollte auch die Reaktion vermieden werden. Die Wahrnehmung eines Mordes wird im Normalfall durch den PERC_ASSESSMURDER an die Funktion B_AssessMurder weitergegeben:
    Gothic II\_work\data\scripts\Content\AI\Human\B_Human\B_AssessMurder.d
    Für diese Funktion wird daher eine Abbruchbedingung eingefügt:
    Code:
    // ****************************************************
    // B_AssessMurder
    // --------------
    // Wird durch Wahrnehmung PERC_ASSESSMURDER aufgerufen
    // wird ÜBERALL her (AUCH aus ZS_Attack) aufgerufen								
    // ÄNDERT evtl. ATTACKREASON + überschreibt evtl. CRIME
    // reagiert bei Mord an Human oder Mord an Schafen
    // ****************************************************
    
    FUNC VOID B_AssessMurder()
    {
    	//EXIT IF...
    	
    	// ------ Opfer kann gar nicht sterben ------	
    	IF (!Npc_CanDie (victim))
    	{
    		return;
    	};	
    	
    	// [...]
    	
    };
    Zusätzlich gibt es noch die Funktion C_WantToAttackMurder:
    Gothic II\_work\data\scripts\Content\AI\Human\C_Human\C_WantToAttackMurder.d
    Auch hier wird eine Abbruchbedingung eingebaut:
    Code:
    // ********************
    // C_WantToAttackMurder
    // ********************
    
    func int C_WantToAttackMurder (var C_NPC slf, var C_NPC oth)
    {
    	// ------ es war gar kein Mord ------
    	if (!Npc_CanDie (victim))
    	{
    		return FALSE;
    	};
    	
    	// [...]
    	
    };
    5) Hierfür gibt es die HUM_DIE_DUMMY.MDS. Sie muss einfach für alle unsterblichen NPC aktiviert werden, zum Beispiel im jeweiligen NPC-Skript durch:
    Code:
    	Mdl_ApplyOverlayMds (self, "HUM_DIE_DUMMY.MDS");
    6) und 7) Hierfür gibt es die HUM_FINISH_DUMMY.MDS. Allerdings ist zu beachten, dass ein Todesstoß gegen sterbliche NPC noch möglich sein soll. Daher wird diese Mds nur aktiviert, wenn gerade ein Todesstoß gegen einen unsterblichen NPC möglich wäre, und sonst deaktiviert. Selbiges gilt ebenfalls für die Blutlache: Auch sie soll bei sterblichen NPC noch sichtbar sein.
    Für diesen Schritt ist Ikarus notwendig.
    In einer Funktion, die jeden Frame aufgerufen wird, rufen wir also eine Funktion Hero_ApplyKillOverlay auf:
    Code:
    /*===================================================================
    FUNC void Hero_ApplyKillOverlay ()
    Kontrolliert, ob der Npc im Fokus getötet werden darf. Wenn nicht
    und der Gegner im ZS_Unconscious ist, dann wird die Overlay aktiviert,
    sonst wieder weggenommen.
    ==================================================================*/
      
    FUNC void Hero_ApplyKillOverlay ()
    {
    	// Fokus des Helden herausfinden
    	var oCNpc her; her = Hlp_GetNpc (hero);		//Held als oCNpc
    	var C_NPC focus_Npc;	//Npc im Fokus als C_NPC
    	
    	var int overlayOnHero;	//ist gerade die Overlay auf dem Helden?
    	
    	IF (her.focus_vob)	//wenn es einen Fokus gibt
    	{
    		MEM_AssignInst (focus_Npc, her.focus_vob);		//Fokus als C_Npc
    	};  
    	
    	
    	IF (Hlp_IsValidNpc (focus_Npc))		//Wenn der Fokus ein Npc ist
    	&& (!Npc_CanDie (focus_Npc))		//und nicht sterben darf
    	&& (Npc_IsInState (focus_Npc, ZS_Unconscious))		//und gerade bewusstlos ist
    	{
    		IF (!overlayOnHero)		// wenn die Overlay noch nicht drauf ist
    		{
    			Mdl_ApplyOverlayMds (hero, "HUM_FINISH_DUMMY.MDS");		//Overlay auf den Helden
    			her.bloodTexture = "TRANSPARENTE_TEXTUR.TGA";		//Die Textur, die kommt, wenn der Held jemanden umbringt, umstellen auf eine transparente Textur
    
    			overlayOnHero = TRUE;		//Variable setzen
    		};
    	} else {		//sonst...
    		IF (overlayOnHero)		//wenn die Overlay drauf ist
    		{		
    			Mdl_RemoveOverlayMDS (hero, "HUM_FINISH_DUMMY.MDS");		//Overlay entfernen
    			her.bloodTexture = "ZBLOODSPLAT2.TGA";						//Textur wieder zurücksetzen auf die Standard-Textur
    			overlayOnHero = FALSE;		//Variable zurücksetzen
    		};
    	};
    	
    };
    Die Kommentare im Skript reichen hoffentlich aus - falls nicht einfach in diesem Thread nachfragen. Das Skript sollte nach der Datei Npc_CanDie.d und vor der Funktion, die jeden Frame aufgerufen wird, geparst werden.
    (Einen Dank nochmal an Sektenspinner, der herausgefunden hat, wie man die Bluttextur ändern kann.)
    In dieser Funktion wird die Bluttextur zwischenzeitlich auf die Textur TRANSPARENTE_TEXTUR.TGA umgestellt. Eine solche Textur findet sich im Anhang dieses Posts.


    Um zusätzliche NPC auf diese Art und Weise unsterblich zu machen, muss für sie eine Bedingung in die Funktion Npc_CanDie eingebaut, sowie die HUM_DIE_DUMMY.MDS aktiviert werden. Selbstverständlich können NPC auch im Verlaufe des Spiels unsterblich und wieder sterblich gemacht werden.

    Eine sinnvolle Ergänzung kann es sein, unsterbliche NPC in der Funktion ZS_Unconscious_end in den ZS_Flee zu versetzen. Das muss aber je nach Modifikation und Situation individuell entschieden werden. Ebenso ist dies auch kein wirklicher Ersatz für die alte Unsterblichkeit - je nach Situation kann sich eine Methode mehr anbieten als die andere.

    Ich hoffe, dass jemand mit diesem Tipp etwas anfangen kann. Bei Fragen, Problemen, Verbesserungen und Fehlern bitte hier im Thread melden. Ein mögliches Problem besteht noch bei der Reaktion auf den unsichtbaren Mord; manchmal wurde ich danach angegriffen - das könnte jedoch auch mit dem vorherigen Niederschlagen zusammenhängen, eine eindeutige Reaktion konnte ich bei meinen Tests nicht feststellen.
    Attached Files
    Last edited by Milky-Way; 23.03.2011 at 19:01.

  2. View Forum Posts #2 Reply With Quote
    Legende der Amazonen Bisasam's Avatar
    Join Date
    Dec 2006
    Location
    Meine Faust in Sinis Gesicht
    Posts
    8,687
     
    Bisasam is offline
    Ich würde zum kompletten Umgehen einfach NPCTYPE_FRIENDLY benutzen, dann sind die auch nicht sauer.

    aber saubere arbeit, Milky


    "Das erinnert doch sehr erfreulich an das, was man sich als Gothicfan wünscht!"
    -Korallenkette

  3. View Forum Posts #3 Reply With Quote
    now also in your universe  Milky-Way's Avatar
    Join Date
    Jun 2007
    Posts
    13,187
     
    Milky-Way is offline
    Quote Originally Posted by Assasine91 View Post
    Ich würde zum kompletten Umgehen einfach NPCTYPE_FRIENDLY benutzen, dann sind die auch nicht sauer.
    Da ist natürlich immer die Frage, inwieweit man das anderweitig akzeptieren kann. Ich habe hier nach einer Lösung gesucht, die zu möglichst wenig Einschränkungen führt.
    Quote Originally Posted by Assasine91 View Post
    aber saubere arbeit, Milky
    Danke .

  4. Visit Homepage View Forum Posts #4 Reply With Quote
    Exodus Sektenspinner's Avatar
    Join Date
    Jul 2004
    Location
    Karlsruhe
    Posts
    7,827
     
    Sektenspinner is offline
    Ist besser ausgearbeitet als das, was ich mal gemacht habe.

    Hast du getestet, ob es auch funktioniert, wenn man den Npc mit einem Eisblock tötet (durch den Frostschaden über die Zeit)?
    The Wonderer konnte so immerhin tote Händler ausräumen (deren Inventar eigentlich geleert wird).
    Bei meinem Ansatz hatte ich noch Probleme, wenn ich in schneller Abfolge Pfeile auf den Npc am Boden geschossen habe. Das könntest du auch mal testen.

    Nützlicher Tipp jedenfalls!
    Für Spieler:
    Velaya # Velaya in English # Exodus Demo # Irrwichtel
    Tools für Modder:
    DiaDepp # DOPA-PARTER # zSlang
    Scripte für Modder:
    Ikarus Skriptpaket # Floats # Broadcasts

  5. View Forum Posts #5 Reply With Quote
    Krieger
    Join Date
    Feb 2011
    Posts
    424
     
    Davy is offline
    Ja hat echt Spaß gemacht zu lesen!

  6. View Forum Posts #6 Reply With Quote
    an exciting experience  OldCoin's Avatar
    Join Date
    Jun 2010
    Location
    bei Bremen und auf Sythera
    Posts
    4,247
     
    OldCoin is offline

    Hi Milky-Way

    Wouw. Das klingt wirklich vielversprechend.
    Die eingangs von dir beschriebene Problematik mit den unsterblichen Npcs hat mich persönlich tatsächlich schon öfters gestört.

    Habe deinen Post zwei mal gelesen, die Script-Sequenzen aber ausgelassen, da ich hier im Büro eh nicht viel damit anfangen kann.

    Also falls sich dadurch folgende Frage erübrigt, sorry. Aber du schreibst, das der "bewußlose" Npc kurzfristig für die Engine tot ist.
    Ist es ausgeschlossen, das der Protagonist in diesem sicher sehr kleinen Zeitfenster den Npc plündern kann?

    Bedeutet das, ich muß mir Ikarus doch "antun" (sorry Sektenspinner), falls ich diese Methode einbauen möchte. Weil sie interessiert mich wirlich, aber Ikarus? Ich? Da schlottern mir ja jetzt schon die Knie, und nicht nur die.
    Ich lese die entsprechenden Threads zwar sporadisch, aber wenn ich da geschätze 3% verstehe, dann hatte ich einen echt guten Tag.

    Und abschließend hat mich noch dieser Satz aufhorchen lassen. In dieser Funktion wird die Bluttextur zwischenzeitlich auf die Textur TRANSPARENTE_TEXTUR.TGA umgestellt.

    Hat jetzt allerdings mit dem voran gegangen nix zu tun, aber ich frage trotzdem. Kann ja sonst ggf. irgend wer beantworten, der es denn kann oder möchte.

    Wenn es möglich ist eine Textur vorübergehend auf transparent zu stellen, so dass der Spieler sie nicht sieht, kann man das dann auch für speziell bezeichnete 3.ds Dateien hin bekommen. Also in dem Fall Umstellung der Kollision bzw. (Mist. Jetzt fällt mir das Wort nicht ein. Also das sie im Spiel sichtbar sind) von TRUE auf FALSE? Als ich das mit dem Umstellen auf unsichtbar gelesen hatte, war meine erste Idee hier zu: Geht das auch mit kompletten Gebäude? Die Texturen sollten dann wohl gehen und die 3.ds Dateien für dieses spezielle Gebäude müßten dann vorher umgenannt werden, so dass sie nur Verwendung auf dieses spezielle Gebäude finden.
    Aber wenn das wirklich funktionieren würde, dann könnte man ja im Spiel Gebäude oder was auch immer "ein- oder ausblenden".
    Wäre sicher eine nette Spielerei.

    Das Sythera-Mod-Team sucht derzeit nur noch einen weiteren netten Kollegen / Kollegin zur Erstellung von Gebäude-Meshs. Weitere Infos in der Jobbörse.

  7. Visit Homepage View Forum Posts #7 Reply With Quote
    Das klingt wirklich interessant.
    Klingt zwar nicht unkompliziert, aber die einfache Unsterblichkeit ist natürlich nicht gerade eine elegante Methode, da gefällt mir deine schon viel besser


    Quote Originally Posted by OldCoin View Post
    Aber du schreibst, das der "bewußlose" Npc kurzfristig für die Engine tot ist.
    Ist es ausgeschlossen, das der Protagonist in diesem sicher sehr kleinen Zeitfenster den Npc plündern kann?
    Öhh.... Ich kann in Gothic auch immer Bewusstlose plündern :-P

  8. Visit Homepage View Forum Posts #8 Reply With Quote
    Exodus Sektenspinner's Avatar
    Join Date
    Jul 2004
    Location
    Karlsruhe
    Posts
    7,827
     
    Sektenspinner is offline
    Quote Originally Posted by OldCoin View Post
    Wenn es möglich ist eine Textur vorübergehend auf transparent zu stellen, so dass der Spieler sie nicht sieht, kann man das dann auch für speziell bezeichnete 3.ds Dateien hin bekommen. Also in dem Fall Umstellung der Kollision bzw. (Mist. Jetzt fällt mir das Wort nicht ein. Also das sie im Spiel sichtbar sind) von TRUE auf FALSE? Als ich das mit dem Umstellen auf unsichtbar gelesen hatte, war meine erste Idee hier zu: Geht das auch mit kompletten Gebäude? Die Texturen sollten dann wohl gehen und die 3.ds Dateien für dieses spezielle Gebäude müßten dann vorher umgenannt werden, so dass sie nur Verwendung auf dieses spezielle Gebäude finden.
    Aber wenn das wirklich funktionieren würde, dann könnte man ja im Spiel Gebäude oder was auch immer "ein- oder ausblenden".
    Wäre sicher eine nette Spielerei.
    Das könnte man per Ikarus machen (einfach zCVob.collDetectionDynamic und zCVob.showVisual bearbeiten). Mit einem passenden Skript kann man so ganze Vobtrees unsichtbar machen, indem man den ganzen Unterbaum abläuft. Der zCTree ist dokumentiert.
    Man muss sich allerdings noch Gedanken machen, was man mit speziellen Objekten tun sollte, zum Beispiel ist es bei Mobs und Items nicht damit getan sie unsichtbar zu machen.

    Je nach Situation könnte es einfacher sein einen Mover (klassische Lösung dafür) oder ein oCMobFire zu benutzen. Beide haben, wie die Ikaruslösung auch, Vorzüge und Nachteile.
    Für Spieler:
    Velaya # Velaya in English # Exodus Demo # Irrwichtel
    Tools für Modder:
    DiaDepp # DOPA-PARTER # zSlang
    Scripte für Modder:
    Ikarus Skriptpaket # Floats # Broadcasts

  9. View Forum Posts #9 Reply With Quote
    now also in your universe  Milky-Way's Avatar
    Join Date
    Jun 2007
    Posts
    13,187
     
    Milky-Way is offline
    Quote Originally Posted by Sektenspinner View Post
    Ist besser ausgearbeitet als das, was ich mal gemacht habe.
    So etwas ähnliches gab es wohl auch in Piratenleben (?); das Wiederbeleben über die ZS_Dead_end habe ich hier im Forum gefunden als ich es für die Gothic 1 Mod "Dunkle Geheimnisse" umsetzen wollte (allerdings dort weniger komplex). Prinzipiell sollte es so eigentlich auch in Gothic 1 funktionieren, speziell bei den Animationen muss man allerdings vergleichen, ob es da Unterschiede gibt. Würde Ikarus denn für Gothic 1 ausreichend funktionieren?

    Quote Originally Posted by Sektenspinner View Post
    Hast du getestet, ob es auch funktioniert, wenn man den Npc mit einem Eisblock tötet (durch den Frostschaden über die Zeit)?
    The Wonderer konnte so immerhin tote Händler ausräumen (deren Inventar eigentlich geleert wird).
    Bei meinem Ansatz hatte ich noch Probleme, wenn ich in schneller Abfolge Pfeile auf den Npc am Boden geschossen habe. Das könntest du auch mal testen.
    Muss ich beides mal testen. Was meinst du mit "in schneller Abfolge"? Also einfach solange mit Pfeilen geschossen, bis der NPC tot war?

    Quote Originally Posted by Sektenspinner View Post
    Nützlicher Tipp jedenfalls!
    Quote Originally Posted by Davy View Post
    Ja hat echt Spaß gemacht zu lesen!
    Quote Originally Posted by OldCoin View Post
    Wouw. Das klingt wirklich vielversprechend.
    Quote Originally Posted by kushel_baer View Post
    Das klingt wirklich interessant.
    Klingt zwar nicht unkompliziert, aber die einfache Unsterblichkeit ist natürlich nicht gerade eine elegante Methode, da gefällt mir deine schon viel besser
    Danke . Für spaßige Lektüre hätte ich es zwar nicht gehalten, freut mich aber .

    Quote Originally Posted by OldCoin View Post
    Also falls sich dadurch folgende Frage erübrigt, sorry. Aber du schreibst, das der "bewußlose" Npc kurzfristig für die Engine tot ist.
    Wenn ich mich nicht irre, sollte theoretisch keine Zeit vergehen, während der NPC tot ist, da die ZS_Dead sofort wieder verlassen wird.
    Quote Originally Posted by OldCoin View Post
    Ist es ausgeschlossen, das der Protagonist in diesem sicher sehr kleinen Zeitfenster den Npc plündern kann?
    Der NPC liegt bewusstlos am Boden wie bei normaler Bewusstlosigkeit (genau genommen kommt nach einem unsichtbaren Todesstoß nochmal eine Bewusstlosigkeitszeit hinzu).
    Quote Originally Posted by OldCoin View Post
    Bedeutet das, ich muß mir Ikarus doch "antun" (sorry Sektenspinner), falls ich diese Methode einbauen möchte. Weil sie interessiert mich wirlich, aber Ikarus?
    Ja, ohne Ikarus funktioniert diese Methode nicht. Wenn man Ikarus nicht verwenden möchte, könnte der Spieler in einer abgespeckten Variante den Todesstoß noch ausführen, ohne dass der sterbende NPC reagiert allerdings mit einer Blutlache unter ihm. Das Skript Hero_ApplyKillOverlay würde dann weggelassen. Eine komplett funktionierende Alternative ohne Ikarus sehe ich nicht.
    Quote Originally Posted by OldCoin View Post
    Da schlottern mir ja jetzt schon die Knie, und nicht nur die.
    Ich lese die entsprechenden Threads zwar sporadisch, aber wenn ich da geschätze 3% verstehe, dann hatte ich einen echt guten Tag.
    Vor Ikarus braucht man eigentlich keine Angst haben. Von alleine wird dir Ikarus nichts tun; du kannst aber einzelne Funktionen (wie diese hier) dann einbauen. Solange die funktionieren (und das sollte diese ), ist es praktisch nicht allzu schlimm, wenn du Ikarus nicht verstehst. Nach und nach kannst du dann einzelne eigene Elemente / Funktionen aus Ikarus einbauen.
    Quote Originally Posted by OldCoin View Post
    Als ich das mit dem Umstellen auf unsichtbar gelesen hatte, war meine erste Idee hier zu: Geht das auch mit kompletten Gebäude? [...]
    Aber wenn das wirklich funktionieren würde, dann könnte man ja im Spiel Gebäude oder was auch immer "ein- oder ausblenden".
    Wäre sicher eine nette Spielerei.
    Ich ersetze in diesem Schritt nicht wirklich eine Textur, sondern gebe eine andere Textur an, die verwendet wird, wenn der Held einen NPC tötet.
    Die Sichtbarkeit von Objekten würde man (wie ja schon von anderen gesagt wurde) über deren Eigenschaften (z.B. showVisual) verändern; das wäre also nicht direkt eine Änderung der Textur wie hier.
    Was ich aber eigentlich dazu sagen wollte, ist, dass ein unsichtbar-Machen jedwelcher Art wohl nur für einzelne Objekte ginge - Gebäude müssten dazu also im Spacer gesetzt werden (was aus anderen Gründen eher unpraktisch ist).

  10. View Forum Posts #10 Reply With Quote
    an exciting experience  OldCoin's Avatar
    Join Date
    Jun 2010
    Location
    bei Bremen und auf Sythera
    Posts
    4,247
     
    OldCoin is offline

    Hi Milky-Way

    Danke für die ausführliche Erklärung der Erklärung.

    Quote Originally Posted by Milky-Way View Post
    Vor Ikarus braucht man eigentlich keine Angst haben. Von alleine wird dir Ikarus nichts tun;
    Gothic, Spacer und Co. auch nicht.
    Trotzden hatte ich es ja "geschafft" während der Erstellung meiner Demo sieben (7!) Gothic_Installationen zu schrotten. Aber was soll´s. Wenn es soweit ist, werde ich es wohl trotzdem versuchen.

    Quote Originally Posted by Milky-Way View Post
    Solange die funktionieren (und das sollte diese ), ist es praktisch nicht allzu schlimm, wenn du Ikarus nicht verstehst.
    Na bitte, das mit dem "nicht verstehen" kommt mir doch schon sehr entgegen.

    Das Sythera-Mod-Team sucht derzeit nur noch einen weiteren netten Kollegen / Kollegin zur Erstellung von Gebäude-Meshs. Weitere Infos in der Jobbörse.

  11. View Forum Posts #11 Reply With Quote
    Ehrengarde Gottfried's Avatar
    Join Date
    Mar 2006
    Posts
    2,512
     
    Gottfried is offline
    Schick
    Ich hatte vor 3 (?) Jahren mal für Gothic I eine ähnliche Methode ausgearbeitet.. Die sah ungefähr so aus:
    Code:
    const int AIV_Immortal = 97;
    
    // --- B_Assessdamage ---
    [...]
    
    if(self.flags&NPC_Flag_Immortal) {
        self.flags = self.flags & ~NPC_Flag_Immortal;
        self.aivar[AIV_Immortal] = 1;
    };
    
    [...]
    
    // --- ZS_Dead ---
    [...]
    
    if(self.aivar[AIV_Immortal]) {
        AI_StartState(self, ZS_Unconscious, 0, "");
    };
    
    [...]
    
    // --- ZS_Unconscious_Loop ---
    [...]
    
    if(self.aivar[AIV_Immortal]) {
        return 0;
    };
    
    [...]
    Ergebnis war, dass unsterbliche Npcs immer direkt wieder aufstanden wenn sie getötet wurden. Man hatte also keine Möglichkeit sie umzubringen
    (Vorteil: Npc_Flag_Immortal kann nach wie vor gesetzt werden und immortals können nicht ausgeraubt werden)
    Da ich das gerade aus dem Kopf geschrieben hab gebe ich keine Garantie auf Fehlerfreiheit

    MfG Gottfried
    Last edited by Gottfried; 25.03.2011 at 17:35.

  12. Visit Homepage View Forum Posts #12 Reply With Quote
    Exodus Sektenspinner's Avatar
    Join Date
    Jul 2004
    Location
    Karlsruhe
    Posts
    7,827
     
    Sektenspinner is offline
    Quote Originally Posted by Milky-Way View Post
    Muss ich beides mal testen. Was meinst du mit "in schneller Abfolge"? Also einfach solange mit Pfeilen geschossen, bis der NPC tot war?
    Ich weiß es nicht mehr genau, aber ich hatte ein Problem, dass nur auftrat, wenn man immer weiter Pfeile in den am Boden liegenden Npc feuert. Vermutlich ist es mir gelungen den Npc nochmal zu töten, während er gerade von ZS_Dead in ZS_Unconscious wechseln will. Und in diesem Fall wurde dann ZS_Dead nicht nochmal neu betreten (und bei einem toten Npc wird irgendwann die Loop Funktion des Zustands nicht mehr aufgerufen). Aber mein Ansatz war auch etwas anders als deiner.
    Für Spieler:
    Velaya # Velaya in English # Exodus Demo # Irrwichtel
    Tools für Modder:
    DiaDepp # DOPA-PARTER # zSlang
    Scripte für Modder:
    Ikarus Skriptpaket # Floats # Broadcasts

  13. View Forum Posts #13 Reply With Quote
    Waldläufer
    Join Date
    Mar 2011
    Posts
    139
     
    Maxetar is offline
    Auch ich muss mich für dieses Feature bedanken, das mit Sicherheit Einzug in meine Mod erhalten wird.
    Last edited by Maxetar; 18.04.2011 at 19:34.

  14. View Forum Posts #14 Reply With Quote
    now also in your universe  Milky-Way's Avatar
    Join Date
    Jun 2007
    Posts
    13,187
     
    Milky-Way is offline
    Ich habe jetzt mal mit Pfeil und Bogen und Eisblock getestet.

    Wenn man einen unsterblichen NPC mit Pfeil und Bogen besiegt und dann versucht auf den bewusstlosen NPC zu schießen, passiert nichts. Man muss allerdings den Bogen nochmal wegstecken und wieder ziehen, um damit wieder schießen zu können (hängt wohl mit den Overlays zusammen). Schießt man mit dem neu gezogenen Bogen auf einen am Boden liegenden unsterblichen Npc, dann fällt dieser nochmal hin und liegt bewusstlos am Boden, man kann nicht weiter auf ihn einschießen (gleicher Fall wie beim ersten Töten).

    Beim Eisblock funktioniert eigentlich alles. Stirbt jemand durch den Frost, so bleibt er allerdings noch stehen, bis die Frostzeit abgelaufen ist (man kann ihn in dieser Zeit auch schon plündern) und geht dann, bewusstlos, zu Boden. Wirkt man dann noch einen Zauber auf ihn, bleibt er am Boden, steht aber nach einer Weile ganz normal wieder auf.

  15. View Forum Posts #15 Reply With Quote
    Legende der Amazonen Bisasam's Avatar
    Join Date
    Dec 2006
    Location
    Meine Faust in Sinis Gesicht
    Posts
    8,687
     
    Bisasam is offline
    doing, hatte den sinn hier hinter vor 1 1/2 jahren garnicht verstanden. bei mir muss man einen storyrelevanten npc umhauen, darf ihn aber nicht töten. da sich das jedoch kaum ein spieler wird verkneifen können, muss das hier dran.
    nochmal danke milky, manche sachen weiß man wohl erst hinterher richtig zu nutzen


    "Das erinnert doch sehr erfreulich an das, was man sich als Gothicfan wünscht!"
    -Korallenkette

  16. View Forum Posts #16 Reply With Quote
    now also in your universe  Milky-Way's Avatar
    Join Date
    Jun 2007
    Posts
    13,187
     
    Milky-Way is offline
    Na das ist doch schön

    Melde dich bitte bei jeglichen Problem hier, das ist leider nicht sonderlich gut getestet bisher.

  17. View Forum Posts #17 Reply With Quote
    Serima Fisk2033's Avatar
    Join Date
    Dec 2010
    Location
    Dresden
    Posts
    5,334
     
    Fisk2033 is online now
    Ich werde mir das die Tage auch mal anschauen,weil ich es auch brauche. Ich wollte das jetzt erst über irgendeine Schleife regeln lassen, die nach dem Kampf dem NPC seine Unsterblichkeit zurück gibt. Oo
    Danke !

  18. View Forum Posts #18 Reply With Quote
    Ritter Moe's Avatar
    Join Date
    Jan 2009
    Location
    Oberösterreich
    Posts
    1,767
     
    Moe is offline
    Ich hab ein interessantes Phänomen mit der Alternativen Unsterblichkeit.

    Die MDS Overlay für den Finishing Move nutze ich nicht.

    Wenn ich einen NPC von vorne absteche, dann funktioniert es. Er bekommt wieder einen HP.
    Also mit von vorne meine ich der NPC liegt auf dem Rücken.


    Aber wenn ich ihn von hinten absteche, dann funktioniert es nicht. Er bekommt keine HP.
    Mit von hinten meine ich der Npc liegt auf dem Bauch.

    Lol was, warum das?

  19. View Forum Posts #19 Reply With Quote
    Ehrengarde lali's Avatar
    Join Date
    Feb 2016
    Posts
    2,846
     
    lali is offline
    Weil im Skript speziell auf diesen State verwiesen wird, wenn der NPC auf dem Rücken liegt, ohne den Fall zu berücksichtigen, wenn er auf dem Bauch liegt.

  20. View Forum Posts #20 Reply With Quote
    Ritter Moe's Avatar
    Join Date
    Jan 2009
    Location
    Oberösterreich
    Posts
    1,767
     
    Moe is offline
    Quote Originally Posted by lali View Post
    Weil im Skript speziell auf diesen State verwiesen wird, wenn der NPC auf dem Rücken liegt, ohne den Fall zu berücksichtigen, wenn er auf dem Bauch liegt.
    Wo wird im Skript speziell auf diesen State verwiesen?

Page 1 of 2 12 Last »

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
Impressum | Link Us | intern
World of Gothic © by World of Gothic Team
Gothic, Gothic 2 & Gothic 3 are © by Piranha Bytes & Egmont Interactive & JoWooD Productions AG, all rights reserved worldwide