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 13 von 13
  1. Homepage besuchen Beiträge anzeigen #1 Zitieren
    Team Velen
    Registriert seit
    Aug 2015
    Beiträge
    952
     
    Bloodfly91 ist offline

    Variable soll sich durch Menüoption ändern, tut es aber nicht so wirklich?

    Hallo,
    ich versuche momentan, einen Schwierigkeitsgrad einzubauen, die Abfrage dazu soll für den Spieler erscheinen, sobald dieser im Menü ein neues Spiel startet. Vor einiger Zeit stand ich schon mal vor einem ähnlichen Problem, allerdings wollte ich damals statt einem Schwierigkeitsgrad einen Monsterrespawn einbauen. Dazu hatte ich auch einen Thread hier im Forum, eine wirkliche Lösung wurde leider nicht gefunden, die Idee wurde aber ohnehin schnell wieder verworfen, da es einige Probleme gab.
    -----
    Ich habe es bereits geschafft, eine funktionierende Abfrage für den Schwierigkeitsgrad im Menü einzubauen. Problem war, dass es scheinbar nicht möglich ist, irgendwie die ausgewählte Option ohne weiteres in die Gothic.ini zu schreiben, wenn man auf einen Schieberegler verzichten will. Ich suchte deshalb einige Zeit hier im Forum, ob eventuell jemand schon mal ein ähnliches Problem hatte. Gefunden habe ich das und es bei mir daraufhin ähnlich eingebaut.

    Hier erstmal der komplette Code:

    Menu_Main.d:
    Code:
    //// NEW GAME
    //
    
    
    instance MENUITEM_MAIN_NEWGAME(C_MENU_ITEM_DEF) 
    {
        backpic        = MENU_ITEM_BACK_PIC;
        text[0]        = "Neues Spiel";
        text[1]        = "Ein neues Spiel beginnen.";  // Kommentar
        
        // Positionen  und Dimensionen    
        posx        = 0;        posy        = MENU_MAIN_Y + MENU_MAIN_DY*0;
        dimx        = 8100;        dimy        =  750;
        
        // Aktionen
        onSelAction[0]    = SEL_ACTION_STARTMENU;
        onSelAction_S[0]= "NEWGAME_DIFFICULTY";
        
        // Weitere Eigenschaften
        flags            = flags | IT_TXT_CENTER;
    };

    Menu_Misc.d:
    Code:
    INSTANCE NEWGAME_DIFFICULTY(C_MENU_DEF) {
        backpic        = MENU_BACK_PIC;
        
        items[0]    = "MENUITEM_DIFFICULTY_HEADLINE";    
        
        items[1]    = "MENUITEM_DIFFICULTY_NORMAL";
        items[2]    = "MENUITEM_DIFFICULTY_HARD";    
        items[3]    = "MENUITEM_DIFFICULTY_BACK";    
            
        defaultOutGame    = 3;    // NEWGAME
        defaultInGame    = 3;    // SAVEGAME
        
        flags = flags | MENU_SHOW_INFO;
    };
    
    
    INSTANCE MENUITEM_DIFFICULTY_HEADLINE(C_MENU_ITEM_DEF) 
    {
        text[0]        = "Schwierigkeitsgrad";
        type        = MENU_ITEM_TEXT;
        // Position und Dimension    
        posx        =    0;        posy        = 3400;
        dimx        = 8100;        dimy        =  750;
        // Weitere Eigenschaften
        flags        =    IT_CHROMAKEYED|IT_TRANSPARENT|IT_MOVEABLE|IT_TXT_CENTER;        
    };
    
    
    INSTANCE MENUITEM_DIFFICULTY_NORMAL(C_MENU_ITEM_DEF)
    {
        backpic        = MENU_ITEM_BACK_PIC;
        text[0]        = "Normal";
        text[1]        = "MEINTEXT1";
        
        // Position und Dimension    
        posx        =    0;        posy        = 4400;    
        dimx        = 8100;        dimy        =  750;
        
        // Aktionen
        onSelAction[0]           = SEL_ACTION_CLOSE;
        onSelAction_S[0]        = "NEW_GAME";
        
        MENU_DIFFICULTYNEW = DIFFICULTYNEW_NORMAL;
        
        // Weitere Eigenschaften
        flags        = IT_CHROMAKEYED|IT_TRANSPARENT|IT_MOVEABLE|IT_SELECTABLE|IT_TXT_CENTER;
    };
    
    
    INSTANCE MENUITEM_DIFFICULTY_HARD(C_MENU_ITEM_DEF)
    {
        backpic        = MENU_ITEM_BACK_PIC;
        text[0]        = "Schwer";
        text[1]        = "MEINTEXT2"; // Kommentar
    
    
        posx        =    0;        posy        = 5000;    
        dimx        = 8100;        dimy        =  750;
        
        // Aktionen
        onSelAction[0]           = SEL_ACTION_CLOSE;
        onSelAction_S[0]        = "NEW_GAME";
        
        MENU_DIFFICULTYNEW = DIFFICULTYNEW_HARD;
    
    
        // Weitere Eigenschaften
        flags        = IT_CHROMAKEYED|IT_TRANSPARENT|IT_MOVEABLE|IT_SELECTABLE|IT_TXT_CENTER;
    };
    
    
    INSTANCE MENUITEM_DIFFICULTY_BACK(C_MENU_ITEM_DEF)
    {
        backpic        = MENU_ITEM_BACK_PIC;
        text[0]        = "ZURÜCK";
        text[1]        = "MEINTEXT3"; // Kommentar
    
    
        posx        =    0;        posy        = 6500;    
        dimx        = 8100;        dimy        =  750;
    
    
        // Weitere Eigenschaften
        flags        = IT_CHROMAKEYED|IT_TRANSPARENT|IT_MOVEABLE|IT_SELECTABLE|IT_TXT_CENTER;
    };

    Menu_Defines.d:
    Code:
    // SCHWIERIGKEITSGRAD - VELEN   
    var int MENU_DIFFICULTYNEW;
    const int DIFFICULTYNEW_NORMAL = 1;
    const int DIFFICULTYNEW_HARD     = 2;

    Startup.d:
    Code:
    func void INIT_GLOBAL(){
        // SCHWIERIGKEITSGRAD SETZEN
        var int symPtr; symPtr = GetAnyParserSymbol(MEM_ReadInt(menuParserPointerAddress), "MENU_DIFFICULTYNEW");
        
        if (DifficultyForNewGameSet == FALSE)
        {
            if (symPtr)
            {
                var zCPar_Symbol symb; symb = _^(symPtr);
                
                //MEM_SetGothOpt("VELEN", "YouShouldNotChangeMe", IntToString(symb.content));
                
                DifficultyForNewGame = symb.content;
                
                DifficultyForNewGameSet = TRUE;
            };
        };
    };
    Zuerst habe ich probiert, die per Option gesetzte Variable MENU_DIFFICULTYNEW per MEM_SetGothOpt einfach in die Gothic.ini schreiben zu lassen. Problem war hierbei, dass der Wert der Variable in der Gothic.ini immer gleich war, egal, welchen Schwierigkeitsgrad ich auswählte, es wurde aus irgendeinem Grund immer der höchste Wert verwendet, der von mir in der Menu_Defines.d festgelegt wurde, also der der DIFFICULTYNEW_HARD Variable.
    Danach habe ich es mit einer weiteren Variable in der Startup.d versucht, mit der DifficultyForNewGame, da es theoretisch ohnehin nicht notwendig sein sollte, diesen Wert permanent in der Gothic.ini des Spielers zu speichern. Hier sollte die DifficultyForNewGame den Wert der MENU_DIFFICULTYNEW verwenden. Den Wert der DifficultyForNewGame habe ich mir dann per Print anzeigen lassen. Leider wieder das gleiche Problem, egal welchen Schwierigkeitsgrad ich auswähle, es wird nur die höchste Variable verwendet, die DIFFICULTYNEW_HARD.

    Ich kann mir das nicht wirklich erklären, habe ich hier vielleicht einfach nur irgendwo einen offensichtlichen Fehler gemacht, den ich übersehen habe?

    EDIT: Seltsam ist auch, dass die Variable auch dann den höchsten Wert hat, wenn ich die z.B. bei MENUITEM_DIFFICULTY_NORMAL gar nicht setze und diese Option im Spiel auswähle... Scheinbar nimmt die Variable bei beiden Optionen den Wert der zweiten Option. Aber wieso?
    Geändert von Bloodfly91 (22.05.2019 um 19:26 Uhr)

  2. Beiträge anzeigen #2 Zitieren
    now also in your universe  Avatar von Milky-Way
    Registriert seit
    Jun 2007
    Beiträge
    15.244
     
    Milky-Way ist offline
    Bei LoA hatten wir damit auch irgendwelche Probleme. Ich habe leider gerade keine Zeit, mir die Skripte im Detail anzusehen. Hier einfach mal ein bisschen Code von uns, vielleicht hilft der Vergleich ja irgendwie:
    Code:
    // *********************************************************************
    // start game menu
    // *********************************************************************
    INSTANCE NEW_GAME_QUEST(C_MENU_DEF) 
    {
    	backpic		= MENU_BACK_PIC;
    	
    	items[0]	= "MENUITEM_START_GAME_QUEST_HEADLINE";	
    	
    	items[1]	= "MENUITEM_NEW_GAME_YES";
    	items[2]	= "MENUITEM_NEW_GAME_NO";	
    		
    	items[3] = "MENUITEM_MAIN_HEADLINE";
    	items[4] = "MENUITEM_MAIN_HEADLINE2";
    	
    	defaultOutGame	= 2;	// NEWGAME
    	defaultInGame	= 2;	// SAVEGAME
    	
    	flags = flags | MENU_SHOW_INFO;
    };
    
    INSTANCE MENUITEM_START_GAME_QUEST_HEADLINE(C_MENU_ITEM_DEF) 
    {
    	text[0]		= "Wirklich ein neues Spiel starten?";   		
    	type		= MENU_ITEM_TEXT;
    	// Position und Dimension	
    	posx		=    0;		posy		= 3400;
    	dimx		= 8100;		dimy		=  750;
    	// Weitere Eigenschaften
    	flags		=	IT_CHROMAKEYED|IT_TRANSPARENT|IT_MOVEABLE|IT_TXT_CENTER;		
    };
    
    
    INSTANCE MENUITEM_NEW_GAME_YES(C_MENU_ITEM_DEF)
    {
    	backpic		= MENU_ITEM_BACK_PIC;
    	text[0]		= "Ja";
    	text[1]		= "Ja, ich möchte ein neues Spiel starten."; // Kommentar
    	
    	// Position und Dimension	
    	posx		=    0;		posy		= 4400;	
    	dimx		= 8100;		dimy		=  750;
    	// Aktionen
    	onSelAction[0]	= SEL_ACTION_CLOSE;
    	onSelAction_S[0]= "NEW_GAME";
    	// Weitere Eigenschaften
    	flags			= IT_CHROMAKEYED|IT_TRANSPARENT|IT_MOVEABLE|IT_SELECTABLE|IT_TXT_CENTER;
    };
    
    INSTANCE MENUITEM_NEW_GAME_NO(C_MENU_ITEM_DEF)
    {
    	backpic		= MENU_ITEM_BACK_PIC;
    	text[0]		= "Nein";
    	text[1]		= "Nein, ich möchte kein neues Spiel starten."; // Kommentar
    	
    	// Position und Dimension	
    	posx		=    0;		posy		= 5000;	
    	dimx		= 8100;		dimy		=  750;
    	// Weitere Eigenschaften
    	flags		= IT_CHROMAKEYED|IT_TRANSPARENT|IT_MOVEABLE|IT_SELECTABLE|IT_TXT_CENTER;
    };
    
    
    
    
    // *********************************************************************
    // Difficulty selection menu
    // *********************************************************************
    
    INSTANCE MENU_DIFFICULTY(C_MENU_DEF)
    {
        backpic     = MENU_BACK_PIC;
    
        items[0]    = "MENUITEM_DIFF_HEADING";
    
        items[1]    = "MENUITEM_DIFF_CHOOSE";
    	items[2]    = "MENUITEM_DIFF_CHOICEBOX";
    	items[3]    = "MENUITEM_DIFF_INFOS";
        items[4]    = "MENUITEM_DIFF_DYNAMIC_RESPAWN";
        items[5]    = "MENUITEM_DIFF_DYNAMIC_RESPAWN_CHOICEBOX";
    	items[6]    = "MENUITEM_DIFF_START_GAME";
        items[7]    = "MENUITEM_DIFF_BACK";
    
        flags       = flags | MENU_SHOW_INFO;
    };
    
    
    const int MENU_DIFF_DY         =  800;
    const int MENU_DIFF_START_Y    = 2600;
    
    INSTANCE MENUITEM_DIFF_HEADING(C_MENU_ITEM_DEF)
    {
        text[0]     =    "Spielkonfiguration";
        type        =    MENU_ITEM_TEXT;
        // Position und Dimension
        posx        =    0;     posy        =    MENU_TITLE_Y;
        dimx        =    8192;
    	
    	onselaction[0] = SEL_ACTION_UNDEF;
    
        flags       = flags & ~IT_SELECTABLE;
        flags       = flags | IT_TXT_CENTER;
    };
    
    INSTANCE MENUITEM_DIFF_CHOOSE(C_MENU_ITEM_DEF)
    {
        backpic      = MENU_ITEM_BACK_PIC;
        text[0]      = "Schwierigkeitsgrad";
        text[1]      = "Schwierigkeitsgrad wählen";  // Kommentar
    
        // Position und Dimension
        posx         = 1000;       posy        = MENU_DIFF_START_Y + MENU_DIFF_DY;
        dimx         = 8192;    dimy        = 750;
    
    	onselaction[0] = SEL_ACTION_UNDEF;
    	
        // Weitere Eigenschaften
        flags = flags | IT_EFFECTS_NEXT; //IT_TXT_CENTER
    };
    
    
    INSTANCE MENUITEM_DIFF_CHOICEBOX(C_MENU_ITEM_DEF)
    {
        backpic      = MENU_CHOICE_BACK_PIC;
    	type                  = MENU_ITEM_CHOICEBOX;
        text[0]               = "Einfach|Normal|Schwierig|Herausforderung";
    
    	fontName              = MENU_FONT_SMALL;
    	
        // Position und Dimension
        posx         = MENU_LOA_SETTINGS_CHOICE_OFFSET_X;       
    	posy        = MENU_DIFF_START_Y + MENU_DIFF_DY + MENU_CHOICE_YPLUS;
    	
        dimx                  = MENU_SLIDER_DX;  dimy = MENU_CHOICE_DY;
    	
    	onChgSetOption        = "DifficultyLevel";
        onChgSetOptionSection = "LOA";
    
    	onselaction[0] = SEL_ACTION_UNDEF;
    	
        // Weitere Eigenschaften
        flags = flags | IT_TXT_CENTER;
    	flags = flags & ~IT_SELECTABLE;
    };
    
    INSTANCE MENUITEM_DIFF_INFOS(C_MENU_ITEM_DEF)
    {
        backpic      = MENU_ITEM_BACK_PIC;
        text[0]      = "Informationen";
        text[1]      = "Details zu den einzelnen Schwierigkeitsgraden";  // Kommentar
    
        // Position und Dimension
        posx         = 1000;       posy        = MENU_DIFF_START_Y + MENU_DIFF_DY * 2;
        dimx         = 8192;    dimy        = 750;
    	
    	onselaction_s[0] = "MENU_DIFF_INFOS";
    	onselaction[0] = SEL_ACTION_STARTMENU;
    	
        // Weitere Eigenschaften
        //flags = flags | IT_TXT_CENTER;
    };
    
    
    INSTANCE MENUITEM_DIFF_DYNAMIC_RESPAWN(C_MENU_ITEM_DEF)
    {
        backpic      = MENU_ITEM_BACK_PIC;
        text[0]      = "Dyn. Respawn";
        text[1]      = "Dynamischen Respawn aktivieren/deaktivieren";  // Kommentar
    
        // Position und Dimension
        posx         = 1000;       posy        = MENU_DIFF_START_Y + MENU_DIFF_DY * 3;
        dimx         = 8192;    dimy        = 750;
    
    	onselaction[0] = SEL_ACTION_UNDEF;
    	
        // Weitere Eigenschaften
        flags = flags | IT_EFFECTS_NEXT; //IT_TXT_CENTER
    };
    
    
    INSTANCE MENUITEM_DIFF_DYNAMIC_RESPAWN_CHOICEBOX (C_MENU_ITEM_DEF)
    {
        backpic      = MENU_CHOICE_BACK_PIC;
    	type                  = MENU_ITEM_CHOICEBOX;
        text[0]               = "aus | ein";
    
    	fontName              = MENU_FONT_SMALL;
    	
        // Position und Dimension
        posx         = MENU_LOA_SETTINGS_CHOICE_OFFSET_X;       
    	posy        = MENU_DIFF_START_Y + MENU_DIFF_DY * 3 + MENU_CHOICE_YPLUS;
    	
        dimx                  = MENU_SLIDER_DX;  dimy = MENU_CHOICE_DY;
    	
    	onChgSetOption        = "DynamicRespawn";
        onChgSetOptionSection = "LOA";
    
    	onselaction[0] = SEL_ACTION_UNDEF;
    	
        // Weitere Eigenschaften
        flags = flags | IT_TXT_CENTER;
    	flags = flags & ~IT_SELECTABLE;
    };
    
    INSTANCE MENUITEM_DIFF_START_GAME(C_MENU_ITEM_DEF)
    {
        backpic      =    MENU_ITEM_BACK_PIC;
        text[0]      =    "Spiel Starten";
    	text[1]      = "Das Spiel mit dem eingestellten Schwierigkeitsgrad beginnen.";
        // Position und Dimension
        posx         = 1000;    
    	posy        = MENU_BACK_Y + 300 - MENU_DIFF_DY;
        dimx         = 6192;    
    	dimy        = MENU_DIFF_DY;
        // Aktionen
        onSelAction[0]      = SEL_ACTION_CLOSE;
    	onSelAction_S[0]    = "NEW_GAME";
        // Weitere Eigenschaften
        // Weitere Eigenschaften
        flags = flags | IT_TXT_CENTER;
    };
    
    instance MENUITEM_DIFF_BACK(C_MENU_ITEM_DEF)
    {
    	backpic = MENU_ITEM_BACK_PIC;
    	text[0] = "Zurück";
    	posx = 1000;
    	posy = MENU_BACK_Y + 300;
    	dimx = 6192;
    	dimy = MENU_DIFF_DY;
    	onselaction[0] = SEL_ACTION_BACK;
    	flags = flags | IT_TXT_CENTER;
    };
    
    const int LOA_LOG_ITEM_X1 = 1200;
    const int LOA_LOG_ITEM_DX1 = 1800;
    const int LOA_LOG_ITEM_LIST_X = 3000;
    const int LOA_LOG_ITEM_LIST_Y = 1000;
    const int LOA_LOG_ITEM_LIST_HEIGHT = 6100;
    const int LOA_LOG_ITEM_LIST_WIDTH = 5500;
    
    const int MENU_DIFF_INFOS_START_Y    = 1500;
    const int MENU_DIFF_SHIFT_Y    =  100;
    const int MENU_DIFF_DESCRIPTION_X = 3700;
    const int MENU_DIFF_CAPTIONS_X = 500;
    
    INSTANCE MENU_DIFF_INFOS(C_MENU_DEF)
    {
        backpic     = MENU_BACK_PIC;
    
        items[0]    = "MENUITEM_DIFF_HEADING";
    	items[1]    = "MENUITEM_DIFF_INFOS_EASY";
        items[2]    = "MENUITEM_DIFF_INFOS_EASY_DESCRIPTION";
    	items[3]    = "MENUITEM_DIFF_INFOS_MEDIUM";
        items[4]    = "MENUITEM_DIFF_INFOS_MEDIUM_DESCRIPTION";
    	items[5]    = "MENUITEM_DIFF_INFOS_HARD";
        items[6]    = "MENUITEM_DIFF_INFOS_HARD_DESCRIPTION";
    	items[7]    = "MENUITEM_DIFF_INFOS_CHALLENGE";
        items[8]    = "MENUITEM_DIFF_INFOS_CHALLENGE_DESCRIPTION";
        items[9]    = "MENUITEM_DIFF_INFOS_BACK";
        
        dimx         = 1024 * 7; 
        dimy         = 1024 * 6; 
    
        alpha = 255;
    	posx = 0;
    	posy = 0;
    	//backpic = LOG_BACK_PIC;
    	flags = flags | MENU_OVERTOP | MENU_NOANI;
        flags = flags & ~MENU_DONTSCALE_DIM;
    };
    
    INSTANCE MENUITEM_DIFF_INFOS_EASY(C_MENU_ITEM_DEF)
    {
        //text[0]      =    "Einfach";
        
        //text[0] = "Einfach: Du richtest mehr Schaden an, deine Gegner weniger. Levelups geben einen zusätzlichen  Lernpunkt.";
        posx         = MENU_DIFF_CAPTIONS_X; 
        posy        = MENU_DIFF_INFOS_START_Y + MENU_DIFF_DY * 1;
        dimx         = 8192;    dimy        = MENU_DIFF_DY * 1;  
        text[0]     = "Einfach";
        
    	flags = flags | IT_MULTILINE; // IT_TRANSPARENT IT_CHROMAKEYED
        flags       = flags & ~IT_SELECTABLE;
        //flags = flags | MENU_DONTSCALE_DIM;
    };
    
    INSTANCE MENUITEM_DIFF_INFOS_EASY_DESCRIPTION(C_MENU_ITEM_DEF)
    {
        text[0]     = "Du machst 50% mehr Schaden.\nGegner machen 25% weniger Schaden.\n12 Lernpunkte pro Stufenaufstieg.\nKampftalente durch Praxis steigerbar.";
        
        posx         = MENU_DIFF_DESCRIPTION_X; 
        posy        = MENU_DIFF_INFOS_START_Y + MENU_DIFF_DY * 1 + MENU_DIFF_SHIFT_Y;
        dimx         = 8192;    dimy        = MENU_DIFF_DY * 2;  
        
        fontName              = MENU_FONT_BRIGHT;
        //fontname = LOG_FONT_DEFAULT;
    	flags = flags | IT_MULTILINE; // IT_TRANSPARENT IT_CHROMAKEYED
        //flags = flags | MENU_DONTSCALE_DIM;
        flags       = flags & ~IT_SELECTABLE;
    };
    
    
    INSTANCE MENUITEM_DIFF_INFOS_MEDIUM(C_MENU_ITEM_DEF)
    {
        backpic      =    MENU_ITEM_BACK_PIC;
        text[0]      =    "Normal";
        // Position und Dimension
        posx         = MENU_DIFF_CAPTIONS_X;    
    	posy        = MENU_DIFF_INFOS_START_Y + MENU_DIFF_DY * 3;
        dimx         = 8192;    dimy        = MENU_DIFF_DY * 1;  
    	
    	onselaction[0] = SEL_ACTION_UNDEF;
        flags       = flags & ~IT_SELECTABLE;
        
    };
    
    INSTANCE MENUITEM_DIFF_INFOS_MEDIUM_DESCRIPTION(C_MENU_ITEM_DEF)
    {
        text[0]     = "Alles ist wie gewohnt. (EMPFOHLEN)\nKampftalente durch Praxis steigerbar.";
        
        posx         = MENU_DIFF_DESCRIPTION_X; 
        posy        = MENU_DIFF_INFOS_START_Y + MENU_DIFF_DY * 3 + MENU_DIFF_SHIFT_Y;
        dimx         = 8192;    dimy        = MENU_DIFF_DY * 1;  
        
        fontName              = MENU_FONT_BRIGHT;
    	flags = flags | IT_MULTILINE;
        flags       = flags & ~IT_SELECTABLE;
    };
    
    INSTANCE MENUITEM_DIFF_INFOS_HARD(C_MENU_ITEM_DEF)
    {
        backpic      =    MENU_ITEM_BACK_PIC;
        text[0]      =    "Schwierig";
        // Position und Dimension
        posx         = MENU_DIFF_CAPTIONS_X;    
    	posy        = MENU_DIFF_INFOS_START_Y + MENU_DIFF_DY * 4;
        dimx         = 8192;    dimy        = MENU_DIFF_DY * 1;  
    	
    	onselaction[0] = SEL_ACTION_UNDEF;
        flags       = flags & ~IT_SELECTABLE;
    };
    
    INSTANCE MENUITEM_DIFF_INFOS_HARD_DESCRIPTION(C_MENU_ITEM_DEF)
    {
        text[0]     = "Gegner machen doppelten Schaden.\n8 Lernpunkte pro Stufenaufstieg.";
        
        posx         = MENU_DIFF_DESCRIPTION_X; 
        posy        = MENU_DIFF_INFOS_START_Y + MENU_DIFF_DY * 4 + MENU_DIFF_SHIFT_Y;
        dimx         = 8192;    dimy        = MENU_DIFF_DY * 1;  
        
        fontName              = MENU_FONT_BRIGHT;
    	flags = flags | IT_MULTILINE;
        flags       = flags & ~IT_SELECTABLE;
    };
    
    INSTANCE MENUITEM_DIFF_INFOS_CHALLENGE(C_MENU_ITEM_DEF)
    {
        backpic      =    MENU_ITEM_BACK_PIC;
        text[0]      =    "Herausforderung";
        // Position und Dimension
        posx         = MENU_DIFF_CAPTIONS_X;    
    	posy        = MENU_DIFF_INFOS_START_Y + MENU_DIFF_DY * 5;
        dimx         = 8192;    dimy        = MENU_DIFF_DY * 1;  
    	
    	onselaction[0] = SEL_ACTION_UNDEF;
        flags       = flags & ~IT_SELECTABLE;
    };
    
    INSTANCE MENUITEM_DIFF_INFOS_CHALLENGE_DESCRIPTION(C_MENU_ITEM_DEF)
    {
        text[0]     = "Gegner machen dreifachen Schaden.\n6 Lernpunkte pro Stufenaufstieg.";
        
        posx         = MENU_DIFF_DESCRIPTION_X; 
        posy        = MENU_DIFF_INFOS_START_Y + MENU_DIFF_DY * 5 + MENU_DIFF_SHIFT_Y;
        dimx         = 8192;    dimy        = MENU_DIFF_DY * 1;  
        
        //fontName              = MENU_FONT_SMALL;
        fontName              = MENU_FONT_BRIGHT;
    	flags = flags | IT_MULTILINE;
        flags       = flags & ~IT_SELECTABLE;
    };
    
    instance MENUITEM_DIFF_INFOS_BACK(C_MENU_ITEM_DEF)
    {
    	backpic = MENU_ITEM_BACK_PIC;
    	text[0] = "Zurück";
    	posx = 1000;
    	posy = MENU_DIFF_INFOS_START_Y + MENU_DIFF_DY * 6;
    	dimx = 6192;
    	dimy = MENU_DIFF_DY;
    	onselaction[0] = SEL_ACTION_BACK;
    	flags = flags | IT_TXT_CENTER;
    };

  3. Homepage besuchen Beiträge anzeigen #3 Zitieren
    Team Velen
    Registriert seit
    Aug 2015
    Beiträge
    952
     
    Bloodfly91 ist offline
    Vielen Dank! Ich bin leider noch nicht dazu gekommen, es mir genauer anzuschauen, aber ihr habt das scheinbar ja auch per "Schieberegler" gelöst. Eigentlich wollte ich, dass das ganze dann eher so aussieht, wie zum Beispiel die Sicherheitsabfrage aus der MDB.
    Schade, aber ein Schieberegler scheint hier wohl tatsächlich die einfachste Lösung zu sein.

  4. Beiträge anzeigen #4 Zitieren
    Knight
    Registriert seit
    Aug 2009
    Ort
    Hessen
    Beiträge
    1.487
     
    Cryp18Struct ist offline
    In Dirty Swamp gibt es für jede "Spiel mit Schwierigkeit X starten" Option anschliessend ein Ja/Nein Fenster.

    Code:
    // Menu_Defines.d
    // Difficulty
    //
    	var   int MENU_DIFFLEVEL;
    	const int DIFF_VERYEASY = 1;
    	const int DIFF_EASY 	= 2;
    	const int DIFF_MEDIUM 	= 3;
    	const int DIFF_HARDCORE = 4;
    Code:
    //Menu_Misc.d
    const string DIFF_VERYEASY_TEXT = "Wer will schon kämpfen? Ich will Story!";
    const string DIFF_EASY_TEXT 	= "Für die zart beseiteten";
    const string DIFF_MEDIUM_TEXT 	= "Empfohlen";
    const string DIFF_HARDCORE_TEXT = "Für unzählige Tode wird keine Haftung übernommen";
    
    const string START_NEW_GAME_VERYEASY_TEXT = "Starte ein sehr leichtes Spiel";
    const string START_NEW_GAME_EASY_TEXT = "Starte ein leichtes Spiel";
    const string START_NEW_GAME_MEDIUM_TEXT = "Starte ein normales Spiel";
    const string START_NEW_GAME_HARDCORE_TEXT = "Bist du dir wirklich sicher?";
    
    const int MENU_DIFF_DY 		=  600;
    const int MENU_DIFF_START_Y	= 2000;
    
    // *********************************************************************
    // leave game menu
    // *********************************************************************
    
    INSTANCE MENU_LEAVE_GAME(C_MENU_DEF) 
    {
    	backpic		= MENU_BACK_PIC;
    	
    	items[0]	= "MENUITEM_LEAVE_GAME_HEADLINE";	
    	
    	items[1]	= "MENUITEM_LEAVE_GAME_YES";
    	items[2]	= "MENUITEM_LEAVE_GAME_NO";	
    		
    	defaultOutGame	= 2;	// NEWGAME
    	defaultInGame	= 2;	// SAVEGAME
    	
    	flags = flags | MENU_SHOW_INFO;
    };
    
    INSTANCE MENUITEM_LEAVE_GAME_HEADLINE(C_MENU_ITEM_DEF) 
    {
    	text[0]		= "Dirty Swamp verlassen?";   		
    	type		= MENU_ITEM_TEXT;
    	// Position und Dimension	
    	posx		=    0;		posy		= 3400;
    	dimx		= 8100;		dimy		=  750;
    	// Weitere Eigenschaften
    	flags		=	IT_CHROMAKEYED|IT_TRANSPARENT|IT_MOVEABLE|IT_TXT_CENTER;		
    };
    
    
    INSTANCE MENUITEM_LEAVE_GAME_YES(C_MENU_ITEM_DEF)
    {
    	backpic		= MENU_ITEM_BACK_PIC;
    	text[0]		= "Ja";
    	text[1]		= "Ja, ich möchte Dirty Swamp verlassen."; // Kommentar
    	
    	// Position und Dimension	
    	posx		=    0;		posy		= 4400;	
    	dimx		= 8100;		dimy		=  750;
    	// Aktionen
    	onSelAction[0]	= SEL_ACTION_CLOSE;
    	onSelAction_S[0]= "LEAVE_GAME";
    	// Weitere Eigenschaften
    	flags			= IT_CHROMAKEYED|IT_TRANSPARENT|IT_MOVEABLE|IT_SELECTABLE|IT_TXT_CENTER;
    };
    
    INSTANCE MENUITEM_LEAVE_GAME_NO(C_MENU_ITEM_DEF)
    {
    	backpic		= MENU_ITEM_BACK_PIC;
    	text[0]		= "Nein";
    	text[1]		= "Nein, ich möchte weiterspielen."; // Kommentar
    	
    	// Position und Dimension	
    	posx		=    0;		posy		= 5000;	
    	dimx		= 8100;		dimy		=  750;
    	// Weitere Eigenschaften
    	flags		= IT_CHROMAKEYED|IT_TRANSPARENT|IT_MOVEABLE|IT_SELECTABLE|IT_TXT_CENTER;
    };
    
    
    
    	
    // *********************************************************************
    // start game menu
    // *********************************************************************
    INSTANCE NEW_GAME_QUEST(C_MENU_DEF) 
    {
    	backpic		= MENU_BACK_PIC;
    	
    	items[0]	= "MENUITEM_DIFF_HEADING";	
    	
    	items[1]    = "MENUITEM_DIFF_VERYEASY";
        items[2]    = "MENUITEM_DIFF_EASY";
        items[3]    = "MENUITEM_DIFF_MEDIUM";
        items[4]    = "MENUITEM_DIFF_HARDCORE";
        items[5]    = "MENUITEM_DIFF_BACK";
    		
    	defaultOutGame	= 3;	// NEWGAME
    	defaultInGame	= 3;	// SAVEGAME
    	
    	flags = flags | MENU_SHOW_INFO;
    };
    
    INSTANCE MENUITEM_DIFF_HEADING(C_MENU_ITEM_DEF)
    {
        text[0]     =    "SCHWIERIGKEITSGRAD";
        type        =    MENU_ITEM_TEXT;
        // Position und Dimension
        posx        =    0;     posy        =    MENU_TITLE_Y;
        dimx        =    8192;
    
        flags       = flags & ~IT_SELECTABLE;
        flags       = flags | IT_TXT_CENTER;
    };
    
    INSTANCE MENUITEM_DIFF_VERYEASY(C_MENU_ITEM_DEF)
    {
        backpic     = MENU_ITEM_BACK_PIC;
        text[0]     = "Storymodus";
        text[1]     = DIFF_VERYEASY_TEXT;  // Kommentar
    
        // Position und Dimension
        posx        = 0;        posy        = MENU_DIFF_START_Y + MENU_DIFF_DY*0;
        dimx        = 8192;     dimy        = 750;
    
        // Aktionen
        onSelAction[0]      = SEL_ACTION_STARTMENU;
        onSelAction_S[0]    = "MENU_DIFF_VERYEASY_YESNO";
        // Weitere Eigenschaften
        flags = flags | IT_TXT_CENTER;
    };
    
    INSTANCE MENUITEM_DIFF_EASY(C_MENU_ITEM_DEF)
    {
        backpic      = MENU_ITEM_BACK_PIC;
        text[0]      = "Einfach";
        text[1]      = DIFF_EASY_TEXT;  // Kommentar
    
        // Position und Dimension
        posx         = 0;       posy        = MENU_DIFF_START_Y + MENU_DIFF_DY*1;
        dimx         = 8192;    dimy        = 750;
    
        // Aktionen
        onSelAction[0]      = SEL_ACTION_STARTMENU;
        onSelAction_S[0]    = "MENU_DIFF_EASY_YESNO";
        // Weitere Eigenschaften
        flags = flags | IT_TXT_CENTER;
    };
    
    INSTANCE MENUITEM_DIFF_MEDIUM(C_MENU_ITEM_DEF)
    {
        backpic      = MENU_ITEM_BACK_PIC;
        text[0]      = "Normal";
        text[1]      = DIFF_MEDIUM_TEXT;  // Kommentar
    
        // Position und Dimension
        posx         = 0;       posy        = MENU_DIFF_START_Y + MENU_DIFF_DY*2;
        dimx         = 8192;    dimy        = 750;
    
        // Aktionen
        onSelAction[0]      = SEL_ACTION_STARTMENU;
        onSelAction_S[0]    = "MENU_DIFF_MEDIUM_YESNO";
        // Weitere Eigenschaften
        flags = flags | IT_TXT_CENTER;
    };
    
    INSTANCE MENUITEM_DIFF_HARDCORE(C_MENU_ITEM_DEF)
    {
        backpic      = MENU_ITEM_BACK_PIC;
        text[0]      = "Hardcore";
        text[1]      = DIFF_HARDCORE_TEXT;  // Kommentar
    
        // Position und Dimension
        posx         = 0;       posy        = MENU_DIFF_START_Y + MENU_DIFF_DY*3;
        dimx         = 8192;    dimy        = 750;
    
        // Aktionen
        onSelAction[0]      = SEL_ACTION_STARTMENU;
        onSelAction_S[0]    = "MENU_DIFF_HARDCORE_YESNO";
        // Weitere Eigenschaften
        flags = flags | IT_TXT_CENTER;
    };
    
    INSTANCE MENUITEM_DIFF_BACK(C_MENU_ITEM_DEF)
    {
        backpic      =    MENU_ITEM_BACK_PIC;
        text[0]      =    "Zurück";
        // Position und Dimension
        posx         = 1000;    posy        = MENU_BACK_Y+300;
        dimx         = 6192;    dimy        = MENU_OPT_DY;
        // Aktionen
        onSelAction[0]      = SEL_ACTION_BACK;
        // Weitere Eigenschaften
        flags = flags |IT_TXT_CENTER;
    };
    
    
    INSTANCE MENU_DIFF_VERYEASY_YESNO(C_MENU_DEF)
    {
        backpic      = MENU_BACK_PIC;
    
        items[0]     = "MENUITEM_DIFF_VERYEASY_HEADING";
    
        items[1]     = "MENUITEM_DIFF_VERYEASY_YES";
        items[2]     = "MENUITEM_DIFF_NO";
    
        defaultOutGame  = 2;    // NEWGAME
        defaultInGame   = 2;    // SAVEGAME
    
        flags = flags | MENU_SHOW_INFO;
    };
    
    INSTANCE MENUITEM_DIFF_VERYEASY_HEADING(C_MENU_ITEM_DEF)
    {
        text[0]      =    "SPIEL IM STORYMODUS STARTEN?";
        type         =    MENU_ITEM_TEXT;
        // Position und Dimension
        posx         = 0;       posy        = MENU_TITLE_Y;
        dimx         = 8192;
    
        flags = flags & ~IT_SELECTABLE;
        flags = flags | IT_TXT_CENTER;
    };
    
    INSTANCE MENUITEM_DIFF_VERYEASY_YES(C_MENU_ITEM_DEF)
    {
        backpic      = MENU_ITEM_BACK_PIC;
        text[0]      = "Ja";
        text[1]      = START_NEW_GAME_VERYEASY_TEXT;  // Kommentar
    
        // Position und Dimension
        posx         = 0;       posy        = MENU_DIFF_START_Y + MENU_DIFF_DY;
        dimx         = 8192;    dimy        = 750;
    
        // Aktionen
        MENU_DIFFLEVEL      = DIFF_VERYEASY;
        onSelAction[0]      = SEL_ACTION_CLOSE;
        onSelAction_S[0]    = "NEW_GAME";
        // Weitere Eigenschaften
        flags = flags | IT_TXT_CENTER;
    };
    
    
    INSTANCE MENU_DIFF_EASY_YESNO(C_MENU_DEF)
    {
        backpic      = MENU_BACK_PIC;
    
        items[0]     = "MENUITEM_DIFF_EASY_HEADING";
    
        items[1]     = "MENUITEM_DIFF_EASY_YES";
        items[2]     = "MENUITEM_DIFF_NO";
    
        defaultOutGame  = 2;    // NEWGAME
        defaultInGame   = 2;    // SAVEGAME
    
        flags = flags | MENU_SHOW_INFO;
    };
    
    INSTANCE MENUITEM_DIFF_EASY_HEADING(C_MENU_ITEM_DEF)
    {
        text[0]      =    "EIN LEICHTES SPIEL STARTEN?";
        type         =    MENU_ITEM_TEXT;
        // Position und Dimension
        posx         = 0;       posy        = MENU_TITLE_Y;
        dimx         = 8192;
    
        flags = flags & ~IT_SELECTABLE;
        flags = flags | IT_TXT_CENTER;
    };
    
    INSTANCE MENUITEM_DIFF_EASY_YES(C_MENU_ITEM_DEF)
    {
        backpic      = MENU_ITEM_BACK_PIC;
        text[0]      = "Ja";
        text[1]      = START_NEW_GAME_EASY_TEXT;  // Kommentar
    
        // Position und Dimension
        posx         = 0;       posy        = MENU_DIFF_START_Y + MENU_DIFF_DY;
        dimx         = 8192;    dimy        = 750;
    
        // Aktionen
        MENU_DIFFLEVEL      = DIFF_EASY;
        onSelAction[0]      = SEL_ACTION_CLOSE;
        onSelAction_S[0]    = "NEW_GAME";
        // Weitere Eigenschaften
        flags = flags | IT_TXT_CENTER;
    };
    
    
    
    INSTANCE MENU_DIFF_MEDIUM_YESNO(C_MENU_DEF)
    {
        backpic      = MENU_BACK_PIC;
    
        items[0]     = "MENUITEM_DIFF_MEDIUM_HEADING";
    
        items[1]     = "MENUITEM_DIFF_MEDIUM_YES";
        items[2]     = "MENUITEM_DIFF_NO";
    
        defaultOutGame  = 2;    // NEWGAME
        defaultInGame   = 2;    // SAVEGAME
    
        flags = flags | MENU_SHOW_INFO;
    };
    
    INSTANCE MENUITEM_DIFF_MEDIUM_HEADING(C_MENU_ITEM_DEF)
    {
        text[0]      =    "EIN NORMALES SPIEL STARTEN?";
        type         =    MENU_ITEM_TEXT;
        // Position und Dimension
        posx         = 0;       posy        = MENU_TITLE_Y;
        dimx         = 8192;
    
        flags = flags & ~IT_SELECTABLE;
        flags = flags | IT_TXT_CENTER;
    };
    
    INSTANCE MENUITEM_DIFF_MEDIUM_YES(C_MENU_ITEM_DEF)
    {
        backpic      = MENU_ITEM_BACK_PIC;
        text[0]      = "Ja";
        text[1]      = START_NEW_GAME_MEDIUM_TEXT;  // Kommentar
    
        // Position und Dimension
        posx         = 0;       posy        = MENU_DIFF_START_Y + MENU_DIFF_DY;
        dimx         = 8192;    dimy        = 750;
    
        // Aktionen
        MENU_DIFFLEVEL      = DIFF_MEDIUM;
        onSelAction[0]      = SEL_ACTION_CLOSE;
        onSelAction_S[0]    = "NEW_GAME";
        // Weitere Eigenschaften
        flags = flags | IT_TXT_CENTER;
    };
    
    INSTANCE MENU_DIFF_HARDCORE_YESNO(C_MENU_DEF)
    {
        backpic      = MENU_BACK_PIC;
    
        items[0]     = "MENUITEM_DIFF_HARDCORE_HEADING";
    
        items[1]     = "MENUITEM_DIFF_HARDCORE_YES";
        items[2]     = "MENUITEM_DIFF_NO";
    
        defaultOutGame  = 2;    // NEWGAME
        defaultInGame   = 2;    // SAVEGAME
    
        flags = flags | MENU_SHOW_INFO;
    };
    
    INSTANCE MENUITEM_DIFF_HARDCORE_HEADING(C_MENU_ITEM_DEF)
    {
        text[0]      =    "EIN HARDCORE SPIEL STARTEN?";
        type         =    MENU_ITEM_TEXT;
        // Position und Dimension
        posx         = 0;       posy        = MENU_TITLE_Y;
        dimx         = 8192;
    
        flags = flags & ~IT_SELECTABLE;
        flags = flags | IT_TXT_CENTER;
    };
    
    INSTANCE MENUITEM_DIFF_HARDCORE_YES(C_MENU_ITEM_DEF)
    {
        backpic      = MENU_ITEM_BACK_PIC;
        text[0]      = "Ja";
        text[1]      = START_NEW_GAME_HARDCORE_TEXT;  // Kommentar
    
        // Position und Dimension
        posx         = 0;       posy        = MENU_DIFF_START_Y + MENU_DIFF_DY;
        dimx         = 8192;    dimy        = 750;
    
        // Aktionen
        MENU_DIFFLEVEL      = DIFF_HARDCORE;
        onSelAction[0]      = SEL_ACTION_CLOSE;
        onSelAction_S[0]    = "NEW_GAME";
        // Weitere Eigenschaften
        flags = flags | IT_TXT_CENTER;
    };
    
    INSTANCE MENUITEM_DIFF_NO(C_MENU_ITEM_DEF)
    {
        backpic      =    MENU_ITEM_BACK_PIC;
        text[0]      =    "Nein";
        // Position und Dimension
        posx         = 1000;    posy        = MENU_DIFF_START_Y + MENU_DIFF_DY*2;
        dimx         = 6192;    dimy        = MENU_OPT_DY;
        // Aktionen
        onSelAction[0]    = SEL_ACTION_BACK;
        // Weitere Eigenschaften
        flags = flags |IT_TXT_CENTER;
    };
    Auslesen des Wertes in den content skripten:
    Code:
    func void UpdateDifficultyAfterLoading() {
        if (!modDifficultyInitialized) {
            // Suche in den Menü-Skripten nach "MENU_DIFFLEVEL" (gross geschrieben)
            var int symPtr; symPtr = GetAnyParserSymbol(MEM_ReadInt(menuParserPointerAddress), "MENU_DIFFLEVEL");
            if (symPtr) {
                var zCPar_Symbol symb; symb = _^(symPtr);
                setDifficulty(symb.content);
                MEM_SetGothOpt("DIRTYSWAMPOPTIONS", "ds_difficulty", IntToString(symb.content)); 
            } else {
            	// Sollte eigentlich nicht passieren. Aber nur für den Fall.
                setDifficulty(DIFFICULTY_03);
           	 	MEM_SetGothOpt("DIRTYSWAMPOPTIONS", "ds_difficulty", "2"); // Normal
            };
            modDifficultyInitialized = true;
        };
    };

  5. Homepage besuchen Beiträge anzeigen #5 Zitieren
    Team Velen
    Registriert seit
    Aug 2015
    Beiträge
    952
     
    Bloodfly91 ist offline
    Danke @Cryp18Struct, ich habe nun versucht, es ähnlich bei mir einzubauen. Problem bleibt allerdings weiterhin bestehen, auch wenn es nun zumindest teilweise funktioniert.

    Nicht immer, wenn ich ein neues Spiel mit einem der beiden Schwierigkeitsgrade starte, scheint die Variable richtig gesetzt zu werden, sondern manchmal bei der vorherigen "stecken" zu bleiben.
    Beispiel: Ich starte ein leichtes Spiel, die dadurch gesetze Variable ist korrekt (--> 1). Ich starte ein schweres Spiel, die dadurch gesetzte Variable ist korrekt (--> 2). Ich starte erneut ein leichtes Spiel, die dadurch gesetzte Variable ist wieder korrekt (--> 1). Ich starte wieder ein schweres Spiel, die dadurch gesetzte Variable ist immer noch korrekt (--> 2). Starte ich nun allerdings wieder ein leichtes Spiel, kann es sein, dass die Variable nicht angepasst wird und einfach den Wert vom vorherigen leichten Spiel behält, also so zu sagen wohl "stecken bleibt". Denn sie ändert sich dann auch nicht mehr, bis ich das Spiel komplett beende und neustarte.
    Das ganze muss nicht in genau dieser Reihenfolge durchgeführt werden, es ist eher Zufall, ob die Variable angepasst wird oder nicht. Klar ist aber, dass sie sich, wenn sie einmal feststeckt, auch nicht mehr durch den Start eines neuen Spiels ändern lässt, sondern erst wieder, sobald man das Spiel komplett beendet und neustartet.
    Nun ist es ja nicht möglich, die im Hauptmenü durch die Option gesetzte Variable einfach in einem Skript zurückzusetzen. Auch weiß ich nicht, ob das überhaupt etwas bringen würde, vorstellen kann ich es mir eher nicht.

    Hat jemand eine Idee, woran das liegen könnte? Hier nochmal meine aktuellen Skripte:

    Code:
    instance MENUITEM_MAIN_NEWGAME(C_MENU_ITEM_DEF) 
    {
        backpic        = MENU_ITEM_BACK_PIC;
        text[0]        = "Neues Spiel";
        text[1]        = "Ein neues Spiel beginnen.";  // Kommentar
        
        // Positionen  und Dimensionen    
        posx        = 0;        posy        = MENU_MAIN_Y + MENU_MAIN_DY*0;
        dimx        = 8100;        dimy        =  750;
        
        // Aktionen
        onSelAction[0]    = SEL_ACTION_STARTMENU;
        onSelAction_S[0]= "NEWGAME_DIFFICULTY";
        
        // Weitere Eigenschaften
        flags            = flags | IT_TXT_CENTER;
    };
    Code:
    ///////////////////////////////////////////////////////////////////////////////////////////////////////
    
    INSTANCE NEWGAME_DIFFICULTY(C_MENU_DEF) 
    {
        backpic     = MENU_BACK_PIC;
        
        items[0]    = "MENUITEM_DIFFICULTY_HEADLINE";    
        
        items[1]    = "MENUITEM_DIFFICULTY_NORMAL";
        items[2]    = "MENUITEM_DIFFICULTY_HARD";    
        items[3]    = "MENUITEM_DIFFICULTY_BACK";    
            
        defaultOutGame   = 3;    // NEWGAME
        defaultInGame    = 3;    // SAVEGAME
        
        flags = flags | MENU_SHOW_INFO;
    };
    
    
    
    
    INSTANCE MENUITEM_DIFFICULTY_HEADLINE(C_MENU_ITEM_DEF) 
    {
        text[0]        = "SCHWIERIGKEITSGRAD";
        type        = MENU_ITEM_TEXT;
        // Position und Dimension    
        posx        =    0;        posy        = 3400;
        dimx        = 8100;        dimy        =  750;
        // Weitere Eigenschaften
        // flags        =    IT_CHROMAKEYED|IT_TRANSPARENT|IT_MOVEABLE|IT_TXT_CENTER;
        flags       = flags & ~IT_SELECTABLE;
        flags       = flags | IT_TXT_CENTER;
    };
    
    
    INSTANCE MENUITEM_DIFFICULTY_NORMAL(C_MENU_ITEM_DEF)
    {
        backpic               = MENU_ITEM_BACK_PIC;
        text[0]              = "Leicht";
        text[1]              = "(Etwas höhere Startwerte und Lernpunkte pro Aufstieg)";
        
        // Position und Dimension    
        posx               =    0;        posy        = 4400;    
        dimx               = 8100;        dimy        =  750;
        
        // Aktionen
        // MENU_DIFFICULTYNEW = DIFFICULTY_NORMAL;
        
        onSelAction[0]     = SEL_ACTION_STARTMENU;
        onSelAction_S[0]   = "MENU_DIFFICULTY_EASY_YESNO";
        
        // Weitere Eigenschaften
        // flags               = IT_CHROMAKEYED|IT_TRANSPARENT|IT_MOVEABLE|IT_SELECTABLE|IT_TXT_CENTER;
        
        flags = flags | IT_TXT_CENTER;
    };
    
    
    INSTANCE MENU_DIFFICULTY_EASY_YESNO(C_MENU_DEF)
    {
        backpic      = MENU_BACK_PIC;
    
    
        items[0]     = "MENUITEM_DIFFICULTY_EASY_HEADING";
    
    
        items[1]     = "MENUITEM_DIFFICULTY_EASY_YES";
        items[2]     = "MENUITEM_DIFFICULTY_NO";
    
    
        defaultOutGame  = 2;    // NEWGAME
        defaultInGame   = 2;    // SAVEGAME
    
    
        flags = flags | MENU_SHOW_INFO;
    };
    
    
    INSTANCE MENUITEM_DIFFICULTY_EASY_HEADING(C_MENU_ITEM_DEF)
    {
        text[0]      =    "Ein LEICHTES Spiel starten?";
        text[1]      =    "(Wirklich ein neues LEICHTES Spiel starten?)";
        // Position und Dimension
        posx        =    0;        posy        = 3400;
        dimx        = 8100;        dimy        =  750;
    
    
        flags = flags & ~IT_SELECTABLE;
        flags = flags | IT_TXT_CENTER;
    };
    
    
    INSTANCE MENUITEM_DIFFICULTY_EASY_YES(C_MENU_ITEM_DEF)
    {
        backpic      = MENU_ITEM_BACK_PIC;
        text[0]      = "Ja";
        text[1]      = "(Ein neues Spiel mit diesem Schwierigkeitsgrad STARTEN)";  // Kommentar
    
    
        // Position und Dimension
        posx               =    0;        posy        = 4400;    
        dimx               = 8100;        dimy        =  750;
    
    
        // Aktionen
        MENU_DIFFICULTYNEW     = DIFFICULTY_NORMAL;
        
        onSelAction[0]      = SEL_ACTION_CLOSE;
        onSelAction_S[0]    = "NEW_GAME";
        // Weitere Eigenschaften
        flags = flags | IT_TXT_CENTER;
    };
    
    
    
    
    INSTANCE MENUITEM_DIFFICULTY_HARD(C_MENU_ITEM_DEF)
    {
        backpic               = MENU_ITEM_BACK_PIC;
        text[0]               = "Normal";
        text[1]               = "(Normale Gothic-Startwerte und Lernpunkte pro Aufstieg)"; // Kommentar
    
    
        // Position und Dimension
        posx               =    0;        posy        = 5000;    
        dimx               = 8100;        dimy        =  750;
        
        // Aktionen
        onSelAction[0]     = SEL_ACTION_STARTMENU;
        onSelAction_S[0]   = "MENU_DIFFICULTY_HARD_YESNO";
    
    
        // Weitere Eigenschaften
        // flags               = IT_CHROMAKEYED|IT_TRANSPARENT|IT_MOVEABLE|IT_SELECTABLE|IT_TXT_CENTER;
        
        flags = flags | IT_TXT_CENTER;
    };
    
    
    INSTANCE MENU_DIFFICULTY_HARD_YESNO(C_MENU_DEF)
    {
        backpic      = MENU_BACK_PIC;
    
    
        items[0]     = "MENUITEM_DIFFICULTY_HARD_HEADING";
    
    
        items[1]     = "MENUITEM_DIFFICULTY_HARD_YES";
        items[2]     = "MENUITEM_DIFFICULTY_NO";
    
    
        defaultOutGame  = 2;    // NEWGAME
        defaultInGame   = 2;    // SAVEGAME
    
    
        flags = flags | MENU_SHOW_INFO;
    };
    
    
    INSTANCE MENUITEM_DIFFICULTY_HARD_HEADING(C_MENU_ITEM_DEF)
    {
        text[0]      =    "Ein NORMALES Spiel starten?";
        text[1]      =    "(Wirklich ein neues NORMALES Spiel starten?)";
        // Position und Dimension
        posx        =    0;        posy        = 3400;
        dimx        = 8100;        dimy        =  750;
    
    
        flags = flags & ~IT_SELECTABLE;
        flags = flags | IT_TXT_CENTER;
    };
    
    
    INSTANCE MENUITEM_DIFFICULTY_HARD_YES(C_MENU_ITEM_DEF)
    {
        backpic      = MENU_ITEM_BACK_PIC;
        text[0]      = "Ja";
        text[1]      = "(Ein neues Spiel mit diesem Schwierigkeitsgrad STARTEN)";  // Kommentar
    
    
        // Position und Dimension
        posx               =    0;        posy        = 4400;    
        dimx               = 8100;        dimy        =  750;
    
    
        // Aktionen
        MENU_DIFFICULTYNEW     = DIFFICULTY_HARD;
        
        onSelAction[0]      = SEL_ACTION_CLOSE;
        onSelAction_S[0]    = "NEW_GAME";
        // Weitere Eigenschaften
        flags = flags | IT_TXT_CENTER;
    };
    
    
    
    
    INSTANCE MENUITEM_DIFFICULTY_NO(C_MENU_ITEM_DEF)
    {
        backpic      =    MENU_ITEM_BACK_PIC;
        text[0]      =    "Nein";
        text[1]      =       "(KEIN neues Spiel mit diesem Schwierigkeitsgrad starten)";  // Kommentar
        // Position und Dimension
        posx               =    0;        posy        = 5000;    
        dimx               = 8100;        dimy        =  750;
        // Aktionen
        onSelAction[0]    = SEL_ACTION_BACK;
        // Weitere Eigenschaften
        flags = flags |IT_TXT_CENTER;
    };
    
    
    
    
    INSTANCE MENUITEM_DIFFICULTY_BACK(C_MENU_ITEM_DEF)
    {
        backpic        = MENU_ITEM_BACK_PIC;
        text[0]        = "ZURÜCK";
        text[1]        = "(KEIN neues Spiel starten)"; // Kommentar
    
    
        posx        =    0;        posy        = 6500;    
        dimx        = 8100;        dimy        =  750;
    
    
        // Aktionen
        onSelAction[0]      = SEL_ACTION_BACK;
    
    
        // Weitere Eigenschaften
        // flags        = IT_CHROMAKEYED|IT_TRANSPARENT|IT_MOVEABLE|IT_SELECTABLE|IT_TXT_CENTER;
        flags = flags | IT_TXT_CENTER;
    };
    Code:
    // SCHWIERIGKEITSGRAD - VELEN
    
        var   int MENU_DIFFICULTYNEW;
        const int DIFFICULTY_NORMAL = 1;
        const int DIFFICULTY_HARD   = 2;
    (Init_Global der Startup.d):

    Code:
    gameState_AddListener(DIV_SetDifficulty);
    Code:
    func void DIV_SetDifficulty(var int state){
        if (state == Gamestate_NewGame) || (state == Gamestate_Loaded) || (state == Gamestate_WorldChange)
        {
            if (!DifficultyForNewGameSet) 
            {
                var int symPtr; symPtr = GetAnyParserSymbol(MEM_ReadInt(menuParserPointerAddress), "MENU_DIFFICULTYNEW");
                if (symPtr) {
                    var zCPar_Symbol symb; symb = _^(symPtr);
                    // setDifficulty(symb.content);
                    DifficultyForNewGame = symb.content;
                    //MEM_SetGothOpt("VELEN", "vel_difficulty", IntToString(symb.content));
                    
                    Print ("symPtr");
                
                } else {
                
                    DifficultyForNewGame = 1;
                    //MEM_SetGothOpt("VELEN", "vel_difficulty", "1");    // Standard-Gothic
                    
                    Print ("KEIN symPtr!");
                };
                
                DifficultyForNewGameSet = true;
            };
            
            Print (IntToString (DifficultyForNewGame));
        };
    };
    symPtr ist, laut Print, definitiv auch immer vorhanden.

  6. Beiträge anzeigen #6 Zitieren
    now also in your universe  Avatar von Milky-Way
    Registriert seit
    Jun 2007
    Beiträge
    15.244
     
    Milky-Way ist offline
    Wenn ich mich richtig erinnere, war bei uns das Problem, dass die Variable nur beim Erstellen der Instanz (Menüseite) gesetzt wird. Wenn man Schwierigkeitsgrad 1 auswählt (Instanz wird erstellt, Variable auf 1 gesetzt), dann das starten eines neuen Spiels verneint, einen anderen Schwierigkeitsgrad 2 auswählt (Instanz wird erstellt, Variable auf 2 gesetzt), dort verneint, und wieder die erste Schwierigkeit auswählt (Instanz ist bereits erstellt, Variable wird nicht nochmals auf 1 gesetzt), dann glaubt der Spieler, dass die Schwierigkeit 1 gewählt ist, die Variable steht aber noch auf 2.

    So oder so ähnlich gab es bei uns, glaube ich, Probleme.

  7. Beiträge anzeigen #7 Zitieren
    Knight
    Registriert seit
    Aug 2009
    Ort
    Hessen
    Beiträge
    1.487
     
    Cryp18Struct ist offline
    Joa, die von mir geposteten Skripte haben genau diese fehlerhaften Symptome .
    Danke für den Hinweis.
    Geändert von Cryp18Struct (25.05.2019 um 18:57 Uhr)

  8. Beiträge anzeigen #8 Zitieren
    now also in your universe  Avatar von Milky-Way
    Registriert seit
    Jun 2007
    Beiträge
    15.244
     
    Milky-Way ist offline
    Zitat Zitat von Cryp18Struct Beitrag anzeigen
    Joa, die von mir geposteten Skripte haben genau diese fehlerhaften Symptome .
    Danke für den Hinweis.
    Ein Dank unseren Testern, die so lange rumklicken, bis sie ein Problem melden können

  9. Homepage besuchen Beiträge anzeigen #9 Zitieren
    Team Velen
    Registriert seit
    Aug 2015
    Beiträge
    952
     
    Bloodfly91 ist offline
    Ich habe es nun einfach ähnlich eingebaut, wie ihr in LoA, Milky-Way, so scheint es nun zu funktionieren, vielen Dank. Noch länger herumzuprobieren und herumzusuchen ist mir das momentan nicht wert, nur weil es mit einem Schieberegler eventuell nicht ganz so toll aussieht.
    Eine Frage hierzu hätte ich allerdings noch, und zwar finde ich es etwas unschön, dass der Eintrag für den gewählten Schwierigkeitsgrad in der Gothic.ini des Spielers stehen bleibt. Dieser Eintrag wird theoretisch nach dem Spielstart ja nicht mehr benötigt, da ich ganz einfach mit einer Variable arbeite, die per MEM_GetGothOpt gesetzt wird. Diese Option in der Gothic.ini sorgt auch dafür, dass, sobald man wieder ein neues Spiel startet, auch direkt die Schwierigkeit, die man zuletzt ausgewählt hatte, vorausgewählt ist (also zum Beispiel "Schwer" statt "Leicht").
    Gibt es eine Möglichkeit, im Spiel einen bestimmten Eintrag aus der Gothic.ini des Spielers zu entfernen?

    Edit: Theoretisch könnte ich ja per MEM_SetGothOpt auch einfach die Option in der Gothic.ini wieder auf 0 setzen, also dem leichten Schwierigkeitsgrad, sobald das neue Spiel gestartet wurde. Problem wäre trotzdem immer noch, dass der eingestellte Schwierigkeitsgrad im Hauptmenü bleibt, sollte der Spieler sich entscheiden, doch kein neues Spiel zu starten, das Spiel zu beenden und neuzustarten oder ähnliches. Man müsste also irgendwie, sobald der Spieler im Hauptmenü auf neues Spiel starten klickt, die Option in der Gothic.ini entweder wieder auf 0 setzen oder komplett löschen lassen. Nur ist das überhaupt irgendwie möglich? Ikarus- und LeGo-Funktionen kann man im Hauptmenü nicht verwenden, soweit ich weiß.
    Natürlich ist das alles mehr oder weniger nur ein Schönheitsfehler. Wäre trotzdem schön, wenn ich diesen noch irgendwie beheben könnte.

    Edit2: Ich habe eine Möglichkeit gefunden, die Option in der Gothic.ini zumindest dann zurückzusetzen, wenn der Spieler Gothic 2 neustartet. Auch wenn ein neues Spiel begonnen oder ein Spielstand geladen wird, wird diese Option in der Gothic.ini wieder zurückgesetzt. Das einzige Problem ist jetzt nur noch, dass die Option scheinbar nicht einfach zurückgesetzt werden kann, wenn der Spieler auf neues Spiel starten klickt, einen Schwierigkeitsgrad auswählt, dann aber aus irgendeinem Grund doch wieder zurück ins Hauptmenü wechselt. Wobei ich das gar nicht mal so schlimm finde und denke, dass es für den Spieler eventuell sogar ganz nützlich sein kann, sollte er zum Beispiel bereits einen Schwierigkeitsgrad für das neue Spiel ausgewählt haben, ihm dann aber einfallen, dass er vorher noch etwas in den Einstellungen ändern muss. Somit muss er danach nicht nochmal den Schwierigkeitsgrad anpassen.
    Geändert von Bloodfly91 (26.05.2019 um 13:33 Uhr)

  10. Beiträge anzeigen #10 Zitieren
    Legende der Amazonen Avatar von Bisasam
    Registriert seit
    Dec 2006
    Ort
    Meine Faust in Sinis Gesicht
    Beiträge
    9.639
     
    Bisasam ist offline
    Also ich hab einen globalen Schwierigkeitsgrad den man auch mitten im Game ändern kann.
    Dadurch kann man im laufenden Spiel auch mal schnell anpassen falls man merkt, dass man es vielleicht etwas schwerer oder leichter mag ohne ein neues Spiel starten zu müssen.
    Das ganze mache ich durch einen Schieberegler in den Optionen, der in einer Sekundenschleife abgefragt wird. Wenn Variable und Grad nicht übereinstimmen, werden Monster verstärkt oder geschwächt. Um keine Instant-Deaths zu produzieren, werden die HP der Monster sofort wieder aufgefüllt. Dadurch kann man das System auch nicht abusen um es sich total leicht zu machen und jedes Monster zu onehitten.


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

  11. Homepage besuchen Beiträge anzeigen #11 Zitieren
    Team Velen
    Registriert seit
    Aug 2015
    Beiträge
    952
     
    Bloodfly91 ist offline
    Das ist auch eine Möglichkeit, allerdings dürfte diese bei uns höchstwahrscheinlich dazu führen, dass Spieler es ganz einfach ausnutzen würden. Denn unser Schwierigkeitsgrad sorgt letztendlich nur dafür, dass man pro Levelaufstieg unterschiedliche LP und HP bekommt. Wählt man den leichten Schwierigkeitsgrad, bekommt man jeweils mehr von beidem, dafür ab einem bestimmten Level aber weniger. Somit wird das Spiel vor allem zu Beginn leichter. Wählt man den normalen Schwierigkeitsgrad, bekommt man während dem gesamten Spielverlauf die normalen LP und HP pro Levelaufstieg, die man auch in Gothic 2 bekommt.
    Nun könnten einige Spieler eventuell auf die Idee kommen, mit dem leichten Schwierigkeitsgrad zu starten. Sobald sie aber das Level erreicht haben, ab dem sie weniger HP und LP bekommen, als mit dem normalen Schwierigkeitsgrad, könnten sie auf den normalen Schwierigkeitsgrad wechseln. Somit würde der Spieler dann an viel mehr LP und HP kommen, was letztendlich das komplette Balancing durcheinanderbringen könnte, das Spiel zum Beispiel dann viel zu leicht ist.
    Dies lässt sich natürlich auch mit der Methode, die wir nun in unserer Modifikation verwenden, leider nicht komplett verhindern, denn es wäre nicht schwer, die Variable einfach zu ändern. Allerdings ist es denke ich unwahrscheinlicher, dass das jemand tut.

    Zitat Zitat von Bisasam Beitrag anzeigen
    Also ich hab einen globalen Schwierigkeitsgrad den man auch mitten im Game ändern kann.
    Dadurch kann man im laufenden Spiel auch mal schnell anpassen falls man merkt, dass man es vielleicht etwas schwerer oder leichter mag ohne ein neues Spiel starten zu müssen.
    Das ganze mache ich durch einen Schieberegler in den Optionen, der in einer Sekundenschleife abgefragt wird. Wenn Variable und Grad nicht übereinstimmen, werden Monster verstärkt oder geschwächt. Um keine Instant-Deaths zu produzieren, werden die HP der Monster sofort wieder aufgefüllt. Dadurch kann man das System auch nicht abusen um es sich total leicht zu machen und jedes Monster zu onehitten.

  12. #12 Zitieren
    Illari
    Gast
     
    Werden die Funktionen und Werte bei solch einem Schwierigkeitsgrad nicht im Save selbst gespeichert? Ich frage nur weil du sagst man könne mitten im Spiel bei euch den grad verändern.

  13. Beiträge anzeigen #13 Zitieren
    Legende der Amazonen Avatar von Bisasam
    Registriert seit
    Dec 2006
    Ort
    Meine Faust in Sinis Gesicht
    Beiträge
    9.639
     
    Bisasam ist offline
    Zitat Zitat von Illari Beitrag anzeigen
    Werden die Funktionen und Werte bei solch einem Schwierigkeitsgrad nicht im Save selbst gespeichert? Ich frage nur weil du sagst man könne mitten im Spiel bei euch den grad verändern.
    Falls das an mich war: Ich frage regelmäßig die durch die option gesetzte Schwierigkeit ab und ändere meine Variablen einfach. Ist gar nicht so schwer wenn man es einmal raus hat.


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

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