diff --git a/data/translations/text.dat b/data/translations/text.dat index 25dda7458..5e5232ffa 100644 --- a/data/translations/text.dat +++ b/data/translations/text.dat @@ -72,6 +72,18 @@ eng=B eng=C [STR__FRONTEND__D] eng=D +[STR__FRONTEND__UP] +eng=UP +[STR__FRONTEND__DOWN] +eng=DOWN +[STR__FRONTEND__LEFT] +eng=LEFT +[STR__FRONTEND__RIGHT] +eng=RIGHT +[STR__FRONTEND__JUMP] +eng=JUMP +[STR__FRONTEND__ACTION] +eng=ACTION ; Screen menu diff --git a/source/frontend/options.cpp b/source/frontend/options.cpp index f94413b8b..fecd92f5e 100644 --- a/source/frontend/options.cpp +++ b/source/frontend/options.cpp @@ -42,8 +42,8 @@ #include "gui\gframe.h" #endif -#ifndef __GUI_GREADOUT_H__ -#include "gui\greadout.h" +#ifndef __GUI_GTEXTBOX_H__ +#include "gui\gtextbox.h" #endif #ifndef __LOCALE_TEXTDBASE_H__ @@ -54,6 +54,10 @@ #include "sound\sound.h" #endif +#ifndef __PAD_PADS_H__ +#include "pad\pads.h" +#endif + /* Std Lib ------- */ @@ -65,6 +69,10 @@ #include #endif +#ifndef __SPR_UIGFX_H__ +#include +#endif + /*---------------------------------------------------------------------- Tyepdefs && Defines @@ -82,12 +90,12 @@ Vars ---- */ -int s_controlButtonData[]= +int CFrontEndOptions::s_controlStyleValues[CPadConfig::NUM_PAD_CONFIGS+1]= { 0,1,2,3, -1 }; -CGUITextReadout::TextReadoutData s_controlReadoutText[]= +CGUITextReadout::TextReadoutData CFrontEndOptions::s_controlStyleReadoutText[CPadConfig::NUM_PAD_CONFIGS]= { { 0,STR__FRONTEND__A }, { 1,STR__FRONTEND__B }, @@ -95,6 +103,41 @@ CGUITextReadout::TextReadoutData s_controlReadoutText[]= { 3,STR__FRONTEND__D }, }; + +int CFrontEndOptions::s_buttonOrder[]= +{ + CPadConfig::PAD_CFG_UP, + CPadConfig::PAD_CFG_DOWN, + CPadConfig::PAD_CFG_LEFT, + CPadConfig::PAD_CFG_RIGHT, + CPadConfig::PAD_CFG_JUMP, + CPadConfig::PAD_CFG_ACTION, +}; + +CGUISpriteReadout::SpriteReadoutData CFrontEndOptions::s_controlReadoutSprites[]= +{ + { ICON_UP,FRM__BUTU }, + { ICON_DOWN,FRM__BUTD }, + { ICON_LEFT,FRM__BUTL }, + { ICON_RIGHT,FRM__BUTR }, + { ICON_CROSS,FRM__BUTX }, + { ICON_CIRCLE,FRM__BUTC }, + { ICON_SQUARE,FRM__BUTS }, + { ICON_TRIANGLE,FRM__BUTT }, +}; + +CFrontEndOptions::ButtonToIconMap CFrontEndOptions::s_controlMap[]= +{ + { PAD_UP, ICON_UP }, + { PAD_DOWN, ICON_DOWN }, + { PAD_LEFT, ICON_LEFT }, + { PAD_RIGHT, ICON_RIGHT }, + { PAD_CROSS, ICON_CROSS }, + { PAD_SQUARE, ICON_SQUARE }, + { PAD_CIRCLE, ICON_CIRCLE }, + { PAD_TRIANGLE, ICON_TRIANGLE }, +}; + /*---------------------------------------------------------------------- Function: Purpose: @@ -104,6 +147,10 @@ CGUITextReadout::TextReadoutData s_controlReadoutText[]= void CFrontEndOptions::init() { int i; + CGUIGroupFrame *fr; + CGUITextBox *tb; + CGUISpriteReadout *sr; + m_background=new ("Options Background") CScrollyBackground(); m_background->init(); @@ -141,7 +188,64 @@ void CFrontEndOptions::init() CGUIFactory::createCycleButtonFrame(m_modeMenus[MODE__CONTROL], X_BORDER,Y_BORDER,412-(X_BORDER*2),40, STR__FRONTEND__CONTROL_STYLE, - &m_controlStyle,s_controlButtonData,s_controlReadoutText); + &m_controlStyle,s_controlStyleValues,s_controlStyleReadoutText); + fr=new ("frame") CGUIGroupFrame(); + fr->init(m_modeMenus[MODE__CONTROL]); + fr->setObjectXYWH(X_BORDER*2,65,412-(X_BORDER*4),60); //292 + sr=new ("spritereadout") CGUISpriteReadout(); + sr->init(fr); + sr->setObjectXYWH(0,0,26,15); //146 + sr->setReadoutTarget(&m_controlIcons[CONTROL_UP]); + sr->setReadoutData(s_controlReadoutSprites); + tb=new ("textbox") CGUITextBox(); + tb->init(fr); + tb->setObjectXYWH(26,0,120,15); + tb->setText(STR__FRONTEND__UP); + sr=new ("spritereadout") CGUISpriteReadout(); + sr->init(fr); + sr->setObjectXYWH(0,15,26,15); + sr->setReadoutTarget(&m_controlIcons[CONTROL_DOWN]); + sr->setReadoutData(s_controlReadoutSprites); + tb=new ("textbox") CGUITextBox(); + tb->init(fr); + tb->setObjectXYWH(26,15,120,15); + tb->setText(STR__FRONTEND__DOWN); + sr=new ("spritereadout") CGUISpriteReadout(); + sr->init(fr); + sr->setObjectXYWH(0,30,26,15); + sr->setReadoutTarget(&m_controlIcons[CONTROL_LEFT]); + sr->setReadoutData(s_controlReadoutSprites); + tb=new ("textbox") CGUITextBox(); + tb->init(fr); + tb->setObjectXYWH(26,30,120,15); + tb->setText(STR__FRONTEND__LEFT); + sr=new ("spritereadout") CGUISpriteReadout(); + sr->init(fr); + sr->setObjectXYWH(0,45,26,15); + sr->setReadoutTarget(&m_controlIcons[CONTROL_RIGHT]); + sr->setReadoutData(s_controlReadoutSprites); + tb=new ("textbox") CGUITextBox(); + tb->init(fr); + tb->setObjectXYWH(26,45,120,15); + tb->setText(STR__FRONTEND__RIGHT); + sr=new ("spritereadout") CGUISpriteReadout(); + sr->init(fr); + sr->setObjectXYWH(146,0,26,15); + sr->setReadoutTarget(&m_controlIcons[CONTROL_JUMP]); + sr->setReadoutData(s_controlReadoutSprites); + tb=new ("textbox") CGUITextBox(); + tb->init(fr); + tb->setObjectXYWH(146+26,0,120,15); + tb->setText(STR__FRONTEND__JUMP); + sr=new ("spritereadout") CGUISpriteReadout(); + sr->init(fr); + sr->setObjectXYWH(146,15,26,15); + sr->setReadoutTarget(&m_controlIcons[CONTROL_ACTION]); + sr->setReadoutData(s_controlReadoutSprites); + tb=new ("textbox") CGUITextBox(); + tb->init(fr); + tb->setObjectXYWH(146+26,15,120,15); + tb->setText(STR__FRONTEND__ACTION); // Populate SCREEN menu @@ -173,7 +277,7 @@ void CFrontEndOptions::init() m_bgmVolume=CSoundMediator::getVolume(CSoundMediator::SONG); m_sfxVolume=CSoundMediator::getVolume(CSoundMediator::SFX); m_speechVolume=CSoundMediator::getVolume(CSoundMediator::SPEECH); - m_controlStyle=0; + m_controlStyle=CPadConfig::getConfig(); } /*---------------------------------------------------------------------- @@ -256,6 +360,9 @@ int oy=-1; int os=0; void CFrontEndOptions::think(int _frames) { + int i,j,button; + + m_background->setSpeed(ox,oy); m_background->setSpeedScale(os); m_background->think(_frames); @@ -296,6 +403,20 @@ void CFrontEndOptions::think(int _frames) m_closingDown=true; } + // Change the icons on the control display + CPadConfig::setConfig(m_controlStyle); + for(i=0;iButtons[But]); + return(s_cfg->m_buttons[_but]); } diff --git a/source/pad/pads.h b/source/pad/pads.h index 741789a9d..58ce5454e 100644 --- a/source/pad/pads.h +++ b/source/pad/pads.h @@ -98,49 +98,46 @@ void PAD_SetVibrationEnvelope( int Port, int count, const VIBE_DATA * data, int /*****************************************************************************/ -#define PAD_ACCEPT PAD_CROSS -#define PAD_CANCEL PAD_TRIANGLE -#define PAD_UI_LEFT PAD_LEFT -#define PAD_UI_RIGHT PAD_RIGHT -#define PAD_UI_UP PAD_UP -#define PAD_UI_DOWN PAD_DOWN - -enum PAD_CFG -{ - PAD_CFG_NONE=0, - - PAD_CFG_LEFT, - PAD_CFG_RIGHT, - PAD_CFG_UP, - PAD_CFG_DOWN, - - PAD_CFG_PAUSE, - PAD_CFG_ACTION, - PAD_CFG_JUMP, - - PAD_CFG_MAX -}; - -struct sPadConfigTable -{ - u16 Buttons[PAD_CFG_MAX]; -}; class CPadConfig { public: - CPadConfig(); - void SetConfig(sPadConfigTable *NewCfg); - int GetButton(PAD_CFG But); + enum + { + NUM_PAD_CONFIGS=4, + }; + + enum PAD_CFG + { + PAD_CFG_NONE=0, + + PAD_CFG_LEFT, + PAD_CFG_RIGHT, + PAD_CFG_UP, + PAD_CFG_DOWN, + + PAD_CFG_ACTION, + PAD_CFG_JUMP, + + PAD_CFG_MAX + }; + + static void setConfig(int _config); + static int getConfig(); + static int getButton(PAD_CFG _but); private: - sPadConfigTable *Cfg; + struct sPadConfigTable + { + u16 m_buttons[PAD_CFG_MAX]; + }; + + static int s_configNumber; + static sPadConfigTable *s_cfg; + static sPadConfigTable s_padConfigs[NUM_PAD_CONFIGS]; }; -extern sPadConfigTable *getPadConfigTable(int _padConfig); - - /*****************************************************************************/