GameInitOptionsScreen.c 36 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223
  1. #ifdef PRECOMPILEDHEADERS
  2. #include "JA2 All.h"
  3. #include "Intro.h"
  4. #else
  5. #include "Types.h"
  6. #include "GameInitOptionsScreen.h"
  7. #include "GameSettings.h"
  8. #include "Utilities.h"
  9. #include "wCheck.h"
  10. #include "Font Control.h"
  11. #include "WordWrap.h"
  12. #include "Render Dirty.h"
  13. #include "Input.h"
  14. #include "Options Screen.h"
  15. #include "English.h"
  16. #include "Sysutil.h"
  17. #include "Fade Screen.h"
  18. #include "Cursor Control.h"
  19. #include "Music Control.h"
  20. #include "cursors.h"
  21. #include "Intro.h"
  22. #endif
  23. ////////////////////////////////////////////
  24. //
  25. // Global Defines
  26. //
  27. ///////////////////////////////////////////
  28. #define GIO_TITLE_FONT FONT16ARIAL//FONT14ARIAL
  29. #define GIO_TITLE_COLOR FONT_MCOLOR_WHITE
  30. #define GIO_TOGGLE_TEXT_FONT FONT16ARIAL//FONT14ARIAL
  31. #define GIO_TOGGLE_TEXT_COLOR FONT_MCOLOR_WHITE
  32. //buttons
  33. #define GIO_BTN_OK_X 141
  34. #define GIO_BTN_OK_Y 418
  35. #define GIO_CANCEL_X 379
  36. //main title
  37. #define GIO_MAIN_TITLE_X 0
  38. #define GIO_MAIN_TITLE_Y 68
  39. #define GIO_MAIN_TITLE_WIDTH 640
  40. //radio box locations
  41. #define GIO_GAP_BN_SETTINGS 35
  42. #define GIO_OFFSET_TO_TEXT 20//30
  43. #define GIO_OFFSET_TO_TOGGLE_BOX 155//200
  44. #define GIO_OFFSET_TO_TOGGLE_BOX_Y 9
  45. #define GIO_DIF_SETTINGS_X 80
  46. #define GIO_DIF_SETTINGS_Y 150
  47. #define GIO_DIF_SETTINGS_WIDTH GIO_OFFSET_TO_TOGGLE_BOX - GIO_OFFSET_TO_TEXT //230
  48. #define GIO_GAME_SETTINGS_X 350
  49. #define GIO_GAME_SETTINGS_Y 300//280//150
  50. #define GIO_GAME_SETTINGS_WIDTH GIO_DIF_SETTINGS_WIDTH
  51. #define GIO_GUN_SETTINGS_X GIO_GAME_SETTINGS_X
  52. #define GIO_GUN_SETTINGS_Y GIO_DIF_SETTINGS_Y//150//280
  53. #define GIO_GUN_SETTINGS_WIDTH GIO_DIF_SETTINGS_WIDTH
  54. /*
  55. #define GIO_TIMED_TURN_SETTING_X GIO_DIF_SETTINGS_X
  56. #define GIO_TIMED_TURN_SETTING_Y GIO_GAME_SETTINGS_Y
  57. #define GIO_TIMED_TURN_SETTING_WIDTH GIO_DIF_SETTINGS_WIDTH
  58. */
  59. #define GIO_IRON_MAN_SETTING_X GIO_DIF_SETTINGS_X
  60. #define GIO_IRON_MAN_SETTING_Y GIO_GAME_SETTINGS_Y
  61. #define GIO_IRON_MAN_SETTING_WIDTH GIO_DIF_SETTINGS_WIDTH
  62. //Difficulty settings
  63. enum
  64. {
  65. GIO_DIFF_EASY,
  66. GIO_DIFF_MED,
  67. GIO_DIFF_HARD,
  68. NUM_DIFF_SETTINGS,
  69. };
  70. // Game Settings options
  71. enum
  72. {
  73. GIO_REALISTIC,
  74. GIO_SCI_FI,
  75. NUM_GAME_STYLES,
  76. };
  77. // Gun options
  78. enum
  79. {
  80. GIO_REDUCED_GUNS,
  81. GIO_GUN_NUT,
  82. NUM_GUN_OPTIONS,
  83. };
  84. // JA2Gold: no more timed turns setting
  85. /*
  86. //enum for the timed turns setting
  87. enum
  88. {
  89. GIO_NO_TIMED_TURNS,
  90. GIO_TIMED_TURNS,
  91. GIO_NUM_TIMED_TURN_OPTIONS,
  92. };
  93. */
  94. // Iron man mode
  95. enum
  96. {
  97. GIO_CAN_SAVE,
  98. GIO_IRON_MAN,
  99. NUM_SAVE_OPTIONS,
  100. };
  101. //enum for different states of game
  102. enum
  103. {
  104. GIO_NOTHING,
  105. GIO_CANCEL,
  106. GIO_EXIT,
  107. GIO_IRON_MAN_MODE
  108. };
  109. ////////////////////////////////////////////
  110. //
  111. // Global Variables
  112. //
  113. ///////////////////////////////////////////
  114. BOOLEAN gfGIOScreenEntry = TRUE;
  115. BOOLEAN gfGIOScreenExit = FALSE;
  116. BOOLEAN gfReRenderGIOScreen=TRUE;
  117. BOOLEAN gfGIOButtonsAllocated = FALSE;
  118. UINT8 gubGameOptionScreenHandler=GIO_NOTHING;
  119. UINT32 gubGIOExitScreen = GAME_INIT_OPTIONS_SCREEN;
  120. UINT32 guiGIOMainBackGroundImage;
  121. INT32 giGioMessageBox = -1;
  122. //BOOLEAN gfExitGioDueToMessageBox=FALSE;
  123. //UINT8 gubDifficultySettings[ NUM_DIFF_SETTINGS ];
  124. //UINT8 gubGameSettings[ NUM_GAME_STYLES ];
  125. //UINT8 gubGunSettings[ NUM_GUN_OPTIONS ];
  126. //extern INT32 gp16PointArial;
  127. // Done Button
  128. void BtnGIODoneCallback(GUI_BUTTON *btn,INT32 reason);
  129. UINT32 guiGIODoneButton;
  130. INT32 giGIODoneBtnImage;
  131. // Cancel Button
  132. void BtnGIOCancelCallback(GUI_BUTTON *btn,INT32 reason);
  133. UINT32 guiGIOCancelButton;
  134. INT32 giGIOCancelBtnImage;
  135. //checkbox to toggle the Diff level
  136. UINT32 guiDifficultySettingsToggles[ NUM_DIFF_SETTINGS ];
  137. void BtnDifficultyTogglesCallback(GUI_BUTTON *btn,INT32 reason);
  138. //checkbox to toggle Game style
  139. UINT32 guiGameStyleToggles[ NUM_GAME_STYLES ];
  140. void BtnGameStyleTogglesCallback(GUI_BUTTON *btn,INT32 reason);
  141. //checkbox to toggle Gun options
  142. UINT32 guiGunOptionToggles[ NUM_GUN_OPTIONS ];
  143. void BtnGunOptionsTogglesCallback(GUI_BUTTON *btn,INT32 reason);
  144. // JA2Gold: no more timed turns setting
  145. /*
  146. //checkbox to toggle Timed turn option on or off
  147. UINT32 guiTimedTurnToggles[ GIO_NUM_TIMED_TURN_OPTIONS ];
  148. void BtnTimedTurnsTogglesCallback(GUI_BUTTON *btn,INT32 reason);
  149. */
  150. //checkbox to toggle Save style
  151. UINT32 guiGameSaveToggles[ NUM_SAVE_OPTIONS ];
  152. void BtnGameSaveTogglesCallback(GUI_BUTTON *btn,INT32 reason);
  153. ////////////////////////////////////////////
  154. //
  155. // Local Function Prototypes
  156. //
  157. ///////////////////////////////////////////
  158. extern void ClearMainMenu();
  159. BOOLEAN EnterGIOScreen();
  160. BOOLEAN ExitGIOScreen();
  161. void HandleGIOScreen();
  162. BOOLEAN RenderGIOScreen();
  163. void GetGIOScreenUserInput();
  164. UINT8 GetCurrentGunButtonSetting();
  165. // JA2Gold: added save (iron man) button setting
  166. UINT8 GetCurrentGameSaveButtonSetting();
  167. UINT8 GetCurrentGameStyleButtonSetting();
  168. UINT8 GetCurrentDifficultyButtonSetting();
  169. void RestoreGIOButtonBackGrounds();
  170. void DoneFadeOutForExitGameInitOptionScreen( void );
  171. void DoneFadeInForExitGameInitOptionScreen( void );
  172. // JA2Gold: no more timed turns setting
  173. //UINT8 GetCurrentTimedTurnsButtonSetting();
  174. BOOLEAN DoGioMessageBox( UINT8 ubStyle, INT16 *zString, UINT32 uiExitScreen, UINT16 usFlags, MSGBOX_CALLBACK ReturnCallback );
  175. void DisplayMessageToUserAboutGameDifficulty();
  176. void ConfirmGioDifSettingMessageBoxCallBack( UINT8 bExitValue );
  177. BOOLEAN DisplayMessageToUserAboutIronManMode();
  178. void ConfirmGioIronManMessageBoxCallBack( UINT8 bExitValue );
  179. //ppp
  180. UINT32 GameInitOptionsScreenInit( void )
  181. {
  182. return( 1 );
  183. }
  184. UINT32 GameInitOptionsScreenHandle( void )
  185. {
  186. StartFrameBufferRender();
  187. if( gfGIOScreenEntry )
  188. {
  189. // PauseGame();
  190. EnterGIOScreen();
  191. gfGIOScreenEntry = FALSE;
  192. gfGIOScreenExit = FALSE;
  193. InvalidateRegion( 0, 0, 640, 480 );
  194. }
  195. GetGIOScreenUserInput();
  196. HandleGIOScreen();
  197. // render buttons marked dirty
  198. MarkButtonsDirty( );
  199. RenderButtons( );
  200. // render help
  201. // RenderFastHelp( );
  202. // RenderButtonsFastHelp( );
  203. ExecuteBaseDirtyRectQueue();
  204. EndFrameBufferRender();
  205. if ( HandleFadeOutCallback( ) )
  206. {
  207. ClearMainMenu();
  208. return( gubGIOExitScreen );
  209. }
  210. if ( HandleBeginFadeOut( gubGIOExitScreen ) )
  211. {
  212. return( gubGIOExitScreen );
  213. }
  214. if( gfGIOScreenExit )
  215. {
  216. ExitGIOScreen();
  217. }
  218. if ( HandleFadeInCallback( ) )
  219. {
  220. // Re-render the scene!
  221. RenderGIOScreen();
  222. }
  223. if ( HandleBeginFadeIn( gubGIOExitScreen ) )
  224. {
  225. }
  226. return( gubGIOExitScreen );
  227. }
  228. UINT32 GameInitOptionsScreenShutdown( void )
  229. {
  230. return( 1 );
  231. }
  232. BOOLEAN EnterGIOScreen()
  233. {
  234. VOBJECT_DESC VObjectDesc;
  235. UINT16 cnt;
  236. UINT16 usPosY;
  237. if( gfGIOButtonsAllocated )
  238. return( TRUE );
  239. SetCurrentCursorFromDatabase( CURSOR_NORMAL );
  240. // load the Main trade screen backgroiund image
  241. VObjectDesc.fCreateFlags=VOBJECT_CREATE_FROMFILE;
  242. FilenameForBPP("InterFace\\OptionsScreenBackGround.sti", VObjectDesc.ImageFile);
  243. CHECKF(AddVideoObject(&VObjectDesc, &guiGIOMainBackGroundImage ));
  244. //Ok button
  245. giGIODoneBtnImage = LoadButtonImage("INTERFACE\\PreferencesButtons.sti", -1,0,-1,2,-1 );
  246. guiGIODoneButton = CreateIconAndTextButton( giGIODoneBtnImage, gzGIOScreenText[GIO_OK_TEXT], OPT_BUTTON_FONT,
  247. OPT_BUTTON_ON_COLOR, DEFAULT_SHADOW,
  248. OPT_BUTTON_OFF_COLOR, DEFAULT_SHADOW,
  249. TEXT_CJUSTIFIED,
  250. GIO_BTN_OK_X, GIO_BTN_OK_Y, BUTTON_TOGGLE, MSYS_PRIORITY_HIGH,
  251. DEFAULT_MOVE_CALLBACK, BtnGIODoneCallback);
  252. SpecifyButtonSoundScheme( guiGIODoneButton, BUTTON_SOUND_SCHEME_BIGSWITCH3 );
  253. SpecifyDisabledButtonStyle( guiGIODoneButton, DISABLED_STYLE_NONE );
  254. //Cancel button
  255. giGIOCancelBtnImage = UseLoadedButtonImage( giGIODoneBtnImage, -1,1,-1,3,-1 );
  256. guiGIOCancelButton = CreateIconAndTextButton( giGIOCancelBtnImage, gzGIOScreenText[GIO_CANCEL_TEXT], OPT_BUTTON_FONT,
  257. OPT_BUTTON_ON_COLOR, DEFAULT_SHADOW,
  258. OPT_BUTTON_OFF_COLOR, DEFAULT_SHADOW,
  259. TEXT_CJUSTIFIED,
  260. GIO_CANCEL_X, GIO_BTN_OK_Y, BUTTON_TOGGLE, MSYS_PRIORITY_HIGH,
  261. DEFAULT_MOVE_CALLBACK, BtnGIOCancelCallback );
  262. SpecifyButtonSoundScheme( guiGIOCancelButton, BUTTON_SOUND_SCHEME_BIGSWITCH3 );
  263. //
  264. //Check box to toggle Difficulty settings
  265. //
  266. usPosY = GIO_DIF_SETTINGS_Y - GIO_OFFSET_TO_TOGGLE_BOX_Y;
  267. for( cnt=0; cnt<NUM_DIFF_SETTINGS; cnt++)
  268. {
  269. guiDifficultySettingsToggles[ cnt ] = CreateCheckBoxButton( GIO_DIF_SETTINGS_X+GIO_OFFSET_TO_TOGGLE_BOX, usPosY,
  270. "INTERFACE\\OptionsCheck.sti", MSYS_PRIORITY_HIGH+10,
  271. BtnDifficultyTogglesCallback );
  272. MSYS_SetBtnUserData( guiDifficultySettingsToggles[ cnt ], 0, cnt );
  273. usPosY += GIO_GAP_BN_SETTINGS;
  274. }
  275. if( gGameOptions.ubDifficultyLevel == DIF_LEVEL_EASY )
  276. ButtonList[ guiDifficultySettingsToggles[ GIO_DIFF_EASY ] ]->uiFlags |= BUTTON_CLICKED_ON;
  277. else if( gGameOptions.ubDifficultyLevel == DIF_LEVEL_MEDIUM )
  278. ButtonList[ guiDifficultySettingsToggles[ GIO_DIFF_MED ] ]->uiFlags |= BUTTON_CLICKED_ON;
  279. else if( gGameOptions.ubDifficultyLevel == DIF_LEVEL_HARD )
  280. ButtonList[ guiDifficultySettingsToggles[ GIO_DIFF_HARD ] ]->uiFlags |= BUTTON_CLICKED_ON;
  281. else
  282. ButtonList[ guiDifficultySettingsToggles[ GIO_DIFF_MED ] ]->uiFlags |= BUTTON_CLICKED_ON;
  283. //
  284. //Check box to toggle Game settings ( realistic, sci fi )
  285. //
  286. usPosY = GIO_GAME_SETTINGS_Y - GIO_OFFSET_TO_TOGGLE_BOX_Y;
  287. for( cnt=0; cnt<NUM_GAME_STYLES; cnt++)
  288. {
  289. guiGameStyleToggles[ cnt ] = CreateCheckBoxButton( GIO_GAME_SETTINGS_X+GIO_OFFSET_TO_TOGGLE_BOX, usPosY,
  290. "INTERFACE\\OptionsCheck.sti", MSYS_PRIORITY_HIGH+10,
  291. BtnGameStyleTogglesCallback );
  292. MSYS_SetBtnUserData( guiGameStyleToggles[ cnt ], 0, cnt );
  293. usPosY += GIO_GAP_BN_SETTINGS;
  294. }
  295. if( gGameOptions.fSciFi )
  296. ButtonList[ guiGameStyleToggles[ GIO_SCI_FI ] ]->uiFlags |= BUTTON_CLICKED_ON;
  297. else
  298. ButtonList[ guiGameStyleToggles[ GIO_REALISTIC ] ]->uiFlags |= BUTTON_CLICKED_ON;
  299. // JA2Gold: iron man buttons
  300. usPosY = GIO_IRON_MAN_SETTING_Y - GIO_OFFSET_TO_TOGGLE_BOX_Y;
  301. for( cnt=0; cnt<NUM_SAVE_OPTIONS; cnt++)
  302. {
  303. guiGameSaveToggles[ cnt ] = CreateCheckBoxButton( GIO_IRON_MAN_SETTING_X+GIO_OFFSET_TO_TOGGLE_BOX, usPosY,
  304. "INTERFACE\\OptionsCheck.sti", MSYS_PRIORITY_HIGH+10,
  305. BtnGameSaveTogglesCallback );
  306. MSYS_SetBtnUserData( guiGameSaveToggles[ cnt ], 0, cnt );
  307. usPosY += GIO_GAP_BN_SETTINGS;
  308. }
  309. if( gGameOptions.fIronManMode )
  310. ButtonList[ guiGameSaveToggles[ GIO_IRON_MAN ] ]->uiFlags |= BUTTON_CLICKED_ON;
  311. else
  312. ButtonList[ guiGameSaveToggles[ GIO_CAN_SAVE ] ]->uiFlags |= BUTTON_CLICKED_ON;
  313. //
  314. // Check box to toggle Gun options
  315. //
  316. usPosY = GIO_GUN_SETTINGS_Y - GIO_OFFSET_TO_TOGGLE_BOX_Y;
  317. for( cnt=0; cnt<NUM_GUN_OPTIONS; cnt++)
  318. {
  319. guiGunOptionToggles[ cnt ] = CreateCheckBoxButton( GIO_GUN_SETTINGS_X+GIO_OFFSET_TO_TOGGLE_BOX, usPosY,
  320. "INTERFACE\\OptionsCheck.sti", MSYS_PRIORITY_HIGH+10,
  321. BtnGunOptionsTogglesCallback);
  322. MSYS_SetBtnUserData( guiGunOptionToggles[ cnt ], 0, cnt );
  323. usPosY += GIO_GAP_BN_SETTINGS;
  324. }
  325. //if its the demo, make sure the defuat is for additional guns
  326. #ifdef JA2DEMO
  327. gGameOptions.fGunNut = TRUE;
  328. #endif
  329. if( gGameOptions.fGunNut )
  330. ButtonList[ guiGunOptionToggles[ GIO_GUN_NUT ] ]->uiFlags |= BUTTON_CLICKED_ON;
  331. else
  332. ButtonList[ guiGunOptionToggles[ GIO_REDUCED_GUNS ] ]->uiFlags |= BUTTON_CLICKED_ON;
  333. //if its the demo, make sure to disable the buttons
  334. #ifdef JA2DEMO
  335. SpecifyDisabledButtonStyle( guiGunOptionToggles[ GIO_GUN_NUT ], DISABLED_STYLE_SHADED );
  336. SpecifyDisabledButtonStyle( guiGunOptionToggles[ GIO_REDUCED_GUNS ], DISABLED_STYLE_SHADED );
  337. DisableButton( guiGunOptionToggles[ GIO_GUN_NUT ] );
  338. DisableButton( guiGunOptionToggles[ GIO_REDUCED_GUNS ] );
  339. #endif
  340. // JA2 Gold: no more timed turns
  341. //
  342. // Check box to toggle the timed turn option
  343. //
  344. /*
  345. usPosY = GIO_TIMED_TURN_SETTING_Y - GIO_OFFSET_TO_TOGGLE_BOX_Y;
  346. for( cnt=0; cnt<GIO_NUM_TIMED_TURN_OPTIONS; cnt++)
  347. {
  348. guiTimedTurnToggles[ cnt ] = CreateCheckBoxButton( GIO_TIMED_TURN_SETTING_X+GIO_OFFSET_TO_TOGGLE_BOX, usPosY,
  349. "INTERFACE\\OptionsCheck.sti", MSYS_PRIORITY_HIGH+10,
  350. BtnTimedTurnsTogglesCallback );
  351. MSYS_SetBtnUserData( guiTimedTurnToggles[ cnt ], 0, cnt );
  352. usPosY += GIO_GAP_BN_SETTINGS;
  353. }
  354. if( gGameOptions.fTurnTimeLimit )
  355. ButtonList[ guiTimedTurnToggles[ GIO_TIMED_TURNS ] ]->uiFlags |= BUTTON_CLICKED_ON;
  356. else
  357. ButtonList[ guiTimedTurnToggles[ GIO_NO_TIMED_TURNS ] ]->uiFlags |= BUTTON_CLICKED_ON;
  358. */
  359. //Reset the exit screen
  360. gubGIOExitScreen = GAME_INIT_OPTIONS_SCREEN;
  361. //REnder the screen once so we can blt ot to ths save buffer
  362. RenderGIOScreen();
  363. BlitBufferToBuffer(guiRENDERBUFFER, guiSAVEBUFFER, 0, 0, 639, 439 );
  364. gfGIOButtonsAllocated = TRUE;
  365. return( TRUE );
  366. }
  367. BOOLEAN ExitGIOScreen()
  368. {
  369. UINT16 cnt;
  370. if( !gfGIOButtonsAllocated )
  371. return( TRUE );
  372. //Delete the main options screen background
  373. DeleteVideoObjectFromIndex( guiGIOMainBackGroundImage );
  374. RemoveButton( guiGIOCancelButton );
  375. RemoveButton( guiGIODoneButton );
  376. UnloadButtonImage( giGIOCancelBtnImage );
  377. UnloadButtonImage( giGIODoneBtnImage );
  378. //Check box to toggle Difficulty settings
  379. for( cnt=0; cnt<NUM_DIFF_SETTINGS; cnt++)
  380. RemoveButton( guiDifficultySettingsToggles[ cnt ] );
  381. //Check box to toggle Game settings ( realistic, sci fi )
  382. for( cnt=0; cnt<NUM_GAME_STYLES; cnt++)
  383. RemoveButton( guiGameStyleToggles[ cnt ] );
  384. //Check box to toggle Gun options
  385. for( cnt=0; cnt<NUM_GUN_OPTIONS; cnt++)
  386. RemoveButton( guiGunOptionToggles[ cnt ] );
  387. // JA2Gold: no more timed turns setting
  388. /*
  389. //remove the timed turns toggle
  390. for( cnt=0; cnt<GIO_NUM_TIMED_TURN_OPTIONS; cnt++ )
  391. RemoveButton( guiTimedTurnToggles[ cnt ] );
  392. */
  393. // JA2Gold: remove iron man buttons
  394. for( cnt=0; cnt<NUM_SAVE_OPTIONS; cnt++)
  395. RemoveButton( guiGameSaveToggles[ cnt ] );
  396. gfGIOButtonsAllocated = FALSE;
  397. //If we are starting the game stop playing the music
  398. if( gubGameOptionScreenHandler == GIO_EXIT )
  399. SetMusicMode( MUSIC_NONE );
  400. gfGIOScreenExit = FALSE;
  401. gfGIOScreenEntry = TRUE;
  402. return( TRUE );
  403. }
  404. void HandleGIOScreen()
  405. {
  406. if( gubGameOptionScreenHandler != GIO_NOTHING )
  407. {
  408. switch( gubGameOptionScreenHandler )
  409. {
  410. case GIO_CANCEL:
  411. gubGIOExitScreen = MAINMENU_SCREEN;
  412. gfGIOScreenExit = TRUE;
  413. break;
  414. case GIO_EXIT:
  415. {
  416. //if we are already fading out, get out of here
  417. if( gFadeOutDoneCallback != DoneFadeOutForExitGameInitOptionScreen )
  418. {
  419. //Disable the ok button
  420. DisableButton( guiGIODoneButton );
  421. gFadeOutDoneCallback = DoneFadeOutForExitGameInitOptionScreen;
  422. FadeOutNextFrame( );
  423. }
  424. break;
  425. }
  426. case GIO_IRON_MAN_MODE:
  427. DisplayMessageToUserAboutGameDifficulty();
  428. break;
  429. }
  430. gubGameOptionScreenHandler = GIO_NOTHING;
  431. }
  432. if( gfReRenderGIOScreen )
  433. {
  434. RenderGIOScreen();
  435. gfReRenderGIOScreen = FALSE;
  436. }
  437. RestoreGIOButtonBackGrounds();
  438. }
  439. BOOLEAN RenderGIOScreen()
  440. {
  441. HVOBJECT hPixHandle;
  442. UINT16 usPosY;
  443. //Get the main background screen graphic and blt it
  444. GetVideoObject(&hPixHandle, guiGIOMainBackGroundImage );
  445. BltVideoObject(FRAME_BUFFER, hPixHandle, 0,0,0, VO_BLT_SRCTRANSPARENCY,NULL);
  446. //Shade the background
  447. ShadowVideoSurfaceRect( FRAME_BUFFER, 48, 55, 592, 378 ); //358
  448. //Display the title
  449. DrawTextToScreen( gzGIOScreenText[ GIO_INITIAL_GAME_SETTINGS ], GIO_MAIN_TITLE_X, GIO_MAIN_TITLE_Y, GIO_MAIN_TITLE_WIDTH, GIO_TITLE_FONT, GIO_TITLE_COLOR, FONT_MCOLOR_BLACK, FALSE, CENTER_JUSTIFIED );
  450. //Display the Dif Settings Title Text
  451. //DrawTextToScreen( gzGIOScreenText[ GIO_DIF_LEVEL_TEXT ], GIO_DIF_SETTINGS_X, (UINT16)(GIO_DIF_SETTINGS_Y-GIO_GAP_BN_SETTINGS), GIO_DIF_SETTINGS_WIDTH, GIO_TOGGLE_TEXT_FONT, GIO_TOGGLE_TEXT_COLOR, FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED );
  452. DisplayWrappedString( GIO_DIF_SETTINGS_X, (UINT16)(GIO_DIF_SETTINGS_Y-GIO_GAP_BN_SETTINGS), GIO_DIF_SETTINGS_WIDTH, 2, GIO_TOGGLE_TEXT_FONT, GIO_TOGGLE_TEXT_COLOR, gzGIOScreenText[ GIO_DIF_LEVEL_TEXT ], FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED );
  453. usPosY = GIO_DIF_SETTINGS_Y+2;
  454. //DrawTextToScreen( gzGIOScreenText[ GIO_EASY_TEXT ], (UINT16)(GIO_DIF_SETTINGS_X+GIO_OFFSET_TO_TEXT), usPosY, GIO_MAIN_TITLE_WIDTH, GIO_TOGGLE_TEXT_FONT, GIO_TOGGLE_TEXT_COLOR, FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED );
  455. DisplayWrappedString( (UINT16)(GIO_DIF_SETTINGS_X+GIO_OFFSET_TO_TEXT), usPosY, GIO_DIF_SETTINGS_WIDTH, 2, GIO_TOGGLE_TEXT_FONT, GIO_TOGGLE_TEXT_COLOR, gzGIOScreenText[ GIO_EASY_TEXT ], FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED );
  456. usPosY += GIO_GAP_BN_SETTINGS;
  457. //DrawTextToScreen( gzGIOScreenText[ GIO_MEDIUM_TEXT ], (UINT16)(GIO_DIF_SETTINGS_X+GIO_OFFSET_TO_TEXT), usPosY, GIO_MAIN_TITLE_WIDTH, GIO_TOGGLE_TEXT_FONT, GIO_TOGGLE_TEXT_COLOR, FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED );
  458. DisplayWrappedString( (UINT16)(GIO_DIF_SETTINGS_X+GIO_OFFSET_TO_TEXT), usPosY, GIO_DIF_SETTINGS_WIDTH, 2, GIO_TOGGLE_TEXT_FONT, GIO_TOGGLE_TEXT_COLOR, gzGIOScreenText[ GIO_MEDIUM_TEXT ], FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED );
  459. usPosY += GIO_GAP_BN_SETTINGS;
  460. //DrawTextToScreen( gzGIOScreenText[ GIO_HARD_TEXT ], (UINT16)(GIO_DIF_SETTINGS_X+GIO_OFFSET_TO_TEXT), usPosY, GIO_MAIN_TITLE_WIDTH, GIO_TOGGLE_TEXT_FONT, GIO_TOGGLE_TEXT_COLOR, FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED );
  461. DisplayWrappedString( (UINT16)(GIO_DIF_SETTINGS_X+GIO_OFFSET_TO_TEXT), usPosY, GIO_DIF_SETTINGS_WIDTH, 2, GIO_TOGGLE_TEXT_FONT, GIO_TOGGLE_TEXT_COLOR, gzGIOScreenText[ GIO_HARD_TEXT ], FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED );
  462. //Display the Game Settings Title Text
  463. // DrawTextToScreen( gzGIOScreenText[ GIO_GAME_STYLE_TEXT ], GIO_GAME_SETTINGS_X, (UINT16)(GIO_GAME_SETTINGS_Y-GIO_GAP_BN_SETTINGS), GIO_GAME_SETTINGS_WIDTH, GIO_TOGGLE_TEXT_FONT, GIO_TOGGLE_TEXT_COLOR, FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED );
  464. DisplayWrappedString( GIO_GAME_SETTINGS_X, (UINT16)(GIO_GAME_SETTINGS_Y-GIO_GAP_BN_SETTINGS), GIO_GAME_SETTINGS_WIDTH, 2, GIO_TOGGLE_TEXT_FONT, GIO_TOGGLE_TEXT_COLOR, gzGIOScreenText[ GIO_GAME_STYLE_TEXT ], FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED );
  465. usPosY = GIO_GAME_SETTINGS_Y+2;
  466. //DrawTextToScreen( gzGIOScreenText[ GIO_REALISTIC_TEXT ], (UINT16)(GIO_GAME_SETTINGS_X+GIO_OFFSET_TO_TEXT), usPosY, GIO_MAIN_TITLE_WIDTH, GIO_TOGGLE_TEXT_FONT, GIO_TOGGLE_TEXT_COLOR, FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED );
  467. DisplayWrappedString( (UINT16)(GIO_GAME_SETTINGS_X+GIO_OFFSET_TO_TEXT), usPosY, GIO_GAME_SETTINGS_WIDTH, 2, GIO_TOGGLE_TEXT_FONT, GIO_TOGGLE_TEXT_COLOR, gzGIOScreenText[ GIO_REALISTIC_TEXT ], FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED );
  468. usPosY += GIO_GAP_BN_SETTINGS;
  469. //DrawTextToScreen( gzGIOScreenText[ GIO_SCI_FI_TEXT ], (UINT16)(GIO_GAME_SETTINGS_X+GIO_OFFSET_TO_TEXT), usPosY, GIO_MAIN_TITLE_WIDTH, GIO_TOGGLE_TEXT_FONT, GIO_TOGGLE_TEXT_COLOR, FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED );
  470. DisplayWrappedString( (UINT16)(GIO_GAME_SETTINGS_X+GIO_OFFSET_TO_TEXT), usPosY, GIO_GAME_SETTINGS_WIDTH, 2, GIO_TOGGLE_TEXT_FONT, GIO_TOGGLE_TEXT_COLOR, gzGIOScreenText[ GIO_SCI_FI_TEXT ], FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED );
  471. //Display the Gun Settings Title Text
  472. // DrawTextToScreen( gzGIOScreenText[ GIO_GUN_OPTIONS_TEXT ], GIO_GUN_SETTINGS_X, (UINT16)(GIO_GUN_SETTINGS_Y-GIO_GAP_BN_SETTINGS), GIO_GUN_SETTINGS_WIDTH, GIO_TOGGLE_TEXT_FONT, GIO_TOGGLE_TEXT_COLOR, FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED );
  473. DisplayWrappedString( GIO_GUN_SETTINGS_X, (UINT16)(GIO_GUN_SETTINGS_Y-GIO_GAP_BN_SETTINGS), GIO_GUN_SETTINGS_WIDTH, 2, GIO_TOGGLE_TEXT_FONT, GIO_TOGGLE_TEXT_COLOR, gzGIOScreenText[ GIO_GUN_OPTIONS_TEXT ], FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED );
  474. usPosY = GIO_GUN_SETTINGS_Y+2;
  475. //DrawTextToScreen( gzGIOScreenText[ GIO_REDUCED_GUNS_TEXT ], (UINT16)(GIO_GUN_SETTINGS_X+GIO_OFFSET_TO_TEXT), usPosY, GIO_MAIN_TITLE_WIDTH, GIO_TOGGLE_TEXT_FONT, GIO_TOGGLE_TEXT_COLOR, FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED );
  476. DisplayWrappedString( (UINT16)(GIO_GUN_SETTINGS_X+GIO_OFFSET_TO_TEXT), usPosY, GIO_GUN_SETTINGS_WIDTH, 2, GIO_TOGGLE_TEXT_FONT, GIO_TOGGLE_TEXT_COLOR, gzGIOScreenText[ GIO_REDUCED_GUNS_TEXT ], FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED );
  477. usPosY += GIO_GAP_BN_SETTINGS;
  478. //DrawTextToScreen( gzGIOScreenText[ GIO_GUN_NUT_TEXT ], (UINT16)(GIO_GUN_SETTINGS_X+GIO_OFFSET_TO_TEXT), usPosY, GIO_MAIN_TITLE_WIDTH, GIO_TOGGLE_TEXT_FONT, GIO_TOGGLE_TEXT_COLOR, FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED );
  479. DisplayWrappedString( (UINT16)(GIO_GUN_SETTINGS_X+GIO_OFFSET_TO_TEXT), usPosY, GIO_GUN_SETTINGS_WIDTH, 2, GIO_TOGGLE_TEXT_FONT, GIO_TOGGLE_TEXT_COLOR, gzGIOScreenText[ GIO_GUN_NUT_TEXT ], FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED );
  480. // JA2Gold: no more timed turns setting
  481. /*
  482. //Display the Timed turns Settings Title Text
  483. DisplayWrappedString( GIO_TIMED_TURN_SETTING_X, (UINT16)(GIO_TIMED_TURN_SETTING_Y-GIO_GAP_BN_SETTINGS), GIO_DIF_SETTINGS_WIDTH, 2, GIO_TOGGLE_TEXT_FONT, GIO_TOGGLE_TEXT_COLOR, gzGIOScreenText[ GIO_TIMED_TURN_TITLE_TEXT ], FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED );
  484. usPosY = GIO_TIMED_TURN_SETTING_Y+2;
  485. DisplayWrappedString( (UINT16)(GIO_TIMED_TURN_SETTING_X+GIO_OFFSET_TO_TEXT), usPosY, GIO_DIF_SETTINGS_WIDTH, 2, GIO_TOGGLE_TEXT_FONT, GIO_TOGGLE_TEXT_COLOR, gzGIOScreenText[ GIO_NO_TIMED_TURNS_TEXT ], FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED );
  486. usPosY += GIO_GAP_BN_SETTINGS;
  487. DisplayWrappedString( (UINT16)(GIO_TIMED_TURN_SETTING_X+GIO_OFFSET_TO_TEXT), usPosY, GIO_DIF_SETTINGS_WIDTH, 2, GIO_TOGGLE_TEXT_FONT, GIO_TOGGLE_TEXT_COLOR, gzGIOScreenText[ GIO_TIMED_TURNS_TEXT ], FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED );
  488. */
  489. // JA2Gold: Display the iron man Settings Title Text
  490. DisplayWrappedString( GIO_IRON_MAN_SETTING_X, (UINT16)(GIO_IRON_MAN_SETTING_Y-GIO_GAP_BN_SETTINGS), GIO_DIF_SETTINGS_WIDTH, 2, GIO_TOGGLE_TEXT_FONT, GIO_TOGGLE_TEXT_COLOR, gzGIOScreenText[ GIO_GAME_SAVE_STYLE_TEXT ], FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED );
  491. usPosY = GIO_IRON_MAN_SETTING_Y+2;
  492. DisplayWrappedString( (UINT16)(GIO_IRON_MAN_SETTING_X+GIO_OFFSET_TO_TEXT), usPosY, GIO_DIF_SETTINGS_WIDTH, 2, GIO_TOGGLE_TEXT_FONT, GIO_TOGGLE_TEXT_COLOR, gzGIOScreenText[ GIO_SAVE_ANYWHERE_TEXT ], FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED );
  493. usPosY += GIO_GAP_BN_SETTINGS;
  494. DisplayWrappedString( (UINT16)(GIO_IRON_MAN_SETTING_X+GIO_OFFSET_TO_TEXT), usPosY, GIO_DIF_SETTINGS_WIDTH, 2, GIO_TOGGLE_TEXT_FONT, GIO_TOGGLE_TEXT_COLOR, gzGIOScreenText[ GIO_IRON_MAN_TEXT ], FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED );
  495. usPosY += 20;
  496. DisplayWrappedString( (UINT16)(GIO_IRON_MAN_SETTING_X+GIO_OFFSET_TO_TEXT), usPosY, 220, 2, FONT12ARIAL, GIO_TOGGLE_TEXT_COLOR, zNewTacticalMessages[ TCTL_MSG__CANNOT_SAVE_DURING_COMBAT ], FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED );
  497. //if its the demo, make sure to Display the text for the additional guns
  498. #ifdef JA2DEMO
  499. //Shadow the area around the additional guns
  500. ShadowVideoSurfaceRect( FRAME_BUFFER, 336, 105, 580, 218 ); //358
  501. //Display the text indicatting that the option is disabled for the demo
  502. // DrawTextToScreen( gzGIOScreenText[ GIO_DISABLED_FOR_THE_DEMO_TEXT ], GIO_TIMED_TURN_SETTING_X, (UINT16)(GIO_TIMED_TURN_SETTING_Y-GIO_GAP_BN_SETTINGS), GIO_GUN_SETTINGS_WIDTH, GIO_TOGGLE_TEXT_FONT, GIO_TOGGLE_TEXT_COLOR, FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED );
  503. DisplayWrappedString( 440, (UINT16)(GIO_GUN_SETTINGS_Y-GIO_GAP_BN_SETTINGS), 150, 2, GIO_TOGGLE_TEXT_FONT, 162, gzGIOScreenText[ GIO_DISABLED_FOR_THE_DEMO_TEXT ], FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED );
  504. #endif
  505. return( TRUE );
  506. }
  507. void GetGIOScreenUserInput()
  508. {
  509. InputAtom Event;
  510. // POINT MousePos;
  511. // GetCursorPos(&MousePos);
  512. while( DequeueEvent( &Event ) )
  513. {
  514. if( Event.usEvent == KEY_DOWN )
  515. {
  516. switch( Event.usParam )
  517. {
  518. case ESC:
  519. //Exit out of the screen
  520. gubGameOptionScreenHandler = GIO_CANCEL;
  521. break;
  522. #ifdef JA2TESTVERSION
  523. case 'r':
  524. gfReRenderGIOScreen=TRUE;
  525. break;
  526. case 'i':
  527. InvalidateRegion( 0, 0, 640, 480 );
  528. break;
  529. #endif
  530. case ENTER:
  531. gubGameOptionScreenHandler = GIO_EXIT;
  532. break;
  533. }
  534. }
  535. }
  536. }
  537. void BtnDifficultyTogglesCallback( GUI_BUTTON *btn, INT32 reason )
  538. {
  539. if( reason & MSYS_CALLBACK_REASON_LBUTTON_UP )
  540. {
  541. UINT8 ubButton = (UINT8)MSYS_GetBtnUserData( btn, 0 );
  542. if( btn->uiFlags & BUTTON_CLICKED_ON )
  543. {
  544. UINT8 cnt;
  545. for( cnt=0; cnt<NUM_DIFF_SETTINGS; cnt++)
  546. {
  547. ButtonList[ guiDifficultySettingsToggles[ cnt ] ]->uiFlags &= ~BUTTON_CLICKED_ON;
  548. }
  549. //enable the current button
  550. btn->uiFlags |= BUTTON_CLICKED_ON;
  551. }
  552. else
  553. {
  554. UINT8 cnt;
  555. BOOLEAN fAnyChecked=FALSE;
  556. //if none of the other boxes are checked, do not uncheck this box
  557. for( cnt=0; cnt<NUM_GUN_OPTIONS; cnt++)
  558. {
  559. if( ButtonList[ guiDifficultySettingsToggles[ cnt ] ]->uiFlags & BUTTON_CLICKED_ON )
  560. {
  561. fAnyChecked = TRUE;
  562. }
  563. }
  564. //if none are checked, re check this one
  565. if( !fAnyChecked )
  566. btn->uiFlags |= BUTTON_CLICKED_ON;
  567. }
  568. }
  569. }
  570. void BtnGameStyleTogglesCallback( GUI_BUTTON *btn, INT32 reason )
  571. {
  572. if( reason & MSYS_CALLBACK_REASON_LBUTTON_UP )
  573. {
  574. UINT8 ubButton = (UINT8)MSYS_GetBtnUserData( btn, 0 );
  575. if( btn->uiFlags & BUTTON_CLICKED_ON )
  576. {
  577. UINT8 cnt;
  578. for( cnt=0; cnt<NUM_GAME_STYLES; cnt++)
  579. {
  580. ButtonList[ guiGameStyleToggles[ cnt ] ]->uiFlags &= ~BUTTON_CLICKED_ON;
  581. }
  582. //enable the current button
  583. btn->uiFlags |= BUTTON_CLICKED_ON;
  584. }
  585. else
  586. {
  587. UINT8 cnt;
  588. BOOLEAN fAnyChecked=FALSE;
  589. //if none of the other boxes are checked, do not uncheck this box
  590. for( cnt=0; cnt<NUM_GUN_OPTIONS; cnt++)
  591. {
  592. if( ButtonList[ guiGameStyleToggles[ cnt ] ]->uiFlags & BUTTON_CLICKED_ON )
  593. {
  594. fAnyChecked = TRUE;
  595. }
  596. }
  597. //if none are checked, re check this one
  598. if( !fAnyChecked )
  599. btn->uiFlags |= BUTTON_CLICKED_ON;
  600. }
  601. }
  602. }
  603. void BtnGameSaveTogglesCallback( GUI_BUTTON *btn, INT32 reason )
  604. {
  605. if( reason & MSYS_CALLBACK_REASON_LBUTTON_UP )
  606. {
  607. // UINT8 ubButton = (UINT8)MSYS_GetBtnUserData( btn, 0 );
  608. if( btn->uiFlags & BUTTON_CLICKED_ON )
  609. {
  610. UINT8 cnt;
  611. for( cnt=0; cnt<NUM_SAVE_OPTIONS; cnt++)
  612. {
  613. ButtonList[ guiGameSaveToggles[ cnt ] ]->uiFlags &= ~BUTTON_CLICKED_ON;
  614. }
  615. //enable the current button
  616. btn->uiFlags |= BUTTON_CLICKED_ON;
  617. }
  618. else
  619. {
  620. UINT8 cnt;
  621. BOOLEAN fAnyChecked=FALSE;
  622. //if none of the other boxes are checked, do not uncheck this box
  623. for( cnt=0; cnt<NUM_SAVE_OPTIONS; cnt++)
  624. {
  625. if( ButtonList[ guiGameSaveToggles[ cnt ] ]->uiFlags & BUTTON_CLICKED_ON )
  626. {
  627. fAnyChecked = TRUE;
  628. }
  629. }
  630. //if none are checked, re check this one
  631. if( !fAnyChecked )
  632. btn->uiFlags |= BUTTON_CLICKED_ON;
  633. }
  634. }
  635. }
  636. void BtnGunOptionsTogglesCallback( GUI_BUTTON *btn, INT32 reason )
  637. {
  638. if( reason & MSYS_CALLBACK_REASON_LBUTTON_UP )
  639. {
  640. UINT8 ubButton = (UINT8)MSYS_GetBtnUserData( btn, 0 );
  641. if( btn->uiFlags & BUTTON_CLICKED_ON )
  642. {
  643. UINT8 cnt;
  644. for( cnt=0; cnt<NUM_GUN_OPTIONS; cnt++)
  645. {
  646. ButtonList[ guiGunOptionToggles[ cnt ] ]->uiFlags &= ~BUTTON_CLICKED_ON;
  647. }
  648. //enable the current button
  649. btn->uiFlags |= BUTTON_CLICKED_ON;
  650. }
  651. else
  652. {
  653. UINT8 cnt;
  654. BOOLEAN fAnyChecked=FALSE;
  655. //if none of the other boxes are checked, do not uncheck this box
  656. for( cnt=0; cnt<NUM_GUN_OPTIONS; cnt++)
  657. {
  658. if( ButtonList[ guiGunOptionToggles[ cnt ] ]->uiFlags & BUTTON_CLICKED_ON )
  659. {
  660. fAnyChecked = TRUE;
  661. }
  662. }
  663. //if none are checked, re check this one
  664. if( !fAnyChecked )
  665. btn->uiFlags |= BUTTON_CLICKED_ON;
  666. }
  667. }
  668. }
  669. // JA2Gold: no more timed turns setting
  670. /*
  671. void BtnTimedTurnsTogglesCallback( GUI_BUTTON *btn, INT32 reason )
  672. {
  673. if( reason & MSYS_CALLBACK_REASON_LBUTTON_UP )
  674. {
  675. UINT8 ubButton = (UINT8)MSYS_GetBtnUserData( btn, 0 );
  676. if( btn->uiFlags & BUTTON_CLICKED_ON )
  677. {
  678. UINT8 cnt;
  679. for( cnt=0; cnt<GIO_NUM_TIMED_TURN_OPTIONS; cnt++)
  680. {
  681. ButtonList[ guiTimedTurnToggles[ cnt ] ]->uiFlags &= ~BUTTON_CLICKED_ON;
  682. }
  683. //enable the current button
  684. btn->uiFlags |= BUTTON_CLICKED_ON;
  685. }
  686. else
  687. {
  688. UINT8 cnt;
  689. BOOLEAN fAnyChecked=FALSE;
  690. //if none of the other boxes are checked, do not uncheck this box
  691. for( cnt=0; cnt<GIO_NUM_TIMED_TURN_OPTIONS; cnt++)
  692. {
  693. if( ButtonList[ guiTimedTurnToggles[ cnt ] ]->uiFlags & BUTTON_CLICKED_ON )
  694. {
  695. fAnyChecked = TRUE;
  696. }
  697. }
  698. //if none are checked, re check this one
  699. if( !fAnyChecked )
  700. btn->uiFlags |= BUTTON_CLICKED_ON;
  701. }
  702. }
  703. }
  704. */
  705. void BtnGIODoneCallback(GUI_BUTTON *btn,INT32 reason)
  706. {
  707. if(reason & MSYS_CALLBACK_REASON_LBUTTON_DWN )
  708. {
  709. btn->uiFlags |= BUTTON_CLICKED_ON;
  710. InvalidateRegion(btn->Area.RegionTopLeftX, btn->Area.RegionTopLeftY, btn->Area.RegionBottomRightX, btn->Area.RegionBottomRightY);
  711. }
  712. if(reason & MSYS_CALLBACK_REASON_LBUTTON_UP )
  713. {
  714. btn->uiFlags &= (~BUTTON_CLICKED_ON );
  715. //if the user doesnt have IRON MAN mode selected
  716. if( !DisplayMessageToUserAboutIronManMode() )
  717. {
  718. //Confirm the difficulty setting
  719. DisplayMessageToUserAboutGameDifficulty();
  720. }
  721. InvalidateRegion(btn->Area.RegionTopLeftX, btn->Area.RegionTopLeftY, btn->Area.RegionBottomRightX, btn->Area.RegionBottomRightY);
  722. }
  723. }
  724. void BtnGIOCancelCallback(GUI_BUTTON *btn,INT32 reason)
  725. {
  726. if(reason & MSYS_CALLBACK_REASON_LBUTTON_DWN )
  727. {
  728. btn->uiFlags |= BUTTON_CLICKED_ON;
  729. InvalidateRegion(btn->Area.RegionTopLeftX, btn->Area.RegionTopLeftY, btn->Area.RegionBottomRightX, btn->Area.RegionBottomRightY);
  730. }
  731. if(reason & MSYS_CALLBACK_REASON_LBUTTON_UP )
  732. {
  733. btn->uiFlags &= (~BUTTON_CLICKED_ON );
  734. gubGameOptionScreenHandler = GIO_CANCEL;
  735. InvalidateRegion(btn->Area.RegionTopLeftX, btn->Area.RegionTopLeftY, btn->Area.RegionBottomRightX, btn->Area.RegionBottomRightY);
  736. }
  737. }
  738. UINT8 GetCurrentDifficultyButtonSetting()
  739. {
  740. UINT8 cnt;
  741. for( cnt=0; cnt<NUM_DIFF_SETTINGS; cnt++)
  742. {
  743. if( ButtonList[ guiDifficultySettingsToggles[ cnt ] ]->uiFlags & BUTTON_CLICKED_ON )
  744. {
  745. return( cnt );
  746. }
  747. }
  748. return( 0 );
  749. }
  750. UINT8 GetCurrentGameStyleButtonSetting()
  751. {
  752. UINT8 cnt;
  753. for( cnt=0; cnt<NUM_GAME_STYLES; cnt++)
  754. {
  755. if( ButtonList[ guiGameStyleToggles[ cnt ] ]->uiFlags & BUTTON_CLICKED_ON )
  756. {
  757. return( cnt );
  758. }
  759. }
  760. return( 0 );
  761. }
  762. UINT8 GetCurrentGunButtonSetting()
  763. {
  764. UINT8 cnt;
  765. for( cnt=0; cnt<NUM_GUN_OPTIONS; cnt++)
  766. {
  767. if( ButtonList[ guiGunOptionToggles[ cnt ] ]->uiFlags & BUTTON_CLICKED_ON )
  768. {
  769. return( cnt );
  770. }
  771. }
  772. return( 0 );
  773. }
  774. // JA2 Gold: no timed turns
  775. /*
  776. UINT8 GetCurrentTimedTurnsButtonSetting()
  777. {
  778. UINT8 cnt;
  779. for( cnt=0; cnt<GIO_NUM_TIMED_TURN_OPTIONS; cnt++)
  780. {
  781. if( ButtonList[ guiTimedTurnToggles[ cnt ] ]->uiFlags & BUTTON_CLICKED_ON )
  782. {
  783. return( cnt );
  784. }
  785. }
  786. return( 0 );
  787. }
  788. */
  789. UINT8 GetCurrentGameSaveButtonSetting()
  790. {
  791. UINT8 cnt;
  792. for( cnt=0; cnt<NUM_SAVE_OPTIONS; cnt++)
  793. {
  794. if( ButtonList[ guiGameSaveToggles[ cnt ] ]->uiFlags & BUTTON_CLICKED_ON )
  795. {
  796. return( cnt );
  797. }
  798. }
  799. return( 0 );
  800. }
  801. void RestoreGIOButtonBackGrounds()
  802. {
  803. UINT8 cnt;
  804. UINT16 usPosY;
  805. usPosY = GIO_DIF_SETTINGS_Y-GIO_OFFSET_TO_TOGGLE_BOX_Y;
  806. //Check box to toggle Difficulty settings
  807. for( cnt=0; cnt<NUM_DIFF_SETTINGS; cnt++)
  808. {
  809. RestoreExternBackgroundRect( GIO_DIF_SETTINGS_X+GIO_OFFSET_TO_TOGGLE_BOX, usPosY, 34, 29 );
  810. usPosY += GIO_GAP_BN_SETTINGS;
  811. }
  812. usPosY = GIO_GAME_SETTINGS_Y-GIO_OFFSET_TO_TOGGLE_BOX_Y;
  813. //Check box to toggle Game settings ( realistic, sci fi )
  814. for( cnt=0; cnt<NUM_GAME_STYLES; cnt++)
  815. {
  816. RestoreExternBackgroundRect( GIO_GAME_SETTINGS_X+GIO_OFFSET_TO_TOGGLE_BOX, usPosY, 34, 29 );
  817. usPosY += GIO_GAP_BN_SETTINGS;
  818. }
  819. usPosY = GIO_GUN_SETTINGS_Y-GIO_OFFSET_TO_TOGGLE_BOX_Y;
  820. //Check box to toggle Gun options
  821. for( cnt=0; cnt<NUM_GUN_OPTIONS; cnt++)
  822. {
  823. RestoreExternBackgroundRect( GIO_GUN_SETTINGS_X+GIO_OFFSET_TO_TOGGLE_BOX, usPosY, 34, 29 );
  824. usPosY += GIO_GAP_BN_SETTINGS;
  825. }
  826. // JA2Gold: no more timed turns setting
  827. /*
  828. //Check box to toggle timed turns options
  829. usPosY = GIO_TIMED_TURN_SETTING_Y-GIO_OFFSET_TO_TOGGLE_BOX_Y;
  830. for( cnt=0; cnt<GIO_NUM_TIMED_TURN_OPTIONS; cnt++)
  831. {
  832. RestoreExternBackgroundRect( GIO_TIMED_TURN_SETTING_X+GIO_OFFSET_TO_TOGGLE_BOX, usPosY, 34, 29 );
  833. usPosY += GIO_GAP_BN_SETTINGS;
  834. }
  835. */
  836. //Check box to toggle iron man options
  837. usPosY = GIO_IRON_MAN_SETTING_Y-GIO_OFFSET_TO_TOGGLE_BOX_Y;
  838. for( cnt=0; cnt<NUM_SAVE_OPTIONS; cnt++)
  839. {
  840. RestoreExternBackgroundRect( GIO_IRON_MAN_SETTING_X+GIO_OFFSET_TO_TOGGLE_BOX, usPosY, 34, 29 );
  841. usPosY += GIO_GAP_BN_SETTINGS;
  842. }
  843. }
  844. void DoneFadeOutForExitGameInitOptionScreen( void )
  845. {
  846. // loop through and get the status of all the buttons
  847. gGameOptions.fGunNut = GetCurrentGunButtonSetting();
  848. gGameOptions.fSciFi = GetCurrentGameStyleButtonSetting();
  849. gGameOptions.ubDifficultyLevel = GetCurrentDifficultyButtonSetting() + 1;
  850. // JA2Gold: no more timed turns setting
  851. //gGameOptions.fTurnTimeLimit = GetCurrentTimedTurnsButtonSetting();
  852. // JA2Gold: iron man
  853. gGameOptions.fIronManMode = GetCurrentGameSaveButtonSetting();
  854. // gubGIOExitScreen = INIT_SCREEN;
  855. gubGIOExitScreen = INTRO_SCREEN;
  856. //set the fact that we should do the intro videos
  857. // gbIntroScreenMode = INTRO_BEGINING;
  858. #ifdef JA2TESTVERSION
  859. if( gfKeyState[ ALT ] )
  860. {
  861. if( gfKeyState[ CTRL ] )
  862. {
  863. gMercProfiles[ MIGUEL ].bMercStatus = MERC_IS_DEAD;
  864. gMercProfiles[ SKYRIDER ].bMercStatus = MERC_IS_DEAD;
  865. }
  866. SetIntroType( INTRO_ENDING );
  867. }
  868. else
  869. #endif
  870. SetIntroType( INTRO_BEGINING );
  871. ExitGIOScreen();
  872. // gFadeInDoneCallback = DoneFadeInForExitGameInitOptionScreen;
  873. // FadeInNextFrame( );
  874. SetCurrentCursorFromDatabase( VIDEO_NO_CURSOR );
  875. }
  876. void DoneFadeInForExitGameInitOptionScreen( void )
  877. {
  878. SetCurrentCursorFromDatabase( VIDEO_NO_CURSOR );
  879. }
  880. BOOLEAN DoGioMessageBox( UINT8 ubStyle, INT16 *zString, UINT32 uiExitScreen, UINT16 usFlags, MSGBOX_CALLBACK ReturnCallback )
  881. {
  882. SGPRect CenteringRect= {0, 0, 639, 479 };
  883. // reset exit mode
  884. // gfExitGioDueToMessageBox = TRUE;
  885. // do message box and return
  886. giGioMessageBox = DoMessageBox( ubStyle, zString, uiExitScreen, ( UINT16 ) ( usFlags| MSG_BOX_FLAG_USE_CENTERING_RECT ), ReturnCallback, &CenteringRect );
  887. // send back return state
  888. return( ( giGioMessageBox != -1 ) );
  889. }
  890. void DisplayMessageToUserAboutGameDifficulty()
  891. {
  892. UINT8 ubDiffLevel = GetCurrentDifficultyButtonSetting();
  893. switch( ubDiffLevel )
  894. {
  895. case 0:
  896. DoGioMessageBox( MSG_BOX_BASIC_STYLE, zGioDifConfirmText[GIO_CFS_NOVICE], GAME_INIT_OPTIONS_SCREEN, MSG_BOX_FLAG_YESNO, ConfirmGioDifSettingMessageBoxCallBack );
  897. break;
  898. case 1:
  899. DoGioMessageBox( MSG_BOX_BASIC_STYLE, zGioDifConfirmText[GIO_CFS_EXPERIENCED], GAME_INIT_OPTIONS_SCREEN, MSG_BOX_FLAG_YESNO, ConfirmGioDifSettingMessageBoxCallBack );
  900. break;
  901. case 2:
  902. DoGioMessageBox( MSG_BOX_BASIC_STYLE, zGioDifConfirmText[GIO_CFS_EXPERT], GAME_INIT_OPTIONS_SCREEN, MSG_BOX_FLAG_YESNO, ConfirmGioDifSettingMessageBoxCallBack );
  903. break;
  904. }
  905. }
  906. void ConfirmGioDifSettingMessageBoxCallBack( UINT8 bExitValue )
  907. {
  908. if( bExitValue == MSG_BOX_RETURN_YES )
  909. {
  910. gubGameOptionScreenHandler = GIO_EXIT;
  911. }
  912. }
  913. BOOLEAN DisplayMessageToUserAboutIronManMode()
  914. {
  915. UINT8 ubIronManMode = GetCurrentGameSaveButtonSetting();
  916. //if the user has selected IRON MAN mode
  917. if( ubIronManMode )
  918. {
  919. DoGioMessageBox( MSG_BOX_BASIC_STYLE, gzIronManModeWarningText[ IMM__IRON_MAN_MODE_WARNING_TEXT ], GAME_INIT_OPTIONS_SCREEN, MSG_BOX_FLAG_YESNO, ConfirmGioIronManMessageBoxCallBack );
  920. return( TRUE );
  921. }
  922. return( FALSE );
  923. }
  924. void ConfirmGioIronManMessageBoxCallBack( UINT8 bExitValue )
  925. {
  926. if( bExitValue == MSG_BOX_RETURN_YES )
  927. {
  928. gubGameOptionScreenHandler = GIO_IRON_MAN_MODE;
  929. }
  930. else
  931. {
  932. ButtonList[ guiGameSaveToggles[ GIO_IRON_MAN ] ]->uiFlags &= ~BUTTON_CLICKED_ON;
  933. ButtonList[ guiGameSaveToggles[ GIO_CAN_SAVE ] ]->uiFlags |= BUTTON_CLICKED_ON;
  934. }
  935. }