Files
source/Laptop/IMP Personality Quiz.cpp
T
Overhaul d8145755c3 Added window around windowed JA2
Replaced Windows console with freeware console implementation.  Activate in windowed mode with \
Added error and quit if JA2 started in window mode in >16bpp color depth
Fix to enemy sector investigation:  Was deducting from redshirts when elites investigated
Fix AWOL militia (need additional fix to prevent them from being redistributed during after reinforcements)
Fix to tanks to add them in their original spot when a new one cannot be found.  Should modify to remove old wreckage in this case.
AI no longer tries to fire mortar when no room for it
Tanks no longer try to throw knives


git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@1030 3b4a5df2-a311-0410-b5c6-a8a6f20db521
2007-07-08 07:02:56 +00:00

1863 lines
48 KiB
C++

#ifdef PRECOMPILEDHEADERS
#include "Laptop All.h"
#else
#include "CharProfile.h"
#include "IMP Personality Quiz.h"
#include "IMP MainPage.h"
#include "IMP HomePage.h"
#include "IMPVideoObjects.h"
#include "Utilities.h"
#include "WCheck.h"
#include "Debug.h"
#include "WordWrap.h"
#include "Render Dirty.h"
#include "Encrypted File.h"
#include "cursors.h"
#include "laptop.h"
#include "IMP Compile Character.h"
#include "soldier profile type.h"
#include "IMP Text System.h"
#include "input.h"
#include "english.h"
#endif
// Kaiden this line was commented before I screwed with it
//extern struct POINT;
UINT32 giIMPPersonalityQuizButton[ 2 ];
UINT32 giIMPPersonalityQuizButtonImage[ 2 ];
// these are the buttons for the current question
INT32 giIMPPersonalityQuizAnswerButton[ 10 ];
INT32 giIMPPersonalityQuizAnswerButtonImage[ 10 ];
INT32 giPreviousQuestionButton;
INT32 giNextQuestionButton;
INT32 giPreviousQuestionButtonImage;
INT32 giNextQuestionButtonImage;
// this the currently highlighted answer
INT32 iCurrentAnswer = -1;
// the current quiz question
INT32 giCurrentPersonalityQuizQuestion = 0;
INT32 giPreviousPersonalityQuizQuestion = -1;
INT32 giMaxPersonalityQuizQuestion = 0;
// start over flag
BOOLEAN fStartOverFlag = FALSE;
#define BTN_FIRST_COLUMN_X 15
#define BTN_SECOND_COLUMN_X 256
#define INDENT_OFFSET 55
// number of IMP questions
#define MAX_NUMBER_OF_IMP_QUESTIONS 16
// answer list
INT32 iQuizAnswerList[MAX_NUMBER_OF_IMP_QUESTIONS];
// current number of buttons being shown
INT32 iNumberOfPersonaButtons = 0;
// function definitions
void DestroyIMPPersonalityQuizAnswerButtons(INT32 iNumberOfButtons );
void CreateIMPPersonalityQuizAnswerButtons( void );
void CreateIMPPersonalityQuizButtons( void );
void DestroyIMPersonalityQuizButtons( void );
void AddIMPPersonalityQuizAnswerButtons( INT32 iNumberOfButtons );
void DestroyPersonalityQuizButtons( void );
void ResetQuizAnswerButtons( );
void CompileQuestionsInStatsAndWhatNot( void );
void PrintQuizQuestionNumber( void );
void CheckStateOfTheConfirmButton( void );
void HandleIMPQuizKeyBoard( void );
void ToggleQuestionNumberButtonOn( INT32 iAnswerNumber );
void MoveBackAQuestion( void );
void MoveAheadAQuestion( void );
void CheckAndUpdateNextPreviousIMPQuestionButtonStates( void );
// answer button callbacks
void BtnIMPPersonalityQuizAnswer0Callback(GUI_BUTTON *btn,INT32 reason);
void BtnIMPPersonalityQuizAnswer1Callback(GUI_BUTTON *btn,INT32 reason);
void BtnIMPPersonalityQuizAnswer2Callback(GUI_BUTTON *btn,INT32 reason);
void BtnIMPPersonalityQuizAnswer3Callback(GUI_BUTTON *btn,INT32 reason);
void BtnIMPPersonalityQuizAnswer4Callback(GUI_BUTTON *btn,INT32 reason);
void BtnIMPPersonalityQuizAnswer5Callback(GUI_BUTTON *btn,INT32 reason);
void BtnIMPPersonalityQuizAnswer6Callback(GUI_BUTTON *btn,INT32 reason);
void BtnIMPPersonalityQuizAnswer7Callback(GUI_BUTTON *btn,INT32 reason);
void BtnIMPPersonalityQuizAnswer8Callback(GUI_BUTTON *btn,INT32 reason);
void BtnIMPPersonalityQuizAnswer9Callback(GUI_BUTTON *btn,INT32 reason);
// other callbacks
void BtnIMPPersonalityQuizAnswerConfirmCallback(GUI_BUTTON *btn,INT32 reason);
void BtnIMPPersonalityQuizStartOverCallback(GUI_BUTTON *btn,INT32 reason);
void PreviousQuestionButtonCallback( GUI_BUTTON *btn, INT32 iReason );
void NextQuestionButtonCallback( GUI_BUTTON *btn, INT32 iReason );
void EnterIMPPersonalityQuiz( void )
{
// void answers out the quiz
memset( &iQuizAnswerList, -1, sizeof( INT32 ) * MAX_NUMBER_OF_IMP_QUESTIONS );
// if we are entering for first time, reset
if( giCurrentPersonalityQuizQuestion == MAX_NUMBER_OF_IMP_QUESTIONS )
{
giCurrentPersonalityQuizQuestion = 0;
}
// reset previous
giPreviousPersonalityQuizQuestion = -1;
// reset skills, attributes and personality
ResetSkillsAttributesAndPersonality( );
// create/destroy buttons for questions, if needed
CreateIMPPersonalityQuizAnswerButtons( );
// now reset them
ResetQuizAnswerButtons( );
// create other buttons
CreateIMPPersonalityQuizButtons( );
return;
}
void RenderIMPPersonalityQuiz( void )
{
// the background
RenderProfileBackGround( );
// highlight answer
PrintImpText( );
// indent for current and last page numbers
//RenderAttrib2IndentFrame(BTN_FIRST_COLUMN_X + 2, 365 );
// the current and last question numbers
PrintQuizQuestionNumber( );
return;
}
void ExitIMPPersonalityQuiz( void )
{
// set previous to current, we want it's buttons gone!
giPreviousPersonalityQuizQuestion = giCurrentPersonalityQuizQuestion;
// destroy regular quiz buttons: the done and start over buttons
DestroyIMPersonalityQuizButtons( );
// destroy the buttons used for answers
DestroyPersonalityQuizButtons( );
if( fStartOverFlag )
{
fStartOverFlag = FALSE;
giCurrentPersonalityQuizQuestion = 0;
}
return;
}
void HandleIMPPersonalityQuiz( void )
{
// create/destroy buttons for questions, if needed
CreateIMPPersonalityQuizAnswerButtons( );
// handle keyboard input
HandleIMPQuizKeyBoard( );
if( iCurrentAnswer == -1)
{
DisableButton( giIMPPersonalityQuizButton[0] );
}
return;
}
void CreateIMPPersonalityQuizButtons( void )
{
// this function will create the buttons needed for the IMP personality quiz Page
// ths Done button
giIMPPersonalityQuizButtonImage[0]= LoadButtonImage( "LAPTOP\\button_7.sti" ,-1,0,-1,1,-1 );
/* giIMPPersonalityQuizButton[0] = QuickCreateButton( giIMPPersonalityQuizButtonImage[0], LAPTOP_SCREEN_UL_X + ( 197 ), LAPTOP_SCREEN_WEB_UL_Y + ( 310 ),
BUTTON_TOGGLE, MSYS_PRIORITY_HIGHEST - 1,
BtnGenericMouseMoveButtonCallback, (GUI_CALLBACK)BtnIMPPersonalityQuizAnswerConfirmCallback);
*/
giIMPPersonalityQuizButton[0] = CreateIconAndTextButton( giIMPPersonalityQuizButtonImage[0], pImpButtonText[ 8 ], FONT12ARIAL,
FONT_WHITE, DEFAULT_SHADOW,
FONT_WHITE, DEFAULT_SHADOW,
TEXT_CJUSTIFIED,
LAPTOP_SCREEN_UL_X + ( 197 ), LAPTOP_SCREEN_WEB_UL_Y + ( 302 ), BUTTON_TOGGLE, MSYS_PRIORITY_HIGH,
BtnGenericMouseMoveButtonCallback, (GUI_CALLBACK)BtnIMPPersonalityQuizAnswerConfirmCallback);
// start over
giIMPPersonalityQuizButtonImage[ 1 ]= LoadButtonImage( "LAPTOP\\button_5.sti" ,-1,0,-1,1,-1 );
/* giIMPPersonalityQuizButton[ 1 ] = QuickCreateButton( giIMPPersonalityQuizButtonImage[1], LAPTOP_SCREEN_UL_X + ( BTN_FIRST_COLUMN_X ), LAPTOP_SCREEN_WEB_UL_Y + ( 310 ),
BUTTON_TOGGLE, MSYS_PRIORITY_HIGHEST - 1,
BtnGenericMouseMoveButtonCallback, (GUI_CALLBACK)BtnIMPPersonalityQuizStartOverCallback);
*/
giIMPPersonalityQuizButton[ 1 ] = CreateIconAndTextButton( giIMPPersonalityQuizButtonImage[ 1 ], pImpButtonText[ 7 ], FONT12ARIAL,
FONT_WHITE, DEFAULT_SHADOW,
FONT_WHITE, DEFAULT_SHADOW,
TEXT_CJUSTIFIED,
LAPTOP_SCREEN_UL_X + ( BTN_FIRST_COLUMN_X ), LAPTOP_SCREEN_WEB_UL_Y + ( 302 ), BUTTON_TOGGLE, MSYS_PRIORITY_HIGH,
BtnGenericMouseMoveButtonCallback, (GUI_CALLBACK)BtnIMPPersonalityQuizStartOverCallback);
giPreviousQuestionButtonImage = LoadButtonImage( "LAPTOP\\button_3.sti" ,-1,0,-1,1,-1 );
giPreviousQuestionButton = CreateIconAndTextButton( giPreviousQuestionButtonImage, pImpButtonText[ 12 ], FONT12ARIAL,
FONT_WHITE, DEFAULT_SHADOW,
FONT_WHITE, DEFAULT_SHADOW,
TEXT_CJUSTIFIED,
LAPTOP_SCREEN_UL_X + ( 197 ), LAPTOP_SCREEN_WEB_UL_Y + ( 361 ), BUTTON_TOGGLE, MSYS_PRIORITY_HIGH,
BtnGenericMouseMoveButtonCallback, (GUI_CALLBACK)PreviousQuestionButtonCallback);
giNextQuestionButtonImage = LoadButtonImage( "LAPTOP\\button_3.sti" ,-1,0,-1,1,-1 );
giNextQuestionButton = CreateIconAndTextButton( giNextQuestionButtonImage, pImpButtonText[ 13 ], FONT12ARIAL,
FONT_WHITE, DEFAULT_SHADOW,
FONT_WHITE, DEFAULT_SHADOW,
TEXT_CJUSTIFIED,
LAPTOP_SCREEN_UL_X + ( 417 ), LAPTOP_SCREEN_WEB_UL_Y + ( 361 ), BUTTON_TOGGLE, MSYS_PRIORITY_HIGH,
BtnGenericMouseMoveButtonCallback, (GUI_CALLBACK)NextQuestionButtonCallback);
SpecifyButtonTextSubOffsets( giNextQuestionButton, 0, -1, FALSE );
SpecifyButtonTextSubOffsets( giPreviousQuestionButton, 0, -1, FALSE );
DisableButton( giPreviousQuestionButton );
DisableButton( giNextQuestionButton );
SetButtonCursor( giIMPPersonalityQuizButton[0], CURSOR_WWW );
SetButtonCursor( giIMPPersonalityQuizButton[1], CURSOR_WWW );
SetButtonCursor( giPreviousQuestionButton, CURSOR_WWW );
SetButtonCursor( giNextQuestionButton, CURSOR_WWW );
return;
}
void DestroyIMPersonalityQuizButtons( void )
{
// this function will destroy the buttons needed for the IMP personality quiz page
// the done button
RemoveButton(giIMPPersonalityQuizButton[ 0 ] );
UnloadButtonImage(giIMPPersonalityQuizButtonImage[ 0 ] );
// the start over button
RemoveButton(giIMPPersonalityQuizButton[ 1 ] );
UnloadButtonImage(giIMPPersonalityQuizButtonImage[ 1 ] );
// previosu button
RemoveButton( giPreviousQuestionButton );
UnloadButtonImage( giPreviousQuestionButtonImage );
// next button
RemoveButton( giNextQuestionButton );
UnloadButtonImage( giNextQuestionButtonImage );
return;
}
void CreateIMPPersonalityQuizAnswerButtons( void )
{
// this function will create the buttons for the personality quiz answer selections
if( IMP_PERSONALITY_QUIZ != iCurrentImpPage )
{
// not valid pagre, get out
return;
}
if( giCurrentPersonalityQuizQuestion == giPreviousPersonalityQuizQuestion )
{
// mode has not changed, return;
return;
}
// destroy old screens buttons
DestroyPersonalityQuizButtons( );
// re-render screen
RenderProfileBackGround( );
switch( giCurrentPersonalityQuizQuestion )
{
case ( -1 ):
// do nothing
break;
case ( 0 ):
// 6 buttons
iNumberOfPersonaButtons = 6;
break;
case ( 3 ):
// 5 buttons
iNumberOfPersonaButtons = 5;
break;
case ( 5 ):
// 5 buttons
iNumberOfPersonaButtons = 5;
break;
case ( 10 ):
// 5 buttons
iNumberOfPersonaButtons = 5;
break;
case ( 11 ):
// 5 buttons
iNumberOfPersonaButtons = 8;
break;
default:
// 4 buttons
iNumberOfPersonaButtons = 4;
break;
}
AddIMPPersonalityQuizAnswerButtons( iNumberOfPersonaButtons );
ToggleQuestionNumberButtonOn( iQuizAnswerList[ giCurrentPersonalityQuizQuestion ] );
// re render text
PrintImpText( );
// the current and last question numbers
PrintQuizQuestionNumber( );
// title bar
RenderWWWProgramTitleBar( );
return;
}
void DestroyPersonalityQuizButtons( void )
{
// this function will destroy the buttons used in the previous personality question
// destroy old buttons
switch( giPreviousPersonalityQuizQuestion )
{
case ( -1 ):
// do nothing
break;
case ( 0 ):
// 6 buttons
DestroyIMPPersonalityQuizAnswerButtons( 6 );
break;
case ( 3 ):
// 5 buttons
DestroyIMPPersonalityQuizAnswerButtons( 5 );
break;
case ( 5 ):
// 5 buttons
DestroyIMPPersonalityQuizAnswerButtons( 5 );
break;
case ( 10 ):
// 5 buttons
DestroyIMPPersonalityQuizAnswerButtons( 5 );
break;
case ( 11 ):
// 5 buttons
DestroyIMPPersonalityQuizAnswerButtons( 8 );
break;
default:
// 4 buttons
DestroyIMPPersonalityQuizAnswerButtons( 4 );
break;
}
return;
}
void AddIMPPersonalityQuizAnswerButtons( INT32 iNumberOfButtons )
{
// will add iNumberofbuttons to the answer button list
INT32 iCounter = 0;
CHAR16 sString[ 32 ];
for(iCounter = 0; iCounter < iNumberOfButtons; iCounter++)
{
switch( iCounter )
{
case ( 0 ):
giIMPPersonalityQuizAnswerButtonImage[0]= LoadButtonImage( "LAPTOP\\button_6.sti" ,-1,0,-1,1,-1 );
giIMPPersonalityQuizAnswerButton[0] = QuickCreateButton( giIMPPersonalityQuizAnswerButtonImage[0], LAPTOP_SCREEN_UL_X + ( BTN_FIRST_COLUMN_X ), LAPTOP_SCREEN_WEB_UL_Y + ( 97 ),
BUTTON_TOGGLE, MSYS_PRIORITY_HIGHEST - 3,
MSYS_NO_CALLBACK, (GUI_CALLBACK)BtnIMPPersonalityQuizAnswer0Callback);
break;
case ( 1 ):
giIMPPersonalityQuizAnswerButtonImage[1]= LoadButtonImage( "LAPTOP\\button_6.sti" ,-1,0,-1,1,-1 );
giIMPPersonalityQuizAnswerButton[1] = QuickCreateButton( giIMPPersonalityQuizAnswerButtonImage[1], LAPTOP_SCREEN_UL_X + ( BTN_FIRST_COLUMN_X ), LAPTOP_SCREEN_WEB_UL_Y + ( 147 ),
BUTTON_TOGGLE, MSYS_PRIORITY_HIGHEST - 3,
MSYS_NO_CALLBACK, (GUI_CALLBACK)BtnIMPPersonalityQuizAnswer1Callback);
break;
case ( 2 ):
giIMPPersonalityQuizAnswerButtonImage[2]= LoadButtonImage( "LAPTOP\\button_6.sti" ,-1,0,-1,1,-1 );
giIMPPersonalityQuizAnswerButton[2] = QuickCreateButton( giIMPPersonalityQuizAnswerButtonImage[2], LAPTOP_SCREEN_UL_X + ( BTN_FIRST_COLUMN_X ), LAPTOP_SCREEN_WEB_UL_Y + ( 197 ),
BUTTON_TOGGLE, MSYS_PRIORITY_HIGHEST - 3,
MSYS_NO_CALLBACK, (GUI_CALLBACK)BtnIMPPersonalityQuizAnswer2Callback);
break;
case ( 3 ):
giIMPPersonalityQuizAnswerButtonImage[3]= LoadButtonImage( "LAPTOP\\button_6.sti" ,-1,0,-1,1,-1 );
giIMPPersonalityQuizAnswerButton[3] = QuickCreateButton( giIMPPersonalityQuizAnswerButtonImage[3], LAPTOP_SCREEN_UL_X + ( BTN_FIRST_COLUMN_X ), LAPTOP_SCREEN_WEB_UL_Y + ( 247 ),
BUTTON_TOGGLE, MSYS_PRIORITY_HIGHEST - 3,
MSYS_NO_CALLBACK, (GUI_CALLBACK)BtnIMPPersonalityQuizAnswer3Callback);
break;
case ( 4 ):
giIMPPersonalityQuizAnswerButtonImage[4]= LoadButtonImage( "LAPTOP\\button_6.sti" ,-1,0,-1,1,-1 );
giIMPPersonalityQuizAnswerButton[4] = QuickCreateButton( giIMPPersonalityQuizAnswerButtonImage[4], LAPTOP_SCREEN_UL_X + ( BTN_SECOND_COLUMN_X ), LAPTOP_SCREEN_WEB_UL_Y + ( 97 ),
BUTTON_TOGGLE, MSYS_PRIORITY_HIGHEST - 1,
MSYS_NO_CALLBACK, (GUI_CALLBACK)BtnIMPPersonalityQuizAnswer4Callback);
break;
case ( 5 ):
giIMPPersonalityQuizAnswerButtonImage[5]= LoadButtonImage( "LAPTOP\\button_6.sti" ,-1,0,-1,1,-1 );
giIMPPersonalityQuizAnswerButton[5] = QuickCreateButton( giIMPPersonalityQuizAnswerButtonImage[5], LAPTOP_SCREEN_UL_X + ( BTN_SECOND_COLUMN_X ), LAPTOP_SCREEN_WEB_UL_Y + ( 147 ),
BUTTON_TOGGLE, MSYS_PRIORITY_HIGHEST - 3,
MSYS_NO_CALLBACK, (GUI_CALLBACK)BtnIMPPersonalityQuizAnswer5Callback);
break;
case ( 6 ):
giIMPPersonalityQuizAnswerButtonImage[6]= LoadButtonImage( "LAPTOP\\button_6.sti" ,-1,0,-1,1,-1 );
giIMPPersonalityQuizAnswerButton[6] = QuickCreateButton( giIMPPersonalityQuizAnswerButtonImage[6], LAPTOP_SCREEN_UL_X + ( BTN_SECOND_COLUMN_X ), LAPTOP_SCREEN_WEB_UL_Y + ( 197 ),
BUTTON_TOGGLE, MSYS_PRIORITY_HIGHEST - 3,
MSYS_NO_CALLBACK, (GUI_CALLBACK)BtnIMPPersonalityQuizAnswer6Callback);
break;
case ( 7 ):
giIMPPersonalityQuizAnswerButtonImage[7]= LoadButtonImage( "LAPTOP\\button_6.sti" ,-1,0,-1,1,-1 );
giIMPPersonalityQuizAnswerButton[7] = QuickCreateButton( giIMPPersonalityQuizAnswerButtonImage[7], LAPTOP_SCREEN_UL_X + ( BTN_SECOND_COLUMN_X ), LAPTOP_SCREEN_WEB_UL_Y + ( 247 ),
BUTTON_TOGGLE, MSYS_PRIORITY_HIGHEST - 3,
MSYS_NO_CALLBACK, (GUI_CALLBACK)BtnIMPPersonalityQuizAnswer7Callback);
break;
case ( 8 ):
giIMPPersonalityQuizAnswerButtonImage[8]= LoadButtonImage( "LAPTOP\\button_6.sti" ,-1,0,-1,1,-1 );
giIMPPersonalityQuizAnswerButton[8] = QuickCreateButton( giIMPPersonalityQuizAnswerButtonImage[8], LAPTOP_SCREEN_UL_X + ( ( BTN_SECOND_COLUMN_X ) ), LAPTOP_SCREEN_WEB_UL_Y + ( 268 ),
BUTTON_TOGGLE, MSYS_PRIORITY_HIGHEST - 3,
MSYS_NO_CALLBACK, (GUI_CALLBACK)BtnIMPPersonalityQuizAnswer8Callback);
break;
case ( 9 ):
giIMPPersonalityQuizAnswerButtonImage[9]= LoadButtonImage( "LAPTOP\\button_6.sti" ,-1,0,-1,1,-1 );
giIMPPersonalityQuizAnswerButton[9] = QuickCreateButton( giIMPPersonalityQuizAnswerButtonImage[9], LAPTOP_SCREEN_UL_X + ( ( 276 - 46 ) / 2 ), LAPTOP_SCREEN_WEB_UL_Y + ( 147 ),
BUTTON_TOGGLE, MSYS_PRIORITY_HIGHEST - 3,
MSYS_NO_CALLBACK, (GUI_CALLBACK)BtnIMPPersonalityQuizAnswer9Callback);
break;
}
swprintf( sString, L"%d", iCounter + 1 );
SpecifyButtonUpTextColors( giIMPPersonalityQuizAnswerButton[ iCounter ], FONT_WHITE, FONT_BLACK );
SpecifyButtonDownTextColors( giIMPPersonalityQuizAnswerButton[ iCounter ], FONT_WHITE, FONT_BLACK );
SpecifyButtonTextOffsets( giIMPPersonalityQuizAnswerButton[ iCounter ], +23, +12, TRUE );
SpecifyButtonFont( giIMPPersonalityQuizAnswerButton[ iCounter ], FONT12ARIAL );
SpecifyButtonText( giIMPPersonalityQuizAnswerButton[ iCounter ], sString );
SetButtonCursor( giIMPPersonalityQuizAnswerButton[ iCounter ], CURSOR_WWW);
}
// previous is current
giPreviousPersonalityQuizQuestion = giCurrentPersonalityQuizQuestion;
return;
}
void DestroyIMPPersonalityQuizAnswerButtons(INT32 iNumberOfButtons )
{
INT32 iCounter = 0;
for(iCounter = 0; iCounter < iNumberOfButtons; iCounter++)
{
RemoveButton(giIMPPersonalityQuizAnswerButton[ iCounter ] );
UnloadButtonImage(giIMPPersonalityQuizAnswerButtonImage[ iCounter ] );
giIMPPersonalityQuizAnswerButton[ iCounter ] = -1;
}
return;
}
void BtnIMPPersonalityQuizAnswer0Callback(GUI_BUTTON *btn,INT32 reason)
{
// btn callback for IMP personality quiz answer button
if (!(btn->uiFlags & BUTTON_ENABLED))
return;
if( reason & MSYS_CALLBACK_REASON_LBUTTON_DWN )
{
btn->uiFlags|=(BUTTON_CLICKED_ON);
if (btn->uiFlags & BUTTON_CLICKED_ON)
{
// reset buttons
ResetQuizAnswerButtons( );
// ok, check to see if button was disabled, if so, re enable
CheckStateOfTheConfirmButton( );
iCurrentAnswer = 0;
// now set this button on
btn->uiFlags|=(BUTTON_CLICKED_ON);
// highlight answer
PrintImpText( );
// the current and last question numbers
PrintQuizQuestionNumber( );
fReDrawCharProfile = TRUE;
}
}
}
void BtnIMPPersonalityQuizAnswer1Callback(GUI_BUTTON *btn,INT32 reason)
{
// btn callback for IMP personality quiz answer button
if (!(btn->uiFlags & BUTTON_ENABLED))
return;
if( reason & MSYS_CALLBACK_REASON_LBUTTON_DWN )
{
btn->uiFlags|=(BUTTON_CLICKED_ON);
if (btn->uiFlags & BUTTON_CLICKED_ON)
{
// reset buttons
ResetQuizAnswerButtons( );
// now set this button on
btn->uiFlags|=(BUTTON_CLICKED_ON);
// ok, check to see if button was disabled, if so, re enable
CheckStateOfTheConfirmButton( );
iCurrentAnswer = 1;
// highlight answer
PrintImpText( );
// the current and last question numbers
PrintQuizQuestionNumber( );
fReDrawCharProfile = TRUE;
}
}
}
void BtnIMPPersonalityQuizAnswer2Callback(GUI_BUTTON *btn,INT32 reason)
{
// btn callback for IMP personality quiz answer button
if (!(btn->uiFlags & BUTTON_ENABLED))
return;
if( reason & MSYS_CALLBACK_REASON_LBUTTON_DWN )
{
btn->uiFlags|=(BUTTON_CLICKED_ON);
if (btn->uiFlags & BUTTON_CLICKED_ON)
{
// reset buttons
ResetQuizAnswerButtons( );
// now set this button on
btn->uiFlags|=(BUTTON_CLICKED_ON);
// ok, check to see if button was disabled, if so, re enable
CheckStateOfTheConfirmButton( );
iCurrentAnswer = 2;
// highlight answer
PrintImpText( );
// the current and last question numbers
PrintQuizQuestionNumber( );
fReDrawCharProfile = TRUE;
}
}
}
void BtnIMPPersonalityQuizAnswer3Callback(GUI_BUTTON *btn,INT32 reason)
{
// btn callback for IMP personality quiz answer button
if (!(btn->uiFlags & BUTTON_ENABLED))
return;
if( reason & MSYS_CALLBACK_REASON_LBUTTON_DWN )
{
btn->uiFlags|=(BUTTON_CLICKED_ON);
if (btn->uiFlags & BUTTON_CLICKED_ON)
{
// reset buttons
ResetQuizAnswerButtons( );
// now set this button on
btn->uiFlags|=(BUTTON_CLICKED_ON);
// ok, check to see if button was disabled, if so, re enable
CheckStateOfTheConfirmButton( );
iCurrentAnswer = 3;
// highlight answer
PrintImpText( );
// the current and last question numbers
PrintQuizQuestionNumber( );
fReDrawCharProfile = TRUE;
}
}
}
void BtnIMPPersonalityQuizAnswer4Callback(GUI_BUTTON *btn,INT32 reason)
{
// btn callback for IMP personality quiz answer button
if (!(btn->uiFlags & BUTTON_ENABLED))
return;
if( reason & MSYS_CALLBACK_REASON_LBUTTON_DWN )
{
btn->uiFlags|=(BUTTON_CLICKED_ON);
if (btn->uiFlags & BUTTON_CLICKED_ON)
{
// reset buttons
ResetQuizAnswerButtons( );
// now set this button on
btn->uiFlags|=(BUTTON_CLICKED_ON);
// ok, check to see if button was disabled, if so, re enable
CheckStateOfTheConfirmButton( );
iCurrentAnswer = 4;
// highlight answer
PrintImpText( );
// the current and last question numbers
PrintQuizQuestionNumber( );
fReDrawCharProfile = TRUE;
}
}
}
void BtnIMPPersonalityQuizAnswer5Callback(GUI_BUTTON *btn,INT32 reason)
{
// btn callback for IMP personality quiz answer button
if (!(btn->uiFlags & BUTTON_ENABLED))
return;
if( reason & MSYS_CALLBACK_REASON_LBUTTON_DWN )
{
btn->uiFlags|=(BUTTON_CLICKED_ON);
if (btn->uiFlags & BUTTON_CLICKED_ON)
{
// reset buttons
ResetQuizAnswerButtons( );
// now set this button on
btn->uiFlags|=(BUTTON_CLICKED_ON);
// ok, check to see if button was disabled, if so, re enable
CheckStateOfTheConfirmButton( );
iCurrentAnswer = 5;
// highlight answer
PrintImpText( );
// the current and last question numbers
PrintQuizQuestionNumber( );
fReDrawCharProfile = TRUE;
}
}
}
void BtnIMPPersonalityQuizAnswer6Callback(GUI_BUTTON *btn,INT32 reason)
{
// btn callback for IMP personality quiz answer button
if (!(btn->uiFlags & BUTTON_ENABLED))
return;
if( reason & MSYS_CALLBACK_REASON_LBUTTON_DWN )
{
btn->uiFlags|=(BUTTON_CLICKED_ON);
if (btn->uiFlags & BUTTON_CLICKED_ON)
{
// reset buttons
ResetQuizAnswerButtons( );
// now set this button on
btn->uiFlags|=(BUTTON_CLICKED_ON);
// ok, check to see if button was disabled, if so, re enable
CheckStateOfTheConfirmButton( );
iCurrentAnswer = 6;
// highlight answer
PrintIMPPersonalityQuizQuestionAndAnsers( );
// the current and last question numbers
PrintQuizQuestionNumber( );
fReDrawCharProfile = TRUE;
}
}
}
void BtnIMPPersonalityQuizAnswer7Callback(GUI_BUTTON *btn,INT32 reason)
{
// btn callback for IMP personality quiz answer button
if (!(btn->uiFlags & BUTTON_ENABLED))
return;
if( reason & MSYS_CALLBACK_REASON_LBUTTON_DWN )
{
btn->uiFlags|=(BUTTON_CLICKED_ON);
if (btn->uiFlags & BUTTON_CLICKED_ON)
{
// reset buttons
ResetQuizAnswerButtons( );
// now set this button on
btn->uiFlags|=(BUTTON_CLICKED_ON);
// ok, check to see if button was disabled, if so, re enable
CheckStateOfTheConfirmButton( );
iCurrentAnswer = 7;
// redraw text
PrintImpText( );
// the current and last question numbers
PrintQuizQuestionNumber( );
fReDrawCharProfile = TRUE;
}
}
}
void BtnIMPPersonalityQuizAnswer8Callback(GUI_BUTTON *btn,INT32 reason)
{
// btn callback for IMP personality quiz answer button
if (!(btn->uiFlags & BUTTON_ENABLED))
return;
if( reason & MSYS_CALLBACK_REASON_LBUTTON_DWN )
{
btn->uiFlags|=(BUTTON_CLICKED_ON);
if (btn->uiFlags & BUTTON_CLICKED_ON)
{
// reset buttons
ResetQuizAnswerButtons( );
// now set this button on
btn->uiFlags|=(BUTTON_CLICKED_ON);
// ok, check to see if button was disabled, if so, re enable
CheckStateOfTheConfirmButton( );
iCurrentAnswer = 8;
PrintImpText( );
// the current and last question numbers
PrintQuizQuestionNumber( );
fReDrawCharProfile = TRUE;
}
}
}
void BtnIMPPersonalityQuizAnswer9Callback(GUI_BUTTON *btn,INT32 reason)
{
// btn callback for IMP personality quiz answer button
if (!(btn->uiFlags & BUTTON_ENABLED))
return;
if( reason & MSYS_CALLBACK_REASON_LBUTTON_DWN )
{
btn->uiFlags|=(BUTTON_CLICKED_ON);
if (btn->uiFlags & BUTTON_CLICKED_ON)
{
// reset buttons
ResetQuizAnswerButtons( );
// now set this button on
btn->uiFlags|=(BUTTON_CLICKED_ON);
// ok, check to see if button was disabled, if so, re enable
CheckStateOfTheConfirmButton( );
iCurrentAnswer = 9;
// highlight answer
PrintIMPPersonalityQuizQuestionAndAnsers( );
// the current and last question numbers
PrintQuizQuestionNumber( );
}
}
}
void BtnIMPPersonalityQuizAnswerConfirmCallback(GUI_BUTTON *btn,INT32 reason)
{
// btn callback for IMP personality quiz answer button
if (!(btn->uiFlags & BUTTON_ENABLED))
return;
if( reason & MSYS_CALLBACK_REASON_LBUTTON_DWN )
{
btn->uiFlags|=(BUTTON_CLICKED_ON);
}
else if( reason & MSYS_CALLBACK_REASON_LBUTTON_UP )
{
if (btn->uiFlags & BUTTON_CLICKED_ON)
{
btn->uiFlags&=~(BUTTON_CLICKED_ON);
if( iCurrentAnswer != -1)
{
// reset all the buttons
ResetQuizAnswerButtons( );
// copy the answer into the list
iQuizAnswerList[ giCurrentPersonalityQuizQuestion ] = iCurrentAnswer;
// reset answer for next question
iCurrentAnswer = -1;
// next question, JOHNNY!
if( giCurrentPersonalityQuizQuestion == giMaxPersonalityQuizQuestion )
{
giMaxPersonalityQuizQuestion++;
}
giCurrentPersonalityQuizQuestion++;
CheckAndUpdateNextPreviousIMPQuestionButtonStates();
// OPPS!, done..time to finish up
if( giCurrentPersonalityQuizQuestion > 15)
{
iCurrentImpPage = IMP_PERSONALITY_FINISH;
// process
CompileQuestionsInStatsAndWhatNot( );
}
}
}
}
}
void BtnIMPPersonalityQuizStartOverCallback(GUI_BUTTON *btn,INT32 reason)
{
// btn callback for IMP personality quiz answer button
if (!(btn->uiFlags & BUTTON_ENABLED))
return;
if( reason & MSYS_CALLBACK_REASON_LBUTTON_DWN )
{
btn->uiFlags|=(BUTTON_CLICKED_ON);
}
else if( reason & MSYS_CALLBACK_REASON_LBUTTON_UP )
{
if (btn->uiFlags & BUTTON_CLICKED_ON)
{
btn->uiFlags&=~(BUTTON_CLICKED_ON);
giPreviousPersonalityQuizQuestion = giCurrentPersonalityQuizQuestion;
giMaxPersonalityQuizQuestion = 0;
fStartOverFlag = TRUE;
iCurrentImpPage = IMP_PERSONALITY;
fButtonPendingFlag = TRUE;
iCurrentAnswer = -1;
}
}
}
void ResetQuizAnswerButtons( void )
{
INT32 iCounter = 0;
INT32 iCnt = 0;
// how many buttons to reset?
switch( giCurrentPersonalityQuizQuestion )
{
case ( -1 ):
// do nothing
return;
break;
case ( 0 ):
// 6 buttons
iCounter =6;
break;
case ( 3 ):
// 5 buttons
iCounter = 5;
break;
case ( 5 ):
// 6 buttons
iCounter = 5;
break;
case ( 10 ):
// 6 buttons
iCounter = 5;
break;
case ( 11 ):
// 9 buttons
iCounter = 8;
break;
default:
// 4 buttons
iCounter = 4;
break;
}
// now run through and reset the buttons
for(iCnt = 0; iCnt < iCounter; iCnt++)
{
ButtonList[ giIMPPersonalityQuizAnswerButton[ iCnt ] ]->uiFlags &= ~(BUTTON_CLICKED_ON);
}
return;
}
void CompileQuestionsInStatsAndWhatNot( void )
{
// one BIG case/switch statement to determine what values are added where
INT32 iCurrentQuestion = 0;
for( iCurrentQuestion= 0; iCurrentQuestion < MAX_NUMBER_OF_IMP_QUESTIONS; iCurrentQuestion++ )
{
switch( iCurrentQuestion )
{
// ok, run throught he list of questions
case ( 0 ):
switch( iQuizAnswerList[ iCurrentQuestion ] )
{
case( 0 ):
if( fCharacterIsMale )
{
// Martial arts
AddSkillToSkillList( MARTIALARTS );
}
else
{
// for women, ambidexterious
AddSkillToSkillList( AMBIDEXT );
}
break;
case( 1 ):
AddAnAttitudeToAttitudeList( ATT_LONER );
break;
case( 2 ):
// hand to hand
AddSkillToSkillList( HANDTOHAND );
break;
case( 3 ):
// lock picking
AddSkillToSkillList( LOCKPICKING );
break;
case( 4 ):
// throwing
AddSkillToSkillList( THROWING );
break;
case( 5 ):
// optimist
AddAnAttitudeToAttitudeList( ATT_OPTIMIST );
break;
}
break;
case ( 1 ):
switch( iQuizAnswerList[ iCurrentQuestion ] )
{
case( 0 ):
// teaching
AddSkillToSkillList( TEACHING );
break;
case( 1 ):
AddSkillToSkillList( STEALTHY );
break;
case( 2 ):
// psycho
AddAPersonalityToPersonalityList( PSYCHO );
break;
case( 3 ):
AddAnAttitudeToAttitudeList( ATT_FRIENDLY );
break;
}
break;
case ( 2 ):
switch( iQuizAnswerList[ iCurrentQuestion ] )
{
case( 0 ):
// lock picking
AddSkillToSkillList( LOCKPICKING );
break;
case( 1 ):
// arrogant
AddAnAttitudeToAttitudeList( ATT_ARROGANT );
break;
case( 2 ):
AddSkillToSkillList( STEALTHY );
break;
case( 3 ):
// normal
AddAnAttitudeToAttitudeList( ATT_NORMAL );
break;
}
break;
case ( 3 ):
switch( iQuizAnswerList[ iCurrentQuestion ] )
{
case( 0 ):
// automatic weapons
AddSkillToSkillList( AUTO_WEAPS );
break;
case( 1 ):
// friendly
AddAnAttitudeToAttitudeList( ATT_FRIENDLY );
break;
case( 2 ):
// normal
AddAnAttitudeToAttitudeList( ATT_NORMAL );
break;
case( 3 ):
// asshole
AddAnAttitudeToAttitudeList( ATT_ASSHOLE );
break;
case( 4 ):
AddAnAttitudeToAttitudeList( ATT_LONER );
break;
}
break;
case ( 4 ):
switch( iQuizAnswerList[ iCurrentQuestion ] )
{
case( 0 ):
// coward
AddAnAttitudeToAttitudeList( ATT_COWARD );
break;
case( 1 ):
// none
break;
case( 2 ):
// aggressive
AddAnAttitudeToAttitudeList( ATT_AGGRESSIVE );
break;
case( 3 ):
// none
break;
}
break;
case ( 5 ):
switch( iQuizAnswerList[ iCurrentQuestion ] )
{
case( 0 ):
// coward
AddAnAttitudeToAttitudeList( ATT_COWARD );
break;
case( 1 ):
AddSkillToSkillList( NIGHTOPS );
break;
case( 2 ):
// dont like boxes much
AddAPersonalityToPersonalityList( CLAUSTROPHOBIC );
break;
case( 3 ):
// none
break;
case( 4 ):
// none
break;
}
break;
case ( 6 ):
switch( iQuizAnswerList[ iCurrentQuestion ] )
{
case( 0 ):
// electronics
AddSkillToSkillList( ELECTRONICS );
break;
case( 1 ):
//knifing
AddSkillToSkillList( KNIFING );
break;
case( 2 ):
AddSkillToSkillList( NIGHTOPS );
break;
case( 3 ):
// none
break;
}
break;
case ( 7 ):
switch( iQuizAnswerList[ iCurrentQuestion ] )
{
case( 0 ):
// ambidexterous
AddSkillToSkillList( AMBIDEXT );
break;
case( 1 ):
// none
break;
case( 2 ):
// optimist
AddAnAttitudeToAttitudeList( ATT_OPTIMIST );
break;
case( 3 ):
// psycho
AddAPersonalityToPersonalityList( PSYCHO );
break;
}
break;
case ( 8 ):
switch( iQuizAnswerList[ iCurrentQuestion ] )
{
case( 0 ):
// forgetful
AddAPersonalityToPersonalityList( FORGETFUL );
break;
case( 1 ):
// none
case( 2 ):
// pessimist
AddAnAttitudeToAttitudeList( ATT_PESSIMIST );
break;
case( 3 ):
// nervous
AddAPersonalityToPersonalityList( NERVOUS );
break;
}
break;
case ( 9 ):
switch( iQuizAnswerList[ iCurrentQuestion ] )
{
case( 0 ):
// none
break;
case( 1 ):
// pessimist
AddAnAttitudeToAttitudeList( ATT_PESSIMIST );
break;
case( 2 ):
// asshole
AddAnAttitudeToAttitudeList( ATT_ASSHOLE );
break;
case( 3 ):
// nervous
AddAPersonalityToPersonalityList( NERVOUS );
break;
}
break;
case ( 10 ):
switch( iQuizAnswerList[ iCurrentQuestion ] )
{
case( 0 ):
// none
break;
case( 1 ):
// teaching
AddSkillToSkillList( TEACHING );
break;
case( 2 ):
// aggressive
AddAnAttitudeToAttitudeList( ATT_AGGRESSIVE );
break;
case( 3 ):
// normal
AddAnAttitudeToAttitudeList( ATT_NORMAL );
break;
case( 4 ):
// none
break;
}
break;
case ( 11 ):
switch( iQuizAnswerList[ iCurrentQuestion ] )
{
case( 0 ):
if( fCharacterIsMale )
{
// Martial arts
AddSkillToSkillList( MARTIALARTS );
}
else
{
// for women, ambidexterious
AddSkillToSkillList( AMBIDEXT );
}
break;
case( 1 ):
//knifing
AddSkillToSkillList( KNIFING );
break;
case( 2 ):
// none
break;
case( 3 ):
// automatic weapons
AddSkillToSkillList( AUTO_WEAPS );
break;
case( 4 ):
// hand to hand
AddSkillToSkillList( HANDTOHAND );
break;
case( 5 ):
// electronics
AddSkillToSkillList( ELECTRONICS );
break;
case( 6 ):
// ashole
break;
case( 7 ):
// none
break;
}
break;
case ( 12 ):
switch( iQuizAnswerList[ iCurrentQuestion ] )
{
case( 0 ):
// forgetful
AddAPersonalityToPersonalityList( FORGETFUL );
break;
case( 1 ):
// normal
AddAnAttitudeToAttitudeList( ATT_NORMAL );
break;
case( 2 ):
// normal
AddAnAttitudeToAttitudeList( ATT_NORMAL );
break;
case( 3 ):
// heat problems
AddAPersonalityToPersonalityList( HEAT_INTOLERANT );
break;
}
break;
case ( 13 ):
switch( iQuizAnswerList[ iCurrentQuestion ] )
{
case( 0 ):
// dont like boxes much
AddAPersonalityToPersonalityList( CLAUSTROPHOBIC );
break;
case( 1 ):
// normal
AddAnAttitudeToAttitudeList( ATT_NORMAL );
break;
case( 2 ):
// heat problems
AddAPersonalityToPersonalityList( HEAT_INTOLERANT );
break;
case( 3 ):
// none
break;
}
break;
case ( 14 ):
switch( iQuizAnswerList[ iCurrentQuestion ] )
{
case( 0 ):
// throwing
AddSkillToSkillList( THROWING );
break;
case( 1 ):
// ambidexterous
AddSkillToSkillList( AMBIDEXT );
break;
case( 3 ):
// none
break;
case( 2 ):
AddAnAttitudeToAttitudeList( ATT_ARROGANT );
break;
}
break;
case ( 15 ):
switch( iQuizAnswerList[ iCurrentQuestion ] )
{
case( 0 ):
// none !
break;
case( 1 ):
// none !
break;
case( 2 ):
// none !
break;
case( 3 ):
// none !
break;
}
break;
}
}
}
void BltAnswerIndents( INT32 iNumberOfIndents )
{
INT32 iCounter = 0;
// the question indent
RenderQtnIndentFrame( 15, 20 );
// the answers
for( iCounter = 0; iCounter < iNumberOfIndents; iCounter++)
{
switch( iCounter )
{
case( 0 ):
if( iNumberOfIndents < 5 )
{
RenderQtnLongIndentFrame(BTN_FIRST_COLUMN_X + INDENT_OFFSET, 93);
if( iCurrentAnswer == iCounter )
{
RenderQtnLongIndentHighFrame( BTN_FIRST_COLUMN_X + INDENT_OFFSET, 93 );
}
}
else
{
RenderQtnShortIndentFrame(BTN_FIRST_COLUMN_X + INDENT_OFFSET, 93);
if( iCurrentAnswer == iCounter )
{
RenderQtnShortIndentHighFrame( BTN_FIRST_COLUMN_X + INDENT_OFFSET, 93 );
}
}
break;
case( 1 ):
if( iNumberOfIndents < 5 )
{
RenderQtnLongIndentFrame(BTN_FIRST_COLUMN_X + INDENT_OFFSET, 143);
if( iCurrentAnswer == iCounter )
{
RenderQtnLongIndentHighFrame( BTN_FIRST_COLUMN_X + INDENT_OFFSET, 143 );
}
}
else
{
RenderQtnShortIndentFrame(BTN_FIRST_COLUMN_X + INDENT_OFFSET, 143);
if( iCurrentAnswer == iCounter )
{
RenderQtnShortIndentHighFrame( BTN_FIRST_COLUMN_X + INDENT_OFFSET, 143 );
}
}
break;
case( 2 ):
if( iNumberOfIndents < 5 )
{
RenderQtnLongIndentFrame(BTN_FIRST_COLUMN_X + INDENT_OFFSET, 193);
if( iCurrentAnswer == iCounter )
{
RenderQtnLongIndentHighFrame( BTN_FIRST_COLUMN_X + INDENT_OFFSET, 193 );
}
}
else
{
RenderQtnShortIndentFrame(BTN_FIRST_COLUMN_X + INDENT_OFFSET, 193);
if( iCurrentAnswer == iCounter )
{
RenderQtnShortIndentHighFrame( BTN_FIRST_COLUMN_X + INDENT_OFFSET, 193 );
}
}
break;
case( 3 ):
// is this question # 6 ..if so, need longer answer box
if( ( giCurrentPersonalityQuizQuestion == 5) )
{
// render longer frame
RenderQtnShort2IndentFrame( BTN_FIRST_COLUMN_X + INDENT_OFFSET, 243 );
// is this answer currently selected?
if( iCurrentAnswer == iCounter )
{
// need to highlight
RenderQtnShort2IndentHighFrame( BTN_FIRST_COLUMN_X + INDENT_OFFSET, 243 );
}
// done
break;
}
if( iNumberOfIndents < 5 )
{
RenderQtnLongIndentFrame(BTN_FIRST_COLUMN_X + INDENT_OFFSET, 243);
if( iCurrentAnswer == iCounter )
{
RenderQtnLongIndentHighFrame( BTN_FIRST_COLUMN_X + INDENT_OFFSET, 243 );
}
}
else
{
RenderQtnShortIndentFrame(BTN_FIRST_COLUMN_X + INDENT_OFFSET, 243);
if( iCurrentAnswer == iCounter )
{
RenderQtnShortIndentHighFrame( BTN_FIRST_COLUMN_X + INDENT_OFFSET, 243 );
}
}
break;
case( 4 ):
//is this question # 14 or 21?..if so, need longer answer box
if( ( giCurrentPersonalityQuizQuestion == 10)||( giCurrentPersonalityQuizQuestion == 5 ) )
{
// render longer frame
RenderQtnShort2IndentFrame( BTN_SECOND_COLUMN_X + INDENT_OFFSET, 93 );
// is this answer currently selected?
if( iCurrentAnswer == iCounter )
{
// need to highlight
RenderQtnShort2IndentHighFrame( BTN_SECOND_COLUMN_X + INDENT_OFFSET, 93 );
}
// done
break;
}
RenderQtnShortIndentFrame(BTN_SECOND_COLUMN_X + INDENT_OFFSET, 93);
if( iCurrentAnswer == iCounter )
{
RenderQtnShortIndentHighFrame( BTN_SECOND_COLUMN_X + INDENT_OFFSET, 93 );
}
break;
case( 5 ):
// special case?..longer frame needed if so
if( ( giCurrentPersonalityQuizQuestion == 19) )
{
// render longer frame
RenderQtnShort2IndentFrame( BTN_SECOND_COLUMN_X + INDENT_OFFSET, 143 );
// is this answer currently selected?
if( iCurrentAnswer == iCounter )
{
// need to highlight
RenderQtnShort2IndentHighFrame( BTN_SECOND_COLUMN_X + INDENT_OFFSET, 143 );
}
// done
break;
}
RenderQtnShortIndentFrame(BTN_SECOND_COLUMN_X + INDENT_OFFSET, 143);
if( iCurrentAnswer == iCounter )
{
RenderQtnShortIndentHighFrame( BTN_SECOND_COLUMN_X + INDENT_OFFSET, 143 );
}
break;
case( 6 ):
RenderQtnShortIndentFrame(BTN_SECOND_COLUMN_X + INDENT_OFFSET, 193);
if( iCurrentAnswer == iCounter )
{
RenderQtnShortIndentHighFrame( BTN_SECOND_COLUMN_X + INDENT_OFFSET, 193 );
}
break;
case( 7 ):
RenderQtnShortIndentFrame(BTN_SECOND_COLUMN_X + INDENT_OFFSET, 243);
if( iCurrentAnswer == iCounter )
{
RenderQtnShortIndentHighFrame( BTN_SECOND_COLUMN_X + INDENT_OFFSET, 243 );
}
break;
case( 8 ):
break;
}
}
}
void PrintQuizQuestionNumber( void )
{
// this function will print the number of the current question and the numebr of questions
CHAR16 sString[ 10 ];
// setup font
SetFont( FONT12ARIAL);
SetFontForeground( FONT_WHITE );
SetFontBackground( FONT_BLACK );
// get current question number into a string
swprintf(sString, L"%d", giCurrentPersonalityQuizQuestion + 1);
// print current question number
mprintf( LAPTOP_SCREEN_UL_X + 345 , LAPTOP_SCREEN_WEB_UL_Y + 370 ,sString);
// total number of questions
mprintf( LAPTOP_SCREEN_UL_X + 383 , LAPTOP_SCREEN_WEB_UL_Y + 370 , L"16");
return;
}
void CheckStateOfTheConfirmButton( void )
{
// will check the state of the confirm button, should it be enabled or disabled?
if( iCurrentAnswer == -1 )
{
// was disabled, enable
EnableButton( giIMPPersonalityQuizButton[0] );
}
return;
}
void HandleIMPQuizKeyBoard( void )
{
InputAtom InputEvent;
POINT MousePos;
BOOLEAN fSkipFrame = FALSE;
GetCursorPos(&MousePos);
ScreenToClient(ghWindow, &MousePos); // In window coords!
while( ( DequeueEvent(&InputEvent) == TRUE ) )
{
if( fSkipFrame == FALSE )
{
// HOOK INTO MOUSE HOOKS
/*
if( (InputEvent.usEvent == KEY_DOWN ) && ( InputEvent.usParam >= '1' ) && ( InputEvent.usParam <= '9') )
{
if( ( UINT16 )( iNumberOfPersonaButtons ) >= InputEvent.usParam - '0' )
{
// reset buttons
ResetQuizAnswerButtons( );
// ok, check to see if button was disabled, if so, re enable
CheckStateOfTheConfirmButton( );
// toggle this button on
ButtonList[ giIMPPersonalityQuizAnswerButton[ InputEvent.usParam - '1' ] ]->uiFlags |= (BUTTON_CLICKED_ON);
iCurrentAnswer = InputEvent.usParam - '1';
PrintImpText( );
// the current and last question numbers
PrintQuizQuestionNumber( );
fReDrawCharProfile = TRUE;
fSkipFrame = TRUE;
}
}
else if( ( iCurrentAnswer != -1 ) && ( InputEvent.usEvent == KEY_DOWN ) && ( InputEvent.usParam == ENTER ) )
{
// reset all the buttons
ResetQuizAnswerButtons( );
// copy the answer into the list
iQuizAnswerList[ giCurrentPersonalityQuizQuestion ] = iCurrentAnswer;
// reset answer for next question
iCurrentAnswer = -1;
// next question, JOHNNY!
giCurrentPersonalityQuizQuestion++;
giMaxPersonalityQuizQuestion++;
// OPPS!, done..time to finish up
if( giCurrentPersonalityQuizQuestion > 15)
{
iCurrentImpPage = IMP_PERSONALITY_FINISH;
// process
CompileQuestionsInStatsAndWhatNot( );
}
fSkipFrame = TRUE;
}
else if( ( InputEvent.usEvent == KEY_DOWN ) && ( InputEvent.usParam == '=' ) )
{
MoveAheadAQuestion( );
fSkipFrame = TRUE;
}
else if( ( InputEvent.usEvent == KEY_DOWN ) && ( InputEvent.usParam == '-' ) )
{
MoveBackAQuestion( );
fSkipFrame = TRUE;
}
else
{
*/ switch(InputEvent.usEvent)
{
case LEFT_BUTTON_DOWN:
MouseSystemHook(LEFT_BUTTON_DOWN, (INT16)MousePos.x, (INT16)MousePos.y,_LeftButtonDown, _RightButtonDown);
break;
case LEFT_BUTTON_UP:
MouseSystemHook(LEFT_BUTTON_UP, (INT16)MousePos.x, (INT16)MousePos.y ,_LeftButtonDown, _RightButtonDown);
break;
case RIGHT_BUTTON_DOWN:
MouseSystemHook(RIGHT_BUTTON_DOWN, (INT16)MousePos.x, (INT16)MousePos.y,_LeftButtonDown, _RightButtonDown);
break;
case RIGHT_BUTTON_UP:
MouseSystemHook(RIGHT_BUTTON_UP, (INT16)MousePos.x, (INT16)MousePos.y,_LeftButtonDown, _RightButtonDown);
break;
case RIGHT_BUTTON_REPEAT:
MouseSystemHook(RIGHT_BUTTON_REPEAT, (INT16)MousePos.x, (INT16)MousePos.y,_LeftButtonDown, _RightButtonDown);
break;
case LEFT_BUTTON_REPEAT:
MouseSystemHook(LEFT_BUTTON_REPEAT, (INT16)MousePos.x, (INT16)MousePos.y,_LeftButtonDown, _RightButtonDown);
break;
default:
HandleKeyBoardShortCutsForLapTop( InputEvent.usEvent, InputEvent.usParam, InputEvent.usKeyState );
break;
// }
}
}
}
return;
}
void CheckAndUpdateNextPreviousIMPQuestionButtonStates( void )
{
if( giCurrentPersonalityQuizQuestion >= giMaxPersonalityQuizQuestion )
{
DisableButton( giNextQuestionButton );
}
else
{
EnableButton( giNextQuestionButton );
}
if( giCurrentPersonalityQuizQuestion == 0 )
{
DisableButton( giPreviousQuestionButton );
}
else
{
EnableButton( giPreviousQuestionButton );
}
}
void MoveAheadAQuestion( void )
{
// move ahead a question in the personality question list
if( giCurrentPersonalityQuizQuestion < giMaxPersonalityQuizQuestion )
{
giCurrentPersonalityQuizQuestion++;
iCurrentAnswer = -1;
CheckStateOfTheConfirmButton( );
iCurrentAnswer = iQuizAnswerList[ giCurrentPersonalityQuizQuestion ];
}
CheckAndUpdateNextPreviousIMPQuestionButtonStates( );
/*
EnableButton( giPreviousQuestionButton );
if( giCurrentPersonalityQuizQuestion >= giMaxPersonalityQuizQuestion )
{
DisableButton( giNextQuestionButton );
iCurrentAnswer = -1;
}
else
{
EnableButton( giNextQuestionButton );
}
*/
return;
}
void MoveBackAQuestion( void )
{
if( giCurrentPersonalityQuizQuestion > 0 )
{
giCurrentPersonalityQuizQuestion--;
iCurrentAnswer = -1;
CheckStateOfTheConfirmButton( );
iCurrentAnswer = iQuizAnswerList[ giCurrentPersonalityQuizQuestion ];
}
EnableButton( giNextQuestionButton );
CheckAndUpdateNextPreviousIMPQuestionButtonStates( );
/*
if( giCurrentPersonalityQuizQuestion == 0 )
{
DisableButton( giPreviousQuestionButton );
}
else
{
EnableButton( giPreviousQuestionButton );
}
*/
return;
}
void ToggleQuestionNumberButtonOn( INT32 iAnswerNumber )
{
if( ( giCurrentPersonalityQuizQuestion <= giMaxPersonalityQuizQuestion ) && ( iAnswerNumber != -1 ) )
{
// reset buttons
ResetQuizAnswerButtons( );
// toggle this button on
ButtonList[ giIMPPersonalityQuizAnswerButton[ iAnswerNumber ] ]->uiFlags |= (BUTTON_CLICKED_ON);
iCurrentAnswer = iAnswerNumber;
}
return;
}
void PreviousQuestionButtonCallback( GUI_BUTTON *btn, INT32 iReason )
{
if (!(btn->uiFlags & BUTTON_ENABLED))
return;
if( iReason & MSYS_CALLBACK_REASON_LBUTTON_DWN )
{
btn->uiFlags|=(BUTTON_CLICKED_ON);
}
else if( iReason & MSYS_CALLBACK_REASON_LBUTTON_UP )
{
if (btn->uiFlags & BUTTON_CLICKED_ON)
{
MoveBackAQuestion( );
btn->uiFlags&=~(BUTTON_CLICKED_ON);
}
}
return;
}
void NextQuestionButtonCallback( GUI_BUTTON *btn, INT32 iReason )
{
if (!(btn->uiFlags & BUTTON_ENABLED))
return;
if( iReason & MSYS_CALLBACK_REASON_LBUTTON_DWN )
{
btn->uiFlags|=(BUTTON_CLICKED_ON);
}
else if( iReason & MSYS_CALLBACK_REASON_LBUTTON_UP )
{
if (btn->uiFlags & BUTTON_CLICKED_ON)
{
MoveAheadAQuestion( );
btn->uiFlags&=~(BUTTON_CLICKED_ON);
}
}
return;
}