Initial Source Code commit
Initial commit of original Tiberian Dawn and Red Alert source code converted to build as DLLs, and compatible with the release version of Command & Conquer Remastered.
This commit is contained in:
parent
ea8ecc76fa
commit
03416d24e1
1038 changed files with 629779 additions and 0 deletions
254
REDALERT/WOL_OPT.CPP
Normal file
254
REDALERT/WOL_OPT.CPP
Normal file
|
@ -0,0 +1,254 @@
|
|||
//
|
||||
// Copyright 2020 Electronic Arts Inc.
|
||||
//
|
||||
// TiberianDawn.DLL and RedAlert.dll and corresponding source code is free
|
||||
// software: you can redistribute it and/or modify it under the terms of
|
||||
// the GNU General Public License as published by the Free Software Foundation,
|
||||
// either version 3 of the License, or (at your option) any later version.
|
||||
|
||||
// TiberianDawn.DLL and RedAlert.dll and corresponding source code is distributed
|
||||
// in the hope that it will be useful, but with permitted additional restrictions
|
||||
// under Section 7 of the GPL. See the GNU General Public License in LICENSE.TXT
|
||||
// distributed with this program. You should have received a copy of the
|
||||
// GNU General Public License along with permitted additional restrictions
|
||||
// with this program. If not, see https://github.com/electronicarts/CnC_Remastered_Collection
|
||||
|
||||
#ifdef WOLAPI_INTEGRATION
|
||||
|
||||
// Wol_Opt.cpp - WW online options dialog.
|
||||
// ajw 09/1/98
|
||||
|
||||
#include "function.h"
|
||||
|
||||
#include "IconList.h"
|
||||
#include "WolapiOb.h"
|
||||
#include "WolStrng.h"
|
||||
#include "BigCheck.h"
|
||||
//#include "WolDebug.h"
|
||||
|
||||
extern bool cancel_current_msgbox;
|
||||
|
||||
//***********************************************************************************************
|
||||
bool WOL_Options_Dialog( WolapiObject* pWO, bool bCalledFromGame )
|
||||
{
|
||||
// Returns true only if called from inside game, and the game ended on us unexpectedly.
|
||||
bool bReturn = false;
|
||||
|
||||
bool bEscapeDown = false;
|
||||
bool bReturnDown = false;
|
||||
|
||||
bool bIgnoreReturnDown = false;
|
||||
if( ( ::GetAsyncKeyState( VK_RETURN ) & 0x8000 ) )
|
||||
{
|
||||
// The return key is already down, as we enter the dialog.
|
||||
// Until it comes up again, ignore this fact, so that we don't act on a return press that's not valid.
|
||||
bIgnoreReturnDown = true;
|
||||
}
|
||||
|
||||
/*
|
||||
** Dialog & button dimensions
|
||||
*/
|
||||
#ifdef GERMAN
|
||||
int d_list_w = 180 * RESFACTOR;
|
||||
#else
|
||||
#ifdef FRENCH
|
||||
int d_list_w = 165 * RESFACTOR;
|
||||
#else
|
||||
int d_list_w = 165 * RESFACTOR;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
int d_dialog_w = d_list_w + 40 * RESFACTOR; // dialog width
|
||||
int d_dialog_h = 90 * RESFACTOR; // dialog height
|
||||
int d_dialog_x = (((320 * RESFACTOR) - d_dialog_w) / 2);
|
||||
int d_dialog_y = (((200 * RESFACTOR) - d_dialog_h) / 2);
|
||||
int d_dialog_cx = d_dialog_x + (d_dialog_w / 2); // coord of x-center
|
||||
|
||||
int d_txt8_h = 11 * RESFACTOR; // ht of 8-pt text
|
||||
int d_margin = 7 * RESFACTOR; // margin width/height
|
||||
int x_margin = 16 * RESFACTOR; // margin width/height
|
||||
|
||||
int top_margin = 0;
|
||||
|
||||
// int d_list_w = 100 * RESFACTOR;
|
||||
int d_list_h = 7 * RESFACTOR;
|
||||
int d_list_x = d_dialog_cx - d_list_w / 2;
|
||||
int d_list_y = d_dialog_y + d_margin + 24;
|
||||
|
||||
#if (GERMAN | FRENCH)
|
||||
int d_ok_w = 40 * RESFACTOR;
|
||||
#else
|
||||
int d_ok_w = 40 * RESFACTOR;
|
||||
#endif
|
||||
int d_ok_h = 13 * RESFACTOR;
|
||||
int d_ok_x = d_dialog_cx - d_ok_w / 2;
|
||||
int d_ok_y = d_dialog_y + d_dialog_h - d_ok_h - d_margin;
|
||||
|
||||
/*
|
||||
** Button enumerations
|
||||
*/
|
||||
enum {
|
||||
BUTTON_OK = 100,
|
||||
CHECK_FIND,
|
||||
CHECK_PAGE,
|
||||
CHECK_LANGUAGE,
|
||||
CHECK_ALLGAMES,
|
||||
CHECK_RANKAM,
|
||||
};
|
||||
|
||||
/*
|
||||
** Buttons
|
||||
*/
|
||||
ControlClass* commands = NULL; // the button list
|
||||
|
||||
TextButtonClass OkBtn( BUTTON_OK, TXT_OK, TPF_BUTTON, d_ok_x, d_ok_y, d_ok_w );
|
||||
|
||||
BigCheckBoxClass FindCheck( CHECK_FIND, d_list_x, d_list_y, d_list_w, d_list_h,
|
||||
TXT_WOL_OPTFIND, TPF_6PT_GRAD | TPF_NOSHADOW, pWO->bFindEnabled );
|
||||
BigCheckBoxClass PageCheck( CHECK_PAGE, d_list_x, d_list_y + d_list_h + 2, d_list_w, d_list_h,
|
||||
TXT_WOL_OPTPAGE, TPF_6PT_GRAD | TPF_NOSHADOW, pWO->bPageEnabled );
|
||||
BigCheckBoxClass LanguageCheck( CHECK_LANGUAGE, d_list_x, d_list_y + 2 * ( d_list_h + 2 ), d_list_w, d_list_h,
|
||||
TXT_WOL_OPTLANGUAGE, TPF_6PT_GRAD | TPF_NOSHADOW, pWO->bLangFilter );
|
||||
BigCheckBoxClass GamescopeCheck( CHECK_ALLGAMES, d_list_x, d_list_y + 3 * ( d_list_h + 2 ), d_list_w, d_list_h,
|
||||
TXT_WOL_OPTGAMESCOPE, TPF_6PT_GRAD | TPF_NOSHADOW, !pWO->bAllGamesShown );
|
||||
BigCheckBoxClass RankAMCheck( CHECK_RANKAM, d_list_x, d_list_y + 4 * ( d_list_h + 2 ), d_list_w, d_list_h,
|
||||
TXT_WOL_OPTRANKAM, TPF_6PT_GRAD | TPF_NOSHADOW, !pWO->bShowRankRA );
|
||||
|
||||
/*
|
||||
** Initialize.
|
||||
*/
|
||||
Set_Logic_Page(SeenBuff);
|
||||
|
||||
/*
|
||||
** Create the button list.
|
||||
*/
|
||||
commands = &OkBtn;
|
||||
FindCheck.Add_Tail(*commands);
|
||||
PageCheck.Add_Tail(*commands);
|
||||
LanguageCheck.Add_Tail(*commands);
|
||||
GamescopeCheck.Add_Tail(*commands);
|
||||
RankAMCheck.Add_Tail(*commands);
|
||||
|
||||
/*
|
||||
** Main Processing Loop.
|
||||
*/
|
||||
Keyboard->Clear();
|
||||
bool display = true;
|
||||
bool process = true;
|
||||
while (process) {
|
||||
|
||||
/*
|
||||
** Invoke game callback.
|
||||
*/
|
||||
if( !bCalledFromGame )
|
||||
Call_Back();
|
||||
else
|
||||
{
|
||||
if( Main_Loop() ) // Game ended on us in the background.
|
||||
{
|
||||
process = false;
|
||||
bReturn = true;
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef WIN32
|
||||
/*
|
||||
** If we have just received input focus again after running in the background then
|
||||
** we need to redraw.
|
||||
*/
|
||||
if (AllSurfaces.SurfacesRestored) {
|
||||
AllSurfaces.SurfacesRestored=FALSE;
|
||||
display = true;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
** Refresh display if needed.
|
||||
*/
|
||||
if (display) {
|
||||
|
||||
/*
|
||||
** Display the dialog box.
|
||||
*/
|
||||
Hide_Mouse();
|
||||
Dialog_Box(d_dialog_x, d_dialog_y, d_dialog_w, d_dialog_h);
|
||||
Draw_Caption( TXT_WOL_OPTTITLE, d_dialog_x, d_dialog_y, d_dialog_w );
|
||||
commands->Flag_List_To_Redraw();
|
||||
Show_Mouse();
|
||||
display = false;
|
||||
}
|
||||
|
||||
// Force mouse visible, as some beta testers report unexplicable disappearing cursors.
|
||||
while( Get_Mouse_State() )
|
||||
Show_Mouse();
|
||||
// Be nice to other apps.
|
||||
Sleep( 50 );
|
||||
|
||||
/*
|
||||
** Get user input.
|
||||
*/
|
||||
KeyNumType input = commands->Input();
|
||||
|
||||
// My hack for triggering escape and return on key up instead of down...
|
||||
// The problem that was occurring was that the calling dialog would act on the key up,
|
||||
// though this dialog handled the key down. ajw
|
||||
if( ( ::GetAsyncKeyState( VK_ESCAPE ) & 0x8000 ) )
|
||||
{
|
||||
bEscapeDown = true;
|
||||
}
|
||||
else if( bEscapeDown )
|
||||
{
|
||||
input = (KeyNumType)( BUTTON_OK | KN_BUTTON );
|
||||
bEscapeDown = false;
|
||||
}
|
||||
if( ( ::GetAsyncKeyState( VK_RETURN ) & 0x8000 ) )
|
||||
{
|
||||
if( !bIgnoreReturnDown )
|
||||
bReturnDown = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
bIgnoreReturnDown = false;
|
||||
if( bReturnDown )
|
||||
{
|
||||
input = (KeyNumType)( BUTTON_OK | KN_BUTTON );
|
||||
bReturnDown = false;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
** Process input.
|
||||
*/
|
||||
|
||||
if( cancel_current_msgbox )
|
||||
{
|
||||
cancel_current_msgbox = false;
|
||||
input = (KeyNumType)( BUTTON_OK | KN_BUTTON );
|
||||
}
|
||||
switch( input )
|
||||
{
|
||||
case ( BUTTON_OK | KN_BUTTON ):
|
||||
process = false;
|
||||
break;
|
||||
|
||||
case ( CHECK_FIND | KN_BUTTON ):
|
||||
case ( CHECK_PAGE | KN_BUTTON ):
|
||||
case ( CHECK_LANGUAGE | KN_BUTTON ):
|
||||
case ( CHECK_ALLGAMES | KN_BUTTON ):
|
||||
pWO->SetOptions( FindCheck.IsOn, PageCheck.IsOn, LanguageCheck.IsOn, !GamescopeCheck.IsOn );
|
||||
break;
|
||||
|
||||
case ( CHECK_RANKAM | KN_BUTTON ):
|
||||
pWO->bShowRankRA = !RankAMCheck.IsOn;
|
||||
pWO->bMyRecordUpdated = true;
|
||||
pWO->bShowRankUpdated = true;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
return bReturn;
|
||||
}
|
||||
|
||||
#endif
|
Reference in a new issue