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

 

Ergebnis 1 bis 5 von 5
  1. Beiträge anzeigen #1 Zitieren
    Lehrling
    Registriert seit
    Aug 2023
    Beiträge
    44
     
    Paraguru ist offline

    Orkanimationen aus Gothic 1

    Hey Leute,

    ich würde gerne die Orkanimationen aus Gothic 1 zu Gothic 2 bringen. Vor allem die Animationen von Tanzen, Beten und Trommeln finde ich super.

    Ich habe bereits im Gothic 1 MDK gestöbert (da gibt es z.B. auch eine Orc_TA.d) aber habe noch nicht herausbekommen, wie ich die nun in Gothic 2 lauffähig bekomme.

    Aus der Modderdatenbank habe ich die Pakete Orkanimation 1 und 2 bereits integriert und diese funktionieren auch super. So können Orks nun auch menschliche Gegenstände benutzen. Aber es wäre auch schön, die alten Animationen zu nutzen.

    Hat jemand eine Idee zur Umsetzung?

  2. Beiträge anzeigen #2 Zitieren
    Ehrengarde Avatar von neocromicon
    Registriert seit
    Jan 2019
    Beiträge
    2.896
     
    neocromicon ist offline
    Zitat Zitat von Paraguru Beitrag anzeigen
    Hey Leute,

    ich würde gerne die Orkanimationen aus Gothic 1 zu Gothic 2 bringen. Vor allem die Animationen von Tanzen, Beten und Trommeln finde ich super.

    Ich habe bereits im Gothic 1 MDK gestöbert (da gibt es z.B. auch eine Orc_TA.d) aber habe noch nicht herausbekommen, wie ich die nun in Gothic 2 lauffähig bekomme.

    Aus der Modderdatenbank habe ich die Pakete Orkanimation 1 und 2 bereits integriert und diese funktionieren auch super. So können Orks nun auch menschliche Gegenstände benutzen. Aber es wäre auch schön, die alten Animationen zu nutzen.

    Hat jemand eine Idee zur Umsetzung?
    Damit kannst du Animationen von G1 zu G2 konvertieren: Release GothicZEN v0.4, GothicAnims v0.1 · withmorten/GothicTools · GitHub

  3. Beiträge anzeigen #3 Zitieren
    Lehrling
    Registriert seit
    Aug 2023
    Beiträge
    44
     
    Paraguru ist offline
    Ich kann beide Programme nicht ausführen. Es öffnet sich kurz ein Fenster und dann passiert nichts mehr ... :/

    Aber ich habe danach gesehen, dass die Animationen für Beten und Tanzen auch in Gothic 2 vorhanden sind. Über die Konsole kann ich diese auch abspielen. Dann dachte ich mir, ich kopiere die Daten Orc_TA.d, ZS_Orc_TA.d sowie Orc_Perc.d von Gothic 1 zu Gothic 2 und trage diese in die Gothic.src ein. Allerdings kommen dann Fehlermeldungen, da manche Variablen natürlich unbekannt sind. Dabei fiel mir dann auf, dass das alles wohl mit dem Wahrnehmungssystem (Perceptions) zusammenhängt und das ganze System für Gothic 2 umgeschrieben wurde ...

    Gibt es eine Möglichkeit, die unten genannten Tagesabläufe von Gothic 1 kompatibel mit Gothic 2 zu machen, ohne zu viel umschreiben zu müssen? Oder hat das schon mal jemand gemacht? ...


    TA_Orc.d
    Code:
    func void TA_Orc_Stonemill        ( var int start_h, var int  start_m, var int stop_h, var int stop_m, VAR string waypoint)    {TA_Min     (self,    start_h,start_m, stop_h, stop_m, ZS_Orc_Stonemill,         waypoint); };
    func void TA_Orc_Stomper        ( var int start_h, var int start_m, var  int stop_h, var int stop_m, VAR string waypoint)    {TA_Min    (self,     start_h,start_m, stop_h, stop_m, ZS_Orc_Stomper,        waypoint); };
    
    func void TA_Orc_Drum            ( var int start_h, var int start_m, var  int stop_h, var int stop_m, VAR string waypoint)    {TA_Min    (self,     start_h,start_m, stop_h, stop_m, ZS_Orc_Drum,            waypoint); };
    func void TA_Orc_Sleep            ( var int start_h, var int start_m,  var int stop_h, var int stop_m, VAR string waypoint)    {TA_Min     (self,  start_h,start_m, stop_h, stop_m, ZS_Orc_Sleep,             waypoint); };
    func void TA_Orc_Pray            ( var int start_h, var int start_m, var  int stop_h, var int stop_m, VAR string waypoint)    {TA_Min    (self,     start_h,start_m, stop_h, stop_m, ZS_Orc_Pray ,            waypoint);  };
    
    func void TA_Orc_Eat            ( var int start_h, var int start_m, var  int stop_h, var int stop_m, VAR string waypoint)    {TA_Min    (self,   start_h,start_m, stop_h, stop_m, ZS_Orc_Eat,            waypoint); };
    func void TA_Orc_DrinkAlcohol    ( var int start_h, var int start_m, var  int stop_h, var int stop_m, VAR string waypoint)    {TA_Min    (self,     start_h,start_m, stop_h, stop_m, ZS_Orc_DrinkAlcohol,    waypoint); };
    func void TA_Orc_EatAndDrink    ( var int start_h, var int start_m, var  int stop_h, var int stop_m, VAR string waypoint)    {TA_Min    (self,     start_h,start_m, stop_h, stop_m, ZS_Orc_EatAndDrink,    waypoint); };
    
    func void TA_Orc_Speech            ( var int start_h, var int start_m,  var int stop_h, var int stop_m, VAR string waypoint)    {TA_Min     (self,  start_h,start_m, stop_h, stop_m, ZS_Orc_Speech,             waypoint); };
    func void TA_Orc_SitOnFloor        ( var int start_h, var int start_m,  var int stop_h, var int stop_m, VAR string waypoint)    {TA_Min     (self,    start_h,start_m, stop_h, stop_m, ZS_Orc_SitOnFloor,         waypoint); };
    func void TA_Orc_Dance            ( var int start_h, var int start_m,  var int stop_h, var int stop_m, VAR string waypoint)    {TA_Min     (self,    start_h,start_m, stop_h, stop_m, ZS_Orc_Dance,             waypoint); };
    
    func void TA_Orc_WalkAround        ( var int start_h, var int start_m,  var int stop_h, var int stop_m, VAR string waypoint)    {TA_Min     (self,    start_h,start_m, stop_h, stop_m, ZS_Orc_WalkAround,         waypoint); };
    func void TA_Orc_GotoWP            ( var int start_h, var int start_m,  var int stop_h, var int stop_m, VAR string waypoint)    {TA_Min     (self,    start_h,start_m, stop_h, stop_m, ZS_Orc_GotoWP,             waypoint); };
    
    func void TA_Orc_GuardSleepy    ( var int start_h, var int start_m, var  int stop_h, var int stop_m, VAR string waypoint)    {TA_Min    (self,     start_h,start_m, stop_h, stop_m, ZS_Orc_GuardSleepy,    waypoint); };
    func void TA_Orc_Guard            ( var int start_h, var int start_m,  var int stop_h, var int stop_m, VAR string waypoint)    {TA_Min     (self,    start_h,start_m, stop_h, stop_m, ZS_Orc_Guard,             waypoint); };
    
    
    //func void TA_Orc_HangAround        ( var int start_h, var int start_m,  var int stop_h, var int stop_m, VAR string waypoint)    {TA_Min     (self,  start_h,start_m, stop_h, stop_m, ZS_Orc_HangAround,         waypoint); };
    //func void TA_Orc_Lookout            ( var int start_h, var int  start_m, var int stop_h, var int stop_m, VAR string waypoint)    {TA_Min     (self,    start_h,start_m, stop_h, stop_m, ZS_Orc_Lookout,         waypoint); };
    //func void TA_Orc_LookoutWithDog    ( var int start_h, var int start_m,  var int stop_h, var int stop_m, VAR string waypoint)    {TA_Min     (self,    start_h,start_m, stop_h, stop_m, ZS_Orc_LookoutWithDog,     waypoint); };
    //func void TA_Orc_Listen            ( var int start_h, var int start_m,  var int stop_h, var int stop_m, VAR string waypoint)    {TA_Min     (self,  start_h,start_m, stop_h, stop_m, ZS_Orc_Listen,             waypoint); };

    ZS_Orc_TA.d
    Code:
    //    ######################################################################
    //
    //        ZS_Orc-TA-Funktionen
    //
    //        Diese Datei enthält ca. 1 Millionen lustiger Orc-Ta Zustände    
    //        von Orc_DrinkAlcohol bis Orc_Drum.
    //
    //    ######################################################################
    
    
    //#######################################################
    //        B_Orc_Idle_Ani
    //#######################################################
    // spielt Anis ab, wenn der Ork nur dumm herumSTEHT
    func void B_Orc_Idle_Ani()
    {
        var int ani;
        ani = Hlp_Random( 130 );
        if ( ani < 10 )
        {
            AI_PlayAni( self, "T_PERCEPTION" );
        }
        else if ( ani < 20 )
        {
            AI_PlayAni( self, "T_WARN" );
        }
        else if ( ani < 30 )
        {
            AI_PlayAni( self, "T_ANGRY" );
        }
        else if ( ani < 40 )
        {
            AI_PlayAni( self, "T_FRIGHTEND" );
        }
        else if ( ani < 50 )
        {
            AI_PlayAni( self, "T_HAPPY" );
        }
        else if ( ani < 60 )
        {
            AI_PlayAni( self, "T_DIALOGGESTURE_01" );
        }
        else if ( ani < 70 )
        {
            AI_PlayAni( self, "T_DIALOGGESTURE_02" );
        }
        else if ( ani < 80 )
        {
            AI_PlayAni( self, "T_DIALOGGESTURE_03" );
        }
        else if ( ani < 90 )
        {
            AI_PlayAni( self, "T_DIALOGGESTURE_04" );
        }
        else if ( ani < 100 )
        {
            AI_PlayAni( self, "T_DIALOGGESTURE_05" );
        }
        else if ( ani < 110 )
        {
            AI_PlayAni( self, "T_DIALOGGESTURE_06" );
        }
        else if ( ani < 120 )
        {
            AI_PlayAni( self, "T_DIALOGGESTURE_07" );
        }
        else if ( ani < 130 )
        {
            AI_PlayAni( self, "T_DIALOGGESTURE_08" );
        };
        
        AI_Wait( self, 1 );
    };
    
    
    
    //#####################################################
    //        MOBSI: STONEMILL
    //#####################################################
    func void ZS_Orc_Stonemill()
    {
        PrintDebugNpc( PD_ZS_FRAME,"ZS_Orc_Stonemill" );
        
        if ( Npc_GetBodyState( self ) != BS_MOBINTERACT )
        {
            AI_SetWalkmode( self, NPC_WALK );        // Walkmode für den Zustand
            if ( Hlp_StrCmp( Npc_GetNearestWp(self), self.wp) == 0 )
            {
                AI_GotoWP( self, self.wp );
            };
        };
        
        OrcDefaultPercDoing();
    };
    
    func void ZS_Orc_Stonemill_Loop()
    {
        PrintDebugNpc( PD_ZS_FRAME,"ZS_Orc_Stonemill_Loop" );
    
        AI_UseMob( self, "STONEMILL", 1 );
        AI_UseMob( self, "STONEMILL", 0 );
        
        //CS: Orc muss sich jede Runde einmal ab- und wieder anmelden, damit er mit dem Mobsi synchronisiert bleibt
        AI_UseMob( self, "STONEMILL", -1 ); 
    };
    
    func void ZS_Orc_Stonemill_End()
    {
        PrintDebugNpc( PD_ZS_FRAME,"ZS_Orc_Stonemill_End" );
        Npc_ClearAIQueue( self );
        AI_UseMob( self, "STONEMILL", -1 );
    };
    
    
    
    //#####################################################
    //        MOBSI: STOMPER
    //#####################################################
    func void ZS_Orc_Stomper()
    {
        PrintDebugNpc( PD_TA_FRAME,"ZS_Orc_Stomper" );
        
        if ( Npc_GetBodyState( self) != BS_MOBINTERACT )
        {
            AI_SetWalkmode( self, NPC_WALK );        // Walkmode für den Zustand
            if ( Hlp_StrCmp( Npc_GetNearestWp(self), self.wp) == 0 )
            {
                AI_GotoWP( self, self.wp );
            };
        };
    
        OrcDefaultPercDoing();
    };
    
    func void ZS_Orc_Stomper_Loop()
    {
        PrintDebugNpc( PD_TA_FRAME,"ZS_Orc_Stomper_Loop" );
        AI_UseMob( self, "STOMPER", 1 );        //Ani anwerfen
        AI_UseMob( self, "STOMPER", 0 );        //Ani anwerfen
        
        //CS: Orc muss sich jede Runde einmal ab- und wieder anmelden, damit er mit dem Mobsi synchronisiert bleibt
        AI_UseMob( self, "STOMPER", -1 );     
    };
    
    func void ZS_Orc_Stomper_End()
    {
        PrintDebugNpc( PD_TA_FRAME,"ZS_Orc_Stomper_End" );
        Npc_ClearAIQueue( self );
        AI_UseMob( self, "STOMPER", -1 );                        //Schluss jetzt mit dem Quatsch
    };
    
    
    
    //#######################################################
    //        ZS_Orc_Eat
    //#######################################################
    func void ZS_Orc_Eat ()
    {
        PrintDebugNpc( PD_ZS_FRAME, "ZS_Orc_Eat" );
        
        AI_SetWalkmode (self,NPC_WALK);    // Walkmode für den Zustand
        if ( !Npc_IsOnFP( self, "STAND" ) )
        {
            AI_GotoWP(self, self.wp);               // Gehe zum Tagesablaufstart
        };
        
        OrcDefaultPerc();
    };
    
    
    func int ZS_Orc_Eat_Loop()
    {
        PrintDebugNpc( PD_ZS_FRAME, "ZS_Orc_Eat_Loop" );
        
        B_GotoFP    (self, "STAND");
        
        B_Orc_ItemEat();
        var float pause;
        pause = intToFloat( Hlp_Random( 5 ) + 2 );
        AI_Wait( self, pause );
        
        return 0;    // bleibe in Loop
    };
    
    
    func void ZS_Orc_Eat_End ()
    {
        PrintDebugNpc (PD_ZS_FRAME,"ZS_Eat_End");
        Npc_ClearAIQueue( self );
    };
    
    
    //#######################################################
    //        ZS_Orc_Sleep
    //#######################################################
    
    func void ZS_Orc_Sleep ()
    {
        PrintDebugNpc( PD_ZS_FRAME, "ZS_Orc_Sleep" );
    
        if ( !C_BodyStateContains( self, BS_MOBINTERACT ) )
        {
            if ( Hlp_StrCmp( Npc_GetNearestWP( self ), self.wp ) == 0 )
            {
                AI_GotoWP    (self, self.wp);
            };
            AI_UnequipWeapons( self );
            AI_UseMob( self, "BEDLOW", 1 );
        };
        
        OrcLightSleepPerc();
    };
    
    
    func int ZS_Orc_Sleep_Loop ()
    {
        PrintDebugNpc( PD_ZS_LOOP, "ZS_ORC_Sleep_Loop" );
        
        //    Wir dürfen an dieser Stelle weder davon ausgehen, das der NPC seinen wegpunkt schon erreicht 
        //    hat und im Bett liegt. Deshalb warten wir bis er den BodyState BS_MOBINTERACT erreicht hat!
        if ( C_BodyStateContains( self, BS_MOBINTERACT ) ) 
        {
            //    Hier könnte man Zufallsanimationen abspielen wenn sie existieren würden.
            
        };
        return 0;
    };
    
    func void ZS_Orc_Sleep_End ()
    {
        PrintDebugNpc( PD_ZS_FRAME, "ZS_Orc_Sleep_End" );    
        Npc_ClearAIQueue( self );
        
        //    Mobbenutzung beenden
        AI_UseMob( self, "BEDLOW", -1 );
        
        //    Aufwachgeräusche von sich geben            
        B_Say( self, NULL, "$AWAKE" );
        
        //    Waffen anlegen
        AI_EquipBestMeleeWeapon( self );
        AI_EquipBestRangedWeapon( self );
    };
    
    
    //#######################################################
    //    ZS_Orc_Pray
    //#######################################################
    func void ZS_Orc_Pray ()
    {
        PrintDebugNpc( PD_ZS_FRAME, "ZS_Orc_Pray" );
        
        OrcDefaultPercDoing();
    
        AI_SetWalkmode( self, NPC_WALK );        // Walkmode für den Zustand
        if ( !Npc_IsOnFP( self, "PREY" ) )
        {
            AI_GotoWP(self, self.wp);               // Gehe zum Tagesablaufstart
        };
    };
    
    func void ZS_Orc_Pray_Loop ()
    {
        PrintDebugNpc( PD_ZS_LOOP, "ZS_Orc_Pray_Loop" );
    
         B_GotoFP    (self, "PREY");
     
           if ( Npc_GetBodyState( self ) != BS_SIT )
           {
               AI_PlayAniBS( self, "T_STAND_2_PRAY", BS_SIT );
           }
           else
           {
               AI_PlayAniBS( self, "T_PRAY_RANDOM", BS_SIT );
           };
    
        AI_Wait( self, 1 );    
    };
    
    func void ZS_Orc_Pray_End ()
    {
        PrintDebugNpc( PD_ZS_FRAME, "ZS_Orc_Pray_End" );
        Npc_ClearAIQueue( self );
        AI_PlayAniBS( self, "T_PRAY_2_STAND", BS_STAND );
    };
    
    
    //#######################################################
    //        ZS_Orc_Drum
    //#######################################################
    func void ZS_Orc_Drum ()
    {
        PrintDebugNpc( PD_ZS_FRAME, "ZS_Orc_Drum" );
        
        //    Zum angegebenen Wegpunkt gehen und mit trommeln anfangen
        if ( Npc_GetBodyState( self) != BS_MOBINTERACT )
        {
            AI_SetWalkmode( self, NPC_WALK );
            if ( Hlp_StrCmp( Npc_GetNearestWp(self), self.wp) == 0 )
            {
                AI_GotoWP( self, self.wp );
            };
            AI_UseMob( self, "DRUM", 1 );        //Ani anwerfen
        };
        
        OrcDefaultPercDoing();
    };
    
    func int ZS_Orc_Drum_Loop ()
    {
        PrintDebugNpc( PD_ZS_LOOP, "ZS_Orc_Drum_Loop" );
        
        if ( Npc_GetBodyState(self) == BS_MOBINTERACT_INTERRUPT )
        {
            var int random;
            random = Hlp_Random( 15 );
            if ( random < 5 )
            {
                AI_PlayAniBS( self, "T_ORCDRUM_RANDOM_1", BS_MOBINTERACT_INTERRUPT );
            }
            else if ( random < 10 )
            {
                AI_PlayAniBS( self, "T_ORCDRUM_RANDOM_2", BS_MOBINTERACT_INTERRUPT );
            }
            else
            {
                AI_PlayAniBS( self, "T_ORCDRUM_RANDOM_3", BS_MOBINTERACT_INTERRUPT );
            };
        };
        
        return LOOP_CONTINUE;
    };
    
    func int ZS_Orc_Drum_End ()
    {
        PrintDebugNpc( PD_ZS_FRAME, "ZS_Orc_Drum_End" );
        Npc_ClearAIQueue( self );
    
        //nicht mehr Trommeln
        AI_UseMob( self, "DRUM", -1 );    
    };
    
    //#######################################################
    //        ZS_Orc_Speech
    //#######################################################
    func void ZS_Orc_Speech ()
    {
        PrintDebugNpc( PD_ZS_FRAME, "ZS_Orc_Speech" );
        
        AI_SetWalkmode (self,NPC_WALK);        // Walkmode für den Zustand
        if ( !Npc_IsOnFP( self, "STAND" ) )
        {
            AI_GotoWP(self, self.wp);               // Gehe zum Tagesablaufstart
        };
        
        OrcDefaultPerc();
    };
    
    func int ZS_Orc_Speech_Loop ()
    {
        PrintDebugNpc    (PD_ZS_LOOP, "ZS_Orc_Speech_Loop" );
        
         B_GotoFP        (self, "STAND");
         
        // Random-Anis abspielen
        var int ani;
        ani = Hlp_Random( 30 );
        if ( ani == 1 )
        {
            AI_PlayAni( self, "T_DIALOGGESTURE_01" );
        }
        else if ( ani == 2 )
        {
            AI_PlayAni( self, "T_DIALOGGESTURE_02" );
        }
        else if ( ani == 3 )
        {
            AI_PlayAni( self, "T_DIALOGGESTURE_03" );
        }
        else if ( ani == 4 )
        {
            AI_PlayAni( self, "T_DIALOGGESTURE_04" );
        }
        else if ( ani == 5 )
        {
            AI_PlayAni( self, "T_DIALOGGESTURE_05" );
        }
        else if ( ani == 6 )
        {
            AI_PlayAni( self, "T_DIALOGGESTURE_06" );
        }
        else if ( ani == 7 )
        {
            AI_PlayAni( self, "T_DIALOGGESTURE_07" );
        }
        else if ( ani == 8 )
        {
            AI_PlayAni( self, "T_DIALOGGESTURE_08" );
        };
        
        AI_Wait( self, 1 );
    };
    
    func void ZS_Orc_Speech_End ()
    {
        PrintDebugNpc( PD_TA_FRAME, "ZS_Orc_Speech_End" );
           Npc_ClearAIQueue( self );
    };
    
    
    
    //#######################################################
    //        ZS_Orc_GotoWP
    //#######################################################
    func void ZS_Orc_GotoWP()
    {    
        PrintDebugNpc( PD_ZS_FRAME, "ZS_Orc_GotoWP" );                
        
        AI_SetWalkmode( self, NPC_WALK );
        AI_GotoWP( self, self.wp);
        AI_AlignToWP( self );                //Richte Dich aus
        
        OrcDefaultPerc();
    };
    
    func void ZS_Orc_GotoWp_Loop()
    {
        PrintDebugNpc( PD_ZS_LOOP, "ZS_Orc_GotoWP_Loop" );
        
        //irgendwelche Anis
        if ( Hlp_Random( 250 ) < 10 )
        {
            B_Orc_Idle_Ani();
        };
    
    };
    
    func void ZS_Orc_GotoWP_End()
    {    
        PrintDebugNpc( PD_ZS_FRAME, "ZS_Orc_GotoWP_End" );                
        Npc_ClearAIQueue( self );
    };
    
    
    //#######################################################
    //        ZS_Orc_WalkAround
    //########################################################
    func void ZS_Orc_WalkAround()
    {
        PrintDebugNpc (PD_ZS_FRAME,"ZS_Orc_WalkAround");
    
        OrcDefaultPerc();
        
        AI_SetWalkmode( self, NPC_WALK );    // Walkmode für den Zustand
        if ( !Npc_IsOnFP( self, "FP_ORC_STAND" ) )
        {
            AI_GotoWP(self, self.wp);               // Gehe zum Tagesablaufstart
        };
        if ( Wld_IsFPAvailable( self, "FP_ORC_STAND_A" ) )
        {
            AI_GotoFP( self, "FP_ORC_STAND_A" );
        } 
        else if ( Wld_IsFPAvailable( self, "FP_ORC_STAND_B" ) )
        {
            AI_GotoFP( self, "FP_ORC_STAND_B" );
        } 
        else if ( Wld_IsFPAvailable( self, "FP_ORC_STAND_C" ) )
        {
            AI_GotoFP( self, "FP_ORC_STAND_C" );
        };
        AI_AlignToFP( self );                //Richte Dich aus
        
    };
     
    func void ZS_Orc_WalkAround_Loop()
    {
        PrintDebugNpc(PD_TA_LOOP,"ZS_Orc_WalkAround_Loop");
    
        var string wp1;
        var string wp2;
        wp1 = Npc_GetNearestWP( self );
        wp2 = Npc_GetNextWP( self );
        
        if ( !Hlp_StrCmp( wp1, self.wp )  &&  Hlp_Random( 10 ) < 5 )
        {
            PrintDebugNpc(PD_ZS_FRAME,"ZS_Orc_WalkAround: Goto Nearest");
            AI_GotoWP( self, wp1 );
            self.wp = wp1;
        }
        else if ( !Hlp_StrCmp( wp2, self.wp ) )
        {
            PrintDebugNpc(PD_ZS_FRAME,"ZS_Orc_WalkAround: Goto Next");
            AI_GotoWP( self, wp2 );
            self.wp = wp2;
        };
        
        if ( Hlp_Random( 80 ) < 10 )
        {
            PrintDebugNpc(PD_ZS_FRAME,"ZS_Orc_WalkAround: Idle Ani");
            B_Orc_Idle_Ani();
            AI_Wait( self, 2 );
            return;
        };
        
        if ( Hlp_Random( 50 ) < 5 )
        {
            PrintDebugNpc(PD_ZS_FRAME,"ZS_Orc_WalkAround: Wait");
            var float f;
            f = intToFloat( Hlp_Random( 4 ) );
            AI_Wait( self, f );
        };
            
    };
    
    func void ZS_Orc_WalkAround_End()
    {
        PrintDebugNpc (PD_TA_FRAME,"ZS_Orc_WalkAround_End");
        Npc_ClearAIQueue( self );
    };
    
    
    //#########################################################
    //        ZS_Orc_DrinkAlcohol
    //#########################################################
    func void ZS_Orc_DrinkAlcohol ()
    {
        PrintDebugNpc( PD_ZS_FRAME, "ZS_Orc_DrinkAlcohol" );
        
        OrcDefaultPerc();
    
        AI_SetWalkmode (self,NPC_WALK);    // Walkmode für den Zustand
        if ( !Npc_IsOnFP( self, "STAND" ) )
        {
            AI_GotoWP(self, self.wp);               // Gehe zum Tagesablaufstart
        };
    };
    
    
    func int ZS_Orc_DrinkAlcohol_Loop()
    {
        PrintDebugNpc( PD_ZS_FRAME, "ZS_Orc_DrinkAlcohol_Loop" );
        
        B_GotoFP        (self, "STAND");
        
        B_Orc_ItemPotion();
        var float pause;
        pause = intToFloat( Hlp_Random( 5 ) + 2 );
        AI_Wait( self, pause );
        
        return 0;    // bleibe in Loop
    };
    
    
    func void ZS_Orc_DrinkAlcohol_End ()
    {
        PrintDebugNpc (PD_ZS_FRAME,"ZS_DrinkAlcohol_End");
        Npc_ClearAIQueue( self );
    };
    
    
    
    //#######################################################
    //        ZS_Orc_Dance
    //#######################################################
    func void ZS_Orc_Dance()
    {
        PrintDebugNpc( PD_ZS_FRAME, "ZS_Orc_Dance" );
        
        //    Zum angegebenen Wegpunkt gehen
        AI_SetWalkmode( self, NPC_WALK );
        if ( !Npc_IsOnFP( self, "DANCE" ) )
        {
            AI_GotoWP(self, self.wp);               // Gehe zum Tagesablaufstart
        };
    
        OrcDefaultPercDoing();
    };
    
    func void ZS_Orc_Dance_Loop()
    {
        PrintDebugNpc( PD_ZS_LOOP, "ZS_Orc_Dance_Loop" );
        
        B_GotoFP        (self, "DANCE");
    
        if ( Hlp_Random( 10 ) < 5 )
        {
            PrintDebugNpc( PD_ZS_FRAME,"ZS_Orc_Dance_Loop: T_DANCE" );
            AI_PlayAni( self, "T_DANCE" );
        }
        else
        {
            PrintDebugNpc( PD_ZS_FRAME,"ZS_Orc_Dance_Loop: T_DANCE_RANDOM_1" );
            AI_PlayAni( self, "T_DANCE_RANDOM_1" );
        };
    
    };
    
    func void ZS_Orc_Dance_End()
    {
        PrintDebugNpc( PD_ZS_FRAME, "ZS_Orc_Dance_End" );
        Npc_ClearAIQueue( self );
        AI_StandUp( self );
    };
    
    
    
    //#######################################################
    //        ZS_Orc_EatAndDrink
    //#######################################################
    func void ZS_Orc_EatAndDrink()
    {
        PrintDebugNpc(PD_ZS_FRAME,"ZS_Orc_EatAndDrink");
        
        //gehe zum WP    
        AI_SetWalkmode( self, NPC_WALK );    // Walkmode für den Zustand
        if ( !Npc_IsOnFP( self, "STAND" ) )
        {
            AI_GotoWP(self, self.wp);               // Gehe zum Tagesablaufstart
        };
        
        OrcDefaultPerc();
    };
    
    func void ZS_Orc_EatAndDrink_Loop()
    {
        PrintDebugNpc(PD_ZS_FRAME,"ZS_Orc_EatAndDrink_Loop");
        
        B_GotoFP        (self, "STAND");
    
        //Essen oder Trinken?
        if ( Hlp_Random( 10 ) < 5 )
        {
            B_Orc_ItemEat();
        }
        else
        {
            B_Orc_ItemPotion();
        };
        var float pause;
        pause = intToFloat( Hlp_Random( 5 ) + 2 );
        AI_Wait( self, pause );
    };
    
    func void ZS_Orc_EatAndDrink_End()
    {
        PrintDebugNpc(PD_ZS_FRAME,"ZS_Orc_EatAndDrink_End");
        Npc_ClearAIQueue( self );
    };
    
    
    //#######################################################
    //        ZS_Orc_GuardSleepy
    //#######################################################
    func void ZS_Orc_GuardSleepy()
    {
        PrintDebugNpc( PD_TA_FRAME, "ZS_Orc_GuardSleepy" );
        AI_SetWalkmode( self, NPC_WALK );    // Walkmode für den Zustand
        if ( !Npc_IsOnFP( self, "SIT" ) )
        {
            AI_GotoWP(self, self.wp);               // Gehe zum Tagesablaufstart
        };
        
        OrcDefaultPerc();
    };
    
    func void ZS_Orc_GuardSleepy_Loop()
    {
        PrintDebugNpc    (PD_ZS_FRAME, "ZS_Orc_GuardSleepy_Loop" );
    
        B_GotoFP        (self, "SIT");
    
        //evtl. Ani
        if ( !C_BodyStateContains( self, BS_SIT )  &&  Hlp_Random( 500 ) < 10 )
        {
            PrintDebugNpc( PD_ZS_FRAME, "ZS_Orc_GuardSleepy_Loop: stehende Ani" );
            B_Orc_Idle_Ani();
            return;
        };
       
        //evtl. hinsetzen
        if ( !C_BodyStateContains( self, BS_SIT )  &&  Hlp_Random( 600 ) < 10 )
        {
            PrintDebugNpc( PD_ZS_FRAME, "ZS_Orc_GuardSleepy_Loop: hinsetzen" );
            AI_PlayAniBS( self, "T_STAND_2_GUARDSIT", BS_SIT );
            AI_Wait( self, 2 );
            return;
        };
    
        //evtl. einschlafen beim Sitzen
        if ( C_BodyStateContains( self, BS_SIT )  &&  Hlp_Random( 700 ) < 10 )
        {
            PrintDebugNpc( PD_ZS_FRAME, "ZS_Orc_GuardSleepy_Loop: einschlafen im Sitzen" );
            AI_PlayAniBS( self, "T_GUARDSIT_2_GUARDSLEEP",BS_SIT );
            var float sleep;
            sleep = intToFloat( Hlp_Random( 5 ) + 15 );
            AI_Wait( self, sleep );
            AI_PlayAniBS( self, "T_GUARDSLEEP_2_GUARDSIT",BS_SIT );
            return;
        };
    };
    
    func void ZS_Orc_GuardSleepy_End()
    {
        PrintDebugNpc( PD_TA_FRAME, "ZS_Orc_GuardSleepy_End" );
    };
    
    
    //#######################################################
    //        ZS_Orc_Guard
    //#######################################################
    func void ZS_Orc_Guard()
    {
        PrintDebugNpc    (PD_TA_FRAME, "ZS_Orc_Guard" );
    
        OrcDefaultPerc    ();
    
        B_FullStop        (self);
        
        AI_SetWalkmode    (self, NPC_WALK);
    
        if ( !Npc_IsOnFP(self, "FP_ORC_GUARD") )
        {
            AI_GotoWP    (self, self.wp); 
        };
        
    };
    
    func void ZS_Orc_Guard_Loop()
    {
        PrintDebugNpc    (PD_ZS_FRAME, "ZS_Orc_Guard_Loop" );
    
        B_GotoFP        (self, "FP_ORC_GUARD");
        AI_AlignToFP    (self);
    
        AI_Wait            (self, 1);
    };
    
    func void ZS_Orc_Guard_End()
    {
        PrintDebugNpc    (PD_TA_FRAME, "ZS_Orc_Guard_End" );
    
        Npc_ClearAIQueue(self);
    };
    
    //#######################################################
    //        ZS_Orc_SitOnFloor
    //#######################################################
    func void ZS_Orc_SitOnFloor()
    {
        PrintDebugNpc(PD_ZS_FRAME,"ZS_Orc_SitOnFloor");
    
    
        Npc_ClearAIQueue( self );
    
        //wenn Ork nicht sitzt, gehe zu TA-Start    
        if ( Npc_GetBodyState( self ) != BS_SIT )
        {
            PrintDebugNpc(PD_ZS_FRAME,"ZS_Orc_SitOnFloor: sitzt nicht....");
            AI_SetWalkmode( self, NPC_WALK);        // Walkmode für den Zustand
            if ( !Npc_IsOnFP( self, "FP_ORC_SIT" ) )
            {
                AI_GotoWP( self, self.wp );        // Gehe zum Tagesablaufstart
            };
    
            if ( Wld_IsFPAvailable( self, "FP_ORC_SIT_A_") )
            {
                AI_GotoFP( self, "FP_ORC_SIT_A_" );
            }
            else if ( Wld_IsFPAvailable( self, "FP_ORC_SIT_B_" ) )
            {
                AI_GotoFP( self, "FP_ORC_SIT_B_" );
            }
            else if ( Wld_IsFPAvailable( self, "FP_ORC_SIT" ) )
            {
                AI_GotoFP( self, "FP_ORC_SIT" );
            };
            
            //wenn angekommen, hinsetzen!
            AI_PlayAniBS( self, "T_STAND_2_GUARDSIT", BS_SIT );
        };
        
        OrcDefaultPerc();
    };
    
    func void ZS_Orc_SitOnFloor_Loop()
    {
        PrintDebugNpc( PD_ZS_FRAME, "ZS_Orc_SitOnFloor_Loop" );
        
        if ( Npc_GetBodyState( self ) == BS_SIT )
        {
            // hier koennten Anis eingesetzt werden.....
        };
    };
    
    func void ZS_Orc_SitOnFloor_End ()
    {
        PrintDebugNpc(PD_ZS_FRAME,"ZS_Orc_SitOnFloor_End");    
        Npc_ClearAIQueue( self );
        AI_PlayAniBS ( self, "T_GUARDSIT_2_STAND", BS_STAND );
    };

    Orc_Perc.d
    Code:
    //#####################################################################################
    //  Orc-Perceptions
    
    func void OrcSlavePerc()
    {
        Npc_PercEnable( self, PERC_ASSESSDAMAGE,        ZS_OrcSlave_AssessDamage    );
        Npc_PercEnable( self, PERC_OBSERVEINTRUDER,        B_OrcSlave_Quicklook        );    
        Npc_PercEnable( self, PERC_DRAWWEAPON,            B_OrcSlave_Quicklook        );
        Npc_PercEnable( self, PERC_ASSESSSURPRISE,        B_OrcSlave_Quicklook        );
    
    };
    
    func void OrcDefaultPerc()
    {
        //der olle Sklave tut fast nix
        if ( self.guild == GIL_ORCSLAVE )
        {
            OrcSlavePerc();
            return;
        }
        else
        {
            ObservingPerception();    // Menschen-AI !!!
        };
    };
    
    
    // beschaeftigt und laesst sich kaum stoeren
    func void OrcDefaultPercDoing()
    {
        //der olle Sklave tut fast nix
        if ( self.guild == GIL_ORCSLAVE )
        {
            OrcSlavePerc();
            return;
        }
        else
        {
            OccupiedPerception();    // Menschen-AI !!!
        };
    };
    
    
    //////////////////////////////////////////////////////////////////////////
    //    DeepSleepPerception
    //    ===================
    //    Minimalste Wahrnehmungen während eines tiefen Schlafes. Diese Jungs
    //    wachen wirklich nur bei Schaden am eigenen Körper auf.
    //////////////////////////////////////////////////////////////////////////
    func void OrcDeepSleepPerc()
    {
        //der olle Sklave tut fast nix
        if ( self.guild == GIL_ORCSLAVE )
        {
            OrcSlavePerc();
            return;
        }
        else
        {
            DeepSleepPerception();    // Menschen-AI !!!
        };
    };    
    
    
    //////////////////////////////////////////////////////////////////////////
    //    LightSleepPerception
    //    ====================
    //    Unruhiger Schlaf, der von der geringsten Störung unterbrochen wird.
    //////////////////////////////////////////////////////////////////////////
    
    func void OrcLightSleepPerc()
    {
        //der olle Sklave tut fast nix
        if ( self.guild == GIL_ORCSLAVE )
        {
            OrcSlavePerc();
            return;
        }
        else
        {
            LightSleepPerception();    // Menschen-AI !!!
        };
    };

  4. Beiträge anzeigen #4 Zitieren
    Ehrengarde Avatar von neocromicon
    Registriert seit
    Jan 2019
    Beiträge
    2.896
     
    neocromicon ist offline
    Das liegt daran das es Konsolen Anwendungen sind, öffne mal die Eingabeaufforderung aka CMD und führe drain die GothicAnims aus, dann wird dir eine Hilfe angezeigt was für ein Befehl du benötigst zum konvertieren.

  5. Beiträge anzeigen #5 Zitieren
    Lehrling
    Registriert seit
    Aug 2023
    Beiträge
    44
     
    Paraguru ist offline
    Achso, das wusste ich nicht. Ich werde mir das jedenfalls in naher Zukunft nochmal intensiv anschauen, wenn ich demnächst an dem Punkt dafür angekommen bin. Ich wollte nur schon mal antesten :O

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
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