mirror of
https://github.com/libretro/scummvm.git
synced 2025-01-19 00:15:30 +00:00
LOL/PC-98: add keyboard support
svn-id: r44564
This commit is contained in:
parent
a3fc7230eb
commit
f6de0b4ec9
@ -266,14 +266,9 @@ void LoLEngine::gui_printCharacterStats(int index, int redraw, int value) {
|
||||
if (offs)
|
||||
_screen->copyRegion(294, y, 182 + offs, y, 18, 8, 6, _screen->_curPage, Screen::CR_NO_P_CHECK);
|
||||
|
||||
Screen::FontId of;
|
||||
if (_flags.use16ColorMode)
|
||||
of = _screen->setFont(Screen::FID_SJIS_FNT);
|
||||
|
||||
Screen::FontId of = _flags.use16ColorMode ? _screen->setFont(Screen::FID_SJIS_FNT) : _screen->_currentFont;
|
||||
_screen->fprintString("%d", 200 + offs, y, col, 0, _flags.use16ColorMode ? 2 : 6, value);
|
||||
|
||||
if (_flags.use16ColorMode)
|
||||
_screen->setFont(of);
|
||||
_screen->setFont(of);
|
||||
}
|
||||
|
||||
void LoLEngine::gui_changeCharacterStats(int charNum) {
|
||||
@ -815,13 +810,9 @@ void LoLEngine::gui_updateInput() {
|
||||
inputFlag = 0;
|
||||
}
|
||||
|
||||
switch (inputFlag) {
|
||||
case 43:
|
||||
case 61:
|
||||
// space or enter
|
||||
if (inputFlag == _keyMap[Common::KEYCODE_SPACE] || inputFlag == _keyMap[Common::KEYCODE_RETURN]) {
|
||||
snd_stopSpeech(true);
|
||||
break;
|
||||
case 55:
|
||||
} else if (inputFlag == _keyMap[Common::KEYCODE_SLASH]) {
|
||||
if (_weaponsDisabled || _availableSpells[1] == -1)
|
||||
return;
|
||||
|
||||
@ -829,13 +820,7 @@ void LoLEngine::gui_updateInput() {
|
||||
if (_availableSpells[++_selectedSpell] == -1)
|
||||
_selectedSpell = 0;
|
||||
gui_highlightSelectedSpell(true);
|
||||
|
||||
gui_drawAllCharPortraitsWithStats();
|
||||
break;
|
||||
case 0x71a:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -852,55 +837,10 @@ void LoLEngine::gui_triggerEvent(int eventType) {
|
||||
} else {
|
||||
evt.type = Common::EVENT_KEYDOWN;
|
||||
|
||||
switch (eventType) {
|
||||
case 96:
|
||||
evt.kbd.keycode = Common::KEYCODE_UP;
|
||||
break;
|
||||
case 102:
|
||||
evt.kbd.keycode = Common::KEYCODE_RIGHT;
|
||||
break;
|
||||
case 97:
|
||||
evt.kbd.keycode = Common::KEYCODE_DOWN;
|
||||
break;
|
||||
case 92:
|
||||
evt.kbd.keycode = Common::KEYCODE_LEFT;
|
||||
break;
|
||||
case 91:
|
||||
evt.kbd.keycode = Common::KEYCODE_HOME;
|
||||
break;
|
||||
case 101:
|
||||
evt.kbd.keycode = Common::KEYCODE_PAGEUP;
|
||||
break;
|
||||
case 112:
|
||||
evt.kbd.keycode = Common::KEYCODE_F1;
|
||||
break;
|
||||
case 113:
|
||||
evt.kbd.keycode = Common::KEYCODE_F2;
|
||||
break;
|
||||
case 114:
|
||||
evt.kbd.keycode = Common::KEYCODE_F3;
|
||||
break;
|
||||
case 25:
|
||||
evt.kbd.keycode = Common::KEYCODE_o;
|
||||
break;
|
||||
case 20:
|
||||
evt.kbd.keycode = Common::KEYCODE_r;
|
||||
break;
|
||||
case 110:
|
||||
evt.kbd.keycode = Common::KEYCODE_ESCAPE;
|
||||
break;
|
||||
case 43:
|
||||
evt.kbd.keycode = Common::KEYCODE_SPACE;
|
||||
break;
|
||||
case 61:
|
||||
evt.kbd.keycode = Common::KEYCODE_RETURN;
|
||||
break;
|
||||
case 55:
|
||||
evt.kbd.keycode = Common::KEYCODE_SLASH;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
for (Common::HashMap<int, int16>::const_iterator c = _keyMap.begin(); c != _keyMap.end(); ++c) {
|
||||
if (c->_value == eventType)
|
||||
evt.kbd.keycode = (Common::KeyCode) c->_key;
|
||||
}
|
||||
}
|
||||
|
||||
removeInputTop();
|
||||
@ -2343,9 +2283,7 @@ int GUI_LoL::runMenu(Menu &menu) {
|
||||
// a menu has scroll buttons or slider bars.
|
||||
uint8 hasSpecialButtons = 0;
|
||||
|
||||
Screen::FontId of;
|
||||
if (_vm->gameFlags().use16ColorMode)
|
||||
of = _screen->setFont(Screen::FID_SJIS_FNT);
|
||||
Screen::FontId of = _vm->gameFlags().use16ColorMode ? _screen->setFont(Screen::FID_SJIS_FNT) : _screen->_currentFont;
|
||||
|
||||
while (_displayMenu) {
|
||||
_vm->_mouseX = _vm->_mouseY = 0;
|
||||
@ -2554,8 +2492,7 @@ int GUI_LoL::runMenu(Menu &menu) {
|
||||
_newMenu = 0;
|
||||
}
|
||||
|
||||
if (_vm->gameFlags().use16ColorMode)
|
||||
_screen->setFont(of);
|
||||
_screen->setFont(of);
|
||||
|
||||
return _menuResult;
|
||||
}
|
||||
|
@ -202,6 +202,8 @@ Common::Error KyraEngine_v1::init() {
|
||||
_gameToLoad = -1;
|
||||
}
|
||||
|
||||
setupKeyMap();
|
||||
|
||||
// Prevent autosave on game startup
|
||||
_lastAutosave = _system->getMillis();
|
||||
|
||||
@ -212,6 +214,7 @@ KyraEngine_v1::~KyraEngine_v1() {
|
||||
for (Common::Array<const Opcode*>::iterator i = _opcodes.begin(); i != _opcodes.end(); ++i)
|
||||
delete *i;
|
||||
_opcodes.clear();
|
||||
_keyMap.clear();
|
||||
|
||||
delete _res;
|
||||
delete _staticres;
|
||||
@ -278,62 +281,8 @@ int KyraEngine_v1::checkInput(Button *buttonList, bool mainLoop, int eventFlag)
|
||||
} else if (event.kbd.keycode == 'q') {
|
||||
quitGame();
|
||||
}
|
||||
} else {
|
||||
switch (event.kbd.keycode) {
|
||||
case Common::KEYCODE_SPACE:
|
||||
keys = 61;
|
||||
break;
|
||||
case Common::KEYCODE_RETURN:
|
||||
keys = 43;
|
||||
break;
|
||||
case Common::KEYCODE_UP:
|
||||
case Common::KEYCODE_KP8:
|
||||
keys = 96;
|
||||
break;
|
||||
case Common::KEYCODE_RIGHT:
|
||||
case Common::KEYCODE_KP6:
|
||||
keys = 102;
|
||||
break;
|
||||
case Common::KEYCODE_DOWN:
|
||||
case Common::KEYCODE_KP2:
|
||||
keys = 97;
|
||||
break;
|
||||
case Common::KEYCODE_LEFT:
|
||||
case Common::KEYCODE_KP4:
|
||||
keys = 92;
|
||||
break;
|
||||
case Common::KEYCODE_HOME:
|
||||
case Common::KEYCODE_KP7:
|
||||
keys = 91;
|
||||
break;
|
||||
case Common::KEYCODE_PAGEUP:
|
||||
case Common::KEYCODE_KP9:
|
||||
keys = 101;
|
||||
break;
|
||||
case Common::KEYCODE_F1:
|
||||
keys = 112;
|
||||
break;
|
||||
case Common::KEYCODE_F2:
|
||||
keys = 113;
|
||||
break;
|
||||
case Common::KEYCODE_F3:
|
||||
keys = 114;
|
||||
break;
|
||||
case Common::KEYCODE_o:
|
||||
keys = 25;
|
||||
break;
|
||||
case Common::KEYCODE_r:
|
||||
keys = 20;
|
||||
break;
|
||||
case Common::KEYCODE_SLASH:
|
||||
keys = 55;
|
||||
break;
|
||||
case Common::KEYCODE_ESCAPE:
|
||||
keys = 110;
|
||||
break;
|
||||
default:
|
||||
keys = 0;
|
||||
}
|
||||
} else {
|
||||
keys = _keyMap[event.kbd.keycode];
|
||||
|
||||
// When we got an keypress, which we might need to handle,
|
||||
// break the event loop and pass it to GUI code.
|
||||
@ -398,6 +347,26 @@ int KyraEngine_v1::checkInput(Button *buttonList, bool mainLoop, int eventFlag)
|
||||
}
|
||||
}
|
||||
|
||||
void KyraEngine_v1::setupKeyMap() {
|
||||
static const Common::KeyCode keyboardEvents[] = {
|
||||
Common::KEYCODE_SPACE, Common::KEYCODE_RETURN, Common::KEYCODE_UP, Common::KEYCODE_KP8,
|
||||
Common::KEYCODE_RIGHT, Common::KEYCODE_KP6, Common::KEYCODE_DOWN, Common::KEYCODE_KP2,
|
||||
Common::KEYCODE_LEFT, Common::KEYCODE_KP4, Common::KEYCODE_HOME, Common::KEYCODE_KP7,
|
||||
Common::KEYCODE_PAGEUP, Common::KEYCODE_KP9, Common::KEYCODE_F1, Common::KEYCODE_F2,
|
||||
Common::KEYCODE_F3, Common::KEYCODE_o, Common::KEYCODE_r, Common::KEYCODE_SLASH,
|
||||
Common::KEYCODE_ESCAPE
|
||||
};
|
||||
|
||||
static const int16 keyCodesDOS[] = { 61, 43, 96, 96, 102, 102, 97, 97, 92, 92, 91, 91, 101, 101, 112, 113, 114, 25, 20, 55, 110};
|
||||
static const int16 keyCodesPC98[] = { 53, 29, 68, 68, 73, 73, 72, 72, 71, 71, 67, 67, 69, 69, 99, 100, 101, 25, 20, 55, 1 };
|
||||
|
||||
const int16 *keyCodes = _flags.platform == Common::kPlatformPC98 ? keyCodesPC98 : keyCodesDOS;
|
||||
_keyMap.clear();
|
||||
|
||||
for (int i = 0; i < ARRAYSIZE(keyboardEvents); i++)
|
||||
_keyMap[keyboardEvents[i]] = keyCodes[i];
|
||||
}
|
||||
|
||||
void KyraEngine_v1::updateInput() {
|
||||
Common::Event event;
|
||||
|
||||
|
@ -205,6 +205,7 @@ protected:
|
||||
Debugger *_debugger;
|
||||
|
||||
// input
|
||||
void setupKeyMap();
|
||||
void updateInput();
|
||||
int checkInput(Button *buttonList, bool mainLoop = false, int eventFlag = 0x8000);
|
||||
void removeInputTop();
|
||||
@ -222,6 +223,7 @@ protected:
|
||||
operator Common::Event() const { return event; }
|
||||
};
|
||||
Common::List<Event> _eventList;
|
||||
Common::HashMap<int, int16> _keyMap;
|
||||
|
||||
// config specific
|
||||
virtual void registerDefaultSettings();
|
||||
|
@ -4001,7 +4001,7 @@ void LoLEngine::displayAutomap() {
|
||||
for (int i = 0; i < 1024; i++)
|
||||
_levelBlockProperties[i].flags |= 7;
|
||||
_mapUpdateNeeded = true;
|
||||
} else if (f == 0x6e) {
|
||||
} else if (f == _keyMap[Common::KEYCODE_ESCAPE]) {
|
||||
exitAutomap = true;
|
||||
}
|
||||
|
||||
@ -4239,23 +4239,28 @@ void LoLEngine::drawMapPage(int pageNum) {
|
||||
}
|
||||
|
||||
bool LoLEngine::automapProcessButtons(int inputFlag) {
|
||||
if (inputFlag != 199)
|
||||
return false;
|
||||
|
||||
int r = -1;
|
||||
if (posWithinRect(_mouseX, _mouseY, 252, 175, 273, 200))
|
||||
if (inputFlag == _keyMap[Common::KEYCODE_RIGHT] || inputFlag == _keyMap[Common::KEYCODE_KP6]) {
|
||||
r = 0;
|
||||
else if (posWithinRect(_mouseX, _mouseY, 231, 175, 252, 200))
|
||||
} else if (inputFlag == _keyMap[Common::KEYCODE_LEFT] || inputFlag == _keyMap[Common::KEYCODE_KP4]) {
|
||||
r = 1;
|
||||
else if (posWithinRect(_mouseX, _mouseY, 275, 175, 315, 197))
|
||||
r = 2;
|
||||
} else if (inputFlag == 199) {
|
||||
if (posWithinRect(_mouseX, _mouseY, 252, 175, 273, 200))
|
||||
r = 0;
|
||||
else if (posWithinRect(_mouseX, _mouseY, 231, 175, 252, 200))
|
||||
r = 1;
|
||||
else if (posWithinRect(_mouseX, _mouseY, 275, 175, 315, 197))
|
||||
r = 2;
|
||||
|
||||
printMapExitButtonText();
|
||||
printMapExitButtonText();
|
||||
|
||||
while (inputFlag == 199 || inputFlag == 200) {
|
||||
inputFlag = checkInput(0, false);
|
||||
removeInputTop();
|
||||
delay(_tickLength);
|
||||
while (inputFlag == 199 || inputFlag == 200) {
|
||||
inputFlag = checkInput(0, false);
|
||||
removeInputTop();
|
||||
delay(_tickLength);
|
||||
}
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (r == 0) {
|
||||
|
@ -1234,28 +1234,7 @@ uint16 TIMInterpreter_LoL::processDialogue() {
|
||||
if (e)
|
||||
_vm->gui_notifyButtonListChanged();
|
||||
|
||||
switch (e) {
|
||||
case 43:
|
||||
case 61:
|
||||
_vm->snd_stopSpeech(true);
|
||||
//_dlgTimer = 0;
|
||||
res = _dialogueHighlightedButton + 1;
|
||||
break;
|
||||
|
||||
case 92:
|
||||
case 97:
|
||||
if (_dialogueNumButtons > 1 && _dialogueHighlightedButton > 0)
|
||||
_dialogueHighlightedButton--;
|
||||
break;
|
||||
|
||||
case 96:
|
||||
case 102:
|
||||
if (_dialogueNumButtons > 1 && _dialogueHighlightedButton < (_dialogueNumButtons - 1))
|
||||
_dialogueHighlightedButton++;
|
||||
break;
|
||||
|
||||
case 200:
|
||||
case 202:
|
||||
if (e == 200 || e == 202) {
|
||||
x = _dialogueButtonPosX;
|
||||
|
||||
for (int i = 0; i < _dialogueNumButtons; i++) {
|
||||
@ -1267,10 +1246,15 @@ uint16 TIMInterpreter_LoL::processDialogue() {
|
||||
}
|
||||
x += _dialogueButtonXoffs;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
} else if (e == _vm->_keyMap[Common::KEYCODE_SPACE] || e == _vm->_keyMap[Common::KEYCODE_RETURN]) {
|
||||
_vm->snd_stopSpeech(true);
|
||||
res = _dialogueHighlightedButton + 1;
|
||||
} else if (e == _vm->_keyMap[Common::KEYCODE_LEFT] || e == _vm->_keyMap[Common::KEYCODE_DOWN]) {
|
||||
if (_dialogueNumButtons > 1 && _dialogueHighlightedButton > 0)
|
||||
_dialogueHighlightedButton--;
|
||||
} else if (e == _vm->_keyMap[Common::KEYCODE_RIGHT] || e == _vm->_keyMap[Common::KEYCODE_UP]) {
|
||||
if (_dialogueNumButtons > 1 && _dialogueHighlightedButton < (_dialogueNumButtons - 1))
|
||||
_dialogueHighlightedButton++;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -169,7 +169,7 @@ void TextDisplayer_LoL::printDialogueText(int dim, char *str, EMCState *script,
|
||||
}
|
||||
|
||||
int cp = _screen->setCurPage(0);
|
||||
Screen::FontId of = _screen->setFont(Screen::FID_9_FNT);
|
||||
Screen::FontId of = _screen->setFont(_vm->gameFlags().use16ColorMode ? Screen::FID_SJIS_FNT : Screen::FID_9_FNT);
|
||||
|
||||
preprocessString(str, script, paramList, paramIndex);
|
||||
_numCharsTotal = strlen(_dialogueBuffer);
|
||||
@ -581,7 +581,6 @@ void TextDisplayer_LoL::printLine(char *str) {
|
||||
|
||||
int n2 = 0;
|
||||
int n1 = s - 1;
|
||||
//bool ct = false;
|
||||
|
||||
while (n1 > 0) {
|
||||
//cut off line after last space
|
||||
@ -741,26 +740,15 @@ void TextDisplayer_LoL::textPageBreak() {
|
||||
|
||||
_vm->gui_notifyButtonListChanged();
|
||||
|
||||
switch (inputFlag) {
|
||||
case 43:
|
||||
case 61:
|
||||
if (inputFlag == _vm->_keyMap[Common::KEYCODE_SPACE] || inputFlag == _vm->_keyMap[Common::KEYCODE_RETURN]) {
|
||||
loop = false;
|
||||
break;
|
||||
|
||||
case 199:
|
||||
case 201:
|
||||
} else if (inputFlag == 199 || inputFlag == 201) {
|
||||
if (_vm->posWithinRect(_vm->_mouseX, _vm->_mouseY, x, y, x + 74, y + 9))
|
||||
target = true;
|
||||
break;
|
||||
|
||||
case 200:
|
||||
case 202:
|
||||
} else if (inputFlag == 199 || inputFlag == 201) {
|
||||
if (target)
|
||||
loop = false;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
} while (loop);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user