Files
source/MPHostScreen.cpp
T
Wanne 7ca53fadc7 *** MERGED source code from development trunk revision 4890 up to latest current revision 5105 ***
Development Trunk (now obsolete): https://ja2svn.dyndns.org/source/ja2/branches/Wanne/JA2%201.13%20MP
A detailed list of all the features (changes) is visible in the history log of the development trunk:

INFO: There will be no further development in the development source trunk, so is obsolete from now on!

This commit contains the following features (bugfixes are not listed):

- New Feature: Show merc ranks in Strategy Screen before merc name
o Toggle on/off in the ingame options screen
o For each experience level (0-10) there are defined rank names in the language specific text files
o Additional language text that is not translated yet is marked with // TODO.Translate

- New Feature: Faster Bobby Ray Shipments
o This feature is selectable in the ja2_options.ini
o When activated Bobby Ray shipments will be really fast
-> Overnight Express: 5 - 7 hours
-> Air Service: 10, 12 or 14 hours
-> Standard Service: 15, 18 or 21 hours
o In a multiplayer game, this feature is disabled (because shipment arrive immediately in the destination sector)

- New Feature: AP cost for manipulating the merc inventory
o This feature is selectable in the start new game screen
o For example, putting a weapon from hand in the backpack costs APs
o The AP costs are defined in the APBPConstants.ini
o In a multiplayer game, this feature is disabled

- New Feature: Added possibility to set individual Gear Kit names
o Set individual names in the optional new tag <mGearKitName> inside the <GEARKIT> root element (File: TableData\MercStartingGear.xml)

- New Feature: Externalized the maximum purchase amount (JA2 vanilla: 10) for Bobby Rays purchases per shipment
o Define the max. amount in the ja2_options.ini: BOBBY_RAY_MAX_PURCHASE_AMOUNT, Range: 10 - 100)
o Nice scrolling bars to scroll through all the purchases

- New Feature: Now it is possible to walk on "water" tiles or handle those tiles like "normal" tiles 
o (instead of showing the swimming animation and counting the APs for swimming), when the soldier is located on the second level (level > 0)

- New Feature: Externalized AIM Veterans laptop site
o Add maximum of 4 pages
o Add  new AIM to veterans page, and remove AIM from veterans page.
o New XML file: OldAIMArchive.xml (language specific XML files: *.OldAIMArchive.xml)

- New Feature: Added possibility to choose from 254 IMP faces
o Modified IMPPortraits.xml
o Added new GameDir folder "IMPFaces" which contains the IMP face portraits
o Moved IMP faces in the new "IMPFaces" folder

- New Feature: ARSP - All Resolution Support Project
o See here: http://www.ja-galaxy-forum.com/board/ubbthreads.php?ubb=showflat&Number=298698&page=1
o Support any kind of screen resolution. This works by choosing the matching full supported resolution (640x480, 800x600, 1024x768) and then centering the graphics
o See ja2.ini for defining the screen resolution

- New Feature: AI Turn Speed Up (FF-MOD)
o see here: http://www.ja-galaxy-forum.com/board/ubbthreads.php?ubb=showflat&Number=298699#Post298699
o When this feature is activated it allows fast enemy turns
o New entry in ja2.ini to enable this feature: HIGHSPEED_TIMER = TRUE
o Turn on/off auto fast turns in ingame options
o New ja2_options.ini settings for fine tuning: [Clock Settings] ini block

- New Feature: "Lock" / "Release" mouse cursor in tactical windowed mode, so the mouse can stay within window boundary
o This is very helpful for doing scrolling with the mouse (by moving the mouse to the window edge) in windowed mode
o You can toggle on/off the feature by pressing CTRL + Z. It is also possible to press CTRL + Y. So the user can decide which fits better :)
o Whenever you toggle on/off a screen message appears on the tactical log to notify the player

- New Feature: Weapon overheating
o Basically, every shot fired from a gun increases its temperature. On higher temperatures, the gun jams more frequently
o On/off toggle in the ingame options
o Graphical thermometer indication on the weapon picture
o New ja2_options.ini section with a few options, Section: [Tactical Weapon Overheating Settings]
o XML changes (New Tags)
--> AmmoTypes.xml: <temperatureModificator>
--> Items.xml: <barrel>, <usOverheatingCooldownFactor>
--> Weapons.xml: <usOverheatingJamThreshold>, <usOverheatingDamageThreshold>, <usOverheatingSingleShotTemperature>
o Added a few barells to Items.xml (end of the file)
o more infos: http://www.ja-galaxy-forum.com/board/ubbthreads.php?ubb=showflat&Number=301059&page=1

- New Feature: Resting weapons on a surfaces
o You can now rest your weapon on crates, low walls, rocks, debris, open windows etc. while you are crouched. Resting will give yu the superior gun handling modifiers from PRONE position.
o A little 'A' on your gun indicates if you are resting it or not.
o Both settings can be turned on and off in Ja2_Options.ini under 'Tactical Gameplay Settings'

- New Feature: Externalized option on whether mercs can exit sector using grid exit in turn based mode
o new ja2_options.ini property: GRID_EXIT_IN_TURNBASED
o This ini setting does not affect leaving sectors on map edges

- Rework/Update: Ammo boxes and Ammo crates
o Ammo crate items added for remaining calibers.  Tweaked prices to correspond to magazines, tweaked capacities and weights to be reasonable (~800 or less).
o Shift-R reload now looks at both boxes and crates in sector items and merc's inventory to reload, and tops off magazines in inventory as well.  Only possible outside of combat.
o Ctrl-Shift-A still creates crates as per usual, with some fixes to ensure all ammo is caught on the first press.
o Shift-A now creates ammo boxes in the same loop.  They mostly behave like crates, but fit in mercs inventories.
o Ammo boxes are available to purchase at BR and tony, sam, etc.  Individual magazines/drums/etc are no longer available.
o Removed ammo crate xml tag.  Added ubMagType tag to Magazines array.  This allows us to differentiate between magazines, bullets, boxes and crates.
o Changed ammo filtering in BR's to display boxes appropriately.  Added back the "Mag:" display (changed text to "Size:")
o Added ja2set.dat.xml file (WF map version in WF maps folder) to be used instead of ja2set.dat file (ja2.ini setting added) For now, if you want to play vanilla instead, just change the setting in the ini (see comments in file).
o Added P4-P9Items image files (up to 5k images each) and tileslots.  1.13 core items will continue to use Guns and P1-P3Items for the foreseeable future.  P4-P9 can be used by customizers/modders to avoid conflicts with Guns/P1-P3 items.  TODO: Need to discuss a strategy for this in the forums.
o Added in Ambient/0.bad and 32.bad to avoid an exception in the code.
o Updated the XML Editor
o Standardized the text on all the ammo items.

- New Multiplayer Feature: Sharing same FOV (field of view) in a coop/team-dm (for friendly teams) game
o You will also see enemies, that your teammate sees

git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@5108 3b4a5df2-a311-0410-b5c6-a8a6f20db521
2012-03-23 18:46:54 +00:00

2866 lines
102 KiB
C++

#ifdef PRECOMPILEDHEADERS
#include "JA2 All.h"
#include "Intro.h"
#else
#include "Types.h"
#include "MPHostScreen.h"
#include "GameSettings.h"
#include "Utilities.h"
#include "wCheck.h"
#include "Font Control.h"
#include "WordWrap.h"
#include "Render Dirty.h"
#include "Input.h"
#include "Options Screen.h"
#include "English.h"
#include "Sysutil.h"
#include "Fade Screen.h"
#include "Cursor Control.h"
#include "Music Control.h"
#include "cursors.h"
#include "Intro.h"
#include "Text.h"
#include "Text Input.h"
#include "_Ja25EnglishText.h"
#include "Soldier Profile.h"
#endif
#include "gameloop.h"
#include "connect.h"
#include "network.h"
#include "saveloadscreen.h"
#include <vfs/Core/vfs.h>
#include <vfs/Core/vfs_init.h>
#include <vfs/Tools/vfs_property_container.h>
#include <vfs/Core/vfs_os_functions.h>
#include "MPJoinScreen.h"
#include "MainMenuScreen.h"
#include "Init.h"
#include "xml.h"
////////////////////////////////////////////
//
// Global Defines
//
///////////////////////////////////////////
INT32 giMPHMessageBox = -1; // message box handle
#define MPH_TITLE_FONT FONT14ARIAL
#define MPH_TITLE_COLOR FONT_MCOLOR_WHITE
#define MPH_LABEL_TEXT_FONT FONT10ARIAL
#define MPH_LABEL_TEXT_COLOR FONT_MCOLOR_WHITE
#define MPH_TOGGLE_TEXT_FONT FONT10ARIAL
#define MPH_TOGGLE_TEXT_COLOR FONT_MCOLOR_WHITE
//buttons
#define MPH_CANCEL_X iScreenWidthOffset + ((320 - 115) / 2)
#define MPH_BTN_START_X iScreenWidthOffset + 320 + 105
#define MPH_BTN_START_Y iScreenHeightOffset + 435
//main title
#define MPH_MAIN_TITLE_X 0
#define MPH_MAIN_TITLE_Y iScreenHeightOffset + 10
#define MPH_MAIN_TITLE_WIDTH SCREEN_WIDTH
#define MPH_TITLE_DISTANCE 30 // higher means closer
#define MPH_GAP_BN_SETTINGS 35
#define MPH_OFFSET_TO_TEXT 36
#define MPH_OFFSET_TO_TOGGLE_BOX 180
#define MPH_OFFSET_TO_TOGGLE_BOX_Y 9
// ---------------------------------
// Y-Offset for Combo-Controls
#define COMBO_Y_OFFSET 63
// Y-Offset for Check-Controls
#define CHECK_Y_OFFSET 50
#define CORRECTION_Y_OFFSET (COMBO_Y_OFFSET - CHECK_Y_OFFSET)
// X-Offset for Checkbox-Controls
#define CHECK_X_OFFSET 36
#define COMBO_X_OFFSET 0
#define CHECK_WIDTH (MPH_OFFSET_TO_TOGGLE_BOX - MPH_OFFSET_TO_TEXT)
#define COMBO_WIDTH (MPH_OFFSET_TO_TOGGLE_BOX - MPH_OFFSET_TO_TEXT)
// ---------------------------------
/*********************************
FIRST COLUMN
**********************************/
#define FIRST_COLUMN_X iScreenWidthOffset + 10
#define FIRST_COLUMN_Y iScreenHeightOffset + 75
#define MPH_SYNC_SETTING_X FIRST_COLUMN_X + CHECK_X_OFFSET
#define MPH_SYNC_SETTING_Y FIRST_COLUMN_Y - CORRECTION_Y_OFFSET
#define MPH_SYNC_SETTING_WIDTH CHECK_WIDTH
#define MPH_SQUADSIZE_SETTING_X FIRST_COLUMN_X + COMBO_X_OFFSET
#define MPH_SQUADSIZE_SETTING_Y MPH_SYNC_SETTING_Y + COMBO_Y_OFFSET + CORRECTION_Y_OFFSET
#define MPH_SQUADSIZE_SETTING_WIDTH COMBO_WIDTH
#define MPH_TIMETURNS_SETTING_X FIRST_COLUMN_X + COMBO_X_OFFSET
#define MPH_TIMETURNS_SETTING_Y MPH_SQUADSIZE_SETTING_Y + COMBO_Y_OFFSET
#define MPH_TIMETURNS_SETTING_WIDTH COMBO_WIDTH
#define MPH_INVENTORY_SETTING_X FIRST_COLUMN_X + COMBO_X_OFFSET
#define MPH_INVENTORY_SETTING_Y MPH_TIMETURNS_SETTING_Y + COMBO_Y_OFFSET
#define MPH_INVENTORY_SETTING_WIDTH COMBO_WIDTH
#define MPH_BOBBYRAY_SETTING_X FIRST_COLUMN_X + CHECK_X_OFFSET
#define MPH_BOBBYRAY_SETTING_Y MPH_INVENTORY_SETTING_Y + CHECK_Y_OFFSET
#define MPH_BOBBYRAY_SETTING_WIDTH CHECK_WIDTH
#define MPH_REPORTMERC_SETTING_X FIRST_COLUMN_X + CHECK_X_OFFSET
#define MPH_REPORTMERC_SETTING_Y MPH_BOBBYRAY_SETTING_Y + CHECK_Y_OFFSET + CORRECTION_Y_OFFSET
#define MPH_REPORTMERC_SETTING_WIDTH CHECK_WIDTH
/*********************************
SECOND COLUMN
**********************************/
#define SECOND_COLUMN_X iScreenWidthOffset + 210
#define SECOND_COLUMN_Y FIRST_COLUMN_Y
#define MPH_MAXPLAYERS_SETTING_X SECOND_COLUMN_X + COMBO_X_OFFSET
#define MPH_MAXPLAYERS_SETTING_Y SECOND_COLUMN_Y
#define MPH_MAXPLAYERS_SETTING_WIDTH COMBO_WIDTH
#define MPH_STARTINGTIME_SETTING_X SECOND_COLUMN_X + COMBO_X_OFFSET
#define MPH_STARTINGTIME_SETTING_Y MPH_MAXPLAYERS_SETTING_Y + COMBO_Y_OFFSET
#define MPH_STARTINGTIME_SETTING_WIDTH COMBO_WIDTH
#define MPH_WEAPONDAMAGE_SETTING_X SECOND_COLUMN_X + COMBO_X_OFFSET
#define MPH_WEAPONDAMAGE_SETTING_Y MPH_STARTINGTIME_SETTING_Y + COMBO_Y_OFFSET
#define MPH_WEAPONDAMAGE_SETTING_WIDTH COMBO_WIDTH
#define MPH_TRAITS_SETTING_X SECOND_COLUMN_X + CHECK_X_OFFSET
#define MPH_TRAITS_SETTING_Y MPH_WEAPONDAMAGE_SETTING_Y + CHECK_Y_OFFSET
#define MPH_TRAITS_SETTING_WIDTH CHECK_WIDTH
#define MPH_HIREMERC_SETTING_X SECOND_COLUMN_X + CHECK_X_OFFSET
#define MPH_HIREMERC_SETTING_Y MPH_TRAITS_SETTING_Y + CHECK_Y_OFFSET + CORRECTION_Y_OFFSET
#define MPH_HIREMERC_SETTING_WIDTH CHECK_WIDTH
#define MPH_CIVS_SETTING_X SECOND_COLUMN_X + CHECK_X_OFFSET
#define MPH_CIVS_SETTING_Y MPH_HIREMERC_SETTING_Y + CHECK_Y_OFFSET + CORRECTION_Y_OFFSET
#define MPH_CIVS_SETTING_WIDTH CHECK_WIDTH
/*********************************
THIRD COLUMN
**********************************/
#define THIRD_COLUMN_X iScreenWidthOffset + 413
#define THIRD_COLUMN_Y FIRST_COLUMN_Y
#define MPH_GAMETYPE_SETTING_X THIRD_COLUMN_X + COMBO_X_OFFSET
#define MPH_GAMETYPE_SETTING_Y THIRD_COLUMN_Y
#define MPH_GAMETYPE_SETTING_WIDTH COMBO_WIDTH
#define MPH_STARTINGCASH_SETTING_X THIRD_COLUMN_X + COMBO_X_OFFSET
#define MPH_STARTINGCASH_SETTING_Y MPH_GAMETYPE_SETTING_Y + COMBO_Y_OFFSET
#define MPH_STARTINGCASH_SETTING_WIDTH COMBO_WIDTH
#define MPH_SECTOREDGE_SETTING_X THIRD_COLUMN_X + CHECK_X_OFFSET
#define MPH_SECTOREDGE_SETTING_Y MPH_STARTINGCASH_SETTING_Y + CHECK_Y_OFFSET
#define MPH_SECTOREDGE_SETTING_WIDTH CHECK_WIDTH
#define MPH_DIFFICULTY_SETTING_X THIRD_COLUMN_X + COMBO_X_OFFSET
#define MPH_DIFFICULTY_SETTING_Y MPH_SECTOREDGE_SETTING_Y + COMBO_Y_OFFSET + CORRECTION_Y_OFFSET
#define MPH_DIFFICULTY_SETTING_WIDTH COMBO_WIDTH
#define MPH_MAXENEMIES_SETTING_X THIRD_COLUMN_X + CHECK_X_OFFSET
#define MPH_MAXENEMIES_SETTING_Y MPH_DIFFICULTY_SETTING_Y + CHECK_Y_OFFSET
#define MPH_MAXENEMIES_SETTING_WIDTH CHECK_WIDTH
#define MPH_SAMEMERC_SETTING_X THIRD_COLUMN_X + CHECK_X_OFFSET
#define MPH_SAMEMERC_SETTING_Y MPH_MAXENEMIES_SETTING_Y + CHECK_Y_OFFSET + CORRECTION_Y_OFFSET
#define MPH_SAMEMERC_SETTING_WIDTH CHECK_WIDTH
///////////////////////////////////////////
//
// Global Variables
//
///////////////////////////////////////////
BOOLEAN gfMPHScreenEntry = TRUE;
BOOLEAN gfMPHScreenExit = FALSE;
BOOLEAN gfReRenderMPHScreen=TRUE;
BOOLEAN gfMPHButtonsAllocated = FALSE;
// RW:
UINT32 guiMPHSMALLFRAME;
void RenderMPHSmallSelectionFrame(INT16 sX, INT16 sY);
// ----------------
// Traits
enum
{
MPH_TRAITS_OLD = 0,
MPH_TRAITS_NEW = 1,
MPH_NUM_TRAITS_OPTIONS,
};
UINT32 guiMPHTraitsOptionTogglesImage[ MPH_NUM_TRAITS_OPTIONS ];
UINT32 guiMPHTraitsOptionToggles[ MPH_NUM_TRAITS_OPTIONS ];
void BtnMPHOldTraitsCallback(GUI_BUTTON *btn,INT32 reason);
void BtnMPHNewTraitsCallback(GUI_BUTTON *btn,INT32 reason);
void MTHNewTraitsNotPossibleMessageBoxCallBack( UINT8 bExitValue );
void BtnMPHOldTraitsCallback(GUI_BUTTON *btn,INT32 reason)
{
if (!(btn->uiFlags & BUTTON_ENABLED))
return;
if( reason & MSYS_CALLBACK_REASON_LBUTTON_DWN )
{
RestoreExternBackgroundRect( (MPH_TRAITS_SETTING_X), (MPH_TRAITS_SETTING_Y + 10), 230, 40 );
ButtonList[ guiMPHTraitsOptionToggles[ MPH_TRAITS_NEW ] ]->uiFlags &= ~BUTTON_CLICKED_ON;
btn->uiFlags|=(BUTTON_CLICKED_ON);
PlayButtonSound( guiMPHTraitsOptionToggles[ MPH_TRAITS_OLD ], BUTTON_SOUND_CLICKED_ON );
}
}
BOOLEAN DoMPHMessageBox( UINT8 ubStyle, const STR16 zString, UINT32 uiExitScreen, UINT16 usFlags, MSGBOX_CALLBACK ReturnCallback )
{
SGPRect CenteringRect= {0 + xResOffset, 0, SCREEN_WIDTH - xResOffset, SCREEN_HEIGHT };
// do message box and return
giMPHMessageBox = DoMessageBox( ubStyle, zString, uiExitScreen, ( UINT16 ) ( usFlags| MSG_BOX_FLAG_USE_CENTERING_RECT ), ReturnCallback, &CenteringRect );
// send back return state
return( ( giMPHMessageBox != -1 ) );
}
UINT8 GetMPHCurrentTraitsOptionButtonSetting()
{
UINT8 cnt;
for( cnt=0; cnt<MPH_NUM_TRAITS_OPTIONS; cnt++)
{
if( ButtonList[ guiMPHTraitsOptionToggles[ cnt ] ]->uiFlags & BUTTON_CLICKED_ON )
{
return( cnt );
}
}
return( 0 );
}
void BtnMPHNewTraitsCallback(GUI_BUTTON *btn,INT32 reason)
{
if (!(btn->uiFlags & BUTTON_ENABLED))
return;
if( reason & MSYS_CALLBACK_REASON_LBUTTON_DWN )
{
if (!gGameExternalOptions.fReadProfileDataFromXML)
{
PlayButtonSound( guiMPHTraitsOptionToggles[ MPH_TRAITS_NEW ], BUTTON_SOUND_DISABLED_CLICK );
DoMPHMessageBox( MSG_BOX_BASIC_STYLE, zGioNewTraitsImpossibleText[0], MP_HOST_SCREEN, MSG_BOX_FLAG_OK, MTHNewTraitsNotPossibleMessageBoxCallBack );
}
else
{
RestoreExternBackgroundRect( (MPH_TRAITS_SETTING_X), (MPH_TRAITS_SETTING_Y + 10), 230, 40 );
ButtonList[ guiMPHTraitsOptionToggles[ MPH_TRAITS_OLD ] ]->uiFlags &= ~BUTTON_CLICKED_ON;
btn->uiFlags|=(BUTTON_CLICKED_ON);
PlayButtonSound( guiMPHTraitsOptionToggles[ MPH_TRAITS_NEW ], BUTTON_SOUND_CLICKED_ON );
}
}
}
void MTHNewTraitsNotPossibleMessageBoxCallBack( UINT8 bExitValue )
{
}
// ----------------
// -------------
// Sync
enum
{
MPH_SYNC_NO = 0,
MPH_SYNC_YES = 1,
MPH_NUM_SYNC_OPTIONS,
};
UINT32 guiMPHSyncOptionTogglesImage[ MPH_NUM_SYNC_OPTIONS ];
UINT32 guiMPHSyncOptionToggles[ MPH_NUM_SYNC_OPTIONS ];
void BtnMPHNoSyncCallback(GUI_BUTTON *btn,INT32 reason);
void BtnMPHYesSyncCallback(GUI_BUTTON *btn,INT32 reason);
void BtnMPHNoSyncCallback(GUI_BUTTON *btn,INT32 reason)
{
if (!(btn->uiFlags & BUTTON_ENABLED))
return;
if( reason & MSYS_CALLBACK_REASON_LBUTTON_DWN )
{
RestoreExternBackgroundRect( (MPH_SYNC_SETTING_X), (MPH_SYNC_SETTING_Y + 10), 230, 40 );
ButtonList[ guiMPHSyncOptionToggles[ MPH_SYNC_YES ] ]->uiFlags &= ~BUTTON_CLICKED_ON;
btn->uiFlags|=(BUTTON_CLICKED_ON);
PlayButtonSound( guiMPHSyncOptionToggles[ MPH_SYNC_NO ], BUTTON_SOUND_CLICKED_ON );
}
}
void BtnMPHYesSyncCallback(GUI_BUTTON *btn,INT32 reason)
{
if (!(btn->uiFlags & BUTTON_ENABLED))
return;
if( reason & MSYS_CALLBACK_REASON_LBUTTON_DWN )
{
RestoreExternBackgroundRect( (MPH_SYNC_SETTING_X), (MPH_SYNC_SETTING_Y + 10), 230, 40 );
ButtonList[ guiMPHSyncOptionToggles[ MPH_SYNC_NO ] ]->uiFlags &= ~BUTTON_CLICKED_ON;
btn->uiFlags|=(BUTTON_CLICKED_ON);
PlayButtonSound( guiMPHSyncOptionToggles[ MPH_SYNC_YES ], BUTTON_SOUND_CLICKED_ON );
}
}
UINT8 GetCurrentSyncOptionButtonSetting()
{
UINT8 cnt;
for( cnt=0; cnt<MPH_NUM_SYNC_OPTIONS; cnt++)
{
if( ButtonList[ guiMPHSyncOptionToggles[ cnt ] ]->uiFlags & BUTTON_CLICKED_ON )
{
return( cnt );
}
}
return( 0 );
}
// -------------
// -------------
// MaxEnemies
enum
{
MPH_MAXENEMIES_NO = 0,
MPH_MAXENEMIES_YES = 1,
MPH_NUM_MAXENEMIES_OPTIONS,
};
UINT32 guiMPHMaxEnemiesOptionTogglesImage[ MPH_NUM_SYNC_OPTIONS ];
UINT32 guiMPHMaxEnemiesOptionToggles[ MPH_NUM_SYNC_OPTIONS ];
void BtnMPHNoMaxEnemiesCallback(GUI_BUTTON *btn,INT32 reason);
void BtnMPHYesMaxEnemiesCallback(GUI_BUTTON *btn,INT32 reason);
void BtnMPHNoMaxEnemiesCallback(GUI_BUTTON *btn,INT32 reason)
{
if (!(btn->uiFlags & BUTTON_ENABLED))
return;
if( reason & MSYS_CALLBACK_REASON_LBUTTON_DWN )
{
RestoreExternBackgroundRect( (MPH_MAXENEMIES_SETTING_X), (MPH_MAXENEMIES_SETTING_Y + 10), 230, 40 );
ButtonList[ guiMPHMaxEnemiesOptionToggles[ MPH_MAXENEMIES_YES ] ]->uiFlags &= ~BUTTON_CLICKED_ON;
btn->uiFlags|=(BUTTON_CLICKED_ON);
PlayButtonSound( guiMPHMaxEnemiesOptionToggles[ MPH_MAXENEMIES_NO ], BUTTON_SOUND_CLICKED_ON );
}
}
void BtnMPHYesMaxEnemiesCallback(GUI_BUTTON *btn,INT32 reason)
{
if (!(btn->uiFlags & BUTTON_ENABLED))
return;
if( reason & MSYS_CALLBACK_REASON_LBUTTON_DWN )
{
RestoreExternBackgroundRect( (MPH_MAXENEMIES_SETTING_X), (MPH_MAXENEMIES_SETTING_Y + 10), 230, 40 );
ButtonList[ guiMPHMaxEnemiesOptionToggles[ MPH_MAXENEMIES_NO ] ]->uiFlags &= ~BUTTON_CLICKED_ON;
btn->uiFlags|=(BUTTON_CLICKED_ON);
PlayButtonSound( guiMPHMaxEnemiesOptionToggles[ MPH_MAXENEMIES_YES ], BUTTON_SOUND_CLICKED_ON );
}
}
UINT8 GetCurrentMaxEnemiesOptionButtonSetting()
{
UINT8 cnt;
for( cnt=0; cnt<MPH_NUM_MAXENEMIES_OPTIONS; cnt++)
{
if( ButtonList[ guiMPHMaxEnemiesOptionToggles[ cnt ] ]->uiFlags & BUTTON_CLICKED_ON )
{
return( cnt );
}
}
return( 0 );
}
// -------------
// -------------
// Civs
enum
{
MPH_CIVS_NO = 0,
MPH_CIVS_YES = 1,
MPH_NUM_CIVS_OPTIONS,
};
UINT32 guiMPHCivsOptionTogglesImage[ MPH_NUM_SYNC_OPTIONS ];
UINT32 guiMPHCivsOptionToggles[ MPH_NUM_SYNC_OPTIONS ];
void BtnMPHNoCivsCallback(GUI_BUTTON *btn,INT32 reason);
void BtnMPHYesCivsCallback(GUI_BUTTON *btn,INT32 reason);
void BtnMPHNoCivsCallback(GUI_BUTTON *btn,INT32 reason)
{
if (!(btn->uiFlags & BUTTON_ENABLED))
return;
if( reason & MSYS_CALLBACK_REASON_LBUTTON_DWN )
{
RestoreExternBackgroundRect( (MPH_CIVS_SETTING_X), (MPH_CIVS_SETTING_Y + 10), 230, 40 );
ButtonList[ guiMPHCivsOptionToggles[ MPH_CIVS_YES ] ]->uiFlags &= ~BUTTON_CLICKED_ON;
btn->uiFlags|=(BUTTON_CLICKED_ON);
PlayButtonSound( guiMPHCivsOptionToggles[ MPH_CIVS_NO ], BUTTON_SOUND_CLICKED_ON );
}
}
void BtnMPHYesCivsCallback(GUI_BUTTON *btn,INT32 reason)
{
if (!(btn->uiFlags & BUTTON_ENABLED))
return;
if( reason & MSYS_CALLBACK_REASON_LBUTTON_DWN )
{
RestoreExternBackgroundRect( (MPH_CIVS_SETTING_X), (MPH_CIVS_SETTING_Y + 10), 230, 40 );
ButtonList[ guiMPHCivsOptionToggles[ MPH_CIVS_NO ] ]->uiFlags &= ~BUTTON_CLICKED_ON;
btn->uiFlags|=(BUTTON_CLICKED_ON);
PlayButtonSound( guiMPHCivsOptionToggles[ MPH_CIVS_YES ], BUTTON_SOUND_CLICKED_ON );
}
}
UINT8 GetCurrentCivsOptionButtonSetting()
{
UINT8 cnt;
for( cnt=0; cnt<MPH_NUM_CIVS_OPTIONS; cnt++)
{
if( ButtonList[ guiMPHCivsOptionToggles[ cnt ] ]->uiFlags & BUTTON_CLICKED_ON )
{
return( cnt );
}
}
return( 0 );
}
// -------------
// -------------
// ReportMerc
enum
{
MPH_REPORTMERC_NO = 0,
MPH_REPORTMERC_YES = 1,
MPH_NUM_REPORTMERC_OPTIONS,
};
UINT32 guiMPHReportMercOptionTogglesImage[ MPH_NUM_SYNC_OPTIONS ];
UINT32 guiMPHReportMercOptionToggles[ MPH_NUM_SYNC_OPTIONS ];
void BtnMPHNoReportMercCallback(GUI_BUTTON *btn,INT32 reason);
void BtnMPHYesReportMercCallback(GUI_BUTTON *btn,INT32 reason);
void BtnMPHNoReportMercCallback(GUI_BUTTON *btn,INT32 reason)
{
if (!(btn->uiFlags & BUTTON_ENABLED))
return;
if( reason & MSYS_CALLBACK_REASON_LBUTTON_DWN )
{
RestoreExternBackgroundRect( (MPH_REPORTMERC_SETTING_X), (MPH_REPORTMERC_SETTING_Y + 10), 230, 40 );
ButtonList[ guiMPHReportMercOptionToggles[ MPH_REPORTMERC_YES ] ]->uiFlags &= ~BUTTON_CLICKED_ON;
btn->uiFlags|=(BUTTON_CLICKED_ON);
PlayButtonSound( guiMPHReportMercOptionToggles[ MPH_REPORTMERC_NO ], BUTTON_SOUND_CLICKED_ON );
}
}
void BtnMPHYesReportMercCallback(GUI_BUTTON *btn,INT32 reason)
{
if (!(btn->uiFlags & BUTTON_ENABLED))
return;
if( reason & MSYS_CALLBACK_REASON_LBUTTON_DWN )
{
RestoreExternBackgroundRect( (MPH_REPORTMERC_SETTING_X), (MPH_REPORTMERC_SETTING_Y + 10), 230, 40 );
ButtonList[ guiMPHReportMercOptionToggles[ MPH_REPORTMERC_NO ] ]->uiFlags &= ~BUTTON_CLICKED_ON;
btn->uiFlags|=(BUTTON_CLICKED_ON);
PlayButtonSound( guiMPHReportMercOptionToggles[ MPH_REPORTMERC_YES ], BUTTON_SOUND_CLICKED_ON );
}
}
UINT8 GetCurrentReportMercOptionButtonSetting()
{
UINT8 cnt;
for( cnt=0; cnt<MPH_NUM_REPORTMERC_OPTIONS; cnt++)
{
if( ButtonList[ guiMPHReportMercOptionToggles[ cnt ] ]->uiFlags & BUTTON_CLICKED_ON )
{
return( cnt );
}
}
return( 0 );
}
// -------------
// -------------
// HireMerc
enum
{
MPH_HIREMERC_NORMAL = 0,
MPH_HIREMERC_RANDOM = 1,
MPH_NUM_HIREMERC_OPTIONS,
};
UINT32 guiMPHHireMercOptionTogglesImage[ MPH_NUM_SYNC_OPTIONS ];
UINT32 guiMPHHireMercOptionToggles[ MPH_NUM_SYNC_OPTIONS ];
void BtnMPHRandomHireMercCallback(GUI_BUTTON *btn,INT32 reason);
void BtnMPHNormalHireMercCallback(GUI_BUTTON *btn,INT32 reason);
void BtnMPHRandomHireMercCallback(GUI_BUTTON *btn,INT32 reason)
{
if (!(btn->uiFlags & BUTTON_ENABLED))
return;
if( reason & MSYS_CALLBACK_REASON_LBUTTON_DWN )
{
RestoreExternBackgroundRect( (MPH_HIREMERC_SETTING_X), (MPH_HIREMERC_SETTING_Y + 10), 230, 40 );
ButtonList[ guiMPHHireMercOptionToggles[ MPH_HIREMERC_NORMAL ] ]->uiFlags &= ~BUTTON_CLICKED_ON;
btn->uiFlags|=(BUTTON_CLICKED_ON);
PlayButtonSound( guiMPHHireMercOptionToggles[ MPH_HIREMERC_RANDOM ], BUTTON_SOUND_CLICKED_ON );
}
}
void BtnMPHNormalHireMercCallback(GUI_BUTTON *btn,INT32 reason)
{
if (!(btn->uiFlags & BUTTON_ENABLED))
return;
if( reason & MSYS_CALLBACK_REASON_LBUTTON_DWN )
{
RestoreExternBackgroundRect( (MPH_HIREMERC_SETTING_X), (MPH_HIREMERC_SETTING_Y + 10), 230, 40 );
ButtonList[ guiMPHHireMercOptionToggles[ MPH_HIREMERC_RANDOM ] ]->uiFlags &= ~BUTTON_CLICKED_ON;
btn->uiFlags|=(BUTTON_CLICKED_ON);
PlayButtonSound( guiMPHHireMercOptionToggles[ MPH_HIREMERC_NORMAL ], BUTTON_SOUND_CLICKED_ON );
}
}
UINT8 GetCurrentHireMercOptionButtonSetting()
{
UINT8 cnt;
for( cnt=0; cnt<MPH_NUM_HIREMERC_OPTIONS; cnt++)
{
if( ButtonList[ guiMPHHireMercOptionToggles[ cnt ] ]->uiFlags & BUTTON_CLICKED_ON )
{
return( cnt );
}
}
return( 0 );
}
// -------------
// -------------
// SectorEdge
enum
{
MPH_SECTOREDGE_SELECTABLE = 0,
MPH_SECTOREDGE_RANDOM = 1,
MPH_NUM_SECTOREDGE_OPTIONS,
};
UINT32 guiMPHSectorEdgeOptionTogglesImage[ MPH_NUM_SYNC_OPTIONS ];
UINT32 guiMPHSectorEdgeOptionToggles[ MPH_NUM_SYNC_OPTIONS ];
void BtnMPHRandomSectorEdgeCallback(GUI_BUTTON *btn,INT32 reason);
void BtnMPHSelectableSectorEdgeCallback(GUI_BUTTON *btn,INT32 reason);
void BtnMPHRandomSectorEdgeCallback(GUI_BUTTON *btn,INT32 reason)
{
if (!(btn->uiFlags & BUTTON_ENABLED))
return;
if( reason & MSYS_CALLBACK_REASON_LBUTTON_DWN )
{
RestoreExternBackgroundRect( (MPH_SECTOREDGE_SETTING_X), (MPH_SECTOREDGE_SETTING_Y + 10), 230, 40 );
ButtonList[ guiMPHSectorEdgeOptionToggles[ MPH_SECTOREDGE_SELECTABLE ] ]->uiFlags &= ~BUTTON_CLICKED_ON;
btn->uiFlags|=(BUTTON_CLICKED_ON);
PlayButtonSound( guiMPHSectorEdgeOptionToggles[ MPH_SECTOREDGE_RANDOM ], BUTTON_SOUND_CLICKED_ON );
}
}
void BtnMPHSelectableSectorEdgeCallback(GUI_BUTTON *btn,INT32 reason)
{
if (!(btn->uiFlags & BUTTON_ENABLED))
return;
if( reason & MSYS_CALLBACK_REASON_LBUTTON_DWN )
{
RestoreExternBackgroundRect( (MPH_SECTOREDGE_SETTING_X), (MPH_SECTOREDGE_SETTING_Y + 10), 230, 40 );
ButtonList[ guiMPHSectorEdgeOptionToggles[ MPH_SECTOREDGE_RANDOM ] ]->uiFlags &= ~BUTTON_CLICKED_ON;
btn->uiFlags|=(BUTTON_CLICKED_ON);
PlayButtonSound( guiMPHSectorEdgeOptionToggles[ MPH_SECTOREDGE_SELECTABLE ], BUTTON_SOUND_CLICKED_ON );
}
}
UINT8 GetCurrentSectorEdgeOptionButtonSetting()
{
UINT8 cnt;
for( cnt=0; cnt<MPH_NUM_SECTOREDGE_OPTIONS; cnt++)
{
if( ButtonList[ guiMPHSectorEdgeOptionToggles[ cnt ] ]->uiFlags & BUTTON_CLICKED_ON )
{
return( cnt );
}
}
return( 0 );
}
// -------------
// -------------
// BobbyRay
enum
{
MPH_BOBBYRAY_ALLOW = 0,
MPH_BOBBYRAY_DISABLE = 1,
MPH_NUM_BOBBYRAY_OPTIONS,
};
UINT32 guiMPHBobbyRayOptionTogglesImage[ MPH_NUM_SYNC_OPTIONS ];
UINT32 guiMPHBobbyRayOptionToggles[ MPH_NUM_SYNC_OPTIONS ];
void BtnMPHDisableBobbyRayCallback(GUI_BUTTON *btn,INT32 reason);
void BtnMPHAllowBobbyRayCallback(GUI_BUTTON *btn,INT32 reason);
void BtnMPHDisableBobbyRayCallback(GUI_BUTTON *btn,INT32 reason)
{
if (!(btn->uiFlags & BUTTON_ENABLED))
return;
if( reason & MSYS_CALLBACK_REASON_LBUTTON_DWN )
{
RestoreExternBackgroundRect( (MPH_BOBBYRAY_SETTING_X), (MPH_BOBBYRAY_SETTING_Y + 10), 230, 40 );
ButtonList[ guiMPHBobbyRayOptionToggles[ MPH_BOBBYRAY_ALLOW ] ]->uiFlags &= ~BUTTON_CLICKED_ON;
btn->uiFlags|=(BUTTON_CLICKED_ON);
PlayButtonSound( guiMPHBobbyRayOptionToggles[ MPH_BOBBYRAY_DISABLE ], BUTTON_SOUND_CLICKED_ON );
}
}
void BtnMPHAllowBobbyRayCallback(GUI_BUTTON *btn,INT32 reason)
{
if (!(btn->uiFlags & BUTTON_ENABLED))
return;
if( reason & MSYS_CALLBACK_REASON_LBUTTON_DWN )
{
RestoreExternBackgroundRect( (MPH_BOBBYRAY_SETTING_X), (MPH_BOBBYRAY_SETTING_Y + 10), 230, 40 );
ButtonList[ guiMPHBobbyRayOptionToggles[ MPH_BOBBYRAY_DISABLE ] ]->uiFlags &= ~BUTTON_CLICKED_ON;
btn->uiFlags|=(BUTTON_CLICKED_ON);
PlayButtonSound( guiMPHBobbyRayOptionToggles[ MPH_BOBBYRAY_ALLOW ], BUTTON_SOUND_CLICKED_ON );
}
}
UINT8 GetCurrentBobbyRayOptionButtonSetting()
{
UINT8 cnt;
for( cnt=0; cnt<MPH_NUM_BOBBYRAY_OPTIONS; cnt++)
{
if( ButtonList[ guiMPHBobbyRayOptionToggles[ cnt ] ]->uiFlags & BUTTON_CLICKED_ON )
{
return( cnt );
}
}
return( 0 );
}
// -------------
// -------------
// SameMerc
enum
{
MPH_SAMEMERC_DISABLE = 0,
MPH_SAMEMERC_ALLOW = 1,
MPH_NUM_SAMEMERC_OPTIONS,
};
UINT32 guiMPHSameMercOptionTogglesImage[ MPH_NUM_SYNC_OPTIONS ];
UINT32 guiMPHSameMercOptionToggles[ MPH_NUM_SYNC_OPTIONS ];
void BtnMPHDisableSameMercCallback(GUI_BUTTON *btn,INT32 reason);
void BtnMPHAllowSameMercCallback(GUI_BUTTON *btn,INT32 reason);
void BtnMPHDisableSameMercCallback(GUI_BUTTON *btn,INT32 reason)
{
if (!(btn->uiFlags & BUTTON_ENABLED))
return;
if( reason & MSYS_CALLBACK_REASON_LBUTTON_DWN )
{
RestoreExternBackgroundRect( (MPH_SAMEMERC_SETTING_X), (MPH_SAMEMERC_SETTING_Y + 10), 230, 40 );
ButtonList[ guiMPHSameMercOptionToggles[ MPH_SAMEMERC_ALLOW ] ]->uiFlags &= ~BUTTON_CLICKED_ON;
btn->uiFlags|=(BUTTON_CLICKED_ON);
PlayButtonSound( guiMPHSameMercOptionToggles[ MPH_SAMEMERC_DISABLE ], BUTTON_SOUND_CLICKED_ON );
}
}
void BtnMPHAllowSameMercCallback(GUI_BUTTON *btn,INT32 reason)
{
if (!(btn->uiFlags & BUTTON_ENABLED))
return;
if( reason & MSYS_CALLBACK_REASON_LBUTTON_DWN )
{
RestoreExternBackgroundRect( (MPH_SAMEMERC_SETTING_X), (MPH_SAMEMERC_SETTING_Y + 10), 230, 40 );
ButtonList[ guiMPHSameMercOptionToggles[ MPH_SAMEMERC_DISABLE ] ]->uiFlags &= ~BUTTON_CLICKED_ON;
btn->uiFlags|=(BUTTON_CLICKED_ON);
PlayButtonSound( guiMPHSameMercOptionToggles[ MPH_SAMEMERC_ALLOW ], BUTTON_SOUND_CLICKED_ON );
}
}
UINT8 GetCurrentSameMercOptionButtonSetting()
{
UINT8 cnt;
for( cnt=0; cnt<MPH_NUM_SAMEMERC_OPTIONS; cnt++)
{
if( ButtonList[ guiMPHSameMercOptionToggles[ cnt ] ]->uiFlags & BUTTON_CLICKED_ON )
{
return( cnt );
}
}
return( 0 );
}
// -------------
// -------------
// Difficulty
enum
{
MPH_DIFF_EASY = 0,
MPH_DIFF_MED = 1,
MPH_DIFF_HARD = 2,
MPH_DIFF_INSANE = 3,
MPH_NUM_DIFF_SETTINGS,
};
INT8 iMPHDifficulty;
UINT32 giMPHDifficultyButton[ 2 ];
INT32 giMPHDifficultyButtonImage[ 2 ];
void BtnMPHDifficultySelectionLeftCallback( GUI_BUTTON *btn,INT32 reason );
void BtnMPHDifficultySelectionRightCallback( GUI_BUTTON *btn,INT32 reason );
void BtnMPHDifficultySelectionLeftCallback( GUI_BUTTON *btn,INT32 reason )
{
if (!(btn->uiFlags & BUTTON_ENABLED))
return;
if( reason & MSYS_CALLBACK_REASON_LBUTTON_REPEAT || reason & MSYS_CALLBACK_REASON_LBUTTON_DWN)
{
if ( iMPHDifficulty > 0 )
{
PlayButtonSound( giMPHDifficultyButton[0], BUTTON_SOUND_CLICKED_ON );
iMPHDifficulty--;
gfReRenderMPHScreen =TRUE;
}
else
{
PlayButtonSound( giMPHDifficultyButton[0], BUTTON_SOUND_DISABLED_CLICK );
}
}
else if( reason & MSYS_CALLBACK_REASON_LBUTTON_UP )
{
if (btn->uiFlags & BUTTON_CLICKED_ON)
{
btn->uiFlags&=~(BUTTON_CLICKED_ON);
}
}
}
void BtnMPHDifficultySelectionRightCallback( GUI_BUTTON *btn,INT32 reason )
{
if (!(btn->uiFlags & BUTTON_ENABLED))
return;
if( reason & MSYS_CALLBACK_REASON_LBUTTON_REPEAT || reason & MSYS_CALLBACK_REASON_LBUTTON_DWN )
{
if ( iMPHDifficulty < 3 )
{
PlayButtonSound( giMPHDifficultyButton[1], BUTTON_SOUND_CLICKED_ON );
iMPHDifficulty++;
gfReRenderMPHScreen =TRUE;
}
else
{
PlayButtonSound( giMPHDifficultyButton[1], BUTTON_SOUND_DISABLED_CLICK );
}
}
else if( reason & MSYS_CALLBACK_REASON_LBUTTON_UP )
{
if (btn->uiFlags & BUTTON_CLICKED_ON)
{
btn->uiFlags&=~(BUTTON_CLICKED_ON);
}
}
}
// -------------
// -------------
// GameType
enum
{
MPH_GT_DEATHMATCH = 0,
MPH_GT_TEAM_DEATHMATCH = 1,
MPH_GT_COOP = 2,
MPH_NUM_GAMETYPE_SETTINGS,
};
INT8 iMPHGameType;
UINT32 giMPHGameTypeButton[ 2 ];
INT32 giMPHGameTypeButtonImage[ 2 ];
void BtnMPHGameTypeSelectionLeftCallback( GUI_BUTTON *btn,INT32 reason );
void BtnMPHGameTypeSelectionRightCallback( GUI_BUTTON *btn,INT32 reason );
void BtnMPHGameTypeSelectionLeftCallback( GUI_BUTTON *btn,INT32 reason )
{
if (!(btn->uiFlags & BUTTON_ENABLED))
return;
if( reason & MSYS_CALLBACK_REASON_LBUTTON_REPEAT || reason & MSYS_CALLBACK_REASON_LBUTTON_DWN)
{
if ( iMPHGameType > MPH_GT_DEATHMATCH )
{
PlayButtonSound( giMPHGameTypeButton[0], BUTTON_SOUND_CLICKED_ON );
iMPHGameType--;
gfReRenderMPHScreen =TRUE;
}
else
{
PlayButtonSound( giMPHGameTypeButton[0], BUTTON_SOUND_DISABLED_CLICK );
}
}
else if( reason & MSYS_CALLBACK_REASON_LBUTTON_UP )
{
if (btn->uiFlags & BUTTON_CLICKED_ON)
{
btn->uiFlags&=~(BUTTON_CLICKED_ON);
}
}
}
void BtnMPHGameTypeSelectionRightCallback( GUI_BUTTON *btn,INT32 reason )
{
if (!(btn->uiFlags & BUTTON_ENABLED))
return;
if( reason & MSYS_CALLBACK_REASON_LBUTTON_REPEAT || reason & MSYS_CALLBACK_REASON_LBUTTON_DWN)
{
if ( iMPHGameType < MPH_GT_COOP )
{
PlayButtonSound( giMPHGameTypeButton[1], BUTTON_SOUND_CLICKED_ON );
iMPHGameType++;
gfReRenderMPHScreen =TRUE;
}
else
{
PlayButtonSound( giMPHGameTypeButton[1], BUTTON_SOUND_DISABLED_CLICK );
}
}
else if( reason & MSYS_CALLBACK_REASON_LBUTTON_UP )
{
if (btn->uiFlags & BUTTON_CLICKED_ON)
{
btn->uiFlags&=~(BUTTON_CLICKED_ON);
}
}
}
// -------------
// -------------
// MaxPlayers
enum
{
MPH_MAXPLAYERS_2 = 2,
MPH_MAXPLAYERS_3 = 3,
MPH_MAXPLAYERS_4 = 4,
MPH_NUM_MAXPLAYERS_SETTINGS,
};
INT8 iMPHMaxPlayers;
UINT32 giMPHMaxPlayersButton[ 2 ];
INT32 giMPHMaxPlayersButtonImage[ 2 ];
void BtnMPHMaxPlayersSelectionLeftCallback( GUI_BUTTON *btn,INT32 reason );
void BtnMPHMaxPlayersSelectionRightCallback( GUI_BUTTON *btn,INT32 reason );
void BtnMPHMaxPlayersSelectionLeftCallback( GUI_BUTTON *btn,INT32 reason )
{
if (!(btn->uiFlags & BUTTON_ENABLED))
return;
if( reason & MSYS_CALLBACK_REASON_LBUTTON_REPEAT || reason & MSYS_CALLBACK_REASON_LBUTTON_DWN)
{
if ( iMPHMaxPlayers > MPH_MAXPLAYERS_2 )
{
PlayButtonSound( giMPHMaxPlayersButton[0], BUTTON_SOUND_CLICKED_ON );
iMPHMaxPlayers--;
gfReRenderMPHScreen =TRUE;
}
else
{
PlayButtonSound( giMPHMaxPlayersButton[0], BUTTON_SOUND_DISABLED_CLICK );
}
}
else if( reason & MSYS_CALLBACK_REASON_LBUTTON_UP )
{
if (btn->uiFlags & BUTTON_CLICKED_ON)
{
btn->uiFlags&=~(BUTTON_CLICKED_ON);
}
}
}
void BtnMPHMaxPlayersSelectionRightCallback( GUI_BUTTON *btn,INT32 reason )
{
if (!(btn->uiFlags & BUTTON_ENABLED))
return;
if( reason & MSYS_CALLBACK_REASON_LBUTTON_REPEAT || reason & MSYS_CALLBACK_REASON_LBUTTON_DWN)
{
if ( iMPHMaxPlayers < MPH_MAXPLAYERS_4 )
{
PlayButtonSound( giMPHMaxPlayersButton[1], BUTTON_SOUND_CLICKED_ON );
iMPHMaxPlayers++;
gfReRenderMPHScreen =TRUE;
}
else
{
PlayButtonSound( giMPHMaxPlayersButton[1], BUTTON_SOUND_DISABLED_CLICK );
}
}
else if( reason & MSYS_CALLBACK_REASON_LBUTTON_UP )
{
if (btn->uiFlags & BUTTON_CLICKED_ON)
{
btn->uiFlags&=~(BUTTON_CLICKED_ON);
}
}
}
// -------------
// -------------
// Inventory
enum
{
MPH_INV_OLD = 0,
MPH_INV_NEW = 1,
MPH_INV_NEW_NAS = 2,
MPH_NUM_INV_OPTIONS,
};
INT8 iMPHInventory;
UINT32 giMPHInventoryButton[ 2 ];
INT32 giMPHInventoryButtonImage[ 2 ];
void BtnMPHInventorySelectionLeftCallback( GUI_BUTTON *btn,INT32 reason );
void BtnMPHInventorySelectionRightCallback( GUI_BUTTON *btn,INT32 reason );
void BtnMPHInventorySelectionLeftCallback( GUI_BUTTON *btn,INT32 reason )
{
if (!(btn->uiFlags & BUTTON_ENABLED))
return;
if( reason & MSYS_CALLBACK_REASON_LBUTTON_REPEAT || reason & MSYS_CALLBACK_REASON_LBUTTON_DWN)
{
if ( iMPHInventory > MPH_INV_OLD )
{
PlayButtonSound( giMPHInventoryButton[0], BUTTON_SOUND_CLICKED_ON );
iMPHInventory--;
gfReRenderMPHScreen =TRUE;
}
else
{
PlayButtonSound( giMPHInventoryButton[0], BUTTON_SOUND_DISABLED_CLICK );
}
}
else if( reason & MSYS_CALLBACK_REASON_LBUTTON_UP )
{
if (btn->uiFlags & BUTTON_CLICKED_ON)
{
btn->uiFlags&=~(BUTTON_CLICKED_ON);
}
}
}
void BtnMPHInventorySelectionRightCallback( GUI_BUTTON *btn,INT32 reason )
{
if (!(btn->uiFlags & BUTTON_ENABLED))
return;
if( reason & MSYS_CALLBACK_REASON_LBUTTON_REPEAT || reason & MSYS_CALLBACK_REASON_LBUTTON_DWN)
{
if ( iMPHInventory < MPH_INV_NEW_NAS )
{
PlayButtonSound( giMPHInventoryButton[1], BUTTON_SOUND_CLICKED_ON );
iMPHInventory++;
gfReRenderMPHScreen =TRUE;
}
else
{
PlayButtonSound( giMPHInventoryButton[1], BUTTON_SOUND_DISABLED_CLICK );
}
}
else if( reason & MSYS_CALLBACK_REASON_LBUTTON_UP )
{
if (btn->uiFlags & BUTTON_CLICKED_ON)
{
btn->uiFlags&=~(BUTTON_CLICKED_ON);
}
}
}
// -------------
// -------------
// StartingTime
enum
{
MPH_STARTINGTIME_MORNING = 0,
MPH_STARTINGTIME_AFTERNOON = 1,
MPH_STARTINGTIME_NIGHT = 2,
MPH_NUM_STARTINGTIME_SETTINGS,
};
INT8 iMPHStartingTime;
UINT32 giMPHStartingTimeButton[ 2 ];
INT32 giMPHStartingTimeButtonImage[ 2 ];
void BtnMPHStartingTimeSelectionLeftCallback( GUI_BUTTON *btn,INT32 reason );
void BtnMPHStartingTimeSelectionRightCallback( GUI_BUTTON *btn,INT32 reason );
void BtnMPHStartingTimeSelectionLeftCallback( GUI_BUTTON *btn,INT32 reason )
{
if (!(btn->uiFlags & BUTTON_ENABLED))
return;
if( reason & MSYS_CALLBACK_REASON_LBUTTON_REPEAT || reason & MSYS_CALLBACK_REASON_LBUTTON_DWN)
{
if ( iMPHStartingTime > MPH_STARTINGTIME_MORNING )
{
PlayButtonSound( giMPHStartingTimeButton[0], BUTTON_SOUND_CLICKED_ON );
iMPHStartingTime--;
gfReRenderMPHScreen =TRUE;
}
else
{
PlayButtonSound( giMPHStartingTimeButton[0], BUTTON_SOUND_DISABLED_CLICK );
}
}
else if( reason & MSYS_CALLBACK_REASON_LBUTTON_UP )
{
if (btn->uiFlags & BUTTON_CLICKED_ON)
{
btn->uiFlags&=~(BUTTON_CLICKED_ON);
}
}
}
void BtnMPHStartingTimeSelectionRightCallback( GUI_BUTTON *btn,INT32 reason )
{
if (!(btn->uiFlags & BUTTON_ENABLED))
return;
if( reason & MSYS_CALLBACK_REASON_LBUTTON_REPEAT || reason & MSYS_CALLBACK_REASON_LBUTTON_DWN)
{
if ( iMPHStartingTime < MPH_STARTINGTIME_NIGHT )
{
PlayButtonSound( giMPHStartingTimeButton[1], BUTTON_SOUND_CLICKED_ON );
iMPHStartingTime++;
gfReRenderMPHScreen =TRUE;
}
else
{
PlayButtonSound( giMPHStartingTimeButton[1], BUTTON_SOUND_DISABLED_CLICK );
}
}
else if( reason & MSYS_CALLBACK_REASON_LBUTTON_UP )
{
if (btn->uiFlags & BUTTON_CLICKED_ON)
{
btn->uiFlags&=~(BUTTON_CLICKED_ON);
}
}
}
// -------------
// -------------
// StartingCash
enum
{
MPH_STARTINGCASH_LOW = 0,
MPH_STARTINGCASH_MEDIUM = 1,
MPH_STARTINGCASH_HIGH = 2,
MPH_STARTINGCASH_UNLIMITED = 3,
MPH_NUM_STARTINGCASH_SETTINGS,
};
INT8 iMPHStartingCash;
UINT32 giMPHStartingCashButton[ 2 ];
INT32 giMPHStartingCashButtonImage[ 2 ];
void BtnMPHStartingCashSelectionLeftCallback( GUI_BUTTON *btn,INT32 reason );
void BtnMPHStartingCashSelectionRightCallback( GUI_BUTTON *btn,INT32 reason );
void BtnMPHStartingCashSelectionLeftCallback( GUI_BUTTON *btn,INT32 reason )
{
if (!(btn->uiFlags & BUTTON_ENABLED))
return;
if( reason & MSYS_CALLBACK_REASON_LBUTTON_REPEAT || reason & MSYS_CALLBACK_REASON_LBUTTON_DWN)
{
if ( iMPHStartingCash > MPH_STARTINGCASH_LOW )
{
PlayButtonSound( giMPHStartingCashButton[0], BUTTON_SOUND_CLICKED_ON );
iMPHStartingCash--;
gfReRenderMPHScreen =TRUE;
}
else
{
PlayButtonSound( giMPHStartingCashButton[0], BUTTON_SOUND_DISABLED_CLICK );
}
}
else if( reason & MSYS_CALLBACK_REASON_LBUTTON_UP )
{
if (btn->uiFlags & BUTTON_CLICKED_ON)
{
btn->uiFlags&=~(BUTTON_CLICKED_ON);
}
}
}
void BtnMPHStartingCashSelectionRightCallback( GUI_BUTTON *btn,INT32 reason )
{
if (!(btn->uiFlags & BUTTON_ENABLED))
return;
if( reason & MSYS_CALLBACK_REASON_LBUTTON_REPEAT || reason & MSYS_CALLBACK_REASON_LBUTTON_DWN)
{
if ( iMPHStartingCash < MPH_STARTINGCASH_UNLIMITED )
{
PlayButtonSound( giMPHStartingCashButton[1], BUTTON_SOUND_CLICKED_ON );
iMPHStartingCash++;
gfReRenderMPHScreen =TRUE;
}
else
{
PlayButtonSound( giMPHStartingCashButton[1], BUTTON_SOUND_DISABLED_CLICK );
}
}
else if( reason & MSYS_CALLBACK_REASON_LBUTTON_UP )
{
if (btn->uiFlags & BUTTON_CLICKED_ON)
{
btn->uiFlags&=~(BUTTON_CLICKED_ON);
}
}
}
// -------------
// -------------
// WeaponDamage
enum
{
MPH_WEAPONDAMAGE_VERYLOW = 0,
MPH_WEAPONDAMAGE_LOW = 1,
MPH_WEAPONDAMAGE_NORMAL = 2,
MPH_NUM_WEAPONDAMAGE_SETTINGS,
};
INT8 iMPHWeaponDamage;
UINT32 giMPHWeaponDamageButton[ 2 ];
INT32 giMPHWeaponDamageButtonImage[ 2 ];
void BtnMPHWeaponDamageSelectionLeftCallback( GUI_BUTTON *btn,INT32 reason );
void BtnMPHWeaponDamageSelectionRightCallback( GUI_BUTTON *btn,INT32 reason );
void BtnMPHWeaponDamageSelectionLeftCallback( GUI_BUTTON *btn,INT32 reason )
{
if (!(btn->uiFlags & BUTTON_ENABLED))
return;
if( reason & MSYS_CALLBACK_REASON_LBUTTON_REPEAT || reason & MSYS_CALLBACK_REASON_LBUTTON_DWN)
{
if ( iMPHWeaponDamage > MPH_WEAPONDAMAGE_VERYLOW )
{
PlayButtonSound( giMPHWeaponDamageButton[0], BUTTON_SOUND_CLICKED_ON );
iMPHWeaponDamage--;
gfReRenderMPHScreen =TRUE;
}
else
{
PlayButtonSound( giMPHWeaponDamageButton[0], BUTTON_SOUND_DISABLED_CLICK );
}
}
else if( reason & MSYS_CALLBACK_REASON_LBUTTON_UP )
{
if (btn->uiFlags & BUTTON_CLICKED_ON)
{
btn->uiFlags&=~(BUTTON_CLICKED_ON);
}
}
}
void BtnMPHWeaponDamageSelectionRightCallback( GUI_BUTTON *btn,INT32 reason )
{
if (!(btn->uiFlags & BUTTON_ENABLED))
return;
if( reason & MSYS_CALLBACK_REASON_LBUTTON_REPEAT || reason & MSYS_CALLBACK_REASON_LBUTTON_DWN)
{
if ( iMPHWeaponDamage < MPH_WEAPONDAMAGE_NORMAL )
{
PlayButtonSound( giMPHWeaponDamageButton[1], BUTTON_SOUND_CLICKED_ON );
iMPHWeaponDamage++;
gfReRenderMPHScreen =TRUE;
}
else
{
PlayButtonSound( giMPHWeaponDamageButton[1], BUTTON_SOUND_DISABLED_CLICK );
}
}
else if( reason & MSYS_CALLBACK_REASON_LBUTTON_UP )
{
if (btn->uiFlags & BUTTON_CLICKED_ON)
{
btn->uiFlags&=~(BUTTON_CLICKED_ON);
}
}
}
// -------------
// -------------
// TimeTurns
enum
{
MPH_TIMETURNS_NEVER = 0,
MPH_TIMETURNS_SLOW = 1,
MPH_TIMETURNS_MEDIUM = 2,
MPH_TIMETURNS_FAST = 3,
MPH_NUM_TIMETURNS_SETTINGS,
};
INT8 iMPHTimeTurns;
UINT32 giMPHTimeTurnsButton[ 2 ];
INT32 giMPHTimeTurnsButtonImage[ 2 ];
void BtnMPHTimeTurnsSelectionLeftCallback( GUI_BUTTON *btn,INT32 reason );
void BtnMPHTimeTurnsSelectionRightCallback( GUI_BUTTON *btn,INT32 reason );
void BtnMPHTimeTurnsSelectionLeftCallback( GUI_BUTTON *btn,INT32 reason )
{
if (!(btn->uiFlags & BUTTON_ENABLED))
return;
if( reason & MSYS_CALLBACK_REASON_LBUTTON_REPEAT || reason & MSYS_CALLBACK_REASON_LBUTTON_DWN)
{
if ( iMPHTimeTurns > MPH_TIMETURNS_NEVER )
{
PlayButtonSound( giMPHTimeTurnsButton[0], BUTTON_SOUND_CLICKED_ON );
iMPHTimeTurns--;
gfReRenderMPHScreen =TRUE;
}
else
{
PlayButtonSound( giMPHTimeTurnsButton[0], BUTTON_SOUND_DISABLED_CLICK );
}
}
else if( reason & MSYS_CALLBACK_REASON_LBUTTON_UP )
{
if (btn->uiFlags & BUTTON_CLICKED_ON)
{
btn->uiFlags&=~(BUTTON_CLICKED_ON);
}
}
}
void BtnMPHTimeTurnsSelectionRightCallback( GUI_BUTTON *btn,INT32 reason )
{
if (!(btn->uiFlags & BUTTON_ENABLED))
return;
if( reason & MSYS_CALLBACK_REASON_LBUTTON_REPEAT || reason & MSYS_CALLBACK_REASON_LBUTTON_DWN)
{
if ( iMPHTimeTurns < MPH_TIMETURNS_FAST )
{
PlayButtonSound( giMPHTimeTurnsButton[1], BUTTON_SOUND_CLICKED_ON );
iMPHTimeTurns++;
gfReRenderMPHScreen =TRUE;
}
else
{
PlayButtonSound( giMPHTimeTurnsButton[1], BUTTON_SOUND_DISABLED_CLICK );
}
}
else if( reason & MSYS_CALLBACK_REASON_LBUTTON_UP )
{
if (btn->uiFlags & BUTTON_CLICKED_ON)
{
btn->uiFlags&=~(BUTTON_CLICKED_ON);
}
}
}
// -------------
// -------------
// SquadSize
enum
{
MPH_SQUADSIZE_1 = 1,
MPH_SQUADSIZE_2 = 2,
MPH_SQUADSIZE_3 = 3,
MPH_SQUADSIZE_4 = 4,
MPH_SQUADSIZE_5 = 5,
MPH_SQUADSIZE_6 = 6,
MPH_NUM_SQUADSIZE_SETTINGS,
};
INT8 iMPHSquadSize;
UINT32 giMPHSquadSizeButton[ 2 ];
INT32 giMPHSquadSizeButtonImage[ 2 ];
void BtnMPHSquadSizeSelectionLeftCallback( GUI_BUTTON *btn,INT32 reason );
void BtnMPHSquadSizeSelectionRightCallback( GUI_BUTTON *btn,INT32 reason );
void BtnMPHSquadSizeSelectionLeftCallback( GUI_BUTTON *btn,INT32 reason )
{
if (!(btn->uiFlags & BUTTON_ENABLED))
return;
if( reason & MSYS_CALLBACK_REASON_LBUTTON_REPEAT || reason & MSYS_CALLBACK_REASON_LBUTTON_DWN)
{
if ( iMPHSquadSize > MPH_SQUADSIZE_1 )
{
PlayButtonSound( giMPHSquadSizeButton[0], BUTTON_SOUND_CLICKED_ON );
iMPHSquadSize--;
gfReRenderMPHScreen =TRUE;
}
else
{
PlayButtonSound( giMPHSquadSizeButton[0], BUTTON_SOUND_DISABLED_CLICK );
}
}
else if( reason & MSYS_CALLBACK_REASON_LBUTTON_UP )
{
if (btn->uiFlags & BUTTON_CLICKED_ON)
{
btn->uiFlags&=~(BUTTON_CLICKED_ON);
}
}
}
void BtnMPHSquadSizeSelectionRightCallback( GUI_BUTTON *btn,INT32 reason )
{
if (!(btn->uiFlags & BUTTON_ENABLED))
return;
if( reason & MSYS_CALLBACK_REASON_LBUTTON_REPEAT || reason & MSYS_CALLBACK_REASON_LBUTTON_DWN)
{
if ( iMPHSquadSize < MPH_SQUADSIZE_6 )
{
PlayButtonSound( giMPHSquadSizeButton[1], BUTTON_SOUND_CLICKED_ON );
iMPHSquadSize++;
gfReRenderMPHScreen =TRUE;
}
else
{
PlayButtonSound( giMPHSquadSizeButton[1], BUTTON_SOUND_DISABLED_CLICK );
}
}
else if( reason & MSYS_CALLBACK_REASON_LBUTTON_UP )
{
if (btn->uiFlags & BUTTON_CLICKED_ON)
{
btn->uiFlags&=~(BUTTON_CLICKED_ON);
}
}
}
// -------------
//enum for different states of screen
enum
{
MPH_NOTHING,
MPH_CANCEL,
MPH_START
};
UINT8 gubMPHScreenHandler=MPH_NOTHING; // State changer for HandleMPHScreen()
UINT32 gubMPHExitScreen = MP_HOST_SCREEN; // The screen that is in control next iteration of the game_loop
UINT32 guiMPHMainBackGroundImage;
// ------------
// String fields
// Wide-char strings that will hold the variables until they are transferred to the CHAR ascii fields
CHAR16 gzServerNameField[ 30 ] = {0} ;
CHAR16 gzFileTransferDirectory[ 100 ] = {0} ;
CHAR16 gzKitBag[ 100 ] = {0};
// ------------
// Controls with Multi Selection!
UINT8 guiMPHGameType;
UINT8 guiMPHDifficultLevel;
UINT8 guiMPHMaxPlayers;
UINT8 guiMPHSquadSize;
UINT8 guiMPHStartingTime;
UINT8 guiMPHStartingCash;
UINT8 guiMPHTimeTurns;
UINT8 guiMPHWeaponDamage;
UINT8 guiMPHInventory;
// ------------
// ------------
// Controls with YES/NO
UINT8 guiMPHMaxEnemies;
UINT8 guiMPHSendFiles;
UINT8 guiMPHHireMerc;
UINT8 guiMPHSectorEdge;
UINT8 guiMPHBobbyRay;
UINT8 guiMPHSameMerc;
UINT8 guiMPHReportMerc;
UINT8 guiMPHCivs;
UINT8 guiMPHNewTraits;
// ------------
////////////////////////////////////////////
//
// Screen Controls
//
///////////////////////////////////////////
// Start Button
void BtnMPHStartCallback(GUI_BUTTON *btn,INT32 reason);
UINT32 guiMPHStartButton;
INT32 giMPHStartBtnImage;
// Cancel Button
void BtnMPHCancelCallback(GUI_BUTTON *btn,INT32 reason);
UINT32 guiMPHCancelButton;
INT32 giMPHCancelBtnImage;
////////////////////////////////////////////
//
// Local Function Prototypes
//
///////////////////////////////////////////
extern void ClearMainMenu();
BOOLEAN EnterMPHScreen();
BOOLEAN ExitMPHScreen();
void HandleMPHScreen();
BOOLEAN RenderMPHScreen();
void GetMPHScreenUserInput();
bool ValidateMPSettings();
void SaveMPSettings();
UINT8 GetMPHGameTypeButtonSetting();
BOOLEAN DoMPHMessageBox( UINT8 ubStyle, const STR16 zString, UINT32 uiExitScreen, UINT16 usFlags, MSGBOX_CALLBACK ReturnCallback );
void DoneFadeOutForExitMPHScreen( void );
void DoneFadeInForExitMPHScreen( void );
////////////////////////////////////////////
//
// Functions
//
///////////////////////////////////////////
void SaveMPSettings()
{
MpIniExists();
vfs::PropertyContainer props;
props.initFromIniFile(JA2MP_INI_FILENAME);
guiMPHMaxPlayers = iMPHMaxPlayers;
props.setIntProperty(JA2MP_INI_INITIAL_SECTION,JA2MP_MAX_CLIENTS, guiMPHMaxPlayers);
guiMPHSquadSize = iMPHSquadSize;
props.setIntProperty(JA2MP_INI_INITIAL_SECTION, JA2MP_MAX_MERCS, guiMPHSquadSize);
guiMPHStartingCash = iMPHStartingCash;
props.setIntProperty(JA2MP_INI_INITIAL_SECTION,JA2MP_STARTING_BALANCE, guiMPHStartingCash);
guiMPHWeaponDamage = iMPHWeaponDamage;
props.setIntProperty(JA2MP_INI_INITIAL_SECTION,JA2MP_DAMAGE_MULTIPLIER, guiMPHWeaponDamage);
guiMPHTimeTurns = iMPHTimeTurns;
props.setIntProperty(JA2MP_INI_INITIAL_SECTION,JA2MP_TIMED_TURN_SECS_PER_TICK, guiMPHTimeTurns);
guiMPHGameType = iMPHGameType;
props.setIntProperty(JA2MP_INI_INITIAL_SECTION,JA2MP_GAME_MODE, guiMPHGameType);
guiMPHStartingTime = iMPHStartingTime;
props.setIntProperty(JA2MP_INI_INITIAL_SECTION,JA2MP_TIME, guiMPHStartingTime);
guiMPHMaxEnemies = GetCurrentMaxEnemiesOptionButtonSetting();
props.setIntProperty(JA2MP_INI_INITIAL_SECTION, JA2MP_OVERRIDE_MAX_AI, guiMPHMaxEnemies);
guiMPHHireMerc = GetCurrentHireMercOptionButtonSetting();
props.setIntProperty(JA2MP_INI_INITIAL_SECTION, JA2MP_RANDOM_MERCS, guiMPHHireMerc);
guiMPHSameMerc = GetCurrentSameMercOptionButtonSetting();
props.setIntProperty(JA2MP_INI_INITIAL_SECTION, JA2MP_SAME_MERC, guiMPHSameMerc);
guiMPHBobbyRay = GetCurrentBobbyRayOptionButtonSetting();
props.setIntProperty(JA2MP_INI_INITIAL_SECTION, JA2MP_DISABLE_BOBBY_RAYS, guiMPHBobbyRay);
guiMPHReportMerc = GetCurrentReportMercOptionButtonSetting();
props.setIntProperty(JA2MP_INI_INITIAL_SECTION, JA2MP_REPORT_NAME, guiMPHReportMerc);
guiMPHSectorEdge = GetCurrentSectorEdgeOptionButtonSetting();
props.setIntProperty(JA2MP_INI_INITIAL_SECTION, JA2MP_RANDOM_EDGES, guiMPHSectorEdge);
guiMPHCivs = GetCurrentCivsOptionButtonSetting();
props.setIntProperty(JA2MP_INI_INITIAL_SECTION, JA2MP_CIV_ENABLED, guiMPHCivs);
guiMPHInventory = iMPHInventory;
props.setIntProperty(JA2MP_INI_INITIAL_SECTION,JA2MP_ALLOW_CUSTOM_NIV, guiMPHInventory);
guiMPHSendFiles = GetCurrentSyncOptionButtonSetting();
props.setIntProperty(JA2MP_INI_INITIAL_SECTION, JA2MP_SYNC_CLIENTS_MP_DIR, guiMPHSendFiles);
guiMPHNewTraits = GetMPHCurrentTraitsOptionButtonSetting();
props.setIntProperty(JA2MP_INI_INITIAL_SECTION, JA2MP_NEW_TRAITS, guiMPHNewTraits);
guiMPHDifficultLevel = iMPHDifficulty + 1;
props.setIntProperty(JA2MP_INI_INITIAL_SECTION,JA2MP_DIFFICULT_LEVEL, guiMPHDifficultLevel - 1);
// This writes the data back (from the GUI) to the Profiles/UserProfile/ja2_mp.ini
props.writeToIniFile(JA2MP_INI_FILENAME, false);
}
bool ValidateMPSettings()
{
vfs::Path sUserDir(gzFileTransferDirectory);
if(!vfs::OS::checkRealDirectory(sUserDir))
{
DoMPHMessageBox( MSG_BOX_BASIC_STYLE, gzMPHScreenText[MPH_FILE_TRANSFER_DIR_NOT_EXIST], MP_HOST_SCREEN, MSG_BOX_FLAG_OK, NULL );
return false;
}
return true;
}
UINT32 MPHostScreenInit( void )
{
memset( &gGameOptions, 0, sizeof( GAME_OPTIONS ) );
// this is wrong as ScreenInit is called at game start, but the settigs can change anytime
// has be called in ScreenEnter for example
std::vector<CHAR16> szTime(6,0);
// read settings from JA2_mp.ini
MpIniExists();
vfs::PropertyContainer props;
props.initFromIniFile(JA2MP_INI_FILENAME);
// ------------
// Get the data from ja2_mp.ini
// ------------
props.getStringProperty(JA2MP_INI_INITIAL_SECTION, JA2MP_SERVER_NAME, gzServerNameField, 30, L"My JA2 Server");
guiMPHMaxPlayers = (UINT8)props.getIntProperty(JA2MP_INI_INITIAL_SECTION, JA2MP_MAX_CLIENTS, 4);
guiMPHSquadSize = (UINT8)props.getIntProperty(JA2MP_INI_INITIAL_SECTION, JA2MP_MAX_MERCS, 6);
guiMPHStartingCash = (UINT8)props.getIntProperty(JA2MP_INI_INITIAL_SECTION, JA2MP_STARTING_BALANCE, 1);
guiMPHWeaponDamage = (UINT8)props.getIntProperty(JA2MP_INI_INITIAL_SECTION, JA2MP_DAMAGE_MULTIPLIER, 1);
guiMPHTimeTurns = (UINT8)props.getIntProperty(JA2MP_INI_INITIAL_SECTION, JA2MP_TIMED_TURN_SECS_PER_TICK, 2);
props.getStringProperty(JA2MP_INI_INITIAL_SECTION, JA2MP_FILE_TRANSFER_DIRECTORY, gzFileTransferDirectory, 100, L"MULTIPLAYER/Servers/My Server");
props.getStringProperty(JA2MP_INI_INITIAL_SECTION, JA2MP_KIT_BAG, gzKitBag, 100, L"");
guiMPHStartingTime = (UINT8)props.getIntProperty(JA2MP_INI_INITIAL_SECTION, JA2MP_TIME, 1);
guiMPHMaxEnemies = (UINT8)props.getIntProperty(JA2MP_INI_INITIAL_SECTION,JA2MP_OVERRIDE_MAX_AI, 0);
guiMPHNewTraits = (UINT8)props.getIntProperty(JA2MP_INI_INITIAL_SECTION,JA2MP_NEW_TRAITS, 0);
// It is not allowed to play with new traits
if (!gGameExternalOptions.fReadProfileDataFromXML)
guiMPHNewTraits = 0;
guiMPHHireMerc = (UINT8)props.getIntProperty(JA2MP_INI_INITIAL_SECTION,JA2MP_RANDOM_MERCS, 0);
guiMPHSameMerc = (UINT8)props.getIntProperty(JA2MP_INI_INITIAL_SECTION,JA2MP_SAME_MERC, 1);
guiMPHReportMerc = (UINT8)props.getIntProperty(JA2MP_INI_INITIAL_SECTION,JA2MP_REPORT_NAME, 1);
guiMPHBobbyRay = (UINT8)props.getIntProperty(JA2MP_INI_INITIAL_SECTION,JA2MP_DISABLE_BOBBY_RAYS, 0);
guiMPHSectorEdge = (UINT8)props.getIntProperty(JA2MP_INI_INITIAL_SECTION,JA2MP_RANDOM_EDGES, 0);
guiMPHCivs = (UINT8)props.getIntProperty(JA2MP_INI_INITIAL_SECTION,JA2MP_CIV_ENABLED, 0);
guiMPHInventory = (UINT8)props.getIntProperty(JA2MP_INI_INITIAL_SECTION, JA2MP_ALLOW_CUSTOM_NIV, 0);
// It is not allowed to play with NIV
if (!IsNIVModeValid(true))
guiMPHInventory = 0;
guiMPHSendFiles = (UINT8)props.getIntProperty(JA2MP_INI_INITIAL_SECTION,JA2MP_SYNC_CLIENTS_MP_DIR, 1);
guiMPHGameType = (UINT8)props.getIntProperty(JA2MP_INI_INITIAL_SECTION,JA2MP_GAME_MODE, MP_TYPE_DEATHMATCH);
guiMPHDifficultLevel = (UINT8)props.getIntProperty(JA2MP_INI_INITIAL_SECTION,JA2MP_DIFFICULT_LEVEL, 3) + 1;
return( 1 );
}
UINT32 MPHostScreenHandle( void )
{
StartFrameBufferRender();
if( gfMPHScreenEntry )
{
// need to reload ja2_mp.ini
MPHostScreenInit();
EnterMPHScreen();
gfMPHScreenEntry = FALSE;
gfMPHScreenExit = FALSE;
InvalidateRegion( 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT );
}
GetMPHScreenUserInput();
HandleMPHScreen();
// render buttons marked dirty
MarkButtonsDirty( );
RenderButtons( );
// render text boxes
RenderAllTextFields(); // textbox system call
ExecuteBaseDirtyRectQueue();
EndFrameBufferRender();
// handle fades in and out
if ( HandleFadeOutCallback( ) )
{
ClearMainMenu();
return( gubMPHExitScreen );
}
if ( HandleBeginFadeOut( gubMPHExitScreen ) )
{
return( gubMPHExitScreen );
}
if ( HandleFadeInCallback( ) )
{
// Re-render the scene!
RenderMPHScreen();
}
if ( HandleBeginFadeIn( gubMPHExitScreen ) )
{
}
if( gfMPHScreenExit ) // we are exiting this screen
{
ExitMPHScreen(); // perform destruction
}
return( gubMPHExitScreen );
}
UINT32 MPHostScreenShutdown( void )
{
return( 1 );
}
BOOLEAN EnterMPHScreen()
{
VOBJECT_DESC VObjectDesc, VObjectDesc2;
if( gfMPHButtonsAllocated )
return( TRUE );
SetCurrentCursorFromDatabase( CURSOR_NORMAL );
// load the Main trade screen backgroiund image
//ColorFillVideoSurfaceArea( FRAME_BUFFER, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, Get16BPPColor( FROMRGB( 0, 0, 0 ) ) );
VObjectDesc.fCreateFlags=VOBJECT_CREATE_FROMFILE;
if (iResolution >= _640x480 && iResolution < _800x600)
FilenameForBPP("INTERFACE\\OptionsScreenBackGround.sti", VObjectDesc.ImageFile);
else if (iResolution < _1024x768)
FilenameForBPP("INTERFACE\\OptionsScreenBackGround_800x600.sti", VObjectDesc.ImageFile);
else
FilenameForBPP("INTERFACE\\OptionsScreenBackGround_1024x768.sti", VObjectDesc.ImageFile);
CHECKF(AddVideoObject(&VObjectDesc, &guiMPHMainBackGroundImage ));
VObjectDesc2.fCreateFlags=VOBJECT_CREATE_FROMFILE;
FilenameForBPP("INTERFACE\\GIOSmallFrame.sti", VObjectDesc2.ImageFile);
CHECKF(AddVideoObject(&VObjectDesc2, &guiMPHSMALLFRAME));
//Join button
giMPHStartBtnImage = LoadButtonImage("INTERFACE\\PreferencesButtons.sti", -1,0,-1,2,-1 );
guiMPHStartButton = CreateIconAndTextButton( giMPHStartBtnImage, gzMPHScreenText[MPH_START_TEXT], OPT_BUTTON_FONT,
OPT_BUTTON_ON_COLOR, DEFAULT_SHADOW,
OPT_BUTTON_OFF_COLOR, DEFAULT_SHADOW,
TEXT_CJUSTIFIED,
MPH_BTN_START_X, MPH_BTN_START_Y, BUTTON_TOGGLE, MSYS_PRIORITY_HIGH,
DEFAULT_MOVE_CALLBACK, BtnMPHStartCallback);
SpecifyButtonSoundScheme( guiMPHStartButton, BUTTON_SOUND_SCHEME_BIGSWITCH3 );
SpecifyDisabledButtonStyle( guiMPHStartButton, DISABLED_STYLE_NONE );
//Cancel button
giMPHCancelBtnImage = UseLoadedButtonImage( giMPHStartBtnImage, -1,1,-1,3,-1 );
guiMPHCancelButton = CreateIconAndTextButton( giMPHCancelBtnImage, gzMPHScreenText[MPH_CANCEL_TEXT], OPT_BUTTON_FONT,
OPT_BUTTON_ON_COLOR, DEFAULT_SHADOW,
OPT_BUTTON_OFF_COLOR, DEFAULT_SHADOW,
TEXT_CJUSTIFIED,
MPH_CANCEL_X, MPH_BTN_START_Y, BUTTON_TOGGLE, MSYS_PRIORITY_HIGH,
DEFAULT_MOVE_CALLBACK, BtnMPHCancelCallback );
SpecifyButtonSoundScheme( guiMPHCancelButton, BUTTON_SOUND_SCHEME_BIGSWITCH3 );
// Initialise Text Boxes
InitTextInputMode(); // API call to initialise text input mode for this screen
// does not mean we are inputting text right away
// Player Name field
SetTextInputCursor( CUROSR_IBEAM_WHITE );
SetTextInputFont( (UINT16) FONT12ARIALFIXEDWIDTH ); //FONT12ARIAL //FONT12ARIALFIXEDWIDTH
Set16BPPTextFieldColor( Get16BPPColor(FROMRGB( 0, 0, 0) ) );
SetBevelColors( Get16BPPColor(FROMRGB(136, 138, 135)), Get16BPPColor(FROMRGB(24, 61, 81)) );
SetTextInputRegularColors( FONT_WHITE, 2 );
SetTextInputHilitedColors( 2, FONT_WHITE, FONT_WHITE );
SetCursorColor( Get16BPPColor(FROMRGB(255, 255, 255) ) );
///////////////////////////////////////////////////////////////////////////////////////////////////////
// MAX PLAYERS
giMPHMaxPlayersButtonImage[ 0 ]= LoadButtonImage( "INTERFACE\\GIO_SELECTION_ARROWS.STI" ,-1,0,-1,1,-1 );
giMPHMaxPlayersButtonImage[ 1 ]= LoadButtonImage( "INTERFACE\\GIO_SELECTION_ARROWS.STI" ,-1,2,-1,3,-1 );
// left button - decrement difficulty level
giMPHMaxPlayersButton[ 0 ] = QuickCreateButton( giMPHMaxPlayersButtonImage[ 0 ], MPH_MAXPLAYERS_SETTING_X + 39, MPH_MAXPLAYERS_SETTING_Y ,
BUTTON_TOGGLE, MSYS_PRIORITY_HIGHEST - 1,
BtnGenericMouseMoveButtonCallback, (GUI_CALLBACK)BtnMPHMaxPlayersSelectionLeftCallback );
// right button - increment difficulty level
giMPHMaxPlayersButton[ 1 ] = QuickCreateButton( giMPHMaxPlayersButtonImage[ 1 ], MPH_MAXPLAYERS_SETTING_X + 158, MPH_MAXPLAYERS_SETTING_Y ,
BUTTON_TOGGLE, MSYS_PRIORITY_HIGHEST - 1,
BtnGenericMouseMoveButtonCallback, (GUI_CALLBACK)BtnMPHMaxPlayersSelectionRightCallback );
// set user data
MSYS_SetBtnUserData(giMPHMaxPlayersButton[0],0, 0 );
MSYS_SetBtnUserData(giMPHMaxPlayersButton[1],0, 1 );
iMPHMaxPlayers = guiMPHMaxPlayers;
///////////////////////////////////////////////////////////////////////////////////////////////////////
// SQUAD SIZE
giMPHSquadSizeButtonImage[ 0 ]= LoadButtonImage( "INTERFACE\\GIO_SELECTION_ARROWS.STI" ,-1,0,-1,1,-1 );
giMPHSquadSizeButtonImage[ 1 ]= LoadButtonImage( "INTERFACE\\GIO_SELECTION_ARROWS.STI" ,-1,2,-1,3,-1 );
// left button - decrement difficulty level
giMPHSquadSizeButton[ 0 ] = QuickCreateButton( giMPHSquadSizeButtonImage[ 0 ], MPH_SQUADSIZE_SETTING_X + 39, MPH_SQUADSIZE_SETTING_Y ,
BUTTON_TOGGLE, MSYS_PRIORITY_HIGHEST - 1,
BtnGenericMouseMoveButtonCallback, (GUI_CALLBACK)BtnMPHSquadSizeSelectionLeftCallback );
// right button - increment difficulty level
giMPHSquadSizeButton[ 1 ] = QuickCreateButton( giMPHSquadSizeButtonImage[ 1 ], MPH_SQUADSIZE_SETTING_X + 158, MPH_SQUADSIZE_SETTING_Y ,
BUTTON_TOGGLE, MSYS_PRIORITY_HIGHEST - 1,
BtnGenericMouseMoveButtonCallback, (GUI_CALLBACK)BtnMPHSquadSizeSelectionRightCallback );
// set user data
MSYS_SetBtnUserData(giMPHSquadSizeButton[0],0, 0 );
MSYS_SetBtnUserData(giMPHSquadSizeButton[1],0, 1 );
iMPHSquadSize= guiMPHSquadSize;
///////////////////////////////////////////////////////////////////////////////////////////////////////
// STARTING TIME
giMPHStartingTimeButtonImage[ 0 ]= LoadButtonImage( "INTERFACE\\GIO_SELECTION_ARROWS.STI" ,-1,0,-1,1,-1 );
giMPHStartingTimeButtonImage[ 1 ]= LoadButtonImage( "INTERFACE\\GIO_SELECTION_ARROWS.STI" ,-1,2,-1,3,-1 );
// left button - decrement difficulty level
giMPHStartingTimeButton[ 0 ] = QuickCreateButton( giMPHStartingTimeButtonImage[ 0 ], MPH_STARTINGTIME_SETTING_X + 39, MPH_STARTINGTIME_SETTING_Y ,
BUTTON_TOGGLE, MSYS_PRIORITY_HIGHEST - 1,
BtnGenericMouseMoveButtonCallback, (GUI_CALLBACK)BtnMPHStartingTimeSelectionLeftCallback );
// right button - increment difficulty level
giMPHStartingTimeButton[ 1 ] = QuickCreateButton( giMPHStartingTimeButtonImage[ 1 ], MPH_STARTINGTIME_SETTING_X + 158, MPH_STARTINGTIME_SETTING_Y ,
BUTTON_TOGGLE, MSYS_PRIORITY_HIGHEST - 1,
BtnGenericMouseMoveButtonCallback, (GUI_CALLBACK)BtnMPHStartingTimeSelectionRightCallback );
// set user data
MSYS_SetBtnUserData(giMPHStartingTimeButton[0],0, 0 );
MSYS_SetBtnUserData(giMPHStartingTimeButton[1],0, 1 );
iMPHStartingTime = guiMPHStartingTime;
///////////////////////////////////////////////////////////////////////////////////////////////////////
// STARTING CASH
giMPHStartingCashButtonImage[ 0 ]= LoadButtonImage( "INTERFACE\\GIO_SELECTION_ARROWS.STI" ,-1,0,-1,1,-1 );
giMPHStartingCashButtonImage[ 1 ]= LoadButtonImage( "INTERFACE\\GIO_SELECTION_ARROWS.STI" ,-1,2,-1,3,-1 );
// left button - decrement difficulty level
giMPHStartingCashButton[ 0 ] = QuickCreateButton( giMPHStartingCashButtonImage[ 0 ], MPH_STARTINGCASH_SETTING_X + 39, MPH_STARTINGCASH_SETTING_Y ,
BUTTON_TOGGLE, MSYS_PRIORITY_HIGHEST - 1,
BtnGenericMouseMoveButtonCallback, (GUI_CALLBACK)BtnMPHStartingCashSelectionLeftCallback );
// right button - increment difficulty level
giMPHStartingCashButton[ 1 ] = QuickCreateButton( giMPHStartingCashButtonImage[ 1 ], MPH_STARTINGCASH_SETTING_X + 158, MPH_STARTINGCASH_SETTING_Y ,
BUTTON_TOGGLE, MSYS_PRIORITY_HIGHEST - 1,
BtnGenericMouseMoveButtonCallback, (GUI_CALLBACK)BtnMPHStartingCashSelectionRightCallback );
// set user data
MSYS_SetBtnUserData(giMPHStartingCashButton[0],0, 0 );
MSYS_SetBtnUserData(giMPHStartingCashButton[1],0, 1 );
iMPHStartingCash = guiMPHStartingCash;
///////////////////////////////////////////////////////////////////////////////////////////////////////
// WEAPON DAMAGE
giMPHWeaponDamageButtonImage[ 0 ]= LoadButtonImage( "INTERFACE\\GIO_SELECTION_ARROWS.STI" ,-1,0,-1,1,-1 );
giMPHWeaponDamageButtonImage[ 1 ]= LoadButtonImage( "INTERFACE\\GIO_SELECTION_ARROWS.STI" ,-1,2,-1,3,-1 );
// left button - decrement difficulty level
giMPHWeaponDamageButton[ 0 ] = QuickCreateButton( giMPHWeaponDamageButtonImage[ 0 ], MPH_WEAPONDAMAGE_SETTING_X + 39, MPH_WEAPONDAMAGE_SETTING_Y ,
BUTTON_TOGGLE, MSYS_PRIORITY_HIGHEST - 1,
BtnGenericMouseMoveButtonCallback, (GUI_CALLBACK)BtnMPHWeaponDamageSelectionLeftCallback );
// right button - increment difficulty level
giMPHWeaponDamageButton[ 1 ] = QuickCreateButton( giMPHWeaponDamageButtonImage[ 1 ], MPH_WEAPONDAMAGE_SETTING_X + 158, MPH_WEAPONDAMAGE_SETTING_Y ,
BUTTON_TOGGLE, MSYS_PRIORITY_HIGHEST - 1,
BtnGenericMouseMoveButtonCallback, (GUI_CALLBACK)BtnMPHWeaponDamageSelectionRightCallback );
// set user data
MSYS_SetBtnUserData(giMPHWeaponDamageButton[0],0, 0 );
MSYS_SetBtnUserData(giMPHWeaponDamageButton[1],0, 1 );
iMPHWeaponDamage = guiMPHWeaponDamage;
///////////////////////////////////////////////////////////////////////////////////////////////////////
// TIME TURNS
giMPHTimeTurnsButtonImage[ 0 ]= LoadButtonImage( "INTERFACE\\GIO_SELECTION_ARROWS.STI" ,-1,0,-1,1,-1 );
giMPHTimeTurnsButtonImage[ 1 ]= LoadButtonImage( "INTERFACE\\GIO_SELECTION_ARROWS.STI" ,-1,2,-1,3,-1 );
// left button - decrement difficulty level
giMPHTimeTurnsButton[ 0 ] = QuickCreateButton( giMPHTimeTurnsButtonImage[ 0 ], MPH_TIMETURNS_SETTING_X + 39, MPH_TIMETURNS_SETTING_Y ,
BUTTON_TOGGLE, MSYS_PRIORITY_HIGHEST - 1,
BtnGenericMouseMoveButtonCallback, (GUI_CALLBACK)BtnMPHTimeTurnsSelectionLeftCallback );
// right button - increment difficulty level
giMPHTimeTurnsButton[ 1 ] = QuickCreateButton( giMPHTimeTurnsButtonImage[ 1 ], MPH_TIMETURNS_SETTING_X + 158, MPH_TIMETURNS_SETTING_Y ,
BUTTON_TOGGLE, MSYS_PRIORITY_HIGHEST - 1,
BtnGenericMouseMoveButtonCallback, (GUI_CALLBACK)BtnMPHTimeTurnsSelectionRightCallback );
// set user data
MSYS_SetBtnUserData(giMPHTimeTurnsButton[0],0, 0 );
MSYS_SetBtnUserData(giMPHTimeTurnsButton[1],0, 1 );
iMPHTimeTurns = guiMPHTimeTurns;
///////////////////////////////////////////////////////////////////////////////////////////////////////
// DIFFICULTY SETTING
giMPHDifficultyButtonImage[ 0 ]= LoadButtonImage( "INTERFACE\\GIO_SELECTION_ARROWS.STI" ,-1,0,-1,1,-1 );
giMPHDifficultyButtonImage[ 1 ]= LoadButtonImage( "INTERFACE\\GIO_SELECTION_ARROWS.STI" ,-1,2,-1,3,-1 );
// left button - decrement difficulty level
giMPHDifficultyButton[ 0 ] = QuickCreateButton( giMPHDifficultyButtonImage[ 0 ], MPH_DIFFICULTY_SETTING_X + 39, MPH_DIFFICULTY_SETTING_Y ,
BUTTON_TOGGLE, MSYS_PRIORITY_HIGHEST - 1,
BtnGenericMouseMoveButtonCallback, (GUI_CALLBACK)BtnMPHDifficultySelectionLeftCallback );
// right button - increment difficulty level
giMPHDifficultyButton[ 1 ] = QuickCreateButton( giMPHDifficultyButtonImage[ 1 ], MPH_DIFFICULTY_SETTING_X + 158, MPH_DIFFICULTY_SETTING_Y ,
BUTTON_TOGGLE, MSYS_PRIORITY_HIGHEST - 1,
BtnGenericMouseMoveButtonCallback, (GUI_CALLBACK)BtnMPHDifficultySelectionRightCallback );
// set user data
MSYS_SetBtnUserData(giMPHDifficultyButton[0],0, 0 );
MSYS_SetBtnUserData(giMPHDifficultyButton[1],0, 1 );
iMPHDifficulty = guiMPHDifficultLevel - 1;
///////////////////////////////////////////////////////////////////////////////////////////////////////
// GAME TYPE
giMPHGameTypeButtonImage[ 0 ]= LoadButtonImage( "INTERFACE\\GIO_SELECTION_ARROWS.STI" ,-1,0,-1,1,-1 );
giMPHGameTypeButtonImage[ 1 ]= LoadButtonImage( "INTERFACE\\GIO_SELECTION_ARROWS.STI" ,-1,2,-1,3,-1 );
// left button - decrement difficulty level
giMPHGameTypeButton[ 0 ] = QuickCreateButton( giMPHGameTypeButtonImage[ 0 ], MPH_GAMETYPE_SETTING_X + 39, MPH_GAMETYPE_SETTING_Y ,
BUTTON_TOGGLE, MSYS_PRIORITY_HIGHEST - 1,
BtnGenericMouseMoveButtonCallback, (GUI_CALLBACK)BtnMPHGameTypeSelectionLeftCallback );
// right button - increment difficulty level
giMPHGameTypeButton[ 1 ] = QuickCreateButton( giMPHGameTypeButtonImage[ 1 ], MPH_GAMETYPE_SETTING_X + 158, MPH_GAMETYPE_SETTING_Y ,
BUTTON_TOGGLE, MSYS_PRIORITY_HIGHEST - 1,
BtnGenericMouseMoveButtonCallback, (GUI_CALLBACK)BtnMPHGameTypeSelectionRightCallback );
// set user data
MSYS_SetBtnUserData(giMPHGameTypeButton[0],0, 0 );
MSYS_SetBtnUserData(giMPHGameTypeButton[1],0, 1 );
iMPHGameType = guiMPHGameType;
///////////////////////////////////////////////////////////////////////////////////////////////////////
// MAX ENEMIES
guiMPHMaxEnemiesOptionTogglesImage[ MPH_MAXENEMIES_NO ] = LoadButtonImage( "INTERFACE\\GIOCheckButton.sti" ,-1,0,-1,2,-1 );
guiMPHMaxEnemiesOptionToggles[ MPH_MAXENEMIES_NO ] = CreateIconAndTextButton( guiMPHMaxEnemiesOptionTogglesImage[ MPH_MAXENEMIES_NO ], gzMPHScreenText[ MPH_NO ], MPH_TOGGLE_TEXT_FONT,
MPH_TOGGLE_TEXT_COLOR, NO_SHADOW,
MPH_TOGGLE_TEXT_COLOR, NO_SHADOW,
TEXT_CJUSTIFIED,
(MPH_MAXENEMIES_SETTING_X + 74), (MPH_MAXENEMIES_SETTING_Y + 10), BUTTON_TOGGLE, MSYS_PRIORITY_HIGH,
DEFAULT_MOVE_CALLBACK, BtnMPHNoMaxEnemiesCallback);
guiMPHMaxEnemiesOptionTogglesImage[ MPH_MAXENEMIES_YES ] = UseLoadedButtonImage( guiMPHMaxEnemiesOptionTogglesImage[ MPH_MAXENEMIES_NO ], -1,1,-1,3,-1 );
guiMPHMaxEnemiesOptionToggles[ MPH_MAXENEMIES_YES ] = CreateIconAndTextButton( guiMPHMaxEnemiesOptionTogglesImage[ MPH_MAXENEMIES_YES ], gzMPHScreenText[ MPH_YES ], MPH_TOGGLE_TEXT_FONT,
MPH_TOGGLE_TEXT_COLOR, NO_SHADOW,
MPH_TOGGLE_TEXT_COLOR, NO_SHADOW,
TEXT_CJUSTIFIED,
(MPH_MAXENEMIES_SETTING_X), (MPH_MAXENEMIES_SETTING_Y + 10), BUTTON_TOGGLE, MSYS_PRIORITY_HIGH,
DEFAULT_MOVE_CALLBACK, BtnMPHYesMaxEnemiesCallback );
SpecifyButtonSoundScheme( guiMPHMaxEnemiesOptionToggles[ MPH_MAXENEMIES_NO ], BUTTON_SOUND_SCHEME_BIGSWITCH3 );
SpecifyButtonSoundScheme( guiMPHMaxEnemiesOptionToggles[ MPH_MAXENEMIES_YES ], BUTTON_SOUND_SCHEME_BIGSWITCH3 );
MSYS_SetBtnUserData(guiMPHMaxEnemiesOptionToggles[ MPH_MAXENEMIES_NO ],0, 0 );
MSYS_SetBtnUserData(guiMPHMaxEnemiesOptionToggles[ MPH_MAXENEMIES_YES ],0, 1 );
if( guiMPHMaxEnemies )
ButtonList[ guiMPHMaxEnemiesOptionToggles[ MPH_MAXENEMIES_YES ] ]->uiFlags |= BUTTON_CLICKED_ON;
else
ButtonList[ guiMPHMaxEnemiesOptionToggles[ MPH_MAXENEMIES_NO ] ]->uiFlags |= BUTTON_CLICKED_ON;
///////////////////////////////////////////////////////////////////////////////////////////////////////
// HIRE MERC
guiMPHHireMercOptionTogglesImage[ MPH_HIREMERC_RANDOM ] = LoadButtonImage( "INTERFACE\\GIOCheckButton.sti" ,-1,0,-1,2,-1 );
guiMPHHireMercOptionToggles[ MPH_HIREMERC_RANDOM ] = CreateIconAndTextButton( guiMPHHireMercOptionTogglesImage[ MPH_HIREMERC_RANDOM ], gzMPHScreenText[ MPH_HIRE_RANDOM ], MPH_TOGGLE_TEXT_FONT,
MPH_TOGGLE_TEXT_COLOR, NO_SHADOW,
MPH_TOGGLE_TEXT_COLOR, NO_SHADOW,
TEXT_CJUSTIFIED,
(MPH_HIREMERC_SETTING_X + 74), (MPH_HIREMERC_SETTING_Y + 10), BUTTON_TOGGLE, MSYS_PRIORITY_HIGH,
DEFAULT_MOVE_CALLBACK, BtnMPHRandomHireMercCallback);
guiMPHHireMercOptionTogglesImage[ MPH_HIREMERC_NORMAL ] = UseLoadedButtonImage( guiMPHHireMercOptionTogglesImage[ MPH_HIREMERC_RANDOM ], -1,1,-1,3,-1 );
guiMPHHireMercOptionToggles[ MPH_HIREMERC_NORMAL ] = CreateIconAndTextButton( guiMPHHireMercOptionTogglesImage[ MPH_HIREMERC_NORMAL ], gzMPHScreenText[ MPH_HIRE_NORMAL ], MPH_TOGGLE_TEXT_FONT,
MPH_TOGGLE_TEXT_COLOR, NO_SHADOW,
MPH_TOGGLE_TEXT_COLOR, NO_SHADOW,
TEXT_CJUSTIFIED,
(MPH_HIREMERC_SETTING_X), (MPH_HIREMERC_SETTING_Y + 10), BUTTON_TOGGLE, MSYS_PRIORITY_HIGH,
DEFAULT_MOVE_CALLBACK, BtnMPHNormalHireMercCallback );
SpecifyButtonSoundScheme( guiMPHHireMercOptionToggles[ MPH_HIREMERC_RANDOM ], BUTTON_SOUND_SCHEME_BIGSWITCH3 );
SpecifyButtonSoundScheme( guiMPHHireMercOptionToggles[ MPH_HIREMERC_NORMAL ], BUTTON_SOUND_SCHEME_BIGSWITCH3 );
MSYS_SetBtnUserData(guiMPHHireMercOptionToggles[ MPH_HIREMERC_RANDOM ],0, 0 );
MSYS_SetBtnUserData(guiMPHHireMercOptionToggles[ MPH_HIREMERC_NORMAL ],0, 1 );
if( guiMPHHireMerc )
ButtonList[ guiMPHHireMercOptionToggles[ MPH_HIREMERC_RANDOM ] ]->uiFlags |= BUTTON_CLICKED_ON;
else
ButtonList[ guiMPHHireMercOptionToggles[ MPH_HIREMERC_NORMAL ] ]->uiFlags |= BUTTON_CLICKED_ON;
///////////////////////////////////////////////////////////////////////////////////////////////////////
// SAME MERC
guiMPHSameMercOptionTogglesImage[ MPH_SAMEMERC_DISABLE ] = LoadButtonImage( "INTERFACE\\GIOCheckButton.sti" ,-1,0,-1,2,-1 );
guiMPHSameMercOptionToggles[ MPH_SAMEMERC_DISABLE ] = CreateIconAndTextButton( guiMPHSameMercOptionTogglesImage[ MPH_SAMEMERC_DISABLE ], gzMPHScreenText[ MPH_DISABLE ], MPH_TOGGLE_TEXT_FONT,
MPH_TOGGLE_TEXT_COLOR, NO_SHADOW,
MPH_TOGGLE_TEXT_COLOR, NO_SHADOW,
TEXT_CJUSTIFIED,
(MPH_SAMEMERC_SETTING_X + 74), (MPH_SAMEMERC_SETTING_Y + 10), BUTTON_TOGGLE, MSYS_PRIORITY_HIGH,
DEFAULT_MOVE_CALLBACK, BtnMPHDisableSameMercCallback);
guiMPHSameMercOptionTogglesImage[ MPH_SAMEMERC_ALLOW ] = UseLoadedButtonImage( guiMPHSameMercOptionTogglesImage[ MPH_SAMEMERC_DISABLE ], -1,1,-1,3,-1 );
guiMPHSameMercOptionToggles[ MPH_SAMEMERC_ALLOW ] = CreateIconAndTextButton( guiMPHSameMercOptionTogglesImage[ MPH_SAMEMERC_ALLOW ], gzMPHScreenText[ MPH_ALLOW ], MPH_TOGGLE_TEXT_FONT,
MPH_TOGGLE_TEXT_COLOR, NO_SHADOW,
MPH_TOGGLE_TEXT_COLOR, NO_SHADOW,
TEXT_CJUSTIFIED,
(MPH_SAMEMERC_SETTING_X), (MPH_SAMEMERC_SETTING_Y + 10), BUTTON_TOGGLE, MSYS_PRIORITY_HIGH,
DEFAULT_MOVE_CALLBACK, BtnMPHAllowSameMercCallback );
SpecifyButtonSoundScheme( guiMPHSameMercOptionToggles[ MPH_SAMEMERC_DISABLE ], BUTTON_SOUND_SCHEME_BIGSWITCH3 );
SpecifyButtonSoundScheme( guiMPHSameMercOptionToggles[ MPH_SAMEMERC_ALLOW ], BUTTON_SOUND_SCHEME_BIGSWITCH3 );
MSYS_SetBtnUserData(guiMPHSameMercOptionToggles[ MPH_SAMEMERC_DISABLE ],0, 0 );
MSYS_SetBtnUserData(guiMPHSameMercOptionToggles[ MPH_SAMEMERC_ALLOW ],0, 1 );
if( guiMPHSameMerc )
ButtonList[ guiMPHSameMercOptionToggles[ MPH_SAMEMERC_ALLOW ] ]->uiFlags |= BUTTON_CLICKED_ON;
else
ButtonList[ guiMPHSameMercOptionToggles[ MPH_SAMEMERC_DISABLE ] ]->uiFlags |= BUTTON_CLICKED_ON;
///////////////////////////////////////////////////////////////////////////////////////////////////////
// REPORT MERC
guiMPHReportMercOptionTogglesImage[ MPH_REPORTMERC_NO ] = LoadButtonImage( "INTERFACE\\GIOCheckButton.sti" ,-1,0,-1,2,-1 );
guiMPHReportMercOptionToggles[ MPH_REPORTMERC_NO ] = CreateIconAndTextButton( guiMPHReportMercOptionTogglesImage[ MPH_REPORTMERC_NO ], gzMPHScreenText[ MPH_NO ], MPH_TOGGLE_TEXT_FONT,
MPH_TOGGLE_TEXT_COLOR, NO_SHADOW,
MPH_TOGGLE_TEXT_COLOR, NO_SHADOW,
TEXT_CJUSTIFIED,
(MPH_REPORTMERC_SETTING_X + 74), (MPH_REPORTMERC_SETTING_Y + 10), BUTTON_TOGGLE, MSYS_PRIORITY_HIGH,
DEFAULT_MOVE_CALLBACK, BtnMPHNoReportMercCallback);
guiMPHReportMercOptionTogglesImage[ MPH_REPORTMERC_YES ] = UseLoadedButtonImage( guiMPHReportMercOptionTogglesImage[ MPH_REPORTMERC_NO ], -1,1,-1,3,-1 );
guiMPHReportMercOptionToggles[ MPH_REPORTMERC_YES ] = CreateIconAndTextButton( guiMPHReportMercOptionTogglesImage[ MPH_REPORTMERC_YES ], gzMPHScreenText[ MPH_YES ], MPH_TOGGLE_TEXT_FONT,
MPH_TOGGLE_TEXT_COLOR, NO_SHADOW,
MPH_TOGGLE_TEXT_COLOR, NO_SHADOW,
TEXT_CJUSTIFIED,
(MPH_REPORTMERC_SETTING_X), (MPH_REPORTMERC_SETTING_Y + 10), BUTTON_TOGGLE, MSYS_PRIORITY_HIGH,
DEFAULT_MOVE_CALLBACK, BtnMPHYesReportMercCallback );
SpecifyButtonSoundScheme( guiMPHReportMercOptionToggles[ MPH_REPORTMERC_NO ], BUTTON_SOUND_SCHEME_BIGSWITCH3 );
SpecifyButtonSoundScheme( guiMPHReportMercOptionToggles[ MPH_REPORTMERC_YES ], BUTTON_SOUND_SCHEME_BIGSWITCH3 );
MSYS_SetBtnUserData(guiMPHReportMercOptionToggles[ MPH_REPORTMERC_NO ],0, 0 );
MSYS_SetBtnUserData(guiMPHReportMercOptionToggles[ MPH_REPORTMERC_YES ],0, 1 );
if( guiMPHReportMerc )
ButtonList[ guiMPHReportMercOptionToggles[ MPH_REPORTMERC_YES ] ]->uiFlags |= BUTTON_CLICKED_ON;
else
ButtonList[ guiMPHReportMercOptionToggles[ MPH_REPORTMERC_NO ] ]->uiFlags |= BUTTON_CLICKED_ON;
///////////////////////////////////////////////////////////////////////////////////////////////////////
// BOBBY RAY
guiMPHBobbyRayOptionTogglesImage[ MPH_BOBBYRAY_DISABLE ] = LoadButtonImage( "INTERFACE\\GIOCheckButton.sti" ,-1,0,-1,2,-1 );
guiMPHBobbyRayOptionToggles[ MPH_BOBBYRAY_DISABLE ] = CreateIconAndTextButton( guiMPHBobbyRayOptionTogglesImage[ MPH_BOBBYRAY_DISABLE ], gzMPHScreenText[ MPH_DISABLE ], MPH_TOGGLE_TEXT_FONT,
MPH_TOGGLE_TEXT_COLOR, NO_SHADOW,
MPH_TOGGLE_TEXT_COLOR, NO_SHADOW,
TEXT_CJUSTIFIED,
(MPH_BOBBYRAY_SETTING_X + 74), (MPH_BOBBYRAY_SETTING_Y + 10), BUTTON_TOGGLE, MSYS_PRIORITY_HIGH,
DEFAULT_MOVE_CALLBACK, BtnMPHDisableBobbyRayCallback);
guiMPHBobbyRayOptionTogglesImage[ MPH_BOBBYRAY_ALLOW ] = UseLoadedButtonImage( guiMPHBobbyRayOptionTogglesImage[ MPH_BOBBYRAY_DISABLE ], -1,1,-1,3,-1 );
guiMPHBobbyRayOptionToggles[ MPH_BOBBYRAY_ALLOW ] = CreateIconAndTextButton( guiMPHBobbyRayOptionTogglesImage[ MPH_BOBBYRAY_ALLOW ], gzMPHScreenText[ MPH_ALLOW ], MPH_TOGGLE_TEXT_FONT,
MPH_TOGGLE_TEXT_COLOR, NO_SHADOW,
MPH_TOGGLE_TEXT_COLOR, NO_SHADOW,
TEXT_CJUSTIFIED,
(MPH_BOBBYRAY_SETTING_X), (MPH_BOBBYRAY_SETTING_Y + 10), BUTTON_TOGGLE, MSYS_PRIORITY_HIGH,
DEFAULT_MOVE_CALLBACK, BtnMPHAllowBobbyRayCallback );
SpecifyButtonSoundScheme( guiMPHBobbyRayOptionToggles[ MPH_BOBBYRAY_DISABLE ], BUTTON_SOUND_SCHEME_BIGSWITCH3 );
SpecifyButtonSoundScheme( guiMPHBobbyRayOptionToggles[ MPH_BOBBYRAY_ALLOW ], BUTTON_SOUND_SCHEME_BIGSWITCH3 );
MSYS_SetBtnUserData(guiMPHBobbyRayOptionToggles[ MPH_BOBBYRAY_DISABLE ],0, 0 );
MSYS_SetBtnUserData(guiMPHBobbyRayOptionToggles[ MPH_BOBBYRAY_ALLOW ],0, 1 );
if( guiMPHBobbyRay )
ButtonList[ guiMPHBobbyRayOptionToggles[ MPH_BOBBYRAY_DISABLE ] ]->uiFlags |= BUTTON_CLICKED_ON;
else
ButtonList[ guiMPHBobbyRayOptionToggles[ MPH_BOBBYRAY_ALLOW ] ]->uiFlags |= BUTTON_CLICKED_ON;
///////////////////////////////////////////////////////////////////////////////////////////////////////
// SECTOR EDGE
guiMPHSectorEdgeOptionTogglesImage[ MPH_SECTOREDGE_RANDOM ] = LoadButtonImage( "INTERFACE\\GIOCheckButton.sti" ,-1,0,-1,2,-1 );
guiMPHSectorEdgeOptionToggles[ MPH_SECTOREDGE_RANDOM ] = CreateIconAndTextButton( guiMPHSectorEdgeOptionTogglesImage[ MPH_SECTOREDGE_RANDOM ], gzMPHScreenText[ MPH_EDGE_RANDOM ], MPH_TOGGLE_TEXT_FONT,
MPH_TOGGLE_TEXT_COLOR, NO_SHADOW,
MPH_TOGGLE_TEXT_COLOR, NO_SHADOW,
TEXT_CJUSTIFIED,
(MPH_SECTOREDGE_SETTING_X + 74), (MPH_SECTOREDGE_SETTING_Y + 10), BUTTON_TOGGLE, MSYS_PRIORITY_HIGH,
DEFAULT_MOVE_CALLBACK, BtnMPHRandomSectorEdgeCallback);
guiMPHSectorEdgeOptionTogglesImage[ MPH_SECTOREDGE_SELECTABLE ] = UseLoadedButtonImage( guiMPHSectorEdgeOptionTogglesImage[ MPH_SECTOREDGE_RANDOM ], -1,1,-1,3,-1 );
guiMPHSectorEdgeOptionToggles[ MPH_SECTOREDGE_SELECTABLE ] = CreateIconAndTextButton( guiMPHSectorEdgeOptionTogglesImage[ MPH_SECTOREDGE_SELECTABLE ], gzMPHScreenText[ MPH_EDGE_SELECTABLE ], MPH_TOGGLE_TEXT_FONT,
MPH_TOGGLE_TEXT_COLOR, NO_SHADOW,
MPH_TOGGLE_TEXT_COLOR, NO_SHADOW,
TEXT_CJUSTIFIED,
(MPH_SECTOREDGE_SETTING_X), (MPH_SECTOREDGE_SETTING_Y + 10), BUTTON_TOGGLE, MSYS_PRIORITY_HIGH,
DEFAULT_MOVE_CALLBACK, BtnMPHSelectableSectorEdgeCallback );
SpecifyButtonSoundScheme( guiMPHSectorEdgeOptionToggles[ MPH_SECTOREDGE_RANDOM ], BUTTON_SOUND_SCHEME_BIGSWITCH3 );
SpecifyButtonSoundScheme( guiMPHSectorEdgeOptionToggles[ MPH_SECTOREDGE_SELECTABLE ], BUTTON_SOUND_SCHEME_BIGSWITCH3 );
MSYS_SetBtnUserData(guiMPHSectorEdgeOptionToggles[ MPH_SECTOREDGE_RANDOM ],0, 0 );
MSYS_SetBtnUserData(guiMPHSectorEdgeOptionToggles[ MPH_SECTOREDGE_SELECTABLE ],0, 1 );
if( guiMPHSectorEdge )
ButtonList[ guiMPHSectorEdgeOptionToggles[ MPH_SECTOREDGE_RANDOM ] ]->uiFlags |= BUTTON_CLICKED_ON;
else
ButtonList[ guiMPHSectorEdgeOptionToggles[ MPH_SECTOREDGE_SELECTABLE ] ]->uiFlags |= BUTTON_CLICKED_ON;
///////////////////////////////////////////////////////////////////////////////////////////////////////
// CIVS
guiMPHCivsOptionTogglesImage[ MPH_CIVS_NO ] = LoadButtonImage( "INTERFACE\\GIOCheckButton.sti" ,-1,0,-1,2,-1 );
guiMPHCivsOptionToggles[ MPH_CIVS_NO ] = CreateIconAndTextButton( guiMPHCivsOptionTogglesImage[ MPH_CIVS_NO ], gzMPHScreenText[ MPH_NO ], MPH_TOGGLE_TEXT_FONT,
MPH_TOGGLE_TEXT_COLOR, NO_SHADOW,
MPH_TOGGLE_TEXT_COLOR, NO_SHADOW,
TEXT_CJUSTIFIED,
(MPH_CIVS_SETTING_X + 74), (MPH_CIVS_SETTING_Y + 10), BUTTON_TOGGLE, MSYS_PRIORITY_HIGH,
DEFAULT_MOVE_CALLBACK, BtnMPHNoCivsCallback);
guiMPHCivsOptionTogglesImage[ MPH_CIVS_YES ] = UseLoadedButtonImage( guiMPHCivsOptionTogglesImage[ MPH_CIVS_NO ], -1,1,-1,3,-1 );
guiMPHCivsOptionToggles[ MPH_CIVS_YES ] = CreateIconAndTextButton( guiMPHCivsOptionTogglesImage[ MPH_CIVS_YES ], gzMPHScreenText[ MPH_YES ], MPH_TOGGLE_TEXT_FONT,
MPH_TOGGLE_TEXT_COLOR, NO_SHADOW,
MPH_TOGGLE_TEXT_COLOR, NO_SHADOW,
TEXT_CJUSTIFIED,
(MPH_CIVS_SETTING_X), (MPH_CIVS_SETTING_Y + 10), BUTTON_TOGGLE, MSYS_PRIORITY_HIGH,
DEFAULT_MOVE_CALLBACK, BtnMPHYesCivsCallback );
SpecifyButtonSoundScheme( guiMPHCivsOptionToggles[ MPH_CIVS_NO ], BUTTON_SOUND_SCHEME_BIGSWITCH3 );
SpecifyButtonSoundScheme( guiMPHCivsOptionToggles[ MPH_CIVS_YES ], BUTTON_SOUND_SCHEME_BIGSWITCH3 );
MSYS_SetBtnUserData(guiMPHCivsOptionToggles[ MPH_CIVS_NO ],0, 0 );
MSYS_SetBtnUserData(guiMPHCivsOptionToggles[ MPH_CIVS_YES ],0, 1 );
if( guiMPHCivs )
ButtonList[ guiMPHCivsOptionToggles[ MPH_CIVS_YES ] ]->uiFlags |= BUTTON_CLICKED_ON;
else
ButtonList[ guiMPHCivsOptionToggles[ MPH_CIVS_NO ] ]->uiFlags |= BUTTON_CLICKED_ON;
// -------------------------------------------------
///////////////////////////////////////////////////////////////////////////////////////////////////////
// INVENTORY / ATTACHMENT
if (IsNIVModeValid(true))
{
giMPHInventoryButtonImage[ 0 ]= UseLoadedButtonImage( giMPHDifficultyButtonImage[ 0 ],-1,0,-1,1,-1 );
giMPHInventoryButtonImage[ 1 ]= UseLoadedButtonImage( giMPHDifficultyButtonImage[ 1 ],-1,2,-1,3,-1 );
// left button - decrement difficulty level
giMPHInventoryButton[ 0 ] = QuickCreateButton( giMPHInventoryButtonImage[ 0 ], MPH_INVENTORY_SETTING_X + 39, MPH_INVENTORY_SETTING_Y ,
BUTTON_TOGGLE, MSYS_PRIORITY_HIGHEST - 1,
BtnGenericMouseMoveButtonCallback, (GUI_CALLBACK)BtnMPHInventorySelectionLeftCallback );
// right button - increment difficulty level
giMPHInventoryButton[ 1 ] = QuickCreateButton( giMPHInventoryButtonImage[ 1 ], MPH_INVENTORY_SETTING_X + 158, MPH_INVENTORY_SETTING_Y ,
BUTTON_TOGGLE, MSYS_PRIORITY_HIGHEST - 1,
BtnGenericMouseMoveButtonCallback, (GUI_CALLBACK)BtnMPHInventorySelectionRightCallback );
// set user data
MSYS_SetBtnUserData(giMPHInventoryButton[0],0, 0 );
MSYS_SetBtnUserData(giMPHInventoryButton[1],0, 1 );
// set initial value
switch ( guiMPHInventory )
{
case INVENTORY_OLD:
iMPHInventory = MPH_INV_OLD;
break;
case INVENTORY_NEW:
iMPHInventory = MPH_INV_NEW;
break;
case 2: // New/New
iMPHInventory = 2;
break;
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////
// OLD/NEW TARITS SETTING
guiMPHTraitsOptionTogglesImage[ MPH_TRAITS_OLD ] = LoadButtonImage( "INTERFACE\\GIOCheckButton.sti" ,-1,0,-1,2,-1 );
guiMPHTraitsOptionToggles[ MPH_TRAITS_OLD ] = CreateIconAndTextButton( guiMPHTraitsOptionTogglesImage[ MPH_TRAITS_OLD ], gzGIOScreenText[ GIO_TRAITS_OLD_TEXT ], MPH_TOGGLE_TEXT_FONT,
MPH_TOGGLE_TEXT_COLOR, NO_SHADOW,
MPH_TOGGLE_TEXT_COLOR, NO_SHADOW,
TEXT_CJUSTIFIED,
(MPH_TRAITS_SETTING_X + 74), (MPH_TRAITS_SETTING_Y + 10), BUTTON_TOGGLE, MSYS_PRIORITY_HIGH,
DEFAULT_MOVE_CALLBACK, BtnMPHOldTraitsCallback);
guiMPHTraitsOptionTogglesImage[ MPH_TRAITS_NEW ] = UseLoadedButtonImage( guiMPHTraitsOptionTogglesImage[ MPH_TRAITS_OLD ], -1,1,-1,3,-1 );
guiMPHTraitsOptionToggles[ MPH_TRAITS_NEW ] = CreateIconAndTextButton( guiMPHTraitsOptionTogglesImage[ MPH_TRAITS_NEW ], gzGIOScreenText[ GIO_TRAITS_NEW_TEXT ], MPH_TOGGLE_TEXT_FONT,
MPH_TOGGLE_TEXT_COLOR, NO_SHADOW,
MPH_TOGGLE_TEXT_COLOR, NO_SHADOW,
TEXT_CJUSTIFIED,
(MPH_TRAITS_SETTING_X), (MPH_TRAITS_SETTING_Y + 10), BUTTON_TOGGLE, MSYS_PRIORITY_HIGH,
DEFAULT_MOVE_CALLBACK, BtnMPHNewTraitsCallback );
SpecifyButtonSoundScheme( guiMPHTraitsOptionToggles[ MPH_TRAITS_OLD ], BUTTON_SOUND_SCHEME_BIGSWITCH3 );
SpecifyButtonSoundScheme( guiMPHTraitsOptionToggles[ MPH_TRAITS_NEW ], BUTTON_SOUND_SCHEME_BIGSWITCH3 );
MSYS_SetBtnUserData(guiMPHTraitsOptionToggles[ MPH_TRAITS_OLD ],0, 0 );
MSYS_SetBtnUserData(guiMPHTraitsOptionToggles[ MPH_TRAITS_NEW ],0, 1 );
if( guiMPHNewTraits )
ButtonList[ guiMPHTraitsOptionToggles[ MPH_TRAITS_NEW ] ]->uiFlags |= BUTTON_CLICKED_ON;
else
ButtonList[ guiMPHTraitsOptionToggles[ MPH_TRAITS_OLD ] ]->uiFlags |= BUTTON_CLICKED_ON;
///////////////////////////////////////////////////////////////////////////////////////////////////////
// SYNC GAME DIR
guiMPHSyncOptionTogglesImage[ MPH_SYNC_NO ] = LoadButtonImage( "INTERFACE\\GIOCheckButton.sti" ,-1,0,-1,2,-1 );
guiMPHSyncOptionToggles[ MPH_SYNC_NO ] = CreateIconAndTextButton( guiMPHSyncOptionTogglesImage[ MPH_SYNC_NO ], gzMPHScreenText[ MPH_NO ], MPH_TOGGLE_TEXT_FONT,
MPH_TOGGLE_TEXT_COLOR, NO_SHADOW,
MPH_TOGGLE_TEXT_COLOR, NO_SHADOW,
TEXT_CJUSTIFIED,
(MPH_SYNC_SETTING_X + 74), (MPH_SYNC_SETTING_Y + 10), BUTTON_TOGGLE, MSYS_PRIORITY_HIGH,
DEFAULT_MOVE_CALLBACK, BtnMPHNoSyncCallback);
guiMPHSyncOptionTogglesImage[ MPH_SYNC_YES ] = UseLoadedButtonImage( guiMPHSyncOptionTogglesImage[ MPH_SYNC_NO ], -1,1,-1,3,-1 );
guiMPHSyncOptionToggles[ MPH_SYNC_YES ] = CreateIconAndTextButton( guiMPHSyncOptionTogglesImage[ MPH_SYNC_YES ], gzMPHScreenText[ MPH_YES ], MPH_TOGGLE_TEXT_FONT,
MPH_TOGGLE_TEXT_COLOR, NO_SHADOW,
MPH_TOGGLE_TEXT_COLOR, NO_SHADOW,
TEXT_CJUSTIFIED,
(MPH_SYNC_SETTING_X), (MPH_SYNC_SETTING_Y + 10), BUTTON_TOGGLE, MSYS_PRIORITY_HIGH,
DEFAULT_MOVE_CALLBACK, BtnMPHYesSyncCallback );
SpecifyButtonSoundScheme( guiMPHSyncOptionToggles[ MPH_SYNC_NO ], BUTTON_SOUND_SCHEME_BIGSWITCH3 );
SpecifyButtonSoundScheme( guiMPHSyncOptionToggles[ MPH_SYNC_YES ], BUTTON_SOUND_SCHEME_BIGSWITCH3 );
MSYS_SetBtnUserData(guiMPHSyncOptionToggles[ MPH_SYNC_NO ],0, 0 );
MSYS_SetBtnUserData(guiMPHSyncOptionToggles[ MPH_SYNC_YES ],0, 1 );
if( guiMPHSendFiles )
ButtonList[ guiMPHSyncOptionToggles[ MPH_SYNC_YES ] ]->uiFlags |= BUTTON_CLICKED_ON;
else
ButtonList[ guiMPHSyncOptionToggles[ MPH_SYNC_NO ] ]->uiFlags |= BUTTON_CLICKED_ON;
//Reset the exit screen - screen the main game loop will call next iteration
gubMPHExitScreen = MP_HOST_SCREEN;
//REnder the screen once so we can blt ot to ths save buffer
RenderMPHScreen();
BlitBufferToBuffer(guiRENDERBUFFER, guiSAVEBUFFER, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT );
gfMPHButtonsAllocated = TRUE;
return( TRUE );
}
BOOLEAN ExitMPHScreen()
{
UINT16 cnt;
if( !gfMPHButtonsAllocated )
return( TRUE );
//Delete the main options screen background
DeleteVideoObjectFromIndex( guiMPHMainBackGroundImage );
DeleteVideoObjectFromIndex( guiMPHSMALLFRAME );
RemoveButton( guiMPHStartButton );
RemoveButton( guiMPHCancelButton );
UnloadButtonImage( giMPHCancelBtnImage );
UnloadButtonImage( giMPHStartBtnImage );
// --------------
// MaxPlayers
RemoveButton( giMPHMaxPlayersButton[0] );
RemoveButton( giMPHMaxPlayersButton[1] );
UnloadButtonImage( giMPHMaxPlayersButtonImage[0] );
UnloadButtonImage( giMPHMaxPlayersButtonImage[1] );
// ----------
// ----------
// SquadSize
RemoveButton( giMPHSquadSizeButton[0] );
RemoveButton( giMPHSquadSizeButton[1] );
UnloadButtonImage( giMPHSquadSizeButtonImage[0] );
UnloadButtonImage( giMPHSquadSizeButtonImage[1] );
// ---------------
// --------------
// StartingTime
RemoveButton( giMPHStartingTimeButton[0] );
RemoveButton( giMPHStartingTimeButton[1] );
UnloadButtonImage( giMPHStartingTimeButtonImage[0] );
UnloadButtonImage( giMPHStartingTimeButtonImage[1] );
// ----------
// --------------
// StartingCash
RemoveButton( giMPHStartingCashButton[0] );
RemoveButton( giMPHStartingCashButton[1] );
UnloadButtonImage( giMPHStartingCashButtonImage[0] );
UnloadButtonImage( giMPHStartingCashButtonImage[1] );
// ----------
// --------------
// WeaponDamage
RemoveButton( giMPHWeaponDamageButton[0] );
RemoveButton( giMPHWeaponDamageButton[1] );
UnloadButtonImage( giMPHWeaponDamageButtonImage[0] );
UnloadButtonImage( giMPHWeaponDamageButtonImage[1] );
// ----------
// --------------
// TimeTurns
RemoveButton( giMPHTimeTurnsButton[0] );
RemoveButton( giMPHTimeTurnsButton[1] );
UnloadButtonImage( giMPHTimeTurnsButtonImage[0] );
UnloadButtonImage( giMPHTimeTurnsButtonImage[1] );
// ----------
// --------------
// Difficulty
RemoveButton( giMPHDifficultyButton[0] );
RemoveButton( giMPHDifficultyButton[1] );
UnloadButtonImage( giMPHDifficultyButtonImage[0] );
UnloadButtonImage( giMPHDifficultyButtonImage[1] );
// --------------
// --------------
// GameType
RemoveButton( giMPHGameTypeButton[0] );
RemoveButton( giMPHGameTypeButton[1] );
UnloadButtonImage( giMPHGameTypeButtonImage[0] );
UnloadButtonImage( giMPHGameTypeButtonImage[1] );
// --------------
// ---------------
// MaxEnemies
for (cnt = 0; cnt < MPH_NUM_MAXENEMIES_OPTIONS; cnt++)
{
RemoveButton(guiMPHMaxEnemiesOptionToggles[cnt] );
UnloadButtonImage(guiMPHMaxEnemiesOptionTogglesImage[cnt] );
}
// ------------------
// -----------
// HireMerc
for (cnt = 0; cnt < MPH_NUM_HIREMERC_OPTIONS; cnt++)
{
RemoveButton(guiMPHHireMercOptionToggles[cnt] );
UnloadButtonImage(guiMPHHireMercOptionTogglesImage[cnt] );
}
// ---------
// -----------
// SameMerc
for (cnt = 0; cnt < MPH_NUM_SAMEMERC_OPTIONS; cnt++)
{
RemoveButton(guiMPHSameMercOptionToggles[cnt] );
UnloadButtonImage(guiMPHSameMercOptionTogglesImage[cnt] );
}
// ---------
// -----------
// ReportMerc
for (cnt = 0; cnt < MPH_NUM_REPORTMERC_OPTIONS; cnt++)
{
RemoveButton(guiMPHReportMercOptionToggles[cnt] );
UnloadButtonImage(guiMPHReportMercOptionTogglesImage[cnt] );
}
// ------------------
// -------------------
// BobbyRay
for (cnt = 0; cnt < MPH_NUM_BOBBYRAY_OPTIONS; cnt++)
{
RemoveButton(guiMPHBobbyRayOptionToggles[cnt] );
UnloadButtonImage(guiMPHBobbyRayOptionTogglesImage[cnt] );
}
// ---------
// ------------
// SectorEdge
for (cnt = 0; cnt < MPH_NUM_SECTOREDGE_OPTIONS; cnt++)
{
RemoveButton(guiMPHSectorEdgeOptionToggles[cnt] );
UnloadButtonImage(guiMPHSectorEdgeOptionTogglesImage[cnt] );
}
// ---------
// ----------
// Civs
for (cnt = 0; cnt < MPH_NUM_CIVS_OPTIONS; cnt++)
{
RemoveButton(guiMPHCivsOptionToggles[cnt] );
UnloadButtonImage(guiMPHCivsOptionTogglesImage[cnt] );
}
// ------------------
// -----------------
// Inventory / Attachments
if (IsNIVModeValid(true))
{
RemoveButton( giMPHInventoryButton[0] );
RemoveButton( giMPHInventoryButton[1] );
UnloadButtonImage( giMPHInventoryButtonImage[0] );
UnloadButtonImage( giMPHInventoryButtonImage[1] );
}
// ------------
// ------------------
// Sync
for (cnt = 0; cnt < MPH_NUM_SYNC_OPTIONS; cnt++)
{
RemoveButton(guiMPHSyncOptionToggles[cnt] );
UnloadButtonImage(guiMPHSyncOptionTogglesImage[cnt] );
}
// ------------------
// ------------------
// Traits
for (cnt = 0; cnt < MPH_NUM_TRAITS_OPTIONS; cnt++)
{
RemoveButton(guiMPHTraitsOptionToggles[cnt] );
UnloadButtonImage(guiMPHTraitsOptionTogglesImage[cnt] );
}
// ------------------
// exit text input mode in this screen and clean up text boxes
KillAllTextInputModes();
SetTextInputCursor( CURSOR_IBEAM );
gfMPHButtonsAllocated = FALSE;
gfMPHScreenExit = FALSE;
gfMPHScreenEntry = TRUE;
return( TRUE );
}
void HandleMPHScreen()
{
if( gubMPHScreenHandler != MPH_NOTHING )
{
switch( gubMPHScreenHandler )
{
case MPH_CANCEL:
gubMPHExitScreen = MAINMENU_SCREEN;
gfMPHScreenExit = TRUE;
break;
case MPH_START:
{
//if we are already fading out, get out of here
if( gFadeOutDoneCallback != DoneFadeOutForExitMPHScreen )
{
//Disable the ok button
DisableButton( guiMPHStartButton );
gFadeOutDoneCallback = DoneFadeOutForExitMPHScreen;
FadeOutNextFrame( );
}
break;
}
}
gubMPHScreenHandler = MPH_NOTHING;
}
if( gfReRenderMPHScreen )
{
RenderMPHScreen();
gfReRenderMPHScreen = FALSE;
}
}
BOOLEAN RenderMPHScreen()
{
HVOBJECT hPixHandle;
// --------------------------
// Difficulty
RestoreExternBackgroundRect( MPH_DIFFICULTY_SETTING_X+MPH_OFFSET_TO_TEXT + 20, MPH_DIFFICULTY_SETTING_Y-3, 120, 20 );
// --------------------------
// --------------------------
// MaxPlayers
RestoreExternBackgroundRect( MPH_MAXPLAYERS_SETTING_X+MPH_OFFSET_TO_TEXT + 20, MPH_MAXPLAYERS_SETTING_Y-3, 120, 20 );
// --------------------------
// --------------------------
// StartingTime
RestoreExternBackgroundRect( MPH_STARTINGTIME_SETTING_X+MPH_OFFSET_TO_TEXT + 20, MPH_STARTINGTIME_SETTING_Y-3, 120, 20 );
// --------------------------
// --------------------------
// StartingCash
RestoreExternBackgroundRect( MPH_STARTINGCASH_SETTING_X+MPH_OFFSET_TO_TEXT + 20, MPH_STARTINGCASH_SETTING_Y-3, 120, 20 );
// --------------------------
// --------------------------
// WeaponDamage
RestoreExternBackgroundRect( MPH_WEAPONDAMAGE_SETTING_X+MPH_OFFSET_TO_TEXT + 20, MPH_WEAPONDAMAGE_SETTING_Y-3, 120, 20 );
// --------------------------
// --------------------------
// TimeTurns
RestoreExternBackgroundRect( MPH_TIMETURNS_SETTING_X+MPH_OFFSET_TO_TEXT + 20, MPH_TIMETURNS_SETTING_Y-3, 120, 20 );
// --------------------------
// --------------------------
// SquadSize
RestoreExternBackgroundRect( MPH_SQUADSIZE_SETTING_X+MPH_OFFSET_TO_TEXT + 20, MPH_SQUADSIZE_SETTING_Y-3, 120, 20 );
// --------------------------
// --------------------------
// GameType
RestoreExternBackgroundRect( MPH_GAMETYPE_SETTING_X+MPH_OFFSET_TO_TEXT + 20, MPH_GAMETYPE_SETTING_Y-3, 120, 20 );
// --------------------------
// --------------------------
// Inventory
RestoreExternBackgroundRect( MPH_INVENTORY_SETTING_X+MPH_OFFSET_TO_TEXT + 20, MPH_INVENTORY_SETTING_Y-3, 120, 20 );
// --------------------------
//Get the main background screen graphic and blt it
GetVideoObject(&hPixHandle, guiMPHMainBackGroundImage );
BltVideoObject(FRAME_BUFFER, hPixHandle, 0,(SCREEN_WIDTH - xResSize)/2,(SCREEN_HEIGHT - yResSize)/2, VO_BLT_SRCTRANSPARENCY,NULL);
//Shade the background
ShadowVideoSurfaceRect( FRAME_BUFFER, iScreenWidthOffset, iScreenHeightOffset, iScreenWidthOffset + 640, iScreenHeightOffset + 480 );
//Display the title
DrawTextToScreen( gzMPHScreenText[ MPH_TITLE_TEXT ], MPH_MAIN_TITLE_X, MPH_MAIN_TITLE_Y, MPH_MAIN_TITLE_WIDTH, MPH_TITLE_FONT, MPH_TITLE_COLOR, FONT_MCOLOR_BLACK, FALSE, CENTER_JUSTIFIED );
// ---------
// MaxPlayers
RenderMPHSmallSelectionFrame( (MPH_MAXPLAYERS_SETTING_X + 36), (MPH_MAXPLAYERS_SETTING_Y - 3) );
DisplayWrappedString( (UINT16)(MPH_MAXPLAYERS_SETTING_X+MPH_OFFSET_TO_TEXT + 1), (UINT16)(MPH_MAXPLAYERS_SETTING_Y-MPH_GAP_BN_SETTINGS + MPH_TITLE_DISTANCE - 12), MPH_MAXPLAYERS_SETTING_WIDTH, 2, MPH_TOGGLE_TEXT_FONT, MPH_TOGGLE_TEXT_COLOR, gzMPHScreenText[ MPH_NUMPLAYERS_TEXT ], FONT_MCOLOR_BLACK, FALSE, CENTER_JUSTIFIED );
DisplayWrappedString( (UINT16)(MPH_MAXPLAYERS_SETTING_X+MPH_OFFSET_TO_TEXT + 1), (MPH_MAXPLAYERS_SETTING_Y+6), MPH_MAXPLAYERS_SETTING_WIDTH, 2, MPH_TOGGLE_TEXT_FONT, MPH_TOGGLE_TEXT_COLOR, gzMPHScreenText[ (MPH_1 - MPH_MAXPLAYERS_2 + 1) + iMPHMaxPlayers ], FONT_MCOLOR_BLACK, FALSE, CENTER_JUSTIFIED );
// -----------------
// -----------------
// SquadSize
RenderMPHSmallSelectionFrame( (MPH_SQUADSIZE_SETTING_X + 36), (MPH_SQUADSIZE_SETTING_Y - 3) );
DisplayWrappedString( (UINT16)(MPH_SQUADSIZE_SETTING_X+MPH_OFFSET_TO_TEXT + 1), (UINT16)(MPH_SQUADSIZE_SETTING_Y-MPH_GAP_BN_SETTINGS + MPH_TITLE_DISTANCE - 12), MPH_SQUADSIZE_SETTING_WIDTH, 2, MPH_TOGGLE_TEXT_FONT, MPH_TOGGLE_TEXT_COLOR, gzMPHScreenText[ MPH_SQUADSIZE_TEXT ], FONT_MCOLOR_BLACK, FALSE, CENTER_JUSTIFIED );
DisplayWrappedString( (UINT16)(MPH_SQUADSIZE_SETTING_X+MPH_OFFSET_TO_TEXT + 1), (MPH_SQUADSIZE_SETTING_Y+6), MPH_SQUADSIZE_SETTING_WIDTH, 2, MPH_TOGGLE_TEXT_FONT, MPH_TOGGLE_TEXT_COLOR, gzMPHScreenText[ (MPH_1 - MPH_SQUADSIZE_1) + iMPHSquadSize ], FONT_MCOLOR_BLACK, FALSE, CENTER_JUSTIFIED );
// -----------------
// ----------
// StartingTime
RenderMPHSmallSelectionFrame( (MPH_STARTINGTIME_SETTING_X + 36), (MPH_STARTINGTIME_SETTING_Y - 3) );
DisplayWrappedString( (UINT16)(MPH_STARTINGTIME_SETTING_X+MPH_OFFSET_TO_TEXT + 1), (UINT16)(MPH_STARTINGTIME_SETTING_Y-MPH_GAP_BN_SETTINGS + MPH_TITLE_DISTANCE - 12), MPH_STARTINGTIME_SETTING_WIDTH, 2, MPH_TOGGLE_TEXT_FONT, MPH_TOGGLE_TEXT_COLOR, gzMPHScreenText[ MPH_TIME_TEXT ], FONT_MCOLOR_BLACK, FALSE, CENTER_JUSTIFIED );
DisplayWrappedString( (UINT16)(MPH_STARTINGTIME_SETTING_X+MPH_OFFSET_TO_TEXT + 1), (MPH_STARTINGTIME_SETTING_Y+6), MPH_STARTINGTIME_SETTING_WIDTH, 2, MPH_TOGGLE_TEXT_FONT, MPH_TOGGLE_TEXT_COLOR, gzMPHScreenText[ MPH_MORNING + iMPHStartingTime ], FONT_MCOLOR_BLACK, FALSE, CENTER_JUSTIFIED );
// -----------------
// ------------------
// StartingCash
RenderMPHSmallSelectionFrame( (MPH_STARTINGCASH_SETTING_X + 36), (MPH_STARTINGCASH_SETTING_Y - 3) );
DisplayWrappedString( (UINT16)(MPH_STARTINGCASH_SETTING_X+MPH_OFFSET_TO_TEXT + 1), (UINT16)(MPH_STARTINGCASH_SETTING_Y-MPH_GAP_BN_SETTINGS + MPH_TITLE_DISTANCE - 12), MPH_STARTINGCASH_SETTING_WIDTH, 2, MPH_TOGGLE_TEXT_FONT, MPH_TOGGLE_TEXT_COLOR, gzMPHScreenText[ MPH_BALANCE_TEXT ], FONT_MCOLOR_BLACK, FALSE, CENTER_JUSTIFIED );
DisplayWrappedString( (UINT16)(MPH_STARTINGCASH_SETTING_X+MPH_OFFSET_TO_TEXT + 1), (MPH_STARTINGCASH_SETTING_Y+6), MPH_STARTINGCASH_SETTING_WIDTH, 2, MPH_TOGGLE_TEXT_FONT, MPH_TOGGLE_TEXT_COLOR, gzMPHScreenText[ MPH_CASH_LOW + iMPHStartingCash ], FONT_MCOLOR_BLACK, FALSE, CENTER_JUSTIFIED );
// -----------------
// ----------
// WeaponDamage
RenderMPHSmallSelectionFrame( (MPH_WEAPONDAMAGE_SETTING_X + 36), (MPH_WEAPONDAMAGE_SETTING_Y - 3) );
DisplayWrappedString( (UINT16)(MPH_WEAPONDAMAGE_SETTING_X+MPH_OFFSET_TO_TEXT + 1), (UINT16)(MPH_WEAPONDAMAGE_SETTING_Y-MPH_GAP_BN_SETTINGS + MPH_TITLE_DISTANCE - 12), MPH_WEAPONDAMAGE_SETTING_WIDTH, 2, MPH_TOGGLE_TEXT_FONT, MPH_TOGGLE_TEXT_COLOR, gzMPHScreenText[ MPH_DMG_TEXT ], FONT_MCOLOR_BLACK, FALSE, CENTER_JUSTIFIED );
DisplayWrappedString( (UINT16)(MPH_WEAPONDAMAGE_SETTING_X+MPH_OFFSET_TO_TEXT + 1), (MPH_WEAPONDAMAGE_SETTING_Y+6), MPH_STARTINGCASH_SETTING_WIDTH, 2, MPH_TOGGLE_TEXT_FONT, MPH_TOGGLE_TEXT_COLOR, gzMPHScreenText[ MPH_DAMAGE_VERYLOW + iMPHWeaponDamage ], FONT_MCOLOR_BLACK, FALSE, CENTER_JUSTIFIED );
// --------------
// -----------
// TurnTimes
RenderMPHSmallSelectionFrame( (MPH_TIMETURNS_SETTING_X + 36), (MPH_TIMETURNS_SETTING_Y - 3) );
DisplayWrappedString( (UINT16)(MPH_TIMETURNS_SETTING_X+MPH_OFFSET_TO_TEXT + 1), (UINT16)(MPH_TIMETURNS_SETTING_Y-MPH_GAP_BN_SETTINGS + MPH_TITLE_DISTANCE - 12), MPH_TIMETURNS_SETTING_WIDTH, 2, MPH_TOGGLE_TEXT_FONT, MPH_TOGGLE_TEXT_COLOR, gzMPHScreenText[ MPH_TIMER_TEXT ], FONT_MCOLOR_BLACK, FALSE, CENTER_JUSTIFIED );
DisplayWrappedString( (UINT16)(MPH_TIMETURNS_SETTING_X+MPH_OFFSET_TO_TEXT + 1), (MPH_TIMETURNS_SETTING_Y+6), MPH_TIMETURNS_SETTING_WIDTH, 2, MPH_TOGGLE_TEXT_FONT, MPH_TOGGLE_TEXT_COLOR, gzMPHScreenText[ MPH_TIME_NEVER + iMPHTimeTurns ], FONT_MCOLOR_BLACK, FALSE, CENTER_JUSTIFIED );
// -----------------
// ---------------
// Difficulty
RenderMPHSmallSelectionFrame( (MPH_DIFFICULTY_SETTING_X + 36), (MPH_DIFFICULTY_SETTING_Y - 3) );
DisplayWrappedString( (UINT16)(MPH_DIFFICULTY_SETTING_X+MPH_OFFSET_TO_TEXT + 1), (UINT16)(MPH_DIFFICULTY_SETTING_Y-MPH_GAP_BN_SETTINGS + MPH_TITLE_DISTANCE - 12), MPH_DIFFICULTY_SETTING_WIDTH, 2, MPH_TOGGLE_TEXT_FONT, MPH_TOGGLE_TEXT_COLOR, gzGIOScreenText[ GIO_DIF_LEVEL_TEXT ], FONT_MCOLOR_BLACK, FALSE, CENTER_JUSTIFIED );
DisplayWrappedString( (UINT16)(MPH_DIFFICULTY_SETTING_X+MPH_OFFSET_TO_TEXT + 1), (MPH_DIFFICULTY_SETTING_Y+6), MPH_DIFFICULTY_SETTING_WIDTH, 2, MPH_TOGGLE_TEXT_FONT, MPH_TOGGLE_TEXT_COLOR, gzGIOScreenText[ iMPHDifficulty + 9 ], FONT_MCOLOR_BLACK, FALSE, CENTER_JUSTIFIED );
// ---------------
// ---------------
// GameType
RenderMPHSmallSelectionFrame( (MPH_GAMETYPE_SETTING_X + 36), (MPH_GAMETYPE_SETTING_Y - 3) );
DisplayWrappedString( (UINT16)(MPH_GAMETYPE_SETTING_X+MPH_OFFSET_TO_TEXT + 1), (UINT16)(MPH_GAMETYPE_SETTING_Y-MPH_GAP_BN_SETTINGS + MPH_TITLE_DISTANCE - 12), MPH_GAMETYPE_SETTING_WIDTH, 2, MPH_TOGGLE_TEXT_FONT, MPH_TOGGLE_TEXT_COLOR, gzMPHScreenText[ MPH_GAMETYPE_TEXT ], FONT_MCOLOR_BLACK, FALSE, CENTER_JUSTIFIED );
DisplayWrappedString( (UINT16)(MPH_GAMETYPE_SETTING_X+MPH_OFFSET_TO_TEXT + 1), (MPH_GAMETYPE_SETTING_Y+6), MPH_GAMETYPE_SETTING_WIDTH, 2, MPH_TOGGLE_TEXT_FONT, MPH_TOGGLE_TEXT_COLOR, gzMPHScreenText[ MPH_DEATHMATCH_TEXT + iMPHGameType], FONT_MCOLOR_BLACK, FALSE, CENTER_JUSTIFIED );
// ---------------
// ---------------
// MaxEnemies
DisplayWrappedString( (MPH_MAXENEMIES_SETTING_X - 6), (UINT16)(MPH_MAXENEMIES_SETTING_Y-MPH_GAP_BN_SETTINGS + MPH_TITLE_DISTANCE), MPH_MAXENEMIES_SETTING_WIDTH + 14, 2, MPH_TOGGLE_TEXT_FONT, MPH_TOGGLE_TEXT_COLOR, gzMPHScreenText[ MPH_OVERRIDEMAXAI_TEXT ], FONT_MCOLOR_BLACK, FALSE, CENTER_JUSTIFIED );
// -------------
// ---------------
// Traits
DisplayWrappedString( (MPH_TRAITS_SETTING_X - 6), (UINT16)(MPH_TRAITS_SETTING_Y-MPH_GAP_BN_SETTINGS + MPH_TITLE_DISTANCE), MPH_TRAITS_SETTING_WIDTH + 14, 2, MPH_TOGGLE_TEXT_FONT, MPH_TOGGLE_TEXT_COLOR, gzGIOScreenText[ GIO_TRAITS_TEXT], FONT_MCOLOR_BLACK, FALSE, CENTER_JUSTIFIED );
// -------------
// -----------
// HireMerc
DisplayWrappedString( (MPH_HIREMERC_SETTING_X - 6), (UINT16)(MPH_HIREMERC_SETTING_Y-MPH_GAP_BN_SETTINGS + MPH_TITLE_DISTANCE), MPH_HIREMERC_SETTING_WIDTH + 14, 2, MPH_TOGGLE_TEXT_FONT, MPH_TOGGLE_TEXT_COLOR, gzMPHScreenText[ MPH_RANDOMMERCS_TEXT ], FONT_MCOLOR_BLACK, FALSE, CENTER_JUSTIFIED );
// ----------
// ------------
// SameMerc
DisplayWrappedString( (MPH_SAMEMERC_SETTING_X - 6), (UINT16)(MPH_SAMEMERC_SETTING_Y-MPH_GAP_BN_SETTINGS + MPH_TITLE_DISTANCE), MPH_SAMEMERC_SETTING_WIDTH + 14, 2, MPH_TOGGLE_TEXT_FONT, MPH_TOGGLE_TEXT_COLOR, gzMPHScreenText[ MPH_SAMEMERC_TEXT ], FONT_MCOLOR_BLACK, FALSE, CENTER_JUSTIFIED );
// ----------
// -------------
// ReportMerc
DisplayWrappedString( (MPH_REPORTMERC_SETTING_X - 6), (UINT16)(MPH_REPORTMERC_SETTING_Y-MPH_GAP_BN_SETTINGS + MPH_TITLE_DISTANCE), MPH_REPORTMERC_SETTING_WIDTH + 14, 2, MPH_TOGGLE_TEXT_FONT, MPH_TOGGLE_TEXT_COLOR, gzMPHScreenText[ MPH_RPTMERC_TEXT ], FONT_MCOLOR_BLACK, FALSE, CENTER_JUSTIFIED );
// -------------
// -----------------
// BobbyRay
DisplayWrappedString( (MPH_BOBBYRAY_SETTING_X - 6), (UINT16)(MPH_BOBBYRAY_SETTING_Y-MPH_GAP_BN_SETTINGS + MPH_TITLE_DISTANCE), MPH_BOBBYRAY_SETTING_WIDTH + 14, 2, MPH_TOGGLE_TEXT_FONT, MPH_TOGGLE_TEXT_COLOR, gzMPHScreenText[ MPH_BOBBYRAY_TEXT ], FONT_MCOLOR_BLACK, FALSE, CENTER_JUSTIFIED );
// ----------
// ------------------
// SectorEdge
DisplayWrappedString( (MPH_SECTOREDGE_SETTING_X - 6), (UINT16)(MPH_SECTOREDGE_SETTING_Y-MPH_GAP_BN_SETTINGS + MPH_TITLE_DISTANCE), MPH_SECTOREDGE_SETTING_WIDTH + 14, 2, MPH_TOGGLE_TEXT_FONT, MPH_TOGGLE_TEXT_COLOR, gzMPHScreenText[ MPH_RNDMSTART_TEXT ], FONT_MCOLOR_BLACK, FALSE, CENTER_JUSTIFIED );
// ----------
// ------------
// Civs
DisplayWrappedString( (MPH_CIVS_SETTING_X - 6), (UINT16)(MPH_CIVS_SETTING_Y-MPH_GAP_BN_SETTINGS + MPH_TITLE_DISTANCE), MPH_CIVS_SETTING_WIDTH + 14, 2, MPH_TOGGLE_TEXT_FONT, MPH_TOGGLE_TEXT_COLOR, gzMPHScreenText[ MPH_ENABLECIV_TEXT ], FONT_MCOLOR_BLACK, FALSE, CENTER_JUSTIFIED );
// -------------
// --------------
// Inventory
RenderMPHSmallSelectionFrame( (MPH_INVENTORY_SETTING_X + 36), (MPH_INVENTORY_SETTING_Y - 3) );
DisplayWrappedString( (UINT16)(MPH_INVENTORY_SETTING_X+MPH_OFFSET_TO_TEXT + 1), (UINT16)(MPH_INVENTORY_SETTING_Y-MPH_GAP_BN_SETTINGS + MPH_TITLE_DISTANCE - 12), MPH_INVENTORY_SETTING_WIDTH, 2, MPH_TOGGLE_TEXT_FONT, MPH_TOGGLE_TEXT_COLOR, gzGIOScreenText[ GIO_INV_TEXT ], FONT_MCOLOR_BLACK, FALSE, CENTER_JUSTIFIED );
DisplayWrappedString( (UINT16)(MPH_INVENTORY_SETTING_X+MPH_OFFSET_TO_TEXT + 1), (MPH_INVENTORY_SETTING_Y+6), MPH_INVENTORY_SETTING_WIDTH, 2, MPH_TOGGLE_TEXT_FONT, MPH_TOGGLE_TEXT_COLOR, gzGIOScreenText[ iMPHInventory + 54 ], FONT_MCOLOR_BLACK, FALSE, CENTER_JUSTIFIED );
// ----------------
// --------------------
// Sync
DisplayWrappedString( (MPH_SYNC_SETTING_X - 6), (UINT16)(MPH_SYNC_SETTING_Y-MPH_GAP_BN_SETTINGS + MPH_TITLE_DISTANCE), MPH_SYNC_SETTING_WIDTH + 14, 2, MPH_TOGGLE_TEXT_FONT, MPH_TOGGLE_TEXT_COLOR, gzMPHScreenText[ MPH_SYNC_GAME_DIRECTORY ], FONT_MCOLOR_BLACK, FALSE, CENTER_JUSTIFIED );
// --------------------
return( TRUE );
}
void GetMPHScreenUserInput()
{
InputAtom Event;
// POINT MousePos;
// GetCursorPos(&MousePos);
while (DequeueSpecificEvent(&Event, KEY_DOWN|KEY_UP|KEY_REPEAT))
{
// check if this event is swallowed by text input, otherwise process key
if( !HandleTextInput( &Event ) && Event.usEvent == KEY_DOWN )
{
switch( Event.usParam )
{
case ESC:
//Exit out of the screen
gubMPHScreenHandler = MPH_CANCEL;
break;
case ENTER:
if (ValidateMPSettings())
{
SaveMPSettings(); // Update Profiles/UserProfile/ja2_mp.ini
SGP_TRYCATCH_RETHROW( ja2::mp::InitializeMultiplayerProfile(vfs::Path(gzFileTransferDirectory)), L"" );
gubMPHScreenHandler = MPH_START;
}
break;
}
}
}
} // end of GetMPHScreenUserInput()
// CALLBACKS
void BtnMPHStartCallback(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 );
if (ValidateMPSettings())
{
gubMPHScreenHandler = MPH_START;
SaveMPSettings(); // Update the Profiles/UserProfile/ja2_mp.ini
SGP_TRYCATCH_RETHROW( ja2::mp::InitializeMultiplayerProfile(vfs::Path(gzFileTransferDirectory)), L"" );
// The difficult level has to be set there. This is the only value so far, because it is used for initialization!
//gGameOptions.ubDifficultyLevel = GetMPHCurrentDifficultyButtonSetting();
gGameOptions.ubDifficultyLevel = iMPHDifficulty + 1;
// WANNE - MP: Reinit TableData folder and INIs
LoadExternalGameplayData(TABLEDATA_DIRECTORY);
InitDependingGameStyleOptions();
}
InvalidateRegion(btn->Area.RegionTopLeftX, btn->Area.RegionTopLeftY, btn->Area.RegionBottomRightX, btn->Area.RegionBottomRightY);
}
}
void BtnMPHCancelCallback(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 );
gubMPHScreenHandler = MPH_CANCEL;
InvalidateRegion(btn->Area.RegionTopLeftX, btn->Area.RegionTopLeftY, btn->Area.RegionBottomRightX, btn->Area.RegionBottomRightY);
}
}
void DoneFadeOutForExitMPHScreen( void )
{
// As we bypassed the GIO screen, set up some game options for multiplayer here
// <TODO> most things i have left as thier defaults here for testing.
is_networked = true;
is_host = true; // we want to be the host, not we ARE the host yet (is_server)
auto_retry = true;
giNumTries = 5;
if (is_networked)
gGameOptions.fTurnTimeLimit = TRUE;
else
gGameOptions.fTurnTimeLimit = FALSE;
// Bobby Rays - why would we want anything less than the best
gGameOptions.ubBobbyRay = BR_AWESOME;
gubMPHExitScreen = INTRO_SCREEN;
#ifdef JA2UB
//SetIntroType( INTRO_BEGINNING );
#else
SetIntroType( INTRO_BEGINNING );
#endif
ExitMPHScreen(); // cleanup please, if we called a fadeout then we didnt do it above
SetCurrentCursorFromDatabase( VIDEO_NO_CURSOR );
}
void DoneFadeInForExitMPHScreen( void )
{
SetCurrentCursorFromDatabase( VIDEO_NO_CURSOR );
}
void RenderMPHSmallSelectionFrame(INT16 sX, INT16 sY)
{
HVOBJECT hHandle;
// get the video object
GetVideoObject(&hHandle, guiMPHSMALLFRAME);
// blt to sX, sY relative to upper left corner
BltVideoObject(FRAME_BUFFER, hHandle, 0, sX, sY , VO_BLT_SRCTRANSPARENCY,NULL);
return;
}