From c4e483539f8086c01e6d8d26a710b2fe32336f86 Mon Sep 17 00:00:00 2001 From: Wanne Date: Sat, 28 Feb 2009 09:16:25 +0000 Subject: [PATCH] Updates / Fixes by Arynn - Fixed: Mercs randomly drop aimed weapons automatically under some weird circumstances - Fixed: Merc are now a little more "talkactive" - Update: New option screen with "Next" and "Prev" button. This allows "unlimited" of options in the option screen - New: New "Forced turn base mode" option in the option screen and also available via keyboard shortcut (CTRL+ALT+SHIFT+T) in tactical. This forces the game to go in turn based mode when there are enemies in the sector. INFO: There is a new STI Graphic (OPTIONSCREENADDONS2.sti) which is needed for the updated option screen. You can download the file from http://ja2.h758491.serverkompetenz.net/Wanne/NewOptionScreen/OPTIONSCREENADDONS2.sti Put this file in your Data\Interface folder. If I build a new release I will upload the file to SVN GameDir and then remove it from my private download folder. git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@2610 3b4a5df2-a311-0410-b5c6-a8a6f20db521 --- GameSettings.cpp | 2 + GameSettings.h | 2 + Options Screen.cpp | 738 ++++++++++++++++++++++------------ Options Screen.h | 1 + Tactical/Handle UI.cpp | 21 +- Tactical/Overhead.cpp | 21 +- Tactical/Soldier Add.cpp | 25 +- Tactical/Turn Based Input.cpp | 29 +- Utils/Text.h | 2 + Utils/_ChineseText.cpp | 6 +- Utils/_DutchText.cpp | 6 +- Utils/_EnglishText.cpp | 6 +- Utils/_FrenchText.cpp | 6 +- Utils/_GermanText.cpp | 10 +- Utils/_ItalianText.cpp | 6 +- Utils/_PolishText.cpp | 4 + Utils/_RussianText.cpp | 6 +- Utils/_TaiwaneseText.cpp | 6 +- 18 files changed, 619 insertions(+), 278 deletions(-) diff --git a/GameSettings.cpp b/GameSettings.cpp index 31b1f178..52cc0103 100644 --- a/GameSettings.cpp +++ b/GameSettings.cpp @@ -311,6 +311,8 @@ void InitGameSettings() gGameSettings.fOptions[ TOPTION_SILENT_SKYRIDER ] = FALSE; gGameSettings.fOptions[ TOPTION_LOW_CPU_USAGE ] = FALSE; gGameSettings.fOptions[ TOPTION_ENHANCED_DESC_BOX ] = FALSE; + gGameSettings.fOptions[ TOPTION_TOGGLE_TURN_MODE ] = FALSE; + gGameSettings.ubSizeOfDisplayCover = 4; gGameSettings.ubSizeOfLOS = 4; diff --git a/GameSettings.h b/GameSettings.h index d90e6c7a..2a726983 100644 --- a/GameSettings.h +++ b/GameSettings.h @@ -58,6 +58,8 @@ enum TOPTION_SILENT_SKYRIDER, TOPTION_LOW_CPU_USAGE, TOPTION_ENHANCED_DESC_BOX, + TOPTION_TOGGLE_TURN_MODE, // arynn : add forced turn mode + NUM_GAME_OPTIONS, //Toggle up this will be able to be Toggled by the player diff --git a/Options Screen.cpp b/Options Screen.cpp index 6e090688..172a7e5b 100644 --- a/Options Screen.cpp +++ b/Options Screen.cpp @@ -39,6 +39,7 @@ #include "SmokeEffects.h" #endif +#include "line.h" // arynn : Debug Options Screen #include "connect.h" #include "WorldMan.h" @@ -54,25 +55,33 @@ #define OPT_MAIN_COLOR OPT_BUTTON_ON_COLOR #define OPT_HIGHLIGHT_COLOR FONT_MCOLOR_WHITE -#define OPTIONS_SCREEN_WIDTH 440 -#define OPTIONS_SCREEN_HEIGHT 400 +// these both could be established at run time, then never worry about it again +// derived from "OPTIONSCREENBASE.sti" +#define OPTIONS_SCREEN_WIDTH 638 +#define OPTIONS_SCREEN_HEIGHT 478 -#define OPTIONS__TOP_LEFT_X iScreenWidthOffset + 100 -#define OPTIONS__TOP_LEFT_Y iScreenHeightOffset + 40 -#define OPTIONS__BOTTOM_RIGHT_X OPTIONS__TOP_LEFT_X + OPTIONS_SCREEN_WIDTH -#define OPTIONS__BOTTOM_RIGHT_Y OPTIONS__TOP_LEFT_Y + OPTIONS_SCREEN_HEIGHT +#define OPTIONS__TOP_LEFT_X iScreenWidthOffset +#define OPTIONS__TOP_LEFT_Y iScreenHeightOffset +#define OPTIONS__BOTTOM_RIGHT_X OPTIONS__TOP_LEFT_X + OPTIONS_SCREEN_WIDTH +#define OPTIONS__BOTTOM_RIGHT_Y OPTIONS__TOP_LEFT_Y + OPTIONS_SCREEN_HEIGHT -#define OPT_SAVE_BTN_X iScreenWidthOffset + 51 +#define OPT_SAVE_BTN_X iScreenWidthOffset + 50 #define OPT_SAVE_BTN_Y iScreenHeightOffset + 438 -#define OPT_LOAD_BTN_X iScreenWidthOffset + 190 -#define OPT_LOAD_BTN_Y OPT_SAVE_BTN_Y +#define OPT_LOAD_BTN_X iScreenWidthOffset + 120 +#define OPT_LOAD_BTN_Y OPT_SAVE_BTN_Y -#define OPT_QUIT_BTN_X (SCREEN_WIDTH - 640)/ 2 + 329 -#define OPT_QUIT_BTN_Y OPT_SAVE_BTN_Y +#define OPT_QUIT_BTN_X iScreenWidthOffset + 190 +#define OPT_QUIT_BTN_Y OPT_SAVE_BTN_Y +// arynn : need more option screen toggles : Add in buttons that allow for options column paging +#define OPT_PREV_BTN_X iScreenWidthOffset + 310 +#define OPT_PREV_BTN_Y OPT_SAVE_BTN_Y -#define OPT_DONE_BTN_X iScreenWidthOffset + 469 -#define OPT_DONE_BTN_Y OPT_SAVE_BTN_Y +#define OPT_NEXT_BTN_X iScreenWidthOffset + 420 +#define OPT_NEXT_BTN_Y OPT_SAVE_BTN_Y + +#define OPT_DONE_BTN_X iScreenWidthOffset + 550 +#define OPT_DONE_BTN_Y OPT_SAVE_BTN_Y #define OPT_GAP_BETWEEN_TOGGLE_BOXES 18 @@ -91,15 +100,15 @@ #define OPT_TOGGLE_BOX_FIRST_COLUMN_START_Y iScreenHeightOffset + 82 #define OPT_TOGGLE_BOX_SECOND_COLUMN_X iScreenWidthOffset + 435 -#define OPT_TOGGLE_BOX_SECOND_COLUMN_START_Y OPT_TOGGLE_BOX_FIRST_COLUMN_START_Y +#define OPT_TOGGLE_BOX_SECOND_COLUMN_START_Y OPT_TOGGLE_BOX_FIRST_COLUMN_START_Y -#define OPT_TOGGLE_BOX_TEXT_WIDTH OPT_TOGGLE_BOX_SECOND_COLUMN_X - OPT_TOGGLE_BOX_FIRST_COLUMN_X - 20 +#define OPT_TOGGLE_BOX_TEXT_WIDTH OPT_TOGGLE_BOX_SECOND_COLUMN_X - OPT_TOGGLE_BOX_FIRST_COLUMN_X - 20 // Slider bar defines -#define OPT_GAP_BETWEEN_SLIDER_BARS 60 -#define OPT_SLIDER_BAR_SIZE 258 +#define OPT_GAP_BETWEEN_SLIDER_BARS 60 +#define OPT_SLIDER_BAR_SIZE 258 -#define OPT_SLIDER_TEXT_WIDTH 45 +#define OPT_SLIDER_TEXT_WIDTH 45 #define OPT_SOUND_FX_TEXT_X iScreenWidthOffset + 38 #define OPT_SOUND_FX_TEXT_Y iScreenHeightOffset + 87 @@ -110,21 +119,27 @@ #define OPT_MUSIC_TEXT_X iScreenWidthOffset + 137 #define OPT_MUSIC_TEXT_Y OPT_SOUND_FX_TEXT_Y -#define OPT_TEXT_TO_SLIDER_OFFSET_Y 25 +#define OPT_TEXT_TO_SLIDER_OFFSET_Y 25 #define OPT_SOUND_EFFECTS_SLIDER_X iScreenWidthOffset + 56 #define OPT_SOUND_EFFECTS_SLIDER_Y iScreenHeightOffset + 126 #define OPT_SPEECH_SLIDER_X iScreenWidthOffset + 107 -#define OPT_SPEECH_SLIDER_Y OPT_SOUND_EFFECTS_SLIDER_Y +#define OPT_SPEECH_SLIDER_Y OPT_SOUND_EFFECTS_SLIDER_Y #define OPT_MUSIC_SLIDER_X iScreenWidthOffset + 158 -#define OPT_MUSIC_SLIDER_Y OPT_SOUND_EFFECTS_SLIDER_Y +#define OPT_MUSIC_SLIDER_Y OPT_SOUND_EFFECTS_SLIDER_Y -#define OPT_MUSIC_SLIDER_PLAY_SOUND_DELAY 75 +#define OPT_MUSIC_SLIDER_PLAY_SOUND_DELAY 75 #define OPT_FIRST_COLUMN_TOGGLE_CUT_OFF 18 +#define MAX_NUMBER_OF_OPTION_TOGGLES OPT_FIRST_COLUMN_TOGGLE_CUT_OFF * 2 +#define MAX_NUMBER_OF_COLUMNS ((NUM_GAME_OPTIONS / OPT_FIRST_COLUMN_TOGGLE_CUT_OFF)-1) +// arynn : added some defines to control feedback during debugging +//#define OPTIONS_SCREEN_DEBUG_DRAWRECT_AROUND_REGION +//#define OPTIONSCREEN_DEBUG_FEEDBACK +//#define OPTIONSCREEN_DEBUG_FEEDBACK2 ///////////////////////////////// // @@ -144,7 +159,7 @@ BOOLEAN gfOptionsScreenEntry = TRUE; BOOLEAN gfOptionsScreenExit = FALSE; BOOLEAN gfRedrawOptionsScreen = TRUE; -CHAR8 gzSavedGameName[ 128 ]; +CHAR8 gzSavedGameName[ 128 ]; BOOLEAN gfEnteredFromMapScreen=FALSE; UINT32 guiOptionsScreen = OPTIONS_SCREEN; @@ -157,33 +172,51 @@ BOOLEAN gfExitOptionsAfterMessageBox = FALSE; UINT32 guiSoundFxSliderMoving = 0xffffffff; UINT32 guiSpeechSliderMoving = 0xffffffff; -INT32 giOptionsMessageBox = -1; // Options pop up messages index value +INT32 giOptionsMessageBox = -1; // Options pop up messages index value -INT8 gbHighLightedOptionText = -1; +INT8 gbHighLightedOptionText = -1; BOOLEAN gfHideBloodAndGoreOption=FALSE; //If a germany build we are to hide the blood and gore option -UINT8 gubFirstColOfOptions=OPT_FIRST_COLUMN_TOGGLE_CUT_OFF; +UINT8 gubFirstColOfOptions=OPT_FIRST_COLUMN_TOGGLE_CUT_OFF; BOOLEAN gfSettingOfTreeTopStatusOnEnterOfOptionScreen; BOOLEAN gfSettingOfItemGlowStatusOnEnterOfOptionScreen; -BOOLEAN gfSettingOfDontAnimateSmoke; +BOOLEAN gfSettingOfDontAnimateSmoke; // Goto save game Button void BtnOptGotoSaveGameCallback(GUI_BUTTON *btn,INT32 reason); -UINT32 guiOptGotoSaveGameBtn; +UINT32 guiOptGotoSaveGameBtn; INT32 giOptionsButtonImages; // Goto load game button void BtnOptGotoLoadGameCallback(GUI_BUTTON *btn,INT32 reason); -UINT32 guiOptGotoLoadGameBtn; +UINT32 guiOptGotoLoadGameBtn; INT32 giGotoLoadBtnImage; // QuitButton void BtnOptQuitCallback(GUI_BUTTON *btn,INT32 reason); -UINT32 guiQuitButton; +UINT32 guiQuitButton; INT32 giQuitBtnImage; +// arynn : need more option screen toggles : Add in button that allow for options column paging +// Options Screen globals +INT32 OptionsList_Column_Offset = 0 ; // the first column's starting point +INT32 Current_First_Option_Index; // index of the first (single) option in the first column, used in lookup option vs togglebox +INT32 Last_Count_Of_Toggles_Created; // index to control destroy toggle box function, basically limit loops to not exceed +void Create_Toggle_Buttons(); // these two are blcok removals from functions, an isolation of toggle create/destroy +void Destroy_Toggle_Buttons(); + +// Next Button +void BtnOptNextCallback(GUI_BUTTON *btn,INT32 reason); +UINT32 guiOptNextButton; +INT32 giOptNextBtnImage; + +// Prev Button +void BtnOptPrevCallback(GUI_BUTTON *btn,INT32 reason); +UINT32 guiOptPrevButton; +INT32 giOptPrevBtnImage; + // Done Button void BtnDoneCallback(GUI_BUTTON *btn,INT32 reason); extern UINT32 guiDoneButton; // symbol already declared globally in AimArchives.cpp (jonathanl) @@ -191,12 +224,14 @@ INT32 giDoneBtnImage; //checkbox to toggle tracking mode on or off -UINT32 guiOptionsToggles[ NUM_GAME_OPTIONS ]; +//UINT32 guiOptionsToggles[ NUM_GAME_OPTIONS ]; //old limiter is old ? +UINT32 guiOptionsToggles[ MAX_NUMBER_OF_OPTION_TOGGLES ]; void BtnOptionsTogglesCallback(GUI_BUTTON *btn,INT32 reason); //Mouse regions for the name of the option -MOUSE_REGION gSelectedOptionTextRegion[ NUM_GAME_OPTIONS ]; +//MOUSE_REGION gSelectedOptionTextRegion[ NUM_GAME_OPTIONS ]; //old limiter is old ? +MOUSE_REGION gSelectedOptionTextRegion[ MAX_NUMBER_OF_OPTION_TOGGLES ]; void SelectedOptionTextRegionCallBack(MOUSE_REGION * pRegion, INT32 iReason ); void SelectedOptionTextRegionMovementCallBack(MOUSE_REGION * pRegion, INT32 reason ); @@ -213,7 +248,7 @@ void SelectedToggleBoxAreaRegionMovementCallBack(MOUSE_REGION * pRegion, INT32 ///////////////////////////////// -BOOLEAN EnterOptionsScreen(); +BOOLEAN EnterOptionsScreen(); void RenderOptionsScreen(); void ExitOptionsScreen(); void HandleOptionsScreen(); @@ -224,7 +259,7 @@ void SetOptionsExitScreen( UINT32 uiExitScreen ); void SoundFXSliderChangeCallBack( INT32 iNewValue ); void SpeechSliderChangeCallBack( INT32 iNewValue ); void MusicSliderChangeCallBack( INT32 iNewValue ); -//BOOLEAN DoOptionsMessageBox( UINT8 ubStyle, STR16zString, UINT32 uiExitScreen, UINT8 ubFlags, MSGBOX_CALLBACK ReturnCallback ); +//BOOLEAN DoOptionsMessageBox( UINT8 ubStyle, STR16zString, UINT32 uiExitScreen, UINT8 ubFlags, MSGBOX_CALLBACK ReturnCallback ); void ConfirmQuitToMainMenuMessageBoxCallBack( UINT8 bExitValue ); void HandleSliderBarMovementSounds(); void HandleOptionToggle( UINT8 ubButton, BOOLEAN fState, BOOLEAN fDown, BOOLEAN fPlaySound ); @@ -314,26 +349,179 @@ UINT32 OptionsScreenHandle() return( guiOptionsScreen ); } - - UINT32 OptionsScreenShutdown() { return( TRUE ); } - - - - - - -BOOLEAN EnterOptionsScreen() +void Create_Toggle_Buttons() { - VOBJECT_DESC VObjectDesc; - UINT16 usPosY; + UINT16 usPosY; UINT8 cnt; UINT16 usTextWidth, usTextHeight; + // + // Toggle Boxes + // + Current_First_Option_Index = OptionsList_Column_Offset * OPT_FIRST_COLUMN_TOGGLE_CUT_OFF; + + usTextHeight = GetFontHeight( OPT_MAIN_FONT ); + + //Create the first column of check boxes + usPosY = OPT_TOGGLE_BOX_FIRST_COLUMN_START_Y; + + for( cnt=0; cnt OPT_TOGGLE_BOX_TEXT_WIDTH ) + { + //Get how many lines will be used to display the string, without displaying the string + UINT8 ubNumLines = (UINT8) ( DisplayWrappedString( 0, 0, OPT_TOGGLE_BOX_TEXT_WIDTH, 2, OPT_MAIN_FONT, OPT_HIGHLIGHT_COLOR, + zOptionsToggleText[ cnt + Current_First_Option_Index ], FONT_MCOLOR_BLACK, TRUE, + LEFT_JUSTIFIED | DONT_DISPLAY_TEXT ) / GetFontHeight( OPT_MAIN_FONT ) ); + + usTextWidth = OPT_TOGGLE_BOX_TEXT_WIDTH; + + //Create mouse regions for the option toggle text + MSYS_DefineRegion( &gSelectedOptionTextRegion[cnt], OPT_TOGGLE_BOX_FIRST_COLUMN_X+13, usPosY, + (UINT16)(OPT_TOGGLE_BOX_FIRST_COL_TEXT_X+usTextWidth), (UINT16)(usPosY+usTextHeight*ubNumLines), MSYS_PRIORITY_HIGH, + CURSOR_NORMAL, SelectedOptionTextRegionMovementCallBack, SelectedOptionTextRegionCallBack ); + MSYS_AddRegion( &gSelectedOptionTextRegion[cnt]); + MSYS_SetRegionUserData( &gSelectedOptionTextRegion[ cnt ], 0, cnt); + } + else + { + //Create mouse regions for the option toggle text + MSYS_DefineRegion( &gSelectedOptionTextRegion[cnt], OPT_TOGGLE_BOX_FIRST_COLUMN_X+13, usPosY, + (UINT16)(OPT_TOGGLE_BOX_FIRST_COL_TEXT_X+usTextWidth), (UINT16)(usPosY+usTextHeight), MSYS_PRIORITY_HIGH, + CURSOR_NORMAL, SelectedOptionTextRegionMovementCallBack, SelectedOptionTextRegionCallBack ); + MSYS_AddRegion( &gSelectedOptionTextRegion[cnt]); + MSYS_SetRegionUserData( &gSelectedOptionTextRegion[ cnt ], 0, cnt); + } + + + SetRegionFastHelpText( &gSelectedOptionTextRegion[ cnt ], zOptionsScreenHelpText[ cnt+ Current_First_Option_Index ] ); + SetButtonFastHelpText( guiOptionsToggles[ cnt ], zOptionsScreenHelpText[ cnt + Current_First_Option_Index ] ); + + usPosY += OPT_GAP_BETWEEN_TOGGLE_BOXES; + } + + + //Create the 2nd column of check boxes + usPosY = OPT_TOGGLE_BOX_FIRST_COLUMN_START_Y; + + for( ; cnt OPT_TOGGLE_BOX_TEXT_WIDTH ) + { + //Get how many lines will be used to display the string, without displaying the string + UINT8 ubNumLines = (UINT8) ( DisplayWrappedString( 0, 0, OPT_TOGGLE_BOX_TEXT_WIDTH, 2, OPT_MAIN_FONT, OPT_HIGHLIGHT_COLOR, + zOptionsToggleText[ cnt + Current_First_Option_Index ], FONT_MCOLOR_BLACK, TRUE, + LEFT_JUSTIFIED | DONT_DISPLAY_TEXT ) / GetFontHeight( OPT_MAIN_FONT ) ); + + usTextWidth = OPT_TOGGLE_BOX_TEXT_WIDTH; + + MSYS_DefineRegion( &gSelectedOptionTextRegion[cnt], OPT_TOGGLE_BOX_SECOND_COLUMN_X+13, usPosY, + (UINT16)(OPT_TOGGLE_BOX_SECOND_TEXT_X+usTextWidth), (UINT16)(usPosY+usTextHeight*ubNumLines), + MSYS_PRIORITY_HIGH, CURSOR_NORMAL, SelectedOptionTextRegionMovementCallBack, + SelectedOptionTextRegionCallBack ); + MSYS_AddRegion( &gSelectedOptionTextRegion[cnt]); + MSYS_SetRegionUserData( &gSelectedOptionTextRegion[ cnt ], 0, cnt ); + } + else + { + MSYS_DefineRegion( &gSelectedOptionTextRegion[cnt], OPT_TOGGLE_BOX_SECOND_COLUMN_X+13, usPosY, + (UINT16)(OPT_TOGGLE_BOX_SECOND_TEXT_X+usTextWidth), (UINT16)(usPosY+usTextHeight), + MSYS_PRIORITY_HIGH, CURSOR_NORMAL, SelectedOptionTextRegionMovementCallBack, + SelectedOptionTextRegionCallBack ); + MSYS_AddRegion( &gSelectedOptionTextRegion[cnt]); + MSYS_SetRegionUserData( &gSelectedOptionTextRegion[ cnt ], 0, cnt ); + } + + + SetRegionFastHelpText( &gSelectedOptionTextRegion[ cnt ], zOptionsScreenHelpText[ cnt+ Current_First_Option_Index ] ); + SetButtonFastHelpText( guiOptionsToggles[ cnt ], zOptionsScreenHelpText[ cnt + Current_First_Option_Index ] ); + + usPosY += OPT_GAP_BETWEEN_TOGGLE_BOXES; + } + + Last_Count_Of_Toggles_Created = cnt; + +} + +void Destroy_Toggle_Buttons() +{ + UINT8 cnt; + + //Remove the toggle buttons + for( cnt=0; cnt= Last_Count_Of_Toggles_Created ) + { + break; + } + + RemoveButton( guiOptionsToggles[ cnt ] ); + + MSYS_RemoveRegion( &gSelectedOptionTextRegion[cnt]); + } + +} + +BOOLEAN EnterOptionsScreen() +{ + VOBJECT_DESC VObjectDesc; + // WANNE: Do not draw the blackground back //ColorFillVideoSurfaceArea( FRAME_BUFFER, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 0 ); @@ -394,8 +582,8 @@ Uncomment this to enable the check for files to activate the blood and gore opti CHECKF(AddVideoObject(&VObjectDesc, &guiOptionsAddOnImages)); //Save game button - giOptionsButtonImages = LoadButtonImage("INTERFACE\\OptionScreenAddons.sti", -1,2,-1,3,-1 ); - guiOptGotoSaveGameBtn = CreateIconAndTextButton( giOptionsButtonImages, zOptionsText[OPT_SAVE_GAME], OPT_BUTTON_FONT, + giOptionsButtonImages = LoadButtonImage("INTERFACE\\OptionScreenAddons2.sti", -1,2,-1,3,-1 ); + guiOptGotoSaveGameBtn = CreateIconAndTextButton( giOptionsButtonImages, zOptionsText[OPT_SAVE_GAME], OPT_BUTTON_FONT2, OPT_BUTTON_ON_COLOR, DEFAULT_SHADOW, OPT_BUTTON_OFF_COLOR, DEFAULT_SHADOW, TEXT_CJUSTIFIED, @@ -409,7 +597,7 @@ Uncomment this to enable the check for files to activate the blood and gore opti //Load game button giGotoLoadBtnImage = UseLoadedButtonImage( giOptionsButtonImages, -1,2,-1,3,-1 ); - guiOptGotoLoadGameBtn = CreateIconAndTextButton( giGotoLoadBtnImage, zOptionsText[OPT_LOAD_GAME], OPT_BUTTON_FONT, + guiOptGotoLoadGameBtn = CreateIconAndTextButton( giGotoLoadBtnImage, zOptionsText[OPT_LOAD_GAME], OPT_BUTTON_FONT2, OPT_BUTTON_ON_COLOR, DEFAULT_SHADOW, OPT_BUTTON_OFF_COLOR, DEFAULT_SHADOW, TEXT_CJUSTIFIED, @@ -417,10 +605,9 @@ Uncomment this to enable the check for files to activate the blood and gore opti DEFAULT_MOVE_CALLBACK, BtnOptGotoLoadGameCallback); // SpecifyDisabledButtonStyle( guiBobbyRAcceptOrder, DISABLED_STYLE_SHADED ); - //Quit to main menu button giQuitBtnImage = UseLoadedButtonImage( giOptionsButtonImages, -1,2,-1,3,-1 ); - guiQuitButton = CreateIconAndTextButton( giQuitBtnImage, zOptionsText[OPT_MAIN_MENU], OPT_BUTTON_FONT, + guiQuitButton = CreateIconAndTextButton( giQuitBtnImage, zOptionsText[OPT_MAIN_MENU], OPT_BUTTON_FONT2, OPT_BUTTON_ON_COLOR, DEFAULT_SHADOW, OPT_BUTTON_OFF_COLOR, DEFAULT_SHADOW, TEXT_CJUSTIFIED, @@ -429,9 +616,38 @@ Uncomment this to enable the check for files to activate the blood and gore opti SpecifyDisabledButtonStyle( guiQuitButton, DISABLED_STYLE_HATCHED ); // DisableButton( guiQuitButton ); +// arynn : need more option screen toggles : Add in buttons that allow for options column paging + // Previous Column of options + giOptPrevBtnImage = UseLoadedButtonImage( giOptionsButtonImages, -1,2,-1,3,-1 ); + guiOptPrevButton = CreateIconAndTextButton( giOptPrevBtnImage, zOptionsText[OPT_PREV], OPT_BUTTON_FONT2, + OPT_BUTTON_ON_COLOR, DEFAULT_SHADOW, + OPT_BUTTON_OFF_COLOR, DEFAULT_SHADOW, + TEXT_CJUSTIFIED, + OPT_PREV_BTN_X, OPT_PREV_BTN_Y, BUTTON_TOGGLE, MSYS_PRIORITY_HIGH, + DEFAULT_MOVE_CALLBACK, BtnOptPrevCallback); + SpecifyDisabledButtonStyle( guiOptPrevButton, DISABLED_STYLE_HATCHED ); + if( OptionsList_Column_Offset == 0 ) + { + DisableButton( guiOptPrevButton ); + } + + // Next Column of options + giOptNextBtnImage = UseLoadedButtonImage( giOptionsButtonImages, -1,2,-1,3,-1 ); + guiOptNextButton = CreateIconAndTextButton( giOptNextBtnImage, zOptionsText[OPT_NEXT], OPT_BUTTON_FONT2, + OPT_BUTTON_ON_COLOR, DEFAULT_SHADOW, + OPT_BUTTON_OFF_COLOR, DEFAULT_SHADOW, + TEXT_CJUSTIFIED, + OPT_NEXT_BTN_X, OPT_NEXT_BTN_Y, BUTTON_TOGGLE, MSYS_PRIORITY_HIGH, + DEFAULT_MOVE_CALLBACK, BtnOptNextCallback); + SpecifyDisabledButtonStyle( guiOptNextButton, DISABLED_STYLE_HATCHED ); + if( OptionsList_Column_Offset >= MAX_NUMBER_OF_COLUMNS ) + { + DisableButton( guiOptNextButton ); + } + //Done button giDoneBtnImage = UseLoadedButtonImage( giOptionsButtonImages, -1,2,-1,3,-1 ); - guiDoneButton = CreateIconAndTextButton( giDoneBtnImage, zOptionsText[OPT_DONE], OPT_BUTTON_FONT, + guiDoneButton = CreateIconAndTextButton( giDoneBtnImage, zOptionsText[OPT_DONE], OPT_BUTTON_FONT2, OPT_BUTTON_ON_COLOR, DEFAULT_SHADOW, OPT_BUTTON_OFF_COLOR, DEFAULT_SHADOW, TEXT_CJUSTIFIED, @@ -439,109 +655,7 @@ Uncomment this to enable the check for files to activate the blood and gore opti DEFAULT_MOVE_CALLBACK, BtnDoneCallback); // SpecifyDisabledButtonStyle( guiBobbyRAcceptOrder, DISABLED_STYLE_SHADED ); - - - // - // Toggle Boxes - // - usTextHeight = GetFontHeight( OPT_MAIN_FONT ); - - //Create the first column of check boxes - usPosY = OPT_TOGGLE_BOX_FIRST_COLUMN_START_Y; - gubFirstColOfOptions = OPT_FIRST_COLUMN_TOGGLE_CUT_OFF; - for( cnt=0; cnt OPT_TOGGLE_BOX_TEXT_WIDTH ) - { - //Get how many lines will be used to display the string, without displaying the string - UINT8 ubNumLines = (UINT8) ( DisplayWrappedString( 0, 0, OPT_TOGGLE_BOX_TEXT_WIDTH, 2, OPT_MAIN_FONT, OPT_HIGHLIGHT_COLOR, zOptionsToggleText[ cnt ], FONT_MCOLOR_BLACK, TRUE, LEFT_JUSTIFIED | DONT_DISPLAY_TEXT ) / GetFontHeight( OPT_MAIN_FONT ) ); - - usTextWidth = OPT_TOGGLE_BOX_TEXT_WIDTH; - - //Create mouse regions for the option toggle text - MSYS_DefineRegion( &gSelectedOptionTextRegion[cnt], OPT_TOGGLE_BOX_FIRST_COLUMN_X+13, usPosY, (UINT16)(OPT_TOGGLE_BOX_FIRST_COL_TEXT_X+usTextWidth), (UINT16)(usPosY+usTextHeight*ubNumLines), MSYS_PRIORITY_HIGH, - CURSOR_NORMAL, SelectedOptionTextRegionMovementCallBack, SelectedOptionTextRegionCallBack ); - MSYS_AddRegion( &gSelectedOptionTextRegion[cnt]); - MSYS_SetRegionUserData( &gSelectedOptionTextRegion[ cnt ], 0, cnt); - } - else - { - //Create mouse regions for the option toggle text - MSYS_DefineRegion( &gSelectedOptionTextRegion[cnt], OPT_TOGGLE_BOX_FIRST_COLUMN_X+13, usPosY, (UINT16)(OPT_TOGGLE_BOX_FIRST_COL_TEXT_X+usTextWidth), (UINT16)(usPosY+usTextHeight), MSYS_PRIORITY_HIGH, - CURSOR_NORMAL, SelectedOptionTextRegionMovementCallBack, SelectedOptionTextRegionCallBack ); - MSYS_AddRegion( &gSelectedOptionTextRegion[cnt]); - MSYS_SetRegionUserData( &gSelectedOptionTextRegion[ cnt ], 0, cnt); - } - - - SetRegionFastHelpText( &gSelectedOptionTextRegion[ cnt ], zOptionsScreenHelpText[cnt] ); - SetButtonFastHelpText( guiOptionsToggles[ cnt ], zOptionsScreenHelpText[cnt] ); - - usPosY += OPT_GAP_BETWEEN_TOGGLE_BOXES; - } - - - //Create the 2nd column of check boxes - usPosY = OPT_TOGGLE_BOX_FIRST_COLUMN_START_Y; - for( cnt=gubFirstColOfOptions; cnt OPT_TOGGLE_BOX_TEXT_WIDTH ) - { - //Get how many lines will be used to display the string, without displaying the string - UINT8 ubNumLines = (UINT8) ( DisplayWrappedString( 0, 0, OPT_TOGGLE_BOX_TEXT_WIDTH, 2, OPT_MAIN_FONT, OPT_HIGHLIGHT_COLOR, zOptionsToggleText[ cnt ], FONT_MCOLOR_BLACK, TRUE, LEFT_JUSTIFIED | DONT_DISPLAY_TEXT ) / GetFontHeight( OPT_MAIN_FONT ) ); - - usTextWidth = OPT_TOGGLE_BOX_TEXT_WIDTH; - - MSYS_DefineRegion( &gSelectedOptionTextRegion[cnt], OPT_TOGGLE_BOX_SECOND_COLUMN_X+13, usPosY, (UINT16)(OPT_TOGGLE_BOX_SECOND_TEXT_X+usTextWidth), (UINT16)(usPosY+usTextHeight*ubNumLines), MSYS_PRIORITY_HIGH, - CURSOR_NORMAL, SelectedOptionTextRegionMovementCallBack, SelectedOptionTextRegionCallBack ); - MSYS_AddRegion( &gSelectedOptionTextRegion[cnt]); - MSYS_SetRegionUserData( &gSelectedOptionTextRegion[ cnt ], 0, cnt ); - } - else - { - MSYS_DefineRegion( &gSelectedOptionTextRegion[cnt], OPT_TOGGLE_BOX_SECOND_COLUMN_X+13, usPosY, (UINT16)(OPT_TOGGLE_BOX_SECOND_TEXT_X+usTextWidth), (UINT16)(usPosY+usTextHeight), MSYS_PRIORITY_HIGH, - CURSOR_NORMAL, SelectedOptionTextRegionMovementCallBack, SelectedOptionTextRegionCallBack ); - MSYS_AddRegion( &gSelectedOptionTextRegion[cnt]); - MSYS_SetRegionUserData( &gSelectedOptionTextRegion[ cnt ], 0, cnt ); - } - - - SetRegionFastHelpText( &gSelectedOptionTextRegion[ cnt ], zOptionsScreenHelpText[cnt] ); - SetButtonFastHelpText( guiOptionsToggles[ cnt ], zOptionsScreenHelpText[cnt] ); - - usPosY += OPT_GAP_BETWEEN_TOGGLE_BOXES; - } + Create_Toggle_Buttons(); // arynn : moved block out of func //Create a mouse region so when the user leaves a togglebox text region we can detect it then unselect the region MSYS_DefineRegion( &gSelectedToggleBoxAreaRegion, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, MSYS_PRIORITY_NORMAL, @@ -553,17 +667,20 @@ Uncomment this to enable the check for files to activate the blood and gore opti RenderOptionsScreen(); //Add a slider bar for the Sound Effects - guiSoundEffectsSliderID = AddSlider( SLIDER_VERTICAL_STEEL, CURSOR_NORMAL, OPT_SOUND_EFFECTS_SLIDER_X, OPT_SOUND_EFFECTS_SLIDER_Y, OPT_SLIDER_BAR_SIZE, 127, MSYS_PRIORITY_HIGH, SoundFXSliderChangeCallBack, 0 ); + guiSoundEffectsSliderID = AddSlider( SLIDER_VERTICAL_STEEL, CURSOR_NORMAL, OPT_SOUND_EFFECTS_SLIDER_X, OPT_SOUND_EFFECTS_SLIDER_Y, + OPT_SLIDER_BAR_SIZE, 127, MSYS_PRIORITY_HIGH, SoundFXSliderChangeCallBack, 0 ); AssertMsg( guiSoundEffectsSliderID, "Failed to AddSlider" ); SetSliderValue( guiSoundEffectsSliderID, GetSoundEffectsVolume() ); //Add a slider bar for the Speech - guiSpeechSliderID = AddSlider( SLIDER_VERTICAL_STEEL, CURSOR_NORMAL, OPT_SPEECH_SLIDER_X, OPT_SPEECH_SLIDER_Y, OPT_SLIDER_BAR_SIZE, 127, MSYS_PRIORITY_HIGH, SpeechSliderChangeCallBack, 0 ); + guiSpeechSliderID = AddSlider( SLIDER_VERTICAL_STEEL, CURSOR_NORMAL, OPT_SPEECH_SLIDER_X, OPT_SPEECH_SLIDER_Y, + OPT_SLIDER_BAR_SIZE, 127, MSYS_PRIORITY_HIGH, SpeechSliderChangeCallBack, 0 ); AssertMsg( guiSpeechSliderID, "Failed to AddSlider" ); SetSliderValue( guiSpeechSliderID, GetSpeechVolume() ); //Add a slider bar for the Music - guiMusicSliderID = AddSlider( SLIDER_VERTICAL_STEEL, CURSOR_NORMAL, OPT_MUSIC_SLIDER_X, OPT_MUSIC_SLIDER_Y, OPT_SLIDER_BAR_SIZE, 127, MSYS_PRIORITY_HIGH, MusicSliderChangeCallBack, 0 ); + guiMusicSliderID = AddSlider( SLIDER_VERTICAL_STEEL, CURSOR_NORMAL, OPT_MUSIC_SLIDER_X, OPT_MUSIC_SLIDER_Y, + OPT_SLIDER_BAR_SIZE, 127, MSYS_PRIORITY_HIGH, MusicSliderChangeCallBack, 0 ); AssertMsg( guiMusicSliderID, "Failed to AddSlider" ); SetSliderValue( guiMusicSliderID, MusicGetVolume() ); @@ -593,10 +710,8 @@ Uncomment this to enable the check for files to activate the blood and gore opti return( TRUE ); } - -void ExitOptionsScreen() +void ExitOptionsScreen() { - UINT8 cnt; if( gfExitOptionsDueToMessageBox ) { @@ -611,7 +726,9 @@ void ExitOptionsScreen() //Get the current status of the toggle boxes GetOptionsScreenToggleBoxes(); //The save the current settings to disk - SaveGameSettings(); + // arynn : note : if dynamic options (dif option sets for dif builds) is used, SaveGameSettings(), LoadGameSettings() + // arynn : note : is going to require differing JA2.set names for each build, this is because of settings order/organization/quantity + SaveGameSettings(); //Create the clock mouse region CreateMouseRegionForPauseOfClock( CLOCK_REGION_START_X, CLOCK_REGION_START_Y ); @@ -622,31 +739,22 @@ void ExitOptionsScreen() RemoveButton( guiOptGotoSaveGameBtn ); RemoveButton( guiOptGotoLoadGameBtn ); RemoveButton( guiQuitButton ); + RemoveButton( guiOptNextButton );// arynn : more option screen toggles + RemoveButton( guiOptPrevButton ); RemoveButton( guiDoneButton ); UnloadButtonImage( giOptionsButtonImages ); UnloadButtonImage( giGotoLoadBtnImage ); UnloadButtonImage( giQuitBtnImage ); + UnloadButtonImage( giOptNextBtnImage );// arynn : more option screen toggles + UnloadButtonImage( giOptPrevBtnImage ); UnloadButtonImage( giDoneBtnImage ); DeleteVideoObjectFromIndex( guiOptionBackGroundImage ); DeleteVideoObjectFromIndex( guiOptionsAddOnImages ); - //Remove the toggle buttons - for( cnt=0; cnt= Last_Count_Of_Toggles_Created ) + { + break; + } - usWidth = StringPixLength( zOptionsToggleText[ cnt ], OPT_MAIN_FONT ); + + usWidth = StringPixLength( zOptionsToggleText[ cnt + Current_First_Option_Index ], OPT_MAIN_FONT ); //if the string is going to wrap, move the string up a bit if( usWidth > OPT_TOGGLE_BOX_TEXT_WIDTH ) - DisplayWrappedString( OPT_TOGGLE_BOX_FIRST_COL_TEXT_X, usPosY, OPT_TOGGLE_BOX_TEXT_WIDTH, 2, OPT_MAIN_FONT, OPT_MAIN_COLOR, zOptionsToggleText[ cnt ], FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED ); + DisplayWrappedString( OPT_TOGGLE_BOX_FIRST_COL_TEXT_X, usPosY, OPT_TOGGLE_BOX_TEXT_WIDTH, 2, OPT_MAIN_FONT, OPT_MAIN_COLOR, + zOptionsToggleText[ cnt + Current_First_Option_Index ], FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED ); else - DrawTextToScreen( zOptionsToggleText[ cnt ], OPT_TOGGLE_BOX_FIRST_COL_TEXT_X, usPosY, 0, OPT_MAIN_FONT, OPT_MAIN_COLOR, FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED ); + DrawTextToScreen( zOptionsToggleText[ cnt + Current_First_Option_Index ], OPT_TOGGLE_BOX_FIRST_COL_TEXT_X, usPosY, 0, + OPT_MAIN_FONT, OPT_MAIN_COLOR, FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED ); usPosY += OPT_GAP_BETWEEN_TOGGLE_BOXES; } usPosY = OPT_TOGGLE_BOX_SECOND_COLUMN_START_Y + OPT_TOGGLE_TEXT_OFFSET_Y; + //Display the 2nd column of toggles - for( cnt=gubFirstColOfOptions; cnt= Last_Count_Of_Toggles_Created ) + { + break; + } + + usWidth = StringPixLength( zOptionsToggleText[ cnt + Current_First_Option_Index ], OPT_MAIN_FONT ); //if the string is going to wrap, move the string up a bit if( usWidth > OPT_TOGGLE_BOX_TEXT_WIDTH ) - DisplayWrappedString( OPT_TOGGLE_BOX_SECOND_TEXT_X, usPosY, OPT_TOGGLE_BOX_TEXT_WIDTH, 2, OPT_MAIN_FONT, OPT_MAIN_COLOR, zOptionsToggleText[ cnt ], FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED ); + DisplayWrappedString( OPT_TOGGLE_BOX_SECOND_TEXT_X, usPosY, OPT_TOGGLE_BOX_TEXT_WIDTH, 2, OPT_MAIN_FONT, OPT_MAIN_COLOR, + zOptionsToggleText[ cnt + Current_First_Option_Index ], FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED ); else - DrawTextToScreen( zOptionsToggleText[ cnt ], OPT_TOGGLE_BOX_SECOND_TEXT_X, usPosY, 0, OPT_MAIN_FONT, OPT_MAIN_COLOR, FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED ); + DrawTextToScreen( zOptionsToggleText[ cnt + Current_First_Option_Index ], OPT_TOGGLE_BOX_SECOND_TEXT_X, usPosY, 0, + OPT_MAIN_FONT, OPT_MAIN_COLOR, FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED ); usPosY += OPT_GAP_BETWEEN_TOGGLE_BOXES; } - - // // Text for the Slider Bars // //Display the Sound Fx text - DisplayWrappedString( OPT_SOUND_FX_TEXT_X, OPT_SOUND_FX_TEXT_Y, OPT_SLIDER_TEXT_WIDTH, 2, OPT_SLIDER_FONT, OPT_MAIN_COLOR, zOptionsText[ OPT_SOUND_FX ], FONT_MCOLOR_BLACK, FALSE, CENTER_JUSTIFIED ); + DisplayWrappedString( OPT_SOUND_FX_TEXT_X, OPT_SOUND_FX_TEXT_Y, OPT_SLIDER_TEXT_WIDTH, 2, OPT_SLIDER_FONT, OPT_MAIN_COLOR, + zOptionsText[ OPT_SOUND_FX ], FONT_MCOLOR_BLACK, FALSE, CENTER_JUSTIFIED ); //Display the Speech text - DisplayWrappedString( OPT_SPEECH_TEXT_X, OPT_SPEECH_TEXT_Y, OPT_SLIDER_TEXT_WIDTH, 2, OPT_SLIDER_FONT, OPT_MAIN_COLOR, zOptionsText[ OPT_SPEECH ], FONT_MCOLOR_BLACK, FALSE, CENTER_JUSTIFIED ); + DisplayWrappedString( OPT_SPEECH_TEXT_X, OPT_SPEECH_TEXT_Y, OPT_SLIDER_TEXT_WIDTH, 2, OPT_SLIDER_FONT, OPT_MAIN_COLOR, + zOptionsText[ OPT_SPEECH ], FONT_MCOLOR_BLACK, FALSE, CENTER_JUSTIFIED ); //Display the Music text - DisplayWrappedString( OPT_MUSIC_TEXT_X, OPT_MUSIC_TEXT_Y, OPT_SLIDER_TEXT_WIDTH, 2, OPT_SLIDER_FONT, OPT_MAIN_COLOR, zOptionsText[ OPT_MUSIC ], FONT_MCOLOR_BLACK, FALSE, CENTER_JUSTIFIED ); + DisplayWrappedString( OPT_MUSIC_TEXT_X, OPT_MUSIC_TEXT_Y, OPT_SLIDER_TEXT_WIDTH, 2, OPT_SLIDER_FONT, OPT_MAIN_COLOR, + zOptionsText[ OPT_MUSIC ], FONT_MCOLOR_BLACK, FALSE, CENTER_JUSTIFIED ); InvalidateRegion( OPTIONS__TOP_LEFT_X, OPTIONS__TOP_LEFT_Y, OPTIONS__BOTTOM_RIGHT_X, OPTIONS__BOTTOM_RIGHT_Y); + } - - - - - - - - -void GetOptionsScreenUserInput() +void GetOptionsScreenUserInput() { InputAtom Event; POINT MousePos; @@ -915,7 +1042,6 @@ void SetOptionsExitScreen( UINT32 uiExitScreen ) gfOptionsScreenExit = TRUE; } - void BtnOptGotoSaveGameCallback(GUI_BUTTON *btn,INT32 reason) { if(reason & MSYS_CALLBACK_REASON_LBUTTON_DWN ) @@ -962,7 +1088,6 @@ void BtnOptGotoLoadGameCallback(GUI_BUTTON *btn,INT32 reason) } } - void BtnOptQuitCallback(GUI_BUTTON *btn,INT32 reason) { if(reason & MSYS_CALLBACK_REASON_LBUTTON_DWN ) @@ -975,7 +1100,8 @@ void BtnOptQuitCallback(GUI_BUTTON *btn,INT32 reason) btn->uiFlags &= (~BUTTON_CLICKED_ON ); //Confirm the Exit to the main menu screen - DoOptionsMessageBox( MSG_BOX_BASIC_STYLE, zOptionsText[OPT_RETURN_TO_MAIN], OPTIONS_SCREEN, MSG_BOX_FLAG_YESNO, ConfirmQuitToMainMenuMessageBoxCallBack ); + DoOptionsMessageBox( MSG_BOX_BASIC_STYLE, zOptionsText[OPT_RETURN_TO_MAIN], OPTIONS_SCREEN, MSG_BOX_FLAG_YESNO, + ConfirmQuitToMainMenuMessageBoxCallBack ); /// SetOptionsExitScreen( MAINMENU_SCREEN ); @@ -988,6 +1114,114 @@ void BtnOptQuitCallback(GUI_BUTTON *btn,INT32 reason) } } +// arynn : need more option screen toggles : Functions for button callbacks +void BtnOptPrevCallback(GUI_BUTTON *btn,INT32 reason) +{ + if(reason & MSYS_CALLBACK_REASON_LBUTTON_DWN ) + { + btn->uiFlags |= BUTTON_CLICKED_ON; + InvalidateRegion(btn->Area.RegionTopLeftX, btn->Area.RegionTopLeftY, btn->Area.RegionBottomRightX, btn->Area.RegionBottomRightY); + } + if(reason & MSYS_CALLBACK_REASON_LBUTTON_UP ) + { + btn->uiFlags &= (~BUTTON_CLICKED_ON ); + + ExitOptionsScreen(); + + OptionsList_Column_Offset--; + if(OptionsList_Column_Offset < 0) OptionsList_Column_Offset = 0; + + OptionsScreenInit(); // arynn : This is important to refresh the screen properly, it indicates that we are to store a new SAVE_BUFFER +// OptionsScreenHandle(); // arynn : unsure about forcing this function now, or letting gameloop's screen management handle + +#if defined OPTIONSCREEN_DEBUG_FEEDBACK + CHAR16 Information_String1[200]; + CHAR16 Information_String2[200]; + + swprintf( Information_String1, L"OptionsList_Column_Offset : %d _ Current_First_Option_Index : %d _ Last_Count_Of_Toggles_Created : %d", + OptionsList_Column_Offset, + Current_First_Option_Index, + Last_Count_Of_Toggles_Created + ); + swprintf( Information_String2, L"%s", Information_String1); + + DoOptionsMessageBox( MSG_BOX_BASIC_STYLE, Information_String2, OPTIONS_SCREEN, MSG_BOX_FLAG_OK, NULL ); + gfExitOptionsDueToMessageBox = FALSE; +#endif + + + + InvalidateRegion(btn->Area.RegionTopLeftX, btn->Area.RegionTopLeftY, btn->Area.RegionBottomRightX, btn->Area.RegionBottomRightY); + } + if(reason & MSYS_CALLBACK_REASON_LOST_MOUSE) + { + btn->uiFlags &= (~BUTTON_CLICKED_ON ); + InvalidateRegion(btn->Area.RegionTopLeftX, btn->Area.RegionTopLeftY, btn->Area.RegionBottomRightX, btn->Area.RegionBottomRightY); + } +} + +void BtnOptNextCallback(GUI_BUTTON *btn,INT32 reason) +{ + if(reason & MSYS_CALLBACK_REASON_LBUTTON_DWN ) + { + btn->uiFlags |= BUTTON_CLICKED_ON; + InvalidateRegion(btn->Area.RegionTopLeftX, btn->Area.RegionTopLeftY, btn->Area.RegionBottomRightX, btn->Area.RegionBottomRightY); + } + if(reason & MSYS_CALLBACK_REASON_LBUTTON_UP ) + { + btn->uiFlags &= (~BUTTON_CLICKED_ON ); + + ExitOptionsScreen(); + + OptionsList_Column_Offset++; + if(OptionsList_Column_Offset > MAX_NUMBER_OF_COLUMNS) + OptionsList_Column_Offset = MAX_NUMBER_OF_COLUMNS; + + OptionsScreenInit(); // arynn : This is important to refresh the screen properly, it indicates that we are to store a new SAVE_BUFFER +// OptionsScreenHandle(); // arynn : unsure about forcing this function now, or letting gameloop's screen management handle + +#if defined OPTIONSCREEN_DEBUG_FEEDBACK + CHAR16 Information_String1[200]; + CHAR16 Information_String2[200]; + + swprintf( Information_String1, L"OptionsList_Column_Offset : %d _ Current_First_Option_Index : %d _ Last_Count_Of_Toggles_Created : %d", + OptionsList_Column_Offset, + Current_First_Option_Index, + Last_Count_Of_Toggles_Created + ); + //swprintf( Information_String1, L"%d / %d = %d _____ %d / %d = %d ", + // NUM_GAME_OPTIONS, OPT_FIRST_COLUMN_TOGGLE_CUT_OFF, ( (NUM_GAME_OPTIONS / OPT_FIRST_COLUMN_TOGGLE_CUT_OFF)), + // OPT_FIRST_COLUMN_TOGGLE_CUT_OFF, NUM_GAME_OPTIONS, ( (OPT_FIRST_COLUMN_TOGGLE_CUT_OFF / NUM_GAME_OPTIONS)) + // ); + swprintf( Information_String2, L"%s", Information_String1); + + DoOptionsMessageBox( MSG_BOX_BASIC_STYLE, Information_String2, OPTIONS_SCREEN, MSG_BOX_FLAG_OK, NULL ); + gfExitOptionsDueToMessageBox = FALSE; +#endif +#if defined OPTIONSCREEN_DEBUG_FEEDBACK2 + CHAR16 Information_String1[200]; + CHAR16 Information_String2[200]; + + swprintf( Information_String1, L"iScreenWidthOffset : %d \n iScreenHeightOffset : %d ", + iScreenWidthOffset, + iScreenHeightOffset + ); + swprintf( Information_String2, L"%s", Information_String1); + + DoOptionsMessageBox( MSG_BOX_BASIC_STYLE, Information_String2, OPTIONS_SCREEN, MSG_BOX_FLAG_OK, NULL ); + gfExitOptionsDueToMessageBox = FALSE; +#endif + + InvalidateRegion(btn->Area.RegionTopLeftX, btn->Area.RegionTopLeftY, btn->Area.RegionBottomRightX, btn->Area.RegionBottomRightY); + } + if(reason & MSYS_CALLBACK_REASON_LOST_MOUSE) + { + btn->uiFlags &= (~BUTTON_CLICKED_ON ); + InvalidateRegion(btn->Area.RegionTopLeftX, btn->Area.RegionTopLeftY, btn->Area.RegionBottomRightX, btn->Area.RegionBottomRightY); + } +} + + void BtnDoneCallback(GUI_BUTTON *btn,INT32 reason) { if(reason & MSYS_CALLBACK_REASON_LBUTTON_DWN ) @@ -1010,7 +1244,6 @@ void BtnDoneCallback(GUI_BUTTON *btn,INT32 reason) } } - void BtnOptionsTogglesCallback( GUI_BUTTON *btn, INT32 reason ) { UINT8 ubButton = (UINT8)MSYS_GetBtnUserData( btn, 0 ); @@ -1049,7 +1282,6 @@ void BtnOptionsTogglesCallback( GUI_BUTTON *btn, INT32 reason ) } - void HandleOptionToggle( UINT8 ubButton, BOOLEAN fState, BOOLEAN fDown, BOOLEAN fPlaySound ) { static UINT32 uiOptionToggleSound = NO_SAMPLE; @@ -1057,7 +1289,7 @@ void HandleOptionToggle( UINT8 ubButton, BOOLEAN fState, BOOLEAN fDown, BOOLEAN if( fState ) { - gGameSettings.fOptions[ ubButton ] = TRUE; + gGameSettings.fOptions[ ubButton + Current_First_Option_Index ] = TRUE; ButtonList[ guiOptionsToggles[ ubButton ] ]->uiFlags |= BUTTON_CLICKED_ON; @@ -1066,7 +1298,7 @@ void HandleOptionToggle( UINT8 ubButton, BOOLEAN fState, BOOLEAN fDown, BOOLEAN } else { - gGameSettings.fOptions[ ubButton ] = FALSE; + gGameSettings.fOptions[ ubButton + Current_First_Option_Index ] = FALSE; ButtonList[ guiOptionsToggles[ ubButton ] ]->uiFlags &= ~BUTTON_CLICKED_ON; @@ -1074,18 +1306,21 @@ void HandleOptionToggle( UINT8 ubButton, BOOLEAN fState, BOOLEAN fDown, BOOLEAN DrawCheckBoxButtonOff( guiOptionsToggles[ ubButton ] ); //check to see if the user is unselecting either the spech or subtitles toggle - if( ubButton == TOPTION_SPEECH || ubButton == TOPTION_SUBTITLES ) + if( ubButton + Current_First_Option_Index == TOPTION_SPEECH || ubButton + Current_First_Option_Index == TOPTION_SUBTITLES ) { //make sure that at least of of the toggles is still enabled + // arynn : use of TOPTION_SPEECH and TOPTION_SUBTITLES relies on the fact that, + // (ubButton + Current_First_Option_Index) == TOPTION_SPEECH || TOPTION_SUBTITLES if( !(ButtonList[ guiOptionsToggles[ TOPTION_SPEECH ] ]->uiFlags & BUTTON_CLICKED_ON) ) { if( !( ButtonList[ guiOptionsToggles[ TOPTION_SUBTITLES ] ]->uiFlags & BUTTON_CLICKED_ON ) ) { - gGameSettings.fOptions[ ubButton ] = TRUE; + gGameSettings.fOptions[ ubButton + Current_First_Option_Index ] = TRUE; ButtonList[ guiOptionsToggles[ ubButton ] ]->uiFlags |= BUTTON_CLICKED_ON; //Confirm the Exit to the main menu screen - DoOptionsMessageBox( MSG_BOX_BASIC_STYLE, zOptionsText[OPT_NEED_AT_LEAST_SPEECH_OR_SUBTITLE_OPTION_ON], OPTIONS_SCREEN, MSG_BOX_FLAG_OK, NULL ); + DoOptionsMessageBox( MSG_BOX_BASIC_STYLE, zOptionsText[OPT_NEED_AT_LEAST_SPEECH_OR_SUBTITLE_OPTION_ON], + OPTIONS_SCREEN, MSG_BOX_FLAG_OK, NULL ); gfExitOptionsDueToMessageBox = FALSE; } } @@ -1123,7 +1358,6 @@ void SoundFXSliderChangeCallBack( INT32 iNewValue ) guiSoundFxSliderMoving = GetJA2Clock(); } - void SpeechSliderChangeCallBack( INT32 iNewValue ) { SetSpeechVolume( iNewValue ); @@ -1131,19 +1365,20 @@ void SpeechSliderChangeCallBack( INT32 iNewValue ) guiSpeechSliderMoving = GetJA2Clock(); } - void MusicSliderChangeCallBack( INT32 iNewValue ) { MusicSetVolume( iNewValue ); } -BOOLEAN DoOptionsMessageBoxWithRect( UINT8 ubStyle, const STR16 zString, UINT32 uiExitScreen, UINT16 usFlags, MSGBOX_CALLBACK ReturnCallback, SGPRect *pCenteringRect ) +BOOLEAN DoOptionsMessageBoxWithRect( UINT8 ubStyle, const STR16 zString, UINT32 uiExitScreen, UINT16 usFlags, + MSGBOX_CALLBACK ReturnCallback, SGPRect *pCenteringRect ) { // reset exit mode gfExitOptionsDueToMessageBox = TRUE; // do message box and return - giOptionsMessageBox = DoMessageBox( ubStyle, zString, uiExitScreen, ( UINT16 ) ( usFlags| MSG_BOX_FLAG_USE_CENTERING_RECT ), ReturnCallback, pCenteringRect ); + giOptionsMessageBox = DoMessageBox( ubStyle, zString, uiExitScreen, ( UINT16 ) ( usFlags| MSG_BOX_FLAG_USE_CENTERING_RECT ), + ReturnCallback, pCenteringRect ); // send back return state return( ( giOptionsMessageBox != -1 ) ); @@ -1157,15 +1392,14 @@ BOOLEAN DoOptionsMessageBox( UINT8 ubStyle, const STR16 zString, UINT32 uiExitSc gfExitOptionsDueToMessageBox = TRUE; // do message box and return - giOptionsMessageBox = DoMessageBox( ubStyle, zString, uiExitScreen, ( UINT16 ) ( usFlags| MSG_BOX_FLAG_USE_CENTERING_RECT ), ReturnCallback, &CenteringRect ); + giOptionsMessageBox = DoMessageBox( ubStyle, zString, uiExitScreen, ( UINT16 ) ( usFlags| MSG_BOX_FLAG_USE_CENTERING_RECT ), + ReturnCallback, &CenteringRect ); // send back return state return( ( giOptionsMessageBox != -1 ) ); } - - -void ConfirmQuitToMainMenuMessageBoxCallBack( UINT8 bExitValue ) +void ConfirmQuitToMainMenuMessageBoxCallBack( UINT8 bExitValue ) { // yes, Quit to main menu if( bExitValue == MSG_BOX_RETURN_YES ) @@ -1192,33 +1426,31 @@ void ConfirmQuitToMainMenuMessageBoxCallBack( UINT8 bExitValue ) } } - void SetOptionsScreenToggleBoxes() { UINT8 cnt; - for( cnt=0; cntuiFlags |= BUTTON_CLICKED_ON; else ButtonList[ guiOptionsToggles[ cnt ] ]->uiFlags &= (~BUTTON_CLICKED_ON ); } } - - - void GetOptionsScreenToggleBoxes() { UINT8 cnt; - for( cnt=0; cntuiFlags & BUTTON_CLICKED_ON ) - gGameSettings.fOptions[ cnt ] = TRUE; + gGameSettings.fOptions[ cnt + Current_First_Option_Index ] = TRUE; else - gGameSettings.fOptions[ cnt ] = FALSE; + gGameSettings.fOptions[ cnt + Current_First_Option_Index ] = FALSE; } } @@ -1256,16 +1488,13 @@ void HandleSliderBarMovementSounds() } - - - void SelectedOptionTextRegionCallBack(MOUSE_REGION * pRegion, INT32 iReason ) { UINT8 ubButton = (UINT8)MSYS_GetRegionUserData( pRegion, 0 ); if (iReason & MSYS_CALLBACK_REASON_LBUTTON_UP) { - HandleOptionToggle( ubButton, (BOOLEAN)(!gGameSettings.fOptions[ ubButton ]), FALSE, TRUE ); + HandleOptionToggle( ubButton, (BOOLEAN)(!gGameSettings.fOptions[ ubButton + Current_First_Option_Index ]), FALSE, TRUE ); InvalidateRegion(pRegion->RegionTopLeftX, pRegion->RegionTopLeftY, pRegion->RegionBottomRightX, pRegion->RegionBottomRightY); } @@ -1284,7 +1513,6 @@ void SelectedOptionTextRegionCallBack(MOUSE_REGION * pRegion, INT32 iReason ) } } - void SelectedOptionTextRegionMovementCallBack(MOUSE_REGION * pRegion, INT32 reason ) { INT8 bButton = (INT8)MSYS_GetRegionUserData( pRegion, 0 ); @@ -1306,13 +1534,12 @@ void SelectedOptionTextRegionMovementCallBack(MOUSE_REGION * pRegion, INT32 reas } } - void HandleHighLightedText( BOOLEAN fHighLight ) { UINT16 usPosX=0; UINT16 usPosY=0; - UINT8 ubCnt; - INT8 bHighLight=-1; + UINT8 ubCnt; + INT8 bHighLight=-1; UINT16 usWidth; static INT8 bLastRegion = -1; @@ -1321,7 +1548,7 @@ void HandleHighLightedText( BOOLEAN fHighLight ) fHighLight = FALSE; //if the user has the mouse in one of the checkboxes - for( ubCnt=0; ubCnt OPT_TOGGLE_BOX_TEXT_WIDTH ) { if( fHighLight ) - DisplayWrappedString( usPosX, usPosY, OPT_TOGGLE_BOX_TEXT_WIDTH, 2, OPT_MAIN_FONT, OPT_HIGHLIGHT_COLOR, zOptionsToggleText[ bHighLight ], FONT_MCOLOR_BLACK, TRUE, LEFT_JUSTIFIED ); -// DrawTextToScreen( zOptionsToggleText[ bHighLight ], usPosX, usPosY, 0, OPT_MAIN_FONT, OPT_HIGHLIGHT_COLOR, FONT_MCOLOR_BLACK, TRUE, LEFT_JUSTIFIED ); + DisplayWrappedString( usPosX, usPosY, OPT_TOGGLE_BOX_TEXT_WIDTH, 2, OPT_MAIN_FONT, OPT_HIGHLIGHT_COLOR, + zOptionsToggleText[ bHighLight + Current_First_Option_Index ], FONT_MCOLOR_BLACK, TRUE, LEFT_JUSTIFIED ); + +// DrawTextToScreen( zOptionsToggleText[ bHighLight ], usPosX, usPosY, 0, OPT_MAIN_FONT, OPT_HIGHLIGHT_COLOR, +// FONT_MCOLOR_BLACK, TRUE, LEFT_JUSTIFIED ); else - DisplayWrappedString( usPosX, usPosY, OPT_TOGGLE_BOX_TEXT_WIDTH, 2, OPT_MAIN_FONT, OPT_MAIN_COLOR, zOptionsToggleText[ bHighLight ], FONT_MCOLOR_BLACK, TRUE, LEFT_JUSTIFIED ); -// DrawTextToScreen( zOptionsToggleText[ bHighLight ], usPosX, usPosY, 0, OPT_MAIN_FONT, OPT_MAIN_COLOR, FONT_MCOLOR_BLACK, TRUE, LEFT_JUSTIFIED ); + DisplayWrappedString( usPosX, usPosY, OPT_TOGGLE_BOX_TEXT_WIDTH, 2, OPT_MAIN_FONT, OPT_MAIN_COLOR, + zOptionsToggleText[ bHighLight + Current_First_Option_Index ], FONT_MCOLOR_BLACK, TRUE, LEFT_JUSTIFIED ); + +// DrawTextToScreen( zOptionsToggleText[ bHighLight ], usPosX, usPosY, 0, OPT_MAIN_FONT, OPT_MAIN_COLOR, +// FONT_MCOLOR_BLACK, TRUE, LEFT_JUSTIFIED ); } else { if( fHighLight ) - DrawTextToScreen( zOptionsToggleText[ bHighLight ], usPosX, usPosY, 0, OPT_MAIN_FONT, OPT_HIGHLIGHT_COLOR, FONT_MCOLOR_BLACK, TRUE, LEFT_JUSTIFIED ); + DrawTextToScreen( zOptionsToggleText[ bHighLight + Current_First_Option_Index ], usPosX, usPosY, 0, + OPT_MAIN_FONT, OPT_HIGHLIGHT_COLOR, FONT_MCOLOR_BLACK, TRUE, LEFT_JUSTIFIED ); else - DrawTextToScreen( zOptionsToggleText[ bHighLight ], usPosX, usPosY, 0, OPT_MAIN_FONT, OPT_MAIN_COLOR, FONT_MCOLOR_BLACK, TRUE, LEFT_JUSTIFIED ); + DrawTextToScreen( zOptionsToggleText[ bHighLight + Current_First_Option_Index ], usPosX, usPosY, 0, + OPT_MAIN_FONT, OPT_MAIN_COLOR, FONT_MCOLOR_BLACK, TRUE, LEFT_JUSTIFIED ); } } } - - void SelectedToggleBoxAreaRegionMovementCallBack(MOUSE_REGION * pRegion, INT32 reason ) { if( reason & MSYS_CALLBACK_REASON_LOST_MOUSE ) @@ -1414,7 +1648,7 @@ void SelectedToggleBoxAreaRegionMovementCallBack(MOUSE_REGION * pRegion, INT32 r UINT8 ubCnt; //loop through all the toggle box's and remove the in area flag - for( ubCnt=0;ubCntArea.uiFlags &= ~MSYS_MOUSE_IN_AREA; } diff --git a/Options Screen.h b/Options Screen.h index 612a76b9..46872b8e 100644 --- a/Options Screen.h +++ b/Options Screen.h @@ -4,6 +4,7 @@ #include "MessageBoxScreen.h" #define OPT_BUTTON_FONT FONT14ARIAL +#define OPT_BUTTON_FONT2 FONT10ARIAL //smaller button on options screen #define OPT_BUTTON_ON_COLOR 73//FONT_MCOLOR_WHITE #define OPT_BUTTON_OFF_COLOR 73//FONT_MCOLOR_WHITE diff --git a/Tactical/Handle UI.cpp b/Tactical/Handle UI.cpp index 0c8b5021..e93eedae 100644 --- a/Tactical/Handle UI.cpp +++ b/Tactical/Handle UI.cpp @@ -1901,7 +1901,7 @@ UINT32 UIHandleCMoveMerc( UI_EVENT *pUIEvent ) //else if ( pSoldier->EVENT_InternalGetNewSoldierPath( sMapPos, pSoldier->usUIMovementMode, TRUE, FALSE ) ) { - pSoldier->InternalSoldierReadyWeapon( BATTLE_SOUND_OK1, BATTLE_SND_LOWER_VOLUME ); + pSoldier->InternalDoMercBattleSound( BATTLE_SOUND_OK1, BATTLE_SND_LOWER_VOLUME ); } else { @@ -4703,7 +4703,20 @@ BOOLEAN MakeSoldierTurn( SOLDIERTYPE *pSoldier, INT16 sXPos, INT16 sYPos ) // ATE: make stationary if... if ( pSoldier->flags.fNoAPToFinishMove ) { - pSoldier->SoldierGotoStationaryStance( ); + // arynn : fix lower ready weapons + //previously "ready weapon" state was being dropped in a couple of cases + //the fix involves bypassing the reset animation state for the various "ready weapon" types + //since this is a reset animation function, we should be VERY specific about when and what we dont reset + + UINT16 test; + test = pSoldier->usAnimState; + if (!( test == AIM_RIFLE_STAND || test == AIM_RIFLE_CROUCH || + test == AIM_RIFLE_PRONE || test == AIM_DUAL_STAND || + test == AIM_DUAL_CROUCH || test == AIM_DUAL_PRONE + )) + { + pSoldier->SoldierGotoStationaryStance( ); + }// arynn : fix lower ready weapon end_if } //DEF: made it an event @@ -5100,7 +5113,7 @@ void EndMultiSoldierSelection( BOOLEAN fAcknowledge ) } if( !gGameSettings.fOptions[ TOPTION_MUTE_CONFIRMATIONS ] && fAcknowledge ) - pSoldier->InternalSoldierReadyWeapon( BATTLE_SOUND_ATTN1, BATTLE_SND_LOWER_VOLUME ); + pSoldier->InternalDoMercBattleSound( BATTLE_SOUND_ATTN1, BATTLE_SND_LOWER_VOLUME ); if ( pSoldier->flags.fMercAsleep ) { @@ -5227,7 +5240,7 @@ BOOLEAN HandleMultiSelectionMove( INT16 sDestGridNo ) if ( pSoldier->EVENT_InternalGetNewSoldierPath( sDestGridNo, pSoldier->usUIMovementMode , TRUE, pSoldier->flags.fNoAPToFinishMove ) ) { - pSoldier->InternalSoldierReadyWeapon( BATTLE_SOUND_OK1, BATTLE_SND_LOWER_VOLUME ); + pSoldier->InternalDoMercBattleSound( BATTLE_SOUND_OK1, BATTLE_SND_LOWER_VOLUME ); } else { diff --git a/Tactical/Overhead.cpp b/Tactical/Overhead.cpp index 29f79e99..dd080668 100644 --- a/Tactical/Overhead.cpp +++ b/Tactical/Overhead.cpp @@ -5729,6 +5729,8 @@ void ExitCombatMode( ) EndTopMessage( ); + ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"Exit combat mode");// arynn : add forced turn mode + // OK, we have exited combat mode..... // Reset some flags for no aps to move, etc @@ -5746,7 +5748,21 @@ void ExitCombatMode( ) if ( pSoldier->flags.fNoAPToFinishMove && pSoldier->stats.bLife >= OKLIFE ) { pSoldier->AdjustNoAPToFinishMove( FALSE ); - pSoldier->SoldierGotoStationaryStance( ); + + // arynn : fix lower ready weapons + //previously "ready weapon" state was being dropped in a couple of cases + //the fix involves bypassing the reset animation state for the various "ready weapon" types + //since this is a reset animation function, we should be VERY specific about when and what we dont reset + + UINT16 test; + test = pSoldier->usAnimState; + if (!( test == AIM_RIFLE_STAND || test == AIM_RIFLE_CROUCH || + test == AIM_RIFLE_PRONE || test == AIM_DUAL_STAND || + test == AIM_DUAL_CROUCH || test == AIM_DUAL_PRONE + )) + { + pSoldier->SoldierGotoStationaryStance( ); + }// arynn : fix lower ready weapon end_if } //Cancel pending events @@ -6082,7 +6098,8 @@ BOOLEAN CheckForEndOfCombatMode( BOOLEAN fIncrementTurnsNotSeen ) gTacticalStatus.bConsNumTurnsWeHaventSeenButEnemyDoes = 0; // If we have reach a point where a cons. number of turns gone by.... - if ( gTacticalStatus.bConsNumTurnsNotSeen > 1 ) + //if ( gTacticalStatus.bConsNumTurnsNotSeen > 1 ) + if ( gTacticalStatus.bConsNumTurnsNotSeen > 1 && !gGameSettings.fOptions[ TOPTION_TOGGLE_TURN_MODE ])// arynn : add forced turn mode { if(is_networked && !getReal)//hayden diff --git a/Tactical/Soldier Add.cpp b/Tactical/Soldier Add.cpp index ffdb930b..838fd3b9 100644 --- a/Tactical/Soldier Add.cpp +++ b/Tactical/Soldier Add.cpp @@ -23,6 +23,10 @@ #include "Exit Grids.h" #endif + +#include "GameSettings.h" // arynn : add forced turn mode +#include "font control.h" // arynn : add forced turn mode +#include "message.h" // arynn : add forced turn mode #include "connect.h" //forward declarations of common classes to eliminate includes class OBJECTTYPE; @@ -1522,12 +1526,21 @@ void AddSoldierToSectorGridNo( SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT8 ubDir // If he's an enemy... set presence if ( !pSoldier->aiData.bNeutral && (pSoldier->bSide != gbPlayerNum ) ) { - // ATE: Added if not bloodcats - // only do this once they are seen..... - if ( pSoldier->ubBodyType != BLOODCAT ) - { - SetEnemyPresence( ); - } + // ATE: Added if not bloodcats + // only do this once they are seen..... + if ( pSoldier->ubBodyType != BLOODCAT ) + { + SetEnemyPresence( ); + // arynn : add forced turn mode : note not for bloodcats.. + if ( gGameSettings.fOptions[ TOPTION_TOGGLE_TURN_MODE ]) + { + ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"Forced Turn Mode Active, Entering Combat" ); + if( Random( 100 ) >= Random( 100 ) ) // give a chance for either to go first + EnterCombatMode( OUR_TEAM ); + else + EnterCombatMode( ENEMY_TEAM ); + }// arynn : add forced turn mode + } } } diff --git a/Tactical/Turn Based Input.cpp b/Tactical/Turn Based Input.cpp index f47d32a2..3e8ef2e1 100644 --- a/Tactical/Turn Based Input.cpp +++ b/Tactical/Turn Based Input.cpp @@ -205,6 +205,7 @@ void ToggleWireFrame(); void RefreshSoldier(); void ChangeSoldiersBodyType( UINT8 ubBodyType, BOOLEAN fCreateNewPalette ); void TeleportSelectedSoldier(); +void ToggleTurnMode();// arynn : add forced turn mode void ToggleTreeTops(); void ToggleZBuffer(); void TogglePlanningMode(); @@ -3662,9 +3663,16 @@ void GetKeyboardInput( UINT32 *puiNewEvent ) ToggleTreeTops(); break; - case 'T': - //resort Team by ubID - SortSquadByID(MercPtrs[gusSelectedSoldier]->bTeam); + case 'T': + if ( fCtrl && fShift && fAlt && !is_networked)// arynn : add forced turn mode + { + ToggleTurnMode(); + } + else + { + //resort Team by ubID + SortSquadByID(MercPtrs[gusSelectedSoldier]->bTeam); + } break; case '=': @@ -4519,7 +4527,20 @@ void TeleportSelectedSoldier() } } - +void ToggleTurnMode()// arynn : add forced turn mode +{ + if ( !gGameSettings.fOptions[ TOPTION_TOGGLE_TURN_MODE ] ) + { + ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"Forced Turn Mode" ); + gGameSettings.fOptions[ TOPTION_TOGGLE_TURN_MODE ] = TRUE; + EnterCombatMode( OUR_TEAM ); // arynn : randomize ? i'm leaving this for now due to "i made the call, i get dibs" + } + else + { + ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"Normal turn mode"); + gGameSettings.fOptions[ TOPTION_TOGGLE_TURN_MODE ] = FALSE; + } +}// arynn : add forced turn mode void ToggleTreeTops() { diff --git a/Utils/Text.h b/Utils/Text.h index 83bd9295..281cec0d 100644 --- a/Utils/Text.h +++ b/Utils/Text.h @@ -1356,6 +1356,8 @@ enum OPT_SAVE_GAME, OPT_LOAD_GAME, OPT_MAIN_MENU, + OPT_NEXT, + OPT_PREV, OPT_DONE, OPT_SOUND_FX, OPT_SPEECH, diff --git a/Utils/_ChineseText.cpp b/Utils/_ChineseText.cpp index 1a6cc1d4..b66a2fb9 100644 --- a/Utils/_ChineseText.cpp +++ b/Utils/_ChineseText.cpp @@ -4186,6 +4186,8 @@ STR16 zOptionsText[] = L"保存游戏", //"Save Game", L"载入游戏", //"Load Game", L"退出", //"Quit", + L"Next", + L"Prev", L"完成", //"Done", //Text above the slider bars @@ -4408,6 +4410,7 @@ STR16 zOptionsToggleText[] = L"沉默的Skyrider", //"Silent Skyrider", L"降低CPU的使用率", //"Low CPU usage", L"Enhanced Description Box", + L"Forced Turn Mode", // arynn : add forced turn mode }; //This is the help text associated with the above toggles. @@ -4446,7 +4449,7 @@ STR16 zOptionsScreenHelpText[] = L"打开这个选项,使用铁血联盟1代的佣兵选择方式。", //Show movement path - //L"Turn this ON to display movement paths in Real-time (or leave it off and use the SHIFT key when you do want them displayed).", + //L"Turn this ON to display movement paths in Real-time (or leave it off and use the |S|H|I|F|T key when you do want them displayed).", L"打开这个选项,会实时显示移动路径(关闭此选项。如果你想要显示路径的话,使用SHIFT键)。", //show misses @@ -4519,6 +4522,7 @@ STR16 zOptionsScreenHelpText[] = //L"When ON, game will run with much lower CPU usage.", L"当打开时,游戏将使用更少的CPU资源。", L"When ON, enhanced descriptions will be shown for items and weapons.", + L"When ON and enemy present, Turn Base mode persists untill sector is free (|C|T|R|L+|S|H|I|F|T+|A|L|T+|T).", // arynn : add forced turn mode }; diff --git a/Utils/_DutchText.cpp b/Utils/_DutchText.cpp index 179fd5d1..2b4ad606 100644 --- a/Utils/_DutchText.cpp +++ b/Utils/_DutchText.cpp @@ -3490,6 +3490,8 @@ STR16 zOptionsText[] = L"Spel Bewaren", L"Spel Laden", L"Stop", + L"Next", + L"Prev", L"OK", //Text above the slider bars @@ -3676,6 +3678,7 @@ STR16 zOptionsToggleText[] = L"Silent Skyrider", L"Low CPU Usage", L"Enhanced Description Box", + L"Forced Turn Mode", // arynn : add forced turn mode }; //This is the help text associated with the above toggles. @@ -3706,7 +3709,7 @@ STR16 zOptionsScreenHelpText[] = L"Schakel deze optie IN als je karakters wil selecteren zoals in de vorige JAGGED ALLIANCE (methode is tegengesteld dus).", //Show movement path - L"Schakel deze optie IN om bewegingspaden te tonen in real-time (schakel het uit en gebruik dan de SHIFT-toets om paden te tonen).", + L"Schakel deze optie IN om bewegingspaden te tonen in real-time (schakel het uit en gebruik dan de |S|H|I|F|T-toets om paden te tonen).", //show misses L"Schakel IN om het spel de plaats van inslag van je kogels te tonen wanneer je \"mist\".", @@ -3757,6 +3760,7 @@ STR16 zOptionsScreenHelpText[] = L"When ON, Skyrider will not talk anymore.", L"When ON, game will run with much lower CPU usage.", L"When ON, enhanced descriptions will be shown for items and weapons.", + L"When ON and enemy present, Turn Base mode persists untill sector is free (|C|T|R|L+|S|H|I|F|T+|A|L|T+|T).", // arynn : add forced turn mode }; diff --git a/Utils/_EnglishText.cpp b/Utils/_EnglishText.cpp index 871b6ab2..4d7892fc 100644 --- a/Utils/_EnglishText.cpp +++ b/Utils/_EnglishText.cpp @@ -3503,6 +3503,8 @@ STR16 zOptionsText[] = L"Save Game", L"Load Game", L"Quit", + L"Next", + L"Prev", L"Done", //Text above the slider bars @@ -3689,6 +3691,7 @@ STR16 zOptionsToggleText[] = L"Silent Skyrider", L"Low CPU usage", L"Enhanced Description Box", + L"Forced Turn Mode", // arynn : add forced turn mode }; //This is the help text associated with the above toggles. @@ -3719,7 +3722,7 @@ STR16 zOptionsScreenHelpText[] = L"Turn this ON for character selection to work as in previous JAGGED ALLIANCE games (which is the opposite of how it works otherwise).", //Show movement path - L"Turn this ON to display movement paths in Real-time (or leave it off and use the SHIFT key when you do want them displayed).", + L"Turn this ON to display movement paths in Real-time (or leave it off and use the |S|H|I|F|T key when you do want them displayed).", //show misses L"Turn ON to have the game show you where your bullets ended up when you \"miss\".", @@ -3770,6 +3773,7 @@ STR16 zOptionsScreenHelpText[] = L"When ON, Skyrider will not talk anymore.", L"When ON, game will run with much lower CPU usage.", L"When ON, enhanced descriptions will be shown for items and weapons.", + L"When ON and enemy present, Turn Base mode persists untill sector is free (|C|T|R|L+|S|H|I|F|T+|A|L|T+|T).", // arynn : add forced turn mode }; diff --git a/Utils/_FrenchText.cpp b/Utils/_FrenchText.cpp index 16211620..718af33f 100644 --- a/Utils/_FrenchText.cpp +++ b/Utils/_FrenchText.cpp @@ -3504,6 +3504,8 @@ STR16 zOptionsText[] = L"Sauvegarder", L"Charger partie", L"Quitter", + L"Next", + L"Prev", L"OK", //Text above the slider bars @@ -3690,6 +3692,7 @@ STR16 zOptionsToggleText[] = L"Silence Skyrider !", L"Faible consommation processeur", L"EDB (mod rajoutant info utiles)", + L"Forced Turn Mode", // arynn : add forced turn mode }; //This is the help text associated with the above toggles. @@ -3720,7 +3723,7 @@ STR16 zOptionsScreenHelpText[] = L"Activez cette option pour retrouver vos automatismes de la version prcdente.", //Show movement path - L"Activez cette option pour afficher le chemin suivi par les mercenaires. \nVous pouvez la dsactiver et utiliser la touche MAJ en cours de jeu.", + L"Activez cette option pour afficher le chemin suivi par les mercenaires. \nVous pouvez la dsactiver et utiliser la touche |M|A|J en cours de jeu.", //show misses L"Activez cette option pour voir o atterrissent tous vos tirs.", @@ -3771,6 +3774,7 @@ STR16 zOptionsScreenHelpText[] = L"Si activ, les confirmations insistantes de Skyrider cessent.", L"Si activ, le jeu restreint l'utilisation du processeur.", L"Si activ, l'EDB sera affich pour les armes et objets.", + L"When ON and enemy present, Turn Base mode persists untill sector is free (|C|T|R|L+|S|H|I|F|T+|A|L|T+|T).", // arynn : add forced turn mode }; diff --git a/Utils/_GermanText.cpp b/Utils/_GermanText.cpp index e4456fcf..cd22b377 100644 --- a/Utils/_GermanText.cpp +++ b/Utils/_GermanText.cpp @@ -3310,7 +3310,9 @@ STR16 zOptionsText[] = //button Text L"Spiel sichern", L"Spiel laden", - L"Spiel beenden", + L"Spiel beenden", + L"Nchste", + L"Vorherige", L"Fertig", //Text above the slider bars L"Effekte", @@ -3494,7 +3496,8 @@ STR16 zOptionsToggleText[] = L"Automatisch speichern", L"Stummer Skyrider", L"Niedrige CPU Belastung", - L"Enhanced Description Box", + L"Erweiterte Gegenstandsinfo (EDB)", + L"Erzwungender Runden-Modus", }; //This is the help text associated with the above toggles. @@ -3525,7 +3528,7 @@ STR16 zOptionsScreenHelpText[] = L"Mit dieser Option funktioniert die Auswahl der Sldner so wie in frheren JAGGED ALLIANCE-Spielen (also genau andersherum als jetzt).", //Show movement path - L"Diese Funktion ANschalten, um die geplanten Wege der Sldner in Echtzeit anzuzeigen\n(oder abgeschaltet lassen und bei gewnschter Anzeige die SHIFT-Taste drcken).", + L"Diese Funktion ANschalten, um die geplanten Wege der Sldner in Echtzeit anzuzeigen\n(oder abgeschaltet lassen und bei gewnschter Anzeige die |S|H|I|F|T-Taste drcken).", //show misses L"Mit dieser Option zeigt Ihnen das Spiel, wo Ihre Kugeln hinfliegen, wenn Sie \"nicht treffen\".", @@ -3576,6 +3579,7 @@ STR16 zOptionsScreenHelpText[] = L"Wenn diese Funktion aktiviert ist, wird Skyrider nichts mehr sprechen.", L"Wenn diese Funktion aktiviert ist, wird das Spiel mit viel geringerer CPU Belastung laufen.", L"Wenn diese Funktion aktiviert ist, werden erweiterte Beschreibungen zu den Waffen und Gegenstnden angezeigt.", + L"Wenn diese Funktion aktiviert ist und noch Gegner im Sektor sind, bleibt das Spiel im Runden-Mods bis alle Feinde tot sind (|C|T|R|L+|S|H|I|F|T+|A|L|T+|T).", }; STR16 gzGIOScreenText[] = diff --git a/Utils/_ItalianText.cpp b/Utils/_ItalianText.cpp index 071387b8..9a211254 100644 --- a/Utils/_ItalianText.cpp +++ b/Utils/_ItalianText.cpp @@ -3485,6 +3485,8 @@ STR16 zOptionsText[] = L"Salva partita", L"Carica partita", L"Abbandona", + L"Next", + L"Prev", L"Fine", //Text above the slider bars @@ -3669,6 +3671,7 @@ STR16 zOptionsToggleText[] = L"Silent Skyrider", L"Low CPU usage", L"Enhanced Description Box", + L"Forced Turn Mode", // arynn : add forced turn mode }; //This is the help text associated with the above toggles. @@ -3699,7 +3702,7 @@ STR16 zOptionsScreenHelpText[] = L"Attivate questa opzione per selezionare i personaggi e muoverli come nel vecchio JA (dato che la funzione stata invertita).", //Show movement path - L"Attivate questa opzione per visualizzare i sentieri di movimento in tempo reale (oppure disattivatela utilizzando il tasto MAIUSC).", + L"Attivate questa opzione per visualizzare i sentieri di movimento in tempo reale (oppure disattivatela utilizzando il tasto |M|A|I|U|S|C).", //show misses L"Attivate per far s che la partita vi mostri dove finiscono i proiettili quando \"sbagliate\".", @@ -3750,6 +3753,7 @@ STR16 zOptionsScreenHelpText[] = L"When ON, Skyrider will not talk anymore.", L"When ON, game will run with much lower CPU usage.", L"When ON, enhanced descriptions will be shown for items and weapons.", + L"When ON and enemy present, Turn Base mode persists untill sector is free (|C|T|R|L+|S|H|I|F|T+|A|L|T+|T).", // arynn : add forced turn mode }; diff --git a/Utils/_PolishText.cpp b/Utils/_PolishText.cpp index c2e593cb..c5f691b0 100644 --- a/Utils/_PolishText.cpp +++ b/Utils/_PolishText.cpp @@ -3497,6 +3497,8 @@ STR16 zOptionsText[] = L"Zapisz gr", L"Odczytaj gr", L"Wyjcie", + L"Next", + L"Prev", L"OK", //Text above the slider bars @@ -3683,6 +3685,7 @@ STR16 zOptionsToggleText[] = L"Cichy Skyrider", L"Niskie obcienie procesora", L"Rozszerzone Okno Opisu (EDB)", //Enhanced Description Box + L"Forced Turn Mode", // arynn : add forced turn mode }; //This is the help text associated with the above toggles. @@ -3764,6 +3767,7 @@ STR16 zOptionsScreenHelpText[] = L"Jeli WCZONE, Skyrider nie bdzie nic mwi.", L"Jeli WCZONE, gra bdzie obciaa procesor w mniejszym stopniu.", L"Jeli WCZONE, rozszerzone opisy bd pokazane dla przedmiotw i broni.", + L"When ON and enemy present, Turn Base mode persists untill sector is free (|C|T|R|L+|S|H|I|F|T+|A|L|T+|T).", // arynn : add forced turn mode }; STR16 gzGIOScreenText[] = diff --git a/Utils/_RussianText.cpp b/Utils/_RussianText.cpp index 6723dc2e..7406cedd 100644 --- a/Utils/_RussianText.cpp +++ b/Utils/_RussianText.cpp @@ -3499,6 +3499,8 @@ STR16 zOptionsText[] = L" ", L" ", L"", + L"Next", + L"Prev", L"", //Text above the slider bars @@ -3684,6 +3686,7 @@ STR16 zOptionsToggleText[] = L" ", L" ", L" ", //Enhanced Description Box + L"Forced Turn Mode", // arynn : add forced turn mode }; //This is the help text associated with the above toggles. @@ -3714,7 +3717,7 @@ STR16 zOptionsScreenHelpText[] = L" , \n( , Jagged Alliance).", //Show movement path - L" , \n( , SHIFT, ).", + L" , \n( , |S|H|I|F|T, ).", //show misses L" , \n , .", @@ -3765,6 +3768,7 @@ STR16 zOptionsScreenHelpText[] = L" , \n .", L" , \n .", L" , \n .", //EDB description + L"When ON and enemy present, Turn Base mode persists untill sector is free (|C|T|R|L+|S|H|I|F|T+|A|L|T+|T).", // arynn : add forced turn mode }; diff --git a/Utils/_TaiwaneseText.cpp b/Utils/_TaiwaneseText.cpp index 6bb6b973..739f3bdd 100644 --- a/Utils/_TaiwaneseText.cpp +++ b/Utils/_TaiwaneseText.cpp @@ -3502,6 +3502,8 @@ STR16 zOptionsText[] = L"Save Game", L"Load Game", L"Quit", + L"Next", + L"Prev", L"Done", //Text above the slider bars @@ -3688,6 +3690,7 @@ STR16 zOptionsToggleText[] = L"Silent Skyrider", L"Low CPU usage", L"Enhanced Description Box", + L"Forced Turn Mode", // arynn : add forced turn mode }; //This is the help text associated with the above toggles. @@ -3718,7 +3721,7 @@ STR16 zOptionsScreenHelpText[] = L"Turn this ON for character selection to work as in previous JAGGED ALLIANCE games (which is the opposite of how it works otherwise).", //Show movement path - L"Turn this ON to display movement paths in Real-time (or leave it off and use the SHIFT key when you do want them displayed).", + L"Turn this ON to display movement paths in Real-time (or leave it off and use the |S|H|I|F|T key when you do want them displayed).", //show misses L"Turn ON to have the game show you where your bullets ended up when you \"miss\".", @@ -3769,6 +3772,7 @@ STR16 zOptionsScreenHelpText[] = L"When ON, Skyrider will not talk anymore.", L"When ON, game will run with much lower CPU usage.", L"When ON, enhanced descriptions will be shown for items and weapons.", + L"When ON and enemy present, Turn Base mode persists untill sector is free (|C|T|R|L+|S|H|I|F|T+|A|L|T+|T).", // arynn : add forced turn mode };