Files
commandergenius/project/jni/application/alienblaster/settings.cpp

697 lines
24 KiB
C++

/***************************************************************************
alienBlaster
Copyright (C) 2004
Paul Grathwohl, Arne Hormann, Daniel Kuehn, Soenke Schwardt
This program 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 2, or (at your option)
any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
***************************************************************************/
using namespace std;
#include <cassert>
#include <string>
#include <map>
#include <android/log.h>
#include "SDL.h"
#include "options.h"
#include "settings.h"
#include "global.h"
#include "surfaceDB.h"
#include "asstring.h"
#include "font.h"
#include "video.h"
#include "mixer.h"
#include "input.h"
Settings *settings;
Settings::Settings() {
opfile = NULL;
introSprite = surfaceDB.loadSurface( FN_ALIENBLASTER_INTRO );
activeChoiceSprite = surfaceDB.loadSurface( FN_INTRO_SHOW_CHOICE );
bluePlain = surfaceDB.loadSurface( FN_SETTINGS_BLUE, true );
whitePlain = surfaceDB.loadSurface( FN_SETTINGS_WHITE, false );
fontMenu = new Font ( FN_FONT_SETTINGS );
fontMenuHighlighted = new Font ( FN_FONT_SETTINGS_HIGHLIGHTED );
fontNormal = new Font( FN_FONT_SETTINGS_SMALL );
fontKey = new Font ( FN_FONT_SETTINGS_SMALL_BLUE );
fontHighlighted = new Font( FN_FONT_SETTINGS_SMALL_HIGHLIGHTED );
playerEventNames[ PE_UNKNOWN ] = "UNKNOWN";
playerEventNames[ PE_UP ] = "UP";
playerEventNames[ PE_DOWN ] = "DOWN";
playerEventNames[ PE_LEFT ] = "LEFT";
playerEventNames[ PE_RIGHT ] = "RIGHT";
playerEventNames[ PE_FIRE_WEAPONS ] = "FIRE";
playerEventNames[ PE_FIRE_SPECIALS ] = "FIRE-SPECIAL";
playerEventNames[ PE_CHOOSE_WEAPON_SECONDARY ] = "CHOOSE-WEAPON";
playerEventNames[ PE_CHOOSE_WEAPON_SPECIALS ] = "CHOOSE-SPECIALS";
defaultSettings[ string("PLAYER0-") + playerEventNames[ PE_UP ] ] = SDLK_UP;
defaultSettings[ string("PLAYER0-") + playerEventNames[ PE_DOWN ] ] = SDLK_DOWN;
defaultSettings[ string("PLAYER0-") + playerEventNames[ PE_LEFT ] ] = SDLK_LEFT;
defaultSettings[ string("PLAYER0-") + playerEventNames[ PE_RIGHT ] ] = SDLK_RIGHT;
defaultSettings[ string("PLAYER0-") + playerEventNames[ PE_CHOOSE_WEAPON_SECONDARY ] ] = SDLK_RSHIFT;
defaultSettings[ string("PLAYER0-") + playerEventNames[ PE_CHOOSE_WEAPON_SPECIALS ] ] = SDLK_PERIOD;
defaultSettings[ string("PLAYER0-") + playerEventNames[ PE_FIRE_WEAPONS ] ] = SDLK_RCTRL;
defaultSettings[ string("PLAYER0-") + playerEventNames[ PE_FIRE_SPECIALS ] ] = SDLK_MODE;
defaultSettings[ string("PLAYER1-") + playerEventNames[ PE_UP ] ] = SDLK_e;
defaultSettings[ string("PLAYER1-") + playerEventNames[ PE_DOWN ] ] = SDLK_d;
defaultSettings[ string("PLAYER1-") + playerEventNames[ PE_LEFT ] ] = SDLK_s;
defaultSettings[ string("PLAYER1-") + playerEventNames[ PE_RIGHT ] ] = SDLK_f;
defaultSettings[ string("PLAYER1-") + playerEventNames[ PE_CHOOSE_WEAPON_SECONDARY ] ] = SDLK_LSHIFT;
defaultSettings[ string("PLAYER1-") + playerEventNames[ PE_CHOOSE_WEAPON_SPECIALS ] ] = SDLK_y;
defaultSettings[ string("PLAYER1-") + playerEventNames[ PE_FIRE_WEAPONS ] ] = SDLK_LCTRL;
defaultSettings[ string("PLAYER1-") + playerEventNames[ PE_FIRE_SPECIALS ] ] = SDLK_LALT;
setKeyNames();
loadSettings();
}
Settings::~Settings() {
if (fontKey) delete fontKey;
if (fontHighlighted) delete fontHighlighted;
if (fontNormal) delete fontNormal;
if (fontMenu) delete fontMenu;
if (opfile) delete opfile;
}
void Settings::loadSettings() {
bool restoredSettings = false;
if (opfile) {
delete opfile;
}
opfile = new Options( FN_SETTINGS );
playerKeys.clear();
for(int i=0; i < MAX_PLAYER_CNT; ++i) {
PlayerEventKeys pk;
for(int t=1; t < PlayerEventCnt; ++t) {
int key;
string keyname = string("PLAYER") + asString(i) + "-" + playerEventNames[(PlayerEvent)t];
if (!opfile->getInt( keyname , key)) {
key = defaultSettings[ keyname ];
restoredSettings = true;
}
pk[ (PlayerEvent)t ] = (SDLKey)key;
}
playerKeys.push_back(pk);
}
if (restoredSettings) {
saveSettings();
}
}
void Settings::saveSettings() {
for(int i=0; i < MAX_PLAYER_CNT; ++i) {
string name;
for(int t=1; t < PlayerEventCnt; ++t) {
opfile->setInt( (int)playerKeys[i][ (PlayerEvent)t ],
string("PLAYER") + asString(i) + "-" + playerEventNames[(PlayerEvent)t] );
}
}
if (opfile) {
opfile->saveFile( FN_SETTINGS );
}
}
void Settings::draw( SdlCompat_AcceleratedSurface *screen, bool getNewKey ) {
videoserver->clearScreen();
SDL_Rect r;
r.x = screen->w / 2 - introSprite->w / 2;
r.y = 0;
r.w = introSprite->w;
r.h = introSprite->h;
SDL_BlitSurface( introSprite, 0, screen, &r );
showSpecialKeys( screen );
showSettings( screen, getNewKey );
showMenu( screen );
SDL_Flip( screen );
}
void Settings::showSpecialKeys( SdlCompat_AcceleratedSurface *screen ) {
fontNormal->drawStr(screen, screen->w/2, screen->h - 2*fontNormal->getCharHeight() - 10,
"F1: Configure Keys F5: Fullscreen", FONT_ALIGN_CENTERED );
fontNormal->drawStr(screen, screen->w/2, screen->h - fontNormal->getCharHeight() - 5,
"F6: Display Enemy Stats F7: Toggle Music F10: Pause Game",
FONT_ALIGN_CENTERED );
}
void Settings::showSettings( SdlCompat_AcceleratedSurface *screen, bool getNewKey ) {
int playerOfActiveItem = -1;
if ( actChoice <= SC_FIRE_SPEC_1 ) playerOfActiveItem = 0;
else if ( actChoice <= SC_FIRE_SPEC_2 ) playerOfActiveItem = 1;
int activePlayerEvent = actChoice - (8*playerOfActiveItem) + 1;
SDL_Rect r;
SDL_Rect srcDesc;
srcDesc.x = 0;
srcDesc.y = 0;
srcDesc.w = 155;
srcDesc.h = 14;
SDL_Rect srcKey;
srcKey.x = 0;
srcKey.y = 0;
srcKey.w = 100;
srcKey.h = 14;
int i = 150;
fontHighlighted->drawStr( screen, 15, i - fontHighlighted->getCharHeight() - 5, "Player 1" );
fontHighlighted->drawStr( screen, screen->w/2 + 5, i - fontHighlighted->getCharHeight() - 5,
"Player 2" );
std::map< PlayerEvent, SDLKey >::const_iterator pkiter;
for ( pkiter = playerKeys[0].begin(); pkiter != playerKeys[0].end(); ++pkiter ) {
if ( !(playerOfActiveItem == 0 && pkiter->first == activePlayerEvent) ) {
r.x = 15;
r.y = i - 1;
SDL_BlitSurface(bluePlain, &srcDesc, screen, &r );
fontNormal->drawStr( screen, 20, i, playerEventNames[ pkiter->first ] + ":" );
r.x = 175;
r.y = i-1;
SDL_BlitSurface(bluePlain, &srcKey, screen, &r );
fontNormal->drawStr( screen, 270, i, SDL_GetKeyName( pkiter->second ), FONT_ALIGN_RIGHT );
}
if ( !(playerOfActiveItem == 1 && pkiter->first == activePlayerEvent) ) {
r.x = screen->w/2 + 5;
r.y = i - 1;
SDL_BlitSurface(bluePlain, &srcDesc, screen, &r );
fontNormal->drawStr( screen, screen->w/2 + 10, i,
playerEventNames[ pkiter->first ] + ":" );
r.x = screen->w/2 + 165;
r.y = i-1;
SDL_BlitSurface(bluePlain, &srcKey, screen, &r );
fontNormal->drawStr( screen, screen->w/2 + 260, i,
SDL_GetKeyName( playerKeys[1][pkiter->first] ), FONT_ALIGN_RIGHT );
}
if ( playerOfActiveItem == 0 && pkiter->first == activePlayerEvent ) {
r.x = 15;
r.y = i - 1;
SDL_BlitSurface(bluePlain, &srcDesc, screen, &r );
fontNormal->drawStr( screen, 20, i, playerEventNames[ pkiter->first ] + ":" );
r.x = 175;
r.y = i-1;
SDL_BlitSurface(whitePlain, &srcKey, screen, &r );
if (!getNewKey) {
fontHighlighted->drawStr( screen, 270, i, SDL_GetKeyName( pkiter->second ), FONT_ALIGN_RIGHT );
}
}
if ( playerOfActiveItem == 1 && pkiter->first == activePlayerEvent ) {
r.x = screen->w/2 + 5;
r.y = i - 1;
SDL_BlitSurface(bluePlain, &srcDesc, screen, &r );
fontNormal->drawStr( screen, screen->w/2 + 10, i,
playerEventNames[ pkiter->first ] + ":" );
r.x = screen->w/2 + 165;
r.y = i-1;
SDL_BlitSurface(whitePlain, &srcKey, screen, &r );
if (!getNewKey) {
fontHighlighted->drawStr( screen, screen->w/2 + 260, i,
SDL_GetKeyName( playerKeys[1][pkiter->first] ), FONT_ALIGN_RIGHT );
}
}
i = i + fontNormal->getCharHeight() + 5;
}
}
void Settings::showMenu( SdlCompat_AcceleratedSurface *screen ) {
SDL_Rect r;
r.x = 230 - activeChoiceSprite->w - 8;
r.w = activeChoiceSprite->w;
r.h = activeChoiceSprite->h;
if ( actChoice == SC_DEFAULTS ) {
r.y = 328;
SDL_BlitSurface(activeChoiceSprite, 0, screen, &r );
fontMenuHighlighted->drawStr( screen, 230, 330, "Reset Defaults" );
} else fontMenu->drawStr( screen, 230, 330, "Reset Defaults" );
if ( actChoice == SC_CANCEL ) {
r.y = 363;
SDL_BlitSurface(activeChoiceSprite, 0, screen, &r );
fontMenuHighlighted->drawStr( screen, 230, 365, "Cancel" );
} else fontMenu->drawStr( screen, 230, 365, "Cancel" );
if ( actChoice == SC_FINISH ) {
r.y = 398;
SDL_BlitSurface(activeChoiceSprite, 0, screen, &r );
fontMenuHighlighted->drawStr( screen, 230, 400, "Finish" );
} else fontMenu->drawStr( screen, 230, 400, "Finish" );
}
void Settings::settingsDialog( SdlCompat_AcceleratedSurface *screen ) {
bool run = true;
actChoice = SC_FINISH;
wasLeftColumn = true;
draw( screen );
while(run) {
SDL_Event event;
while (SDL_PollEvent(&event)) {
switch(event.type) {
case SDL_KEYDOWN: {
switch(event.key.keysym.sym) {
case SDLK_UP: {
if ( actChoice == SC_DEFAULTS ) {
if ( wasLeftColumn ) actChoice = SC_FIRE_SPEC_1;
else actChoice = SC_FIRE_SPEC_2;
} else if ( actChoice == SC_UP2 || actChoice == SC_UP1 ) {
actChoice = SC_FINISH;
} else {
actChoice = (SettingsChoices)(actChoice - 1);
}
break;
}
case SDLK_DOWN: {
if ( actChoice == SC_FINISH ) {
if ( wasLeftColumn ) actChoice = SC_UP1;
else actChoice = SC_UP2;
} else if ( actChoice == SC_FIRE_SPEC_1 ) {
actChoice = SC_DEFAULTS;
} else {
actChoice = (SettingsChoices)(actChoice + 1);
}
break;
}
case SDLK_RIGHT: {
if (actChoice <= SC_FIRE_SPEC_1) {
actChoice = (SettingsChoices)(actChoice + 8);
wasLeftColumn = false;
}
break;
}
case SDLK_LEFT: {
if ( SC_UP2 <= actChoice && actChoice <= SC_FIRE_SPEC_2 ) {
actChoice = (SettingsChoices)(actChoice - 8);
wasLeftColumn = true;
}
break;
}
case SDLK_TAB: {
if ( SC_UP1 <= actChoice && actChoice <= SC_FIRE_SPEC_1 ) {
actChoice = (SettingsChoices)(actChoice + 8);
wasLeftColumn = false;
} else {
if ( SC_UP2 <= actChoice && actChoice <= SC_FIRE_SPEC_2 ) {
actChoice = (SettingsChoices)(actChoice - 8);
wasLeftColumn = true;
}
}
break;
}
case SDLK_RETURN:
case SDLK_SPACE: {
if ( actChoice == SC_DEFAULTS ) {
loadDefaultSettings();
} else if ( actChoice == SC_CANCEL ) {
run = false;
loadSettings();
} else if ( actChoice == SC_FINISH ) {
run = false;
saveSettings();
} else {
draw( screen, true );
getNewKeyFromUser();
}
break;
}
case SDLK_F5: {
videoserver->toggleFullscreen();
break;
}
case SDLK_F7: {
if ( playMusicOn ) {
playMusicOn = false;
Mixer::mixer().stopMusic();
} else {
playMusicOn = true;
Mixer::mixer().playMusic( MUSIC_INTRO, -1, 1000 );
}
break;
}
case SDLK_ESCAPE: {
run = false;
loadDefaultSettings();
break;
}
default: break;
}
}
}
draw( screen );
SDL_Delay( 50 ); // save cpu-power
}
}
}
void Settings::loadDefaultSettings() {
playerKeys.clear();
for(int i=0; i < MAX_PLAYER_CNT; ++i) {
PlayerEventKeys pk;
for(int t=1; t < PlayerEventCnt; ++t) {
int key;
string keyname = string("PLAYER") + asString(i) + "-" + playerEventNames[(PlayerEvent)t];
key = defaultSettings[ keyname ];
pk[ (PlayerEvent)t ] = (SDLKey)key;
}
playerKeys.push_back(pk);
}
}
void Settings::getNewKeyFromUser() {
SDL_Event event;
bool keypressed = false;
while( !keypressed ) {
while (!SDL_PollEvent(&event)) {}
switch(event.type) {
case SDL_KEYDOWN:
case SDL_JOYBUTTONDOWN:
case SDL_JOYAXISMOTION: {
if (input.isPressed(event)) {
int player = (actChoice >= SC_UP2) ? 1 : 0;
playerKeys[player][ (PlayerEvent)(actChoice - (player * 8) + 1) ] =
input.translate(event);
keypressed = true;
}
break;
}
}
}
}
const PlayerKeys Settings::getPlayerKeys(unsigned int player) const {
assert( player < playerKeys.size() );
PlayerKeys pk;
/*
for( std::map< SDLKey, std::string > :: const_iterator i = keyName.begin(); i != keyName.end(); ++i ) {
pk[ i->first ] = PE_UNKNOWN;
}
*/
std::map< PlayerEvent, SDLKey >::const_iterator pkiter;
for(pkiter = playerKeys[player].begin(); pkiter != playerKeys[player].end(); ++pkiter) {
pk[ pkiter->second ] = pkiter->first;
}
return pk;
}
const PlayerEventKeys & Settings::getPlayerEventKeys(unsigned int player) const {
return playerKeys[player];
}
void Settings::setKeyNames() {
/*
keyName[ (SDLKey)0 ] = "UNKNOWN";
keyName[ (SDLKey)8 ] = "BACKSPACE";
keyName[ (SDLKey)9 ] = "TAB";
keyName[ (SDLKey)12 ] = "CLEAR";
keyName[ (SDLKey)13 ] = "RETURN";
keyName[ (SDLKey)19 ] = "PAUSE";
keyName[ (SDLKey)27 ] = "ESCAPE";
keyName[ (SDLKey)32 ] = "SPACE";
keyName[ (SDLKey)33 ] = "EXCLAIM";
keyName[ (SDLKey)34 ] = "QUOTEDBL";
keyName[ (SDLKey)35 ] = "HASH";
keyName[ (SDLKey)36 ] = "DOLLAR";
keyName[ (SDLKey)38 ] = "AMPERSAND";
keyName[ (SDLKey)39 ] = "QUOTE";
keyName[ (SDLKey)40 ] = "LEFTPAREN";
keyName[ (SDLKey)41 ] = "RIGHTPAREN";
keyName[ (SDLKey)42 ] = "ASTERISK";
keyName[ (SDLKey)43 ] = "PLUS";
keyName[ (SDLKey)44 ] = "COMMA";
keyName[ (SDLKey)45 ] = "MINUS";
keyName[ (SDLKey)46 ] = "PERIOD";
keyName[ (SDLKey)47 ] = "SLASH";
keyName[ (SDLKey)48 ] = "0";
keyName[ (SDLKey)49 ] = "1";
keyName[ (SDLKey)50 ] = "2";
keyName[ (SDLKey)51 ] = "3";
keyName[ (SDLKey)52 ] = "4";
keyName[ (SDLKey)53 ] = "5";
keyName[ (SDLKey)54 ] = "6";
keyName[ (SDLKey)55 ] = "7";
keyName[ (SDLKey)56 ] = "8";
keyName[ (SDLKey)57 ] = "9";
keyName[ (SDLKey)58 ] = "COLON";
keyName[ (SDLKey)59 ] = "SEMICOLON";
keyName[ (SDLKey)60 ] = "LESS";
keyName[ (SDLKey)61 ] = "EQUALS";
keyName[ (SDLKey)62 ] = "GREATER";
keyName[ (SDLKey)63 ] = "QUESTION";
keyName[ (SDLKey)64 ] = "AT";
keyName[ (SDLKey)91 ] = "LEFTBRACKET";
keyName[ (SDLKey)92 ] = "BACKSLASH";
keyName[ (SDLKey)93 ] = "RIGHTBRACKET";
keyName[ (SDLKey)94 ] = "CARET";
keyName[ (SDLKey)95 ] = "UNDERSCORE";
keyName[ (SDLKey)96 ] = "BACKQUOTE";
keyName[ (SDLKey)97 ] = "a";
keyName[ (SDLKey)98 ] = "b";
keyName[ (SDLKey)99 ] = "c";
keyName[ (SDLKey)100 ] = "d";
keyName[ (SDLKey)101 ] = "e";
keyName[ (SDLKey)102 ] = "f";
keyName[ (SDLKey)103 ] = "g";
keyName[ (SDLKey)104 ] = "h";
keyName[ (SDLKey)105 ] = "i";
keyName[ (SDLKey)106 ] = "j";
keyName[ (SDLKey)107 ] = "k";
keyName[ (SDLKey)108 ] = "l";
keyName[ (SDLKey)109 ] = "m";
keyName[ (SDLKey)110 ] = "n";
keyName[ (SDLKey)111 ] = "o";
keyName[ (SDLKey)112 ] = "p";
keyName[ (SDLKey)113 ] = "q";
keyName[ (SDLKey)114 ] = "r";
keyName[ (SDLKey)115 ] = "s";
keyName[ (SDLKey)116 ] = "t";
keyName[ (SDLKey)117 ] = "u";
keyName[ (SDLKey)118 ] = "v";
keyName[ (SDLKey)119 ] = "w";
keyName[ (SDLKey)120 ] = "x";
keyName[ (SDLKey)121 ] = "y";
keyName[ (SDLKey)122 ] = "z";
keyName[ (SDLKey)127 ] = "DELETE";
keyName[ (SDLKey)160 ] = "WORLD_0";
keyName[ (SDLKey)161 ] = "WORLD_1";
keyName[ (SDLKey)162 ] = "WORLD_2";
keyName[ (SDLKey)163 ] = "WORLD_3";
keyName[ (SDLKey)164 ] = "WORLD_4";
keyName[ (SDLKey)165 ] = "WORLD_5";
keyName[ (SDLKey)166 ] = "WORLD_6";
keyName[ (SDLKey)167 ] = "WORLD_7";
keyName[ (SDLKey)168 ] = "WORLD_8";
keyName[ (SDLKey)169 ] = "WORLD_9";
keyName[ (SDLKey)170 ] = "WORLD_10";
keyName[ (SDLKey)171 ] = "WORLD_11";
keyName[ (SDLKey)172 ] = "WORLD_12";
keyName[ (SDLKey)173 ] = "WORLD_13";
keyName[ (SDLKey)174 ] = "WORLD_14";
keyName[ (SDLKey)175 ] = "WORLD_15";
keyName[ (SDLKey)176 ] = "WORLD_16";
keyName[ (SDLKey)177 ] = "WORLD_17";
keyName[ (SDLKey)178 ] = "WORLD_18";
keyName[ (SDLKey)179 ] = "WORLD_19";
keyName[ (SDLKey)180 ] = "WORLD_20";
keyName[ (SDLKey)181 ] = "WORLD_21";
keyName[ (SDLKey)182 ] = "WORLD_22";
keyName[ (SDLKey)183 ] = "WORLD_23";
keyName[ (SDLKey)184 ] = "WORLD_24";
keyName[ (SDLKey)185 ] = "WORLD_25";
keyName[ (SDLKey)186 ] = "WORLD_26";
keyName[ (SDLKey)187 ] = "WORLD_27";
keyName[ (SDLKey)188 ] = "WORLD_28";
keyName[ (SDLKey)189 ] = "WORLD_29";
keyName[ (SDLKey)190 ] = "WORLD_30";
keyName[ (SDLKey)191 ] = "WORLD_31";
keyName[ (SDLKey)192 ] = "WORLD_32";
keyName[ (SDLKey)193 ] = "WORLD_33";
keyName[ (SDLKey)194 ] = "WORLD_34";
keyName[ (SDLKey)195 ] = "WORLD_35";
keyName[ (SDLKey)196 ] = "WORLD_36";
keyName[ (SDLKey)197 ] = "WORLD_37";
keyName[ (SDLKey)198 ] = "WORLD_38";
keyName[ (SDLKey)199 ] = "WORLD_39";
keyName[ (SDLKey)200 ] = "WORLD_40";
keyName[ (SDLKey)201 ] = "WORLD_41";
keyName[ (SDLKey)202 ] = "WORLD_42";
keyName[ (SDLKey)203 ] = "WORLD_43";
keyName[ (SDLKey)204 ] = "WORLD_44";
keyName[ (SDLKey)205 ] = "WORLD_45";
keyName[ (SDLKey)206 ] = "WORLD_46";
keyName[ (SDLKey)207 ] = "WORLD_47";
keyName[ (SDLKey)208 ] = "WORLD_48";
keyName[ (SDLKey)209 ] = "WORLD_49";
keyName[ (SDLKey)210 ] = "WORLD_50";
keyName[ (SDLKey)211 ] = "WORLD_51";
keyName[ (SDLKey)212 ] = "WORLD_52";
keyName[ (SDLKey)213 ] = "WORLD_53";
keyName[ (SDLKey)214 ] = "WORLD_54";
keyName[ (SDLKey)215 ] = "WORLD_55";
keyName[ (SDLKey)216 ] = "WORLD_56";
keyName[ (SDLKey)217 ] = "WORLD_57";
keyName[ (SDLKey)218 ] = "WORLD_58";
keyName[ (SDLKey)219 ] = "WORLD_59";
keyName[ (SDLKey)220 ] = "WORLD_60";
keyName[ (SDLKey)221 ] = "WORLD_61";
keyName[ (SDLKey)222 ] = "WORLD_62";
keyName[ (SDLKey)223 ] = "WORLD_63";
keyName[ (SDLKey)224 ] = "WORLD_64";
keyName[ (SDLKey)225 ] = "WORLD_65";
keyName[ (SDLKey)226 ] = "WORLD_66";
keyName[ (SDLKey)227 ] = "WORLD_67";
keyName[ (SDLKey)228 ] = "WORLD_68";
keyName[ (SDLKey)229 ] = "WORLD_69";
keyName[ (SDLKey)230 ] = "WORLD_70";
keyName[ (SDLKey)231 ] = "WORLD_71";
keyName[ (SDLKey)232 ] = "WORLD_72";
keyName[ (SDLKey)233 ] = "WORLD_73";
keyName[ (SDLKey)234 ] = "WORLD_74";
keyName[ (SDLKey)235 ] = "WORLD_75";
keyName[ (SDLKey)236 ] = "WORLD_76";
keyName[ (SDLKey)237 ] = "WORLD_77";
keyName[ (SDLKey)238 ] = "WORLD_78";
keyName[ (SDLKey)239 ] = "WORLD_79";
keyName[ (SDLKey)240 ] = "WORLD_80";
keyName[ (SDLKey)241 ] = "WORLD_81";
keyName[ (SDLKey)242 ] = "WORLD_82";
keyName[ (SDLKey)243 ] = "WORLD_83";
keyName[ (SDLKey)244 ] = "WORLD_84";
keyName[ (SDLKey)245 ] = "WORLD_85";
keyName[ (SDLKey)246 ] = "WORLD_86";
keyName[ (SDLKey)247 ] = "WORLD_87";
keyName[ (SDLKey)248 ] = "WORLD_88";
keyName[ (SDLKey)249 ] = "WORLD_89";
keyName[ (SDLKey)250 ] = "WORLD_90";
keyName[ (SDLKey)251 ] = "WORLD_91";
keyName[ (SDLKey)252 ] = "WORLD_92";
keyName[ (SDLKey)253 ] = "WORLD_93";
keyName[ (SDLKey)254 ] = "WORLD_94";
keyName[ (SDLKey)255 ] = "WORLD_95";
keyName[ (SDLKey)256 ] = "KP0";
keyName[ (SDLKey)257 ] = "KP1";
keyName[ (SDLKey)258 ] = "KP2";
keyName[ (SDLKey)259 ] = "KP3";
keyName[ (SDLKey)260 ] = "KP4";
keyName[ (SDLKey)261 ] = "KP5";
keyName[ (SDLKey)262 ] = "KP6";
keyName[ (SDLKey)263 ] = "KP7";
keyName[ (SDLKey)264 ] = "KP8";
keyName[ (SDLKey)265 ] = "KP9";
keyName[ (SDLKey)266 ] = "KP_PERIOD";
keyName[ (SDLKey)267 ] = "KP_DIVIDE";
keyName[ (SDLKey)268 ] = "KP_MULTIPLY";
keyName[ (SDLKey)269 ] = "KP_MINUS";
keyName[ (SDLKey)270 ] = "KP_PLUS";
keyName[ (SDLKey)271 ] = "KP_ENTER";
keyName[ (SDLKey)272 ] = "KP_EQUALS";
keyName[ (SDLKey)273 ] = "UP";
keyName[ (SDLKey)274 ] = "DOWN";
keyName[ (SDLKey)275 ] = "RIGHT";
keyName[ (SDLKey)276 ] = "LEFT";
keyName[ (SDLKey)277 ] = "INSERT";
keyName[ (SDLKey)278 ] = "HOME";
keyName[ (SDLKey)279 ] = "END";
keyName[ (SDLKey)280 ] = "PAGEUP";
keyName[ (SDLKey)281 ] = "PAGEDOWN";
keyName[ (SDLKey)282 ] = "F1";
keyName[ (SDLKey)283 ] = "F2";
keyName[ (SDLKey)284 ] = "F3";
keyName[ (SDLKey)285 ] = "F4";
keyName[ (SDLKey)286 ] = "F5";
keyName[ (SDLKey)287 ] = "F6";
keyName[ (SDLKey)288 ] = "F7";
keyName[ (SDLKey)289 ] = "F8";
keyName[ (SDLKey)290 ] = "F9";
keyName[ (SDLKey)291 ] = "F10";
keyName[ (SDLKey)292 ] = "F11";
keyName[ (SDLKey)293 ] = "F12";
keyName[ (SDLKey)294 ] = "F13";
keyName[ (SDLKey)295 ] = "F14";
keyName[ (SDLKey)296 ] = "F15";
keyName[ (SDLKey)300 ] = "NUMLOCK";
keyName[ (SDLKey)301 ] = "CAPSLOCK";
keyName[ (SDLKey)302 ] = "SCROLLOCK";
keyName[ (SDLKey)303 ] = "RSHIFT";
keyName[ (SDLKey)304 ] = "LSHIFT";
keyName[ (SDLKey)305 ] = "RCTRL";
keyName[ (SDLKey)306 ] = "LCTRL";
keyName[ (SDLKey)307 ] = "RALT";
keyName[ (SDLKey)308 ] = "LALT";
keyName[ (SDLKey)309 ] = "RMETA";
keyName[ (SDLKey)310 ] = "LMETA";
keyName[ (SDLKey)311 ] = "LSUPER";
keyName[ (SDLKey)312 ] = "RSUPER";
keyName[ (SDLKey)313 ] = "MODE";
keyName[ (SDLKey)314 ] = "COMPOSE";
keyName[ (SDLKey)315 ] = "HELP";
keyName[ (SDLKey)316 ] = "PRINT";
keyName[ (SDLKey)317 ] = "SYSREQ";
keyName[ (SDLKey)318 ] = "BREAK";
keyName[ (SDLKey)319 ] = "MENU";
keyName[ (SDLKey)320 ] = "POWER";
keyName[ (SDLKey)321 ] = "EURO";
keyName[ (SDLKey)322 ] = "UNDO";
// the following entries are chosen by us... just for the mapping
keyName[ (SDLKey)1024 ] = "GPD1_L";
keyName[ (SDLKey)1025 ] = "GPD1_R";
keyName[ (SDLKey)1026 ] = "GPD1_U";
keyName[ (SDLKey)1027 ] = "GPD1_D";
keyName[ (SDLKey)1028 ] = "GPD2_L";
keyName[ (SDLKey)1029 ] = "GPD2_R";
keyName[ (SDLKey)1030 ] = "GPD2_U";
keyName[ (SDLKey)1031 ] = "GPD2_D";
keyName[ (SDLKey)1032 ] = "GPD3_L";
keyName[ (SDLKey)1033 ] = "GPD3_R";
keyName[ (SDLKey)1034 ] = "GPD3_U";
keyName[ (SDLKey)1035 ] = "GPD3_D";
keyName[ (SDLKey)1036 ] = "GPD4_L";
keyName[ (SDLKey)1037 ] = "GPD4_R";
keyName[ (SDLKey)1038 ] = "GPD4_U";
keyName[ (SDLKey)1039 ] = "GPD4_D";
keyName[ (SDLKey)1040 ] = "GPB_0";
keyName[ (SDLKey)1041 ] = "GPB_1";
keyName[ (SDLKey)1042 ] = "GPB_2";
keyName[ (SDLKey)1043 ] = "GPB_3";
keyName[ (SDLKey)1044 ] = "GPB_4";
keyName[ (SDLKey)1045 ] = "GPB_5";
keyName[ (SDLKey)1046 ] = "GPB_6";
keyName[ (SDLKey)1047 ] = "GPB_7";
keyName[ (SDLKey)1048 ] = "GPB_8";
keyName[ (SDLKey)1049 ] = "GPB_9";
keyName[ (SDLKey)1050 ] = "GPB_10";
keyName[ (SDLKey)1051 ] = "GPB_11";
keyName[ (SDLKey)1052 ] = "GPB_12";
keyName[ (SDLKey)1053 ] = "GPB_13";
keyName[ (SDLKey)1054 ] = "GPB_14";
keyName[ (SDLKey)1055 ] = "GPB_15";
*/
}