Changed AGOS to use full KeyState, not just ascii value, in key events
svn-id: r27800
This commit is contained in:
parent
dc91dcde00
commit
f445d8c800
7 changed files with 68 additions and 70 deletions
|
@ -110,8 +110,6 @@ AGOSEngine::AGOSEngine(OSystem *syst)
|
|||
|
||||
_debugger = 0;
|
||||
|
||||
_keyPressed = 0;
|
||||
|
||||
_gameFile = 0;
|
||||
_opcode = 0;
|
||||
|
||||
|
@ -958,8 +956,8 @@ GUI::Debugger *AGOSEngine::getDebugger() {
|
|||
}
|
||||
|
||||
void AGOSEngine::pause() {
|
||||
_keyPressed = 1;
|
||||
_pause = 1;
|
||||
_keyPressed.reset();
|
||||
_pause = true;
|
||||
bool ambient_status = _ambientPaused;
|
||||
bool music_status = _musicPaused;
|
||||
|
||||
|
@ -969,8 +967,8 @@ void AGOSEngine::pause() {
|
|||
|
||||
while (_pause) {
|
||||
delay(1);
|
||||
if (_keyPressed == 'p')
|
||||
_pause = 0;
|
||||
if (_keyPressed.keycode == Common::KEYCODE_p)
|
||||
_pause = false;
|
||||
}
|
||||
|
||||
_midi.pause(music_status);
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
|
||||
#include "engines/engine.h"
|
||||
|
||||
#include "common/keyboard.h"
|
||||
#include "common/rect.h"
|
||||
#include "common/util.h"
|
||||
|
||||
|
@ -216,7 +217,7 @@ protected:
|
|||
|
||||
const GameSpecificSettings *gss;
|
||||
|
||||
byte _keyPressed;
|
||||
Common::KeyState _keyPressed;
|
||||
|
||||
Common::File *_gameFile;
|
||||
|
||||
|
|
|
@ -500,10 +500,7 @@ void AGOSEngine::delay(uint amount) {
|
|||
}
|
||||
|
||||
// Make sure backspace works right (this fixes a small issue on OS X)
|
||||
if (event.kbd.keycode == Common::KEYCODE_BACKSPACE)
|
||||
_keyPressed = 8;
|
||||
else
|
||||
_keyPressed = (byte)event.kbd.ascii;
|
||||
_keyPressed = event.kbd;
|
||||
break;
|
||||
case Common::EVENT_MOUSEMOVE:
|
||||
break;
|
||||
|
|
|
@ -195,7 +195,8 @@ void AGOSEngine::waitForInput() {
|
|||
_dragAccept = 1;
|
||||
|
||||
for (;;) {
|
||||
if ((getGameType() == GType_SIMON1 || getGameType() == GType_SIMON2) && _keyPressed == 35)
|
||||
if ((getGameType() == GType_SIMON1 || getGameType() == GType_SIMON2) &&
|
||||
_keyPressed.keycode == Common::KEYCODE_HASH)
|
||||
displayBoxStars();
|
||||
if (processSpecialKeys()) {
|
||||
if ((getGameType() == GType_PP && getGameId() != GID_DIMP) ||
|
||||
|
@ -238,7 +239,6 @@ void AGOSEngine::waitForInput() {
|
|||
_dragMode = 0;
|
||||
_dragCount = 0;
|
||||
_dragEnd = 0;
|
||||
continue;
|
||||
}
|
||||
} while (!_dragEnd);
|
||||
|
||||
|
@ -472,39 +472,39 @@ bool AGOSEngine::processSpecialKeys() {
|
|||
}
|
||||
}
|
||||
|
||||
switch (_keyPressed) {
|
||||
case 17: // Up
|
||||
switch (_keyPressed.keycode) {
|
||||
case Common::KEYCODE_UP:
|
||||
if (getGameType() == GType_PP)
|
||||
_verbHitArea = 302;
|
||||
else if (getGameType() == GType_WW)
|
||||
_verbHitArea = 239;
|
||||
verbCode = true;
|
||||
break;
|
||||
case 18: // Down
|
||||
case Common::KEYCODE_DOWN:
|
||||
if (getGameType() == GType_PP)
|
||||
_verbHitArea = 304;
|
||||
else if (getGameType() == GType_WW)
|
||||
_verbHitArea = 241;
|
||||
verbCode = true;
|
||||
break;
|
||||
case 19: // Right
|
||||
case Common::KEYCODE_RIGHT:
|
||||
if (getGameType() == GType_PP)
|
||||
_verbHitArea = 303;
|
||||
else if (getGameType() == GType_WW)
|
||||
_verbHitArea = 240;
|
||||
verbCode = true;
|
||||
break;
|
||||
case 20: // Left
|
||||
case Common::KEYCODE_LEFT:
|
||||
if (getGameType() == GType_PP)
|
||||
_verbHitArea = 301;
|
||||
else if (getGameType() == GType_WW)
|
||||
_verbHitArea = 242;
|
||||
verbCode = true;
|
||||
break;
|
||||
case 27: // escape
|
||||
case Common::KEYCODE_ESCAPE:
|
||||
_exitCutscene = true;
|
||||
break;
|
||||
case 59: // F1
|
||||
case Common::KEYCODE_F1:
|
||||
if (getGameType() == GType_SIMON2) {
|
||||
vcWriteVar(5, 50);
|
||||
vcWriteVar(86, 0);
|
||||
|
@ -513,7 +513,7 @@ bool AGOSEngine::processSpecialKeys() {
|
|||
vcWriteVar(86, 0);
|
||||
}
|
||||
break;
|
||||
case 60: // F2
|
||||
case Common::KEYCODE_F2:
|
||||
if (getGameType() == GType_SIMON2) {
|
||||
vcWriteVar(5, 75);
|
||||
vcWriteVar(86, 1);
|
||||
|
@ -522,7 +522,7 @@ bool AGOSEngine::processSpecialKeys() {
|
|||
vcWriteVar(86, 1);
|
||||
}
|
||||
break;
|
||||
case 61: // F3
|
||||
case Common::KEYCODE_F3:
|
||||
if (getGameType() == GType_SIMON2) {
|
||||
vcWriteVar(5, 125);
|
||||
vcWriteVar(86, 2);
|
||||
|
@ -531,19 +531,19 @@ bool AGOSEngine::processSpecialKeys() {
|
|||
vcWriteVar(86, 2);
|
||||
}
|
||||
break;
|
||||
case 63: // F5
|
||||
case Common::KEYCODE_F5:
|
||||
if (getGameType() == GType_SIMON2 || getGameType() == GType_FF)
|
||||
_exitCutscene = true;
|
||||
break;
|
||||
case 65: // F7
|
||||
case Common::KEYCODE_F7:
|
||||
if (getGameType() == GType_FF && getBitFlag(76))
|
||||
_variableArray[254] = 70;
|
||||
break;
|
||||
case 67: // F9
|
||||
case Common::KEYCODE_F9:
|
||||
if (getGameType() == GType_FF)
|
||||
setBitFlag(73, !getBitFlag(73));
|
||||
break;
|
||||
case 37: // F12
|
||||
case Common::KEYCODE_F12:
|
||||
if (getGameType() == GType_PP && getGameId() != GID_DIMP) {
|
||||
if (!getBitFlag(110)) {
|
||||
setBitFlag(107, !getBitFlag(107));
|
||||
|
@ -551,73 +551,75 @@ bool AGOSEngine::processSpecialKeys() {
|
|||
}
|
||||
}
|
||||
break;
|
||||
case 'p':
|
||||
case Common::KEYCODE_p:
|
||||
pause();
|
||||
break;
|
||||
case 't':
|
||||
case Common::KEYCODE_t:
|
||||
if (getGameType() == GType_FF || (getGameType() == GType_SIMON2 && (getFeatures() & GF_TALKIE)) ||
|
||||
((getFeatures() & GF_TALKIE) && _language != Common::EN_ANY && _language != Common::DE_DEU)) {
|
||||
if (_speech)
|
||||
_subtitles ^= 1;
|
||||
}
|
||||
break;
|
||||
case 'v':
|
||||
case Common::KEYCODE_v:
|
||||
if (getGameType() == GType_FF || (getGameType() == GType_SIMON2 && (getFeatures() & GF_TALKIE))) {
|
||||
if (_subtitles)
|
||||
_speech ^= 1;
|
||||
}
|
||||
case '+':
|
||||
case Common::KEYCODE_PLUS:
|
||||
if (_midiEnabled) {
|
||||
_midi.setVolume(_midi.getVolume() + 16);
|
||||
}
|
||||
_mixer->setVolumeForSoundType(Audio::Mixer::kMusicSoundType, _mixer->getVolumeForSoundType(Audio::Mixer::kMusicSoundType) + 16);
|
||||
break;
|
||||
case '-':
|
||||
case Common::KEYCODE_MINUS:
|
||||
if (_midiEnabled) {
|
||||
_midi.setVolume(_midi.getVolume() - 16);
|
||||
}
|
||||
_mixer->setVolumeForSoundType(Audio::Mixer::kMusicSoundType, _mixer->getVolumeForSoundType(Audio::Mixer::kMusicSoundType) - 16);
|
||||
break;
|
||||
case 'm':
|
||||
case Common::KEYCODE_m:
|
||||
_musicPaused ^= 1;
|
||||
if (_midiEnabled) {
|
||||
_midi.pause(_musicPaused);
|
||||
}
|
||||
_mixer->setVolumeForSoundType(Audio::Mixer::kMusicSoundType, (_musicPaused) ? 0 : ConfMan.getInt("music_volume"));
|
||||
break;
|
||||
case 's':
|
||||
case Common::KEYCODE_s:
|
||||
if (getGameId() == GID_SIMON1DOS) {
|
||||
_midi._enable_sfx ^= 1;
|
||||
} else {
|
||||
_sound->effectsPause(_effectsPaused ^= 1);
|
||||
}
|
||||
break;
|
||||
case 'b':
|
||||
case Common::KEYCODE_b:
|
||||
_sound->ambientPause(_ambientPaused ^= 1);
|
||||
break;
|
||||
case 'r':
|
||||
case Common::KEYCODE_r:
|
||||
if (_debugMode)
|
||||
_startMainScript ^= 1;
|
||||
break;
|
||||
case 'o':
|
||||
case Common::KEYCODE_o:
|
||||
if (_debugMode)
|
||||
_continousMainScript ^= 1;
|
||||
break;
|
||||
case 'a':
|
||||
case Common::KEYCODE_a:
|
||||
if (_debugMode)
|
||||
_startVgaScript ^= 1;
|
||||
break;
|
||||
case 'g':
|
||||
case Common::KEYCODE_g:
|
||||
if (_debugMode)
|
||||
_continousVgaScript ^= 1;
|
||||
break;
|
||||
case 'd':
|
||||
case Common::KEYCODE_d:
|
||||
if (_debugMode)
|
||||
_dumpImages ^=1;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
_keyPressed = 0;
|
||||
_keyPressed.reset();
|
||||
return verbCode;
|
||||
}
|
||||
|
||||
|
|
|
@ -464,37 +464,37 @@ void AGOSEngine_Feeble::saveUserGame(int slot) {
|
|||
|
||||
windowPutChar(window, 0x7f);
|
||||
for (;;) {
|
||||
_keyPressed = 0;
|
||||
_keyPressed.reset();
|
||||
delay(1);
|
||||
|
||||
if (_keyPressed == 0 || _keyPressed >= 127)
|
||||
if (_keyPressed.ascii == 0 || _keyPressed.ascii >= 127)
|
||||
continue;
|
||||
|
||||
window->textColumn -= getFeebleFontSize(127);
|
||||
name[len] = 0;
|
||||
windowBackSpace(_windowArray[3]);
|
||||
|
||||
if (_keyPressed == 27) {
|
||||
_variableArray[55] = _keyPressed;
|
||||
if (_keyPressed.keycode == Common::KEYCODE_ESCAPE) {
|
||||
_variableArray[55] = 27;
|
||||
break;
|
||||
}
|
||||
if (_keyPressed == 10 || _keyPressed == 13) {
|
||||
if (_keyPressed.keycode == Common::KEYCODE_KP_ENTER || _keyPressed.keycode == Common::KEYCODE_RETURN) {
|
||||
if (!saveGame(readVariable(55), name))
|
||||
_variableArray[55] = (int16)0xFFFF;
|
||||
else
|
||||
_variableArray[55] = 0;
|
||||
break;
|
||||
}
|
||||
if (_keyPressed == 8 && len != 0) {
|
||||
if (_keyPressed.keycode == Common::KEYCODE_BACKSPACE && len != 0) {
|
||||
len--;
|
||||
byte chr = name[len];
|
||||
window->textColumn -= getFeebleFontSize(chr);
|
||||
name[len] = 0;
|
||||
windowBackSpace(_windowArray[3]);
|
||||
}
|
||||
if (_keyPressed >= 32 && window->textColumn + 26 <= window->width) {
|
||||
name[len++] = _keyPressed;
|
||||
windowPutChar(_windowArray[3], _keyPressed);
|
||||
if (_keyPressed.ascii >= 32 && window->textColumn + 26 <= window->width) {
|
||||
name[len++] = _keyPressed.ascii;
|
||||
windowPutChar(_windowArray[3], _keyPressed.ascii);
|
||||
}
|
||||
|
||||
windowPutChar(window, 0x7f);
|
||||
|
|
|
@ -257,12 +257,12 @@ restart:
|
|||
|
||||
for (;;) {
|
||||
windowPutChar(window, 128);
|
||||
_keyPressed = 0;
|
||||
_keyPressed.reset();
|
||||
|
||||
for (;;) {
|
||||
delay(10);
|
||||
if (_keyPressed && _keyPressed < 128) {
|
||||
i = _keyPressed;
|
||||
if (_keyPressed.ascii && _keyPressed.ascii < 128) {
|
||||
i = _keyPressed.ascii;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -490,16 +490,16 @@ int AGOSEngine_Elvira2::userGameGetKey(bool *b, char *buf, uint maxChar) {
|
|||
HitArea *ha;
|
||||
*b = true;
|
||||
|
||||
_keyPressed = 0;
|
||||
_keyPressed.reset();
|
||||
|
||||
for (;;) {
|
||||
_lastHitArea = NULL;
|
||||
_lastHitArea3 = NULL;
|
||||
|
||||
do {
|
||||
if (_saveLoadEdit && _keyPressed && _keyPressed < maxChar) {
|
||||
if (_saveLoadEdit && _keyPressed.ascii && _keyPressed.ascii < maxChar) {
|
||||
*b = false;
|
||||
return _keyPressed;
|
||||
return _keyPressed.ascii;
|
||||
}
|
||||
delay(10);
|
||||
} while (_lastHitArea3 == 0);
|
||||
|
@ -759,16 +759,16 @@ int AGOSEngine_Simon1::userGameGetKey(bool *b, char *buf, uint maxChar) {
|
|||
listSaveGames(buf);
|
||||
}
|
||||
|
||||
_keyPressed = 0;
|
||||
_keyPressed.reset();
|
||||
|
||||
for (;;) {
|
||||
_lastHitArea = NULL;
|
||||
_lastHitArea3 = NULL;
|
||||
|
||||
do {
|
||||
if (_saveLoadEdit && _keyPressed && _keyPressed < maxChar) {
|
||||
if (_saveLoadEdit && _keyPressed.ascii && _keyPressed.ascii < maxChar) {
|
||||
*b = false;
|
||||
return _keyPressed;
|
||||
return _keyPressed.ascii;
|
||||
}
|
||||
delay(10);
|
||||
} while (_lastHitArea3 == 0);
|
||||
|
|
|
@ -311,29 +311,29 @@ void AGOSEngine_Simon1::os1_pauseGame() {
|
|||
_system->setFeatureState(OSystem::kFeatureVirtualKeyboard, true);
|
||||
|
||||
// If all else fails, use English as fallback.
|
||||
byte keyYes = 'y';
|
||||
byte keyNo = 'n';
|
||||
Common::KeyCode keyYes = Common::KEYCODE_y;
|
||||
Common::KeyCode keyNo = Common::KEYCODE_n;
|
||||
|
||||
switch (_language) {
|
||||
case Common::RU_RUS:
|
||||
break;
|
||||
case Common::PL_POL:
|
||||
keyYes = 't';
|
||||
keyYes = Common::KEYCODE_t;
|
||||
break;
|
||||
case Common::HB_ISR:
|
||||
keyYes = 'f';
|
||||
keyYes = Common::KEYCODE_f;
|
||||
break;
|
||||
case Common::ES_ESP:
|
||||
keyYes = 's';
|
||||
keyYes = Common::KEYCODE_s;
|
||||
break;
|
||||
case Common::IT_ITA:
|
||||
keyYes = 's';
|
||||
keyYes = Common::KEYCODE_s;
|
||||
break;
|
||||
case Common::FR_FRA:
|
||||
keyYes = 'o';
|
||||
keyYes = Common::KEYCODE_o;
|
||||
break;
|
||||
case Common::DE_DEU:
|
||||
keyYes = 'j';
|
||||
keyYes = Common::KEYCODE_j;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
@ -343,17 +343,17 @@ void AGOSEngine_Simon1::os1_pauseGame() {
|
|||
delay(1);
|
||||
#ifdef _WIN32_WCE
|
||||
if (isSmartphone()) {
|
||||
if (_keyPressed) {
|
||||
if (_keyPressed == 13)
|
||||
if (_keyPressed.keycode) {
|
||||
if (_keyPressed.keycode == Common::KEYCODE_RETURN)
|
||||
shutdown();
|
||||
else
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
if (_keyPressed == keyYes || _keyPressed == (keyYes - 32))
|
||||
if (_keyPressed.keycode == keyYes)
|
||||
shutdown();
|
||||
else if (_keyPressed == keyNo || _keyPressed == (keyNo - 32))
|
||||
else if (_keyPressed.keycode == keyNo)
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue